From ba07bf29bcbb510e55dfd7152460412c507e5179 Mon Sep 17 00:00:00 2001 From: Amiya Behera Date: Sat, 27 Jul 2024 17:19:49 +0530 Subject: [PATCH] substrate node template --- .gitignore | 2 + CODEOWNERS | 1 + Cargo.lock | 15197 +++-------- Cargo.toml | 409 +- Containerfile | 31 + LICENSE | 1 + README.md | 323 +- benchmarking/frame-weight-pallet-template.hbs | 136 - .../frame-weight-runtime-template-xcm.hbs | 79 - .../frame-weight-runtime-template.hbs | 79 - client/consensus/Cargo.toml | 82 - client/consensus/src/collators.rs | 458 - client/consensus/src/collators/basic.rs | 304 - client/consensus/src/collators/lookahead.rs | 543 - .../consensus/src/consensus_orchestrator.rs | 63 - client/consensus/src/lib.rs | 245 - client/consensus/src/manual_seal.rs | 239 - client/consensus/src/tests.rs | 674 - client/manual-xcm/Cargo.toml | 21 - client/manual-xcm/src/lib.rs | 157 - client/node-common/Cargo.toml | 90 - client/node-common/src/command.rs | 60 - client/node-common/src/lib.rs | 19 - client/node-common/src/service.rs | 939 - client/services-payment/Cargo.toml | 22 - client/services-payment/src/lib.rs | 94 - client/stream-payment/Cargo.toml | 23 - client/stream-payment/src/lib.rs | 107 - container-chains/nodes/frontier/Cargo.toml | 140 - container-chains/nodes/frontier/build.rs | 23 - .../nodes/frontier/src/chain_spec.rs | 224 - container-chains/nodes/frontier/src/cli.rs | 207 - .../nodes/frontier/src/command.rs | 523 - container-chains/nodes/frontier/src/main.rs | 29 - .../nodes/frontier/src/rpc/eth.rs | 94 - .../nodes/frontier/src/rpc/finality.rs | 112 - .../nodes/frontier/src/rpc/mod.rs | 462 - .../nodes/frontier/src/service.rs | 530 - container-chains/nodes/simple/Cargo.toml | 147 - container-chains/nodes/simple/build.rs | 23 - .../nodes/simple/src/chain_spec.rs | 224 - container-chains/nodes/simple/src/cli.rs | 201 - container-chains/nodes/simple/src/command.rs | 531 - container-chains/nodes/simple/src/main.rs | 29 - container-chains/nodes/simple/src/rpc.rs | 121 - container-chains/nodes/simple/src/service.rs | 328 - .../runtime-templates/frontier/Cargo.toml | 310 - .../runtime-templates/frontier/build.rs | 25 - .../src/impl_on_charge_evm_transaction.rs | 64 - .../runtime-templates/frontier/src/lib.rs | 1558 -- .../frontier/src/migrations.rs | 62 - .../frontier/src/precompiles.rs | 113 - .../src/weights/cumulus_pallet_dmp_queue.rs | 133 - .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 152 - .../frontier/src/weights/frame_system.rs | 185 - .../frontier/src/weights/mod.rs | 39 - .../frontier/src/weights/pallet_asset_rate.rs | 90 - .../frontier/src/weights/pallet_assets.rs | 489 - .../src/weights/pallet_author_inherent.rs | 74 - .../frontier/src/weights/pallet_balances.rs | 149 - .../weights/pallet_cc_authorities_noting.rs | 97 - .../weights/pallet_foreign_asset_creator.rs | 129 - .../src/weights/pallet_message_queue.rs | 186 - .../frontier/src/weights/pallet_multisig.rs | 172 - .../frontier/src/weights/pallet_proxy.rs | 227 - .../frontier/src/weights/pallet_sudo.rs | 99 - .../frontier/src/weights/pallet_timestamp.rs | 77 - .../frontier/src/weights/pallet_tx_pause.rs | 79 - .../frontier/src/weights/pallet_utility.rs | 121 - .../frontier/src/weights/pallet_xcm.rs | 361 - .../weights/pallet_xcm_benchmarks::generic.rs | 348 - .../src/weights/pallet_xcm_executor_utils.rs | 99 - .../frontier/src/weights/xcm/mod.rs | 251 - .../xcm/pallet_xcm_benchmarks_generic.rs | 348 - .../frontier/src/xcm_config.rs | 500 - .../runtime-templates/simple/Cargo.toml | 311 - .../runtime-templates/simple/build.rs | 25 - .../rustc-ice-2024-05-26T13_06_00-128722.txt | 78 - .../rustc-ice-2024-05-26T13_06_14-128872.txt | 78 - .../rustc-ice-2024-05-26T13_07_54-129055.txt | 78 - .../rustc-ice-2024-05-26T13_08_53-129174.txt | 78 - .../rustc-ice-2024-05-26T13_11_44-129588.txt | 78 - .../rustc-ice-2024-05-26T13_11_57-129706.txt | 78 - .../runtime-templates/simple/src/lib.rs | 1311 - .../simple/src/migrations.rs | 58 - .../src/weights/cumulus_pallet_dmp_queue.rs | 133 - .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 152 - .../simple/src/weights/frame_system.rs | 185 - .../simple/src/weights/mod.rs | 39 - .../simple/src/weights/pallet_asset_rate.rs | 90 - .../simple/src/weights/pallet_assets.rs | 489 - .../src/weights/pallet_author_inherent.rs | 74 - .../simple/src/weights/pallet_balances.rs | 149 - .../weights/pallet_cc_authorities_noting.rs | 97 - .../weights/pallet_foreign_asset_creator.rs | 113 - .../src/weights/pallet_message_queue.rs | 186 - .../simple/src/weights/pallet_multisig.rs | 172 - .../simple/src/weights/pallet_proxy.rs | 229 - .../simple/src/weights/pallet_sudo.rs | 99 - .../simple/src/weights/pallet_timestamp.rs | 77 - .../simple/src/weights/pallet_tx_pause.rs | 79 - .../simple/src/weights/pallet_utility.rs | 121 - .../simple/src/weights/pallet_xcm.rs | 361 - .../weights/pallet_xcm_benchmarks::generic.rs | 348 - .../src/weights/pallet_xcm_executor_utils.rs | 99 - .../simple/src/weights/xcm/mod.rs | 251 - .../xcm/pallet_xcm_benchmarks_generic.rs | 348 - .../simple/src/xcm_config.rs | 425 - custom-pallets/department-funding/src/mock.rs | 1 - .../positive-externality/src/mock.rs | 1 - custom-pallets/profile-validation/src/mock.rs | 1 - custom-pallets/project-tips/src/mock.rs | 1 - .../schelling-game-shared/src/mock.rs | 1 - .../container-chain-evm-template.Dockerfile | 36 - ...container-chain-simple-template.Dockerfile | 36 - docker/tanssi-srtool.Dockerfile | 11 - docker/tanssi.Dockerfile | 40 - docs/benchmarking.md | 147 - docs/clippy.md | 28 - docs/keep_db_flowchart.dot | 52 - docs/keep_db_flowchart.png | Bin 906350 -> 0 bytes docs/rust-setup.md | 105 +- flake.lock | 43 + flake.nix | 22 + media/tanssi.png | Bin 114897 -> 0 bytes node/Cargo.toml | 183 +- node/build.rs | 20 +- node/src/benchmarking.rs | 161 + node/src/chain_spec.rs | 117 + node/src/chain_spec/dancebox.rs | 290 - node/src/chain_spec/flashbox.rs | 288 - node/src/chain_spec/mod.rs | 132 - node/src/cli.rs | 414 +- node/src/command.rs | 938 +- node/src/container_chain_monitor.rs | 326 - node/src/container_chain_spawner.rs | 1220 - node/src/main.rs | 26 +- node/src/rpc.rs | 138 +- node/src/service.rs | 1664 +- node/src/tests/mod.rs | 118 - node/src/tests/panics.rs | 283 - pallets/author-noting/Cargo.toml | 107 - .../author-noting/rpc/runtime-api/Cargo.toml | 24 - .../author-noting/rpc/runtime-api/src/lib.rs | 31 - pallets/author-noting/src/benchmarks.rs | 105 - pallets/author-noting/src/lib.rs | 435 - pallets/author-noting/src/mock.rs | 378 - pallets/author-noting/src/mock_proof.rs | 7139 ------ pallets/author-noting/src/tests.rs | 791 - pallets/author-noting/src/weights.rs | 155 - pallets/authority-assignment/Cargo.toml | 52 - pallets/authority-assignment/src/lib.rs | 113 - pallets/authority-assignment/src/mock.rs | 154 - pallets/authority-assignment/src/tests.rs | 405 - pallets/authority-mapping/Cargo.toml | 43 - pallets/authority-mapping/src/lib.rs | 94 - pallets/authority-mapping/src/mock.rs | 89 - pallets/authority-mapping/src/tests.rs | 69 - pallets/collator-assignment/Cargo.toml | 68 - .../rpc/runtime-api/Cargo.toml | 26 - .../rpc/runtime-api/src/lib.rs | 41 - pallets/collator-assignment/src/assignment.rs | 494 - .../collator-assignment/src/benchmarking.rs | 123 - pallets/collator-assignment/src/lib.rs | 533 - pallets/collator-assignment/src/mock.rs | 400 - pallets/collator-assignment/src/tests.rs | 1429 -- .../src/tests/assign_full.rs | 142 - .../src/tests/prioritize_invulnerables.rs | 186 - .../src/tests/select_chains.rs | 176 - pallets/collator-assignment/src/weights.rs | 139 - pallets/configuration/Cargo.toml | 59 - pallets/configuration/src/benchmarks.rs | 34 - pallets/configuration/src/lib.rs | 597 - pallets/configuration/src/mock.rs | 120 - pallets/configuration/src/tests.rs | 446 - pallets/configuration/src/weights.rs | 99 - pallets/data-preservers/Cargo.toml | 79 - pallets/data-preservers/src/benchmarks.rs | 59 - pallets/data-preservers/src/lib.rs | 172 - pallets/data-preservers/src/mock.rs | 240 - pallets/data-preservers/src/tests.rs | 198 - pallets/data-preservers/src/weights.rs | 103 - pallets/inflation-rewards/Cargo.toml | 79 - pallets/inflation-rewards/src/lib.rs | 285 - pallets/inflation-rewards/src/mock.rs | 229 - pallets/inflation-rewards/src/tests.rs | 249 - pallets/initializer/Cargo.toml | 46 - pallets/initializer/src/lib.rs | 141 - pallets/initializer/src/mock.rs | 107 - pallets/initializer/src/tests.rs | 49 - pallets/invulnerables/Cargo.toml | 73 - pallets/invulnerables/src/benchmarking.rs | 245 - pallets/invulnerables/src/lib.rs | 307 - pallets/invulnerables/src/mock.rs | 209 - pallets/invulnerables/src/tests.rs | 147 - pallets/invulnerables/src/weights.rs | 195 - pallets/pooled-staking/Cargo.toml | 79 - pallets/pooled-staking/README.md | 39 - pallets/pooled-staking/src/benchmarking.rs | 618 - pallets/pooled-staking/src/calls.rs | 621 - pallets/pooled-staking/src/candidate.rs | 202 - pallets/pooled-staking/src/lib.rs | 640 - pallets/pooled-staking/src/mock.rs | 567 - pallets/pooled-staking/src/pools.rs | 564 - .../pooled-staking/src/tests/candidates.rs | 510 - .../src/tests/delegator_flow.rs | 571 - .../src/tests/manual_rewards.rs | 158 - pallets/pooled-staking/src/tests/mod.rs | 588 - pallets/pooled-staking/src/tests/rebalance.rs | 258 - pallets/pooled-staking/src/tests/rewards.rs | 637 - pallets/pooled-staking/src/traits.rs | 101 - pallets/pooled-staking/src/weights.rs | 368 - pallets/registrar/Cargo.toml | 71 - pallets/registrar/rpc/runtime-api/Cargo.toml | 32 - pallets/registrar/rpc/runtime-api/src/lib.rs | 54 - pallets/registrar/src/benchmarks.rs | 452 - pallets/registrar/src/lib.rs | 1142 - pallets/registrar/src/mock.rs | 311 - pallets/registrar/src/tests.rs | 1370 - pallets/registrar/src/weights.rs | 467 - pallets/services-payment/Cargo.toml | 67 - .../rpc/runtime-api/Cargo.toml | 24 - .../rpc/runtime-api/src/lib.rs | 30 - pallets/services-payment/src/benchmarks.rs | 233 - pallets/services-payment/src/lib.rs | 640 - pallets/services-payment/src/mock.rs | 170 - pallets/services-payment/src/tests.rs | 509 - pallets/services-payment/src/weights.rs | 259 - pallets/stream-payment/Cargo.toml | 76 - pallets/stream-payment/README.md | 57 - .../stream-payment/rpc/runtime-api/Cargo.toml | 31 - .../stream-payment/rpc/runtime-api/src/lib.rs | 65 - pallets/stream-payment/src/benchmarking.rs | 436 - pallets/stream-payment/src/lib.rs | 1036 - pallets/stream-payment/src/mock.rs | 484 - pallets/stream-payment/src/tests.rs | 1873 -- pallets/stream-payment/src/weights.rs | 317 - pallets/template/Cargo.toml | 58 + pallets/template/README.md | 1 + pallets/template/src/benchmarking.rs | 35 + pallets/template/src/lib.rs | 202 + pallets/template/src/mock.rs | 58 + pallets/template/src/tests.rs | 27 + pallets/template/src/weights.rs | 90 + pallets/xcm-core-buyer/Cargo.toml | 86 - pallets/xcm-core-buyer/src/benchmarks.rs | 204 - pallets/xcm-core-buyer/src/lib.rs | 747 - pallets/xcm-core-buyer/src/mock.rs | 362 - pallets/xcm-core-buyer/src/tests.rs | 517 - pallets/xcm-core-buyer/src/weights.rs | 296 - pnpm-lock.yaml | 7619 ------ pnpm-workspace.yaml | 3 - primitives/author-noting-inherent/Cargo.toml | 79 - .../author-noting-inherent/src/client_side.rs | 78 - primitives/author-noting-inherent/src/lib.rs | 53 - primitives/author-noting-inherent/src/mock.rs | 176 - .../author-noting-inherent/src/tests.rs | 352 - .../container-chain-genesis-data/Cargo.toml | 61 - .../container-chain-genesis-data/src/json.rs | 290 - .../container-chain-genesis-data/src/lib.rs | 168 - primitives/maths/Cargo.toml | 25 - primitives/maths/src/lib.rs | 116 - primitives/traits/Cargo.toml | 40 - primitives/traits/src/lib.rs | 205 - runtime/Cargo.toml | 151 + runtime/build.rs | 10 + runtime/common/Cargo.toml | 109 - runtime/common/src/benchmarking.rs | 37 - runtime/common/src/lib.rs | 19 - runtime/common/src/migrations.rs | 505 - runtime/dancebox/Cargo.toml | 399 - runtime/dancebox/build.rs | 25 - runtime/dancebox/src/lib.rs | 2413 -- .../src/weights/cumulus_pallet_dmp_queue.rs | 133 - .../cumulus_pallet_parachain_system.rs | 80 - .../src/weights/cumulus_pallet_xcmp_queue.rs | 152 - runtime/dancebox/src/weights/frame_system.rs | 185 - runtime/dancebox/src/weights/mod.rs | 50 - .../dancebox/src/weights/pallet_asset_rate.rs | 90 - runtime/dancebox/src/weights/pallet_assets.rs | 489 - .../src/weights/pallet_author_inherent.rs | 76 - .../src/weights/pallet_author_noting.rs | 102 - .../dancebox/src/weights/pallet_balances.rs | 149 - .../src/weights/pallet_collator_assignment.rs | 101 - .../src/weights/pallet_configuration.rs | 74 - .../src/weights/pallet_data_preservers.rs | 76 - .../weights/pallet_foreign_asset_creator.rs | 113 - .../dancebox/src/weights/pallet_identity.rs | 419 - .../src/weights/pallet_invulnerables.rs | 120 - .../src/weights/pallet_message_queue.rs | 186 - .../dancebox/src/weights/pallet_multisig.rs | 172 - .../src/weights/pallet_pooled_staking.rs | 205 - runtime/dancebox/src/weights/pallet_proxy.rs | 231 - .../dancebox/src/weights/pallet_registrar.rs | 267 - .../src/weights/pallet_relay_storage_roots.rs | 72 - .../src/weights/pallet_services_payment.rs | 152 - .../dancebox/src/weights/pallet_session.rs | 83 - .../src/weights/pallet_stream_payment.rs | 179 - runtime/dancebox/src/weights/pallet_sudo.rs | 99 - .../dancebox/src/weights/pallet_timestamp.rs | 77 - .../dancebox/src/weights/pallet_treasury.rs | 198 - .../dancebox/src/weights/pallet_tx_pause.rs | 79 - .../dancebox/src/weights/pallet_utility.rs | 121 - runtime/dancebox/src/weights/pallet_xcm.rs | 353 - .../src/weights/pallet_xcm_core_buyer.rs | 169 - runtime/dancebox/src/weights/xcm/mod.rs | 251 - .../xcm/pallet_xcm_benchmarks_generic.rs | 348 - runtime/dancebox/src/xcm_config.rs | 617 - runtime/dancebox/tests/common/mod.rs | 693 - .../dancebox/tests/common/xcm/constants.rs | 391 - .../dancebox/tests/common/xcm/core_buyer.rs | 722 - .../tests/common/xcm/delivery_fees.rs | 144 - .../common/xcm/expected_event_checker.rs | 103 - .../xcm/foreign_signed_based_sovereign.rs | 226 - .../tests/common/xcm/foreign_sovereigns.rs | 234 - runtime/dancebox/tests/common/xcm/mocknets.rs | 309 - runtime/dancebox/tests/common/xcm/mod.rs | 39 - .../xcm/reserver_transfers_polkadot_xcm.rs | 814 - ...derivative_reception_container_dancebox.rs | 141 - ...e_reception_dancebox_frontier_container.rs | 149 - ...ive_reception_dancebox_simple_container.rs | 142 - ...ken_derivative_reception_relay_dancebox.rs | 258 - ...tive_reception_relay_frontier_container.rs | 290 - ...vative_reception_relay_simple_container.rs | 284 - runtime/dancebox/tests/common/xcm/transact.rs | 396 - runtime/dancebox/tests/common/xcm/trap.rs | 88 - runtime/dancebox/tests/integration_test.rs | 6003 ----- runtime/flashbox/Cargo.toml | 304 - runtime/flashbox/build.rs | 25 - runtime/flashbox/src/lib.rs | 1976 -- .../cumulus_pallet_parachain_system.rs | 73 - runtime/flashbox/src/weights/frame_system.rs | 185 - runtime/flashbox/src/weights/mod.rs | 40 - .../src/weights/pallet_author_inherent.rs | 76 - .../src/weights/pallet_author_noting.rs | 102 - .../flashbox/src/weights/pallet_balances.rs | 149 - .../src/weights/pallet_collator_assignment.rs | 101 - .../src/weights/pallet_configuration.rs | 74 - .../src/weights/pallet_data_preservers.rs | 76 - .../flashbox/src/weights/pallet_identity.rs | 419 - .../src/weights/pallet_invulnerables.rs | 120 - .../flashbox/src/weights/pallet_multisig.rs | 172 - runtime/flashbox/src/weights/pallet_proxy.rs | 231 - .../flashbox/src/weights/pallet_registrar.rs | 267 - .../src/weights/pallet_relay_storage_roots.rs | 72 - .../src/weights/pallet_services_payment.rs | 152 - .../flashbox/src/weights/pallet_session.rs | 83 - .../src/weights/pallet_stream_payment.rs | 179 - runtime/flashbox/src/weights/pallet_sudo.rs | 99 - .../flashbox/src/weights/pallet_timestamp.rs | 77 - .../flashbox/src/weights/pallet_treasury.rs | 198 - .../flashbox/src/weights/pallet_tx_pause.rs | 79 - .../flashbox/src/weights/pallet_utility.rs | 121 - runtime/flashbox/tests/common/mod.rs | 655 - runtime/flashbox/tests/integration_test.rs | 3991 --- runtime/relay-encoder/Cargo.toml | 56 - runtime/relay-encoder/src/lib.rs | 20 - runtime/relay-encoder/src/rococo.rs | 62 - runtime/relay-encoder/src/westend.rs | 64 - runtime/src/lib.rs | 588 + rust-toolchain.toml | 15 +- rustfmt.toml | 23 + scripts/build-runtime-srtool.sh | 54 - scripts/init.sh | 12 + shell.nix | 35 + specs/dancebox/alphanet-relay-raw-specs.json | 225 - specs/dancebox/dancebox-raw-specs.json | 76 - test/.eslintrc.cjs | 35 - test/.gitignore | 11 - test/README.md | 197 - test/configs/dancebox.yml | 14 - test/configs/frontierContainer.yml | 16 - test/configs/stagenet-dancebox.yml | 14 - test/configs/stagenet-flashbox.yml | 14 - test/configs/zombieDanceboxUpgrade.json | 56 - test/configs/zombieTanssi.json | 144 - test/configs/zombieTanssiKeepDb.json | 106 - test/configs/zombieTanssiMetrics.json | 111 - test/configs/zombieTanssiOneNode.json | 64 - test/configs/zombieTanssiParathreads.json | 106 - test/configs/zombieTanssiRotation.json | 126 - test/configs/zombieTanssiWarpSync.json | 93 - test/contracts/solidity/Batch.sol | 82 - test/contracts/solidity/CallPermit.sol | 54 - test/contracts/solidity/CallPermitDemo.sol | 125 - test/contracts/solidity/ERC20.sol | 122 - test/contracts/solidity/ERC20Instance.sol | 193 - test/contracts/solidity/EventEmitter.sol | 10 - test/contracts/solidity/MultiplyBy7.sol | 8 - .../SmartContractPrecompileCallTests.sol | 17 - test/contracts/solidity/XcmUtils.sol | 52 - test/helpers/assets.ts | 91 - test/helpers/eth-transactions.ts | 51 - test/helpers/index.ts | 2 - test/helpers/xcm.ts | 24 - test/moonwall.config.json | 596 - test/package.json | 69 - test/scripts/build-spec-one-node.sh | 10 - test/scripts/build-spec-parathreads.sh | 13 - test/scripts/build-spec-warp-sync.sh | 11 - test/scripts/build-spec.sh | 13 - test/scripts/compile-wasm.ts | 120 - test/scripts/deriveTestIds.ts | 126 - test/scripts/download-polkadot.sh | 54 - test/scripts/downloadChainSpec.ts | 74 - test/scripts/modify-plain-specs.ts | 39 - test/scripts/pre-build-contracts.ts | 172 - test/scripts/registerPara.ts | 63 - test/scripts/sudoRegisterPara.ts | 285 - test/scripts/utils/network.ts | 73 - test/scripts/zombienetRestart.ts | 182 - .../test_fee_balance_transfer.ts | 280 - .../pallet-multisig/test_pallet_multisig.ts | 123 - .../common-all/proxy/test-proxy-balances.ts | 110 - .../common-all/proxy/test-proxy-cancel.ts | 216 - .../common-all/proxy/test-proxy-pure.ts | 106 - test/suites/common-all/proxy/test-proxy.ts | 217 - .../test-maintenance/test-maintenance-mode.ts | 187 - test/suites/common-all/test_basic.ts | 65 - .../tx-pause/test_maintenance_mode.ts | 93 - test/suites/common-all/tx-pause/test_pause.ts | 120 - .../test-custom-policy.ts | 157 - .../test-default-policy.ts | 151 - .../test_author_slot_prediction.ts | 87 - .../common-tanssi/fees/test_fee_burning.ts | 80 - .../test_invulnerable_rewards.ts | 112 - .../issuance-rewards/test_issuance.ts | 35 - ...t-active-config-collators-per-container.ts | 33 - .../test-active-config-max-collators.ts | 33 - ...ctive-config-max-orchestrator-collators.ts | 33 - ...ctive-config-min-orchestrator-collators.ts | 35 - .../test-active-config-origin.ts | 60 - .../test-active-config-target-fullness.ts | 33 - .../pallet-identity/test_pallet_identity.ts | 146 - .../pallet-treasury/test_pallet_treasury.ts | 183 - .../registrar/test_registrar_deregister.ts | 137 - .../registrar/test_registrar_pause.ts | 106 - .../registrar/test_registrar_proxy.ts | 205 - .../registrar/test_registrar_register.ts | 128 - .../test_registrar_register_parathread.ts | 155 - .../common-tanssi/registrar/test_utils_rpc.ts | 60 - .../test_pallet_storage_roots.ts | 45 - ...ce_payment_removes_tank_money_and_burns.ts | 58 - ..._payment_removes_tank_money_and_refunds.ts | 71 - ...yment_block_credit_buying_free_combined.ts | 94 - .../test_services_payment_block_credits.ts | 245 - ...nt_collator_credit_buying_free_combined.ts | 87 - .../test_services_payment_collator_credits.ts | 198 - .../test_services_payment_collator_tip.ts | 48 - .../test_services_payment_no_free_credits.ts | 108 - .../test_services_payment_rpc.ts | 25 - .../stream-payment/test_stream_payment.ts | 116 - .../stream-payment/test_stream_payment_rpc.ts | 180 - .../test-maintenance-dmp-queue.ts | 143 - .../test-maintenance-mode-xcm.ts | 146 - .../test-maintenance-xcm-queue.ts | 157 - .../test_dmp_token_reception.ts | 155 - .../test_dmp_token_reception_appendix.ts | 103 - .../test_dmp_token_reception_appendix_2.ts | 104 - .../test_dmp_token_reception_error_handler.ts | 91 - ...est_dmp_token_reception_error_handler_2.ts | 103 - .../test_dmp_token_reception_teleport.ts | 96 - .../test_hrmp_token_reception.ts | 102 - .../test_hrmp_token_reception_2.ts | 99 - .../common-xcm/xcm/test-mock-dmp-transact.ts | 117 - .../common-xcm/xcm/test-mock-hrmp-transact.ts | 196 - .../xcm/test-reserve-transfer-horizontal.ts | 120 - .../xcm/test-reserve-transfer-upward.ts | 98 - .../xcm/test-xcm-send-horizontal.ts | 80 - .../common-xcm/xcm/test-xcm-send-upward.ts | 57 - .../dancebox-specs/test-block-creation.ts | 21 - .../test-balance/test-balance-existential.ts | 81 - .../test-eth-asset-address-creation.ts | 51 - .../test-eth-block/test-eth-block-pending.ts | 97 - .../test-eth-fee/test-eth-fee-history.ts | 163 - .../test-eth-fee/test-eth-paysFee.ts | 22 - .../test-eth-pool/test-eth-pool-discard.ts | 33 - .../test-eth-pool/test-eth-pool-resubmit.ts | 117 - .../test-eth-rpc/test-eth-rpc-constants.ts | 43 - .../test-eth-rpc/test-eth-rpc-index.ts | 37 - .../test-eth-rpc-log-filtering.ts | 72 - .../test-eth-tx/test-eth-tx-nonce.ts | 110 - .../test-evm/test-evm-maintenance-mode.ts | 94 - .../test-evm/test-evm-rpc-block-author.ts | 24 - .../test-evm/test-evm-transfer-origints.ts | 73 - .../test-frnt-rpc/test-frnt-rpc.ts | 159 - .../test-orchestrator-para-id.ts | 45 - .../test-precompile-assets-erc20-1.ts | 177 - .../test-precompile-assets-erc20-2.ts | 93 - .../test-precompile-assets-erc20-3.ts | 114 - .../test-precompile-assets-erc20-4.ts | 65 - .../test-precompile-assets-erc20-5.ts | 168 - .../test-precompile-assets-erc20-6.ts | 118 - .../test-precompile-assets-erc20-7.ts | 81 - .../test-precompile-assets-erc20-low-level.ts | 183 - .../test-precompiles/test-precompile-batch.ts | 250 - .../test-precompile-call-permit.ts | 192 - .../test-precompiles/test-precompile-erc20.ts | 257 - .../test-precompile-smart-contract-call.ts | 87 - .../test-precompile-xcm-utils.ts | 450 - .../test_set_latest_authorities_data.ts | 52 - .../test_balances_consumers.ts | 101 - .../proxy/test-session-keys-management.ts | 77 - .../test_remove_session_key_invulnerables.ts | 59 - .../test_remove_session_key_staking.ts | 93 - .../session-keys/test_session_keys.ts | 84 - .../test_session_keys_assignment.ts | 127 - .../dev-tanssi/staking/test_staking_join.ts | 100 - .../staking/test_staking_rewards_balanced.ts | 182 - .../test_staking_rewards_non_balanced.ts | 183 - .../staking/test_staking_session.ts | 87 - .../dev-tanssi/staking/test_staking_swap.ts | 98 - .../weights/test_on_session_change_weight.ts | 54 - .../test_set_latest_author_data_weight.ts | 52 - .../xcm-core-buyer/test_xcm_core_buyer.ts | 148 - test/suites/keep-db/test_restart_keep_db.ts | 394 - test/suites/metrics/test_metrics_stop.ts | 228 - test/suites/one-node/test_tanssi_one_node.ts | 280 - test/suites/para/test_tanssi_containers.ts | 538 - .../parathreads/test_tanssi_parathreads.ts | 375 - test/suites/rotation-para/test_rotation.ts | 447 - .../test-upgrade-chain.ts | 79 - .../test-upgrade-chain.ts | 89 - .../test-upgrade-chain.ts | 69 - .../test-authority-consistency-assignation.ts | 64 - .../test-block-author-logs.ts | 94 - .../smoke-test-common/test-block-finalized.ts | 30 - .../test-collator-number-consistency.ts | 51 - .../test-configuration-consistency.ts | 117 - .../test-consistency-services-payment.ts | 48 - .../test-inflation-rewards.ts | 175 - .../test-relay-storage-roots-consistency.ts | 59 - .../test-invulnerables-priority.ts | 73 - .../test-randomness-consistency.ts | 83 - .../test-staking-consistency.ts | 100 - .../test-staking-session-keys.ts | 44 - test/suites/warp-sync/test_warp_sync.ts | 317 - test/tsconfig.json | 25 - test/util/author.ts | 34 - test/util/block.ts | 282 - test/util/constants.ts | 11 - test/util/ethereum-contracts.ts | 60 - test/util/ethereum.ts | 211 - test/util/genesis_data.ts | 89 - test/util/invulnerables.ts | 16 - test/util/keys.ts | 8 - test/util/payment.ts | 55 - test/util/relayInterface.ts | 9 - test/util/xcm.ts | 977 - toml-maid.toml | 30 - tools/benchmarking.sh | 150 - tools/github/generate-release-body.ts | 83 - tools/github/generate-runtimes-body.ts | 171 - tools/github/github-utils.ts | 111 - tools/github/print-client-release-issue.ts | 73 - tools/github/print-runtime-release-issue.ts | 91 - tools/github/print-version-bump-info.ts | 132 - tools/package-lock.json | 21099 ---------------- tools/package.json | 29 - tools/tsconfig.json | 9 - typescript-api/.gitignore | 33 - typescript-api/README.md | 54 - typescript-api/package.json | 103 - typescript-api/scripts/generate-types.ts | 114 - typescript-api/scripts/postbuild.ts | 34 - typescript-api/scripts/runtime-upgrade.ts | 114 - typescript-api/src/dancebox/index.ts | 3 - .../dancebox/interfaces/augment-api-consts.ts | 407 - .../dancebox/interfaces/augment-api-errors.ts | 588 - .../dancebox/interfaces/augment-api-events.ts | 1331 - .../dancebox/interfaces/augment-api-query.ts | 1368 - .../dancebox/interfaces/augment-api-rpc.ts | 781 - .../interfaces/augment-api-runtime.ts | 206 - .../src/dancebox/interfaces/augment-api-tx.ts | 2280 -- .../src/dancebox/interfaces/augment-api.ts | 10 - .../src/dancebox/interfaces/augment-types.ts | 2370 -- .../src/dancebox/interfaces/definitions.ts | 1 - .../src/dancebox/interfaces/index.ts | 4 - .../src/dancebox/interfaces/lookup.ts | 4146 --- .../src/dancebox/interfaces/registry.ts | 584 - .../dancebox/interfaces/tanssi/definitions.ts | 3 - .../src/dancebox/interfaces/tanssi/index.ts | 4 - .../src/dancebox/interfaces/tanssi/types.ts | 4 - .../src/dancebox/interfaces/types-lookup.ts | 5623 ---- .../src/dancebox/interfaces/types.ts | 4 - typescript-api/src/dancebox/tsconfig.json | 13 - typescript-api/src/flashbox/index.ts | 3 - .../flashbox/interfaces/augment-api-consts.ts | 297 - .../flashbox/interfaces/augment-api-errors.ts | 374 - .../flashbox/interfaces/augment-api-events.ts | 688 - .../flashbox/interfaces/augment-api-query.ts | 950 - .../flashbox/interfaces/augment-api-rpc.ts | 781 - .../interfaces/augment-api-runtime.ts | 206 - .../src/flashbox/interfaces/augment-api-tx.ts | 1403 - .../src/flashbox/interfaces/augment-api.ts | 10 - .../src/flashbox/interfaces/augment-types.ts | 2370 -- .../src/flashbox/interfaces/definitions.ts | 1 - .../src/flashbox/interfaces/index.ts | 4 - .../src/flashbox/interfaces/lookup.ts | 2096 -- .../src/flashbox/interfaces/registry.ts | 366 - .../flashbox/interfaces/tanssi/definitions.ts | 3 - .../src/flashbox/interfaces/tanssi/index.ts | 4 - .../src/flashbox/interfaces/tanssi/types.ts | 4 - .../src/flashbox/interfaces/types-lookup.ts | 2771 -- .../src/flashbox/interfaces/types.ts | 4 - typescript-api/src/flashbox/tsconfig.json | 13 - typescript-api/src/index.cjs | 6 - typescript-api/tsconfig.base.json | 20 - typescript-api/tsconfig.json | 12 - 611 files changed, 6602 insertions(+), 193261 deletions(-) create mode 100644 CODEOWNERS create mode 100644 Containerfile delete mode 100644 benchmarking/frame-weight-pallet-template.hbs delete mode 100644 benchmarking/frame-weight-runtime-template-xcm.hbs delete mode 100644 benchmarking/frame-weight-runtime-template.hbs delete mode 100644 client/consensus/Cargo.toml delete mode 100644 client/consensus/src/collators.rs delete mode 100644 client/consensus/src/collators/basic.rs delete mode 100644 client/consensus/src/collators/lookahead.rs delete mode 100644 client/consensus/src/consensus_orchestrator.rs delete mode 100644 client/consensus/src/lib.rs delete mode 100644 client/consensus/src/manual_seal.rs delete mode 100644 client/consensus/src/tests.rs delete mode 100644 client/manual-xcm/Cargo.toml delete mode 100644 client/manual-xcm/src/lib.rs delete mode 100644 client/node-common/Cargo.toml delete mode 100644 client/node-common/src/command.rs delete mode 100644 client/node-common/src/lib.rs delete mode 100644 client/node-common/src/service.rs delete mode 100644 client/services-payment/Cargo.toml delete mode 100644 client/services-payment/src/lib.rs delete mode 100644 client/stream-payment/Cargo.toml delete mode 100644 client/stream-payment/src/lib.rs delete mode 100644 container-chains/nodes/frontier/Cargo.toml delete mode 100644 container-chains/nodes/frontier/build.rs delete mode 100644 container-chains/nodes/frontier/src/chain_spec.rs delete mode 100644 container-chains/nodes/frontier/src/cli.rs delete mode 100644 container-chains/nodes/frontier/src/command.rs delete mode 100644 container-chains/nodes/frontier/src/main.rs delete mode 100644 container-chains/nodes/frontier/src/rpc/eth.rs delete mode 100644 container-chains/nodes/frontier/src/rpc/finality.rs delete mode 100644 container-chains/nodes/frontier/src/rpc/mod.rs delete mode 100644 container-chains/nodes/frontier/src/service.rs delete mode 100644 container-chains/nodes/simple/Cargo.toml delete mode 100644 container-chains/nodes/simple/build.rs delete mode 100644 container-chains/nodes/simple/src/chain_spec.rs delete mode 100644 container-chains/nodes/simple/src/cli.rs delete mode 100644 container-chains/nodes/simple/src/command.rs delete mode 100644 container-chains/nodes/simple/src/main.rs delete mode 100644 container-chains/nodes/simple/src/rpc.rs delete mode 100644 container-chains/nodes/simple/src/service.rs delete mode 100644 container-chains/runtime-templates/frontier/Cargo.toml delete mode 100644 container-chains/runtime-templates/frontier/build.rs delete mode 100644 container-chains/runtime-templates/frontier/src/impl_on_charge_evm_transaction.rs delete mode 100644 container-chains/runtime-templates/frontier/src/lib.rs delete mode 100644 container-chains/runtime-templates/frontier/src/migrations.rs delete mode 100644 container-chains/runtime-templates/frontier/src/precompiles.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/frame_system.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/mod.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_asset_rate.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_assets.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_author_inherent.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_balances.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_cc_authorities_noting.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_foreign_asset_creator.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_message_queue.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_multisig.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_proxy.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_sudo.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_timestamp.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_tx_pause.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_utility.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_xcm.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_xcm_benchmarks::generic.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/pallet_xcm_executor_utils.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/xcm/mod.rs delete mode 100644 container-chains/runtime-templates/frontier/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 container-chains/runtime-templates/frontier/src/xcm_config.rs delete mode 100644 container-chains/runtime-templates/simple/Cargo.toml delete mode 100644 container-chains/runtime-templates/simple/build.rs delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_00-128722.txt delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_14-128872.txt delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_07_54-129055.txt delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_08_53-129174.txt delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_44-129588.txt delete mode 100644 container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_57-129706.txt delete mode 100644 container-chains/runtime-templates/simple/src/lib.rs delete mode 100644 container-chains/runtime-templates/simple/src/migrations.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/frame_system.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/mod.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_asset_rate.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_assets.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_author_inherent.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_balances.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_cc_authorities_noting.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_foreign_asset_creator.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_message_queue.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_multisig.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_proxy.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_sudo.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_timestamp.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_tx_pause.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_utility.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_xcm.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_xcm_benchmarks::generic.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/pallet_xcm_executor_utils.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/xcm/mod.rs delete mode 100644 container-chains/runtime-templates/simple/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 container-chains/runtime-templates/simple/src/xcm_config.rs delete mode 100644 docker/container-chain-evm-template.Dockerfile delete mode 100644 docker/container-chain-simple-template.Dockerfile delete mode 100644 docker/tanssi-srtool.Dockerfile delete mode 100644 docker/tanssi.Dockerfile delete mode 100644 docs/benchmarking.md delete mode 100644 docs/clippy.md delete mode 100644 docs/keep_db_flowchart.dot delete mode 100644 docs/keep_db_flowchart.png create mode 100644 flake.lock create mode 100644 flake.nix delete mode 100644 media/tanssi.png create mode 100644 node/src/benchmarking.rs create mode 100644 node/src/chain_spec.rs delete mode 100644 node/src/chain_spec/dancebox.rs delete mode 100644 node/src/chain_spec/flashbox.rs delete mode 100644 node/src/chain_spec/mod.rs delete mode 100644 node/src/container_chain_monitor.rs delete mode 100644 node/src/container_chain_spawner.rs delete mode 100644 node/src/tests/mod.rs delete mode 100644 node/src/tests/panics.rs delete mode 100644 pallets/author-noting/Cargo.toml delete mode 100644 pallets/author-noting/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/author-noting/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/author-noting/src/benchmarks.rs delete mode 100644 pallets/author-noting/src/lib.rs delete mode 100644 pallets/author-noting/src/mock.rs delete mode 100644 pallets/author-noting/src/mock_proof.rs delete mode 100644 pallets/author-noting/src/tests.rs delete mode 100644 pallets/author-noting/src/weights.rs delete mode 100644 pallets/authority-assignment/Cargo.toml delete mode 100644 pallets/authority-assignment/src/lib.rs delete mode 100644 pallets/authority-assignment/src/mock.rs delete mode 100644 pallets/authority-assignment/src/tests.rs delete mode 100644 pallets/authority-mapping/Cargo.toml delete mode 100644 pallets/authority-mapping/src/lib.rs delete mode 100644 pallets/authority-mapping/src/mock.rs delete mode 100644 pallets/authority-mapping/src/tests.rs delete mode 100644 pallets/collator-assignment/Cargo.toml delete mode 100644 pallets/collator-assignment/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/collator-assignment/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/collator-assignment/src/assignment.rs delete mode 100644 pallets/collator-assignment/src/benchmarking.rs delete mode 100644 pallets/collator-assignment/src/lib.rs delete mode 100644 pallets/collator-assignment/src/mock.rs delete mode 100644 pallets/collator-assignment/src/tests.rs delete mode 100644 pallets/collator-assignment/src/tests/assign_full.rs delete mode 100644 pallets/collator-assignment/src/tests/prioritize_invulnerables.rs delete mode 100644 pallets/collator-assignment/src/tests/select_chains.rs delete mode 100644 pallets/collator-assignment/src/weights.rs delete mode 100644 pallets/configuration/Cargo.toml delete mode 100644 pallets/configuration/src/benchmarks.rs delete mode 100644 pallets/configuration/src/lib.rs delete mode 100644 pallets/configuration/src/mock.rs delete mode 100644 pallets/configuration/src/tests.rs delete mode 100644 pallets/configuration/src/weights.rs delete mode 100644 pallets/data-preservers/Cargo.toml delete mode 100644 pallets/data-preservers/src/benchmarks.rs delete mode 100644 pallets/data-preservers/src/lib.rs delete mode 100644 pallets/data-preservers/src/mock.rs delete mode 100644 pallets/data-preservers/src/tests.rs delete mode 100644 pallets/data-preservers/src/weights.rs delete mode 100644 pallets/inflation-rewards/Cargo.toml delete mode 100644 pallets/inflation-rewards/src/lib.rs delete mode 100644 pallets/inflation-rewards/src/mock.rs delete mode 100644 pallets/inflation-rewards/src/tests.rs delete mode 100644 pallets/initializer/Cargo.toml delete mode 100644 pallets/initializer/src/lib.rs delete mode 100644 pallets/initializer/src/mock.rs delete mode 100644 pallets/initializer/src/tests.rs delete mode 100644 pallets/invulnerables/Cargo.toml delete mode 100644 pallets/invulnerables/src/benchmarking.rs delete mode 100644 pallets/invulnerables/src/lib.rs delete mode 100644 pallets/invulnerables/src/mock.rs delete mode 100644 pallets/invulnerables/src/tests.rs delete mode 100644 pallets/invulnerables/src/weights.rs delete mode 100644 pallets/pooled-staking/Cargo.toml delete mode 100644 pallets/pooled-staking/README.md delete mode 100644 pallets/pooled-staking/src/benchmarking.rs delete mode 100644 pallets/pooled-staking/src/calls.rs delete mode 100644 pallets/pooled-staking/src/candidate.rs delete mode 100644 pallets/pooled-staking/src/lib.rs delete mode 100644 pallets/pooled-staking/src/mock.rs delete mode 100644 pallets/pooled-staking/src/pools.rs delete mode 100644 pallets/pooled-staking/src/tests/candidates.rs delete mode 100644 pallets/pooled-staking/src/tests/delegator_flow.rs delete mode 100644 pallets/pooled-staking/src/tests/manual_rewards.rs delete mode 100644 pallets/pooled-staking/src/tests/mod.rs delete mode 100644 pallets/pooled-staking/src/tests/rebalance.rs delete mode 100644 pallets/pooled-staking/src/tests/rewards.rs delete mode 100644 pallets/pooled-staking/src/traits.rs delete mode 100644 pallets/pooled-staking/src/weights.rs delete mode 100644 pallets/registrar/Cargo.toml delete mode 100644 pallets/registrar/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/registrar/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/registrar/src/benchmarks.rs delete mode 100644 pallets/registrar/src/lib.rs delete mode 100644 pallets/registrar/src/mock.rs delete mode 100644 pallets/registrar/src/tests.rs delete mode 100644 pallets/registrar/src/weights.rs delete mode 100644 pallets/services-payment/Cargo.toml delete mode 100644 pallets/services-payment/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/services-payment/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/services-payment/src/benchmarks.rs delete mode 100644 pallets/services-payment/src/lib.rs delete mode 100644 pallets/services-payment/src/mock.rs delete mode 100644 pallets/services-payment/src/tests.rs delete mode 100644 pallets/services-payment/src/weights.rs delete mode 100644 pallets/stream-payment/Cargo.toml delete mode 100644 pallets/stream-payment/README.md delete mode 100644 pallets/stream-payment/rpc/runtime-api/Cargo.toml delete mode 100644 pallets/stream-payment/rpc/runtime-api/src/lib.rs delete mode 100644 pallets/stream-payment/src/benchmarking.rs delete mode 100644 pallets/stream-payment/src/lib.rs delete mode 100644 pallets/stream-payment/src/mock.rs delete mode 100644 pallets/stream-payment/src/tests.rs delete mode 100644 pallets/stream-payment/src/weights.rs create mode 100644 pallets/template/Cargo.toml create mode 100644 pallets/template/README.md create mode 100644 pallets/template/src/benchmarking.rs create mode 100644 pallets/template/src/lib.rs create mode 100644 pallets/template/src/mock.rs create mode 100644 pallets/template/src/tests.rs create mode 100644 pallets/template/src/weights.rs delete mode 100644 pallets/xcm-core-buyer/Cargo.toml delete mode 100644 pallets/xcm-core-buyer/src/benchmarks.rs delete mode 100644 pallets/xcm-core-buyer/src/lib.rs delete mode 100644 pallets/xcm-core-buyer/src/mock.rs delete mode 100644 pallets/xcm-core-buyer/src/tests.rs delete mode 100644 pallets/xcm-core-buyer/src/weights.rs delete mode 100644 pnpm-lock.yaml delete mode 100644 pnpm-workspace.yaml delete mode 100644 primitives/author-noting-inherent/Cargo.toml delete mode 100644 primitives/author-noting-inherent/src/client_side.rs delete mode 100644 primitives/author-noting-inherent/src/lib.rs delete mode 100644 primitives/author-noting-inherent/src/mock.rs delete mode 100644 primitives/author-noting-inherent/src/tests.rs delete mode 100644 primitives/container-chain-genesis-data/Cargo.toml delete mode 100644 primitives/container-chain-genesis-data/src/json.rs delete mode 100644 primitives/container-chain-genesis-data/src/lib.rs delete mode 100644 primitives/maths/Cargo.toml delete mode 100644 primitives/maths/src/lib.rs delete mode 100644 primitives/traits/Cargo.toml delete mode 100644 primitives/traits/src/lib.rs create mode 100644 runtime/Cargo.toml create mode 100644 runtime/build.rs delete mode 100644 runtime/common/Cargo.toml delete mode 100644 runtime/common/src/benchmarking.rs delete mode 100644 runtime/common/src/lib.rs delete mode 100644 runtime/common/src/migrations.rs delete mode 100644 runtime/dancebox/Cargo.toml delete mode 100644 runtime/dancebox/build.rs delete mode 100644 runtime/dancebox/src/lib.rs delete mode 100644 runtime/dancebox/src/weights/cumulus_pallet_dmp_queue.rs delete mode 100644 runtime/dancebox/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 runtime/dancebox/src/weights/cumulus_pallet_xcmp_queue.rs delete mode 100644 runtime/dancebox/src/weights/frame_system.rs delete mode 100644 runtime/dancebox/src/weights/mod.rs delete mode 100644 runtime/dancebox/src/weights/pallet_asset_rate.rs delete mode 100644 runtime/dancebox/src/weights/pallet_assets.rs delete mode 100644 runtime/dancebox/src/weights/pallet_author_inherent.rs delete mode 100644 runtime/dancebox/src/weights/pallet_author_noting.rs delete mode 100644 runtime/dancebox/src/weights/pallet_balances.rs delete mode 100644 runtime/dancebox/src/weights/pallet_collator_assignment.rs delete mode 100644 runtime/dancebox/src/weights/pallet_configuration.rs delete mode 100644 runtime/dancebox/src/weights/pallet_data_preservers.rs delete mode 100644 runtime/dancebox/src/weights/pallet_foreign_asset_creator.rs delete mode 100644 runtime/dancebox/src/weights/pallet_identity.rs delete mode 100644 runtime/dancebox/src/weights/pallet_invulnerables.rs delete mode 100644 runtime/dancebox/src/weights/pallet_message_queue.rs delete mode 100644 runtime/dancebox/src/weights/pallet_multisig.rs delete mode 100644 runtime/dancebox/src/weights/pallet_pooled_staking.rs delete mode 100644 runtime/dancebox/src/weights/pallet_proxy.rs delete mode 100644 runtime/dancebox/src/weights/pallet_registrar.rs delete mode 100644 runtime/dancebox/src/weights/pallet_relay_storage_roots.rs delete mode 100644 runtime/dancebox/src/weights/pallet_services_payment.rs delete mode 100644 runtime/dancebox/src/weights/pallet_session.rs delete mode 100644 runtime/dancebox/src/weights/pallet_stream_payment.rs delete mode 100644 runtime/dancebox/src/weights/pallet_sudo.rs delete mode 100644 runtime/dancebox/src/weights/pallet_timestamp.rs delete mode 100644 runtime/dancebox/src/weights/pallet_treasury.rs delete mode 100644 runtime/dancebox/src/weights/pallet_tx_pause.rs delete mode 100644 runtime/dancebox/src/weights/pallet_utility.rs delete mode 100644 runtime/dancebox/src/weights/pallet_xcm.rs delete mode 100644 runtime/dancebox/src/weights/pallet_xcm_core_buyer.rs delete mode 100644 runtime/dancebox/src/weights/xcm/mod.rs delete mode 100644 runtime/dancebox/src/weights/xcm/pallet_xcm_benchmarks_generic.rs delete mode 100644 runtime/dancebox/src/xcm_config.rs delete mode 100644 runtime/dancebox/tests/common/mod.rs delete mode 100644 runtime/dancebox/tests/common/xcm/constants.rs delete mode 100644 runtime/dancebox/tests/common/xcm/core_buyer.rs delete mode 100644 runtime/dancebox/tests/common/xcm/delivery_fees.rs delete mode 100644 runtime/dancebox/tests/common/xcm/expected_event_checker.rs delete mode 100644 runtime/dancebox/tests/common/xcm/foreign_signed_based_sovereign.rs delete mode 100644 runtime/dancebox/tests/common/xcm/foreign_sovereigns.rs delete mode 100644 runtime/dancebox/tests/common/xcm/mocknets.rs delete mode 100644 runtime/dancebox/tests/common/xcm/mod.rs delete mode 100644 runtime/dancebox/tests/common/xcm/reserver_transfers_polkadot_xcm.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_container_dancebox.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_dancebox_frontier_container.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_dancebox_simple_container.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_relay_dancebox.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_relay_frontier_container.rs delete mode 100644 runtime/dancebox/tests/common/xcm/token_derivative_reception_relay_simple_container.rs delete mode 100644 runtime/dancebox/tests/common/xcm/transact.rs delete mode 100644 runtime/dancebox/tests/common/xcm/trap.rs delete mode 100644 runtime/dancebox/tests/integration_test.rs delete mode 100644 runtime/flashbox/Cargo.toml delete mode 100644 runtime/flashbox/build.rs delete mode 100644 runtime/flashbox/src/lib.rs delete mode 100644 runtime/flashbox/src/weights/cumulus_pallet_parachain_system.rs delete mode 100644 runtime/flashbox/src/weights/frame_system.rs delete mode 100644 runtime/flashbox/src/weights/mod.rs delete mode 100644 runtime/flashbox/src/weights/pallet_author_inherent.rs delete mode 100644 runtime/flashbox/src/weights/pallet_author_noting.rs delete mode 100644 runtime/flashbox/src/weights/pallet_balances.rs delete mode 100644 runtime/flashbox/src/weights/pallet_collator_assignment.rs delete mode 100644 runtime/flashbox/src/weights/pallet_configuration.rs delete mode 100644 runtime/flashbox/src/weights/pallet_data_preservers.rs delete mode 100644 runtime/flashbox/src/weights/pallet_identity.rs delete mode 100644 runtime/flashbox/src/weights/pallet_invulnerables.rs delete mode 100644 runtime/flashbox/src/weights/pallet_multisig.rs delete mode 100644 runtime/flashbox/src/weights/pallet_proxy.rs delete mode 100644 runtime/flashbox/src/weights/pallet_registrar.rs delete mode 100644 runtime/flashbox/src/weights/pallet_relay_storage_roots.rs delete mode 100644 runtime/flashbox/src/weights/pallet_services_payment.rs delete mode 100644 runtime/flashbox/src/weights/pallet_session.rs delete mode 100644 runtime/flashbox/src/weights/pallet_stream_payment.rs delete mode 100644 runtime/flashbox/src/weights/pallet_sudo.rs delete mode 100644 runtime/flashbox/src/weights/pallet_timestamp.rs delete mode 100644 runtime/flashbox/src/weights/pallet_treasury.rs delete mode 100644 runtime/flashbox/src/weights/pallet_tx_pause.rs delete mode 100644 runtime/flashbox/src/weights/pallet_utility.rs delete mode 100644 runtime/flashbox/tests/common/mod.rs delete mode 100644 runtime/flashbox/tests/integration_test.rs delete mode 100644 runtime/relay-encoder/Cargo.toml delete mode 100644 runtime/relay-encoder/src/lib.rs delete mode 100644 runtime/relay-encoder/src/rococo.rs delete mode 100644 runtime/relay-encoder/src/westend.rs create mode 100644 runtime/src/lib.rs create mode 100644 rustfmt.toml delete mode 100755 scripts/build-runtime-srtool.sh create mode 100755 scripts/init.sh create mode 100644 shell.nix delete mode 100644 specs/dancebox/alphanet-relay-raw-specs.json delete mode 100644 specs/dancebox/dancebox-raw-specs.json delete mode 100644 test/.eslintrc.cjs delete mode 100644 test/.gitignore delete mode 100644 test/README.md delete mode 100644 test/configs/dancebox.yml delete mode 100644 test/configs/frontierContainer.yml delete mode 100644 test/configs/stagenet-dancebox.yml delete mode 100644 test/configs/stagenet-flashbox.yml delete mode 100644 test/configs/zombieDanceboxUpgrade.json delete mode 100644 test/configs/zombieTanssi.json delete mode 100644 test/configs/zombieTanssiKeepDb.json delete mode 100644 test/configs/zombieTanssiMetrics.json delete mode 100644 test/configs/zombieTanssiOneNode.json delete mode 100644 test/configs/zombieTanssiParathreads.json delete mode 100644 test/configs/zombieTanssiRotation.json delete mode 100644 test/configs/zombieTanssiWarpSync.json delete mode 100644 test/contracts/solidity/Batch.sol delete mode 100644 test/contracts/solidity/CallPermit.sol delete mode 100644 test/contracts/solidity/CallPermitDemo.sol delete mode 100644 test/contracts/solidity/ERC20.sol delete mode 100644 test/contracts/solidity/ERC20Instance.sol delete mode 100644 test/contracts/solidity/EventEmitter.sol delete mode 100644 test/contracts/solidity/MultiplyBy7.sol delete mode 100644 test/contracts/solidity/SmartContractPrecompileCallTests.sol delete mode 100644 test/contracts/solidity/XcmUtils.sol delete mode 100644 test/helpers/assets.ts delete mode 100644 test/helpers/eth-transactions.ts delete mode 100644 test/helpers/index.ts delete mode 100644 test/helpers/xcm.ts delete mode 100644 test/moonwall.config.json delete mode 100644 test/package.json delete mode 100755 test/scripts/build-spec-one-node.sh delete mode 100755 test/scripts/build-spec-parathreads.sh delete mode 100755 test/scripts/build-spec-warp-sync.sh delete mode 100755 test/scripts/build-spec.sh delete mode 100644 test/scripts/compile-wasm.ts delete mode 100644 test/scripts/deriveTestIds.ts delete mode 100755 test/scripts/download-polkadot.sh delete mode 100644 test/scripts/downloadChainSpec.ts delete mode 100644 test/scripts/modify-plain-specs.ts delete mode 100644 test/scripts/pre-build-contracts.ts delete mode 100644 test/scripts/registerPara.ts delete mode 100644 test/scripts/sudoRegisterPara.ts delete mode 100644 test/scripts/utils/network.ts delete mode 100644 test/scripts/zombienetRestart.ts delete mode 100644 test/suites/common-all/fee_balance_transfer/test_fee_balance_transfer.ts delete mode 100644 test/suites/common-all/pallet-multisig/test_pallet_multisig.ts delete mode 100644 test/suites/common-all/proxy/test-proxy-balances.ts delete mode 100644 test/suites/common-all/proxy/test-proxy-cancel.ts delete mode 100644 test/suites/common-all/proxy/test-proxy-pure.ts delete mode 100644 test/suites/common-all/proxy/test-proxy.ts delete mode 100644 test/suites/common-all/test-maintenance/test-maintenance-mode.ts delete mode 100644 test/suites/common-all/test_basic.ts delete mode 100644 test/suites/common-all/tx-pause/test_maintenance_mode.ts delete mode 100644 test/suites/common-all/tx-pause/test_pause.ts delete mode 100644 test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-custom-policy.ts delete mode 100644 test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-default-policy.ts delete mode 100644 test/suites/common-tanssi/author-slot-prediction/test_author_slot_prediction.ts delete mode 100644 test/suites/common-tanssi/fees/test_fee_burning.ts delete mode 100644 test/suites/common-tanssi/issuance-rewards/test_invulnerable_rewards.ts delete mode 100644 test/suites/common-tanssi/issuance-rewards/test_issuance.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-collators-per-container.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-max-collators.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-max-orchestrator-collators.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-min-orchestrator-collators.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-origin.ts delete mode 100644 test/suites/common-tanssi/pallet-configuration/test-active-config-target-fullness.ts delete mode 100644 test/suites/common-tanssi/pallet-identity/test_pallet_identity.ts delete mode 100644 test/suites/common-tanssi/pallet-treasury/test_pallet_treasury.ts delete mode 100644 test/suites/common-tanssi/registrar/test_registrar_deregister.ts delete mode 100644 test/suites/common-tanssi/registrar/test_registrar_pause.ts delete mode 100644 test/suites/common-tanssi/registrar/test_registrar_proxy.ts delete mode 100644 test/suites/common-tanssi/registrar/test_registrar_register.ts delete mode 100644 test/suites/common-tanssi/registrar/test_registrar_register_parathread.ts delete mode 100644 test/suites/common-tanssi/registrar/test_utils_rpc.ts delete mode 100644 test/suites/common-tanssi/relay-storage-roots/test_pallet_storage_roots.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_burns.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_refunds.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_block_credit_buying_free_combined.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_block_credits.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_collator_credit_buying_free_combined.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_collator_credits.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_collator_tip.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_no_free_credits.ts delete mode 100644 test/suites/common-tanssi/services-payment/test_services_payment_rpc.ts delete mode 100644 test/suites/common-tanssi/stream-payment/test_stream_payment.ts delete mode 100644 test/suites/common-tanssi/stream-payment/test_stream_payment_rpc.ts delete mode 100644 test/suites/common-xcm/test-maintenance/test-maintenance-dmp-queue.ts delete mode 100644 test/suites/common-xcm/test-maintenance/test-maintenance-mode-xcm.ts delete mode 100644 test/suites/common-xcm/test-maintenance/test-maintenance-xcm-queue.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix_2.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler_2.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_teleport.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception.ts delete mode 100644 test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception_2.ts delete mode 100644 test/suites/common-xcm/xcm/test-mock-dmp-transact.ts delete mode 100644 test/suites/common-xcm/xcm/test-mock-hrmp-transact.ts delete mode 100644 test/suites/common-xcm/xcm/test-reserve-transfer-horizontal.ts delete mode 100644 test/suites/common-xcm/xcm/test-reserve-transfer-upward.ts delete mode 100644 test/suites/common-xcm/xcm/test-xcm-send-horizontal.ts delete mode 100644 test/suites/common-xcm/xcm/test-xcm-send-upward.ts delete mode 100644 test/suites/dancebox-specs/test-block-creation.ts delete mode 100644 test/suites/dev-frontier-template/test-balance/test-balance-existential.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-asset-address/test-eth-asset-address-creation.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-block/test-eth-block-pending.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-fee/test-eth-fee-history.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-fee/test-eth-paysFee.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-discard.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-resubmit.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-constants.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-index.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-log-filtering.ts delete mode 100644 test/suites/dev-frontier-template/test-eth-tx/test-eth-tx-nonce.ts delete mode 100644 test/suites/dev-frontier-template/test-evm/test-evm-maintenance-mode.ts delete mode 100644 test/suites/dev-frontier-template/test-evm/test-evm-rpc-block-author.ts delete mode 100644 test/suites/dev-frontier-template/test-evm/test-evm-transfer-origints.ts delete mode 100644 test/suites/dev-frontier-template/test-frnt-rpc/test-frnt-rpc.ts delete mode 100644 test/suites/dev-frontier-template/test-pallet-cc-authorities-noting/test-orchestrator-para-id.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-1.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-2.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-3.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-4.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-5.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-6.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-7.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-low-level.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-batch.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-call-permit.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-erc20.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-smart-contract-call.ts delete mode 100644 test/suites/dev-frontier-template/test-precompiles/test-precompile-xcm-utils.ts delete mode 100644 test/suites/dev-frontier-template/weights/test_set_latest_authorities_data.ts delete mode 100644 test/suites/dev-tanssi/balances-consumers/test_balances_consumers.ts delete mode 100644 test/suites/dev-tanssi/proxy/test-session-keys-management.ts delete mode 100644 test/suites/dev-tanssi/session-keys/test_remove_session_key_invulnerables.ts delete mode 100644 test/suites/dev-tanssi/session-keys/test_remove_session_key_staking.ts delete mode 100644 test/suites/dev-tanssi/session-keys/test_session_keys.ts delete mode 100644 test/suites/dev-tanssi/session-keys/test_session_keys_assignment.ts delete mode 100644 test/suites/dev-tanssi/staking/test_staking_join.ts delete mode 100644 test/suites/dev-tanssi/staking/test_staking_rewards_balanced.ts delete mode 100644 test/suites/dev-tanssi/staking/test_staking_rewards_non_balanced.ts delete mode 100644 test/suites/dev-tanssi/staking/test_staking_session.ts delete mode 100644 test/suites/dev-tanssi/staking/test_staking_swap.ts delete mode 100644 test/suites/dev-tanssi/weights/test_on_session_change_weight.ts delete mode 100644 test/suites/dev-tanssi/weights/test_set_latest_author_data_weight.ts delete mode 100644 test/suites/dev-tanssi/xcm-core-buyer/test_xcm_core_buyer.ts delete mode 100644 test/suites/keep-db/test_restart_keep_db.ts delete mode 100644 test/suites/metrics/test_metrics_stop.ts delete mode 100644 test/suites/one-node/test_tanssi_one_node.ts delete mode 100644 test/suites/para/test_tanssi_containers.ts delete mode 100644 test/suites/parathreads/test_tanssi_parathreads.ts delete mode 100644 test/suites/rotation-para/test_rotation.ts delete mode 100644 test/suites/rt-upgrade-chopsticks-frontier-template/test-upgrade-chain.ts delete mode 100644 test/suites/rt-upgrade-chopsticks-orchestrator/test-upgrade-chain.ts delete mode 100644 test/suites/rt-upgrade-zombienet/test-upgrade-chain.ts delete mode 100644 test/suites/smoke-test-common/test-authority-consistency-assignation.ts delete mode 100644 test/suites/smoke-test-common/test-block-author-logs.ts delete mode 100644 test/suites/smoke-test-common/test-block-finalized.ts delete mode 100644 test/suites/smoke-test-common/test-collator-number-consistency.ts delete mode 100644 test/suites/smoke-test-common/test-configuration-consistency.ts delete mode 100644 test/suites/smoke-test-common/test-consistency-services-payment.ts delete mode 100644 test/suites/smoke-test-common/test-inflation-rewards.ts delete mode 100644 test/suites/smoke-test-common/test-relay-storage-roots-consistency.ts delete mode 100644 test/suites/smoke-test-dancebox/test-invulnerables-priority.ts delete mode 100644 test/suites/smoke-test-dancebox/test-randomness-consistency.ts delete mode 100644 test/suites/smoke-test-dancebox/test-staking-consistency.ts delete mode 100644 test/suites/smoke-test-dancebox/test-staking-session-keys.ts delete mode 100644 test/suites/warp-sync/test_warp_sync.ts delete mode 100644 test/tsconfig.json delete mode 100644 test/util/author.ts delete mode 100644 test/util/block.ts delete mode 100644 test/util/constants.ts delete mode 100644 test/util/ethereum-contracts.ts delete mode 100644 test/util/ethereum.ts delete mode 100644 test/util/genesis_data.ts delete mode 100644 test/util/invulnerables.ts delete mode 100644 test/util/keys.ts delete mode 100644 test/util/payment.ts delete mode 100644 test/util/relayInterface.ts delete mode 100644 test/util/xcm.ts delete mode 100644 toml-maid.toml delete mode 100755 tools/benchmarking.sh delete mode 100644 tools/github/generate-release-body.ts delete mode 100644 tools/github/generate-runtimes-body.ts delete mode 100644 tools/github/github-utils.ts delete mode 100644 tools/github/print-client-release-issue.ts delete mode 100644 tools/github/print-runtime-release-issue.ts delete mode 100644 tools/github/print-version-bump-info.ts delete mode 100644 tools/package-lock.json delete mode 100644 tools/package.json delete mode 100644 tools/tsconfig.json delete mode 100644 typescript-api/.gitignore delete mode 100644 typescript-api/README.md delete mode 100644 typescript-api/package.json delete mode 100644 typescript-api/scripts/generate-types.ts delete mode 100644 typescript-api/scripts/postbuild.ts delete mode 100644 typescript-api/scripts/runtime-upgrade.ts delete mode 100644 typescript-api/src/dancebox/index.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-consts.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-errors.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-events.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-query.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-rpc.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-runtime.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api-tx.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-api.ts delete mode 100644 typescript-api/src/dancebox/interfaces/augment-types.ts delete mode 100644 typescript-api/src/dancebox/interfaces/definitions.ts delete mode 100644 typescript-api/src/dancebox/interfaces/index.ts delete mode 100644 typescript-api/src/dancebox/interfaces/lookup.ts delete mode 100644 typescript-api/src/dancebox/interfaces/registry.ts delete mode 100644 typescript-api/src/dancebox/interfaces/tanssi/definitions.ts delete mode 100644 typescript-api/src/dancebox/interfaces/tanssi/index.ts delete mode 100644 typescript-api/src/dancebox/interfaces/tanssi/types.ts delete mode 100644 typescript-api/src/dancebox/interfaces/types-lookup.ts delete mode 100644 typescript-api/src/dancebox/interfaces/types.ts delete mode 100644 typescript-api/src/dancebox/tsconfig.json delete mode 100644 typescript-api/src/flashbox/index.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-consts.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-errors.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-events.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-query.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-rpc.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-runtime.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api-tx.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-api.ts delete mode 100644 typescript-api/src/flashbox/interfaces/augment-types.ts delete mode 100644 typescript-api/src/flashbox/interfaces/definitions.ts delete mode 100644 typescript-api/src/flashbox/interfaces/index.ts delete mode 100644 typescript-api/src/flashbox/interfaces/lookup.ts delete mode 100644 typescript-api/src/flashbox/interfaces/registry.ts delete mode 100644 typescript-api/src/flashbox/interfaces/tanssi/definitions.ts delete mode 100644 typescript-api/src/flashbox/interfaces/tanssi/index.ts delete mode 100644 typescript-api/src/flashbox/interfaces/tanssi/types.ts delete mode 100644 typescript-api/src/flashbox/interfaces/types-lookup.ts delete mode 100644 typescript-api/src/flashbox/interfaces/types.ts delete mode 100644 typescript-api/src/flashbox/tsconfig.json delete mode 100644 typescript-api/src/index.cjs delete mode 100644 typescript-api/tsconfig.base.json delete mode 100644 typescript-api/tsconfig.json diff --git a/.gitignore b/.gitignore index 3994bab..965d3e6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ # direnv files .envrc .direnv + +.vscode/settings.json diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..5fefbd6 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @sacha-l @lisa-parity diff --git a/Cargo.lock b/Cargo.lock index acf6f78..a8b26c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,9 +48,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" dependencies = [ "cfg-if", "cipher 0.4.4", @@ -73,23 +73,23 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.8" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.12", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.12", "once_cell", "version_check", "zerocopy", @@ -97,24 +97,18 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - -[[package]] -name = "always-assert" -version = "0.1.3" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-tzdata" @@ -142,48 +136,47 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -191,9 +184,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" [[package]] name = "approx" @@ -206,16 +199,30 @@ dependencies = [ [[package]] name = "aquamarine" -version = "0.4.0" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1da02abba9f9063d786eab1509833ebb2fac0f966862ca59439c76b9c566760" +dependencies = [ + "include_dir", + "itertools", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "aquamarine" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074b80d14d0240b6ce94d68f059a2d26a5d77280ae142662365a21ef6e2594ef" +checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e" dependencies = [ "include_dir", - "itertools 0.10.5", + "itertools", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -229,6 +236,18 @@ dependencies = [ "ark-std", ] +[[package]] +name = "ark-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-models-ext", + "ark-std", +] + [[package]] name = "ark-bls12-381" version = "0.4.0" @@ -241,6 +260,45 @@ dependencies = [ "ark-std", ] +[[package]] +name = "ark-bls12-381-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-models-ext", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-bw6-761" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bw6-761-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +dependencies = [ + "ark-bw6-761", + "ark-ec", + "ark-ff", + "ark-models-ext", + "ark-std", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -253,11 +311,62 @@ dependencies = [ "ark-std", "derivative", "hashbrown 0.13.2", - "itertools 0.10.5", + "itertools", "num-traits", + "rayon", "zeroize", ] +[[package]] +name = "ark-ed-on-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +dependencies = [ + "ark-bls12-377", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-377-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ff", + "ark-models-ext", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +dependencies = [ + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-models-ext", + "ark-std", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -270,11 +379,11 @@ dependencies = [ "ark-std", "derivative", "digest 0.10.7", - "itertools 0.10.5", + "itertools", "num-bigint", "num-traits", "paste", - "rustc_version 0.4.0", + "rustc_version", "zeroize", ] @@ -301,6 +410,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-models-ext" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", +] + [[package]] name = "ark-poly" version = "0.4.2" @@ -314,6 +436,35 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-scale" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-secret-scalar" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "ark-transcript", + "digest 0.10.7", + "getrandom_or_panic", + "zeroize", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -345,6 +496,20 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand", + "rayon", +] + +[[package]] +name = "ark-transcript" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", ] [[package]] @@ -355,9 +520,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "array-bytes" -version = "6.2.3" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5dde061bd34119e902bbb2d9b90c5692635cf59fb91d582c2b68043f1b8293" +checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" [[package]] name = "arrayref" @@ -365,15 +530,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" -[[package]] -name = "arrayvec" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] - [[package]] name = "arrayvec" version = "0.7.4" @@ -419,80 +575,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "asset-test-utils" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "assets-common", - "cumulus-pallet-parachain-system", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-test-relay-sproof-builder", - "frame-support", - "frame-system", - "pallet-assets", - "pallet-balances", - "pallet-collator-selection", - "pallet-session", - "pallet-xcm", - "pallet-xcm-bridge-hub-router", - "parachains-common", - "parachains-runtimes-test-utils", - "parity-scale-codec", - "polkadot-parachain-primitives", - "sp-consensus-aura", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - -[[package]] -name = "assets-common" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "impl-trait-for-tuples", - "log", - "pallet-asset-conversion", - "pallet-asset-tx-payment", - "pallet-xcm", - "parachains-common", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", -] - -[[package]] -name = "async-backing-primitives" -version = "0.9.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "sp-api", - "sp-consensus-slots", -] - [[package]] name = "async-channel" version = "1.9.0" @@ -504,91 +586,25 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy 0.5.2", - "futures-core", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "async-executor" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - [[package]] name = "async-io" -version = "2.3.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" dependencies = [ - "async-lock 3.3.0", + "async-lock", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "parking", - "polling 3.7.0", - "rustix 0.38.34", + "polling", + "rustix 0.38.31", "slab", "tracing", "windows-sys 0.52.0", ] -[[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" -dependencies = [ - "event-listener 2.5.3", -] - [[package]] name = "async-lock" version = "3.3.0" @@ -596,129 +612,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ "event-listener 4.0.3", - "event-listener-strategy 0.4.0", - "pin-project-lite 0.2.14", + "event-listener-strategy", + "pin-project-lite 0.2.13", ] [[package]] -name = "async-net" -version = "1.8.0" +name = "async-trait" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ - "async-io 1.13.0", - "blocking", - "futures-lite 1.13.0", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "async-process" -version = "1.8.1" +name = "asynchronous-codec" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", - "async-signal", - "blocking", - "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.34", - "windows-sys 0.48.0", -] - -[[package]] -name = "async-signal" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" -dependencies = [ - "async-io 2.3.2", - "async-lock 3.3.0", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.34", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "asynchronous-codec" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" -dependencies = [ - "bytes", - "futures-sink", - "futures-util", - "memchr", - "pin-project-lite 0.2.14", -] - -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - -[[package]] -name = "atomic-take" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "auto_impl" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite 0.2.13", ] [[package]] name = "autocfg" -version = "1.3.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line 0.21.0", "cc", @@ -729,6 +661,29 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "bandersnatch_vrfs" +version = "0.0.4" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-serialize", + "ark-std", + "dleq_vrf", + "fflonk", + "merlin", + "rand_chacha", + "rand_core 0.6.4", + "ring 0.1.0", + "sha2 0.10.8", + "sp-ark-bls12-381", + "sp-ark-ed-on-bls12-381-bandersnatch", + "zeroize", +] + [[package]] name = "base-x" version = "0.2.11" @@ -768,15 +723,6 @@ dependencies = [ "serde", ] -[[package]] -name = "binary-merkle-tree" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "hash-db", - "log", -] - [[package]] name = "bincode" version = "1.3.3" @@ -798,33 +744,30 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease 0.2.20", + "prettyplease 0.2.16", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] -name = "bip39" -version = "2.0.0" +name = "bitcoin-internals" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" -dependencies = [ - "bitcoin_hashes", - "rand", - "rand_core 0.6.4", - "serde", - "unicode-normalization", -] +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" [[package]] name = "bitcoin_hashes" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] [[package]] name = "bitflags" @@ -834,9 +777,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -846,7 +789,6 @@ checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" dependencies = [ "funty", "radium", - "serde", "tap", "wyz", ] @@ -872,16 +814,6 @@ dependencies = [ "digest 0.10.7", ] -[[package]] -name = "blake2-rfc" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" -dependencies = [ - "arrayvec 0.4.12", - "constant_time_eq 0.1.5", -] - [[package]] name = "blake2b_simd" version = "1.0.2" @@ -889,8 +821,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec", + "constant_time_eq", ] [[package]] @@ -900,21 +832,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.4", - "constant_time_eq 0.3.0", + "arrayvec", + "constant_time_eq", ] [[package]] name = "blake3" -version = "1.5.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec", "cc", "cfg-if", - "constant_time_eq 0.3.0", + "constant_time_eq", ] [[package]] @@ -935,217 +867,16 @@ dependencies = [ "generic-array 0.14.7", ] -[[package]] -name = "blocking" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" -dependencies = [ - "async-channel 2.3.1", - "async-lock 3.3.0", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", -] - [[package]] name = "bounded-collections" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" -dependencies = [ - "log", - "parity-scale-codec", - "scale-info", - "serde", -] - -[[package]] -name = "bounded-vec" -version = "0.7.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663ce" -dependencies = [ - "thiserror", -] - -[[package]] -name = "bp-header-chain" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-runtime", - "finality-grandpa", - "frame-support", - "parity-scale-codec", - "scale-info", - "serde", - "sp-consensus-grandpa", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "bp-messages" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-runtime", - "frame-support", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-std", -] - -[[package]] -name = "bp-parachains" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-polkadot-core", - "bp-runtime", - "frame-support", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "bp-polkadot-core" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-messages", - "bp-runtime", - "frame-support", - "frame-system", - "parity-scale-codec", - "parity-util-mem", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "bp-relayers" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-messages", - "bp-runtime", - "frame-support", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "bp-runtime" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +checksum = "d32385ecb91a31bddaf908e8dcf4a15aef1bcd3913cc03ebfad02ff6d568abc1" dependencies = [ - "frame-support", - "frame-system", - "hash-db", - "impl-trait-for-tuples", "log", - "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "trie-db", -] - -[[package]] -name = "bp-test-utils" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-parachains", - "bp-polkadot-core", - "bp-runtime", - "ed25519-dalek", - "finality-grandpa", - "parity-scale-codec", - "sp-application-crypto", - "sp-consensus-grandpa", - "sp-core", - "sp-runtime", - "sp-std", - "sp-trie", -] - -[[package]] -name = "bp-xcm-bridge-hub" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "sp-std", -] - -[[package]] -name = "bp-xcm-bridge-hub-router" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "bridge-runtime-common" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-messages", - "bp-parachains", - "bp-polkadot-core", - "bp-relayers", - "bp-runtime", - "bp-xcm-bridge-hub", - "bp-xcm-bridge-hub-router", - "frame-support", - "frame-system", - "hash-db", - "log", - "pallet-bridge-grandpa", - "pallet-bridge-messages", - "pallet-bridge-parachains", - "pallet-bridge-relayers", - "pallet-transaction-payment", - "pallet-utility", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-trie", - "staging-xcm", - "staging-xcm-builder", ] [[package]] @@ -1156,34 +887,13 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bs58" -version = "0.5.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" dependencies = [ "tinyvec", ] -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata 0.1.10", -] - -[[package]] -name = "bstr" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "build-helper" version = "0.1.1" @@ -1195,9 +905,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byte-slice-cast" @@ -1213,9 +923,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "ea31d69bda4949c1c1562c1e6f042a1caefac98cdc8a298260a2ff41c1e2d42b" [[package]] name = "byteorder" @@ -1225,9 +935,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "bzip2-sys" @@ -1252,18 +962,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" dependencies = [ "serde", ] @@ -1276,70 +986,20 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver 1.0.21", "serde", "serde_json", "thiserror", ] -[[package]] -name = "case" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c0e7b807d60291f42f33f58480c0bfafe28ed08286446f45e463728cf9c1c" - [[package]] name = "cc" -version = "1.0.98" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", "libc", - "once_cell", -] - -[[package]] -name = "ccp-authorities-noting-inherent" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "async-trait", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "dc-orchestrator-chain-interface", - "dp-collator-assignment", - "dp-core", - "nimbus-primitives", - "parity-scale-codec", - "scale-info", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "test-relay-sproof-builder", - "tracing", -] - -[[package]] -name = "ccp-xcm" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-executor", ] [[package]] @@ -1353,9 +1013,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.8" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" dependencies = [ "smallvec", ] @@ -1408,16 +1068,16 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.0", ] [[package]] @@ -1428,7 +1088,7 @@ checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143" dependencies = [ "core2", "multibase", - "multihash 0.17.0", + "multihash", "serde", "unsigned-varint", ] @@ -1453,15 +1113,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "ckb-merkle-mountain-range" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8" -dependencies = [ - "cfg-if", -] - [[package]] name = "clang-sys" version = "1.7.0" @@ -1505,7 +1156,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -1514,17 +1165,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" -[[package]] -name = "coarsetime" -version = "0.1.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13b3839cf01bb7960114be3ccf2340f541b6d0c81f8690b007b2b39f750f7e5d" -dependencies = [ - "libc", - "wasix", - "wasm-bindgen", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -1537,21 +1177,37 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "comfy-table" -version = "7.1.1" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" +checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686" dependencies = [ - "strum 0.26.2", - "strum_macros 0.26.2", + "strum 0.25.0", + "strum_macros 0.25.3", "unicode-width", ] +[[package]] +name = "common" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#665f5f51af5734c7b6d90b985dd6861d4c5b4752" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "fflonk", + "getrandom_or_panic", + "merlin", + "rand_chacha", +] + [[package]] name = "common-path" version = "1.0.0" @@ -1560,9 +1216,9 @@ checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101" [[package]] name = "concurrent-queue" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] @@ -1588,9 +1244,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const-random" -version = "0.1.18" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a" dependencies = [ "const-random-macro", ] @@ -1601,17 +1257,11 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.12", "once_cell", "tiny-keccak", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "constant_time_eq" version = "0.3.0" @@ -1624,379 +1274,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" -[[package]] -name = "container-chain-frontier-node" -version = "0.7.0" -dependencies = [ - "async-io 1.13.0", - "async-trait", - "ccp-authorities-noting-inherent", - "clap", - "container-chain-template-frontier-runtime", - "cumulus-client-cli", - "cumulus-client-consensus-aura", - "cumulus-client-consensus-common", - "cumulus-client-network", - "cumulus-client-parachain-inherent", - "cumulus-client-service", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "cumulus-test-relay-sproof-builder", - "fc-api", - "fc-cli", - "fc-consensus", - "fc-db", - "fc-mapping-sync", - "fc-rpc", - "fc-rpc-core", - "fc-storage", - "flume 0.10.14", - "fp-evm", - "fp-rpc", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-system-rpc-runtime-api", - "futures 0.3.30", - "hex-literal 0.3.4", - "jsonrpsee", - "log", - "manual-xcm-rpc", - "nimbus-consensus", - "nimbus-primitives", - "node-common", - "pallet-ethereum", - "pallet-transaction-payment-rpc", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "polkadot-cli", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-service", - "sc-basic-authorship", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-manual-seal", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-offchain", - "sc-rpc", - "sc-service", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-debug-derive", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-timestamp", - "sp-transaction-pool", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "substrate-prometheus-endpoint", - "tc-consensus", - "try-runtime-cli", - "url", -] - -[[package]] -name = "container-chain-simple-node" -version = "0.7.0" -dependencies = [ - "async-io 1.13.0", - "async-trait", - "ccp-authorities-noting-inherent", - "clap", - "container-chain-template-simple-runtime", - "cumulus-client-cli", - "cumulus-client-consensus-aura", - "cumulus-client-consensus-common", - "cumulus-client-network", - "cumulus-client-parachain-inherent", - "cumulus-client-service", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "dc-orchestrator-chain-interface", - "dc-orchestrator-chain-rpc-interface", - "department-funding-rpc", - "department-funding-runtime-api", - "dp-core", - "flume 0.10.14", - "frame-benchmarking", - "frame-benchmarking-cli", - "futures 0.3.30", - "hex-literal 0.3.4", - "jsonrpsee", - "log", - "manual-xcm-rpc", - "nimbus-consensus", - "nimbus-primitives", - "node-common", - "pallet-shared-storage", - "parity-scale-codec", - "polkadot-cli", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-service", - "positive-externality-rpc", - "positive-externality-runtime-api", - "profile-validation-rpc", - "profile-validation-runtime-api", - "project-tips-rpc", - "project-tips-runtime-api", - "sc-basic-authorship", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-manual-seal", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-offchain", - "sc-rpc", - "sc-service", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-timestamp", - "sp-transaction-pool", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "substrate-prometheus-endpoint", - "tc-consensus", - "tokio", - "try-runtime-cli", - "url", -] - -[[package]] -name = "container-chain-template-frontier-runtime" -version = "0.1.0" -dependencies = [ - "async-backing-primitives", - "ccp-xcm", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-timestamp", - "cumulus-primitives-utility", - "dp-consensus", - "dp-impl-tanssi-pallets-config", - "dp-slot-duration-runtime-api", - "fp-account", - "fp-evm", - "fp-rpc", - "fp-self-contained", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.3.4", - "log", - "nimbus-primitives", - "num_enum", - "pallet-asset-rate", - "pallet-assets", - "pallet-async-backing", - "pallet-author-inherent", - "pallet-balances", - "pallet-base-fee", - "pallet-cc-authorities-noting", - "pallet-ethereum", - "pallet-evm", - "pallet-evm-chain-id", - "pallet-evm-precompile-balances-erc20", - "pallet-evm-precompile-batch", - "pallet-evm-precompile-call-permit", - "pallet-evm-precompile-modexp", - "pallet-evm-precompile-sha3fips", - "pallet-evm-precompile-simple", - "pallet-evm-precompile-xcm-utils", - "pallet-evm-precompileset-assets-erc20", - "pallet-foreign-asset-creator", - "pallet-maintenance-mode", - "pallet-message-queue", - "pallet-migrations", - "pallet-multisig", - "pallet-proxy", - "pallet-root-testing", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-tx-pause", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "pallet-xcm-executor-utils", - "parachains-common", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "precompile-utils", - "runtime-common", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", - "xcm-primitives", -] - -[[package]] -name = "container-chain-template-simple-runtime" -version = "0.1.0" -dependencies = [ - "async-backing-primitives", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-timestamp", - "cumulus-primitives-utility", - "department-funding-runtime-api", - "dp-consensus", - "dp-impl-tanssi-pallets-config", - "dp-slot-duration-runtime-api", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.3.4", - "log", - "nimbus-primitives", - "pallet-asset-rate", - "pallet-assets", - "pallet-async-backing", - "pallet-author-inherent", - "pallet-balances", - "pallet-cc-authorities-noting", - "pallet-department-funding", - "pallet-foreign-asset-creator", - "pallet-insecure-randomness-collective-flip", - "pallet-maintenance-mode", - "pallet-message-queue", - "pallet-migrations", - "pallet-multisig", - "pallet-positive-externality", - "pallet-profile-validation", - "pallet-project-tips", - "pallet-proxy", - "pallet-root-testing", - "pallet-schelling-game-shared", - "pallet-session", - "pallet-shared-storage", - "pallet-sortition-sum-game", - "pallet-sudo", - "pallet-template", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-tx-pause", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "pallet-xcm-executor-utils", - "parachains-common", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "positive-externality-runtime-api", - "profile-validation-runtime-api", - "project-tips-runtime-api", - "runtime-common", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", - "xcm-primitives", -] - [[package]] name = "convert_case" version = "0.4.0" @@ -2028,12 +1305,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "core_extensions" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c71dc07c9721607e7a16108336048ee978c3a8b129294534272e8bac96c0ee" - [[package]] name = "cpp_demangle" version = "0.3.5" @@ -2043,16 +1314,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "cpu-time" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7ded" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "cpufeatures" version = "0.2.12" @@ -2086,7 +1347,7 @@ dependencies = [ "gimli 0.27.3", "hashbrown 0.13.2", "log", - "regalloc2", + "regalloc2 0.6.1", "smallvec", "target-lexicon", ] @@ -2153,33 +1414,18 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "itertools 0.10.5", + "itertools", "log", "smallvec", "wasmparser", "wasmtime-types", ] -[[package]] -name = "crc" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] @@ -2203,20 +1449,11 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -2267,16 +1504,6 @@ dependencies = [ "subtle 2.5.0", ] -[[package]] -name = "crypto-mac" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" -dependencies = [ - "generic-array 0.14.7", - "subtle 2.5.0", -] - [[package]] name = "ctr" version = "0.9.2" @@ -2287,9043 +1514,4134 @@ dependencies = [ ] [[package]] -name = "cumulus-client-cli" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ - "clap", - "parity-scale-codec", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-service", - "sp-blockchain", - "sp-core", - "sp-runtime", - "url", + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle 2.5.0", + "zeroize", ] [[package]] -name = "cumulus-client-collator" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "curve25519-dalek" +version = "4.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ - "cumulus-client-consensus-common", - "cumulus-client-network", - "cumulus-primitives-core", - "futures 0.3.30", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-primitives", - "sc-client-api", - "sp-api", - "sp-consensus", - "sp-core", - "sp-runtime", - "tracing", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle 2.5.0", + "zeroize", ] [[package]] -name = "cumulus-client-consensus-aura" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "async-trait", - "cumulus-client-collator", - "cumulus-client-consensus-common", - "cumulus-client-consensus-proposer", - "cumulus-client-parachain-inherent", - "cumulus-primitives-aura", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "futures 0.3.30", - "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-primitives", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-babe", - "sc-consensus-slots", - "sc-telemetry", - "schnellru", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-timestamp", - "substrate-prometheus-endpoint", - "tracing", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "cumulus-client-consensus-common" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "cxx" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de00f15a6fa069c99b88c5c78c4541d0e7899a33b86f7480e23df2431fce0bc" dependencies = [ - "async-trait", - "cumulus-client-pov-recovery", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "dyn-clone", - "futures 0.3.30", - "log", - "parity-scale-codec", - "polkadot-primitives", - "sc-client-api", - "sc-consensus", - "sc-consensus-babe", - "schnellru", - "sp-blockchain", - "sp-consensus", - "sp-consensus-slots", - "sp-core", - "sp-runtime", - "sp-timestamp", - "sp-trie", - "substrate-prometheus-endpoint", - "tracing", + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", ] [[package]] -name = "cumulus-client-consensus-proposer" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "cxx-build" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a71e1e631fa2f2f5f92e8b0d860a00c198c6771623a6cefcc863e3554f0d8d6" dependencies = [ - "anyhow", - "async-trait", - "cumulus-primitives-parachain-inherent", - "sp-consensus", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "thiserror", + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn 2.0.57", ] [[package]] -name = "cumulus-client-network" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "cumulus-relay-chain-interface", - "futures 0.3.30", - "futures-timer", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-node-primitives", - "polkadot-parachain-primitives", - "polkadot-primitives", - "sc-client-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", - "tracing", -] +name = "cxxbridge-flags" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3fed61d56ba497c4efef9144dfdbaa25aa58f2f6b3a7cf441d4591c583745c" [[package]] -name = "cumulus-client-parachain-inherent" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "cxxbridge-macro" +version = "1.0.115" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8908e380a8efd42150c017b0cfa31509fc49b6d47f7cb6b33e93ffb8f4e3661e" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "cumulus-test-relay-sproof-builder", - "parity-scale-codec", - "sc-client-api", - "scale-info", - "sp-api", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", - "tracing", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "cumulus-client-pov-recovery" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "futures 0.3.30", - "futures-timer", - "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-primitives", - "rand", - "sc-client-api", - "sc-consensus", - "sp-consensus", - "sp-maybe-compressed-blob", - "sp-runtime", - "tracing", + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core 0.9.9", ] [[package]] -name = "cumulus-client-service" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "cumulus-client-cli", - "cumulus-client-collator", - "cumulus-client-consensus-common", - "cumulus-client-network", - "cumulus-client-pov-recovery", - "cumulus-primitives-core", - "cumulus-primitives-proof-size-hostfunction", - "cumulus-relay-chain-inprocess-interface", - "cumulus-relay-chain-interface", - "cumulus-relay-chain-minimal-node", - "futures 0.3.30", - "polkadot-primitives", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-sync", - "sc-network-transactions", - "sc-rpc", - "sc-service", - "sc-sysinfo", - "sc-telemetry", - "sc-transaction-pool", - "sc-utils", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-transaction-pool", -] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] -name = "cumulus-pallet-dmp-queue" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "data-encoding-macro" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20c01c06f5f429efdf2bae21eb67c28b3df3cf85b7dd2d8ef09c0838dac5d33e" dependencies = [ - "cumulus-primitives-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", + "data-encoding", + "data-encoding-macro-internal", ] [[package]] -name = "cumulus-pallet-parachain-system" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "data-encoding-macro-internal" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0047d07f2c89b17dd631c80450d69841a6b5d7fb17278cbc43d7e4cfcf2576f3" dependencies = [ - "bytes", - "cumulus-pallet-parachain-system-proc-macro", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-primitives-proof-size-hostfunction", - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-message-queue", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-runtime-parachains", - "scale-info", - "sp-core", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "sp-version", - "staging-xcm", - "trie-db", + "data-encoding", + "syn 1.0.109", ] [[package]] -name = "cumulus-pallet-parachain-system-proc-macro" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.65", + "const-oid", + "zeroize", ] [[package]] -name = "cumulus-pallet-session-benchmarking" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "sp-runtime", - "sp-std", + "asn1-rs", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", ] [[package]] -name = "cumulus-pallet-xcm" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "cumulus-primitives-core", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", + "powerfmt", ] [[package]] -name = "cumulus-pallet-xcmp-queue" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "bounded-collections", - "bp-xcm-bridge-hub-router", - "cumulus-primitives-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-message-queue", - "parity-scale-codec", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-executor", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "cumulus-primitives-aura" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "derive-syn-parse" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-primitives", - "sp-api", - "sp-consensus-aura", - "sp-runtime", - "sp-std", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "cumulus-primitives-core" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-primitives", - "scale-info", - "sp-api", - "sp-runtime", - "sp-std", - "sp-trie", - "staging-xcm", + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", ] [[package]] -name = "cumulus-primitives-parachain-inherent" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "cumulus-primitives-core", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-inherents", - "sp-std", - "sp-trie", -] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] -name = "cumulus-primitives-proof-size-hostfunction" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "sp-externalities", - "sp-runtime-interface", - "sp-trie", + "generic-array 0.12.4", ] [[package]] -name = "cumulus-primitives-timestamp" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "cumulus-primitives-core", - "futures 0.3.30", - "parity-scale-codec", - "sp-inherents", - "sp-std", - "sp-timestamp", + "generic-array 0.14.7", ] [[package]] -name = "cumulus-primitives-utility" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "cumulus-primitives-core", - "frame-support", - "log", - "pallet-xcm-benchmarks", - "parity-scale-codec", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle 2.5.0", ] [[package]] -name = "cumulus-relay-chain-inprocess-interface" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "futures 0.3.30", - "futures-timer", - "polkadot-cli", - "polkadot-service", - "sc-cli", - "sc-client-api", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sp-api", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-state-machine", + "dirs-sys", ] [[package]] -name = "cumulus-relay-chain-interface" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "directories-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "futures 0.3.30", - "jsonrpsee-core", - "parity-scale-codec", - "polkadot-overseer", - "sc-client-api", - "sp-api", - "sp-blockchain", - "sp-state-machine", - "thiserror", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "cumulus-relay-chain-minimal-node" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "array-bytes 6.2.3", - "async-trait", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "cumulus-relay-chain-rpc-interface", - "futures 0.3.30", - "parking_lot 0.12.2", - "polkadot-availability-recovery", - "polkadot-collator-protocol", - "polkadot-core-primitives", - "polkadot-network-bridge", - "polkadot-node-collation-generation", - "polkadot-node-core-chain-api", - "polkadot-node-core-prospective-parachains", - "polkadot-node-core-runtime-api", - "polkadot-node-network-protocol", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-primitives", - "sc-authority-discovery", - "sc-client-api", - "sc-network", - "sc-network-common", - "sc-service", - "sc-tracing", - "sc-utils", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-runtime", - "substrate-prometheus-endpoint", - "tokio", - "tracing", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "cumulus-relay-chain-rpc-interface" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "either", - "futures 0.3.30", - "futures-timer", - "jsonrpsee", - "parity-scale-codec", - "pin-project", - "polkadot-overseer", - "rand", - "sc-client-api", - "sc-rpc-api", - "sc-service", - "schnellru", - "serde", - "serde_json", - "smoldot", - "smoldot-light", - "sp-api", - "sp-authority-discovery", - "sp-consensus-babe", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-version", - "thiserror", - "tokio", - "tokio-util", - "tracing", - "url", + "libc", + "redox_users", + "winapi", ] [[package]] -name = "cumulus-test-relay-sproof-builder" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ - "cumulus-primitives-core", - "parity-scale-codec", - "polkadot-primitives", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "curve25519-dalek" -version = "3.2.0" +name = "dissimilar" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" + +[[package]] +name = "dleq_vrf" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle 2.5.0", + "ark-ec", + "ark-ff", + "ark-scale", + "ark-secret-scalar", + "ark-serialize", + "ark-std", + "ark-transcript", + "arrayvec", "zeroize", ] [[package]] -name = "curve25519-dalek" -version = "4.1.2" +name = "docify" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" +checksum = "7cc4fd38aaa9fb98ac70794c82a00360d1e165a87fbf96a8a91f9dfc602aaee2" dependencies = [ - "cfg-if", - "cpufeatures", - "curve25519-dalek-derive", - "digest 0.10.7", - "fiat-crypto", - "platforms", - "rustc_version 0.4.0", - "subtle 2.5.0", - "zeroize", + "docify_macros", ] [[package]] -name = "curve25519-dalek-derive" -version = "0.1.1" +name = "docify_macros" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +checksum = "63fa215f3a0d40fb2a221b3aa90d8e1fbb8379785a990cb60d62ac71ebdc6460" dependencies = [ + "common-path", + "derive-syn-parse", + "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "regex", + "syn 2.0.57", + "termcolor", + "toml 0.8.10", + "walkdir", ] [[package]] -name = "curve25519-dalek-ng" -version = "4.1.1" +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.6.4", - "subtle-ng", - "zeroize", -] +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] -name = "cxx" -version = "1.0.122" +name = "dtoa" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb497fad022245b29c2a0351df572e2d67c1046bcef2260ebc022aec81efea82" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] -name = "cxx-build" -version = "1.0.122" +name = "dyn-clonable" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9327c7f9fbd6329a200a5d4aa6f674c60ab256525ff0084b52a889d4e4c60cee" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 2.0.65", + "dyn-clonable-impl", + "dyn-clone", ] [[package]] -name = "cxxbridge-flags" -version = "1.0.122" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c799a4a846f1c0acb9f36bb9c6272d9b3d9457f3633c7753c6057270df13c" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.122" +name = "dyn-clonable-impl" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928bc249a7e3cd554fd2e8e08a426e9670c50bbfc9a621653cfa9accc9641783" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", -] - -[[package]] -name = "dancebox-runtime" -version = "0.1.0" -dependencies = [ - "assets-common", - "async-backing-primitives", - "container-chain-template-frontier-runtime", - "container-chain-template-simple-runtime", - "cumulus-pallet-dmp-queue", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-pallet-xcm", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-primitives-timestamp", - "cumulus-primitives-utility", - "cumulus-test-relay-sproof-builder", - "dp-consensus", - "dp-core", - "dp-slot-duration-runtime-api", - "emulated-integration-tests-common", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.3.4", - "log", - "nimbus-primitives", - "pallet-asset-rate", - "pallet-assets", - "pallet-async-backing", - "pallet-author-inherent", - "pallet-author-noting", - "pallet-author-noting-runtime-api", - "pallet-authority-assignment", - "pallet-authority-mapping", - "pallet-balances", - "pallet-collator-assignment", - "pallet-collator-assignment-runtime-api", - "pallet-configuration", - "pallet-data-preservers", - "pallet-foreign-asset-creator", - "pallet-identity", - "pallet-inflation-rewards", - "pallet-initializer", - "pallet-invulnerables", - "pallet-maintenance-mode", - "pallet-message-queue", - "pallet-migrations", - "pallet-multisig", - "pallet-pooled-staking", - "pallet-proxy", - "pallet-registrar", - "pallet-registrar-runtime-api", - "pallet-relay-storage-roots", - "pallet-root-testing", - "pallet-services-payment", - "pallet-services-payment-runtime-api", - "pallet-session", - "pallet-staking", - "pallet-stream-payment", - "pallet-stream-payment-runtime-api", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-treasury", - "pallet-tx-pause", - "pallet-utility", - "pallet-xcm", - "pallet-xcm-benchmarks", - "pallet-xcm-core-buyer", - "parachains-common", - "parity-scale-codec", - "paste", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "polkadot-service", - "rococo-runtime", - "rococo-runtime-constants", - "runtime-common", - "sc-consensus-grandpa", - "sc-service", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-beefy", - "sp-consensus-slots", - "sp-core", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", - "tanssi-relay-encoder", - "test-relay-sproof-builder", - "tp-author-noting-inherent", - "tp-traits", - "westend-runtime", - "westend-runtime-constants", - "xcm-emulator", - "xcm-primitives", + "syn 1.0.109", ] [[package]] -name = "data-encoding" -version = "2.6.0" +name = "dyn-clone" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" [[package]] -name = "data-encoding-macro" -version = "0.1.15" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1559b6cba622276d6d63706db152618eeb15b89b3e4041446b05876e352e639" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "data-encoding", - "data-encoding-macro-internal", + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", ] [[package]] -name = "data-encoding-macro-internal" -version = "0.1.13" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332d754c0af53bc87c108fed664d121ecf59207ec4196041f04d6ab9002ad33f" -dependencies = [ - "data-encoding", - "syn 1.0.109", -] - -[[package]] -name = "dc-orchestrator-chain-interface" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "async-trait", - "cumulus-primitives-core", - "dp-core", - "futures 0.3.30", - "jsonrpsee", - "parity-scale-codec", - "polkadot-overseer", - "sc-client-api", - "sp-api", - "sp-blockchain", - "sp-state-machine", - "thiserror", + "pkcs8", + "signature", ] [[package]] -name = "dc-orchestrator-chain-rpc-interface" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "async-io 1.13.0", - "async-trait", - "dc-orchestrator-chain-interface", - "dp-core", - "futures 0.3.30", - "jsonrpsee", - "parity-scale-codec", - "polkadot-overseer", - "sc-client-api", - "sc-rpc-api", - "sc-service", - "schnellru", + "curve25519-dalek 4.1.2", + "ed25519", + "rand_core 0.6.4", "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-state-machine", - "sp-storage", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "url", -] - -[[package]] -name = "department-funding-rpc" -version = "0.1.0" -dependencies = [ - "department-funding-runtime-api", - "jsonrpsee", - "parity-scale-codec", - "sc-rpc", - "sp-api", - "sp-blockchain", - "sp-runtime", + "sha2 0.10.8", + "subtle 2.5.0", + "zeroize", ] [[package]] -name = "department-funding-runtime-api" -version = "0.1.0" +name = "ed25519-zebra" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-std", + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", + "hex", + "rand_core 0.6.4", + "sha2 0.9.9", + "zeroize", ] [[package]] -name = "der" -version = "0.7.9" +name = "either" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "zeroize", -] +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] -name = "der-parser" -version = "8.2.0" +name = "elliptic-curve" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array 0.14.7", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "serdect", + "subtle 2.5.0", + "zeroize", ] [[package]] -name = "deranged" -version = "0.3.11" +name = "encode_unicode" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "derivative" -version = "2.2.0" +name = "enum-as-inner" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ + "heck 0.4.1", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "derive-syn-parse" -version = "0.1.5" +name = "env_logger" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", ] [[package]] -name = "derive-syn-parse" -version = "0.2.0" +name = "environmental" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" [[package]] -name = "derive_more" -version = "0.99.17" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn 1.0.109", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "diff" -version = "0.1.13" +name = "errno" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] [[package]] -name = "difflib" -version = "0.4.0" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "digest" -version = "0.8.1" +name = "event-listener" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" dependencies = [ - "generic-array 0.12.4", + "concurrent-queue", + "parking", + "pin-project-lite 0.2.13", ] [[package]] -name = "digest" -version = "0.9.0" +name = "event-listener-strategy" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" dependencies = [ - "generic-array 0.14.7", + "event-listener 4.0.3", + "pin-project-lite 0.2.13", ] [[package]] -name = "digest" -version = "0.10.7" +name = "exit-future" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "block-buffer 0.10.4", - "const-oid", - "crypto-common", - "subtle 2.5.0", + "futures", ] [[package]] -name = "directories" -version = "5.0.1" +name = "expander" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7" dependencies = [ - "dirs-sys", + "blake2 0.10.6", + "fs-err", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "directories-next" -version = "2.0.0" +name = "fallible-iterator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "fallible-iterator" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "fastrand" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] -name = "displaydoc" -version = "0.2.4" +name = "fdlimit" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", + "libc", + "thiserror", ] [[package]] -name = "dissimilar" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" - -[[package]] -name = "docify" -version = "0.2.8" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2f138ad521dc4a2ced1a4576148a6a610b4c5923933b062a263130a6802ce" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "docify_macros", + "rand_core 0.6.4", + "subtle 2.5.0", ] [[package]] -name = "docify_macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a081e51fb188742f5a7a1164ad752121abcb22874b21e2c3b0dd040c515fdad" +name = "fflonk" +version = "0.1.0" +source = "git+https://github.com/w3f/fflonk#1e854f35e9a65d08b11a86291405cdc95baa0a35" dependencies = [ - "common-path", - "derive-syn-parse 0.2.0", - "once_cell", - "proc-macro2", - "quote", - "regex", - "syn 2.0.65", - "termcolor", - "toml 0.8.13", - "walkdir", + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "merlin", ] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "fiat-crypto" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" [[package]] -name = "downcast" -version = "0.11.0" +name = "file-per-thread-logger" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +dependencies = [ + "env_logger", + "log", +] [[package]] -name = "downcast-rs" -version = "1.2.1" +name = "filetime" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" - -[[package]] -name = "dp-chain-state-snapshot" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ - "cumulus-primitives-core", - "parity-scale-codec", - "sp-runtime", - "sp-state-machine", - "sp-trie", + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", ] [[package]] -name = "dp-collator-assignment" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +name = "finality-grandpa" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ - "cumulus-primitives-core", - "frame-support", - "hex-literal 0.3.4", + "either", + "futures", + "futures-timer", "log", + "num-traits", "parity-scale-codec", - "polkadot-primitives", + "parking_lot 0.12.1", "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", ] [[package]] -name = "dp-consensus" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "cumulus-primitives-core", - "frame-support", - "frame-system", - "nimbus-primitives", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-consensus-aura", - "sp-runtime", - "sp-std", + "byteorder", + "rand", + "rustc-hex", + "static_assertions", ] [[package]] -name = "dp-core" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "hex-literal 0.3.4", - "parity-scale-codec", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "dp-impl-tanssi-pallets-config" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ - "dp-consensus", - "frame-support", - "impls", - "pallet-author-inherent", - "pallet-cc-authorities-noting", - "pallet-timestamp", - "sp-core", - "sp-runtime", + "crc32fast", + "libz-sys", + "miniz_oxide", ] [[package]] -name = "dp-slot-duration-runtime-api" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" +name = "float-cmp" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ - "cumulus-primitives-core", - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", + "num-traits", ] [[package]] -name = "dtoa" -version = "1.0.9" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "dyn-clonable" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +name = "fork-tree" +version = "12.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "dyn-clonable-impl", - "dyn-clone", + "parity-scale-codec", ] [[package]] -name = "dyn-clonable-impl" -version = "0.9.0" +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "percent-encoding", ] [[package]] -name = "dyn-clone" -version = "1.0.17" +name = "fragile" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +name = "frame-benchmarking" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "der", - "digest 0.10.7", - "elliptic-curve", - "rfc6979", - "signature", - "spki", -] - -[[package]] -name = "ed25519" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" -dependencies = [ - "pkcs8", - "signature", + "frame-support", + "frame-support-procedural", + "frame-system", + "linregress", + "log", + "parity-scale-codec", + "paste", + "scale-info", + "serde", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "static_assertions", ] [[package]] -name = "ed25519-dalek" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +name = "frame-benchmarking-cli" +version = "32.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "curve25519-dalek 4.1.2", - "ed25519", - "rand_core 0.6.4", + "Inflector", + "array-bytes 6.2.2", + "chrono", + "clap", + "comfy-table", + "frame-benchmarking", + "frame-support", + "frame-system", + "gethostname", + "handlebars", + "itertools", + "lazy_static", + "linked-hash-map", + "log", + "parity-scale-codec", + "rand", + "rand_pcg", + "sc-block-builder", + "sc-cli", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-service", + "sc-sysinfo", "serde", - "sha2 0.10.8", - "subtle 2.5.0", - "zeroize", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-database", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-inherents", + "sp-io", + "sp-keystore", + "sp-runtime", + "sp-state-machine", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-trie", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "thiserror", + "thousands", ] [[package]] -name = "ed25519-zebra" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" +name = "frame-executive" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "curve25519-dalek 3.2.0", - "hashbrown 0.12.3", - "hex", - "rand_core 0.6.4", - "sha2 0.9.9", - "zeroize", + "aquamarine 0.3.3", + "frame-support", + "frame-system", + "frame-try-runtime", + "log", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "ed25519-zebra" -version = "4.0.3" +name = "frame-metadata" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" dependencies = [ - "curve25519-dalek 4.1.2", - "ed25519", - "hashbrown 0.14.5", - "hex", - "rand_core 0.6.4", - "sha2 0.10.8", - "zeroize", + "cfg-if", + "parity-scale-codec", + "scale-info", + "serde", ] [[package]] -name = "either" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +name = "frame-remote-externalities" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ + "futures", + "indicatif", + "jsonrpsee", + "log", + "parity-scale-codec", "serde", + "sp-core", + "sp-crypto-hashing", + "sp-io", + "sp-runtime", + "sp-state-machine", + "spinners", + "substrate-rpc-client", + "tokio", + "tokio-retry", ] [[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +name = "frame-support" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "base16ct", - "crypto-bigint", - "digest 0.10.7", - "ff", - "generic-array 0.14.7", - "group", - "pkcs8", - "rand_core 0.6.4", - "sec1", - "subtle 2.5.0", - "zeroize", -] - -[[package]] -name = "emulated-integration-tests-common" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "asset-test-utils", - "bp-messages", - "bridge-runtime-common", - "cumulus-pallet-parachain-system", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "frame-support", - "pallet-assets", - "pallet-balances", - "pallet-bridge-messages", - "pallet-im-online", - "pallet-message-queue", - "pallet-xcm", - "parachains-common", + "aquamarine 0.5.0", + "array-bytes 6.2.2", + "bitflags 1.3.2", + "docify", + "environmental", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "k256", + "log", + "macro_magic", "parity-scale-codec", "paste", - "polkadot-primitives", - "polkadot-runtime-parachains", - "polkadot-service", - "sc-consensus-grandpa", + "scale-info", + "serde", "serde_json", - "sp-authority-discovery", - "sp-consensus-babe", - "sp-consensus-beefy", + "smallvec", + "sp-api", + "sp-arithmetic", "sp-core", + "sp-crypto-hashing-proc-macro", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-genesis-builder", + "sp-inherents", + "sp-io", + "sp-metadata-ir", "sp-runtime", - "staging-xcm", - "xcm-emulator", + "sp-staking", + "sp-state-machine", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-weights", + "static_assertions", + "tt-call", ] [[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "enum-as-inner" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +name = "frame-support-procedural" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "heck 0.4.1", + "Inflector", + "cfg-expr", + "derive-syn-parse", + "expander", + "frame-support-procedural-tools", + "itertools", + "macro_magic", + "proc-macro-warning", "proc-macro2", "quote", - "syn 1.0.109", -] - -[[package]] -name = "enumflags2" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" -dependencies = [ - "enumflags2_derive", + "sp-crypto-hashing", + "syn 2.0.57", ] [[package]] -name = "enumflags2_derive" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +name = "frame-support-procedural-tools" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] -name = "enumn" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fd000fd6988e73bbe993ea3db9b1aa64906ab88766d654973924340c8cddb42" +name = "frame-support-procedural-tools-derive" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +name = "frame-support-test" +version = "3.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", + "frame-benchmarking", + "frame-executive", + "frame-metadata", + "frame-support", + "frame-support-test-pallet", + "frame-system", + "parity-scale-codec", + "pretty_assertions", + "rustversion", + "scale-info", + "serde", + "sp-api", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-metadata-ir", + "sp-runtime", + "sp-state-machine", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-version", + "static_assertions", + "trybuild", ] [[package]] -name = "environmental" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" +name = "frame-support-test-pallet" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", + "sp-runtime", +] [[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "ethbloom" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +name = "frame-system" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "crunchy", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", + "cfg-if", + "docify", + "frame-support", + "log", + "parity-scale-codec", "scale-info", - "tiny-keccak", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-version", + "sp-weights", ] [[package]] -name = "ethereum" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04d24d20b8ff2235cffbf242d5092de3aa45f77c5270ddbfadd2778ca13fea" +name = "frame-system-benchmarking" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "bytes", - "ethereum-types", - "hash-db", - "hash256-std-hasher", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "rlp", "scale-info", - "serde", - "sha3", - "trie-root", + "sp-core", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "ethereum-types" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +name = "frame-system-rpc-runtime-api" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "ethbloom", - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "primitive-types", - "scale-info", - "uint", + "parity-scale-codec", + "sp-api", ] [[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +name = "frame-try-runtime" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", + "frame-support", + "parity-scale-codec", + "sp-api", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "event-listener" -version = "4.0.3" +name = "fs-err" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", + "autocfg", ] [[package]] -name = "event-listener" -version = "5.3.0" +name = "fs2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite 0.2.14", + "libc", + "winapi", ] [[package]] -name = "event-listener-strategy" -version = "0.4.0" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite 0.2.14", -] +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] -name = "event-listener-strategy" -version = "0.5.2" +name = "futures" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ - "event-listener 5.3.0", - "pin-project-lite 0.2.14", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "evm" -version = "0.41.1" +name = "futures-channel" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767f43e9630cc36cf8ff2777cbb0121b055f0d1fd6eaaa13b46a1808f0d0e7e9" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ - "auto_impl", - "environmental", - "ethereum", - "evm-core", - "evm-gasometer", - "evm-runtime", - "log", - "parity-scale-codec", - "primitive-types", - "rlp", - "scale-info", - "serde", - "sha3", + "futures-core", + "futures-sink", ] [[package]] -name = "evm-core" -version = "0.41.0" +name = "futures-core" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da6cedc5cedb4208e59467106db0d1f50db01b920920589f8e672c02fdc04f" -dependencies = [ - "parity-scale-codec", - "primitive-types", - "scale-info", - "serde", -] +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] -name = "evm-gasometer" -version = "0.41.0" +name = "futures-executor" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dc0eb591abc5cd7b05bef6a036c2bb6c66ab6c5e0c5ce94bfe377ab670b1fd7" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ - "environmental", - "evm-core", - "evm-runtime", - "primitive-types", + "futures-core", + "futures-task", + "futures-util", + "num_cpus", ] [[package]] -name = "evm-runtime" -version = "0.41.0" +name = "futures-io" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84bbe09b64ae13a29514048c1bb6fda6374ac0b4f6a1f15a443348ab88ef42cd" -dependencies = [ - "auto_impl", - "environmental", - "evm-core", - "primitive-types", - "sha3", -] +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] -name = "exit-future" -version = "0.2.0" +name = "futures-lite" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" dependencies = [ - "futures 0.3.30", + "futures-core", + "pin-project-lite 0.2.13", ] [[package]] -name = "expander" -version = "0.0.4" +name = "futures-macro" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "blake3", - "fs-err", "proc-macro2", "quote", + "syn 2.0.57", ] [[package]] -name = "expander" -version = "2.1.0" +name = "futures-rustls" +version = "0.22.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e83c02035136f1592a47964ea60c05a50e4ed8b5892cfac197063850898d4d" +checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" dependencies = [ - "blake2 0.10.6", - "fs-err", - "prettier-please", - "proc-macro2", - "quote", - "syn 2.0.65", + "futures-io", + "rustls 0.20.9", + "webpki", ] [[package]] -name = "fallible-iterator" -version = "0.2.0" +name = "futures-sink" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] -name = "faster-hex" -version = "0.6.1" +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e2ce894d53b295cf97b05685aa077950ff3e8541af83217fc720a6437169f8" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] -name = "fastrand" -version = "1.9.0" +name = "futures-util" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "instant", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.13", + "pin-utils", + "slab", ] [[package]] -name = "fastrand" -version = "2.1.0" +name = "fxhash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] [[package]] -name = "fatality" -version = "0.0.6" +name = "generic-array" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad875162843b0d046276327afe0136e9ed3a23d5a754210fb6f1f33610d39ab" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" dependencies = [ - "fatality-proc-macro", - "thiserror", + "typenum", ] [[package]] -name = "fatality-proc-macro" -version = "0.0.6" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bd" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "expander 0.0.4", - "indexmap 1.9.3", - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", - "thiserror", + "typenum", + "version_check", + "zeroize", ] [[package]] -name = "fc-api" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" dependencies = [ - "async-trait", - "fp-storage", - "parity-scale-codec", - "sp-core", - "sp-runtime", + "libc", + "winapi", ] [[package]] -name = "fc-cli" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "clap", - "ethereum-types", - "fc-db", - "fp-rpc", - "fp-storage", - "sc-cli", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-runtime", + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] -name = "fc-consensus" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ - "async-trait", - "fp-consensus", - "fp-rpc", - "sc-consensus", - "sp-api", - "sp-block-builder", - "sp-consensus", - "sp-runtime", - "thiserror", + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] -name = "fc-db" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "async-trait", - "ethereum", - "fc-api", - "fc-storage", - "fp-consensus", - "fp-rpc", - "fp-storage", - "futures 0.3.30", - "kvdb-rocksdb", - "log", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.2", - "sc-client-api", - "sc-client-db", - "smallvec", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-runtime", - "sp-storage", - "sqlx", - "tokio", + "rand", + "rand_core 0.6.4", ] [[package]] -name = "fc-mapping-sync" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "ghash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ - "fc-db", - "fc-storage", - "fp-consensus", - "fp-rpc", - "futures 0.3.30", - "futures-timer", - "log", - "parking_lot 0.12.2", - "sc-client-api", - "sc-utils", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "tokio", + "opaque-debug 0.3.0", + "polyval", ] [[package]] -name = "fc-rpc" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" dependencies = [ - "ethereum", - "ethereum-types", - "evm", - "fc-api", - "fc-mapping-sync", - "fc-rpc-core", - "fc-storage", - "fp-evm", - "fp-rpc", - "fp-storage", - "futures 0.3.30", - "hex", - "jsonrpsee", - "libsecp256k1", - "log", - "pallet-evm", - "parity-scale-codec", - "prometheus", - "rand", - "rlp", - "sc-client-api", - "sc-consensus-aura", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-rpc", - "sc-service", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "schnellru", - "serde", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-core", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-timestamp", - "substrate-prometheus-endpoint", - "thiserror", - "tokio", + "fallible-iterator 0.2.0", + "indexmap 1.9.3", + "stable_deref_trait", ] [[package]] -name = "fc-rpc-core" -version = "1.1.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" dependencies = [ - "ethereum", - "ethereum-types", - "jsonrpsee", - "rustc-hex", - "serde", - "serde_json", + "fallible-iterator 0.3.0", + "stable_deref_trait", ] [[package]] -name = "fc-storage" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "ethereum", - "ethereum-types", - "fp-rpc", - "fp-storage", - "parity-scale-codec", - "sc-client-api", - "sp-api", - "sp-blockchain", - "sp-io", - "sp-runtime", - "sp-storage", -] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] -name = "fdlimit" -version = "0.3.0" +name = "governor" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5" +checksum = "68a7f542ee6b35af73b06abc0dad1c1bae89964e4e253bc4b587b91c9637867b" dependencies = [ - "libc", - "thiserror", + "cfg-if", + "dashmap", + "futures", + "futures-timer", + "no-std-compat", + "nonzero_ext", + "parking_lot 0.12.1", + "portable-atomic", + "quanta", + "rand", + "smallvec", + "spinning_top", ] [[package]] -name = "ff" +name = "group" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ + "ff", "rand_core 0.6.4", "subtle 2.5.0", ] [[package]] -name = "fiat-crypto" -version = "0.2.9" +name = "h2" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.2.2", + "slab", + "tokio", + "tokio-util", + "tracing", +] [[package]] -name = "file-per-thread-logger" -version = "0.1.6" +name = "handlebars" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" +checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" dependencies = [ - "env_logger", "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "filetime" -version = "0.2.23" +name = "hash-db" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", -] +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" [[package]] -name = "finality-grandpa" -version = "0.16.2" +name = "hash256-std-hasher" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" dependencies = [ - "either", - "futures 0.3.30", - "futures-timer", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.2", - "scale-info", + "crunchy", ] [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", + "ahash 0.7.7", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[package]] -name = "flashbox-runtime" -version = "0.1.0" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "async-backing-primitives", - "cumulus-pallet-parachain-system", - "cumulus-pallet-session-benchmarking", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-primitives-timestamp", - "cumulus-primitives-utility", - "cumulus-test-relay-sproof-builder", - "dp-consensus", - "dp-core", - "dp-slot-duration-runtime-api", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.3.4", - "log", - "nimbus-primitives", - "pallet-async-backing", - "pallet-author-inherent", - "pallet-author-noting", - "pallet-author-noting-runtime-api", - "pallet-authority-assignment", - "pallet-authority-mapping", - "pallet-balances", - "pallet-collator-assignment", - "pallet-collator-assignment-runtime-api", - "pallet-configuration", - "pallet-data-preservers", - "pallet-identity", - "pallet-inflation-rewards", - "pallet-initializer", - "pallet-invulnerables", - "pallet-maintenance-mode", - "pallet-migrations", - "pallet-multisig", - "pallet-proxy", - "pallet-registrar", - "pallet-registrar-runtime-api", - "pallet-relay-storage-roots", - "pallet-root-testing", - "pallet-services-payment", - "pallet-services-payment-runtime-api", - "pallet-session", - "pallet-stream-payment", - "pallet-stream-payment-runtime-api", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-treasury", - "pallet-tx-pause", - "pallet-utility", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "runtime-common", - "sc-consensus-grandpa", - "scale-info", - "serde", - "smallvec", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-beefy", - "sp-consensus-slots", - "sp-core", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "staging-parachain-info", - "substrate-wasm-builder", - "test-relay-sproof-builder", - "tp-author-noting-inherent", - "tp-traits", + "ahash 0.8.7", ] [[package]] -name = "flate2" -version = "1.0.30" +name = "hashbrown" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", + "ahash 0.8.7", + "allocator-api2", ] [[package]] -name = "float-cmp" -version = "0.9.0" +name = "hashlink" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "num-traits", + "hashbrown 0.14.3", ] [[package]] -name = "flume" -version = "0.10.14" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "spin 0.9.8", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "flume" -version = "0.11.0" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" -dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +name = "hermit-abi" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "hex" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "foreign-types-shared" +name = "hex-conservative" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" [[package]] -name = "fork-tree" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "parity-scale-codec", + "hmac 0.12.1", ] [[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "percent-encoding", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] -name = "fp-account" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "hex", - "impl-serde", - "libsecp256k1", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", + "digest 0.10.7", ] [[package]] -name = "fp-consensus" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "ethereum", - "parity-scale-codec", - "sp-core", - "sp-runtime", - "sp-std", + "digest 0.9.0", + "generic-array 0.14.7", + "hmac 0.8.1", ] [[package]] -name = "fp-ethereum" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "ethereum", - "ethereum-types", - "fp-evm", - "frame-support", - "parity-scale-codec", - "sp-std", + "windows-sys 0.52.0", ] [[package]] -name = "fp-evm" -version = "3.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ - "evm", - "frame-support", - "num_enum", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-std", + "libc", + "match_cfg", + "winapi", ] [[package]] -name = "fp-rpc" -version = "3.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "http" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ - "ethereum", - "ethereum-types", - "fp-evm", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "fp-self-contained" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "frame-support", - "parity-scale-codec", - "scale-info", - "serde", - "sp-runtime", + "bytes", + "http", + "pin-project-lite 0.2.13", ] [[package]] -name = "fp-storage" -version = "2.0.0" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "parity-scale-codec", - "serde", -] +name = "http-range-header" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] -name = "fragile" -version = "2.0.0" +name = "httparse" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] -name = "frame-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-support-procedural", - "frame-system", - "linregress", - "log", - "parity-scale-codec", - "paste", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-runtime-interface", - "sp-std", - "sp-storage", - "static_assertions", -] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] -name = "frame-benchmarking-cli" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ - "Inflector", - "array-bytes 6.2.3", - "chrono", - "clap", - "comfy-table", - "frame-benchmarking", - "frame-support", - "frame-system", - "gethostname", - "handlebars", - "itertools 0.10.5", - "lazy_static", - "linked-hash-map", - "log", - "parity-scale-codec", - "rand", - "rand_pcg", - "sc-block-builder", - "sc-cli", - "sc-client-api", - "sc-client-db", - "sc-executor", - "sc-service", - "sc-sysinfo", - "serde", - "serde_json", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-database", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-storage", - "sp-trie", - "sp-wasm-interface", - "thiserror", - "thousands", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.13", + "socket2 0.5.5", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] -name = "frame-election-provider-solution-type" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.65", + "futures-util", + "http", + "hyper", + "log", + "rustls 0.21.10", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", ] [[package]] -name = "frame-election-provider-support" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ - "frame-election-provider-solution-type", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-npos-elections", - "sp-runtime", - "sp-std", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.52.0", ] [[package]] -name = "frame-executive" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ - "frame-support", - "frame-system", - "frame-try-runtime", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", + "cc", ] [[package]] -name = "frame-metadata" -version = "16.0.0" +name = "idna" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", - "serde", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "frame-remote-externalities" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "futures 0.3.30", - "indicatif", - "jsonrpsee", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if-addrs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "if-watch" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +dependencies = [ + "async-io", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", "log", - "parity-scale-codec", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "spinners", - "substrate-rpc-client", + "rtnetlink", + "system-configuration", "tokio", - "tokio-retry", + "windows", ] [[package]] -name = "frame-support" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" dependencies = [ - "aquamarine", - "array-bytes 6.2.3", - "bitflags 1.3.2", - "docify", - "environmental", - "frame-metadata", - "frame-support-procedural", - "impl-trait-for-tuples", - "k256", - "log", - "macro_magic", "parity-scale-codec", - "paste", - "scale-info", - "serde", - "serde_json", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-core-hashing-proc-macro", - "sp-debug-derive", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-metadata-ir", - "sp-runtime", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-tracing", - "sp-weights", - "static_assertions", - "tt-call", ] [[package]] -name = "frame-support-procedural" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ - "Inflector", - "cfg-expr", - "derive-syn-parse 0.1.5", - "expander 2.1.0", - "frame-support-procedural-tools", - "itertools 0.10.5", - "macro_magic", - "proc-macro-warning", - "proc-macro2", - "quote", - "sp-core-hashing", - "syn 2.0.65", + "serde", ] [[package]] -name = "frame-support-procedural-tools" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "frame-support-procedural-tools-derive", - "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 1.0.109", ] [[package]] -name = "frame-support-procedural-tools-derive" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", + "include_dir_macros", ] [[package]] -name = "frame-support-test" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" dependencies = [ - "frame-benchmarking", - "frame-executive", - "frame-metadata", - "frame-support", - "frame-support-test-pallet", - "frame-system", - "parity-scale-codec", - "pretty_assertions", - "rustversion", - "scale-info", - "serde", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-metadata-ir", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-version", - "static_assertions", - "trybuild", + "proc-macro2", + "quote", ] [[package]] -name = "frame-support-test-pallet" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", + "autocfg", + "hashbrown 0.12.3", "serde", - "sp-runtime", ] [[package]] -name = "frame-system" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "indexmap" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" dependencies = [ - "cfg-if", - "docify", - "frame-support", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-version", - "sp-weights", + "equivalent", + "hashbrown 0.14.3", ] [[package]] -name = "frame-system-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", ] [[package]] -name = "frame-system-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "parity-scale-codec", - "sp-api", + "generic-array 0.14.7", ] [[package]] -name = "frame-try-runtime" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-std", + "cfg-if", ] [[package]] -name = "fs-err" -version = "2.11.0" +name = "integer-sqrt" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" dependencies = [ - "autocfg", + "num-traits", ] [[package]] -name = "fs2" -version = "0.4.3" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ + "hermit-abi", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] -name = "fs4" -version = "0.7.0" +name = "ip_network" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" + +[[package]] +name = "ipconfig" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f9df8a11882c4e3335eb2d18a0137c505d9ca927470b0cac9c6f0ae07d28f7" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "rustix 0.38.34", + "socket2 0.5.5", + "widestring", "windows-sys 0.48.0", + "winreg", ] [[package]] -name = "funty" -version = "2.0.0" +name = "ipnet" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] -name = "futures" -version = "0.1.31" +name = "is-terminal" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" +checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +dependencies = [ + "hermit-abi", + "rustix 0.38.31", + "windows-sys 0.52.0", +] [[package]] -name = "futures" -version = "0.3.30" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "either", ] [[package]] -name = "futures-channel" -version = "0.3.30" +name = "itoa" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] -name = "futures-core" -version = "0.3.30" +name = "jobserver" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] [[package]] -name = "futures-executor" -version = "0.3.30" +name = "js-sys" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ - "futures-core", - "futures-task", - "futures-util", - "num_cpus", + "wasm-bindgen", ] [[package]] -name = "futures-intrusive" -version = "0.5.0" +name = "jsonrpsee" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +checksum = "3cdbb7cb6f3ba28f5b212dd250ab4483105efc3e381f5c8bb90340f14f0a2cc3" dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.12.2", + "jsonrpsee-core", + "jsonrpsee-http-client", + "jsonrpsee-proc-macros", + "jsonrpsee-server", + "jsonrpsee-types", + "jsonrpsee-ws-client", + "tokio", + "tracing", ] [[package]] -name = "futures-io" -version = "0.3.30" +name = "jsonrpsee-client-transport" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9ab2e14e727d2faf388c99d9ca5210566ed3b044f07d92c29c3611718d178380" +dependencies = [ + "futures-util", + "http", + "jsonrpsee-core", + "pin-project", + "rustls-native-certs 0.7.0", + "rustls-pki-types", + "soketto", + "thiserror", + "tokio", + "tokio-rustls 0.25.0", + "tokio-util", + "tracing", + "url", +] [[package]] -name = "futures-lite" -version = "1.13.0" +name = "jsonrpsee-core" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "71962a1c49af43adf81d337e4ebc93f3c915faf6eccaa14d74e255107dfd7723" dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite 0.2.14", - "waker-fn", + "anyhow", + "async-lock", + "async-trait", + "beef", + "futures-timer", + "futures-util", + "hyper", + "jsonrpsee-types", + "parking_lot 0.12.1", + "pin-project", + "rand", + "rustc-hash", + "serde", + "serde_json", + "thiserror", + "tokio", + "tokio-stream", + "tracing", ] [[package]] -name = "futures-lite" -version = "2.3.0" +name = "jsonrpsee-http-client" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "8c13987da51270bda2c1c9b40c19be0fe9b225c7a0553963d8f17e683a50ce84" dependencies = [ - "fastrand 2.1.0", - "futures-core", - "futures-io", - "parking", - "pin-project-lite 0.2.14", + "async-trait", + "hyper", + "hyper-rustls", + "jsonrpsee-core", + "jsonrpsee-types", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", ] [[package]] -name = "futures-macro" -version = "0.3.30" +name = "jsonrpsee-proc-macros" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "1d7c2416c400c94b2e864603c51a5bbd5b103386da1f5e58cbf01e7bb3ef0833" dependencies = [ + "heck 0.4.1", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] -name = "futures-rustls" -version = "0.22.2" +name = "jsonrpsee-server" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd" +checksum = "4882e640e70c2553e3d9487e6f4dddd5fd11918f25e40fa45218f9fe29ed2152" dependencies = [ - "futures-io", - "rustls 0.20.9", - "webpki", + "futures-util", + "http", + "hyper", + "jsonrpsee-core", + "jsonrpsee-types", + "pin-project", + "route-recognizer", + "serde", + "serde_json", + "soketto", + "thiserror", + "tokio", + "tokio-stream", + "tokio-util", + "tower", + "tracing", ] [[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.30" +name = "jsonrpsee-types" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "1e53c72de6cd2ad6ac1aa6e848206ef8b736f92ed02354959130373dfa5b3cbd" dependencies = [ - "futures 0.1.31", - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.14", - "pin-utils", - "slab", + "anyhow", + "beef", + "serde", + "serde_json", + "thiserror", ] [[package]] -name = "fxhash" -version = "0.2.1" +name = "jsonrpsee-ws-client" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +checksum = "c8a07ab8da9a283b906f6735ddd17d3680158bb72259e853441d1dd0167079ec" dependencies = [ - "byteorder", + "http", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", + "url", ] [[package]] -name = "generic-array" -version = "0.12.4" +name = "k256" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ - "typenum", + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "keccak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "typenum", - "version_check", - "zeroize", + "cpufeatures", ] [[package]] -name = "gethostname" -version = "0.2.3" +name = "keystream" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] +checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" [[package]] -name = "getrandom" -version = "0.1.16" +name = "kvdb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" dependencies = [ - "cfg-if", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "smallvec", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "kvdb-memorydb" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", + "kvdb", + "parking_lot 0.12.1", ] [[package]] -name = "getrandom_or_panic" -version = "0.0.3" +name = "kvdb-rocksdb" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" dependencies = [ - "rand", - "rand_core 0.6.4", + "kvdb", + "num_cpus", + "parking_lot 0.12.1", + "regex", + "rocksdb", + "smallvec", ] [[package]] -name = "ghash" -version = "0.5.1" +name = "lazy_static" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" -dependencies = [ - "opaque-debug 0.3.1", - "polyval", -] +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "gimli" -version = "0.27.3" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" -dependencies = [ - "fallible-iterator", - "indexmap 1.9.3", - "stable_deref_trait", -] +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] -name = "gimli" -version = "0.28.1" +name = "libc" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] -name = "glob" -version = "0.3.1" +name = "libloading" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ - "aho-corasick", - "bstr 1.9.1", - "log", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] -name = "group" -version = "0.13.0" +name = "libm" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle 2.5.0", -] +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] -name = "h2" -version = "0.3.26" +name = "libp2p" +version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" dependencies = [ "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", + "futures", + "futures-timer", + "getrandom 0.2.12", + "instant", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", + "libp2p-dns", + "libp2p-identify", + "libp2p-identity", + "libp2p-kad", + "libp2p-mdns", + "libp2p-metrics", + "libp2p-noise", + "libp2p-ping", + "libp2p-quic", + "libp2p-request-response", + "libp2p-swarm", + "libp2p-tcp", + "libp2p-wasm-ext", + "libp2p-websocket", + "libp2p-yamux", + "multiaddr", + "pin-project", ] [[package]] -name = "handlebars" -version = "4.5.0" +name = "libp2p-allow-block-list" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" +checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "hash-db" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" - -[[package]] -name = "hash256-std-hasher" -version = "0.15.2" +name = "libp2p-connection-limits" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" dependencies = [ - "crunchy", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", ] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "libp2p-core" +version = "0.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" dependencies = [ - "ahash 0.7.8", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-identity", + "log", + "multiaddr", + "multihash", + "multistream-select", + "once_cell", + "parking_lot 0.12.1", + "pin-project", + "quick-protobuf", + "rand", + "rw-stream-sink", + "smallvec", + "thiserror", + "unsigned-varint", + "void", ] [[package]] -name = "hashbrown" -version = "0.13.2" +name = "libp2p-dns" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ - "ahash 0.8.11", + "futures", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "smallvec", + "trust-dns-resolver", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "libp2p-identify" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" dependencies = [ - "ahash 0.8.11", - "allocator-api2", - "serde", + "asynchronous-codec", + "either", + "futures", + "futures-timer", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "lru", + "quick-protobuf", + "quick-protobuf-codec", + "smallvec", + "thiserror", + "void", ] [[package]] -name = "hashlink" -version = "0.8.4" +name = "libp2p-identity" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" dependencies = [ - "hashbrown 0.14.5", + "bs58 0.4.0", + "ed25519-dalek", + "log", + "multiaddr", + "multihash", + "quick-protobuf", + "rand", + "sha2 0.10.8", + "thiserror", + "zeroize", ] [[package]] -name = "heck" -version = "0.4.1" +name = "libp2p-kad" +version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ - "unicode-segmentation", + "arrayvec", + "asynchronous-codec", + "bytes", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "quick-protobuf", + "rand", + "sha2 0.10.8", + "smallvec", + "thiserror", + "uint", + "unsigned-varint", + "void", ] [[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-literal" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" - -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - -[[package]] -name = "hkdf" -version = "0.12.4" +name = "libp2p-mdns" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" dependencies = [ - "hmac 0.12.1", + "data-encoding", + "futures", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "log", + "rand", + "smallvec", + "socket2 0.4.10", + "tokio", + "trust-dns-proto", + "void", ] [[package]] -name = "hmac" -version = "0.8.1" +name = "libp2p-metrics" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", + "libp2p-core", + "libp2p-identify", + "libp2p-kad", + "libp2p-ping", + "libp2p-swarm", + "prometheus-client", ] [[package]] -name = "hmac" -version = "0.11.0" +name = "libp2p-noise" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" dependencies = [ - "crypto-mac 0.11.0", - "digest 0.9.0", + "bytes", + "curve25519-dalek 3.2.0", + "futures", + "libp2p-core", + "libp2p-identity", + "log", + "once_cell", + "quick-protobuf", + "rand", + "sha2 0.10.8", + "snow", + "static_assertions", + "thiserror", + "x25519-dalek 1.1.1", + "zeroize", ] [[package]] -name = "hmac" -version = "0.12.1" +name = "libp2p-ping" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ - "digest 0.10.7", + "either", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-swarm", + "log", + "rand", + "void", ] [[package]] -name = "hmac-drbg" -version = "0.3.0" +name = "libp2p-quic" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ - "digest 0.9.0", - "generic-array 0.14.7", - "hmac 0.8.1", + "bytes", + "futures", + "futures-timer", + "if-watch", + "libp2p-core", + "libp2p-identity", + "libp2p-tls", + "log", + "parking_lot 0.12.1", + "quinn-proto", + "rand", + "rustls 0.20.9", + "thiserror", + "tokio", ] [[package]] -name = "home" -version = "0.5.9" +name = "libp2p-request-response" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" dependencies = [ - "windows-sys 0.52.0", + "async-trait", + "futures", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "rand", + "smallvec", ] [[package]] -name = "hostname" -version = "0.3.1" +name = "libp2p-swarm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" dependencies = [ - "libc", - "match_cfg", - "winapi", + "either", + "fnv", + "futures", + "futures-timer", + "instant", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm-derive", + "log", + "rand", + "smallvec", + "tokio", + "void", ] [[package]] -name = "http" -version = "0.2.12" +name = "libp2p-swarm-derive" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ - "bytes", - "fnv", - "itoa", + "heck 0.4.1", + "quote", + "syn 1.0.109", ] [[package]] -name = "http-body" -version = "0.4.6" +name = "libp2p-tcp" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ - "bytes", - "http", - "pin-project-lite 0.2.14", + "futures", + "futures-timer", + "if-watch", + "libc", + "libp2p-core", + "log", + "socket2 0.4.10", + "tokio", ] [[package]] -name = "http-range-header" -version = "0.3.1" +name = "libp2p-tls" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" +dependencies = [ + "futures", + "futures-rustls", + "libp2p-core", + "libp2p-identity", + "rcgen", + "ring 0.16.20", + "rustls 0.20.9", + "thiserror", + "webpki", + "x509-parser", + "yasna", +] [[package]] -name = "httparse" -version = "1.8.0" +name = "libp2p-wasm-ext" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" +dependencies = [ + "futures", + "js-sys", + "libp2p-core", + "parity-send-wrapper", + "wasm-bindgen", + "wasm-bindgen-futures", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "libp2p-websocket" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" +dependencies = [ + "either", + "futures", + "futures-rustls", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "quicksink", + "rw-stream-sink", + "soketto", + "url", + "webpki-roots", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "libp2p-yamux" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" +dependencies = [ + "futures", + "libp2p-core", + "log", + "thiserror", + "yamux", +] [[package]] -name = "hyper" -version = "0.14.28" +name = "libredox" +version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite 0.2.14", - "socket2 0.5.7", - "tokio", - "tower-service", - "tracing", - "want", + "bitflags 2.4.2", + "libc", + "redox_syscall 0.4.1", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "librocksdb-sys" +version = "0.11.0+8.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" dependencies = [ - "futures-util", - "http", - "hyper", - "log", - "rustls 0.21.12", - "rustls-native-certs", - "tokio", - "tokio-rustls", - "webpki-roots 0.25.4", + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "tikv-jemalloc-sys", ] [[package]] -name = "iana-time-zone" -version = "0.1.60" +name = "libsecp256k1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core 0.52.0", + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand", + "serde", + "sha2 0.9.9", + "typenum", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "libsecp256k1-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ - "cc", + "crunchy", + "digest 0.9.0", + "subtle 2.5.0", ] [[package]] -name = "idna" -version = "0.2.3" +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "libsecp256k1-core", ] [[package]] -name = "idna" -version = "0.5.0" +name = "libsecp256k1-gen-genmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "libsecp256k1-core", ] [[package]] -name = "if-addrs" -version = "0.10.2" +name = "libz-sys" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" dependencies = [ - "libc", - "windows-sys 0.48.0", + "cc", + "pkg-config", + "vcpkg", ] [[package]] -name = "if-watch" -version = "3.2.0" +name = "link-cplusplus" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e" +checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" dependencies = [ - "async-io 2.3.2", - "core-foundation", - "fnv", - "futures 0.3.30", - "if-addrs", - "ipnet", - "log", - "rtnetlink", - "system-configuration", - "tokio", - "windows", + "cc", ] [[package]] -name = "impl-codec" -version = "0.6.0" +name = "linked-hash-map" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linked_hash_set" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" dependencies = [ - "parity-scale-codec", + "linked-hash-map", ] [[package]] -name = "impl-rlp" -version = "0.3.0" +name = "linregress" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" dependencies = [ - "rlp", + "nalgebra", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "linux-raw-sys" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lioness" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" dependencies = [ - "serde", + "arrayref", + "blake2 0.8.1", + "chacha", + "keystream", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" +name = "lock_api" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "autocfg", + "scopeguard", ] [[package]] -name = "impls" -version = "1.0.3" +name = "log" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a46645bbd70538861a90d0f26c31537cdf1e44aae99a794fb75a664b70951bc" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] -name = "include_dir" -version = "0.7.3" +name = "lru" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" dependencies = [ - "include_dir_macros", + "hashbrown 0.13.2", ] [[package]] -name = "include_dir_macros" -version = "0.7.3" +name = "lru-cache" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ - "proc-macro2", - "quote", + "linked-hash-map", ] [[package]] -name = "indexmap" -version = "1.9.3" +name = "lz4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", + "libc", + "lz4-sys", ] [[package]] -name = "indexmap" -version = "2.2.6" +name = "lz4-sys" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" dependencies = [ - "equivalent", - "hashbrown 0.14.5", + "cc", + "libc", ] [[package]] -name = "indexmap-nostd" -version = "0.4.0" +name = "mach" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] [[package]] -name = "indicatif" -version = "0.17.8" +name = "macro_magic" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" dependencies = [ - "console", - "instant", - "number_prefix", - "portable-atomic", - "unicode-width", + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.57", ] [[package]] -name = "inout" -version = "0.1.3" +name = "macro_magic_core" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" dependencies = [ - "generic-array 0.14.7", + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "instant" -version = "0.1.13" +name = "macro_magic_core_macros" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" dependencies = [ - "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.57", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.57", ] [[package]] -name = "integer-encoding" -version = "3.0.4" +name = "maplit" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] -name = "integer-sqrt" -version = "0.1.5" +name = "match_cfg" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" dependencies = [ - "num-traits", + "regex-automata 0.1.10", ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", + "regex-automata 0.1.10", ] [[package]] -name = "ip_network" -version = "0.4.1" +name = "matches" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] -name = "ipconfig" -version = "0.3.2" +name = "matrixmultiply" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" dependencies = [ - "socket2 0.5.7", - "widestring", - "windows-sys 0.48.0", - "winreg", + "autocfg", + "rawpointer", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "memchr" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] -name = "is-terminal" -version = "0.4.12" +name = "memfd" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", + "rustix 0.38.31", ] [[package]] -name = "is_executable" -version = "1.0.1" +name = "memmap2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" dependencies = [ - "winapi", + "libc", ] [[package]] -name = "is_terminal_polyfill" -version = "1.70.0" +name = "memmap2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" +dependencies = [ + "libc", +] [[package]] -name = "itertools" -version = "0.10.5" +name = "memoffset" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ - "either", + "autocfg", ] [[package]] -name = "itertools" -version = "0.11.0" +name = "memory-db" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" dependencies = [ - "either", + "hash-db", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "merlin" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ - "either", + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "jobserver" -version = "0.1.31" +name = "miniz_oxide" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ - "libc", + "adler", ] [[package]] -name = "js-sys" -version = "0.3.69" +name = "mio" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ - "wasm-bindgen", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "jsonrpsee" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" -dependencies = [ - "jsonrpsee-core", - "jsonrpsee-http-client", - "jsonrpsee-proc-macros", - "jsonrpsee-server", - "jsonrpsee-types", - "jsonrpsee-ws-client", - "tracing", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" -dependencies = [ - "futures-util", - "http", - "jsonrpsee-core", - "jsonrpsee-types", - "pin-project", - "rustls-native-certs", - "soketto", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "tracing", - "webpki-roots 0.25.4", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" +name = "mixnet" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" dependencies = [ - "anyhow", - "arrayvec 0.7.4", - "async-lock 2.8.0", - "async-trait", - "beef", - "futures-channel", - "futures-timer", - "futures-util", - "globset", - "hyper", - "jsonrpsee-types", - "parking_lot 0.12.2", + "arrayref", + "arrayvec", + "bitflags 1.3.2", + "blake2 0.10.6", + "c2-chacha", + "curve25519-dalek 4.1.2", + "either", + "hashlink", + "lioness", + "log", + "parking_lot 0.12.1", "rand", - "rustc-hash", - "serde", - "serde_json", - "soketto", + "rand_chacha", + "rand_distr", + "subtle 2.5.0", "thiserror", - "tokio", - "tracing", + "zeroize", ] [[package]] -name = "jsonrpsee-http-client" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" +name = "mockall" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" dependencies = [ - "async-trait", - "hyper", - "hyper-rustls", - "jsonrpsee-core", - "jsonrpsee-types", - "rustc-hash", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", + "cfg-if", + "downcast", + "fragile", + "lazy_static", + "mockall_derive", + "predicates", + "predicates-tree", ] [[package]] -name = "jsonrpsee-proc-macros" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" +name = "mockall_derive" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" dependencies = [ - "heck 0.4.1", - "proc-macro-crate 1.3.1", + "cfg-if", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "jsonrpsee-server" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" -dependencies = [ - "futures-channel", - "futures-util", - "http", - "hyper", - "jsonrpsee-core", - "jsonrpsee-types", - "serde", - "serde_json", - "soketto", - "tokio", - "tokio-stream", - "tokio-util", - "tower", - "tracing", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" +name = "multiaddr" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" dependencies = [ - "anyhow", - "beef", + "arrayref", + "byteorder", + "data-encoding", + "log", + "multibase", + "multihash", + "percent-encoding", "serde", - "serde_json", - "thiserror", - "tracing", + "static_assertions", + "unsigned-varint", + "url", ] [[package]] -name = "jsonrpsee-ws-client" -version = "0.16.3" -source = "git+https://github.com/moondance-labs/jsonrpsee?branch=tanssi-polkadot-v1.1.0#d6435421dba9d33886251d07c27c40403c954fa3" +name = "multibase" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" dependencies = [ - "http", - "jsonrpsee-client-transport", - "jsonrpsee-core", - "jsonrpsee-types", + "base-x", + "data-encoding", + "data-encoding-macro", ] [[package]] -name = "k256" -version = "0.13.3" +name = "multihash" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ - "cfg-if", - "ecdsa", - "elliptic-curve", - "once_cell", + "blake2b_simd", + "blake2s_simd", + "blake3", + "core2", + "digest 0.10.7", + "multihash-derive", "sha2 0.10.8", + "sha3", + "unsigned-varint", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "multihash-derive" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db" dependencies = [ - "cpufeatures", + "proc-macro-crate 1.1.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure", ] [[package]] -name = "keystream" -version = "1.0.0" +name = "multimap" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] -name = "kvdb" -version = "0.13.0" +name = "multistream-select" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9" +checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" dependencies = [ + "bytes", + "futures", + "log", + "pin-project", "smallvec", + "unsigned-varint", ] [[package]] -name = "kvdb-memorydb" -version = "0.13.0" +name = "nalgebra" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" dependencies = [ - "kvdb", - "parking_lot 0.12.2", + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", ] [[package]] -name = "kvdb-rocksdb" -version = "0.19.0" +name = "nalgebra-macros" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" dependencies = [ - "kvdb", - "num_cpus", - "parking_lot 0.12.2", - "regex", - "rocksdb", - "smallvec", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "landlock" -version = "0.3.1" +name = "names" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9baa9eeb6e315942429397e617a190f4fdc696ef1ee0342939d641029cbb4ea7" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" dependencies = [ - "enumflags2", - "libc", - "thiserror", + "rand", ] [[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" +name = "netlink-packet-core" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" +checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" +dependencies = [ + "anyhow", + "byteorder", + "libc", + "netlink-packet-utils", +] [[package]] -name = "libc" -version = "0.2.155" +name = "netlink-packet-route" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" +dependencies = [ + "anyhow", + "bitflags 1.3.2", + "byteorder", + "libc", + "netlink-packet-core", + "netlink-packet-utils", +] [[package]] -name = "libloading" -version = "0.8.3" +name = "netlink-packet-utils" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" dependencies = [ - "cfg-if", - "windows-targets 0.52.5", + "anyhow", + "byteorder", + "paste", + "thiserror", ] [[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libp2p" -version = "0.51.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe" -dependencies = [ - "bytes", - "futures 0.3.30", - "futures-timer", - "getrandom 0.2.15", - "instant", - "libp2p-allow-block-list", - "libp2p-connection-limits", - "libp2p-core", - "libp2p-dns", - "libp2p-identify", - "libp2p-identity", - "libp2p-kad", - "libp2p-mdns", - "libp2p-metrics", - "libp2p-noise", - "libp2p-ping", - "libp2p-quic", - "libp2p-request-response", - "libp2p-swarm", - "libp2p-tcp", - "libp2p-wasm-ext", - "libp2p-websocket", - "libp2p-yamux", - "multiaddr", - "pin-project", -] - -[[package]] -name = "libp2p-allow-block-list" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", -] - -[[package]] -name = "libp2p-connection-limits" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" -dependencies = [ - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "void", -] - -[[package]] -name = "libp2p-core" -version = "0.39.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2" -dependencies = [ - "either", - "fnv", - "futures 0.3.30", - "futures-timer", - "instant", - "libp2p-identity", - "log", - "multiaddr", - "multihash 0.17.0", - "multistream-select", - "once_cell", - "parking_lot 0.12.2", - "pin-project", - "quick-protobuf", - "rand", - "rw-stream-sink", - "smallvec", - "thiserror", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-dns" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" -dependencies = [ - "futures 0.3.30", - "libp2p-core", - "log", - "parking_lot 0.12.2", - "smallvec", - "trust-dns-resolver", -] - -[[package]] -name = "libp2p-identify" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" -dependencies = [ - "asynchronous-codec", - "either", - "futures 0.3.30", - "futures-timer", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "lru 0.10.1", - "quick-protobuf", - "quick-protobuf-codec", - "smallvec", - "thiserror", - "void", -] - -[[package]] -name = "libp2p-identity" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce" -dependencies = [ - "bs58 0.4.0", - "ed25519-dalek", - "log", - "multiaddr", - "multihash 0.17.0", - "quick-protobuf", - "rand", - "sha2 0.10.8", - "thiserror", - "zeroize", -] - -[[package]] -name = "libp2p-kad" -version = "0.43.3" +name = "netlink-proto" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" dependencies = [ - "arrayvec 0.7.4", - "asynchronous-codec", "bytes", - "either", - "fnv", - "futures 0.3.30", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", + "futures", "log", - "quick-protobuf", - "rand", - "sha2 0.10.8", - "smallvec", + "netlink-packet-core", + "netlink-sys", "thiserror", - "uint", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-mdns" -version = "0.43.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" -dependencies = [ - "data-encoding", - "futures 0.3.30", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "log", - "rand", - "smallvec", - "socket2 0.4.10", "tokio", - "trust-dns-proto", - "void", -] - -[[package]] -name = "libp2p-metrics" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" -dependencies = [ - "libp2p-core", - "libp2p-identify", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "prometheus-client", ] [[package]] -name = "libp2p-noise" -version = "0.42.2" +name = "netlink-sys" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", - "curve25519-dalek 3.2.0", - "futures 0.3.30", - "libp2p-core", - "libp2p-identity", + "futures", + "libc", "log", - "once_cell", - "quick-protobuf", - "rand", - "sha2 0.10.8", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", + "tokio", ] [[package]] -name = "libp2p-ping" -version = "0.42.0" +name = "nix" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "either", - "futures 0.3.30", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand", - "void", + "bitflags 1.3.2", + "cfg-if", + "libc", ] [[package]] -name = "libp2p-quic" -version = "0.7.0-alpha.3" +name = "no-std-compat" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" -dependencies = [ - "bytes", - "futures 0.3.30", - "futures-timer", - "if-watch", - "libp2p-core", - "libp2p-identity", - "libp2p-tls", - "log", - "parking_lot 0.12.2", - "quinn-proto", - "rand", - "rustls 0.20.9", - "thiserror", - "tokio", -] +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" [[package]] -name = "libp2p-request-response" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" +name = "node-template" +version = "0.0.0" dependencies = [ - "async-trait", - "futures 0.3.30", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm", - "rand", - "smallvec", -] - -[[package]] -name = "libp2p-swarm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" -dependencies = [ - "either", - "fnv", - "futures 0.3.30", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-identity", - "libp2p-swarm-derive", - "log", - "rand", - "smallvec", - "tokio", - "void", -] - -[[package]] -name = "libp2p-swarm-derive" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" -dependencies = [ - "heck 0.4.1", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "libp2p-tcp" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" -dependencies = [ - "futures 0.3.30", - "futures-timer", - "if-watch", - "libc", - "libp2p-core", - "log", - "socket2 0.4.10", - "tokio", -] - -[[package]] -name = "libp2p-tls" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" -dependencies = [ - "futures 0.3.30", - "futures-rustls", - "libp2p-core", - "libp2p-identity", - "rcgen", - "ring 0.16.20", - "rustls 0.20.9", - "thiserror", - "webpki", - "x509-parser", - "yasna", -] - -[[package]] -name = "libp2p-wasm-ext" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" -dependencies = [ - "futures 0.3.30", - "js-sys", - "libp2p-core", - "parity-send-wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "libp2p-websocket" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" -dependencies = [ - "either", - "futures 0.3.30", - "futures-rustls", - "libp2p-core", - "log", - "parking_lot 0.12.2", - "quicksink", - "rw-stream-sink", - "soketto", - "url", - "webpki-roots 0.22.6", -] - -[[package]] -name = "libp2p-yamux" -version = "0.43.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" -dependencies = [ - "futures 0.3.30", - "libp2p-core", - "log", - "thiserror", - "yamux", -] - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - -[[package]] -name = "librocksdb-sys" -version = "0.11.0+8.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" -dependencies = [ - "bindgen", - "bzip2-sys", - "cc", - "glob", - "libc", - "libz-sys", - "tikv-jemalloc-sys", -] - -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand", - "serde", - "sha2 0.9.9", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle 2.5.0", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "link-cplusplus" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linked_hash_set" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "linregress" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2" -dependencies = [ - "nalgebra", -] - -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - -[[package]] -name = "lioness" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9" -dependencies = [ - "arrayref", - "blake2 0.8.1", - "chacha", - "keystream", -] - -[[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "lru" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" -dependencies = [ - "hashbrown 0.12.3", -] - -[[package]] -name = "lru" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670" -dependencies = [ - "hashbrown 0.13.2", -] - -[[package]] -name = "lru" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21" - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "lz4" -version = "1.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" -dependencies = [ - "libc", - "lz4-sys", -] - -[[package]] -name = "lz4-sys" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "macro_magic" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d" -dependencies = [ - "macro_magic_core", - "macro_magic_macros", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "macro_magic_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d" -dependencies = [ - "const-random", - "derive-syn-parse 0.1.5", - "macro_magic_core_macros", - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "macro_magic_core_macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "macro_magic_macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3" -dependencies = [ - "macro_magic_core", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "manual-xcm-rpc" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "flume 0.10.14", - "futures 0.3.30", - "hex-literal 0.3.4", - "jsonrpsee", - "parity-scale-codec", - "staging-xcm", - "tokio", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matchers" -version = "0.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1" -dependencies = [ - "regex-automata 0.1.10", -] - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matrixmultiply" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" -dependencies = [ - "autocfg", - "rawpointer", -] - -[[package]] -name = "memchr" -version = "2.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" - -[[package]] -name = "memfd" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" -dependencies = [ - "rustix 0.38.34", -] - -[[package]] -name = "memmap2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "memory-db" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbe" -dependencies = [ - "hash-db", -] - -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "mick-jaeger" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532" -dependencies = [ - "futures 0.3.30", - "rand", - "thrift", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "mixnet" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a" -dependencies = [ - "arrayref", - "arrayvec 0.7.4", - "bitflags 1.3.2", - "blake2 0.10.6", - "c2-chacha", - "curve25519-dalek 4.1.2", - "either", - "hashlink", - "lioness", - "log", - "parking_lot 0.12.2", - "rand", - "rand_chacha 0.3.1", - "rand_distr", - "subtle 2.5.0", - "thiserror", - "zeroize", -] - -[[package]] -name = "mmr-gadget" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-offchain", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-consensus-beefy", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", -] - -[[package]] -name = "mmr-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "anyhow", - "jsonrpsee", - "parity-scale-codec", - "serde", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-mmr-primitives", - "sp-runtime", -] - -[[package]] -name = "mockall" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive", - "predicates", - "predicates-tree", -] - -[[package]] -name = "mockall_derive" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "multiaddr" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "log", - "multibase", - "multihash 0.17.0", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - -[[package]] -name = "multibase" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404" -dependencies = [ - "base-x", - "data-encoding", - "data-encoding-macro", -] - -[[package]] -name = "multihash" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive 0.8.0", - "sha2 0.10.8", - "sha3", - "unsigned-varint", -] - -[[package]] -name = "multihash" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd8a792c1694c6da4f68db0a9d707c72bd260994da179e6030a5dcee00bb815" -dependencies = [ - "core2", - "digest 0.10.7", - "multihash-derive 0.8.0", - "sha2 0.10.8", - "unsigned-varint", -] - -[[package]] -name = "multihash" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076d548d76a0e2a0d4ab471d0b1c36c577786dfc4471242035d97a12a735c492" -dependencies = [ - "core2", - "unsigned-varint", -] - -[[package]] -name = "multihash-codetable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d815ecb3c8238d00647f8630ede7060a642c9f704761cd6082cb4028af6935" -dependencies = [ - "blake2b_simd", - "blake2s_simd", - "blake3", - "core2", - "digest 0.10.7", - "multihash-derive 0.9.0", - "ripemd", - "serde", - "sha1", - "sha2 0.10.8", - "sha3", - "strobe-rs", -] - -[[package]] -name = "multihash-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - -[[package]] -name = "multihash-derive" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "890e72cb7396cb99ed98c1246a97b243cc16394470d94e0bc8b0c2c11d84290e" -dependencies = [ - "core2", - "multihash 0.19.1", - "multihash-derive-impl", -] - -[[package]] -name = "multihash-derive-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38685e08adb338659871ecfc6ee47ba9b22dcc8abcf6975d379cc49145c3040" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "multistream-select" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a" -dependencies = [ - "bytes", - "futures 0.3.30", - "log", - "pin-project", - "smallvec", - "unsigned-varint", -] - -[[package]] -name = "nalgebra" -version = "0.32.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" -dependencies = [ - "approx", - "matrixmultiply", - "nalgebra-macros", - "num-complex", - "num-rational", - "num-traits", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra-macros" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "names" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" -dependencies = [ - "rand", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "native-tls" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" -dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "netlink-packet-core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297" -dependencies = [ - "anyhow", - "byteorder", - "libc", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-route" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" -dependencies = [ - "anyhow", - "bitflags 1.3.2", - "byteorder", - "libc", - "netlink-packet-core", - "netlink-packet-utils", -] - -[[package]] -name = "netlink-packet-utils" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34" -dependencies = [ - "anyhow", - "byteorder", - "paste", - "thiserror", -] - -[[package]] -name = "netlink-proto" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" -dependencies = [ - "bytes", - "futures 0.3.30", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror", - "tokio", -] - -[[package]] -name = "netlink-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" -dependencies = [ - "bytes", - "futures 0.3.30", - "libc", - "log", - "tokio", -] - -[[package]] -name = "nimbus-consensus" -version = "0.9.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "async-backing-primitives", - "async-trait", - "cumulus-client-collator", - "cumulus-client-consensus-common", - "cumulus-client-consensus-proposer", - "cumulus-client-parachain-inherent", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "futures 0.3.30", - "log", - "nimbus-primitives", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-primitives", - "sc-client-api", - "sc-consensus", - "sc-consensus-manual-seal", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-version", - "substrate-prometheus-endpoint", - "tracing", -] - -[[package]] -name = "nimbus-primitives" -version = "0.9.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "async-trait", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-inherents", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", -] - -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - -[[package]] -name = "node-common" -version = "0.1.0" -dependencies = [ - "async-io 1.13.0", - "async-trait", - "clap", - "core_extensions", - "cumulus-client-cli", - "cumulus-client-collator", - "cumulus-client-consensus-aura", - "cumulus-client-consensus-common", - "cumulus-client-consensus-proposer", - "cumulus-client-network", - "cumulus-client-service", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "flume 0.10.14", - "frame-benchmarking", - "frame-benchmarking-cli", - "futures 0.3.30", - "jsonrpsee", - "log", - "nimbus-consensus", - "nimbus-primitives", - "parity-scale-codec", - "polkadot-cli", - "polkadot-primitives", - "polkadot-service", - "sc-basic-authorship", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-manual-seal", - "sc-consensus-slots", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-network-transactions", - "sc-offchain", - "sc-rpc", - "sc-service", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "sc-utils", - "serde", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-timestamp", - "sp-transaction-pool", - "substrate-frame-rpc-system", - "substrate-prometheus-endpoint", - "tc-consensus", - "try-runtime-cli", -] - -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" -dependencies = [ - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - -[[package]] -name = "num-format" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" -dependencies = [ - "arrayvec 0.7.4", - "itoa", -] - -[[package]] -name = "num-integer" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" -dependencies = [ - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" -dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - -[[package]] -name = "object" -version = "0.30.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" -dependencies = [ - "crc32fast", - "hashbrown 0.13.2", - "indexmap 1.9.3", - "memchr", -] - -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - -[[package]] -name = "oid-registry" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" -dependencies = [ - "asn1-rs", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "openssl" -version = "0.10.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - -[[package]] -name = "orchestra" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92829eef0328a3d1cd22a02c0e51deb92a5362df3e7d21a4e9bdc38934694e66" -dependencies = [ - "async-trait", - "dyn-clonable", - "futures 0.3.30", - "futures-timer", - "orchestra-proc-macro", - "pin-project", - "prioritized-metered-channel 0.6.1", - "thiserror", - "tracing", -] - -[[package]] -name = "orchestra-proc-macro" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1344346d5af32c95bbddea91b18a88cc83eac394192d20ef2fc4c40a74332355" -dependencies = [ - "expander 2.1.0", - "indexmap 2.2.6", - "itertools 0.11.0", - "petgraph", - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "ordered-float" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" -dependencies = [ - "num-traits", -] - -[[package]] -name = "pallet-asset-conversion" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-asset-rate" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-asset-tx-payment" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-transaction-payment", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-assets" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-async-backing" -version = "0.9.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-consensus-slots", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-author-inherent" -version = "0.9.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-inherents", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-author-noting" -version = "0.1.0" -dependencies = [ - "bounded-collections", - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "dp-chain-state-snapshot", - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex", - "hex-literal 0.3.4", - "log", - "nimbus-primitives", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-primitives", - "scale-info", - "serde", - "sp-consensus-aura", - "sp-core", - "sp-externalities", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "sp-version", - "test-relay-sproof-builder", - "tp-author-noting-inherent", - "tp-traits", -] - -[[package]] -name = "pallet-author-noting-runtime-api" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "sp-api", -] - -[[package]] -name = "pallet-authority-assignment" -version = "0.1.0" -dependencies = [ - "dp-collator-assignment", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-authority-discovery" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-authority-discovery", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authority-mapping" -version = "0.1.0" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-authorship" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-babe" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-bags-list" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "aquamarine", - "docify", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-balances" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-base-fee" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "fp-evm", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", -] - -[[package]] -name = "pallet-beefy" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-consensus-beefy", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-beefy-mmr" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "array-bytes 6.2.3", - "binary-merkle-tree", - "frame-support", - "frame-system", - "log", - "pallet-beefy", - "pallet-mmr", - "pallet-session", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-consensus-beefy", - "sp-core", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", -] - -[[package]] -name = "pallet-bounties" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-bridge-grandpa" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-runtime", - "bp-test-utils", - "finality-grandpa", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-consensus-grandpa", - "sp-runtime", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-bridge-messages" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-messages", - "bp-runtime", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "num-traits", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-bridge-parachains" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-header-chain", - "bp-parachains", - "bp-polkadot-core", - "bp-runtime", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-bridge-grandpa", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-bridge-relayers" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-messages", - "bp-relayers", - "bp-runtime", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-bridge-messages", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-broker" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bitvec", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-cc-authorities-noting" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "ccp-authorities-noting-inherent", - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "dp-chain-state-snapshot", - "dp-collator-assignment", - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex", - "log", - "nimbus-primitives", - "parity-scale-codec", - "scale-info", - "serde", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-child-bounties" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-bounties", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-collator-assignment" -version = "0.1.0" -dependencies = [ - "dp-collator-assignment", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "rand", - "rand_chacha 0.3.1", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "pallet-collator-assignment-runtime-api" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", -] - -[[package]] -name = "pallet-collator-selection" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "rand", - "scale-info", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-collective" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-configuration" -version = "0.1.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-conviction-voting" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-data-preservers" -version = "0.1.0" -dependencies = [ - "bounded-collections", - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "num-traits", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "similar-asserts", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-democracy" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-department-funding" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "pallet-schelling-game-shared", - "pallet-shared-storage", - "pallet-sortition-sum-game", - "pallet-support", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-schelling-game-shared", - "trait-shared-storage", -] - -[[package]] -name = "pallet-election-provider-multi-phase" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-election-provider-support-benchmarking", - "parity-scale-codec", - "rand", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-std", - "strum 0.24.1", -] - -[[package]] -name = "pallet-election-provider-support-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-system", - "parity-scale-codec", - "sp-npos-elections", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-elections-phragmen" -version = "5.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-ethereum" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "ethereum", - "ethereum-types", - "evm", - "fp-consensus", - "fp-ethereum", - "fp-evm", - "fp-rpc", - "fp-storage", - "frame-support", - "frame-system", - "pallet-evm", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-evm" -version = "6.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "environmental", - "evm", - "fp-account", - "fp-evm", - "frame-benchmarking", - "frame-support", - "frame-system", - "hash-db", - "hex", - "hex-literal 0.4.1", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "rlp", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-evm-chain-id" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "pallet-evm-precompile-balances-erc20" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "fp-evm", - "frame-support", - "frame-system", - "log", - "num_enum", - "pallet-balances", - "pallet-evm", - "pallet-timestamp", - "parity-scale-codec", - "paste", - "precompile-utils", - "slices", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-evm-precompile-batch" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "evm", - "fp-evm", - "frame-support", - "frame-system", - "log", - "num_enum", - "pallet-evm", - "parity-scale-codec", - "paste", - "precompile-utils", - "slices", - "sp-core", - "sp-io", - "sp-std", -] - -[[package]] -name = "pallet-evm-precompile-call-permit" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "evm", - "fp-evm", - "frame-support", - "frame-system", - "log", - "num_enum", - "pallet-evm", - "pallet-timestamp", - "parity-scale-codec", - "paste", - "precompile-utils", - "slices", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-evm-precompile-modexp" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "fp-evm", - "num", -] - -[[package]] -name = "pallet-evm-precompile-sha3fips" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "fp-evm", - "tiny-keccak", -] - -[[package]] -name = "pallet-evm-precompile-simple" -version = "2.0.0-dev" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "fp-evm", - "ripemd", - "sp-io", -] - -[[package]] -name = "pallet-evm-precompile-xcm-utils" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "fp-evm", - "frame-support", - "frame-system", - "num_enum", - "pallet-evm", - "pallet-xcm", - "parity-scale-codec", - "precompile-utils", - "sp-core", - "sp-runtime", - "sp-std", - "sp-weights", - "staging-xcm", - "staging-xcm-executor", - "xcm-primitives", -] - -[[package]] -name = "pallet-evm-precompileset-assets-erc20" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "fp-evm", - "frame-support", - "frame-system", - "pallet-assets", - "pallet-evm", - "pallet-timestamp", - "parity-scale-codec", - "paste", - "precompile-utils", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-fast-unstake" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-foreign-asset-creator" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", -] - -[[package]] -name = "pallet-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-consensus-grandpa", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-identity" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "enumflags2", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-im-online" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "parity-scale-codec", - "scale-info", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-indices" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-keyring", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-inflation-rewards" -version = "0.1.0" -dependencies = [ - "bounded-collections", - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "num-traits", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "similar-asserts", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-initializer" -version = "0.1.0" -dependencies = [ - "frame-support", - "frame-system", - "pallet-session", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-insecure-randomness-collective-flip" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "safe-mix", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-invulnerables" -version = "0.1.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-session", - "parity-scale-codec", - "rand", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-maintenance-mode" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", - "xcm-primitives", -] - -[[package]] -name = "pallet-membership" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-message-queue" -version = "7.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", -] - -[[package]] -name = "pallet-migrations" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "xcm-primitives", -] - -[[package]] -name = "pallet-mmr" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-multisig" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nis" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", - "sp-tracing", -] - -[[package]] -name = "pallet-nomination-pools-benchmarking" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "pallet-bags-list", - "pallet-nomination-pools", - "pallet-staking", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-runtime-interface", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-nomination-pools-runtime-api" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "pallet-nomination-pools", - "parity-scale-codec", - "sp-api", - "sp-std", -] - -[[package]] -name = "pallet-offences" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-offences-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-babe", - "pallet-balances", - "pallet-grandpa", - "pallet-im-online", - "pallet-offences", - "pallet-session", - "pallet-staking", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-pooled-staking" -version = "0.1.0" -dependencies = [ - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "num-traits", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "similar-asserts", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-maths", - "tp-traits", -] - -[[package]] -name = "pallet-positive-externality" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "pallet-schelling-game-shared", - "pallet-shared-storage", - "pallet-sortition-sum-game", - "pallet-support", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-schelling-game-shared", - "trait-shared-storage", -] - -[[package]] -name = "pallet-preimage" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-profile-validation" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "pallet-schelling-game-shared", - "pallet-sortition-sum-game", - "pallet-support", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-schelling-game-shared", -] - -[[package]] -name = "pallet-project-tips" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "pallet-balances", - "pallet-schelling-game-shared", - "pallet-shared-storage", - "pallet-sortition-sum-game", - "pallet-support", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-schelling-game-shared", - "trait-shared-storage", -] - -[[package]] -name = "pallet-proxy" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-ranked-collective" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-recovery" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-referenda" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "assert_matches", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-registrar" -version = "0.1.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-configuration", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-container-chain-genesis-data", - "tp-traits", -] - -[[package]] -name = "pallet-registrar-runtime-api" -version = "0.1.0" -dependencies = [ - "frame-support", - "pallet-registrar", - "parity-scale-codec", - "scale-info", - "sp-api", - "tp-container-chain-genesis-data", -] - -[[package]] -name = "pallet-relay-storage-roots" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "environmental", - "frame-benchmarking", - "frame-support", - "frame-system", - "hex", - "log", - "nimbus-primitives", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-root-testing" -version = "1.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-scheduler" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", -] - -[[package]] -name = "pallet-schelling-game-shared" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-support-test", - "frame-system", - "num-integer", - "pallet-balances", - "pallet-sortition-sum-game", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-schelling-game-shared", - "trait-sortition-sum-game", -] - -[[package]] -name = "pallet-services-payment" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tp-traits", -] - -[[package]] -name = "pallet-services-payment-runtime-api" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "sp-api", -] - -[[package]] -name = "pallet-session" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-state-machine", - "sp-std", - "sp-trie", -] - -[[package]] -name = "pallet-session-benchmarking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-session", - "pallet-staking", - "parity-scale-codec", - "rand", - "sp-runtime", - "sp-session", - "sp-std", -] - -[[package]] -name = "pallet-shared-storage" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-shared-storage", -] - -[[package]] -name = "pallet-society" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "sp-arithmetic", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-sortition-sum-game" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "trait-sortition-sum-game", -] - -[[package]] -name = "pallet-spaces" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-support", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-staking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "log", - "pallet-authorship", - "pallet-session", - "parity-scale-codec", - "rand_chacha 0.2.2", - "scale-info", - "serde", - "sp-application-crypto", - "sp-io", - "sp-runtime", - "sp-staking", - "sp-std", -] - -[[package]] -name = "pallet-staking-reward-curve" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.65", -] - -[[package]] -name = "pallet-staking-reward-fn" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "log", - "sp-arithmetic", -] - -[[package]] -name = "pallet-staking-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "parity-scale-codec", - "sp-api", - "sp-staking", -] - -[[package]] -name = "pallet-state-trie-migration" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-stream-payment" -version = "0.1.0" -dependencies = [ - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "num-traits", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "similar-asserts", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "tap", - "tp-maths", - "tp-traits", -] - -[[package]] -name = "pallet-stream-payment-runtime-api" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "thiserror", -] - -[[package]] -name = "pallet-sudo" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-support" -version = "0.1.0" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "pallet-timestamp", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "strum 0.26.2", -] - -[[package]] -name = "pallet-template" -version = "4.0.0-dev" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", -] - -[[package]] -name = "pallet-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-std", - "sp-storage", - "sp-timestamp", -] - -[[package]] -name = "pallet-tips" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-transaction-payment" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", + "clap", + "frame-benchmarking-cli", "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-transaction-payment-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ + "futures", "jsonrpsee", - "pallet-transaction-payment-rpc-runtime-api", - "parity-scale-codec", - "sp-api", - "sp-blockchain", - "sp-core", - "sp-rpc", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-transaction-payment-rpc-runtime-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ + "node-template-runtime", "pallet-transaction-payment", - "parity-scale-codec", - "sp-api", - "sp-runtime", - "sp-weights", -] - -[[package]] -name = "pallet-treasury" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-tx-pause" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "docify", - "frame-benchmarking", - "frame-support", - "frame-system", - "pallet-balances", - "pallet-proxy", - "pallet-utility", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-utility" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-vesting" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-whitelist" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "pallet-xcm" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bounded-collections", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "pallet-balances", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", -] - -[[package]] -name = "pallet-xcm-benchmarks" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", -] - -[[package]] -name = "pallet-xcm-bridge-hub-router" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bp-xcm-bridge-hub-router", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", - "staging-xcm", - "staging-xcm-builder", -] - -[[package]] -name = "pallet-xcm-core-buyer" -version = "0.1.0" -dependencies = [ - "bounded-collections", - "dp-core", - "frame-benchmarking", - "frame-support", - "frame-system", - "log", - "nimbus-primitives", - "num-traits", - "pallet-balances", - "pallet-xcm", - "parity-scale-codec", - "scale-info", - "serde", - "similar-asserts", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", - "tp-traits", -] - -[[package]] -name = "pallet-xcm-executor-utils" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "serde", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "staging-xcm", -] - -[[package]] -name = "parachains-common" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "cumulus-primitives-core", - "cumulus-primitives-utility", - "frame-support", - "frame-system", - "log", - "num-traits", - "pallet-asset-tx-payment", - "pallet-assets", - "pallet-authorship", - "pallet-balances", - "pallet-collator-selection", - "pallet-message-queue", - "pallet-xcm", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-primitives", - "rococo-runtime-constants", - "scale-info", - "smallvec", + "pallet-transaction-payment-rpc", + "sc-basic-authorship", + "sc-cli", + "sc-client-api", + "sc-consensus", + "sc-consensus-aura", + "sc-consensus-grandpa", + "sc-executor", + "sc-network", + "sc-offchain", + "sc-rpc-api", + "sc-service", + "sc-telemetry", + "sc-transaction-pool", + "sc-transaction-pool-api", + "serde_json", + "sp-api", + "sp-block-builder", + "sp-blockchain", "sp-consensus-aura", + "sp-consensus-grandpa", "sp-core", + "sp-inherents", "sp-io", + "sp-keyring", "sp-runtime", - "sp-std", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", - "westend-runtime-constants", + "sp-timestamp", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "try-runtime-cli", ] [[package]] -name = "parachains-runtimes-test-utils" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "assets-common", - "cumulus-pallet-parachain-system", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-test-relay-sproof-builder", +name = "node-template-runtime" +version = "0.0.0" +dependencies = [ + "frame-benchmarking", + "frame-executive", "frame-support", "frame-system", - "pallet-assets", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "frame-try-runtime", + "pallet-aura", "pallet-balances", - "pallet-collator-selection", - "pallet-session", - "pallet-xcm", - "parachains-common", + "pallet-grandpa", + "pallet-sudo", + "pallet-template", + "pallet-timestamp", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", - "polkadot-parachain-primitives", + "scale-info", + "sp-api", + "sp-block-builder", "sp-consensus-aura", + "sp-consensus-grandpa", "sp-core", - "sp-io", + "sp-genesis-builder", + "sp-inherents", + "sp-offchain", "sp-runtime", - "sp-std", - "sp-tracing", - "staging-parachain-info", - "staging-xcm", - "staging-xcm-executor", + "sp-session", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-transaction-pool", + "sp-version", "substrate-wasm-builder", ] [[package]] -name = "parity-db" -version = "0.4.13" +name = "nohash-hasher" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" -dependencies = [ - "blake2 0.10.6", - "crc32fast", - "fs2", - "hex", - "libc", - "log", - "lz4", - "memmap2", - "parking_lot 0.12.2", - "rand", - "siphasher", - "snap", - "winapi", -] +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] -name = "parity-scale-codec" -version = "3.6.12" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "arrayvec 0.7.4", - "bitvec", - "byte-slice-cast", - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", + "memchr", + "minimal-lexical", ] [[package]] -name = "parity-scale-codec-derive" -version = "3.6.12" +name = "nonzero_ext" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" -dependencies = [ - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" [[package]] -name = "parity-send-wrapper" -version = "0.1.0" +name = "normalize-line-endings" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" +checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] -name = "parity-util-mem" -version = "0.12.0" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d32c34f4f5ca7f9196001c0aba5a1f9a5a12382c8944b8b0f90233282d1e8f8" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "cfg-if", - "ethereum-types", - "hashbrown 0.12.3", - "impl-trait-for-tuples", - "lru 0.8.1", - "parity-util-mem-derive", - "parking_lot 0.12.2", - "primitive-types", - "smallvec", + "overload", "winapi", ] [[package]] -name = "parity-util-mem-derive" -version = "0.1.0" +name = "num-bigint" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" dependencies = [ - "proc-macro2", - "syn 1.0.109", - "synstructure", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "parity-wasm" -version = "0.45.0" +name = "num-complex" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] [[package]] -name = "parking" -version = "2.2.0" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "parking_lot" -version = "0.11.2" +name = "num-format" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "arrayvec", + "itoa", ] [[package]] -name = "parking_lot" -version = "0.12.2" +name = "num-integer" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ - "lock_api", - "parking_lot_core 0.9.10", + "autocfg", + "num-traits", ] [[package]] -name = "parking_lot_core" -version = "0.8.6" +name = "num-rational" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "parking_lot_core" -version = "0.9.10" +name = "num-traits" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ - "cfg-if", + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", "libc", - "redox_syscall 0.5.1", - "smallvec", - "windows-targets 0.52.5", ] [[package]] -name = "partial_sort" -version = "0.2.0" +name = "number_prefix" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] -name = "paste" -version = "1.0.15" +name = "object" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] [[package]] -name = "pbkdf2" -version = "0.8.0" +name = "object" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ - "crypto-mac 0.11.0", + "memchr", ] [[package]] -name = "pbkdf2" -version = "0.12.2" +name = "oid-registry" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "digest 0.10.7", + "asn1-rs", ] [[package]] -name = "peeking_take_while" -version = "0.1.2" +name = "once_cell" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] -name = "pem" -version = "1.1.1" +name = "opaque-debug" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" -dependencies = [ - "base64 0.13.1", -] +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] -name = "pest" -version = "2.7.10" +name = "openssl-probe" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] -name = "pest_derive" -version = "2.7.10" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" -dependencies = [ - "pest", - "pest_generator", -] +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] -name = "pest_generator" -version = "2.7.10" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pallet-aura" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn 2.0.65", + "frame-support", + "frame-system", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-aura", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "pest_meta" -version = "2.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" +name = "pallet-authorship" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "once_cell", - "pest", - "sha2 0.10.8", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +name = "pallet-balances" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "fixedbitset", - "indexmap 2.2.6", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +name = "pallet-department-funding" +version = "4.0.0-dev" dependencies = [ - "pin-project-internal", + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "pallet-schelling-game-shared", + "pallet-shared-storage", + "pallet-sortition-sum-game", + "pallet-support", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-schelling-game-shared", + "trait-shared-storage", ] [[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +name = "pallet-grandpa" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "scale-info", + "sp-application-crypto", + "sp-consensus-grandpa", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "piper" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +name = "pallet-positive-externality" +version = "4.0.0-dev" dependencies = [ - "atomic-waker", - "fastrand 2.1.0", - "futures-io", + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "pallet-schelling-game-shared", + "pallet-shared-storage", + "pallet-sortition-sum-game", + "pallet-support", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-schelling-game-shared", + "trait-shared-storage", ] [[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +name = "pallet-profile-validation" +version = "4.0.0-dev" dependencies = [ - "der", - "spki", + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "pallet-schelling-game-shared", + "pallet-sortition-sum-game", + "pallet-support", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-schelling-game-shared", ] [[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" - -[[package]] -name = "platforms" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" +name = "pallet-project-tips" +version = "4.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "pallet-balances", + "pallet-schelling-game-shared", + "pallet-shared-storage", + "pallet-sortition-sum-game", + "pallet-support", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-schelling-game-shared", + "trait-shared-storage", +] [[package]] -name = "polkadot-approval-distribution" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-schelling-game-shared" +version = "4.0.0-dev" dependencies = [ - "bitvec", - "futures 0.3.30", - "futures-timer", - "itertools 0.10.5", - "polkadot-node-jaeger", - "polkadot-node-metrics", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "rand", - "tracing-gum", + "frame-benchmarking", + "frame-support", + "frame-support-test", + "frame-system", + "num-integer", + "pallet-balances", + "pallet-sortition-sum-game", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-schelling-game-shared", + "trait-sortition-sum-game", ] [[package]] -name = "polkadot-availability-bitfield-distribution" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-session" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "always-assert", - "futures 0.3.30", - "futures-timer", - "polkadot-node-network-protocol", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "rand", - "tracing-gum", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "log", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-state-machine", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-trie", ] [[package]] -name = "polkadot-availability-distribution" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-shared-storage" +version = "4.0.0-dev" dependencies = [ - "derive_more", - "fatality", - "futures 0.3.30", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "polkadot-erasure-coding", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "rand", - "schnellru", + "scale-info", "sp-core", - "sp-keystore", - "thiserror", - "tracing-gum", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-shared-storage", ] [[package]] -name = "polkadot-availability-recovery" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-sortition-sum-game" +version = "4.0.0-dev" dependencies = [ - "async-trait", - "fatality", - "futures 0.3.30", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "polkadot-erasure-coding", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "rand", - "sc-network", - "schnellru", - "thiserror", - "tokio", - "tracing-gum", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "trait-sortition-sum-game", ] [[package]] -name = "polkadot-cli" -version = "1.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-spaces" +version = "4.0.0-dev" dependencies = [ - "cfg-if", - "clap", - "frame-benchmarking-cli", - "futures 0.3.30", - "log", - "polkadot-node-metrics", - "polkadot-node-primitives", - "polkadot-service", - "sc-cli", - "sc-executor", - "sc-service", - "sc-storage-monitor", - "sc-sysinfo", - "sc-tracing", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-support", + "pallet-timestamp", + "parity-scale-codec", + "scale-info", "sp-core", "sp-io", - "sp-keyring", - "sp-maybe-compressed-blob", - "substrate-build-script-utils", - "thiserror", - "try-runtime-cli", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "polkadot-collator-protocol" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-sudo" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "bitvec", - "fatality", - "futures 0.3.30", - "futures-timer", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sp-core", - "sp-keystore", + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-io", "sp-runtime", - "thiserror", - "tokio-util", - "tracing-gum", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "polkadot-core-primitives" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-support" +version = "0.1.0" dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-balances", + "pallet-timestamp", "parity-scale-codec", "scale-info", + "sp-arithmetic", "sp-core", + "sp-io", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "strum 0.26.3", ] [[package]] -name = "polkadot-dispute-distribution" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-template" +version = "0.0.0" dependencies = [ - "derive_more", - "fatality", - "futures 0.3.30", - "futures-timer", - "indexmap 1.9.3", + "frame-benchmarking", + "frame-support", + "frame-system", "parity-scale-codec", - "polkadot-erasure-coding", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sc-network", - "schnellru", - "sp-application-crypto", - "sp-keystore", - "thiserror", - "tracing-gum", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", ] [[package]] -name = "polkadot-erasure-coding" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-timestamp" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ + "docify", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-primitives", - "reed-solomon-novelpoly", - "sp-core", - "sp-trie", - "thiserror", + "scale-info", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-timestamp", ] [[package]] -name = "polkadot-gossip-support" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-transaction-payment" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "futures 0.3.30", - "futures-timer", - "polkadot-node-network-protocol", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "rand", - "rand_chacha 0.3.1", - "sc-network", - "sc-network-common", - "sp-application-crypto", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "serde", "sp-core", - "sp-keystore", - "tracing-gum", + "sp-io", + "sp-runtime", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] -name = "polkadot-network-bridge" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-transaction-payment-rpc" +version = "30.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "always-assert", - "async-trait", - "bytes", - "fatality", - "futures 0.3.30", + "jsonrpsee", + "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-node-metrics", - "polkadot-node-network-protocol", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-primitives", - "sc-network", - "sp-consensus", - "thiserror", - "tracing-gum", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-weights", ] [[package]] -name = "polkadot-node-collation-generation" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pallet-transaction-payment-rpc-runtime-api" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "futures 0.3.30", + "pallet-transaction-payment", "parity-scale-codec", - "polkadot-erasure-coding", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sp-core", - "sp-maybe-compressed-blob", - "thiserror", - "tracing-gum", + "sp-api", + "sp-runtime", + "sp-weights", ] [[package]] -name = "polkadot-node-core-approval-voting" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parity-bip39" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitvec", - "derive_more", - "futures 0.3.30", - "futures-timer", - "itertools 0.10.5", - "kvdb", - "merlin", - "parity-scale-codec", - "polkadot-node-jaeger", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-primitives", + "bitcoin_hashes", "rand", - "rand_chacha 0.3.1", "rand_core 0.6.4", - "sc-keystore", - "schnellru", - "schnorrkel 0.11.4", - "sp-application-crypto", - "sp-consensus", - "sp-consensus-slots", - "sp-runtime", - "thiserror", - "tracing-gum", + "serde", + "unicode-normalization", ] [[package]] -name = "polkadot-node-core-av-store" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parity-db" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e" dependencies = [ - "bitvec", - "futures 0.3.30", - "futures-timer", - "kvdb", - "parity-scale-codec", - "polkadot-erasure-coding", - "polkadot-node-jaeger", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-primitives", - "sp-consensus", - "thiserror", - "tracing-gum", + "blake2 0.10.6", + "crc32fast", + "fs2", + "hex", + "libc", + "log", + "lz4", + "memmap2 0.5.10", + "parking_lot 0.12.1", + "rand", + "siphasher", + "snap", + "winapi", ] [[package]] -name = "polkadot-node-core-backing" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ + "arrayvec", "bitvec", - "fatality", - "futures 0.3.30", - "polkadot-erasure-coding", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "polkadot-statement-table", - "sp-keystore", - "thiserror", - "tracing-gum", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", ] [[package]] -name = "polkadot-node-core-bitfield-signing" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "futures 0.3.30", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sp-keystore", - "thiserror", - "tracing-gum", - "wasm-timer", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "polkadot-node-core-candidate-validation" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "futures 0.3.30", - "futures-timer", - "parity-scale-codec", - "polkadot-node-core-pvf", - "polkadot-node-metrics", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-parachain-primitives", - "polkadot-primitives", - "sp-maybe-compressed-blob", - "tracing-gum", -] +name = "parity-send-wrapper" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" [[package]] -name = "polkadot-node-core-chain-api" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "polkadot-node-metrics", - "polkadot-node-subsystem", - "polkadot-node-subsystem-types", - "sc-client-api", - "sc-consensus-babe", - "tracing-gum", -] +name = "parity-wasm" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] -name = "polkadot-node-core-chain-selection" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ - "futures 0.3.30", - "futures-timer", - "kvdb", - "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "thiserror", - "tracing-gum", + "instant", + "lock_api", + "parking_lot_core 0.8.6", ] [[package]] -name = "polkadot-node-core-dispute-coordinator" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "fatality", - "futures 0.3.30", - "kvdb", - "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sc-keystore", - "schnellru", - "thiserror", - "tracing-gum", + "lock_api", + "parking_lot_core 0.9.9", ] [[package]] -name = "polkadot-node-core-parachains-inherent" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ - "async-trait", - "futures 0.3.30", - "futures-timer", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-primitives", - "sp-blockchain", - "sp-inherents", - "thiserror", - "tracing-gum", + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", ] [[package]] -name = "polkadot-node-core-prospective-parachains" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ - "bitvec", - "fatality", - "futures 0.3.30", - "parity-scale-codec", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "thiserror", - "tracing-gum", + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", ] [[package]] -name = "polkadot-node-core-provisioner" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "partial_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156" + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" dependencies = [ - "bitvec", - "fatality", - "futures 0.3.30", - "futures-timer", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "thiserror", - "tracing-gum", + "base64ct", + "rand_core 0.6.4", + "subtle 2.5.0", ] [[package]] -name = "polkadot-node-core-pvf" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "always-assert", - "array-bytes 6.2.3", - "blake3", - "cfg-if", - "futures 0.3.30", - "futures-timer", - "is_executable", - "libc", - "parity-scale-codec", - "pin-project", - "polkadot-core-primitives", - "polkadot-node-core-pvf-common", - "polkadot-node-metrics", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-parachain-primitives", - "polkadot-primitives", - "rand", - "slotmap", - "sp-core", - "sp-maybe-compressed-blob", - "sp-wasm-interface", - "tempfile", - "thiserror", - "tokio", - "tracing-gum", +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "password-hash", ] [[package]] -name = "polkadot-node-core-pvf-checker" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-primitives", - "sp-keystore", - "thiserror", - "tracing-gum", -] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] -name = "polkadot-node-core-pvf-common" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" dependencies = [ - "cfg-if", - "cpu-time", - "futures 0.3.30", - "landlock", - "libc", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-primitives", - "sc-executor", - "sc-executor-common", - "sc-executor-wasmtime", - "seccompiler", - "sp-core", - "sp-externalities", - "sp-io", - "sp-tracing", - "thiserror", - "tracing-gum", + "base64 0.13.1", ] [[package]] -name = "polkadot-node-core-runtime-api" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "polkadot-node-metrics", - "polkadot-node-subsystem", - "polkadot-node-subsystem-types", - "polkadot-primitives", - "schnellru", - "sp-consensus-babe", - "tracing-gum", -] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "polkadot-node-jaeger" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pest" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" dependencies = [ - "lazy_static", - "log", - "mick-jaeger", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-node-primitives", - "polkadot-primitives", - "sc-network", - "sp-core", + "memchr", "thiserror", - "tokio", + "ucd-trie", ] [[package]] -name = "polkadot-node-metrics" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pest_derive" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809" dependencies = [ - "bs58 0.5.1", - "futures 0.3.30", - "futures-timer", - "log", - "parity-scale-codec", - "polkadot-primitives", - "prioritized-metered-channel 0.5.1", - "sc-cli", - "sc-service", - "sc-tracing", - "substrate-prometheus-endpoint", - "tracing-gum", + "pest", + "pest_generator", ] [[package]] -name = "polkadot-node-network-protocol" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pest_generator" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e" dependencies = [ - "async-channel 1.9.0", - "async-trait", - "bitvec", - "derive_more", - "fatality", - "futures 0.3.30", - "hex", - "parity-scale-codec", - "polkadot-node-jaeger", - "polkadot-node-primitives", - "polkadot-primitives", - "rand", - "sc-authority-discovery", - "sc-network", - "strum 0.24.1", - "thiserror", - "tracing-gum", + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "polkadot-node-primitives" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pest_meta" +version = "2.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a" dependencies = [ - "bitvec", - "bounded-vec", - "futures 0.3.30", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-primitives", - "schnorrkel 0.11.4", - "serde", - "sp-application-crypto", - "sp-consensus-babe", - "sp-core", - "sp-keystore", - "sp-maybe-compressed-blob", - "sp-runtime", - "thiserror", - "zstd 0.12.4", + "once_cell", + "pest", + "sha2 0.10.8", ] [[package]] -name = "polkadot-node-subsystem" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ - "polkadot-node-jaeger", - "polkadot-node-subsystem-types", - "polkadot-overseer", + "fixedbitset", + "indexmap 2.2.2", ] [[package]] -name = "polkadot-node-subsystem-types" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pin-project" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0" dependencies = [ - "async-trait", - "bitvec", - "derive_more", - "futures 0.3.30", - "orchestra", - "polkadot-node-jaeger", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-primitives", - "polkadot-statement-table", - "sc-client-api", - "sc-network", - "sc-transaction-pool-api", - "smallvec", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", - "sp-consensus-babe", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", + "pin-project-internal", ] [[package]] -name = "polkadot-node-subsystem-util" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pin-project-internal" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690" dependencies = [ - "async-trait", - "derive_more", - "fatality", - "futures 0.3.30", - "futures-channel", - "itertools 0.10.5", - "kvdb", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.2", - "pin-project", - "polkadot-node-jaeger", - "polkadot-node-metrics", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-types", - "polkadot-overseer", - "polkadot-primitives", - "prioritized-metered-channel 0.5.1", - "rand", - "sc-client-api", - "schnellru", - "sp-application-crypto", - "sp-core", - "sp-keystore", - "thiserror", - "tracing-gum", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "polkadot-overseer" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "futures 0.3.30", - "futures-timer", - "orchestra", - "parking_lot 0.12.2", - "polkadot-node-metrics", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem-types", - "polkadot-primitives", - "sc-client-api", - "sp-api", - "sp-core", - "tikv-jemalloc-ctl", - "tracing-gum", -] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] -name = "polkadot-parachain-primitives" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bounded-collections", - "derive_more", - "parity-scale-codec", - "polkadot-core-primitives", - "scale-info", - "serde", - "sp-core", - "sp-runtime", - "sp-std", - "sp-weights", -] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] -name = "polkadot-primitives" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bitvec", - "hex-literal 0.4.1", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-authority-discovery", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-staking", - "sp-std", -] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "polkadot-rpc" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ - "jsonrpsee", - "mmr-rpc", - "pallet-transaction-payment-rpc", - "polkadot-primitives", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-babe-rpc", - "sc-consensus-beefy", - "sc-consensus-beefy-rpc", - "sc-consensus-epochs", - "sc-consensus-grandpa", - "sc-consensus-grandpa-rpc", - "sc-rpc", - "sc-rpc-spec-v2", - "sc-sync-state-rpc", - "sc-transaction-pool-api", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-keystore", - "sp-runtime", - "substrate-frame-rpc-system", - "substrate-state-trie-migration-rpc", + "der", + "spki", ] [[package]] -name = "polkadot-runtime-common" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bitvec", - "frame-benchmarking", - "frame-election-provider-support", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "libsecp256k1", - "log", - "pallet-asset-rate", - "pallet-authorship", - "pallet-babe", - "pallet-balances", - "pallet-broker", - "pallet-election-provider-multi-phase", - "pallet-fast-unstake", - "pallet-identity", - "pallet-session", - "pallet-staking", - "pallet-staking-reward-fn", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-treasury", - "pallet-vesting", - "pallet-xcm-benchmarks", - "parity-scale-codec", - "polkadot-primitives", - "polkadot-runtime-parachains", - "rustc-hex", - "scale-info", - "serde", - "serde_derive", - "slot-range-helper", - "sp-api", - "sp-core", - "sp-inherents", - "sp-io", - "sp-npos-elections", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "static_assertions", -] +name = "pkg-config" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" [[package]] -name = "polkadot-runtime-metrics" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "polkavm" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" dependencies = [ - "bs58 0.5.1", - "frame-benchmarking", - "parity-scale-codec", - "polkadot-primitives", - "sp-std", - "sp-tracing", + "libc", + "log", + "polkavm-assembler", + "polkavm-common", + "polkavm-linux-raw", ] [[package]] -name = "polkadot-runtime-parachains" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "bitflags 1.3.2", - "bitvec", - "derive_more", - "frame-benchmarking", - "frame-support", - "frame-system", - "impl-trait-for-tuples", +name = "polkavm-assembler" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +dependencies = [ "log", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-balances", - "pallet-broker", - "pallet-message-queue", - "pallet-session", - "pallet-staking", - "pallet-timestamp", - "pallet-vesting", - "parity-scale-codec", - "polkadot-core-primitives", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-runtime-metrics", - "rand", - "rand_chacha 0.3.1", - "rustc-hex", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "staging-xcm", - "staging-xcm-executor", - "static_assertions", ] [[package]] -name = "polkadot-service" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "polkavm-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" dependencies = [ - "async-trait", - "frame-benchmarking", - "frame-benchmarking-cli", - "frame-support", - "frame-system", - "frame-system-rpc-runtime-api", - "futures 0.3.30", - "hex-literal 0.4.1", - "is_executable", - "kvdb", - "kvdb-rocksdb", "log", - "mmr-gadget", - "pallet-babe", - "pallet-im-online", - "pallet-staking", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "parity-db", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-approval-distribution", - "polkadot-availability-bitfield-distribution", - "polkadot-availability-distribution", - "polkadot-availability-recovery", - "polkadot-collator-protocol", - "polkadot-core-primitives", - "polkadot-dispute-distribution", - "polkadot-gossip-support", - "polkadot-network-bridge", - "polkadot-node-collation-generation", - "polkadot-node-core-approval-voting", - "polkadot-node-core-av-store", - "polkadot-node-core-backing", - "polkadot-node-core-bitfield-signing", - "polkadot-node-core-candidate-validation", - "polkadot-node-core-chain-api", - "polkadot-node-core-chain-selection", - "polkadot-node-core-dispute-coordinator", - "polkadot-node-core-parachains-inherent", - "polkadot-node-core-prospective-parachains", - "polkadot-node-core-provisioner", - "polkadot-node-core-pvf", - "polkadot-node-core-pvf-checker", - "polkadot-node-core-runtime-api", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-types", - "polkadot-node-subsystem-util", - "polkadot-overseer", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-rpc", - "polkadot-runtime-parachains", - "polkadot-statement-distribution", - "rococo-runtime", - "sc-authority-discovery", - "sc-basic-authorship", - "sc-block-builder", - "sc-chain-spec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-consensus-babe", - "sc-consensus-beefy", - "sc-consensus-grandpa", - "sc-consensus-slots", - "sc-executor", - "sc-keystore", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-offchain", - "sc-service", - "sc-sync-state-rpc", - "sc-sysinfo", - "sc-telemetry", - "sc-transaction-pool", - "sc-transaction-pool-api", - "schnellru", - "serde", - "serde_json", - "sp-api", - "sp-authority-discovery", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-beefy", - "sp-consensus-grandpa", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-keystore", - "sp-mmr-primitives", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-storage", - "sp-timestamp", - "sp-transaction-pool", - "sp-version", - "sp-weights", - "substrate-prometheus-endpoint", - "thiserror", - "tracing-gum", - "westend-runtime", ] [[package]] -name = "polkadot-statement-distribution" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "polkavm-derive" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" dependencies = [ - "arrayvec 0.7.4", - "bitvec", - "fatality", - "futures 0.3.30", - "futures-timer", - "indexmap 1.9.3", - "parity-scale-codec", - "polkadot-node-network-protocol", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-node-subsystem-util", - "polkadot-primitives", - "sp-keystore", - "sp-staking", - "thiserror", - "tracing-gum", + "polkavm-derive-impl-macro", ] [[package]] -name = "polkadot-statement-table" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "polkavm-derive-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" dependencies = [ - "parity-scale-codec", - "polkadot-primitives", - "sp-core", + "polkavm-common", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] -name = "polling" -version = "2.8.0" +name = "polkavm-derive-impl-macro" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", + "polkavm-derive-impl", + "syn 2.0.57", +] + +[[package]] +name = "polkavm-linker" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +dependencies = [ + "gimli 0.28.1", + "hashbrown 0.14.3", "log", - "pin-project-lite 0.2.14", - "windows-sys 0.48.0", + "object 0.32.2", + "polkavm-common", + "regalloc2 0.9.3", + "rustc-demangle", ] +[[package]] +name = "polkavm-linux-raw" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" + [[package]] name = "polling" -version = "3.7.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +checksum = "30054e72317ab98eddd8561db0f6524df3367636884b7b21b703e4b280a84a14" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", - "pin-project-lite 0.2.14", - "rustix 0.38.34", + "pin-project-lite 0.2.13", + "rustix 0.38.31", "tracing", "windows-sys 0.52.0", ] @@ -11335,19 +5653,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", "universal-hash", ] [[package]] name = "polyval" -version = "0.6.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" dependencies = [ "cfg-if", "cpufeatures", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", "universal-hash", ] @@ -11357,29 +5675,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" -[[package]] -name = "positive-externality-rpc" -version = "0.1.0" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "positive-externality-runtime-api", - "sc-rpc", - "sp-api", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "positive-externality-runtime-api" -version = "0.1.0" -dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-std", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -11392,45 +5687,6 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "precompile-utils" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "environmental", - "evm", - "fp-evm", - "frame-support", - "frame-system", - "hex", - "impl-trait-for-tuples", - "log", - "num_enum", - "pallet-evm", - "parity-scale-codec", - "precompile-utils-macro", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", - "staging-xcm", -] - -[[package]] -name = "precompile-utils-macro" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/frontier?branch=tanssi-polkadot-v1.6.0#4414529b910e8cf802969b11505a14665e4a55d1" -dependencies = [ - "case", - "num_enum", - "prettyplease 0.2.20", - "proc-macro2", - "quote", - "sp-core-hashing", - "syn 1.0.109", -] - [[package]] name = "predicates" version = "2.1.5" @@ -11439,7 +5695,7 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "float-cmp", - "itertools 0.10.5", + "itertools", "normalize-line-endings", "predicates-core", "regex", @@ -11461,16 +5717,6 @@ dependencies = [ "termtree", ] -[[package]] -name = "prettier-please" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22020dfcf177fcc7bf5deaf7440af371400c67c0de14c399938d8ed4fb4645d3" -dependencies = [ - "proc-macro2", - "syn 2.0.65", -] - [[package]] name = "pretty_assertions" version = "1.4.0" @@ -11483,9 +5729,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.11" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28f53e8b192565862cf99343194579a022eb9c7dd3a8d03134734803c7b3125" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", "syn 1.0.109", @@ -11493,12 +5739,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.20" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5" dependencies = [ "proc-macro2", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -11509,52 +5755,19 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec", - "impl-rlp", "impl-serde", "scale-info", "uint", ] -[[package]] -name = "prioritized-metered-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e99f0c89bd88f393aab44a4ab949351f7bc7e7e1179d11ecbfe50cbe4c47e342" -dependencies = [ - "coarsetime", - "crossbeam-queue", - "derive_more", - "futures 0.3.30", - "futures-timer", - "nanorand", - "thiserror", - "tracing", -] - -[[package]] -name = "prioritized-metered-channel" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a172e6cc603231f2cf004232eabcecccc0da53ba576ab286ef7baa0cfc7927ad" -dependencies = [ - "coarsetime", - "crossbeam-queue", - "derive_more", - "futures 0.3.30", - "futures-timer", - "nanorand", - "thiserror", - "tracing", -] - [[package]] name = "proc-macro-crate" -version = "1.3.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "thiserror", + "toml 0.5.11", ] [[package]] @@ -11598,75 +5811,29 @@ checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] -[[package]] -name = "profile-validation-rpc" -version = "0.1.0" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "profile-validation-runtime-api", - "sc-rpc", - "sp-api", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "profile-validation-runtime-api" -version = "0.1.0" -dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-std", -] - -[[package]] -name = "project-tips-rpc" -version = "0.1.0" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "project-tips-runtime-api", - "sc-rpc", - "sp-api", - "sp-blockchain", - "sp-runtime", -] - -[[package]] -name = "project-tips-runtime-api" -version = "0.1.0" -dependencies = [ - "frame-support", - "parity-scale-codec", - "sp-api", - "sp-std", -] - [[package]] name = "prometheus" -version = "0.13.4" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", "lazy_static", "memchr", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "thiserror", ] @@ -11678,7 +5845,7 @@ checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "prometheus-client-derive-encode", ] @@ -11690,7 +5857,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -11700,7 +5867,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive 0.12.3", ] [[package]] @@ -11711,13 +5888,13 @@ checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", "heck 0.4.1", - "itertools 0.10.5", + "itertools", "lazy_static", "log", "multimap", "petgraph", - "prettyplease 0.1.11", - "prost", + "prettyplease 0.1.25", + "prost 0.11.9", "prost-types", "regex", "syn 1.0.109", @@ -11732,19 +5909,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", - "itertools 0.10.5", + "itertools", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 2.0.57", +] + [[package]] name = "prost-types" version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "prost", + "prost 0.11.9", ] [[package]] @@ -11756,6 +5946,21 @@ dependencies = [ "cc", ] +[[package]] +name = "quanta" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -11835,20 +6040,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.4", ] -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] - [[package]] name = "rand_chacha" version = "0.3.1" @@ -11874,7 +6069,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.12", ] [[package]] @@ -11896,6 +6091,15 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "raw-cpuid" +version = "11.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1" +dependencies = [ + "bitflags 2.4.2", +] + [[package]] name = "rawpointer" version = "0.2.1" @@ -11904,9 +6108,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -11952,57 +6156,35 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_syscall" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" -dependencies = [ - "bitflags 2.5.0", -] - [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.12", "libredox", "thiserror", ] -[[package]] -name = "reed-solomon-novelpoly" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58130877ca403ab42c864fbac74bb319a0746c07a634a92a5cfc7f54af272582" -dependencies = [ - "derive_more", - "fs-err", - "itertools 0.11.0", - "static_init", - "thiserror", -] - [[package]] name = "ref-cast" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -12017,16 +6199,29 @@ dependencies = [ "smallvec", ] +[[package]] +name = "regalloc2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad156d539c879b7a24a363a2016d77961786e71f48f2e2fc8302a92abd2429a6" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash", + "slice-group-by", + "smallvec", +] + [[package]] name = "regex" -version = "1.10.4" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.5", + "regex-syntax 0.8.2", ] [[package]] @@ -12040,13 +6235,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.2", ] [[package]] @@ -12057,9 +6252,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "resolv-conf" @@ -12081,6 +6276,23 @@ dependencies = [ "subtle 2.5.0", ] +[[package]] +name = "ring" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#665f5f51af5734c7b6d90b985dd6861d4c5b4752" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "arrayvec", + "blake2 0.10.6", + "common", + "fflonk", + "merlin", +] + [[package]] name = "ring" version = "0.16.20" @@ -12098,48 +6310,16 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.8" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ "cc", - "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.12", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "ripemd" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" -dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "rlp" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" -dependencies = [ - "bytes", - "rlp-derive", - "rustc-hex", -] - -[[package]] -name = "rlp-derive" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "windows-sys 0.48.0", ] [[package]] @@ -12153,116 +6333,10 @@ dependencies = [ ] [[package]] -name = "rococo-runtime" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "binary-merkle-tree", - "frame-benchmarking", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.4.1", - "log", - "pallet-asset-rate", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-balances", - "pallet-beefy", - "pallet-beefy-mmr", - "pallet-bounties", - "pallet-child-bounties", - "pallet-collective", - "pallet-conviction-voting", - "pallet-democracy", - "pallet-elections-phragmen", - "pallet-grandpa", - "pallet-identity", - "pallet-im-online", - "pallet-indices", - "pallet-membership", - "pallet-message-queue", - "pallet-mmr", - "pallet-multisig", - "pallet-nis", - "pallet-offences", - "pallet-preimage", - "pallet-proxy", - "pallet-ranked-collective", - "pallet-recovery", - "pallet-referenda", - "pallet-root-testing", - "pallet-scheduler", - "pallet-session", - "pallet-society", - "pallet-staking", - "pallet-state-trie-migration", - "pallet-sudo", - "pallet-timestamp", - "pallet-tips", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-treasury", - "pallet-utility", - "pallet-vesting", - "pallet-whitelist", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "rococo-runtime-constants", - "scale-info", - "serde", - "serde_derive", - "smallvec", - "sp-api", - "sp-arithmetic", - "sp-authority-discovery", - "sp-block-builder", - "sp-consensus-babe", - "sp-consensus-beefy", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-mmr-primitives", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-storage", - "sp-transaction-pool", - "sp-version", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "static_assertions", - "substrate-wasm-builder", -] - -[[package]] -name = "rococo-runtime-constants" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "polkadot-primitives", - "polkadot-runtime-common", - "smallvec", - "sp-core", - "sp-runtime", - "sp-weights", - "staging-xcm", - "staging-xcm-builder", -] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" [[package]] name = "rpassword" @@ -12281,7 +6355,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" dependencies = [ - "futures 0.3.30", + "futures", "log", "netlink-packet-route", "netlink-proto", @@ -12300,37 +6374,11 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "runtime-common" -version = "0.1.0" -dependencies = [ - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "frame-support", - "frame-system", - "frame-try-runtime", - "hex-literal 0.3.4", - "pallet-balances", - "pallet-configuration", - "pallet-data-preservers", - "pallet-invulnerables", - "pallet-migrations", - "pallet-pooled-staking", - "pallet-registrar", - "pallet-services-payment", - "pallet-treasury", - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" @@ -12344,22 +6392,13 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.23", + "semver 1.0.21", ] [[package]] @@ -12387,28 +6426,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "0.38.34" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.4.2", "errno", "libc", - "linux-raw-sys 0.4.14", + "linux-raw-sys 0.4.13", "windows-sys 0.52.0", ] @@ -12426,16 +6451,30 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.12" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", - "ring 0.17.8", - "rustls-webpki", + "ring 0.17.7", + "rustls-webpki 0.101.7", "sct", ] +[[package]] +name = "rustls" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99008d7ad0bbbea527ec27bddbc0e432c5b87d8175178cee68d2eec9c4a1813c" +dependencies = [ + "log", + "ring 0.17.7", + "rustls-pki-types", + "rustls-webpki 0.102.2", + "subtle 2.5.0", + "zeroize", +] + [[package]] name = "rustls-native-certs" version = "0.6.3" @@ -12443,7 +6482,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.1", + "rustls-pki-types", "schannel", "security-framework", ] @@ -12457,32 +6509,48 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f48172685e6ff52a556baa527774f61fcaa884f59daf3375c62a3f1cd2549dab" +dependencies = [ + "base64 0.21.7", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" + [[package]] name = "rustls-webpki" version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.8", + "ring 0.17.7", "untrusted 0.9.0", ] [[package]] -name = "rustversion" -version = "1.0.17" +name = "rustls-webpki" +version = "0.102.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +dependencies = [ + "ring 0.17.7", + "rustls-pki-types", + "untrusted 0.9.0", +] [[package]] -name = "ruzstd" -version = "0.4.0" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" -dependencies = [ - "byteorder", - "thiserror-core", - "twox-hash", -] +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rw-stream-sink" @@ -12490,25 +6558,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" dependencies = [ - "futures 0.3.30", + "futures", "pin-project", "static_assertions", ] [[package]] name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - -[[package]] -name = "safe-mix" -version = "1.0.1" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" -dependencies = [ - "rustc_version 0.2.3", -] +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "safe_arch" @@ -12530,50 +6589,21 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "4.1.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "log", - "sp-core", - "sp-wasm-interface", - "thiserror", -] - -[[package]] -name = "sc-authority-discovery" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "async-trait", - "futures 0.3.30", - "futures-timer", - "ip_network", - "libp2p", "log", - "multihash 0.18.1", - "multihash-codetable", - "parity-scale-codec", - "prost", - "prost-build", - "rand", - "sc-client-api", - "sc-network", - "sp-api", - "sp-authority-discovery", - "sp-blockchain", "sp-core", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", ] [[package]] name = "sc-basic-authorship" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "futures 0.3.30", + "futures", "futures-timer", "log", "parity-scale-codec", @@ -12592,8 +6622,8 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "sp-api", @@ -12607,13 +6637,13 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", + "array-bytes 6.2.2", "docify", "log", - "memmap2", + "memmap2 0.9.4", "parity-scale-codec", "sc-chain-spec-derive", "sc-client-api", @@ -12624,6 +6654,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", + "sp-crypto-hashing", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -12632,37 +6663,36 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sc-cli" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.36.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "bip39", + "array-bytes 6.2.2", "chrono", "clap", "fdlimit", - "futures 0.3.30", - "itertools 0.10.5", + "futures", + "itertools", "libp2p-identity", "log", "names", + "parity-bip39", "parity-scale-codec", "rand", "regex", "rpassword", "sc-client-api", "sc-client-db", - "sc-executor", "sc-keystore", "sc-mixnet", "sc-network", @@ -12678,8 +6708,6 @@ dependencies = [ "sp-keystore", "sp-panic-handler", "sp-runtime", - "sp-state-machine", - "sp-storage", "sp-version", "thiserror", "tokio", @@ -12687,14 +6715,14 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "fnv", - "futures 0.3.30", + "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-executor", "sc-transaction-pool-api", "sc-utils", @@ -12703,19 +6731,19 @@ dependencies = [ "sp-consensus", "sp-core", "sp-database", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-runtime", "sp-state-machine", "sp-statement-store", - "sp-storage", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", "substrate-prometheus-endpoint", ] [[package]] name = "sc-client-db" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "hash-db", "kvdb", @@ -12725,7 +6753,7 @@ dependencies = [ "log", "parity-db", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-client-api", "sc-state-db", "schnellru", @@ -12740,16 +6768,16 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "futures-timer", "libp2p-identity", "log", "mockall", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-client-api", "sc-utils", "serde", @@ -12765,11 +6793,11 @@ dependencies = [ [[package]] name = "sc-consensus-aura" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "log", "parity-scale-codec", "sc-block-builder", @@ -12792,146 +6820,22 @@ dependencies = [ "thiserror", ] -[[package]] -name = "sc-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "fork-tree", - "futures 0.3.30", - "log", - "num-bigint", - "num-rational", - "num-traits", - "parity-scale-codec", - "parking_lot 0.12.2", - "sc-client-api", - "sc-consensus", - "sc-consensus-epochs", - "sc-consensus-slots", - "sc-telemetry", - "sc-transaction-pool-api", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", -] - -[[package]] -name = "sc-consensus-babe-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "jsonrpsee", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-rpc-api", - "serde", - "sp-api", - "sp-application-crypto", - "sp-blockchain", - "sp-consensus", - "sp-consensus-babe", - "sp-core", - "sp-keystore", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-consensus-beefy" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "array-bytes 6.2.3", - "async-channel 1.9.0", - "async-trait", - "fnv", - "futures 0.3.30", - "log", - "parity-scale-codec", - "parking_lot 0.12.2", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-gossip", - "sc-network-sync", - "sc-utils", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-blockchain", - "sp-consensus", - "sp-consensus-beefy", - "sp-core", - "sp-keystore", - "sp-mmr-primitives", - "sp-runtime", - "substrate-prometheus-endpoint", - "thiserror", - "tokio", - "wasm-timer", -] - -[[package]] -name = "sc-consensus-beefy-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "jsonrpsee", - "log", - "parity-scale-codec", - "parking_lot 0.12.2", - "sc-consensus-beefy", - "sc-rpc", - "serde", - "sp-consensus-beefy", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-consensus-epochs" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "fork-tree", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sp-blockchain", - "sp-runtime", -] - [[package]] name = "sc-consensus-grandpa" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "ahash 0.8.11", - "array-bytes 6.2.3", + "ahash 0.8.7", + "array-bytes 6.2.2", "async-trait", "dyn-clone", "finality-grandpa", "fork-tree", - "futures 0.3.30", + "futures", "futures-timer", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rand", "sc-block-builder", "sc-chain-spec", @@ -12952,74 +6856,20 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", + "sp-crypto-hashing", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", "thiserror", ] -[[package]] -name = "sc-consensus-grandpa-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "finality-grandpa", - "futures 0.3.30", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-consensus-grandpa", - "sc-rpc", - "serde", - "sp-blockchain", - "sp-core", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "sc-consensus-manual-seal" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "assert_matches", - "async-trait", - "futures 0.3.30", - "futures-timer", - "jsonrpsee", - "log", - "parity-scale-codec", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keystore", - "sp-runtime", - "sp-timestamp", - "substrate-prometheus-endpoint", - "thiserror", -] - [[package]] name = "sc-consensus-slots" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "futures-timer", "log", "parity-scale-codec", @@ -13038,67 +6888,76 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-executor-common", + "sc-executor-polkavm", "sc-executor-wasmtime", "schnellru", "sp-api", "sp-core", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-io", "sp-panic-handler", - "sp-runtime-interface", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", "sp-version", - "sp-wasm-interface", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "tracing", ] [[package]] name = "sc-executor-common" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.29.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "parity-scale-codec", + "polkavm", "sc-allocator", "sp-maybe-compressed-blob", - "sp-wasm-interface", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", "wasm-instrument", ] +[[package]] +name = "sc-executor-polkavm" +version = "0.29.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "log", + "polkavm", + "sc-executor-common", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", +] + [[package]] name = "sc-executor-wasmtime" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.29.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "anyhow", "cfg-if", "libc", "log", - "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rustix 0.36.17", "sc-allocator", "sc-executor-common", - "sp-core", - "sp-runtime-interface", - "sp-wasm-interface", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "wasmtime", ] [[package]] name = "sc-informant" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "ansi_term", - "futures 0.3.30", + "futures", "futures-timer", "log", "sc-client-api", @@ -13111,11 +6970,11 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "25.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "parking_lot 0.12.2", + "array-bytes 6.2.2", + "parking_lot 0.12.1", "serde_json", "sp-application-crypto", "sp-core", @@ -13125,21 +6984,21 @@ dependencies = [ [[package]] name = "sc-mixnet" -version = "0.1.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.4.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "array-bytes 4.2.0", - "arrayvec 0.7.4", + "arrayvec", "blake2 0.10.6", "bytes", - "futures 0.3.30", + "futures", "futures-timer", "libp2p-identity", "log", "mixnet", "multiaddr", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-client-api", "sc-network", "sc-transaction-pool-api", @@ -13154,17 +7013,17 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "async-channel 1.9.0", + "array-bytes 6.2.2", + "async-channel", "async-trait", "asynchronous-codec", "bytes", "either", "fnv", - "futures 0.3.30", + "futures", "futures-timer", "ip_network", "libp2p", @@ -13172,7 +7031,7 @@ dependencies = [ "log", "mockall", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "partial_sort", "pin-project", "rand", @@ -13197,15 +7056,15 @@ dependencies = [ [[package]] name = "sc-network-bitswap" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "async-channel 1.9.0", + "async-channel", "cid", - "futures 0.3.30", + "futures", "libp2p-identity", "log", - "prost", + "prost 0.12.3", "prost-build", "sc-client-api", "sc-network", @@ -13217,12 +7076,12 @@ dependencies = [ [[package]] name = "sc-network-common" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "bitflags 1.3.2", - "futures 0.3.30", + "futures", "libp2p-identity", "parity-scale-codec", "prost-build", @@ -13234,11 +7093,11 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "ahash 0.8.11", - "futures 0.3.30", + "ahash 0.8.7", + "futures", "futures-timer", "libp2p", "log", @@ -13253,16 +7112,16 @@ dependencies = [ [[package]] name = "sc-network-light" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "async-channel 1.9.0", - "futures 0.3.30", + "array-bytes 6.2.2", + "async-channel", + "futures", "libp2p-identity", "log", "parity-scale-codec", - "prost", + "prost 0.12.3", "prost-build", "sc-client-api", "sc-network", @@ -13274,20 +7133,20 @@ dependencies = [ [[package]] name = "sc-network-sync" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "async-channel 1.9.0", + "array-bytes 6.2.2", + "async-channel", "async-trait", "fork-tree", - "futures 0.3.30", + "futures", "futures-timer", "libp2p", "log", "mockall", "parity-scale-codec", - "prost", + "prost 0.12.3", "prost-build", "sc-client-api", "sc-consensus", @@ -13308,44 +7167,13 @@ dependencies = [ "tokio-stream", ] -[[package]] -name = "sc-network-test" -version = "0.8.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "async-trait", - "futures 0.3.30", - "futures-timer", - "libp2p", - "log", - "parking_lot 0.12.2", - "rand", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-network", - "sc-network-common", - "sc-network-light", - "sc-network-sync", - "sc-service", - "sc-utils", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "sp-tracing", - "substrate-test-runtime", - "substrate-test-runtime-client", - "tokio", -] - [[package]] name = "sc-network-transactions" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "futures 0.3.30", + "array-bytes 6.2.2", + "futures", "libp2p", "log", "parity-scale-codec", @@ -13360,13 +7188,13 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", + "array-bytes 6.2.2", "bytes", "fnv", - "futures 0.3.30", + "futures", "futures-timer", "hyper", "hyper-rustls", @@ -13375,7 +7203,7 @@ dependencies = [ "num_cpus", "once_cell", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rand", "sc-client-api", "sc-network", @@ -13384,7 +7212,7 @@ dependencies = [ "sc-utils", "sp-api", "sp-core", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-keystore", "sp-offchain", "sp-runtime", @@ -13394,8 +7222,8 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -13403,14 +7231,14 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "futures 0.3.30", + "futures", "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-block-builder", "sc-chain-spec", "sc-client-api", @@ -13435,8 +7263,8 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -13455,10 +7283,13 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ + "futures", + "governor", "http", + "hyper", "jsonrpsee", "log", "serde_json", @@ -13470,19 +7301,21 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "futures 0.3.30", + "array-bytes 6.2.2", + "futures", "futures-util", "hex", "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", + "rand", "sc-chain-spec", "sc-client-api", + "sc-rpc", "sc-transaction-pool-api", "sc-utils", "serde", @@ -13499,18 +7332,18 @@ dependencies = [ [[package]] name = "sc-service" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "directories", "exit-future", - "futures 0.3.30", + "futures", "futures-timer", "jsonrpsee", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "pin-project", "rand", "sc-chain-spec", @@ -13535,18 +7368,19 @@ dependencies = [ "sc-transaction-pool", "sc-transaction-pool-api", "sc-utils", + "schnellru", "serde", "serde_json", "sp-api", "sp-blockchain", "sp-consensus", "sp-core", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-keystore", "sp-runtime", "sp-session", "sp-state-machine", - "sp-storage", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-transaction-pool", "sp-transaction-storage-proof", "sp-trie", @@ -13562,54 +7396,22 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.30.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "log", "parity-scale-codec", - "parking_lot 0.12.2", - "sp-core", -] - -[[package]] -name = "sc-storage-monitor" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "clap", - "fs4", - "log", + "parking_lot 0.12.1", "sp-core", - "thiserror", - "tokio", -] - -[[package]] -name = "sc-sync-state-rpc" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-chain-spec", - "sc-client-api", - "sc-consensus-babe", - "sc-consensus-epochs", - "sc-consensus-grandpa", - "serde", - "serde_json", - "sp-blockchain", - "sp-runtime", - "thiserror", ] [[package]] name = "sc-sysinfo" -version = "6.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "derive_more", - "futures 0.3.30", + "futures", "libc", "log", "rand", @@ -13619,20 +7421,21 @@ dependencies = [ "serde", "serde_json", "sp-core", + "sp-crypto-hashing", "sp-io", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sc-telemetry" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "chrono", - "futures 0.3.30", + "futures", "libp2p", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "pin-project", "rand", "sc-utils", @@ -13644,8 +7447,8 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "ansi_term", "chrono", @@ -13654,7 +7457,7 @@ dependencies = [ "libc", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "regex", "rustc-hash", "sc-client-api", @@ -13665,36 +7468,36 @@ dependencies = [ "sp-core", "sp-rpc", "sp-runtime", - "sp-tracing", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", "tracing", - "tracing-log", - "tracing-subscriber", + "tracing-log 0.1.4", + "tracing-subscriber 0.2.25", ] [[package]] name = "sc-tracing-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sc-transaction-pool" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "futures-timer", "linked-hash-map", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sc-client-api", "sc-transaction-pool-api", "sc-utils", @@ -13702,8 +7505,9 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", + "sp-crypto-hashing", "sp-runtime", - "sp-tracing", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-transaction-pool", "substrate-prometheus-endpoint", "thiserror", @@ -13711,11 +7515,11 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "log", "parity-scale-codec", "serde", @@ -13727,24 +7531,24 @@ dependencies = [ [[package]] name = "sc-utils" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "async-channel 1.9.0", - "futures 0.3.30", + "async-channel", + "futures", "futures-timer", "lazy_static", "log", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "prometheus", "sp-arithmetic", ] [[package]] name = "scale-info" -version = "2.11.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ "bitvec", "cfg-if", @@ -13756,11 +7560,11 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.3" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn 1.0.109", @@ -13777,31 +7581,15 @@ dependencies = [ [[package]] name = "schnellru" -version = "0.2.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a8ef13a93c54d20580de1e5c413e624e53121d42fc7e2c11d10ef7f8b02367" +checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.7", "cfg-if", "hashbrown 0.13.2", ] -[[package]] -name = "schnorrkel" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28d" -dependencies = [ - "arrayref", - "arrayvec 0.7.4", - "curve25519-dalek-ng", - "merlin", - "rand_core 0.6.4", - "sha2 0.9.9", - "subtle-ng", - "zeroize", -] - [[package]] name = "schnorrkel" version = "0.11.4" @@ -13810,7 +7598,7 @@ checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0" dependencies = [ "aead", "arrayref", - "arrayvec 0.7.4", + "arrayvec", "curve25519-dalek 4.1.2", "getrandom_or_panic", "merlin", @@ -13839,7 +7627,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.8", + "ring 0.17.7", "untrusted 0.9.0", ] @@ -13853,19 +7641,11 @@ dependencies = [ "der", "generic-array 0.14.7", "pkcs8", + "serdect", "subtle 2.5.0", "zeroize", ] -[[package]] -name = "seccompiler" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345a3e4dddf721a478089d4697b83c6c0a8f5bf16086f6c13397e4534eb6e2e5" -dependencies = [ - "libc", -] - [[package]] name = "secp256k1" version = "0.28.2" @@ -13895,11 +7675,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags 2.5.0", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -13908,9 +7688,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -13920,25 +7700,16 @@ dependencies = [ name = "semver" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +checksum = "7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537" dependencies = [ "semver-parser", ] [[package]] name = "semver" -version = "1.0.23" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" dependencies = [ "serde", ] @@ -13951,9 +7722,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] @@ -13969,20 +7740,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu", @@ -13991,24 +7762,21 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] [[package]] -name = "services-payment-rpc" -version = "0.1.0" +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" dependencies = [ - "futures 0.3.30", - "jsonrpsee", - "pallet-services-payment-runtime-api", - "parity-scale-codec", - "sc-client-api", - "sp-api", - "sp-runtime", + "base16ct", + "serde", ] [[package]] @@ -14021,18 +7789,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.1", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", + "opaque-debug 0.3.0", ] [[package]] @@ -14045,7 +7802,7 @@ dependencies = [ "cfg-if", "cpufeatures", "digest 0.9.0", - "opaque-debug 0.3.1", + "opaque-debug 0.3.0", ] [[package]] @@ -14086,9 +7843,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -14116,30 +7873,11 @@ dependencies = [ "wide", ] -[[package]] -name = "similar" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" -dependencies = [ - "bstr 0.2.17", - "unicode-segmentation", -] - -[[package]] -name = "similar-asserts" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f" -dependencies = [ - "console", - "similar", -] - [[package]] name = "simple-mermaid" -version = "0.1.0" -source = "git+https://github.com/kianenigma/simple-mermaid.git?rev=e48b187bcfd5cc75111acd9d241f1bd36604344b#e48b187bcfd5cc75111acd9d241f1bd36604344b" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "620a1d43d70e142b1d46a929af51d44f383db9c7a2ec122de2cd992ccfcf3c18" [[package]] name = "siphasher" @@ -14162,151 +7900,11 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" -[[package]] -name = "slices" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2086e458a369cdca838e9f6ed04b4cc2e3ce636d99abb80c9e2eada107749cf" -dependencies = [ - "faster-hex", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "slot-range-helper" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "enumn", - "parity-scale-codec", - "paste", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "slotmap" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" -dependencies = [ - "version_check", -] - [[package]] name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - -[[package]] -name = "smol" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" -dependencies = [ - "async-channel 1.9.0", - "async-executor", - "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", - "async-net", - "async-process", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "smoldot" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5" -dependencies = [ - "arrayvec 0.7.4", - "async-lock 2.8.0", - "atomic-take", - "base64 0.21.7", - "bip39", - "blake2-rfc", - "bs58 0.5.1", - "chacha20", - "crossbeam-queue", - "derive_more", - "ed25519-zebra 4.0.3", - "either", - "event-listener 2.5.3", - "fnv", - "futures-lite 1.13.0", - "futures-util", - "hashbrown 0.14.5", - "hex", - "hmac 0.12.1", - "itertools 0.11.0", - "libsecp256k1", - "merlin", - "no-std-net", - "nom", - "num-bigint", - "num-rational", - "num-traits", - "pbkdf2 0.12.2", - "pin-project", - "poly1305", - "rand", - "rand_chacha 0.3.1", - "ruzstd", - "schnorrkel 0.10.2", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3", - "siphasher", - "slab", - "smallvec", - "soketto", - "twox-hash", - "wasmi", - "x25519-dalek 2.0.1", - "zeroize", -] - -[[package]] -name = "smoldot-light" -version = "0.9.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33" -dependencies = [ - "async-channel 1.9.0", - "async-lock 2.8.0", - "base64 0.21.7", - "blake2-rfc", - "derive_more", - "either", - "event-listener 2.5.3", - "fnv", - "futures-channel", - "futures-lite 1.13.0", - "futures-util", - "hashbrown 0.14.5", - "hex", - "itertools 0.11.0", - "log", - "lru 0.11.1", - "no-std-net", - "parking_lot 0.12.2", - "pin-project", - "rand", - "rand_chacha 0.3.1", - "serde", - "serde_json", - "siphasher", - "slab", - "smol", - "smoldot", - "zeroize", -] +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "snap" @@ -14325,8 +7923,8 @@ dependencies = [ "chacha20poly1305", "curve25519-dalek 4.1.2", "rand_core 0.6.4", - "ring 0.17.8", - "rustc_version 0.4.0", + "ring 0.17.7", + "rustc_version", "sha2 0.10.8", "subtle 2.5.0", ] @@ -14343,12 +7941,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.48.0", ] [[package]] @@ -14360,7 +7958,7 @@ dependencies = [ "base64 0.13.1", "bytes", "flate2", - "futures 0.3.30", + "futures", "http", "httparse", "log", @@ -14370,8 +7968,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "hash-db", "log", @@ -14379,11 +7977,12 @@ dependencies = [ "scale-info", "sp-api-proc-macro", "sp-core", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-metadata-ir", "sp-runtime", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-state-machine", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", "sp-version", "thiserror", @@ -14391,78 +7990,83 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "15.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "Inflector", "blake2 0.10.6", - "expander 2.1.0", + "expander", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sp-application-crypto" -version = "23.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "30.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "scale-info", "serde", "sp-core", "sp-io", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-arithmetic" -version = "16.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "integer-sqrt", "num-traits", "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "static_assertions", ] [[package]] -name = "sp-authority-discovery" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "sp-ark-bls12-381" +version = "0.4.2" +source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f" dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-runtime", - "sp-std", + "ark-bls12-381-ext", + "sp-crypto-ec-utils", +] + +[[package]] +name = "sp-ark-ed-on-bls12-381-bandersnatch" +version = "0.4.2" +source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f" +dependencies = [ + "ark-ed-on-bls12-381-bandersnatch-ext", + "sp-crypto-ec-utils", ] [[package]] name = "sp-block-builder" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "sp-api", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-blockchain" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "futures 0.3.30", + "futures", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "schnellru", "sp-api", "sp-consensus", @@ -14474,11 +8078,11 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", - "futures 0.3.30", + "futures", "log", "sp-core", "sp-inherents", @@ -14489,8 +8093,8 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "parity-scale-codec", @@ -14500,14 +8104,14 @@ dependencies = [ "sp-consensus-slots", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-timestamp", ] [[package]] name = "sp-consensus-babe" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "parity-scale-codec", @@ -14519,33 +8123,14 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-timestamp", ] -[[package]] -name = "sp-consensus-beefy" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "lazy_static", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-application-crypto", - "sp-core", - "sp-io", - "sp-mmr-primitives", - "sp-runtime", - "sp-std", - "strum 0.24.1", -] - [[package]] name = "sp-consensus-grandpa" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "finality-grandpa", "log", @@ -14557,58 +8142,60 @@ dependencies = [ "sp-core", "sp-keystore", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-consensus-slots" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.32.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-timestamp", ] [[package]] name = "sp-core" -version = "21.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "array-bytes 6.2.3", - "bip39", + "array-bytes 6.2.2", + "bandersnatch_vrfs", "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", - "bs58 0.5.1", + "bs58 0.5.0", "dyn-clonable", - "ed25519-zebra 3.1.0", - "futures 0.3.30", + "ed25519-zebra", + "futures", "hash-db", "hash256-std-hasher", "impl-serde", - "itertools 0.10.5", + "itertools", + "k256", "libsecp256k1", "log", "merlin", + "parity-bip39", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "paste", "primitive-types", "rand", "scale-info", - "schnorrkel 0.11.4", + "schnorrkel", "secp256k1", "secrecy", "serde", - "sp-core-hashing", - "sp-debug-derive", - "sp-externalities", - "sp-runtime-interface", - "sp-std", - "sp-storage", + "sp-crypto-hashing", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "ss58-registry", "substrate-bip39", "thiserror", @@ -14618,9 +8205,29 @@ dependencies = [ ] [[package]] -name = "sp-core-hashing" -version = "9.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "sp-crypto-ec-utils" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" +dependencies = [ + "ark-bls12-377", + "ark-bls12-377-ext", + "ark-bls12-381", + "ark-bls12-381-ext", + "ark-bw6-761", + "ark-bw6-761-ext", + "ark-ec", + "ark-ed-on-bls12-377", + "ark-ed-on-bls12-377-ext", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ed-on-bls12-381-bandersnatch-ext", + "ark-scale", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk)", +] + +[[package]] +name = "sp-crypto-hashing" +version = "0.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "blake2b_simd", "byteorder", @@ -14631,89 +8238,111 @@ dependencies = [ ] [[package]] -name = "sp-core-hashing-proc-macro" -version = "9.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "sp-crypto-hashing-proc-macro" +version = "0.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "quote", - "sp-core-hashing", - "syn 2.0.65", + "sp-crypto-hashing", + "syn 2.0.57", ] [[package]] name = "sp-database" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "kvdb", - "parking_lot 0.12.2", + "parking_lot 0.12.1", +] + +[[package]] +name = "sp-debug-derive" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] name = "sp-debug-derive" -version = "8.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sp-externalities" -version = "0.19.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", +] + +[[package]] +name = "sp-externalities" +version = "0.25.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" dependencies = [ "environmental", "parity-scale-codec", - "sp-std", - "sp-storage", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk)", ] [[package]] name = "sp-genesis-builder" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.7.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "serde_json", "sp-api", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-inherents" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "impl-trait-for-tuples", "parity-scale-codec", "scale-info", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", ] [[package]] name = "sp-io" -version = "23.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "30.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "bytes", "ed25519-dalek", "libsecp256k1", "log", "parity-scale-codec", + "polkavm-derive", "rustversion", "secp256k1", "sp-core", - "sp-externalities", + "sp-crypto-hashing", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-keystore", - "sp-runtime-interface", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-state-machine", - "sp-std", - "sp-tracing", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", "tracing", "tracing-core", @@ -14721,8 +8350,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "24.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "31.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "sp-core", "sp-runtime", @@ -14731,20 +8360,19 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.27.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.34.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "sp-core", - "sp-externalities", - "thiserror", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-maybe-compressed-blob" -version = "4.1.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "thiserror", "zstd 0.12.4", @@ -14752,63 +8380,31 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.6.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "frame-metadata", "parity-scale-codec", "scale-info", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-mixnet" -version = "0.1.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.4.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-application-crypto", - "sp-std", -] - -[[package]] -name = "sp-mmr-primitives" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "ckb-merkle-mountain-range", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-api", - "sp-core", - "sp-debug-derive", - "sp-runtime", - "sp-std", - "thiserror", -] - -[[package]] -name = "sp-npos-elections" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "parity-scale-codec", - "scale-info", - "serde", - "sp-arithmetic", - "sp-core", - "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-offchain" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "sp-api", "sp-core", @@ -14817,8 +8413,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "8.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "backtrace", "lazy_static", @@ -14827,8 +8423,8 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "6.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "rustc-hash", "serde", @@ -14837,8 +8433,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "24.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "31.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "docify", "either", @@ -14855,45 +8451,78 @@ dependencies = [ "sp-arithmetic", "sp-core", "sp-io", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-weights", ] [[package]] name = "sp-runtime-interface" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface" +version = "24.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "polkavm-derive", + "primitive-types", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-runtime-interface-proc-macro 17.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-storage 19.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-tracing 16.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "sp-wasm-interface 20.0.0 (git+https://github.com/paritytech/polkadot-sdk)", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" version = "17.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities", - "sp-runtime-interface-proc-macro", - "sp-std", - "sp-storage", - "sp-tracing", - "sp-wasm-interface", - "static_assertions", + "Inflector", + "expander", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.57", ] [[package]] name = "sp-runtime-interface-proc-macro" -version = "11.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" dependencies = [ "Inflector", - "expander 2.1.0", + "expander", "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sp-session" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "scale-info", @@ -14902,13 +8531,13 @@ dependencies = [ "sp-keystore", "sp-runtime", "sp-staking", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-staking" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -14916,24 +8545,24 @@ dependencies = [ "serde", "sp-core", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] name = "sp-state-machine" -version = "0.28.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "hash-db", "log", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rand", "smallvec", "sp-core", - "sp-externalities", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-panic-handler", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", "thiserror", "tracing", @@ -14942,8 +8571,8 @@ dependencies = [ [[package]] name = "sp-statement-store" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "aes-gcm", "curve25519-dalek 4.1.2", @@ -14956,61 +8585,90 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-externalities", + "sp-crypto-hashing", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-runtime", - "sp-runtime-interface", - "sp-std", + "sp-runtime-interface 24.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", "x25519-dalek 2.0.1", ] [[package]] name = "sp-std" -version = "8.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" + +[[package]] +name = "sp-std" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" [[package]] name = "sp-storage" -version = "13.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", +] + +[[package]] +name = "sp-storage" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" dependencies = [ "impl-serde", "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk)", ] [[package]] name = "sp-timestamp" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "parity-scale-codec", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", ] [[package]] name = "sp-tracing" -version = "10.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "parity-scale-codec", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "tracing", + "tracing-core", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "sp-tracing" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" dependencies = [ "parity-scale-codec", - "sp-std", "tracing", "tracing-core", - "tracing-subscriber", + "tracing-subscriber 0.3.18", ] [[package]] name = "sp-transaction-pool" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "sp-api", "sp-runtime", @@ -15018,8 +8676,8 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "26.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "parity-scale-codec", @@ -15027,28 +8685,28 @@ dependencies = [ "sp-core", "sp-inherents", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-trie", ] [[package]] name = "sp-trie" -version = "22.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "ahash 0.8.11", + "ahash 0.8.7", "hash-db", "lazy_static", "memory-db", "nohash-hasher", "parity-scale-codec", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rand", "scale-info", "schnellru", "sp-core", - "sp-externalities", - "sp-std", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "thiserror", "tracing", "trie-db", @@ -15057,49 +8715,59 @@ dependencies = [ [[package]] name = "sp-version" -version = "22.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", "serde", - "sp-core-hashing-proc-macro", + "sp-crypto-hashing-proc-macro", "sp-runtime", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-version-proc-macro", "thiserror", ] [[package]] name = "sp-version-proc-macro" -version = "8.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "parity-scale-codec", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] name = "sp-wasm-interface" -version = "14.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "anyhow", "impl-trait-for-tuples", "log", "parity-scale-codec", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "wasmtime", ] [[package]] -name = "sp-weights" +name = "sp-wasm-interface" version = "20.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +source = "git+https://github.com/paritytech/polkadot-sdk#d3d1542c1d387408c141f9a1a8168e32435a4be9" +dependencies = [ + "impl-trait-for-tuples", + "log", + "parity-scale-codec", +] + +[[package]] +name = "sp-weights" +version = "27.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -15107,8 +8775,8 @@ dependencies = [ "serde", "smallvec", "sp-arithmetic", - "sp-debug-derive", - "sp-std", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] @@ -15122,9 +8790,6 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] [[package]] name = "spinners" @@ -15138,141 +8803,29 @@ dependencies = [ ] [[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlformat" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" -dependencies = [ - "itertools 0.12.1", - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" -dependencies = [ - "ahash 0.8.11", - "atoi", - "byteorder", - "bytes", - "crc", - "crossbeam-queue", - "either", - "event-listener 2.5.3", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashlink", - "hex", - "indexmap 2.2.6", - "log", - "memchr", - "native-tls", - "once_cell", - "paste", - "percent-encoding", - "serde", - "sha2 0.10.8", - "smallvec", - "sqlformat", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "url", -] - -[[package]] -name = "sqlx-macros" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 1.0.109", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.7.4" +name = "spinning_top" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" dependencies = [ - "dotenvy", - "either", - "heck 0.4.1", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.8", - "sqlx-core", - "sqlx-sqlite", - "syn 1.0.109", - "tempfile", - "tokio", - "url", + "lock_api", ] [[package]] -name = "sqlx-sqlite" -version = "0.7.4" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "atoi", - "flume 0.11.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "sqlx-core", - "tracing", - "url", - "urlencoding", + "base64ct", + "der", ] [[package]] name = "ss58-registry" -version = "1.47.0" +version = "1.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4743ce898933fbff7bbf414f497c459a782d496269644b3d650a398ae6a487ba" +checksum = "b1114ee5900b8569bbc8b1a014a942f937b752af4b44f4607430b5f86cedaac0" dependencies = [ "Inflector", "num-format", @@ -15289,81 +8842,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "staging-parachain-info" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "frame-system", - "parity-scale-codec", - "scale-info", - "sp-runtime", - "sp-std", -] - -[[package]] -name = "staging-xcm" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "array-bytes 6.2.3", - "bounded-collections", - "derivative", - "environmental", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "scale-info", - "serde", - "sp-weights", - "xcm-procedural", -] - -[[package]] -name = "staging-xcm-builder" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "log", - "pallet-transaction-payment", - "parity-scale-codec", - "polkadot-parachain-primitives", - "scale-info", - "sp-arithmetic", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", - "staging-xcm", - "staging-xcm-executor", -] - -[[package]] -name = "staging-xcm-executor" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "environmental", - "frame-benchmarking", - "frame-support", - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "scale-info", - "sp-arithmetic", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-weights", - "staging-xcm", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -15398,38 +8876,11 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "stream-payment-rpc" -version = "0.1.0" -dependencies = [ - "futures 0.3.30", - "jsonrpsee", - "pallet-stream-payment-runtime-api", - "parity-scale-codec", - "serde", - "sp-api", - "sp-runtime", - "thiserror", -] - -[[package]] -name = "strobe-rs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabb238a1cccccfa4c4fb703670c0d157e1256c1ba695abf1b93bd2bb14bab2d" -dependencies = [ - "bitflags 1.3.2", - "byteorder", - "keccak", - "subtle 2.5.0", - "zeroize", -] - [[package]] name = "strsim" -version = "0.11.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" [[package]] name = "strum" @@ -15442,11 +8893,17 @@ dependencies = [ [[package]] name = "strum" -version = "0.26.2" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + +[[package]] +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "strum_macros 0.26.2", + "strum_macros 0.26.4", ] [[package]] @@ -15464,42 +8921,54 @@ dependencies = [ [[package]] name = "strum_macros" -version = "0.26.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", "rustversion", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] -name = "substrate-bip39" -version = "0.4.6" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7590dc041b9bc2825e52ce5af8416c73dbe9d0654402bfd4b4941938b94d8f" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "hmac 0.11.0", - "pbkdf2 0.8.0", - "schnorrkel 0.11.4", - "sha2 0.9.9", + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.57", +] + +[[package]] +name = "substrate-bip39" +version = "0.4.7" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" +dependencies = [ + "hmac 0.12.1", + "pbkdf2", + "schnorrkel", + "sha2 0.10.8", "zeroize", ] [[package]] name = "substrate-build-script-utils" -version = "3.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" [[package]] name = "substrate-frame-rpc-system" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "28.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "frame-system-rpc-runtime-api", - "futures 0.3.30", + "futures", "jsonrpsee", "log", "parity-scale-codec", @@ -15514,8 +8983,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "hyper", "log", @@ -15526,8 +8995,8 @@ dependencies = [ [[package]] name = "substrate-rpc-client" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.33.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "jsonrpsee", @@ -15537,122 +9006,21 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "substrate-state-trie-migration-rpc" -version = "4.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "jsonrpsee", - "parity-scale-codec", - "sc-client-api", - "sc-rpc-api", - "serde", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-trie", - "trie-db", -] - -[[package]] -name = "substrate-test-client" -version = "2.0.1" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "array-bytes 6.2.3", - "async-trait", - "futures 0.3.30", - "parity-scale-codec", - "sc-client-api", - "sc-client-db", - "sc-consensus", - "sc-executor", - "sc-offchain", - "sc-service", - "serde", - "serde_json", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", -] - -[[package]] -name = "substrate-test-runtime" -version = "2.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "array-bytes 6.2.3", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-rpc-runtime-api", - "log", - "pallet-babe", - "pallet-balances", - "pallet-timestamp", - "parity-scale-codec", - "sc-service", - "scale-info", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-consensus-aura", - "sp-consensus-babe", - "sp-consensus-grandpa", - "sp-core", - "sp-externalities", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-keyring", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-std", - "sp-transaction-pool", - "sp-trie", - "sp-version", - "substrate-wasm-builder", - "trie-db", -] - -[[package]] -name = "substrate-test-runtime-client" -version = "2.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "futures 0.3.30", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", - "substrate-test-client", - "substrate-test-runtime", -] - [[package]] name = "substrate-wasm-builder" -version = "5.0.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ - "ansi_term", "build-helper", "cargo_metadata", + "console", "filetime", "parity-wasm", + "polkavm-linker", "sp-maybe-compressed-blob", "strum 0.24.1", "tempfile", - "toml 0.8.13", + "toml 0.8.10", "walkdir", "wasm-opt", ] @@ -15669,12 +9037,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" -[[package]] -name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - [[package]] name = "syn" version = "1.0.109" @@ -15688,9 +9050,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "11a6ae1e52eb25aab8f3fb9fca13be982a373b8f1157ca14b897a825ba4a2d35" dependencies = [ "proc-macro2", "quote", @@ -15730,120 +9092,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tanssi-node" -version = "0.7.0" -dependencies = [ - "async-io 1.13.0", - "async-trait", - "ccp-authorities-noting-inherent", - "clap", - "cumulus-client-cli", - "cumulus-client-collator", - "cumulus-client-consensus-aura", - "cumulus-client-consensus-common", - "cumulus-client-consensus-proposer", - "cumulus-client-network", - "cumulus-client-parachain-inherent", - "cumulus-client-pov-recovery", - "cumulus-client-service", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "dancebox-runtime", - "dc-orchestrator-chain-interface", - "dp-slot-duration-runtime-api", - "exit-future", - "flashbox-runtime", - "flume 0.10.14", - "frame-benchmarking", - "frame-benchmarking-cli", - "futures 0.3.30", - "jsonrpsee", - "log", - "manual-xcm-rpc", - "nimbus-consensus", - "nimbus-primitives", - "node-common", - "pallet-author-noting-runtime-api", - "pallet-collator-assignment-runtime-api", - "pallet-configuration", - "pallet-registrar-runtime-api", - "parity-scale-codec", - "polkadot-cli", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-service", - "sc-basic-authorship", - "sc-chain-spec", - "sc-cli", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-manual-seal", - "sc-executor", - "sc-network", - "sc-network-common", - "sc-network-sync", - "sc-offchain", - "sc-rpc", - "sc-service", - "sc-sysinfo", - "sc-telemetry", - "sc-tracing", - "sc-transaction-pool", - "sc-transaction-pool-api", - "serde", - "serde_json", - "services-payment-rpc", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-io", - "sp-keystore", - "sp-offchain", - "sp-panic-handler", - "sp-runtime", - "sp-session", - "sp-state-machine", - "sp-timestamp", - "sp-transaction-pool", - "stream-payment-rpc", - "substrate-build-script-utils", - "substrate-frame-rpc-system", - "substrate-prometheus-endpoint", - "tc-consensus", - "tokio", - "tokio-util", - "tp-author-noting-inherent", - "tp-container-chain-genesis-data", - "try-runtime-cli", -] - -[[package]] -name = "tanssi-relay-encoder" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "frame-system", - "frame-try-runtime", - "hex-literal 0.3.4", - "pallet-balances", - "parity-scale-codec", - "polkadot-runtime-parachains", - "rococo-runtime", - "rococo-runtime-constants", - "scale-info", - "sp-core", - "sp-runtime", - "sp-std", -] - [[package]] name = "tap" version = "1.0.1" @@ -15852,80 +9100,19 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" - -[[package]] -name = "tc-consensus" -version = "0.1.0" -dependencies = [ - "async-backing-primitives", - "async-trait", - "cumulus-client-collator", - "cumulus-client-consensus-aura", - "cumulus-client-consensus-common", - "cumulus-client-consensus-proposer", - "cumulus-client-parachain-inherent", - "cumulus-primitives-core", - "cumulus-relay-chain-interface", - "cumulus-test-relay-sproof-builder", - "dp-consensus", - "fc-rpc", - "futures 0.3.30", - "futures-timer", - "log", - "nimbus-consensus", - "nimbus-primitives", - "pallet-registrar-runtime-api", - "parity-scale-codec", - "parking_lot 0.12.2", - "polkadot-core-primitives", - "polkadot-node-primitives", - "polkadot-node-subsystem", - "polkadot-overseer", - "polkadot-parachain-primitives", - "polkadot-primitives", - "sc-block-builder", - "sc-client-api", - "sc-consensus", - "sc-consensus-aura", - "sc-consensus-manual-seal", - "sc-consensus-slots", - "sc-keystore", - "sc-network-test", - "sc-telemetry", - "sp-api", - "sp-application-crypto", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-inherents", - "sp-keyring", - "sp-keystore", - "sp-runtime", - "sp-state-machine", - "sp-timestamp", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "tokio", - "tokio-util", - "tracing", -] +checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", - "fastrand 2.1.0", - "rustix 0.38.34", + "fastrand", + "rustix 0.38.31", "windows-sys 0.52.0", ] @@ -15944,7 +9131,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ - "rustix 0.38.34", + "rustix 0.38.31", "windows-sys 0.48.0", ] @@ -15954,59 +9141,24 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" -[[package]] -name = "test-relay-sproof-builder" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/dancekit?branch=tanssi-polkadot-v1.6.0#ed1a0f0d7200bedab36f3b6294070c38502d8d87" -dependencies = [ - "cumulus-primitives-core", - "dp-collator-assignment", - "dp-core", - "frame-support", - "parity-scale-codec", - "sp-runtime", - "sp-state-machine", - "sp-trie", -] - [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] -[[package]] -name = "thiserror-core" -version = "1.0.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999" -dependencies = [ - "thiserror-core-impl", -] - -[[package]] -name = "thiserror-core-impl" -version = "1.0.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.65", -] - [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -16017,9 +9169,9 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ "cfg-if", "once_cell", @@ -16034,30 +9186,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "thrift" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b82ca8f46f95b3ce96081fe3dd89160fdea970c254bb72925255d1b62aae692e" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float", - "threadpool", -] - -[[package]] -name = "tikv-jemalloc-ctl" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" -dependencies = [ - "libc", - "paste", - "tikv-jemalloc-sys", -] - [[package]] name = "tikv-jemalloc-sys" version = "0.5.4+5.3.0-patched" @@ -16070,9 +9198,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa", @@ -16091,9 +9219,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ "num-conv", "time-core", @@ -16125,19 +9253,19 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", "libc", "mio", "num_cpus", - "parking_lot 0.12.2", - "pin-project-lite 0.2.14", + "parking_lot 0.12.1", + "pin-project-lite 0.2.13", "signal-hook-registry", - "socket2 0.5.7", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] @@ -16150,7 +9278,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -16170,36 +9298,46 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.12", + "rustls 0.21.10", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.3", + "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.13", "tokio", "tokio-util", ] [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", - "futures-util", - "hashbrown 0.14.5", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.13", "tokio", + "tracing", ] [[package]] @@ -16213,58 +9351,47 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.13" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.13", + "toml_edit 0.22.4", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.2.2", "toml_datetime", - "winnow 0.5.40", + "winnow", ] [[package]] name = "toml_edit" -version = "0.22.13" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.2.2", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.8", + "winnow", ] [[package]] @@ -16273,6 +9400,10 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite 0.2.13", "tower-layer", "tower-service", "tracing", @@ -16284,14 +9415,14 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.4.2", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.13", "tower-layer", "tower-service", ] @@ -16308,81 +9439,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" -[[package]] -name = "tp-author-noting-inherent" -version = "0.1.0" -dependencies = [ - "async-trait", - "cumulus-pallet-parachain-system", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-relay-chain-interface", - "dp-core", - "frame-support", - "futures 0.3.30", - "hex-literal 0.3.4", - "log", - "parity-scale-codec", - "polkadot-primitives", - "sc-client-api", - "scale-info", - "sp-api", - "sp-consensus-aura", - "sp-core", - "sp-inherents", - "sp-io", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-storage", - "sp-trie", - "test-relay-sproof-builder", -] - -[[package]] -name = "tp-container-chain-genesis-data" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "hex", - "hex-literal 0.3.4", - "log", - "parity-scale-codec", - "polkadot-primitives", - "scale-info", - "serde", - "serde_json", - "sp-core", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "tp-traits", -] - -[[package]] -name = "tp-maths" -version = "0.1.0" -dependencies = [ - "sp-core", - "sp-runtime", -] - -[[package]] -name = "tp-traits" -version = "0.1.0" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "impl-trait-for-tuples", - "parity-scale-codec", - "scale-info", - "serde", - "sp-runtime", - "sp-std", -] - [[package]] name = "tracing" version = "0.1.40" @@ -16390,7 +9446,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "log", - "pin-project-lite 0.2.14", + "pin-project-lite 0.2.13", "tracing-attributes", "tracing-core", ] @@ -16403,7 +9459,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -16427,33 +9483,21 @@ dependencies = [ ] [[package]] -name = "tracing-gum" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "coarsetime", - "polkadot-primitives", - "tracing", - "tracing-gum-proc-macro", -] - -[[package]] -name = "tracing-gum-proc-macro" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" dependencies = [ - "expander 2.1.0", - "proc-macro-crate 3.1.0", - "proc-macro2", - "quote", - "syn 2.0.65", + "log", + "once_cell", + "tracing-core", ] [[package]] name = "tracing-log" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", @@ -16479,7 +9523,7 @@ dependencies = [ "ansi_term", "chrono", "lazy_static", - "matchers", + "matchers 0.0.1", "parking_lot 0.11.2", "regex", "serde", @@ -16489,17 +9533,35 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.4", "tracing-serde", ] +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers 0.1.0", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + [[package]] name = "trait-schelling-game-shared" version = "0.1.0" dependencies = [ "frame-support", "parity-scale-codec", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] @@ -16508,7 +9570,7 @@ version = "0.1.0" dependencies = [ "frame-support", "parity-scale-codec", - "sp-std", + "sp-std 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", ] [[package]] @@ -16578,7 +9640,7 @@ dependencies = [ "ipconfig", "lazy_static", "lru-cache", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "resolv-conf", "smallvec", "thiserror", @@ -16595,8 +9657,8 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "try-runtime-cli" -version = "0.10.0-dev" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0#3c3d6fceb82372a3019b37117aa453d564b212de" dependencies = [ "async-trait", "clap", @@ -16613,8 +9675,8 @@ dependencies = [ "sp-consensus-aura", "sp-consensus-babe", "sp-core", - "sp-debug-derive", - "sp-externalities", + "sp-debug-derive 14.0.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", + "sp-externalities 0.25.0 (git+https://github.com/paritytech/polkadot-sdk.git?tag=polkadot-v1.9.0)", "sp-inherents", "sp-io", "sp-keystore", @@ -16631,9 +9693,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33a5f13f11071020bb12de7a16b925d2d58636175c20c11dc5f96cb64bb6c9b3" +checksum = "5b1e5645f2ee8025c2f1d75e1138f2dd034d74e6ba54620f3c569ba2a2a1ea06" dependencies = [ "dissimilar", "glob", @@ -16641,7 +9703,7 @@ dependencies = [ "serde_derive", "serde_json", "termcolor", - "toml 0.8.13", + "toml 0.8.10", ] [[package]] @@ -16707,17 +9769,11 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "unicode-xid" @@ -16725,12 +9781,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "universal-hash" version = "0.5.1" @@ -16776,12 +9826,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "utf8parse" version = "0.2.1" @@ -16828,7 +9872,7 @@ dependencies = [ "constcat", "digest 0.10.7", "rand", - "rand_chacha 0.3.1", + "rand_chacha", "rand_core 0.6.4", "sha2 0.10.8", "sha3", @@ -16836,17 +9880,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "waker-fn" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" - [[package]] name = "walkdir" -version = "2.5.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", @@ -16873,20 +9911,11 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasix" -version = "0.12.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fbb4ef9bbca0c1170e0b00dd28abc9e3b68669821600cad1caaed606583c6d" -dependencies = [ - "wasi 0.11.0+wasi-snapshot-preview1", -] - [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -16894,24 +9923,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -16921,9 +9950,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -16931,37 +9960,37 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wasm-instrument" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cd" +checksum = "2a47ecb37b9734d1085eaa5ae1a81e60801fd8c28d4cabdd8aedb982021918bc" dependencies = [ "parity-wasm", ] [[package]] name = "wasm-opt" -version = "0.116.1" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd87a4c135535ffed86123b6fb0f0a5a0bc89e50416c942c5f0662c645f679c" +checksum = "fc942673e7684671f0c5708fc18993569d184265fd5223bb51fc8e5b9b6cfd52" dependencies = [ "anyhow", "libc", @@ -17003,7 +10032,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" dependencies = [ - "futures 0.3.30", + "futures", "js-sys", "parking_lot 0.11.2", "pin-utils", @@ -17012,37 +10041,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wasmi" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" -dependencies = [ - "smallvec", - "spin 0.9.8", - "wasmi_arena", - "wasmi_core", - "wasmparser-nostd", -] - -[[package]] -name = "wasmi_arena" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" - -[[package]] -name = "wasmi_core" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" -dependencies = [ - "downcast-rs", - "libm", - "num-traits", - "paste", -] - [[package]] name = "wasmparser" version = "0.102.0" @@ -17053,15 +10051,6 @@ dependencies = [ "url", ] -[[package]] -name = "wasmparser-nostd" -version = "0.100.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" -dependencies = [ - "indexmap-nostd", -] - [[package]] name = "wasmtime" version = "8.0.1" @@ -17259,9 +10248,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -17273,7 +10262,7 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring 0.17.8", + "ring 0.17.7", "untrusted 0.9.0", ] @@ -17286,134 +10275,6 @@ dependencies = [ "webpki", ] -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - -[[package]] -name = "westend-runtime" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "binary-merkle-tree", - "bitvec", - "frame-benchmarking", - "frame-election-provider-support", - "frame-executive", - "frame-support", - "frame-system", - "frame-system-benchmarking", - "frame-system-rpc-runtime-api", - "frame-try-runtime", - "hex-literal 0.4.1", - "log", - "pallet-asset-rate", - "pallet-authority-discovery", - "pallet-authorship", - "pallet-babe", - "pallet-bags-list", - "pallet-balances", - "pallet-beefy", - "pallet-beefy-mmr", - "pallet-collective", - "pallet-conviction-voting", - "pallet-democracy", - "pallet-election-provider-multi-phase", - "pallet-election-provider-support-benchmarking", - "pallet-elections-phragmen", - "pallet-fast-unstake", - "pallet-grandpa", - "pallet-identity", - "pallet-im-online", - "pallet-indices", - "pallet-membership", - "pallet-message-queue", - "pallet-mmr", - "pallet-multisig", - "pallet-nomination-pools", - "pallet-nomination-pools-benchmarking", - "pallet-nomination-pools-runtime-api", - "pallet-offences", - "pallet-offences-benchmarking", - "pallet-preimage", - "pallet-proxy", - "pallet-recovery", - "pallet-referenda", - "pallet-root-testing", - "pallet-scheduler", - "pallet-session", - "pallet-session-benchmarking", - "pallet-society", - "pallet-staking", - "pallet-staking-reward-curve", - "pallet-staking-runtime-api", - "pallet-state-trie-migration", - "pallet-sudo", - "pallet-timestamp", - "pallet-transaction-payment", - "pallet-transaction-payment-rpc-runtime-api", - "pallet-treasury", - "pallet-utility", - "pallet-vesting", - "pallet-whitelist", - "pallet-xcm", - "pallet-xcm-benchmarks", - "parity-scale-codec", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-runtime-common", - "polkadot-runtime-parachains", - "rustc-hex", - "scale-info", - "serde", - "serde_derive", - "smallvec", - "sp-api", - "sp-application-crypto", - "sp-arithmetic", - "sp-authority-discovery", - "sp-block-builder", - "sp-consensus-babe", - "sp-consensus-beefy", - "sp-core", - "sp-genesis-builder", - "sp-inherents", - "sp-io", - "sp-mmr-primitives", - "sp-npos-elections", - "sp-offchain", - "sp-runtime", - "sp-session", - "sp-staking", - "sp-std", - "sp-storage", - "sp-transaction-pool", - "sp-version", - "staging-xcm", - "staging-xcm-builder", - "staging-xcm-executor", - "substrate-wasm-builder", - "westend-runtime-constants", -] - -[[package]] -name = "westend-runtime-constants" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "frame-support", - "polkadot-primitives", - "polkadot-runtime-common", - "smallvec", - "sp-core", - "sp-runtime", - "sp-weights", - "staging-xcm", - "staging-xcm-builder", -] - [[package]] name = "which" version = "4.4.2" @@ -17423,14 +10284,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.34", + "rustix 0.38.31", ] [[package]] name = "wide" -version = "0.7.20" +version = "0.7.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e005a4cc35784183a9e39cb22e9a9c46353ef6a7f113fd8d36ddc58c15ef3c" +checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c" dependencies = [ "bytemuck", "safe_arch", @@ -17438,9 +10299,9 @@ dependencies = [ [[package]] name = "widestring" -version = "1.1.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" [[package]] name = "winapi" @@ -17460,11 +10321,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ - "windows-sys 0.52.0", + "winapi", ] [[package]] @@ -17498,7 +10359,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.0", ] [[package]] @@ -17525,7 +10386,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.0", ] [[package]] @@ -17560,18 +10421,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", - "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", ] [[package]] @@ -17588,9 +10448,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" @@ -17606,9 +10466,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" @@ -17624,15 +10484,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" @@ -17648,9 +10502,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" @@ -17666,9 +10520,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" @@ -17684,9 +10538,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" @@ -17702,24 +10556,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" - -[[package]] -name = "winnow" -version = "0.5.40" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.6.8" +version = "0.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" dependencies = [ "memchr", ] @@ -17784,70 +10629,16 @@ dependencies = [ "time", ] -[[package]] -name = "xcm-emulator" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "cumulus-pallet-parachain-system", - "cumulus-pallet-xcmp-queue", - "cumulus-primitives-core", - "cumulus-primitives-parachain-inherent", - "cumulus-test-relay-sproof-builder", - "frame-support", - "frame-system", - "impl-trait-for-tuples", - "lazy_static", - "log", - "pallet-balances", - "pallet-message-queue", - "parachains-common", - "parity-scale-codec", - "paste", - "polkadot-parachain-primitives", - "polkadot-primitives", - "polkadot-runtime-parachains", - "sp-arithmetic", - "sp-consensus-aura", - "sp-consensus-slots", - "sp-core", - "sp-io", - "sp-runtime", - "sp-std", - "sp-tracing", - "staging-xcm", - "staging-xcm-executor", -] - -[[package]] -name = "xcm-primitives" -version = "0.1.0" -source = "git+https://github.com/moondance-labs/moonkit?branch=tanssi-polkadot-v1.6.0#070849b6c2d71401ef5de9bdb0f4af17ed998244" -dependencies = [ - "sp-runtime", -] - -[[package]] -name = "xcm-procedural" -version = "1.0.0" -source = "git+https://github.com/moondance-labs/polkadot-sdk?branch=tanssi-polkadot-v1.6.0#7b16c9ecbe06c53affbbb32991875b0c1e5f59f6" -dependencies = [ - "Inflector", - "proc-macro2", - "quote", - "syn 2.0.65", -] - [[package]] name = "yamux" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" dependencies = [ - "futures 0.3.30", + "futures", "log", "nohash-hasher", - "parking_lot 0.12.2", + "parking_lot 0.12.1", "rand", "static_assertions", ] @@ -17869,22 +10660,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -17904,7 +10695,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.65", + "syn 2.0.57", ] [[package]] @@ -17947,9 +10738,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.9+zstd.1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index cbebc09..8f2305b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,15 @@ +[workspace.package] +authors = ["Substrate DevHub "] +edition = "2021" +repository = "https://github.com/substrate-developer-hub/substrate-node-template/" +license = "MIT-0" +homepage = "https://substrate.io" + [workspace] members = [ - "client/*", - "container-chains/nodes/*", - "container-chains/runtime-templates/*", - "node", - "pallets/*", - "custom-pallets/department-funding", + "node", + "pallets/template", + "custom-pallets/department-funding", "custom-pallets/positive-externality", "custom-pallets/profile-validation", "custom-pallets/project-tips", @@ -14,67 +18,43 @@ members = [ "custom-pallets/sortition-sum-game", "custom-pallets/spaces", "custom-pallets/support", - "pallets/collator-assignment/rpc/runtime-api", - "pallets/registrar/rpc/runtime-api", - "primitives/*", - "runtime/dancebox", - "runtime/flashbox", - "runtime/relay-encoder", + "runtime", ] resolver = "2" +[profile.release] +panic = "unwind" -[workspace.package] -authors = ["Moondance Labs"] -repository = "https://github.com/moondance-labs/tanssi" +[workspace.lints.rust] +suspicious_double_ref_op = { level = "allow", priority = 2 } [workspace.lints.clippy] -# Deny main lint groups -complexity = { level = "deny", priority = 1 } -correctness = { level = "deny", priority = 1 } -suspicious = { level = "deny", priority = 1 } - -# Add some additional lints -as_underscore = { level = "warn", priority = 1 } -cast_lossless = { level = "warn", priority = 1 } -cast_possible_wrap = { level = "warn", priority = 1 } -cast_precision_loss = { level = "warn", priority = 1 } -cast_sign_loss = { level = "warn", priority = 1 } -debug_assert_with_mut_call = { level = "warn", priority = 1 } -fn_to_numeric_cast_any = { level = "warn", priority = 1 } -invalid_upcast_comparisons = { level = "warn", priority = 1 } +all = { level = "allow", priority = 0 } +correctness = { level = "warn", priority = 1 } +complexity = { level = "warn", priority = 1 } +if-same-then-else = { level = "allow", priority = 2 } +zero-prefixed-literal = { level = "allow", priority = 2 } # 00_1000_000 +type_complexity = { level = "allow", priority = 2 } # raison d'etre +nonminimal-bool = { level = "allow", priority = 2 } # maybe +borrowed-box = { level = "allow", priority = 2 } # Reasonable to fix this one +too-many-arguments = { level = "allow", priority = 2 } # (Turning this on would lead to) +needless-lifetimes = { level = "allow", priority = 2 } # generated code +unnecessary_cast = { level = "allow", priority = 2 } # Types may change +identity-op = { level = "allow", priority = 2 } # One case where we do 0 + +useless_conversion = { level = "allow", priority = 2 } # Types may change +unit_arg = { level = "allow", priority = 2 } # stylistic +option-map-unit-fn = { level = "allow", priority = 2 } # stylistic +bind_instead_of_map = { level = "allow", priority = 2 } # stylistic +erasing_op = { level = "allow", priority = 2 } # E.g. 0 * DOLLARS +eq_op = { level = "allow", priority = 2 } # In tests we test equality. +while_immutable_condition = { level = "allow", priority = 2 } # false positives +needless_option_as_deref = { level = "allow", priority = 2 } # false positives +derivable_impls = { level = "allow", priority = 2 } # false positives +stable_sort_primitive = { level = "allow", priority = 2 } # prefer stable sort +extra-unused-type-parameters = { level = "allow", priority = 2 } # stylistic +default_constructed_unit_structs = { level = "allow", priority = 2 } # stylistic -# Allow annoying lints and false positives -erasing_op = { level = "allow", priority = 2 } -identity_op = { level = "allow", priority = 2 } -too-many-arguments = { level = "allow", priority = 2 } -type_complexity = { level = "allow", priority = 2 } - -[workspace.lints.rust] -unsafe-code = { level = "deny", priority = 1 } [workspace.dependencies] - -# Members -pallet-author-noting = { path = "pallets/author-noting", default-features = false } -pallet-author-noting-runtime-api = { path = "pallets/author-noting/rpc/runtime-api", default-features = false } -pallet-authority-assignment = { path = "pallets/authority-assignment", default-features = false } -pallet-authority-mapping = { path = "pallets/authority-mapping", default-features = false } -pallet-collator-assignment = { path = "pallets/collator-assignment", default-features = false } -pallet-collator-assignment-runtime-api = { path = "pallets/collator-assignment/rpc/runtime-api", default-features = false } -pallet-configuration = { path = "pallets/configuration", default-features = false } -pallet-data-preservers = { path = "pallets/data-preservers", default-features = false } -pallet-inflation-rewards = { path = "pallets/inflation-rewards", default-features = false } -pallet-initializer = { path = "pallets/initializer", default-features = false } -pallet-invulnerables = { path = "pallets/invulnerables", default-features = false } -pallet-pooled-staking = { path = "pallets/pooled-staking", default-features = false } -pallet-registrar = { path = "pallets/registrar", default-features = false } -pallet-registrar-runtime-api = { path = "pallets/registrar/rpc/runtime-api", default-features = false } -pallet-services-payment = { path = "pallets/services-payment", default-features = false } -pallet-services-payment-runtime-api = { path = "pallets/services-payment/rpc/runtime-api", default-features = false } -pallet-stream-payment = { path = "pallets/stream-payment", default-features = false } -pallet-stream-payment-runtime-api = { path = "pallets/stream-payment/rpc/runtime-api", default-features = false } -pallet-xcm-core-buyer = { path = "pallets/xcm-core-buyer", default-features = false } - ## New start ## New pallets @@ -109,303 +89,30 @@ department-funding-rpc = { path = "custom-pallets/department-funding/department- ## Additional dependancies -sp-arithmetic = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } +sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } strum = { version = "0.26.2", default-features = false, features = ["derive"] } num-integer = { default-features = false, version = "0.1.44" } -frame-support-test = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-npos-elections = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } +frame-support-test = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +sp-npos-elections = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} +log = { version = "0.4.17", default-features = false } ## New end - -container-chain-template-frontier-runtime = { path = "container-chains/runtime-templates/frontier", default-features = false } -container-chain-template-simple-runtime = { path = "container-chains/runtime-templates/simple", default-features = false } - -dancebox-runtime = { path = "runtime/dancebox", default-features = false } -flashbox-runtime = { path = "runtime/flashbox", default-features = false } -manual-xcm-rpc = { path = "client/manual-xcm" } -node-common = { path = "client/node-common" } -runtime-common = { path = "runtime/common", default-features = false } -services-payment-rpc = { path = "client/services-payment" } -stream-payment-rpc = { path = "client/stream-payment" } -tanssi-relay-encoder = { path = "runtime/relay-encoder", default-features = false } -tc-consensus = { path = "client/consensus" } -tp-author-noting-inherent = { path = "primitives/author-noting-inherent", default-features = false } -tp-container-chain-genesis-data = { path = "primitives/container-chain-genesis-data", default-features = false } -tp-fungibles-ext = { path = "primitives/fungibles-ext", default-features = false } -tp-maths = { path = "primitives/maths", default-features = false } -tp-traits = { path = "primitives/traits", default-features = false } - -# Dancekit (wasm) -ccp-authorities-noting-inherent = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -ccp-xcm = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -dp-chain-state-snapshot = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -dp-collator-assignment = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -dp-consensus = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -dp-impl-tanssi-pallets-config = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -dp-slot-duration-runtime-api = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -dp-core = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-cc-authorities-noting = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-xcm-executor-utils = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -test-relay-sproof-builder = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Dancekit (client) -dc-orchestrator-chain-interface = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0" } -dc-orchestrator-chain-rpc-interface = { git = "https://github.com/moondance-labs/dancekit", branch = "tanssi-polkadot-v1.6.0" } - -# Moonkit (wasm) -async-backing-primitives = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -nimbus-consensus = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0" } -nimbus-primitives = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-async-backing = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-author-inherent = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-balances-erc20 = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-batch = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-call-permit = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-xcm-utils = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompileset-assets-erc20 = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-foreign-asset-creator = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-maintenance-mode = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-migrations = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-relay-storage-roots = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } -xcm-primitives = { git = "https://github.com/moondance-labs/moonkit", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Substrate (wasm) -frame-benchmarking = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -frame-executive = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -frame-support = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "4.0.0-dev", default-features = false } -frame-system = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "4.0.0-dev", default-features = false } -frame-system-benchmarking = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -frame-try-runtime = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-asset-rate = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-assets = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-balances = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-identity = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-message-queue = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-multisig = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-proxy = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-root-testing = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-session = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-staking = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-sudo = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-timestamp = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-transaction-payment = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-treasury = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-tx-pause = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-utility = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -parity-scale-codec = { version = "3.0.0", default-features = false, features = [ +parity-scale-codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = [ "derive", - "max-encoded-len", ] } -scale-info = { version = "2.10.0", default-features = false } -sp-api = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-application-crypto = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-block-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-consensus = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-consensus-aura = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-consensus-babe = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-consensus-beefy = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-consensus-slots = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-core = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "21.0.0", default-features = false } -sp-debug-derive = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-inherents = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-io = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "23.0.0", default-features = false } -sp-keyring = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "24.0.0", default-features = false } -sp-offchain = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-panic-handler = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-runtime = { git = "https://github.com/moondance-labs/polkadot-sdk.git", branch = "tanssi-polkadot-v1.6.0", version = "24.0.0", default-features = false } -sp-session = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-state-machine = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-std = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-transaction-pool = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-trie = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-version = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Substrate (client) -frame-benchmarking-cli = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -pallet-transaction-payment-rpc = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sc-basic-authorship = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-block-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-chain-spec = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-cli = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-client-api = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-consensus = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-consensus-aura = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-consensus-grandpa = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-consensus-manual-seal = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-consensus-slots = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-executor = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-keystore = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-network = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-network-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-network-sync = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-network-test = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-network-transactions = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-offchain = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-rpc = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-service = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-sysinfo = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-telemetry = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-tracing = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-transaction-pool = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-transaction-pool-api = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sc-utils = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sp-blockchain = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -sp-externalities = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-genesis-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-keystore = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-staking = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-storage = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -sp-timestamp = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -substrate-build-script-utils = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -substrate-frame-rpc-system = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -substrate-prometheus-endpoint = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -substrate-test-runtime = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -substrate-test-runtime-client = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -substrate-wasm-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -try-runtime-cli = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } - -# Polkadot (wasm) -pallet-xcm = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-xcm-benchmarks = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-core-primitives = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-node-primitives = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-parachain-primitives = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-runtime-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-runtime-parachains = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -rococo-runtime = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -rococo-runtime-constants = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -staging-xcm = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -staging-xcm-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -staging-xcm-executor = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -westend-runtime = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -westend-runtime-constants = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Polkadot (client) -polkadot-cli = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -polkadot-node-subsystem = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -polkadot-overseer = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -polkadot-primitives = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -polkadot-service = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } - -# Cumulus (wasm) -cumulus-pallet-dmp-queue = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-pallet-parachain-system = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false, features = [ - "parameterized-consensus-hook", -] } -cumulus-pallet-session-benchmarking = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-pallet-xcm = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-pallet-xcmp-queue = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-primitives-core = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-primitives-timestamp = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-primitives-utility = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -parachain-info = { package = "staging-parachain-info", git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -parachains-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Cumulus (client) -assets-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -cumulus-client-cli = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-collator = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-consensus-aura = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-consensus-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-consensus-proposer = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-network = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-parachain-inherent = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-pov-recovery = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-client-service = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-primitives-parachain-inherent = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-relay-chain-interface = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -cumulus-test-relay-sproof-builder = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } -emulated-integration-tests-common = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0" } -xcm-emulator = { git = "https://github.com/moondance-labs/polkadot-sdk", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Frontier (wasm) -fp-account = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fp-evm = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fp-rpc = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fp-self-contained = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-base-fee = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-ethereum = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-chain-id = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -pallet-hotfix-sufficients = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -precompile-utils = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# Frontier (client) -fc-api = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-cli = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-consensus = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-db = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-mapping-sync = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-rpc = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", features = [ - "rpc-binary-search-estimate", -] } -fc-rpc-core = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } -fc-storage = { git = "https://github.com/moondance-labs/frontier", branch = "tanssi-polkadot-v1.6.0", default-features = false } - -# General (wasm) -bounded-collections = { version = "0.1.8", default-features = false } -hex-literal = { version = "0.3.4" } -impl-trait-for-tuples = "0.2.2" -impls = "1.0.3" -log = { version = "0.4.17", default-features = false } -num_enum = { version = "0.7.1", default-features = false } -rand_chacha = { version = "0.3.1", default-features = false } -serde = { version = "1.0.152", default-features = false } -smallvec = "1.10.0" -tap = "1.0.1" - -# General (client) -async-io = "1.3" -async-trait = "0.1" -clap = { version = "4.1.6", default-features = false, features = ["derive"] } -core_extensions = "1.5.3" -exit-future = { version = "0.2.0" } -flume = "0.10.9" -futures = { version = "0.3.1" } -futures-timer = "3.0.1" -hex = { version = "0.4.3", default-features = false } -jsonrpsee = { version = "0.16.2", features = [ - "client-core", - "server", - "macros", +scale-info = { version = "2.10.0", default-features = false, features = [ + "derive", ] } -num-traits = "0.2.8" -parking_lot = "0.12.1" -paste = "1.0.14" -rand = { version = "0.8.5", default-features = false, features = ["std_rng"] } -serde_json = { version = "1.0.96", default-features = false } -similar-asserts = "1.1.0" -tempfile = "3.1.0" -thiserror = { version = "1.0.40" } -tokio = { version = "1.32.0", default-features = false } -tokio-util = { version = "0.7.10", default-features = false } -tracing = { version = "0.1.37", default-features = false } -tracing-subscriber = { version = "0.2.25", default-features = false } -url = "2.2.2" - -[patch.crates-io] -jsonrpsee = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-client-transport = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-core = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-http-client = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-proc-macros = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-server = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-types = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -jsonrpsee-ws-client = { git = "https://github.com/moondance-labs/jsonrpsee", branch = "tanssi-polkadot-v1.1.0" } -[profile.production] -codegen-units = 1 -inherits = "release" -lto = true - - -[profile.release] -opt-level = 3 -panic = "unwind" +# frame deps +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} +frame-support = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +sp-std = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} + +sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false} +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..01a4a54 --- /dev/null +++ b/Containerfile @@ -0,0 +1,31 @@ +FROM docker.io/library/ubuntu:22.04 + +# show backtraces +ENV RUST_BACKTRACE 1 + +# install tools and dependencies +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + ca-certificates && \ +# apt cleanup + apt-get autoremove -y && \ + apt-get clean && \ + find /var/lib/apt/lists/ -type f -not -name lock -delete; \ +# add user and link ~/.local/share/polkadot to /data + useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ + mkdir -p /data /polkadot/.local/share && \ + chown -R polkadot:polkadot /data && \ + ln -s /data /polkadot/.local/share/node-template + +USER polkadot + +# copy the compiled binary to the container +COPY --chown=polkadot:polkadot --chmod=774 node-template /usr/bin/node-template + +# check if executable works in this container +RUN /usr/bin/node-template --version + +# ws_port +EXPOSE 9930 9333 9944 30333 30334 + +CMD ["/usr/bin/node-template"] diff --git a/LICENSE b/LICENSE index f288702..53d1f3d 100644 --- a/LICENSE +++ b/LICENSE @@ -672,3 +672,4 @@ may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . + diff --git a/README.md b/README.md index 40f7caf..0c8dd45 100644 --- a/README.md +++ b/README.md @@ -20,173 +20,226 @@ https://shivarthu.reaudito.com/paper/Shivarthu_whitepaper.pdf https://github.com/reaudito/shivarthu/blob/main/docs/Shivarthu.md +# Substrate Node Template -

- -

+A fresh [Substrate](https://substrate.io/) node, ready for hacking :rocket: -**A permissionless appchain infrastructure protocol designed for swift and effortless deployment of application-specific blockchains** +A standalone version of this template is available for each release of Polkadot +in the [Substrate Developer Hub Parachain +Template](https://github.com/substrate-developer-hub/substrate-parachain-template/) +repository. The parachain template is generated directly at each Polkadot +release branch from the [Node Template in +Substrate](https://github.com/paritytech/polkadot-sdk/tree/master/substrate/bin/node-template) +upstream -🔎 For more about Tanssi Network, head to our [website](https://www.tanssi.network)
-📢 Follow our latest updates on [Twitter](https://twitter.com/TanssiNetwork)
-🤝 Engage with fellow developers on our [Discord server](https://discord.com/invite/kuyPhew2KB)
+It is usually best to use the stand-alone version to start a new project. All +bugs, suggestions, and feature requests should be made upstream in the +[Substrate](https://github.com/paritytech/polkadot-sdk/tree/master/substrate) +repository. -## Build the Tanssi Node +## Getting Started -To build Tanssi, you will need a proper Substrate development environment. +Depending on your operating system and Rust version, there might be additional +packages required to compile this template. Check the +[Install](https://docs.substrate.io/install/) instructions for your platform for +the most common dependencies. Alternatively, you can use one of the [alternative +installation](#alternatives-installations) options. -If you need a refresher setting up your Substrate environment, see [Substrate's Getting Started Guide](https://substrate.dev/docs/en/knowledgebase/getting-started/). +### Build -```bash -# Fetch the code -git clone https://github.com/moondance-labs/tanssi -cd tanssi +Use the following command to build the node without launching it: -# Build the node (The first build will be long (~30min)) +```sh cargo build --release ``` -## Run tests +### Embedded Docs -Tanssi has Rust unit tests as well as typescript integration tests. These tests are run in CI, and can also be run locally. Tanssi tests (specially those in typescript) depend on sessions being shorter, so you probably want to compile the node first as: +After you build the project, you can use the following command to explore its +parameters and subcommands: -```bash -# Build the node with short session times -cargo build --features=fast-runtime --release +```sh +./target/release/node-template -h ``` -Then to run the tests: +You can generate and view the [Rust +Docs](https://doc.rust-lang.org/cargo/commands/cargo-doc.html) for this template +with this command: -```bash -# Run the Rust unit tests -cargo test --features=fast-runtime --release +```sh +cargo +nightly doc --open ``` -Typescript tests are run with [Moonwall](https://github.com/Moonsong-Labs/moonwall). To run these you will need to have pnpm installed: +### Single-Node Development Chain -```bash -# Install moonwall -sudo npm i -g pnpm +The following command starts a single-node development chain that doesn't +persist state: -# Install dependencies -pnpm i - -# Run manual seal orchestrator tests -pnpm moonwall test dev_tanssi - -# Run zombienet tests (with container-chains) -pnpm moonwall test zombie_tanssi -``` - -Moonwall lets you also run the testing environment wihtout performing any tests on it, as a method for you to manually test certain things: - -```bash -# Spin up single manual-seal orchestrator -pnpm moonwall run dev_tanssi - -# Spin up orchestrator and two container-chains with zombienet -pnpm moonwall run zombie_tanssi +```sh +./target/release/node-template --dev ``` -### Sealing options - -The command above will start the node in instant seal mode. It creates a block when a transaction arrives, similar to Ganache's auto-mine. You can also choose to author blocks at a regular interval, or control authoring manually through the RPC. - -```bash -# Author a block every 6 seconds. -./target/release/tanssi-node --dev --sealing 6000 +To purge the development chain's state, run the following command: -# Manually control the block authorship and finality -./target/release/tanssi-node --dev --sealing manual +```sh +./target/release/node-template purge-chain --dev ``` -### Prefunded Development Addresses - -Running Tanssi in development mode will pre-fund several well-known addresses that (mostly) These addresses are derived from -using the well known private key `bottom drive obey lake curtain smoke basket hold race lonely fit walk` and appending the account name as a hard derivation key to the seed above, e.g., `bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice`: - -``` -# Alice: -- Address: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - -# Bob: -- Address: 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty - -# Charlie: -- Address: 5FLSigC9HGRKVhB9FiEo4Y3koPsNmBmLJbpXg2mp1hXcS59Y - -# Dave: -- Address: 5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy - -# Eve: -- Address: 5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw - -# Ferdie: -- Address: 5CiPPseXPECbkjWCa6MnjNokrgYjMqmKndv2rSnekmSK2DjL +To start the development chain with detailed logging, run the following command: +```sh +RUST_BACKTRACE=1 ./target/release/node-template -ldebug --dev ``` -## Runtime Architecture - -The Tanssi Runtime is built using FRAME and consists of pallets from substrate, frontier, cumulus, and `pallets/`. - -From substrate: - -- _Balances_: Tracks token balances -- _Sudo_: Allows a privileged account to make arbitrary runtime changes - will be removed before - launch -- _Timestamp_: On-Chain notion of time -- _Transaction Payment_: Transaction payment (fee) management -- _Authorship_: A pallet where authorship information for orchestrator is stored -- _Invulnerables_: A pallet that selects invulnerable collators to be assigned to author in container-chains and orchestrator -- _Session_: A pallet that handles session-changes and keys -- _AuthorityMapping_: A pallet that handles a mapping between collator accounts and authority keys - -From cumulus: - -- _ParachainSystem_: A helper to perform relay-storage verifications and injection of cross-chain messages -- _ParachainInfo_: A place to store parachain-relevant constants like parachain id - -The following pallets are stored in `pallets/`. They are designed for Tanssi's specific requirements: - -- _Registrar_: A pallet that stores all registered container-chains -- _Configuration_: A pallet storing the current configuration from which several other components depend -- _CollatorAssignment_: A pallet implementing collator account to orchestrator/container-chain assignment -- _AuthorityAssignment_: A pallet implementing collator authority key to orchestrator/container-chain assignment -- _Initializer_: A pallet that handles everything that happens on a session-change -- _AuthorNoting_: A pallet that stores the latest author of each of the container-chains -When modifying the git repository for these dependencies, a tool called [diener](https://github.com/bkchr/diener) can be used to replace the git URL and branch for each reference in all `Cargo.toml` files with a single command. This alleviates a lot of the repetitive modifications necessary when changing dependency versions. +Development chains: -## Container-chain templates +- Maintain state in a `tmp` folder while the node is running. +- Use the **Alice** and **Bob** accounts as default validator authorities. +- Use the **Alice** account as the default `sudo` account. +- Are preconfigured with a genesis state (`/node/src/chain_spec.rs`) that + includes several prefunded development accounts. -Currently two templates are offered within this repository +To persist chain state between runs, specify a base path by running a command +similar to the following: +```sh +// Create a folder to use as the db base path +$ mkdir my-chain-state -- __Simple template__: Which ressembles the parachain-template node from cumulus and substrate, and only basic pallet like *pallet-balances*, *parachain-system* and basic configuration. +// Use of that folder to store the chain state +$ ./target/release/node-template --dev --base-path ./my-chain-state/ -- __Frontier template__: Which ressembles a moonbeam-alike chain, with all pallets necessary for evm and ethereum compatibility - -### Build container-chain nodes (full nodes only, not collators) -These nodes will only act as full nodes, but not as collators since these are offered by Tanssi: - -```bash -# Build the simple-template node -cargo build -p container-chain-simple-node --release -``` - -```bash -# Build the frontier-template node -cargo build -p container-chain-frontier-node --release +// Check the folder structure created inside the base path after running the chain +$ ls ./my-chain-state +chains +$ ls ./my-chain-state/chains/ +dev +$ ls ./my-chain-state/chains/dev +db keystore network ``` -## Run with Zombienet directly -You can directly use the zombieTanssi.json file and pass it to zombienet to spawn yourself the network. From the test directory you can do: - - -```bash -# Generates the latest specs for orchestrator and container-chains -npm run build-spec - -# Spawns Tanssi and container-chains with zombienet -/path/to/zombienet spawn -p native ./configs/zombieTanssi.json -``` \ No newline at end of file +### Connect with Polkadot-JS Apps Front-End + +After you start the node template locally, you can interact with it using the +hosted version of the [Polkadot/Substrate +Portal](https://polkadot.js.org/apps/#/explorer?rpc=ws://localhost:9944) +front-end by connecting to the local node endpoint. A hosted version is also +available on [IPFS (redirect) here](https://dotapps.io/) or [IPNS (direct) +here](ipns://dotapps.io/?rpc=ws%3A%2F%2F127.0.0.1%3A9944#/explorer). You can +also find the source code and instructions for hosting your own instance on the +[`polkadot-js/apps`](https://github.com/polkadot-js/apps) repository. + +### Multi-Node Local Testnet + +If you want to see the multi-node consensus algorithm in action, see [Simulate a +network](https://docs.substrate.io/tutorials/build-a-blockchain/simulate-network/). + +## Template Structure + +A Substrate project such as this consists of a number of components that are +spread across a few directories. + +### Node + +A blockchain node is an application that allows users to participate in a +blockchain network. Substrate-based blockchain nodes expose a number of +capabilities: + +- Networking: Substrate nodes use the [`libp2p`](https://libp2p.io/) networking + stack to allow the nodes in the network to communicate with one another. +- Consensus: Blockchains must have a way to come to + [consensus](https://docs.substrate.io/fundamentals/consensus/) on the state of + the network. Substrate makes it possible to supply custom consensus engines + and also ships with several consensus mechanisms that have been built on top + of [Web3 Foundation + research](https://research.web3.foundation/en/latest/polkadot/NPoS/index.html). +- RPC Server: A remote procedure call (RPC) server is used to interact with + Substrate nodes. + +There are several files in the `node` directory. Take special note of the +following: + +- [`chain_spec.rs`](./node/src/chain_spec.rs): A [chain + specification](https://docs.substrate.io/build/chain-spec/) is a source code + file that defines a Substrate chain's initial (genesis) state. Chain + specifications are useful for development and testing, and critical when + architecting the launch of a production chain. Take note of the + `development_config` and `testnet_genesis` functions,. These functions are + used to define the genesis state for the local development chain + configuration. These functions identify some [well-known + accounts](https://docs.substrate.io/reference/command-line-tools/subkey/) and + use them to configure the blockchain's initial state. +- [`service.rs`](./node/src/service.rs): This file defines the node + implementation. Take note of the libraries that this file imports and the + names of the functions it invokes. In particular, there are references to + consensus-related topics, such as the [block finalization and + forks](https://docs.substrate.io/fundamentals/consensus/#finalization-and-forks) + and other [consensus + mechanisms](https://docs.substrate.io/fundamentals/consensus/#default-consensus-models) + such as Aura for block authoring and GRANDPA for finality. + +### Runtime + +In Substrate, the terms "runtime" and "state transition function" are analogous. +Both terms refer to the core logic of the blockchain that is responsible for +validating blocks and executing the state changes they define. The Substrate +project in this repository uses +[FRAME](https://docs.substrate.io/learn/runtime-development/#frame) to construct +a blockchain runtime. FRAME allows runtime developers to declare domain-specific +logic in modules called "pallets". At the heart of FRAME is a helpful [macro +language](https://docs.substrate.io/reference/frame-macros/) that makes it easy +to create pallets and flexibly compose them to create blockchains that can +address [a variety of needs](https://substrate.io/ecosystem/projects/). + +Review the [FRAME runtime implementation](./runtime/src/lib.rs) included in this +template and note the following: + +- This file configures several pallets to include in the runtime. Each pallet + configuration is defined by a code block that begins with `impl +$PALLET_NAME::Config for Runtime`. +- The pallets are composed into a single runtime by way of the + [`construct_runtime!`](https://paritytech.github.io/substrate/master/frame_support/macro.construct_runtime.html) + macro, which is part of the [core FRAME pallet + library](https://docs.substrate.io/reference/frame-pallets/#system-pallets). + +### Pallets + +The runtime in this project is constructed using many FRAME pallets that ship +with [the Substrate +repository](https://github.com/paritytech/polkadot-sdk/tree/master/substrate/frame) and a +template pallet that is [defined in the +`pallets`](./pallets/template/src/lib.rs) directory. + +A FRAME pallet is comprised of a number of blockchain primitives, including: + +- Storage: FRAME defines a rich set of powerful [storage + abstractions](https://docs.substrate.io/build/runtime-storage/) that makes it + easy to use Substrate's efficient key-value database to manage the evolving + state of a blockchain. +- Dispatchables: FRAME pallets define special types of functions that can be + invoked (dispatched) from outside of the runtime in order to update its state. +- Events: Substrate uses + [events](https://docs.substrate.io/build/events-and-errors/) to notify users + of significant state changes. +- Errors: When a dispatchable fails, it returns an error. + +Each pallet has its own `Config` trait which serves as a configuration interface +to generically define the types and parameters it depends on. + +## Alternatives Installations + +Instead of installing dependencies and building this source directly, consider +the following alternatives. + +### Nix + +Install [nix](https://nixos.org/) and +[nix-direnv](https://github.com/nix-community/nix-direnv) for a fully +plug-and-play experience for setting up the development environment. To get all +the correct dependencies, activate direnv `direnv allow`. + +### Docker + +Please follow the [Substrate Docker instructions +here](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/docker/README.md) to +build the Docker container with the Substrate Node Template binary. diff --git a/benchmarking/frame-weight-pallet-template.hbs b/benchmarking/frame-weight-pallet-template.hbs deleted file mode 100644 index e79b4bf..0000000 --- a/benchmarking/frame-weight-pallet-template.hbs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -{{header}} -//! Autogenerated weights for {{pallet}} -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} -//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` -//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` -//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` -//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} - -// Executed Command: -{{#each args as |arg|}} -// {{arg}} -{{/each}} - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for {{pallet}}. -pub trait WeightInfo { - {{#each benchmarks as |benchmark|}} - fn {{benchmark.name~}} - ( - {{~#each benchmark.components as |c| ~}} - {{c.name}}: u32, {{/each~}} - ) -> Weight; - {{/each}} -} - -/// Weights for {{pallet}} using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -{{#if (eq pallet "frame_system")}} -impl WeightInfo for SubstrateWeight { -{{else}} -impl WeightInfo for SubstrateWeight { -{{/if}} - {{#each benchmarks as |benchmark|}} - {{#each benchmark.comments as |comment|}} - /// {{comment}} - {{/each}} - {{#each benchmark.component_ranges as |range|}} - /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. - {{/each}} - fn {{benchmark.name~}} - ( - {{~#each benchmark.components as |c| ~}} - {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} - ) -> Weight { - // Proof Size summary in bytes: - // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. - Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) - {{#each benchmark.component_weight as |cw|}} - // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) - {{/each}} - {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) - {{/if}} - {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) - {{/each}} - {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) - {{/if}} - {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) - {{/each}} - {{#each benchmark.component_calculated_proof_size as |cp|}} - .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) - {{/each}} - } - {{/each}} -} - -// For backwards compatibility and tests -impl WeightInfo for () { - {{#each benchmarks as |benchmark|}} - {{#each benchmark.comments as |comment|}} - /// {{comment}} - {{/each}} - {{#each benchmark.component_ranges as |range|}} - /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. - {{/each}} - fn {{benchmark.name~}} - ( - {{~#each benchmark.components as |c| ~}} - {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} - ) -> Weight { - // Proof Size summary in bytes: - // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. - Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) - {{#each benchmark.component_weight as |cw|}} - // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) - {{/each}} - {{#if (ne benchmark.base_reads "0")}} - .saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}}_u64)) - {{/if}} - {{#each benchmark.component_reads as |cr|}} - .saturating_add(RocksDbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) - {{/each}} - {{#if (ne benchmark.base_writes "0")}} - .saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}}_u64)) - {{/if}} - {{#each benchmark.component_writes as |cw|}} - .saturating_add(RocksDbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) - {{/each}} - {{#each benchmark.component_calculated_proof_size as |cp|}} - .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) - {{/each}} - } - {{/each}} -} diff --git a/benchmarking/frame-weight-runtime-template-xcm.hbs b/benchmarking/frame-weight-runtime-template-xcm.hbs deleted file mode 100644 index 86b4350..0000000 --- a/benchmarking/frame-weight-runtime-template-xcm.hbs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -{{header}} -//! Autogenerated weights for {{pallet}} -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} -//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` -//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` -//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` -//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} - -// Executed Command: -{{#each args as |arg|}} -// {{arg}} -{{/each}} - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for {{pallet}} using the Substrate node and recommended hardware. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - {{#each benchmarks as |benchmark|}} - {{#each benchmark.comments as |comment|}} - /// {{comment}} - {{/each}} - {{#each benchmark.component_ranges as |range|}} - /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. - {{/each}} - pub(crate) fn {{benchmark.name~}} - ( - {{~#each benchmark.components as |c| ~}} - {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} - ) -> Weight { - // Proof Size summary in bytes: - // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. - Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) - {{#each benchmark.component_weight as |cw|}} - // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) - {{/each}} - {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) - {{/if}} - {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) - {{/each}} - {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) - {{/if}} - {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) - {{/each}} - {{#each benchmark.component_calculated_proof_size as |cp|}} - .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) - {{/each}} - } - {{/each}} -} \ No newline at end of file diff --git a/benchmarking/frame-weight-runtime-template.hbs b/benchmarking/frame-weight-runtime-template.hbs deleted file mode 100644 index dbc3f8b..0000000 --- a/benchmarking/frame-weight-runtime-template.hbs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -{{header}} -//! Autogenerated weights for {{pallet}} -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} -//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: `{{cmd.repeat}}`, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` -//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}` -//! HOSTNAME: `{{hostname}}`, CPU: `{{cpuname}}` -//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} - -// Executed Command: -{{#each args as |arg|}} -// {{arg}} -{{/each}} - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for {{pallet}} using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl {{pallet}}::WeightInfo for SubstrateWeight { - {{#each benchmarks as |benchmark|}} - {{#each benchmark.comments as |comment|}} - /// {{comment}} - {{/each}} - {{#each benchmark.component_ranges as |range|}} - /// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`. - {{/each}} - fn {{benchmark.name~}} - ( - {{~#each benchmark.components as |c| ~}} - {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} - ) -> Weight { - // Proof Size summary in bytes: - // Measured: `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}` - // Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds. - Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}}) - {{#each benchmark.component_weight as |cw|}} - // Standard Error: {{underscore cw.error}} - .saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into())) - {{/each}} - {{#if (ne benchmark.base_reads "0")}} - .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64)) - {{/if}} - {{#each benchmark.component_reads as |cr|}} - .saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into()))) - {{/each}} - {{#if (ne benchmark.base_writes "0")}} - .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64)) - {{/if}} - {{#each benchmark.component_writes as |cw|}} - .saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into()))) - {{/each}} - {{#each benchmark.component_calculated_proof_size as |cp|}} - .saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into())) - {{/each}} - } - {{/each}} -} \ No newline at end of file diff --git a/client/consensus/Cargo.toml b/client/consensus/Cargo.toml deleted file mode 100644 index f1d92bd..0000000 --- a/client/consensus/Cargo.toml +++ /dev/null @@ -1,82 +0,0 @@ -[package] -name = "tc-consensus" -authors = { workspace = true } -description = "Client-side worker for Tanssi which unifies Aura and Nimbus" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[lints] -workspace = true - -[dependencies] -# Substrate deps -sc-client-api = { workspace = true } -sc-consensus = { workspace = true } -sc-consensus-aura = { workspace = true } -sc-consensus-manual-seal = { workspace = true } -sc-consensus-slots = { workspace = true } -sc-telemetry = { workspace = true } -sp-api = { workspace = true } -sp-application-crypto = { workspace = true, features = [ "full_crypto", "std" ] } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true } -sp-inherents = { workspace = true } -sp-keystore = { workspace = true } -sp-runtime = { workspace = true } -sp-state-machine = { workspace = true } -sp-timestamp = { workspace = true } -substrate-prometheus-endpoint = { workspace = true } - -# Own -dp-consensus = { workspace = true, features = [ "std" ] } -pallet-registrar-runtime-api = { workspace = true, features = [ "std" ] } - -# Cumulus dependencies -cumulus-client-collator = { workspace = true } -cumulus-client-consensus-aura = { workspace = true } -cumulus-client-consensus-common = { workspace = true } -cumulus-client-consensus-proposer = { workspace = true } -cumulus-client-parachain-inherent = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-relay-chain-interface = { workspace = true } - -# Polkadot -polkadot-node-primitives = { workspace = true } -polkadot-node-subsystem = { workspace = true } -polkadot-overseer = { workspace = true } -polkadot-primitives = { workspace = true } - -# Nimbus Dependencies -async-backing-primitives = { workspace = true } -nimbus-consensus = { workspace = true } -nimbus-primitives = { workspace = true, features = [ "std" ] } - -# Frontier Dependencies -fc-rpc = { workspace = true } - -# Other deps -async-trait = { workspace = true } -futures = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive" ] } -tokio = { workspace = true } -tokio-util = { workspace = true, features = [ "rt" ] } -tracing = { workspace = true } - -[dev-dependencies] -cumulus-test-relay-sproof-builder = { workspace = true } -futures-timer = { workspace = true } -parking_lot = { workspace = true } -polkadot-core-primitives = { workspace = true } -polkadot-parachain-primitives = { workspace = true } -sc-block-builder = { workspace = true } -sc-keystore = { workspace = true } -sc-network-test = { workspace = true } -sp-keyring = { workspace = true } -substrate-test-runtime-client = { workspace = true } -tempfile = { workspace = true } diff --git a/client/consensus/src/collators.rs b/client/consensus/src/collators.rs deleted file mode 100644 index f5ac64b..0000000 --- a/client/consensus/src/collators.rs +++ /dev/null @@ -1,458 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -pub mod basic; -pub mod lookahead; - -use { - crate::{find_pre_digest, AuthorityId, OrchestratorAuraWorkerAuxData}, - cumulus_client_collator::service::ServiceInterface as CollatorServiceInterface, - cumulus_client_consensus_common::ParachainCandidate, - cumulus_client_consensus_proposer::ProposerInterface, - cumulus_client_parachain_inherent::{ParachainInherentData, ParachainInherentDataProvider}, - cumulus_primitives_core::{ - relay_chain::Hash as PHash, DigestItem, ParachainBlockData, PersistedValidationData, - }, - cumulus_relay_chain_interface::RelayChainInterface, - futures::prelude::*, - nimbus_primitives::{CompatibleDigestItem as NimbusCompatibleDigestItem, NIMBUS_KEY_ID}, - parity_scale_codec::{Codec, Encode}, - polkadot_node_primitives::{Collation, MaybeCompressedPoV}, - polkadot_primitives::Id as ParaId, - sc_consensus::{BlockImport, BlockImportParams, ForkChoiceStrategy, StateAction}, - sp_application_crypto::{AppCrypto, AppPublic}, - sp_consensus::BlockOrigin, - sp_consensus_aura::{digests::CompatibleDigestItem, Slot}, - sp_core::crypto::{ByteArray, Pair}, - sp_inherents::{CreateInherentDataProviders, InherentData, InherentDataProvider}, - sp_keystore::{Keystore, KeystorePtr}, - sp_runtime::{ - generic::Digest, - traits::{Block as BlockT, HashingFor, Header as HeaderT, Member, Zero}, - }, - sp_state_machine::StorageChanges, - sp_timestamp::Timestamp, - std::{convert::TryFrom, error::Error, time::Duration}, -}; - -/// Parameters for instantiating a [`Collator`]. -pub struct Params { - /// A builder for inherent data builders. - pub create_inherent_data_providers: CIDP, - /// The block import handle. - pub block_import: BI, - /// An interface to the relay-chain client. - pub relay_client: RClient, - /// The keystore handle used for accessing parachain key material. - pub keystore: KeystorePtr, - /// The identifier of the parachain within the relay-chain. - pub para_id: ParaId, - /// The block proposer used for building blocks. - pub proposer: Proposer, - /// The collator service used for bundling proposals into collations and announcing - /// to the network. - pub collator_service: CS, -} - -/// A utility struct for writing collation logic that makes use of -/// Tanssi Aura entirely or in part. -pub struct Collator { - create_inherent_data_providers: CIDP, - block_import: BI, - relay_client: RClient, - keystore: KeystorePtr, - para_id: ParaId, - proposer: Proposer, - collator_service: CS, - _marker: std::marker::PhantomData<(Block, Box)>, -} - -impl Collator -where - Block: BlockT, - RClient: RelayChainInterface, - CIDP: CreateInherentDataProviders + 'static, - BI: BlockImport + Send + Sync + 'static, - Proposer: ProposerInterface, - CS: CollatorServiceInterface, - P: Pair + Send + Sync + 'static, - P::Public: AppPublic + Member, - P::Signature: TryFrom> + Member + Codec, -{ - /// Instantiate a new instance of the `Tanssi Aura` manager. - pub fn new(params: Params) -> Self { - Collator { - create_inherent_data_providers: params.create_inherent_data_providers, - block_import: params.block_import, - relay_client: params.relay_client, - keystore: params.keystore, - para_id: params.para_id, - proposer: params.proposer, - collator_service: params.collator_service, - _marker: std::marker::PhantomData, - } - } - - /// Explicitly creates the inherent data for parachain block authoring. - pub async fn create_inherent_data( - &self, - relay_parent: PHash, - validation_data: &PersistedValidationData, - parent_hash: Block::Hash, - _timestamp: impl Into>, - ) -> Result<(ParachainInherentData, InherentData), Box> { - let paras_inherent_data = ParachainInherentDataProvider::create_at( - relay_parent, - &self.relay_client, - validation_data, - self.para_id, - ) - .await; - - let paras_inherent_data = match paras_inherent_data { - Some(p) => p, - None => { - return Err( - format!("Could not create paras inherent data at {:?}", relay_parent).into(), - ) - } - }; - - let other_inherent_data = self - .create_inherent_data_providers - .create_inherent_data_providers(parent_hash, (relay_parent, validation_data.clone())) - .map_err(|e| e as Box) - .await? - .create_inherent_data() - .await - .map_err(Box::new)?; - - Ok((paras_inherent_data, other_inherent_data)) - } - - /// Propose, seal, and import a block, packaging it into a collation. - /// - /// Provide the slot to build at as well as any other necessary pre-digest logs, - /// the inherent data, and the proposal duration and PoV size limits. - /// - /// The Tanssi Aura pre-digest is set internally. - /// - /// This does not announce the collation to the parachain network or the relay chain. - #[allow(clippy::cast_precision_loss)] - pub async fn collate( - &mut self, - parent_header: &Block::Header, - slot_claim: &mut SlotClaim, - additional_pre_digest: impl Into>>, - inherent_data: (ParachainInherentData, InherentData), - proposal_duration: Duration, - max_pov_size: usize, - ) -> Result< - Option<(Collation, ParachainBlockData, Block::Hash)>, - Box, - > { - let mut digest = additional_pre_digest.into().unwrap_or_default(); - digest.append(&mut slot_claim.pre_digest); - - let maybe_proposal = self - .proposer - .propose( - parent_header, - &inherent_data.0, - inherent_data.1, - Digest { logs: digest }, - proposal_duration, - Some(max_pov_size), - ) - .await - .map_err(|e| Box::new(e) as Box)?; - - let proposal = match maybe_proposal { - None => return Ok(None), - Some(p) => p, - }; - - let sealed_importable = seal_tanssi::<_, P>( - proposal.block, - proposal.storage_changes, - &slot_claim.author_pub, - &self.keystore, - ) - .map_err(|e| e as Box)?; - - let post_hash = sealed_importable.post_hash(); - let block = Block::new( - sealed_importable.post_header(), - sealed_importable - .body - .as_ref() - .expect("body always created with this `propose` fn; qed") - .clone(), - ); - - self.block_import - .import_block(sealed_importable) - .map_err(|e| Box::new(e) as Box) - .await?; - - if let Some((collation, block_data)) = self.collator_service.build_collation( - parent_header, - post_hash, - ParachainCandidate { - block, - proof: proposal.proof, - }, - ) { - tracing::info!( - target: crate::LOG_TARGET, - "PoV size {{ header: {}kb, extrinsics: {}kb, storage_proof: {}kb }}", - block_data.header().encoded_size() as f64 / 1024f64, - block_data.extrinsics().encoded_size() as f64 / 1024f64, - block_data.storage_proof().encoded_size() as f64 / 1024f64, - ); - - if let MaybeCompressedPoV::Compressed(ref pov) = collation.proof_of_validity { - tracing::info!( - target: crate::LOG_TARGET, - "Compressed PoV size: {}kb", - pov.block_data.0.len() as f64 / 1024f64, - ); - } - - Ok(Some((collation, block_data, post_hash))) - } else { - Err( - Box::::from("Unable to produce collation") - as Box, - ) - } - } - - /// Get the underlying collator service. - pub fn collator_service(&self) -> &CS { - &self.collator_service - } -} - -fn pre_digest_data(slot: Slot, claim: P::Public) -> Vec -where - P::Public: Codec, - P::Signature: Codec, -{ - vec![ - >::aura_pre_digest(slot), - // We inject the nimbus digest as well. Crutial to be able to verify signatures - ::nimbus_pre_digest( - // TODO remove this unwrap through trait reqs - nimbus_primitives::NimbusId::from_slice(claim.as_ref()).unwrap(), - ), - ] -} - -#[derive(Debug)] -pub struct SlotClaim { - author_pub: Pub, - pre_digest: Vec, - slot: Slot, -} - -impl SlotClaim { - pub fn unchecked

(author_pub: Pub, slot: Slot) -> Self - where - P: Pair, - P::Public: Codec, - P::Signature: Codec, - { - SlotClaim { - author_pub: author_pub.clone(), - pre_digest: pre_digest_data::

(slot, author_pub), - slot, - } - } - - /// Get the author's public key. - pub fn author_pub(&self) -> &Pub { - &self.author_pub - } - - /// Get the pre-digest. - pub fn pre_digest(&self) -> &Vec { - &self.pre_digest - } - - /// Get the slot assigned to this claim. - pub fn slot(&self) -> Slot { - self.slot - } -} - -/// Attempt to claim a slot locally. -pub fn tanssi_claim_slot( - aux_data: OrchestratorAuraWorkerAuxData

, - chain_head: &B::Header, - slot: Slot, - force_authoring: bool, - keystore: &KeystorePtr, -) -> Result>, Box> -where - P: Pair + Send + Sync + 'static, - P::Public: Codec + std::fmt::Debug, - P::Signature: Codec, - B: BlockT, -{ - let author_pub = { - let res = claim_slot_inner::

(slot, &aux_data.authorities, keystore, force_authoring); - match res { - Some(p) => p, - None => return Ok(None), - } - }; - - if is_parathread_and_should_skip_slot::(&aux_data, chain_head, slot) { - return Ok(None); - } - - Ok(Some(SlotClaim::unchecked::

(author_pub, slot))) -} - -/// Returns true if this container chain is a parathread and the collator should skip this slot and not produce a block -pub fn is_parathread_and_should_skip_slot( - aux_data: &OrchestratorAuraWorkerAuxData

, - chain_head: &B::Header, - slot: Slot, -) -> bool -where - P: Pair + Send + Sync + 'static, - P::Public: Codec + std::fmt::Debug, - P::Signature: Codec, - B: BlockT, -{ - if slot.is_zero() { - // Always produce on slot 0 (for tests) - return false; - } - if let Some(min_slot_freq) = aux_data.min_slot_freq { - if let Ok(chain_head_slot) = find_pre_digest::(chain_head) { - let slot_diff = slot.saturating_sub(chain_head_slot); - - // TODO: this doesn't take into account force authoring. - // So a node with `force_authoring = true` will not propose a block for a parathread until the - // `min_slot_freq` has elapsed. - slot_diff < min_slot_freq - } else { - // In case of error always propose - false - } - } else { - // Not a parathread: always propose - false - } -} - -/// Attempt to claim a slot using a keystore. -pub fn claim_slot_inner

( - slot: Slot, - authorities: &Vec>, - keystore: &KeystorePtr, - force_authoring: bool, -) -> Option -where - P: Pair, - P::Public: Codec + std::fmt::Debug, - P::Signature: Codec, -{ - let expected_author = crate::slot_author::

(slot, authorities.as_slice()); - // if not running with force-authoring, just do the usual slot check - if !force_authoring { - expected_author.and_then(|p| { - if keystore.has_keys(&[(p.to_raw_vec(), NIMBUS_KEY_ID)]) { - Some(p.clone()) - } else { - None - } - }) - } - // if running with force-authoring, as long as you are in the authority set, - // propose - else { - authorities - .iter() - .find(|key| keystore.has_keys(&[(key.to_raw_vec(), NIMBUS_KEY_ID)])) - .cloned() - } -} - -/// Seal a block with a signature in the header. -pub fn seal_tanssi( - pre_sealed: B, - storage_changes: StorageChanges>, - author_pub: &P::Public, - keystore: &KeystorePtr, -) -> Result, Box> -where - P: Pair, - P::Signature: Codec + TryFrom>, - P::Public: AppPublic, -{ - let (pre_header, body) = pre_sealed.deconstruct(); - let pre_hash = pre_header.hash(); - let block_number = *pre_header.number(); - - // sign the pre-sealed hash of the block and then - // add it to a digest item. - let signature = Keystore::sign_with( - keystore, - as AppCrypto>::ID, - as AppCrypto>::CRYPTO_ID, - author_pub.as_slice(), - pre_hash.as_ref(), - ) - .map_err(|e| sp_consensus::Error::CannotSign(format!("{}. Key: {:?}", e, author_pub)))? - .ok_or_else(|| { - sp_consensus::Error::CannotSign(format!( - "Could not find key in keystore. Key: {:?}", - author_pub - )) - })?; - let signature = signature - .clone() - .try_into() - .map_err(|_| sp_consensus::Error::InvalidSignature(signature, author_pub.to_raw_vec()))?; - - let signature_digest_item = ::nimbus_seal(signature); - - // seal the block. - let block_import_params = { - let mut block_import_params = BlockImportParams::new(BlockOrigin::Own, pre_header); - block_import_params.post_digests.push(signature_digest_item); - block_import_params.body = Some(body.clone()); - block_import_params.state_action = - StateAction::ApplyChanges(sc_consensus::StorageChanges::Changes(storage_changes)); - block_import_params.fork_choice = Some(ForkChoiceStrategy::LongestChain); - block_import_params - }; - let post_hash = block_import_params.post_hash(); - - tracing::info!( - target: crate::LOG_TARGET, - "🔖 Pre-sealed block for proposal at {}. Hash now {:?}, previously {:?}.", - block_number, - post_hash, - pre_hash, - ); - - Ok(block_import_params) -} diff --git a/client/consensus/src/collators/basic.rs b/client/consensus/src/collators/basic.rs deleted file mode 100644 index 3f401d1..0000000 --- a/client/consensus/src/collators/basic.rs +++ /dev/null @@ -1,304 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::{ - collators as collator_util, consensus_orchestrator::RetrieveAuthoritiesFromOrchestrator, - OrchestratorAuraWorkerAuxData, - }, - cumulus_client_collator::{ - relay_chain_driven::CollationRequest, service::ServiceInterface as CollatorServiceInterface, - }, - cumulus_client_consensus_proposer::ProposerInterface, - cumulus_primitives_core::{ - relay_chain::{BlockId as RBlockId, Hash as PHash, OccupiedCoreAssumption}, - PersistedValidationData, - }, - cumulus_relay_chain_interface::RelayChainInterface, - futures::{channel::mpsc::Receiver, prelude::*}, - parity_scale_codec::{Codec, Decode}, - polkadot_node_primitives::CollationResult, - polkadot_overseer::Handle as OverseerHandle, - polkadot_primitives::{CollatorPair, Id as ParaId}, - sc_client_api::{backend::AuxStore, BlockBackend, BlockOf}, - sc_consensus::BlockImport, - sc_consensus_slots::InherentDataProviderExt, - sp_api::ProvideRuntimeApi, - sp_application_crypto::AppPublic, - sp_blockchain::HeaderBackend, - sp_consensus::SyncOracle, - sp_consensus_aura::SlotDuration, - sp_core::crypto::Pair, - sp_inherents::CreateInherentDataProviders, - sp_keystore::KeystorePtr, - sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member}, - std::{convert::TryFrom, sync::Arc, time::Duration}, -}; - -/// Parameters for [`run`]. -pub struct Params { - pub create_inherent_data_providers: CIDP, - pub get_orchestrator_aux_data: GOH, - pub block_import: BI, - pub para_client: Arc, - pub relay_client: RClient, - pub sync_oracle: SO, - pub keystore: KeystorePtr, - pub collator_key: CollatorPair, - pub para_id: ParaId, - pub overseer_handle: OverseerHandle, - pub slot_duration: SlotDuration, - pub relay_chain_slot_duration: Duration, - pub proposer: Proposer, - pub collator_service: CS, - pub authoring_duration: Duration, - pub force_authoring: bool, - pub collation_request_receiver: Option>, -} - -/// Run tanssi Aura consensus as a relay-chain-driven collator. -pub async fn run( - params: Params, -) where - Block: BlockT + Send, - Client: ProvideRuntimeApi - + BlockOf - + AuxStore - + HeaderBackend - + BlockBackend - + Send - + Sync - + 'static, - RClient: RelayChainInterface + Send + Clone + 'static, - CIDP: CreateInherentDataProviders - + Send - + 'static - + Clone, - CIDP::InherentDataProviders: Send + InherentDataProviderExt, - BI: BlockImport + Send + Sync + 'static, - SO: SyncOracle + Send + Sync + Clone + 'static, - Proposer: ProposerInterface + Send + Sync + 'static, - CS: CollatorServiceInterface + Send + Sync + 'static, - P: Pair + Sync + Send + 'static, - P::Public: AppPublic + Member + Codec, - P::Signature: TryFrom> + Member + Codec, - GOH: RetrieveAuthoritiesFromOrchestrator< - Block, - (PHash, PersistedValidationData), - OrchestratorAuraWorkerAuxData

, - > - + 'static - + Sync - + Send, -{ - let mut collation_requests = match params.collation_request_receiver { - Some(receiver) => receiver, - None => { - cumulus_client_collator::relay_chain_driven::init( - params.collator_key, - params.para_id, - params.overseer_handle, - ) - .await - } - }; - - let mut collator = { - let params = collator_util::Params { - create_inherent_data_providers: params.create_inherent_data_providers.clone(), - block_import: params.block_import, - relay_client: params.relay_client.clone(), - keystore: params.keystore.clone(), - para_id: params.para_id, - proposer: params.proposer, - collator_service: params.collator_service, - }; - - collator_util::Collator::::new(params) - }; - - let mut last_processed_slot = 0; - - while let Some(request) = collation_requests.next().await { - macro_rules! reject_with_error { - ($err:expr) => {{ - request.complete(None); - tracing::error!(target: crate::LOG_TARGET, err = ?{ $err }); - continue; - }}; - } - - macro_rules! try_request { - ($x:expr) => {{ - match $x { - Ok(x) => x, - Err(e) => reject_with_error!(e), - } - }}; - } - - let validation_data = request.persisted_validation_data(); - - let parent_header = try_request!(Block::Header::decode( - &mut &validation_data.parent_head.0[..] - )); - - let parent_hash = parent_header.hash(); - - // Evaluate whether we can build on top - // The requirement is that the parent_hash is the last included block in the relay - let can_build = can_build_upon_included::( - parent_hash, - &collator.relay_client, - params.para_id, - *request.relay_parent(), - ) - .await; - if !can_build { - continue; - } - - // Check whether we can build upon this block - if !collator - .collator_service() - .check_block_status(parent_hash, &parent_header) - { - continue; - } - - let relay_parent_header = match params - .relay_client - .header(RBlockId::hash(*request.relay_parent())) - .await - { - Err(e) => reject_with_error!(e), - Ok(None) => continue, // sanity: would be inconsistent to get `None` here - Ok(Some(h)) => h, - }; - - // Retrieve authorities that are able to produce the block - let authorities = match params - .get_orchestrator_aux_data - .retrieve_authorities_from_orchestrator( - parent_hash, - (relay_parent_header.hash(), validation_data.clone()), - ) - .await - { - Err(e) => reject_with_error!(e), - Ok(h) => h, - }; - - let inherent_providers = match params - .create_inherent_data_providers - .create_inherent_data_providers( - parent_hash, - (*request.relay_parent(), validation_data.clone()), - ) - .await - { - Err(e) => reject_with_error!(e), - Ok(h) => h, - }; - - let mut claim = match collator_util::tanssi_claim_slot::( - authorities, - &parent_header, - inherent_providers.slot(), - params.force_authoring, - ¶ms.keystore, - ) { - Ok(None) => continue, - Err(e) => reject_with_error!(e), - Ok(Some(h)) => h, - }; - - // With async backing this function will be called every relay chain block. - // - // Most parachains currently run with 12 seconds slots and thus, they would try to - // produce multiple blocks per slot which very likely would fail on chain. Thus, we have - // this "hack" to only produce on block per slot. - // - // With https://github.com/paritytech/polkadot-sdk/issues/3168 this implementation will be - // obsolete and also the underlying issue will be fixed. - if last_processed_slot >= *claim.slot() { - continue; - } - - let (parachain_inherent_data, other_inherent_data) = try_request!( - collator - .create_inherent_data(*request.relay_parent(), validation_data, parent_hash, None,) - .await - ); - - let maybe_collation = try_request!( - collator - .collate( - &parent_header, - &mut claim, - None, - (parachain_inherent_data, other_inherent_data), - params.authoring_duration, - // Set the block limit to 50% of the maximum PoV size. - // - // TODO: If we got benchmarking that includes the proof size, - // we should be able to use the maximum pov size. - (validation_data.max_pov_size / 2) as usize, - ) - .await - ); - - if let Some((collation, _, post_hash)) = maybe_collation { - let result_sender = Some(collator.collator_service().announce_with_barrier(post_hash)); - request.complete(Some(CollationResult { - collation, - result_sender, - })); - } else { - request.complete(None); - tracing::debug!(target: crate::LOG_TARGET, "No block proposal"); - } - last_processed_slot = *claim.slot(); - } -} - -// Checks whether we can build upon the last included block -// Essentially checks that the latest head we are trying to build -// is the one included in the relay -async fn can_build_upon_included( - parent_hash: Block::Hash, - relay_client: &RClient, - para_id: ParaId, - relay_parent: PHash, -) -> bool -where - RClient: RelayChainInterface + Send + Clone + 'static, -{ - let included_header = relay_client - .persisted_validation_data(relay_parent, para_id, OccupiedCoreAssumption::TimedOut) - .await; - - if let Ok(Some(included_header)) = included_header { - let decoded = Block::Header::decode(&mut &included_header.parent_head.0[..]).ok(); - if let Some(decoded_header) = decoded { - let included_hash = decoded_header.hash(); - if parent_hash == included_hash { - return true; - } - } - } - false -} diff --git a/client/consensus/src/collators/lookahead.rs b/client/consensus/src/collators/lookahead.rs deleted file mode 100644 index 611ff3b..0000000 --- a/client/consensus/src/collators/lookahead.rs +++ /dev/null @@ -1,543 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! A collator for Tanssi Aura that looks ahead of the most recently included parachain block -//! when determining what to build upon. -//! -//! This collator also builds additional blocks when the maximum backlog is not saturated. -//! The size of the backlog is determined by invoking a runtime API. If that runtime API -//! is not supported, this assumes a maximum backlog size of 1. -//! -//! This takes more advantage of asynchronous backing, though not complete advantage. -//! When the backlog is not saturated, this approach lets the backlog temporarily 'catch up' -//! with periods of higher throughput. When the backlog is saturated, we typically -//! fall back to the limited cadence of a single parachain block per relay-chain block. -//! -//! Despite this, the fact that there is a backlog at all allows us to spend more time -//! building the block, as there is some buffer before it can get posted to the relay-chain. -//! The main limitation is block propagation time - i.e. the new blocks created by an author -//! must be propagated to the next author before their turn. - -use { - crate::{ - collators::{self as collator_util, tanssi_claim_slot, SlotClaim}, - consensus_orchestrator::RetrieveAuthoritiesFromOrchestrator, - OrchestratorAuraWorkerAuxData, - }, - async_backing_primitives::UnincludedSegmentApi, - cumulus_client_collator::service::ServiceInterface as CollatorServiceInterface, - cumulus_client_consensus_common::{ - self as consensus_common, load_abridged_host_configuration, ParachainBlockImportMarker, - ParentSearchParams, - }, - cumulus_client_consensus_proposer::ProposerInterface, - cumulus_primitives_core::{relay_chain::Hash as PHash, PersistedValidationData}, - cumulus_relay_chain_interface::RelayChainInterface, - futures::{channel::oneshot, prelude::*}, - parity_scale_codec::{Codec, Encode}, - polkadot_node_primitives::SubmitCollationParams, - polkadot_node_subsystem::messages::{ - CollationGenerationMessage, RuntimeApiMessage, RuntimeApiRequest, - }, - polkadot_overseer::Handle as OverseerHandle, - polkadot_primitives::{CollatorPair, Id as ParaId, OccupiedCoreAssumption}, - sc_client_api::{backend::AuxStore, BlockBackend, BlockOf}, - sc_consensus::BlockImport, - sc_consensus_slots::InherentDataProviderExt, - sp_api::ProvideRuntimeApi, - sp_application_crypto::AppPublic, - sp_blockchain::HeaderBackend, - sp_consensus::SyncOracle, - sp_consensus_aura::{Slot, SlotDuration}, - sp_core::crypto::Pair, - sp_inherents::CreateInherentDataProviders, - sp_keystore::KeystorePtr, - sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member}, - std::{convert::TryFrom, error::Error, sync::Arc, time::Duration}, - tokio::select, - tokio_util::sync::CancellationToken, -}; - -/// Parameters for [`run`]. -pub struct Params { - pub create_inherent_data_providers: CIDP, - pub get_orchestrator_aux_data: GOH, - pub block_import: BI, - pub para_client: Arc, - pub para_backend: Arc, - pub relay_client: RClient, - pub code_hash_provider: CHP, - pub sync_oracle: SO, - pub keystore: KeystorePtr, - pub collator_key: CollatorPair, - pub para_id: ParaId, - pub overseer_handle: OverseerHandle, - pub slot_duration: SlotDuration, - pub relay_chain_slot_duration: Duration, - pub proposer: Proposer, - pub collator_service: CS, - pub authoring_duration: Duration, - pub force_authoring: bool, - pub cancellation_token: CancellationToken, -} - -/// Run async-backing-friendly for Tanssi Aura. -pub fn run( - mut params: Params, -) -> ( - impl Future + Send + 'static, - oneshot::Receiver<()>, -) -where - Block: BlockT, - Client: ProvideRuntimeApi - + BlockOf - + AuxStore - + HeaderBackend - + BlockBackend - + Send - + Sync - + 'static, - Client::Api: UnincludedSegmentApi, - Backend: sc_client_api::Backend + 'static, - RClient: RelayChainInterface + Clone + 'static, - CIDP: CreateInherentDataProviders - + Send - + 'static - + Clone, - CIDP::InherentDataProviders: Send + InherentDataProviderExt, - BI: BlockImport + ParachainBlockImportMarker + Send + Sync + 'static, - SO: SyncOracle + Send + Sync + Clone + 'static, - Proposer: ProposerInterface + Send + Sync + 'static, - CS: CollatorServiceInterface + Send + Sync + 'static, - CHP: consensus_common::ValidationCodeHashProvider + Send + 'static, - P: Pair + Sync + Send + 'static, - P::Public: AppPublic + Member + Codec, - P::Signature: TryFrom> + Member + Codec, - GOH: RetrieveAuthoritiesFromOrchestrator< - Block, - (PHash, PersistedValidationData), - OrchestratorAuraWorkerAuxData

, - > - + 'static - + Sync - + Send, -{ - // This is an arbitrary value which is likely guaranteed to exceed any reasonable - // limit, as it would correspond to 10 non-included blocks. - // - // Since we only search for parent blocks which have already been imported, - // we can guarantee that all imported blocks respect the unincluded segment - // rules specified by the parachain's runtime and thus will never be too deep. - const PARENT_SEARCH_DEPTH: usize = 10; - - let (exit_notification_sender, exit_notification_receiver) = oneshot::channel(); - - let aura_fut = async move { - cumulus_client_collator::initialize_collator_subsystems( - &mut params.overseer_handle, - params.collator_key, - params.para_id, - ) - .await; - - let mut import_notifications = match params.relay_client.import_notification_stream().await - { - Ok(s) => s, - Err(err) => { - tracing::error!( - target: crate::LOG_TARGET, - ?err, - "Failed to initialize consensus: no relay chain import notification stream" - ); - - return; - } - }; - - let mut collator = { - let params = collator_util::Params { - create_inherent_data_providers: params.create_inherent_data_providers.clone(), - block_import: params.block_import, - relay_client: params.relay_client.clone(), - keystore: params.keystore.clone(), - para_id: params.para_id, - proposer: params.proposer, - collator_service: params.collator_service, - }; - - collator_util::Collator::::new(params) - }; - - loop { - select! { - maybe_relay_parent_header = import_notifications.next() => { - if maybe_relay_parent_header.is_none() { - break; - } - - let relay_parent_header = maybe_relay_parent_header.expect("relay_parent_header must exists as we checked for None variant above; qed"); - let relay_parent = relay_parent_header.hash(); - - if !is_para_scheduled(relay_parent, params.para_id, &mut params.overseer_handle).await { - tracing::trace!( - target: crate::LOG_TARGET, - ?relay_parent, - ?params.para_id, - "Para is not scheduled on any core, skipping import notification", - ); - - continue; - } - - let max_pov_size = match params - .relay_client - .persisted_validation_data( - relay_parent, - params.para_id, - OccupiedCoreAssumption::Included, - ) - .await - { - Ok(None) => continue, - Ok(Some(pvd)) => pvd.max_pov_size, - Err(err) => { - tracing::error!(target: crate::LOG_TARGET, ?err, "Failed to gather information from relay-client"); - continue; - } - }; - - let parent_search_params = ParentSearchParams { - relay_parent, - para_id: params.para_id, - ancestry_lookback: max_ancestry_lookback(relay_parent, ¶ms.relay_client).await, - max_depth: PARENT_SEARCH_DEPTH, - ignore_alternative_branches: true, - }; - - let potential_parents = - cumulus_client_consensus_common::find_potential_parents::( - parent_search_params, - &*params.para_backend, - ¶ms.relay_client, - ) - .await; - - let mut potential_parents = match potential_parents { - Err(e) => { - tracing::error!( - target: crate::LOG_TARGET, - ?relay_parent, - err = ?e, - "Could not fetch potential parents to build upon" - ); - - continue; - } - Ok(x) => x, - }; - - let included_block = match potential_parents.iter().find(|x| x.depth == 0) { - None => continue, // also serves as an `is_empty` check. - Some(b) => b.hash, - }; - - let para_client = &*params.para_client; - let keystore = ¶ms.keystore; - let can_build_upon = |slot_now, block_hash, aux_data| { - can_build_upon::<_, _, P>( - slot_now, - aux_data, - block_hash, - included_block, - params.force_authoring, - para_client, - keystore, - ) - }; - - // Sort by depth, ascending, to choose the longest chain. - // - // If the longest chain has space, build upon that. Otherwise, don't - // build at all. - potential_parents.sort_by_key(|a| a.depth); - let initial_parent = match potential_parents.pop() { - None => continue, - Some(p) => p, - }; - - // Build in a loop until not allowed. Note that the authorities can change - // at any block, so we need to re-claim our slot every time. - let mut parent_hash = initial_parent.hash; - let mut parent_header = initial_parent.header; - let overseer_handle = &mut params.overseer_handle; - - // This needs to change to support elastic scaling, but for continuously - // scheduled chains this ensures that the backlog will grow steadily. - for n_built in 0..2 { - let validation_data = PersistedValidationData { - parent_head: parent_header.encode().into(), - relay_parent_number: *relay_parent_header.number(), - relay_parent_storage_root: *relay_parent_header.state_root(), - max_pov_size, - }; - - // Retrieve authorities that are able to produce the block - let aux_data = match params - .get_orchestrator_aux_data - .retrieve_authorities_from_orchestrator( - parent_hash, - (relay_parent_header.hash(), validation_data.clone()), - ) - .await - { - Err(e) => { - tracing::error!(target: crate::LOG_TARGET, ?e); - break; - } - Ok(h) => h, - }; - - let inherent_providers = match params - .create_inherent_data_providers - .create_inherent_data_providers( - parent_hash, - (relay_parent_header.hash(), validation_data.clone()), - ) - .await - { - Err(e) => { - tracing::error!(target: crate::LOG_TARGET, ?e); - break; - } - Ok(h) => h, - }; - - let mut slot_claim = match can_build_upon( - inherent_providers.slot(), - parent_header.clone(), - aux_data, - ) - .await - { - Ok(None) => break, - Err(e) => { - tracing::error!(target: crate::LOG_TARGET, ?e); - break; - } - Ok(Some(c)) => c, - }; - - tracing::debug!( - target: crate::LOG_TARGET, - ?relay_parent, - unincluded_segment_len = initial_parent.depth + n_built, - "Slot claimed. Building" - ); - - // Build and announce collations recursively until - // `can_build_upon` fails or building a collation fails. - let (parachain_inherent_data, other_inherent_data) = match collator - .create_inherent_data(relay_parent, &validation_data, parent_hash, None) - .await - { - Err(err) => { - tracing::error!(target: crate::LOG_TARGET, ?err); - break; - } - Ok(x) => x, - }; - - let validation_code_hash = match params.code_hash_provider.code_hash_at(parent_hash) - { - None => { - tracing::error!(target: crate::LOG_TARGET, ?parent_hash, "Could not fetch validation code hash"); - break; - } - Some(v) => v, - }; - - match collator - .collate( - &parent_header, - &mut slot_claim, - None, - (parachain_inherent_data, other_inherent_data), - params.authoring_duration, - // Set the block limit to 50% of the maximum PoV size. - // - // TODO: If we got benchmarking that includes the proof size, - // we should be able to use the maximum pov size. - (validation_data.max_pov_size / 2) as usize, - ) - .await - { - Ok(Some((collation, block_data, new_block_hash))) => { - // Here we are assuming that the import logic protects against equivocations - // and provides sybil-resistance, as it should. - collator - .collator_service() - .announce_block(new_block_hash, None); - - // Send a submit-collation message to the collation generation subsystem, - // which then distributes this to validators. - // - // Here we are assuming that the leaf is imported, as we've gotten an - // import notification. - overseer_handle - .send_msg( - CollationGenerationMessage::SubmitCollation( - SubmitCollationParams { - relay_parent, - collation, - parent_head: parent_header.encode().into(), - validation_code_hash, - result_sender: None, - }, - ), - "SubmitCollation", - ) - .await; - - parent_hash = new_block_hash; - parent_header = block_data.into_header(); - } - Ok(None) => { - tracing::debug!(target: crate::LOG_TARGET, "Lookahead collator: No block proposal"); - } - Err(err) => { - tracing::error!(target: crate::LOG_TARGET, ?err); - break; - } - } - } - }, - _ = params.cancellation_token.cancelled() => { - log::info!("Stopping lookahead collator"); - break; - } - } - } - - // Notifying that we have exited - let _ = exit_notification_sender.send(()); - }; - - (aura_fut, exit_notification_receiver) -} - -// Checks if we own the slot at the given block and whether there -// is space in the unincluded segment. -async fn can_build_upon( - slot: Slot, - aux_data: OrchestratorAuraWorkerAuxData

, - parent_header: Block::Header, - included_block: Block::Hash, - force_authoring: bool, - client: &Client, - keystore: &KeystorePtr, -) -> Result>, Box> -where - Client: ProvideRuntimeApi, - Client::Api: UnincludedSegmentApi, - P: Pair + Send + Sync + 'static, - P::Public: Codec + std::fmt::Debug, - P::Signature: Codec, -{ - let runtime_api = client.runtime_api(); - let slot_claim = - tanssi_claim_slot::(aux_data, &parent_header, slot, force_authoring, keystore); - - // Here we lean on the property that building on an empty unincluded segment must always - // be legal. Skipping the runtime API query here allows us to seamlessly run this - // collator against chains which have not yet upgraded their runtime. - if parent_header.hash() != included_block - && !runtime_api.can_build_upon(parent_header.hash(), included_block, slot)? - { - return Ok(None); - } - - slot_claim -} - -/// Reads allowed ancestry length parameter from the relay chain storage at the given relay parent. -/// -/// Falls back to 0 in case of an error. -async fn max_ancestry_lookback( - relay_parent: PHash, - relay_client: &impl RelayChainInterface, -) -> usize { - match load_abridged_host_configuration(relay_parent, relay_client).await { - Ok(Some(config)) => config.async_backing_params.allowed_ancestry_len as usize, - Ok(None) => { - tracing::error!( - target: crate::LOG_TARGET, - "Active config is missing in relay chain storage", - ); - 0 - } - Err(err) => { - tracing::error!( - target: crate::LOG_TARGET, - ?err, - ?relay_parent, - "Failed to read active config from relay chain client", - ); - 0 - } - } -} - -// Checks if there exists a scheduled core for the para at the provided relay parent. -// -// Falls back to `false` in case of an error. -async fn is_para_scheduled( - relay_parent: PHash, - para_id: ParaId, - overseer_handle: &mut OverseerHandle, -) -> bool { - let (tx, rx) = oneshot::channel(); - let request = RuntimeApiRequest::AvailabilityCores(tx); - overseer_handle - .send_msg( - RuntimeApiMessage::Request(relay_parent, request), - "LookaheadCollator", - ) - .await; - - let cores = match rx.await { - Ok(Ok(cores)) => cores, - Ok(Err(error)) => { - tracing::error!( - target: crate::LOG_TARGET, - ?error, - ?relay_parent, - "Failed to query availability cores runtime API", - ); - return false; - } - Err(oneshot::Canceled) => { - tracing::error!( - target: crate::LOG_TARGET, - ?relay_parent, - "Sender for availability cores runtime request dropped", - ); - return false; - } - }; - - cores.iter().any(|core| core.para_id() == Some(para_id)) -} diff --git a/client/consensus/src/consensus_orchestrator.rs b/client/consensus/src/consensus_orchestrator.rs deleted file mode 100644 index 04d9388..0000000 --- a/client/consensus/src/consensus_orchestrator.rs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! The Tanssi AuRa consensus algorithm for orchestrator chain and container chain collators. -//! -//! It calculates based on the orchestrator-state dictated authorities -//! It is identical to AuraWorker and AuraConsensus, except for the fact that we re-implement -//! the ParachainConsensus trait to access the orchestrator-dicated authorities, and further -//! it implements the TanssiWorker to TanssiOnSlot trait. This trait is -use { - crate::{AuthorityId, Pair, Slot}, - sp_runtime::traits::Block as BlockT, -}; - -#[async_trait::async_trait] -pub trait RetrieveAuthoritiesFromOrchestrator: Send + Sync { - /// Create the inherent data providers at the given `parent` block using the given `extra_args`. - async fn retrieve_authorities_from_orchestrator( - &self, - parent: Block::Hash, - extra_args: ExtraArgs, - ) -> Result>; -} - -#[async_trait::async_trait] -impl RetrieveAuthoritiesFromOrchestrator for F -where - Block: BlockT, - F: Fn(Block::Hash, ExtraArgs) -> Fut + Sync + Send, - Fut: std::future::Future>> - + Send - + 'static, - ExtraArgs: Send + 'static, -{ - async fn retrieve_authorities_from_orchestrator( - &self, - parent: Block::Hash, - extra_args: ExtraArgs, - ) -> Result> { - (*self)(parent, extra_args).await - } -} - -pub struct OrchestratorAuraWorkerAuxData

-where - P: Pair + Send + Sync + 'static, -{ - pub authorities: Vec>, - pub min_slot_freq: Option, -} diff --git a/client/consensus/src/lib.rs b/client/consensus/src/lib.rs deleted file mode 100644 index 7fed00d..0000000 --- a/client/consensus/src/lib.rs +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . -//! -//! The Tanssi AuRa consensus algorithm for orchestrator chain and container chain collators. -//! This file contains those functions that are used by consensus_orchestrator.rs structs and -//! and traits -//! slot_author returns the author based on the slot number and authorities provided (aura-like) -//! authorities retrieves the current set of authorities based on the first eligible key found in the keystore - -pub mod collators; -mod consensus_orchestrator; -mod manual_seal; - -#[cfg(test)] -mod tests; - -pub use { - crate::consensus_orchestrator::OrchestratorAuraWorkerAuxData, - cumulus_primitives_core::ParaId, - dp_consensus::TanssiAuthorityAssignmentApi, - manual_seal::{ - get_aura_id_from_seed, ContainerManualSealAuraConsensusDataProvider, - OrchestratorManualSealAuraConsensusDataProvider, - }, - pallet_registrar_runtime_api::OnDemandBlockProductionApi, - parity_scale_codec::{Decode, Encode}, - sc_consensus_aura::{ - find_pre_digest, slot_duration, AuraVerifier, BuildAuraWorkerParams, CompatibilityMode, - SlotProportion, - }, - sc_consensus_slots::InherentDataProviderExt, - sp_api::{Core, ProvideRuntimeApi}, - sp_application_crypto::AppPublic, - sp_consensus::Error as ConsensusError, - sp_core::crypto::{ByteArray, Public}, - sp_keystore::{Keystore, KeystorePtr}, - sp_runtime::traits::{Block as BlockT, Header as HeaderT, Member, NumberFor}, - std::hash::Hash, -}; - -use {sp_consensus_slots::Slot, sp_core::crypto::Pair}; - -const LOG_TARGET: &str = "aura::tanssi"; - -type AuthorityId

=

::Public; - -/// Get slot author for given block along with authorities. -pub(crate) fn slot_author( - slot: Slot, - authorities: &[AuthorityId

], -) -> Option<&AuthorityId

> { - if authorities.is_empty() { - return None; - } - - let idx = *slot % (authorities.len() as u64); - assert!( - idx <= usize::MAX as u64, - "It is impossible to have a vector with length beyond the address space; qed", - ); - - let current_author = authorities.get(idx as usize).expect( - "authorities not empty; index constrained to list length;this is a valid index; qed", - ); - - Some(current_author) -} - -/// Return the set of authorities assigned to the paraId where -/// the first eligible key from the keystore is collating -pub fn authorities( - client: &C, - parent_hash: &B::Hash, - para_id: ParaId, -) -> Option>> -where - P: Pair + Send + Sync, - P::Public: AppPublic + Hash + Member + Encode + Decode, - P::Signature: TryFrom> + Hash + Member + Encode + Decode, - B: BlockT, - C: ProvideRuntimeApi, - C::Api: TanssiAuthorityAssignmentApi>, - AuthorityId

: From<::Public>, -{ - let runtime_api = client.runtime_api(); - - let authorities = runtime_api - .para_id_authorities(*parent_hash, para_id) - .ok()?; - log::info!( - "Authorities found for para {:?} are {:?}", - para_id, - authorities - ); - authorities -} - -/// Return the set of authorities assigned to the paraId where -/// the first eligible key from the keystore is collating -pub fn min_slot_freq(client: &C, parent_hash: &B::Hash, para_id: ParaId) -> Option -where - P: Pair + Send + Sync + 'static, - P::Public: AppPublic + Hash + Member + Encode + Decode, - P::Signature: TryFrom> + Hash + Member + Encode + Decode, - B: BlockT, - C: ProvideRuntimeApi, - C::Api: OnDemandBlockProductionApi, - AuthorityId

: From<::Public>, -{ - let runtime_api = client.runtime_api(); - - let min_slot_freq = runtime_api.min_slot_freq(*parent_hash, para_id).ok()?; - log::debug!( - "min_slot_freq for para {:?} is {:?}", - para_id, - min_slot_freq - ); - min_slot_freq -} - -use nimbus_primitives::{NimbusId, NimbusPair, NIMBUS_KEY_ID}; -/// Grab the first eligible nimbus key from the keystore -/// If multiple keys are eligible this function still only returns one -/// and makes no guarantees which one as that depends on the keystore's iterator behavior. -/// This is the standard way of determining which key to author with. -/// It also returns its ParaId assignment -pub fn first_eligible_key( - client: &C, - parent_hash: &B::Hash, - keystore: KeystorePtr, -) -> Option<(AuthorityId

, ParaId)> -where - C: ProvideRuntimeApi, - C::Api: TanssiAuthorityAssignmentApi>, - P: Pair + Send + Sync, - P::Public: AppPublic + Hash + Member + Encode + Decode, - P::Signature: TryFrom> + Hash + Member + Encode + Decode, - AuthorityId

: From<::Public>, -{ - // Get all the available keys - let available_keys = Keystore::keys(&*keystore, NIMBUS_KEY_ID).ok()?; - - // Print a more helpful message than "not eligible" when there are no keys at all. - if available_keys.is_empty() { - log::warn!( - target: LOG_TARGET, - "🔏 No Nimbus keys available. We will not be able to author." - ); - return None; - } - - let runtime_api = client.runtime_api(); - - // Iterate keys until we find an eligible one, or run out of candidates. - // If we are skipping prediction, then we author with the first key we find. - // prediction skipping only really makes sense when there is a single key in the keystore. - available_keys.into_iter().find_map(|type_public_pair| { - if let Ok(nimbus_id) = NimbusId::from_slice(&type_public_pair) { - // If we dont find any parachain that we are assigned to, return none - - if let Ok(Some(para_id)) = - runtime_api.check_para_id_assignment(*parent_hash, nimbus_id.clone().into()) - { - log::debug!("Para id found for assignment {:?}", para_id); - - Some((nimbus_id.into(), para_id)) - } else { - log::debug!("No Para id found for assignment {:?}", nimbus_id); - - None - } - } else { - None - } - }) -} - -/// Grab the first eligible nimbus key from the keystore -/// If multiple keys are eligible this function still only returns one -/// and makes no guarantees which one as that depends on the keystore's iterator behavior. -/// This is the standard way of determining which key to author with. -/// It also returns its ParaId assignment -pub fn first_eligible_key_next_session( - client: &C, - parent_hash: &B::Hash, - keystore: KeystorePtr, -) -> Option<(AuthorityId

, ParaId)> -where - C: ProvideRuntimeApi, - C::Api: TanssiAuthorityAssignmentApi>, - P: Pair + Send + Sync, - P::Public: AppPublic + Hash + Member + Encode + Decode, - P::Signature: TryFrom> + Hash + Member + Encode + Decode, - AuthorityId

: From<::Public>, -{ - // Get all the available keys - let available_keys = Keystore::keys(&*keystore, NIMBUS_KEY_ID).ok()?; - - // Print a more helpful message than "not eligible" when there are no keys at all. - if available_keys.is_empty() { - log::warn!( - target: LOG_TARGET, - "🔏 No Nimbus keys available. We will not be able to author." - ); - return None; - } - - let runtime_api = client.runtime_api(); - - // Iterate keys until we find an eligible one, or run out of candidates. - // If we are skipping prediction, then we author with the first key we find. - // prediction skipping only really makes sense when there is a single key in the keystore. - available_keys.into_iter().find_map(|type_public_pair| { - if let Ok(nimbus_id) = NimbusId::from_slice(&type_public_pair) { - // If we dont find any parachain that we are assigned to, return none - - if let Ok(Some(para_id)) = runtime_api - .check_para_id_assignment_next_session(*parent_hash, nimbus_id.clone().into()) - { - log::debug!("Para id found for assignment {:?}", para_id); - - Some((nimbus_id.into(), para_id)) - } else { - log::debug!("No Para id found for assignment {:?}", nimbus_id); - - None - } - } else { - None - } - }) -} diff --git a/client/consensus/src/manual_seal.rs b/client/consensus/src/manual_seal.rs deleted file mode 100644 index 969a472..0000000 --- a/client/consensus/src/manual_seal.rs +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! The Manual Seal implementation for the OrchestratorAuraConsensus - -use { - cumulus_primitives_core::ParaId, - dp_consensus::TanssiAuthorityAssignmentApi, - nimbus_primitives::{ - CompatibleDigestItem as NimbusCompatibleDigestItem, NimbusId, NimbusPair, NimbusSignature, - }, - sc_client_api::{AuxStore, UsageProvider}, - sc_consensus::BlockImportParams, - sc_consensus_manual_seal::{ConsensusDataProvider, Error}, - sp_api::ProvideRuntimeApi, - sp_blockchain::{HeaderBackend, HeaderMetadata}, - sp_consensus_aura::{digests::CompatibleDigestItem, AuraApi, Slot, SlotDuration}, - sp_core::Pair, - sp_inherents::InherentData, - sp_keystore::KeystorePtr, - sp_runtime::{ - traits::{Block as BlockT, Header as HeaderT}, - Digest, DigestItem, - }, - sp_timestamp::TimestampInherentData, - std::{marker::PhantomData, sync::Arc}, -}; -/// Consensus data provider for Orchestrator Manual Seal Aura. -pub struct OrchestratorManualSealAuraConsensusDataProvider { - // slot duration - slot_duration: SlotDuration, - /// Shared reference to keystore - pub keystore: KeystorePtr, - - /// Shared reference to the client - pub client: Arc, - - /// ParaId of the orchestrator - pub orchestrator_para_id: ParaId, - - // phantom data for required generics - _phantom: PhantomData<(B, C, P)>, -} - -impl OrchestratorManualSealAuraConsensusDataProvider -where - B: BlockT, - C: AuxStore + ProvideRuntimeApi + UsageProvider, - C::Api: AuraApi, -{ - /// Creates a new instance of the [`AuraConsensusDataProvider`], requires that `client` - /// implements [`sp_consensus_aura::AuraApi`] - pub fn new(client: Arc, keystore: KeystorePtr, orchestrator_para_id: ParaId) -> Self { - let slot_duration = sc_consensus_aura::slot_duration(&*client) - .expect("slot_duration is always present; qed."); - - Self { - slot_duration, - keystore, - client, - orchestrator_para_id, - _phantom: PhantomData, - } - } -} -impl ConsensusDataProvider for OrchestratorManualSealAuraConsensusDataProvider -where - B: BlockT, - C: AuxStore - + HeaderBackend - + HeaderMetadata - + UsageProvider - + ProvideRuntimeApi, - C::Api: TanssiAuthorityAssignmentApi, - P: Send + Sync, -{ - type Proof = P; - - fn create_digest(&self, parent: &B::Header, inherents: &InherentData) -> Result { - let timestamp = inherents - .timestamp_inherent_data()? - .expect("Timestamp is always present; qed"); - - // we always calculate the new slot number based on the current time-stamp and the slot - // duration. - // TODO: we need to add the nimbus digest here - let slot = Slot::from_timestamp(timestamp, self.slot_duration); - let aura_digest_item = - >::aura_pre_digest(slot); - - // Fetch the authorities for the orchestrator chain - let authorities = self - .client - .runtime_api() - .para_id_authorities(parent.hash(), self.orchestrator_para_id) - .ok() - .ok_or(sp_consensus::Error::InvalidAuthoritiesSet)? - .unwrap_or_default(); - - let expected_author = crate::slot_author::(slot, authorities.as_ref()); - - // TODO: this should always be included, but breaks manual seal tests. We should modify - // once configuration on how manual seal changes - let digest = if let Some(author) = expected_author { - let nimbus_digest = - ::nimbus_pre_digest(author.clone()); - Digest { - logs: vec![aura_digest_item, nimbus_digest], - } - } else { - Digest { - logs: vec![aura_digest_item], - } - }; - Ok(digest) - } - - fn append_block_import( - &self, - _parent: &B::Header, - _params: &mut BlockImportParams, - _inherents: &InherentData, - _proof: Self::Proof, - ) -> Result<(), Error> { - Ok(()) - } -} - -/// Helper function to generate a crypto pair from seed -pub fn get_aura_id_from_seed(seed: &str) -> NimbusId { - sp_core::sr25519::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() - .into() -} - -/// Consensus data provider for Container Manual Seal Aura. -pub struct ContainerManualSealAuraConsensusDataProvider { - // slot duration - slot_duration: SlotDuration, - // Authorities from which the author should be calculated - pub authorities: Vec, - // phantom data for required generics - _phantom: PhantomData, -} - -impl ContainerManualSealAuraConsensusDataProvider -where - B: BlockT, -{ - /// Creates a new instance of the [`AuraConsensusDataProvider`], requires that `client` - /// implements [`sp_consensus_aura::AuraApi`] - pub fn new(slot_duration: SlotDuration, authorities: Vec) -> Self { - Self { - slot_duration, - authorities, - _phantom: PhantomData, - } - } -} -impl ConsensusDataProvider for ContainerManualSealAuraConsensusDataProvider -where - B: BlockT, -{ - type Proof = (); - - fn create_digest( - &self, - _parent: &B::Header, - inherents: &InherentData, - ) -> Result { - let timestamp = inherents - .timestamp_inherent_data()? - .expect("Timestamp is always present; qed"); - - // we always calculate the new slot number based on the current time-stamp and the slot - // duration. - // TODO: we need to add the nimbus digest here - let slot = Slot::from_timestamp(timestamp, self.slot_duration); - let aura_digest_item = - >::aura_pre_digest(slot); - - let alice_id = get_aura_id_from_seed("alice"); - let expected_author: Option = Some(alice_id); - - // TODO: this should always be included, but breaks manual seal tests. We should modify - // once configuration on how manual seal changes - let digest = if let Some(author) = expected_author { - let nimbus_digest = - ::nimbus_pre_digest(author); - Digest { - logs: vec![aura_digest_item, nimbus_digest], - } - } else { - Digest { - logs: vec![aura_digest_item], - } - }; - Ok(digest) - } - - fn append_block_import( - &self, - _parent: &B::Header, - _params: &mut BlockImportParams, - _inherents: &InherentData, - _proof: Self::Proof, - ) -> Result<(), Error> { - Ok(()) - } -} - -impl fc_rpc::pending::ConsensusDataProvider - for ContainerManualSealAuraConsensusDataProvider -where - B: BlockT, -{ - fn create_digest( - &self, - _parent: &B::Header, - inherents: &InherentData, - ) -> Result { - >::create_digest(self, _parent, inherents) - .map_err(|_| sp_inherents::Error::FatalErrorReported) - } -} diff --git a/client/consensus/src/tests.rs b/client/consensus/src/tests.rs deleted file mode 100644 index 025ecac..0000000 --- a/client/consensus/src/tests.rs +++ /dev/null @@ -1,674 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -#![allow(clippy::await_holding_lock)] -// This tests have been greatly influenced by -// https://github.com/paritytech/substrate/blob/master/client/consensus/aura/src/lib.rs#L832 -// Most of the items hereby added are intended to make it work with our current consensus mechanism -use { - crate::{ - collators::{tanssi_claim_slot, Collator, Params as CollatorParams}, - OrchestratorAuraWorkerAuxData, - }, - async_trait::async_trait, - cumulus_client_collator::service::CollatorService, - cumulus_client_consensus_proposer::Proposer as ConsensusProposer, - cumulus_primitives_core::{relay_chain::BlockId, CollationInfo, CollectCollationInfo, ParaId}, - cumulus_relay_chain_interface::{ - CommittedCandidateReceipt, OverseerHandle, RelayChainInterface, RelayChainResult, - StorageValue, - }, - cumulus_test_relay_sproof_builder::RelayStateSproofBuilder, - futures::prelude::*, - nimbus_primitives::{ - CompatibleDigestItem, NimbusId, NimbusPair, NIMBUS_ENGINE_ID, NIMBUS_KEY_ID, - }, - parity_scale_codec::Encode, - parking_lot::Mutex, - polkadot_core_primitives::{Header as PHeader, InboundDownwardMessage, InboundHrmpMessage}, - polkadot_parachain_primitives::primitives::HeadData, - polkadot_primitives::{ - Hash as PHash, OccupiedCoreAssumption, PersistedValidationData, ValidatorId, - }, - sc_block_builder::BlockBuilderBuilder, - sc_client_api::HeaderBackend, - sc_consensus::{BoxJustificationImport, ForkChoiceStrategy}, - sc_keystore::LocalKeystore, - sc_network_test::{Block as TestBlock, Header as TestHeader, *}, - sp_api::{ApiRef, ProvideRuntimeApi}, - sp_consensus::{EnableProofRecording, Environment, Proposal, Proposer}, - sp_consensus_aura::{inherents::InherentDataProvider, SlotDuration, AURA_ENGINE_ID}, - sp_consensus_slots::Slot, - sp_core::{ - crypto::{ByteArray, Pair}, - traits::SpawnNamed, - }, - sp_inherents::InherentData, - sp_keyring::sr25519::Keyring, - sp_keystore::{Keystore, KeystorePtr}, - sp_runtime::{ - traits::{Block as BlockT, Header as _}, - Digest, DigestItem, - }, - sp_timestamp::Timestamp, - std::{ - collections::{BTreeMap, BTreeSet}, - pin::Pin, - sync::Arc, - time::Duration, - }, - substrate_test_runtime_client::TestClient, -}; - -// Duration of slot time -const SLOT_DURATION_MS: u64 = 1000; - -type Error = sp_blockchain::Error; - -#[derive(Clone)] -struct DummyFactory(Arc); -// We are going to create API because we need this to test runtime apis -// We use the client normally, but for testing certain runtime-api calls, -// we basically mock the runtime-api calls -impl ProvideRuntimeApi for DummyFactory { - type Api = MockApi; - - fn runtime_api(&self) -> ApiRef<'_, Self::Api> { - MockApi.into() - } -} - -struct MockApi; - -// This is our MockAPi impl. We need these to test first_eligible_key -sp_api::mock_impl_runtime_apis! { - impl dp_consensus::TanssiAuthorityAssignmentApi for MockApi { - /// Return the current authorities assigned to a given paraId - fn para_id_authorities(para_id: ParaId) -> Option> { - // We always return Alice if paraId is 1000 - if para_id == 1000u32.into() { - Some(vec![Keyring::Alice.public().into()]) - } - else { - None - } - } - /// Return the paraId assigned to a given authority - fn check_para_id_assignment(authority: NimbusId) -> Option { - if authority == Keyring::Alice.public().into() { - Some(1000u32.into()) - } - else { - None - } - } - } - - impl CollectCollationInfo for MockApi { - fn collect_collation_info(_header: &::Header) -> CollationInfo { - CollationInfo { - upward_messages: Vec::new(), - horizontal_messages: Vec::new(), - new_validation_code: None, - processed_downward_messages: 0u32, - hrmp_watermark: 0u32, - head_data: HeadData(vec![1, 2, 3]) - } - } - - } -} - -#[derive(Clone)] -struct RelayChain; - -#[async_trait] -impl RelayChainInterface for RelayChain { - async fn validators(&self, _: PHash) -> RelayChainResult> { - unimplemented!("Not needed for test") - } - - async fn best_block_hash(&self) -> RelayChainResult { - unimplemented!("Not needed for test") - } - - async fn finalized_block_hash(&self) -> RelayChainResult { - unimplemented!("Not needed for test") - } - - async fn retrieve_dmq_contents( - &self, - _: ParaId, - _: PHash, - ) -> RelayChainResult> { - let downward_msg = InboundDownwardMessage { - sent_at: 10u32, - msg: vec![1u8, 2u8, 3u8], - }; - Ok(vec![downward_msg]) - } - - async fn retrieve_all_inbound_hrmp_channel_contents( - &self, - _: ParaId, - _: PHash, - ) -> RelayChainResult>> { - let mut tree = BTreeMap::new(); - let hrmp_msg = InboundHrmpMessage { - sent_at: 10u32, - data: vec![1u8, 2u8, 3u8], - }; - let para_id = ParaId::from(2000u32); - tree.insert(para_id, vec![hrmp_msg]); - Ok(tree) - } - - async fn persisted_validation_data( - &self, - _hash: PHash, - _: ParaId, - _assumption: OccupiedCoreAssumption, - ) -> RelayChainResult> { - unimplemented!("Not needed for test") - } - - async fn candidate_pending_availability( - &self, - _: PHash, - _: ParaId, - ) -> RelayChainResult> { - unimplemented!("Not needed for test") - } - - async fn session_index_for_child(&self, _: PHash) -> RelayChainResult { - Ok(0) - } - - async fn import_notification_stream( - &self, - ) -> RelayChainResult + Send>>> { - unimplemented!("Not needed for test") - } - - async fn finality_notification_stream( - &self, - ) -> RelayChainResult + Send>>> { - unimplemented!("Not needed for test") - } - - async fn is_major_syncing(&self) -> RelayChainResult { - Ok(false) - } - - fn overseer_handle(&self) -> RelayChainResult { - unimplemented!("Not needed for test") - } - - async fn get_storage_by_key( - &self, - _: PHash, - _: &[u8], - ) -> RelayChainResult> { - Ok(None) - } - - async fn prove_read( - &self, - _: PHash, - _: &Vec>, - ) -> RelayChainResult { - let mut tree = BTreeSet::new(); - tree.insert(vec![1u8, 2u8, 3u8]); - let proof = sc_client_api::StorageProof::new(tree); - Ok(proof) - } - - async fn wait_for_block(&self, _: PHash) -> RelayChainResult<()> { - Ok(()) - } - - async fn new_best_notification_stream( - &self, - ) -> RelayChainResult + Send>>> { - unimplemented!("Not needed for test") - } - - async fn header(&self, _block_id: BlockId) -> RelayChainResult> { - unimplemented!("Not needed for test") - } -} - -#[derive(Clone)] -struct DummySpawner; -impl SpawnNamed for DummySpawner { - fn spawn_blocking( - &self, - _name: &'static str, - _group: Option<&'static str>, - _future: futures::future::BoxFuture<'static, ()>, - ) { - } - - fn spawn( - &self, - _name: &'static str, - _group: Option<&'static str>, - _future: futures::future::BoxFuture<'static, ()>, - ) { - } -} - -struct DummyProposer(Arc); - -// This is going to be our block verifier -// It will mimic what the Nimbus verifier does, but again, Nimbus verifier is non-public -// It should substract the seal from logs and put it in post_logs -#[derive(Clone)] -pub struct SealExtractorVerfier { - finalized: bool, -} - -impl SealExtractorVerfier { - /// Create a new instance. - /// - /// Every verified block will use `finalized` for the `BlockImportParams`. - pub fn new(finalized: bool) -> Self { - Self { finalized } - } -} - -#[async_trait::async_trait] -impl sc_consensus::Verifier for SealExtractorVerfier { - async fn verify( - &mut self, - mut block: sc_consensus::BlockImportParams, - ) -> Result, String> { - if block.fork_choice.is_none() { - block.fork_choice = Some(ForkChoiceStrategy::LongestChain); - }; - //TODO: this could be done by making the nimbus verifier public (it is not) - - // Grab the seal digest. Assume it is last (since it is a seal after-all). - let seal = block - .header - .digest_mut() - .pop() - .ok_or("Block should have at least one digest on it")?; - - let signature = seal - .as_nimbus_seal() - .ok_or_else(|| String::from("HeaderUnsealed"))?; - - // Grab the author information from either the preruntime digest or the consensus digest - //TODO use the trait - let claimed_author = block - .header - .digest() - .logs - .iter() - .find_map(|digest| match *digest { - DigestItem::Consensus(id, ref author_id) if id == NIMBUS_ENGINE_ID => { - Some(author_id.clone()) - } - DigestItem::PreRuntime(id, ref author_id) if id == NIMBUS_ENGINE_ID => { - Some(author_id.clone()) - } - _ => None, - }) - .ok_or("Expected one consensus or pre-runtime digest that contains author id bytes")?; - - // Verify the signature - let valid_signature = NimbusPair::verify( - &signature, - block.header.hash(), - &NimbusId::from_slice(&claimed_author) - .map_err(|_| "Invalid Nimbus ID (wrong length)")?, - ); - - if !valid_signature { - return Err("Block signature invalid".into()); - } - block.post_digests.push(seal); - - block.finalized = self.finalized; - Ok(block) - } -} - -// The test Environment -impl Environment for DummyFactory { - type Proposer = DummyProposer; - type CreateProposer = future::Ready>; - type Error = Error; - - fn init(&mut self, _parent_header: &::Header) -> Self::CreateProposer { - future::ready(Ok(DummyProposer(self.0.clone()))) - } -} - -// how to propose the block by Dummy Proposer -impl Proposer for DummyProposer { - type Error = Error; - type Proposal = future::Ready, Error>>; - type ProofRecording = EnableProofRecording; - type Proof = sc_client_api::StorageProof; - - fn propose( - self, - _: InherentData, - digests: Digest, - _: Duration, - _: Option, - ) -> Self::Proposal { - let r = BlockBuilderBuilder::new(&*self.0) - .on_parent_block(self.0.chain_info().best_hash) - .fetch_parent_block_number(&*self.0) - .unwrap() - .with_inherent_digests(digests) - .build() - .unwrap() - .build(); - let (_relay_parent_storage_root, proof) = - RelayStateSproofBuilder::default().into_state_root_and_proof(); - - futures::future::ready(r.map(|b| Proposal { - block: b.block, - proof, - storage_changes: b.storage_changes, - })) - } -} - -type AuraPeer = Peer<(), PeersClient>; - -#[derive(Default)] -pub struct AuraTestNet { - peers: Vec, -} - -impl TestNetFactory for AuraTestNet { - type Verifier = SealExtractorVerfier; - type PeerData = (); - type BlockImport = PeersClient; - - fn make_block_import( - &self, - client: PeersClient, - ) -> ( - BlockImportAdapter, - Option>, - Self::PeerData, - ) { - ((client.as_block_import()), None, ()) - } - - fn make_verifier(&self, _client: PeersClient, _peer_data: &()) -> Self::Verifier { - SealExtractorVerfier::new(true) - } - - fn peer(&mut self, i: usize) -> &mut AuraPeer { - &mut self.peers[i] - } - - fn peers(&self) -> &Vec { - &self.peers - } - - fn peers_mut(&mut self) -> &mut Vec { - &mut self.peers - } - - fn mut_peers)>(&mut self, closure: F) { - closure(&mut self.peers); - } -} - -// Checks node slot claim. Again for different slots, different authorities -// should be able to claim -#[tokio::test] -async fn current_node_authority_should_claim_slot() { - let mut authorities: Vec = vec![ - Keyring::Alice.public().into(), - Keyring::Bob.public().into(), - Keyring::Charlie.public().into(), - ]; - - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); - let keystore = LocalKeystore::open(keystore_path.path(), None).expect("Creates keystore."); - - let public = keystore - .sr25519_generate_new(NIMBUS_KEY_ID, None) - .expect("Key should be created"); - authorities.push(public.into()); - - let keystore_ptr: KeystorePtr = keystore.into(); - let mut claimed_slots = vec![]; - - for slot in 0..8 { - let dummy_head = TestHeader { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: Default::default(), - }; - let aux_data = OrchestratorAuraWorkerAuxData { - authorities: authorities.clone(), - min_slot_freq: None, - }; - let claim = tanssi_claim_slot::( - aux_data, - &dummy_head, - slot.into(), - false, - &keystore_ptr, - ) - .unwrap(); - if claim.is_some() { - claimed_slots.push(slot); - } - } - - assert_eq!(claimed_slots, vec![3, 7]); -} - -#[tokio::test] -async fn claim_slot_respects_min_slot_freq() { - // There is only 1 authority, but it can only claim every 4 slots - let mut authorities: Vec = vec![]; - let min_slot_freq = 4; - - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); - let keystore = LocalKeystore::open(keystore_path.path(), None).expect("Creates keystore."); - - let public = keystore - .sr25519_generate_new(NIMBUS_KEY_ID, None) - .expect("Key should be created"); - authorities.push(public.into()); - - let keystore_ptr: KeystorePtr = keystore.into(); - - let mut claimed_slots = vec![]; - - for slot in 0..10 { - let parent_slot: u64 = claimed_slots.last().copied().unwrap_or_default(); - let parent_slot: Slot = parent_slot.into(); - let pre_digest = Digest { - logs: vec![ - DigestItem::PreRuntime(AURA_ENGINE_ID, parent_slot.encode()), - //DigestItem::PreRuntime(NIMBUS_ENGINE_ID, authority.encode()), - ], - }; - let head = TestHeader { - parent_hash: Default::default(), - // If we use number=0 aura ignores the digest - number: claimed_slots.len() as u64, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: pre_digest, - }; - let aux_data = OrchestratorAuraWorkerAuxData { - authorities: authorities.clone(), - min_slot_freq: Some(min_slot_freq.into()), - }; - let claim = tanssi_claim_slot::( - aux_data, - &head, - slot.into(), - false, - &keystore_ptr, - ) - .unwrap(); - if claim.is_some() { - claimed_slots.push(slot); - } - } - - assert_eq!(claimed_slots, vec![0, 4, 8]); -} - -#[tokio::test] -async fn collate_returns_correct_block() { - let net = AuraTestNet::new(4); - - let keystore_path = tempfile::tempdir().expect("Creates keystore path"); - let keystore = LocalKeystore::open(keystore_path.path(), None).expect("Creates keystore."); - let alice_public = keystore - .sr25519_generate_new(NIMBUS_KEY_ID, Some(&Keyring::Alice.to_seed())) - .expect("Key should be created"); - - // Copy of the keystore needed for tanssi_claim_slot() - let keystore_copy = LocalKeystore::open(keystore_path.path(), None).expect("Copies keystore."); - keystore_copy - .sr25519_generate_new(NIMBUS_KEY_ID, Some(&Keyring::Alice.to_seed())) - .expect("Key should be copied"); - - let net = Arc::new(Mutex::new(net)); - - let mut net = net.lock(); - let peer = net.peer(3); - let client = peer.client().as_client(); - let environ = DummyFactory(client.clone()); - let spawner = DummySpawner; - let relay_client = RelayChain; - - // Build the collator - let mut collator = { - let params = CollatorParams { - create_inherent_data_providers: |_, _| async { - let slot = InherentDataProvider::from_timestamp_and_slot_duration( - Timestamp::current(), - SlotDuration::from_millis(SLOT_DURATION_MS), - ); - - Ok((slot,)) - }, - block_import: client.clone(), - relay_client: relay_client.clone(), - keystore: keystore.into(), - para_id: 1000.into(), - proposer: ConsensusProposer::new(environ.clone()), - collator_service: CollatorService::new( - client.clone(), - Arc::new(spawner), - Arc::new(move |_, _| {}), - Arc::new(environ), - ), - }; - - Collator::::new(params) - }; - - let mut head = client.expect_header(client.info().genesis_hash).unwrap(); - - // Modify the state root of the genesis header for it to match - // the one inside propose() function - let (relay_parent_storage_root, _proof) = - RelayStateSproofBuilder::default().into_state_root_and_proof(); - head.state_root = relay_parent_storage_root; - - // First we create inherent data - let (parachain_inherent_data, other_inherent_data) = collator - .create_inherent_data( - Default::default(), - &Default::default(), - head.clone().hash(), - None, - ) - .await - .unwrap(); - - // Params for tanssi_claim_slot() - let slot = InherentDataProvider::from_timestamp_and_slot_duration( - Timestamp::current(), - SlotDuration::from_millis(SLOT_DURATION_MS), - ); - let keystore_ptr: KeystorePtr = keystore_copy.into(); - - let mut claim = tanssi_claim_slot::( - OrchestratorAuraWorkerAuxData { - authorities: vec![alice_public.into()], - min_slot_freq: None, - }, - &head, - *slot, - false, - &keystore_ptr, - ) - .unwrap() - .unwrap(); - - // At the end we call collate() function - let res = collator - .collate( - &head, - &mut claim, - None, - (parachain_inherent_data, other_inherent_data), - Duration::from_millis(500), - 3_500_000usize, - ) - .await - .unwrap() - .unwrap() - .1; - - // The returned block should be imported and we should be able to get its header by now. - assert!(client.header(res.header().hash()).unwrap().is_some()); -} - -// Tests authorities are correctly returned and eligibility is correctly calculated -// thanks to the mocked runtime-apis -#[tokio::test] -async fn authorities_runtime_api_tests() { - let net = AuraTestNet::new(4); - let net = Arc::new(Mutex::new(net)); - - let mut net = net.lock(); - let peer = net.peer(3); - let client = peer.client().as_client(); - let environ = DummyFactory(client); - - let default_hash = Default::default(); - - let authorities = crate::authorities::<_, _, nimbus_primitives::NimbusPair>( - &environ, - &default_hash, - 1000u32.into(), - ); - - assert_eq!(authorities, Some(vec![Keyring::Alice.public().into()])); -} diff --git a/client/manual-xcm/Cargo.toml b/client/manual-xcm/Cargo.toml deleted file mode 100644 index 9bea98c..0000000 --- a/client/manual-xcm/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "manual-xcm-rpc" -authors = { workspace = true } -edition = "2021" -license = "GPL-3.0-only" -repository = { workspace = true } -version = "0.1.0" - -[lints] -workspace = true - -[dependencies] -flume = { workspace = true } -futures = { workspace = true, features = [ "compat" ] } -hex-literal = { workspace = true } -jsonrpsee = { workspace = true, features = [ "macros", "server" ] } -parity-scale-codec = { workspace = true, features = [ "std" ] } -staging-xcm = { workspace = true } -tokio = { workspace = true, features = [ "sync", "time" ] } - -cumulus-primitives-core = { workspace = true, features = [ "std" ] } diff --git a/client/manual-xcm/src/lib.rs b/client/manual-xcm/src/lib.rs deleted file mode 100644 index b112773..0000000 --- a/client/manual-xcm/src/lib.rs +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . -use { - cumulus_primitives_core::{ParaId, XcmpMessageFormat}, - jsonrpsee::{core::RpcResult, proc_macros::rpc}, - parity_scale_codec::Encode, - staging_xcm::{latest::prelude::*, opaque::lts::Weight}, -}; - -const DEFAULT_PROOF_SIZE: u64 = 64 * 1024; - -/// This RPC interface is used to manually submit XCM messages that will be injected into a -/// parachain-enabled runtime. This allows testing XCM logic in a controlled way in integration -/// tests. -#[rpc(server)] -#[jsonrpsee::core::async_trait] -pub trait ManualXcmApi { - /// Inject a downward xcm message - A message that comes from the relay chain. - /// You may provide an arbitrary message, or if you provide an emtpy byte array, - /// Then a default message (DOT transfer down to ALITH) will be injected - #[method(name = "xcm_injectDownwardMessage")] - async fn inject_downward_message(&self, message: Vec) -> RpcResult<()>; - - /// Inject an HRMP message - A message that comes from a dedicated channel to a sibling - /// parachain. - /// - /// Cumulus Parachain System seems to have a constraint that at most one hrmp message will be - /// sent on a channel per block. At least that's what this comment implies: - /// https://github.com/paritytech/cumulus/blob/c308c01b/pallets/parachain-system/src/lib.rs#L204 - /// Neither this RPC, nor the mock inherent data provider make any attempt to enforce this - /// constraint. In fact, violating it may be useful for testing. - /// The method accepts a sending paraId and a bytearray representing an arbitrary message as - /// parameters. If you provide an emtpy byte array, then a default message representing a - /// transfer of the sending paraId's native token will be injected. - #[method(name = "xcm_injectHrmpMessage")] - async fn inject_hrmp_message(&self, sender: ParaId, message: Vec) -> RpcResult<()>; -} - -pub struct ManualXcm { - pub downward_message_channel: flume::Sender>, - pub hrmp_message_channel: flume::Sender<(ParaId, Vec)>, -} - -#[jsonrpsee::core::async_trait] -impl ManualXcmApiServer for ManualXcm { - async fn inject_downward_message(&self, msg: Vec) -> RpcResult<()> { - let downward_message_channel = self.downward_message_channel.clone(); - // If no message is supplied, inject a default one. - let msg = if msg.is_empty() { - staging_xcm::VersionedXcm::<()>::V3(Xcm(vec![ - ReserveAssetDeposited((Parent, 10000000000000u128).into()), - ClearOrigin, - BuyExecution { - fees: (Parent, 10000000000000u128).into(), - weight_limit: Limited(Weight::from_parts( - 4_000_000_000u64, - DEFAULT_PROOF_SIZE * 2, - )), - }, - DepositAsset { - assets: AllCounted(1).into(), - beneficiary: MultiLocation::new( - 0, - X1(AccountKey20 { - network: None, - key: hex_literal::hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"), - }), - ), - }, - ])) - .encode() - } else { - msg - }; - - // Push the message to the shared channel where it will be queued up - // to be injected in to an upcoming block. - downward_message_channel - .send_async(msg) - .await - .map_err(|err| internal_err(err.to_string()))?; - - Ok(()) - } - - async fn inject_hrmp_message(&self, sender: ParaId, msg: Vec) -> RpcResult<()> { - let hrmp_message_channel = self.hrmp_message_channel.clone(); - - // If no message is supplied, inject a default one. - let msg = if msg.is_empty() { - let mut mes = XcmpMessageFormat::ConcatenatedVersionedXcm.encode(); - mes.append( - &mut (staging_xcm::VersionedXcm::<()>::V3(Xcm(vec![ - ReserveAssetDeposited( - ((Parent, Parachain(sender.into())), 10000000000000u128).into(), - ), - ClearOrigin, - BuyExecution { - fees: ((Parent, Parachain(sender.into())), 10000000000000u128).into(), - weight_limit: Limited(Weight::from_parts( - 4_000_000_000u64, - DEFAULT_PROOF_SIZE, - )), - }, - DepositAsset { - assets: AllCounted(1).into(), - beneficiary: MultiLocation::new( - 0, - X1(AccountKey20 { - network: None, - key: hex_literal::hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac"), - }), - ), - }, - ])) - .encode()), - ); - mes - } else { - msg - }; - - // Push the message to the shared channel where it will be queued up - // to be injected in to an upcoming block. - hrmp_message_channel - .send_async((sender, msg)) - .await - .map_err(|err| internal_err(err.to_string()))?; - - Ok(()) - } -} - -// This bit cribbed from frontier. -pub fn internal_err>(message: T) -> jsonrpsee::core::Error { - jsonrpsee::core::Error::Call(jsonrpsee::types::error::CallError::Custom( - jsonrpsee::types::error::ErrorObject::borrowed( - jsonrpsee::types::error::INTERNAL_ERROR_CODE, - &message, - None, - ) - .into_owned(), - )) -} diff --git a/client/node-common/Cargo.toml b/client/node-common/Cargo.toml deleted file mode 100644 index 70aed71..0000000 --- a/client/node-common/Cargo.toml +++ /dev/null @@ -1,90 +0,0 @@ -[package] -name = "node-common" -authors = { workspace = true } -description = "Common code between various nodes" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[lints] -workspace = true - -[dependencies] -async-io = { workspace = true } -async-trait = { workspace = true } -clap = { workspace = true, features = [ "derive" ] } -core_extensions = { workspace = true, features = [ "type_identity" ] } -flume = { workspace = true } -futures = { workspace = true } -jsonrpsee = { workspace = true, features = [ "server" ] } -log = { workspace = true } -parity-scale-codec = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } - -# Local -tc-consensus = { workspace = true } - -# Nimbus -nimbus-consensus = { workspace = true } -nimbus-primitives = { workspace = true, features = [ "std" ] } - -# Substrate -frame-benchmarking = { workspace = true } -frame-benchmarking-cli = { workspace = true } -sc-basic-authorship = { workspace = true } -sc-chain-spec = { workspace = true } -sc-cli = { workspace = true } -sc-client-api = { workspace = true } -sc-consensus = { workspace = true } -sc-consensus-manual-seal = { workspace = true } -sc-consensus-slots = { workspace = true } -sc-executor = { workspace = true } -sc-network = { workspace = true } -sc-network-common = { workspace = true } -sc-network-sync = { workspace = true } -sc-network-transactions = { workspace = true } -sc-offchain = { workspace = true } -sc-rpc = { workspace = true } -sc-service = { workspace = true } -sc-sysinfo = { workspace = true } -sc-telemetry = { workspace = true } -sc-tracing = { workspace = true } -sc-transaction-pool = { workspace = true } -sc-transaction-pool-api = { workspace = true } -sc-utils = { workspace = true } -sp-api = { workspace = true, features = [ "std" ] } -sp-application-crypto = { workspace = true, features = [ "full_crypto", "std" ] } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-core = { workspace = true, features = [ "std" ] } -sp-inherents = { workspace = true, features = [ "std" ] } -sp-io = { workspace = true, features = [ "std" ] } -sp-keystore = { workspace = true, features = [ "std" ] } -sp-offchain = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } -sp-session = { workspace = true, features = [ "std" ] } -sp-timestamp = { workspace = true, features = [ "std" ] } - -sp-transaction-pool = { workspace = true } -substrate-frame-rpc-system = { workspace = true } -substrate-prometheus-endpoint = { workspace = true } -try-runtime-cli = { workspace = true, optional = true } - -# Polkadot -polkadot-cli = { workspace = true } -polkadot-primitives = { workspace = true } -polkadot-service = { workspace = true } - -# Cumulus -cumulus-client-cli = { workspace = true } -cumulus-client-collator = { workspace = true } -cumulus-client-consensus-aura = { workspace = true } -cumulus-client-consensus-common = { workspace = true } -cumulus-client-consensus-proposer = { workspace = true } -cumulus-client-network = { workspace = true } -cumulus-client-service = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-primitives-parachain-inherent = { workspace = true } -cumulus-relay-chain-interface = { workspace = true } diff --git a/client/node-common/src/command.rs b/client/node-common/src/command.rs deleted file mode 100644 index fda80d5..0000000 --- a/client/node-common/src/command.rs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - parity_scale_codec::Encode, - sc_chain_spec::ChainSpec, - sp_runtime::{ - traits::{Block as BlockT, Hash as HashT, Header as HeaderT, Zero}, - StateVersion, - }, -}; - -/// Generate the genesis block from a given ChainSpec. -pub fn generate_genesis_block( - chain_spec: &dyn ChainSpec, - genesis_state_version: StateVersion, -) -> Result { - let storage = chain_spec.build_storage()?; - - let child_roots = storage.children_default.iter().map(|(sk, child_content)| { - let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( - child_content.data.clone().into_iter().collect(), - genesis_state_version, - ); - (sk.clone(), state_root.encode()) - }); - let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( - storage.top.clone().into_iter().chain(child_roots).collect(), - genesis_state_version, - ); - - let extrinsics_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( - Vec::new(), - genesis_state_version, - ); - - Ok(Block::new( - <::Header as HeaderT>::new( - Zero::zero(), - extrinsics_root, - state_root, - Default::default(), - Default::default(), - ), - Default::default(), - )) -} diff --git a/client/node-common/src/lib.rs b/client/node-common/src/lib.rs deleted file mode 100644 index 36a704b..0000000 --- a/client/node-common/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -pub mod service; - -pub mod command; diff --git a/client/node-common/src/service.rs b/client/node-common/src/service.rs deleted file mode 100644 index 4d599a1..0000000 --- a/client/node-common/src/service.rs +++ /dev/null @@ -1,939 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - async_io::Timer, - core::time::Duration, - core_extensions::TypeIdentity, - cumulus_client_cli::CollatorOptions, - cumulus_client_consensus_common::ParachainConsensus, - cumulus_client_service::{ - build_relay_chain_interface, CollatorSybilResistance, StartFullNodeParams, - }, - cumulus_primitives_core::ParaId, - cumulus_relay_chain_interface::RelayChainInterface, - frame_benchmarking_cli::SUBSTRATE_REFERENCE_HARDWARE, - futures::{channel::mpsc, FutureExt, Stream, StreamExt}, - jsonrpsee::RpcModule, - polkadot_primitives::CollatorPair, - sc_client_api::Backend, - sc_consensus::{import_queue::ImportQueueService, BlockImport, ImportQueue}, - sc_consensus_manual_seal::{ - run_manual_seal, ConsensusDataProvider, EngineCommand, ManualSealParams, - }, - sc_executor::{ - sp_wasm_interface::{ExtendedHostFunctions, HostFunctions}, - HeapAllocStrategy, NativeElseWasmExecutor, NativeExecutionDispatch, RuntimeVersionOf, - WasmExecutor, DEFAULT_HEAP_ALLOC_STRATEGY, - }, - sc_network::{config::FullNetworkConfiguration, NetworkBlock, NetworkService}, - sc_network_sync::SyncingService, - sc_network_transactions::TransactionsHandlerController, - sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}, - sc_service::{ - Configuration, KeystoreContainer, NetworkStarter, SpawnTaskHandle, TFullBackend, - TFullClient, TaskManager, - }, - sc_telemetry::{Telemetry, TelemetryWorker, TelemetryWorkerHandle}, - sc_transaction_pool_api::OffchainTransactionPoolFactory, - sc_utils::mpsc::TracingUnboundedSender, - sp_api::ConstructRuntimeApi, - sp_block_builder::BlockBuilder, - sp_consensus::SelectChain, - sp_core::traits::CodeExecutor, - sp_inherents::CreateInherentDataProviders, - sp_offchain::OffchainWorkerApi, - sp_runtime::Percent, - sp_transaction_pool::runtime_api::TaggedTransactionQueue, - std::{str::FromStr, sync::Arc}, -}; - -/// Trait to configure the main types the builder rely on, bundled in a single -/// type to reduce verbosity and the amount of type parameters. -pub trait NodeBuilderConfig { - type Block; - type RuntimeApi; - type ParachainExecutor; - - /// Create a new `NodeBuilder` using the types of this `Config`, along - /// with the parachain `Configuration` and an optional `HwBench`. - fn new_builder( - parachain_config: &Configuration, - hwbench: Option, - ) -> Result, sc_service::Error> - where - Self: Sized, - BlockOf: cumulus_primitives_core::BlockT, - ExecutorOf: - Clone + CodeExecutor + RuntimeVersionOf + TanssiExecutorExt + Sync + Send + 'static, - RuntimeApiOf: - ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: - TaggedTransactionQueue> + BlockBuilder>, - { - NodeBuilder::::new(parachain_config, hwbench) - } -} - -pub type BlockOf = ::Block; -pub type BlockHashOf = as cumulus_primitives_core::BlockT>::Hash; -pub type BlockHeaderOf = as cumulus_primitives_core::BlockT>::Header; -pub type RuntimeApiOf = ::RuntimeApi; -pub type ExecutorOf = ::ParachainExecutor; -pub type ClientOf = TFullClient, RuntimeApiOf, ExecutorOf>; -pub type BackendOf = TFullBackend>; -pub type ConstructedRuntimeApiOf = - as ConstructRuntimeApi, ClientOf>>::RuntimeApi; -pub type ImportQueueServiceOf = Box>>; -pub type ParachainConsensusOf = Box>>; - -// `Cumulus` and `TxHandler` are types that will change during the life of -// a `NodeBuilder` because they are generated and consumed when calling -// certain functions, with absence of data represented with `()`. Some -// function are implemented only for a given concrete type, which ensure it -// can only be called if the required data is available (generated and not yet -// consumed). -// -// While this could be implemented with multiple impl blocks with concrete types, -// we use here `core_extensions::TypeIdentity` which allow to express type -// identity/equality as a trait bound on each function as it removes the -// boilerplate of many impl block with duplicated trait bounds. 2 impl blocks -// are still required since Rust can't infer the types in the `new` function -// that doesn't take `self`. -pub struct NodeBuilder< - T: NodeBuilderConfig, - // `(cumulus_client_service/sc_service)::build_network` returns many important systems, - // but can only be called with an `import_queue` which can be different in - // each node. For that reason it is a `()` when calling `new`, then the - // caller create the `import_queue` using systems contained in `NodeBuilder`, - // then call `build_cumulus_network` with it to generate the cumulus systems. - SNetwork = (), - // The `TxHandler` is constructed in `build_X_network` - // and is then consumed when calling `spawn_common_tasks`. - STxHandler = (), - // The import queue service is obtained from the import queue in - // `build_cumulus_network` or `build_substrate_network`, which also - // consumes the import queue. Neither of them are clonable, so we need to - // to store the service here to be able to consume it later in - // `start_full_node`. - SImportQueueService = (), -> where - BlockOf: cumulus_primitives_core::BlockT, - ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> + BlockBuilder>, -{ - pub client: Arc>, - pub backend: Arc>, - pub task_manager: TaskManager, - pub keystore_container: KeystoreContainer, - pub transaction_pool: Arc, ClientOf>>, - pub telemetry: Option, - pub telemetry_worker_handle: Option, - - pub hwbench: Option, - pub prometheus_registry: Option, - - pub network: SNetwork, - pub tx_handler_controller: STxHandler, - pub import_queue_service: SImportQueueService, -} - -pub struct Network { - pub network: Arc>, - pub system_rpc_tx: TracingUnboundedSender>, - pub start_network: NetworkStarter, - pub sync_service: Arc>, -} - -/// Allows to create a parachain-defined executor from a `WasmExecutor` -pub trait TanssiExecutorExt { - type HostFun: HostFunctions; - fn new_with_wasm_executor(wasm_executor: WasmExecutor) -> Self; -} - -impl TanssiExecutorExt for WasmExecutor { - type HostFun = sp_io::SubstrateHostFunctions; - - fn new_with_wasm_executor(wasm_executor: WasmExecutor) -> Self { - wasm_executor - } -} - -impl TanssiExecutorExt for NativeElseWasmExecutor -where - D: NativeExecutionDispatch, -{ - type HostFun = ExtendedHostFunctions; - - fn new_with_wasm_executor(wasm_executor: WasmExecutor) -> Self { - NativeElseWasmExecutor::new_with_wasm_executor(wasm_executor) - } -} - -// `new` function doesn't take self, and the Rust compiler cannot infer that -// only one type T implements `TypeIdentity`. With thus need a separate impl -// block with concrete types `()`. -impl NodeBuilder -where - BlockOf: cumulus_primitives_core::BlockT, - ExecutorOf: - Clone + CodeExecutor + RuntimeVersionOf + TanssiExecutorExt + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> + BlockBuilder>, -{ - /// Create a new `NodeBuilder` which prepare objects required to launch a - /// node. However it only starts telemetry, and doesn't provide any - /// network-dependent objects (as it requires an import queue, which usually - /// is different for each node). - fn new( - parachain_config: &Configuration, - hwbench: Option, - ) -> Result { - // Refactor: old new_partial - - let telemetry = parachain_config - .telemetry_endpoints - .clone() - .filter(|x| !x.is_empty()) - .map(|endpoints| -> Result<_, sc_telemetry::Error> { - let worker = TelemetryWorker::new(16)?; - let telemetry = worker.handle().new_telemetry(endpoints); - Ok((worker, telemetry)) - }) - .transpose()?; - - let heap_pages = - parachain_config - .default_heap_pages - .map_or(DEFAULT_HEAP_ALLOC_STRATEGY, |h| HeapAllocStrategy::Static { - extra_pages: h as u32, - }); - - // Default runtime_cache_size is 2 - // For now we can work with this, but it will likely need - // to change once we start having runtime_cache_sizes, or - // run nodes with the maximum for this value - let mut wasm_builder = WasmExecutor::builder() - .with_execution_method(parachain_config.wasm_method) - .with_onchain_heap_alloc_strategy(heap_pages) - .with_offchain_heap_alloc_strategy(heap_pages) - .with_max_runtime_instances(parachain_config.max_runtime_instances) - .with_runtime_cache_size(parachain_config.runtime_cache_size); - if let Some(ref wasmtime_precompiled_path) = parachain_config.wasmtime_precompiled { - wasm_builder = wasm_builder.with_wasmtime_precompiled_path(wasmtime_precompiled_path); - } - - let executor = ExecutorOf::::new_with_wasm_executor(wasm_builder.build()); - - let (client, backend, keystore_container, task_manager) = - sc_service::new_full_parts::, RuntimeApiOf, _>( - parachain_config, - telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), - executor, - )?; - let client = Arc::new(client); - - let telemetry_worker_handle = telemetry.as_ref().map(|(worker, _)| worker.handle()); - - let telemetry = telemetry.map(|(worker, telemetry)| { - task_manager - .spawn_handle() - .spawn("telemetry", None, worker.run()); - telemetry - }); - - let transaction_pool = sc_transaction_pool::BasicPool::new_full( - parachain_config.transaction_pool.clone(), - parachain_config.role.is_authority().into(), - parachain_config.prometheus_registry(), - task_manager.spawn_essential_handle(), - client.clone(), - ); - - Ok(Self { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry: parachain_config.prometheus_registry().cloned(), - network: TypeIdentity::from_type(()), - tx_handler_controller: TypeIdentity::from_type(()), - import_queue_service: TypeIdentity::from_type(()), - }) - } -} - -impl - NodeBuilder -where - BlockOf: cumulus_primitives_core::BlockT, - ExecutorOf: Clone + CodeExecutor + RuntimeVersionOf + Sync + Send + 'static, - RuntimeApiOf: ConstructRuntimeApi, ClientOf> + Sync + Send + 'static, - ConstructedRuntimeApiOf: TaggedTransactionQueue> - + BlockBuilder> - + cumulus_primitives_core::CollectCollationInfo>, -{ - pub async fn build_relay_chain_interface( - &mut self, - parachain_config: &Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, - ) -> sc_service::error::Result<( - Arc<(dyn RelayChainInterface + 'static)>, - Option, - )> { - build_relay_chain_interface( - polkadot_config, - parachain_config, - self.telemetry_worker_handle.clone(), - &mut self.task_manager, - collator_options.clone(), - self.hwbench.clone(), - ) - .await - .map_err(|e| sc_service::Error::Application(Box::new(e) as Box<_>)) - } - - /// Given an import queue, calls `cumulus_client_service::build_network` and - /// stores the returned objects in `self.network` and `self.tx_handler_controller`. - /// - /// Can only be called once on a `NodeBuilder` that doesn't have yet network - /// data. - pub async fn build_cumulus_network( - self, - parachain_config: &Configuration, - para_id: ParaId, - import_queue: impl ImportQueue> + 'static, - relay_chain_interface: RCInterface, - ) -> sc_service::error::Result< - NodeBuilder< - T, - Network>, - TransactionsHandlerController>, - ImportQueueServiceOf, - >, - > - where - SNetwork: TypeIdentity, - STxHandler: TypeIdentity, - SImportQueueService: TypeIdentity, - RCInterface: RelayChainInterface + Clone + 'static, - { - let Self { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: _, - tx_handler_controller: _, - import_queue_service: _, - } = self; - - let net_config = FullNetworkConfiguration::new(¶chain_config.network); - let import_queue_service = import_queue.service(); - let spawn_handle = task_manager.spawn_handle(); - - let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = - cumulus_client_service::build_network(cumulus_client_service::BuildNetworkParams { - parachain_config, - client: client.clone(), - transaction_pool: transaction_pool.clone(), - spawn_handle, - import_queue, - para_id, - relay_chain_interface, - net_config, - sybil_resistance_level: CollatorSybilResistance::Resistant, - }) - .await?; - - Ok(NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: Network { - network, - system_rpc_tx, - start_network, - sync_service, - }, - tx_handler_controller, - import_queue_service, - }) - } - - /// Given an import queue, calls `sc_service::build_network` and - /// stores the returned objects in `self.network` and `self.tx_handler_controller`. - /// - /// Can only be called once on a `NodeBuilder` that doesn't have yet network - /// data. - pub fn build_substrate_network( - self, - parachain_config: &Configuration, - import_queue: impl ImportQueue> + 'static, - ) -> sc_service::error::Result< - NodeBuilder< - T, - Network>, - TransactionsHandlerController>, - ImportQueueServiceOf, - >, - > - where - SNetwork: TypeIdentity, - STxHandler: TypeIdentity, - SImportQueueService: TypeIdentity, - { - let Self { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: _, - tx_handler_controller: _, - import_queue_service: _, - } = self; - - let net_config = FullNetworkConfiguration::new(¶chain_config.network); - let import_queue_service = import_queue.service(); - - let (network, system_rpc_tx, tx_handler_controller, start_network, sync_service) = - sc_service::build_network(sc_service::BuildNetworkParams { - config: parachain_config, - client: client.clone(), - transaction_pool: transaction_pool.clone(), - spawn_handle: task_manager.spawn_handle(), - import_queue, - warp_sync_params: None, - block_announce_validator_builder: None, - net_config, - block_relay: None, - })?; - - Ok(NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: Network { - network, - system_rpc_tx, - start_network, - sync_service, - }, - tx_handler_controller, - import_queue_service, - }) - } - - /// Given an `rpc_builder`, spawns the common tasks of a Substrate - /// node. It consumes `self.tx_handler_controller` in the process, which means - /// it can only be called once, and any other code that would need this - /// controller should interact with it before calling this function. - pub fn spawn_common_tasks( - self, - parachain_config: Configuration, - rpc_builder: Box< - dyn Fn( - DenyUnsafe, - SubscriptionTaskExecutor, - ) -> Result, sc_service::Error>, - >, - ) -> sc_service::error::Result>, (), SImportQueueService>> - where - SNetwork: TypeIdentity>>, - STxHandler: TypeIdentity>>, - BlockHashOf: Unpin, - BlockHeaderOf: Unpin, - ConstructedRuntimeApiOf: TaggedTransactionQueue> - + BlockBuilder> - + OffchainWorkerApi> - + sp_api::Metadata> - + sp_session::SessionKeys>, - { - let NodeBuilder { - client, - backend, - transaction_pool, - mut telemetry, - telemetry_worker_handle, - mut task_manager, - keystore_container, - hwbench, - prometheus_registry, - network, - tx_handler_controller, - import_queue_service, - } = self; - - let network = TypeIdentity::into_type(network); - let tx_handler_controller = TypeIdentity::into_type(tx_handler_controller); - - let collator = parachain_config.role.is_authority(); - - if parachain_config.offchain_worker.enabled { - task_manager.spawn_handle().spawn( - "offchain-workers-runner", - "offchain-work", - sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { - runtime_api_provider: client.clone(), - keystore: Some(keystore_container.keystore()), - offchain_db: backend.offchain_storage(), - transaction_pool: Some(OffchainTransactionPoolFactory::new( - transaction_pool.clone(), - )), - network_provider: network.network.clone(), - is_validator: parachain_config.role.is_authority(), - enable_http_requests: false, - custom_extensions: move |_| vec![], - }) - .run(client.clone(), task_manager.spawn_handle()) - .boxed(), - ); - } - - let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { - rpc_builder, - client: client.clone(), - transaction_pool: transaction_pool.clone(), - task_manager: &mut task_manager, - config: parachain_config, - keystore: keystore_container.keystore(), - backend: backend.clone(), - network: network.network.clone(), - system_rpc_tx: network.system_rpc_tx.clone(), - tx_handler_controller, - telemetry: telemetry.as_mut(), - sync_service: network.sync_service.clone(), - })?; - - if let Some(hwbench) = &hwbench { - sc_sysinfo::print_hwbench(hwbench); - // Here you can check whether the hardware meets your chains' requirements. Putting a link - // in there and swapping out the requirements for your own are probably a good idea. The - // requirements for a para-chain are dictated by its relay-chain. - if collator { - if let Err(err) = SUBSTRATE_REFERENCE_HARDWARE.check_hardware(hwbench) { - log::warn!( - "⚠️ The hardware does not meet the minimal requirements {} for role 'Authority'.", - err - ); - } - } - - if let Some(ref mut telemetry) = telemetry { - let telemetry_handle = telemetry.handle(); - task_manager.spawn_handle().spawn( - "telemetry_hwbench", - None, - sc_sysinfo::initialize_hwbench_telemetry(telemetry_handle, hwbench.clone()), - ); - } - } - - Ok(NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: TypeIdentity::from_type(network), - tx_handler_controller: TypeIdentity::from_type(()), - import_queue_service, - }) - } - - pub fn install_manual_seal( - &mut self, - manual_seal_config: ManualSealConfiguration, BI, SC, CIDP>, - ) -> sc_service::error::Result>>>> - where - BI: BlockImport, Error = sp_consensus::Error> + Send + Sync + 'static, - SC: SelectChain> + 'static, - CIDP: CreateInherentDataProviders, ()> + 'static, - { - let ManualSealConfiguration { - sealing, - soft_deadline, - block_import, - select_chain, - consensus_data_provider, - create_inherent_data_providers, - } = manual_seal_config; - - let prometheus_registry = self.prometheus_registry.clone(); - - let mut env = sc_basic_authorship::ProposerFactory::new( - self.task_manager.spawn_handle(), - self.client.clone(), - self.transaction_pool.clone(), - prometheus_registry.as_ref(), - self.telemetry.as_ref().map(|x| x.handle()), - ); - - let mut command_sink = None; - - if let Some(deadline) = soft_deadline { - env.set_soft_deadline(deadline); - } - - let commands_stream: Box< - dyn Stream>> + Send + Sync + Unpin, - > = match sealing { - Sealing::Instant => { - Box::new( - // This bit cribbed from the implementation of instant seal. - self.transaction_pool - .pool() - .validated_pool() - .import_notification_stream() - .map(|_| EngineCommand::SealNewBlock { - create_empty: false, - finalize: false, - parent_hash: None, - sender: None, - }), - ) - } - Sealing::Manual => { - let (sink, stream) = futures::channel::mpsc::channel(1000); - // Keep a reference to the other end of the channel. It goes to the RPC. - command_sink = Some(sink); - Box::new(stream) - } - Sealing::Interval(millis) => Box::new(futures::StreamExt::map( - Timer::interval(Duration::from_millis(millis)), - |_| EngineCommand::SealNewBlock { - create_empty: true, - finalize: true, - parent_hash: None, - sender: None, - }, - )), - }; - - self.task_manager.spawn_essential_handle().spawn_blocking( - "authorship_task", - Some("block-authoring"), - run_manual_seal(ManualSealParams { - block_import, - env, - client: self.client.clone(), - pool: self.transaction_pool.clone(), - commands_stream, - select_chain, - consensus_data_provider, - create_inherent_data_providers, - }), - ); - - Ok(command_sink) - } - - pub fn start_full_node( - self, - para_id: ParaId, - relay_chain_interface: RCInterface, - relay_chain_slot_duration: Duration, - ) -> sc_service::error::Result> - where - SNetwork: TypeIdentity>>, - SImportQueueService: TypeIdentity>, - RCInterface: RelayChainInterface + Clone + 'static, - { - let NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - mut task_manager, - keystore_container, - hwbench, - prometheus_registry, - network, - tx_handler_controller, - import_queue_service, - } = self; - - let network = TypeIdentity::into_type(network); - let import_queue_service = TypeIdentity::into_type(import_queue_service); - - let announce_block = { - let sync_service = network.sync_service.clone(); - Arc::new(move |hash, data| sync_service.announce_block(hash, data)) - }; - - let overseer_handle = relay_chain_interface - .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - - let params = StartFullNodeParams { - client: client.clone(), - announce_block, - task_manager: &mut task_manager, - para_id, - relay_chain_interface, - relay_chain_slot_duration, - import_queue: import_queue_service, - recovery_handle: Box::new(overseer_handle), - sync_service: network.sync_service.clone(), - }; - - // TODO: change for async backing - #[allow(deprecated)] - cumulus_client_service::start_full_node(params)?; - - Ok(NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: TypeIdentity::from_type(network), - tx_handler_controller, - import_queue_service: (), - }) - } - - pub async fn start_collator( - self, - para_id: ParaId, - relay_chain_interface: RCInterface, - relay_chain_slot_duration: Duration, - parachain_consensus: ParachainConsensusOf, - collator_key: CollatorPair, - ) -> sc_service::error::Result> - where - SNetwork: TypeIdentity>>, - SImportQueueService: TypeIdentity>, - RCInterface: RelayChainInterface + Clone + 'static, - { - let NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - mut task_manager, - keystore_container, - hwbench, - prometheus_registry, - network, - tx_handler_controller, - import_queue_service, - } = self; - - let network = TypeIdentity::into_type(network); - let import_queue_service = TypeIdentity::into_type(import_queue_service); - - let spawner = task_manager.spawn_handle(); - let announce_block = { - let sync_service = network.sync_service.clone(); - Arc::new(move |hash, data| sync_service.announce_block(hash, data)) - }; - let overseer_handle = relay_chain_interface - .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - - let params = cumulus_client_service::StartCollatorParams { - para_id, - block_status: client.clone(), - announce_block: announce_block.clone(), - client: client.clone(), - task_manager: &mut task_manager, - relay_chain_interface: relay_chain_interface.clone(), - spawner: spawner.clone(), - parachain_consensus, - import_queue: import_queue_service, - collator_key, - relay_chain_slot_duration, - recovery_handle: Box::new(overseer_handle.clone()), - sync_service: network.sync_service.clone(), - }; - - // TODO: change for async backing - #[allow(deprecated)] - cumulus_client_service::start_collator(params).await?; - - Ok(NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network: TypeIdentity::from_type(network), - tx_handler_controller, - import_queue_service: (), - }) - } - - pub fn extract_import_queue_service( - self, - ) -> ( - NodeBuilder, - SImportQueueService, - ) - where - SNetwork: TypeIdentity>>, - { - let NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network, - tx_handler_controller, - import_queue_service, - } = self; - - ( - NodeBuilder { - client, - backend, - transaction_pool, - telemetry, - telemetry_worker_handle, - task_manager, - keystore_container, - hwbench, - prometheus_registry, - network, - tx_handler_controller, - import_queue_service: (), - }, - import_queue_service, - ) - } - - pub fn cumulus_client_collator_params_generator( - &self, - para_id: ParaId, - overseer_handle: cumulus_relay_chain_interface::OverseerHandle, - collator_key: CollatorPair, - parachain_consensus: ParachainConsensusOf, - ) -> impl Fn() -> cumulus_client_collator::StartCollatorParams< - BlockOf, - ClientOf, - ClientOf, - SpawnTaskHandle, - > + Send - + Clone - + 'static - where - SNetwork: TypeIdentity>>, - { - let network = TypeIdentity::as_type(&self.network); - - let client = self.client.clone(); - let announce_block = { - let sync_service = network.sync_service.clone(); - Arc::new(move |hash, data| sync_service.announce_block(hash, data)) - }; - let spawner = self.task_manager.spawn_handle(); - - move || cumulus_client_collator::StartCollatorParams { - runtime_api: client.clone(), - block_status: client.clone(), - announce_block: announce_block.clone(), - overseer_handle: overseer_handle.clone(), - spawner: spawner.clone(), - para_id, - key: collator_key.clone(), - parachain_consensus: parachain_consensus.clone(), - } - } -} - -/// Block authoring scheme to be used by the dev service. -#[derive(Debug, Copy, Clone)] -pub enum Sealing { - /// Author a block immediately upon receiving a transaction into the transaction pool - Instant, - /// Author a block upon receiving an RPC command - Manual, - /// Author blocks at a regular interval specified in milliseconds - Interval(u64), -} - -impl FromStr for Sealing { - type Err = String; - - fn from_str(s: &str) -> Result { - Ok(match s { - "instant" => Self::Instant, - "manual" => Self::Manual, - s => { - let millis = s - .parse::() - .map_err(|_| "couldn't decode sealing param")?; - Self::Interval(millis) - } - }) - } -} - -pub struct ManualSealConfiguration { - pub sealing: Sealing, - pub block_import: BI, - pub soft_deadline: Option, - pub select_chain: SC, - pub consensus_data_provider: Option>>, - pub create_inherent_data_providers: CIDP, -} diff --git a/client/services-payment/Cargo.toml b/client/services-payment/Cargo.toml deleted file mode 100644 index f646814..0000000 --- a/client/services-payment/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "services-payment-rpc" -authors = { workspace = true } -description = "RPC interface for the Services Payment pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -futures = { workspace = true } -jsonrpsee = { workspace = true } -pallet-services-payment-runtime-api = { workspace = true, features = [ "std" ] } -parity-scale-codec = { workspace = true } -sc-client-api = { workspace = true } -sp-api = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } diff --git a/client/services-payment/src/lib.rs b/client/services-payment/src/lib.rs deleted file mode 100644 index 7ff984d..0000000 --- a/client/services-payment/src/lib.rs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! RPC client for Services Payment pallet - -pub use pallet_services_payment_runtime_api::ServicesPaymentApi as ServicesPaymentRuntimeApi; -use { - core::marker::PhantomData, - jsonrpsee::{ - core::{async_trait, RpcResult}, - proc_macros::rpc, - }, - sc_client_api::UsageProvider, - sp_api::ProvideRuntimeApi, - sp_runtime::traits::Block as BlockT, - std::sync::Arc, -}; - -#[rpc(server)] -pub trait ServicesPaymentApi { - #[method(name = "tanssi_servicesPaymentBlockCost")] - async fn block_cost(&self, para_id: ParaId) -> RpcResult; - - #[method(name = "tanssi_servicesPaymentCollatorAssignmentCost")] - async fn collator_assignment_cost(&self, para_id: ParaId) -> RpcResult; -} - -pub struct ServicesPayment { - client: Arc, - _phantom: PhantomData, -} - -impl ServicesPayment { - pub fn new(client: Arc) -> Self { - Self { - client, - _phantom: PhantomData, - } - } -} - -#[async_trait] -impl ServicesPaymentApiServer - for ServicesPayment -where - Hash: Send + 'static, - Block: BlockT, - Client: ProvideRuntimeApi + Sync + Send + UsageProvider + 'static, - Client::Api: ServicesPaymentRuntimeApi, - Balance: parity_scale_codec::Codec + Send + 'static, - ParaId: parity_scale_codec::Codec + Send + 'static, -{ - async fn block_cost(&self, para_id: ParaId) -> RpcResult { - let cost = self - .client - .runtime_api() - .block_cost(self.client.usage_info().chain.best_hash, para_id) - .map_err(|e| internal_err(e))?; - Ok(cost) - } - - async fn collator_assignment_cost(&self, para_id: ParaId) -> RpcResult { - let cost = self - .client - .runtime_api() - .collator_assignment_cost(self.client.usage_info().chain.best_hash, para_id) - .map_err(|e| internal_err(e))?; - Ok(cost) - } -} - -pub fn internal_err(error: T) -> jsonrpsee::core::Error { - jsonrpsee::core::Error::Call(jsonrpsee::types::error::CallError::Custom( - jsonrpsee::types::error::ErrorObject::borrowed( - jsonrpsee::types::error::INTERNAL_ERROR_CODE, - &error.to_string(), - None, - ) - .into_owned(), - )) -} diff --git a/client/stream-payment/Cargo.toml b/client/stream-payment/Cargo.toml deleted file mode 100644 index 49f5816..0000000 --- a/client/stream-payment/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "stream-payment-rpc" -authors = { workspace = true } -description = "RPC interface for the Stream Payment pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -futures = { workspace = true } -jsonrpsee = { workspace = true } -pallet-stream-payment-runtime-api = { workspace = true, features = [ "std" ] } -parity-scale-codec = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -sp-api = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } -thiserror = { workspace = true } diff --git a/client/stream-payment/src/lib.rs b/client/stream-payment/src/lib.rs deleted file mode 100644 index 86b9b51..0000000 --- a/client/stream-payment/src/lib.rs +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! RPC client for Author Noting pallet - -pub use pallet_stream_payment_runtime_api::StreamPaymentApi as StreamPaymentRuntimeApi; -use { - core::marker::PhantomData, - jsonrpsee::{ - core::{async_trait, RpcResult}, - proc_macros::rpc, - }, - pallet_stream_payment_runtime_api::{StreamPaymentApiError, StreamPaymentApiStatus}, - sp_api::ProvideRuntimeApi, - sp_runtime::traits::Block as BlockT, - std::sync::Arc, -}; - -/// Top-level error type for the RPC handler. -#[derive(Debug, thiserror::Error)] -pub enum Error { - /// Failed to fetch API - #[error("Failed to fetch API: {0}")] - ApiError(sp_api::ApiError), - - /// Failed to fetch the current best header. - #[error("Failed to fetch stream payment status: {0}")] - StreamPaymentApiError(StreamPaymentApiError), -} - -#[rpc(client, server)] -pub trait StreamPaymentApi { - #[method(name = "tanssi_streamPaymentStatus")] - async fn stream_payment_status( - &self, - block: Hash, - stream_id: StreamId, - now: Option, - ) -> RpcResult>; -} - -pub struct StreamPayment { - client: Arc, - _phantom: PhantomData, -} - -impl StreamPayment { - pub fn new(client: Arc) -> Self { - Self { - client, - _phantom: PhantomData, - } - } -} - -#[async_trait] -impl - StreamPaymentApiServer for StreamPayment -where - Hash: Send + 'static, - Block: BlockT, - Client: ProvideRuntimeApi + Sync + Send + 'static, - Client::Api: StreamPaymentRuntimeApi, - StreamId: parity_scale_codec::Codec + Send + 'static, - Instant: parity_scale_codec::Codec + Send + 'static, - Balance: parity_scale_codec::Codec + Send + 'static, -{ - async fn stream_payment_status( - &self, - block: Hash, - stream_id: StreamId, - now: Option, - ) -> RpcResult> { - let status = self - .client - .runtime_api() - .stream_payment_status(block, stream_id, now) - .map_err(|e| internal_err(Error::ApiError(e)))? - .map_err(|e| internal_err(Error::StreamPaymentApiError(e)))?; - - Ok(status) - } -} - -pub fn internal_err(error: T) -> jsonrpsee::core::Error { - jsonrpsee::core::Error::Call(jsonrpsee::types::error::CallError::Custom( - jsonrpsee::types::error::ErrorObject::borrowed( - jsonrpsee::types::error::INTERNAL_ERROR_CODE, - &error.to_string(), - None, - ) - .into_owned(), - )) -} diff --git a/container-chains/nodes/frontier/Cargo.toml b/container-chains/nodes/frontier/Cargo.toml deleted file mode 100644 index ef5b46e..0000000 --- a/container-chains/nodes/frontier/Cargo.toml +++ /dev/null @@ -1,140 +0,0 @@ -[package] -name = "container-chain-frontier-node" -authors = { workspace = true } -build = "build.rs" -description = "Frontier container chain template node" -edition = "2021" -license = "GPL-3.0-only" -version = "0.7.0" - -[lints] -workspace = true - -[dependencies] -async-io = { workspace = true } -async-trait = { workspace = true } -clap = { workspace = true, features = [ "derive" ] } -flume = { workspace = true } -futures = { workspace = true } -hex-literal = { workspace = true } -jsonrpsee = { workspace = true, features = [ "server" ] } -log = { workspace = true } -parity-scale-codec = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -serde_json = { workspace = true, features = [ "arbitrary_precision" ] } -url = { workspace = true } - -# Local -ccp-authorities-noting-inherent = { workspace = true } -container-chain-template-frontier-runtime = { workspace = true, features = [ "std" ] } -manual-xcm-rpc = { workspace = true } -node-common = { workspace = true } -tc-consensus = { workspace = true } - -# Nimbus -nimbus-consensus = { workspace = true } -nimbus-primitives = { workspace = true, features = [ "std" ] } - -# Substrate -frame-benchmarking = { workspace = true } -frame-benchmarking-cli = { workspace = true } -frame-system-rpc-runtime-api = { workspace = true } -pallet-transaction-payment-rpc = { workspace = true } -pallet-transaction-payment-rpc-runtime-api = { workspace = true, features = [ "std" ] } -sc-basic-authorship = { workspace = true } -sc-chain-spec = { workspace = true } -sc-cli = { workspace = true } -sc-client-api = { workspace = true } -sc-consensus = { workspace = true } -sc-consensus-manual-seal = { workspace = true } -sc-executor = { workspace = true } -sc-network = { workspace = true } -sc-network-common = { workspace = true } -sc-network-sync = { workspace = true } -sc-offchain = { workspace = true } -sc-rpc = { workspace = true } -sc-service = { workspace = true } -sc-sysinfo = { workspace = true } -sc-telemetry = { workspace = true } -sc-tracing = { workspace = true } -sc-transaction-pool = { workspace = true } -sc-transaction-pool-api = { workspace = true } -sp-api = { workspace = true, features = [ "std" ] } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } -sp-debug-derive = { workspace = true } - -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true, features = [ "std" ] } -sp-inherents = { workspace = true, features = [ "std" ] } -sp-io = { workspace = true, features = [ "std" ] } -sp-keystore = { workspace = true, features = [ "std" ] } -sp-offchain = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } -sp-session = { workspace = true, features = [ "std" ] } -sp-timestamp = { workspace = true, features = [ "std" ] } - -sp-transaction-pool = { workspace = true } -substrate-frame-rpc-system = { workspace = true } -substrate-prometheus-endpoint = { workspace = true } -try-runtime-cli = { workspace = true, optional = true } - -# Polkadot -polkadot-cli = { workspace = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-primitives = { workspace = true } -polkadot-service = { workspace = true } - -# Cumulus -cumulus-client-cli = { workspace = true } -cumulus-client-consensus-aura = { workspace = true } -cumulus-client-consensus-common = { workspace = true } -cumulus-client-network = { workspace = true } -cumulus-client-parachain-inherent = { workspace = true } -cumulus-client-service = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-relay-chain-interface = { workspace = true } -cumulus-test-relay-sproof-builder = { workspace = true } - -# Frontier -fc-api = { workspace = true } -fc-cli = { workspace = true } -fc-consensus = { workspace = true } -fc-db = { workspace = true, features = [ "sql" ] } -fc-mapping-sync = { workspace = true, features = [ "sql" ] } -fc-rpc = { workspace = true, features = [ "txpool" ] } -fc-rpc-core = { workspace = true, features = [ "txpool" ] } -fc-storage = { workspace = true } -fp-evm = { workspace = true } -fp-rpc = { workspace = true } -pallet-ethereum = { workspace = true } -[build-dependencies] -substrate-build-script-utils = { workspace = true } - -[features] -default = [] -runtime-benchmarks = [ - "container-chain-template-frontier-runtime/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "frame-benchmarking-cli/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-ethereum/runtime-benchmarks", - "polkadot-cli/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-primitives/runtime-benchmarks", - "polkadot-service/runtime-benchmarks", - "sc-service/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", -] -try-runtime = [ - "container-chain-template-frontier-runtime/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-ethereum/try-runtime", - "polkadot-cli/try-runtime", - "polkadot-service/try-runtime", - "sp-runtime/try-runtime", - "try-runtime-cli/try-runtime", -] diff --git a/container-chains/nodes/frontier/build.rs b/container-chains/nodes/frontier/build.rs deleted file mode 100644 index cbaa443..0000000 --- a/container-chains/nodes/frontier/build.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; - -fn main() { - generate_cargo_keys(); - - rerun_if_git_head_changed(); -} diff --git a/container-chains/nodes/frontier/src/chain_spec.rs b/container-chains/nodes/frontier/src/chain_spec.rs deleted file mode 100644 index c6c158f..0000000 --- a/container-chains/nodes/frontier/src/chain_spec.rs +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - container_chain_template_frontier_runtime::{ - AccountId, EVMChainIdConfig, EVMConfig, MaintenanceModeConfig, MigrationsConfig, - PolkadotXcmConfig, Precompiles, - }, - cumulus_primitives_core::ParaId, - fp_evm::GenesisAccount, - hex_literal::hex, - sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}, - sc_network::config::MultiaddrWithPeerId, - sc_service::ChainType, - serde::{Deserialize, Serialize}, -}; - -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type ChainSpec = sc_service::GenericChainSpec< - container_chain_template_frontier_runtime::RuntimeGenesisConfig, - Extensions, ->; - -/// Orcherstrator's parachain id -pub const ORCHESTRATOR: ParaId = ParaId::new(1000); - -/// The extensions for the [`ChainSpec`]. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] -#[serde(deny_unknown_fields)] -pub struct Extensions { - /// The relay chain of the Parachain. - pub relay_chain: String, - /// The id of the Parachain. - pub para_id: u32, -} - -impl Extensions { - /// Try to get the extension from the given `ChainSpec`. - pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> { - sc_chain_spec::get_extension(chain_spec.extensions()) - } -} - -pub fn development_config(para_id: ParaId, boot_nodes: Vec) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "UNIT".into()); - properties.insert("tokenDecimals".into(), 18.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), true.into()); - - let mut default_funded_accounts = pre_funded_accounts(); - default_funded_accounts.sort(); - default_funded_accounts.dedup(); - let boot_nodes: Vec = boot_nodes - .into_iter() - .map(|x| { - x.parse::() - .unwrap_or_else(|e| panic!("invalid bootnode address format {:?}: {:?}", x, e)) - }) - .collect(); - - ChainSpec::builder( - container_chain_template_frontier_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Development") - .with_id("dev") - .with_chain_type(ChainType::Development) - .with_genesis_config(testnet_genesis( - default_funded_accounts.clone(), - para_id, - AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), // Alith - )) - .with_properties(properties) - .with_boot_nodes(boot_nodes) - .build() -} - -pub fn local_testnet_config(para_id: ParaId, boot_nodes: Vec) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "UNIT".into()); - properties.insert("tokenDecimals".into(), 18.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), true.into()); - let protocol_id = format!("container-chain-{}", para_id); - - let mut default_funded_accounts = pre_funded_accounts(); - default_funded_accounts.sort(); - default_funded_accounts.dedup(); - let boot_nodes: Vec = boot_nodes - .into_iter() - .map(|x| { - x.parse::() - .unwrap_or_else(|e| panic!("invalid bootnode address format {:?}: {:?}", x, e)) - }) - .collect(); - - ChainSpec::builder( - container_chain_template_frontier_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name(&format!("Frontier Container {}", para_id)) - .with_id(&format!("frontier_container_{}", para_id)) - .with_chain_type(ChainType::Local) - .with_genesis_config(testnet_genesis( - default_funded_accounts.clone(), - para_id, - AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), // Alith - )) - .with_properties(properties) - .with_protocol_id(&protocol_id) - .with_boot_nodes(boot_nodes) - .build() -} - -fn testnet_genesis( - endowed_accounts: Vec, - id: ParaId, - root_key: AccountId, -) -> serde_json::Value { - // This is the simplest bytecode to revert without returning any data. - // We will pre-deploy it under all of our precompiles to ensure they can be called from - // within contracts. - // (PUSH1 0x00 PUSH1 0x00 REVERT) - let revert_bytecode = vec![0x60, 0x00, 0x60, 0x00, 0xFD]; - - let g = container_chain_template_frontier_runtime::RuntimeGenesisConfig { - system: Default::default(), - balances: container_chain_template_frontier_runtime::BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 80)) - .collect(), - }, - parachain_info: container_chain_template_frontier_runtime::ParachainInfoConfig { - parachain_id: id, - ..Default::default() - }, - parachain_system: Default::default(), - // EVM compatibility - // We should change this to something different than Moonbeam - // For now moonwall is very tailored for moonbeam so we need it for tests - evm_chain_id: EVMChainIdConfig { - chain_id: 1281, - ..Default::default() - }, - evm: EVMConfig { - // We need _some_ code inserted at the precompile address so that - // the evm will actually call the address. - accounts: Precompiles::used_addresses() - .map(|addr| { - ( - addr.into(), - GenesisAccount { - nonce: Default::default(), - balance: Default::default(), - storage: Default::default(), - code: revert_bytecode.clone(), - }, - ) - }) - .collect(), - ..Default::default() - }, - ethereum: Default::default(), - base_fee: Default::default(), - transaction_payment: Default::default(), - sudo: container_chain_template_frontier_runtime::SudoConfig { - key: Some(root_key), - }, - authorities_noting: container_chain_template_frontier_runtime::AuthoritiesNotingConfig { - orchestrator_para_id: ORCHESTRATOR, - ..Default::default() - }, - migrations: MigrationsConfig { - ..Default::default() - }, - maintenance_mode: MaintenanceModeConfig { - start_in_maintenance_mode: false, - ..Default::default() - }, - // This should initialize it to whatever we have set in the pallet - polkadot_xcm: PolkadotXcmConfig::default(), - tx_pause: Default::default(), - }; - - serde_json::to_value(g).unwrap() -} - -/// Get pre-funded accounts -pub fn pre_funded_accounts() -> Vec { - // These addresses are derived from Substrate's canonical mnemonic: - // bottom drive obey lake curtain smoke basket hold race lonely fit walk - vec![ - AccountId::from(hex!("f24FF3a9CF04c71Dbc94D0b566f7A27B94566cac")), // Alith - AccountId::from(hex!("3Cd0A705a2DC65e5b1E1205896BaA2be8A07c6e0")), // Baltathar - AccountId::from(hex!("798d4Ba9baf0064Ec19eB4F0a1a45785ae9D6DFc")), // Charleth - AccountId::from(hex!("773539d4Ac0e786233D90A233654ccEE26a613D9")), // Dorothy - ] -} diff --git a/container-chains/nodes/frontier/src/cli.rs b/container-chains/nodes/frontier/src/cli.rs deleted file mode 100644 index 891f18c..0000000 --- a/container-chains/nodes/frontier/src/cli.rs +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - clap::Parser, - node_common::service::Sealing, - sc_cli::{CliConfiguration, NodeKeyParams, SharedParams}, - std::path::PathBuf, -}; - -/// Sub-commands supported by the collator. -#[derive(Debug, clap::Subcommand)] -#[allow(clippy::large_enum_variant)] -pub enum Subcommand { - /// Build a chain specification. - BuildSpec(BuildSpecCmd), - - /// Validate blocks. - CheckBlock(sc_cli::CheckBlockCmd), - - /// Export blocks. - ExportBlocks(sc_cli::ExportBlocksCmd), - - /// Export the state of a given block into a chain spec. - ExportState(sc_cli::ExportStateCmd), - - /// Import blocks. - ImportBlocks(sc_cli::ImportBlocksCmd), - - /// Revert the chain to a previous state. - Revert(sc_cli::RevertCmd), - - /// Remove the whole chain. - PurgeChain(cumulus_client_cli::PurgeChainCmd), - - /// Export the genesis state of the parachain. - #[command(alias = "export-genesis-state")] - ExportGenesisHead(cumulus_client_cli::ExportGenesisHeadCommand), - - /// Export the genesis wasm of the parachain. - ExportGenesisWasm(cumulus_client_cli::ExportGenesisWasmCommand), - - /// Sub-commands concerned with benchmarking. - /// The pallet benchmarking moved to the `pallet` sub-command. - #[command(subcommand)] - Benchmark(frame_benchmarking_cli::BenchmarkCmd), - - /// Try some testing command against a specified runtime state. - #[cfg(feature = "try-runtime")] - TryRuntime(try_runtime_cli::TryRuntimeCmd), - - /// Errors since the binary was not build with `--features try-runtime`. - #[cfg(not(feature = "try-runtime"))] - TryRuntime, - - /// Precompile the WASM runtime into native code - PrecompileWasm(sc_cli::PrecompileWasmCmd), -} - -#[derive(Debug, Parser)] -#[group(skip)] -pub struct RunCmd { - #[clap(flatten)] - pub base: cumulus_client_cli::RunCmd, - - /// Size in bytes of the LRU cache for block data. - #[arg(long, default_value = "300000000")] - pub eth_log_block_cache: usize, - - /// Size in bytes of the LRU cache for transactions statuses data. - #[arg(long, default_value = "300000000")] - pub eth_statuses_cache: usize, - - /// Maximum number of logs in a query. - #[arg(long, default_value = "10000")] - pub max_past_logs: u32, - - /// Id of the parachain this collator collates for. - #[arg(long)] - pub parachain_id: Option, - - /// Maximum fee history cache size. - #[arg(long, default_value = "2048")] - pub fee_history_limit: u64, - - /// When blocks should be sealed in the dev service. - /// - /// Options are "instant", "manual", or timer interval in milliseconds - #[arg(long, default_value = "instant")] - pub sealing: Sealing, -} - -impl std::ops::Deref for RunCmd { - type Target = cumulus_client_cli::RunCmd; - - fn deref(&self) -> &Self::Target { - &self.base - } -} - -#[derive(Debug, clap::Parser)] -#[command( - propagate_version = true, - args_conflicts_with_subcommands = true, - subcommand_negates_reqs = true -)] -pub struct Cli { - #[command(subcommand)] - pub subcommand: Option, - - #[command(flatten)] - pub run: RunCmd, - - /// Disable automatic hardware benchmarks. - /// - /// By default these benchmarks are automatically ran at startup and measure - /// the CPU speed, the memory bandwidth and the disk speed. - /// - /// The results are then printed out in the logs, and also sent as part of - /// telemetry, if telemetry is enabled. - #[arg(long)] - pub no_hardware_benchmarks: bool, - - /// Relay chain arguments - #[arg(raw = true)] - pub relay_chain_args: Vec, - - /// Optional parachain id that should be used to build chain spec. - #[arg(long)] - pub para_id: Option, -} - -#[derive(Debug)] -pub struct RelayChainCli { - /// The actual relay chain cli object. - pub base: polkadot_cli::RunCmd, - - /// Optional chain id that should be passed to the relay chain. - pub chain_id: Option, - - /// The base path that should be used by the relay chain. - pub base_path: PathBuf, -} - -impl RelayChainCli { - /// Parse the relay chain CLI parameters using the para chain `Configuration`. - pub fn new<'a>( - para_config: &sc_service::Configuration, - relay_chain_args: impl Iterator, - ) -> Self { - let extension = crate::chain_spec::Extensions::try_get(&*para_config.chain_spec); - let chain_id = extension.map(|e| e.relay_chain.clone()); - let base_path = para_config.base_path.path().join("polkadot"); - Self { - base_path, - chain_id, - base: clap::Parser::parse_from(relay_chain_args), - } - } -} - -/// The `build-spec` command used to build a specification. -#[derive(Debug, Clone, clap::Parser)] -pub struct BuildSpecCmd { - #[clap(flatten)] - pub base: sc_cli::BuildSpecCmd, - - /// Id of the parachain this spec is for. Note that this overrides the `--chain` param. - #[arg(long, conflicts_with = "chain")] - #[arg(long)] - pub parachain_id: Option, - - /// List of bootnodes to add to chain spec - #[arg(long)] - pub add_bootnode: Vec, -} - -impl CliConfiguration for BuildSpecCmd { - fn shared_params(&self) -> &SharedParams { - &self.base.shared_params - } - - fn node_key_params(&self) -> Option<&NodeKeyParams> { - Some(&self.base.node_key_params) - } -} - -pub struct RpcConfig { - pub eth_log_block_cache: usize, - pub eth_statuses_cache: usize, - pub fee_history_limit: u64, - pub max_past_logs: u32, - pub relay_chain_rpc_urls: Vec, -} diff --git a/container-chains/nodes/frontier/src/command.rs b/container-chains/nodes/frontier/src/command.rs deleted file mode 100644 index 990d388..0000000 --- a/container-chains/nodes/frontier/src/command.rs +++ /dev/null @@ -1,523 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::{ - chain_spec, - cli::{Cli, RelayChainCli, Subcommand}, - service::{self, frontier_database_dir, NodeConfig}, - }, - container_chain_template_frontier_runtime::Block, - cumulus_primitives_core::ParaId, - frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}, - log::{info, warn}, - node_common::{command::generate_genesis_block, service::NodeBuilderConfig as _}, - parity_scale_codec::Encode, - polkadot_cli::IdentifyVariant, - sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, - NetworkParams, Result, SharedParams, SubstrateCli, - }, - sc_service::{ - config::{BasePath, PrometheusConfig}, - DatabaseSource, - }, - sp_core::hexdisplay::HexDisplay, - sp_runtime::traits::{AccountIdConversion, Block as BlockT}, - std::net::SocketAddr, -}; - -fn load_spec(id: &str, para_id: ParaId) -> std::result::Result, String> { - Ok(match id { - "dev" => Box::new(chain_spec::development_config(para_id, vec![])), - "template-rococo" => Box::new(chain_spec::local_testnet_config(para_id, vec![])), - "" | "local" => Box::new(chain_spec::local_testnet_config(para_id, vec![])), - path => Box::new(chain_spec::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?), - }) -} - -impl SubstrateCli for Cli { - fn impl_name() -> String { - "Container Chain Frontier Node".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Container Chain Frontier Node\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - load_spec(id, self.para_id.unwrap_or(2000).into()) - } -} - -impl SubstrateCli for RelayChainCli { - fn impl_name() -> String { - "Container Chain Frontier Node".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Container Chain Frontier Node\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()).load_spec(id) - } -} - -macro_rules! construct_async_run { - (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ - let runner = $cli.create_runner($cmd)?; - runner.async_run(|mut $config| { - let $components = NodeConfig::new_builder(&mut $config, None)?; - let inner = { $( $code )* }; - - let task_manager = $components.task_manager; - inner.map(|v| (v, task_manager)) - }) - }} -} - -/// Parse command line arguments into service configuration. -pub fn run() -> Result<()> { - let cli = Cli::from_args(); - - match &cli.subcommand { - Some(Subcommand::BuildSpec(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let chain_spec = if let Some(para_id) = cmd.parachain_id { - if cmd.base.shared_params.dev { - Box::new(chain_spec::development_config( - para_id.into(), - cmd.add_bootnode.clone(), - )) - } else { - Box::new(chain_spec::local_testnet_config( - para_id.into(), - cmd.add_bootnode.clone(), - )) - } - } else { - config.chain_spec - }; - cmd.base.run(chain_spec, config.network) - }) - } - Some(Subcommand::CheckBlock(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::ExportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.database)) - }) - } - Some(Subcommand::ExportState(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.chain_spec)) - }) - } - Some(Subcommand::ImportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::Revert(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, components.backend, None)) - }) - } - Some(Subcommand::PurgeChain(cmd)) => { - let runner = cli.create_runner(cmd)?; - - runner.sync_run(|config| { - // Remove Frontier offchain db - let frontier_database_config = match config.database { - DatabaseSource::RocksDb { .. } => DatabaseSource::RocksDb { - path: frontier_database_dir(&config, "db"), - cache_size: 0, - }, - DatabaseSource::ParityDb { .. } => DatabaseSource::ParityDb { - path: frontier_database_dir(&config, "paritydb"), - }, - _ => { - return Err(format!("Cannot purge `{:?}` database", config.database).into()) - } - }; - - cmd.base.run(frontier_database_config)?; - - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()] - .iter() - .chain(cli.relay_chain_args.iter()), - ); - - let polkadot_config = SubstrateCli::create_configuration( - &polkadot_cli, - &polkadot_cli, - config.tokio_handle.clone(), - ) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - cmd.run(config, polkadot_config) - }) - } - Some(Subcommand::ExportGenesisHead(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - cmd.run(partials.client) - }) - } - Some(Subcommand::ExportGenesisWasm(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|_config| { - let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; - cmd.run(&*spec) - }) - } - Some(Subcommand::Benchmark(cmd)) => { - let runner = cli.create_runner(cmd)?; - // Switch on the concrete benchmark sub-command- - match cmd { - BenchmarkCmd::Pallet(cmd) => { - if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) - } else { - Err("Benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into()) - } - } - BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - cmd.run(partials.client) - }), - #[cfg(not(feature = "runtime-benchmarks"))] - BenchmarkCmd::Storage(_) => Err(sc_cli::Error::Input( - "Compile with --features=runtime-benchmarks \ - to enable storage benchmarks." - .into(), - )), - #[cfg(feature = "runtime-benchmarks")] - BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - let db = partials.backend.expose_db(); - let storage = partials.backend.expose_storage(); - cmd.run(config, partials.client.clone(), db, storage) - }), - BenchmarkCmd::Machine(cmd) => { - runner.sync_run(|config| cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone())) - } - // NOTE: this allows the Client to leniently implement - // new benchmark commands without requiring a companion MR. - #[allow(unreachable_patterns)] - _ => Err("Benchmarking sub-command unsupported".into()), - } - } - #[cfg(feature = "try-runtime")] - Some(Subcommand::TryRuntime(_)) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - #[cfg(not(feature = "try-runtime"))] - Some(Subcommand::TryRuntime) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - Some(Subcommand::PrecompileWasm(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - Ok(( - cmd.run(partials.backend, config.chain_spec), - partials.task_manager, - )) - }) - } - None => { - let runner = cli.create_runner(&cli.run.normalize())?; - let collator_options = cli.run.collator_options(); - - runner.run_node_until_exit(|config| async move { - let hwbench = (!cli.no_hardware_benchmarks).then_some( - config.database.path().map(|database_path| { - let _ = std::fs::create_dir_all(database_path); - sc_sysinfo::gather_hwbench(Some(database_path)) - })).flatten(); - - let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) - .map(|e| e.para_id) - .ok_or("Could not find parachain ID in chain-spec.")?; - - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()].iter().chain(cli.relay_chain_args.iter()), - ); - - let rpc_config = crate::cli::RpcConfig { - eth_log_block_cache: cli.run.eth_log_block_cache, - eth_statuses_cache: cli.run.eth_statuses_cache, - fee_history_limit: cli.run.fee_history_limit, - max_past_logs: cli.run.max_past_logs, - relay_chain_rpc_urls: cli.run.base.relay_chain_rpc_urls, - }; - - let extension = chain_spec::Extensions::try_get(&*config.chain_spec); - - let relay_chain_id = extension.map(|e| e.relay_chain.clone()); - - let dev_service = - config.chain_spec.is_dev() || relay_chain_id == Some("dev-service".to_string()); - - let id = ParaId::from(para_id); - - if dev_service { - return crate::service::start_dev_node(config, cli.run.sealing, rpc_config, id, hwbench).await - .map_err(Into::into) - } - - - let parachain_account = - AccountIdConversion::::into_account_truncating(&id); - - // We log both genesis states for reference, as fetching it from runtime would take significant time - let block_state_v0: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V0) - .map_err(|e| format!("{:?}", e))?; - let block_state_v1: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V1) - .map_err(|e| format!("{:?}", e))?; - - let genesis_state_v0 = format!("0x{:?}", HexDisplay::from(&block_state_v0.header().encode())); - let genesis_state_v1 = format!("0x{:?}", HexDisplay::from(&block_state_v1.header().encode())); - - let tokio_handle = config.tokio_handle.clone(); - let polkadot_config = - SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - info!("Parachain id: {:?}", id); - info!("Parachain Account: {}", parachain_account); - info!("Parachain genesis state V0: {}", genesis_state_v0); - info!("Parachain genesis state V1: {}", genesis_state_v1); - - info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); - - if let cumulus_client_cli::RelayChainMode::ExternalRpc(rpc_target_urls) = - collator_options.clone().relay_chain_mode { - if !rpc_target_urls.is_empty() && !cli.relay_chain_args.is_empty() { - warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); - } - } - - crate::service::start_parachain_node( - config, - polkadot_config, - collator_options, - id, - rpc_config, - hwbench, - ) - .await - .map(|r| r.0) - .map_err(Into::into) - }) - } - } -} - -impl DefaultConfigurationValues for RelayChainCli { - fn p2p_listen_port() -> u16 { - 30334 - } - - fn rpc_listen_port() -> u16 { - 9945 - } - - fn prometheus_listen_port() -> u16 { - 9616 - } -} - -impl CliConfiguration for RelayChainCli { - fn shared_params(&self) -> &SharedParams { - self.base.base.shared_params() - } - - fn import_params(&self) -> Option<&ImportParams> { - self.base.base.import_params() - } - - fn network_params(&self) -> Option<&NetworkParams> { - self.base.base.network_params() - } - - fn keystore_params(&self) -> Option<&KeystoreParams> { - self.base.base.keystore_params() - } - - fn base_path(&self) -> Result> { - Ok(self - .shared_params() - .base_path()? - .or_else(|| Some(self.base_path.clone().into()))) - } - - fn rpc_addr(&self, default_listen_port: u16) -> Result> { - self.base.base.rpc_addr(default_listen_port) - } - - fn prometheus_config( - &self, - default_listen_port: u16, - chain_spec: &Box, - ) -> Result> { - self.base - .base - .prometheus_config(default_listen_port, chain_spec) - } - - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &sc_service::Configuration, - ) -> Result<()> - where - F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), - { - unreachable!("PolkadotCli is never initialized; qed"); - } - - fn chain_id(&self, is_dev: bool) -> Result { - let chain_id = self.base.base.chain_id(is_dev)?; - - Ok(if chain_id.is_empty() { - self.chain_id.clone().unwrap_or_default() - } else { - chain_id - }) - } - - fn role(&self, is_dev: bool) -> Result { - self.base.base.role(is_dev) - } - - fn transaction_pool(&self, is_dev: bool) -> Result { - self.base.base.transaction_pool(is_dev) - } - - fn trie_cache_maximum_size(&self) -> Result> { - self.base.base.trie_cache_maximum_size() - } - - fn rpc_methods(&self) -> Result { - self.base.base.rpc_methods() - } - - fn rpc_max_connections(&self) -> Result { - self.base.base.rpc_max_connections() - } - - fn rpc_cors(&self, is_dev: bool) -> Result>> { - self.base.base.rpc_cors(is_dev) - } - - fn default_heap_pages(&self) -> Result> { - self.base.base.default_heap_pages() - } - - fn force_authoring(&self) -> Result { - self.base.base.force_authoring() - } - - fn disable_grandpa(&self) -> Result { - self.base.base.disable_grandpa() - } - - fn max_runtime_instances(&self) -> Result> { - self.base.base.max_runtime_instances() - } - - fn announce_block(&self) -> Result { - self.base.base.announce_block() - } - - fn telemetry_endpoints( - &self, - chain_spec: &Box, - ) -> Result> { - self.base.base.telemetry_endpoints(chain_spec) - } - - fn node_name(&self) -> Result { - self.base.base.node_name() - } -} diff --git a/container-chains/nodes/frontier/src/main.rs b/container-chains/nodes/frontier/src/main.rs deleted file mode 100644 index 984f332..0000000 --- a/container-chains/nodes/frontier/src/main.rs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Substrate Parachain Node Template CLI - -#![warn(missing_docs)] - -mod chain_spec; -mod cli; -mod command; -mod rpc; -mod service; - -fn main() -> sc_cli::Result<()> { - command::run() -} diff --git a/container-chains/nodes/frontier/src/rpc/eth.rs b/container-chains/nodes/frontier/src/rpc/eth.rs deleted file mode 100644 index 7a9597e..0000000 --- a/container-chains/nodes/frontier/src/rpc/eth.rs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - sc_network::NetworkService, - sc_network_sync::SyncingService, - sc_transaction_pool::{ChainApi, Pool}, - sp_core::H256, - sp_runtime::traits::Block as BlockT, - std::{collections::BTreeMap, sync::Arc}, -}; -// Frontier -use fc_db::Backend as FrontierBackend; -pub use { - fc_rpc::{EthBlockDataCacheTask, OverrideHandle}, - fc_rpc_core::types::{FeeHistoryCache, FeeHistoryCacheLimit, FilterPool}, - fc_storage::overrides_handle, -}; - -/// Extra dependencies for Ethereum compatibility. -pub struct EthDeps { - /// The client instance to use. - pub client: Arc, - /// Transaction pool instance. - pub pool: Arc

, - /// Graph pool instance. - pub graph: Arc>, - /// Ethereum transaction converter. - pub converter: Option, - /// The Node authority flag - pub is_authority: bool, - /// Whether to enable dev signer - pub enable_dev_signer: bool, - /// Network service - pub network: Arc>, - /// Chain syncing service - pub sync: Arc>, - /// Frontier Backend. - pub frontier_backend: Arc>, - /// Ethereum data access overrides. - pub overrides: Arc>, - /// Cache for Ethereum block data. - pub block_data_cache: Arc>, - /// EthFilterApi pool. - pub filter_pool: Option, - /// Maximum number of logs in a query. - pub max_past_logs: u32, - /// Fee history cache. - pub fee_history_cache: FeeHistoryCache, - /// Maximum fee history cache size. - pub fee_history_cache_limit: FeeHistoryCacheLimit, - /// Maximum allowed gas limit will be ` block.gas_limit * execute_gas_limit_multiplier` when - /// using eth_call/eth_estimateGas. - pub execute_gas_limit_multiplier: u64, - /// Mandated parent hashes for a given block hash. - pub forced_parent_hashes: Option>, -} - -impl Clone for EthDeps { - fn clone(&self) -> Self { - Self { - client: self.client.clone(), - pool: self.pool.clone(), - graph: self.graph.clone(), - converter: self.converter.clone(), - is_authority: self.is_authority, - enable_dev_signer: self.enable_dev_signer, - network: self.network.clone(), - sync: self.sync.clone(), - frontier_backend: self.frontier_backend.clone(), - overrides: self.overrides.clone(), - block_data_cache: self.block_data_cache.clone(), - filter_pool: self.filter_pool.clone(), - max_past_logs: self.max_past_logs, - fee_history_cache: self.fee_history_cache.clone(), - fee_history_cache_limit: self.fee_history_cache_limit, - execute_gas_limit_multiplier: self.execute_gas_limit_multiplier, - forced_parent_hashes: self.forced_parent_hashes.clone(), - } - } -} diff --git a/container-chains/nodes/frontier/src/rpc/finality.rs b/container-chains/nodes/frontier/src/rpc/finality.rs deleted file mode 100644 index 65a2717..0000000 --- a/container-chains/nodes/frontier/src/rpc/finality.rs +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use fc_rpc::frontier_backend_client::{self, is_canon}; -use jsonrpsee::{core::RpcResult, proc_macros::rpc}; -use sp_blockchain::HeaderBackend; -use sp_core::H256; -use sp_runtime::traits::Block; -use std::{marker::PhantomData, sync::Arc}; - -#[rpc(server)] -#[async_trait::async_trait] -pub trait FrontierFinalityApi { - /// Reports whether a Substrate or Ethereum block is finalized. - /// Returns false if the block is not found. - #[method(name = "frnt_isBlockFinalized")] - async fn is_block_finalized(&self, block_hash: H256) -> RpcResult; - - /// Reports whether an Ethereum transaction is finalized. - /// Returns false if the transaction is not found - #[method(name = "frnt_isTxFinalized")] - async fn is_tx_finalized(&self, tx_hash: H256) -> RpcResult; -} - -pub struct FrontierFinality { - pub backend: Arc>, - pub client: Arc, - _phdata: PhantomData, -} - -impl FrontierFinality { - pub fn new(client: Arc, backend: Arc>) -> Self { - Self { - backend, - client, - _phdata: Default::default(), - } - } -} - -#[async_trait::async_trait] -impl FrontierFinalityApiServer for FrontierFinality -where - B: Block, - C: HeaderBackend + Send + Sync + 'static, -{ - async fn is_block_finalized(&self, raw_hash: H256) -> RpcResult { - let client = self.client.clone(); - is_block_finalized_inner::(self.backend.as_ref(), &client, raw_hash).await - } - - async fn is_tx_finalized(&self, tx_hash: H256) -> RpcResult { - let client = self.client.clone(); - - if let Some((ethereum_block_hash, _ethereum_index)) = - frontier_backend_client::load_transactions::( - &client, - self.backend.as_ref(), - tx_hash, - true, - ) - .await? - { - is_block_finalized_inner::(self.backend.as_ref(), &client, ethereum_block_hash) - .await - } else { - Ok(false) - } - } -} - -async fn is_block_finalized_inner, C: HeaderBackend + 'static>( - backend: &(dyn fc_api::Backend), - client: &C, - raw_hash: H256, -) -> RpcResult { - let substrate_hash = - match frontier_backend_client::load_hash::(client, backend, raw_hash).await? { - // If we find this hash in the frontier data base, we know it is an eth hash - Some(hash) => hash, - // Otherwise, we assume this is a Substrate hash. - None => raw_hash, - }; - - // First check whether the block is in the best chain - if !is_canon(client, substrate_hash) { - return Ok(false); - } - - // At this point we know the block in question is in the current best chain. - // It's just a question of whether it is in the finalized prefix or not - let query_height = client - .number(substrate_hash) - .expect("No sp_blockchain::Error should be thrown when looking up hash") - .expect("Block is already known to be canon, so it must be in the chain"); - let finalized_height = client.info().finalized_number; - - Ok(query_height <= finalized_height) -} diff --git a/container-chains/nodes/frontier/src/rpc/mod.rs b/container-chains/nodes/frontier/src/rpc/mod.rs deleted file mode 100644 index add2706..0000000 --- a/container-chains/nodes/frontier/src/rpc/mod.rs +++ /dev/null @@ -1,462 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! A collection of node-specific RPC methods. -//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer -//! used by Substrate nodes. This file extends those RPC definitions with -//! capabilities that are specific to this project's runtime configuration. - -#![warn(missing_docs)] - -pub use sc_rpc::{DenyUnsafe, SubscriptionTaskExecutor}; - -use { - container_chain_template_frontier_runtime::{opaque::Block, AccountId, Hash, Index}, - cumulus_client_parachain_inherent::ParachainInherentData, - cumulus_primitives_core::{ParaId, PersistedValidationData}, - cumulus_test_relay_sproof_builder::RelayStateSproofBuilder, - fc_rpc::{EthTask, TxPool}, - fc_rpc_core::TxPoolApiServer, - fp_rpc::EthereumRuntimeRPCApi, - futures::StreamExt, - jsonrpsee::RpcModule, - manual_xcm_rpc::{ManualXcm, ManualXcmApiServer}, - sc_client_api::{ - backend::{Backend, StateBackend}, - client::BlockchainEvents, - AuxStore, BlockOf, StorageProvider, - }, - sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApiServer}, - sc_network::NetworkService, - sc_network_sync::SyncingService, - sc_service::TaskManager, - sc_transaction_pool::{ChainApi, Pool}, - sc_transaction_pool_api::TransactionPool, - sp_api::{CallApiAt, ProvideRuntimeApi}, - sp_block_builder::BlockBuilder, - sp_blockchain::{ - Backend as BlockchainBackend, Error as BlockChainError, HeaderBackend, HeaderMetadata, - }, - sp_consensus_aura::SlotDuration, - sp_core::H256, - sp_runtime::traits::{BlakeTwo256, Block as BlockT, Header as HeaderT}, - std::{sync::Arc, time::Duration}, -}; -pub struct DefaultEthConfig(std::marker::PhantomData<(C, BE)>); - -impl fc_rpc::EthConfig for DefaultEthConfig -where - C: StorageProvider + Sync + Send + 'static, - BE: Backend + 'static, -{ - type EstimateGasAdapter = (); - type RuntimeStorageOverride = - fc_rpc::frontier_backend_client::SystemAccountId20StorageOverride; -} - -mod eth; -pub use eth::*; -mod finality; - -/// Full client dependencies. -pub struct FullDeps { - /// The client instance to use. - pub client: Arc, - /// Transaction pool instance. - pub pool: Arc

, - /// Graph pool instance. - pub graph: Arc>, - /// Whether to deny unsafe calls - pub deny_unsafe: DenyUnsafe, - /// Network service - pub network: Arc>, - /// Chain syncing service - pub sync: Arc>, - /// EthFilterApi pool. - pub filter_pool: Option, - /// Frontier Backend. - // TODO: log indexer? - pub frontier_backend: Arc>, - /// Backend. - pub backend: Arc, - /// Maximum number of logs in a query. - pub max_past_logs: u32, - /// Maximum fee history cache size. - pub fee_history_limit: u64, - /// Fee history cache. - pub fee_history_cache: FeeHistoryCache, - /// Ethereum data access overrides. - pub overrides: Arc>, - /// Cache for Ethereum block data. - pub block_data_cache: Arc>, - /// The Node authority flag - pub is_authority: bool, - /// Manual seal command sink - pub command_sink: Option>>, - /// Channels for manual xcm messages (downward, hrmp) - pub xcm_senders: Option<(flume::Sender>, flume::Sender<(ParaId, Vec)>)>, -} - -/// Instantiate all Full RPC extensions. -pub fn create_full( - deps: FullDeps, - subscription_task_executor: SubscriptionTaskExecutor, - pubsub_notification_sinks: Arc< - fc_mapping_sync::EthereumBlockNotificationSinks< - fc_mapping_sync::EthereumBlockNotification, - >, - >, -) -> Result, Box> -where - BE: Backend + 'static, - BE::State: StateBackend, - BE::Blockchain: BlockchainBackend, - C: ProvideRuntimeApi + StorageProvider + AuxStore, - C: BlockchainEvents, - C: HeaderBackend + HeaderMetadata + 'static, - C: CallApiAt, - C: Send + Sync + 'static, - A: ChainApi + 'static, - C::Api: RuntimeApiCollection, - P: TransactionPool + 'static, -{ - use finality::{FrontierFinality, FrontierFinalityApiServer}; - use { - fc_rpc::{ - Eth, EthApiServer, EthFilter, EthFilterApiServer, EthPubSub, EthPubSubApiServer, Net, - NetApiServer, Web3, Web3ApiServer, - }, - substrate_frame_rpc_system::{System, SystemApiServer}, - }; - - let mut io = RpcModule::new(()); - let FullDeps { - client, - pool, - graph, - deny_unsafe, - network, - sync, - filter_pool, - frontier_backend, - backend: _, - max_past_logs, - fee_history_limit, - fee_history_cache, - overrides, - block_data_cache, - is_authority, - command_sink, - xcm_senders, - } = deps; - - io.merge(System::new(Arc::clone(&client), Arc::clone(&pool), deny_unsafe).into_rpc())?; - - // TODO: are we supporting signing? - let signers = Vec::new(); - - enum Never {} - impl fp_rpc::ConvertTransaction for Never { - fn convert_transaction(&self, _transaction: pallet_ethereum::Transaction) -> T { - // The Never type is not instantiable, but this method requires the type to be - // instantiated to be called (`&self` parameter), so if the code compiles we have the - // guarantee that this function will never be called. - unreachable!() - } - } - let convert_transaction: Option = None; - let authorities = vec![tc_consensus::get_aura_id_from_seed("alice")]; - let authorities_for_cdp = authorities.clone(); - - let pending_create_inherent_data_providers = move |_, _| { - let authorities_for_cidp = authorities.clone(); - - async move { - let mocked_authorities_noting = - ccp_authorities_noting_inherent::MockAuthoritiesNotingInherentDataProvider { - current_para_block: 1000, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - orchestrator_para_id: 1000u32.into(), - container_para_id: 2000u32.into(), - authorities: authorities_for_cidp, - }; - - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - // Create a dummy parachain inherent data provider which is required to pass - // the checks by the para chain system. We use dummy values because in the 'pending context' - // neither do we have access to the real values nor do we need them. - let (relay_parent_storage_root, relay_chain_state) = RelayStateSproofBuilder { - additional_key_values: mocked_authorities_noting.get_key_values(), - ..Default::default() - } - .into_state_root_and_proof(); - let vfp = PersistedValidationData { - // This is a hack to make `cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases` - // happy. Relay parent number can't be bigger than u32::MAX. - relay_parent_number: u32::MAX, - relay_parent_storage_root, - ..Default::default() - }; - let parachain_inherent_data = ParachainInherentData { - validation_data: vfp, - relay_chain_state, - downward_messages: Default::default(), - horizontal_messages: Default::default(), - }; - Ok(( - timestamp, - parachain_inherent_data, - mocked_authorities_noting, - )) - } - }; - - let pending_consensus_data_provider_frontier: Option< - Box<(dyn fc_rpc::pending::ConsensusDataProvider<_>)>, - > = Some(Box::new( - tc_consensus::ContainerManualSealAuraConsensusDataProvider::new( - SlotDuration::from_millis(container_chain_template_frontier_runtime::SLOT_DURATION), - authorities_for_cdp, - ), - )); - - io.merge( - Eth::<_, _, _, _, _, _, _, DefaultEthConfig>::new( - Arc::clone(&client), - Arc::clone(&pool), - Arc::clone(&graph), - convert_transaction, - Arc::clone(&sync), - signers, - Arc::clone(&overrides), - Arc::clone(&frontier_backend), - is_authority, - Arc::clone(&block_data_cache), - fee_history_cache, - fee_history_limit, - 10, - None, - pending_create_inherent_data_providers, - pending_consensus_data_provider_frontier, - ) - .into_rpc(), - )?; - - let tx_pool = TxPool::new(client.clone(), graph.clone()); - if let Some(filter_pool) = filter_pool { - io.merge( - EthFilter::new( - client.clone(), - frontier_backend.clone(), - graph, - filter_pool, - 500_usize, // max stored filters - max_past_logs, - block_data_cache, - ) - .into_rpc(), - )?; - } - - io.merge( - Net::new( - Arc::clone(&client), - network, - // Whether to format the `peer_count` response as Hex (default) or not. - true, - ) - .into_rpc(), - )?; - - if let Some(command_sink) = command_sink { - io.merge( - // We provide the rpc handler with the sending end of the channel to allow the rpc - // send EngineCommands to the background block authorship task. - ManualSeal::new(command_sink).into_rpc(), - )?; - }; - - io.merge(Web3::new(Arc::clone(&client)).into_rpc())?; - io.merge( - EthPubSub::new( - pool, - Arc::clone(&client), - sync, - subscription_task_executor, - overrides, - pubsub_notification_sinks, - ) - .into_rpc(), - )?; - io.merge(tx_pool.into_rpc())?; - - if let Some((downward_message_channel, hrmp_message_channel)) = xcm_senders { - io.merge( - ManualXcm { - downward_message_channel, - hrmp_message_channel, - } - .into_rpc(), - )?; - } - - io.merge(FrontierFinality::new(client.clone(), frontier_backend.clone()).into_rpc())?; - - Ok(io) -} - -pub struct SpawnTasksParams<'a, B: BlockT, C, BE> { - pub task_manager: &'a TaskManager, - pub client: Arc, - pub substrate_backend: Arc, - pub frontier_backend: fc_db::Backend, - pub filter_pool: Option, - pub overrides: Arc>, - pub fee_history_limit: u64, - pub fee_history_cache: FeeHistoryCache, - /// Chain syncing service - pub sync_service: Arc>, - /// Chain syncing service - pub pubsub_notification_sinks: Arc< - fc_mapping_sync::EthereumBlockNotificationSinks< - fc_mapping_sync::EthereumBlockNotification, - >, - >, -} - -use fc_mapping_sync::{kv::MappingSyncWorker, SyncStrategy}; -/// Spawn the tasks that are required to run Moonbeam. -pub fn spawn_essential_tasks(params: SpawnTasksParams) -where - C: ProvideRuntimeApi + BlockOf, - C: HeaderBackend + HeaderMetadata + 'static, - C: BlockchainEvents + StorageProvider, - C: Send + Sync + 'static, - C::Api: EthereumRuntimeRPCApi, - C::Api: BlockBuilder, - B: BlockT + Send + Sync + 'static, - B::Header: HeaderT, - BE: Backend + 'static, - BE::State: StateBackend, -{ - // Frontier offchain DB task. Essential. - // Maps emulated ethereum data to substrate native data. - match params.frontier_backend { - fc_db::Backend::KeyValue(b) => { - params.task_manager.spawn_essential_handle().spawn( - "frontier-mapping-sync-worker", - Some("frontier"), - MappingSyncWorker::new( - params.client.import_notification_stream(), - Duration::new(6, 0), - params.client.clone(), - params.substrate_backend.clone(), - params.overrides.clone(), - Arc::new(b), - 3, - 0, - SyncStrategy::Parachain, - params.sync_service.clone(), - params.pubsub_notification_sinks.clone(), - ) - .for_each(|()| futures::future::ready(())), - ); - } - fc_db::Backend::Sql(b) => { - params.task_manager.spawn_essential_handle().spawn_blocking( - "frontier-mapping-sync-worker", - Some("frontier"), - fc_mapping_sync::sql::SyncWorker::run( - params.client.clone(), - params.substrate_backend.clone(), - Arc::new(b), - params.client.import_notification_stream(), - fc_mapping_sync::sql::SyncWorkerConfig { - read_notification_timeout: Duration::from_secs(10), - check_indexed_blocks_interval: Duration::from_secs(60), - }, - fc_mapping_sync::SyncStrategy::Parachain, - params.sync_service.clone(), - params.pubsub_notification_sinks.clone(), - ), - ); - } - } - - // Frontier `EthFilterApi` maintenance. - // Manages the pool of user-created Filters. - if let Some(filter_pool) = params.filter_pool { - // Each filter is allowed to stay in the pool for 100 blocks. - // TODO: Re-visit this assumption with parathreads, as they - // might have a block every good amount of time, and can be abused - // likely we will need to implement a time-based filter - const FILTER_RETAIN_THRESHOLD: u64 = 100; - params.task_manager.spawn_essential_handle().spawn( - "frontier-filter-pool", - Some("frontier"), - EthTask::filter_pool_task( - Arc::clone(¶ms.client), - filter_pool, - FILTER_RETAIN_THRESHOLD, - ), - ); - } - - // Spawn Frontier FeeHistory cache maintenance task. - params.task_manager.spawn_essential_handle().spawn( - "frontier-fee-history", - Some("frontier"), - EthTask::fee_history_task( - Arc::clone(¶ms.client), - Arc::clone(¶ms.overrides), - params.fee_history_cache, - params.fee_history_limit, - ), - ); -} - -/// A set of APIs that polkadot-like runtimes must implement. -/// -/// This trait has no methods or associated type. It is a concise marker for all the trait bounds -/// that it contains. -pub trait RuntimeApiCollection: - sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_api::ApiExt - + sp_block_builder::BlockBuilder - + substrate_frame_rpc_system::AccountNonceApi - + sp_api::Metadata - + sp_offchain::OffchainWorkerApi - + sp_session::SessionKeys - + fp_rpc::ConvertTransactionRuntimeApi - + fp_rpc::EthereumRuntimeRPCApi - + cumulus_primitives_core::CollectCollationInfo -{ -} - -impl RuntimeApiCollection for Api where - Api: sp_transaction_pool::runtime_api::TaggedTransactionQueue - + sp_api::ApiExt - + sp_block_builder::BlockBuilder - + substrate_frame_rpc_system::AccountNonceApi - + sp_api::Metadata - + sp_offchain::OffchainWorkerApi - + sp_session::SessionKeys - + fp_rpc::ConvertTransactionRuntimeApi - + fp_rpc::EthereumRuntimeRPCApi - + cumulus_primitives_core::CollectCollationInfo -{ -} diff --git a/container-chains/nodes/frontier/src/service.rs b/container-chains/nodes/frontier/src/service.rs deleted file mode 100644 index f28ac64..0000000 --- a/container-chains/nodes/frontier/src/service.rs +++ /dev/null @@ -1,530 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. - -#[allow(deprecated)] -use { - container_chain_template_frontier_runtime::{opaque::Block, RuntimeApi}, - cumulus_client_cli::CollatorOptions, - cumulus_client_consensus_common::ParachainBlockImport as TParachainBlockImport, - cumulus_client_parachain_inherent::{MockValidationDataInherentDataProvider, MockXcmConfig}, - cumulus_client_service::prepare_node_config, - cumulus_primitives_core::{relay_chain::well_known_keys as RelayWellKnownKeys, ParaId}, - fc_consensus::FrontierBlockImport, - fc_db::DatabaseSource, - fc_rpc_core::types::{FeeHistoryCache, FilterPool}, - nimbus_primitives::NimbusId, - node_common::service::{ManualSealConfiguration, NodeBuilder, NodeBuilderConfig, Sealing}, - parity_scale_codec::Encode, - polkadot_parachain_primitives::primitives::HeadData, - sc_consensus::BasicQueue, - sc_executor::WasmExecutor, - sc_service::{Configuration, TFullBackend, TFullClient, TaskManager}, - sp_blockchain::HeaderBackend, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::{Pair, H256}, - std::{ - collections::BTreeMap, - sync::{Arc, Mutex}, - time::Duration, - }, -}; - -type ParachainExecutor = WasmExecutor; -type ParachainClient = TFullClient; -type ParachainBackend = TFullBackend; -type ParachainBlockImport = TParachainBlockImport< - Block, - FrontierBlockImport, ParachainClient>, - ParachainBackend, ->; - -pub struct NodeConfig; -impl NodeBuilderConfig for NodeConfig { - type Block = Block; - type RuntimeApi = RuntimeApi; - type ParachainExecutor = ParachainExecutor; -} - -pub fn frontier_database_dir(config: &Configuration, path: &str) -> std::path::PathBuf { - let config_dir = config - .base_path - .config_dir(config.chain_spec.id()) - .join("frontier") - .join(path); - - config_dir -} - -// TODO This is copied from frontier. It should be imported instead after -// https://github.com/paritytech/frontier/issues/333 is solved -pub fn open_frontier_backend( - client: Arc, - config: &Configuration, -) -> Result, String> -where - C: sp_blockchain::HeaderBackend, -{ - fc_db::kv::Backend::::new( - client, - &fc_db::kv::DatabaseSettings { - source: match config.database { - DatabaseSource::RocksDb { .. } => DatabaseSource::RocksDb { - path: frontier_database_dir(config, "db"), - cache_size: 0, - }, - DatabaseSource::ParityDb { .. } => DatabaseSource::ParityDb { - path: frontier_database_dir(config, "paritydb"), - }, - DatabaseSource::Auto { .. } => DatabaseSource::Auto { - rocksdb_path: frontier_database_dir(config, "db"), - paritydb_path: frontier_database_dir(config, "paritydb"), - cache_size: 0, - }, - _ => { - return Err("Supported db sources: `rocksdb` | `paritydb` | `auto`".to_string()) - } - }, - }, - ) -} - -thread_local!(static TIMESTAMP: std::cell::RefCell = const { std::cell::RefCell::new(0) }); - -/// Provide a mock duration starting at 0 in millisecond for timestamp inherent. -/// Each call will increment timestamp by slot_duration making Aura think time has passed. -struct MockTimestampInherentDataProvider; -#[async_trait::async_trait] -impl sp_inherents::InherentDataProvider for MockTimestampInherentDataProvider { - async fn provide_inherent_data( - &self, - inherent_data: &mut sp_inherents::InherentData, - ) -> Result<(), sp_inherents::Error> { - TIMESTAMP.with(|x| { - *x.borrow_mut() += container_chain_template_frontier_runtime::SLOT_DURATION; - inherent_data.put_data(sp_timestamp::INHERENT_IDENTIFIER, &*x.borrow()) - }) - } - - async fn try_handle_error( - &self, - _identifier: &sp_inherents::InherentIdentifier, - _error: &[u8], - ) -> Option> { - // The pallet never reports error. - None - } -} - -pub fn import_queue( - parachain_config: &Configuration, - node_builder: &NodeBuilder, -) -> (ParachainBlockImport, BasicQueue) { - let frontier_block_import = - FrontierBlockImport::new(node_builder.client.clone(), node_builder.client.clone()); - - // The parachain block import and import queue - let block_import = cumulus_client_consensus_common::ParachainBlockImport::new( - frontier_block_import, - node_builder.backend.clone(), - ); - let import_queue = nimbus_consensus::import_queue( - node_builder.client.clone(), - block_import.clone(), - move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - Ok((time,)) - }, - &node_builder.task_manager.spawn_essential_handle(), - parachain_config.prometheus_registry(), - false, - ) - .expect("function never fails"); - - (block_import, import_queue) -} - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with("Parachain")] -async fn start_node_impl( - parachain_config: Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, - para_id: ParaId, - rpc_config: crate::cli::RpcConfig, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc)> { - let parachain_config = prepare_node_config(parachain_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let mut node_builder = NodeConfig::new_builder(¶chain_config, hwbench.clone())?; - - // Frontier specific stuff - let filter_pool: Option = Some(Arc::new(Mutex::new(BTreeMap::new()))); - let fee_history_cache: FeeHistoryCache = Arc::new(Mutex::new(BTreeMap::new())); - let frontier_backend = fc_db::Backend::KeyValue(open_frontier_backend( - node_builder.client.clone(), - ¶chain_config, - )?); - let overrides = crate::rpc::overrides_handle(node_builder.client.clone()); - let fee_history_limit = rpc_config.fee_history_limit; - - let pubsub_notification_sinks: fc_mapping_sync::EthereumBlockNotificationSinks< - fc_mapping_sync::EthereumBlockNotification, - > = Default::default(); - let pubsub_notification_sinks = Arc::new(pubsub_notification_sinks); - - let (_, import_queue) = import_queue(¶chain_config, &node_builder); - - // Relay chain interface - let (relay_chain_interface, _collator_key) = node_builder - .build_relay_chain_interface(¶chain_config, polkadot_config, collator_options.clone()) - .await?; - - // Build cumulus network, allowing to access network-related services. - let node_builder = node_builder - .build_cumulus_network( - ¶chain_config, - para_id, - import_queue, - relay_chain_interface.clone(), - ) - .await?; - - crate::rpc::spawn_essential_tasks(crate::rpc::SpawnTasksParams { - task_manager: &node_builder.task_manager, - client: node_builder.client.clone(), - substrate_backend: node_builder.backend.clone(), - frontier_backend: frontier_backend.clone(), - filter_pool: filter_pool.clone(), - overrides: overrides.clone(), - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - sync_service: node_builder.network.sync_service.clone(), - pubsub_notification_sinks: pubsub_notification_sinks.clone(), - }); - - let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( - node_builder.task_manager.spawn_handle(), - overrides.clone(), - rpc_config.eth_log_block_cache, - rpc_config.eth_statuses_cache, - node_builder.prometheus_registry.clone(), - )); - - let rpc_builder = { - let client = node_builder.client.clone(); - let pool = node_builder.transaction_pool.clone(); - let pubsub_notification_sinks = pubsub_notification_sinks; - let network = node_builder.network.network.clone(); - let sync = node_builder.network.sync_service.clone(); - let filter_pool = filter_pool.clone(); - let frontier_backend = frontier_backend.clone(); - let backend = node_builder.backend.clone(); - let max_past_logs = rpc_config.max_past_logs; - let overrides = overrides; - let fee_history_cache = fee_history_cache.clone(); - let block_data_cache = block_data_cache; - - Box::new(move |deny_unsafe, subscription_task_executor| { - let deps = crate::rpc::FullDeps { - backend: backend.clone(), - client: client.clone(), - deny_unsafe, - filter_pool: filter_pool.clone(), - frontier_backend: match frontier_backend.clone() { - fc_db::Backend::KeyValue(b) => Arc::new(b), - fc_db::Backend::Sql(b) => Arc::new(b), - }, - graph: pool.pool().clone(), - pool: pool.clone(), - max_past_logs, - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - network: network.clone(), - sync: sync.clone(), - block_data_cache: block_data_cache.clone(), - overrides: overrides.clone(), - is_authority: false, - command_sink: None, - xcm_senders: None, - }; - crate::rpc::create_full( - deps, - subscription_task_executor, - pubsub_notification_sinks.clone(), - ) - .map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - let relay_chain_slot_duration = Duration::from_secs(6); - let node_builder = node_builder.start_full_node( - para_id, - relay_chain_interface.clone(), - relay_chain_slot_duration, - )?; - - node_builder.network.start_network.start_network(); - - Ok((node_builder.task_manager, node_builder.client)) -} - -/// Start a parachain node. -pub async fn start_parachain_node( - parachain_config: Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, - para_id: ParaId, - rpc_config: crate::cli::RpcConfig, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc)> { - start_node_impl( - parachain_config, - polkadot_config, - collator_options, - para_id, - rpc_config, - hwbench, - ) - .await -} - -/// Helper function to generate a crypto pair from seed -fn get_aura_id_from_seed(seed: &str) -> NimbusId { - sp_core::sr25519::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() - .into() -} - -/// Builds a new development service. This service uses manual seal, and mocks -/// the parachain inherent. -pub async fn start_dev_node( - parachain_config: Configuration, - sealing: Sealing, - rpc_config: crate::cli::RpcConfig, - para_id: ParaId, - hwbench: Option, -) -> Result { - // TODO: Not present before, is this wanted and was forgotten? - // let parachain_config = prepare_node_config(parachain_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let node_builder = NodeConfig::new_builder(¶chain_config, hwbench)?; - - // Frontier specific stuff - let filter_pool: Option = Some(Arc::new(Mutex::new(BTreeMap::new()))); - let fee_history_cache: FeeHistoryCache = Arc::new(Mutex::new(BTreeMap::new())); - let frontier_backend = fc_db::Backend::KeyValue(open_frontier_backend( - node_builder.client.clone(), - ¶chain_config, - )?); - let overrides = crate::rpc::overrides_handle(node_builder.client.clone()); - let fee_history_limit = rpc_config.fee_history_limit; - - let pubsub_notification_sinks: fc_mapping_sync::EthereumBlockNotificationSinks< - fc_mapping_sync::EthereumBlockNotification, - > = Default::default(); - let pubsub_notification_sinks = Arc::new(pubsub_notification_sinks); - - let (parachain_block_import, import_queue) = import_queue(¶chain_config, &node_builder); - - // Build a Substrate Network. (not cumulus since it is a dev node, it mocks - // the relaychain) - let mut node_builder = node_builder.build_substrate_network(¶chain_config, import_queue)?; - - let mut command_sink = None; - let mut xcm_senders = None; - - if parachain_config.role.is_authority() { - let client = node_builder.client.clone(); - let (downward_xcm_sender, downward_xcm_receiver) = flume::bounded::>(100); - let (hrmp_xcm_sender, hrmp_xcm_receiver) = flume::bounded::<(ParaId, Vec)>(100); - xcm_senders = Some((downward_xcm_sender, hrmp_xcm_sender)); - - let authorities = vec![get_aura_id_from_seed("alice")]; - - command_sink = node_builder.install_manual_seal(ManualSealConfiguration { - block_import: parachain_block_import, - sealing, - soft_deadline: None, - select_chain: sc_consensus::LongestChain::new(node_builder.backend.clone()), - consensus_data_provider: Some(Box::new( - tc_consensus::ContainerManualSealAuraConsensusDataProvider::new( - SlotDuration::from_millis( - container_chain_template_frontier_runtime::SLOT_DURATION, - ), - authorities.clone(), - ), - )), - create_inherent_data_providers: move |block: H256, ()| { - let current_para_block = client - .number(block) - .expect("Header lookup should succeed") - .expect("Header passed in as parent should be present in backend."); - - let hash = client - .hash(current_para_block.saturating_sub(1)) - .expect("Hash of the desired block must be present") - .expect("Hash of the desired block should exist"); - - let para_header = client - .expect_header(hash) - .expect("Expected parachain header should exist") - .encode(); - - let para_head_data: Vec = HeadData(para_header).encode(); - let client_for_xcm = client.clone(); - let authorities_for_cidp = authorities.clone(); - let para_head_key = RelayWellKnownKeys::para_head(para_id); - let relay_slot_key = RelayWellKnownKeys::CURRENT_SLOT.to_vec(); - let slot_duration = container_chain_template_frontier_runtime::SLOT_DURATION; - - let mut timestamp = 0u64; - TIMESTAMP.with(|x| { - timestamp = x.clone().take(); - }); - - timestamp += slot_duration; - - let relay_slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - timestamp.into(), - SlotDuration::from_millis(slot_duration), - ); - let relay_slot = u64::from(*relay_slot); - - let downward_xcm_receiver = downward_xcm_receiver.clone(); - let hrmp_xcm_receiver = hrmp_xcm_receiver.clone(); - - async move { - let mocked_authorities_noting = - ccp_authorities_noting_inherent::MockAuthoritiesNotingInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - orchestrator_para_id: crate::chain_spec::ORCHESTRATOR, - container_para_id: para_id, - authorities: authorities_for_cidp - }; - - let mut additional_keys = mocked_authorities_noting.get_key_values(); - additional_keys.append(&mut vec![(para_head_key, para_head_data), (relay_slot_key, Slot::from(relay_slot).encode())]); - - let time = MockTimestampInherentDataProvider; - let mocked_parachain = MockValidationDataInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - // TODO: Recheck - para_blocks_per_relay_epoch: 10, - relay_randomness_config: (), - xcm_config: MockXcmConfig::new( - &*client_for_xcm, - block, - para_id, - Default::default(), - ), - raw_downward_messages: downward_xcm_receiver.drain().collect(), - raw_horizontal_messages: hrmp_xcm_receiver.drain().collect(), - additional_key_values: Some(additional_keys), - }; - - Ok((time, mocked_parachain, mocked_authorities_noting)) - } - }, - })?; - } - - crate::rpc::spawn_essential_tasks(crate::rpc::SpawnTasksParams { - task_manager: &node_builder.task_manager, - client: node_builder.client.clone(), - substrate_backend: node_builder.backend.clone(), - frontier_backend: frontier_backend.clone(), - filter_pool: filter_pool.clone(), - overrides: overrides.clone(), - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - sync_service: node_builder.network.sync_service.clone(), - pubsub_notification_sinks: pubsub_notification_sinks.clone(), - }); - - let block_data_cache = Arc::new(fc_rpc::EthBlockDataCacheTask::new( - node_builder.task_manager.spawn_handle(), - overrides.clone(), - rpc_config.eth_log_block_cache, - rpc_config.eth_statuses_cache, - node_builder.prometheus_registry.clone(), - )); - - let rpc_builder = { - let client = node_builder.client.clone(); - let pool = node_builder.transaction_pool.clone(); - let pubsub_notification_sinks = pubsub_notification_sinks; - let network = node_builder.network.network.clone(); - let sync = node_builder.network.sync_service.clone(); - let filter_pool = filter_pool; - let frontier_backend = frontier_backend; - let backend = node_builder.backend.clone(); - let max_past_logs = rpc_config.max_past_logs; - let overrides = overrides; - let block_data_cache = block_data_cache; - - Box::new(move |deny_unsafe, subscription_task_executor| { - let deps = crate::rpc::FullDeps { - backend: backend.clone(), - client: client.clone(), - deny_unsafe, - filter_pool: filter_pool.clone(), - frontier_backend: match frontier_backend.clone() { - fc_db::Backend::KeyValue(b) => Arc::new(b), - fc_db::Backend::Sql(b) => Arc::new(b), - }, - graph: pool.pool().clone(), - pool: pool.clone(), - max_past_logs, - fee_history_limit, - fee_history_cache: fee_history_cache.clone(), - network: network.clone(), - sync: sync.clone(), - block_data_cache: block_data_cache.clone(), - overrides: overrides.clone(), - is_authority: false, - command_sink: command_sink.clone(), - xcm_senders: xcm_senders.clone(), - }; - crate::rpc::create_full( - deps, - subscription_task_executor, - pubsub_notification_sinks.clone(), - ) - .map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - log::info!("Development Service Ready"); - - node_builder.network.start_network.start_network(); - Ok(node_builder.task_manager) -} diff --git a/container-chains/nodes/simple/Cargo.toml b/container-chains/nodes/simple/Cargo.toml deleted file mode 100644 index 93f5ca0..0000000 --- a/container-chains/nodes/simple/Cargo.toml +++ /dev/null @@ -1,147 +0,0 @@ -[package] -name = "container-chain-simple-node" -authors = { workspace = true } -build = "build.rs" -description = "Simple container-chain template node" -edition = "2021" -license = "GPL-3.0-only" -version = "0.7.0" - -[lints] -workspace = true - -[dependencies] -async-io = { workspace = true } -async-trait = { workspace = true } -clap = { workspace = true, features = [ "derive" ] } -flume = { workspace = true } -futures = { workspace = true } -hex-literal = { workspace = true } -jsonrpsee = { workspace = true, features = [ "server" ] } -log = { workspace = true } -parity-scale-codec = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -serde_json = { workspace = true } -tokio = { workspace = true } -url = { workspace = true } - -# Dancekit -dc-orchestrator-chain-interface = { workspace = true } -dc-orchestrator-chain-rpc-interface = { workspace = true } -dp-core = { workspace = true } - -# Local -ccp-authorities-noting-inherent = { workspace = true } -container-chain-template-simple-runtime = { workspace = true, features = [ "std" ] } -manual-xcm-rpc = { workspace = true } -node-common = { workspace = true } -tc-consensus = { workspace = true } - -# Nimbus -nimbus-consensus = { workspace = true } -nimbus-primitives = { workspace = true, features = [ "std" ] } - -# Substrate -frame-benchmarking = { workspace = true } -frame-benchmarking-cli = { workspace = true } -sc-basic-authorship = { workspace = true } -sc-chain-spec = { workspace = true } -sc-cli = { workspace = true } -sc-client-api = { workspace = true } -sc-consensus = { workspace = true } -sc-consensus-manual-seal = { workspace = true } -sc-executor = { workspace = true } -sc-network = { workspace = true } -sc-network-common = { workspace = true } -sc-network-sync = { workspace = true } -sc-offchain = { workspace = true } -sc-rpc = { workspace = true } -sc-service = { workspace = true } -sc-sysinfo = { workspace = true } -sc-telemetry = { workspace = true } -sc-tracing = { workspace = true } -sc-transaction-pool = { workspace = true } -sc-transaction-pool-api = { workspace = true } -sp-api = { workspace = true, features = [ "std" ] } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true, features = [ "std" ] } -sp-inherents = { workspace = true, features = [ "std" ] } -sp-io = { workspace = true, features = [ "std" ] } -sp-keystore = { workspace = true, features = [ "std" ] } -sp-offchain = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } -sp-session = { workspace = true, features = [ "std" ] } -sp-timestamp = { workspace = true, features = [ "std" ] } - -sp-transaction-pool = { workspace = true } -substrate-frame-rpc-system = { workspace = true } -substrate-prometheus-endpoint = { workspace = true } -try-runtime-cli = { workspace = true, optional = true } - -# Polkadot -polkadot-cli = { workspace = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-primitives = { workspace = true } -polkadot-service = { workspace = true } - -# Cumulus -cumulus-client-cli = { workspace = true } -cumulus-client-consensus-aura = { workspace = true } -cumulus-client-consensus-common = { workspace = true } -cumulus-client-network = { workspace = true } -cumulus-client-parachain-inherent = { workspace = true } -cumulus-client-service = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-primitives-parachain-inherent = { workspace = true } -cumulus-relay-chain-interface = { workspace = true } - -pallet-shared-storage = { workspace = true } - -# profile valdiation rpc -profile-validation-runtime-api = { workspace = true } -profile-validation-rpc = { workspace = true } - - -# Department funding rpc -department-funding-runtime-api = { workspace = true } -department-funding-rpc= {workspace = true } - -# Postive exterality rpc -positive-externality-runtime-api = { workspace = true } -positive-externality-rpc= { workspace = true } - -# Project tip rpc -project-tips-runtime-api = { workspace = true } -project-tips-rpc= { workspace = true } - - -[build-dependencies] -substrate-build-script-utils = { workspace = true } - -[features] -default = [] -runtime-benchmarks = [ - "container-chain-template-simple-runtime/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "frame-benchmarking-cli/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "polkadot-cli/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-primitives/runtime-benchmarks", - "polkadot-service/runtime-benchmarks", - "sc-service/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", -] -try-runtime = [ - "container-chain-template-simple-runtime/try-runtime", - "nimbus-primitives/try-runtime", - "polkadot-cli/try-runtime", - "polkadot-service/try-runtime", - "sp-runtime/try-runtime", - "try-runtime-cli/try-runtime", -] diff --git a/container-chains/nodes/simple/build.rs b/container-chains/nodes/simple/build.rs deleted file mode 100644 index cbaa443..0000000 --- a/container-chains/nodes/simple/build.rs +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; - -fn main() { - generate_cargo_keys(); - - rerun_if_git_head_changed(); -} diff --git a/container-chains/nodes/simple/src/chain_spec.rs b/container-chains/nodes/simple/src/chain_spec.rs deleted file mode 100644 index a5df4a5..0000000 --- a/container-chains/nodes/simple/src/chain_spec.rs +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use hex_literal::hex; -use { - container_chain_template_simple_runtime::{ - AccountId, MaintenanceModeConfig, MigrationsConfig, PolkadotXcmConfig, Signature, - }, - cumulus_primitives_core::ParaId, - sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}, - sc_network::config::MultiaddrWithPeerId, - sc_service::ChainType, - serde::{Deserialize, Serialize}, - sp_core::{sr25519, Pair, Public}, - sp_runtime::traits::{IdentifyAccount, Verify}, -}; - -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type ChainSpec = sc_service::GenericChainSpec< - container_chain_template_simple_runtime::RuntimeGenesisConfig, - Extensions, ->; - -/// Helper function to generate a crypto pair from seed -pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() -} - -/// Orcherstrator's parachain id -pub const ORCHESTRATOR: ParaId = ParaId::new(1000); - -/// The extensions for the [`ChainSpec`]. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] -#[serde(deny_unknown_fields)] -pub struct Extensions { - /// The relay chain of the Parachain. - pub relay_chain: String, - /// The id of the Parachain. - pub para_id: u32, -} - -impl Extensions { - /// Try to get the extension from the given `ChainSpec`. - pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> { - sc_chain_spec::get_extension(chain_spec.extensions()) - } -} - -type AccountPublic = ::Signer; - -/// Helper function to generate an account ID from seed -pub fn get_account_id_from_seed(seed: &str) -> AccountId -where - AccountPublic: From<::Public>, -{ - AccountPublic::from(get_from_seed::(seed)).into_account() -} - -pub fn development_config(para_id: ParaId, boot_nodes: Vec) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "UNIT".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - - let mut default_funded_accounts = pre_funded_accounts(); - default_funded_accounts.sort(); - default_funded_accounts.dedup(); - let boot_nodes: Vec = boot_nodes - .into_iter() - .map(|x| { - x.parse::() - .unwrap_or_else(|e| panic!("invalid bootnode address format {:?}: {:?}", x, e)) - }) - .collect(); - - ChainSpec::builder( - container_chain_template_simple_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Development") - .with_id("dev") - .with_chain_type(ChainType::Development) - .with_genesis_config(testnet_genesis( - default_funded_accounts.clone(), - para_id, - get_account_id_from_seed::("Alice"), - )) - .with_properties(properties) - .with_boot_nodes(boot_nodes) - .build() -} - -pub fn local_testnet_config(para_id: ParaId, boot_nodes: Vec) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "UNIT".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - let protocol_id = format!("container-chain-{}", para_id); - - let mut default_funded_accounts = pre_funded_accounts(); - default_funded_accounts.sort(); - default_funded_accounts.dedup(); - let boot_nodes: Vec = boot_nodes - .into_iter() - .map(|x| { - x.parse::() - .unwrap_or_else(|e| panic!("invalid bootnode address format {:?}: {:?}", x, e)) - }) - .collect(); - - ChainSpec::builder( - container_chain_template_simple_runtime::WASM_BINARY - .expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name(&format!("Simple Container {}", para_id)) - .with_id(&format!("simple_container_{}", para_id)) - .with_chain_type(ChainType::Local) - .with_genesis_config(testnet_genesis( - default_funded_accounts.clone(), - para_id, - get_account_id_from_seed::("Alice"), - )) - .with_properties(properties) - .with_protocol_id(&protocol_id) - .with_boot_nodes(boot_nodes) - .build() -} - -fn testnet_genesis( - endowed_accounts: Vec, - id: ParaId, - root_key: AccountId, -) -> serde_json::Value { - let g = container_chain_template_simple_runtime::RuntimeGenesisConfig { - balances: container_chain_template_simple_runtime::BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 60)) - .collect(), - }, - parachain_info: container_chain_template_simple_runtime::ParachainInfoConfig { - parachain_id: id, - ..Default::default() - }, - parachain_system: Default::default(), - sudo: container_chain_template_simple_runtime::SudoConfig { - key: Some(root_key), - }, - authorities_noting: container_chain_template_simple_runtime::AuthoritiesNotingConfig { - orchestrator_para_id: ORCHESTRATOR, - ..Default::default() - }, - migrations: MigrationsConfig::default(), - maintenance_mode: MaintenanceModeConfig { - start_in_maintenance_mode: false, - ..Default::default() - }, - // This should initialize it to whatever we have set in the pallet - polkadot_xcm: PolkadotXcmConfig::default(), - transaction_payment: Default::default(), - tx_pause: Default::default(), - system: Default::default(), - shared_storage: Default::default(), - }; - - serde_json::to_value(g).unwrap() -} - -/// Get pre-funded accounts -pub fn pre_funded_accounts() -> Vec { - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - hex!("2e778beae3cc11fd7ea694f4ff8b54922d67e0599c356f393277ed9711d6364b").into(), - hex!("2e1c14cd13a2b090a62203809d8ce3eaac7417a4a0272438568eb04cae330669").into(), - hex!("ba0ce278d82ef9a686cb60a801125a8d11b32caa2456ebdcfe7ff687bb9bf540").into(), - hex!("600f10bdbf233ac6614eea62ae45d269b43c759e4ddf0bc1a70ffcbc95499c6c").into(), - hex!("c2da35a7aed402249295971abe8f10e0b03d861a0571e56115bcc6f8828dd939").into(), - hex!("186863b612097dec4ce7b9772381935baa7fc6dc7c44695f0384174f1b131156").into(), - hex!("70c3f87a26743fed9194f8fc67bfdd9a211f3b00f5c80459107022d096dbf928").into(), - hex!("cab4abef5dda97cc98eb0f3a5e0329bd2c1b892b5f442021a634c7e79e6f6e29").into(), - hex!("ac926b4e81989ca51c9ac6f0ef9c7db08d5334bb0a5c3b0194bf92d215b50f3f").into(), - hex!("186c72f04de9c1a74cee6836c08b6d56a88e90ab5a6127693a55379e8e03d919").into(), - hex!("b02de28c52fe59f9a3d8779cd8c6ee7439cba45e48e7ee582f5cc939c7b5946c").into(), - ] -} diff --git a/container-chains/nodes/simple/src/cli.rs b/container-chains/nodes/simple/src/cli.rs deleted file mode 100644 index 0472cab..0000000 --- a/container-chains/nodes/simple/src/cli.rs +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - clap::Parser, - node_common::service::Sealing, - sc_cli::{CliConfiguration, NodeKeyParams, SharedParams}, - std::path::PathBuf, - url::Url, -}; - -/// Sub-commands supported by the collator. -#[derive(Debug, clap::Subcommand)] -#[allow(clippy::large_enum_variant)] -pub enum Subcommand { - /// Build a chain specification. - BuildSpec(BuildSpecCmd), - - /// Validate blocks. - CheckBlock(sc_cli::CheckBlockCmd), - - /// Export blocks. - ExportBlocks(sc_cli::ExportBlocksCmd), - - /// Export the state of a given block into a chain spec. - ExportState(sc_cli::ExportStateCmd), - - /// Import blocks. - ImportBlocks(sc_cli::ImportBlocksCmd), - - /// Revert the chain to a previous state. - Revert(sc_cli::RevertCmd), - - /// Remove the whole chain. - PurgeChain(cumulus_client_cli::PurgeChainCmd), - - /// Export the genesis state of the parachain. - #[command(alias = "export-genesis-state")] - ExportGenesisHead(cumulus_client_cli::ExportGenesisHeadCommand), - - /// Export the genesis wasm of the parachain. - ExportGenesisWasm(cumulus_client_cli::ExportGenesisWasmCommand), - - /// Sub-commands concerned with benchmarking. - /// The pallet benchmarking moved to the `pallet` sub-command. - #[command(subcommand)] - Benchmark(frame_benchmarking_cli::BenchmarkCmd), - - /// Try some testing command against a specified runtime state. - #[cfg(feature = "try-runtime")] - TryRuntime(try_runtime_cli::TryRuntimeCmd), - - /// Errors since the binary was not build with `--features try-runtime`. - #[cfg(not(feature = "try-runtime"))] - TryRuntime, - - /// Precompile the WASM runtime into native code - PrecompileWasm(sc_cli::PrecompileWasmCmd), - - /// Starts in RPC provider mode, watching orchestrator chain for assignements to provide - /// RPC services for container chains. - RpcProvider(RpcProviderSubcommand), -} - -#[derive(Debug, Parser)] -#[group(skip)] -pub struct RunCmd { - #[clap(flatten)] - pub base: cumulus_client_cli::RunCmd, - - /// Id of the parachain this collator collates for. - #[arg(long)] - pub parachain_id: Option, - - /// When blocks should be sealed in the dev service. - /// - /// Options are "instant", "manual", or timer interval in milliseconds - #[arg(long, default_value = "instant")] - pub sealing: Sealing, -} - -impl std::ops::Deref for RunCmd { - type Target = cumulus_client_cli::RunCmd; - - fn deref(&self) -> &Self::Target { - &self.base - } -} - -#[derive(Debug, clap::Parser)] -#[command( - propagate_version = true, - args_conflicts_with_subcommands = true, - subcommand_negates_reqs = true -)] -pub struct Cli { - #[command(subcommand)] - pub subcommand: Option, - - #[command(flatten)] - pub run: RunCmd, - - /// Disable automatic hardware benchmarks. - /// - /// By default these benchmarks are automatically ran at startup and measure - /// the CPU speed, the memory bandwidth and the disk speed. - /// - /// The results are then printed out in the logs, and also sent as part of - /// telemetry, if telemetry is enabled. - #[arg(long)] - pub no_hardware_benchmarks: bool, - - /// Relay chain arguments - #[arg(raw = true)] - pub relay_chain_args: Vec, - - /// Optional parachain id that should be used to build chain spec. - #[arg(long)] - pub para_id: Option, -} - -#[derive(Debug)] -pub struct RelayChainCli { - /// The actual relay chain cli object. - pub base: polkadot_cli::RunCmd, - - /// Optional chain id that should be passed to the relay chain. - pub chain_id: Option, - - /// The base path that should be used by the relay chain. - pub base_path: PathBuf, -} - -impl RelayChainCli { - /// Parse the relay chain CLI parameters using the para chain `Configuration`. - pub fn new<'a>( - para_config: &sc_service::Configuration, - relay_chain_args: impl Iterator, - ) -> Self { - let extension = crate::chain_spec::Extensions::try_get(&*para_config.chain_spec); - let chain_id = extension.map(|e| e.relay_chain.clone()); - let base_path = para_config.base_path.path().join("polkadot"); - Self { - base_path, - chain_id, - base: clap::Parser::parse_from(relay_chain_args), - } - } -} - -/// The `build-spec` command used to build a specification. -#[derive(Debug, Clone, clap::Parser)] -pub struct BuildSpecCmd { - #[clap(flatten)] - pub base: sc_cli::BuildSpecCmd, - - /// Id of the parachain this spec is for. Note that this overrides the `--chain` param. - #[arg(long, conflicts_with = "chain")] - #[arg(long)] - pub parachain_id: Option, - - /// List of bootnodes to add to chain spec - #[arg(long)] - pub add_bootnode: Vec, -} - -impl CliConfiguration for BuildSpecCmd { - fn shared_params(&self) -> &SharedParams { - &self.base.shared_params - } - - fn node_key_params(&self) -> Option<&NodeKeyParams> { - Some(&self.base.node_key_params) - } -} - -#[derive(Debug, clap::Parser)] -#[group(skip)] -pub struct RpcProviderSubcommand { - /// Endpoints to connect to orchestrator nodes, avoiding to start a local orchestrator node. - /// If this list is empty, a local embeded orchestrator node is started. - #[arg(long)] - pub orchestrator_endpoints: Vec, - - /// Account associated with the node, whose assignements will be followed to provide RPC services. - #[arg(long)] - pub assignement_account: dp_core::AccountId, -} diff --git a/container-chains/nodes/simple/src/command.rs b/container-chains/nodes/simple/src/command.rs deleted file mode 100644 index fec9f44..0000000 --- a/container-chains/nodes/simple/src/command.rs +++ /dev/null @@ -1,531 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::{ - chain_spec, - cli::{Cli, RelayChainCli, Subcommand}, - service::{self, NodeConfig}, - }, - container_chain_template_simple_runtime::Block, - cumulus_primitives_core::ParaId, - dc_orchestrator_chain_interface::OrchestratorChainInterface, - frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}, - futures::stream::StreamExt, - log::{info, warn}, - node_common::{command::generate_genesis_block, service::NodeBuilderConfig as _}, - parity_scale_codec::Encode, - polkadot_service::{IdentifyVariant as _, TaskManager}, - sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, - NetworkParams, Result, SharedParams, SubstrateCli, - }, - sc_service::config::{BasePath, PrometheusConfig}, - sp_core::hexdisplay::HexDisplay, - sp_runtime::traits::{AccountIdConversion, Block as BlockT}, - std::net::SocketAddr, -}; - -fn load_spec(id: &str, para_id: ParaId) -> std::result::Result, String> { - Ok(match id { - "dev" => Box::new(chain_spec::development_config(para_id, vec![])), - "template-rococo" => Box::new(chain_spec::local_testnet_config(para_id, vec![])), - "" | "local" => Box::new(chain_spec::local_testnet_config(para_id, vec![])), - path => Box::new(chain_spec::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?), - }) -} - -impl SubstrateCli for Cli { - fn impl_name() -> String { - "Container Chain Simple Node".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Container Chain Simple Node\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - load_spec(id, self.para_id.unwrap_or(2000).into()) - } -} - -impl SubstrateCli for RelayChainCli { - fn impl_name() -> String { - "Container Chain Simple Node".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Container Chain Simple Node\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()).load_spec(id) - } -} - -macro_rules! construct_async_run { - (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ - let runner = $cli.create_runner($cmd)?; - runner.async_run(|$config| { - let $components = NodeConfig::new_builder(&$config, None)?; - let inner = { $( $code )* }; - - let task_manager = $components.task_manager; - inner.map(|v| (v, task_manager)) - }) - }} -} - -/// Parse command line arguments into service configuration. -pub fn run() -> Result<()> { - let cli = Cli::from_args(); - - match &cli.subcommand { - Some(Subcommand::BuildSpec(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let chain_spec = if let Some(para_id) = cmd.parachain_id { - if cmd.base.shared_params.dev { - Box::new(chain_spec::development_config( - para_id.into(), - cmd.add_bootnode.clone(), - )) - } else { - Box::new(chain_spec::local_testnet_config( - para_id.into(), - cmd.add_bootnode.clone(), - )) - } - } else { - config.chain_spec - }; - cmd.base.run(chain_spec, config.network) - }) - } - Some(Subcommand::CheckBlock(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::ExportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.database)) - }) - } - Some(Subcommand::ExportState(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.chain_spec)) - }) - } - Some(Subcommand::ImportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::Revert(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, components.backend, None)) - }) - } - Some(Subcommand::PurgeChain(cmd)) => { - let runner = cli.create_runner(cmd)?; - - runner.sync_run(|config| { - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()] - .iter() - .chain(cli.relay_chain_args.iter()), - ); - - let polkadot_config = SubstrateCli::create_configuration( - &polkadot_cli, - &polkadot_cli, - config.tokio_handle.clone(), - ) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - cmd.run(config, polkadot_config) - }) - } - Some(Subcommand::ExportGenesisHead(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - cmd.run(partials.client) - }) - } - Some(Subcommand::ExportGenesisWasm(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|_config| { - let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?; - cmd.run(&*spec) - }) - } - Some(Subcommand::Benchmark(cmd)) => { - let runner = cli.create_runner(cmd)?; - // Switch on the concrete benchmark sub-command- - match cmd { - BenchmarkCmd::Pallet(cmd) => { - if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) - } else { - Err("Benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into()) - } - } - BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - cmd.run(partials.client) - }), - #[cfg(not(feature = "runtime-benchmarks"))] - BenchmarkCmd::Storage(_) => Err(sc_cli::Error::Input( - "Compile with --features=runtime-benchmarks \ - to enable storage benchmarks." - .into(), - )), - #[cfg(feature = "runtime-benchmarks")] - BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - let db = partials.backend.expose_db(); - let storage = partials.backend.expose_storage(); - cmd.run(config, partials.client.clone(), db, storage) - }), - BenchmarkCmd::Machine(cmd) => { - runner.sync_run(|config| cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone())) - } - // NOTE: this allows the Client to leniently implement - // new benchmark commands without requiring a companion MR. - #[allow(unreachable_patterns)] - _ => Err("Benchmarking sub-command unsupported".into()), - } - } - #[cfg(feature = "try-runtime")] - Some(Subcommand::TryRuntime(_)) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - #[cfg(not(feature = "try-runtime"))] - Some(Subcommand::TryRuntime) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - Some(Subcommand::PrecompileWasm(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - Ok(( - cmd.run(partials.backend, config.chain_spec), - partials.task_manager, - )) - }) - } - Some(Subcommand::RpcProvider(cmd)) => { - let runner = cli.create_runner(&cli.run.normalize())?; - - runner.run_node_until_exit(|_config| async move { - let client: Box; - let mut task_manager; - - if cmd.orchestrator_endpoints.is_empty() { - todo!("Start in process node") - } else { - task_manager = TaskManager::new(tokio::runtime::Handle::current(), None) - .map_err(|e| sc_cli::Error::Application(Box::new(e)))?; - - client = dc_orchestrator_chain_rpc_interface::create_client_and_start_worker( - cmd.orchestrator_endpoints.clone(), - &mut task_manager, - None, - ) - .await - .map(Box::new) - .map_err(|e| sc_cli::Error::Application(Box::new(e)))?; - }; - - // POC: Try to fetch some data through the interface. - task_manager - .spawn_handle() - .spawn("rpc_provider_exemple", None, async move { - let mut stream = client.new_best_notification_stream().await.unwrap(); - - while let Some(header) = stream.next().await { - log::info!("New best block: {}", header.hash()); - } - }); - - Ok(task_manager) - }) - } - None => { - let runner = cli.create_runner(&cli.run.normalize())?; - let collator_options = cli.run.collator_options(); - - runner.run_node_until_exit(|config| async move { - let hwbench = (!cli.no_hardware_benchmarks).then_some( - config.database.path().map(|database_path| { - let _ = std::fs::create_dir_all(database_path); - sc_sysinfo::gather_hwbench(Some(database_path)) - })).flatten(); - - let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) - .map(|e| e.para_id) - .ok_or("Could not find parachain ID in chain-spec.")?; - - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()].iter().chain(cli.relay_chain_args.iter()), - ); - - let extension = chain_spec::Extensions::try_get(&*config.chain_spec); - let relay_chain_id = extension.map(|e| e.relay_chain.clone()); - - let dev_service = - config.chain_spec.is_dev() || relay_chain_id == Some("dev-service".to_string()); - - let id = ParaId::from(para_id); - - if dev_service { - return crate::service::start_dev_node(config, cli.run.sealing, id, hwbench).await - .map_err(Into::into) - } - - - let parachain_account = - AccountIdConversion::::into_account_truncating(&id); - - // We log both genesis states for reference, as fetching it from runtime would take significant time - let block_state_v0: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V0) - .map_err(|e| format!("{:?}", e))?; - let block_state_v1: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V1) - .map_err(|e| format!("{:?}", e))?; - - let genesis_state_v0 = format!("0x{:?}", HexDisplay::from(&block_state_v0.header().encode())); - let genesis_state_v1 = format!("0x{:?}", HexDisplay::from(&block_state_v1.header().encode())); - - let tokio_handle = config.tokio_handle.clone(); - let polkadot_config = - SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - info!("Parachain id: {:?}", id); - info!("Parachain Account: {}", parachain_account); - info!("Parachain genesis state V0: {}", genesis_state_v0); - info!("Parachain genesis state V1: {}", genesis_state_v1); - info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); - - if let cumulus_client_cli::RelayChainMode::ExternalRpc(rpc_target_urls) = - collator_options.clone().relay_chain_mode { - if !rpc_target_urls.is_empty() && !cli.relay_chain_args.is_empty() { - warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); - } - } - - crate::service::start_parachain_node( - config, - polkadot_config, - collator_options, - id, - hwbench, - ) - .await - .map(|r| r.0) - .map_err(Into::into) - }) - } - } -} - -impl DefaultConfigurationValues for RelayChainCli { - fn p2p_listen_port() -> u16 { - 30334 - } - - fn rpc_listen_port() -> u16 { - 9945 - } - - fn prometheus_listen_port() -> u16 { - 9616 - } -} - -impl CliConfiguration for RelayChainCli { - fn shared_params(&self) -> &SharedParams { - self.base.base.shared_params() - } - - fn import_params(&self) -> Option<&ImportParams> { - self.base.base.import_params() - } - - fn network_params(&self) -> Option<&NetworkParams> { - self.base.base.network_params() - } - - fn keystore_params(&self) -> Option<&KeystoreParams> { - self.base.base.keystore_params() - } - - fn base_path(&self) -> Result> { - Ok(self - .shared_params() - .base_path()? - .or_else(|| Some(self.base_path.clone().into()))) - } - - fn rpc_addr(&self, default_listen_port: u16) -> Result> { - self.base.base.rpc_addr(default_listen_port) - } - fn prometheus_config( - &self, - default_listen_port: u16, - chain_spec: &Box, - ) -> Result> { - self.base - .base - .prometheus_config(default_listen_port, chain_spec) - } - - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &sc_service::Configuration, - ) -> Result<()> - where - F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), - { - unreachable!("PolkadotCli is never initialized; qed"); - } - - fn chain_id(&self, is_dev: bool) -> Result { - let chain_id = self.base.base.chain_id(is_dev)?; - - Ok(if chain_id.is_empty() { - self.chain_id.clone().unwrap_or_default() - } else { - chain_id - }) - } - - fn role(&self, is_dev: bool) -> Result { - self.base.base.role(is_dev) - } - - fn transaction_pool(&self, is_dev: bool) -> Result { - self.base.base.transaction_pool(is_dev) - } - - fn trie_cache_maximum_size(&self) -> Result> { - self.base.base.trie_cache_maximum_size() - } - - fn rpc_methods(&self) -> Result { - self.base.base.rpc_methods() - } - - fn rpc_max_connections(&self) -> Result { - self.base.base.rpc_max_connections() - } - - fn rpc_cors(&self, is_dev: bool) -> Result>> { - self.base.base.rpc_cors(is_dev) - } - - fn default_heap_pages(&self) -> Result> { - self.base.base.default_heap_pages() - } - - fn force_authoring(&self) -> Result { - self.base.base.force_authoring() - } - - fn disable_grandpa(&self) -> Result { - self.base.base.disable_grandpa() - } - - fn max_runtime_instances(&self) -> Result> { - self.base.base.max_runtime_instances() - } - - fn announce_block(&self) -> Result { - self.base.base.announce_block() - } - - fn telemetry_endpoints( - &self, - chain_spec: &Box, - ) -> Result> { - self.base.base.telemetry_endpoints(chain_spec) - } - - fn node_name(&self) -> Result { - self.base.base.node_name() - } -} diff --git a/container-chains/nodes/simple/src/main.rs b/container-chains/nodes/simple/src/main.rs deleted file mode 100644 index 984f332..0000000 --- a/container-chains/nodes/simple/src/main.rs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Substrate Parachain Node Template CLI - -#![warn(missing_docs)] - -mod chain_spec; -mod cli; -mod command; -mod rpc; -mod service; - -fn main() -> sc_cli::Result<()> { - command::run() -} diff --git a/container-chains/nodes/simple/src/rpc.rs b/container-chains/nodes/simple/src/rpc.rs deleted file mode 100644 index 56a91ba..0000000 --- a/container-chains/nodes/simple/src/rpc.rs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! A collection of node-specific RPC methods. -//! Substrate provides the `sc-rpc` crate, which defines the core RPC layer -//! used by Substrate nodes. This file extends those RPC definitions with -//! capabilities that are specific to this project's runtime configuration. - -#![warn(missing_docs)] - -pub use sc_rpc::DenyUnsafe; - -use { - container_chain_template_simple_runtime::{opaque::Block, AccountId, Hash, Index as Nonce}, - cumulus_primitives_core::ParaId, - manual_xcm_rpc::{ManualXcm, ManualXcmApiServer as _}, - sc_client_api::AuxStore, - sc_consensus_manual_seal::{ - rpc::{ManualSeal, ManualSealApiServer as _}, - EngineCommand, - }, - sc_transaction_pool_api::TransactionPool, - sp_api::ProvideRuntimeApi, - sp_block_builder::BlockBuilder, - sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}, - std::sync::Arc, -}; - -/// A type representing all RPC extensions. -pub type RpcExtension = jsonrpsee::RpcModule<()>; - -/// Full client dependencies -pub struct FullDeps { - /// The client instance to use. - pub client: Arc, - /// Transaction pool instance. - pub pool: Arc

, - /// Whether to deny unsafe calls - pub deny_unsafe: DenyUnsafe, - /// Manual seal command sink - pub command_sink: Option>>, - /// Channels for manual xcm messages (downward, hrmp) - pub xcm_senders: Option<(flume::Sender>, flume::Sender<(ParaId, Vec)>)>, -} - -/// Instantiate all RPC extensions. -pub fn create_full( - deps: FullDeps, -) -> Result> -where - C: ProvideRuntimeApi - + HeaderBackend - + AuxStore - + HeaderMetadata - + Send - + Sync - + 'static, - C::Api: substrate_frame_rpc_system::AccountNonceApi, - C::Api: BlockBuilder, - P: TransactionPool + Sync + Send + 'static, - C::Api: profile_validation_runtime_api::ProfileValidationApi, - C::Api: department_funding_runtime_api::DepartmentFundingApi, - C::Api: positive_externality_runtime_api::PositiveExternalityApi, - C::Api: project_tips_runtime_api::ProjectTipsApi, -{ - use department_funding_rpc::DepartmentFundingApiServer; - use positive_externality_rpc::PositiveExternalityApiServer; - use profile_validation_rpc::ProfileValidationApiServer; - use project_tips_rpc::ProjectTipsApiServer; - use substrate_frame_rpc_system::{System, SystemApiServer}; - - let mut module = RpcExtension::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - command_sink, - xcm_senders, - } = deps; - - module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - - // Manual seal - if let Some(command_sink) = command_sink { - module.merge( - // We provide the rpc handler with the sending end of the channel to allow the rpc - // send EngineCommands to the background block authorship task. - ManualSeal::new(command_sink).into_rpc(), - )?; - }; - - if let Some((downward_message_channel, hrmp_message_channel)) = xcm_senders { - module.merge( - ManualXcm { - downward_message_channel, - hrmp_message_channel, - } - .into_rpc(), - )?; - } - - module.merge(profile_validation_rpc::ProfileValidation::new(client.clone()).into_rpc())?; - module.merge(department_funding_rpc::DepartmentFunding::new(client.clone()).into_rpc())?; - module.merge(positive_externality_rpc::PositiveExternality::new(client.clone()).into_rpc())?; - module.merge(project_tips_rpc::ProjectTips::new(client.clone()).into_rpc())?; - - Ok(module) -} diff --git a/container-chains/nodes/simple/src/service.rs b/container-chains/nodes/simple/src/service.rs deleted file mode 100644 index c6ba66e..0000000 --- a/container-chains/nodes/simple/src/service.rs +++ /dev/null @@ -1,328 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. - -#[allow(deprecated)] -use { - container_chain_template_simple_runtime::{opaque::Block, RuntimeApi}, - cumulus_client_cli::CollatorOptions, - cumulus_client_consensus_common::ParachainBlockImport as TParachainBlockImport, - cumulus_client_parachain_inherent::{MockValidationDataInherentDataProvider, MockXcmConfig}, - cumulus_client_service::prepare_node_config, - cumulus_primitives_core::{relay_chain::well_known_keys as RelayWellKnownKeys, ParaId}, - nimbus_primitives::NimbusId, - node_common::service::ManualSealConfiguration, - node_common::service::Sealing, - node_common::service::{NodeBuilder, NodeBuilderConfig}, - parity_scale_codec::Encode, - polkadot_parachain_primitives::primitives::HeadData, - sc_consensus::BasicQueue, - sc_executor::WasmExecutor, - sc_service::{Configuration, TFullBackend, TFullClient, TaskManager}, - sp_blockchain::HeaderBackend, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::Pair, - sp_core::H256, - std::{sync::Arc, time::Duration}, -}; - -type ParachainExecutor = WasmExecutor; -type ParachainClient = TFullClient; -type ParachainBackend = TFullBackend; -type ParachainBlockImport = TParachainBlockImport, ParachainBackend>; - -pub struct NodeConfig; -impl NodeBuilderConfig for NodeConfig { - type Block = Block; - type RuntimeApi = RuntimeApi; - type ParachainExecutor = ParachainExecutor; -} - -thread_local!(static TIMESTAMP: std::cell::RefCell = const { std::cell::RefCell::new(0) }); - -/// Provide a mock duration starting at 0 in millisecond for timestamp inherent. -/// Each call will increment timestamp by slot_duration making Aura think time has passed. -struct MockTimestampInherentDataProvider; -#[async_trait::async_trait] -impl sp_inherents::InherentDataProvider for MockTimestampInherentDataProvider { - async fn provide_inherent_data( - &self, - inherent_data: &mut sp_inherents::InherentData, - ) -> Result<(), sp_inherents::Error> { - TIMESTAMP.with(|x| { - *x.borrow_mut() += container_chain_template_simple_runtime::SLOT_DURATION; - inherent_data.put_data(sp_timestamp::INHERENT_IDENTIFIER, &*x.borrow()) - }) - } - - async fn try_handle_error( - &self, - _identifier: &sp_inherents::InherentIdentifier, - _error: &[u8], - ) -> Option> { - // The pallet never reports error. - None - } -} - -pub fn import_queue( - parachain_config: &Configuration, - node_builder: &NodeBuilder, -) -> (ParachainBlockImport, BasicQueue) { - // The nimbus import queue ONLY checks the signature correctness - // Any other checks corresponding to the author-correctness should be done - // in the runtime - let block_import = - ParachainBlockImport::new(node_builder.client.clone(), node_builder.backend.clone()); - - let import_queue = nimbus_consensus::import_queue( - node_builder.client.clone(), - block_import.clone(), - move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - Ok((time,)) - }, - &node_builder.task_manager.spawn_essential_handle(), - parachain_config.prometheus_registry(), - false, - ) - .expect("function never fails"); - - (block_import, import_queue) -} - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with("Parachain")] -pub async fn start_parachain_node( - parachain_config: Configuration, - polkadot_config: Configuration, - collator_options: CollatorOptions, - para_id: ParaId, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc)> { - let parachain_config = prepare_node_config(parachain_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let mut node_builder = NodeConfig::new_builder(¶chain_config, hwbench.clone())?; - - let (_, import_queue) = import_queue(¶chain_config, &node_builder); - - // Relay chain interface - let (relay_chain_interface, _collator_key) = node_builder - .build_relay_chain_interface(¶chain_config, polkadot_config, collator_options.clone()) - .await?; - - // Build cumulus network, allowing to access network-related services. - let node_builder = node_builder - .build_cumulus_network( - ¶chain_config, - para_id, - import_queue, - relay_chain_interface.clone(), - ) - .await?; - - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: None, - xcm_senders: None, - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - let relay_chain_slot_duration = Duration::from_secs(6); - let node_builder = node_builder.start_full_node( - para_id, - relay_chain_interface.clone(), - relay_chain_slot_duration, - )?; - - node_builder.network.start_network.start_network(); - - Ok((node_builder.task_manager, node_builder.client)) -} - -/// Helper function to generate a crypto pair from seed -fn get_aura_id_from_seed(seed: &str) -> NimbusId { - sp_core::sr25519::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() - .into() -} - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with("Parachain Dev Node")] -pub async fn start_dev_node( - parachain_config: Configuration, - sealing: Sealing, - para_id: ParaId, - hwbench: Option, -) -> sc_service::error::Result { - let parachain_config = prepare_node_config(parachain_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let node_builder = NodeConfig::new_builder(¶chain_config, hwbench.clone())?; - - let (parachain_block_import, import_queue) = import_queue(¶chain_config, &node_builder); - - // Build a Substrate Network. (not cumulus since it is a dev node, it mocks - // the relaychain) - let mut node_builder = node_builder.build_substrate_network(¶chain_config, import_queue)?; - - let mut command_sink = None; - let mut xcm_senders = None; - - if parachain_config.role.is_authority() { - let client = node_builder.client.clone(); - let (downward_xcm_sender, downward_xcm_receiver) = flume::bounded::>(100); - let (hrmp_xcm_sender, hrmp_xcm_receiver) = flume::bounded::<(ParaId, Vec)>(100); - xcm_senders = Some((downward_xcm_sender, hrmp_xcm_sender)); - - let authorities = vec![get_aura_id_from_seed("alice")]; - - command_sink = node_builder.install_manual_seal(ManualSealConfiguration { - block_import: parachain_block_import, - sealing, - soft_deadline: None, - select_chain: sc_consensus::LongestChain::new(node_builder.backend.clone()), - consensus_data_provider: Some(Box::new( - tc_consensus::ContainerManualSealAuraConsensusDataProvider::new( - SlotDuration::from_millis( - container_chain_template_simple_runtime::SLOT_DURATION, - ), - authorities.clone(), - ), - )), - create_inherent_data_providers: move |block: H256, ()| { - let current_para_block = client - .number(block) - .expect("Header lookup should succeed") - .expect("Header passed in as parent should be present in backend."); - - let hash = client - .hash(current_para_block.saturating_sub(1)) - .expect("Hash of the desired block must be present") - .expect("Hash of the desired block should exist"); - - let para_header = client - .expect_header(hash) - .expect("Expected parachain header should exist") - .encode(); - - let para_head_data: Vec = HeadData(para_header).encode(); - let client_for_xcm = client.clone(); - let authorities_for_cidp = authorities.clone(); - let para_head_key = RelayWellKnownKeys::para_head(para_id); - let relay_slot_key = RelayWellKnownKeys::CURRENT_SLOT.to_vec(); - let slot_duration = container_chain_template_simple_runtime::SLOT_DURATION; - - let mut timestamp = 0u64; - TIMESTAMP.with(|x| { - timestamp = x.clone().take(); - }); - - timestamp += slot_duration; - - let relay_slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - timestamp.into(), - SlotDuration::from_millis(slot_duration), - ); - let relay_slot = u64::from(*relay_slot); - - let downward_xcm_receiver = downward_xcm_receiver.clone(); - let hrmp_xcm_receiver = hrmp_xcm_receiver.clone(); - - async move { - let mocked_authorities_noting = - ccp_authorities_noting_inherent::MockAuthoritiesNotingInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - orchestrator_para_id: crate::chain_spec::ORCHESTRATOR, - container_para_id: para_id, - authorities: authorities_for_cidp - }; - - let mut additional_keys = mocked_authorities_noting.get_key_values(); - additional_keys.append(&mut vec![(para_head_key, para_head_data), (relay_slot_key, Slot::from(relay_slot).encode())]); - - let time = MockTimestampInherentDataProvider; - let mocked_parachain = MockValidationDataInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - // TODO: Recheck - para_blocks_per_relay_epoch: 10, - relay_randomness_config: (), - xcm_config: MockXcmConfig::new( - &*client_for_xcm, - block, - para_id, - Default::default(), - ), - raw_downward_messages: downward_xcm_receiver.drain().collect(), - raw_horizontal_messages: hrmp_xcm_receiver.drain().collect(), - additional_key_values: Some(additional_keys), - }; - - Ok((time, mocked_parachain, mocked_authorities_noting)) - } - }, - })?; - } - - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: command_sink.clone(), - xcm_senders: xcm_senders.clone(), - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - log::info!("Development Service Ready"); - - node_builder.network.start_network.start_network(); - - Ok(node_builder.task_manager) -} diff --git a/container-chains/runtime-templates/frontier/Cargo.toml b/container-chains/runtime-templates/frontier/Cargo.toml deleted file mode 100644 index 79d0fb7..0000000 --- a/container-chains/runtime-templates/frontier/Cargo.toml +++ /dev/null @@ -1,310 +0,0 @@ -[package] -name = "container-chain-template-frontier-runtime" -authors = { workspace = true } -description = "Frontier container chain template runtime" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -hex-literal = { workspace = true, optional = true } -log = { workspace = true } -num_enum = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive" ] } -scale-info = { workspace = true, features = [ "derive" ] } -serde = { workspace = true, optional = true, features = [ "derive" ] } -smallvec = { workspace = true } - -# Local -ccp-xcm = { workspace = true } -dp-consensus = { workspace = true } -dp-impl-tanssi-pallets-config = { workspace = true } -dp-slot-duration-runtime-api = { workspace = true } -pallet-cc-authorities-noting = { workspace = true } -runtime-common = { workspace = true } - -# Moonkit -async-backing-primitives = { workspace = true } -nimbus-primitives = { workspace = true } -pallet-async-backing = { workspace = true } -pallet-author-inherent = { workspace = true } -pallet-evm-precompile-balances-erc20 = { workspace = true } -pallet-evm-precompile-batch = { workspace = true } -pallet-evm-precompile-call-permit = { workspace = true } -pallet-evm-precompile-xcm-utils = { workspace = true } -pallet-evm-precompileset-assets-erc20 = { workspace = true } -pallet-foreign-asset-creator = { workspace = true } -pallet-maintenance-mode = { workspace = true, features = [ "xcm-support" ] } -pallet-migrations = { workspace = true } -xcm-primitives = { workspace = true } - -# Dancekit -pallet-xcm-executor-utils = { workspace = true } - -# Substrate -frame-executive = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -frame-system-rpc-runtime-api = { workspace = true } -frame-try-runtime = { workspace = true, optional = true } -pallet-asset-rate = { workspace = true } -pallet-assets = { workspace = true } -pallet-balances = { workspace = true, features = [ "insecure_zero_ed" ] } -pallet-message-queue = { workspace = true } -pallet-multisig = { workspace = true } -pallet-proxy = { workspace = true } -pallet-root-testing = { workspace = true } -pallet-sudo = { workspace = true } -pallet-timestamp = { workspace = true } -pallet-transaction-payment = { workspace = true } -pallet-transaction-payment-rpc-runtime-api = { workspace = true } -pallet-tx-pause = { workspace = true } -pallet-utility = { workspace = true } -sp-api = { workspace = true } -sp-block-builder = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true } -sp-debug-derive = { workspace = true } -sp-genesis-builder = { workspace = true } -sp-inherents = { workspace = true } -sp-offchain = { workspace = true } -sp-runtime = { workspace = true } -sp-session = { workspace = true } -sp-std = { workspace = true } -sp-transaction-pool = { workspace = true } -sp-trie = { workspace = true } - -sp-version = { workspace = true } - -# Polkadot -pallet-xcm = { workspace = true } -pallet-xcm-benchmarks = { workspace = true, optional = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-runtime-common = { workspace = true } -staging-xcm = { workspace = true } -staging-xcm-builder = { workspace = true } -staging-xcm-executor = { workspace = true } - -# Cumulus -cumulus-pallet-dmp-queue = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true } -cumulus-pallet-session-benchmarking = { workspace = true } -cumulus-pallet-xcm = { workspace = true } -cumulus-pallet-xcmp-queue = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-primitives-timestamp = { workspace = true } -cumulus-primitives-utility = { workspace = true } -parachain-info = { workspace = true } -parachains-common = { workspace = true } - -# Frontier -fp-account = { workspace = true, features = [ "serde" ] } -fp-evm = { workspace = true, features = [ "serde" ] } -fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = [ "serde" ] } -pallet-base-fee = { workspace = true } -pallet-ethereum = { workspace = true } -pallet-evm = { workspace = true } -pallet-evm-chain-id = { workspace = true } -pallet-evm-precompile-modexp = { workspace = true } -pallet-evm-precompile-sha3fips = { workspace = true } -pallet-evm-precompile-simple = { workspace = true } -precompile-utils = { workspace = true } - -# Benchmarking -frame-benchmarking = { workspace = true, optional = true } -frame-system-benchmarking = { workspace = true, optional = true } - -[build-dependencies] -substrate-wasm-builder = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "async-backing-primitives/std", - "ccp-xcm/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-timestamp/std", - "cumulus-primitives-utility/std", - "dp-consensus/std", - "dp-impl-tanssi-pallets-config/std", - "dp-slot-duration-runtime-api/std", - "fp-account/std", - "fp-evm/std", - "fp-rpc/std", - "fp-self-contained/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime/std", - "log/std", - "nimbus-primitives/std", - "num_enum/std", - "pallet-asset-rate/std", - "pallet-assets/std", - "pallet-async-backing/std", - "pallet-author-inherent/std", - "pallet-balances/std", - "pallet-base-fee/std", - "pallet-cc-authorities-noting/std", - "pallet-ethereum/std", - "pallet-ethereum/std", - "pallet-evm-chain-id/std", - "pallet-evm-precompile-balances-erc20/std", - "pallet-evm-precompile-batch/std", - "pallet-evm-precompile-call-permit/std", - "pallet-evm-precompile-modexp/std", - "pallet-evm-precompile-sha3fips/std", - "pallet-evm-precompile-simple/std", - "pallet-evm-precompile-xcm-utils/std", - "pallet-evm-precompileset-assets-erc20/std", - "pallet-evm/std", - "pallet-foreign-asset-creator/std", - "pallet-maintenance-mode/std", - "pallet-message-queue/std", - "pallet-migrations/std", - "pallet-multisig/std", - "pallet-proxy/std", - "pallet-root-testing/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-tx-pause/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm-executor-utils/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "parity-scale-codec/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "precompile-utils/std", - "runtime-common/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-consensus-slots/std", - "sp-core/std", - "sp-debug-derive/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-transaction-pool/std", - "sp-trie/std", - "sp-version/std", - "staging-xcm-builder/std", - "staging-xcm-executor/std", - "staging-xcm/std", - "xcm-primitives/std", -] - -# Allow to print logs details (no wasm:stripped) -force-debug = [ "sp-debug-derive/force-debug" ] - -runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "dp-consensus/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "hex-literal", - "nimbus-primitives/runtime-benchmarks", - "pallet-asset-rate/runtime-benchmarks", - "pallet-assets/runtime-benchmarks", - "pallet-author-inherent/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-cc-authorities-noting/runtime-benchmarks", - "pallet-ethereum/runtime-benchmarks", - "pallet-evm-precompile-xcm-utils/runtime-benchmarks", - "pallet-evm/runtime-benchmarks", - "pallet-foreign-asset-creator/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-migrations/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-sudo/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-tx-pause/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm-executor-utils/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "staging-xcm-builder/runtime-benchmarks", - "staging-xcm-executor/runtime-benchmarks", - "xcm-primitives/runtime-benchmarks", -] - -try-runtime = [ - "cumulus-pallet-dmp-queue/try-runtime", - "cumulus-pallet-parachain-system/try-runtime", - "cumulus-pallet-xcm/try-runtime", - "cumulus-pallet-xcmp-queue/try-runtime", - "fp-self-contained/try-runtime", - "frame-executive/try-runtime", - "frame-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-asset-rate/try-runtime", - "pallet-assets/try-runtime", - "pallet-async-backing/try-runtime", - "pallet-author-inherent/try-runtime", - "pallet-balances/try-runtime", - "pallet-base-fee/try-runtime", - "pallet-cc-authorities-noting/try-runtime", - "pallet-ethereum/try-runtime", - "pallet-evm-chain-id/try-runtime", - "pallet-evm/try-runtime", - "pallet-foreign-asset-creator/try-runtime", - "pallet-maintenance-mode/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-migrations/try-runtime", - "pallet-multisig/try-runtime", - "pallet-proxy/try-runtime", - "pallet-root-testing/try-runtime", - "pallet-sudo/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-tx-pause/try-runtime", - "pallet-utility/try-runtime", - "pallet-xcm-executor-utils/try-runtime", - "pallet-xcm/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "runtime-common/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/container-chains/runtime-templates/frontier/build.rs b/container-chains/runtime-templates/frontier/build.rs deleted file mode 100644 index 9e48e37..0000000 --- a/container-chains/runtime-templates/frontier/build.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use substrate_wasm_builder::WasmBuilder; - -fn main() { - WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} diff --git a/container-chains/runtime-templates/frontier/src/impl_on_charge_evm_transaction.rs b/container-chains/runtime-templates/frontier/src/impl_on_charge_evm_transaction.rs deleted file mode 100644 index 8c88d72..0000000 --- a/container-chains/runtime-templates/frontier/src/impl_on_charge_evm_transaction.rs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -#[macro_export] -macro_rules! impl_on_charge_evm_transaction { - {} => { - type CurrencyAccountId = ::AccountId; - - type BalanceFor = - <::Currency as CurrencyT>>::Balance; - - type PositiveImbalanceFor = - <::Currency as CurrencyT>>::PositiveImbalance; - - type NegativeImbalanceFor = - <::Currency as CurrencyT>>::NegativeImbalance; - - pub struct OnChargeEVMTransaction(sp_std::marker::PhantomData); - impl OnChargeEVMTransactionT for OnChargeEVMTransaction - where - T: pallet_evm::Config, - PositiveImbalanceFor: Imbalance, Opposite = NegativeImbalanceFor>, - NegativeImbalanceFor: Imbalance, Opposite = PositiveImbalanceFor>, - OU: OnUnbalanced>, - U256: UniqueSaturatedInto> - { - type LiquidityInfo = Option>; - - fn withdraw_fee(who: &H160, fee: U256) -> Result> { - EVMCurrencyAdapter::<::Currency, ()>::withdraw_fee(who, fee) - } - - fn correct_and_deposit_fee( - who: &H160, - corrected_fee: U256, - base_fee: U256, - already_withdrawn: Self::LiquidityInfo, - ) -> Self::LiquidityInfo { - ::Currency, OU> as OnChargeEVMTransactionT< - T, - >>::correct_and_deposit_fee(who, corrected_fee, base_fee, already_withdrawn) - } - - fn pay_priority_fee(tip: Self::LiquidityInfo) { - if let Some(tip) = tip { - OU::on_unbalanced(tip); - } - } - } - } -} diff --git a/container-chains/runtime-templates/frontier/src/lib.rs b/container-chains/runtime-templates/frontier/src/lib.rs deleted file mode 100644 index b369b3a..0000000 --- a/container-chains/runtime-templates/frontier/src/lib.rs +++ /dev/null @@ -1,1558 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; -#[cfg(feature = "std")] -use sp_version::NativeVersion; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -pub mod migrations; -mod precompiles; -pub mod weights; -pub mod xcm_config; - -use { - crate::precompiles::TemplatePrecompiles, - cumulus_primitives_core::AggregateMessageOrigin, - dp_impl_tanssi_pallets_config::impl_tanssi_pallets_config, - fp_account::EthereumSignature, - fp_evm::weight_per_gas, - fp_rpc::TransactionStatus, - frame_support::{ - construct_runtime, - dispatch::{DispatchClass, GetDispatchInfo}, - genesis_builder_helper::{build_config, create_default_config}, - pallet_prelude::DispatchResult, - parameter_types, - traits::{ - ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, Contains, Currency as CurrencyT, - FindAuthor, Imbalance, InsideBoth, InstanceFilter, OnFinalize, OnUnbalanced, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, - WEIGHT_REF_TIME_PER_SECOND, - }, - ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, - WeightToFeePolynomial, - }, - }, - frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, - }, - nimbus_primitives::{NimbusId, SlotBeacon}, - pallet_ethereum::{Call::transact, PostLogContent, Transaction as EthereumTransaction}, - pallet_evm::{ - Account as EVMAccount, EVMCurrencyAdapter, EnsureAddressNever, EnsureAddressRoot, - FeeCalculator, GasWeightMapping, IdentityAddressMapping, - OnChargeEVMTransaction as OnChargeEVMTransactionT, Runner, - }, - pallet_transaction_payment::CurrencyAdapter, - parity_scale_codec::{Decode, Encode}, - polkadot_runtime_common::SlowAdjustingFeeUpdate, - scale_info::TypeInfo, - smallvec::smallvec, - sp_api::impl_runtime_apis, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::{Get, MaxEncodedLen, OpaqueMetadata, H160, H256, U256}, - sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{ - BlakeTwo256, Block as BlockT, DispatchInfoOf, Dispatchable, IdentifyAccount, - IdentityLookup, PostDispatchInfoOf, UniqueSaturatedInto, Verify, - }, - transaction_validity::{ - InvalidTransaction, TransactionSource, TransactionValidity, TransactionValidityError, - }, - ApplyExtrinsicResult, - }, - sp_std::prelude::*, - sp_version::RuntimeVersion, -}; -pub use { - sp_consensus_aura::sr25519::AuthorityId as AuraId, - sp_runtime::{MultiAddress, Perbill, Permill}, -}; - -// Polkadot imports -use polkadot_runtime_common::BlockHashCount; - -pub type Precompiles = TemplatePrecompiles; - -/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. -pub type Signature = EthereumSignature; - -/// Some way of identifying an account on the chain. We intentionally make it equivalent -/// to the public key of our transaction signing scheme. -pub type AccountId = <::Signer as IdentifyAccount>::AccountId; - -/// Balance of an account. -pub type Balance = u128; - -/// Index of a transaction in the chain. -pub type Index = u32; - -/// A hash of some data used by the chain. -pub type Hash = sp_core::H256; - -/// An index to a block. -pub type BlockNumber = u32; - -/// The address format for describing accounts. -pub type Address = AccountId; - -/// Block header type as expected by this runtime. -pub type Header = generic::Header; - -/// Block type as expected by this runtime. -pub type Block = generic::Block; - -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - fp_self_contained::UncheckedExtrinsic; -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = - fp_self_contained::CheckedExtrinsic; -/// The payload being signed in transactions. -pub type SignedPayload = generic::SignedPayload; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; - -pub mod currency { - use super::Balance; - - pub const MICROUNIT: Balance = 1_000_000_000_000; - pub const MILLIUNIT: Balance = 1_000_000_000_000_000; - pub const UNIT: Balance = 1_000_000_000_000_000_000; - pub const KILOUNIT: Balance = 1_000_000_000_000_000_000_000; - - pub const STORAGE_BYTE_FEE: Balance = 100 * MICROUNIT; - - pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 100 * MILLIUNIT + (bytes as Balance) * STORAGE_BYTE_FEE - } -} - -impl fp_self_contained::SelfContainedCall for RuntimeCall { - type SignedInfo = H160; - - fn is_self_contained(&self) -> bool { - match self { - RuntimeCall::Ethereum(call) => call.is_self_contained(), - _ => false, - } - } - - fn check_self_contained(&self) -> Option> { - match self { - RuntimeCall::Ethereum(call) => call.check_self_contained(), - _ => None, - } - } - - fn validate_self_contained( - &self, - info: &Self::SignedInfo, - dispatch_info: &DispatchInfoOf, - len: usize, - ) -> Option { - match self { - RuntimeCall::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len), - _ => None, - } - } - - fn pre_dispatch_self_contained( - &self, - info: &Self::SignedInfo, - dispatch_info: &DispatchInfoOf, - len: usize, - ) -> Option> { - match self { - RuntimeCall::Ethereum(call) => { - call.pre_dispatch_self_contained(info, dispatch_info, len) - } - _ => None, - } - } - - fn apply_self_contained( - self, - info: Self::SignedInfo, - ) -> Option>> { - match self { - call @ RuntimeCall::Ethereum(pallet_ethereum::Call::transact { .. }) => { - Some(call.dispatch(RuntimeOrigin::from( - pallet_ethereum::RawOrigin::EthereumTransaction(info), - ))) - } - _ => None, - } - } -} - -#[derive(Clone)] -pub struct TransactionConverter; - -impl fp_rpc::ConvertTransaction for TransactionConverter { - fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic { - UncheckedExtrinsic::new_unsigned( - pallet_ethereum::Call::::transact { transaction }.into(), - ) - } -} - -impl fp_rpc::ConvertTransaction for TransactionConverter { - fn convert_transaction( - &self, - transaction: pallet_ethereum::Transaction, - ) -> opaque::UncheckedExtrinsic { - let extrinsic = UncheckedExtrinsic::new_unsigned( - pallet_ethereum::Call::::transact { transaction }.into(), - ); - let encoded = extrinsic.encode(); - opaque::UncheckedExtrinsic::decode(&mut &encoded[..]) - .expect("Encoded extrinsic is always valid") - } -} - -/// Handles converting a weight scalar to a fee value, based on the scale and granularity of the -/// node's balance type. -/// -/// This should typically create a mapping between the following ranges: -/// - `[0, MAXIMUM_BLOCK_WEIGHT]` -/// - `[Balance::min, Balance::max]` -/// -/// Yet, it can be used for any other sort of change to weight-fee. Some examples being: -/// - Setting it to `0` will essentially disable the weight fee. -/// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { - type Balance = Balance; - fn polynomial() -> WeightToFeeCoefficients { - // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: - // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT - let p = currency::MILLIUNIT / 10; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); - smallvec![WeightToFeeCoefficient { - degree: 1, - negative: false, - coeff_frac: Perbill::from_rational(p % q, q), - coeff_integer: p / q, - }] - } -} - -/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know -/// the specifics of the runtime. They can then be made to be agnostic over specific formats -/// of data like extrinsics, allowing for them to continue syncing the network through upgrades -/// to even the core data structures. -pub mod opaque { - use { - super::*, - sp_runtime::{generic, traits::BlakeTwo256}, - }; - - pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - /// Opaque block header type. - pub type Header = generic::Header; - /// Opaque block type. - pub type Block = generic::Block; - /// Opaque block identifier type. - pub type BlockId = generic::BlockId; -} - -mod impl_on_charge_evm_transaction; - -impl_opaque_keys! { - pub struct SessionKeys { } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("frontier-template"), - impl_name: create_runtime_str!("frontier-template"), - authoring_version: 1, - spec_version: 700, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, - state_version: 1, -}; - -/// This determines the average expected block time that we are targeting. -/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. -/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked -/// up by `pallet_aura` to implement `fn slot_duration()`. -/// -/// Change this to adjust the block time. -pub const MILLISECS_PER_BLOCK: u64 = 6000; - -// NOTE: Currently it is not possible to change the slot duration after the chain has started. -// Attempting to do so will brick block production. -pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; - -// Time is measured by number of blocks. -pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); -pub const HOURS: BlockNumber = MINUTES * 60; -pub const DAYS: BlockNumber = HOURS * 24; - -/// The existential deposit. Set to 0 because this is an ethereum-like chain -/// We set this to one for runtime-benchmarks because plenty of the benches we -/// incorporate from parity assume ED != 0 -#[cfg(feature = "runtime-benchmarks")] -pub const EXISTENTIAL_DEPOSIT: Balance = 1 * currency::MILLIUNIT; -#[cfg(not(feature = "runtime-benchmarks"))] -pub const EXISTENTIAL_DEPOSIT: Balance = 0; - -/// We assume that ~5% of the block weight is consumed by `on_initialize` handlers. This is -/// used to limit the maximal weight of a single extrinsic. -const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); - -/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used by -/// `Operational` extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); - -/// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( - WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), - cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, -); - -/// We allow for 500ms of compute with a 12 second average block time. -pub const WEIGHT_MILLISECS_PER_BLOCK: u64 = 500; - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - - // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. - // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the - // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize - // the lazy contract deletion. - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u16 = 42; -} - -// Configure FRAME pallets to include in runtime. -impl frame_system::Config for Runtime { - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// The aggregated dispatch type that is available for extrinsics. - type RuntimeCall = RuntimeCall; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = IdentityLookup; - /// The index type for storing how many extrinsics an account has signed. - type Nonce = Index; - /// The index type for blocks. - type Block = Block; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// Runtime version. - type Version = Version; - /// Converts a module to an index of this module in the runtime. - type PalletInfo = PalletInfo; - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The basic call filter to use in dispatchable. - type BaseCallFilter = InsideBoth; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = weights::frame_system::SubstrateWeight; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = RuntimeBlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = RuntimeBlockLength; - /// This is used as an identifier of the chain. 42 is the generic substrate prefix. - type SS58Prefix = SS58Prefix; - /// The action to take on a Runtime Upgrade - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = RuntimeTask; -} - -parameter_types! { - pub const TransactionByteFee: Balance = 1; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // This will burn the fees - type OnChargeTransaction = CurrencyAdapter; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type FreezeIdentifier = RuntimeFreezeReason; - type MaxFreezes = ConstU32<0>; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type MaxHolds = ConstU32<0>; - type WeightInfo = weights::pallet_balances::SubstrateWeight; -} - -parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; -pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; -pub const BLOCK_PROCESSING_VELOCITY: u32 = 1; - -type ConsensusHook = pallet_async_backing::consensus_hook::FixedVelocityConsensusHook< - Runtime, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, ->; - -impl cumulus_pallet_parachain_system::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_parachain_system::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type OutboundXcmpMessageSource = XcmpQueue; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases; - type ConsensusHook = ConsensusHook; -} - -pub struct ParaSlotProvider; -impl Get<(Slot, SlotDuration)> for ParaSlotProvider { - fn get() -> (Slot, SlotDuration) { - let slot = u64::from(::SlotBeacon::slot()); - (Slot::from(slot), SlotDuration::from_millis(SLOT_DURATION)) - } -} - -parameter_types! { - pub const ExpectedBlockTime: u64 = MILLISECS_PER_BLOCK; -} - -impl pallet_async_backing::Config for Runtime { - type AllowMultipleBlocksPerSlot = ConstBool; - type GetAndVerifySlot = - pallet_async_backing::ParaSlot; - type ExpectedBlockTime = ExpectedBlockTime; -} - -impl parachain_info::Config for Runtime {} - -parameter_types! { - pub const Period: u32 = 6 * HOURS; - pub const Offset: u32 = 0; -} - -impl pallet_sudo::Config for Runtime { - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_sudo::SubstrateWeight; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::SubstrateWeight; -} - -/// The type used to represent the kinds of proxying allowed. -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -#[derive( - Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, MaxEncodedLen, TypeInfo, -)] -#[allow(clippy::unnecessary_cast)] -pub enum ProxyType { - /// All calls can be proxied. This is the trivial/most permissive filter. - Any = 0, - /// Only extrinsics that do not transfer funds. - NonTransfer = 1, - /// Only extrinsics related to governance (democracy and collectives). - Governance = 2, - /// Allow to veto an announced proxy call. - CancelProxy = 3, - /// Allow extrinsic related to Balances. - Balances = 4, -} - -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} - -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - // Since proxy filters are respected in all dispatches of the Utility - // pallet, it should never need to be filtered by any proxy. - if let RuntimeCall::Utility(..) = c { - return true; - } - - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => { - matches!( - c, - RuntimeCall::System(..) - | RuntimeCall::ParachainSystem(..) - | RuntimeCall::Timestamp(..) - | RuntimeCall::Proxy(..) - ) - } - // We don't have governance yet - ProxyType::Governance => false, - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) - ), - ProxyType::Balances => { - matches!(c, RuntimeCall::Balances(..)) - } - } - } - - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - // One storage item; key size 32, value size 8 - type ProxyDepositBase = ConstU128<{ currency::deposit(1, 8) }>; - // Additional storage item size of 21 bytes (20 bytes AccountId + 1 byte sizeof(ProxyType)). - type ProxyDepositFactor = ConstU128<{ currency::deposit(0, 21) }>; - type MaxProxies = ConstU32<32>; - type MaxPending = ConstU32<32>; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = ConstU128<{ currency::deposit(1, 8) }>; - // Additional storage item size of 56 bytes: - // - 20 bytes AccountId - // - 32 bytes Hasher (Blake2256) - // - 4 bytes BlockNumber (u32) - type AnnouncementDepositFactor = ConstU128<{ currency::deposit(0, 56) }>; - type WeightInfo = weights::pallet_proxy::SubstrateWeight; -} - -pub struct XcmExecutionManager; -impl xcm_primitives::PauseXcmExecution for XcmExecutionManager { - fn suspend_xcm_execution() -> DispatchResult { - XcmpQueue::suspend_xcm_execution(RuntimeOrigin::root()) - } - fn resume_xcm_execution() -> DispatchResult { - XcmpQueue::resume_xcm_execution(RuntimeOrigin::root()) - } -} - -impl pallet_migrations::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type MigrationsList = (migrations::TemplateMigrations,); - type XcmExecutionManager = XcmExecutionManager; -} - -/// Maintenance mode Call filter -pub struct MaintenanceFilter; -impl Contains for MaintenanceFilter { - fn contains(c: &RuntimeCall) -> bool { - !matches!( - c, - RuntimeCall::Balances(_) - | RuntimeCall::Ethereum(_) - | RuntimeCall::EVM(_) - | RuntimeCall::PolkadotXcm(_) - ) - } -} - -/// Normal Call Filter -/// We dont allow to create nor mint assets, this for now is disabled -/// We only allow transfers. For now creation of assets will go through -/// asset-manager, while minting/burning only happens through xcm messages -/// This can change in the future -pub struct NormalFilter; -impl Contains for NormalFilter { - fn contains(c: &RuntimeCall) -> bool { - !matches!( - c, - // Filtering the EVM prevents possible re-entrancy from the precompiles which could - // lead to unexpected scenarios. - // See https://github.com/PureStake/sr-moonbeam/issues/30 - // Note: It is also assumed that EVM calls are only allowed through `Origin::Root` so - // this can be seen as an additional security - RuntimeCall::EVM(_) - ) - } -} - -impl pallet_maintenance_mode::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type NormalCallFilter = NormalFilter; - type MaintenanceCallFilter = MaintenanceFilter; - type MaintenanceOrigin = EnsureRoot; - type XcmExecutionManager = XcmExecutionManager; -} - -// To match ethereum expectations -const BLOCK_GAS_LIMIT: u64 = 15_000_000; - -impl pallet_evm_chain_id::Config for Runtime {} - -pub struct FindAuthorAdapter; -impl FindAuthor for FindAuthorAdapter { - fn find_author<'a, I>(digests: I) -> Option - where - I: 'a + IntoIterator, - { - if let Some(author) = AuthorInherent::find_author(digests) { - return Some(H160::from_slice(&author.encode()[0..20])); - } - None - } -} - -parameter_types! { - pub BlockGasLimit: U256 = U256::from(BLOCK_GAS_LIMIT); - pub PrecompilesValue: TemplatePrecompiles = TemplatePrecompiles::<_>::new(); - pub WeightPerGas: Weight = Weight::from_parts(weight_per_gas(BLOCK_GAS_LIMIT, NORMAL_DISPATCH_RATIO, WEIGHT_MILLISECS_PER_BLOCK), 0); - pub SuicideQuickClearLimit: u32 = 0; -} - -impl_on_charge_evm_transaction!(); -impl pallet_evm::Config for Runtime { - type FeeCalculator = BaseFee; - type GasWeightMapping = pallet_evm::FixedGasWeightMapping; - type WeightPerGas = WeightPerGas; - type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping; - type CallOrigin = EnsureAddressRoot; - type WithdrawOrigin = EnsureAddressNever; - type AddressMapping = IdentityAddressMapping; - type Currency = Balances; - type RuntimeEvent = RuntimeEvent; - type PrecompilesType = TemplatePrecompiles; - type PrecompilesValue = PrecompilesValue; - type ChainId = EVMChainId; - type BlockGasLimit = BlockGasLimit; - type Runner = pallet_evm::runner::stack::Runner; - type OnChargeTransaction = OnChargeEVMTransaction<()>; - type OnCreate = (); - type FindAuthor = FindAuthorAdapter; - // TODO: update in the future - type GasLimitPovSizeRatio = (); - type SuicideQuickClearLimit = SuicideQuickClearLimit; - type Timestamp = Timestamp; - type WeightInfo = (); -} - -parameter_types! { - pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes; -} - -impl pallet_ethereum::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type StateRoot = pallet_ethereum::IntermediateStateRoot; - type PostLogContent = PostBlockAndTxnHashes; - type ExtraDataLength = ConstU32<30>; -} - -parameter_types! { - pub BoundDivision: U256 = U256::from(1024); -} - -parameter_types! { - pub DefaultBaseFeePerGas: U256 = U256::from(2_000_000_000); - pub DefaultElasticity: Permill = Permill::from_parts(125_000); -} - -pub struct BaseFeeThreshold; -impl pallet_base_fee::BaseFeeThreshold for BaseFeeThreshold { - fn lower() -> Permill { - Permill::zero() - } - fn ideal() -> Permill { - Permill::from_parts(500_000) - } - fn upper() -> Permill { - Permill::from_parts(1_000_000) - } -} - -impl pallet_base_fee::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Threshold = BaseFeeThreshold; - type DefaultBaseFeePerGas = DefaultBaseFeePerGas; - type DefaultElasticity = DefaultElasticity; -} - -impl pallet_root_testing::Config for Runtime { - type RuntimeEvent = RuntimeEvent; -} - -impl pallet_tx_pause::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PauseOrigin = EnsureRoot; - type UnpauseOrigin = EnsureRoot; - type WhitelistedCalls = (); - type MaxNameLen = ConstU32<256>; - type WeightInfo = weights::pallet_tx_pause::SubstrateWeight; -} - -impl dp_impl_tanssi_pallets_config::Config for Runtime { - const SLOT_DURATION: u64 = SLOT_DURATION; - type TimestampWeights = weights::pallet_timestamp::SubstrateWeight; - type AuthorInherentWeights = weights::pallet_author_inherent::SubstrateWeight; - type AuthoritiesNotingWeights = weights::pallet_cc_authorities_noting::SubstrateWeight; -} - -parameter_types! { - // One storage item; key size 32 + 20; value is size 4+4+16+20. Total = 1 * (52 + 44) - pub const DepositBase: Balance = currency::deposit(1, 96); - // Additional storage item size of 20 bytes. - pub const DepositFactor: Balance = currency::deposit(0, 20); - pub const MaxSignatories: u32 = 100; -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = MaxSignatories; - type WeightInfo = weights::pallet_multisig::SubstrateWeight; -} - -impl_tanssi_pallets_config!(Runtime); - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system = 0, - ParachainSystem: cumulus_pallet_parachain_system = 1, - Timestamp: pallet_timestamp = 2, - ParachainInfo: parachain_info = 3, - Sudo: pallet_sudo = 4, - Utility: pallet_utility = 5, - Proxy: pallet_proxy = 6, - Migrations: pallet_migrations = 7, - MaintenanceMode: pallet_maintenance_mode = 8, - TxPause: pallet_tx_pause = 9, - - // Monetary stuff. - Balances: pallet_balances = 10, - - // Other utilities - Multisig: pallet_multisig = 16, - - // ContainerChain - AuthoritiesNoting: pallet_cc_authorities_noting = 50, - AuthorInherent: pallet_author_inherent = 51, - - // Frontier - Ethereum: pallet_ethereum = 60, - EVM: pallet_evm = 61, - EVMChainId: pallet_evm_chain_id = 62, - BaseFee: pallet_base_fee = 64, - TransactionPayment: pallet_transaction_payment = 66, - - // XCM - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Storage, Event} = 70, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 71, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 72, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 73, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 74, - ForeignAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 75, - ForeignAssetsCreator: pallet_foreign_asset_creator::{Pallet, Call, Storage, Event} = 76, - AssetRate: pallet_asset_rate::{Pallet, Call, Storage, Event} = 77, - XcmExecutorUtils: pallet_xcm_executor_utils::{Pallet, Call, Storage, Event} = 78, - - RootTesting: pallet_root_testing = 100, - AsyncBacking: pallet_async_backing::{Pallet, Storage} = 110, - } -); - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, frame_system_benchmarking::Pallet::] - [cumulus_pallet_parachain_system, ParachainSystem] - [pallet_timestamp, Timestamp] - [pallet_sudo, Sudo] - [pallet_utility, Utility] - [pallet_proxy, Proxy] - [pallet_tx_pause, TxPause] - [pallet_balances, Balances] - [pallet_multisig, Multisig] - [pallet_cc_authorities_noting, AuthoritiesNoting] - [pallet_author_inherent, AuthorInherent] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - [pallet_xcm_benchmarks::generic, pallet_xcm_benchmarks::generic::Pallet::] - [pallet_message_queue, MessageQueue] - [pallet_assets, ForeignAssets] - [pallet_foreign_asset_creator, ForeignAssetsCreator] - [pallet_asset_rate, AssetRate] - [pallet_xcm_executor_utils, XcmExecutorUtils] - ); -} - -impl_runtime_apis! { - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - xt: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - // Filtered calls should not enter the tx pool as they'll fail if inserted. - // If this call is not allowed, we return early. - if !::BaseCallFilter::contains(&xt.0.function) { - return InvalidTransaction::Call.into(); - } - - // This runtime uses Substrate's pallet transaction payment. This - // makes the chain feel like a standard Substrate chain when submitting - // frame transactions and using Substrate ecosystem tools. It has the downside that - // transaction are not prioritized by gas_price. The following code reprioritizes - // transactions to overcome this. - // - // A more elegant, ethereum-first solution is - // a pallet that replaces pallet transaction payment, and allows users - // to directly specify a gas price rather than computing an effective one. - // #HopefullySomeday - - // First we pass the transactions to the standard FRAME executive. This calculates all the - // necessary tags, longevity and other properties that we will leave unchanged. - // This also assigns some priority that we don't care about and will overwrite next. - let mut intermediate_valid = Executive::validate_transaction(source, xt.clone(), block_hash)?; - - let dispatch_info = xt.get_dispatch_info(); - - // If this is a pallet ethereum transaction, then its priority is already set - // according to effective priority fee from pallet ethereum. If it is any other kind of - // transaction, we modify its priority. The goal is to arrive at a similar metric used - // by pallet ethereum, which means we derive a fee-per-gas from the txn's tip and - // weight. - Ok(match &xt.0.function { - RuntimeCall::Ethereum(transact { .. }) => intermediate_valid, - _ if dispatch_info.class != DispatchClass::Normal => intermediate_valid, - _ => { - let tip = match xt.0.signature { - None => 0, - Some((_, _, ref signed_extra)) => { - // Yuck, this depends on the index of charge transaction in Signed Extra - let charge_transaction = &signed_extra.7; - charge_transaction.tip() - } - }; - - let effective_gas = - ::GasWeightMapping::weight_to_gas( - dispatch_info.weight - ); - let tip_per_gas = if effective_gas > 0 { - tip.saturating_div(u128::from(effective_gas)) - } else { - 0 - }; - - // Overwrite the original prioritization with this ethereum one - intermediate_valid.priority = tip_per_gas as u64; - intermediate_valid - } - }) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, sp_core::crypto::KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Index { - System::account_nonce(account) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - impl async_backing_primitives::UnincludedSegmentApi for Runtime { - fn can_build_upon( - included_hash: ::Hash, - slot: async_backing_primitives::Slot, - ) -> bool { - ConsensusHook::can_build_upon(included_hash, slot) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata( - extra: bool, - ) -> ( - Vec, - Vec, - ) { - use frame_benchmarking::{Benchmarking, BenchmarkList}; - use frame_support::traits::StorageInfoTrait; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig, - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{BenchmarkBatch, Benchmarking, BenchmarkError}; - use sp_core::storage::TrackedStorageKey; - use staging_xcm::latest::prelude::*; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - use xcm_config::SelfReserve; - - parameter_types! { - pub ExistentialDepositAsset: Option = Some(( - SelfReserve::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(MultiLocation::parent()) - } - fn worst_case_holding(_depositable_count: u32) -> MultiAssets { - // We only care for native asset until we support others - // TODO: refactor this case once other assets are supported - vec![MultiAsset{ - id: Concrete(MultiLocation::here()), - fun: Fungible(u128::MAX), - }].into() - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((MultiLocation::parent(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - fn subscribe_origin() -> Result { - Ok(MultiLocation::parent()) - } - - fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { - let origin = MultiLocation::parent(); - let assets: MultiAssets = (Concrete(MultiLocation::parent()), 1_000u128).into(); - let ticket = MultiLocation { parents: 0, interior: Here }; - Ok((origin, ticket, assets)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between AH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - use xcm_config::SelfReserve; - // AH can reserve transfer native token to some random parachain. - let random_para_id = 43211234; - let balance = EXISTENTIAL_DEPOSIT * 10; - - ParachainSystem::open_outbound_hrmp_channel_for_benchmarks_or_tests( - random_para_id.into() - ); - Some(( - MultiAsset { - fun: Fungible(balance), - id: Concrete(SelfReserve::get()) - }, - ParentThen(Parachain(random_para_id).into()).into(), - )) - } - - fn set_up_complex_asset_transfer( - ) -> Option<(MultiAssets, u32, MultiLocation, Box)> { - use xcm_config::SelfReserve; - // Transfer to Relay some local AH asset (local-reserve-transfer) while paying - // fees using teleported native token. - // (We don't care that Relay doesn't accept incoming unknown AH local asset) - let dest = Parent.into(); - - let fee_amount = EXISTENTIAL_DEPOSIT; - let fee_asset: MultiAsset = (SelfReserve::get(), fee_amount).into(); - - let who = frame_benchmarking::whitelisted_caller(); - // Give some multiple of the existential deposit - let balance = fee_amount + EXISTENTIAL_DEPOSIT * 1000; - let _ = >::make_free_balance_be( - &who, balance, - ); - - // verify initial balance - assert_eq!(Balances::free_balance(&who), balance); - - // set up local asset - let asset_amount = 10u128; - let initial_asset_amount = asset_amount * 10; - - let (asset_id, asset_location) = pallet_foreign_asset_creator::benchmarks::create_default_minted_asset::( - initial_asset_amount, - who - ); - - let transfer_asset: MultiAsset = (asset_location, asset_amount).into(); - - let assets: MultiAssets = vec![fee_asset.clone(), transfer_asset].into(); - let fee_index = if assets.get(0).unwrap().eq(&fee_asset) { 0 } else { 1 }; - - // verify transferred successfully - let verify = Box::new(move || { - // verify native balance after transfer, decreased by transferred fee amount - // (plus transport fees) - assert!(Balances::free_balance(&who) <= balance - fee_amount); - // verify asset balance decreased by exactly transferred amount - assert_eq!( - ForeignAssets::balance(asset_id, &who), - initial_asset_amount - asset_amount, - ); - }); - Some((assets, fee_index as u32, dest, verify)) - } - } - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac") - .to_vec() - .into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80") - .to_vec() - .into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a") - .to_vec() - .into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850") - .to_vec() - .into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7") - .to_vec() - .into(), - // The transactional storage limit. - hex_literal::hex!("3a7472616e73616374696f6e5f6c6576656c3a") - .to_vec() - .into(), - - // ParachainInfo ParachainId - hex_literal::hex!( "0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f") - .to_vec() - .into(), - ]; - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - impl fp_rpc::EthereumRuntimeRPCApi for Runtime { - fn chain_id() -> u64 { - ::ChainId::get() - } - - fn account_basic(address: H160) -> EVMAccount { - let (account, _) = pallet_evm::Pallet::::account_basic(&address); - account - } - - fn gas_price() -> U256 { - let (gas_price, _) = ::FeeCalculator::min_gas_price(); - gas_price - } - - fn account_code_at(address: H160) -> Vec { - pallet_evm::AccountCodes::::get(address) - } - - fn author() -> H160 { - >::find_author() - } - - fn storage_at(address: H160, index: U256) -> H256 { - let mut tmp = [0u8; 32]; - index.to_big_endian(&mut tmp); - pallet_evm::AccountStorages::::get(address, H256::from_slice(&tmp[..])) - } - - fn call( - from: H160, - to: H160, - data: Vec, - value: U256, - gas_limit: U256, - max_fee_per_gas: Option, - max_priority_fee_per_gas: Option, - nonce: Option, - _estimate: bool, - access_list: Option)>>, - ) -> Result { - let is_transactional = false; - let validate = true; - ::Runner::call( - from, - to, - data, - value, - gas_limit.min(u64::MAX.into()).low_u64(), - max_fee_per_gas, - max_priority_fee_per_gas, - nonce, - access_list.unwrap_or_default(), - is_transactional, - validate, - None, - None, - ::config(), - ).map_err(|err| err.error.into()) - } - - fn create( - from: H160, - data: Vec, - value: U256, - gas_limit: U256, - max_fee_per_gas: Option, - max_priority_fee_per_gas: Option, - nonce: Option, - _estimate: bool, - access_list: Option)>>, - ) -> Result { - let is_transactional = false; - let validate = true; - ::Runner::create( - from, - data, - value, - gas_limit.min(u64::MAX.into()).low_u64(), - max_fee_per_gas, - max_priority_fee_per_gas, - nonce, - access_list.unwrap_or_default(), - is_transactional, - validate, - None, - None, - ::config(), - ).map_err(|err| err.error.into()) - } - - fn current_transaction_statuses() -> Option> { - pallet_ethereum::CurrentTransactionStatuses::::get() - } - - fn current_block() -> Option { - pallet_ethereum::CurrentBlock::::get() - } - - fn current_receipts() -> Option> { - pallet_ethereum::CurrentReceipts::::get() - } - - fn current_all() -> ( - Option, - Option>, - Option>, - ) { - ( - pallet_ethereum::CurrentBlock::::get(), - pallet_ethereum::CurrentReceipts::::get(), - pallet_ethereum::CurrentTransactionStatuses::::get() - ) - } - - fn extrinsic_filter( - xts: Vec<::Extrinsic>, - ) -> Vec { - xts.into_iter().filter_map(|xt| match xt.0.function { - RuntimeCall::Ethereum(transact { transaction }) => Some(transaction), - _ => None - }).collect::>() - } - - fn elasticity() -> Option { - Some(pallet_base_fee::Elasticity::::get()) - } - - fn gas_limit_multiplier_support() {} - - fn pending_block(xts: Vec<::Extrinsic>) -> (Option, Option>) { - for ext in xts.into_iter() { - let _ = Executive::apply_extrinsic(ext); - } - - Ethereum::on_finalize(System::block_number() + 1); - - ( - pallet_ethereum::CurrentBlock::::get(), - pallet_ethereum::CurrentTransactionStatuses::::get() - ) - } - } - - impl fp_rpc::ConvertTransactionRuntimeApi for Runtime { - fn convert_transaction( - transaction: pallet_ethereum::Transaction - ) -> ::Extrinsic { - UncheckedExtrinsic::new_unsigned( - pallet_ethereum::Call::::transact { transaction }.into(), - ) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl dp_slot_duration_runtime_api::TanssiSlotDurationApi for Runtime { - fn slot_duration() -> u64 { - SLOT_DURATION - } - } -} - -#[allow(dead_code)] -struct CheckInherents; - -// TODO: this should be removed but currently if we remove it the relay does not check anything -// related to other inherents that are not parachain-system -#[allow(deprecated)] -impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { - fn check_inherents( - block: &Block, - relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, - ) -> sp_inherents::CheckInherentsResult { - let relay_chain_slot = relay_state_proof - .read_slot() - .expect("Could not read the relay chain slot from the proof"); - - let inherent_data = - cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( - relay_chain_slot, - sp_std::time::Duration::from_secs(6), - ) - .create_inherent_data() - .expect("Could not create the timestamp inherent data"); - - inherent_data.check_extrinsics(block) - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - CheckInherents = CheckInherents, - BlockExecutor = pallet_author_inherent::BlockExecutor::, -} diff --git a/container-chains/runtime-templates/frontier/src/migrations.rs b/container-chains/runtime-templates/frontier/src/migrations.rs deleted file mode 100644 index cd50a67..0000000 --- a/container-chains/runtime-templates/frontier/src/migrations.rs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Migrations -//! -//! This module acts as a registry where each migration is defined. Each migration should implement -//! the "Migration" trait declared in the pallet-migrations crate. - -use { - frame_support::{pallet_prelude::GetStorageVersion, traits::PalletInfoAccess}, - pallet_migrations::{GetMigrations, Migration}, - runtime_common::migrations::{ - PolkadotXcmMigrationFixVersion, XcmpQueueMigrationFixVersion, XcmpQueueMigrationV3, - XcmpQueueMigrationV4, - }, - sp_std::{marker::PhantomData, prelude::*}, -}; - -pub struct TemplateMigrations( - PhantomData<(Runtime, XcmpQueue, PolkadotXcm)>, -); - -impl GetMigrations - for TemplateMigrations -where - PolkadotXcm: GetStorageVersion + PalletInfoAccess + 'static, - XcmpQueue: GetStorageVersion + PalletInfoAccess + 'static, - Runtime: pallet_evm::Config, - Runtime: frame_system::Config, - Runtime: cumulus_pallet_xcmp_queue::Config, -{ - fn get_migrations() -> Vec> { - // let migrate_precompiles = MigratePrecompileDummyCode::(Default::default()); - let migrate_polkadot_xcm_v1 = - PolkadotXcmMigrationFixVersion::(Default::default()); - let migrate_xcmp_queue_v2 = - XcmpQueueMigrationFixVersion::(Default::default()); - let migrate_xcmp_queue_v3 = XcmpQueueMigrationV3::(Default::default()); - let migrate_xcmp_queue_v4 = XcmpQueueMigrationV4::(Default::default()); - vec![ - // Applied in runtime 400 - // Box::new(migrate_precompiles), - Box::new(migrate_polkadot_xcm_v1), - Box::new(migrate_xcmp_queue_v2), - Box::new(migrate_xcmp_queue_v3), - Box::new(migrate_xcmp_queue_v4), - ] - } -} diff --git a/container-chains/runtime-templates/frontier/src/precompiles.rs b/container-chains/runtime-templates/frontier/src/precompiles.rs deleted file mode 100644 index bdc3f66..0000000 --- a/container-chains/runtime-templates/frontier/src/precompiles.rs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::xcm_config::{ForeignAssetsInstance, XcmConfig}, - frame_support::parameter_types, - pallet_evm_precompile_balances_erc20::{Erc20BalancesPrecompile, Erc20Metadata}, - pallet_evm_precompile_batch::BatchPrecompile, - pallet_evm_precompile_call_permit::CallPermitPrecompile, - pallet_evm_precompile_modexp::Modexp, - pallet_evm_precompile_sha3fips::Sha3FIPS256, - pallet_evm_precompile_simple::{ECRecover, ECRecoverPublicKey, Identity, Ripemd160, Sha256}, - pallet_evm_precompile_xcm_utils::{AllExceptXcmExecute, XcmUtilsPrecompile}, - pallet_evm_precompileset_assets_erc20::Erc20AssetsPrecompileSet, - precompile_utils::precompile_set::{ - AcceptDelegateCall, AddressU64, CallableByContract, CallableByPrecompile, PrecompileAt, - PrecompileSetBuilder, PrecompileSetStartingWith, PrecompilesInRangeInclusive, - SubcallWithMaxNesting, - }, -}; - -/// ERC20 metadata for the native token. -pub struct NativeErc20Metadata; - -impl Erc20Metadata for NativeErc20Metadata { - /// Returns the name of the token. - fn name() -> &'static str { - "UNIT token" - } - - /// Returns the symbol of the token. - fn symbol() -> &'static str { - "UNIT" - } - - /// Returns the decimals places of the token. - fn decimals() -> u8 { - 18 - } - - /// Must return `true` only if it represents the main native currency of - /// the network. It must be the currency used in `pallet_evm`. - fn is_native_currency() -> bool { - true - } -} - -/// The asset precompile address prefix. Addresses that match against this prefix will be routed -/// to Erc20AssetsPrecompileSet being marked as foreign -pub const FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX: &[u8] = &[255u8; 18]; - -parameter_types! { - pub ForeignAssetPrefix: &'static [u8] = FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX; -} - -type EthereumPrecompilesChecks = (AcceptDelegateCall, CallableByContract, CallableByPrecompile); - -#[precompile_utils::precompile_name_from_address] -type TemplatePrecompilesAt = ( - // Ethereum precompiles: - // Allow DELEGATECALL to stay compliant with Ethereum behavior. - PrecompileAt, ECRecover, EthereumPrecompilesChecks>, - PrecompileAt, Sha256, EthereumPrecompilesChecks>, - PrecompileAt, Ripemd160, EthereumPrecompilesChecks>, - PrecompileAt, Identity, EthereumPrecompilesChecks>, - PrecompileAt, Modexp, EthereumPrecompilesChecks>, - // Non-template specific nor Ethereum precompiles : - PrecompileAt, Sha3FIPS256, (CallableByContract, CallableByPrecompile)>, - PrecompileAt, ECRecoverPublicKey, (CallableByContract, CallableByPrecompile)>, - // Template specific precompiles: - PrecompileAt< - AddressU64<2048>, - Erc20BalancesPrecompile, - (CallableByContract, CallableByPrecompile), - >, - PrecompileAt, BatchPrecompile, SubcallWithMaxNesting<2>>, - PrecompileAt< - AddressU64<2050>, - CallPermitPrecompile, - (SubcallWithMaxNesting<0>, CallableByContract), - >, - PrecompileAt< - AddressU64<2051>, - XcmUtilsPrecompile, - CallableByContract>, - >, -); - -pub type TemplatePrecompiles = PrecompileSetBuilder< - R, - ( - PrecompilesInRangeInclusive<(AddressU64<1>, AddressU64<4095>), TemplatePrecompilesAt>, - // Prefixed precompile sets (XC20) - PrecompileSetStartingWith< - ForeignAssetPrefix, - Erc20AssetsPrecompileSet, - (CallableByContract, CallableByPrecompile), - >, - ), ->; diff --git a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_dmp_queue.rs b/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index 55ded56..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_dmp_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_dmp_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/cumulus_pallet_dmp_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_dmp_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for SubstrateWeight { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65661` - // Estimated: `69126` - // Minimum execution time: 125_583_000 picoseconds. - Weight::from_parts(127_942_000, 69126) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65660` - // Estimated: `69125` - // Minimum execution time: 74_056_000 picoseconds. - Weight::from_parts(75_026_000, 69125) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65691` - // Estimated: `69156` - // Minimum execution time: 119_948_000 picoseconds. - Weight::from_parts(122_167_000, 69156) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65690` - // Estimated: `69155` - // Minimum execution time: 68_728_000 picoseconds. - Weight::from_parts(69_890_000, 69155) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_parachain_system.rs b/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index df867e7..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_parachain_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/cumulus_pallet_parachain_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_parachain_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::LastDmqMqcHead` (r:1 w:1) - /// Proof: `ParachainSystem::LastDmqMqcHead` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::ProcessedDownwardMessages` (r:0 w:1) - /// Proof: `ParachainSystem::ProcessedDownwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1000) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `3517` - // Minimum execution time: 2_146_000 picoseconds. - Weight::from_parts(2_181_000, 3517) - // Standard Error: 35_149 - .saturating_add(Weight::from_parts(194_124_508, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_xcmp_queue.rs b/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index 383fbcf..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_xcmp_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_xcmp_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/cumulus_pallet_xcmp_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_xcmp_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for SubstrateWeight { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `1594` - // Minimum execution time: 5_665_000 picoseconds. - Weight::from_parts(5_873_000, 1594) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `115` - // Estimated: `3517` - // Minimum execution time: 14_867_000 picoseconds. - Weight::from_parts(15_236_000, 3517) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `1594` - // Minimum execution time: 3_108_000 picoseconds. - Weight::from_parts(3_280_000, 1594) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `144` - // Estimated: `1629` - // Minimum execution time: 4_137_000 picoseconds. - Weight::from_parts(4_283_000, 1629) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 55_147_000 picoseconds. - Weight::from_parts(55_408_000, 0) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65744` - // Estimated: `69209` - // Minimum execution time: 116_672_000 picoseconds. - Weight::from_parts(118_871_000, 69209) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65743` - // Estimated: `69208` - // Minimum execution time: 58_460_000 picoseconds. - Weight::from_parts(59_520_000, 69208) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/frame_system.rs b/container-chains/runtime-templates/frontier/src/weights/frame_system.rs deleted file mode 100644 index abf9337..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/frame_system.rs +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for frame_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// frame_system -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/frame_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for frame_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl frame_system::WeightInfo for SubstrateWeight { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_720_000 picoseconds. - Weight::from_parts(1_269_593, 0) - // Standard Error: 0 - .saturating_add(Weight::from_parts(433, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_530_000 picoseconds. - Weight::from_parts(7_801_000, 0) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_778, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 4_702_000 picoseconds. - Weight::from_parts(4_935_000, 1485) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `127` - // Estimated: `1612` - // Minimum execution time: 145_799_273_000 picoseconds. - Weight::from_parts(147_924_130_000, 1612) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_786_000 picoseconds. - Weight::from_parts(2_900_000, 0) - // Standard Error: 2_302 - .saturating_add(Weight::from_parts(914_245, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_889_000 picoseconds. - Weight::from_parts(2_984_000, 0) - // Standard Error: 963 - .saturating_add(Weight::from_parts(642_377, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `74 + p * (69 ±0)` - // Estimated: `84 + p * (70 ±0)` - // Minimum execution time: 5_194_000 picoseconds. - Weight::from_parts(5_299_000, 84) - // Standard Error: 2_038 - .saturating_add(Weight::from_parts(1_206_738, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } - /// Storage: `System::AuthorizedUpgrade` (r:0 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - fn authorize_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 23_274_000 picoseconds. - Weight::from_parts(25_517_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn apply_authorized_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `149` - // Estimated: `1634` - // Minimum execution time: 151_338_478_000 picoseconds. - Weight::from_parts(153_336_555_000, 1634) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/mod.rs b/container-chains/runtime-templates/frontier/src/weights/mod.rs deleted file mode 100644 index 3bc8f23..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/mod.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! A list of the different weight modules for our runtime. - -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod frame_system; -pub mod pallet_asset_rate; -pub mod pallet_assets; -pub mod pallet_author_inherent; -pub mod pallet_balances; -pub mod pallet_cc_authorities_noting; -pub mod pallet_foreign_asset_creator; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_proxy; - -pub mod pallet_sudo; -pub mod pallet_timestamp; -pub mod pallet_tx_pause; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod pallet_xcm_executor_utils; -pub mod xcm; diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_asset_rate.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_asset_rate.rs deleted file mode 100644 index 06a83e2..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_asset_rate.rs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_asset_rate -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_asset_rate -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_asset_rate.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_asset_rate using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_asset_rate::WeightInfo for SubstrateWeight { - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `3499` - // Minimum execution time: 12_427_000 picoseconds. - Weight::from_parts(12_705_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn update() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `3499` - // Minimum execution time: 12_480_000 picoseconds. - Weight::from_parts(12_726_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn remove() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `3499` - // Minimum execution time: 13_196_000 picoseconds. - Weight::from_parts(13_474_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_assets.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_assets.rs deleted file mode 100644 index 7c98788..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_assets.rs +++ /dev/null @@ -1,489 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_assets -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_assets -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_assets.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_assets using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_assets::WeightInfo for SubstrateWeight { - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 0_000 picoseconds. - Weight::from_parts(0, 0) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `3` - // Estimated: `3625` - // Minimum execution time: 11_887_000 picoseconds. - Weight::from_parts(12_178_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `225` - // Estimated: `3625` - // Minimum execution time: 12_827_000 picoseconds. - Weight::from_parts(13_164_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1001 w:1000) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `114 + c * (183 ±0)` - // Estimated: `3625 + c * (2591 ±0)` - // Minimum execution time: 17_120_000 picoseconds. - Weight::from_parts(17_352_000, 3625) - // Standard Error: 17_600 - .saturating_add(Weight::from_parts(14_849_061, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2591).saturating_mul(c.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1001 w:1000) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `370 + a * (74 ±0)` - // Estimated: `3625 + a * (2597 ±0)` - // Minimum execution time: 18_528_000 picoseconds. - Weight::from_parts(18_693_000, 3625) - // Standard Error: 3_650 - .saturating_add(Weight::from_parts(5_522_658, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2597).saturating_mul(a.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 13_728_000 picoseconds. - Weight::from_parts(13_946_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 25_570_000 picoseconds. - Weight::from_parts(26_170_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3625` - // Minimum execution time: 34_485_000 picoseconds. - Weight::from_parts(35_118_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `6156` - // Minimum execution time: 48_951_000 picoseconds. - Weight::from_parts(49_958_000, 6156) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `6156` - // Minimum execution time: 43_375_000 picoseconds. - Weight::from_parts(44_254_000, 6156) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `376` - // Estimated: `6156` - // Minimum execution time: 49_553_000 picoseconds. - Weight::from_parts(50_087_000, 6156) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3625` - // Minimum execution time: 17_067_000 picoseconds. - Weight::from_parts(17_411_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3625` - // Minimum execution time: 16_924_000 picoseconds. - Weight::from_parts(17_493_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `225` - // Estimated: `3625` - // Minimum execution time: 12_318_000 picoseconds. - Weight::from_parts(12_702_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `225` - // Estimated: `3625` - // Minimum execution time: 12_483_000 picoseconds. - Weight::from_parts(12_836_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 14_180_000 picoseconds. - Weight::from_parts(14_542_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 12_353_000 picoseconds. - Weight::from_parts(12_755_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 15_648_000 picoseconds. - Weight::from_parts(16_160_261, 3625) - // Standard Error: 338 - .saturating_add(Weight::from_parts(1_975, 0).saturating_mul(n.into())) - // Standard Error: 338 - .saturating_add(Weight::from_parts(2_391, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `353` - // Estimated: `3625` - // Minimum execution time: 15_978_000 picoseconds. - Weight::from_parts(16_327_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `78` - // Estimated: `3625` - // Minimum execution time: 13_541_000 picoseconds. - Weight::from_parts(14_126_720, 3625) - // Standard Error: 293 - .saturating_add(Weight::from_parts(911, 0).saturating_mul(n.into())) - // Standard Error: 293 - .saturating_add(Weight::from_parts(1_803, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `353` - // Estimated: `3625` - // Minimum execution time: 15_601_000 picoseconds. - Weight::from_parts(16_016_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 11_833_000 picoseconds. - Weight::from_parts(12_161_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `225` - // Estimated: `3625` - // Minimum execution time: 20_390_000 picoseconds. - Weight::from_parts(20_853_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `429` - // Estimated: `6156` - // Minimum execution time: 58_486_000 picoseconds. - Weight::from_parts(59_395_000, 6156) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `369` - // Estimated: `3625` - // Minimum execution time: 22_162_000 picoseconds. - Weight::from_parts(22_659_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(122), added: 2597, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `369` - // Estimated: `3625` - // Minimum execution time: 22_553_000 picoseconds. - Weight::from_parts(22_992_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 13_543_000 picoseconds. - Weight::from_parts(13_896_000, 3625) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 19_073_000 picoseconds. - Weight::from_parts(19_772_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `191` - // Estimated: `3625` - // Minimum execution time: 19_114_000 picoseconds. - Weight::from_parts(19_596_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `303` - // Estimated: `3625` - // Minimum execution time: 17_323_000 picoseconds. - Weight::from_parts(17_592_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `323` - // Estimated: `3625` - // Minimum execution time: 17_204_000 picoseconds. - Weight::from_parts(17_458_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3625` - // Minimum execution time: 16_920_000 picoseconds. - Weight::from_parts(17_206_000, 3625) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_author_inherent.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_author_inherent.rs deleted file mode 100644 index 479e425..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_author_inherent.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_author_inherent -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_author_inherent -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_author_inherent.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_author_inherent using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_author_inherent::WeightInfo for SubstrateWeight { - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::Author` (r:1 w:0) - /// Proof: `AuthorInherent::Author` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - /// Storage: `AuthoritiesNoting::Authorities` (r:1 w:0) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::InherentIncluded` (r:0 w:1) - /// Proof: `AuthorInherent::InherentIncluded` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) - fn kick_off_authorship_validation() -> Weight { - // Proof Size summary in bytes: - // Measured: `187` - // Estimated: `1672` - // Minimum execution time: 12_457_000 picoseconds. - Weight::from_parts(12_761_000, 1672) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_balances.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_balances.rs deleted file mode 100644 index d8ffa77..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_balances.rs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_balances -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_balances -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_balances.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_balances using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_balances::WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `39` - // Estimated: `3581` - // Minimum execution time: 64_977_000 picoseconds. - Weight::from_parts(66_542_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `39` - // Estimated: `3581` - // Minimum execution time: 52_023_000 picoseconds. - Weight::from_parts(53_034_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `162` - // Estimated: `3581` - // Minimum execution time: 19_456_000 picoseconds. - Weight::from_parts(19_891_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `162` - // Estimated: `3581` - // Minimum execution time: 26_159_000 picoseconds. - Weight::from_parts(26_725_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `201` - // Estimated: `6172` - // Minimum execution time: 67_402_000 picoseconds. - Weight::from_parts(68_888_000, 6172) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `39` - // Estimated: `3581` - // Minimum execution time: 64_503_000 picoseconds. - Weight::from_parts(65_929_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `162` - // Estimated: `3581` - // Minimum execution time: 23_262_000 picoseconds. - Weight::from_parts(23_837_000, 3581) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (124 ±0)` - // Estimated: `990 + u * (2591 ±0)` - // Minimum execution time: 21_520_000 picoseconds. - Weight::from_parts(21_661_000, 990) - // Standard Error: 13_235 - .saturating_add(Weight::from_parts(17_507_362, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2591).saturating_mul(u.into())) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_cc_authorities_noting.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_cc_authorities_noting.rs deleted file mode 100644 index 9b813f0..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_cc_authorities_noting.rs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_cc_authorities_noting -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_cc_authorities_noting -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_cc_authorities_noting.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_cc_authorities_noting using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_cc_authorities_noting::WeightInfo for SubstrateWeight { - /// Storage: `AuthoritiesNoting::DidSetOrchestratorAuthorityData` (r:1 w:1) - /// Proof: `AuthoritiesNoting::DidSetOrchestratorAuthorityData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthoritiesNoting::OrchestratorParaId` (r:1 w:0) - /// Proof: `AuthoritiesNoting::OrchestratorParaId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthoritiesNoting::Authorities` (r:0 w:1) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_latest_authorities_data() -> Weight { - // Proof Size summary in bytes: - // Measured: `141` - // Estimated: `1626` - // Minimum execution time: 27_869_000 picoseconds. - Weight::from_parts(28_360_000, 1626) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `AuthoritiesNoting::Authorities` (r:0 w:1) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[0, 10]`. - fn set_authorities(x: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_965_000 picoseconds. - Weight::from_parts(7_556_746, 0) - // Standard Error: 2_217 - .saturating_add(Weight::from_parts(51_042, 0).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AuthoritiesNoting::OrchestratorParaId` (r:0 w:1) - /// Proof: `AuthoritiesNoting::OrchestratorParaId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_orchestrator_para_id() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_691_000 picoseconds. - Weight::from_parts(6_918_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_foreign_asset_creator.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_foreign_asset_creator.rs deleted file mode 100644 index d29a9fd..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_foreign_asset_creator.rs +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_foreign_asset_creator -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_foreign_asset_creator -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_foreign_asset_creator.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_foreign_asset_creator using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_foreign_asset_creator::WeightInfo for SubstrateWeight { - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `EVM::Suicided` (r:1 w:0) - /// Proof: `EVM::Suicided` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `EVM::AccountCodes` (r:1 w:1) - /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `EVM::AccountCodesMetadata` (r:0 w:1) - /// Proof: `EVM::AccountCodesMetadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn create_foreign_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `532` - // Estimated: `3997` - // Minimum execution time: 44_763_000 picoseconds. - Weight::from_parts(45_789_000, 3997) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:2) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn change_existing_asset_type() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `3654` - // Minimum execution time: 19_466_000 picoseconds. - Weight::from_parts(19_902_000, 3654) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn remove_existing_asset_type() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `3654` - // Minimum execution time: 16_784_000 picoseconds. - Weight::from_parts(17_245_000, 3654) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `EVM::AccountCodes` (r:1 w:1) - /// Proof: `EVM::AccountCodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `EVM::AccountCodesMetadata` (r:0 w:1) - /// Proof: `EVM::AccountCodesMetadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `EVM::Suicided` (r:0 w:1) - /// Proof: `EVM::Suicided` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn destroy_foreign_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `925` - // Estimated: `4390` - // Minimum execution time: 45_527_000 picoseconds. - Weight::from_parts(46_522_000, 4390) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(7_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_message_queue.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_message_queue.rs deleted file mode 100644 index a169495..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_message_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_message_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_message_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_message_queue::WeightInfo for SubstrateWeight { - /// Storage: `MessageQueue::ServiceHead` (r:1 w:0) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::BookStateFor` (r:2 w:2) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `223` - // Estimated: `6044` - // Minimum execution time: 13_727_000 picoseconds. - Weight::from_parts(14_217_000, 6044) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:2 w:2) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `218` - // Estimated: `6044` - // Minimum execution time: 11_943_000 picoseconds. - Weight::from_parts(12_228_000, 6044) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `48` - // Estimated: `3517` - // Minimum execution time: 6_765_000 picoseconds. - Weight::from_parts(7_070_000, 3517) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 6_837_000 picoseconds. - Weight::from_parts(7_070_000, 69050) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 7_016_000 picoseconds. - Weight::from_parts(7_262_000, 69050) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:0 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 163_675_000 picoseconds. - Weight::from_parts(166_474_000, 0) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:0) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `171` - // Estimated: `3517` - // Minimum execution time: 7_336_000 picoseconds. - Weight::from_parts(7_637_000, 3517) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `69050` - // Minimum execution time: 61_534_000 picoseconds. - Weight::from_parts(63_398_000, 69050) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65709` - // Estimated: `69050` - // Minimum execution time: 86_548_000 picoseconds. - Weight::from_parts(87_702_000, 69050) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65709` - // Estimated: `69050` - // Minimum execution time: 121_205_000 picoseconds. - Weight::from_parts(122_592_000, 69050) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_multisig.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_multisig.rs deleted file mode 100644 index 66eb839..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_multisig -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_multisig -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_multisig.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_multisig using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_multisig::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `z` is `[0, 10000]`. - fn as_multi_threshold_1(z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 22_206_000 picoseconds. - Weight::from_parts(23_471_073, 3997) - // Standard Error: 5 - .saturating_add(Weight::from_parts(560, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `213` - // Estimated: `5587` - // Minimum execution time: 49_669_000 picoseconds. - Weight::from_parts(39_795_684, 5587) - // Standard Error: 1_213 - .saturating_add(Weight::from_parts(114_077, 0).saturating_mul(s.into())) - // Standard Error: 11 - .saturating_add(Weight::from_parts(1_486, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `279` - // Estimated: `5587` - // Minimum execution time: 30_258_000 picoseconds. - Weight::from_parts(21_723_795, 5587) - // Standard Error: 556 - .saturating_add(Weight::from_parts(94_241, 0).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_parts(1_446, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `390 + s * (20 ±0)` - // Estimated: `5587 + s * (21 ±0)` - // Minimum execution time: 63_483_000 picoseconds. - Weight::from_parts(49_349_385, 5587) - // Standard Error: 952 - .saturating_add(Weight::from_parts(166_842, 0).saturating_mul(s.into())) - // Standard Error: 9 - .saturating_add(Weight::from_parts(1_552, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 21).saturating_mul(s.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `215` - // Estimated: `5587` - // Minimum execution time: 36_363_000 picoseconds. - Weight::from_parts(37_658_602, 5587) - // Standard Error: 798 - .saturating_add(Weight::from_parts(119_193, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `279` - // Estimated: `5587` - // Minimum execution time: 19_474_000 picoseconds. - Weight::from_parts(19_784_741, 5587) - // Standard Error: 572 - .saturating_add(Weight::from_parts(97_184, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `385` - // Estimated: `5587` - // Minimum execution time: 38_333_000 picoseconds. - Weight::from_parts(39_034_442, 5587) - // Standard Error: 740 - .saturating_add(Weight::from_parts(110_636, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_proxy.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_proxy.rs deleted file mode 100644 index f8790d3..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_proxy -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_proxy -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_proxy.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_proxy using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_proxy::WeightInfo for SubstrateWeight { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `161 + p * (25 ±0)` - // Estimated: `4310 + p * (25 ±0)` - // Minimum execution time: 22_254_000 picoseconds. - Weight::from_parts(23_010_468, 4310) - // Standard Error: 1_458 - .saturating_add(Weight::from_parts(40_432, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(Weight::from_parts(0, 25).saturating_mul(p.into())) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `412 + a * (56 ±0) + p * (25 ±0)` - // Estimated: `5302 + a * (57 ±0) + p * (25 ±0)` - // Minimum execution time: 50_859_000 picoseconds. - Weight::from_parts(51_538_651, 5302) - // Standard Error: 2_634 - .saturating_add(Weight::from_parts(179_993, 0).saturating_mul(a.into())) - // Standard Error: 2_722 - .saturating_add(Weight::from_parts(32_071, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 57).saturating_mul(a.into())) - .saturating_add(Weight::from_parts(0, 25).saturating_mul(p.into())) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, _p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `294 + a * (56 ±0)` - // Estimated: `5302` - // Minimum execution time: 27_927_000 picoseconds. - Weight::from_parts(29_013_118, 5302) - // Standard Error: 1_784 - .saturating_add(Weight::from_parts(171_679, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, _p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `294 + a * (56 ±0)` - // Estimated: `5302` - // Minimum execution time: 28_286_000 picoseconds. - Weight::from_parts(28_982_903, 5302) - // Standard Error: 1_836 - .saturating_add(Weight::from_parts(172_607, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `310 + a * (56 ±0) + p * (25 ±0)` - // Estimated: `5302` - // Minimum execution time: 37_097_000 picoseconds. - Weight::from_parts(37_102_077, 5302) - // Standard Error: 2_143 - .saturating_add(Weight::from_parts(178_297, 0).saturating_mul(a.into())) - // Standard Error: 2_214 - .saturating_add(Weight::from_parts(22_379, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `115 + p * (25 ±0)` - // Estimated: `4310` - // Minimum execution time: 28_152_000 picoseconds. - Weight::from_parts(28_993_831, 4310) - // Standard Error: 1_154 - .saturating_add(Weight::from_parts(36_008, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `115 + p * (25 ±0)` - // Estimated: `4310` - // Minimum execution time: 28_296_000 picoseconds. - Weight::from_parts(29_443_967, 4310) - // Standard Error: 2_004 - .saturating_add(Weight::from_parts(24_987, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `115 + p * (25 ±0)` - // Estimated: `4310` - // Minimum execution time: 27_221_000 picoseconds. - Weight::from_parts(28_116_982, 4310) - // Standard Error: 1_278 - .saturating_add(Weight::from_parts(36_320, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127` - // Estimated: `4310` - // Minimum execution time: 30_492_000 picoseconds. - Weight::from_parts(31_292_727, 4310) - // Standard Error: 1_255 - .saturating_add(Weight::from_parts(15_221, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `140 + p * (25 ±0)` - // Estimated: `4310` - // Minimum execution time: 28_633_000 picoseconds. - Weight::from_parts(29_583_862, 4310) - // Standard Error: 1_119 - .saturating_add(Weight::from_parts(27_483, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_sudo.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_sudo.rs deleted file mode 100644 index 86577d3..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_sudo.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_sudo -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_sudo -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_sudo.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_sudo using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_sudo::WeightInfo for SubstrateWeight { - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(20), added: 515, mode: `MaxEncodedLen`) - fn set_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1505` - // Minimum execution time: 10_516_000 picoseconds. - Weight::from_parts(10_804_000, 1505) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(20), added: 515, mode: `MaxEncodedLen`) - fn sudo() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1505` - // Minimum execution time: 11_972_000 picoseconds. - Weight::from_parts(12_397_000, 1505) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(20), added: 515, mode: `MaxEncodedLen`) - fn sudo_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1505` - // Minimum execution time: 11_964_000 picoseconds. - Weight::from_parts(12_171_000, 1505) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(20), added: 515, mode: `MaxEncodedLen`) - fn remove_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `49` - // Estimated: `1505` - // Minimum execution time: 9_267_000 picoseconds. - Weight::from_parts(9_627_000, 1505) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_timestamp.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_timestamp.rs deleted file mode 100644 index 02a2eb0..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_timestamp -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_timestamp -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_timestamp.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_timestamp using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_timestamp::WeightInfo for SubstrateWeight { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `1493` - // Minimum execution time: 6_296_000 picoseconds. - Weight::from_parts(6_467_000, 1493) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 3_390_000 picoseconds. - Weight::from_parts(3_528_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_tx_pause.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_tx_pause.rs deleted file mode 100644 index 4ee196c..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_tx_pause.rs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_tx_pause -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_tx_pause -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_tx_pause.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_tx_pause using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_tx_pause::WeightInfo for SubstrateWeight { - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn pause() -> Weight { - // Proof Size summary in bytes: - // Measured: `4` - // Estimated: `3997` - // Minimum execution time: 14_796_000 picoseconds. - Weight::from_parts(15_140_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn unpause() -> Weight { - // Proof Size summary in bytes: - // Measured: `566` - // Estimated: `3997` - // Minimum execution time: 20_367_000 picoseconds. - Weight::from_parts(20_877_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_utility.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_utility.rs deleted file mode 100644 index 5386aab..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_utility.rs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_utility -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_utility -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_utility.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_utility using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_utility::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_510_000 picoseconds. - Weight::from_parts(10_441_949, 3997) - // Standard Error: 3_829 - .saturating_add(Weight::from_parts(7_226_422, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 12_087_000 picoseconds. - Weight::from_parts(12_487_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_270_000 picoseconds. - Weight::from_parts(8_428_529, 3997) - // Standard Error: 4_288 - .saturating_add(Weight::from_parts(7_638_677, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_800_000 picoseconds. - Weight::from_parts(10_005_000, 0) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_363_000 picoseconds. - Weight::from_parts(11_799_181, 3997) - // Standard Error: 3_986 - .saturating_add(Weight::from_parts(7_238_087, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_xcm.rs deleted file mode 100644 index 73d4e48..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_xcm.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 27_967_000 picoseconds. - Weight::from_parts(28_564_000, 3540) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::DeliveryFeeFactor` (r:1 w:0) - /// Proof: `XcmpQueue::DeliveryFeeFactor` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `359` - // Estimated: `607086` - // Minimum execution time: 159_104_000 picoseconds. - Weight::from_parts(163_461_000, 607086) - .saturating_add(T::DbWeight::get().reads(9_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:1 w:0) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(160), added: 2635, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `632` - // Estimated: `607086` - // Minimum execution time: 206_597_000 picoseconds. - Weight::from_parts(210_481_000, 607086) - .saturating_add(T::DbWeight::get().reads(13_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 12_448_000 picoseconds. - Weight::from_parts(12_850_000, 0) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 10_308_000 picoseconds. - Weight::from_parts(10_472_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_472_000 picoseconds. - Weight::from_parts(3_595_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 33_622_000 picoseconds. - Weight::from_parts(34_072_000, 3540) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `257` - // Estimated: `3722` - // Minimum execution time: 34_598_000 picoseconds. - Weight::from_parts(35_506_000, 3722) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_475_000 picoseconds. - Weight::from_parts(3_683_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `131` - // Estimated: `11021` - // Minimum execution time: 20_771_000 picoseconds. - Weight::from_parts(21_274_000, 11021) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `11025` - // Minimum execution time: 21_067_000 picoseconds. - Weight::from_parts(21_449_000, 11025) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `13507` - // Minimum execution time: 22_223_000 picoseconds. - Weight::from_parts(22_609_000, 13507) - .saturating_add(T::DbWeight::get().reads(5_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `6082` - // Minimum execution time: 31_347_000 picoseconds. - Weight::from_parts(32_060_000, 6082) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `172` - // Estimated: `8587` - // Minimum execution time: 12_168_000 picoseconds. - Weight::from_parts(12_550_000, 8587) - .saturating_add(T::DbWeight::get().reads(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `11032` - // Minimum execution time: 21_253_000 picoseconds. - Weight::from_parts(21_870_000, 11032) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `148` - // Estimated: `11038` - // Minimum execution time: 40_182_000 picoseconds. - Weight::from_parts(40_827_000, 11038) - .saturating_add(T::DbWeight::get().reads(10_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `1554` - // Minimum execution time: 5_644_000 picoseconds. - Weight::from_parts(5_826_000, 1554) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7706` - // Estimated: `11171` - // Minimum execution time: 33_330_000 picoseconds. - Weight::from_parts(33_695_000, 11171) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_benchmarks::generic.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_benchmarks::generic.rs deleted file mode 100644 index 753cd30..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_benchmarks::generic.rs +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_benchmarks::generic -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_benchmarks::generic -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_xcm_benchmarks::generic.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_benchmarks::generic using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm_benchmarks::generic::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 67_561_000 picoseconds. - Weight::from_parts(69_170_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_557_000 picoseconds. - Weight::from_parts(2_670_000, 0) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:0) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `3534` - // Minimum execution time: 10_508_000 picoseconds. - Weight::from_parts(10_749_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 18_545_000 picoseconds. - Weight::from_parts(18_900_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_628_000 picoseconds. - Weight::from_parts(2_801_000, 0) - } - fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_334_000 picoseconds. - Weight::from_parts(2_489_000, 0) - } - fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_378_000 picoseconds. - Weight::from_parts(2_490_000, 0) - } - fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_289_000 picoseconds. - Weight::from_parts(2_469_000, 0) - } - fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_994_000 picoseconds. - Weight::from_parts(3_151_000, 0) - } - fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_323_000 picoseconds. - Weight::from_parts(2_431_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 59_355_000 picoseconds. - Weight::from_parts(60_070_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - /// Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `126` - // Estimated: `3591` - // Minimum execution time: 16_086_000 picoseconds. - Weight::from_parts(16_467_000, 3591) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_363_000 picoseconds. - Weight::from_parts(2_453_000, 0) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 28_551_000 picoseconds. - Weight::from_parts(29_222_000, 3540) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_211_000 picoseconds. - Weight::from_parts(5_377_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_789_000 picoseconds. - Weight::from_parts(3_903_000, 0) - } - fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_536_000 picoseconds. - Weight::from_parts(2_681_000, 0) - } - fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_449_000 picoseconds. - Weight::from_parts(2_556_000, 0) - } - fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_379_000 picoseconds. - Weight::from_parts(2_487_000, 0) - } - fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_672_000 picoseconds. - Weight::from_parts(2_763_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 66_365_000 picoseconds. - Weight::from_parts(67_599_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_932_000 picoseconds. - Weight::from_parts(8_173_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 58_856_000 picoseconds. - Weight::from_parts(60_383_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_453_000 picoseconds. - Weight::from_parts(2_566_000, 0) - } - fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_332_000 picoseconds. - Weight::from_parts(2_460_000, 0) - } - fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_375_000 picoseconds. - Weight::from_parts(2_454_000, 0) - } - fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_364_000 picoseconds. - Weight::from_parts(2_452_000, 0) - } - fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_456_000 picoseconds. - Weight::from_parts(2_556_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_executor_utils.rs b/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_executor_utils.rs deleted file mode 100644 index e5bbc82..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/pallet_xcm_executor_utils.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_executor_utils -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_executor_utils -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_xcm_executor_utils.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_executor_utils using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm_executor_utils::WeightInfo for SubstrateWeight { - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:0 w:1) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn set_reserve_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_476_000 picoseconds. - Weight::from_parts(9_661_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:1) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn remove_reserve_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `607086` - // Minimum execution time: 12_581_000 picoseconds. - Weight::from_parts(12_882_000, 607086) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:0 w:1) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn set_teleport_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_411_000 picoseconds. - Weight::from_parts(9_733_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:1) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn remove_teleport_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `607086` - // Minimum execution time: 12_716_000 picoseconds. - Weight::from_parts(12_960_000, 607086) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/weights/xcm/mod.rs b/container-chains/runtime-templates/frontier/src/weights/xcm/mod.rs deleted file mode 100644 index a42dc2c..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/xcm/mod.rs +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -pub mod pallet_xcm_benchmarks_generic; - -use { - crate::Runtime, - frame_support::weights::Weight, - pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric, - sp_std::prelude::*, - staging_xcm::{ - latest::{prelude::*, Weight as XCMWeight}, - DoubleEncoded, - }, -}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -// Values copied from statemint benchmarks -const ASSET_BURN_MAX_PROOF_SIZE: u64 = 7242; -const ASSET_MINT_MAX_PROOF_SIZE: u64 = 7242; -const ASSET_TRANSFER_MAX_PROOF_SIZE: u64 = 13412; - -// For now we are returning benchmarked weights only for generic XCM instructions. -// Fungible XCM instructions will return a fixed weight value of -// 200_000_000 ref_time and its proper PoV weight taken from statemint benchmarks. -// -// TODO: add the fungible benchmarked values once these are calculated. -pub struct XcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for XcmWeight -where - Runtime: frame_system::Config, -{ - fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_BURN_MAX_PROOF_SIZE, - )) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts(200_000_000u64, 0)) - } - fn receive_teleported_asset(_assets: &MultiAssets) -> XCMWeight { - XCMWeight::MAX - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> XCMWeight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_TRANSFER_MAX_PROOF_SIZE, - )) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_TRANSFER_MAX_PROOF_SIZE, - )) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> XCMWeight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> XCMWeight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight { - XcmGeneric::::report_error() - } - fn deposit_asset(_assets: &MultiAssetFilter, _dest: &MultiLocation) -> XCMWeight { - Weight::from_parts(200_000_000u64, ASSET_MINT_MAX_PROOF_SIZE) - } - fn deposit_reserve_asset( - _assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - Weight::from_parts(200_000_000u64, ASSET_MINT_MAX_PROOF_SIZE) - } - fn exchange_asset( - _give: &MultiAssetFilter, - _receive: &MultiAssets, - _maximal: &bool, - ) -> XCMWeight { - Weight::MAX - } - fn initiate_reserve_withdraw( - _assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - XCMWeight::from_parts(200_000_000u64, ASSET_TRANSFER_MAX_PROOF_SIZE) - } - fn initiate_teleport( - _assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - XCMWeight::MAX - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> XCMWeight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> XCMWeight { - XcmGeneric::::clear_error() - } - fn claim_asset(assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { - assets.weigh_multi_assets(XcmGeneric::::claim_asset()) - } - fn trap(_code: &u64) -> XCMWeight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> XCMWeight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> XCMWeight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/container-chains/runtime-templates/frontier/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/container-chains/runtime-templates/frontier/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index b1f1752..0000000 --- a/container-chains/runtime-templates/frontier/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_benchmarks::generic -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-frontier-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_benchmarks::generic -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-runtime-template-xcm.hbs -// --json-file -// raw.json -// --output -// tmp/frontier_template_weights/pallet_xcm_benchmarks::generic.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_benchmarks::generic using the Substrate node and recommended hardware. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 70_314_000 picoseconds. - Weight::from_parts(71_644_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_796_000 picoseconds. - Weight::from_parts(2_914_000, 0) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:0) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `3534` - // Minimum execution time: 10_662_000 picoseconds. - Weight::from_parts(11_031_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - pub(crate) fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 18_559_000 picoseconds. - Weight::from_parts(19_014_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - pub(crate) fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_890_000 picoseconds. - Weight::from_parts(3_042_000, 0) - } - pub(crate) fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_675_000 picoseconds. - Weight::from_parts(2_798_000, 0) - } - pub(crate) fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_648_000 picoseconds. - Weight::from_parts(2_741_000, 0) - } - pub(crate) fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_624_000 picoseconds. - Weight::from_parts(2_731_000, 0) - } - pub(crate) fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_276_000 picoseconds. - Weight::from_parts(3_439_000, 0) - } - pub(crate) fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_602_000 picoseconds. - Weight::from_parts(2_695_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 60_682_000 picoseconds. - Weight::from_parts(61_905_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - /// Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `126` - // Estimated: `3591` - // Minimum execution time: 16_316_000 picoseconds. - Weight::from_parts(16_811_000, 3591) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - pub(crate) fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_560_000 picoseconds. - Weight::from_parts(2_687_000, 0) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 28_744_000 picoseconds. - Weight::from_parts(29_222_000, 3540) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_489_000 picoseconds. - Weight::from_parts(5_637_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - pub(crate) fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_125_000 picoseconds. - Weight::from_parts(4_247_000, 0) - } - pub(crate) fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_703_000 picoseconds. - Weight::from_parts(2_900_000, 0) - } - pub(crate) fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_753_000 picoseconds. - Weight::from_parts(2_840_000, 0) - } - pub(crate) fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_614_000 picoseconds. - Weight::from_parts(2_730_000, 0) - } - pub(crate) fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_893_000 picoseconds. - Weight::from_parts(3_000_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 68_185_000 picoseconds. - Weight::from_parts(69_751_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_779_000 picoseconds. - Weight::from_parts(8_047_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `166` - // Estimated: `3631` - // Minimum execution time: 61_210_000 picoseconds. - Weight::from_parts(61_906_000, 3631) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_629_000 picoseconds. - Weight::from_parts(2_739_000, 0) - } - pub(crate) fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_598_000 picoseconds. - Weight::from_parts(2_697_000, 0) - } - pub(crate) fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_639_000 picoseconds. - Weight::from_parts(2_732_000, 0) - } - pub(crate) fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_637_000 picoseconds. - Weight::from_parts(2_710_000, 0) - } - pub(crate) fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_769_000 picoseconds. - Weight::from_parts(2_857_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/frontier/src/xcm_config.rs b/container-chains/runtime-templates/frontier/src/xcm_config.rs deleted file mode 100644 index 41639fb..0000000 --- a/container-chains/runtime-templates/frontier/src/xcm_config.rs +++ /dev/null @@ -1,500 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::{ - currency::MICROUNIT, precompiles::FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX, weights, - weights::xcm::XcmWeight as XcmGenericWeights, AccountId, AllPalletsWithSystem, AssetRate, - Balance, Balances, ForeignAssetsCreator, MaintenanceMode, MessageQueue, ParachainInfo, - ParachainSystem, PolkadotXcm, Runtime, RuntimeBlockWeights, RuntimeCall, RuntimeEvent, - RuntimeOrigin, TransactionByteFee, WeightToFee, XcmpQueue, - }, - ccp_xcm::SignedToAccountKey20, - cumulus_primitives_core::{AggregateMessageOrigin, ParaId}, - frame_support::{ - parameter_types, - traits::{Everything, Nothing, PalletInfoAccess, TransformOrigin}, - weights::Weight, - }, - frame_system::EnsureRoot, - pallet_evm_precompileset_assets_erc20::AccountIdAssetIdConversion, - pallet_foreign_asset_creator::{ - AssetBalance, AssetId as AssetIdOf, ForeignAssetCreatedHook, ForeignAssetDestroyedHook, - }, - pallet_xcm::XcmPassthrough, - pallet_xcm_executor_utils::{ - filters::{IsReserveFilter, IsTeleportFilter}, - DefaultTrustPolicy, - }, - parachains_common::{ - message_queue::{NarrowOriginToSibling, ParaIdToSibling}, - xcm_config::AssetFeeAsExistentialDepositMultiplier, - }, - polkadot_runtime_common::xcm_sender::ExponentialPrice, - sp_core::{ConstU32, H160}, - sp_runtime::Perbill, - sp_std::vec::Vec, - staging_xcm::latest::prelude::*, - staging_xcm_builder::{ - AccountKey20Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, - AllowTopLevelPaidExecutionFrom, ConvertedConcreteId, EnsureXcmOrigin, FungibleAdapter, - IsConcrete, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountKey20AsNative, SovereignSignedViaLocation, - TakeWeightCredit, UsingComponents, WeightInfoBounds, WithComputedOrigin, - }, - staging_xcm_executor::XcmExecutor, -}; -parameter_types! { - // Self Reserve location, defines the multilocation identifiying the self-reserve currency - // This is used to match it also against our Balances pallet when we receive such - // a MultiLocation: (Self Balances pallet index) - // We use the RELATIVE multilocation - pub SelfReserve: MultiLocation = MultiLocation { - parents:0, - interior: Junctions::X1( - PalletInstance(::index() as u8) - ) - }; - - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); - - // TODO: revisit - pub const RelayNetwork: NetworkId = NetworkId::Polkadot; - - // The relay chain Origin type - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - - pub const MaxAssetsIntoHolding: u32 = 64; - - /// Maximum number of instructions in a single XCM fragment. A sanity check against - /// weight caculations getting too crazy. - pub MaxInstructions: u32 = 100; - - // The universal location within the global consensus system - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get()), Parachain(ParachainInfo::parachain_id().into())); - - pub const BaseDeliveryFee: u128 = 100 * MICROUNIT; -} - -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - pub ReachableDest: Option = Some(Parent.into()); -} - -pub type XcmBarrier = ( - // Weight that is paid for may be consumed. - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - WithComputedOrigin< - ( - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, -); - -// For benchmarking, we cannot use the describeFamily -// the benchmark is written to be able to convert an AccountId32, but describeFamily prevents this -#[cfg(not(feature = "runtime-benchmarks"))] -type Descriptor = staging_xcm_builder::DescribeFamily; -#[cfg(feature = "runtime-benchmarks")] -type Descriptor = staging_xcm_builder::DescribeAllTerminal; - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the default `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // If we receive a MultiLocation of type AccountKey20, just generate a native account - AccountKey20Aliases, - // Generate remote accounts according to polkadot standards - staging_xcm_builder::HashedDescription, -); - -/// Local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountKey20; - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = FungibleAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, -/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can -/// biases the kind of local `Origin` it will become. -pub type XcmOriginToTransactDispatchOrigin = ( - // Sovereign account converter; this attempts to derive an `AccountId` from the origin location - // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for - // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, - // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when - // recognised. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognised. - SiblingParachainAsNative, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountKey20AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -/// Means for transacting assets on this chain. -pub type AssetTransactors = (CurrencyTransactor, ForeignFungiblesTransactor); -pub type XcmWeigher = - WeightInfoBounds, RuntimeCall, MaxInstructions>; - -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = ( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -); - -pub struct XcmConfig; -impl staging_xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = AssetTransactors; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = IsReserveFilter; - type IsTeleporter = IsTeleportFilter; - type UniversalLocation = UniversalLocation; - type Barrier = XcmBarrier; - type Weigher = XcmWeigher; - type Trader = ( - UsingComponents, - cumulus_primitives_utility::TakeFirstAssetTrader< - AccountId, - AssetRateAsMultiplier, - // Use this currency when it is a fungible asset matching the given location or name: - (ConvertedConcreteId,), - ForeignAssets, - (), - >, - ); - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = RuntimeCall; - type SafeCallFilter = Everything; - type Aliasers = Nothing; -} - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; - type XcmExecuteFilter = Everything; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Nothing; - type XcmReserveTransferFilter = Everything; - type Weigher = XcmWeigher; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; - type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; - type Currency = Balances; - type CurrencyMatcher = (); - type TrustedLockers = (); - type SovereignAccountOf = LocationToAccountId; - type MaxLockers = ConstU32<8>; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); - // TODO pallet-xcm weights - type WeightInfo = weights::pallet_xcm::SubstrateWeight; - type AdminOrigin = EnsureRoot; -} - -pub type PriceForSiblingParachainDelivery = - ExponentialPrice; - -pub type PriceForParentDelivery = - ExponentialPrice; - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - type ControllerOrigin = EnsureRoot; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::SubstrateWeight; - type PriceForSiblingDelivery = PriceForSiblingParachainDelivery; - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(25) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::SubstrateWeight; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = staging_xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - // NarrowOriginToSibling calls XcmpQueue's is_pause if Origin is sibling. Allows all other origins - type QueuePausedQuery = (MaintenanceMode, NarrowOriginToSibling); - // TODO verify values - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -parameter_types! { - // we just reuse the same deposits - pub const ForeignAssetsAssetDeposit: Balance = 0; - pub const ForeignAssetsAssetAccountDeposit: Balance = 0; - pub const ForeignAssetsApprovalDeposit: Balance = 0; - pub const ForeignAssetsAssetsStringLimit: u32 = 50; - pub const ForeignAssetsMetadataDepositBase: Balance = 0; - pub const ForeignAssetsMetadataDepositPerByte: Balance = 0; - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); -} - -#[cfg(feature = "runtime-benchmarks")] -/// Simple conversion of `u32` into an `AssetId` for use in benchmarking. -pub struct ForeignAssetBenchmarkHelper; -#[cfg(feature = "runtime-benchmarks")] -impl pallet_assets::BenchmarkHelper for ForeignAssetBenchmarkHelper { - fn create_asset_id_parameter(id: u32) -> AssetId { - id.try_into() - .expect("number too large to create benchmarks") - } -} -#[cfg(feature = "runtime-benchmarks")] -impl pallet_asset_rate::AssetKindFactory for ForeignAssetBenchmarkHelper { - fn create_asset_kind(id: u32) -> AssetId { - id.try_into() - .expect("number too large to create benchmarks") - } -} - -// Instruct how to go from an H160 to an AssetID -// We just take the lowest 2 bytes -impl AccountIdAssetIdConversion for Runtime { - /// The way to convert an account to assetId is by ensuring that the prefix is [0xFF, 18] - /// and by taking the lowest 2 bytes as the assetId - fn account_to_asset_id(account: AccountId) -> Option<(Vec, AssetId)> { - let h160_account: H160 = account.into(); - let mut data = [0u8; 2]; - let (prefix_part, id_part) = h160_account.as_fixed_bytes().split_at(18); - if prefix_part == FOREIGN_ASSET_PRECOMPILE_ADDRESS_PREFIX { - data.copy_from_slice(id_part); - let asset_id: AssetId = u16::from_be_bytes(data); - Some((prefix_part.to_vec(), asset_id)) - } else { - None - } - } - - // The opposite conversion - fn asset_id_to_account(prefix: &[u8], asset_id: AssetId) -> AccountId { - let mut data = [0u8; 20]; - data[0..18].copy_from_slice(prefix); - data[18..20].copy_from_slice(&asset_id.to_be_bytes()); - AccountId::from(data) - } -} - -pub type AssetId = u16; -pub type ForeignAssetsInstance = pallet_assets::Instance1; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = AssetId; - type AssetIdParameter = AssetId; - type Currency = Balances; - type CreateOrigin = frame_support::traits::NeverEnsureOrigin; - type ForceOrigin = EnsureRoot; - type AssetDeposit = ForeignAssetsAssetDeposit; - type MetadataDepositBase = ForeignAssetsMetadataDepositBase; - type MetadataDepositPerByte = ForeignAssetsMetadataDepositPerByte; - type ApprovalDeposit = ForeignAssetsApprovalDeposit; - type StringLimit = ForeignAssetsAssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets::SubstrateWeight; - type CallbackHandle = (); - type AssetAccountDeposit = ForeignAssetsAssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = ForeignAssetBenchmarkHelper; -} - -pub struct RevertCodePrecompileHook; - -impl ForeignAssetCreatedHook, AssetBalance> - for RevertCodePrecompileHook -{ - fn on_asset_created( - _foreign_asset: &MultiLocation, - asset_id: &AssetIdOf, - _min_balance: &AssetBalance, - ) { - let revert_bytecode = [0x60, 0x00, 0x60, 0x00, 0xFD].to_vec(); - let prefix_slice = [255u8; 18]; - let account_id = Runtime::asset_id_to_account(prefix_slice.as_slice(), *asset_id); - - pallet_evm::Pallet::::create_account(account_id.into(), revert_bytecode.clone()); - } -} - -impl ForeignAssetDestroyedHook> for RevertCodePrecompileHook { - fn on_asset_destroyed(_foreign_asset: &MultiLocation, asset_id: &AssetIdOf) { - let prefix_slice = [255u8; 18]; - let account_id = Runtime::asset_id_to_account(prefix_slice.as_slice(), *asset_id); - - pallet_evm::Pallet::::remove_account(&account_id.into()); - } -} - -impl pallet_foreign_asset_creator::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForeignAsset = MultiLocation; - type ForeignAssetCreatorOrigin = EnsureRoot; - type ForeignAssetModifierOrigin = EnsureRoot; - type ForeignAssetDestroyerOrigin = EnsureRoot; - type Fungibles = ForeignAssets; - type WeightInfo = weights::pallet_foreign_asset_creator::SubstrateWeight; - type OnForeignAssetCreated = RevertCodePrecompileHook; - type OnForeignAssetDestroyed = RevertCodePrecompileHook; -} - -impl pallet_asset_rate::Config for Runtime { - type CreateOrigin = EnsureRoot; - type RemoveOrigin = EnsureRoot; - type UpdateOrigin = EnsureRoot; - type Currency = Balances; - type AssetKind = AssetId; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_asset_rate::SubstrateWeight; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = ForeignAssetBenchmarkHelper; -} - -parameter_types! { - pub const TrustPolicyMaxAssets: u32 = 1000; - pub const AllNativeTrustPolicy: DefaultTrustPolicy = DefaultTrustPolicy::AllNative; - pub const AllNeverTrustPolicy: DefaultTrustPolicy = DefaultTrustPolicy::Never; -} -impl pallet_xcm_executor_utils::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type TrustPolicyMaxAssets = TrustPolicyMaxAssets; - type ReserveDefaultTrustPolicy = AllNativeTrustPolicy; - type SetReserveTrustOrigin = EnsureRoot; - type TeleportDefaultTrustPolicy = AllNeverTrustPolicy; - type SetTeleportTrustOrigin = EnsureRoot; - type WeightInfo = weights::pallet_xcm_executor_utils::SubstrateWeight; -} - -use { - crate::ForeignAssets, - staging_xcm_builder::{FungiblesAdapter, NoChecking}, - staging_xcm_executor::traits::JustTry, -}; - -/// Means for transacting foreign assets from different global consensus. -pub type ForeignFungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - ForeignAssets, - // Use this currency when it is a fungible asset matching the given location or name: - (ConvertedConcreteId,), - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We dont need to check teleports here. - NoChecking, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// Multiplier used for dedicated `TakeFirstAssetTrader` with `ForeignAssets` instance. -pub type AssetRateAsMultiplier = - AssetFeeAsExistentialDepositMultiplier; - -#[test] -fn test_asset_id_to_account_conversion() { - let prefix_slice = [255u8].repeat(18); - let asset_ids_to_check = vec![0u16, 123u16, 3453u16, 10000u16, 65535u16]; - for current_asset_id in asset_ids_to_check { - let account_id = Runtime::asset_id_to_account(prefix_slice.as_slice(), current_asset_id); - assert_eq!( - account_id.to_string().to_lowercase(), - String::from("0xffffffffffffffffffffffffffffffffffff") - + format!("{:04x}", current_asset_id).as_str() - ); - } -} diff --git a/container-chains/runtime-templates/simple/Cargo.toml b/container-chains/runtime-templates/simple/Cargo.toml deleted file mode 100644 index 8cd1d2f..0000000 --- a/container-chains/runtime-templates/simple/Cargo.toml +++ /dev/null @@ -1,311 +0,0 @@ -[package] -name = "container-chain-template-simple-runtime" -authors = { workspace = true } -description = "Simple container chain template runtime" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -hex-literal = { workspace = true, optional = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive" ] } -scale-info = { workspace = true, features = [ "derive" ] } -serde = { workspace = true, optional = true, features = [ "derive" ] } -smallvec = { workspace = true } - -# Local -dp-consensus = { workspace = true } -dp-impl-tanssi-pallets-config = { workspace = true } -dp-slot-duration-runtime-api = { workspace = true } -pallet-cc-authorities-noting = { workspace = true } -runtime-common = { workspace = true } - -# Moonkit -async-backing-primitives = { workspace = true } -nimbus-primitives = { workspace = true } -pallet-async-backing = { workspace = true } -pallet-author-inherent = { workspace = true } -pallet-foreign-asset-creator = { workspace = true } -pallet-maintenance-mode = { workspace = true, features = [ "xcm-support" ] } -pallet-migrations = { workspace = true } -xcm-primitives = { workspace = true } - -# Dancekit -pallet-xcm-executor-utils = { workspace = true } - -# Substrate -frame-executive = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -frame-system-rpc-runtime-api = { workspace = true } -pallet-asset-rate = { workspace = true } -pallet-assets = { workspace = true } -pallet-balances = { workspace = true } -pallet-message-queue = { workspace = true } -pallet-multisig = { workspace = true } -pallet-proxy = { workspace = true } -pallet-root-testing = { workspace = true } -pallet-session = { workspace = true } -pallet-sudo = { workspace = true } -pallet-timestamp = { workspace = true } -pallet-transaction-payment = { workspace = true } -pallet-transaction-payment-rpc-runtime-api = { workspace = true } -pallet-tx-pause = { workspace = true } -pallet-utility = { workspace = true } -sp-api = { workspace = true } -sp-block-builder = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true } -sp-debug-derive = { workspace = true } -sp-genesis-builder = { workspace = true } -sp-inherents = { workspace = true } -sp-offchain = { workspace = true } -sp-runtime = { workspace = true } -sp-session = { workspace = true } -sp-std = { workspace = true } -sp-transaction-pool = { workspace = true } -sp-trie = { workspace = true } - -sp-version = { workspace = true } - -pallet-insecure-randomness-collective-flip = { workspace = true } - - -# Local Dependencies -pallet-template = { workspace = true } -pallet-sortition-sum-game = { workspace = true } -pallet-schelling-game-shared = { workspace = true } -pallet-profile-validation = { workspace = true } -pallet-shared-storage = { workspace = true } -pallet-positive-externality = { workspace = true } -pallet-department-funding = { workspace = true } -pallet-project-tips = { workspace = true } -profile-validation-runtime-api = { workspace = true } -positive-externality-runtime-api = { workspace = true } -department-funding-runtime-api = { workspace = true } -project-tips-runtime-api = { workspace = true } - - -# Polkadot -pallet-xcm = { workspace = true } -pallet-xcm-benchmarks = { workspace = true, optional = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-runtime-common = { workspace = true } -staging-xcm = { workspace = true } -staging-xcm-builder = { workspace = true } -staging-xcm-executor = { workspace = true } - -# Cumulus -cumulus-pallet-dmp-queue = { workspace = true } -cumulus-pallet-parachain-system = { workspace = true } -cumulus-pallet-session-benchmarking = { workspace = true } -cumulus-pallet-xcm = { workspace = true } -cumulus-pallet-xcmp-queue = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-primitives-timestamp = { workspace = true } -cumulus-primitives-utility = { workspace = true } -parachain-info = { workspace = true } -parachains-common = { workspace = true } - -# Benchmarking -frame-benchmarking = { workspace = true, optional = true } -frame-system-benchmarking = { workspace = true, optional = true } -frame-try-runtime = { workspace = true, optional = true } -[build-dependencies] -substrate-wasm-builder = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "async-backing-primitives/std", - "cumulus-pallet-dmp-queue/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-pallet-xcm/std", - "cumulus-pallet-xcmp-queue/std", - "cumulus-primitives-core/std", - "cumulus-primitives-timestamp/std", - "cumulus-primitives-utility/std", - "dp-consensus/std", - "dp-impl-tanssi-pallets-config/std", - "dp-slot-duration-runtime-api/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime/std", - "log/std", - "nimbus-primitives/std", - "pallet-asset-rate/std", - "pallet-assets/std", - "pallet-async-backing/std", - "pallet-author-inherent/std", - "pallet-balances/std", - "pallet-cc-authorities-noting/std", - "pallet-foreign-asset-creator/std", - "pallet-maintenance-mode/std", - "pallet-message-queue/std", - "pallet-migrations/std", - "pallet-multisig/std", - "pallet-proxy/std", - "pallet-root-testing/std", - "pallet-session/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-tx-pause/std", - "pallet-utility/std", - "pallet-xcm-benchmarks?/std", - "pallet-xcm-executor-utils/std", - "pallet-xcm/std", - "parachain-info/std", - "parachains-common/std", - "parity-scale-codec/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "runtime-common/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-api/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-consensus-slots/std", - "sp-core/std", - "sp-debug-derive/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-transaction-pool/std", - "sp-trie/std", - "sp-version/std", - "staging-xcm-builder/std", - "staging-xcm-executor/std", - "staging-xcm/std", - "xcm-primitives/std", - "pallet-insecure-randomness-collective-flip/std", - "pallet-template/std", - "pallet-sortition-sum-game/std", - "pallet-schelling-game-shared/std", - "pallet-profile-validation/std", - "pallet-shared-storage/std", - "pallet-positive-externality/std", - "pallet-department-funding/std", - "pallet-project-tips/std", - "profile-validation-runtime-api/std", - "positive-externality-runtime-api/std", - "department-funding-runtime-api/std", - "project-tips-runtime-api/std", -] - -# Allow to print logs details (no wasm:stripped) -force-debug = [ "sp-debug-derive/force-debug" ] - -runtime-benchmarks = [ - "cumulus-pallet-dmp-queue/runtime-benchmarks", - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-pallet-xcmp-queue/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "dp-consensus/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "hex-literal", - "nimbus-primitives/runtime-benchmarks", - "pallet-asset-rate/runtime-benchmarks", - "pallet-assets/runtime-benchmarks", - "pallet-author-inherent/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-cc-authorities-noting/runtime-benchmarks", - "pallet-foreign-asset-creator/runtime-benchmarks", - "pallet-message-queue/runtime-benchmarks", - "pallet-migrations/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-sudo/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-tx-pause/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "pallet-xcm-benchmarks/runtime-benchmarks", - "pallet-xcm-executor-utils/runtime-benchmarks", - "pallet-xcm/runtime-benchmarks", - "parachains-common/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "staging-xcm-builder/runtime-benchmarks", - "staging-xcm-executor/runtime-benchmarks", - "xcm-primitives/runtime-benchmarks", - "pallet-template/runtime-benchmarks", - "pallet-sortition-sum-game/runtime-benchmarks", - "pallet-schelling-game-shared/runtime-benchmarks", - "pallet-profile-validation/runtime-benchmarks", - "pallet-shared-storage/runtime-benchmarks", - "pallet-positive-externality/runtime-benchmarks", - "pallet-department-funding/runtime-benchmarks", - "pallet-project-tips/runtime-benchmarks", -] - -try-runtime = [ - "cumulus-pallet-dmp-queue/try-runtime", - "cumulus-pallet-parachain-system/try-runtime", - "cumulus-pallet-xcm/try-runtime", - "cumulus-pallet-xcmp-queue/try-runtime", - "frame-executive/try-runtime", - "frame-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime", - "frame-try-runtime/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-asset-rate/try-runtime", - "pallet-assets/try-runtime", - "pallet-async-backing/try-runtime", - "pallet-author-inherent/try-runtime", - "pallet-balances/try-runtime", - "pallet-cc-authorities-noting/try-runtime", - "pallet-foreign-asset-creator/try-runtime", - "pallet-maintenance-mode/try-runtime", - "pallet-message-queue/try-runtime", - "pallet-migrations/try-runtime", - "pallet-multisig/try-runtime", - "pallet-proxy/try-runtime", - "pallet-root-testing/try-runtime", - "pallet-session/try-runtime", - "pallet-sudo/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-tx-pause/try-runtime", - "pallet-utility/try-runtime", - "pallet-xcm-executor-utils/try-runtime", - "pallet-xcm/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "runtime-common/try-runtime", - "sp-runtime/try-runtime", - "pallet-template/try-runtime", - "pallet-sortition-sum-game/try-runtime", - "pallet-schelling-game-shared/try-runtime", - "pallet-profile-validation/try-runtime", - "pallet-shared-storage/try-runtime", - "pallet-positive-externality/try-runtime", - "pallet-department-funding/try-runtime", - "pallet-project-tips/try-runtime", -] diff --git a/container-chains/runtime-templates/simple/build.rs b/container-chains/runtime-templates/simple/build.rs deleted file mode 100644 index 9e48e37..0000000 --- a/container-chains/runtime-templates/simple/build.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use substrate_wasm_builder::WasmBuilder; - -fn main() { - WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_00-128722.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_00-128722.txt deleted file mode 100644 index 2284750..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_00-128722.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x7f3e8fd7528f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x7f3e8fd7528f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x7f3e8fd7528f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x7f3e8fd751d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x7f3e92c290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x7f3e8fd8fac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x7f3e8fd8fac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x7f3e92c51fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x7f3e92c4ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x7f3e92c4e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x7f3e92c5b451 - ::emit_producing_guarantee - 11: 0x7f3e930b3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x7f3e930973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x7f3e93097228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x7f3e90e85df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x7f3e946390fe - >::fold_ty - 16: 0x7f3e9457a3d0 - ::ctor_sub_tys - 17: 0x7f3e94579fae - >::wild_from_ctor - 18: 0x7f3e94565b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x7f3e945632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x7f3e9455293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x7f3e916a76ee - ::is_let_irrefutable - 22: 0x7f3e916a1e8d - ::visit_expr - 23: 0x7f3e916a12fd - ::visit_expr - 24: 0x7f3e916a1913 - ::visit_expr - 25: 0x7f3e916a12fd - ::visit_expr - 26: 0x7f3e916a23ee - ::visit_expr - 27: 0x7f3e916a12fd - ::visit_expr - 28: 0x7f3e945a778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x7f3e945a7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x7f3e94518982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x7f3e94518695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x7f3e9459968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x7f3e94599595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x7f3e93f3deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x7f3e93f3da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x7f3e94595315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x7f3e94595109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x7f3e94594746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x7f3e9459444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x7f3e94711fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x7f3e947118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x7f3e94b7f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x7f3e94b7f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x7f3e949fc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x7f3e94d3eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x7f3e94d3e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x7f3e8fd99145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x7f3e8fd99145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x7f3e8fd99145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x7f3e8fa94ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x7f3e8fb26850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_14-128872.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_14-128872.txt deleted file mode 100644 index 456d734..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_06_14-128872.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x778f2e1ba28f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x778f2e1ba28f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x778f2e1ba28f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x778f2e1ba1d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x778f2b0290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x778f2e1d4ac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x778f2e1d4ac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x778f2b051fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x778f2b04ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x778f2b04e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x778f2b05b451 - ::emit_producing_guarantee - 11: 0x778f2b4b3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x778f2b4973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x778f2b497228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x778f29285df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x778f2ca390fe - >::fold_ty - 16: 0x778f2c97a3d0 - ::ctor_sub_tys - 17: 0x778f2c979fae - >::wild_from_ctor - 18: 0x778f2c965b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x778f2c9632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x778f2c95293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x778f29aa76ee - ::is_let_irrefutable - 22: 0x778f29aa1e8d - ::visit_expr - 23: 0x778f29aa12fd - ::visit_expr - 24: 0x778f29aa1913 - ::visit_expr - 25: 0x778f29aa12fd - ::visit_expr - 26: 0x778f29aa23ee - ::visit_expr - 27: 0x778f29aa12fd - ::visit_expr - 28: 0x778f2c9a778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x778f2c9a7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x778f2c918982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x778f2c918695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x778f2c99968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x778f2c999595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x778f2c33deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x778f2c33da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x778f2c995315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x778f2c995109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x778f2c994746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x778f2c99444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x778f2cb11fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x778f2cb118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x778f2cf7f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x778f2cf7f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x778f2cdfc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x778f2d13eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x778f2d13e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x778f2e1de145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x778f2e1de145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x778f2e1de145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x778f27e94ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x778f27f26850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_07_54-129055.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_07_54-129055.txt deleted file mode 100644 index e585e1b..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_07_54-129055.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x7bd12022428f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x7bd12022428f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x7bd12022428f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x7bd1202241d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x7bd11d0290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x7bd12023eac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x7bd12023eac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x7bd11d051fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x7bd11d04ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x7bd11d04e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x7bd11d05b451 - ::emit_producing_guarantee - 11: 0x7bd11d4b3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x7bd11d4973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x7bd11d497228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x7bd11b285df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x7bd11ea390fe - >::fold_ty - 16: 0x7bd11e97a3d0 - ::ctor_sub_tys - 17: 0x7bd11e979fae - >::wild_from_ctor - 18: 0x7bd11e965b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x7bd11e9632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x7bd11e95293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x7bd11baa76ee - ::is_let_irrefutable - 22: 0x7bd11baa1e8d - ::visit_expr - 23: 0x7bd11baa12fd - ::visit_expr - 24: 0x7bd11baa1913 - ::visit_expr - 25: 0x7bd11baa12fd - ::visit_expr - 26: 0x7bd11baa23ee - ::visit_expr - 27: 0x7bd11baa12fd - ::visit_expr - 28: 0x7bd11e9a778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x7bd11e9a7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x7bd11e918982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x7bd11e918695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x7bd11e99968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x7bd11e999595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x7bd11e33deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x7bd11e33da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x7bd11e995315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x7bd11e995109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x7bd11e994746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x7bd11e99444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x7bd11eb11fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x7bd11eb118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x7bd11ef7f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x7bd11ef7f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x7bd11edfc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x7bd11f13eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x7bd11f13e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x7bd120248145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x7bd120248145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x7bd120248145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x7bd119e94ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x7bd119f26850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_08_53-129174.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_08_53-129174.txt deleted file mode 100644 index de09993..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_08_53-129174.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x71463e17528f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x71463e17528f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x71463e17528f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x71463e1751d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x7146410290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x71463e18fac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x71463e18fac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x714641051fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x71464104ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x71464104e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x71464105b451 - ::emit_producing_guarantee - 11: 0x7146414b3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x7146414973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x714641497228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x71463f285df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x714642a390fe - >::fold_ty - 16: 0x71464297a3d0 - ::ctor_sub_tys - 17: 0x714642979fae - >::wild_from_ctor - 18: 0x714642965b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x7146429632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x71464295293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x71463faa76ee - ::is_let_irrefutable - 22: 0x71463faa1e8d - ::visit_expr - 23: 0x71463faa12fd - ::visit_expr - 24: 0x71463faa1913 - ::visit_expr - 25: 0x71463faa12fd - ::visit_expr - 26: 0x71463faa23ee - ::visit_expr - 27: 0x71463faa12fd - ::visit_expr - 28: 0x7146429a778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x7146429a7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x714642918982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x714642918695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x71464299968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x714642999595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x71464233deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x71464233da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x714642995315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x714642995109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x714642994746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x71464299444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x714642b11fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x714642b118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x714642f7f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x714642f7f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x714642dfc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x71464313eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x71464313e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x71463e199145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x71463e199145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x71463e199145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x71463de94ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x71463df26850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_44-129588.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_44-129588.txt deleted file mode 100644 index ea6572d..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_44-129588.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x781af997528f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x781af997528f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x781af997528f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x781af99751d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x781afc8290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x781af998fac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x781af998fac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x781afc851fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x781afc84ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x781afc84e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x781afc85b451 - ::emit_producing_guarantee - 11: 0x781afccb3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x781afcc973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x781afcc97228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x781afaa85df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x781afe2390fe - >::fold_ty - 16: 0x781afe17a3d0 - ::ctor_sub_tys - 17: 0x781afe179fae - >::wild_from_ctor - 18: 0x781afe165b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x781afe1632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x781afe15293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x781afb2a76ee - ::is_let_irrefutable - 22: 0x781afb2a1e8d - ::visit_expr - 23: 0x781afb2a12fd - ::visit_expr - 24: 0x781afb2a1913 - ::visit_expr - 25: 0x781afb2a12fd - ::visit_expr - 26: 0x781afb2a23ee - ::visit_expr - 27: 0x781afb2a12fd - ::visit_expr - 28: 0x781afe1a778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x781afe1a7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x781afe118982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x781afe118695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x781afe19968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x781afe199595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x781afdb3deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x781afdb3da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x781afe195315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x781afe195109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x781afe194746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x781afe19444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x781afe311fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x781afe3118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x781afe77f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x781afe77f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x781afe5fc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x781afe93eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x781afe93e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x781af9999145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x781af9999145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x781af9999145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x781af9694ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x781af9726850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_57-129706.txt b/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_57-129706.txt deleted file mode 100644 index 914ee96..0000000 --- a/container-chains/runtime-templates/simple/rustc-ice-2024-05-26T13_11_57-129706.txt +++ /dev/null @@ -1,78 +0,0 @@ -thread 'rustc' panicked at compiler/rustc_middle/src/util/bug.rs:35:44: -Box -stack backtrace: - 0: 0x7ed92562728f - std::backtrace_rs::backtrace::libunwind::trace::he4ee80166a02c846 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5 - 1: 0x7ed92562728f - std::backtrace_rs::backtrace::trace_unsynchronized::h4665ca2a08e42cea - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5 - 2: 0x7ed92562728f - std::backtrace::Backtrace::create::h53f88232b3c879c4 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:331:13 - 3: 0x7ed9256271d0 - std::backtrace::Backtrace::force_capture::h9de6994a0c478360 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/backtrace.rs:312:9 - 4: 0x7ed9224290b7 - std[e4dfbc2c3f4b09f1]::panicking::update_hook::>::{closure#0} - 5: 0x7ed925641ac0 - as core::ops::function::Fn>::call::h022ca2c0d8c21c9e - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2034:9 - 6: 0x7ed925641ac0 - std::panicking::rust_panic_with_hook::h0ad14d90dcf5224f - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/panicking.rs:783:13 - 7: 0x7ed922451fa4 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic::::{closure#0} - 8: 0x7ed92244ed16 - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_end_short_backtrace::::{closure#0}, !> - 9: 0x7ed92244e9f6 - std[e4dfbc2c3f4b09f1]::panicking::begin_panic:: - 10: 0x7ed92245b451 - ::emit_producing_guarantee - 11: 0x7ed9228b3e51 - rustc_middle[fda44fdb505d3e7f]::util::bug::opt_span_bug_fmt::::{closure#0} - 12: 0x7ed9228973aa - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_opt::::{closure#0}, !>::{closure#0} - 13: 0x7ed922897228 - rustc_middle[fda44fdb505d3e7f]::ty::context::tls::with_context_opt::::{closure#0}, !>::{closure#0}, !> - 14: 0x7ed920685df0 - rustc_middle[fda44fdb505d3e7f]::util::bug::bug_fmt - 15: 0x7ed923e390fe - >::fold_ty - 16: 0x7ed923d7a3d0 - ::ctor_sub_tys - 17: 0x7ed923d79fae - >::wild_from_ctor - 18: 0x7ed923d65b6e - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 19: 0x7ed923d632c3 - rustc_pattern_analysis[4bbf7d37c729d81f]::usefulness::compute_exhaustiveness_and_usefulness::::{closure#0} - 20: 0x7ed923d5293a - rustc_pattern_analysis[4bbf7d37c729d81f]::analyze_match - 21: 0x7ed920ea76ee - ::is_let_irrefutable - 22: 0x7ed920ea1e8d - ::visit_expr - 23: 0x7ed920ea12fd - ::visit_expr - 24: 0x7ed920ea1913 - ::visit_expr - 25: 0x7ed920ea12fd - ::visit_expr - 26: 0x7ed920ea23ee - ::visit_expr - 27: 0x7ed920ea12fd - ::visit_expr - 28: 0x7ed923da778b - rustc_mir_build[95b41b8ff12a5765]::thir::pattern::check_match::check_match - 29: 0x7ed923da7435 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 30: 0x7ed923d18982 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 31: 0x7ed923d18695 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_match::get_query_non_incr::__rust_end_short_backtrace - 32: 0x7ed923d9968b - rustc_mir_build[95b41b8ff12a5765]::build::mir_built - 33: 0x7ed923d99595 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 34: 0x7ed92373deed - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 35: 0x7ed92373da4c - rustc_query_impl[e4152ad88c3d6c78]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace - 36: 0x7ed923d95315 - rustc_mir_build[95b41b8ff12a5765]::check_unsafety::check_unsafety - 37: 0x7ed923d95109 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 38: 0x7ed923d94746 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 39: 0x7ed923d9444f - rustc_query_impl[e4152ad88c3d6c78]::query_impl::check_unsafety::get_query_non_incr::__rust_end_short_backtrace - 40: 0x7ed923f11fbf - rustc_interface[ba2b6dc4c96cb491]::passes::analysis - 41: 0x7ed923f118e5 - rustc_query_impl[e4152ad88c3d6c78]::plumbing::__rust_begin_short_backtrace::> - 42: 0x7ed92437f3a2 - rustc_query_system[475239fef39bf53f]::query::plumbing::try_execute_query::>, false, false, false>, rustc_query_impl[e4152ad88c3d6c78]::plumbing::QueryCtxt, false> - 43: 0x7ed92437f149 - rustc_query_impl[e4152ad88c3d6c78]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace - 44: 0x7ed9241fc814 - rustc_interface[ba2b6dc4c96cb491]::interface::run_compiler::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0} - 45: 0x7ed92453eb6e - std[e4dfbc2c3f4b09f1]::sys_common::backtrace::__rust_begin_short_backtrace::, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>> - 46: 0x7ed92453e9ca - <::spawn_unchecked_, rustc_driver_impl[24a943716c49befe]::run_compiler::{closure#0}>::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[836963c7c1decc11]::result::Result<(), rustc_span[a4517f2b2e65298c]::ErrorGuaranteed>>::{closure#1} as core[836963c7c1decc11]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} - 47: 0x7ed92564b145 - as core::ops::function::FnOnce>::call_once::h19b9e642d37e7272 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 48: 0x7ed92564b145 - as core::ops::function::FnOnce>::call_once::h97265befc434d3ae - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/alloc/src/boxed.rs:2020:9 - 49: 0x7ed92564b145 - std::sys::pal::unix::thread::Thread::new::thread_start::h420dad5cf01a9f35 - at /rustc/9b00956e56009bab2aa15d7bff10916599e3d6d6/library/std/src/sys/pal/unix/thread.rs:108:17 - 50: 0x7ed91f294ac3 - start_thread - at ./nptl/pthread_create.c:442:8 - 51: 0x7ed91f326850 - __GI___clone3 - at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 - 52: 0x0 - - - -rustc version: 1.78.0 (9b00956e5 2024-04-29) -platform: x86_64-unknown-linux-gnu - -query stack during panic: -#0 [check_match] match-checking `::filter` -#1 [mir_built] building MIR for `::filter` -#2 [check_unsafety] unsafety-checking `::filter` -#3 [analysis] running analysis passes on this crate -end of query stack diff --git a/container-chains/runtime-templates/simple/src/lib.rs b/container-chains/runtime-templates/simple/src/lib.rs deleted file mode 100644 index f130e9a..0000000 --- a/container-chains/runtime-templates/simple/src/lib.rs +++ /dev/null @@ -1,1311 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -use cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases; -#[cfg(feature = "std")] -use sp_version::NativeVersion; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -pub mod migrations; -pub mod weights; - -pub use sp_runtime::{MultiAddress, Perbill, Permill}; -use { - cumulus_primitives_core::AggregateMessageOrigin, - dp_impl_tanssi_pallets_config::impl_tanssi_pallets_config, - frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - pallet_prelude::DispatchResult, - parameter_types, - traits::{ - ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, Contains, InsideBoth, InstanceFilter, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, - WEIGHT_REF_TIME_PER_SECOND, - }, - ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, - WeightToFeePolynomial, - }, - }, - frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, - }, - nimbus_primitives::{NimbusId, SlotBeacon}, - pallet_transaction_payment::CurrencyAdapter, - parity_scale_codec::{Decode, Encode}, - polkadot_runtime_common::SlowAdjustingFeeUpdate, - scale_info::TypeInfo, - smallvec::smallvec, - sp_api::impl_runtime_apis, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::{MaxEncodedLen, OpaqueMetadata}, - sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, IdentifyAccount, Verify}, - transaction_validity::{TransactionSource, TransactionValidity}, - ApplyExtrinsicResult, MultiSignature, - }, - sp_std::prelude::*, - sp_version::RuntimeVersion, -}; - -pub mod xcm_config; - -// Polkadot imports -use polkadot_runtime_common::BlockHashCount; - -/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. -pub type Signature = MultiSignature; - -/// Some way of identifying an account on the chain. We intentionally make it equivalent -/// to the public key of our transaction signing scheme. -pub type AccountId = <::Signer as IdentifyAccount>::AccountId; - -/// Balance of an account. -pub type Balance = u128; - -/// Index of a transaction in the chain. -pub type Index = u32; - -/// A hash of some data used by the chain. -pub type Hash = sp_core::H256; - -/// An index to a block. -pub type BlockNumber = u32; - -/// The address format for describing accounts. -pub type Address = MultiAddress; - -/// Block header type as expected by this runtime. -pub type Header = generic::Header; - -/// Block type as expected by this runtime. -pub type Block = generic::Block; - -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; - -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -pub type ChallengePostId = u64; - -pub type DepartmentRequiredFundId = u64; - -pub type ProjectId = u64; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; - -pub mod currency { - use super::Balance; - - pub const MICROUNIT: Balance = 1_000_000; - pub const MILLIUNIT: Balance = 1_000_000_000; - pub const UNIT: Balance = 1_000_000_000_000; - pub const KILOUNIT: Balance = 1_000_000_000_000_000; - - pub const STORAGE_BYTE_FEE: Balance = 100 * MICROUNIT; - - pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 100 * MILLIUNIT + (bytes as Balance) * STORAGE_BYTE_FEE - } -} - -/// Handles converting a weight scalar to a fee value, based on the scale and granularity of the -/// node's balance type. -/// -/// This should typically create a mapping between the following ranges: -/// - `[0, MAXIMUM_BLOCK_WEIGHT]` -/// - `[Balance::min, Balance::max]` -/// -/// Yet, it can be used for any other sort of change to weight-fee. Some examples being: -/// - Setting it to `0` will essentially disable the weight fee. -/// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { - type Balance = Balance; - fn polynomial() -> WeightToFeeCoefficients { - // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: - // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT - let p = MILLIUNIT / 10; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); - smallvec![WeightToFeeCoefficient { - degree: 1, - negative: false, - coeff_frac: Perbill::from_rational(p % q, q), - coeff_integer: p / q, - }] - } -} - -/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know -/// the specifics of the runtime. They can then be made to be agnostic over specific formats -/// of data like extrinsics, allowing for them to continue syncing the network through upgrades -/// to even the core data structures. -pub mod opaque { - use { - super::*, - sp_runtime::{generic, traits::BlakeTwo256}, - }; - - pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - /// Opaque block header type. - pub type Header = generic::Header; - /// Opaque block type. - pub type Block = generic::Block; - /// Opaque block identifier type. - pub type BlockId = generic::BlockId; -} - -impl_opaque_keys! { - pub struct SessionKeys { } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("container-chain-template"), - impl_name: create_runtime_str!("container-chain-template"), - authoring_version: 1, - spec_version: 700, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, - state_version: 1, -}; - -/// This determines the average expected block time that we are targeting. -/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. -/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked -/// up by `pallet_aura` to implement `fn slot_duration()`. -/// -/// Change this to adjust the block time. -pub const MILLISECS_PER_BLOCK: u64 = 6000; - -// NOTE: Currently it is not possible to change the slot duration after the chain has started. -// Attempting to do so will brick block production. -pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; - -// Time is measured by number of blocks. -pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); -pub const HOURS: BlockNumber = MINUTES * 60; -pub const DAYS: BlockNumber = HOURS * 24; - -pub const SUPPLY_FACTOR: Balance = 100; - -// Unit = the base number of indivisible units for balances -pub const UNIT: Balance = 1_000_000_000_000; -pub const MILLIUNIT: Balance = 1_000_000_000; -pub const MICROUNIT: Balance = 1_000_000; - -pub const STORAGE_BYTE_FEE: Balance = 100 * MICROUNIT * SUPPLY_FACTOR; - -pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 100 * MILLIUNIT * SUPPLY_FACTOR + (bytes as Balance) * STORAGE_BYTE_FEE -} - -/// The existential deposit. Set to 1/10 of the Connected Relay Chain. -pub const EXISTENTIAL_DEPOSIT: Balance = MILLIUNIT; - -/// We assume that ~5% of the block weight is consumed by `on_initialize` handlers. This is -/// used to limit the maximal weight of a single extrinsic. -const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); - -/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used by -/// `Operational` extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); - -/// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( - WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), - cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, -); - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - - // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. - // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the - // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize - // the lazy contract deletion. - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u16 = 42; -} - -// Configure FRAME pallets to include in runtime. - -impl frame_system::Config for Runtime { - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// The aggregated dispatch type that is available for extrinsics. - type RuntimeCall = RuntimeCall; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = AccountIdLookup; - /// The index type for storing how many extrinsics an account has signed. - type Nonce = Index; - /// The index type for blocks. - type Block = Block; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// Runtime version. - type Version = Version; - /// Converts a module to an index of this module in the runtime. - type PalletInfo = PalletInfo; - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The basic call filter to use in dispatchable. - type BaseCallFilter = InsideBoth; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = weights::frame_system::SubstrateWeight; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = RuntimeBlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = RuntimeBlockLength; - /// This is used as an identifier of the chain. 42 is the generic substrate prefix. - type SS58Prefix = SS58Prefix; - /// The action to take on a Runtime Upgrade - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = RuntimeTask; -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type FreezeIdentifier = RuntimeFreezeReason; - type MaxFreezes = ConstU32<0>; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type MaxHolds = ConstU32<0>; - type WeightInfo = weights::pallet_balances::SubstrateWeight; -} - -parameter_types! { - pub const TransactionByteFee: Balance = 1; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // This will burn the fees - type OnChargeTransaction = CurrencyAdapter; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; -} - -parameter_types! { - pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); - pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; -pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; -pub const BLOCK_PROCESSING_VELOCITY: u32 = 1; - -type ConsensusHook = pallet_async_backing::consensus_hook::FixedVelocityConsensusHook< - Runtime, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, ->; - -impl cumulus_pallet_parachain_system::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_parachain_system::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type OutboundXcmpMessageSource = XcmpQueue; - type SelfParaId = parachain_info::Pallet; - type DmpQueue = frame_support::traits::EnqueueWithOrigin; - type ReservedDmpWeight = ReservedDmpWeight; - type XcmpMessageHandler = XcmpQueue; - type ReservedXcmpWeight = ReservedXcmpWeight; - type CheckAssociatedRelayNumber = RelayNumberMonotonicallyIncreases; - type ConsensusHook = ConsensusHook; -} - -pub struct ParaSlotProvider; -impl sp_core::Get<(Slot, SlotDuration)> for ParaSlotProvider { - fn get() -> (Slot, SlotDuration) { - let slot = u64::from(::SlotBeacon::slot()); - (Slot::from(slot), SlotDuration::from_millis(SLOT_DURATION)) - } -} - -parameter_types! { - pub const ExpectedBlockTime: u64 = MILLISECS_PER_BLOCK; -} - -impl pallet_async_backing::Config for Runtime { - type AllowMultipleBlocksPerSlot = ConstBool; - type GetAndVerifySlot = - pallet_async_backing::ParaSlot; - type ExpectedBlockTime = ExpectedBlockTime; -} - -impl parachain_info::Config for Runtime {} - -parameter_types! { - pub const Period: u32 = 6 * HOURS; - pub const Offset: u32 = 0; -} - -impl pallet_sudo::Config for Runtime { - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_sudo::SubstrateWeight; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::SubstrateWeight; -} - -/// The type used to represent the kinds of proxying allowed. -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -#[derive( - Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, MaxEncodedLen, TypeInfo, -)] -#[allow(clippy::unnecessary_cast)] -pub enum ProxyType { - /// All calls can be proxied. This is the trivial/most permissive filter. - Any = 0, - /// Only extrinsics that do not transfer funds. - NonTransfer = 1, - /// Only extrinsics related to governance (democracy and collectives). - Governance = 2, - /// Allow to veto an announced proxy call. - CancelProxy = 3, - /// Allow extrinsic related to Balances. - Balances = 4, -} - -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} - -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - // Since proxy filters are respected in all dispatches of the Utility - // pallet, it should never need to be filtered by any proxy. - if let RuntimeCall::Utility(..) = c { - return true; - } - - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => { - matches!( - c, - RuntimeCall::System(..) - | RuntimeCall::ParachainSystem(..) - | RuntimeCall::Timestamp(..) - | RuntimeCall::Proxy(..) - ) - } - // We don't have governance yet - ProxyType::Governance => false, - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) - ), - ProxyType::Balances => { - matches!(c, RuntimeCall::Balances(..)) - } - } - } - - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - // One storage item; key size 32, value size 8 - type ProxyDepositBase = ConstU128<{ deposit(1, 8) }>; - // Additional storage item size of 33 bytes (32 bytes AccountId + 1 byte sizeof(ProxyType)). - type ProxyDepositFactor = ConstU128<{ deposit(0, 33) }>; - type MaxProxies = ConstU32<32>; - type MaxPending = ConstU32<32>; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = ConstU128<{ deposit(1, 8) }>; - // Additional storage item size of 68 bytes: - // - 32 bytes AccountId - // - 32 bytes Hasher (Blake2256) - // - 4 bytes BlockNumber (u32) - type AnnouncementDepositFactor = ConstU128<{ deposit(0, 68) }>; - type WeightInfo = weights::pallet_proxy::SubstrateWeight; -} - -pub struct XcmExecutionManager; -impl xcm_primitives::PauseXcmExecution for XcmExecutionManager { - fn suspend_xcm_execution() -> DispatchResult { - XcmpQueue::suspend_xcm_execution(RuntimeOrigin::root()) - } - fn resume_xcm_execution() -> DispatchResult { - XcmpQueue::resume_xcm_execution(RuntimeOrigin::root()) - } -} - -impl pallet_migrations::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type MigrationsList = (migrations::TemplateMigrations,); - type XcmExecutionManager = XcmExecutionManager; -} - -/// Maintenance mode Call filter -pub struct MaintenanceFilter; -impl Contains for MaintenanceFilter { - fn contains(c: &RuntimeCall) -> bool { - !matches!(c, RuntimeCall::Balances(_) | RuntimeCall::PolkadotXcm(_)) - } -} - -/// Normal Call Filter -/// We dont allow to create nor mint assets, this for now is disabled -/// We only allow transfers. For now creation of assets will go through -/// asset-manager, while minting/burning only happens through xcm messages -/// This can change in the future -pub struct NormalFilter; -impl Contains for NormalFilter { - fn contains(_c: &RuntimeCall) -> bool { - true - } -} - -impl pallet_maintenance_mode::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type NormalCallFilter = NormalFilter; - type MaintenanceCallFilter = MaintenanceFilter; - type MaintenanceOrigin = EnsureRoot; - type XcmExecutionManager = XcmExecutionManager; -} - -impl pallet_root_testing::Config for Runtime { - type RuntimeEvent = RuntimeEvent; -} - -impl pallet_tx_pause::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PauseOrigin = EnsureRoot; - type UnpauseOrigin = EnsureRoot; - type WhitelistedCalls = (); - type MaxNameLen = ConstU32<256>; - type WeightInfo = weights::pallet_tx_pause::SubstrateWeight; -} - -impl dp_impl_tanssi_pallets_config::Config for Runtime { - const SLOT_DURATION: u64 = SLOT_DURATION; - type TimestampWeights = weights::pallet_timestamp::SubstrateWeight; - type AuthorInherentWeights = weights::pallet_author_inherent::SubstrateWeight; - type AuthoritiesNotingWeights = weights::pallet_cc_authorities_noting::SubstrateWeight; -} - -parameter_types! { - // One storage item; key size 32; value is size 4+4+16+32. Total = 1 * (32 + 56) - pub const DepositBase: Balance = currency::deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = currency::deposit(0, 32); - pub const MaxSignatories: u32 = 100; -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = MaxSignatories; - type WeightInfo = weights::pallet_multisig::SubstrateWeight; -} - -impl pallet_template::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_template::weights::SubstrateWeight; -} - -impl pallet_insecure_randomness_collective_flip::Config for Runtime {} - -impl pallet_sortition_sum_game::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_sortition_sum_game::weights::SubstrateWeight; -} - -impl pallet_schelling_game_shared::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_schelling_game_shared::weights::SubstrateWeight; - type Currency = Balances; - type RandomnessSource = RandomnessCollectiveFlip; - type Slash = (); - type Reward = (); - type SortitionSumGameSource = SortitionSumGame; -} - -impl pallet_profile_validation::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_profile_validation::weights::SubstrateWeight; - type Currency = Balances; - type SchellingGameSharedSource = SchellingGameShared; - type Slash = (); - type Reward = (); -} - -impl pallet_shared_storage::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_shared_storage::weights::SubstrateWeight; -} - -impl pallet_positive_externality::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_positive_externality::weights::SubstrateWeight; - type SharedStorageSource = SharedStorage; - type Currency = Balances; - type SchellingGameSharedSource = SchellingGameShared; - type Reward = (); -} - -impl pallet_department_funding::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_department_funding::weights::SubstrateWeight; - type SharedStorageSource = SharedStorage; - type Currency = Balances; - type SchellingGameSharedSource = SchellingGameShared; - type Reward = (); -} - -impl pallet_project_tips::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = pallet_project_tips::weights::SubstrateWeight; - type SharedStorageSource = SharedStorage; - type Currency = Balances; - type Reward = (); - type SchellingGameSharedSource = SchellingGameShared; -} - -impl_tanssi_pallets_config!(Runtime); - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system = 0, - ParachainSystem: cumulus_pallet_parachain_system = 1, - Timestamp: pallet_timestamp = 2, - ParachainInfo: parachain_info = 3, - Sudo: pallet_sudo = 4, - Utility: pallet_utility = 5, - Proxy: pallet_proxy = 6, - Migrations: pallet_migrations = 7, - MaintenanceMode: pallet_maintenance_mode = 8, - TxPause: pallet_tx_pause = 9, - - // Monetary stuff. - Balances: pallet_balances = 10, - TransactionPayment: pallet_transaction_payment = 11, - - // Other utilities - Multisig: pallet_multisig = 16, - - // ContainerChain Author Verification - AuthoritiesNoting: pallet_cc_authorities_noting = 50, - AuthorInherent: pallet_author_inherent = 51, - - // XCM - XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Storage, Event} = 70, - CumulusXcm: cumulus_pallet_xcm::{Pallet, Event, Origin} = 71, - DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event} = 72, - PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event, Origin, Config} = 73, - MessageQueue: pallet_message_queue::{Pallet, Call, Storage, Event} = 74, - ForeignAssets: pallet_assets::::{Pallet, Call, Storage, Event} = 75, - ForeignAssetsCreator: pallet_foreign_asset_creator::{Pallet, Call, Storage, Event} = 76, - AssetRate: pallet_asset_rate::{Pallet, Call, Storage, Event} = 77, - XcmExecutorUtils: pallet_xcm_executor_utils::{Pallet, Call, Storage, Event} = 78, - - RootTesting: pallet_root_testing = 100, - AsyncBacking: pallet_async_backing::{Pallet, Storage} = 110, - - TemplateModule: pallet_template = 200, - SortitionSumGame: pallet_sortition_sum_game = 201, - SchellingGameShared: pallet_schelling_game_shared = 202, - ProfileValidation: pallet_profile_validation = 203, - SharedStorage: pallet_shared_storage = 204, - PositiveExternality: pallet_positive_externality = 205, - DepartmentFunding: pallet_department_funding = 206, - ProjectTips: pallet_project_tips = 207, - RandomnessCollectiveFlip: pallet_insecure_randomness_collective_flip = 208, - - - } -); - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, frame_system_benchmarking::Pallet::] - [cumulus_pallet_parachain_system, ParachainSystem] - [pallet_timestamp, Timestamp] - [pallet_sudo, Sudo] - [pallet_utility, Utility] - [pallet_proxy, Proxy] - [pallet_tx_pause, TxPause] - [pallet_balances, Balances] - [pallet_multisig, Multisig] - [pallet_cc_authorities_noting, AuthoritiesNoting] - [pallet_author_inherent, AuthorInherent] - [cumulus_pallet_xcmp_queue, XcmpQueue] - [cumulus_pallet_dmp_queue, DmpQueue] - [pallet_xcm, PalletXcmExtrinsicsBenchmark::] - [pallet_xcm_benchmarks::generic, pallet_xcm_benchmarks::generic::Pallet::] - [pallet_message_queue, MessageQueue] - [pallet_assets, ForeignAssets] - [pallet_foreign_asset_creator, ForeignAssetsCreator] - [pallet_asset_rate, AssetRate] - [pallet_xcm_executor_utils, XcmExecutorUtils] - ); -} - -impl_runtime_apis! { - impl profile_validation_runtime_api::ProfileValidationApi for Runtime { - - fn get_challengers_evidence(profile_user_account: AccountId, offset: u64, limit: u16) -> Vec { - ProfileValidation::get_challengers_evidence(profile_user_account, offset, limit) - } - - fn get_evidence_period_end_block(profile_user_account: AccountId) -> Option { - ProfileValidation::get_evidence_period_end_block(profile_user_account) - } - - fn get_staking_period_end_block(profile_user_account: AccountId) -> Option { - ProfileValidation::get_staking_period_end_block(profile_user_account) - } - fn get_drawing_period_end(profile_user_account: AccountId) -> (u64, u64, bool) { - ProfileValidation::get_drawing_period_end(profile_user_account) - } - fn get_commit_period_end_block(profile_user_account: AccountId) -> Option { - ProfileValidation::get_commit_period_end_block(profile_user_account) - } - - fn get_vote_period_end_block(profile_user_account: AccountId) -> Option { - ProfileValidation::get_vote_period_end_block(profile_user_account) - } - fn selected_as_juror(profile_user_account: AccountId, who: AccountId) -> bool { - ProfileValidation::selected_as_juror(profile_user_account, who) - } - } - - impl department_funding_runtime_api::DepartmentFundingApi for Runtime { - - fn get_evidence_period_end_block(department_required_fund_id: DepartmentRequiredFundId) -> Option { - DepartmentFunding::get_evidence_period_end_block(department_required_fund_id) - } - - fn get_staking_period_end_block(department_required_fund_id: DepartmentRequiredFundId) -> Option { - DepartmentFunding::get_staking_period_end_block(department_required_fund_id) - } - fn get_drawing_period_end(department_required_fund_id: DepartmentRequiredFundId) -> (u64, u64, bool) { - DepartmentFunding::get_drawing_period_end(department_required_fund_id) - } - fn get_commit_period_end_block(department_required_fund_id: DepartmentRequiredFundId) -> Option { - DepartmentFunding::get_commit_period_end_block(department_required_fund_id) - } - - fn get_vote_period_end_block(department_required_fund_id: DepartmentRequiredFundId) -> Option { - DepartmentFunding::get_vote_period_end_block(department_required_fund_id) - } - fn selected_as_juror(department_required_fund_id: DepartmentRequiredFundId, who: AccountId) -> bool { - DepartmentFunding::selected_as_juror(department_required_fund_id, who) - } - } - - impl positive_externality_runtime_api::PositiveExternalityApi for Runtime { - - fn get_evidence_period_end_block(user_to_calculate: AccountId) -> Option { - PositiveExternality::get_evidence_period_end_block(user_to_calculate) - } - - fn get_staking_period_end_block(user_to_calculate: AccountId) -> Option { - PositiveExternality::get_staking_period_end_block(user_to_calculate) - } - fn get_drawing_period_end(user_to_calculate: AccountId) -> (u64, u64, bool) { - PositiveExternality::get_drawing_period_end(user_to_calculate) - } - fn get_commit_period_end_block(user_to_calculate: AccountId) -> Option { - PositiveExternality::get_commit_period_end_block(user_to_calculate) - } - - fn get_vote_period_end_block(user_to_calculate: AccountId) -> Option { - PositiveExternality::get_vote_period_end_block(user_to_calculate) - } - fn selected_as_juror(user_to_calculate: AccountId, who: AccountId) -> bool { - PositiveExternality::selected_as_juror(user_to_calculate, who) - } - } - - impl project_tips_runtime_api::ProjectTipsApi for Runtime { - - fn get_evidence_period_end_block(project_id: ProjectId) -> Option { - ProjectTips::get_evidence_period_end_block(project_id) - } - - fn get_staking_period_end_block(project_id: ProjectId) -> Option { - ProjectTips::get_staking_period_end_block(project_id) - } - fn get_drawing_period_end(project_id: ProjectId) -> (u64, u64, bool) { - ProjectTips::get_drawing_period_end(project_id) - } - fn get_commit_period_end_block(project_id: ProjectId) -> Option { - ProjectTips::get_commit_period_end_block(project_id) - } - - fn get_vote_period_end_block(project_id: ProjectId) -> Option { - ProjectTips::get_vote_period_end_block(project_id) - } - fn selected_as_juror(project_id: ProjectId, who: AccountId) -> bool { - ProjectTips::selected_as_juror(project_id, who) - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, sp_core::crypto::KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Index { - System::account_nonce(account) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - impl async_backing_primitives::UnincludedSegmentApi for Runtime { - fn can_build_upon( - included_hash: ::Hash, - slot: async_backing_primitives::Slot, - ) -> bool { - ConsensusHook::can_build_upon(included_hash, slot) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata( - extra: bool, - ) -> ( - Vec, - Vec, - ) { - use frame_benchmarking::{Benchmarking, BenchmarkList}; - use frame_support::traits::StorageInfoTrait; - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig, - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{BenchmarkBatch, Benchmarking, BenchmarkError}; - use sp_core::storage::TrackedStorageKey; - use staging_xcm::latest::prelude::*; - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - use crate::xcm_config::SelfReserve; - parameter_types! { - pub ExistentialDepositAsset: Option = Some(( - SelfReserve::get(), - ExistentialDeposit::get() - ).into()); - } - - impl pallet_xcm_benchmarks::Config for Runtime { - type XcmConfig = xcm_config::XcmConfig; - type AccountIdConverter = xcm_config::LocationToAccountId; - type DeliveryHelper = cumulus_primitives_utility::ToParentDeliveryHelper< - xcm_config::XcmConfig, - ExistentialDepositAsset, - xcm_config::PriceForParentDelivery, - >; - fn valid_destination() -> Result { - Ok(MultiLocation::parent()) - } - fn worst_case_holding(_depositable_count: u32) -> MultiAssets { - // We only care for native asset until we support others - // TODO: refactor this case once other assets are supported - vec![MultiAsset{ - id: Concrete(MultiLocation::here()), - fun: Fungible(u128::MAX), - }].into() - } - } - - impl pallet_xcm_benchmarks::generic::Config for Runtime { - type TransactAsset = Balances; - type RuntimeCall = RuntimeCall; - - fn worst_case_response() -> (u64, Response) { - (0u64, Response::Version(Default::default())) - } - - fn worst_case_asset_exchange() -> Result<(MultiAssets, MultiAssets), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn universal_alias() -> Result<(MultiLocation, Junction), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn transact_origin_and_runtime_call() -> Result<(MultiLocation, RuntimeCall), BenchmarkError> { - Ok((MultiLocation::parent(), frame_system::Call::remark_with_event { remark: vec![] }.into())) - } - - fn subscribe_origin() -> Result { - Ok(MultiLocation::parent()) - } - - fn claimable_asset() -> Result<(MultiLocation, MultiLocation, MultiAssets), BenchmarkError> { - let origin = MultiLocation::parent(); - let assets: MultiAssets = (Concrete(MultiLocation::parent()), 1_000u128).into(); - let ticket = MultiLocation { parents: 0, interior: Here }; - Ok((origin, ticket, assets)) - } - - fn unlockable_asset() -> Result<(MultiLocation, MultiLocation, MultiAsset), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn export_message_origin_and_destination( - ) -> Result<(MultiLocation, NetworkId, InteriorMultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - - fn alias_origin() -> Result<(MultiLocation, MultiLocation), BenchmarkError> { - Err(BenchmarkError::Skip) - } - } - - use pallet_xcm::benchmarking::Pallet as PalletXcmExtrinsicsBenchmark; - impl pallet_xcm::benchmarking::Config for Runtime { - fn reachable_dest() -> Option { - Some(Parent.into()) - } - - fn teleportable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - // Relay/native token can be teleported between AH and Relay. - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(Parent.into()) - }, - Parent.into(), - )) - } - - fn reserve_transferable_asset_and_dest() -> Option<(MultiAsset, MultiLocation)> { - use xcm_config::SelfReserve; - // AH can reserve transfer native token to some random parachain. - let random_para_id = 43211234; - ParachainSystem::open_outbound_hrmp_channel_for_benchmarks_or_tests( - random_para_id.into() - ); - Some(( - MultiAsset { - fun: Fungible(EXISTENTIAL_DEPOSIT), - id: Concrete(SelfReserve::get()) - }, - ParentThen(Parachain(random_para_id).into()).into(), - )) - } - - fn set_up_complex_asset_transfer( - ) -> Option<(MultiAssets, u32, MultiLocation, Box)> { - use xcm_config::SelfReserve; - // Transfer to Relay some local AH asset (local-reserve-transfer) while paying - // fees using teleported native token. - // (We don't care that Relay doesn't accept incoming unknown AH local asset) - let dest = Parent.into(); - - let fee_amount = EXISTENTIAL_DEPOSIT; - let fee_asset: MultiAsset = (SelfReserve::get(), fee_amount).into(); - - let who = frame_benchmarking::whitelisted_caller(); - // Give some multiple of the existential deposit - let balance = fee_amount + EXISTENTIAL_DEPOSIT * 1000; - let _ = >::make_free_balance_be( - &who, balance, - ); - - // verify initial balance - assert_eq!(Balances::free_balance(&who), balance); - - // set up local asset - let asset_amount = 10u128; - let initial_asset_amount = asset_amount * 10; - - let (asset_id, asset_location) = pallet_foreign_asset_creator::benchmarks::create_default_minted_asset::( - initial_asset_amount, - who.clone() - ); - - let transfer_asset: MultiAsset = (asset_location, asset_amount).into(); - - let assets: MultiAssets = vec![fee_asset.clone(), transfer_asset].into(); - let fee_index = if assets.get(0).unwrap().eq(&fee_asset) { 0 } else { 1 }; - - // verify transferred successfully - let verify = Box::new(move || { - // verify native balance after transfer, decreased by transferred fee amount - // (plus transport fees) - assert!(Balances::free_balance(&who) <= balance - fee_amount); - // verify asset balance decreased by exactly transferred amount - assert_eq!( - ForeignAssets::balance(asset_id, &who), - initial_asset_amount - asset_amount, - ); - }); - Some((assets, fee_index as u32, dest, verify)) - } - } - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac") - .to_vec() - .into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80") - .to_vec() - .into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a") - .to_vec() - .into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850") - .to_vec() - .into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7") - .to_vec() - .into(), - // The transactional storage limit. - hex_literal::hex!("3a7472616e73616374696f6e5f6c6576656c3a") - .to_vec() - .into(), - - // ParachainInfo ParachainId - hex_literal::hex!( "0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f") - .to_vec() - .into(), - ]; - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl dp_slot_duration_runtime_api::TanssiSlotDurationApi for Runtime { - fn slot_duration() -> u64 { - SLOT_DURATION - } - } -} - -#[allow(dead_code)] -struct CheckInherents; - -#[allow(deprecated)] -impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { - fn check_inherents( - block: &Block, - relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, - ) -> sp_inherents::CheckInherentsResult { - let relay_chain_slot = relay_state_proof - .read_slot() - .expect("Could not read the relay chain slot from the proof"); - - let inherent_data = - cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( - relay_chain_slot, - sp_std::time::Duration::from_secs(6), - ) - .create_inherent_data() - .expect("Could not create the timestamp inherent data"); - - inherent_data.check_extrinsics(block) - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - CheckInherents = CheckInherents, - BlockExecutor = pallet_author_inherent::BlockExecutor::, -} diff --git a/container-chains/runtime-templates/simple/src/migrations.rs b/container-chains/runtime-templates/simple/src/migrations.rs deleted file mode 100644 index 36c6445..0000000 --- a/container-chains/runtime-templates/simple/src/migrations.rs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Migrations -//! -//! This module acts as a registry where each migration is defined. Each migration should implement -//! the "Migration" trait declared in the pallet-migrations crate. - -use { - frame_support::{pallet_prelude::GetStorageVersion, traits::PalletInfoAccess}, - pallet_migrations::{GetMigrations, Migration}, - runtime_common::migrations::{ - PolkadotXcmMigrationFixVersion, XcmpQueueMigrationFixVersion, XcmpQueueMigrationV3, - XcmpQueueMigrationV4, - }, - sp_std::{marker::PhantomData, prelude::*}, -}; - -pub struct TemplateMigrations( - PhantomData<(Runtime, XcmpQueue, PolkadotXcm)>, -); - -impl GetMigrations - for TemplateMigrations -where - PolkadotXcm: GetStorageVersion + PalletInfoAccess + 'static, - XcmpQueue: GetStorageVersion + PalletInfoAccess + 'static, - Runtime: frame_system::Config, - Runtime: cumulus_pallet_xcmp_queue::Config, -{ - fn get_migrations() -> Vec> { - let migrate_polkadot_xcm_v1 = - PolkadotXcmMigrationFixVersion::(Default::default()); - let migrate_xcmp_queue_v2 = - XcmpQueueMigrationFixVersion::(Default::default()); - let migrate_xcmp_queue_v3 = XcmpQueueMigrationV3::(Default::default()); - let migrate_xcmp_queue_v4 = XcmpQueueMigrationV4::(Default::default()); - vec![ - Box::new(migrate_polkadot_xcm_v1), - Box::new(migrate_xcmp_queue_v2), - Box::new(migrate_xcmp_queue_v3), - Box::new(migrate_xcmp_queue_v4), - ] - } -} diff --git a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_dmp_queue.rs b/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_dmp_queue.rs deleted file mode 100644 index 4c9f704..0000000 --- a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_dmp_queue.rs +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_dmp_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_dmp_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/cumulus_pallet_dmp_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_dmp_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_dmp_queue::WeightInfo for SubstrateWeight { - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65661` - // Estimated: `69126` - // Minimum execution time: 129_008_000 picoseconds. - Weight::from_parts(130_461_000, 69126) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca7d95d3e948effbeccff2de2c182672836` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65660` - // Estimated: `69125` - // Minimum execution time: 73_402_000 picoseconds. - Weight::from_parts(74_520_000, 69125) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_overweight_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65691` - // Estimated: `69156` - // Minimum execution time: 120_484_000 picoseconds. - Weight::from_parts(121_449_000, 69156) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `DmpQueue::MigrationStatus` (r:1 w:1) - /// Proof: `DmpQueue::MigrationStatus` (`max_values`: Some(1), `max_size`: Some(1028), added: 1523, mode: `MaxEncodedLen`) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca754904d6d8c6fe06c4e5965f9b8397421` (r:1 w:0) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca70f923ef3252d0166429d36d20ed665a8` (r:1 w:1) - /// Storage: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - /// Proof: UNKNOWN KEY `0xcd5c1f6df63bc97f4a8ce37f14a50ca772275f64c354954352b71eea39cfaca2` (r:1 w:1) - fn on_idle_overweight_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65690` - // Estimated: `69155` - // Minimum execution time: 64_249_000 picoseconds. - Weight::from_parts(65_501_000, 69155) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_parachain_system.rs b/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index 13a8d2c..0000000 --- a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_parachain_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/cumulus_pallet_parachain_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_parachain_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::LastDmqMqcHead` (r:1 w:1) - /// Proof: `ParachainSystem::LastDmqMqcHead` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::ProcessedDownwardMessages` (r:0 w:1) - /// Proof: `ParachainSystem::ProcessedDownwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1000) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `12` - // Estimated: `3517` - // Minimum execution time: 3_065_000 picoseconds. - Weight::from_parts(3_180_000, 3517) - // Standard Error: 19_687 - .saturating_add(Weight::from_parts(192_303_686, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into()))) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_xcmp_queue.rs b/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_xcmp_queue.rs deleted file mode 100644 index 750ae38..0000000 --- a/container-chains/runtime-templates/simple/src/weights/cumulus_pallet_xcmp_queue.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_xcmp_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_xcmp_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/cumulus_pallet_xcmp_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_xcmp_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_xcmp_queue::WeightInfo for SubstrateWeight { - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:1) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `1594` - // Minimum execution time: 6_558_000 picoseconds. - Weight::from_parts(6_698_000, 1594) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn enqueue_xcmp_message() -> Weight { - // Proof Size summary in bytes: - // Measured: `115` - // Estimated: `3517` - // Minimum execution time: 16_071_000 picoseconds. - Weight::from_parts(16_550_000, 3517) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn suspend_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `109` - // Estimated: `1594` - // Minimum execution time: 4_075_000 picoseconds. - Weight::from_parts(4_200_000, 1594) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn resume_channel() -> Weight { - // Proof Size summary in bytes: - // Measured: `144` - // Estimated: `1629` - // Minimum execution time: 5_006_000 picoseconds. - Weight::from_parts(5_146_000, 1629) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn take_first_concatenated_xcm() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 69_921_000 picoseconds. - Weight::from_parts(70_110_000, 0) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::QueueConfig` (r:1 w:0) - /// Proof: `XcmpQueue::QueueConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::InboundXcmpSuspended` (r:1 w:0) - /// Proof: `XcmpQueue::InboundXcmpSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn on_idle_good_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65744` - // Estimated: `69209` - // Minimum execution time: 117_577_000 picoseconds. - Weight::from_parts(118_802_000, 69209) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6b345d8e88afa015075c945637c07e8f20` (r:1 w:1) - /// Storage: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - /// Proof: UNKNOWN KEY `0x7b3237373ffdfeb1cab4222e3b520d6bedc49980ba3aa32b0a189290fd036649` (r:1 w:1) - fn on_idle_large_msg() -> Weight { - // Proof Size summary in bytes: - // Measured: `65743` - // Estimated: `69208` - // Minimum execution time: 55_910_000 picoseconds. - Weight::from_parts(57_425_000, 69208) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/frame_system.rs b/container-chains/runtime-templates/simple/src/weights/frame_system.rs deleted file mode 100644 index 1fb2b3e..0000000 --- a/container-chains/runtime-templates/simple/src/weights/frame_system.rs +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for frame_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// frame_system -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/frame_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for frame_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl frame_system::WeightInfo for SubstrateWeight { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_844_000 picoseconds. - Weight::from_parts(1_305_052, 0) - // Standard Error: 0 - .saturating_add(Weight::from_parts(377, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_320_000 picoseconds. - Weight::from_parts(7_556_000, 0) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_723, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 4_527_000 picoseconds. - Weight::from_parts(4_768_000, 1485) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `127` - // Estimated: `1612` - // Minimum execution time: 142_248_334_000 picoseconds. - Weight::from_parts(144_262_006_000, 1612) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_776_000 picoseconds. - Weight::from_parts(2_861_000, 0) - // Standard Error: 2_142 - .saturating_add(Weight::from_parts(937_527, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_893_000 picoseconds. - Weight::from_parts(2_977_000, 0) - // Standard Error: 1_057 - .saturating_add(Weight::from_parts(660_862, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `64 + p * (69 ±0)` - // Estimated: `74 + p * (70 ±0)` - // Minimum execution time: 5_050_000 picoseconds. - Weight::from_parts(5_212_000, 74) - // Standard Error: 1_660 - .saturating_add(Weight::from_parts(1_214_878, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } - /// Storage: `System::AuthorizedUpgrade` (r:0 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - fn authorize_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 16_386_000 picoseconds. - Weight::from_parts(19_658_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn apply_authorized_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `149` - // Estimated: `1634` - // Minimum execution time: 147_587_967_000 picoseconds. - Weight::from_parts(149_640_280_000, 1634) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/mod.rs b/container-chains/runtime-templates/simple/src/weights/mod.rs deleted file mode 100644 index 3bc8f23..0000000 --- a/container-chains/runtime-templates/simple/src/weights/mod.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! A list of the different weight modules for our runtime. - -pub mod cumulus_pallet_dmp_queue; -pub mod cumulus_pallet_parachain_system; -pub mod cumulus_pallet_xcmp_queue; -pub mod frame_system; -pub mod pallet_asset_rate; -pub mod pallet_assets; -pub mod pallet_author_inherent; -pub mod pallet_balances; -pub mod pallet_cc_authorities_noting; -pub mod pallet_foreign_asset_creator; -pub mod pallet_message_queue; -pub mod pallet_multisig; -pub mod pallet_proxy; - -pub mod pallet_sudo; -pub mod pallet_timestamp; -pub mod pallet_tx_pause; -pub mod pallet_utility; -pub mod pallet_xcm; -pub mod pallet_xcm_executor_utils; -pub mod xcm; diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_asset_rate.rs b/container-chains/runtime-templates/simple/src/weights/pallet_asset_rate.rs deleted file mode 100644 index 7b5fd4f..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_asset_rate.rs +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_asset_rate -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_asset_rate -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_asset_rate.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_asset_rate using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_asset_rate::WeightInfo for SubstrateWeight { - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `76` - // Estimated: `3499` - // Minimum execution time: 12_989_000 picoseconds. - Weight::from_parts(13_287_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn update() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `3499` - // Minimum execution time: 13_176_000 picoseconds. - Weight::from_parts(13_581_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AssetRate::ConversionRateToNative` (r:1 w:1) - /// Proof: `AssetRate::ConversionRateToNative` (`max_values`: None, `max_size`: Some(34), added: 2509, mode: `MaxEncodedLen`) - fn remove() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `3499` - // Minimum execution time: 13_845_000 picoseconds. - Weight::from_parts(14_318_000, 3499) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_assets.rs b/container-chains/runtime-templates/simple/src/weights/pallet_assets.rs deleted file mode 100644 index 10c3c50..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_assets.rs +++ /dev/null @@ -1,489 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_assets -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_assets -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_assets.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_assets using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_assets::WeightInfo for SubstrateWeight { - fn create() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 0_000 picoseconds. - Weight::from_parts(0, 0) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn force_create() -> Weight { - // Proof Size summary in bytes: - // Measured: `3` - // Estimated: `3673` - // Minimum execution time: 13_199_000 picoseconds. - Weight::from_parts(13_512_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn start_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `273` - // Estimated: `3673` - // Minimum execution time: 12_863_000 picoseconds. - Weight::from_parts(13_409_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1001 w:1000) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1000 w:1000) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn destroy_accounts(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `79 + c * (208 ±0)` - // Estimated: `3673 + c * (2607 ±0)` - // Minimum execution time: 18_413_000 picoseconds. - Weight::from_parts(18_684_000, 3673) - // Standard Error: 9_946 - .saturating_add(Weight::from_parts(15_695_085, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(c.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(c.into()))) - .saturating_add(Weight::from_parts(0, 2607).saturating_mul(c.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1001 w:1000) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(146), added: 2621, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 1000]`. - fn destroy_approvals(a: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `408 + a * (86 ±0)` - // Estimated: `3673 + a * (2621 ±0)` - // Minimum execution time: 18_724_000 picoseconds. - Weight::from_parts(19_023_000, 3673) - // Standard Error: 7_058 - .saturating_add(Weight::from_parts(5_980_169, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into()))) - .saturating_add(Weight::from_parts(0, 2621).saturating_mul(a.into())) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn finish_destroy() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 14_943_000 picoseconds. - Weight::from_parts(15_447_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn mint() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 27_098_000 picoseconds. - Weight::from_parts(28_216_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn burn() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `3673` - // Minimum execution time: 35_251_000 picoseconds. - Weight::from_parts(35_675_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `384` - // Estimated: `6204` - // Minimum execution time: 50_179_000 picoseconds. - Weight::from_parts(51_178_000, 6204) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `384` - // Estimated: `6204` - // Minimum execution time: 44_753_000 picoseconds. - Weight::from_parts(45_704_000, 6204) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `384` - // Estimated: `6204` - // Minimum execution time: 50_560_000 picoseconds. - Weight::from_parts(51_366_000, 6204) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn freeze() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `3673` - // Minimum execution time: 17_350_000 picoseconds. - Weight::from_parts(17_867_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn thaw() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `3673` - // Minimum execution time: 17_511_000 picoseconds. - Weight::from_parts(18_054_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn freeze_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `273` - // Estimated: `3673` - // Minimum execution time: 12_647_000 picoseconds. - Weight::from_parts(12_902_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn thaw_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `273` - // Estimated: `3673` - // Minimum execution time: 12_595_000 picoseconds. - Weight::from_parts(12_913_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:0) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn transfer_ownership() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 15_644_000 picoseconds. - Weight::from_parts(15_999_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn set_team() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 13_950_000 picoseconds. - Weight::from_parts(14_216_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 15_541_000 picoseconds. - Weight::from_parts(16_421_379, 3673) - // Standard Error: 364 - .saturating_add(Weight::from_parts(1_276, 0).saturating_mul(n.into())) - // Standard Error: 364 - .saturating_add(Weight::from_parts(1_244, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `3673` - // Minimum execution time: 16_208_000 picoseconds. - Weight::from_parts(16_525_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - /// The range of component `n` is `[0, 50]`. - /// The range of component `s` is `[0, 50]`. - fn force_set_metadata(n: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `78` - // Estimated: `3673` - // Minimum execution time: 14_882_000 picoseconds. - Weight::from_parts(15_536_893, 3673) - // Standard Error: 332 - .saturating_add(Weight::from_parts(1_066, 0).saturating_mul(n.into())) - // Standard Error: 332 - .saturating_add(Weight::from_parts(1_019, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Metadata` (r:1 w:1) - /// Proof: `ForeignAssets::Metadata` (`max_values`: None, `max_size`: Some(138), added: 2613, mode: `MaxEncodedLen`) - fn force_clear_metadata() -> Weight { - // Proof Size summary in bytes: - // Measured: `401` - // Estimated: `3673` - // Minimum execution time: 15_909_000 picoseconds. - Weight::from_parts(16_540_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn force_asset_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 13_304_000 picoseconds. - Weight::from_parts(13_732_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(146), added: 2621, mode: `MaxEncodedLen`) - fn approve_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `273` - // Estimated: `3673` - // Minimum execution time: 20_775_000 picoseconds. - Weight::from_parts(21_281_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(146), added: 2621, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_approved() -> Weight { - // Proof Size summary in bytes: - // Measured: `552` - // Estimated: `6204` - // Minimum execution time: 61_759_000 picoseconds. - Weight::from_parts(62_823_000, 6204) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(146), added: 2621, mode: `MaxEncodedLen`) - fn cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `441` - // Estimated: `3673` - // Minimum execution time: 22_953_000 picoseconds. - Weight::from_parts(23_377_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Approvals` (r:1 w:1) - /// Proof: `ForeignAssets::Approvals` (`max_values`: None, `max_size`: Some(146), added: 2621, mode: `MaxEncodedLen`) - fn force_cancel_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `441` - // Estimated: `3673` - // Minimum execution time: 23_307_000 picoseconds. - Weight::from_parts(23_840_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn set_min_balance() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 14_539_000 picoseconds. - Weight::from_parts(14_974_000, 3673) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn touch() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 20_725_000 picoseconds. - Weight::from_parts(21_181_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn touch_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `239` - // Estimated: `3673` - // Minimum execution time: 19_707_000 picoseconds. - Weight::from_parts(20_048_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn refund() -> Weight { - // Proof Size summary in bytes: - // Measured: `363` - // Estimated: `3673` - // Minimum execution time: 17_953_000 picoseconds. - Weight::from_parts(18_378_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - fn refund_other() -> Weight { - // Proof Size summary in bytes: - // Measured: `396` - // Estimated: `3673` - // Minimum execution time: 17_270_000 picoseconds. - Weight::from_parts(17_685_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssets::Asset` (r:1 w:0) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:1 w:1) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - fn block() -> Weight { - // Proof Size summary in bytes: - // Measured: `345` - // Estimated: `3673` - // Minimum execution time: 17_366_000 picoseconds. - Weight::from_parts(17_762_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_author_inherent.rs b/container-chains/runtime-templates/simple/src/weights/pallet_author_inherent.rs deleted file mode 100644 index f06850c..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_author_inherent.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_author_inherent -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_author_inherent -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_author_inherent.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_author_inherent using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_author_inherent::WeightInfo for SubstrateWeight { - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::Author` (r:1 w:0) - /// Proof: `AuthorInherent::Author` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - /// Storage: `AuthoritiesNoting::Authorities` (r:1 w:0) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::InherentIncluded` (r:0 w:1) - /// Proof: `AuthorInherent::InherentIncluded` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) - fn kick_off_authorship_validation() -> Weight { - // Proof Size summary in bytes: - // Measured: `187` - // Estimated: `1672` - // Minimum execution time: 12_932_000 picoseconds. - Weight::from_parts(13_581_000, 1672) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_balances.rs b/container-chains/runtime-templates/simple/src/weights/pallet_balances.rs deleted file mode 100644 index b6041ff..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_balances.rs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_balances -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_balances -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_balances.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_balances using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_balances::WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 63_803_000 picoseconds. - Weight::from_parts(64_609_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 50_479_000 picoseconds. - Weight::from_parts(51_005_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 18_695_000 picoseconds. - Weight::from_parts(19_405_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 25_827_000 picoseconds. - Weight::from_parts(26_550_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 65_924_000 picoseconds. - Weight::from_parts(66_718_000, 6196) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 62_763_000 picoseconds. - Weight::from_parts(63_554_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 23_162_000 picoseconds. - Weight::from_parts(23_471_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 22_277_000 picoseconds. - Weight::from_parts(22_479_000, 990) - // Standard Error: 16_644 - .saturating_add(Weight::from_parts(17_839_906, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_cc_authorities_noting.rs b/container-chains/runtime-templates/simple/src/weights/pallet_cc_authorities_noting.rs deleted file mode 100644 index f5599bf..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_cc_authorities_noting.rs +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_cc_authorities_noting -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_cc_authorities_noting -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_cc_authorities_noting.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_cc_authorities_noting using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_cc_authorities_noting::WeightInfo for SubstrateWeight { - /// Storage: `AuthoritiesNoting::DidSetOrchestratorAuthorityData` (r:1 w:1) - /// Proof: `AuthoritiesNoting::DidSetOrchestratorAuthorityData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthoritiesNoting::OrchestratorParaId` (r:1 w:0) - /// Proof: `AuthoritiesNoting::OrchestratorParaId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthoritiesNoting::Authorities` (r:0 w:1) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_latest_authorities_data() -> Weight { - // Proof Size summary in bytes: - // Measured: `141` - // Estimated: `1626` - // Minimum execution time: 28_903_000 picoseconds. - Weight::from_parts(29_809_000, 1626) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `AuthoritiesNoting::Authorities` (r:0 w:1) - /// Proof: `AuthoritiesNoting::Authorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[0, 10]`. - fn set_authorities(x: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_084_000 picoseconds. - Weight::from_parts(7_663_864, 0) - // Standard Error: 1_880 - .saturating_add(Weight::from_parts(41_502, 0).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AuthoritiesNoting::OrchestratorParaId` (r:0 w:1) - /// Proof: `AuthoritiesNoting::OrchestratorParaId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_orchestrator_para_id() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_687_000 picoseconds. - Weight::from_parts(7_088_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_foreign_asset_creator.rs b/container-chains/runtime-templates/simple/src/weights/pallet_foreign_asset_creator.rs deleted file mode 100644 index cc19907..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_foreign_asset_creator.rs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_foreign_asset_creator -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_foreign_asset_creator -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_foreign_asset_creator.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_foreign_asset_creator using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_foreign_asset_creator::WeightInfo for SubstrateWeight { - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn create_foreign_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `112` - // Estimated: `3673` - // Minimum execution time: 24_643_000 picoseconds. - Weight::from_parts(25_270_000, 3673) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:2) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn change_existing_asset_type() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `3654` - // Minimum execution time: 20_502_000 picoseconds. - Weight::from_parts(20_757_000, 3654) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn remove_existing_asset_type() -> Weight { - // Proof Size summary in bytes: - // Measured: `189` - // Estimated: `3654` - // Minimum execution time: 17_376_000 picoseconds. - Weight::from_parts(17_858_000, 3654) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ForeignAssetsCreator::AssetIdToForeignAsset` (r:1 w:1) - /// Proof: `ForeignAssetsCreator::AssetIdToForeignAsset` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:0 w:1) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn destroy_foreign_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `428` - // Estimated: `3893` - // Minimum execution time: 26_347_000 picoseconds. - Weight::from_parts(26_944_000, 3893) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_message_queue.rs b/container-chains/runtime-templates/simple/src/weights/pallet_message_queue.rs deleted file mode 100644 index 5ac5be9..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_message_queue.rs +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_message_queue -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_message_queue -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_message_queue.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_message_queue using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_message_queue::WeightInfo for SubstrateWeight { - /// Storage: `MessageQueue::ServiceHead` (r:1 w:0) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::BookStateFor` (r:2 w:2) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn ready_ring_knit() -> Weight { - // Proof Size summary in bytes: - // Measured: `223` - // Estimated: `6044` - // Minimum execution time: 14_861_000 picoseconds. - Weight::from_parts(15_530_000, 6044) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:2 w:2) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - fn ready_ring_unknit() -> Weight { - // Proof Size summary in bytes: - // Measured: `218` - // Estimated: `6044` - // Minimum execution time: 13_333_000 picoseconds. - Weight::from_parts(13_775_000, 6044) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn service_queue_base() -> Weight { - // Proof Size summary in bytes: - // Measured: `48` - // Estimated: `3517` - // Minimum execution time: 8_076_000 picoseconds. - Weight::from_parts(8_318_000, 3517) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_base_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 7_965_000 picoseconds. - Weight::from_parts(8_221_000, 69050) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_base_no_completion() -> Weight { - // Proof Size summary in bytes: - // Measured: `72` - // Estimated: `69050` - // Minimum execution time: 8_081_000 picoseconds. - Weight::from_parts(8_625_000, 69050) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:0 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:0 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn service_page_item() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 164_330_000 picoseconds. - Weight::from_parts(166_478_000, 0) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::ServiceHead` (r:1 w:1) - /// Proof: `MessageQueue::ServiceHead` (`max_values`: Some(1), `max_size`: Some(5), added: 500, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::BookStateFor` (r:1 w:0) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn bump_service_head() -> Weight { - // Proof Size summary in bytes: - // Measured: `171` - // Estimated: `3517` - // Minimum execution time: 8_338_000 picoseconds. - Weight::from_parts(8_728_000, 3517) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn reap_page() -> Weight { - // Proof Size summary in bytes: - // Measured: `65667` - // Estimated: `69050` - // Minimum execution time: 60_542_000 picoseconds. - Weight::from_parts(61_977_000, 69050) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn execute_overweight_page_removed() -> Weight { - // Proof Size summary in bytes: - // Measured: `65709` - // Estimated: `69050` - // Minimum execution time: 84_135_000 picoseconds. - Weight::from_parts(85_836_000, 69050) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `MessageQueue::BookStateFor` (r:1 w:1) - /// Proof: `MessageQueue::BookStateFor` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `MessageQueue::Pages` (r:1 w:1) - /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(65585), added: 68060, mode: `MaxEncodedLen`) - fn execute_overweight_page_updated() -> Weight { - // Proof Size summary in bytes: - // Measured: `65709` - // Estimated: `69050` - // Minimum execution time: 121_491_000 picoseconds. - Weight::from_parts(122_480_000, 69050) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_multisig.rs b/container-chains/runtime-templates/simple/src/weights/pallet_multisig.rs deleted file mode 100644 index 0d25a06..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_multisig -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_multisig -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_multisig.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_multisig using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_multisig::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `z` is `[0, 10000]`. - fn as_multi_threshold_1(z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 24_349_000 picoseconds. - Weight::from_parts(25_677_854, 3997) - // Standard Error: 6 - .saturating_add(Weight::from_parts(562, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `296 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 51_282_000 picoseconds. - Weight::from_parts(39_443_448, 6811) - // Standard Error: 695 - .saturating_add(Weight::from_parts(138_122, 0).saturating_mul(s.into())) - // Standard Error: 6 - .saturating_add(Weight::from_parts(1_456, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `315` - // Estimated: `6811` - // Minimum execution time: 33_405_000 picoseconds. - Weight::from_parts(22_547_789, 6811) - // Standard Error: 540 - .saturating_add(Weight::from_parts(123_044, 0).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_parts(1_409, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `467 + s * (33 ±0)` - // Estimated: `6811 + s * (34 ±0)` - // Minimum execution time: 63_497_000 picoseconds. - Weight::from_parts(47_468_506, 6811) - // Standard Error: 1_327 - .saturating_add(Weight::from_parts(203_675, 0).saturating_mul(s.into())) - // Standard Error: 13 - .saturating_add(Weight::from_parts(1_709, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 34).saturating_mul(s.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `296 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 37_097_000 picoseconds. - Weight::from_parts(37_501_529, 6811) - // Standard Error: 852 - .saturating_add(Weight::from_parts(133_055, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `315` - // Estimated: `6811` - // Minimum execution time: 20_380_000 picoseconds. - Weight::from_parts(20_476_099, 6811) - // Standard Error: 661 - .saturating_add(Weight::from_parts(114_276, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `487 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 38_289_000 picoseconds. - Weight::from_parts(38_641_314, 6811) - // Standard Error: 818 - .saturating_add(Weight::from_parts(127_222, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_proxy.rs b/container-chains/runtime-templates/simple/src/weights/pallet_proxy.rs deleted file mode 100644 index c1d5139..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_proxy -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_proxy -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_proxy.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_proxy using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_proxy::WeightInfo for SubstrateWeight { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `136 + p * (37 ±0)` - // Estimated: `4706 + p * (37 ±0)` - // Minimum execution time: 22_505_000 picoseconds. - Weight::from_parts(23_141_370, 4706) - // Standard Error: 1_367 - .saturating_add(Weight::from_parts(44_086, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `463 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698 + a * (68 ±0) + p * (37 ±0)` - // Minimum execution time: 48_501_000 picoseconds. - Weight::from_parts(49_157_317, 5698) - // Standard Error: 2_925 - .saturating_add(Weight::from_parts(199_580, 0).saturating_mul(a.into())) - // Standard Error: 3_022 - .saturating_add(Weight::from_parts(44_799, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 68).saturating_mul(a.into())) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `332 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 27_673_000 picoseconds. - Weight::from_parts(28_411_776, 5698) - // Standard Error: 1_558 - .saturating_add(Weight::from_parts(177_909, 0).saturating_mul(a.into())) - // Standard Error: 1_609 - .saturating_add(Weight::from_parts(9_160, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, _p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `332 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 27_127_000 picoseconds. - Weight::from_parts(28_442_417, 5698) - // Standard Error: 1_692 - .saturating_add(Weight::from_parts(176_430, 0).saturating_mul(a.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `349 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 36_732_000 picoseconds. - Weight::from_parts(36_783_203, 5698) - // Standard Error: 1_423 - .saturating_add(Weight::from_parts(171_673, 0).saturating_mul(a.into())) - // Standard Error: 1_471 - .saturating_add(Weight::from_parts(31_264, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `90 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_814_000 picoseconds. - Weight::from_parts(27_524_440, 4706) - // Standard Error: 1_112 - .saturating_add(Weight::from_parts(35_992, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `90 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_971_000 picoseconds. - Weight::from_parts(27_953_563, 4706) - // Standard Error: 2_104 - .saturating_add(Weight::from_parts(41_873, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `90 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 25_439_000 picoseconds. - Weight::from_parts(26_145_505, 4706) - // Standard Error: 1_112 - .saturating_add(Weight::from_parts(35_842, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `102` - // Estimated: `4706` - // Minimum execution time: 28_754_000 picoseconds. - Weight::from_parts(29_869_647, 4706) - // Standard Error: 1_097 - .saturating_add(Weight::from_parts(11_390, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `127 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_530_000 picoseconds. - Weight::from_parts(27_762_910, 4706) - // Standard Error: 1_122 - .saturating_add(Weight::from_parts(38_806, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_sudo.rs b/container-chains/runtime-templates/simple/src/weights/pallet_sudo.rs deleted file mode 100644 index 8740aa1..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_sudo.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_sudo -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_sudo -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_sudo.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_sudo using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_sudo::WeightInfo for SubstrateWeight { - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn set_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `61` - // Estimated: `1517` - // Minimum execution time: 12_044_000 picoseconds. - Weight::from_parts(12_371_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn sudo() -> Weight { - // Proof Size summary in bytes: - // Measured: `61` - // Estimated: `1517` - // Minimum execution time: 13_453_000 picoseconds. - Weight::from_parts(13_823_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn sudo_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `61` - // Estimated: `1517` - // Minimum execution time: 13_584_000 picoseconds. - Weight::from_parts(13_913_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn remove_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `61` - // Estimated: `1517` - // Minimum execution time: 10_660_000 picoseconds. - Weight::from_parts(10_841_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_timestamp.rs b/container-chains/runtime-templates/simple/src/weights/pallet_timestamp.rs deleted file mode 100644 index 4889a5e..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_timestamp -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_timestamp -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_timestamp.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_timestamp using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_timestamp::WeightInfo for SubstrateWeight { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `1493` - // Minimum execution time: 7_168_000 picoseconds. - Weight::from_parts(7_422_000, 1493) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 4_355_000 picoseconds. - Weight::from_parts(4_506_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_tx_pause.rs b/container-chains/runtime-templates/simple/src/weights/pallet_tx_pause.rs deleted file mode 100644 index ca66c29..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_tx_pause.rs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_tx_pause -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_tx_pause -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_tx_pause.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_tx_pause using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_tx_pause::WeightInfo for SubstrateWeight { - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn pause() -> Weight { - // Proof Size summary in bytes: - // Measured: `4` - // Estimated: `3997` - // Minimum execution time: 15_847_000 picoseconds. - Weight::from_parts(16_319_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn unpause() -> Weight { - // Proof Size summary in bytes: - // Measured: `566` - // Estimated: `3997` - // Minimum execution time: 21_731_000 picoseconds. - Weight::from_parts(21_996_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_utility.rs b/container-chains/runtime-templates/simple/src/weights/pallet_utility.rs deleted file mode 100644 index 51dfad4..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_utility.rs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_utility -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_utility -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_utility.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_utility using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_utility::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_459_000 picoseconds. - Weight::from_parts(4_908_140, 3997) - // Standard Error: 4_662 - .saturating_add(Weight::from_parts(7_745_064, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 13_558_000 picoseconds. - Weight::from_parts(13_869_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_616_000 picoseconds. - Weight::from_parts(12_442_970, 3997) - // Standard Error: 4_575 - .saturating_add(Weight::from_parts(8_173_465, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_709_000 picoseconds. - Weight::from_parts(10_116_000, 0) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_387_000 picoseconds. - Weight::from_parts(11_551_976, 3997) - // Standard Error: 3_971 - .saturating_add(Weight::from_parts(7_665_569, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_xcm.rs b/container-chains/runtime-templates/simple/src/weights/pallet_xcm.rs deleted file mode 100644 index 6cea5df..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_xcm.rs +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_xcm.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn send() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 29_508_000 picoseconds. - Weight::from_parts(29_927_000, 3540) - .saturating_add(T::DbWeight::get().reads(6_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Benchmark::Override` (r:0 w:0) - /// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn teleport_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 18_446_744_073_709_551_000 picoseconds. - Weight::from_parts(18_446_744_073_709_551_000, 0) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `XcmpQueue::DeliveryFeeFactor` (r:1 w:0) - /// Proof: `XcmpQueue::DeliveryFeeFactor` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::RelevantMessagingState` (r:1 w:0) - /// Proof: `ParachainSystem::RelevantMessagingState` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpStatus` (r:1 w:1) - /// Proof: `XcmpQueue::OutboundXcmpStatus` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `XcmpQueue::OutboundXcmpMessages` (r:0 w:1) - /// Proof: `XcmpQueue::OutboundXcmpMessages` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn reserve_transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `371` - // Estimated: `607086` - // Minimum execution time: 162_318_000 picoseconds. - Weight::from_parts(166_336_000, 607086) - .saturating_add(T::DbWeight::get().reads(9_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:0) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssetsCreator::ForeignAssetToAssetId` (r:1 w:0) - /// Proof: `ForeignAssetsCreator::ForeignAssetToAssetId` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ForeignAssets::Asset` (r:1 w:1) - /// Proof: `ForeignAssets::Asset` (`max_values`: None, `max_size`: Some(208), added: 2683, mode: `MaxEncodedLen`) - /// Storage: `ForeignAssets::Account` (r:2 w:2) - /// Proof: `ForeignAssets::Account` (`max_values`: None, `max_size`: Some(132), added: 2607, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn transfer_assets() -> Weight { - // Proof Size summary in bytes: - // Measured: `705` - // Estimated: `607086` - // Minimum execution time: 209_167_000 picoseconds. - Weight::from_parts(213_637_000, 607086) - .saturating_add(T::DbWeight::get().reads(13_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - fn execute() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_494_000 picoseconds. - Weight::from_parts(13_806_000, 0) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 10_392_000 picoseconds. - Weight::from_parts(10_692_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_default_xcm_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_379_000 picoseconds. - Weight::from_parts(3_594_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_subscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 35_300_000 picoseconds. - Weight::from_parts(36_444_000, 3540) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn force_unsubscribe_version_notify() -> Weight { - // Proof Size summary in bytes: - // Measured: `257` - // Estimated: `3722` - // Minimum execution time: 36_800_000 picoseconds. - Weight::from_parts(37_255_000, 3722) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `PolkadotXcm::XcmExecutionSuspended` (r:0 w:1) - /// Proof: `PolkadotXcm::XcmExecutionSuspended` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn force_suspension() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_352_000 picoseconds. - Weight::from_parts(3_666_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_supported_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `131` - // Estimated: `11021` - // Minimum execution time: 22_286_000 picoseconds. - Weight::from_parts(22_914_000, 11021) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notifiers() -> Weight { - // Proof Size summary in bytes: - // Measured: `135` - // Estimated: `11025` - // Minimum execution time: 22_351_000 picoseconds. - Weight::from_parts(22_740_000, 11025) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn already_notified_target() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `13507` - // Minimum execution time: 23_089_000 picoseconds. - Weight::from_parts(23_499_000, 13507) - .saturating_add(T::DbWeight::get().reads(5_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn notify_current_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `6082` - // Minimum execution time: 33_387_000 picoseconds. - Weight::from_parts(34_272_000, 6082) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn notify_target_migration_fail() -> Weight { - // Proof Size summary in bytes: - // Measured: `172` - // Estimated: `8587` - // Minimum execution time: 12_399_000 picoseconds. - Weight::from_parts(12_775_000, 8587) - .saturating_add(T::DbWeight::get().reads(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn migrate_version_notify_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `142` - // Estimated: `11032` - // Minimum execution time: 22_444_000 picoseconds. - Weight::from_parts(22_962_000, 11032) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn migrate_and_notify_old_targets() -> Weight { - // Proof Size summary in bytes: - // Measured: `148` - // Estimated: `11038` - // Minimum execution time: 42_340_000 picoseconds. - Weight::from_parts(43_044_000, 11038) - .saturating_add(T::DbWeight::get().reads(10_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1) - /// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::Queries` (r:0 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn new_query() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `1554` - // Minimum execution time: 6_460_000 picoseconds. - Weight::from_parts(6_693_000, 1554) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:1) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn take_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `7706` - // Estimated: `11171` - // Minimum execution time: 34_877_000 picoseconds. - Weight::from_parts(35_303_000, 11171) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_xcm_benchmarks::generic.rs b/container-chains/runtime-templates/simple/src/weights/pallet_xcm_benchmarks::generic.rs deleted file mode 100644 index 6fd6a00..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_xcm_benchmarks::generic.rs +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_benchmarks::generic -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_benchmarks::generic -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_xcm_benchmarks::generic.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_benchmarks::generic using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm_benchmarks::generic::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 69_025_000 picoseconds. - Weight::from_parts(70_478_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_108_000 picoseconds. - Weight::from_parts(3_187_000, 0) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:0) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `3534` - // Minimum execution time: 11_745_000 picoseconds. - Weight::from_parts(12_099_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 20_008_000 picoseconds. - Weight::from_parts(20_547_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_290_000 picoseconds. - Weight::from_parts(3_378_000, 0) - } - fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_943_000 picoseconds. - Weight::from_parts(3_054_000, 0) - } - fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_922_000 picoseconds. - Weight::from_parts(3_047_000, 0) - } - fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_994_000 picoseconds. - Weight::from_parts(3_093_000, 0) - } - fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_599_000 picoseconds. - Weight::from_parts(3_743_000, 0) - } - fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_933_000 picoseconds. - Weight::from_parts(3_009_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 59_555_000 picoseconds. - Weight::from_parts(61_159_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - /// Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `126` - // Estimated: `3591` - // Minimum execution time: 18_218_000 picoseconds. - Weight::from_parts(18_471_000, 3591) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_876_000 picoseconds. - Weight::from_parts(2_912_000, 0) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 30_762_000 picoseconds. - Weight::from_parts(31_259_000, 3540) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_046_000 picoseconds. - Weight::from_parts(6_273_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_570_000 picoseconds. - Weight::from_parts(4_680_000, 0) - } - fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_133_000 picoseconds. - Weight::from_parts(3_207_000, 0) - } - fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_978_000 picoseconds. - Weight::from_parts(3_105_000, 0) - } - fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_881_000 picoseconds. - Weight::from_parts(2_996_000, 0) - } - fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_133_000 picoseconds. - Weight::from_parts(3_190_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 65_995_000 picoseconds. - Weight::from_parts(67_937_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_558_000 picoseconds. - Weight::from_parts(7_866_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 59_627_000 picoseconds. - Weight::from_parts(61_599_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_993_000 picoseconds. - Weight::from_parts(3_071_000, 0) - } - fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_875_000 picoseconds. - Weight::from_parts(3_020_000, 0) - } - fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_898_000 picoseconds. - Weight::from_parts(2_985_000, 0) - } - fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_827_000 picoseconds. - Weight::from_parts(2_989_000, 0) - } - fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_980_000 picoseconds. - Weight::from_parts(3_035_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/pallet_xcm_executor_utils.rs b/container-chains/runtime-templates/simple/src/weights/pallet_xcm_executor_utils.rs deleted file mode 100644 index 01f0695..0000000 --- a/container-chains/runtime-templates/simple/src/weights/pallet_xcm_executor_utils.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_executor_utils -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_executor_utils -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_xcm_executor_utils.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_executor_utils using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_xcm_executor_utils::WeightInfo for SubstrateWeight { - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:0 w:1) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn set_reserve_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_492_000 picoseconds. - Weight::from_parts(9_941_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::ReservePolicy` (r:1 w:1) - /// Proof: `XcmExecutorUtils::ReservePolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn remove_reserve_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `607086` - // Minimum execution time: 13_785_000 picoseconds. - Weight::from_parts(14_331_000, 607086) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:0 w:1) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn set_teleport_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 9_586_000 picoseconds. - Weight::from_parts(9_794_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `XcmExecutorUtils::TeleportPolicy` (r:1 w:1) - /// Proof: `XcmExecutorUtils::TeleportPolicy` (`max_values`: None, `max_size`: Some(603621), added: 606096, mode: `MaxEncodedLen`) - fn remove_teleport_policy() -> Weight { - // Proof Size summary in bytes: - // Measured: `87` - // Estimated: `607086` - // Minimum execution time: 13_974_000 picoseconds. - Weight::from_parts(14_248_000, 607086) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/weights/xcm/mod.rs b/container-chains/runtime-templates/simple/src/weights/xcm/mod.rs deleted file mode 100644 index a42dc2c..0000000 --- a/container-chains/runtime-templates/simple/src/weights/xcm/mod.rs +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -pub mod pallet_xcm_benchmarks_generic; - -use { - crate::Runtime, - frame_support::weights::Weight, - pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric, - sp_std::prelude::*, - staging_xcm::{ - latest::{prelude::*, Weight as XCMWeight}, - DoubleEncoded, - }, -}; - -trait WeighMultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight; -} - -impl WeighMultiAssets for MultiAssets { - fn weigh_multi_assets(&self, weight: Weight) -> XCMWeight { - weight.saturating_mul(self.inner().iter().count() as u64) - } -} - -// Values copied from statemint benchmarks -const ASSET_BURN_MAX_PROOF_SIZE: u64 = 7242; -const ASSET_MINT_MAX_PROOF_SIZE: u64 = 7242; -const ASSET_TRANSFER_MAX_PROOF_SIZE: u64 = 13412; - -// For now we are returning benchmarked weights only for generic XCM instructions. -// Fungible XCM instructions will return a fixed weight value of -// 200_000_000 ref_time and its proper PoV weight taken from statemint benchmarks. -// -// TODO: add the fungible benchmarked values once these are calculated. -pub struct XcmWeight(core::marker::PhantomData); -impl XcmWeightInfo for XcmWeight -where - Runtime: frame_system::Config, -{ - fn withdraw_asset(assets: &MultiAssets) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_BURN_MAX_PROOF_SIZE, - )) - } - fn reserve_asset_deposited(assets: &MultiAssets) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts(200_000_000u64, 0)) - } - fn receive_teleported_asset(_assets: &MultiAssets) -> XCMWeight { - XCMWeight::MAX - } - fn query_response( - _query_id: &u64, - _response: &Response, - _max_weight: &Weight, - _querier: &Option, - ) -> XCMWeight { - XcmGeneric::::query_response() - } - fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_TRANSFER_MAX_PROOF_SIZE, - )) - } - fn transfer_reserve_asset( - assets: &MultiAssets, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - assets.weigh_multi_assets(XCMWeight::from_parts( - 200_000_000u64, - ASSET_TRANSFER_MAX_PROOF_SIZE, - )) - } - fn transact( - _origin_type: &OriginKind, - _require_weight_at_most: &Weight, - _call: &DoubleEncoded, - ) -> XCMWeight { - XcmGeneric::::transact() - } - fn hrmp_new_channel_open_request( - _sender: &u32, - _max_message_size: &u32, - _max_capacity: &u32, - ) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_accepted(_recipient: &u32) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> XCMWeight { - // XCM Executor does not currently support HRMP channel operations - Weight::MAX - } - fn clear_origin() -> XCMWeight { - XcmGeneric::::clear_origin() - } - fn descend_origin(_who: &InteriorMultiLocation) -> XCMWeight { - XcmGeneric::::descend_origin() - } - fn report_error(_query_response_info: &QueryResponseInfo) -> XCMWeight { - XcmGeneric::::report_error() - } - fn deposit_asset(_assets: &MultiAssetFilter, _dest: &MultiLocation) -> XCMWeight { - Weight::from_parts(200_000_000u64, ASSET_MINT_MAX_PROOF_SIZE) - } - fn deposit_reserve_asset( - _assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - Weight::from_parts(200_000_000u64, ASSET_MINT_MAX_PROOF_SIZE) - } - fn exchange_asset( - _give: &MultiAssetFilter, - _receive: &MultiAssets, - _maximal: &bool, - ) -> XCMWeight { - Weight::MAX - } - fn initiate_reserve_withdraw( - _assets: &MultiAssetFilter, - _reserve: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - XCMWeight::from_parts(200_000_000u64, ASSET_TRANSFER_MAX_PROOF_SIZE) - } - fn initiate_teleport( - _assets: &MultiAssetFilter, - _dest: &MultiLocation, - _xcm: &Xcm<()>, - ) -> XCMWeight { - XCMWeight::MAX - } - fn report_holding(_response_info: &QueryResponseInfo, _assets: &MultiAssetFilter) -> Weight { - XcmGeneric::::report_holding() - } - fn buy_execution(_fees: &MultiAsset, _weight_limit: &WeightLimit) -> XCMWeight { - XcmGeneric::::buy_execution() - } - fn refund_surplus() -> XCMWeight { - XcmGeneric::::refund_surplus() - } - fn set_error_handler(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_error_handler() - } - fn set_appendix(_xcm: &Xcm) -> XCMWeight { - XcmGeneric::::set_appendix() - } - fn clear_error() -> XCMWeight { - XcmGeneric::::clear_error() - } - fn claim_asset(assets: &MultiAssets, _ticket: &MultiLocation) -> XCMWeight { - assets.weigh_multi_assets(XcmGeneric::::claim_asset()) - } - fn trap(_code: &u64) -> XCMWeight { - XcmGeneric::::trap() - } - fn subscribe_version(_query_id: &QueryId, _max_response_weight: &Weight) -> XCMWeight { - XcmGeneric::::subscribe_version() - } - fn unsubscribe_version() -> XCMWeight { - XcmGeneric::::unsubscribe_version() - } - fn burn_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::burn_asset()) - } - fn expect_asset(assets: &MultiAssets) -> Weight { - assets.weigh_multi_assets(XcmGeneric::::expect_asset()) - } - fn expect_origin(_origin: &Option) -> Weight { - XcmGeneric::::expect_origin() - } - fn expect_error(_error: &Option<(u32, XcmError)>) -> Weight { - XcmGeneric::::expect_error() - } - fn expect_transact_status(_transact_status: &MaybeErrorCode) -> Weight { - XcmGeneric::::expect_transact_status() - } - fn query_pallet(_module_name: &Vec, _response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::query_pallet() - } - fn expect_pallet( - _index: &u32, - _name: &Vec, - _module_name: &Vec, - _crate_major: &u32, - _min_crate_minor: &u32, - ) -> Weight { - XcmGeneric::::expect_pallet() - } - fn report_transact_status(_response_info: &QueryResponseInfo) -> Weight { - XcmGeneric::::report_transact_status() - } - fn clear_transact_status() -> Weight { - XcmGeneric::::clear_transact_status() - } - fn universal_origin(_: &Junction) -> Weight { - Weight::MAX - } - fn export_message(_: &NetworkId, _: &Junctions, _: &Xcm<()>) -> Weight { - Weight::MAX - } - fn lock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn unlock_asset(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn note_unlockable(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn request_unlock(_: &MultiAsset, _: &MultiLocation) -> Weight { - Weight::MAX - } - fn set_fees_mode(_: &bool) -> Weight { - XcmGeneric::::set_fees_mode() - } - fn set_topic(_topic: &[u8; 32]) -> Weight { - XcmGeneric::::set_topic() - } - fn clear_topic() -> Weight { - XcmGeneric::::clear_topic() - } - fn alias_origin(_: &MultiLocation) -> Weight { - // XCM Executor does not currently support alias origin operations - Weight::MAX - } - fn unpaid_execution(_: &WeightLimit, _: &Option) -> Weight { - XcmGeneric::::unpaid_execution() - } -} diff --git a/container-chains/runtime-templates/simple/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/container-chains/runtime-templates/simple/src/weights/xcm/pallet_xcm_benchmarks_generic.rs deleted file mode 100644 index d5ac11e..0000000 --- a/container-chains/runtime-templates/simple/src/weights/xcm/pallet_xcm_benchmarks_generic.rs +++ /dev/null @@ -1,348 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_xcm_benchmarks::generic -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-15, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// target/release/container-chain-simple-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_xcm_benchmarks::generic -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-runtime-template-xcm.hbs -// --json-file -// raw.json -// --output -// tmp/simple_template_weights/pallet_xcm_benchmarks::generic.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_xcm_benchmarks::generic using the Substrate node and recommended hardware. -pub struct WeightInfo(PhantomData); -impl WeightInfo { - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_holding() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 67_455_000 picoseconds. - Weight::from_parts(68_733_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn buy_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_084_000 picoseconds. - Weight::from_parts(3_180_000, 0) - } - /// Storage: `PolkadotXcm::Queries` (r:1 w:0) - /// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn query_response() -> Weight { - // Proof Size summary in bytes: - // Measured: `69` - // Estimated: `3534` - // Minimum execution time: 11_782_000 picoseconds. - Weight::from_parts(12_021_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - pub(crate) fn transact() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 19_731_000 picoseconds. - Weight::from_parts(20_028_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - pub(crate) fn refund_surplus() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_280_000 picoseconds. - Weight::from_parts(3_377_000, 0) - } - pub(crate) fn set_error_handler() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_056_000 picoseconds. - Weight::from_parts(3_155_000, 0) - } - pub(crate) fn set_appendix() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_974_000 picoseconds. - Weight::from_parts(3_054_000, 0) - } - pub(crate) fn clear_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_915_000 picoseconds. - Weight::from_parts(3_032_000, 0) - } - pub(crate) fn descend_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_671_000 picoseconds. - Weight::from_parts(3_779_000, 0) - } - pub(crate) fn clear_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_894_000 picoseconds. - Weight::from_parts(2_989_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 59_230_000 picoseconds. - Weight::from_parts(60_371_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::AssetTraps` (r:1 w:1) - /// Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn claim_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `126` - // Estimated: `3591` - // Minimum execution time: 17_200_000 picoseconds. - Weight::from_parts(17_745_000, 3591) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - pub(crate) fn trap() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_880_000 picoseconds. - Weight::from_parts(3_020_000, 0) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn subscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `75` - // Estimated: `3540` - // Minimum execution time: 29_747_000 picoseconds. - Weight::from_parts(30_337_000, 3540) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `PolkadotXcm::VersionNotifyTargets` (r:0 w:1) - /// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`) - pub(crate) fn unsubscribe_version() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_659_000 picoseconds. - Weight::from_parts(5_843_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - pub(crate) fn burn_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_334_000 picoseconds. - Weight::from_parts(4_461_000, 0) - } - pub(crate) fn expect_asset() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_118_000 picoseconds. - Weight::from_parts(3_203_000, 0) - } - pub(crate) fn expect_origin() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_983_000 picoseconds. - Weight::from_parts(3_125_000, 0) - } - pub(crate) fn expect_error() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_969_000 picoseconds. - Weight::from_parts(3_033_000, 0) - } - pub(crate) fn expect_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 3_231_000 picoseconds. - Weight::from_parts(3_355_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn query_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 66_266_000 picoseconds. - Weight::from_parts(66_995_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn expect_pallet() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_645_000 picoseconds. - Weight::from_parts(7_851_000, 0) - } - /// Storage: `ParachainSystem::UpwardDeliveryFeeFactor` (r:1 w:0) - /// Proof: `ParachainSystem::UpwardDeliveryFeeFactor` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::VersionDiscoveryQueue` (r:1 w:1) - /// Proof: `PolkadotXcm::VersionDiscoveryQueue` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `PolkadotXcm::SafeXcmVersion` (r:1 w:0) - /// Proof: `PolkadotXcm::SafeXcmVersion` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingUpwardMessages` (r:1 w:1) - /// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - pub(crate) fn report_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `176` - // Estimated: `3641` - // Minimum execution time: 59_386_000 picoseconds. - Weight::from_parts(60_484_000, 3641) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - pub(crate) fn clear_transact_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_986_000 picoseconds. - Weight::from_parts(3_089_000, 0) - } - pub(crate) fn set_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_940_000 picoseconds. - Weight::from_parts(3_064_000, 0) - } - pub(crate) fn clear_topic() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_920_000 picoseconds. - Weight::from_parts(3_006_000, 0) - } - pub(crate) fn set_fees_mode() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_926_000 picoseconds. - Weight::from_parts(3_021_000, 0) - } - pub(crate) fn unpaid_execution() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_969_000 picoseconds. - Weight::from_parts(3_114_000, 0) - } -} \ No newline at end of file diff --git a/container-chains/runtime-templates/simple/src/xcm_config.rs b/container-chains/runtime-templates/simple/src/xcm_config.rs deleted file mode 100644 index 909801e..0000000 --- a/container-chains/runtime-templates/simple/src/xcm_config.rs +++ /dev/null @@ -1,425 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::{ - currency::MICROUNIT, weights, weights::xcm::XcmWeight as XcmGenericWeights, AccountId, - AllPalletsWithSystem, AssetRate, Balance, Balances, ForeignAssetsCreator, MaintenanceMode, - MessageQueue, ParachainInfo, ParachainSystem, PolkadotXcm, Runtime, RuntimeBlockWeights, - RuntimeCall, RuntimeEvent, RuntimeOrigin, TransactionByteFee, WeightToFee, XcmpQueue, - }, - cumulus_primitives_core::{AggregateMessageOrigin, ParaId}, - frame_support::{ - parameter_types, - traits::{Everything, Nothing, PalletInfoAccess, TransformOrigin}, - weights::Weight, - }, - frame_system::EnsureRoot, - pallet_xcm::XcmPassthrough, - pallet_xcm_executor_utils::{ - filters::{IsReserveFilter, IsTeleportFilter}, - DefaultTrustPolicy, - }, - parachains_common::message_queue::{NarrowOriginToSibling, ParaIdToSibling}, - polkadot_runtime_common::xcm_sender::ExponentialPrice, - sp_core::ConstU32, - sp_runtime::Perbill, - staging_xcm::latest::prelude::*, - staging_xcm_builder::{ - AccountId32Aliases, AllowKnownQueryResponses, AllowSubscriptionsFrom, - AllowTopLevelPaidExecutionFrom, ConvertedConcreteId, EnsureXcmOrigin, FungibleAdapter, - IsConcrete, ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, - SiblingParachainConvertsVia, SignedAccountId32AsNative, SignedToAccountId32, - SovereignSignedViaLocation, TakeWeightCredit, UsingComponents, WeightInfoBounds, - WithComputedOrigin, - }, - staging_xcm_executor::XcmExecutor, -}; - -parameter_types! { - // Self Reserve location, defines the multilocation identifying the self-reserve currency - // This is used to match it also against our Balances pallet when we receive such - // a MultiLocation: (Self Balances pallet index) - // We use the RELATIVE multilocation - pub SelfReserve: MultiLocation = MultiLocation { - parents:0, - interior: Junctions::X1( - PalletInstance(::index() as u8) - ) - }; - - // One XCM operation is 1_000_000_000 weight - almost certainly a conservative estimate. - pub UnitWeightCost: Weight = Weight::from_parts(1_000_000_000, 64 * 1024); - - // TODO: revisit - pub const RelayNetwork: NetworkId = NetworkId::Westend; - - // The relay chain Origin type - pub RelayChainOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into(); - - pub const MaxAssetsIntoHolding: u32 = 64; - - /// Maximum number of instructions in a single XCM fragment. A sanity check against - /// weight caculations getting too crazy. - pub MaxInstructions: u32 = 100; - - // The universal location within the global consensus system - pub UniversalLocation: InteriorMultiLocation = - X2(GlobalConsensus(RelayNetwork::get()), Parachain(ParachainInfo::parachain_id().into())); - - pub const BaseDeliveryFee: u128 = 100 * MICROUNIT; -} - -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - pub ReachableDest: Option = Some(Parent.into()); -} - -pub type XcmBarrier = ( - // Weight that is paid for may be consumed. - TakeWeightCredit, - // Expected responses are OK. - AllowKnownQueryResponses, - WithComputedOrigin< - ( - // If the message is one that immediately attemps to pay for execution, then allow it. - AllowTopLevelPaidExecutionFrom, - // Subscriptions for version tracking are OK. - AllowSubscriptionsFrom, - ), - UniversalLocation, - ConstU32<8>, - >, -); - -/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used -/// when determining ownership of accounts for asset transacting and when attempting to use XCM -/// `Transact` in order to determine the dispatch Origin. -pub type LocationToAccountId = ( - // The parent (Relay-chain) origin converts to the default `AccountId`. - ParentIsPreset, - // Sibling parachain origins convert to AccountId via the `ParaId::into`. - SiblingParachainConvertsVia, - // If we receive a MultiLocation of type AccountKey20, just generate a native account - AccountId32Aliases, - // Generate remote accounts according to polkadot standards - staging_xcm_builder::HashedDescription< - AccountId, - staging_xcm_builder::DescribeFamily, - >, -); - -/// Local origins on this chain are allowed to dispatch XCM sends/executions. -pub type LocalOriginToLocation = SignedToAccountId32; - -/// Means for transacting the native currency on this chain. -pub type CurrencyTransactor = FungibleAdapter< - // Use this currency: - Balances, - // Use this currency when it is a fungible asset matching the given location or name: - IsConcrete, - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We don't track any teleports of `Balances`. - (), ->; - -/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance, -/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can -/// biases the kind of local `Origin` it will become. -pub type XcmOriginToTransactDispatchOrigin = ( - // Sovereign account converter; this attempts to derive an `AccountId` from the origin location - // using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for - // foreign chains who want to have a local sovereign account on this chain which they control. - SovereignSignedViaLocation, - // Native converter for Relay-chain (Parent) location; will convert to a `Relay` origin when - // recognised. - RelayChainAsNative, - // Native converter for sibling Parachains; will convert to a `SiblingPara` origin when - // recognised. - SiblingParachainAsNative, - // Native signed account converter; this just converts an `AccountId32` origin into a normal - // `RuntimeOrigin::Signed` origin of the same 32-byte value. - SignedAccountId32AsNative, - // Xcm origins can be represented natively under the Xcm pallet's Xcm origin. - XcmPassthrough, -); - -/// Means for transacting assets on this chain. -pub type AssetTransactors = (CurrencyTransactor, ForeignFungiblesTransactor); -pub type XcmWeigher = - WeightInfoBounds, RuntimeCall, MaxInstructions>; -/// The means for routing XCM messages which are not for local execution into the right message -/// queues. -pub type XcmRouter = ( - // Two routers - use UMP to communicate with the relay chain: - cumulus_primitives_utility::ParentAsUmp, - // ..and XCMP to communicate with the sibling chains. - XcmpQueue, -); - -pub struct XcmConfig; -impl staging_xcm_executor::Config for XcmConfig { - type RuntimeCall = RuntimeCall; - type XcmSender = XcmRouter; - type AssetTransactor = AssetTransactors; - type OriginConverter = XcmOriginToTransactDispatchOrigin; - type IsReserve = IsReserveFilter; - type IsTeleporter = IsTeleportFilter; - type UniversalLocation = UniversalLocation; - type Barrier = XcmBarrier; - type Weigher = XcmWeigher; - type Trader = ( - UsingComponents, - cumulus_primitives_utility::TakeFirstAssetTrader< - AccountId, - AssetRateAsMultiplier, - // Use this currency when it is a fungible asset matching the given location or name: - (ConvertedConcreteId,), - ForeignAssets, - (), - >, - ); - type ResponseHandler = PolkadotXcm; - type AssetTrap = PolkadotXcm; - type AssetClaims = PolkadotXcm; - type SubscriptionService = PolkadotXcm; - type PalletInstancesInfo = AllPalletsWithSystem; - type MaxAssetsIntoHolding = MaxAssetsIntoHolding; - type AssetLocker = (); - type AssetExchanger = (); - type FeeManager = (); - type MessageExporter = (); - type UniversalAliases = Nothing; - type CallDispatcher = RuntimeCall; - type SafeCallFilter = Everything; - type Aliasers = Nothing; -} - -impl pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type SendXcmOrigin = EnsureXcmOrigin; - type XcmRouter = XcmRouter; - type ExecuteXcmOrigin = EnsureXcmOrigin; - type XcmExecuteFilter = Everything; - type XcmExecutor = XcmExecutor; - type XcmTeleportFilter = Nothing; - type XcmReserveTransferFilter = Everything; - type Weigher = XcmWeigher; - type UniversalLocation = UniversalLocation; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100; - type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion; - type Currency = Balances; - type CurrencyMatcher = (); - type TrustedLockers = (); - type SovereignAccountOf = LocationToAccountId; - type MaxLockers = ConstU32<8>; - type MaxRemoteLockConsumers = ConstU32<0>; - type RemoteLockConsumerIdentifier = (); - // TODO pallet-xcm weights - type WeightInfo = weights::pallet_xcm::SubstrateWeight; - type AdminOrigin = EnsureRoot; -} - -pub type PriceForSiblingParachainDelivery = - ExponentialPrice; - -pub type PriceForParentDelivery = - ExponentialPrice; - -impl cumulus_pallet_xcmp_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ChannelInfo = ParachainSystem; - type VersionWrapper = PolkadotXcm; - type ControllerOrigin = EnsureRoot; - type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin; - type WeightInfo = weights::cumulus_pallet_xcmp_queue::SubstrateWeight; - type PriceForSiblingDelivery = PriceForSiblingParachainDelivery; - // Enqueue XCMP messages from siblings for later processing. - type XcmpQueue = TransformOrigin; - type MaxInboundSuspended = sp_core::ConstU32<1_000>; -} - -impl cumulus_pallet_xcm::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type XcmExecutor = XcmExecutor; -} - -parameter_types! { - pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent; -} - -impl cumulus_pallet_dmp_queue::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_dmp_queue::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type DmpSink = frame_support::traits::EnqueueWithOrigin; -} - -parameter_types! { - pub MessageQueueServiceWeight: Weight = Perbill::from_percent(25) * RuntimeBlockWeights::get().max_block; -} - -impl pallet_message_queue::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_message_queue::SubstrateWeight; - #[cfg(feature = "runtime-benchmarks")] - type MessageProcessor = pallet_message_queue::mock_helpers::NoopMessageProcessor< - cumulus_primitives_core::AggregateMessageOrigin, - >; - #[cfg(not(feature = "runtime-benchmarks"))] - type MessageProcessor = staging_xcm_builder::ProcessXcmMessage< - AggregateMessageOrigin, - XcmExecutor, - RuntimeCall, - >; - type Size = u32; - // The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin: - type QueueChangeHandler = NarrowOriginToSibling; - // NarrowOriginToSibling calls XcmpQueue's is_pause if Origin is sibling. Allows all other origins - type QueuePausedQuery = (MaintenanceMode, NarrowOriginToSibling); - // TODO verify values - type HeapSize = sp_core::ConstU32<{ 64 * 1024 }>; - type MaxStale = sp_core::ConstU32<8>; - type ServiceWeight = MessageQueueServiceWeight; -} - -parameter_types! { - // we just reuse the same deposits - pub const ForeignAssetsAssetDeposit: Balance = 0; - pub const ForeignAssetsAssetAccountDeposit: Balance = 0; - pub const ForeignAssetsApprovalDeposit: Balance = 0; - pub const ForeignAssetsAssetsStringLimit: u32 = 50; - pub const ForeignAssetsMetadataDepositBase: Balance = 0; - pub const ForeignAssetsMetadataDepositPerByte: Balance = 0; - pub CheckingAccount: AccountId = PolkadotXcm::check_account(); -} - -#[cfg(feature = "runtime-benchmarks")] -/// Simple conversion of `u32` into an `AssetId` for use in benchmarking. -pub struct ForeignAssetBenchmarkHelper; -#[cfg(feature = "runtime-benchmarks")] -impl pallet_assets::BenchmarkHelper for ForeignAssetBenchmarkHelper { - fn create_asset_id_parameter(id: u32) -> AssetId { - id.try_into() - .expect("number too large to create benchmarks") - } -} -#[cfg(feature = "runtime-benchmarks")] -impl pallet_asset_rate::AssetKindFactory for ForeignAssetBenchmarkHelper { - fn create_asset_kind(id: u32) -> AssetId { - id.try_into() - .expect("number too large to create benchmarks") - } -} - -pub type AssetId = u16; -pub type ForeignAssetsInstance = pallet_assets::Instance1; -impl pallet_assets::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Balance = Balance; - type AssetId = AssetId; - type AssetIdParameter = AssetId; - type Currency = Balances; - type CreateOrigin = frame_support::traits::NeverEnsureOrigin; - type ForceOrigin = EnsureRoot; - type AssetDeposit = ForeignAssetsAssetDeposit; - type MetadataDepositBase = ForeignAssetsMetadataDepositBase; - type MetadataDepositPerByte = ForeignAssetsMetadataDepositPerByte; - type ApprovalDeposit = ForeignAssetsApprovalDeposit; - type StringLimit = ForeignAssetsAssetsStringLimit; - type Freezer = (); - type Extra = (); - type WeightInfo = weights::pallet_assets::SubstrateWeight; - type CallbackHandle = (); - type AssetAccountDeposit = ForeignAssetsAssetAccountDeposit; - type RemoveItemsLimit = frame_support::traits::ConstU32<1000>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = ForeignAssetBenchmarkHelper; -} - -impl pallet_foreign_asset_creator::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ForeignAsset = MultiLocation; - type ForeignAssetCreatorOrigin = EnsureRoot; - type ForeignAssetModifierOrigin = EnsureRoot; - type ForeignAssetDestroyerOrigin = EnsureRoot; - type Fungibles = ForeignAssets; - type WeightInfo = weights::pallet_foreign_asset_creator::SubstrateWeight; - type OnForeignAssetCreated = (); - type OnForeignAssetDestroyed = (); -} - -impl pallet_asset_rate::Config for Runtime { - type CreateOrigin = EnsureRoot; - type RemoveOrigin = EnsureRoot; - type UpdateOrigin = EnsureRoot; - type Currency = Balances; - type AssetKind = AssetId; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_asset_rate::SubstrateWeight; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = ForeignAssetBenchmarkHelper; -} - -use { - crate::ForeignAssets, - staging_xcm_builder::{FungiblesAdapter, NoChecking}, - staging_xcm_executor::traits::JustTry, -}; - -/// Means for transacting foreign assets from different global consensus. -pub type ForeignFungiblesTransactor = FungiblesAdapter< - // Use this fungibles implementation: - ForeignAssets, - // Use this currency when it is a fungible asset matching the given location or name: - (ConvertedConcreteId,), - // Convert an XCM MultiLocation into a local account id: - LocationToAccountId, - // Our chain's account ID type (we can't get away without mentioning it explicitly): - AccountId, - // We dont need to check teleports here. - NoChecking, - // The account to use for tracking teleports. - CheckingAccount, ->; - -/// Multiplier used for dedicated `TakeFirstAssetTrader` with `ForeignAssets` instance. -pub type AssetRateAsMultiplier = - parachains_common::xcm_config::AssetFeeAsExistentialDepositMultiplier< - Runtime, - WeightToFee, - AssetRate, - ForeignAssetsInstance, - >; - -parameter_types! { - pub const TrustPolicyMaxAssets: u32 = 1000; - pub const AllNativeTrustPolicy: DefaultTrustPolicy = DefaultTrustPolicy::AllNative; - pub const AllNeverTrustPolicy: DefaultTrustPolicy = DefaultTrustPolicy::Never; -} -impl pallet_xcm_executor_utils::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type TrustPolicyMaxAssets = TrustPolicyMaxAssets; - type ReserveDefaultTrustPolicy = AllNativeTrustPolicy; - type SetReserveTrustOrigin = EnsureRoot; - type TeleportDefaultTrustPolicy = AllNeverTrustPolicy; - type SetTeleportTrustOrigin = EnsureRoot; - type WeightInfo = weights::pallet_xcm_executor_utils::SubstrateWeight; -} diff --git a/custom-pallets/department-funding/src/mock.rs b/custom-pallets/department-funding/src/mock.rs index 596663b..ef74a16 100644 --- a/custom-pallets/department-funding/src/mock.rs +++ b/custom-pallets/department-funding/src/mock.rs @@ -76,7 +76,6 @@ impl pallet_template::Config for Test { } impl pallet_balances::Config for Test { - type MaxHolds = (); type MaxLocks = (); type MaxReserves = (); type ReserveIdentifier = [u8; 8]; diff --git a/custom-pallets/positive-externality/src/mock.rs b/custom-pallets/positive-externality/src/mock.rs index a9e342a..067bba4 100644 --- a/custom-pallets/positive-externality/src/mock.rs +++ b/custom-pallets/positive-externality/src/mock.rs @@ -69,7 +69,6 @@ impl pallet_timestamp::Config for Test { } impl pallet_balances::Config for Test { - type MaxHolds = (); type MaxLocks = (); type MaxReserves = (); type ReserveIdentifier = [u8; 8]; diff --git a/custom-pallets/profile-validation/src/mock.rs b/custom-pallets/profile-validation/src/mock.rs index c97f20d..97ba4c2 100644 --- a/custom-pallets/profile-validation/src/mock.rs +++ b/custom-pallets/profile-validation/src/mock.rs @@ -64,7 +64,6 @@ impl pallet_timestamp::Config for Test { } impl pallet_balances::Config for Test { - type MaxHolds = (); type MaxLocks = (); type MaxReserves = (); type ReserveIdentifier = [u8; 8]; diff --git a/custom-pallets/project-tips/src/mock.rs b/custom-pallets/project-tips/src/mock.rs index a1b452a..df1663e 100644 --- a/custom-pallets/project-tips/src/mock.rs +++ b/custom-pallets/project-tips/src/mock.rs @@ -78,7 +78,6 @@ impl pallet_template::Config for Test { } impl pallet_balances::Config for Test { - type MaxHolds = (); type MaxLocks = (); type MaxReserves = (); type ReserveIdentifier = [u8; 8]; diff --git a/custom-pallets/schelling-game-shared/src/mock.rs b/custom-pallets/schelling-game-shared/src/mock.rs index 70cb60c..4bd264b 100644 --- a/custom-pallets/schelling-game-shared/src/mock.rs +++ b/custom-pallets/schelling-game-shared/src/mock.rs @@ -67,7 +67,6 @@ impl pallet_sortition_sum_game::Config for Test { } impl pallet_balances::Config for Test { - type MaxHolds = (); type MaxLocks = (); type MaxReserves = (); type ReserveIdentifier = [u8; 8]; diff --git a/docker/container-chain-evm-template.Dockerfile b/docker/container-chain-evm-template.Dockerfile deleted file mode 100644 index 8107000..0000000 --- a/docker/container-chain-evm-template.Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# Node for Container-chain-evm-template -# -# Requires to run from repository root and to copy the binary in the build folder (part of the release workflow) - -FROM docker.io/library/ubuntu:20.04 AS builder - -RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates - -FROM debian:bookworm-slim -LABEL maintainer "gorka@moondancelabs.com" -LABEL description="Binary for container-chain-template-evm Collator" - -RUN useradd -m -u 1000 -U -s /bin/sh -d /container-chain-template-evm container-chain-template-evm && \ - mkdir -p /container-chain-template-evm/.local/share && \ - mkdir /data && \ - chown -R container-chain-template-evm:container-chain-template-evm /data && \ - ln -s /data /container-chain-template-evm/.local/share/container-chain-template-evm && \ - rm -rf /usr/sbin - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -USER container-chain-template-evm - -COPY --chown=container-chain-template-evm build/container-chain-frontier-node* /container-chain-template-evm -RUN chmod uog+x /container-chain-template-evm/container-chain-frontier* - -# 30333 for parachain p2p -# 30334 for relaychain p2p -# 9933 for RPC call -# 9944 for Websocket -# 9615 for Prometheus (metrics) -EXPOSE 30333 30334 9933 9944 9615 - -VOLUME ["/data"] - -ENTRYPOINT ["/container-chain-template-evm/container-chain-frontier-node"] \ No newline at end of file diff --git a/docker/container-chain-simple-template.Dockerfile b/docker/container-chain-simple-template.Dockerfile deleted file mode 100644 index 64f55da..0000000 --- a/docker/container-chain-simple-template.Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# Node for Container-chain-simple-template -# -# Requires to run from repository root and to copy the binary in the build folder (part of the release workflow) - -FROM docker.io/library/ubuntu:20.04 AS builder - -RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates - -FROM debian:bookworm-slim -LABEL maintainer "gorka@moondancelabs.com" -LABEL description="Binary for simple container chain template node" - -RUN useradd -m -u 1000 -U -s /bin/sh -d /container-chain-template-simple container-chain-template-simple && \ - mkdir -p /container-chain-template-simple/.local/share && \ - mkdir /data && \ - chown -R container-chain-template-simple:container-chain-template-simple /data && \ - ln -s /data /container-chain-template-simple/.local/share/container-chain-template-simple && \ - rm -rf /usr/sbin - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -USER container-chain-template-simple - -COPY --chown=container-chain-template-simple build/container-chain-simple-node* /container-chain-template-simple -RUN chmod uog+x /container-chain-template-simple/container-chain-simple* - -# 30333 for parachain p2p -# 30334 for relaychain p2p -# 9933 for RPC call -# 9944 for Websocket -# 9615 for Prometheus (metrics) -EXPOSE 30333 30334 9933 9944 9615 - -VOLUME ["/data"] - -ENTRYPOINT ["/container-chain-template-simple/container-chain-simple-node"] \ No newline at end of file diff --git a/docker/tanssi-srtool.Dockerfile b/docker/tanssi-srtool.Dockerfile deleted file mode 100644 index ef607e2..0000000 --- a/docker/tanssi-srtool.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -ARG SRTOOL_IMAGE_TAG -ARG SRTOOL_IMAGE_REPO - -FROM ${SRTOOL_IMAGE_REPO}:${SRTOOL_IMAGE_TAG} - -USER root - -RUN apt-get update && \ - apt-get install openssh-server -y - -USER 1001 \ No newline at end of file diff --git a/docker/tanssi.Dockerfile b/docker/tanssi.Dockerfile deleted file mode 100644 index cbdba58..0000000 --- a/docker/tanssi.Dockerfile +++ /dev/null @@ -1,40 +0,0 @@ -# Node for Tanssi -# -# Requires to run from repository root and to copy the binary in the build folder (part of the release workflow) - -FROM docker.io/library/ubuntu:20.04 AS builder - -RUN apt-get update && apt-get install -y ca-certificates lsof && update-ca-certificates - -FROM debian:bookworm-slim -LABEL maintainer "gorka@moondancelabs.com" -LABEL description="Binary for Tanssi Collator" - -RUN useradd -m -u 1000 -U -s /bin/sh -d /tanssi tanssi && \ - mkdir -p /tanssi/.local/share && \ - mkdir /data && \ - chown -R tanssi:tanssi /data && \ - ln -s /data /tanssi/.local/share/tanssi && \ - rm -rf /usr/sbin - -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt - -USER tanssi - -COPY --chown=tanssi build/tanssi-node* /tanssi -RUN chmod uog+x /tanssi/tanssi* - -# 30333 for parachain p2p -# 30334 for relaychain p2p -# 30335 for container p2p -# 9933 for RPC call -# 9944 for Websocket -# 9615 for Prometheus (metrics) -# 9935 for RPC call container (if we want to expose this) -# 9946 for Websocket container (if we want to expose this) -# 9617 for Prometheus container (metrics) -EXPOSE 30333 30334 30335 9933 9944 9615 9935 9946 9617 - -VOLUME ["/data"] - -ENTRYPOINT ["/tanssi/tanssi-node"] diff --git a/docs/benchmarking.md b/docs/benchmarking.md deleted file mode 100644 index a6eb026..0000000 --- a/docs/benchmarking.md +++ /dev/null @@ -1,147 +0,0 @@ -# Benchmarking -This guide explains how to use the benchmarking tool under `tools/benchmarking.sh` for better developer experience - -## Benchmarking pallets vs benchmarking runtimes -Let's first explain the difference between benchmarking a pallet and benchmarking a runtime. When we benchmark a pallet, a public `trait WeightInfo` is created. The pallet is going to ask for an implementation of this trait in the associated `Config` type. Obviously when we benchmark a pallet this trait is by default implemented for the empty tuple and generic `substrateWeight` struct. Here is an example: - -``` -/// Weight functions needed for pallet_data_preservers. -pub trait WeightInfo { - fn set_boot_nodes(x: u32, y: u32, ) -> Weight; -} - -/// Weights for pallet_data_preservers using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 10_703_000 picoseconds. - Weight::from_parts(9_788_229, 3660) - // Standard Error: 170 - .saturating_add(Weight::from_parts(7_964, 0).saturating_mul(x.into())) - // Standard Error: 3_552 - .saturating_add(Weight::from_parts(334_296, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 10_703_000 picoseconds. - Weight::from_parts(9_788_229, 3660) - // Standard Error: 170 - .saturating_add(Weight::from_parts(7_964, 0).saturating_mul(x.into())) - // Standard Error: 3_552 - .saturating_add(Weight::from_parts(334_296, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} -``` - -When we benchmark a runtime, we generate structs that implement the `WeightInfo` trait from all the pallets. This means that we don't create a new trait specific for a runtime: - -``` -/// Weights for pallet_data_preservers using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_data_preservers::WeightInfo for SubstrateWeight { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 15_901_000 picoseconds. - Weight::from_parts(13_983_853, 3660) - // Standard Error: 154 - .saturating_add(Weight::from_parts(12_442, 0).saturating_mul(x.into())) - // Standard Error: 3_215 - .saturating_add(Weight::from_parts(452_262, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} -``` -The two files generated are quite different, hence the reason for us having two different templates to do benchmarking, which can be found at `benchmarking/frame-weight-runtime-template.hbs` and `benchmarking/frame-weight-template.hbs`. - -## Using the benchmarking tool - -The first thing we need to do is compile all runtime with `runtime-benchmarks` and `fast-runtime` features: - -``` -cargo build --features=fast-runtime,runtime-benchmarks --release -``` - -This will get the binaries ready for benchmarking purposes. - -The next step is to to use the `tools/benchmarking.sh` script. There are four environmental variables you can set before using this tool: - -- `BINARY`: The binary you want to use for benchmarking. If not specified, by default uses `target/release/tanssi-node` -- `CHAIN`: The chain that you want to use. By default it uses `dev` -- `OUTPUT_PATH`: The output path for the generated benchmarks. By default it uses `tmp` -- `TEMPLATE_PATH`: The template to use to generate the benchmarking file. By default it uses the pallet one, i.e., `benchmarking/frame-weight-pallet-template`. - -Additional, the script is going to ask for two arguments: -- the pallet that you want to benchmark. If you want to benchmark all pallets, you need to pass `"*"`. Otherwise, you pase under quotes the pallet to be benchmarked, e.g., `"pallet_pooled_staking"`. -- the extrinsic that you want to benchmark. If you want to benchmark all extrinsics, you pass `"*"`. Otherwise you pass under quotes the extrinsic to be benchmarked, e.g., `"request_delegate"` - -## Useful examples - -### Benchmarking all pallets for the dancebox runtime - -``` -TEMPLATE_PATH=benchmarking/frame-weight-runtime-template.hbs OUTPUT_PATH=runtime/dancebox/src/weights ./tools/benchmarking.sh "*" "*" -``` - -### Benchmarking all pallets for the flashbox runtime - -``` -TEMPLATE_PATH=benchmarking/frame-weight-runtime-template.hbs OUTPUT_PATH=runtime/flashbox/src/weights CHAIN=flashbox_dev ./tools/benchmarking.sh "*" "*" -``` - -### Benchmarking all pallets for the container-chain-frontier-runtime - -``` -BINARY=target/release/container-chain-frontier-node TEMPLATE_PATH=benchmarking/frame-weight-runtime-template.hbs OUTPUT_PATH=container-chains/templates/frontier/runtime/src/weights ./tools/benchmarking.sh "*" "*" -``` - -### Benchmarking all pallets for the container-chain-simple-runtime - -``` -BINARY=target/release/container-chain-simple-node TEMPLATE_PATH=benchmarking/frame-weight-runtime-template.hbs OUTPUT_PATH=container-chains/templates/simple/runtime/src/weights ./tools/benchmarking.sh "*" "*" -``` - -### Generating weight info trait bound for pallet-pooled-staking - -``` -TEMPLATE_PATH=benchmarking/frame-weight-pallet-template.hbs OUTPUT_PATH=pallets/pooled-staking/src/weights.rs ./tools/benchmarking.sh "pallet_pooled_staking" "*" -``` - -### Generating weight info trait bound for pallet-cc-authorities-noting - -``` -BINARY=target/release/container-chain-simple-node TEMPLATE_PATH=benchmarking/frame-weight-pallet-template.hbs OUTPUT_PATH=../dancekit/container-chain-pallets/authorities-noting/src/weights.rs ./tools/benchmarking.sh "pallet_cc_authorities_noting" "*" -``` diff --git a/docs/clippy.md b/docs/clippy.md deleted file mode 100644 index 11154db..0000000 --- a/docs/clippy.md +++ /dev/null @@ -1,28 +0,0 @@ -Some useful clippy lints, can be added to root `Cargo.toml` for better developer experience - -```toml -# Some lints that can be useful but should not be enabled in CI -# because of false positives and noise in tests -as_conversions = { level = "warn", priority = 1 } -cast_possible_truncation = { level = "warn", priority = 1 } -cognitive_complexity = { level = "warn", priority = 1 } -derive_partial_eq_without_eq = { level = "warn", priority = 1 } -else_if_without_else = { level = "warn", priority = 1 } -future_not_send = { level = "warn", priority = 1 } -redundant_clone = { level = "warn", priority = 1 } -unused_async = { level = "warn", priority = 1 } - -# Restrictions, useful to find places where code can panic -arithmetic_side_effects = { level = "warn", priority = 1 } -expect_used = { level = "warn", priority = 1 } -float_arithmetic = { level = "warn", priority = 1 } -indexing_slicing = { level = "warn", priority = 1 } -missing_panics_doc = { level = "warn", priority = 1 } -todo = { level = "warn", priority = 1 } -unwrap_used = { level = "warn", priority = 1 } - -# Find leftovers from debugging -dbg_macro = { level = "warn", priority = 1 } -print_stderr = { level = "warn", priority = 1 } -print_stdout = { level = "warn", priority = 1 } -``` diff --git a/docs/keep_db_flowchart.dot b/docs/keep_db_flowchart.dot deleted file mode 100644 index 76c8575..0000000 --- a/docs/keep_db_flowchart.dot +++ /dev/null @@ -1,52 +0,0 @@ -digraph G { - dpi=300; - rankdir=TB; - - node [style=filled, fillcolor="#add8e6"]; - - A [label="Is a collator?", shape=diamond]; - B1 [label="Start partial node to check contents of db", shape=box]; - B2 [label="Has --keep-db flag?", shape=diamond]; - C [label="Check difference between highest block\nin the db and the block according the\norchestrator author-noting pallet. Is it\ngreater than 100 blocks?", shape=diamond]; - D [label="Compare the genesis hash from\norchestrator registrar pallet and the\ngenesis hash according to the local db.\nDoes it match?", shape=diamond]; - E [label="Stop partial node and wait 10 seconds for all the services to stop", shape=box]; - F [label="Full nodes never delete the db", shape=box, fillcolor="#98FB98"]; - G [label="We want to use warp sync instead of downloading\nmore than 100 blocks, and warp sync only works\nif the db is empty, so delete db", shape=box, fillcolor="#FFB6C1"]; - H [label="A genesis mismatch means that a\ncontainer chain which we have in the db\nwas deregistered, and a different\ncontainer chain was registered under the\nsame para id. In that case the node will\nnever be able to sync using the existing\ndb, so we delete it", shape=box, fillcolor="#FFB6C1"]; - I [label="Keep db", shape=box, fillcolor="#98FB98"]; - J [label="Start container chain node", shape=box]; - J2 [label="Stop container chain node", shape=box]; - K [label="Node crashed (panic)", shape=box]; - L [label="Node manually stopped\n(ctrl-c or kill without -9)", shape=box]; - L2 [label="Node killed using kill -9", shape=box]; - M [label="Collator unassigned from container chain", shape=box]; - N [label="Has --keep-db flag or is a full node?\n(only collators delete the db)", shape=diamond]; - O [label="Keep db", shape=box, fillcolor="#98FB98"]; - P [label="Delete db", shape=box, fillcolor="#FFB6C1"]; - - A -> B1 [label=Yes]; - A -> F [label=No]; - B1 -> B2; - B2 -> D [label=Yes]; - B2 -> C [label=No]; - C -> G [label=Yes]; - C -> D [label=No]; - D -> H [label=No]; - D -> I [label=Yes]; - I -> E; - G -> E; - H -> E; - E -> J; - F -> J; - J -> J2; - J2 -> K; - J2 -> L; - J2 -> L2; - J2 -> M; - M -> N; - N -> O [label=Yes]; - N -> P [label=No]; - K -> O; - L -> O; - L2 -> O; -} diff --git a/docs/keep_db_flowchart.png b/docs/keep_db_flowchart.png deleted file mode 100644 index 56f0efcca3c739692e50d07e6d5e4132e0654cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906350 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%0D^G_MA?6)X3%S3S4I<4;E#~})d4t^8X6k9 zvtE#FOy!f-%UCh1P`i@mV^I@hVyRfZux)_C%ZgVjR$z!r9x@-A@vumS(dlCF|-wP}4y)X1T{03^i$ zco^uxz&c;)C@2Gpii$LowU>vZ{DI!}x7qYw?|-+nFf_wS+=^&Sl+Q!TJmdg?b$Ih) zmmtz2wm<6y^*u7j7q#3UgiI9g^GEqfostpepsY;=5trQth<{7ZV|5xa6loLz zl}2e06akeQC8bqDS~`XMuKj}`=gc|xK6gL!IE=&p@3q(d;{Dz)7PQaHS{{%dDH7W5 z+jR}vMyIELKkD=wZC$EIumu|FsPX*aEZhj{&Q#Vwyag*ZT%ChBMMxN3jxz0CT^UA= z5<-dH@UXCj>s$P2-;((UwOf=z;&0|rA&Y@7G;qAfD>w5|FG?{128?4TaGV7R7LD-{xcweZ{G~? zfRpB@f9e5`vmLvPnvArRE`31LEHmv20q^1so-K)fK$K8#c#WA-MWQs z|E_|y?2gqrrQr(L^Kti#HLGtN!tqVPpFVxssSq{Reo^>$N73mOU1uxo#`~SUMV8U` zs=iJM&ZG}4F{b%IByC_6UX5(Et0WOUijJ-l;SMxdYa&p=)AfTEx^_Cc;U=L#M)l%Oz3H|NMK^`?nPmDwp{leyEjOAsV zQBoRyABH1GL4z2Yn-4uJ5*p1C9?JrAP|h`_vPY<0fi0Y6nC?_V%gC;%rjOiI8#{}j zUraay0WJb>qsilBGxHEra7L7um;WH{X*QC78MahyEL#meszFRxO&>Hmxy*Tq@#;t9 zgaO4S@oEfnXn(C_OO8TgxR2^?;fZ5A?vA`KLI!gL=+Ab%H*jhrFxpc!>o4jPU>Fd2 zsf`(ctU~Vfhkv7-i2Xqe@N0n+!+~n)midrzSazdK+SF$uKy;zrKC&+GC_P63)y?}iQmT940`MYo5 zzSWIa*};j9^3qSK!Bz@NV6}@65_njD0aO{}+ioPxE+sCmCpfU~8DlVi>AL(hIa+u(k~X!~8~qn@IkE{|oeDcRaxVea)6l*_v19k1!#+#4NV z8#p*(t!B55yN&F-?5fE_;OY3+QKx?|j6I@h@-heW2hLG4e5)3UhEoK}SKbk!Gg%4;@pe zt`GzSemhP+W|;rm;`IW3Rm!E4GUfP?+O3HQl~mKR2qoklZ?4)U&|dd2`}OPR+NC>C zu8e|ZNiU9-JLTzRj?$#Te(aqWXJD`Lv7f(%t@s51WMZx5PHt{vd>P5UY7F}FX!R)9 z9C2k9)Gmuyd)vG~V2HY+?3b@VHrJWQQ#;bC&BxU9S`2CI?qrl~+VM*Ss{8VgmUPChw- zBAaE%LN8yg9Iw5Ses0!sS`{o^(EO8=wIeIMTd`a9iUWC^8SH10NH!Z^GK#8%C8c5dOI~sCol)hE%T~XkBUrcW&NntB5^^V+zri z$;hj{;-3BFR%A~dhA!epz2G}bfz8h(=zfe)dWMOHILbEbPcL*(BCMyDzdY5n!)G-5 z@5zrpyh9d^%YKs_asP)BFK2u=#q&SYEbsy5hf6&9%?L&+)uinn>aRRKuY3?^b!6R0 z`@D!a^(p*^?0K@0_Fs+bGp~k7dKDrOgbmOsi`Z_y4|rtb#s`4=tIrtx0TIEmNamuG zkMD4M)&g#WQpBfOLA78R050cV=3xY73)oA--VL-XL9M@Sne?a5&ef%i^A$=?LrQOx#e!07Q5pRHI-Q!;bm?`BJ@NY7vKIJ6ms~5K@ebW)Vb6 zj+4#sJc2X;VFa+3nuUJJK+S)85iA8#3L1v$ARJD+_rL=DD!C+<{QM@_4g+W0g;uz^ z?Z!qxNmizTQA0k*@BV%B&gABMoN7YTpWgWMr=8QFl4J6TvFG2qBlor{MhV^85Qc3y z3~cMx(kF7Px<78rJ?o?Q0l84;UgX2u1^~!z-s`aZ*jG3Rq>ZtMP>FQ`=Cn1_z29Wk zpL6xsd7JLjc63AQW8$q|?byG66sQ*E9;65p0mJEUM%LEW_y%mBsHo@$hWRq0wC}Kg z?2&4D4(Yw6QnZ)KU_$A{rx?&k2pGB1iGsI@NMVkyeAJnJ8#ivm)cg;UoRP566+{o1 z!lCiTWl9%U#>hhOU@mxYUcr1X5m4r*(+;>=|uyTkMF7tS1* zHrQ;!w!&qW9NB^rAKn?A)`OsgLpdR$Ubs~NC?7{wQ~`tF&w0OGjoFH=+mMJQs=sz# zYBw=jw|PC;OtwuwzZNz=V9vt;{Fas@A3`L5uSGUMMq0W9Y!r6ZJdQ}5(!~IarUwU| zjAU|dtu+SQ(5z(D`XmftsNcPN@{jWX>WQDO_P}r))bau~bprZ+Z&RB%{pbzuDe?fe zw;@e_GA5N}qqH(O9+F5^diKc(4L`Dvhb9{r?qfxGzIAJ3gNMvwA#dcJ^ADV(qHIMcwsZjY*uZk zaT8lAqR~;4x)+nz{loNoe@}2Sa@fa7`!1Q z2P`=vUDftcesg7zLY74Mf9`TbGqP zwM!l^eWH$U6?yR6wU@KK*td!AWl7zye&@6XV3`w8#$T`;k27#)D3a zRgjwT+%9LdWUpT3mF$%Y`A9|;Z^HjQH0@g{m&BF`XYd4-^uBz0S=SfMiHL`Dr_4|Y z45LOKLC9;Qz&vETtc0J*6ZGTNDZ?A>gz4mRTHq)OpE3XsNN7;FV8pxJJ9ma77J-=( z>MxNi0%*C(k@6U8(l|!oPKe*nPT@lNNPnB1PPHOPo`30F^fS!CxtDY4*BDf4g*omb zXynt1)vNb{#{fWShujU0;nu`s!f?G>{w4G3uPDl3+Hcy95tThm9jIzWxdO2+jF;28 zGk;y;2Z0}iXTIR2f)k})c@Uo{kz6gjIeZejv#lVyEZby_nlSXn;sUJMr5<@a_z3Qr z{Mlt^Wr7}Kf-c!T32W;y;fdiQl=U_nYpgDgc(@tbQI zjsZ33&R&hSLQ}k6zixbia}pH5n)DfMlYS>S23i^}GD-dApVeyh+f9v|^2Md4p z8$b(?$~&CTieClB8ivi+!{CR?=UOnlZ%#{C@<`HrhOwRFc2^*96{ELXf%_LMSa4NjgCFr(Y=QycW{JJTwj?_N5u`K+ zSTS2PxGl5%3RZKpzs(C8#0{T6Xj~*{_W1^DlT<5>;y`#%4W97Y+(nj{0c7WEhd+T= z;idKAIV9Ma$s3p@zjve`$XFxmCqi34J#2E64KaN!{3$G3oNjfadb2zN4xSl;ng8mL*U@X_&(yR zA(=$Zp`)v;h*5Q3HH9!;*v*H)XKr{(paAOM!U8N?lbZwfYkhcB*HQBrpb)x^@{dH_ zk9%y#hR|iuQiCt3-wRu11Gvybzhu3@mBzaYkXx_p@g$w7WKFDg-(^I8sDvLEOJ~d& zE)E>;LlbXvtrC=Uy;=3~cB1baTqv)OpV;;gK{mKm0UL|4q^A>fEt-XcG-}Cc3^UchgeAE|OxEEIKKo*22?9rq17cQ*)a;+Ax18A=) z;MSVmp9#&>KF^m|htK?5eYJ<(*cTR1>Kr*lF&I>Sw*JogD31mG58!qA@1U1zpk{zk zn(G$Ky#`^CIne!@FsN|6=w=|eVT{nq&YN5h^c;nc=%H7LP$b71owa@kMK{j4ed9)Q zcMhZLw`UgaOwf$WcB9I%TVX@(F9G>_^rD?%|DWPm2QC`yb(V)!|Agv^w$ku&u%6JW zU*|1usJr3n%EGH%f|k<+fUi$kPUTT5`^N~`=zIjsRiJ>0HbSkQd{$|nKGg1nD>8S3 z>@D!y$358KXI%Jp;DZPTg?Fndh@w6#(E@U&y$rrUQRzgkuiVKY~2y@#G&<7 zC~s5-a*t9;Wev18%DuCG*sQfQd@r66ca5eAjkFKX0=r}65mbPKx5)(fjau!`NJb2Z zMOyU@aw^7bC|Z3LvC8iz2VvxlGYD{okG&&AGLnZj|BOiDg!Vi#~+4b16r)fWgD4|sry z5UnvlY{@b}R>`*c$2(WjeMC@%69Kf?S~6(Ct}i51oy!~&q+-!{*XxXtIOd4o|ALJ+ z&}Bpjx*y60KC_7#{NZ>?Ta;Bxh}WH_CL|;G7CnONaZK4bVLQGbzdv~`r2Lh{6YNz; zSeVRxu1}E1@nC=WuSHD!-`?$vCgC0bGkikU6pnMXs`-Oc;qu@+r8|e=yO%Fprk~t+ zZ&RIL^DFo#pzJW&y$y9mc9RqgZX@!NJdsGtvW1R_p1GjBL`vadGE$AJ4RiZjikn?_ zMv>}PKxAW4eBzzY@?-p;LcCO4vDbv3qcUg!c_4XG=bK#@eE_GhyNCjcZp8gw<%5K5g_S9I@jhg+gxXX-MqVhF7-m zbPB2#jUO)tsw5d`u&o%W@kjPS&8j0FxZDEg0=!}(b;qIQB!b8yL*Thno@fdR`Plu}Q{wf3#zIXoSqbYCc;0 zM(!t@lYK-0|MuJmD}y-Nk4Ni-re+gM$8)_Z({Cv6owp2X%t& z5+1aMc_t?xybsQGQ$x59op^zrtIk4=)%*c`alBQY zr~#X@y<`!^f^<#By5uAG2{2+aL|h8PiN)xaMSR@sdLRx%Q4e5HAlJr?8fYMfuKMyD zo&~(v>`rnKcU~9lt*g$kn>dh#G>R>p9!P=%Jyrsy?e{OnArT?E^<#|2!2ogC)rBTR zOKFz~rLvi^y720R947(`=TN7@-}1;KD!IuAnVJ-Fk8K(hY&krT&s}8Q_g>7xhw~nX zihxnWo6Q-Iux&*LdZjwyAgxb4UPJI9H*(pM5A>(*LPs~B+Bv3cq7P)zlnWFgv#-(9 ziP@6PuItDKhNDtaesD+dMa;-A(xk!*vMU`Zlny1eXhK2~V|E2zNv4=}G1HG%bvSvlzdB5NO!0Lmp-jKzir<7}@lVyp$OfnzMp_#1Zr#&TBu+O*;KVl0A&4PEx?g>;=t zQs{@5GTPTdCP>&lfM5fEk0DutAv)$fYJ|kKKS3e@Y<%g{Q#*SW5g9?!!nk%EVb=ET z+hMpk>o=1KbF0@GcjOPbwLZo*2D=KKZlF3q$sOrLlqh?@P!G_p{EV?Q_?^q?{bjq9 z6B_nKD#m`ktDriJ)HFL@;+wxV8X6idT|f-PCqu*yf}`!v4v(7``0%P(wt!mM(I~Zw zQ`P$Y;ng<11$#46CqVOq9*VyY*&1_YWV4R?ZPeG+`YHB3)k#E`x-h!>T>KR#<88d6l2tJ+8DevVcw1S zpk@Bv-h}kqBus29?PB|Kma@1HGvNjKA?gHIKm#*U|N84MF5n8N{#}qz`2-^d@tC*A z<`V3RVuy@NEW#6Gy><96M7p?5YvNlxL4Y~1c!2psdl{3K4{%1?k+R~fJov*1(t%=G zed`Lojja?ad!<~(3_$8Da>4m^smC$p4lDtAaDZ{3zVcLjP{bQ#uA^3QXek!|X7B6V zTu!wYV_kL=R#3tvsnv)Z!Qqdi=%kGN`sBqFQgIZX#r}jgLI}Ijsyf0Kz@#?`LkTkWsa1u57CP4=>^yUA`z+?$-ivI16}W0_zPX;#M^i8d>}c9 zo{{VHn&4SOuWJ6u5ke&cJeUIoVTITu6j7@NAG!VQ;O=x{o7KK=r9;hM~oW9Gs{R`2k}IA_dKv_DvK3XuKF?jN4{0 zP?>XnxjOqsuP8?Q!W(6%GAwikF#WJA(hppSD9D}As5bVJdXT9l_Pi#j^IoE;Nd zxRpL^6&S6PB(@v-7s%7m{?3lBbM zZ`4Rz-F!z;Ff}&cUd{tK?KSZn!6Ss)4g;}3yAKiMJL3wuN8ZmvWwsTTfP19Gf_5jR zi~c59X~?5TY$ODoarF?wU*tL5#NW@gikZ#puYytBGNA==MyW-k4GAo8#%2GC z2#3g%1eBx20$8yKkAr06e9|CCViQG zFaCR!3SY5+tC~PXLj**sC{5IHAuvPfuS*UXz)T<6G7SyL{S4X(Un-&%3!@Kj&Iwk& z=m5+MydSt%I0x}Vf6iLk4zjdEwIBijw|Vg^#KP{AIChMgTT=?0^}l_9kNUs|zx^y7?|z{^A$889SGwTr>8USUT##6+uXwwO7P00s9YJ zZd~;1RS^k^cYqX?;DhHMp0zM0vM>i3EKGWDO&{X>MsEV_;m+F-C>}cT^HyDu=lX!Z zVOvg!J;bvJ16gIdj^MX1=HHJ6p+mve>1Bxw5yug9o~#M620XeA(40}xPS`p4WdulS zpv{)L%zAi}ShvN%qOt6oH-8EB)hDG=J^5CBUw6a$BRCV=GFdM-d85qB#3smY;?u3* zg2IyQYEc>}W^gNqU=TJfCE1ketG@0x0vGJh6(Bl7TTdMz_kncAl{-$Z!8d@4=%1xp zA%~~{!9Yq0Sd!!pu(w=AX)pxKw@F<>`fm0%jYX*w5&-lQ&=OuaplM*3SumCqoj!0{ zQ!}*oXPpXqe&aSl6L;o77t=x015|igt)ZVAo!Xg#YOpkf0ZZQz%6R&cWgu^k=`J_` z5(5(ol>74ghuOfcHSliEj{rVrT>Q&k5+t#~g(Oh~I-VEz^y$MQTfirP9eOZ(L7q3M z1wF*+95!aKnHfFrc3L!{cgP#@CBmf5?mzEoknEr2m5KCu3tE{X^G3csTGa+Y8sdh8 zS>L|lG^N%IV57sZRMji*4^z~H#fcLie0X)P)304N|F=zdXYEl81@i14yJ3t10tQm2 zlI#SOhI=eWqKfg!WC_{SLmys6A+(2?q^bu94bkaNnXVki)vBlul9(;1o-Wh_OQfQ} zx(fsfst|2DKN;q(A4G-P;~qgXWGMj zVEW|L0_a3e5-*a;@~*JZw*KloX3MV+$SA>Hq<lCdOpoMmMb_F#nwo^rH@M@$gVR z{^y;sYsh%L03x{gZN-mov;P``@XEd}5tu5EBUShP!^6o=_&sJg2QZ*Z>E~{yeOVAd zAC}np@mbiTz!Px8%WS4YYZ0w4zkATpjom@k7%8yEmKuJ5JyhcDGio?WZ3=@XA_%bk z+grlu*YP}l#4>FHWGjaXx1bz^#IBo<-1-V$3{-;gb%gs9q|yf&aXy_g_CG0{&5lz3 zo$p71IBZ|eS?&3C^N%N?lXyVE+MpF5!M~qAO~94W5=Nd&-#*{uL|Cw$mPkU}gm(sE zIt{eP_Fz=*#EBhw>O_=9tN~(jN14tf$qwMX|?`tdXg0cHRq3ERwsCSp-On=_c zDTCD{=S@G0#4e&go}-OkYS)*r1h~7$p|{6RgJhq9{=xku<83a@Czh#!E!p%IKu~~H zXY$r7`+hu!h}J4bLPi~`03-&RKS&x5nfWf)TBGoM*XifZCwJigZpc7H0mEVdwaK>a z1%(E$>hgWEv>Lx)|ABK2^)(-=la0}x08?=e%njlA(V)Prn#UDOMe4hD1 z8AN6xYfTU$K?t{O->wCAbYB)B4FV330xpu0R41^w-qrJv*pcE;>8f}gh4%7k+i=K{ zdKDXfA^sdZhb0oS$xc{2NmXtS^IJx#Ri*~=bK5XF!9zx9d(QrOi`K1}|C>vjLS z=J)t%5JDUf(J!fC>@t zy2s!fH{T^UVvEB)k&zD02t!g0Kto`}iuMHL&xc-ssP^ZoNp|9|zrG=t)jVS(0zXoJ2@!yEfwm)Bg^wT#a5WYi1{^Ij6toEf`q|9&e7G`zSDCJ?M8-U0g+iSpCms8}Go?NSOivhha92ChCg z;}K}LzaIzc0Lbi^56||&Z-h;Uqad{)lpu?Uf5n_CH@jMyW5)*Urr#hP6;?1wf@v)W z{eXswW~pDUW&$wk9d4@= zGZOS@(il2^KZ!ghs31w&7#eExX{9_2{iL}AVK-!e{o)D4UTDt&yK{t#049dHu+yBP zy_)Dq6L*-lgw96@)_hn6$w|4=5{I;h-&@chNoZ{(keK#aKF5ytkHI-0lcy}ILEV%3 zgGw>kvn6O`UFT3qA&K~X9>}n;tEMGg$h${-=MHiZSVlfw^M+9*o^IW^u|0X3TcCSS zVnC7S#0fyCGVm!saVQN2q?)57Wb*c!S4B2pjKZ5iVgfm4P-9dH6T@9(4Jtv2ptPb{ z>hqT`UhGN$`X2K`iJ{x{`Arp%4l6ADz6p2XZ2@uvaLYdh5-jQ>F_vNi&$YQjuU-l3EPEgWGe>d|$M? z=D=RMdw6(pss(U^N0wWK4I}Xo^}b}+@qp(CHk{M-C?v#@b;gdZAYlT-dXimz^ym?a zE1RW|TjxS?ByKhNY0DMW5liR)HZs`7k}y+4MaipLf!Nzi#q=Y}ZjHBrYU{xdq*yOm z7SAQp;*N7hmoM)X3j!}JOP-f@(NfmO>l3Q$n9H8iWq} zHseLJeJ2LqQ+20PO3OvDX#R*dt1Bb*W`yNr8+ZvfK^!~nBsJ8l6D8_L4pO-XiEf4BA8HlsBvOoXvU& zdO=OVuuQ&#?S0v+)rj9G6@?&k%OjLL{QbYD>fohHkfD$=oIso4od~xAwi&vEBtxsBhb?A4kOc3xRdSrg%8aF|%%);u zT+*$?~J}oC0~7( z(Ny{T`nXJGrF<2>=NtyVuThZ~S-&cCZExneTqgm~!;%e#o8Ox*lf0*!mk_Y4`_s5# zr$dmh$~In;LoMG&+N|f;wHFyOv&(&Me$69o1(pJBHa!}4*O9maDc1pJjvL2mb2H38 z>b`=0u9c-F=C(3lxiI~b$WQkDcSxg=y~+7Ym%d7>jhuKO%XP;z^?TiTM;+Rt^Yv(M zN(%GVY$3lS$tP$fU;G?{d*%&!T*OH{+l+e}#5cZ%eZ#Ims9s{uRYn~#rSpbL5gmZC(=kqr^D%$*OC&&Cc(a{m}l2riIr=g zpVqsxDlC^Z)yCH9LgP)fiLCXDZchy6O>~8n!~{5pEpIK2HIrX0JQ0R`4;oEz{k}0m zK0L2+;oNIiMMT^mq0w!gF}d~3t8Ga!iI>_$IlM;EToCy7yu5G^3gMkHkWILJb}RL} zF=T}8$y2-ud}m`TV6AV`>(`b3op3qhS)LBN{z-WSMi$N$3t1;RCx%~73>OG?1mK^) zW5XO7et*Uty!!fw1*c>lTW)%h_WVk8AfHzrTIo*iF!}s?!A6`j@z<8Oil5107~@@P zGw=YpvHGv-B%!6QGL*CTMK{zgiW#F2z$9&5K1waj{zTsSJvn99AF`oe7-z!WKj~OH zVj!ub6IQ?6=Wo;o;u819;k_#GW}WH3#|k>PWH`IopmSXHDydp35irSALV5B2Y{D;Caq zwjY0?Ybre6?V9n;ku!pM{o-77X`?1qcX9{6Wfl|_Em^#Hhs&~?*|oN#9cbfOu{Pr4 ziNxH-?xS&4tf^a*qimITKVe+{WywAl8w(9f?LFM?CCjx>%jI5olE3G5lU{)7jyl&R zc0-hTW$GucUQ0usOXRmKTi}$HLyAg|1UC)*kT$l>l$_nyMHBiOdJcB>HMyAXvA5Rz z;JpjR%G9sf&pT^vU0qT6H_t9+SI*UfTCu?o-ja>0+x7OCj28|icqAyy=B1Ksy*pCp zX@K*R@Qa$EmshQgKr3!%C*M7Ov}2*-^VEj`YD4O;-3I`kyoTQBYOco56(yu83kIgN zX3@sigBcSxrX(H#99KhU`lU;6Dk{xsdVAu0%+r+6kl^t6;oSIY(C#CTCg!RY+JvBHoM{Z4_S`Z-MAACFcB8FsTF048KMH+{6LhJ&qKCYMO{oScvFAp z`nGdASslHJ9aWd3BiOZyTs1GAldJn8Gaxwrh~ccEZD(A-hvkMUa{Vuds{N}57hsh9 zq&+xCu!`=)h6bT^wLc_=x*=UA=d%^V{z3Q;^BB@l3QwV>&iuNUSB6L8Fi=UT%xhOpPk;wTrnq^S;U}RxYSh020O)Z~QuDM=ag7n>zraU|r zWT#TMer#!pJ9*Oc`NiSNj}_0Kbzkao3l?=wmAvWg_Pe(mB#LGNYFYVr?=}R7@KH#rS*H&3etm^2RHtI_X&=KSB<&$>)3ZbjZEmVvcxNk&x56LG-@tv(Pd z?>>W#ft-83UJ>~9s(tKh%wW-oRg|bCH7W4!oXc)FWNCa6Sh4VM@Nr|B=OF*bb7?3s zMPeZiyuxuoihs;d@&Fg1s8cf>+mxt^e9IMt=zyG_Wvc*I)uB!QRRbrj0 zlG29&-;bZisxJtJuzpSnZCzlZ-*n9FCHfte?$NddFv5L+GT7=iXNktsuKLZ-Xu|z0 z33`P5Z+uGXMu(x7OKdYcY0>Fc_q@g{Dtn3NRfPT<-Ko}&-*?)NIk0_TSkS$?BrUAu zl*Z%#s{F2(QIACFe&8z63f%;Z+fe6PGyk_O;-BM*g`RPJ+qs((pCd2E8aZ7t42U_S z=Weuhr*R;6EKMUBi@>0wCKyxtVv`KP_-(otuiREOV3KMR7n^ikNk!#Dz|h?t5oMHA z@4V8kwefX_Z@HL9b1o6=(&gQaAt6?Ca5_CXB;f?=G#ErN-bvj3)>a(8u6F8Fyy@VK z1(6@$IfT4nO@ma|moL3>2q#vwc7wx1(n=H43~t<|e!F4~4isrE!`umVAqYZ6Nm_14 zuhq2nZ|%4-Z>v|{9kq4E%e$Y4hR!RLR`Y$4NWkB|^r zgmIjJ`GFT{X=lzGh#mA0bFUG~P)uXWl%z&b?V& za4Cy?QNC1N8nJ|*Db@C0CW?VuCT3=gl1x`c)X5P(vmIE(uN2DgEJGjt1(k9IS2YZt zA~it16;wr@eH&BYL>E?pJL1YrF7HAazLXI2uJE|Z?N zoWDUPSR>C_8eG>kF_4&{H|b8xp1pl5e(DsjH1`n(bk*Oa@4R$LyQ42wO%a8_Z87}fq`Rg6Q4g$YBNwFzklHg1qwe0 znY$g`!nByN9FwBf-S(;aQ5hL@t0JER3yax}G71~GcD0%s2GKOo9PKo`#09&@!*iav zQc}LN=^C$zGE0A_+30y!8Pj3Q@TWSksf>z_rIpo9+WN+hcLaAiB-!+iTbswW1?-u$ zHrw8v-xI4SRm^kv_}qE(dWWsuUgFgNpH8Fu?OHOr$EwVD`V;WgJw~e8kt>7Ym42dCdM)^9`njY&vZ5mC-`-ku!3nk%`JH5+-lrk! z#==zj%`%;|D@rd~@`c)A-BlQV4pRi^iqstXepJuLq?qQZnmG|Y!)q(ot5W?CkojGD z+Mj=Q?EQH6?xt&toi?wbUnj|gv^b_EZtWl(0-Zg>rvL7vm}5w>6wc(aw5;SWD=*ja zLBq7B{!a2?Itg$9K=IDmXEB5Xl)|n(NmDrfV~bu_XKZCV?qkhkwtDrRC!g~1rd~T0 zZRbu5y-8p8vwBZ1r{ej40`jsw!(*f}lX6kDgD-MvE=v6%#)_`yROO+fLu8;_Ce^#D z*-X+XY@$9vWy#&=tlvaVmX-jIZGJ0b-Mw$)>jo=@4?h2nCMcZ3ie$B+ z<32uv4n&L<{Q|8nUgGkX<<5G0<#Y8|et!Ci`jBC6udYtC--bJ zh@tLA{W0zvBFlEa1|~rL+R-h`NO!END&HMcDIVMA0fvQZ5;SMrp#Xhs{L-7*IC95L zP3bX(R{Mv}Cl=LJHtOjc-%Z&O!`xt;9PV`__qvDWrhsFQ6>@90_Xw}`Ehww4)z>v( z61egh6U|CaQ5J_$>K{WuzGvjP2weuqYew(>jAtpS@GFKOD<;?9cnNh(RuzCXyR-Awag4MrdHEG5cIV%^T~7$4~G z9_(6<)>jN)z_nVm1fvD|`VbpFkbV5%fyV91AO4(raWVT8r_kxU+9Hh9K<*}z86&4K zH1S+wm2?CJ+cLlJVrR!TOBb&=Z1JCzzO*>iWb_U|9^X?6mqNvZR~KGXkawX4?f_h9 z1qSx39>7RKFI{!@ zdgP1_&o!IG@%#6uchm^VGa7qjUb|vuxY1)>;jJzGhpdPE_89A=ys5{FPFIbNeGP^g zy<9-AWFzeRZ&BlRs7;`2>6?|w)LG1$wK z)8IVnSDPjKgoyFmrf^EGjfAAa-Pz3!3?5x7;yO=bU%QDfS=}>iH3!2fR+7+tzDE3M z9C}R!gkoY&*=LnfXN3Xd1xHvw#Xvt!yFJR+A zweF$myZW=YjYcU^IzFL<%frl@!!L%^G~$J-KeSR2e0*M2b<+-$Q*;@3tU1j3KRiaz z&TFE(WqAB6rwe^0@$aVRu6+SD2%kM^p1J;6ZfN@M8E!2!k(x1@%FSZ__tz!1-+rBZ zaXRNPuMwSOIb}I$r9$gAJV1$_O-X89hlle1^!4fUv=hq!PVMJCex(gd#G9CW$F^xL zApHNI!uLB-7TfhJ%Dq{v59K3AJ@I9WS56zre*K&rfV?F)j}D>nNH|8 z2j6pXfnLS%B?y;PST)c>(lZ=ZN-`}z0(|aL*>x|3#>Z{`ME4aAq`)QWjBqO;fEn-+ z$E5P`M9dCI%N9w3;!TAe5E*`NQq$bKi-TibE}C2xFIrSu-W#M&UUTNP=W%iFQriH` z$e1k@*&>A3)>b~?&nymtLqVpitYbg$P^KlfAny}afYoz-uZG*-Nx1#tl!amtlznln zX~zi`>Q5*H_70~}P7-w^^~HyNNRolwU z3D{#uL1|lm6o+AZ#Y^WOYzwt2^>b8+T7Ph~(CmdV5~-zM$c!FYw)3hahNly;$eZ%` zD-Ht;AD$a2Uj^_3Jinbq*WBC;_Ki*M6mLAU_`uOPb0Kzz`_^3&r{$<1qv(;-@55v1 zf8yW=0_Zn6#GH=g@RD@ja_$D^ux6c&ji?d)u{YEYvJ&@1AE=vR6YY)gKEB&d^z_6T zUP-ON*(0H$Io0yyx9oe25T2MHK;(l-^_m(Q58l)dIIV;7|7--*&ne&cT`wIV!&;JW zu*aW&uQ0dV`Isk9-gXT}a~OX6Or^Ub=KT)@Eqe@Oy}Q2Gc13pTBcf&*|K^kyPh0FQ zii<+@bwxm>fyb2Mqr(YpKVHUh+1NL{MDSm_%<(45={8PjHck!<6kB&(aH$L^pQAnB z->X%#^6%UCv5s7v4ly5fL6hXn%{}KTm;h)Ozy0S|m3i$IHMPo#RPHRMr;lKsXfGO< zx_4ocATN7{Gab=l0zZMQg*Q$%-=ip(*nhmsHc>_&{Me&km0O8}r*mLfDX)X&B^Q|V zaTm?ss9$$~T{_nzO03b2`VSGi(ml{q<+CyU&{6ioLZ`?=aiAvW06LwLk}feJ)JAlU z@oveH)K0a%8ydn)z6Wd=6*VJhPo&It-xZ}DI|zZ};*}S5=EeOoViWg03`pN?82_do ziE@1FWp+c%zsDRU8na?A&GC;I+V>;D?e7i>kvv|rg4tfAfyRdeC%kD4VkYK2?(qhI ztu_C08~qWRu0eQr1so%g!)Vm@iEVBn?g5{u{S3>4q0BL~)JD9Mvn+T2+ur2%cjGcn+?-^LXOq7Q4`wtz6d~$B{+d(lq!@&B6hVxUgs^&9LFY`$HiP@?> z7Oy2r+G1)s)W0)B&u;G-y$+nlN3wpF2LdpMf-x6EB+N0J6*ZYn2^7#gz-DZ0+*}k0 z8nF=F!-9e;=VLS_Yl3SKN>^95^dFscJ5eE#oG22|=4 zfe(8gn&l@UNaNQ3p=)LFm#x1rhNm)$Iv?HgiWVt)rgnE5p3^y4%ya4#W?Z_^^YL~W zj*dn8t0r#QFQ`Iu^Y*v3#SY4Wc1{<&vv8x)$Gdr}i$SU07&o+SZ zDT#0M0Ml^X6A7|&+S*UwsGpM7yBStoQTbJX;c;E;GeQg&%Xxspq~O`H9%~Neb^-U9 zs@_JW>2XHsmSu~bZnymddpJ~w$=8E@eUDCT|Dvd-7AO%SguLM-c_{k`Lk6y1{TK1| zAk2_p_zBg!T3YFvT9NRf^MaPf_zBBHGOtaf)6H$w2L?dbpfXL+pdJLcA?mllGm%${ zD`GhnPEaC4XMLUqHzMThMicF5!93i27VQ;9TueT5th~Q8^7fK(|IYDsQ464g&9n(VJ4C4?*!N+C}FK=$YtWtfi{)Zn*fCoDwv#Z))@e!$ZBBHzD1 z9$lVFTm@V_MrTCIhflhSjPpd@Po2~Gg65YL<7RN{9ZPr`mwRWr`SE#J2N{8JL9Z}lj6GTGPf5iz{pA0IJFkJ$Nn^x0U1F}IE zUen^9{;%O`-&CSy;aR3O%JtW_bS zvbgvh&Gu9@V0L$5pzvj&A9U-YL?3~CLWy8y%@-2LL%+&PFYkoYu-_gbuRPPus{}GJ z9&25|3k#HWaA#f~3FMWei+QBE?@TdOaqLjmsQ0v78?_$tN51Cv9t(T?;7f*9RO=67 zCdI9DuroXE;y^-fTJ)pKhpGC=&xdL~eHs-Jv0|;RcI}se;oFgm!ou=SPz<+yKl^lo z+4Xf%ZL&r1l!xaOKf$%;018MCE)hIQi&DRd;OH^~e%&)D552^rtxwC6Vj1>(&T^;X z-brQ56%<(SsN*BsnY>I8p+Ff!lZ|p*b?=@}cj9iz|rDB{nG*rxQ>_eQf-v zf#DyBo=*3GQq`8Mh~U?U{iE5TCE^vuUZABt z8qtM z+uhE0TPx1rJzRVDIV`fdzysCwR?R{(ocGZXhk|vammL}8!%G{D=3M&&a2{iOJ7~l* zwJYS0Z}n7u^4r8H8fZvcNfh%$pUlMbkdSN|br-W6XUIK%s;#S+)?cQKKK$)_l57+X zR=xOM$PrD!=y$EH)S5JBvUm6W*QRrM9(!ylntp#xQtET_=#vO4evr`4t~TxGFxT0A z%N)$8<5DaLJo95omsTxaYzb%p&(Y7KSk?XSKJJ-(pkn zmddH9lwENFB^7~1t396ngYswEfRXB!JO}Eo45U=UXmAGGo=daUT!uyi{WtEHhFikC)+nLkcElqB*BUPGjzVg&;oC2;H|!RRCt{{kqv7$`S8f(g3{_H zff4VE4h-;OB$X?RiWj~E&*Rdpqe0l0@<8doOeLT;=8-Y1>nN~Ao}6|C&7TUy=seQV z+Qsa8QA6V;|9H;ju^iB_n)+MG?q)P(9g_s_l7#r@STvP^lB5w} zvI_y68*gf%a^jHn7TbZs0_4cC*>QFgwh*4^=*uWtrNIsLUg!UAuIYMhI&{>OYibZL zai;gV(}1M94VY<+`32iSx-HSc3t(T$yKB8lPT3K!YK07s!8O0qy$dMSyxh^3U}_mS z^x0U{d5XQGa>^MB2DY}Ups9}E3Z`5=B|(^ivv3tDIh?-K3n-F`FBM%F6P75gly}8p zqL`vc%e&i~G@?tm+k7gF#~B@NFV`=UhHadYM5d#=uQRi_WZK1-&ii6)re8^pb z6{gn4u_G~uvinL@qR#Re_60xE80tROLY#SVp;|e}Z=$yLrnT69EZn|;ooK#3z1}6C zdo^rF}21*-4I!Ov6sQU1K zx6Ah4wnJGgAUEc39B;Zjew~J|egDRZ&QG7>eXy^>$Olt6_SAKi1080j7PsRX5;~@8 z0kUsTs(la>FK?HYcI|S3f#(coHB2@8UdakPXhnh9YcH>Rop;|g8WB7%;m>aYK zQy~YA&4L?u>dU)#SN`ndQF|Iw)iFDr8gu*y$tlGpBve~l zi+R|Wne2M^+Vx@(adI-1e6PQXk`ja#JkmFFzvKcNdK_IiY zHvRi8!Z_&YLXi=Jk1spcwOq~m*!S^YwW%Y)>bsT>sMhhI=y{M#??TLcFx&Viv;4jz~`LHH@A^GBskStTpx z|Dy=DAgLC0B zMhcv_NkDk$fWK_?opiaru-}lL!>Ah6wV|PmH%1mSLXkt*6UIkrKwHI z+;(nz&r31fbQ&3rEG!Tv+|TT>iTYv*+!{OtmYNmshas zSD>lAqA*SEK|){Ru|!wKrfYy=11bAyK0Yu*zlt!w2ygvLwRL6?_A`o07A=Wn=d9bA z6c_hU3#DXexLu8s8`P3gH9!Ig7;E&^W+h$h$B1>; zTem87Z@H0e~T;aizuG&~wXnX4l@1dh85cSq{RX&)rFI zx{UIx|EbUf3hTXVR(%Pof^k^Fg^wt4X=@9|k&=koa7~2&^S0!}oma4La(jbtmErUL zy5YsN#DN4W<>0AWAi_p3j{A>lPPaxop#=4Ro8NvOHW2bkwbZ(z%m0M+bBlweNxT23 zHO4zn7mw=lDI+zCf?{HYOiWFqKCLIq`*CH8X>9LFO^0~A!-?x>aD-w*!y`j$GV#Uy z%OYCjQ(+Ej5hp6GzL|Y1`!-06m1`qvPS+(wS9N&Y{^9BAhGO*V(u8~t2=k#18r8>~ zoV!-8y)rYi{FJKJ0+9J%WYjCtf=cQZFymyk6g#m#>YHI!!<89nh2wA3<$9UnuZYvi zNR6*K8%u$o%;Y5X}P5YdhXcZ{`)iZ`!jf(b zQSQBo%E@8Y7Y5CEGT^wFsMORd#n1D9`vpDRXJ)ys4GvQTbdUpV9^57B#`T#3G2a2B zCc~Pj#)z14O3xpF_|>Y!;1(0iHQIDd-q$8N4+X$iMwaMT^~-M80ji78`8nad=^E7r zGF2gt5(0>*{q2qaLvkeASjIoG(CBA!c)@+DnkqAeci+AzPoIWr5zapjNB5D~T@GCb zyGT{GUL9IAE>O|k|4k_w4bIc@%}5&H3lel1OTibHwn6&iTT$C!L zqeN+Pb7mEiS*Mpw*NQ5qrWNQ#QSKUPrsV2U$>4KYsQH^>=(X+_XzEcQJq6Cof#F7Rg`+oI*EGhw8*V8Y5s+^`>bLBPS`4W?T zs?Iz(hr;xKQ}>#kSd|>b&l`SrV8C&6N8Qh}8xDORfBN+4Y$}n_Ipj_5JiJv;|KVYa zu;OHa^zJ7zHmxXt_ND>V`M_ z8GBlf!m81RegQuDsN--z#rpf-o1g96Ik*s{+9mk(O0?rSGE5P6w9>NKVE!EgDI--s zmx4C?x{2>~(aeG7pBIR`OSKbo7*sN)?tC~?6EoB|UE9CThoFpMfB)KnPUi3e8qvg7 z`wzvVLSgyUJ}-XCG5`1CQ4w#dCqq{X1F12u9#ueX%5{5aB6I>s{(sk$VcpEmPkm0i zZn4@je1lVnbu!TmY$|1$^jA^cPX4`n!`PstqVs1Zpz`iWvyj;w`8heMy z!0rB_w=%XLx&~=wteMyLOe%biFDvEF$L-o{EEJUo{kytZ=I6ht6fuyB`IquC{#Rc& z>^rh4NBV%F55I{=PK%yzq;#dXfY!wTK7S66WR*}%{;10K554V?pw)8kfj7?rl@EWJ z7k6(me0}z>L-cW9=FlhX-k;-MKW-SBa)y<`!tJ-A@0I}viiU6W-W3vC<-WnsHO{EV zC68XlO!I!t=k{6&=JC9TcOPmoDnu{oXBWm$ZIZO;uT|DKpdhbv{}< z80IIT#3k>Pvhq#`94*D=Ew$?AVZF~sB_v#`A@wt^``lze2;J|0W5&i;)6{EuMK+zr z$LYzA)l2;L%fDQ6gH81+bommi1ab1(JN1Yo&#oMft-VyXRysR;(VVT724YCKiag&E z@@U=Dr;ARNiaNg)sc&#Aj7pGqE&gO$DPy`mpm9+HGQWt|4j#P5u!)019~1ht=ZTq^ z^ka2p`Q$g^vwYWAodJ}2dsyd}{nE9c!J zMn{IL_7jhD8;`fEbVPFGUM;R+)m%$TM{sTyj^h>G!pf>}^5kP_a363y`<6=ll;zs6 ziT1Jz5;MMc)DK|uNRv1lNej|(dBn!<4l91b=E9zbq9g&Ekt@#EZoJ)|XA)vb6nyywmhg_+yzrijlZ?+R-Me6coT8}n*qC*A zsdlVlguD)l*>Gf$14*z=Un1sYP8!`RPt>SlXf1D&HQJ&-e>Tq|@{_+3=X`0GUx&NV z)kT%wd_%6CtTLS5CP(CsduyDsaNNcr6hUSn8|->hSP)+MJXyO~bK~pRL-)%|oAfUC z^RL&N*Z9Er`!jkJ^})d4TCnlMhY$2~uT{Q=k;U;Wn?0GQ7lSynG|T%jEZ-l)$a8V? z@`mU)H#G_M{eAHGZL***e1(IbNgIzPcFG4*Yw#h zrU@ZdCNIav?Mj^9{qDne<}oi7?PIpfi>xT!wm3RfPus{S^yQ~d8rUPHRic-8)J4bS_seAz1>LM7c7SN%f+{}kM_a%4ESImjz6` zt|!xvngXZDZ;QcxYDorv)L;bR2x$VPiF?#il)-)JMzKy_T!E%>Y7Gv6d_bS0%_FI> zqV2Y(|NE0^m9nxA7nzX(K=miKhJ~)3sr1L7@$y8nSq19+K%E=Jpnc-OgFogkUA;OH z6aM3`;m}x1%u|>x*T0dTZ~HkIM{*WJ315;U9x}|kKeJIfxGDjM0X8*h#_OCzaEhw0 ze^ht6Glyf>N&j&pA?Q%5VVjr(!><=d1eU~KiBGijGfg}@C@q!G^L20(MTjT{uygef z4CExQPGgVvvSrIQnN9aZlRc}wPA1vKh>W4BK+vT1q(L&;v}wAw>JgZ%c%6gy8Zk&5 z$5z3lEL>=E#6xvY+pW+G+2ME$+G}&ZmA^IlE+e13eg&Ju{NKjJ1UX#Kc4=QW*|*rQ zQ)qV{sS?FO)=2X(Y}&Uk`QbxRz0asY#8=*swVe6l=Mhk$Gz`)uPh^Twna*`cno16 zKgUfBmtOh*Qv9UrWV8X@sy~sB;Njz&>qU@z@EX#|biW)q&XtGVE_~E{hNB*jNl7{I z-@oe-MppCWaemAP*`=#lSf~YMp1J4ms}QecTpC&+>U^VncXW8cmn-HgMtyg^`#X7D ziL`N}@B5!b5);q&|Aokltl;c|{i4zTTU4 zU0q+l%BJ$2R~oQP-?&(t#}EclyZnf^g-YRv3zRve%a>aq{uV~kEC2I*JyGY{FPD>7 zrY5GBVktFxavmPsi*Pz!UL1Q~9D``^`%Ces#obG`-GL>-h?zI*iDmh5#RO6N(v(i{ zI@&E>Hey^jGe+xXlQA5b)q5#@FNwO1Q37C$@T%Y%&YL73Ba-7@+St8d0c}m}2Q20| z;vZh+&XuCKZqu73@TK~jURDmTvM{)E=~Czukqz}mC|g&+5s3_&I5~^X@0sJv@9yqC z%bjNaNeRyVK@3n>n^7079~KfK_`@RRA6Jc5=%_?41q?P$AN72qcw4i@ z#)T5kKNS+v|IB`OxnlZLrPrToZ+v}zg8>HS=e8K^9EchyTke0ka1S{Q9N~TcyrL)1KB^6G&-pNM~&y6op%BYMS^G5mcz@O%5kmyJmIdZLDNa));B+4G^g zI>J=1{r|A`9#B!ON!Ku569xoDML@)W7)VOas0gSe6#>Zzl0%a-v;hS~KtOVmoCG9? z1{x%(B+0Rfl0%c5+<$eWcXZ~?_rCwPzO!aI-ZgXa_?)MzcI~R#)svqAI|eJu<63h9 zUUTus78cZf2x?E5I|JaBgcSYQE8)X!mHRQ6g5?Xh+@EteN4O~q%AmR{2g8Dc4ZdS> zC;|k^)vh^m?zW3dDZ^buO1Ca!^&I^NKfHf`A(G%IqK{tefvr5v7z~{%!8!V95&8qq z62=|d(#ezp!$L!0JCo??I;P950DTB9nzcE@+rx{@NQUrN%dS=RQz?9+J@VS?mix1Q z+nkD-{}$sx3Iv2{#s7LvVdp1>dR>C(X9bbyXh;0Sb$96AT2*^VGlyv!9Ro`7QfFY_E##aiu7!>9=6A z`5ULgqD=!cJG;ja+5=xv(0GZbw%zlK<2DDalWLeOn*EnT3jBf3^ofhX>J(kjctBx? zSm~iH3H0E`s|dF%Jqt)m6vi~W>#0&7$Q*TcK6ZZ@B55J15JZ*6J?^Dj^3+@Q4(ZP2 zv6T2P(f#2OZ!+?F&J(122zPlTB`xj5tsf&JAyNsNloGHu>&KsP%zYn0!=%h<8KjH| z4P`-u%@#YJQ1MmAlsssoafkKHM2=9VBzm^#2c}zICY?mAT;Wq6oAx4mlmi}nv z6qV17PEjVkPE8sv*gRp*-}|N{wPgABSQucjl@*vug6Gh=p`oE~wY4lKJsIxufT|#f zfM1~e;|jSm{Cpqay*Ocfteyw9u!s?_keNNKt%7yy5VgP+F5_@+yut7Nin5At>2Xp8 zQ7<)jzh7D+f-#b78C8aykZHU)HdCEOfAm(k0H&v{ebT%e09k)!rPNCov<9JW+X{3E zm^rj1Ku1;msF>$Tv2nuR=AEau|wvN zUftK@JP||<$nXxDpOKrJ2vtd#9|1!9JEE^TO9=FyshTzCSM}b#TTix;y%PpHe>%cD zckjYF0I%-KOi(MjC>ePBve4hJ0>3fK-3b-(ggHw1D_~?~WeK9_v0;$=kOaSK95XU8 z$?Y=EVg|`m6s+2;EO(9jablevaL}@{q=SOZPUcdu&tPcCv-U6qc7Zc?w@I7&JEqLL zg@|9w%*e7#L|buSd^`!F7c&f)sF6N+^yq2kV+dei`;UwM`rQ>?LlWWqXgqY)53KAL zo_h}Wc?a_JrGvayX6A!Hov?an#RRb{@P*&L5?#-uN4k#Wa+9v-Ii9SpuieK{WoF&$*a<->RheMB4_|AyuZn2CXX zP2vF|y%<;k-SxLbuY3dSLGX<1C!>lHi&wl!O_eMi0V!&Y&)G;!-`#~?KRhU|mQs<3z+9@k%%{xnya<)kFM6f8^nw-`aX ziy&dBxxH4!=5n-`um>Dgt`jY5K$#l`Df4^aA``|6jvRp;kQmeLn+#tP^JLFslsm4F zBwh8N?0h)KmY4QYgHPk1c21Q24+wy$)n+LDBk|ntcc*R_@o4O;#}>ChLIQjb>@g6g zCnSr$Kb9R#xWkxhxx?ybY#JB%8e7180KXHg>hHAlG2y2zDq0wZMyGV&muGPeKDxf3LNO&%}{xo`m8?pvrc*#KK ze?#)B{#uYU#6-a9oqYtWitX*~p>u9>Aq0jRp>rUHmH@X7y(C&cIBXkipEF3RQ0%Al z^HUtJ1?1Rf#4@4OwSyAj6B1!O?lJ+1RixGLLME}eL8?xqdyTNZsK|C+a9YJwcODf`@RMMsuM9rn*{ODX^{D z3#JReO9Pa*F&TfG5b*jFM_sNqd z|Mtbs?0hlWoi9d6y&$j?J)@=!H65Lap`jlk6NH_Vc-S98NZsR38ZHyx$=Z*PD}pD4 za1F1y>2sR@7UP$2%MLv%LNX|oOxxVtRaR9ZqGuu$VTwR*C0{x1Z#4gJl+@ymr*`3m zrF75&dQ`O!bd`yO=Ci^ND3reoBb zW5DohLw#)n=5gVZSc>xlIJy}#$K$A)34PmXdO=6sz;dt(=w~S^;y-sA6u&`98R98a zDnQ~-;?F2QdX)%)HVIQZ>rTSf0(^XH-U74kM7MZ5vLA~uFnECC2C=clb`=C6bq~&o zvC4(b_T8!hk@ZT1;ta_(>_3J0-}oqKs3!1H3PC%j@5hkZrc6NeA{Pk%`p>511GI7Q>;dVxBvU2B;}^ z723;(aVwg1GrRJNa643D0R9NR!LO{2&NUMx( zd-ne~QzwDz+*SA=q1|M~S#(QJkI2oZ5+2H1aR~{5K|ugL=P;E*a!RYAebNXS9qUJ_+|`?hL-XU++&Qy?-e6X zNu{BxdzqD^cfJf*4LBd4mUM3OUpy2@iGLyRP({pFuVy`FhA6s&R{!mAf(R0vB-avQ zq5TdC1B@7m{wm!Q2l15r}`^|YG19gw7 zW0Vzj?&oDLC_3gZ2N0H+yEE>7?k~ZQ>Q;u#qQ^j_%i1oG{vD{#{Ij*ckoeow;Wy7b zcQUUWV#%Tew#)#RN3^bjKr(W2SYLXd$cgRVo$Z{2wSr>OMV`Q^x4OCJ+7Gm}ejX3S z^KuIa&OJl?D z@8i4U3R@Bs5xpQ7_<*qV+Kg<$p#+L2%(d_lLE<7>>OWBY2`D$rLb(H;+iL%R?L1RC z4JODM>+8M#xW>VmWGZFa?kP+lYGoc;?3!J0U{j<35<|^!uTzWm>w{{cAZbB zF#Qpsq641iUj3KDJNX~UDDVH)%)3gRQ55GzMEZ%W&s{$dsf89(`ai2E1-d)lFdfEE zfKE>8nV+8rjbmaAeYQ6lg8EKY`le#A;M(F>5vs306Vo{VIzSE9(Q?^lKtxzj z1S->_LL3TBYvzcJa|Hi0p`VSVofHuu^6_efCxYTU7gsK5DgjHElA;VdYyX5j%vQt% ztZ)j}c#xT@FbDqf&yTM`jY(3{69PC4@xqGm*Stv{o*J;AP>nXVUVfr0e2|Fg$}URY zk!qF%8mM&mIaDf$EFC7c6RvXyh8t>sEdyV^xD%50)Y_Ps^PW{Pf74KZk{TyZ6a7vv zSBb+g;AKxO7<7BKHVdjwN8Cgo9A7>j0jEU_=6_d`|1|S7fI5E{-&V)JJn*R{nt6=@ zJvB}EKgRQv6i`F{Gh5fZxx*GdkbuIP)2f+SA;eFjO$FN$kvo8#9r7tO^q|iDSdUtb z2XO?fEN3v%-K)dnDsYu}lkZ=QkDI)htg1-;vJhS&8x(1HYz zsv#=szfjFzpWeH3$G!JD@o)9>mpV$~t>H6-u8Z;+71P3t5UO`xh&iK!cDh^N&@ePS z{P0iqY2s%h3c(p8j?l|7t{7DUfd%9=mw$guQ`_V7N> zDy>{)P%VlI3#0v$OSPmWnz=WODkz$vz^o1V;Exy${@>d;1tU1>-%4$8f%|?I+0{%~ zN)J)#(k!hx5xb_K+n-3mw;2M}1M}Eg+S(WXEVfzhM03_j5c`61Ix9h5pQNLJSY@lw z&E`ApeTXCKmZk5~&>2Z1V3wcoT^XA?tjo!}w zqkjBQPOi4L7NE0d73=_{`?pgeA)X2=@l+gPrzGsrYpR7iMX?w3ZD4XqH~Y$)tpBiU zodj!Y&mdP0M&jE9s~kJ#PYhF7yMd$UZe!>3d*1;6K3CL}z<5cI<}@|6FYwDc)=IyK zxSdK8=^s_C8=N~nF9vFQ`}6x3BXPH{12b@=a%p9yd&UOXPD(ZC;~|o8P|6=?01te% z&|G>mM(o$s9rY}J@frRT%7Qz1u3AFE+d=hAVgl^Cb#WJHa!#M(}Y8F|)v@-QNc(`Q`~R zhgj%*IFZ49{Jnk!-3j7>)Y;y>lKiW@=Ks9x>xBq4lQejhnVhI;e!*I{i=g=Ri;9DV zD6l~wi;&+*Kv80k5AjF*{N=1FF$1=gk&uwEwY4=VTS)vv1@M5jOcaG)h+-W zgv!W0X%&OVu^gex;@RzwL*4}+-^m$BGy~8OH4`yFOgcb1xB{0$i6}TNFVFAZW zxGv{wE#%}{VAk9HB_s#@v3CjKvL$Os9!3J6)O&o{2#$9en4SnJU4Ip|8Iz@}&9GSK zyrGeXZ%7moZc)r$On21H=kT*n4@8(ac5bhyayTy!vN?@3?5Fp78ma9jv>(5IDZi!3 zvQ>bcllMAzV0d7lU!-rSZ%9O#t@Hf1m}c5#KR%{Q*qLm%Bb}iuvy=K3;S+p(g4ZbK zHXgQc$g#7-uNLVVc^~yhzFEZDc)fogdh+XqzxtYPIp5p$*%ilvbw}w4zu8>G=Wf2S zWTD?E_J{Q6ANpBlt6w@_^7(@UclYt(Id%A?XO&?tGa8TjfO5X5@`lX z1pLJ7#oE}}8Qe1Q2x0i<182$llxX!j_#zGejkIMVmSP7XZL1BJDI~QX? zZf?daTr5{Ea&ZY=fKDl-eN*#@*j}bwDE-oqp=~OPTWyCrIW)FnEE{R5)P$i7WjD}^ zXI4kblllgREcZTNnb;^ez29Yh8Ob+kuEr@~wvyu@V`mW#_F2lbnYD-C2*NMVk%1K6BG-e2{=7nhSWDSR9Rge zau}GS20>BM_}>$6QZi%^*wbj>^XJdKy}bt(U}{ZL*-3r z)lG{ubv@1r2Fnlwwd$dZU_G_ND6>KG#_jQuC=nrUL966!%CVZBnT_t54Rt#QM=gtQ zG_?*bEJ!_7q>)2=mEOs%N2VdAPU8t#gU>A$-#bRD*!D!Q*%iH%bga-QUG9{K4IVRG z8>8QHT3?W)cZjN)C}?GxS1Xvy^>H3g*U-g+t3%_LBPRmmms1Qx%vE&-6MSUmL?4t(_QC z7G8OE^}jVIv8;-g_jvux5&x%Ng))JiLNf~p*oANQMCk$+f&7-p`<7Y32rV$2fFG@V z{{uh%>O@TcK6r8r7iBjMR@lN;{3O1?s@BBetJBt-p{406&tu0LeZ0KA4&!hU{6mHU zz1_yht;SeUDx6g~J+07Ochr&Ml|GEdA1klgM_*rGzLgTqjSd zO16%XSx9iWA8Pt_*!HY9o6B6f=dr&?=F-#W_8uXjQ23ps@$o)wYG5HS(?@7m6fWt& zo`()7aQ&+3L<&n>{PowTJDK)>lv@W7JJF~XR^Yto0TKt6$?RO-ouoD$_@Yr8RANHH zE$X-bS#3=!P~Kj5nvuoNXlx2=%=rb3RBwoE#Iv^)d9FywNXp7cYWN|yQY z3*-*D%cO^+@O<)pVFe*@VPQP|B`fXHjV?2ih)vw$;M)VmyVYJ9D9wMPRC9Y7R6I7j zam#-E;5i!GZR>RpvlDH!Q26gRZ+u%Nna*^1+J5TJ+_4(k44M9DC{%`+iWz-8d=Xk3 zTGYNCI!$s`8OZY&$4mg;5?gF{noEkhcL?bXMn=H48(aUG+y7G|*#ON>*McZieWq<3 z%?cr;5fMVi``Ou9%?@!u2T#95#YOzlI7-Ov+rvpyMYb2ZJRNxQoQF}geaQZcYIkov zT*yN>v0dSs@j*MS81CPrOBwZU?ngFyYmEnwi{9->=`Uy4XNzrrC&Jm6)|to_WK^r$ zwI-qwkjN%P)fm{o8C=LahVJ$`a865`SA&LxB8ABwTzcJ6=uUtF*RSNl2hbv+6gX*d zniu1&MWno82>>WvpS$hkR9vnJqP$Q^gVf>DrAvPV^|IXO#JtPxGzcw22TwuqL_!#m z?qN38*4CCulzVVoDbSV}*(ZPt^Op;px(9_?Jx(L0t1ax=Kr|n1G45IJ%`au&@*{Uz zh+@sPy)Zu5h+IoTm0&XQhPQX$%4I-KQ1(O>zAg7`uu*YRb8&x3Ijk)@ww|bw^>ku6 zdpe_Oj@E#r>>_HKikGD9ble|tnpi=Ma0}fM?w5Kg93@L296?}#l>qjLwFL=6yDRfv zLig^kXW-488_+hIM+^)N51O*UCKu48Au^yRBY!0-|J3i6QhbY&3i{pLiy`KSY>vsw z?)$4;61cYPWq-U?m*Oc(+Ko;$5-*ppxWTGgK(p)l91Zp9@KWgQIbv>Rr#TQKc}z5t zplbCDf-cn5Q@Kq}-jaIjW3OgH%($9t?w2NwV$VZY1Ju;ux#gad!}+rO!#~H|L!`tc z=ZHCfM7c?9)2S*3_)9&32}wFSI%2mj>~Xu}{xY;+bws(OLBIL#=))FiNIc=QJizs$ zk@kRACxV=&HA+vWHmQEK9#z-4?>x5Azlt5pV5XrsK-J(Qt6?}Kx>YhS_VO0#HxI%A zsz$oTJ%!Xwa&)Ihfmn}+uH)j_Jm_{L7UKyykrHWilYWkJ8lhS1C$;%!A-+y!CxecI zcJKlX&4s+F=C+!EvL<)md|>A0se}F!ZM*}HLFNa_}saVeAjJHo9AO) zCU7lm*B{AeTn$R!422x+K?=_`HYsUoF*_)gl91>IDc*-J?#Dz{5BQM5Kt^EoOpL4r z$i0t{{aZ86)2B~^r5K6q48z5XVzY!F@arin-pQOqq0QxG5AnSz_7Xel2|e1x^1Pef zRl9%asITf>+Mq|`V`}Q4;id3uN3p765d(gmL+Db*w_GA_G&8w(?=IIPdD@f|kme!g zRFF`mb)vdeWUWg1Y6t!g{`n7Xwr>9pkwsYT31U7!Q}66k)YJy1rV3D)f-Pt0rwx?(md=Q9^9#bP zD!A(Gz#poLX4d!Ze)R$rXaz)nF4ztnY8z2>ISyT!>D9ZX9c|B;nh0A@kIxmlL}71P z7%Ja$5Lb{feK6rAro$5$(muk98vKSZk~y&I?9H=1X*bM;aGaW$r39Erb&)}r^(#QI z=1=Jkn1p)Z5Pa(ZPu{HSeRzCs&6$!iTGgk24CN4g9>-h!r7WbhB%`>q2#Hle6uIqh z*t_{W=WX58!63Lt-`dk#Xgd<((6ydoIewnkL^xbGXu03udUT*9)`<&JRQ@4UBOtK8 z;c%(CW{Bz{b15r2$tpKzyPbeffNfH=*jk+G3$8tHDJwqJ&-Af>L9yfX+x3->Apq|m z!+U8JCfgq&lDc!&)S_lGR12_ypM==~SoC`B4>Lg(r;B1FN@7J{4qv!nK0kjq*?=1A z6Kd+kR$}w_L|*|lTU%H3d3T81=dDd-7dY%5x()c(`iu=GgpQTSNBy~cNm{pLdN2KNh19Ptdo*U;QaqK4rd*6J0&10!_N-r} zWUm0}=7Jx_q8EC-J?1k*bRm|`I&Nl%!32a(aecugu6kQ>3cWbtqhWZsZRwI%Q*`wH zx}y6Dvvvc%J}&dA*wu^BPgfz&3dhX;!M&W!k%egCSbhyKNHdShM1xz;7qGB#A z7QAU+lz)sKVUsQB&sXg`)GO7uoXZP{WY$L{Z$vxl(FPl<154?b3$iX-E3m-XTjR~Q z9=@a7HTZOq);6K#61f`h*IAY~J=&dWO-5CCPGqnmH?oJ?9K4I(oX2m{uZMNo9-rIT zUf;~vo|~4_bC78$9m^UDz&Q=cwS{3zi=$p-jPT3_qyO542evwv;PuqJcSj34$V2Bm zXstu=fU1d%j0~YxLm^Dqy#=D)tuxTy2_*z^9ztge@hKBLMm0nD9ll~>6N%JPdGMf| zFB9_mvBliHJm@Kd{*KwHDZr=auGqgSl_Hip@?tEWJ5REwv(`*ys9SmT>3iSv3$dbK zb{QGm&=pCWjmuv&@^M$|GB2!*6RDEja&D&#$Ff6urG>jZl5f*aLVARGnhwb!g4#^_$eN2enPwa8~qWCWNHsXV3Ae-*T*X03$6+P_~Gc`vp zj9b;fPbuP8=|zBezr|6J~aWp+o>bEaxMG&zWm|TeobB$)3#4aKZW)zN; zZhuDj6m-8ptvQ$SsIOuM0~4?vjkS%sOVU!CJ+btq;}u2FCt)^KLhsk!U&MekaJu!m zu(XdSEI=q@)3&8ABGH>}Ye7^6Uoz`+^vlVpcNA#-CcLM^;OC_b!=a%z*2?57%Ock= zCb&|-2oMsrgy>OZ*7B+Fgzh(l%R)5M1jb##;^?T}Ycphp_`D11FraS@#~*NY&z*C% z@p`nlod)GDr9%5#?%6^ZmW`F-72yB+x{mgut^50s&I6Gd+Y7HK8cQQJaMdGScs!17 z8oBHP(_@2fYh&{MpQRmmW02aaAK~Yev3~VitAr zqfed3;;@FxYU#u>CAe~x*|iU)7Bkj7%(C~Smp7cCJ;b<0`d3H$ui=%Up&+B>--cH__I@3r`yyr(fmKWo{@m+jfHfj|QO(^k#O{+rwls=zYWW*tKSFjaL>b zz^7(7EtO8tuQ_gjzUY9*C8~>zrOsm)W>*j*D@~>TH7|pH0IWhG?O4F)t0BH%?B^AlU3!g z)gJWH995~s*h`<+cCiTLart)R!!7SAhQJNWVN2}SFQRiCA2y2$O>n~f&8Hs-t8buk zS=fEjqL70@T)ESK^CHq^oFLs{8IZlvd5N zy}n>6P%ZH~QA2dR@i0E9M8LN^TnBLb2}K*W&Z35ukP#T z9g9u${aClgjSc6;5bVYJu`RBN15ClTy$;dC7sUjv*L^gc&Szz7Y;H15gdF03oz#{V zRkGY2gf;nY5*}1Aq5*JV|?j_i748oT7QKAMW}UgDWC z{2u%cZ4yK?p3&6Y>tx%!2eZ4m>FZi-i5veG-Lhb)IR+sS@Zv1y zr_D{x7n=JrLoQ^hZPa6+C;zpa=ZuoYNPb%8_DCYmz<3%=8<^8&0x8UpdmWeWf zSAV1oo!4=ROj&xD$Lss#yzgZ}K~?6HMpw;mi-}QNw(lmncV&-;_DnVGpQJ?#n0sjb=$mu!x+b~&bZ%4g}Qn7*Mf z7Si$~Dn24f0+Nf>dvU!Ry-aHLug=g?Z#7@SudI-N&kGmX>TzTf>6!6PVPZoU4(-Ai zI8r9W3FgknrYFoCcwx3>Vk@}Nf#+!Y5#LhdE$Cb$9cthhS-Q=pvsG)=va*6*eSkb@x@= zCl~c8kS<@nz+&Q|=}ICuH#d2PddEbu(M^im=TWFLNbX^B+ywW@*{*=FG>vpIpEfV? zp}MZ3)R9Y%E|CY>&|2RplFPVyTTaw@do~J1CK$_~kc>K)l^rA%W$+=fO5d0p&naA-wI7Y=QpraI29?g02iEB@4Yf3rDIR;2+6KjB zB_$<7M>sU%9zI<6<;&wj3msEaQ(#fM{C+QsB-|h<6kIz?AkcD`MKX@(WoCM~kB?fr z12mmXdXxgox7n1k7@+U2ww6gq$QkD8;g*6<;Jz4Ru^8Vc!z~MTRLe|OB<bL;4#_tnzMA?7{oSs;^DgUO$>}b*GSpttSvHKi>=rc5SG zfQ`ZMmg3;aI@N1K-v(%ThqkHkDLq<00?J!2eblK*qiRiKfwz|%>kVW#N*|0o6lG^> zWfx~!JBluSWIq`GoFbLh3od7cgjbVE*M_r9{sYH6#8hX2tt0tg+LUst7@@;UoQ-#s z=N8#9SNgG1xZY-g5)@U9tYnn=#^=D%QO^^4>lexVk9a2gNZHTY-4^tlve_vCzOxZ&=f+7pFeDK(9v{N`70q&}@HA-W7#COkV;#rWam zrVdl2!`QIT%E^rSE_1x6Q9?tZbiRvpVnc*LkiUO6>|TZrJ6l^EbVtA(5iBlW1GYx@ z?&%#ILHuL8p3CUC7*p;Lg@D$M8UdR^v& z>qRUY$W`0jTLEkK8@Ag?J?vwV`&ESmQ5fH|q#=^@Q~fwys&6j#gXAH(iYa?;o)QvX zV8gH8LmaWkcdzN>^)*>94(X_syio68!Le{yxPOf3@~)7PR};iiaV|tAYOv?TPU%^7 zn|9Uh9Zo;&|1fcaZV;nRE#>@K*{Rn-f*}jF=z9q@qsw#*vr=}Uh-I0pt>1b5f#O!0 z6=y=PS?sJ~q7Ii;ZeGrG|GajMO;tm0U;<-BX7|GByBr*ctvKK&tSquOT|pdVbTFOB zRqyxY2oi2LkWc8lj`fTmqOE!CcLI_#TFL%jns(bR_3&zDgZAp-Z4@VHPbw6lGU48A^!fBAb?x(d{=oayx0sJ zr)svfV_@;pEAqTLjlA`RLiewdy_m{Crc=rt}}{ zY);!;wCp-qLHS9-)z!M&be{OhGd+@vQZX9TQcj0I$ zLqbdv__`Fb&mmNgfo0o1WavH5Q8~fo|%_{)WPErLNsg&q#Fws$;GSt>^e${QVp%A@_e|h+w3okld7XX-iy_=rG2(G`6tGfa}!wey8F&a2cQiA}hT16ol&Y^KD_)0H!Qqp$cqj z(Bvi3)jvP{p(a&f1m6cP}piMYO6S|Q;NGK~S!y;i&g#>B0-GBWh{`Qn_NJyc} zmIJ7v!&;Cn$H@8CwUk(fWCgg0A?sFKZ zGF^T0Ce}aOchGN&te%7ZG~u(uyzuo*)Uiu<(I|t|ET`10%|e`T3%9bMW%)Q$#rRz6 zwvNf_H_b^(o3n3Ku&2^DKGasXuY|tm!~~{zjxE~GjCZy;NL=95jlsKXVgiMFEDtaB zXFG@K4!-W8nrzGJ+9-*>(PgV)bdr%Fp}@h;rmbG^g28-a?eWB7kKm!g_>Ofuw%Ho? z$BZ;57f*-StQ;vy6~J%3^6f$5f}HAwtXd05FNp4=ky8b;*AlbuYZMvJdmD9X45IAQ z)y^;a{bgq{fxXj>p|s0*I)=kD`|Zl^ocC4Jx0?R=3MUL^FCbFekCFeRHPf$$S*~#} z*i(U&N=i)yO;AFkZe86H4hOxDY6WJ4@HvaNrl|jA@+8+TX`^34iAeL|d+3}idjo5Q zru)$vjQ)4yn?aJChl`7vdVGY6;!5D{%8RbIYrH)pI6oMkCfR*|HO`KfHp~>Yw%7Z+ znu&qo!&DVisH6RyqQOQRrQ=dxmT9N^cXJumbTaGQ?vpyD#VwI;D-&3KEv=M!fn$5l zaq{O$YzYKxt%OD4XRPZj07%k1n52Da_@Nl-SFEwDtd$-)VA$FDCD=t;?<{+dd1rw8 z-2*b|ra}jsKG}`FXj0r)a_qqCjKc}SPxgNJ3BXC2k(uSIxZU;@`UNwmgTVWj4Tejnwc9PpDIya zf=?Uw<>aWi!9GfT*AuCpz&j#cdAyOOq`k(`{0>skRXJUeO?Ee)L446r-s|u zSnW0qIOvs6K6x{R%&;z&u3=Q`iDju|RNGi=Z_G`VCR>&`c!Ey$P4p%S`I2`&@RER#qf$lo1G;?uhcBIeoIv zpi!o)vvc(@xuBZOqaKT#PajIs>Z{uoGW0T?GSq9~6IWyJP`IudOsE8mz^7^J>)YP0 zZFIp+xP`XSQuSIka1pVS&$v(=qzoGX5{)rz-r%u-7gQ@ zCe{vx97-r;4_|Y9qM)Kl!B$wq8xs@5ODNO+dahl%hk)PL z3V?WwoSeT6*ZI#$8F7$R`lqC)2NKuOF#6AQWhcU7>@PQDHSnK;JEUCo7#bssjw=?DMJA@zR=Y7O4Rx~3@n?Dv6p!&DxqUyNy?#ipibsXb$ zF!sqCm>m%+kVFtZ;XPTAqb#0!tihwdd?}mz^mGKK*9%L}DUO`XoqV_5cH>ib)Av(6 z*Bf}uDy!abbb~j|uXmhl@)p7wH#RXdG=#H|ehzj|Dr?eak~z~c^W9*=3;r(#C$$n7 zQ1&zqQz%H)hN6P5$klx||qeE;$sH)cMsZ=T}V>y_Pt-?4wa zkl4S+2a*L@3fJ}SP;IgO_ZCM|M8z(?ao)F`mZ*>_d5`d9Wo7NTNlHq3=gyt)3PWZV z7VQ0OzrG**ciFq!giK7+9-7O$b)e-G_B|7bfwKDv50g1_x#J$f{7v$6TZ>5of~$Tl zUVZoc(6L+ET8>MlI%Qc-ulG;pwmwqNyTcekGdiRt#j{^xt1xumqX?12j;tHKFKr!c zC%?se(j`(Ts(Xxy`16xhloW_Q&+EJ11cv{`X<($I)+cDo=23Eox|;o(8;g>N@mC8A>#+CyEKigj zdRwQ|gakK&D@cgn3*4&X${cnqvUGh*z%;w1I(m_WJor5^7cw+{m~xiX#Be!exaK|B z+(COK^QH-HiNkv$1#DTN)8x`635q=e0w~xJ1&t@3RYS0jz@{$v`sm%?lqa5@d({l% z`eh4Nk_gw=lV}D&O2IOqwF#YC@YPme%h^Qp#S6P5R8?!F!;c@mbO8F)j?3DZW6K4g z6R`sM<8n#hjPw50}3=+tOWWMf%|Su$C^HL;g#3dlO`Cq?ww0%xE#PnjY-&pmQS|&8H5V z;pO~bEB9potjEo96h>NX2^z;)%FZ~C#+PkpCC z@B$x&aE6P>h_v27TsIqT=t+YRQ|b2;a)&+ne543`n()R#1l2af#>$jTERCVjiW6=* z5?gxGW12BRN;-@K@$D_G*!ih#`tJz^+c;%M6_tKO3*AP?Bl*eP!y^D?!hv=e_%t{0 z$*ew8&3;g|EBd@nsj8euY)y2f9w51_b%N<81uZ3lL;vXma`Z!9vx(=4P#@nn1j` z7r1^O?_(^EjsKe=f)>phD z0mJA&^D;p&x{$lpNdxCFtx1#_V@GyyACZZ9CD8eJR`!QMzP1*sMez*{@$zN zj|EAOOL1CN)VqIX9FTMXY$+&EwXEj~y>}Y&&c)?rF1g<&=nwM~pe9M61i?W{rNEBj zq@+7n1HL`Y(r{TDfz6}h`yg%e@p{|d+U*_^Zfy4#gQgddY!FV`(iBg8xFVv?{a6xV z^;BEiU(LedyVTo{X{EraiBas4rALqT;U&7FKa(}4f8Wk2%$%>UIrBJTE3G6pcEsZL zrH?q?oW431BMKjtn!-8EcBldm4X}xF&4^9LDQ7tDnI5qGBo&nfm+o{WnedQkT7i+* zv}h;9OB?w}lru0%=bP}`5&?Nj;>~T(#Tj*9`{ooi9ujq>_O3hNafR}j+&A!NpkLdS zuOS~U*eBn3Xe6=Ue%nK%bbD-girapDHH0;OS3Fe*a&Z!`%(C@rzugVVr+V}>bhI>d zsY--gkX<7^xzapm{8=A8s}*P$5&=UVq+Y-^-ns=~j~xx7I7TPHYU3ACQUWlLxfb%H^Qe8-#|)mb30(`O%07tjZQbC1t#C)-3O?Id)b{@ zgRdWb@XFD}*Lfp%MdFgrdzT!CwxKb+R#6G60A*`DJ#jWaxu*#GG#A3oiojHT?=>KF z+XYN#OoSqndOPoDbi~+7f9h-c9>B{Xn!i*%-#i4o{V8EX7@ah0G_7Ya1pY6_Qi2PZ z@A1ICq~sLA97JPfoDtVghWFqLO{Qbgk=p_le8GAQ`)kIy_AJ+y*qzND@TKPDUh*D6 z7HO|V$y}CPG49VBLuH^+${!RV`#Egu?3Wi!ASq91Na+tDV7o1gFw>8zEk@>xOYBwN z4)s~&b7f^eX6WB>a)`?Le9SDJwKK^4Kj3xgNI@kzj|*H}Z7nS=QeDK6y`8V58F87Q ze8(&c_*7p%X)gzC2XIJkGX%7smiyr0L#?MD?mXpTJbzEl=z_A}I2C6z;JDq=fOj3@ zc_5?(-m7jkHa1aH#c*=O!nNM5UK8%dA0jeSuw-31Awy6kLqnXMG?eBc7(I0!W{SZ9?5B&aNN_Z*5 zXla&|ReOc36w_=ut;8xX+HLGt6-LVRWZ^atrs~B@=vuzeS8*ZP%YTV#Gp_rP3L{5b z@qguy=}RJ}*Jed1(_$}rU>e$Z8t)wOZZsmD401G=bGvtNcg+o6_L|$by*%8D7JWs6 z=&o*#q#|cm*-@nl${CGa{W8T{b=tBfo1Ml=%T$D{IBl`V%2}=P9>R(@QcY+nv7a0Q zhvoq7==3p2OW$1lJQV-pY`B1R)}wQZqhkT1wT`yuUZ=l%M?t`B&#aTv(;MpR)qr$|wr(FE zSt+SHzl)Lp0gKX5gA-HqQGt<###M*tjn{7fS<5M-cn^7GU-`}ak%5fnz)@Yv5p6^D z?TTgP6gCa^M(-3>)oWGWRzQHGHz&}!Eh~F&ni0IU7uoqH`MvJ_F6&K_dQ4J5uM;z( z)Fs=hBDZD%tZxN1+<2Nd{Hb3FG5R`W-8Hw_+{ieI=bBGuEMN~q>r_)uU_tynQ`LEx z=*ZN-!TGl!T1~o8z*^i)GYuFs?O--iZ%)5tUM;`OyE5X^k)U7{h}*Qi5V6nZX{7Jz zJy9LsTj_B_yVUj>4V(^%zD|jS;snlSgl&CskuH^wz;|{<-|}Q=r(!IEfKlUvTG(7W zV{$Y9vEOT3HxrwpSOPSA90W)Ms9+3!DAbxyfM@KA#;T^|Xx52&gNX*y*?lpshSoqN zD=4(XX=-U{y?F5g2FeuDRYStUdcbAn{rJ1i2H)k&j`>W(w$g4L-#eU!t;AAWSy|%4 zWNt)X@zbw<ATmzW#fez$^dlf=#j)vt)%RxMVq z1xP8C89R4Zt0Zt?xJD}Tf||EX1KpUDci1W0ngx-GyjJyOWn5*}N**_5{88>FG3t_Q z9_+&vJ*|@|of~0^D#>eoleD*4W&r%$9nu0?XTPzRr4aKh8PZ`S=MDv5b-Y zShxD@*cKfL>C6k-b!x?&+*joD<9QKSk$xq;7>rj`=M#sxl>ON!8zcFRaqKS$2=aHe{2 zaPX6z-br=ap7)c!_=H10Z#v)s_e^|5Gtl?+>8K8h)*8q85lcOwk~g?wUAV9LNMWB1 zBDc}xP(rn$mA&lA5+JJ)ObAO6m;^@!gZN<+p{p)g<^nWVAuJ6*%!4XRq8_WA-SRpZ zSU=%rR}(9C=UK~v2)LnXWR!X<`Z08j#fW)Uzon);e*8VqxTYBX3+*B~#Sb!lKpF?JX+-+@4b99%godvF@RuD0+bXj9YDNIi$(E+5 zu?Z?5pd$kkod#dBEC!_kP@J8deG*x>%jh_-!}LegY@5lI?(7ZyCoc3nOpO?q?IlFF zJX8bkCbz5?)R%gO_-Qd6o5%yMrK!cs$$xn}?dZ)=e59J0Wuh~q)ZNU?l1YS*n4>LD zpAG*wUmO*L7Pdm*cBy4&W-67AA|QYld1(}HC9sQRu!YUst5NdYj|`xuPru4K*Y&cI>>W0FpS+>Q`{l`i?_Vo*AyHC;T+JU*@E~6Yi|dD;h=tyn&^Cx{ zs5jE#*ClP2JLpSI5Jnps_1>vS!)Ny57G_TBqW9^sRlCv3uJ+z_W7s13MY)+|3=6;% zE&ud36Tr=FEtUKJB8IPFlOo8xBvdZr|@R!POUgbx?DHV70=gcxC&w&+1d0U?*#%Ekb%5^|9+%4NKa2squ8!VFywb| zafJw~PZB}ko}19D_TcjIDUd-2)_1%qR^o5^K18Y=QlFpn{gZYzq-y30mVQC<*6g?r?jRR9-Z>jZEC?ObX8QZ7O1c1YT4v&3ACaWi!2Bjz<4?uL;O; z!-d@@&pu4q8Mu!8sveOKEpH@8>B(SO6sE1T7h^Ti_JvpZ(cEG?OK3$koBq>ISEHgM z#VJ=M+Nu^s@J6){e!j`8xK!bFBZSB?T*D$*A|55f9a8;(! zyC`EI3Ic+JAYf3^4U&ohlF}gE-Q6k*f`katp(5Sg-QCRw5$W!RyEZyA&N=^c?!DiS zpW+OA^X>P0-xbgEthFoVuq=R5tXHriyi8p`fTo zAo%$CPXdKVn_F5AmJ25^E;;RAtV@h%R9tUsjdd$lQagYRh1hHp1uAl^ysSOwKGPl- z_kDq#8J-f>E`Ji9fr#e|t{3$D^KAmXd}0vkN5o$^8N@6~j&CQO`qyNoe}$crb|ZCuYN)U*D=zbw(@+ zj3tg*W&dbvm?d334B-)pb%&KK$*15vWYs>GO3O&=w%>gH-c`0g%_=QPq4txD`m&9_ z^Tqmy9Occ;gA;a%!a9S7`m6z-5X-C>8H-vs@`Jd=+z+kiXg5(=pD5_5jo{aD+Fk** z&98d54HLcuH>ls;xj~vVx-n@?%Z@I!F2n13&BPB?E8@uy{dTLOL~ki zOn&-%_MPWt`Uc@Jd3#&YYB8yMT}}@6K6~Q5PCsM6c@8urR%|~IS*!`PO}fn(q?ZDYn~VrM znN;OmPOzMomiDpxhXOYJ6K!#mcH30as*c6lu`QeW`K|n~9yaKJpLmv0X>`uzk*S~F zZOfUZjyor{4GnrC2Y%70ls7Pznt*+a7h-gBWjxt+Cf=gChaon@%d%;I>;hVp^CUJT z4A18>)Pf@PiYmR4$}uDm48Wp$?tVFKD1#lb!&6(6!GiP>de&8ypTtAcWRqSS@Vs@d zTHASF7eyvM$QZ~$z1fp&mmicefYaTrZ6H43c?tzoW@alXa;at|^OWl96aR=VieX-? zN%J4px~uY6Eb9wkLk&UoegGPWjg;=Bx^R|fQq=kVH1u{ih*Zq%^Nzk5mSKVnxc+x#Vro_o% z-08H|^AV}b{#Etp`9J^(#~p0EUm%RQ7D^=r#ws_3+H->5FSfrAC0a4(<#9d~ni%71 z8-7x_?or9>elQexGV<0lE@<VxvS03PwCΠ8150`hnPGDN$jxVFw-hQ)RZ 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

t`G(sUJU91wj9zI#hwqa{{~K0WmQ| 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%0D-j83%#`DT&ya^*ghNO+r0_a3OYx!p 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


8dAM1n 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 F{|`o&i%$Rm diff --git a/docs/rust-setup.md b/docs/rust-setup.md index 2755966..00089ab 100644 --- a/docs/rust-setup.md +++ b/docs/rust-setup.md @@ -1,22 +1,18 @@ ---- -title: Installation ---- +# Installation -This guide is for reference only, please check the latest information on getting starting with Substrate -[here](https://docs.substrate.io/main-docs/install/). +This guide is for reference only, please check the latest information on getting started with Substrate [here](https://docs.substrate.io/main-docs/install/). -This page will guide you through the **2 steps** needed to prepare a computer for **Substrate** development. -Since Substrate is built with [the Rust programming language](https://www.rust-lang.org/), the first -thing you will need to do is prepare the computer for Rust development - these steps will vary based -on the computer's operating system. Once Rust is configured, you will use its toolchains to interact -with Rust projects; the commands for Rust's toolchains will be the same for all supported, -Unix-based operating systems. +This page will guide you through the **2 steps** needed to prepare a computer for **Substrate** development. Since +Substrate is built with [the Rust programming language](https://www.rust-lang.org/), the first thing you will need to do +is prepare the computer for Rust development - these steps will vary based on the computer's operating system. Once Rust +is configured, you will use its toolchains to interact with Rust projects; the commands for Rust's toolchains will be +the same for all supported, Unix-based operating systems. ## Build dependencies -Substrate development is easiest on Unix-based operating systems like macOS or Linux. The examples -in the [Substrate Docs](https://docs.substrate.io) use Unix-style terminals to demonstrate how to -interact with Substrate from the command line. +Substrate development is easiest on Unix-based operating systems like macOS or Linux. The examples in the [Substrate +Docs](https://docs.substrate.io) use Unix-style terminals to demonstrate how to interact with Substrate from the command +line. ### Ubuntu/Debian @@ -55,10 +51,9 @@ sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel ### macOS -> **Apple M1 ARM** -> If you have an Apple M1 ARM system on a chip, make sure that you have Apple Rosetta 2 -> installed through `softwareupdate --install-rosetta`. This is only needed to run the -> `protoc` tool during the build. The build itself and the target binaries would remain native. +> **Apple M1 ARM** If you have an Apple M1 ARM system on a chip, make sure that you have Apple Rosetta 2 installed +> through `softwareupdate --install-rosetta`. This is only needed to run the `protoc` tool during the build. The build +> itself and the target binaries would remain native. Open the Terminal application and execute the following commands: @@ -74,15 +69,15 @@ brew install openssl ### Windows **_PLEASE NOTE:_** Native Windows development of Substrate is _not_ very well supported! It is _highly_ -recommend to use [Windows Subsystem Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) +recommended to use [Windows Subsystem Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (WSL) and follow the instructions for [Ubuntu/Debian](#ubuntudebian). Please refer to the separate [guide for native Windows development](https://docs.substrate.io/main-docs/install/windows/). ## Rust developer environment -This guide uses installer and the `rustup` tool to manage the Rust toolchain. -First install and configure `rustup`: +This guide uses installer and the `rustup` tool to manage the Rust toolchain. First install and +configure `rustup`: ```bash # Install @@ -102,13 +97,13 @@ rustup target add wasm32-unknown-unknown --toolchain nightly ## Test your set-up -Now the best way to ensure that you have successfully prepared a computer for Substrate -development is to follow the steps in [our first Substrate tutorial](https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/). +Now the best way to ensure that you have successfully prepared a computer for Substrate development is to follow the +steps in [our first Substrate tutorial](https://docs.substrate.io/tutorials/v3/create-your-first-substrate-chain/). ## Troubleshooting Substrate builds -Sometimes you can't get the Substrate node template -to compile out of the box. Here are some tips to help you work through that. +Sometimes you can't get the Substrate node template to compile out of the box. Here are some tips to help you work +through that. ### Rust configuration check @@ -144,27 +139,27 @@ stable-x86_64-unknown-linux-gnu (default) rustc 1.50.0 (cb75ad5db 2021-02-10) ``` -As you can see above, the default toolchain is stable, and the -`nightly-x86_64-unknown-linux-gnu` toolchain as well as its `wasm32-unknown-unknown` target is installed. -You also see that `nightly-2020-10-06-x86_64-unknown-linux-gnu` is installed, but is not used unless explicitly defined as illustrated in the [specify your nightly version](#specifying-nightly-version) -section. +As you can see above, the default toolchain is stable, and the `nightly-x86_64-unknown-linux-gnu` toolchain as well as +its `wasm32-unknown-unknown` target is installed. You also see that `nightly-2020-10-06-x86_64-unknown-linux-gnu` is +installed, but is not used unless explicitly defined as illustrated in the [specify your nightly +version](#specifying-nightly-version) section. ### WebAssembly compilation -Substrate uses [WebAssembly](https://webassembly.org) (Wasm) to produce portable blockchain -runtimes. You will need to configure your Rust compiler to use -[`nightly` builds](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) to allow you to -compile Substrate runtime code to the Wasm target. +Substrate uses [WebAssembly](https://webassembly.org) (Wasm) to produce portable blockchain runtimes. You will need to +configure your Rust compiler to use [`nightly` builds](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html) to +allow you to compile Substrate runtime code to the Wasm target. > There are upstream issues in Rust that need to be resolved before all of Substrate can use the stable Rust toolchain. -> [This is our tracking issue](https://github.com/paritytech/substrate/issues/1252) if you're curious as to why and how this will be resolved. +> [This is our tracking issue](https://github.com/paritytech/substrate/issues/1252) if you're curious as to why and how +> this will be resolved. #### Latest nightly for Substrate `master` -Developers who are building Substrate _itself_ should always use the latest bug-free versions of -Rust stable and nightly. This is because the Substrate codebase follows the tip of Rust nightly, -which means that changes in Substrate often depend on upstream changes in the Rust nightly compiler. -To ensure your Rust compiler is always up to date, you should run: +Developers who are building Substrate _itself_ should always use the latest bug-free versions of Rust stable and +nightly. This is because the Substrate codebase follows the tip of Rust nightly, which means that changes in Substrate +often depend on upstream changes in the Rust nightly compiler. To ensure your Rust compiler is always up to date, you +should run: ```bash rustup update @@ -172,21 +167,19 @@ rustup update nightly rustup target add wasm32-unknown-unknown --toolchain nightly ``` -> NOTE: It may be necessary to occasionally rerun `rustup update` if a change in the upstream Substrate -> codebase depends on a new feature of the Rust compiler. When you do this, both your nightly -> and stable toolchains will be pulled to the most recent release, and for nightly, it is -> generally _not_ expected to compile WASM without error (although it very often does). -> Be sure to [specify your nightly version](#specifying-nightly-version) if you get WASM build errors -> from `rustup` and [downgrade nightly as needed](#downgrading-rust-nightly). +> NOTE: It may be necessary to occasionally rerun `rustup update` if a change in the upstream Substrate codebase depends +> on a new feature of the Rust compiler. When you do this, both your nightly and stable toolchains will be pulled to the +> most recent release, and for nightly, it is generally _not_ expected to compile WASM without error (although it very +> often does). Be sure to [specify your nightly version](#specifying-nightly-version) if you get WASM build errors from +> `rustup` and [downgrade nightly as needed](#downgrading-rust-nightly). #### Rust nightly toolchain -If you want to guarantee that your build works on your computer as you update Rust and other -dependencies, you should use a specific Rust nightly version that is known to be -compatible with the version of Substrate they are using; this version will vary from project to -project and different projects may use different mechanisms to communicate this version to -developers. For instance, the Polkadot client specifies this information in its -[release notes](https://github.com/paritytech/polkadot/releases). +If you want to guarantee that your build works on your computer as you update Rust and other dependencies, you should +use a specific Rust nightly version that is known to be compatible with the version of Substrate they are using; this +version will vary from project to project and different projects may use different mechanisms to communicate this +version to developers. For instance, the Polkadot client specifies this information in its [release +notes](https://github.com/paritytech/polkadot-sdk/releases). ```bash # Specify the specific nightly toolchain in the date below: @@ -203,20 +196,20 @@ rustup target add wasm32-unknown-unknown --toolchain nightly- ### Specifying nightly version -Use the `WASM_BUILD_TOOLCHAIN` environment variable to specify the Rust nightly version a Substrate -project should use for Wasm compilation: +Use the `WASM_BUILD_TOOLCHAIN` environment variable to specify the Rust nightly version a Substrate project should use +for Wasm compilation: ```bash WASM_BUILD_TOOLCHAIN=nightly- cargo build --release ``` -> Note that this only builds _the runtime_ with the specified nightly. The rest of project will be -> compiled with **your default toolchain**, i.e. the latest installed stable toolchain. +> Note that this only builds _the runtime_ with the specified nightly. The rest of project will be compiled with **your +> default toolchain**, i.e. the latest installed stable toolchain. ### Downgrading Rust nightly -If your computer is configured to use the latest Rust nightly and you would like to downgrade to a -specific nightly version, follow these steps: +If your computer is configured to use the latest Rust nightly and you would like to downgrade to a specific nightly +version, follow these steps: ```bash rustup uninstall nightly diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..60819f6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1678901627, + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1679262748, + "narHash": "sha256-DQCrrAFrkxijC6haUzOC5ZoFqpcv/tg2WxnyW3np1Cc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "60c1d71f2ba4c80178ec84523c2ca0801522e0a6", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..428efd0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,22 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + in + { + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + rustup + clang + protobuf + ]; + + LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; + }; + }); +} diff --git a/media/tanssi.png b/media/tanssi.png deleted file mode 100644 index 78ed939324dd555d6c7340c5619fa5d18655f684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114897 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 diff --git a/node/Cargo.toml b/node/Cargo.toml index 560c7a7..1faca74 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -1,138 +1,91 @@ [package] -name = "tanssi-node" -authors = { workspace = true } +name = "node-template" +description = "A solochain node template built with Substrate, part of Polkadot Sdk." +version = "0.0.0" +license = "MIT-0" +authors.workspace = true +homepage.workspace = true +repository.workspace = true +edition.workspace = true +publish = false + build = "build.rs" -description = "Tanssi node implementation" -edition = "2021" -license = "GPL-3.0-only" -version = "0.7.0" [lints] workspace = true -[dependencies] -async-io = { workspace = true } -async-trait = { workspace = true } -clap = { workspace = true, features = [ "derive" ] } -exit-future = { workspace = true } -flume = { workspace = true } -futures = { workspace = true } -jsonrpsee = { workspace = true, features = [ "server" ] } -log = { workspace = true } -parity-scale-codec = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -serde_json = { workspace = true } -tokio = { workspace = true } -tokio-util = { workspace = true } - -# Local -ccp-authorities-noting-inherent = { workspace = true, features = [ "std" ] } -dancebox-runtime = { workspace = true, features = [ "std" ] } -dp-slot-duration-runtime-api = { workspace = true } -flashbox-runtime = { workspace = true, features = [ "std" ] } -manual-xcm-rpc = { workspace = true } -node-common = { workspace = true } -pallet-author-noting-runtime-api = { workspace = true, features = [ "std" ] } -pallet-collator-assignment-runtime-api = { workspace = true, features = [ "std" ] } -pallet-configuration = { workspace = true, features = [ "std" ] } -pallet-registrar-runtime-api = { workspace = true, features = [ "std" ] } -services-payment-rpc = { workspace = true } -stream-payment-rpc = { workspace = true } -tp-author-noting-inherent = { workspace = true, features = [ "std" ] } -tp-container-chain-genesis-data = { workspace = true, features = [ "json", "std" ] } +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] -dc-orchestrator-chain-interface = { workspace = true } -tc-consensus = { workspace = true } +[dependencies] +clap = { version = "4.5.3", features = ["derive"] } +futures = { version = "0.3.30", features = ["thread-pool"] } +serde_json = { version = "1.0.114", default-features = true } +jsonrpsee = { version = "0.22", features = ["server"] } +# substrate client +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } -# Nimbus -nimbus-consensus = { workspace = true } -nimbus-primitives = { workspace = true, features = [ "std" ] } +# substrate primitives +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } -# Substrate -frame-benchmarking = { workspace = true } -frame-benchmarking-cli = { workspace = true } -sc-basic-authorship = { workspace = true } -sc-chain-spec = { workspace = true } -sc-cli = { workspace = true } -sc-client-api = { workspace = true } -sc-consensus = { workspace = true } -sc-consensus-aura = { workspace = true } -sc-consensus-manual-seal = { workspace = true } -sc-executor = { workspace = true } -sc-network = { workspace = true } -sc-network-common = { workspace = true } -sc-network-sync = { workspace = true } -sc-offchain = { workspace = true } -sc-rpc = { workspace = true } -sc-service = { workspace = true } -sc-sysinfo = { workspace = true } -sc-telemetry = { workspace = true } -sc-tracing = { workspace = true } -sc-transaction-pool = { workspace = true } -sc-transaction-pool-api = { workspace = true } -sp-api = { workspace = true, features = [ "std" ] } -sp-block-builder = { workspace = true } -sp-blockchain = { workspace = true } -sp-consensus = { workspace = true } +# frame and pallets +frame-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true, features = [ "std" ] } -sp-inherents = { workspace = true, features = [ "std" ] } -sp-io = { workspace = true, features = [ "std" ] } -sp-keystore = { workspace = true, features = [ "std" ] } -sp-offchain = { workspace = true, features = [ "std" ] } -sp-runtime = { workspace = true, features = [ "std" ] } -sp-session = { workspace = true, features = [ "std" ] } -sp-state-machine = { workspace = true, features = [ "std" ] } -sp-timestamp = { workspace = true, features = [ "std" ] } +# These dependencies are used for runtime benchmarking +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } -sp-transaction-pool = { workspace = true } -substrate-frame-rpc-system = { workspace = true } -substrate-prometheus-endpoint = { workspace = true } -try-runtime-cli = { workspace = true, optional = true } +# Local Dependencies +node-template-runtime = { path = "../runtime" } -# Polkadot -polkadot-cli = { workspace = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-primitives = { workspace = true } -polkadot-service = { workspace = true } +# CLI-specific dependencies +try-runtime-cli = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0", optional = true } -# Cumulus -cumulus-client-cli = { workspace = true } -cumulus-client-collator = { workspace = true } -cumulus-client-consensus-aura = { workspace = true } -cumulus-client-consensus-common = { workspace = true } -cumulus-client-consensus-proposer = { workspace = true } -cumulus-client-network = { workspace = true } -cumulus-client-parachain-inherent = { workspace = true } -cumulus-client-pov-recovery = { workspace = true } -cumulus-client-service = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-relay-chain-interface = { workspace = true } -[dev-dependencies] -sp-panic-handler = { workspace = true } [build-dependencies] -substrate-build-script-utils = { workspace = true } +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-v1.9.0" } [features] default = [] +# Dependencies that are only required if runtime benchmarking should be build. runtime-benchmarks = [ - "cumulus-primitives-core/runtime-benchmarks", - "dancebox-runtime/runtime-benchmarks", - "flashbox-runtime/runtime-benchmarks", "frame-benchmarking-cli/runtime-benchmarks", - "frame-benchmarking/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-configuration/runtime-benchmarks", - "polkadot-cli/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-primitives/runtime-benchmarks", - "polkadot-service/runtime-benchmarks", + "frame-system/runtime-benchmarks", "sc-service/runtime-benchmarks", + "node-template-runtime/runtime-benchmarks", "sp-runtime/runtime-benchmarks", ] -try-runtime = [ "dancebox-runtime/try-runtime", "flashbox-runtime/try-runtime", "nimbus-primitives/try-runtime", "pallet-configuration/try-runtime", "polkadot-cli/try-runtime", "polkadot-service/try-runtime", "sp-runtime/try-runtime", "try-runtime-cli/try-runtime" ] - -fast-runtime = [ "dancebox-runtime/fast-runtime", "flashbox-runtime/fast-runtime" ] +# Enable features that allow the runtime to be tried and debugged. Name might be subject to change +# in the near future. +try-runtime = [ + "frame-system/try-runtime", + "pallet-transaction-payment/try-runtime", + "node-template-runtime/try-runtime", + "sp-runtime/try-runtime", + "try-runtime-cli/try-runtime", +] diff --git a/node/build.rs b/node/build.rs index 74ead7d..e3bfe31 100644 --- a/node/build.rs +++ b/node/build.rs @@ -1,23 +1,7 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; fn main() { - generate_cargo_keys(); + generate_cargo_keys(); - rerun_if_git_head_changed(); + rerun_if_git_head_changed(); } diff --git a/node/src/benchmarking.rs b/node/src/benchmarking.rs new file mode 100644 index 0000000..6e29ad1 --- /dev/null +++ b/node/src/benchmarking.rs @@ -0,0 +1,161 @@ +//! Setup code for [`super::command`] which would otherwise bloat that module. +//! +//! Should only be used for benchmarking as it may break in other contexts. + +use crate::service::FullClient; + +use node_template_runtime as runtime; +use runtime::{AccountId, Balance, BalancesCall, SystemCall}; +use sc_cli::Result; +use sc_client_api::BlockBackend; +use sp_core::{Encode, Pair}; +use sp_inherents::{InherentData, InherentDataProvider}; +use sp_keyring::Sr25519Keyring; +use sp_runtime::{OpaqueExtrinsic, SaturatedConversion}; + +use std::{sync::Arc, time::Duration}; + +/// Generates extrinsics for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub struct RemarkBuilder { + client: Arc, +} + +impl RemarkBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc) -> Self { + Self { client } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for RemarkBuilder { + fn pallet(&self) -> &str { + "system" + } + + fn extrinsic(&self) -> &str { + "remark" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + SystemCall::remark { remark: vec![] }.into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Generates `Balances::TransferKeepAlive` extrinsics for the benchmarks. +/// +/// Note: Should only be used for benchmarking. +pub struct TransferKeepAliveBuilder { + client: Arc, + dest: AccountId, + value: Balance, +} + +impl TransferKeepAliveBuilder { + /// Creates a new [`Self`] from the given client. + pub fn new(client: Arc, dest: AccountId, value: Balance) -> Self { + Self { client, dest, value } + } +} + +impl frame_benchmarking_cli::ExtrinsicBuilder for TransferKeepAliveBuilder { + fn pallet(&self) -> &str { + "balances" + } + + fn extrinsic(&self) -> &str { + "transfer_keep_alive" + } + + fn build(&self, nonce: u32) -> std::result::Result { + let acc = Sr25519Keyring::Bob.pair(); + let extrinsic: OpaqueExtrinsic = create_benchmark_extrinsic( + self.client.as_ref(), + acc, + BalancesCall::transfer_keep_alive { dest: self.dest.clone().into(), value: self.value } + .into(), + nonce, + ) + .into(); + + Ok(extrinsic) + } +} + +/// Create a transaction using the given `call`. +/// +/// Note: Should only be used for benchmarking. +pub fn create_benchmark_extrinsic( + client: &FullClient, + sender: sp_core::sr25519::Pair, + call: runtime::RuntimeCall, + nonce: u32, +) -> runtime::UncheckedExtrinsic { + let genesis_hash = client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"); + let best_hash = client.chain_info().best_hash; + let best_block = client.chain_info().best_number; + + let period = runtime::BlockHashCount::get() + .checked_next_power_of_two() + .map(|c| c / 2) + .unwrap_or(2) as u64; + let extra: runtime::SignedExtra = ( + frame_system::CheckNonZeroSender::::new(), + frame_system::CheckSpecVersion::::new(), + frame_system::CheckTxVersion::::new(), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(sp_runtime::generic::Era::mortal( + period, + best_block.saturated_into(), + )), + frame_system::CheckNonce::::from(nonce), + frame_system::CheckWeight::::new(), + pallet_transaction_payment::ChargeTransactionPayment::::from(0), + ); + + let raw_payload = runtime::SignedPayload::from_raw( + call.clone(), + extra.clone(), + ( + (), + runtime::VERSION.spec_version, + runtime::VERSION.transaction_version, + genesis_hash, + best_hash, + (), + (), + (), + ), + ); + let signature = raw_payload.using_encoded(|e| sender.sign(e)); + + runtime::UncheckedExtrinsic::new_signed( + call, + sp_runtime::AccountId32::from(sender.public()).into(), + runtime::Signature::Sr25519(signature), + extra, + ) +} + +/// Generates inherent data for the `benchmark overhead` command. +/// +/// Note: Should only be used for benchmarking. +pub fn inherent_benchmark_data() -> Result { + let mut inherent_data = InherentData::new(); + let d = Duration::from_millis(0); + let timestamp = sp_timestamp::InherentDataProvider::new(d.into()); + + futures::executor::block_on(timestamp.provide_inherent_data(&mut inherent_data)) + .map_err(|e| format!("creating inherent data: {:?}", e))?; + Ok(inherent_data) +} diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs new file mode 100644 index 0000000..6e0d78f --- /dev/null +++ b/node/src/chain_spec.rs @@ -0,0 +1,117 @@ +use node_template_runtime::{AccountId, RuntimeGenesisConfig, Signature, WASM_BINARY}; +use sc_service::ChainType; +use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_consensus_grandpa::AuthorityId as GrandpaId; +use sp_core::{sr25519, Pair, Public}; +use sp_runtime::traits::{IdentifyAccount, Verify}; + +// The URL for the telemetry server. +// const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; + +/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. +pub type ChainSpec = sc_service::GenericChainSpec; + +/// Generate a crypto pair from seed. +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +type AccountPublic = ::Signer; + +/// Generate an account ID from seed. +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Generate an Aura authority key. +pub fn authority_keys_from_seed(s: &str) -> (AuraId, GrandpaId) { + (get_from_seed::(s), get_from_seed::(s)) +} + +pub fn development_config() -> Result { + Ok(ChainSpec::builder( + WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?, + None, + ) + .with_name("Development") + .with_id("dev") + .with_chain_type(ChainType::Development) + .with_genesis_config_patch(testnet_genesis( + // Initial PoA authorities + vec![authority_keys_from_seed("Alice")], + // Sudo account + get_account_id_from_seed::("Alice"), + // Pre-funded accounts + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + ], + true, + )) + .build()) +} + +pub fn local_testnet_config() -> Result { + Ok(ChainSpec::builder( + WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?, + None, + ) + .with_name("Local Testnet") + .with_id("local_testnet") + .with_chain_type(ChainType::Local) + .with_genesis_config_patch(testnet_genesis( + // Initial PoA authorities + vec![authority_keys_from_seed("Alice"), authority_keys_from_seed("Bob")], + // Sudo account + get_account_id_from_seed::("Alice"), + // Pre-funded accounts + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + true, + )) + .build()) +} + +/// Configure initial storage state for FRAME modules. +fn testnet_genesis( + initial_authorities: Vec<(AuraId, GrandpaId)>, + root_key: AccountId, + endowed_accounts: Vec, + _enable_println: bool, +) -> serde_json::Value { + serde_json::json!({ + "balances": { + // Configure endowed accounts with initial balance of 1 << 60. + "balances": endowed_accounts.iter().cloned().map(|k| (k, 1u64 << 60)).collect::>(), + }, + "aura": { + "authorities": initial_authorities.iter().map(|x| (x.0.clone())).collect::>(), + }, + "grandpa": { + "authorities": initial_authorities.iter().map(|x| (x.1.clone(), 1)).collect::>(), + }, + "sudo": { + // Assign network admin rights. + "key": Some(root_key), + }, + }) +} diff --git a/node/src/chain_spec/dancebox.rs b/node/src/chain_spec/dancebox.rs deleted file mode 100644 index 1d1c926..0000000 --- a/node/src/chain_spec/dancebox.rs +++ /dev/null @@ -1,290 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::chain_spec::{ - account_ids, get_account_id_from_seed, invulnerables_from_seeds, Extensions, - }, - cumulus_primitives_core::ParaId, - dancebox_runtime::{ - prod_or_fast, AccountId, DataPreserversConfig, MaintenanceModeConfig, MigrationsConfig, - PolkadotXcmConfig, RegistrarConfig, ServicesPaymentConfig, SudoConfig, - }, - nimbus_primitives::NimbusId, - pallet_configuration::HostConfiguration, - sc_service::ChainType, - sp_core::sr25519, - sp_runtime::{traits::Get, Perbill}, - tp_container_chain_genesis_data::{ - json::container_chain_genesis_data_from_path, ContainerChainGenesisData, - }, -}; - -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type ChainSpec = - sc_service::GenericChainSpec; - -/// Generate the session keys from individual elements. -/// -/// The input must be a tuple of individual keys (a single arg for now since we have just one key). -pub fn template_session_keys(keys: NimbusId) -> dancebox_runtime::SessionKeys { - dancebox_runtime::SessionKeys { nimbus: keys } -} - -pub fn development_config( - para_id: ParaId, - container_chains: Vec, - mock_container_chains: Vec, - invulnerables: Vec, -) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "DANCE".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - - ChainSpec::builder( - dancebox_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Dancebox Development Testnet") - .with_id("dancebox_dev") - .with_chain_type(ChainType::Development) - .with_genesis_config(testnet_genesis( - // initial collators. - invulnerables_from_seeds(invulnerables.iter()), - account_ids(&[ - "Alice", - "Bob", - "Charlie", - "Dave", - "Eve", - "Ferdie", - "Alice//stash", - "Bob//stash", - "Charlie//stash", - "Dave//stash", - "Eve//stash", - "Ferdie//stash", - ]), - para_id, - get_account_id_from_seed::("Alice"), - &container_chains, - &mock_container_chains, - pallet_configuration::GenesisConfig { - config: HostConfiguration { - max_collators: 100u32, - min_orchestrator_collators: 1u32, - max_orchestrator_collators: 1u32, - collators_per_container: 2u32, - full_rotation_period: prod_or_fast!(24u32, 5u32), - collators_per_parathread: 1, - parathreads_per_collator: 1, - target_container_chain_fullness: Perbill::from_percent(80), - }, - ..Default::default() - }, - )) - .with_properties(properties) - .build() -} - -pub fn local_dancebox_config( - para_id: ParaId, - container_chains: Vec, - mock_container_chains: Vec, - invulnerables: Vec, -) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "DANCE".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - - ChainSpec::builder( - dancebox_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Dancebox Local Testnet") - .with_id("dancebox_local") - .with_chain_type(ChainType::Local) - .with_genesis_config(testnet_genesis( - // initial collators. - invulnerables_from_seeds(invulnerables.iter()), - account_ids(&[ - "Alice", - "Bob", - "Charlie", - "Dave", - "Eve", - "Ferdie", - "Alice//stash", - "Bob//stash", - "Charlie//stash", - "Dave//stash", - "Eve//stash", - "Ferdie//stash", - ]), - para_id, - get_account_id_from_seed::("Alice"), - &container_chains, - &mock_container_chains, - pallet_configuration::GenesisConfig { - config: HostConfiguration { - max_collators: 100u32, - min_orchestrator_collators: 2u32, - max_orchestrator_collators: 5u32, - collators_per_container: 2u32, - full_rotation_period: prod_or_fast!(24u32, 5u32), - collators_per_parathread: 1, - parathreads_per_collator: 1, - target_container_chain_fullness: Perbill::from_percent(80), - }, - ..Default::default() - }, - )) - .with_properties(properties) - .with_protocol_id("orchestrator") - .build() -} - -fn testnet_genesis( - invulnerables: Vec<(AccountId, NimbusId)>, - endowed_accounts: Vec, - id: ParaId, - root_key: AccountId, - container_chains: &[String], - mock_container_chains: &[ParaId], - configuration: pallet_configuration::GenesisConfig, -) -> serde_json::Value { - let para_ids: Vec<_> = container_chains - .iter() - .map(|x| { - container_chain_genesis_data_from_path(x).unwrap_or_else(|e| { - panic!( - "Failed to build genesis data for container chain {:?}: {}", - x, e - ) - }) - }) - .chain( - mock_container_chains - .iter() - .map(|x| (*x, mock_container_chain_genesis_data(*x), vec![])), - ) - .collect(); - // Assign 1000 block credits to all container chains registered in genesis - // Assign 100 collator assignment credits to all container chains registered in genesis - let para_id_credits: Vec<_> = para_ids - .iter() - .map(|(para_id, _genesis_data, _boot_nodes)| (*para_id, 1000, 100).into()) - .collect(); - let para_id_boot_nodes: Vec<_> = para_ids - .iter() - .map(|(para_id, _genesis_data, boot_nodes)| (*para_id, boot_nodes.clone())) - .collect(); - let para_ids: Vec<_> = para_ids - .into_iter() - .map(|(para_id, genesis_data, _boot_nodes)| (para_id, genesis_data)) - .collect(); - - let accounts_with_ed = vec![ - dancebox_runtime::StakingAccount::get(), - dancebox_runtime::ParachainBondAccount::get(), - dancebox_runtime::PendingRewardsAccount::get(), - ]; - let g = dancebox_runtime::RuntimeGenesisConfig { - system: Default::default(), - balances: dancebox_runtime::BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 60)) - .chain( - accounts_with_ed - .iter() - .cloned() - .map(|k| (k, dancebox_runtime::EXISTENTIAL_DEPOSIT)), - ) - .collect(), - }, - parachain_info: dancebox_runtime::ParachainInfoConfig { - parachain_id: id, - ..Default::default() - }, - invulnerables: dancebox_runtime::InvulnerablesConfig { - invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), - }, - session: dancebox_runtime::SessionConfig { - keys: invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - template_session_keys(aura), // session keys - ) - }) - .collect(), - }, - parachain_system: Default::default(), - configuration, - data_preservers: DataPreserversConfig { - para_id_boot_nodes, - ..Default::default() - }, - registrar: RegistrarConfig { para_ids }, - services_payment: ServicesPaymentConfig { para_id_credits }, - sudo: SudoConfig { - key: Some(root_key), - }, - migrations: MigrationsConfig { - ..Default::default() - }, - maintenance_mode: MaintenanceModeConfig { - start_in_maintenance_mode: false, - ..Default::default() - }, - // This should initialize it to whatever we have set in the pallet - polkadot_xcm: PolkadotXcmConfig::default(), - transaction_payment: Default::default(), - tx_pause: Default::default(), - treasury: Default::default(), - }; - - serde_json::to_value(g).unwrap() -} - -fn mock_container_chain_genesis_data>( - para_id: ParaId, -) -> ContainerChainGenesisData { - ContainerChainGenesisData { - storage: vec![], - name: format!("Container Chain {}", para_id).into(), - id: format!("container-chain-{}", para_id).into(), - fork_id: None, - extensions: vec![], - properties: Default::default(), - } -} diff --git a/node/src/chain_spec/flashbox.rs b/node/src/chain_spec/flashbox.rs deleted file mode 100644 index 4859355..0000000 --- a/node/src/chain_spec/flashbox.rs +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::chain_spec::{ - account_ids, get_account_id_from_seed, invulnerables_from_seeds, Extensions, - }, - cumulus_primitives_core::ParaId, - flashbox_runtime::{ - AccountId, DataPreserversConfig, MaintenanceModeConfig, MigrationsConfig, RegistrarConfig, - ServicesPaymentConfig, SudoConfig, - }, - nimbus_primitives::NimbusId, - pallet_configuration::HostConfiguration, - sc_service::ChainType, - sp_core::sr25519, - sp_runtime::{traits::Get, Perbill}, - tp_container_chain_genesis_data::{ - json::container_chain_genesis_data_from_path, ContainerChainGenesisData, - }, -}; - -/// Specialized `ChainSpec` for the normal parachain runtime. -pub type ChainSpec = - sc_service::GenericChainSpec; - -/// Generate the session keys from individual elements. -/// -/// The input must be a tuple of individual keys (a single arg for now since we have just one key). -pub fn template_session_keys(keys: NimbusId) -> flashbox_runtime::SessionKeys { - flashbox_runtime::SessionKeys { nimbus: keys } -} - -pub fn development_config( - para_id: ParaId, - container_chains: Vec, - mock_container_chains: Vec, - invulnerables: Vec, -) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "FLASH".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - - ChainSpec::builder( - flashbox_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Flashbox Development Testnet") - .with_id("flashbox_dev") - .with_chain_type(ChainType::Development) - .with_genesis_config(testnet_genesis( - // initial collators. - invulnerables_from_seeds(invulnerables.iter()), - account_ids(&[ - "Alice", - "Bob", - "Charlie", - "Dave", - "Eve", - "Ferdie", - "Alice//stash", - "Bob//stash", - "Charlie//stash", - "Dave//stash", - "Eve//stash", - "Ferdie//stash", - ]), - para_id, - get_account_id_from_seed::("Alice"), - &container_chains, - &mock_container_chains, - pallet_configuration::GenesisConfig { - config: HostConfiguration { - max_collators: 100u32, - min_orchestrator_collators: 1u32, - max_orchestrator_collators: 1u32, - collators_per_container: 2u32, - full_rotation_period: 0, - collators_per_parathread: 1, - parathreads_per_collator: 1, - target_container_chain_fullness: Perbill::from_percent(80), - }, - ..Default::default() - }, - )) - .with_properties(properties) - .build() -} - -pub fn local_flashbox_config( - para_id: ParaId, - container_chains: Vec, - mock_container_chains: Vec, - invulnerables: Vec, -) -> ChainSpec { - // Give your base currency a unit name and decimal places - let mut properties = sc_chain_spec::Properties::new(); - properties.insert("tokenSymbol".into(), "FLASH".into()); - properties.insert("tokenDecimals".into(), 12.into()); - properties.insert("ss58Format".into(), 42.into()); - properties.insert("isEthereum".into(), false.into()); - - ChainSpec::builder( - flashbox_runtime::WASM_BINARY.expect("WASM binary was not built, please build it!"), - Extensions { - relay_chain: "rococo-local".into(), // You MUST set this to the correct network! - para_id: para_id.into(), - }, - ) - .with_name("Flashbox Local Testnet") - .with_id("flashbox_local") - .with_chain_type(ChainType::Local) - .with_genesis_config(testnet_genesis( - // initial collators. - invulnerables_from_seeds(invulnerables.iter()), - account_ids(&[ - "Alice", - "Bob", - "Charlie", - "Dave", - "Eve", - "Ferdie", - "Alice//stash", - "Bob//stash", - "Charlie//stash", - "Dave//stash", - "Eve//stash", - "Ferdie//stash", - ]), - para_id, - get_account_id_from_seed::("Alice"), - &container_chains, - &mock_container_chains, - pallet_configuration::GenesisConfig { - config: HostConfiguration { - max_collators: 100u32, - min_orchestrator_collators: 2u32, - max_orchestrator_collators: 5u32, - collators_per_container: 2u32, - full_rotation_period: 0, - collators_per_parathread: 1, - parathreads_per_collator: 1, - target_container_chain_fullness: Perbill::from_percent(80), - }, - ..Default::default() - }, - )) - .with_properties(properties) - .with_protocol_id("orchestrator") - .build() -} - -fn testnet_genesis( - invulnerables: Vec<(AccountId, NimbusId)>, - endowed_accounts: Vec, - id: ParaId, - root_key: AccountId, - container_chains: &[String], - mock_container_chains: &[ParaId], - configuration: pallet_configuration::GenesisConfig, -) -> serde_json::Value { - let para_ids: Vec<_> = container_chains - .iter() - .map(|x| { - container_chain_genesis_data_from_path(x).unwrap_or_else(|e| { - panic!( - "Failed to build genesis data for container chain {:?}: {}", - x, e - ) - }) - }) - .chain( - mock_container_chains - .iter() - .map(|x| (*x, mock_container_chain_genesis_data(*x), vec![])), - ) - .collect(); - // Assign 1000 block credits to all container chains registered in genesis - // Assign 100 collator assignment credits to all container chains registered in genesis - let para_id_credits: Vec<_> = para_ids - .iter() - .map(|(para_id, _genesis_data, _boot_nodes)| (*para_id, 1000, 100).into()) - .collect(); - let para_id_boot_nodes: Vec<_> = para_ids - .iter() - .map(|(para_id, _genesis_data, boot_nodes)| (*para_id, boot_nodes.clone())) - .collect(); - let para_ids: Vec<_> = para_ids - .into_iter() - .map(|(para_id, genesis_data, _boot_nodes)| (para_id, genesis_data)) - .collect(); - - let accounts_with_ed = vec![ - flashbox_runtime::StakingAccount::get(), - flashbox_runtime::ParachainBondAccount::get(), - flashbox_runtime::PendingRewardsAccount::get(), - ]; - let g = flashbox_runtime::RuntimeGenesisConfig { - system: Default::default(), - balances: flashbox_runtime::BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, 1 << 60)) - .chain( - accounts_with_ed - .iter() - .cloned() - .map(|k| (k, flashbox_runtime::EXISTENTIAL_DEPOSIT)), - ) - .collect(), - }, - parachain_info: flashbox_runtime::ParachainInfoConfig { - parachain_id: id, - ..Default::default() - }, - invulnerables: flashbox_runtime::InvulnerablesConfig { - invulnerables: invulnerables.iter().cloned().map(|(acc, _)| acc).collect(), - }, - session: flashbox_runtime::SessionConfig { - keys: invulnerables - .into_iter() - .map(|(acc, aura)| { - ( - acc.clone(), // account id - acc, // validator id - template_session_keys(aura), // session keys - ) - }) - .collect(), - }, - parachain_system: Default::default(), - configuration, - data_preservers: DataPreserversConfig { - para_id_boot_nodes, - ..Default::default() - }, - registrar: RegistrarConfig { para_ids }, - services_payment: ServicesPaymentConfig { para_id_credits }, - sudo: SudoConfig { - key: Some(root_key), - }, - migrations: MigrationsConfig { - ..Default::default() - }, - maintenance_mode: MaintenanceModeConfig { - start_in_maintenance_mode: false, - ..Default::default() - }, - transaction_payment: Default::default(), - tx_pause: Default::default(), - treasury: Default::default(), - }; - - serde_json::to_value(g).unwrap() -} - -fn mock_container_chain_genesis_data>( - para_id: ParaId, -) -> ContainerChainGenesisData { - ContainerChainGenesisData { - storage: vec![], - name: format!("Container Chain {}", para_id).into(), - id: format!("container-chain-{}", para_id).into(), - fork_id: None, - extensions: vec![], - properties: Default::default(), - } -} diff --git a/node/src/chain_spec/mod.rs b/node/src/chain_spec/mod.rs deleted file mode 100644 index 6444596..0000000 --- a/node/src/chain_spec/mod.rs +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - dancebox_runtime::{AccountId, Signature}, - nimbus_primitives::NimbusId, - sc_chain_spec::{ChainSpecExtension, ChainSpecGroup}, - serde::{Deserialize, Serialize}, - sp_core::{sr25519, Pair, Public}, - sp_runtime::traits::{IdentifyAccount, Verify}, - std::collections::BTreeMap, -}; - -pub mod dancebox; -pub mod flashbox; - -/// Specialized `ChainSpec` for container chains that only allows raw genesis format. -pub type RawChainSpec = sc_service::GenericChainSpec; - -/// Helper type that implements the traits needed to be used as a "GenesisConfig", -/// but whose implementation panics because we only expect it to be used with raw ChainSpecs, -/// so it will never be serialized or deserialized. -/// This is because container chains must use raw chain spec files where the "genesis" -/// field only has one field: "raw". -pub struct RawGenesisConfig { - pub storage_raw: BTreeMap, Vec>, -} - -impl Serialize for RawGenesisConfig { - fn serialize(&self, _serializer: S) -> Result - where - S: serde::Serializer, - { - panic!("RawGenesisConfigDummy should never be serialized") - } -} - -impl<'de> Deserialize<'de> for RawGenesisConfig { - fn deserialize(_deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - panic!("Attempted to read a non-raw ContainerChain ChainSpec.\nHelp: add `--raw` flag to `build-spec` command to generate a raw chain spec") - } -} - -impl sp_runtime::BuildStorage for RawGenesisConfig { - fn assimilate_storage(&self, storage: &mut sp_core::storage::Storage) -> Result<(), String> { - storage - .top - .extend(self.storage_raw.iter().map(|(k, v)| (k.clone(), v.clone()))); - - Ok(()) - } -} - -/// Helper function to generate a crypto pair from seed -pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() -} - -/// The extensions for the [`ChainSpec`]. -#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)] -#[serde(deny_unknown_fields)] -pub struct Extensions { - /// The relay chain of the Parachain. - pub relay_chain: String, - /// The id of the Parachain. - pub para_id: u32, -} - -impl Extensions { - /// Try to get the extension from the given `ChainSpec`. - pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> { - sc_chain_spec::get_extension(chain_spec.extensions()) - } -} - -type AccountPublic = ::Signer; - -/// Generate collator keys from seed. -/// -/// This function's return type must always match the session keys of the chain in tuple format. -pub fn get_collator_keys_from_seed(seed: &str) -> NimbusId { - get_from_seed::(seed) -} - -/// Helper function to generate an account ID from seed -pub fn get_account_id_from_seed(seed: &str) -> AccountId -where - AccountPublic: From<::Public>, -{ - AccountPublic::from(get_from_seed::(seed)).into_account() -} - -/// Helper function to turn a list of names into a list of `(AccountId, NimbusId)` -pub fn invulnerables_from_seeds, I: Iterator>( - names: I, -) -> Vec<(AccountId, NimbusId)> { - names - .map(|name| { - let name = name.as_ref(); - ( - get_account_id_from_seed::(name), - get_collator_keys_from_seed(name), - ) - }) - .collect() -} - -/// Helper function to turn a list of names into a list of `AccountId` -pub fn account_ids(names: &[&str]) -> Vec { - names - .iter() - .map(|name| get_account_id_from_seed::(name)) - .collect() -} diff --git a/node/src/cli.rs b/node/src/cli.rs index b4f1399..7f1b67b 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -1,397 +1,51 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::chain_spec::RawGenesisConfig, - node_common::service::Sealing, - pallet_registrar_runtime_api::ContainerChainGenesisData, - sc_chain_spec::ChainSpec, - sc_cli::{CliConfiguration, NodeKeyParams, SharedParams}, - sc_network::config::MultiaddrWithPeerId, - sp_runtime::{traits::Get, Storage}, - std::{collections::BTreeMap, path::PathBuf}, - tp_container_chain_genesis_data::json::properties_to_map, -}; - -/// Sub-commands supported by the collator. -#[derive(Debug, clap::Subcommand)] -#[allow(clippy::large_enum_variant)] -pub enum Subcommand { - /// Build a chain specification. - BuildSpec(BuildSpecCmd), - - /// Validate blocks. - CheckBlock(sc_cli::CheckBlockCmd), - - /// Export blocks. - ExportBlocks(sc_cli::ExportBlocksCmd), - - /// Export the state of a given block into a chain spec. - ExportState(sc_cli::ExportStateCmd), - - /// Import blocks. - ImportBlocks(sc_cli::ImportBlocksCmd), - - /// Revert the chain to a previous state. - Revert(sc_cli::RevertCmd), - - /// Remove the whole chain. - PurgeChain(cumulus_client_cli::PurgeChainCmd), - - /// Export the genesis state of the parachain. - #[command(alias = "export-genesis-state")] - ExportGenesisHead(cumulus_client_cli::ExportGenesisHeadCommand), - - /// Export the genesis wasm of the parachain. - ExportGenesisWasm(ExportGenesisWasmCommand), - - /// Sub-commands concerned with benchmarking. - /// The pallet benchmarking moved to the `pallet` sub-command. - #[command(subcommand)] - Benchmark(frame_benchmarking_cli::BenchmarkCmd), - - /// Try some testing command against a specified runtime state. - #[cfg(feature = "try-runtime")] - TryRuntime(try_runtime_cli::TryRuntimeCmd), - - /// Errors since the binary was not build with `--features try-runtime`. - #[cfg(not(feature = "try-runtime"))] - TryRuntime, - - /// Key management cli utilities - #[command(subcommand)] - Key(KeyCmd), - - /// Precompile the WASM runtime into native code - PrecompileWasm(sc_cli::PrecompileWasmCmd), -} - -/// The `build-spec` command used to build a specification. -#[derive(Debug, Clone, clap::Parser)] -pub struct BuildSpecCmd { - #[clap(flatten)] - pub base: sc_cli::BuildSpecCmd, - - /// Id of the parachain this spec is for. Note that this overrides the `--chain` param. - #[arg(long)] - pub parachain_id: Option, - - /// List of container chain chain spec paths to add to genesis. - #[arg(long)] - pub add_container_chain: Option>, - - /// List of container chain chain spec mocks to add to genesis. - #[arg(long)] - pub mock_container_chain: Option>, - - /// List of invulnerable collators to write to pallet_invulnerables genesis. - #[arg(long)] - pub invulnerable: Option>, -} - -impl CliConfiguration for BuildSpecCmd { - fn shared_params(&self) -> &SharedParams { - &self.base.shared_params - } - - fn node_key_params(&self) -> Option<&NodeKeyParams> { - Some(&self.base.node_key_params) - } -} - -/// Command for exporting the genesis wasm file. -#[derive(Debug, clap::Parser)] -pub struct ExportGenesisWasmCommand { - /// Output file name or stdout if unspecified. - pub output: Option, - - /// Write output in binary. Default is to write in hex. - #[arg(short, long)] - pub raw: bool, - - /// The name of the chain for that the genesis wasm file should be exported. - #[arg(long)] - pub chain: Option, -} - -#[derive(Debug, clap::Parser)] -#[group(skip)] -pub struct RunCmd { - #[clap(flatten)] - pub base: cumulus_client_cli::RunCmd, - - /// Enable the development service to run without a backing relay chain - #[arg(long)] - pub dev_service: bool, - - /// When blocks should be sealed in the dev service. - /// - /// Options are "instant", "manual", or timer interval in milliseconds - #[arg(long, default_value = "instant")] - pub sealing: Sealing, - - /// Id of the parachain this collator collates for. - #[arg(long)] - pub parachain_id: Option, -} - -impl std::ops::Deref for RunCmd { - type Target = cumulus_client_cli::RunCmd; - - fn deref(&self) -> &Self::Target { - &self.base - } -} - -#[derive(Debug, clap::Subcommand)] -pub enum KeyCmd { - #[command(flatten)] - BaseCli(sc_cli::KeySubcommand), -} - -impl KeyCmd { - /// run the key subcommands - pub fn run(&self, cli: &C) -> Result<(), sc_cli::Error> { - match self { - KeyCmd::BaseCli(cmd) => cmd.run(cli), - } - } -} +use sc_cli::RunCmd; #[derive(Debug, clap::Parser)] -#[command( - propagate_version = true, - args_conflicts_with_subcommands = true, - subcommand_negates_reqs = true -)] pub struct Cli { - #[command(subcommand)] - pub subcommand: Option, - - #[command(flatten)] - pub run: RunCmd, - - /// Disable automatic hardware benchmarks. - /// - /// By default these benchmarks are automatically ran at startup and measure - /// the CPU speed, the memory bandwidth and the disk speed. - /// - /// The results are then printed out in the logs, and also sent as part of - /// telemetry, if telemetry is enabled. - #[arg(long)] - pub no_hardware_benchmarks: bool, - - /// Optional parachain id that should be used to build chain spec. - #[arg(long)] - pub para_id: Option, - - /// Relay chain arguments, optionally followed by "--" and orchestrator chain arguments - #[arg(raw = true)] - extra_args: Vec, -} - -impl Cli { - pub fn relaychain_args(&self) -> &[String] { - let (relay_chain_args, _) = self.split_extra_args_at_first_dashdash(); - - relay_chain_args - } - - pub fn container_chain_args(&self) -> &[String] { - let (_, container_chain_args) = self.split_extra_args_at_first_dashdash(); - - container_chain_args - } - - fn split_extra_args_at_first_dashdash(&self) -> (&[String], &[String]) { - let index_of_dashdash = self.extra_args.iter().position(|x| *x == "--"); + #[command(subcommand)] + pub subcommand: Option, - if let Some(i) = index_of_dashdash { - let (container_chain_args, extra_extra) = self.extra_args.split_at(i); - (&extra_extra[1..], container_chain_args) - } else { - // Only relay chain args - (&self.extra_args, &[]) - } - } + #[clap(flatten)] + pub run: RunCmd, } -#[derive(Debug)] -pub struct RelayChainCli { - /// The actual relay chain cli object. - pub base: polkadot_cli::RunCmd, - - /// Optional chain id that should be passed to the relay chain. - pub chain_id: Option, - - /// The base path that should be used by the relay chain. - pub base_path: PathBuf, -} - -impl RelayChainCli { - /// Parse the relay chain CLI parameters using the para chain `Configuration`. - pub fn new<'a>( - para_config: &sc_service::Configuration, - relay_chain_args: impl Iterator, - ) -> Self { - let extension = crate::chain_spec::Extensions::try_get(&*para_config.chain_spec); - let chain_id = extension.map(|e| e.relay_chain.clone()); - let base_path = para_config.base_path.path().join("polkadot"); - - Self { - base_path, - chain_id, - base: clap::Parser::parse_from(relay_chain_args), - } - } -} - -/// The `run` command used to run a container chain node. -#[derive(Debug, clap::Parser, Clone)] -#[group(skip)] -pub struct ContainerChainRunCmd { - /// The cumulus RunCmd inherits from sc_cli's - #[command(flatten)] - pub base: sc_cli::RunCmd, - - /// Run node as collator. - /// - /// Note that this is the same as running with `--validator`. - #[arg(long, conflicts_with = "validator")] - pub collator: bool, - - /// Optional container chain para id that should be used to build chain spec. - #[arg(long)] - pub para_id: Option, - - /// Keep container-chain db after changing collator assignments - #[arg(long)] - pub keep_db: bool, -} - -#[derive(Debug)] -pub struct ContainerChainCli { - /// The actual container chain cli object. - pub base: ContainerChainRunCmd, - - /// The base path that should be used by the container chain. - pub base_path: PathBuf, - - /// The ChainSpecs that this struct can initialize. This starts empty and gets filled - /// by calling preload_chain_spec_file. - pub preloaded_chain_spec: Option>, -} - -impl Clone for ContainerChainCli { - fn clone(&self) -> Self { - Self { - base: self.base.clone(), - base_path: self.base_path.clone(), - preloaded_chain_spec: self.preloaded_chain_spec.as_ref().map(|x| x.cloned_box()), - } - } -} +#[derive(Debug, clap::Subcommand)] +#[allow(clippy::large_enum_variant)] +pub enum Subcommand { + /// Key management cli utilities + #[command(subcommand)] + Key(sc_cli::KeySubcommand), -impl ContainerChainCli { - /// Parse the container chain CLI parameters using the para chain `Configuration`. - pub fn new<'a>( - para_config: &sc_service::Configuration, - container_chain_args: impl Iterator, - ) -> Self { - let base_path = para_config.base_path.path().join("containers"); + /// Build a chain specification. + BuildSpec(sc_cli::BuildSpecCmd), - Self { - base_path, - base: clap::Parser::parse_from(container_chain_args), - preloaded_chain_spec: None, - } - } + /// Validate blocks. + CheckBlock(sc_cli::CheckBlockCmd), - pub fn chain_spec_from_genesis_data>( - para_id: u32, - genesis_data: ContainerChainGenesisData, - chain_type: sc_chain_spec::ChainType, - relay_chain: String, - boot_nodes: Vec, - ) -> Result { - let name = String::from_utf8(genesis_data.name).map_err(|_e| "Invalid name".to_string())?; - let id: String = - String::from_utf8(genesis_data.id).map_err(|_e| "Invalid id".to_string())?; - let storage_raw: BTreeMap<_, _> = - genesis_data.storage.into_iter().map(|x| x.into()).collect(); - let protocol_id = format!("container-chain-{}", para_id); - let properties = properties_to_map(&genesis_data.properties) - .map_err(|e| format!("Invalid properties: {}", e))?; - let extensions = crate::chain_spec::Extensions { - relay_chain, - para_id, - }; - let raw_genesis_config = RawGenesisConfig { - storage_raw: storage_raw.clone(), - }; + /// Export blocks. + ExportBlocks(sc_cli::ExportBlocksCmd), - let chain_spec = crate::chain_spec::RawChainSpec::builder( - // This code is not used, we override it in `set_storage` below - &[], - // TODO: what to do with extensions? We are hardcoding the relay_chain and the para_id, any - // other extensions are being ignored - extensions, - ) - .with_name(&name) - .with_id(&id) - .with_chain_type(chain_type) - .with_properties(properties) - .with_boot_nodes(boot_nodes) - .with_protocol_id(&protocol_id); + /// Export the state of a given block into a chain spec. + ExportState(sc_cli::ExportStateCmd), - let chain_spec = if let Some(fork_id) = genesis_data.fork_id { - let fork_id_string = - String::from_utf8(fork_id).map_err(|_e| "Invalid fork_id".to_string())?; - chain_spec.with_fork_id(&fork_id_string) - } else { - chain_spec - }; + /// Import blocks. + ImportBlocks(sc_cli::ImportBlocksCmd), - let mut chain_spec = chain_spec.build(); + /// Remove the whole chain. + PurgeChain(sc_cli::PurgeChainCmd), - chain_spec.set_storage(Storage { - top: raw_genesis_config.storage_raw, - children_default: Default::default(), - }); + /// Revert the chain to a previous state. + Revert(sc_cli::RevertCmd), - Ok(chain_spec) - } + /// Sub-commands concerned with benchmarking. + #[command(subcommand)] + Benchmark(frame_benchmarking_cli::BenchmarkCmd), - pub fn preload_chain_spec_from_genesis_data>( - &mut self, - para_id: u32, - genesis_data: ContainerChainGenesisData, - chain_type: sc_chain_spec::ChainType, - relay_chain: String, - boot_nodes: Vec, - ) -> Result<(), String> { - let chain_spec = Self::chain_spec_from_genesis_data( - para_id, - genesis_data, - chain_type, - relay_chain, - boot_nodes, - )?; - self.preloaded_chain_spec = Some(Box::new(chain_spec)); + /// Try-runtime has migrated to a standalone CLI + /// (). The subcommand exists as a stub and + /// deprecation notice. It will be removed entirely some time after January 2024. + TryRuntime, - Ok(()) - } + /// Db meta columns information. + ChainInfo(sc_cli::ChainInfoCmd), } diff --git a/node/src/command.rs b/node/src/command.rs index da38555..997ae96 100644 --- a/node/src/command.rs +++ b/node/src/command.rs @@ -1,766 +1,190 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::{ - chain_spec, - cli::{Cli, ContainerChainCli, RelayChainCli, Subcommand}, - service::{self, IdentifyVariant, NodeConfig}, - }, - cumulus_client_cli::extract_genesis_wasm, - cumulus_primitives_core::ParaId, - dancebox_runtime::Block, - frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE}, - log::{info, warn}, - node_common::{command::generate_genesis_block, service::NodeBuilderConfig as _}, - parity_scale_codec::Encode, - polkadot_service::WestendChainSpec, - sc_cli::{ - ChainSpec, CliConfiguration, DefaultConfigurationValues, ImportParams, KeystoreParams, - NetworkParams, Result, SharedParams, SubstrateCli, - }, - sc_service::config::{BasePath, PrometheusConfig}, - sp_core::hexdisplay::HexDisplay, - sp_runtime::traits::{AccountIdConversion, Block as BlockT}, - std::{io::Write, net::SocketAddr}, +use crate::{ + benchmarking::{inherent_benchmark_data, RemarkBuilder, TransferKeepAliveBuilder}, + chain_spec, + cli::{Cli, Subcommand}, + service, }; - -fn load_spec( - id: &str, - para_id: Option, - container_chains: Vec, - mock_container_chains: Vec, - invulnerables: Option>, -) -> std::result::Result, String> { - let para_id: ParaId = para_id.unwrap_or(1000).into(); - let mock_container_chains: Vec = - mock_container_chains.iter().map(|&x| x.into()).collect(); - let invulnerables = invulnerables.unwrap_or(vec![ - "Alice".to_string(), - "Bob".to_string(), - "Charlie".to_string(), - "Dave".to_string(), - ]); - - Ok(match id { - "dev" | "dancebox-dev" | "dancebox_dev" => { - Box::new(chain_spec::dancebox::development_config( - para_id, - container_chains, - mock_container_chains, - invulnerables, - )) - } - "" | "dancebox-local" | "dancebox_local" => { - Box::new(chain_spec::dancebox::local_dancebox_config( - para_id, - container_chains, - mock_container_chains, - invulnerables, - )) - } - "dancebox" => Box::new(chain_spec::RawChainSpec::from_json_bytes( - &include_bytes!("../../specs/dancebox/dancebox-raw-specs.json")[..], - )?), - "flashbox-dev" | "flashbox_dev" => Box::new(chain_spec::flashbox::development_config( - para_id, - container_chains, - mock_container_chains, - invulnerables, - )), - "flashbox-local" | "flashbox_local" => { - Box::new(chain_spec::flashbox::local_flashbox_config( - para_id, - container_chains, - mock_container_chains, - invulnerables, - )) - } - path => Box::new(chain_spec::dancebox::ChainSpec::from_json_file( - std::path::PathBuf::from(path), - )?), - }) -} +use frame_benchmarking_cli::{BenchmarkCmd, ExtrinsicFactory, SUBSTRATE_REFERENCE_HARDWARE}; +use node_template_runtime::{Block, EXISTENTIAL_DEPOSIT}; +use sc_cli::SubstrateCli; +use sc_service::PartialComponents; +use sp_keyring::Sr25519Keyring; impl SubstrateCli for Cli { - fn impl_name() -> String { - "Tanssi Collator".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Tanssi Collator\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - load_spec(id, self.para_id, vec![], vec![2000, 2001], None) - } -} - -impl SubstrateCli for RelayChainCli { - fn impl_name() -> String { - "Tanssi Collator".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Tanssi Collator\n\nThe command-line arguments provided first will be \ - passed to the parachain node, while the arguments provided after -- will be passed \ - to the relay chain node.\n\n\ - {} -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - match id { - "westend_moonbase_relay_testnet" => Ok(Box::new(WestendChainSpec::from_json_bytes( - &include_bytes!("../../specs/dancebox/alphanet-relay-raw-specs.json")[..], - )?)), - // If we are not using a moonbeam-centric pre-baked relay spec, then fall back to the - // Polkadot service to interpret the id. - _ => polkadot_cli::Cli::from_iter([RelayChainCli::executable_name()].iter()) - .load_spec(id), - } - } -} - -impl SubstrateCli for ContainerChainCli { - fn impl_name() -> String { - "Container chain".into() - } - - fn impl_version() -> String { - env!("SUBSTRATE_CLI_IMPL_VERSION").into() - } - - fn description() -> String { - format!( - "Container chain\n\nThe command-line arguments provided first will be \ - passed to the orchestrator chain node, while the arguments provided after -- will be passed \ - to the container chain node, and the arguments provided after another -- will be passed \ - to the relay chain node\n\n\ - {} [orchestrator-args] -- [container-chain-args] -- [relay-chain-args] -- ", - Self::executable_name() - ) - } - - fn author() -> String { - env!("CARGO_PKG_AUTHORS").into() - } - - fn support_url() -> String { - "https://github.com/paritytech/cumulus/issues/new".into() - } - - fn copyright_start_year() -> i32 { - 2020 - } - - fn load_spec(&self, id: &str) -> std::result::Result, String> { - // ContainerChain ChainSpec must be preloaded beforehand because we need to call async - // functions to generate it, and this function is not async. - let para_id = parse_container_chain_id_str(id)?; - - match &self.preloaded_chain_spec { - Some(spec) => { - let spec_para_id = crate::chain_spec::Extensions::try_get(&**spec) - .map(|extension| extension.para_id); - - if spec_para_id == Some(para_id) { - Ok(spec.cloned_box()) - } else { - Err(format!( - "Expected ChainSpec for id {}, found ChainSpec for id {:?} instead", - para_id, spec_para_id - )) - } - } - None => Err(format!("ChainSpec for {} not found", id)), - } - } -} - -/// Parse ParaId(2000) from a string like "container-chain-2000" -fn parse_container_chain_id_str(id: &str) -> std::result::Result { - // The id has been created using format!("container-chain-{}", para_id), so here we need - // to reverse that. - id.strip_prefix("container-chain-") - .and_then(|s| { - let id: u32 = s.parse().ok()?; - - // `.parse()` ignores leading zeros, so convert the id back to string to check - // if we get the same string, this way we ensure a 1:1 mapping - if id.to_string() == s { - Some(id) - } else { - None - } - }) - .ok_or_else(|| format!("load_spec called with invalid id: {:?}", id)) -} - -macro_rules! construct_async_run { - (|$components:ident, $cli:ident, $cmd:ident, $config:ident| $( $code:tt )* ) => {{ - let runner = $cli.create_runner($cmd)?; - runner.async_run(|$config| { - let $components = NodeConfig::new_builder(&$config, None)?; - let inner = { $( $code )* }; - - let task_manager = $components.task_manager; - inner.map(|v| (v, task_manager)) + fn impl_name() -> String { + "Substrate Node".into() + } + + fn impl_version() -> String { + env!("SUBSTRATE_CLI_IMPL_VERSION").into() + } + + fn description() -> String { + env!("CARGO_PKG_DESCRIPTION").into() + } + + fn author() -> String { + env!("CARGO_PKG_AUTHORS").into() + } + + fn support_url() -> String { + "support.anonymous.an".into() + } + + fn copyright_start_year() -> i32 { + 2017 + } + + fn load_spec(&self, id: &str) -> Result, String> { + Ok(match id { + "dev" => Box::new(chain_spec::development_config()?), + "" | "local" => Box::new(chain_spec::local_testnet_config()?), + path => { + Box::new(chain_spec::ChainSpec::from_json_file(std::path::PathBuf::from(path))?) + }, }) - }} + } } -/// Parse command line arguments into service configuration. -pub fn run() -> Result<()> { - let cli = Cli::from_args(); - - match &cli.subcommand { - Some(Subcommand::BuildSpec(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let chain_spec = load_spec( - &cmd.base.chain_id(cmd.base.is_dev()?)?, - cmd.parachain_id, - cmd.add_container_chain.clone().unwrap_or_default(), - cmd.mock_container_chain.clone().unwrap_or_default(), - cmd.invulnerable.clone(), - )?; - cmd.base.run(chain_spec, config.network) - }) - } - Some(Subcommand::CheckBlock(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::ExportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.database)) - }) - } - Some(Subcommand::ExportState(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, config.chain_spec)) - }) - } - Some(Subcommand::ImportBlocks(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - let (_, import_queue) = service::import_queue(&config, &components); - Ok(cmd.run(components.client, import_queue)) - }) - } - Some(Subcommand::Revert(cmd)) => { - construct_async_run!(|components, cli, cmd, config| { - Ok(cmd.run(components.client, components.backend, None)) - }) - } - Some(Subcommand::PurgeChain(cmd)) => { - let runner = cli.create_runner(cmd)?; - - runner.sync_run(|config| { - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()] - .iter() - .chain(cli.relaychain_args().iter()), - ); - - let polkadot_config = SubstrateCli::create_configuration( - &polkadot_cli, - &polkadot_cli, - config.tokio_handle.clone(), - ) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - cmd.run(config, polkadot_config) - }) - } - Some(Subcommand::ExportGenesisHead(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.sync_run(|config| { - let client = NodeConfig::new_builder(&config, None)?.client; - cmd.run(client) - }) - } - Some(Subcommand::ExportGenesisWasm(params)) => { - let mut builder = sc_cli::LoggerBuilder::new(""); - builder.with_profiling(sc_tracing::TracingReceiver::Log, ""); - let _ = builder.init(); - - let raw_wasm_blob = - extract_genesis_wasm(&*cli.load_spec(¶ms.chain.clone().unwrap_or_default())?)?; - let output_buf = if params.raw { - raw_wasm_blob - } else { - format!("0x{:?}", HexDisplay::from(&raw_wasm_blob)).into_bytes() - }; - - if let Some(output) = ¶ms.output { - std::fs::write(output, output_buf)?; - } else { - std::io::stdout().write_all(&output_buf)?; - } - - Ok(()) - } - Some(Subcommand::Benchmark(cmd)) => { - let runner = cli.create_runner(cmd)?; - // Switch on the concrete benchmark sub-command- - match cmd { - BenchmarkCmd::Pallet(cmd) => { - if cfg!(feature = "runtime-benchmarks") { - runner.sync_run(|config| cmd.run::(config)) - } else { - Err("Benchmarking wasn't enabled when building the node. \ - You can enable it with `--features runtime-benchmarks`." - .into()) - } - } - BenchmarkCmd::Block(cmd) => runner.sync_run(|config| { - let client = NodeConfig::new_builder(&config, None)?.client; - cmd.run(client) - }), - #[cfg(not(feature = "runtime-benchmarks"))] - BenchmarkCmd::Storage(_) => Err(sc_cli::Error::Input( - "Compile with --features=runtime-benchmarks \ - to enable storage benchmarks." - .into(), - )), - #[cfg(feature = "runtime-benchmarks")] - BenchmarkCmd::Storage(cmd) => runner.sync_run(|config| { - let builder = NodeConfig::new_builder(&config, None)?; - let db = builder.backend.expose_db(); - let storage = builder.backend.expose_storage(); - cmd.run(config, builder.client, db, storage) - }), - BenchmarkCmd::Machine(cmd) => { - runner.sync_run(|config| cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone())) - } - // NOTE: this allows the Client to leniently implement - // new benchmark commands without requiring a companion MR. - #[allow(unreachable_patterns)] - _ => Err("Benchmarking sub-command unsupported".into()), - } - } - Some(Subcommand::Key(cmd)) => Ok(cmd.run(&cli)?), - #[cfg(feature = "try-runtime")] - Some(Subcommand::TryRuntime(_)) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - #[cfg(not(feature = "try-runtime"))] - Some(Subcommand::TryRuntime) => { - Err("Substrate's `try-runtime` subcommand has been migrated \ - to a standalone CLI (https://github.com/paritytech/try-runtime-cli)" - .into()) - } - Some(Subcommand::PrecompileWasm(cmd)) => { - let runner = cli.create_runner(cmd)?; - runner.async_run(|config| { - let partials = NodeConfig::new_builder(&config, None)?; - Ok(( - cmd.run(partials.backend, config.chain_spec), - partials.task_manager, - )) - }) - } - None => { - let runner = cli.create_runner(&cli.run.normalize())?; - let collator_options = cli.run.collator_options(); - - runner.run_node_until_exit(|config| async move { - let hwbench = (!cli.no_hardware_benchmarks).then_some( - config.database.path().map(|database_path| { - let _ = std::fs::create_dir_all(database_path); - sc_sysinfo::gather_hwbench(Some(database_path)) - })).flatten(); - - let para_id = chain_spec::Extensions::try_get(&*config.chain_spec) - .map(|e| e.para_id) - .ok_or("Could not find parachain ID in chain-spec.")?; - - let id = ParaId::from(para_id); - - let polkadot_cli = RelayChainCli::new( - &config, - [RelayChainCli::executable_name()].iter().chain(cli.relaychain_args().iter()), - ); - - let extension = chain_spec::Extensions::try_get(&*config.chain_spec); - - let relay_chain_id = extension.map(|e| e.relay_chain.clone()); - - let dev_service = - config.chain_spec.is_dev() || relay_chain_id == Some("dev-service".to_string()) || cli.run.dev_service; - - if dev_service { - return crate::service::start_dev_node(config, cli.run.sealing, hwbench, id).map_err(Into::into) - } - - let parachain_account = - AccountIdConversion::::into_account_truncating(&id); - - let block: Block = generate_genesis_block(&*config.chain_spec, sp_runtime::StateVersion::V1) - .map_err(|e| format!("{:?}", e))?; - let genesis_state = format!("0x{:?}", HexDisplay::from(&block.header().encode())); - - let tokio_handle = config.tokio_handle.clone(); - let polkadot_config = - SubstrateCli::create_configuration(&polkadot_cli, &polkadot_cli, tokio_handle) - .map_err(|err| format!("Relay chain argument error: {}", err))?; - - info!("Parachain id: {:?}", id); - info!("Parachain Account: {}", parachain_account); - info!("Parachain genesis state: {}", genesis_state); - info!("Is collating: {}", if config.role.is_authority() { "yes" } else { "no" }); - - if let cumulus_client_cli::RelayChainMode::ExternalRpc(rpc_target_urls) = - collator_options.clone().relay_chain_mode { - if !rpc_target_urls.is_empty() && !cli.relaychain_args().is_empty() { - warn!("Detected relay chain node arguments together with --relay-chain-rpc-url. This command starts a minimal Polkadot node that only uses a network-related subset of all relay chain CLI options."); - } - } - - let mut container_chain_config = None; - // Even if container-chain-args are empty, we need to spawn the container-detection - // collation taks if the role is authority. - - // We need to bake in some container-chain args - if !cli.container_chain_args().is_empty() || config.role.is_authority() { - let container_chain_cli = ContainerChainCli::new( - &config, - [ContainerChainCli::executable_name()].iter().chain(cli.container_chain_args().iter()), - ); - let tokio_handle = config.tokio_handle.clone(); - container_chain_config = Some((container_chain_cli, tokio_handle)); +/// Parse and run command line arguments +pub fn run() -> sc_cli::Result<()> { + let cli = Cli::from_args(); + + match &cli.subcommand { + Some(Subcommand::Key(cmd)) => cmd.run(&cli), + Some(Subcommand::BuildSpec(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run(config.chain_spec, config.network)) + }, + Some(Subcommand::CheckBlock(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, import_queue, .. } = + service::new_partial(&config)?; + Ok((cmd.run(client, import_queue), task_manager)) + }) + }, + Some(Subcommand::ExportBlocks(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; + Ok((cmd.run(client, config.database), task_manager)) + }) + }, + Some(Subcommand::ExportState(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, .. } = service::new_partial(&config)?; + Ok((cmd.run(client, config.chain_spec), task_manager)) + }) + }, + Some(Subcommand::ImportBlocks(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, import_queue, .. } = + service::new_partial(&config)?; + Ok((cmd.run(client, import_queue), task_manager)) + }) + }, + Some(Subcommand::PurgeChain(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run(config.database)) + }, + Some(Subcommand::Revert(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.async_run(|config| { + let PartialComponents { client, task_manager, backend, .. } = + service::new_partial(&config)?; + let aux_revert = Box::new(|client, _, blocks| { + sc_consensus_grandpa::revert(client, blocks)?; + Ok(()) + }); + Ok((cmd.run(client, backend, Some(aux_revert)), task_manager)) + }) + }, + Some(Subcommand::Benchmark(cmd)) => { + let runner = cli.create_runner(cmd)?; + + runner.sync_run(|config| { + // This switch needs to be in the client, since the client decides + // which sub-commands it wants to support. + match cmd { + BenchmarkCmd::Pallet(cmd) => { + if !cfg!(feature = "runtime-benchmarks") { + return Err( + "Runtime benchmarking wasn't enabled when building the node. \ + You can enable it with `--features runtime-benchmarks`." + .into(), + ); + } + + cmd.run::, ()>(config) + }, + BenchmarkCmd::Block(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + cmd.run(client) + }, + #[cfg(not(feature = "runtime-benchmarks"))] + BenchmarkCmd::Storage(_) => Err( + "Storage benchmarking can be enabled with `--features runtime-benchmarks`." + .into(), + ), + #[cfg(feature = "runtime-benchmarks")] + BenchmarkCmd::Storage(cmd) => { + let PartialComponents { client, backend, .. } = + service::new_partial(&config)?; + let db = backend.expose_db(); + let storage = backend.expose_storage(); + + cmd.run(config, client, db, storage) + }, + BenchmarkCmd::Overhead(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + let ext_builder = RemarkBuilder::new(client.clone()); + + cmd.run( + config, + client, + inherent_benchmark_data()?, + Vec::new(), + &ext_builder, + ) + }, + BenchmarkCmd::Extrinsic(cmd) => { + let PartialComponents { client, .. } = service::new_partial(&config)?; + // Register the *Remark* and *TKA* builders. + let ext_factory = ExtrinsicFactory(vec![ + Box::new(RemarkBuilder::new(client.clone())), + Box::new(TransferKeepAliveBuilder::new( + client.clone(), + Sr25519Keyring::Alice.to_account_id(), + EXISTENTIAL_DEPOSIT, + )), + ]); + + cmd.run(client, inherent_benchmark_data()?, Vec::new(), &ext_factory) + }, + BenchmarkCmd::Machine(cmd) => { + cmd.run(&config, SUBSTRATE_REFERENCE_HARDWARE.clone()) + }, } - - crate::service::start_parachain_node( - config, - polkadot_config, - container_chain_config, - collator_options, - id, - hwbench, - ) - .await - .map(|r| r.0) - .map_err(Into::into) }) - } - } -} - -impl DefaultConfigurationValues for RelayChainCli { - fn p2p_listen_port() -> u16 { - 30334 - } - - fn rpc_listen_port() -> u16 { - 9945 - } - - fn prometheus_listen_port() -> u16 { - 9616 - } -} - -impl CliConfiguration for RelayChainCli { - fn shared_params(&self) -> &SharedParams { - self.base.base.shared_params() - } - - fn import_params(&self) -> Option<&ImportParams> { - self.base.base.import_params() - } - - fn network_params(&self) -> Option<&NetworkParams> { - self.base.base.network_params() - } - - fn keystore_params(&self) -> Option<&KeystoreParams> { - self.base.base.keystore_params() - } - - fn base_path(&self) -> Result> { - Ok(self - .shared_params() - .base_path()? - .or_else(|| Some(self.base_path.clone().into()))) - } - - fn rpc_addr(&self, default_listen_port: u16) -> Result> { - self.base.base.rpc_addr(default_listen_port) - } - - fn prometheus_config( - &self, - default_listen_port: u16, - chain_spec: &Box, - ) -> Result> { - self.base - .base - .prometheus_config(default_listen_port, chain_spec) - } - - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &sc_service::Configuration, - ) -> Result<()> - where - F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), - { - unreachable!("PolkadotCli is never initialized; qed"); - } - - fn chain_id(&self, is_dev: bool) -> Result { - let chain_id = self.base.base.chain_id(is_dev)?; - - Ok(if chain_id.is_empty() { - self.chain_id.clone().unwrap_or_default() - } else { - chain_id - }) - } - - fn role(&self, is_dev: bool) -> Result { - self.base.base.role(is_dev) - } - - fn transaction_pool(&self, is_dev: bool) -> Result { - self.base.base.transaction_pool(is_dev) - } - - fn trie_cache_maximum_size(&self) -> Result> { - self.base.base.trie_cache_maximum_size() - } - - fn rpc_methods(&self) -> Result { - self.base.base.rpc_methods() - } - - fn rpc_max_connections(&self) -> Result { - self.base.base.rpc_max_connections() - } - - fn rpc_cors(&self, is_dev: bool) -> Result>> { - self.base.base.rpc_cors(is_dev) - } - - fn default_heap_pages(&self) -> Result> { - self.base.base.default_heap_pages() - } - - fn force_authoring(&self) -> Result { - self.base.base.force_authoring() - } - - fn disable_grandpa(&self) -> Result { - self.base.base.disable_grandpa() - } - - fn max_runtime_instances(&self) -> Result> { - self.base.base.max_runtime_instances() - } - - fn announce_block(&self) -> Result { - self.base.base.announce_block() - } - - fn telemetry_endpoints( - &self, - chain_spec: &Box, - ) -> Result> { - self.base.base.telemetry_endpoints(chain_spec) - } - - fn node_name(&self) -> Result { - self.base.base.node_name() - } -} - -impl DefaultConfigurationValues for ContainerChainCli { - fn p2p_listen_port() -> u16 { - 30335 - } - - fn rpc_listen_port() -> u16 { - 9946 - } - - fn prometheus_listen_port() -> u16 { - 9617 - } -} - -impl CliConfiguration for ContainerChainCli { - fn shared_params(&self) -> &SharedParams { - self.base.base.shared_params() - } - - fn import_params(&self) -> Option<&ImportParams> { - self.base.base.import_params() - } - - fn network_params(&self) -> Option<&NetworkParams> { - self.base.base.network_params() - } - - fn keystore_params(&self) -> Option<&KeystoreParams> { - self.base.base.keystore_params() - } - - fn base_path(&self) -> Result> { - Ok(self - .shared_params() - .base_path()? - .or_else(|| Some(self.base_path.clone().into()))) - } - - fn rpc_addr(&self, default_listen_port: u16) -> Result> { - self.base.base.rpc_addr(default_listen_port) - } - - fn prometheus_config( - &self, - default_listen_port: u16, - chain_spec: &Box, - ) -> Result> { - self.base - .base - .prometheus_config(default_listen_port, chain_spec) - } - - fn init( - &self, - _support_url: &String, - _impl_version: &String, - _logger_hook: F, - _config: &sc_service::Configuration, - ) -> Result<()> - where - F: FnOnce(&mut sc_cli::LoggerBuilder, &sc_service::Configuration), - { - unreachable!("PolkadotCli is never initialized; qed"); - } - - fn chain_id(&self, _is_dev: bool) -> Result { - self.base - .para_id - .map(|para_id| format!("container-chain-{}", para_id)) - .ok_or("no para-id in container chain args".into()) - } - - fn role(&self, is_dev: bool) -> Result { - self.base.base.role(is_dev) - } - - fn transaction_pool(&self, is_dev: bool) -> Result { - self.base.base.transaction_pool(is_dev) - } - - fn trie_cache_maximum_size(&self) -> Result> { - self.base.base.trie_cache_maximum_size() - } - - fn rpc_methods(&self) -> Result { - self.base.base.rpc_methods() - } - - fn rpc_max_connections(&self) -> Result { - self.base.base.rpc_max_connections() - } - - fn rpc_cors(&self, is_dev: bool) -> Result>> { - self.base.base.rpc_cors(is_dev) - } - - fn default_heap_pages(&self) -> Result> { - self.base.base.default_heap_pages() - } - - fn force_authoring(&self) -> Result { - self.base.base.force_authoring() - } - - fn disable_grandpa(&self) -> Result { - self.base.base.disable_grandpa() - } - - fn max_runtime_instances(&self) -> Result> { - self.base.base.max_runtime_instances() - } - - fn announce_block(&self) -> Result { - self.base.base.announce_block() - } - - fn telemetry_endpoints( - &self, - chain_spec: &Box, - ) -> Result> { - self.base.base.telemetry_endpoints(chain_spec) - } - - fn node_name(&self) -> Result { - self.base.base.node_name() - } + }, + #[cfg(feature = "try-runtime")] + Some(Subcommand::TryRuntime) => Err(try_runtime_cli::DEPRECATION_NOTICE.into()), + #[cfg(not(feature = "try-runtime"))] + Some(Subcommand::TryRuntime) => Err("TryRuntime wasn't enabled when building the node. \ + You can enable it with `--features try-runtime`." + .into()), + Some(Subcommand::ChainInfo(cmd)) => { + let runner = cli.create_runner(cmd)?; + runner.sync_run(|config| cmd.run::(&config)) + }, + None => { + let runner = cli.create_runner(&cli.run)?; + runner.run_node_until_exit(|config| async move { + service::new_full(config).map_err(sc_cli::Error::Service) + }) + }, + } } diff --git a/node/src/container_chain_monitor.rs b/node/src/container_chain_monitor.rs deleted file mode 100644 index 1fe8e9f..0000000 --- a/node/src/container_chain_monitor.rs +++ /dev/null @@ -1,326 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -use { - crate::{ - container_chain_spawner::{CcSpawnMsg, ContainerChainSpawnerState}, - service::{ContainerChainBackend, ContainerChainClient}, - }, - cumulus_primitives_core::ParaId, - std::{ - cell::Cell, - collections::VecDeque, - sync::{Arc, Mutex}, - time::Instant, - }, - tokio::{ - sync::mpsc::UnboundedSender, - time::{sleep, Duration}, - }, -}; - -#[derive(Default)] -pub struct SpawnedContainersMonitor { - /// List of the N most recently started container chains, with some statistics related to - /// stopping time and reference count. - list: VecDeque, - /// Count the number of times a container chain has been started - count: usize, -} - -pub struct SpawnedContainer { - /// Unique identifier for a spawned container (not ParaId) - pub id: usize, - /// Container chain para id - pub para_id: ParaId, - /// When did the container chain start - pub start_time: Instant, - /// When the container chain was asked to stop (`StopContainerChain` was dropped) - pub stop_signal_time: Option, - /// When the container chain task manager was dropped, this should finish all the background - /// tasks except the ones started in separate threads. - pub stop_task_manager_time: Option, - /// When the `monitor_task` first observed that the reference counts are all 0. - /// This won't be precise because it is checked using polling with a high period. - pub stop_refcount_time: Cell>, - /// Used to check the reference count, if it's 0 it means the database has been closed - pub backend: std::sync::Weak, - /// Used to check the reference count, if it's 0 it means that the client has been closed. - pub client: std::sync::Weak, -} - -impl SpawnedContainer { - pub fn is_stopped(&self) -> bool { - self.stop_refcount_time.get().is_some() || { - // Check reference count, and set stop_refcount_time if zero - let refcount_zero = self.backend.strong_count() == 0 && self.client.strong_count() == 0; - if refcount_zero { - self.stop_refcount_time.set(Some(Instant::now())); - - true - } else { - false - } - } - } - - pub fn summary(&self) -> String { - #[derive(Debug)] - #[allow(unused)] - struct SpawnedContainerSummary { - id: usize, - para_id: ParaId, - time_start_to_now: Duration, - time_start_to_stop_signal: Option, - time_stop_signal_to_stop_task_manager: Option, - time_stop_task_manager_to_stop_refcount: Option, - time_stop_refcount_to_now: Option, - backend_refcount: usize, - client_refcount: usize, - } - - let summary = SpawnedContainerSummary { - id: self.id, - para_id: self.para_id, - time_start_to_now: Instant::now().duration_since(self.start_time), - time_start_to_stop_signal: self - .stop_signal_time - .map(|x| x.duration_since(self.start_time)), - time_stop_signal_to_stop_task_manager: self - .stop_task_manager_time - .and_then(|x| Some(x.duration_since(self.stop_signal_time?))), - time_stop_task_manager_to_stop_refcount: self - .stop_refcount_time - .get() - .and_then(|x| Some(x.duration_since(self.stop_task_manager_time?))), - time_stop_refcount_to_now: self - .stop_refcount_time - .get() - .map(|x| Instant::now().duration_since(x)), - backend_refcount: self.backend.strong_count(), - client_refcount: self.client.strong_count(), - }; - - format!("{:?}", summary) - } -} - -impl SpawnedContainersMonitor { - /// Returns a unique id which is not the ParaId - pub fn push(&mut self, mut x: SpawnedContainer) -> usize { - assert_eq!(x.id, 0, "SpawnedContainer.id must be set to 0, the actual id will be returned from push function"); - let id = self.count; - x.id = id; - self.list.push_back(x); - self.count += 1; - - id - } - - pub fn set_stop_signal_time(&mut self, id: usize, when: Instant) { - let i = self.list.iter().position(|x| x.id == id); - - if let Some(i) = i { - self.list[i].stop_signal_time = Some(when); - } - } - - pub fn set_stop_task_manager_time(&mut self, id: usize, when: Instant) { - let i = self.list.iter().position(|x| x.id == id); - - if let Some(i) = i { - self.list[i].stop_task_manager_time = Some(when); - } - } - - #[allow(unused)] - pub fn set_stop_refcount_time(&mut self, id: usize, when: Instant) { - let i = self.list.iter().position(|x| x.id == id); - - if let Some(i) = i { - self.list[i].stop_refcount_time.set(Some(when)); - } - } - - pub fn running_chains(&self) -> Vec<&SpawnedContainer> { - self.list - .iter() - .filter(|container| !container.is_stopped()) - .collect() - } - - #[allow(unused)] - pub fn truncate_old(&mut self, new_len: usize) { - if self.list.len() <= new_len { - return; - } - - let idx_new_first_element = self.list.len() - new_len; - self.list.drain(0..idx_new_first_element); - } - - pub fn truncate_old_stopped_chains(&mut self, new_len: usize) -> Result<(), ()> { - if self.list.len() <= new_len { - return Ok(()); - } - - let mut to_retain = self.list.len() - new_len; - self.list.retain(|container| { - if to_retain == 0 { - return true; - } - - if container.is_stopped() { - to_retain -= 1; - false - } else { - true - } - }); - - if self.list.len() <= new_len { - Ok(()) - } else { - Err(()) - } - } -} - -/// Background task that monitors the number of running container chains. -pub async fn monitor_task(state: Arc>) { - // Main loop frequency, doesn't need to be fast - let monitor_period = Duration::from_secs(300 * 0 + 10); - // Max number of allowed container chains before printing warnings. - // There should be at most 2 container chains running at the same time (1 syncing + 1 collating), - // but add a margin of error because a container chain may take a few seconds to stop. - let max_running_container_chains = 4; - - loop { - sleep(monitor_period).await; - log::debug!("Monitor tick"); - let mut state = state.lock().unwrap(); - let monitor_state = &mut state.spawned_containers_monitor; - - let running_chains = monitor_state.running_chains(); - let running_para_ids: Vec = running_chains.iter().map(|x| x.para_id).collect(); - if running_chains.len() > max_running_container_chains { - log::warn!("Too many container chains running at the same time"); - log::warn!( - "Running container chains: {}: {:?}", - running_chains.len(), - running_para_ids - ); - log::debug!( - "{:?}", - running_chains - .iter() - .map(|x| x.summary()) - .collect::>() - ) - } else { - log::debug!( - "Running container chains: {}: {:?}", - running_chains.len(), - running_para_ids - ); - } - - // Remove stopped container chains to keep the list small - let _ = monitor_state.truncate_old_stopped_chains(10); - } -} - -#[allow(unused)] -/// Start and stop the same container chain in a loop, used for testing and debugging -pub async fn debug_start_and_stop_same_cc(cc_spawn_tx: UnboundedSender) { - let sleep_delay = Duration::from_secs(10); - - loop { - sleep(sleep_delay).await; - cc_spawn_tx - .send(CcSpawnMsg::UpdateAssignment { - current: Some(2000u32.into()), - next: None, - }) - .unwrap(); - sleep(sleep_delay).await; - cc_spawn_tx - .send(CcSpawnMsg::UpdateAssignment { - current: None, - next: None, - }) - .unwrap(); - sleep(sleep_delay).await; - cc_spawn_tx - .send(CcSpawnMsg::UpdateAssignment { - current: None, - next: Some(2001u32.into()), - }) - .unwrap(); - sleep(sleep_delay).await; - cc_spawn_tx - .send(CcSpawnMsg::UpdateAssignment { - current: None, - next: None, - }) - .unwrap(); - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_truncate() { - let mut monitor = SpawnedContainersMonitor::default(); - let default_container = || SpawnedContainer { - id: Default::default(), - para_id: Default::default(), - start_time: Instant::now(), - stop_signal_time: Default::default(), - stop_task_manager_time: Default::default(), - stop_refcount_time: Default::default(), - backend: Default::default(), - client: Default::default(), - }; - - // Truncating empty list does not panic - monitor.truncate_old(0); - monitor.truncate_old_stopped_chains(0).unwrap(); - - for _ in 0..20 { - monitor.push(default_container()); - } - - assert_eq!(monitor.list.len(), 20); - assert_eq!(monitor.count, 20); - - monitor.truncate_old(15); - assert_eq!(monitor.list.len(), 15); - assert_eq!(monitor.count, 20); - // Truncate should remove the oldest stopped chains, so the first id is now 5 - assert_eq!(monitor.list.front().map(|x| x.id), Some(5)); - - // We are using Default::default which has a refcount of 0, so all chains are considered stopped - assert!(monitor.list.iter().all(|x| x.is_stopped())); - monitor.truncate_old_stopped_chains(10).unwrap(); - assert_eq!(monitor.list.len(), 10); - assert_eq!(monitor.count, 20); - // Truncate should remove the oldest stopped chains, so the first id is now 10 - assert_eq!(monitor.list.front().map(|x| x.id), Some(10)); - } -} diff --git a/node/src/container_chain_spawner.rs b/node/src/container_chain_spawner.rs deleted file mode 100644 index 8670ae9..0000000 --- a/node/src/container_chain_spawner.rs +++ /dev/null @@ -1,1220 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Container Chain Spawner -//! -//! Controls the starting and stopping of container chains. -//! -//! For more information about when the database is deleted, check the -//! [Keep db flowchart](https://raw.githubusercontent.com/moondance-labs/tanssi/master/docs/keep_db_flowchart.png) - -use { - crate::{ - cli::ContainerChainCli, - container_chain_monitor::{SpawnedContainer, SpawnedContainersMonitor}, - service::{start_node_impl_container, NodeConfig, ParachainClient}, - }, - cumulus_primitives_core::ParaId, - cumulus_relay_chain_interface::RelayChainInterface, - dancebox_runtime::{AccountId, Block, BlockNumber}, - dc_orchestrator_chain_interface::OrchestratorChainInterface, - futures::FutureExt, - node_common::{command::generate_genesis_block, service::NodeBuilderConfig}, - pallet_author_noting_runtime_api::AuthorNotingApi, - pallet_registrar_runtime_api::RegistrarApi, - polkadot_primitives::CollatorPair, - sc_cli::{Database, SyncMode}, - sc_network::config::MultiaddrWithPeerId, - sc_service::SpawnTaskHandle, - sp_api::{ApiExt, ProvideRuntimeApi}, - sp_keystore::KeystorePtr, - sp_runtime::traits::Block as BlockT, - std::{ - collections::{HashMap, HashSet}, - future::Future, - path::Path, - pin::Pin, - sync::{Arc, Mutex}, - time::Instant, - }, - tokio::{ - sync::{mpsc, oneshot}, - time::{sleep, Duration}, - }, - tokio_util::sync::CancellationToken, -}; - -/// Struct with all the params needed to start a container chain node given the CLI arguments, -/// and creating the ChainSpec from on-chain data from the orchestrator chain. - -pub struct ContainerChainSpawner { - // Start container chain params - pub orchestrator_chain_interface: Arc, - pub orchestrator_client: Arc, - pub container_chain_cli: ContainerChainCli, - pub tokio_handle: tokio::runtime::Handle, - pub chain_type: sc_chain_spec::ChainType, - pub relay_chain: String, - pub relay_chain_interface: Arc, - pub collator_key: Option, - pub sync_keystore: KeystorePtr, - pub orchestrator_para_id: ParaId, - pub validator: bool, - pub spawn_handle: SpawnTaskHandle, - - // State - pub state: Arc>, - - // Async callback that enables collation on the orchestrator chain - pub collate_on_tanssi: - Arc (CancellationToken, futures::channel::oneshot::Receiver<()>) + Send + Sync>, - // Stores the cancellation token used to stop the orchestrator chain collator process. - // When this is None, the orchestrator collator is not running. - pub collation_cancellation_constructs: - Option<(CancellationToken, futures::channel::oneshot::Receiver<()>)>, -} - -#[derive(Default)] -pub struct ContainerChainSpawnerState { - spawned_container_chains: HashMap, - assigned_para_id: Option, - next_assigned_para_id: Option, - failed_para_ids: HashSet, - // For debugging and detecting errors - pub spawned_containers_monitor: SpawnedContainersMonitor, -} - -pub struct ContainerChainState { - /// Handle that can be used to stop the container chain - stop_handle: StopContainerChain, -} - -/// Stops a container chain when signal is sent. The bool means `keep_db`, whether to keep the -/// container chain database (true) or remove it (false). -pub struct StopContainerChain { - signal: oneshot::Sender, - id: usize, -} - -/// Messages used to control the `ContainerChainSpawner`. This is needed because one of the fields -/// of `ContainerChainSpawner` is not `Sync`, so we cannot simply pass an -/// `Arc` to other threads. -#[derive(Debug)] -pub enum CcSpawnMsg { - /// Update container chain assignment - UpdateAssignment { - current: Option, - next: Option, - }, -} - -impl ContainerChainSpawner { - /// Try to start a new container chain. In case of an error, this does not stop the node, and - /// the container chain will be attempted to spawn again when the collator is reassigned to it. - #[must_use] - fn spawn( - &self, - container_chain_para_id: ParaId, - start_collation: bool, - ) -> Pin + Send>> { - let ( - orchestrator_chain_interface, - orchestrator_client, - mut container_chain_cli, - tokio_handle, - chain_type, - relay_chain, - relay_chain_interface, - collator_key, - sync_keystore, - orchestrator_para_id, - validator, - spawn_handle, - state, - ) = ( - self.orchestrator_chain_interface.clone(), - self.orchestrator_client.clone(), - self.container_chain_cli.clone(), - self.tokio_handle.clone(), - self.chain_type.clone(), - self.relay_chain.clone(), - self.relay_chain_interface.clone(), - self.collator_key.clone(), - self.sync_keystore.clone(), - self.orchestrator_para_id, - self.validator, - self.spawn_handle.clone(), - self.state.clone(), - ); - let state2 = state.clone(); - // This closure is used to emulate a try block, it enables using the `?` operator inside - let try_closure = move || async move { - // Preload genesis data from orchestrator chain storage. - // The preload must finish before calling create_configuration, so any async operations - // need to be awaited. - - // TODO: the orchestrator chain node may not be fully synced yet, - // in that case we will be reading an old state. - let orchestrator_chain_info = orchestrator_client.chain_info(); - log::info!( - "Reading container chain genesis data from orchestrator chain at block #{} {}", - orchestrator_chain_info.best_number, - orchestrator_chain_info.best_hash, - ); - let orchestrator_runtime_api = orchestrator_client.runtime_api(); - - log::info!( - "Detected assignment for container chain {}", - container_chain_para_id - ); - - let genesis_data = orchestrator_runtime_api - .genesis_data(orchestrator_chain_info.best_hash, container_chain_para_id) - .map_err(|e| format!("Failed to call genesis_data runtime api: {}", e))? - .ok_or_else(|| { - format!( - "No genesis data registered for container chain id {}", - container_chain_para_id - ) - })?; - - let boot_nodes_raw = orchestrator_runtime_api - .boot_nodes(orchestrator_chain_info.best_hash, container_chain_para_id) - .map_err(|e| format!("Failed to call boot_nodes runtime api: {}", e))?; - if boot_nodes_raw.is_empty() { - log::warn!( - "No boot nodes registered on-chain for container chain {}", - container_chain_para_id - ); - } - let boot_nodes = - parse_boot_nodes_ignore_invalid(boot_nodes_raw, container_chain_para_id); - if boot_nodes.is_empty() { - log::warn!( - "No valid boot nodes for container chain {}", - container_chain_para_id - ); - } - - container_chain_cli - .preload_chain_spec_from_genesis_data( - container_chain_para_id.into(), - genesis_data, - chain_type.clone(), - relay_chain.clone(), - boot_nodes, - ) - .map_err(|e| format!("failed to create container chain chain spec from on chain genesis data: {}", e))?; - - log::info!( - "Loaded chain spec for container chain {}", - container_chain_para_id - ); - - if !start_collation { - log::info!("This is a syncing container chain, using random ports"); - // Use random ports to avoid conflicts with the other running container chain - let random_ports = [23456, 23457, 23458]; - container_chain_cli - .base - .base - .prometheus_params - .prometheus_port = Some(random_ports[0]); - container_chain_cli.base.base.network_params.port = Some(random_ports[1]); - container_chain_cli.base.base.rpc_port = Some(random_ports[2]); - } - - // Update CLI params - container_chain_cli.base.para_id = Some(container_chain_para_id.into()); - container_chain_cli - .base - .base - .import_params - .database_params - .database = Some(Database::ParityDb); - - let create_container_chain_cli_config = || { - let mut container_chain_cli_config = sc_cli::SubstrateCli::create_configuration( - &container_chain_cli, - &container_chain_cli, - tokio_handle.clone(), - ) - .map_err(|err| format!("Container chain argument error: {}", err))?; - - // Change database path to make it depend on container chain para id - // So instead of the usual "db/full" we have "db/full-container-2000" - let mut db_path = container_chain_cli_config - .database - .path() - .ok_or_else(|| "Failed to get database path".to_string())? - .to_owned(); - db_path.set_file_name(format!("full-container-{}", container_chain_para_id)); - container_chain_cli_config.database.set_path(&db_path); - - sc_service::error::Result::Ok((container_chain_cli_config, db_path)) - }; - - let (_container_chain_cli_config, db_path) = create_container_chain_cli_config()?; - let db_exists = db_path.exists(); - let db_exists_but_may_need_removal = db_exists && validator; - if db_exists_but_may_need_removal { - // If the database exists it may be invalid (genesis hash mismatch), so check if it is valid - // and if not, delete it. - // Create a new cli config because otherwise the tasks spawned in `open_and_maybe_delete_db` don't stop - let (container_chain_cli_config, db_path) = create_container_chain_cli_config()?; - open_and_maybe_delete_db( - container_chain_cli_config, - &db_path, - &orchestrator_client, - container_chain_para_id, - &container_chain_cli, - container_chain_cli.base.keep_db, - )?; - // Need to add a sleep here to ensure that the partial components created in - // `open_and_maybe_delete_db` have enough time to close. - log::info!("Restarting container chain {}", container_chain_para_id); - sleep(Duration::from_secs(10)).await; - } - - // Select appropiate sync mode. We want to use WarpSync unless the db still exists, - // or the block number is 0 (because of a warp sync bug in that case). - let db_still_exists = db_path.exists(); - container_chain_cli.base.base.network_params.sync = select_sync_mode( - db_still_exists, - &orchestrator_client, - container_chain_para_id, - )?; - log::info!( - "Container chain sync mode: {:?}", - container_chain_cli.base.base.network_params.sync - ); - let mut container_chain_cli_config = sc_cli::SubstrateCli::create_configuration( - &container_chain_cli, - &container_chain_cli, - tokio_handle.clone(), - ) - .map_err(|err| format!("Container chain argument error: {}", err))?; - container_chain_cli_config.database.set_path(&db_path); - - // Start container chain node - let (mut container_chain_task_manager, container_chain_client, container_chain_db) = - start_node_impl_container( - container_chain_cli_config, - orchestrator_client.clone(), - relay_chain_interface.clone(), - orchestrator_chain_interface.clone(), - collator_key.clone(), - sync_keystore.clone(), - container_chain_para_id, - orchestrator_para_id, - validator && start_collation, - ) - .await?; - - // Signal that allows to gracefully stop a container chain - let (signal, on_exit) = oneshot::channel::(); - - let monitor_id; - { - let mut state = state.lock().expect("poison error"); - - monitor_id = state.spawned_containers_monitor.push(SpawnedContainer { - id: 0, - para_id: container_chain_para_id, - start_time: Instant::now(), - stop_signal_time: None, - stop_task_manager_time: None, - stop_refcount_time: Default::default(), - backend: Arc::downgrade(&container_chain_db), - client: Arc::downgrade(&container_chain_client), - }); - - state.spawned_container_chains.insert( - container_chain_para_id, - ContainerChainState { - stop_handle: StopContainerChain { - signal, - id: monitor_id, - }, - }, - ); - } - - // Add the container chain task manager as a child task to the parent task manager. - // We want to stop the node if this task manager stops, but we also want to allow a - // graceful shutdown using the `on_exit` future. - let name = "container-chain-task-manager"; - spawn_handle.spawn(name, None, async move { - let mut container_chain_task_manager_future = - container_chain_task_manager.future().fuse(); - let mut on_exit_future = on_exit.fuse(); - - futures::select! { - res1 = container_chain_task_manager_future => { - // An essential task failed or the task manager was stopped unexpectedly - // using `.terminate()`. This should stop the container chain but not the node. - if res1.is_err() { - log::error!("Essential task failed in container chain {} task manager. Shutting down container chain service", container_chain_para_id); - } else { - log::error!("Unexpected shutdown in container chain {} task manager. Shutting down container chain service", container_chain_para_id); - } - // Mark this container chain as "failed to stop" to avoid warning in `self.stop()` - let mut state = state.lock().expect("poison error"); - state.failed_para_ids.insert(container_chain_para_id); - // Never delete db in this case because it is not a graceful shutdown - } - stop_unassigned = on_exit_future => { - // Graceful shutdown. - // `stop_unassigned` will be `Ok(keep_db)` if `.stop()` has been called, which means that the - // container chain has been unassigned, and will be `Err` if the handle has been dropped, - // which means that the node is stopping. - // Delete existing database if running as collator - if validator && stop_unassigned == Ok(false) && !container_chain_cli.base.keep_db { - delete_container_chain_db(&db_path); - } - } - } - - let mut state = state.lock().expect("poison error"); - state - .spawned_containers_monitor - .set_stop_task_manager_time(monitor_id, Instant::now()); - }); - - sc_service::error::Result::Ok(()) - }; - - async move { - match try_closure().await { - Ok(()) => {} - Err(e) => { - log::error!( - "Failed to start container chain {}: {}", - container_chain_para_id, - e - ); - // Mark this container chain as "failed to start" - let mut state = state2.lock().expect("poison error"); - state.failed_para_ids.insert(container_chain_para_id); - } - } - } - .boxed() - } - - /// Stop a container chain. Prints a warning if the container chain was not running. - fn stop(&self, container_chain_para_id: ParaId, keep_db: bool) { - let mut state = self.state.lock().expect("poison error"); - let stop_handle = state - .spawned_container_chains - .remove(&container_chain_para_id); - - match stop_handle { - Some(stop_handle) => { - log::info!("Stopping container chain {}", container_chain_para_id); - - let id = stop_handle.stop_handle.id; - state - .spawned_containers_monitor - .set_stop_signal_time(id, Instant::now()); - - // Send signal to perform graceful shutdown, which will delete the db if needed - let _ = stop_handle.stop_handle.signal.send(keep_db); - } - None => { - // Do not print the warning message if this is a container chain that has failed to - // start, because in that case it will not be running - if !state.failed_para_ids.remove(&container_chain_para_id) { - log::warn!( - "Tried to stop a container chain that is not running: {}", - container_chain_para_id - ); - } - } - } - } - - /// Receive and process `CcSpawnMsg`s indefinitely - pub async fn rx_loop(mut self, mut rx: mpsc::UnboundedReceiver, validator: bool) { - // The node always starts as an orchestrator chain collator. - // This is because the assignment is detected after importing a new block, so if all - // collators stop at the same time, when they start again nobody will produce the new block. - // So all nodes start as orchestrator chain collators, until the first block is imported, - // then the real assignment is used. - if validator { - self.handle_update_assignment(Some(self.orchestrator_para_id), None) - .await; - } - - while let Some(msg) = rx.recv().await { - match msg { - CcSpawnMsg::UpdateAssignment { current, next } => { - self.handle_update_assignment(current, next).await; - } - } - } - - // The while loop can end if all the senders get dropped, but since this is an - // essential task we don't want it to stop. So await a future that never completes. - // This should only happen when starting a full node. - if !validator { - let () = std::future::pending().await; - } - } - - /// Handle `CcSpawnMsg::UpdateAssignment` - async fn handle_update_assignment(&mut self, current: Option, next: Option) { - let HandleUpdateAssignmentResult { - chains_to_stop, - chains_to_start, - need_to_restart, - } = handle_update_assignment_state_change( - &mut self.state.lock().expect("poison error"), - self.orchestrator_para_id, - current, - next, - ); - - if current != Some(self.orchestrator_para_id) { - // If not assigned to orchestrator chain anymore, we need to stop the collator process - let maybe_exit_notification_receiver = self - .collation_cancellation_constructs - .take() - .map(|(cancellation_token, exit_notification_receiver)| { - cancellation_token.cancel(); - exit_notification_receiver - }); - - if let Some(exit_notification_receiver) = maybe_exit_notification_receiver { - let _ = exit_notification_receiver.await; - } - } else if self.collation_cancellation_constructs.is_none() { - // If assigned to orchestrator chain but the collator process is not running, start it - self.collation_cancellation_constructs = Some((self.collate_on_tanssi)()); - } - - // Stop all container chains that are no longer needed - for para_id in chains_to_stop { - // Keep db if we are currently assigned to this chain - let keep_db = Some(para_id) == current; - self.stop(para_id, keep_db); - } - - if need_to_restart { - // Give it some time to stop properly - sleep(Duration::from_secs(10)).await; - } - - // Start all new container chains (usually 1) - for para_id in chains_to_start { - // Edge case: when starting the node it may be assigned to a container chain, so we need to - // start a container chain already collating. - let start_collation = Some(para_id) == current; - self.spawn(para_id, start_collation).await; - } - } -} - -struct HandleUpdateAssignmentResult { - chains_to_stop: Vec, - chains_to_start: Vec, - need_to_restart: bool, -} - -// This is a separate function to allow testing -fn handle_update_assignment_state_change( - state: &mut ContainerChainSpawnerState, - orchestrator_para_id: ParaId, - current: Option, - next: Option, -) -> HandleUpdateAssignmentResult { - if (state.assigned_para_id, state.next_assigned_para_id) == (current, next) { - // If nothing changed there is nothing to update - return HandleUpdateAssignmentResult { - chains_to_stop: Default::default(), - chains_to_start: Default::default(), - need_to_restart: false, - }; - } - - // Create a set with the container chains that were running before, and the container - // chains that should be running after the updated assignment. This is used to calculate - // the difference, and stop and start the required container chains. - let mut running_chains_before = HashSet::new(); - let mut running_chains_after = HashSet::new(); - - running_chains_before.extend(state.assigned_para_id); - running_chains_before.extend(state.next_assigned_para_id); - // Ignore orchestrator_para_id because it is handled in a special way, as it does not need to - // start one session before in order to sync. - running_chains_before.remove(&orchestrator_para_id); - - running_chains_after.extend(current); - running_chains_after.extend(next); - running_chains_after.remove(&orchestrator_para_id); - let mut need_to_restart_current = false; - let mut need_to_restart_next = false; - - if state.assigned_para_id != current { - if let Some(para_id) = current { - // If the assigned container chain has changed, we may need to - // restart it in collation mode, unless it is the orchestrator chain. - if para_id != orchestrator_para_id { - need_to_restart_current = true; - } - } - - if let Some(para_id) = state.assigned_para_id { - if para_id != orchestrator_para_id && Some(para_id) == next { - need_to_restart_next = true; - } - } - } - - state.assigned_para_id = current; - state.next_assigned_para_id = next; - - let mut chains_to_stop: Vec<_> = running_chains_before - .difference(&running_chains_after) - .copied() - .collect(); - let mut chains_to_start: Vec<_> = running_chains_after - .difference(&running_chains_before) - .copied() - .collect(); - - if need_to_restart_current { - // Force restart of new assigned container chain: if it was running before it was in "syncing mode", - // which doesn't use the correct ports, so start it in "collation mode". - let id = current.unwrap(); - if running_chains_before.contains(&id) && !chains_to_stop.contains(&id) { - chains_to_stop.push(id); - } - if !chains_to_start.contains(&id) { - chains_to_start.push(id); - } - } - - if need_to_restart_next { - // Handle edge case of going from (2000, 2001) to (2001, 2000). In that case we must restart both chains, - // because previously 2000 was collating and now 2000 will only be syncing. - let id = next.unwrap(); - if running_chains_before.contains(&id) && !chains_to_stop.contains(&id) { - chains_to_stop.push(id); - } - if !chains_to_start.contains(&id) { - chains_to_start.push(id); - } - } - - HandleUpdateAssignmentResult { - chains_to_stop, - chains_to_start, - need_to_restart: need_to_restart_current || need_to_restart_next, - } -} - -/// Select `SyncMode` to use for a container chain. -/// We want to use warp sync unless the db still exists, or the block number is 0 (because of a warp sync bug in that case). -/// The reason is that warp sync doesn't work if a database already exists, it falls back to full sync instead. -fn select_sync_mode( - db_exists: bool, - orchestrator_client: &Arc, - container_chain_para_id: ParaId, -) -> sc_service::error::Result { - if db_exists { - // If the user wants to use warp sync, they should have already removed the database - return Ok(SyncMode::Full); - } - - // The following check is only needed because of this bug: - // https://github.com/paritytech/polkadot-sdk/issues/1930 - - let orchestrator_runtime_api = orchestrator_client.runtime_api(); - let orchestrator_chain_info = orchestrator_client.chain_info(); - - // Force container chains to use warp sync, unless full sync is needed for some reason - let full_sync_needed = if !orchestrator_runtime_api - .has_api::>( - orchestrator_chain_info.best_hash, - ) - .map_err(|e| format!("Failed to check if runtime has AuthorNotingApi: {}", e))? - { - // Before runtime API was implemented we don't know if the container chain has any blocks, - // so use full sync because that always works - true - } else { - // If the container chain is still at genesis block, use full sync because warp sync is broken - orchestrator_runtime_api - .latest_author(orchestrator_chain_info.best_hash, container_chain_para_id) - .map_err(|e| format!("Failed to read latest author: {}", e))? - .is_none() - }; - - if full_sync_needed { - Ok(SyncMode::Full) - } else { - Ok(SyncMode::Warp) - } -} - -/// Start a container chain using `new_partial` and check if the database is valid. If not, delete the db. -/// The caller may need to wait a few seconds before trying to start the same container chain again, to -/// give the database enough time to close. -// TODO: instead of waiting, we could also return Weak references to the components `temp_cli.backend` -// and `temp_cli.client`, and then the caller would only need to check if the reference counts are 0. -fn open_and_maybe_delete_db( - container_chain_cli_config: sc_service::Configuration, - db_path: &Path, - orchestrator_client: &Arc, - container_chain_para_id: ParaId, - container_chain_cli: &ContainerChainCli, - keep_db: bool, -) -> sc_service::error::Result<()> { - let temp_cli = NodeConfig::new_builder(&container_chain_cli_config, None)?; - - // Check block diff, only needed if keep-db is false - if !keep_db { - // Get latest block number from the container chain client - let last_container_block_temp = temp_cli.client.chain_info().best_number; - - let orchestrator_runtime_api = orchestrator_client.runtime_api(); - let orchestrator_chain_info = orchestrator_client.chain_info(); - // Get the container chain's latest block from orchestrator chain and compare with client's one - let last_container_block_from_orchestrator = orchestrator_runtime_api - .latest_block_number(orchestrator_chain_info.best_hash, container_chain_para_id) - .unwrap_or_default(); - - let max_block_diff_allowed = 100u32; - if last_container_block_from_orchestrator - .unwrap_or(0u32) - .abs_diff(last_container_block_temp) - > max_block_diff_allowed - { - // if the diff is big, delete db and restart using warp sync - delete_container_chain_db(db_path); - return Ok(()); - } - } - - // Generate genesis hash to compare against container client's genesis hash - let container_preloaded_genesis = container_chain_cli.preloaded_chain_spec.as_ref().unwrap(); - - // Check with both state versions - let block_v0: Block = - generate_genesis_block(&**container_preloaded_genesis, sp_runtime::StateVersion::V0) - .map_err(|e| format!("{:?}", e))?; - let chain_spec_genesis_hash_v0 = block_v0.header().hash(); - - let block_v1: Block = - generate_genesis_block(&**container_preloaded_genesis, sp_runtime::StateVersion::V1) - .map_err(|e| format!("{:?}", e))?; - let chain_spec_genesis_hash_v1 = block_v1.header().hash(); - - let container_client_genesis_hash = temp_cli.client.chain_info().genesis_hash; - - if container_client_genesis_hash != chain_spec_genesis_hash_v0 - && container_client_genesis_hash != chain_spec_genesis_hash_v1 - { - log::info!("Container genesis V0: {:?}", chain_spec_genesis_hash_v0); - log::info!("Container genesis V1: {:?}", chain_spec_genesis_hash_v1); - log::info!( - "Chain spec genesis {:?} did not match with any container genesis - Restarting...", - container_client_genesis_hash - ); - delete_container_chain_db(db_path); - return Ok(()); - } - - Ok(()) -} - -// TODO: this leaves some empty folders behind, because it is called with db_path: -// Collator2002-01/data/containers/chains/simple_container_2002/paritydb/full-container-2002 -// but we want to delete everything under -// Collator2002-01/data/containers/chains/simple_container_2002 -fn delete_container_chain_db(db_path: &Path) { - if db_path.exists() { - std::fs::remove_dir_all(db_path).expect("failed to remove old container chain db"); - } -} - -/// Parse a list of boot nodes in `Vec` format. Invalid boot nodes are filtered out. -fn parse_boot_nodes_ignore_invalid( - boot_nodes_raw: Vec>, - container_chain_para_id: ParaId, -) -> Vec { - boot_nodes_raw - .into_iter() - .filter_map(|x| { - let x = String::from_utf8(x) - .map_err(|e| { - log::debug!( - "Invalid boot node in container chain {}: {}", - container_chain_para_id, - e - ); - }) - .ok()?; - - x.parse::() - .map_err(|e| { - log::debug!( - "Invalid boot node in container chain {}: {}", - container_chain_para_id, - e - ) - }) - .ok() - }) - .collect() -} - -#[cfg(test)] -mod tests { - use super::*; - - // Copy of ContainerChainSpawner with extra assertions for tests, and mocked spawn function. - struct MockContainerChainSpawner { - state: Arc>, - orchestrator_para_id: ParaId, - collate_on_tanssi: Arc< - dyn Fn() -> (CancellationToken, futures::channel::oneshot::Receiver<()>) + Send + Sync, - >, - collation_cancellation_constructs: Option<()>, - // Keep track of the last CollateOn message, for tests - currently_collating_on: Arc>>, - } - - impl MockContainerChainSpawner { - fn new() -> Self { - let orchestrator_para_id = 1000.into(); - // The node always starts as an orchestrator chain collator - let currently_collating_on = Arc::new(Mutex::new(Some(orchestrator_para_id))); - let currently_collating_on2 = currently_collating_on.clone(); - let collate_closure = move || { - let mut cco = currently_collating_on2.lock().unwrap(); - assert_ne!( - *cco, - Some(orchestrator_para_id), - "Received CollateOn message when we were already collating on this chain: {}", - orchestrator_para_id - ); - *cco = Some(orchestrator_para_id); - let (_, receiver) = futures::channel::oneshot::channel(); - (CancellationToken::new(), receiver) - }; - let collate_on_tanssi: Arc< - dyn Fn() -> (CancellationToken, futures::channel::oneshot::Receiver<()>) - + Send - + Sync, - > = Arc::new(collate_closure); - - Self { - state: Arc::new(Mutex::new(ContainerChainSpawnerState { - spawned_container_chains: Default::default(), - assigned_para_id: Some(orchestrator_para_id), - next_assigned_para_id: None, - failed_para_ids: Default::default(), - spawned_containers_monitor: Default::default(), - })), - orchestrator_para_id, - collate_on_tanssi, - // Some if collator starts on orchestrator chain - collation_cancellation_constructs: Some(()), - currently_collating_on, - } - } - - fn spawn(&self, container_chain_para_id: ParaId, start_collation: bool) { - let (signal, _on_exit) = oneshot::channel(); - let currently_collating_on2 = self.currently_collating_on.clone(); - let collate_closure = move || { - let mut cco = currently_collating_on2.lock().unwrap(); - assert_ne!( - *cco, - Some(container_chain_para_id), - "Received CollateOn message when we were already collating on this chain: {}", - container_chain_para_id - ); - *cco = Some(container_chain_para_id); - let (_, receiver) = futures::channel::oneshot::channel(); - (CancellationToken::new(), receiver) - }; - let collate_on: Arc< - dyn Fn() -> (CancellationToken, futures::channel::oneshot::Receiver<()>) - + Send - + Sync, - > = Arc::new(collate_closure); - - let old = self - .state - .lock() - .expect("poison error") - .spawned_container_chains - .insert( - container_chain_para_id, - ContainerChainState { - stop_handle: StopContainerChain { signal, id: 0 }, - }, - ); - - assert!( - old.is_none(), - "tried to spawn a container chain that was already running: {}", - container_chain_para_id - ); - - if start_collation { - let (_cancellation_token, _exit_receiver) = collate_on(); - } - } - - fn stop(&self, container_chain_para_id: ParaId) { - let stop_handle = self - .state - .lock() - .expect("poison error") - .spawned_container_chains - .remove(&container_chain_para_id); - - match stop_handle { - Some(_stop_handle) => { - log::info!("Stopping container chain {}", container_chain_para_id); - } - None => { - panic!( - "Tried to stop a container chain that is not running: {}", - container_chain_para_id - ); - } - } - - // Update currently_collating_on, if we stopped the chain we are no longer collating there - let mut lco = self.currently_collating_on.lock().unwrap(); - if *lco == Some(container_chain_para_id) { - *lco = None; - } - } - - fn handle_update_assignment(&mut self, current: Option, next: Option) { - let HandleUpdateAssignmentResult { - chains_to_stop, - chains_to_start, - need_to_restart, - } = handle_update_assignment_state_change( - &mut self.state.lock().unwrap(), - self.orchestrator_para_id, - current, - next, - ); - - if current != Some(self.orchestrator_para_id) { - // If not assigned to orchestrator chain anymore, we need to stop the collator process - let mut cco = self.currently_collating_on.lock().unwrap(); - if *cco == Some(self.orchestrator_para_id) { - *cco = None; - } - self.collation_cancellation_constructs = None; - } else if self.collation_cancellation_constructs.is_none() { - let (_cancellation_token, _exit_notification_receiver) = (self.collate_on_tanssi)(); - self.collation_cancellation_constructs = Some(()); - } - - // Assert we never start and stop the same container chain - for para_id in &chains_to_start { - if !need_to_restart { - assert!( - !chains_to_stop.contains(para_id), - "Tried to start and stop same container chain: {}", - para_id - ); - } else { - // Will try to start and stop container chain with id "current" or "next", so ignore that - if Some(*para_id) != current && Some(*para_id) != next { - assert!( - !chains_to_stop.contains(para_id), - "Tried to start and stop same container chain: {}", - para_id - ); - } - } - } - // Assert we never start or stop the orchestrator chain - assert!(!chains_to_start.contains(&self.orchestrator_para_id)); - assert!(!chains_to_stop.contains(&self.orchestrator_para_id)); - - // Stop all container chains that are no longer needed - for para_id in chains_to_stop { - self.stop(para_id); - } - - // Start all new container chains (usually 1) - for para_id in chains_to_start { - // Edge case: when starting the node it may be assigned to a container chain, so we need to - // start a container chain already collating. - let start_collation = Some(para_id) == current; - self.spawn(para_id, start_collation); - } - - // Assert that if we are currently assigned to a container chain, we are collating there - if let Some(para_id) = current { - self.assert_collating_on(Some(para_id)); - } else { - self.assert_collating_on(None); - } - } - - #[track_caller] - fn assert_collating_on(&self, para_id: Option) { - let currently_collating_on = *self.currently_collating_on.lock().unwrap(); - assert_eq!(currently_collating_on, para_id); - } - - #[track_caller] - fn assert_running_chains(&self, para_ids: &[ParaId]) { - let mut actually_running: Vec = self - .state - .lock() - .unwrap() - .spawned_container_chains - .keys() - .cloned() - .collect(); - actually_running.sort(); - let mut should_be_running = para_ids.to_vec(); - should_be_running.sort(); - assert_eq!(actually_running, should_be_running); - } - } - - #[test] - fn starts_collating_on_tanssi() { - let mut m = MockContainerChainSpawner::new(); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - } - - #[test] - fn assigned_to_orchestrator_chain() { - let mut m = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(1000.into()), Some(1000.into())); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - - m.handle_update_assignment(Some(1000.into()), None); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, Some(1000.into())); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - m.handle_update_assignment(Some(1000.into()), Some(1000.into())); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - } - - #[test] - fn assigned_to_container_chain() { - let mut m = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(Some(2000.into()), None); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, Some(2000.into())); - m.assert_collating_on(None); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - } - - #[test] - fn spawn_container_chains() { - let mut m = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(1000.into()), Some(2000.into())); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(Some(2000.into()), Some(2001.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into(), 2001.into()]); - - m.handle_update_assignment(Some(2001.into()), Some(2001.into())); - m.assert_collating_on(Some(2001.into())); - m.assert_running_chains(&[2001.into()]); - - m.handle_update_assignment(Some(2001.into()), Some(1000.into())); - m.assert_collating_on(Some(2001.into())); - m.assert_running_chains(&[2001.into()]); - - m.handle_update_assignment(Some(1000.into()), Some(1000.into())); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - } - - #[test] - fn swap_current_next() { - // Going from (2000, 2001) to (2001, 2000) shouldn't start or stop any container chains - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), Some(2001.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into(), 2001.into()]); - - m.handle_update_assignment(Some(2001.into()), Some(2000.into())); - m.assert_collating_on(Some(2001.into())); - m.assert_running_chains(&[2000.into(), 2001.into()]); - } - - #[test] - fn stop_collating_orchestrator() { - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(1000.into()), Some(1000.into())); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - - m.handle_update_assignment(Some(1000.into()), None); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - m.handle_update_assignment(Some(1000.into()), None); - m.assert_collating_on(Some(1000.into())); - m.assert_running_chains(&[]); - } - - #[test] - fn stop_collating_container() { - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), None); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - m.handle_update_assignment(None, Some(2000.into())); - m.assert_collating_on(None); - m.assert_running_chains(&[2000.into()]); - - // This will send a CollateOn message to the same chain as the last CollateOn, - // but this is needed because that chain has been stopped - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - } - - #[test] - fn stop_collating_container_start_immediately() { - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), None); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - - // This will start the chain already collating - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - } - - #[test] - fn stop_all_chains() { - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), Some(2001.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into(), 2001.into()]); - - m.handle_update_assignment(None, None); - m.assert_collating_on(None); - m.assert_running_chains(&[]); - } - - #[test] - fn keep_collating_on_container() { - let mut m: MockContainerChainSpawner = MockContainerChainSpawner::new(); - - m.handle_update_assignment(Some(2000.into()), None); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(None, Some(2000.into())); - m.assert_collating_on(None); - m.assert_running_chains(&[2000.into()]); - - m.handle_update_assignment(Some(2000.into()), Some(2000.into())); - m.assert_collating_on(Some(2000.into())); - m.assert_running_chains(&[2000.into()]); - } - - #[test] - fn invalid_boot_nodes_are_ignored() { - let para_id = 100.into(); - let bootnode1 = - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec(); - assert_eq!( - parse_boot_nodes_ignore_invalid(vec![b"A".to_vec()], para_id), - vec![] - ); - assert_eq!( - parse_boot_nodes_ignore_invalid(vec![b"\xff".to_vec()], para_id), - vec![] - ); - // Valid boot nodes are not ignored - assert_eq!( - parse_boot_nodes_ignore_invalid(vec![bootnode1], para_id).len(), - 1 - ); - } -} diff --git a/node/src/main.rs b/node/src/main.rs index 1565935..8918dd4 100644 --- a/node/src/main.rs +++ b/node/src/main.rs @@ -1,33 +1,13 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Substrate Parachain Node Template CLI - +//! Substrate Node Template CLI library. #![warn(missing_docs)] +mod benchmarking; mod chain_spec; mod cli; mod command; -mod container_chain_monitor; -mod container_chain_spawner; mod rpc; mod service; -#[cfg(test)] -mod tests; fn main() -> sc_cli::Result<()> { - command::run() + command::run() } diff --git a/node/src/rpc.rs b/node/src/rpc.rs index 3e2fdc9..246391a 100644 --- a/node/src/rpc.rs +++ b/node/src/rpc.rs @@ -1,19 +1,3 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - //! A collection of node-specific RPC methods. //! Substrate provides the `sc-rpc` crate, which defines the core RPC layer //! used by Substrate nodes. This file extends those RPC definitions with @@ -21,96 +5,60 @@ #![warn(missing_docs)] -pub use sc_rpc::DenyUnsafe; -use { - cumulus_primitives_core::ParaId, - dancebox_runtime::{opaque::Block, AccountId, Index as Nonce}, - manual_xcm_rpc::{ManualXcm, ManualXcmApiServer}, - polkadot_primitives::Hash, - sc_client_api::{AuxStore, UsageProvider}, - sc_consensus_manual_seal::{ - rpc::{ManualSeal, ManualSealApiServer}, - EngineCommand, - }, - sc_transaction_pool_api::TransactionPool, - services_payment_rpc::{ - ServicesPayment, ServicesPaymentApiServer as _, ServicesPaymentRuntimeApi, - }, - sp_api::ProvideRuntimeApi, - sp_block_builder::BlockBuilder, - sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}, - std::sync::Arc, - stream_payment_rpc::{StreamPayment, StreamPaymentApiServer as _, StreamPaymentRuntimeApi}, -}; +use std::sync::Arc; + +use jsonrpsee::RpcModule; +use node_template_runtime::{opaque::Block, AccountId, Balance, Nonce}; +use sc_transaction_pool_api::TransactionPool; +use sp_api::ProvideRuntimeApi; +use sp_block_builder::BlockBuilder; +use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; -/// A type representing all RPC extensions. -pub type RpcExtension = jsonrpsee::RpcModule<()>; +pub use sc_rpc_api::DenyUnsafe; -/// Full client dependencies +/// Full client dependencies. pub struct FullDeps { - /// The client instance to use. - pub client: Arc, - /// Transaction pool instance. - pub pool: Arc

, - /// Whether to deny unsafe calls - pub deny_unsafe: DenyUnsafe, - /// Manual seal command sink - pub command_sink: Option>>, - /// Channels for manual xcm messages (downward, hrmp) - pub xcm_senders: Option<(flume::Sender>, flume::Sender<(ParaId, Vec)>)>, + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Whether to deny unsafe calls + pub deny_unsafe: DenyUnsafe, } -/// Instantiate all RPC extensions. +/// Instantiate all full RPC extensions. pub fn create_full( - deps: FullDeps, -) -> Result> + deps: FullDeps, +) -> Result, Box> where - C: ProvideRuntimeApi - + HeaderBackend - + AuxStore - + HeaderMetadata - + Send - + Sync - + UsageProvider - + 'static, - C::Api: substrate_frame_rpc_system::AccountNonceApi, - C::Api: BlockBuilder, - C::Api: StreamPaymentRuntimeApi, - C::Api: ServicesPaymentRuntimeApi, - P: TransactionPool + Sync + Send + 'static, + C: ProvideRuntimeApi, + C: HeaderBackend + HeaderMetadata + 'static, + C: Send + Sync + 'static, + C::Api: substrate_frame_rpc_system::AccountNonceApi, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi, + C::Api: BlockBuilder, + P: TransactionPool + 'static, { - use substrate_frame_rpc_system::{System, SystemApiServer}; + use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; + use substrate_frame_rpc_system::{System, SystemApiServer}; - let mut module = RpcExtension::new(()); - let FullDeps { - client, - pool, - deny_unsafe, - command_sink, - xcm_senders, - } = deps; + let mut module = RpcModule::new(()); + let FullDeps { client, pool, deny_unsafe } = deps; - module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; - module.merge(StreamPayment::<_, Block>::new(client.clone()).into_rpc())?; - module.merge(ServicesPayment::<_, Block>::new(client).into_rpc())?; + module.merge(System::new(client.clone(), pool, deny_unsafe).into_rpc())?; + module.merge(TransactionPayment::new(client).into_rpc())?; - if let Some(command_sink) = command_sink { - module.merge( - // We provide the rpc handler with the sending end of the channel to allow the rpc - // send EngineCommands to the background block authorship task. - ManualSeal::new(command_sink).into_rpc(), - )?; - }; + // Extend this RPC with a custom API by using the following syntax. + // `YourRpcStruct` should have a reference to a client, which is needed + // to call into the runtime. + // `module.merge(YourRpcTrait::into_rpc(YourRpcStruct::new(ReferenceToClient, ...)))?;` - if let Some((downward_message_channel, hrmp_message_channel)) = xcm_senders { - module.merge( - ManualXcm { - downward_message_channel, - hrmp_message_channel, - } - .into_rpc(), - )?; - } + // You probably want to enable the `rpc v2 chainSpec` API as well + // + // let chain_name = chain_spec.name().to_string(); + // let genesis_hash = client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"); + // let properties = chain_spec.properties(); + // module.merge(ChainSpec::new(chain_name, genesis_hash, properties).into_rpc())?; - Ok(module) + Ok(module) } diff --git a/node/src/service.rs b/node/src/service.rs index 442f1dc..125cca1 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,1377 +1,317 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. -use tokio_util::sync::CancellationToken; -#[allow(deprecated)] -use { - crate::{ - cli::ContainerChainCli, - container_chain_spawner::{CcSpawnMsg, ContainerChainSpawner}, - }, - cumulus_client_cli::CollatorOptions, - cumulus_client_collator::service::CollatorService, - cumulus_client_consensus_common::{ - ParachainBlockImport as TParachainBlockImport, ParachainBlockImportMarker, - }, - cumulus_client_consensus_proposer::Proposer, - cumulus_client_parachain_inherent::{MockValidationDataInherentDataProvider, MockXcmConfig}, - cumulus_client_service::{ - prepare_node_config, start_relay_chain_tasks, DARecoveryProfile, StartRelayChainTasksParams, - }, - cumulus_primitives_core::{ - relay_chain::{well_known_keys as RelayWellKnownKeys, CollatorPair}, - ParaId, - }, - cumulus_relay_chain_interface::{OverseerHandle, RelayChainInterface}, - dancebox_runtime::{ - opaque::{Block, Hash}, - RuntimeApi, - }, - dc_orchestrator_chain_interface::{ - OrchestratorChainError, OrchestratorChainInterface, OrchestratorChainResult, PHash, PHeader, - }, - dp_slot_duration_runtime_api::TanssiSlotDurationApi, - futures::{Stream, StreamExt}, - nimbus_primitives::NimbusPair, - node_common::service::NodeBuilderConfig, - node_common::service::{ManualSealConfiguration, NodeBuilder, Sealing}, - pallet_registrar_runtime_api::RegistrarApi, - parity_scale_codec::Encode, - polkadot_cli::ProvideRuntimeApi, - polkadot_parachain_primitives::primitives::HeadData, - polkadot_service::Handle, - sc_basic_authorship::ProposerFactory, - sc_client_api::{ - AuxStore, Backend as BackendT, BlockchainEvents, HeaderBackend, UsageProvider, - }, - sc_consensus::{BasicQueue, BlockImport, ImportQueue}, - sc_executor::{NativeElseWasmExecutor, WasmExecutor}, - sc_network::NetworkBlock, - sc_network_sync::SyncingService, - sc_service::{Configuration, SpawnTaskHandle, TFullBackend, TFullClient, TaskManager}, - sc_telemetry::TelemetryHandle, - sc_transaction_pool::FullPool, - sp_api::StorageProof, - sp_consensus::{EnableProofRecording, SyncOracle}, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::{traits::SpawnEssentialNamed, H256}, - sp_keystore::KeystorePtr, - sp_state_machine::{Backend as StateBackend, StorageValue}, - std::{pin::Pin, sync::Arc, time::Duration}, - substrate_prometheus_endpoint::Registry, - tc_consensus::{ - collators::lookahead::{ - self as lookahead_tanssi_aura, Params as LookaheadTanssiAuraParams, - }, - OrchestratorAuraWorkerAuxData, - }, - tokio::sync::mpsc::{unbounded_channel, UnboundedSender}, -}; - -type FullBackend = TFullBackend; - -/// Native executor type. -pub struct ParachainNativeExecutor; - -impl sc_executor::NativeExecutionDispatch for ParachainNativeExecutor { - type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions; - - fn dispatch(method: &str, data: &[u8]) -> Option> { - dancebox_runtime::api::dispatch(method, data) - } - - fn native_version() -> sc_executor::NativeVersion { - dancebox_runtime::native_version() - } -} - -pub struct NodeConfig; -impl NodeBuilderConfig for NodeConfig { - type Block = Block; - type RuntimeApi = RuntimeApi; - type ParachainExecutor = ParachainExecutor; -} - -pub struct ContainerChainNodeConfig; -impl NodeBuilderConfig for ContainerChainNodeConfig { - type Block = Block; - // TODO: RuntimeApi here should be the subset of runtime apis available for all containers - // Currently we are using the orchestrator runtime apis - type RuntimeApi = RuntimeApi; - type ParachainExecutor = ContainerChainExecutor; -} - -// Orchestrator chain types -type ParachainExecutor = NativeElseWasmExecutor; -pub type ParachainClient = TFullClient; -pub type ParachainBackend = TFullBackend; -type DevParachainBlockImport = OrchestratorParachainBlockImport>; -type ParachainBlockImport = TParachainBlockImport, ParachainBackend>; -type ParachainProposerFactory = - ProposerFactory, ParachainClient, EnableProofRecording>; - -// Container chains types -type ContainerChainExecutor = WasmExecutor; -pub type ContainerChainClient = TFullClient; -pub type ContainerChainBackend = ParachainBackend; -type ContainerChainBlockImport = - TParachainBlockImport, ContainerChainBackend>; - -thread_local!(static TIMESTAMP: std::cell::RefCell = const { std::cell::RefCell::new(0) }); - -/// Provide a mock duration starting at 0 in millisecond for timestamp inherent. -/// Each call will increment timestamp by slot_duration making Aura think time has passed. -struct MockTimestampInherentDataProvider; -#[async_trait::async_trait] -impl sp_inherents::InherentDataProvider for MockTimestampInherentDataProvider { - async fn provide_inherent_data( - &self, - inherent_data: &mut sp_inherents::InherentData, - ) -> Result<(), sp_inherents::Error> { - TIMESTAMP.with(|x| { - *x.borrow_mut() += dancebox_runtime::SLOT_DURATION; - inherent_data.put_data(sp_timestamp::INHERENT_IDENTIFIER, &*x.borrow()) - }) - } - - async fn try_handle_error( - &self, - _identifier: &sp_inherents::InherentIdentifier, - _error: &[u8], - ) -> Option> { - // The pallet never reports error. - None - } -} - -/// Background task used to detect changes to container chain assignment, -/// and start/stop container chains on demand. The check runs on every new block. -pub fn build_check_assigned_para_id( - client: Arc, - sync_keystore: KeystorePtr, - cc_spawn_tx: UnboundedSender, - spawner: impl SpawnEssentialNamed, -) { - // Subscribe to new blocks in order to react to para id assignment - // This must be the stream of finalized blocks, otherwise the collators may rotate to a - // different chain before the block is finalized, and that could lead to a stalled chain - let mut import_notifications = client.finality_notification_stream(); - - let check_assigned_para_id_task = async move { - while let Some(msg) = import_notifications.next().await { - let block_hash = msg.hash; - let client_set_aside_for_cidp = client.clone(); - let sync_keystore = sync_keystore.clone(); - let cc_spawn_tx = cc_spawn_tx.clone(); - - check_assigned_para_id( - cc_spawn_tx, - sync_keystore, - client_set_aside_for_cidp, - block_hash, - ) - .unwrap(); - } - }; - - spawner.spawn_essential( - "check-assigned-para-id", - None, - Box::pin(check_assigned_para_id_task), - ); -} - -/// Check the parachain assignment using the orchestrator chain client, and send a `CcSpawnMsg` to -/// start or stop the required container chains. -/// -/// Checks the assignment for the next block, so if there is a session change on block 15, this will -/// detect the assignment change after importing block 14. -fn check_assigned_para_id( - cc_spawn_tx: UnboundedSender, - sync_keystore: KeystorePtr, - client_set_aside_for_cidp: Arc, - block_hash: H256, -) -> Result<(), Box> { - // Check current assignment - let current_container_chain_para_id = - tc_consensus::first_eligible_key::( - client_set_aside_for_cidp.as_ref(), - &block_hash, - sync_keystore.clone(), - ) - .map(|(_nimbus_key, para_id)| para_id); - - // Check assignment in the next session - let next_container_chain_para_id = - tc_consensus::first_eligible_key_next_session::( - client_set_aside_for_cidp.as_ref(), - &block_hash, - sync_keystore, - ) - .map(|(_nimbus_key, para_id)| para_id); - - cc_spawn_tx.send(CcSpawnMsg::UpdateAssignment { - current: current_container_chain_para_id, - next: next_container_chain_para_id, - })?; - - Ok(()) -} - -pub fn import_queue( - parachain_config: &Configuration, - node_builder: &NodeBuilder, -) -> (ParachainBlockImport, BasicQueue) { - // The nimbus import queue ONLY checks the signature correctness - // Any other checks corresponding to the author-correctness should be done - // in the runtime - let block_import = - ParachainBlockImport::new(node_builder.client.clone(), node_builder.backend.clone()); - - let import_queue = nimbus_consensus::import_queue( - node_builder.client.clone(), - block_import.clone(), - move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - Ok((time,)) - }, - &node_builder.task_manager.spawn_essential_handle(), - parachain_config.prometheus_registry(), - false, - ) - .expect("function never fails"); - - (block_import, import_queue) -} - -pub fn container_chain_import_queue( - parachain_config: &Configuration, - node_builder: &NodeBuilder, -) -> (ContainerChainBlockImport, BasicQueue) { - // The nimbus import queue ONLY checks the signature correctness - // Any other checks corresponding to the author-correctness should be done - // in the runtime - let block_import = - ContainerChainBlockImport::new(node_builder.client.clone(), node_builder.backend.clone()); - - let import_queue = nimbus_consensus::import_queue( - node_builder.client.clone(), - block_import.clone(), - move |_, _| async move { - let time = sp_timestamp::InherentDataProvider::from_system_time(); - - Ok((time,)) - }, - &node_builder.task_manager.spawn_essential_handle(), - parachain_config.prometheus_registry(), - false, - ) - .expect("function never fails"); - - (block_import, import_queue) -} - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with("Orchestrator")] -async fn start_node_impl( - orchestrator_config: Configuration, - polkadot_config: Configuration, - mut container_chain_config: Option<(ContainerChainCli, tokio::runtime::Handle)>, - collator_options: CollatorOptions, - para_id: ParaId, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc)> { - let parachain_config = prepare_node_config(orchestrator_config); - if let Some((container_chain_cli, _)) = &mut container_chain_config { - // If the container chain args have no --wasmtime-precompiled flag, use the same as the orchestrator - if container_chain_cli - .base - .base - .import_params - .wasmtime_precompiled - .is_none() - { - container_chain_cli - .base - .base - .import_params - .wasmtime_precompiled = parachain_config.wasmtime_precompiled.clone(); - } - } - - let chain_type: sc_chain_spec::ChainType = parachain_config.chain_spec.chain_type(); - let relay_chain = crate::chain_spec::Extensions::try_get(&*parachain_config.chain_spec) - .map(|e| e.relay_chain.clone()) - .ok_or("Could not find relay_chain extension in chain-spec.")?; - - // Channel to send messages to start/stop container chains - let (cc_spawn_tx, cc_spawn_rx) = unbounded_channel(); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let mut node_builder = NodeConfig::new_builder(¶chain_config, hwbench.clone())?; - - let (block_import, import_queue) = import_queue(¶chain_config, &node_builder); - - let (relay_chain_interface, collator_key) = node_builder - .build_relay_chain_interface(¶chain_config, polkadot_config, collator_options.clone()) - .await?; - - let validator = parachain_config.role.is_authority(); - let force_authoring = parachain_config.force_authoring; - - let node_builder = node_builder - .build_cumulus_network( - ¶chain_config, - para_id, - import_queue, - relay_chain_interface.clone(), - ) - .await?; - - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: None, - xcm_senders: None, - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - let relay_chain_slot_duration = Duration::from_secs(6); - let overseer_handle = relay_chain_interface - .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - let sync_keystore = node_builder.keystore_container.keystore(); - let mut collate_on_tanssi: Arc< - dyn Fn() -> (CancellationToken, futures::channel::oneshot::Receiver<()>) + Send + Sync, - > = Arc::new(move || { - if validator { - panic!("Called uninitialized collate_on_tanssi"); - } else { - panic!("Called collate_on_tanssi when node is not running as a validator"); - } - }); - - let announce_block = { - let sync_service = node_builder.network.sync_service.clone(); - Arc::new(move |hash, data| sync_service.announce_block(hash, data)) - }; - - let (mut node_builder, import_queue_service) = node_builder.extract_import_queue_service(); - - start_relay_chain_tasks(StartRelayChainTasksParams { - client: node_builder.client.clone(), - announce_block: announce_block.clone(), - para_id, - relay_chain_interface: relay_chain_interface.clone(), - task_manager: &mut node_builder.task_manager, - da_recovery_profile: if validator { - DARecoveryProfile::Collator - } else { - DARecoveryProfile::FullNode - }, - import_queue: import_queue_service, - relay_chain_slot_duration, - recovery_handle: Box::new(overseer_handle.clone()), - sync_service: node_builder.network.sync_service.clone(), - })?; - - if validator { - let collator_key = collator_key - .clone() - .expect("Command line arguments do not allow this. qed"); - - // Start task which detects para id assignment, and starts/stops container chains. - // Note that if this node was started without a `container_chain_config`, we don't - // support collation on container chains, so there is no need to detect changes to assignment - if container_chain_config.is_some() { - build_check_assigned_para_id( - node_builder.client.clone(), - sync_keystore.clone(), - cc_spawn_tx.clone(), - node_builder.task_manager.spawn_essential_handle(), - ); - } - - let start_collation = { - // Params for collate_on_tanssi closure - let node_spawn_handle = node_builder.task_manager.spawn_handle().clone(); - let node_keystore = node_builder.keystore_container.keystore().clone(); - let node_telemetry_handle = node_builder.telemetry.as_ref().map(|t| t.handle()).clone(); - let node_client = node_builder.client.clone(); - let node_backend = node_builder.backend.clone(); - let relay_interface = relay_chain_interface.clone(); - let node_sync_service = node_builder.network.sync_service.clone(); - let overseer = overseer_handle.clone(); - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( - node_spawn_handle.clone(), - node_client.clone(), - node_builder.transaction_pool.clone(), - node_builder.prometheus_registry.as_ref(), - node_telemetry_handle.clone(), - ); - - move || { - start_consensus_orchestrator( - node_client.clone(), - node_backend.clone(), - block_import.clone(), - node_spawn_handle.clone(), - relay_interface.clone(), - node_sync_service.clone(), - node_keystore.clone(), - force_authoring, - relay_chain_slot_duration, - para_id, - collator_key.clone(), - overseer.clone(), - announce_block.clone(), - proposer_factory.clone(), - ) - } - }; - // Save callback for later, used when collator rotates from container chain back to orchestrator chain - collate_on_tanssi = Arc::new(start_collation); - } - - node_builder.network.start_network.start_network(); - - let sync_keystore = node_builder.keystore_container.keystore(); - let orchestrator_chain_interface_builder = OrchestratorChainInProcessInterfaceBuilder { - client: node_builder.client.clone(), - backend: node_builder.backend.clone(), - sync_oracle: node_builder.network.sync_service.clone(), - overseer_handle: overseer_handle.clone(), - }; - - if let Some((container_chain_cli, tokio_handle)) = container_chain_config { - // If the orchestrator chain is running as a full-node, we start a full node for the - // container chain immediately, because only collator nodes detect their container chain - // assignment so otherwise it will never start. - if !validator { - if let Some(container_chain_para_id) = container_chain_cli.base.para_id { - // Spawn new container chain node - cc_spawn_tx - .send(CcSpawnMsg::UpdateAssignment { - current: Some(container_chain_para_id.into()), - next: Some(container_chain_para_id.into()), - }) - .map_err(|e| sc_service::Error::Application(Box::new(e) as Box<_>))?; - } - } - - // Start container chain spawner task. This will start and stop container chains on demand. - let orchestrator_client = node_builder.client.clone(); - let spawn_handle = node_builder.task_manager.spawn_handle(); - let container_chain_spawner = ContainerChainSpawner { - orchestrator_chain_interface: orchestrator_chain_interface_builder.build(), - orchestrator_client, - container_chain_cli, - tokio_handle, - chain_type, - relay_chain, - relay_chain_interface, - collator_key, - sync_keystore, - orchestrator_para_id: para_id, - validator, - spawn_handle, - state: Default::default(), - collate_on_tanssi, - collation_cancellation_constructs: None, - }; - let state = container_chain_spawner.state.clone(); - - node_builder.task_manager.spawn_essential_handle().spawn( - "container-chain-spawner-rx-loop", - None, - container_chain_spawner.rx_loop(cc_spawn_rx, validator), - ); - - node_builder.task_manager.spawn_essential_handle().spawn( - "container-chain-spawner-debug-state", - None, - crate::container_chain_monitor::monitor_task(state), - ) - } - - Ok((node_builder.task_manager, node_builder.client)) -} - -// Log string that will be shown for the container chain: `[Container-2000]`. -// This needs to be a separate function because the `prefix_logs_with` macro -// has trouble parsing expressions. -fn container_log_str(para_id: ParaId) -> String { - format!("Container-{}", para_id) -} - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with(container_log_str(para_id))] -pub async fn start_node_impl_container( - parachain_config: Configuration, - orchestrator_client: Arc, - relay_chain_interface: Arc, - orchestrator_chain_interface: Arc, - collator_key: Option, - keystore: KeystorePtr, - para_id: ParaId, - orchestrator_para_id: ParaId, - collator: bool, -) -> sc_service::error::Result<( - TaskManager, - Arc, - Arc, -)> { - let parachain_config = prepare_node_config(parachain_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let node_builder = ContainerChainNodeConfig::new_builder(¶chain_config, None)?; - - let (block_import, import_queue) = - container_chain_import_queue(¶chain_config, &node_builder); - let import_queue_service = import_queue.service(); - - log::info!("are we collators? {:?}", collator); - let node_builder = node_builder - .build_cumulus_network( - ¶chain_config, - para_id, - import_queue, - relay_chain_interface.clone(), - ) - .await?; - - let force_authoring = parachain_config.force_authoring; - let prometheus_registry = parachain_config.prometheus_registry().cloned(); - - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: None, - xcm_senders: None, - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; - - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - let announce_block = { - let sync_service = node_builder.network.sync_service.clone(); - Arc::new(move |hash, data| sync_service.announce_block(hash, data)) - }; - - let relay_chain_slot_duration = Duration::from_secs(6); - - let overseer_handle = relay_chain_interface - .overseer_handle() - .map_err(|e| sc_service::Error::Application(Box::new(e)))?; - let (mut node_builder, _) = node_builder.extract_import_queue_service(); - - start_relay_chain_tasks(StartRelayChainTasksParams { - client: node_builder.client.clone(), - announce_block: announce_block.clone(), - para_id, - relay_chain_interface: relay_chain_interface.clone(), - task_manager: &mut node_builder.task_manager, - da_recovery_profile: if collator { - DARecoveryProfile::Collator - } else { - DARecoveryProfile::FullNode - }, - import_queue: import_queue_service, - relay_chain_slot_duration, - recovery_handle: Box::new(overseer_handle.clone()), - sync_service: node_builder.network.sync_service.clone(), - })?; - - if collator { - let collator_key = collator_key - .clone() - .expect("Command line arguments do not allow this. qed"); - - let node_spawn_handle = node_builder.task_manager.spawn_handle().clone(); - let node_client = node_builder.client.clone(); - let node_backend = node_builder.backend.clone(); - - start_consensus_container( - node_client.clone(), - node_backend.clone(), - orchestrator_client.clone(), - block_import.clone(), - prometheus_registry.clone(), - node_builder.telemetry.as_ref().map(|t| t.handle()).clone(), - node_spawn_handle.clone(), - relay_chain_interface.clone(), - orchestrator_chain_interface.clone(), - node_builder.transaction_pool.clone(), - node_builder.network.sync_service.clone(), - keystore.clone(), - force_authoring, - relay_chain_slot_duration, - para_id, - orchestrator_para_id, - collator_key.clone(), - overseer_handle.clone(), - announce_block.clone(), - ); - } - - node_builder.network.start_network.start_network(); - - Ok(( - node_builder.task_manager, - node_builder.client, - node_builder.backend, - )) -} - -/// Build the import queue for the parachain runtime (manual seal). -fn build_manual_seal_import_queue( - _client: Arc, - block_import: DevParachainBlockImport, - config: &Configuration, - _telemetry: Option, - task_manager: &TaskManager, -) -> Result, sc_service::Error> { - Ok(sc_consensus_manual_seal::import_queue( - Box::new(block_import), - &task_manager.spawn_essential_handle(), - config.prometheus_registry(), - )) -} - -#[sc_tracing::logging::prefix_logs_with(container_log_str(para_id))] -fn start_consensus_container( - client: Arc, - backend: Arc, - orchestrator_client: Arc, - block_import: ContainerChainBlockImport, - prometheus_registry: Option, - telemetry: Option, - spawner: SpawnTaskHandle, - relay_chain_interface: Arc, - orchestrator_chain_interface: Arc, - transaction_pool: Arc>, - sync_oracle: Arc>, - keystore: KeystorePtr, - force_authoring: bool, - relay_chain_slot_duration: Duration, - para_id: ParaId, - orchestrator_para_id: ParaId, - collator_key: CollatorPair, - overseer_handle: OverseerHandle, - announce_block: Arc>) + Send + Sync>, -) { - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*orchestrator_client) - .expect("start_consensus_container: slot duration should exist"); - - let proposer_factory = sc_basic_authorship::ProposerFactory::with_proof_recording( - spawner.clone(), - client.clone(), - transaction_pool, - prometheus_registry.as_ref(), - telemetry.clone(), - ); - - let proposer = Proposer::new(proposer_factory); - - let collator_service = CollatorService::new( - client.clone(), - Arc::new(spawner.clone()), - announce_block, - client.clone(), - ); - - let relay_chain_interace_for_cidp = relay_chain_interface.clone(); - let relay_chain_interace_for_orch = relay_chain_interface.clone(); - let orchestrator_client_for_cidp = orchestrator_client; - let client_for_cidp = client.clone(); - let client_for_hash_provider = client.clone(); - - let code_hash_provider = move |block_hash| { - client_for_hash_provider - .code_at(block_hash) - .ok() - .map(polkadot_primitives::ValidationCode) - .map(|c| c.hash()) - }; - - let params = LookaheadTanssiAuraParams { - create_inherent_data_providers: move |block_hash, (relay_parent, _validation_data)| { - let relay_chain_interface = relay_chain_interace_for_cidp.clone(); - let orchestrator_chain_interface = orchestrator_chain_interface.clone(); - let client = client_for_cidp.clone(); - - async move { - let authorities_noting_inherent = - ccp_authorities_noting_inherent::ContainerChainAuthoritiesInherentData::create_at( - relay_parent, - &relay_chain_interface, - &orchestrator_chain_interface, - orchestrator_para_id, - ) - .await; - - let slot_duration = { - // Default to 12s if runtime API does not exist - let slot_duration_ms = client - .runtime_api() - .slot_duration(block_hash) - .unwrap_or(12_000); - - SlotDuration::from_millis(slot_duration_ms) - }; - - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - - let slot = +use futures::FutureExt; +use node_template_runtime::{self, opaque::Block, RuntimeApi}; +use sc_client_api::{Backend, BlockBackend}; +use sc_consensus_aura::{ImportQueueParams, SlotProportion, StartAuraParams}; +use sc_consensus_grandpa::SharedVoterState; +use sc_service::{error::Error as ServiceError, Configuration, TaskManager, WarpSyncParams}; +use sc_telemetry::{Telemetry, TelemetryWorker}; +use sc_transaction_pool_api::OffchainTransactionPoolFactory; +use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; +use std::{sync::Arc, time::Duration}; + +pub(crate) type FullClient = sc_service::TFullClient< + Block, + RuntimeApi, + sc_executor::WasmExecutor, +>; +type FullBackend = sc_service::TFullBackend; +type FullSelectChain = sc_consensus::LongestChain; + +/// The minimum period of blocks on which justifications will be +/// imported and generated. +const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512; + +pub type Service = sc_service::PartialComponents< + FullClient, + FullBackend, + FullSelectChain, + sc_consensus::DefaultImportQueue, + sc_transaction_pool::FullPool, + ( + sc_consensus_grandpa::GrandpaBlockImport, + sc_consensus_grandpa::LinkHalf, + Option, + ), +>; + +pub fn new_partial(config: &Configuration) -> Result { + let telemetry = config + .telemetry_endpoints + .clone() + .filter(|x| !x.is_empty()) + .map(|endpoints| -> Result<_, sc_telemetry::Error> { + let worker = TelemetryWorker::new(16)?; + let telemetry = worker.handle().new_telemetry(endpoints); + Ok((worker, telemetry)) + }) + .transpose()?; + + let executor = sc_service::new_wasm_executor::(config); + let (client, backend, keystore_container, task_manager) = + sc_service::new_full_parts::( + config, + telemetry.as_ref().map(|(_, telemetry)| telemetry.handle()), + executor, + )?; + let client = Arc::new(client); + + let telemetry = telemetry.map(|(worker, telemetry)| { + task_manager.spawn_handle().spawn("telemetry", None, worker.run()); + telemetry + }); + + let select_chain = sc_consensus::LongestChain::new(backend.clone()); + + let transaction_pool = sc_transaction_pool::BasicPool::new_full( + config.transaction_pool.clone(), + config.role.is_authority().into(), + config.prometheus_registry(), + task_manager.spawn_essential_handle(), + client.clone(), + ); + + let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import( + client.clone(), + GRANDPA_JUSTIFICATION_PERIOD, + &client, + select_chain.clone(), + telemetry.as_ref().map(|x| x.handle()), + )?; + + let cidp_client = client.clone(); + let import_queue = + sc_consensus_aura::import_queue::(ImportQueueParams { + block_import: grandpa_block_import.clone(), + justification_import: Some(Box::new(grandpa_block_import.clone())), + client: client.clone(), + create_inherent_data_providers: move |parent_hash, _| { + let cidp_client = cidp_client.clone(); + async move { + let slot_duration = sc_consensus_aura::standalone::slot_duration_at( + &*cidp_client, + parent_hash, + )?; + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - let authorities_noting_inherent = authorities_noting_inherent.ok_or_else(|| { - Box::::from( - "Failed to create authoritiesnoting inherent", - ) - })?; - - Ok((slot, timestamp, authorities_noting_inherent)) - } - }, - get_orchestrator_aux_data: move |_block_hash, (relay_parent, _validation_data)| { - let relay_chain_interace_for_orch = relay_chain_interace_for_orch.clone(); - let orchestrator_client_for_cidp = orchestrator_client_for_cidp.clone(); - - async move { - let latest_header = - ccp_authorities_noting_inherent::ContainerChainAuthoritiesInherentData::get_latest_orchestrator_head_info( - relay_parent, - &relay_chain_interace_for_orch, - orchestrator_para_id, - ) - .await; - - let latest_header = latest_header.ok_or_else(|| { - Box::::from( - "Failed to fetch latest header", - ) - })?; - - let authorities = tc_consensus::authorities::( - orchestrator_client_for_cidp.as_ref(), - &latest_header.hash(), - para_id, - ); - - let authorities = authorities.ok_or_else(|| { - Box::::from( - "Failed to fetch authorities with error", - ) - })?; - - log::info!( - "Authorities {:?} found for header {:?}", - authorities, - latest_header - ); - - let min_slot_freq = tc_consensus::min_slot_freq::( - orchestrator_client_for_cidp.as_ref(), - &latest_header.hash(), - para_id, - ); - - let aux_data = OrchestratorAuraWorkerAuxData { - authorities, - min_slot_freq, - }; - - Ok(aux_data) - } - }, - block_import, - para_client: client, - relay_client: relay_chain_interface, - sync_oracle, - keystore, - collator_key, - para_id, - overseer_handle, - slot_duration, - force_authoring, - relay_chain_slot_duration, - proposer, - collator_service, - // Very limited proposal time. - authoring_duration: Duration::from_millis(500), - para_backend: backend, - code_hash_provider, - // This cancellation token is no-op as it is not shared outside. - cancellation_token: CancellationToken::new(), - }; - - let (fut, _exit_notification_receiver) = - lookahead_tanssi_aura::run::(params); - spawner.spawn("tanssi-aura-container", None, fut); + Ok((slot, timestamp)) + } + }, + spawner: &task_manager.spawn_essential_handle(), + registry: config.prometheus_registry(), + check_for_equivocation: Default::default(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + compatibility_mode: Default::default(), + })?; + + Ok(sc_service::PartialComponents { + client, + backend, + task_manager, + import_queue, + keystore_container, + select_chain, + transaction_pool, + other: (grandpa_block_import, grandpa_link, telemetry), + }) } -/// Start collator task for orchestrator chain. -/// Returns a `CancellationToken` that can be used to cancel the collator task, -/// and a `oneshot::Receiver<()>` that can be used to wait until the task has ended. -fn start_consensus_orchestrator( - client: Arc, - backend: Arc, - block_import: ParachainBlockImport, - spawner: SpawnTaskHandle, - relay_chain_interface: Arc, - sync_oracle: Arc>, - keystore: KeystorePtr, - force_authoring: bool, - relay_chain_slot_duration: Duration, - para_id: ParaId, - collator_key: CollatorPair, - overseer_handle: OverseerHandle, - announce_block: Arc>) + Send + Sync>, - proposer_factory: ParachainProposerFactory, -) -> (CancellationToken, futures::channel::oneshot::Receiver<()>) { - let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client) - .expect("start_consensus_orchestrator: slot duration should exist"); - - let proposer = Proposer::new(proposer_factory); - - let collator_service = CollatorService::new( - client.clone(), - Arc::new(spawner.clone()), - announce_block, - client.clone(), - ); - - let relay_chain_interace_for_cidp = relay_chain_interface.clone(); - let client_set_aside_for_cidp = client.clone(); - let client_set_aside_for_orch = client.clone(); - let client_for_hash_provider = client.clone(); - - let code_hash_provider = move |block_hash| { - client_for_hash_provider - .code_at(block_hash) - .ok() - .map(polkadot_primitives::ValidationCode) - .map(|c| c.hash()) - }; - - let cancellation_token = CancellationToken::new(); - - let params = LookaheadTanssiAuraParams { - create_inherent_data_providers: move |block_hash, (relay_parent, _validation_data)| { - let relay_chain_interface = relay_chain_interace_for_cidp.clone(); - let client_set_aside_for_cidp = client_set_aside_for_cidp.clone(); - async move { - let para_ids = client_set_aside_for_cidp - .runtime_api() - .registered_paras(block_hash)?; - let para_ids: Vec<_> = para_ids.into_iter().collect(); - let author_noting_inherent = - tp_author_noting_inherent::OwnParachainInherentData::create_at( - relay_parent, - &relay_chain_interface, - ¶_ids, - ) - .await; - - // Fetch duration every block to avoid downtime when passing from 12 to 6s - let slot_duration = sc_consensus_aura::standalone::slot_duration_at( - &*client_set_aside_for_cidp.clone(), - block_hash, - ) - .expect("Slot duration should be set"); - - let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); - - let slot = +/// Builds a new service for a full client. +pub fn new_full(config: Configuration) -> Result { + let sc_service::PartialComponents { + client, + backend, + mut task_manager, + import_queue, + keystore_container, + select_chain, + transaction_pool, + other: (block_import, grandpa_link, mut telemetry), + } = new_partial(&config)?; + + let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network); + + let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( + &client.block_hash(0).ok().flatten().expect("Genesis block exists; qed"), + &config.chain_spec, + ); + let (grandpa_protocol_config, grandpa_notification_service) = + sc_consensus_grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone()); + net_config.add_notification_protocol(grandpa_protocol_config); + + let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( + backend.clone(), + grandpa_link.shared_authority_set().clone(), + Vec::default(), + )); + + let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + sc_service::build_network(sc_service::BuildNetworkParams { + config: &config, + net_config, + client: client.clone(), + transaction_pool: transaction_pool.clone(), + spawn_handle: task_manager.spawn_handle(), + import_queue, + block_announce_validator_builder: None, + warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)), + block_relay: None, + })?; + + if config.offchain_worker.enabled { + task_manager.spawn_handle().spawn( + "offchain-workers-runner", + "offchain-worker", + sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions { + runtime_api_provider: client.clone(), + is_validator: config.role.is_authority(), + keystore: Some(keystore_container.keystore()), + offchain_db: backend.offchain_storage(), + transaction_pool: Some(OffchainTransactionPoolFactory::new( + transaction_pool.clone(), + )), + network_provider: network.clone(), + enable_http_requests: true, + custom_extensions: |_| vec![], + }) + .run(client.clone(), task_manager.spawn_handle()) + .boxed(), + ); + } + + let role = config.role.clone(); + let force_authoring = config.force_authoring; + let backoff_authoring_blocks: Option<()> = None; + let name = config.network.node_name.clone(); + let enable_grandpa = !config.disable_grandpa; + let prometheus_registry = config.prometheus_registry().cloned(); + + let rpc_extensions_builder = { + let client = client.clone(); + let pool = transaction_pool.clone(); + + Box::new(move |deny_unsafe, _| { + let deps = + crate::rpc::FullDeps { client: client.clone(), pool: pool.clone(), deny_unsafe }; + crate::rpc::create_full(deps).map_err(Into::into) + }) + }; + + let _rpc_handlers = sc_service::spawn_tasks(sc_service::SpawnTasksParams { + network: network.clone(), + client: client.clone(), + keystore: keystore_container.keystore(), + task_manager: &mut task_manager, + transaction_pool: transaction_pool.clone(), + rpc_builder: rpc_extensions_builder, + backend, + system_rpc_tx, + tx_handler_controller, + sync_service: sync_service.clone(), + config, + telemetry: telemetry.as_mut(), + })?; + + if role.is_authority() { + let proposer_factory = sc_basic_authorship::ProposerFactory::new( + task_manager.spawn_handle(), + client.clone(), + transaction_pool.clone(), + prometheus_registry.as_ref(), + telemetry.as_ref().map(|x| x.handle()), + ); + + let slot_duration = sc_consensus_aura::slot_duration(&*client)?; + + let aura = sc_consensus_aura::start_aura::( + StartAuraParams { + slot_duration, + client, + select_chain, + block_import, + proposer_factory, + create_inherent_data_providers: move |_, ()| async move { + let timestamp = sp_timestamp::InherentDataProvider::from_system_time(); + + let slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( *timestamp, slot_duration, ); - let author_noting_inherent = author_noting_inherent.ok_or_else(|| { - Box::::from( - "Failed to create author noting inherent", - ) - })?; - - Ok((slot, timestamp, author_noting_inherent)) - } - }, - get_orchestrator_aux_data: move |block_hash: H256, (_relay_parent, _validation_data)| { - let client_set_aside_for_orch = client_set_aside_for_orch.clone(); - - async move { - let authorities = tc_consensus::authorities::( - client_set_aside_for_orch.as_ref(), - &block_hash, - para_id, - ); - - let authorities = authorities.ok_or_else(|| { - Box::::from( - "Failed to fetch authorities with error", - ) - })?; - - log::info!( - "Authorities {:?} found for header {:?}", - authorities, - block_hash - ); - - let aux_data = OrchestratorAuraWorkerAuxData { - authorities, - // This is the orchestrator consensus, it does not have a slot frequency - min_slot_freq: None, - }; - - Ok(aux_data) - } - }, - block_import, - para_client: client, - relay_client: relay_chain_interface, - sync_oracle, - keystore, - collator_key, - para_id, - overseer_handle, - slot_duration, - relay_chain_slot_duration, - force_authoring, - proposer, - collator_service, - // Very limited proposal time. - authoring_duration: Duration::from_millis(500), - code_hash_provider, - para_backend: backend, - cancellation_token: cancellation_token.clone(), - }; - - let (fut, exit_notification_receiver) = - lookahead_tanssi_aura::run::(params); - spawner.spawn("tanssi-aura", None, fut); - - (cancellation_token, exit_notification_receiver) -} - -/// Start a parachain node. -pub async fn start_parachain_node( - parachain_config: Configuration, - polkadot_config: Configuration, - container_config: Option<(ContainerChainCli, tokio::runtime::Handle)>, - collator_options: CollatorOptions, - para_id: ParaId, - hwbench: Option, -) -> sc_service::error::Result<(TaskManager, Arc)> { - start_node_impl( - parachain_config, - polkadot_config, - container_config, - collator_options, - para_id, - hwbench, - ) - .await -} - -pub const SOFT_DEADLINE_PERCENT: sp_runtime::Percent = sp_runtime::Percent::from_percent(100); - -/// Start a node with the given parachain `Configuration` and relay chain `Configuration`. -/// -/// This is the actual implementation that is abstract over the executor and the runtime api. -#[sc_tracing::logging::prefix_logs_with("Orchestrator Dev Node")] -pub fn start_dev_node( - orchestrator_config: Configuration, - sealing: Sealing, - hwbench: Option, - para_id: ParaId, -) -> sc_service::error::Result { - let parachain_config = prepare_node_config(orchestrator_config); - - // Create a `NodeBuilder` which helps setup parachain nodes common systems. - let node_builder = NodeConfig::new_builder(¶chain_config, hwbench)?; - - // This node block import. - let block_import = DevParachainBlockImport::new(node_builder.client.clone()); - let import_queue = build_manual_seal_import_queue( - node_builder.client.clone(), - block_import.clone(), - ¶chain_config, - node_builder - .telemetry - .as_ref() - .map(|telemetry| telemetry.handle()), - &node_builder.task_manager, - )?; - - // Build a Substrate Network. (not cumulus since it is a dev node, it mocks - // the relaychain) - let mut node_builder = node_builder.build_substrate_network(¶chain_config, import_queue)?; - - // If we're running a collator dev node we must install manual seal block - // production. - let mut command_sink = None; - let mut xcm_senders = None; - if parachain_config.role.is_authority() { - let client = node_builder.client.clone(); - let (downward_xcm_sender, downward_xcm_receiver) = flume::bounded::>(100); - let (hrmp_xcm_sender, hrmp_xcm_receiver) = flume::bounded::<(ParaId, Vec)>(100); - xcm_senders = Some((downward_xcm_sender, hrmp_xcm_sender)); - - command_sink = node_builder.install_manual_seal(ManualSealConfiguration { - block_import, - sealing, - soft_deadline: Some(SOFT_DEADLINE_PERCENT), - select_chain: sc_consensus::LongestChain::new(node_builder.backend.clone()), - consensus_data_provider: Some(Box::new( - tc_consensus::OrchestratorManualSealAuraConsensusDataProvider::new( - node_builder.client.clone(), - node_builder.keystore_container.keystore(), - para_id, - ), - )), - create_inherent_data_providers: move |block: H256, ()| { - let current_para_block = client - .number(block) - .expect("Header lookup should succeed") - .expect("Header passed in as parent should be present in backend."); - - let para_ids = client - .runtime_api() - .registered_paras(block) - .expect("registered_paras runtime API should exist") - .into_iter() - .collect(); - - let hash = client - .hash(current_para_block.saturating_sub(1)) - .expect("Hash of the desired block must be present") - .expect("Hash of the desired block should exist"); - - let para_header = client - .expect_header(hash) - .expect("Expected parachain header should exist") - .encode(); - - let para_head_data = HeadData(para_header).encode(); - let para_head_key = RelayWellKnownKeys::para_head(para_id); - let relay_slot_key = RelayWellKnownKeys::CURRENT_SLOT.to_vec(); - - let slot_duration = sc_consensus_aura::standalone::slot_duration_at( - &*client.clone(), - block, - ).expect("Slot duration should be set"); - - let mut timestamp = 0u64; - TIMESTAMP.with(|x| { - timestamp = x.clone().take(); - }); - - timestamp += dancebox_runtime::SLOT_DURATION; - let relay_slot = sp_consensus_aura::inherents::InherentDataProvider::from_timestamp_and_slot_duration( - timestamp.into(), - slot_duration, - ); - let relay_slot = u64::from(*relay_slot); - - let downward_xcm_receiver = downward_xcm_receiver.clone(); - let hrmp_xcm_receiver = hrmp_xcm_receiver.clone(); - - let client_for_xcm = client.clone(); - async move { - let mocked_author_noting = - tp_author_noting_inherent::MockAuthorNotingInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - para_ids, - slots_per_para_block: 1, - }; - let mut additional_keys = mocked_author_noting.get_key_values(); - additional_keys.append(&mut vec![(para_head_key, para_head_data), (relay_slot_key, Slot::from(relay_slot).encode())]); - - let time = MockTimestampInherentDataProvider; - let mocked_parachain = MockValidationDataInherentDataProvider { - current_para_block, - relay_offset: 1000, - relay_blocks_per_para_block: 2, - // TODO: Recheck - para_blocks_per_relay_epoch: 10, - relay_randomness_config: (), - xcm_config: MockXcmConfig::new( - &*client_for_xcm, - block, - para_id, - Default::default(), - ), - raw_downward_messages: downward_xcm_receiver.drain().collect(), - raw_horizontal_messages: hrmp_xcm_receiver.drain().collect(), - additional_key_values: Some(additional_keys), - }; - - Ok((time, mocked_parachain, mocked_author_noting)) - } - }, - })?; - } - - // This node RPC builder. - let rpc_builder = { - let client = node_builder.client.clone(); - let transaction_pool = node_builder.transaction_pool.clone(); - - Box::new(move |deny_unsafe, _| { - let deps = crate::rpc::FullDeps { - client: client.clone(), - pool: transaction_pool.clone(), - deny_unsafe, - command_sink: command_sink.clone(), - xcm_senders: xcm_senders.clone(), - }; - - crate::rpc::create_full(deps).map_err(Into::into) - }) - }; - - // We spawn all the common substrate tasks to properly run a node. - let node_builder = node_builder.spawn_common_tasks(parachain_config, rpc_builder)?; - - log::info!("Development Service Ready"); - - // We start the networking part. - node_builder.network.start_network.start_network(); - - Ok(node_builder.task_manager) -} - -/// Can be called for a `Configuration` to check if it is a configuration for -/// the orchestrator network. -pub trait IdentifyVariant { - /// Returns `true` if this is a configuration for a dev network. - fn is_dev(&self) -> bool; -} - -impl IdentifyVariant for Box { - fn is_dev(&self) -> bool { - self.chain_type() == sc_chain_spec::ChainType::Development - } -} - -/// Orchestrator Parachain Block import. We cannot use the one in cumulus as it overrides the best -/// chain selection rule -#[derive(Clone)] -pub struct OrchestratorParachainBlockImport { - inner: BI, -} - -impl OrchestratorParachainBlockImport { - /// Create a new instance. - pub fn new(inner: BI) -> Self { - Self { inner } - } -} - -/// We simply rely on the inner -#[async_trait::async_trait] -impl BlockImport for OrchestratorParachainBlockImport -where - BI: BlockImport + Send, -{ - type Error = BI::Error; - - async fn check_block( - &mut self, - block: sc_consensus::BlockCheckParams, - ) -> Result { - self.inner.check_block(block).await - } - - async fn import_block( - &mut self, - params: sc_consensus::BlockImportParams, - ) -> Result { - let res = self.inner.import_block(params).await?; - - Ok(res) - } -} - -/// But we need to implement the ParachainBlockImportMarker trait to fullfil -impl ParachainBlockImportMarker for OrchestratorParachainBlockImport {} - -/// Builder for a concrete relay chain interface, created from a full node. Builds -/// a [`RelayChainInProcessInterface`] to access relay chain data necessary for parachain operation. -/// -/// The builder takes a [`polkadot_client::Client`] -/// that wraps a concrete instance. By using [`polkadot_client::ExecuteWithClient`] -/// the builder gets access to this concrete instance and instantiates a [`RelayChainInProcessInterface`] with it. -struct OrchestratorChainInProcessInterfaceBuilder { - client: Arc, - backend: Arc, - sync_oracle: Arc, - overseer_handle: Handle, -} - -impl OrchestratorChainInProcessInterfaceBuilder { - pub fn build(self) -> Arc { - Arc::new(OrchestratorChainInProcessInterface::new( - self.client, - self.backend, - self.sync_oracle, - self.overseer_handle, - )) - } -} - -/// Provides an implementation of the [`RelayChainInterface`] using a local in-process relay chain node. -pub struct OrchestratorChainInProcessInterface { - pub full_client: Arc, - pub backend: Arc, - pub sync_oracle: Arc, - pub overseer_handle: Handle, -} - -impl OrchestratorChainInProcessInterface { - /// Create a new instance of [`RelayChainInProcessInterface`] - pub fn new( - full_client: Arc, - backend: Arc, - sync_oracle: Arc, - overseer_handle: Handle, - ) -> Self { - Self { - full_client, - backend, - sync_oracle, - overseer_handle, - } - } -} - -impl Clone for OrchestratorChainInProcessInterface { - fn clone(&self) -> Self { - Self { - full_client: self.full_client.clone(), - backend: self.backend.clone(), - sync_oracle: self.sync_oracle.clone(), - overseer_handle: self.overseer_handle.clone(), - } - } -} - -#[async_trait::async_trait] -impl OrchestratorChainInterface for OrchestratorChainInProcessInterface -where - Client: ProvideRuntimeApi - + BlockchainEvents - + AuxStore - + UsageProvider - + Sync - + Send, -{ - async fn get_storage_by_key( - &self, - orchestrator_parent: PHash, - key: &[u8], - ) -> OrchestratorChainResult> { - let state = self.backend.state_at(orchestrator_parent)?; - state - .storage(key) - .map_err(OrchestratorChainError::GenericError) - } - - async fn prove_read( - &self, - orchestrator_parent: PHash, - relevant_keys: &[Vec], - ) -> OrchestratorChainResult { - let state_backend = self.backend.state_at(orchestrator_parent)?; - - sp_state_machine::prove_read(state_backend, relevant_keys) - .map_err(OrchestratorChainError::StateMachineError) - } - - fn overseer_handle(&self) -> OrchestratorChainResult { - Ok(self.overseer_handle.clone()) - } - - /// Get a stream of import block notifications. - async fn import_notification_stream( - &self, - ) -> OrchestratorChainResult + Send>>> { - let notification_stream = self - .full_client - .import_notification_stream() - .map(|notification| notification.header); - Ok(Box::pin(notification_stream)) - } - - /// Get a stream of new best block notifications. - async fn new_best_notification_stream( - &self, - ) -> OrchestratorChainResult + Send>>> { - let notifications_stream = - self.full_client - .import_notification_stream() - .filter_map(|notification| async move { - notification.is_new_best.then_some(notification.header) - }); - Ok(Box::pin(notifications_stream)) - } - - /// Get a stream of finality notifications. - async fn finality_notification_stream( - &self, - ) -> OrchestratorChainResult + Send>>> { - let notification_stream = self - .full_client - .finality_notification_stream() - .map(|notification| notification.header); - Ok(Box::pin(notification_stream)) - } + Ok((slot, timestamp)) + }, + force_authoring, + backoff_authoring_blocks, + keystore: keystore_container.keystore(), + sync_oracle: sync_service.clone(), + justification_sync_link: sync_service.clone(), + block_proposal_slot_portion: SlotProportion::new(2f32 / 3f32), + max_block_proposal_slot_portion: None, + telemetry: telemetry.as_ref().map(|x| x.handle()), + compatibility_mode: Default::default(), + }, + )?; + + // the AURA authoring task is considered essential, i.e. if it + // fails we take down the service with it. + task_manager + .spawn_essential_handle() + .spawn_blocking("aura", Some("block-authoring"), aura); + } + + if enable_grandpa { + // if the node isn't actively participating in consensus then it doesn't + // need a keystore, regardless of which protocol we use below. + let keystore = if role.is_authority() { Some(keystore_container.keystore()) } else { None }; + + let grandpa_config = sc_consensus_grandpa::Config { + // FIXME #1578 make this available through chainspec + gossip_duration: Duration::from_millis(333), + justification_generation_period: GRANDPA_JUSTIFICATION_PERIOD, + name: Some(name), + observer_enabled: false, + keystore, + local_role: role, + telemetry: telemetry.as_ref().map(|x| x.handle()), + protocol_name: grandpa_protocol_name, + }; + + // start the full GRANDPA voter + // NOTE: non-authorities could run the GRANDPA observer protocol, but at + // this point the full voter should provide better guarantees of block + // and vote data availability than the observer. The observer has not + // been tested extensively yet and having most nodes in a network run it + // could lead to finality stalls. + let grandpa_config = sc_consensus_grandpa::GrandpaParams { + config: grandpa_config, + link: grandpa_link, + network, + sync: Arc::new(sync_service), + notification_service: grandpa_notification_service, + voting_rule: sc_consensus_grandpa::VotingRulesBuilder::default().build(), + prometheus_registry, + shared_voter_state: SharedVoterState::empty(), + telemetry: telemetry.as_ref().map(|x| x.handle()), + offchain_tx_pool_factory: OffchainTransactionPoolFactory::new(transaction_pool), + }; + + // the GRANDPA voter task is considered infallible, i.e. + // if it fails we take down the service with it. + task_manager.spawn_essential_handle().spawn_blocking( + "grandpa-voter", + None, + sc_consensus_grandpa::run_grandpa_voter(grandpa_config)?, + ); + } + + network_starter.start_network(); + Ok(task_manager) } diff --git a/node/src/tests/mod.rs b/node/src/tests/mod.rs deleted file mode 100644 index ebd43bf..0000000 --- a/node/src/tests/mod.rs +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! High level node tests, similar to spawning `tanssi-node --dev` and inspecting output logs. - -use { - crate::cli::Cli, - sc_cli::{Runner, SubstrateCli}, - sc_service::TaskManager, - std::time::Duration, -}; - -mod panics; - -// Create a runner for tests -fn create_runner() -> Runner { - // tanssi-node args should go here, `--dev` is probably enough - let cli = Cli::from_iter(["--dev"]); - let runner = cli.create_runner(&cli.run.normalize()).unwrap(); - - runner -} - -// Nice hack from polkadot-sdk to run a unit test in a separate process. -// We need to use this because create_runner sets up logging and a new panic hook, and that is -// global and fails if it was already setup by a previous test. -// Improved from upstream by using the exact test name, and by never capturing the test output. -fn run_test_in_another_process( - test_name: &str, - test_body: impl FnOnce(), -) -> Option { - run_test_in_another_process_expect_error(test_name, 0, test_body) -} - -fn run_test_in_another_process_expect_error( - test_name: &str, - exit_code: i32, - test_body: impl FnOnce(), -) -> Option { - if std::env::var("RUN_FORKED_TEST").is_ok() { - test_body(); - None - } else { - let output = std::process::Command::new(std::env::current_exe().unwrap()) - .arg(test_name) - .arg("--exact") - .arg("--nocapture") - .arg("--include-ignored") - .env("RUN_FORKED_TEST", "1") - .output() - .unwrap(); - - assert_eq!(output.status.code(), Some(exit_code)); - Some(output) - } -} - -/// Macro to get the name of the current function at runtime. Used to make calling -/// `run_test_in_another_process` less error-prone. Copied from `stdext`, but modified to remove -/// the binary name from the output. -// https://github.com/popzxc/stdext-rs/blob/dc03b4afa28b3a1d2451ca54ad252244f029099b/src/macros.rs#L63 -#[macro_export] -macro_rules! function_name { - () => {{ - // Okay, this is ugly, I get it. However, this is the best we can get on a stable rust. - fn f() {} - fn type_name_of(_: T) -> &'static str { - std::any::type_name::() - } - let name = type_name_of(f); - // `3` is the length of the `::f`. - let name = &name[..name.len() - 3]; - // Strip initial tanssi_node:: - let end_of_first_item = name.bytes().position(|x| x == b':').unwrap(); - // `2` is the length of the `::` after `tanssi_node` - &name[end_of_first_item + 2..] - }}; -} - -#[test] -fn function_name_works() { - assert_eq!(function_name!(), "tests::function_name_works"); -} - -#[test] -fn run_test_in_another_process_works() { - let parent_pid = std::process::id(); - let output = run_test_in_another_process(function_name!(), || { - let child_pid = std::process::id(); - eprintln!("Child process running, PID: {}.", child_pid); - }); - - if output.is_none() { - // Assert that the output is only None if we are the child process - assert!(std::env::var("RUN_FORKED_TEST").is_ok()); - } - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Child process running, PID: ")); - // Assert child process id is different from parent process id - assert!(!stderr.contains(&format!("PID: {}.", parent_pid))); -} diff --git a/node/src/tests/panics.rs b/node/src/tests/panics.rs deleted file mode 100644 index 826ac2c..0000000 --- a/node/src/tests/panics.rs +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see . - -//! Tests related to panics: which ones stop the node, which ones do not, which tasks are essential, -//! etc. - -use {super::*, crate::function_name}; - -// This test is from sc_cli: -// https://github.com/paritytech/polkadot-sdk/blob/39b1f50f1c251def87c1625d68567ed252dc6272/substrate/client/cli/src/runner.rs#L363 -/// This test ensures that `run_node_until_exit` aborts waiting for "stuck" tasks after 60 -/// seconds, aka doesn't wait until they are finished (which may never happen). -#[test] -#[ignore = "takes 60 seconds to run"] -fn ensure_run_until_exit_is_not_blocking_indefinitely() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - let (sender, receiver) = futures::channel::oneshot::channel(); - - // We need to use `spawn_blocking` here so that we get a dedicated thread - // for our future. This future is more blocking code that will never end. - task_manager - .spawn_handle() - .spawn_blocking("test", None, async move { - let _ = sender.send(()); - loop { - std::thread::sleep(Duration::from_secs(30)); - } - }); - - task_manager - .spawn_essential_handle() - .spawn_blocking("test2", None, async { - // Let's stop this essential task directly when our other task - // started. It will signal that the task manager should end. - let _ = receiver.await; - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Task \"test\" was still running after waiting 60 seconds to finish.")); - assert!( - !stderr.contains("Task \"test2\" was still running after waiting 60 seconds to finish.") - ); -} - -#[test] -fn node_stops_if_blocking_task_panics() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - task_manager - .spawn_handle() - .spawn_blocking("test", None, async move { - panic!("spawn_blocking panicked"); - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Thread 'tokio-runtime-worker' panicked at 'spawn_blocking panicked',")); -} - -#[test] -fn node_stops_if_non_essential_task_panics() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - task_manager.spawn_handle().spawn("test", None, async move { - panic!("non-essential task panicked"); - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!( - stderr.contains("Thread 'tokio-runtime-worker' panicked at 'non-essential task panicked',") - ); -} - -#[test] -fn node_stops_if_essential_task_panics() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - task_manager - .spawn_essential_handle() - .spawn("test", None, async move { - panic!("essential task panicked"); - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Thread 'tokio-runtime-worker' panicked at 'essential task panicked',")); -} - -#[test] -fn node_stops_if_essential_task_finishes() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - task_manager - .spawn_essential_handle() - .spawn("test", None, async move { - // Sleep for 2 seconds and return. - // An essential task that returns should cause the task manager to stop. - tokio::time::sleep(Duration::from_secs(2)).await; - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Essential task `test` failed. Shutting down service.")); -} - -#[test] -fn node_stops_if_rust_thread_panics() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - std::thread::spawn(|| panic!("rust thread panicked")); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap_err(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - assert!(stderr.contains("Thread '' panicked at 'rust thread panicked',")); -} - -#[test] -#[ignore = "takes 10 seconds to run"] -fn node_does_not_stop_if_non_essential_task_finishes() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - task_manager - .spawn_handle() - .spawn("test1", None, async move { - // Sleep for 2 seconds and return. - // A non-essential task that returns should not cause the task manager to stop. - tokio::time::sleep(Duration::from_secs(2)).await; - }); - - task_manager - .spawn_essential_handle() - .spawn("test2", None, async move { - // Sleep for 10 seconds and return. - // An essential task that returns should cause the task manager to stop. - // Therefore this node should stop after 10 seconds. - tokio::time::sleep(Duration::from_secs(10)).await; - }); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - - assert!(stderr.contains("Essential task `test2` failed. Shutting down service.")); - assert!(!stderr.contains("test1")); -} - -#[test] -fn catch_unwind_example() { - let output = run_test_in_another_process_expect_error(function_name!(), 1, || { - let runner = create_runner(); - - runner - .run_node_until_exit(move |cfg| async move { - let task_manager = TaskManager::new(cfg.tokio_handle.clone(), None).unwrap(); - - // Because of the custom panic hook set by create_runner, using catch_unwind is - // only possible in a single-threaded context after calling force_unwind. - { - let _guard = sp_panic_handler::AbortGuard::force_unwind(); - - std::panic::catch_unwind(|| { - panic!("First panic did not stop the node"); - }) - .unwrap_err(); - } - - // We dropped the guard, the default behavior is to abort - std::panic::catch_unwind(|| { - panic!("Second panic should not stop the node, but it does"); - }) - .unwrap_err(); - - Ok::<_, sc_service::Error>(task_manager) - }) - .unwrap(); - - panic!("Third panic, unreachable"); - }); - - let Some(output) = output else { return }; - - let stderr = dbg!(String::from_utf8(output.stderr).unwrap()); - assert!(stderr.contains(" panicked at 'First panic did not stop the node',")); - assert!(stderr.contains(" panicked at 'Second panic should not stop the node, but it does',")); - assert!(!stderr.contains("Third panic, unreachable")); - assert_eq!(stderr.matches(" panicked at ").count(), 2) -} diff --git a/pallets/author-noting/Cargo.toml b/pallets/author-noting/Cargo.toml deleted file mode 100644 index add6588..0000000 --- a/pallets/author-noting/Cargo.toml +++ /dev/null @@ -1,107 +0,0 @@ -[package] -name = "pallet-author-noting" -authors = { workspace = true } -description = "Author noting pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -hex = { workspace = true, optional = true, features = [ "alloc" ] } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -scale-info = { workspace = true } -serde = { workspace = true, optional = true, features = [ "derive" ] } -sp-consensus-aura = { workspace = true } -sp-core = { workspace = true } -sp-inherents = { workspace = true } -sp-runtime = { workspace = true } -sp-state-machine = { workspace = true } -sp-std = { workspace = true } -sp-trie = { workspace = true } - -cumulus-pallet-parachain-system = { workspace = true } -cumulus-primitives-core = { workspace = true } -dp-chain-state-snapshot = { workspace = true } -dp-core = { workspace = true } -nimbus-primitives = { workspace = true } -tp-author-noting-inherent = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -bounded-collections = { workspace = true } -hex-literal = { workspace = true } -polkadot-parachain-primitives = { workspace = true } -polkadot-primitives = { workspace = true } -sp-externalities = { workspace = true } -sp-io = { workspace = true } -sp-state-machine = { workspace = true } -sp-version = { workspace = true } -test-relay-sproof-builder = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "bounded-collections/std", - "cumulus-pallet-parachain-system/std", - "cumulus-primitives-core/std", - "cumulus-primitives-core/std", - "dp-chain-state-snapshot/std", - "dp-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "hex", - "hex?/std", - "log/std", - "nimbus-primitives/std", - "parity-scale-codec/std", - "polkadot-parachain-primitives/std", - "polkadot-primitives/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-consensus-aura/std", - "sp-core/std", - "sp-externalities/std", - "sp-inherents/std", - "sp-io/std", - "sp-runtime/std", - "sp-state-machine/std", - "sp-std/std", - "sp-trie/std", - "sp-version/std", - "test-relay-sproof-builder/std", - "tp-author-noting-inherent/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "hex", - "nimbus-primitives/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-primitives/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "cumulus-pallet-parachain-system/try-runtime", - "frame-support/try-runtime", - "frame-system/try-runtime", - "nimbus-primitives/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/author-noting/rpc/runtime-api/Cargo.toml b/pallets/author-noting/rpc/runtime-api/Cargo.toml deleted file mode 100644 index 9754f31..0000000 --- a/pallets/author-noting/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "pallet-author-noting-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-author-noting" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -parity-scale-codec = { workspace = true } -sp-api = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "parity-scale-codec/std", - "sp-api/std", -] diff --git a/pallets/author-noting/rpc/runtime-api/src/lib.rs b/pallets/author-noting/rpc/runtime-api/src/lib.rs deleted file mode 100644 index a33aec4..0000000 --- a/pallets/author-noting/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for Author Noting pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -sp_api::decl_runtime_apis! { - pub trait AuthorNotingApi - where - AccountId: parity_scale_codec::Codec, - BlockNumber: parity_scale_codec::Codec, - ParaId: parity_scale_codec::Codec, - { - fn latest_block_number(para_id: ParaId) -> Option; - fn latest_author(para_id: ParaId) -> Option; - } -} diff --git a/pallets/author-noting/src/benchmarks.rs b/pallets/author-noting/src/benchmarks.rs deleted file mode 100644 index b721eae..0000000 --- a/pallets/author-noting/src/benchmarks.rs +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -//! Benchmarking -use { - crate::{Call, Config, Pallet}, - cumulus_pallet_parachain_system::RelaychainStateProvider, - frame_benchmarking::{account, benchmarks}, - frame_support::assert_ok, - frame_system::RawOrigin, - sp_std::vec, - tp_traits::{GetContainerChainAuthor, GetCurrentContainerChains}, -}; - -mod test_sproof { - use sp_trie::StorageProof; - - /// Mocked proof because we cannot build proofs in a no-std environment. - /// Only stores the number of parachains, and reads a previously encoded proof for that number - /// of items from `crate::mock_proof`. - #[derive(Clone, Default)] - pub struct ParaHeaderSproofBuilder { - pub num_items: usize, - } - - impl ParaHeaderSproofBuilder { - pub fn into_state_root_and_proof( - self, - ) -> (cumulus_primitives_core::relay_chain::Hash, StorageProof) { - let encoded = crate::mock_proof::ENCODED_PROOFS[self.num_items]; - - let root = hex::decode(encoded.1).unwrap(); - let proof = StorageProof::new(encoded.2.iter().map(|s| hex::decode(s).unwrap())); - - (<[u8; 32]>::try_from(root).unwrap().into(), proof) - } - } -} - -benchmarks! { - set_latest_author_data { - // Depend on the number of parachains registered - let x in 0..100; - - let mut sproof_builder = test_sproof::ParaHeaderSproofBuilder::default(); - let mut container_chains = vec![]; - - for para_id in 0..x { - let para_id = para_id.into(); - container_chains.push(para_id); - // Mock assigned authors for this para id - let author: T::AccountId = account("account id", 0u32, 0u32); - // Use the max allowed value for num_each_container_chain - let num_each_container_chain = 2; - T::ContainerChainAuthor::set_authors_for_para_id(para_id, vec![author; num_each_container_chain]); - sproof_builder.num_items += 1; - } - - let (root, proof) = sproof_builder.into_state_root_and_proof(); - - let data = tp_author_noting_inherent::OwnParachainInherentData { - relay_storage_proof: proof, - }; - - T::ContainerChains::set_current_container_chains(&container_chains); - T::RelayChainStateProvider::set_current_relay_chain_state(cumulus_pallet_parachain_system::RelayChainState { - state_root: root, - number: 0, - }); - }: _(RawOrigin::None, data) - - set_author { - let para_id = 1000.into(); - let block_number = 1; - let author: T::AccountId = account("account id", 0u32, 0u32); - }: _(RawOrigin::Root, para_id, block_number, author, (block_number as u64).into()) - - kill_author_data { - let para_id = 1000.into(); - let block_number = 1; - let author: T::AccountId = account("account id", 0u32, 0u32); - assert_ok!(Pallet::::set_author(RawOrigin::Root.into(), para_id, block_number, author, (block_number as u64).into())); - }: _(RawOrigin::Root, para_id) - - impl_benchmark_test_suite!( - Pallet, - crate::mock::new_test_ext(), - crate::mock::Test - ); -} diff --git a/pallets/author-noting/src/lib.rs b/pallets/author-noting/src/lib.rs deleted file mode 100644 index 31ece32..0000000 --- a/pallets/author-noting/src/lib.rs +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Author Noting Pallet -//! -//! This pallet notes the author of the different containerChains that have registered: -//! -//! The set of container chains is retrieved thanks to the GetContainerChains trait -//! For each containerChain, we inspect the Header stored in the relayChain as -//! a generic header. This is the first requirement for containerChains. -//! -//! The second requirement is that an Aura digest with the slot number for the containerChains -//! needs to exist -//! -//! Using those two requirements we can select who the author was based on the collators assigned -//! to that containerChain, by simply assigning the slot position. - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use dp_chain_state_snapshot::*; -use { - cumulus_pallet_parachain_system::RelaychainStateProvider, - cumulus_primitives_core::{ - relay_chain::{BlakeTwo256, BlockNumber, HeadData}, - ParaId, - }, - dp_core::well_known_keys::PARAS_HEADS_INDEX, - frame_support::{dispatch::PostDispatchInfo, pallet_prelude::*, Hashable}, - frame_system::pallet_prelude::*, - nimbus_primitives::SlotBeacon, - parity_scale_codec::{Decode, Encode}, - sp_consensus_aura::{inherents::InherentType, Slot, AURA_ENGINE_ID}, - sp_inherents::{InherentIdentifier, IsFatalError}, - sp_runtime::{traits::Header, DigestItem, DispatchResult, RuntimeString}, - tp_author_noting_inherent::INHERENT_IDENTIFIER, - tp_traits::{AuthorNotingHook, GetContainerChainAuthor, GetCurrentContainerChains}, -}; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; -pub mod weights; -pub use weights::WeightInfo; - -#[cfg(any(test, feature = "runtime-benchmarks"))] -mod benchmarks; -#[cfg(feature = "runtime-benchmarks")] -mod mock_proof; - -pub use pallet::*; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::config] - pub trait Config: frame_system::Config { - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - type ContainerChains: GetCurrentContainerChains; - - type SelfParaId: Get; - type SlotBeacon: SlotBeacon; - - type ContainerChainAuthor: GetContainerChainAuthor; - - type RelayChainStateProvider: cumulus_pallet_parachain_system::RelaychainStateProvider; - - /// An entry-point for higher-level logic to react to containers chains authoring. - /// - /// Typically, this can be a hook to reward block authors. - type AuthorNotingHook: AuthorNotingHook; - - /// Weight information for extrinsics in this pallet. - type WeightInfo: WeightInfo; - } - - #[pallet::error] - pub enum Error { - /// The new value for a configuration parameter is invalid. - FailedReading, - FailedDecodingHeader, - AuraDigestFirstItem, - AsPreRuntimeError, - NonDecodableSlot, - AuthorNotFound, - NonAuraDigest, - } - - #[pallet::pallet] - pub struct Pallet(PhantomData); - - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_initialize(_n: BlockNumberFor) -> Weight { - let mut weight = Weight::zero(); - - // We clear this storage item to make sure its always included - DidSetContainerAuthorData::::kill(); - - weight += T::DbWeight::get().writes(1); - - // The read onfinalizes - weight += T::DbWeight::get().reads(1); - - weight - } - - fn on_finalize(_: BlockNumberFor) { - assert!( - >::exists(), - "Container chain author data needs to be present in every block!" - ); - } - } - - #[pallet::call] - impl Pallet { - #[pallet::call_index(0)] - #[pallet::weight((T::WeightInfo::set_latest_author_data(::MaxContainerChains::get()), DispatchClass::Mandatory))] - pub fn set_latest_author_data( - origin: OriginFor, - data: tp_author_noting_inherent::OwnParachainInherentData, - ) -> DispatchResultWithPostInfo { - ensure_none(origin)?; - - assert!( - !>::exists(), - "DidSetContainerAuthorData must be updated only once in a block", - ); - - let registered_para_ids = T::ContainerChains::current_container_chains(); - let mut total_weight = - T::WeightInfo::set_latest_author_data(registered_para_ids.len() as u32); - - // We do this first to make sure we don't do 2 reads (parachains and relay state) - // when we have no containers registered - // Essentially one can pass an empty proof if no container-chains are registered - if !registered_para_ids.is_empty() { - let tp_author_noting_inherent::OwnParachainInherentData { - relay_storage_proof, - } = data; - - let relay_chain_state = T::RelayChainStateProvider::current_relay_chain_state(); - let relay_storage_root = relay_chain_state.state_root; - let relay_storage_rooted_proof = - GenericStateProof::new(relay_storage_root, relay_storage_proof) - .expect("Invalid relay chain state proof"); - let parent_tanssi_slot = u64::from(T::SlotBeacon::slot()).into(); - - // TODO: we should probably fetch all authors-containers first - // then pass the vector to the hook, this would allow for a better estimation - for para_id in registered_para_ids { - match Self::fetch_block_info_from_proof( - &relay_storage_rooted_proof, - para_id, - parent_tanssi_slot, - ) { - Ok(block_info) => { - LatestAuthor::::mutate( - para_id, - |maybe_old_block_info: &mut Option>| { - if let Some(ref mut old_block_info) = maybe_old_block_info { - if block_info.block_number > old_block_info.block_number { - // We only reward author if the block increases - total_weight = total_weight.saturating_add( - T::AuthorNotingHook::on_container_author_noted( - &block_info.author, - block_info.block_number, - para_id, - ), - ); - let _ = core::mem::replace(old_block_info, block_info); - } - } else { - // If there is no previous block, we should reward the author of the first block - total_weight = total_weight.saturating_add( - T::AuthorNotingHook::on_container_author_noted( - &block_info.author, - block_info.block_number, - para_id, - ), - ); - let _ = core::mem::replace( - maybe_old_block_info, - Some(block_info), - ); - } - }, - ); - } - Err(e) => log::warn!( - "Author-noting error {:?} found in para {:?}", - e, - u32::from(para_id) - ), - } - } - } - - // We correctly set the data - DidSetContainerAuthorData::::put(true); - - Ok(PostDispatchInfo { - actual_weight: Some(total_weight), - pays_fee: Pays::No, - }) - } - - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::set_author())] - pub fn set_author( - origin: OriginFor, - para_id: ParaId, - block_number: BlockNumber, - author: T::AccountId, - latest_slot_number: Slot, - ) -> DispatchResult { - ensure_root(origin)?; - LatestAuthor::::insert( - para_id, - ContainerChainBlockInfo { - block_number, - author: author.clone(), - latest_slot_number, - }, - ); - Self::deposit_event(Event::LatestAuthorChanged { - para_id, - block_number, - new_author: author, - latest_slot_number, - }); - Ok(()) - } - - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::kill_author_data())] - pub fn kill_author_data(origin: OriginFor, para_id: ParaId) -> DispatchResult { - ensure_root(origin)?; - LatestAuthor::::remove(para_id); - Self::deposit_event(Event::RemovedAuthorData { para_id }); - Ok(()) - } - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Latest author changed - LatestAuthorChanged { - para_id: ParaId, - block_number: BlockNumber, - new_author: T::AccountId, - latest_slot_number: Slot, - }, - /// Removed author data - RemovedAuthorData { para_id: ParaId }, - } - - #[pallet::storage] - #[pallet::getter(fn latest_author)] - pub(super) type LatestAuthor = - StorageMap<_, Blake2_128Concat, ParaId, ContainerChainBlockInfo, OptionQuery>; - - /// Information extracted from the latest container chain header - #[derive( - Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo, MaxEncodedLen, - )] - #[scale_info(skip_type_params(T))] - pub struct ContainerChainBlockInfo { - pub block_number: BlockNumber, - pub author: T::AccountId, - pub latest_slot_number: Slot, - } - - /// Was the containerAuthorData set? - #[pallet::storage] - pub(super) type DidSetContainerAuthorData = StorageValue<_, bool, ValueQuery>; - - #[pallet::inherent] - impl ProvideInherent for Pallet { - type Call = Call; - type Error = InherentError; - // TODO, what should we put here - const INHERENT_IDENTIFIER: InherentIdentifier = - tp_author_noting_inherent::INHERENT_IDENTIFIER; - - fn is_inherent_required(_: &InherentData) -> Result, Self::Error> { - // Return Ok(Some(_)) unconditionally because this inherent is required in every block - Ok(Some(InherentError::Other( - sp_runtime::RuntimeString::Borrowed("Pallet Author Noting Inherent required"), - ))) - } - - fn create_inherent(data: &InherentData) -> Option { - let data: tp_author_noting_inherent::OwnParachainInherentData = data - .get_data(&INHERENT_IDENTIFIER) - .ok() - .flatten() - .expect("there is not data to be posted; qed"); - - Some(Call::set_latest_author_data { data }) - } - - fn is_inherent(call: &Self::Call) -> bool { - matches!(call, Call::set_latest_author_data { .. }) - } - } -} - -impl Pallet { - /// Fetch author and block number from a proof of header - fn fetch_block_info_from_proof( - relay_state_proof: &GenericStateProof, - para_id: ParaId, - tanssi_slot: Slot, - ) -> Result, Error> { - let bytes = para_id.twox_64_concat(); - // CONCAT - let key = [PARAS_HEADS_INDEX, bytes.as_slice()].concat(); - // We might encounter empty vecs - // We only note if we can decode - // In this process several errors can occur, but we will only log if such errors happen - // We first take the HeadData - // If the readError was that the key was not provided (identified by the Proof error), - // then panic - let head_data = relay_state_proof - .read_entry::(key.as_slice(), None) - .map_err(|e| match e { - ReadEntryErr::Proof => panic!("Invalid proof provided for para head key"), - _ => Error::::FailedReading, - })?; - - // We later take the Header decoded - let author_header = sp_runtime::generic::Header::::decode( - &mut head_data.0.as_slice(), - ) - .map_err(|_| Error::::FailedDecodingHeader)?; - - // Return author from first aura log. - // If there are no aura logs, it iterates over all the logs, then returns the error from the first element. - // This is because it is hard to return a `Vec>`. - let mut first_error = None; - for aura_digest in author_header.digest().logs() { - match Self::author_from_log(aura_digest, para_id, &author_header, tanssi_slot) { - Ok(x) => return Ok(x), - Err(e) => { - if first_error.is_none() { - first_error = Some(e); - } - } - } - } - - Err(first_error.unwrap_or(Error::::AuraDigestFirstItem)) - } - - /// Get block author from aura digest - fn author_from_log( - aura_digest: &DigestItem, - para_id: ParaId, - author_header: &sp_runtime::generic::Header, - tanssi_slot: Slot, - ) -> Result, Error> { - // We decode the digest as pre-runtime digest - let (id, mut data) = aura_digest - .as_pre_runtime() - .ok_or(Error::::AsPreRuntimeError)?; - - // Match against the Aura digest - if id == AURA_ENGINE_ID { - // DecodeSlot - let slot = InherentType::decode(&mut data).map_err(|_| Error::::NonDecodableSlot)?; - - // Fetch Author - let author = T::ContainerChainAuthor::author_for_slot(slot, para_id) - .ok_or(Error::::AuthorNotFound)?; - - Ok(ContainerChainBlockInfo { - block_number: author_header.number, - author, - // We store the slot number of the current tanssi block to have a time-based notion - // of when the last block of a container chain was included. - // Note that this is not the slot of the container chain block, and it does not - // indicate when that block was created, but when it was included in tanssi. - latest_slot_number: tanssi_slot, - }) - } else { - Err(Error::::NonAuraDigest) - } - } -} - -#[derive(Encode)] -#[cfg_attr(feature = "std", derive(Debug, Decode))] -pub enum InherentError { - Other(RuntimeString), -} - -impl IsFatalError for InherentError { - fn is_fatal_error(&self) -> bool { - match *self { - InherentError::Other(_) => true, - } - } -} - -impl InherentError { - /// Try to create an instance ouf of the given identifier and data. - #[cfg(feature = "std")] - pub fn try_from(id: &InherentIdentifier, data: &[u8]) -> Option { - if id == &INHERENT_IDENTIFIER { - ::decode(&mut &data[..]).ok() - } else { - None - } - } -} diff --git a/pallets/author-noting/src/mock.rs b/pallets/author-noting/src/mock.rs deleted file mode 100644 index 1f19a18..0000000 --- a/pallets/author-noting/src/mock.rs +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{self as author_noting_pallet, Config}, - bounded_collections::bounded_vec, - cumulus_pallet_parachain_system::{RelayChainState, RelaychainStateProvider}, - cumulus_primitives_core::ParaId, - frame_support::{ - inherent::{InherentData, ProvideInherent}, - parameter_types, - traits::{ - ConstU32, ConstU64, Everything, OnFinalize, OnInitialize, UnfilteredDispatchable, - }, - }, - frame_system::{pallet_prelude::BlockNumberFor, RawOrigin}, - parity_scale_codec::{Decode, Encode}, - polkadot_parachain_primitives::primitives::RelayChainBlockNumber, - polkadot_primitives::Slot, - sp_core::H256, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BoundedVec, BuildStorage, - }, - sp_state_machine::StorageProof, - test_relay_sproof_builder::ParaHeaderSproofBuilder, -}; - -type Block = frame_system::mocking::MockBlock; -type AccountId = u64; - -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - AuthorNoting: author_noting_pallet::{Pallet, Call, Storage, Event}, - MockData: mock_data, - } -); - -impl frame_system::Config for Test { - type BaseCallFilter = Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const ParachainId: ParaId = ParaId::new(200); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use {super::*, frame_support::pallet_prelude::*}; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -impl mock_data::Config for Test {} - -#[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - pub container_chains: BoundedVec>, -} - -impl Default for Mocks { - fn default() -> Self { - Self { - container_chains: bounded_vec![1001.into()], - } - } -} - -pub struct MockAuthorFetcher; - -impl tp_traits::GetContainerChainAuthor for MockAuthorFetcher { - fn author_for_slot(slot: Slot, _para_id: ParaId) -> Option { - Some(slot.into()) - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_authors_for_para_id(_para_id: ParaId, _authors: Vec) {} -} - -pub struct DummyBeacon {} -impl nimbus_primitives::SlotBeacon for DummyBeacon { - fn slot() -> u32 { - let block_number = System::block_number(); - - block_number as u32 - } -} - -pub struct MockContainerChainGetter; - -impl tp_traits::GetCurrentContainerChains for MockContainerChainGetter { - type MaxContainerChains = ConstU32<100>; - - fn current_container_chains() -> BoundedVec { - MockData::mock().container_chains - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_current_container_chains(container_chains: &[ParaId]) { - MockData::mutate(|m| { - m.container_chains = container_chains.to_vec().try_into().unwrap(); - }); - } -} - -pub(crate) const MOCK_RELAY_ROOT_KEY: &[u8] = b"MOCK_RELAY_ROOT_KEY"; - -pub struct MockRelayStateProvider; - -impl RelaychainStateProvider for MockRelayStateProvider { - fn current_relay_chain_state() -> RelayChainState { - let root = frame_support::storage::unhashed::get(MOCK_RELAY_ROOT_KEY) - .expect("root should be set by mock"); - - RelayChainState { - state_root: root, - number: 0, // block number is not relevant here - } - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_current_relay_chain_state(state: RelayChainState) { - frame_support::storage::unhashed::put(b"MOCK_RELAY_ROOT_KEY", &state.state_root); - } -} - -impl Config for Test { - type WeightInfo = (); - type RuntimeEvent = RuntimeEvent; - type ContainerChainAuthor = MockAuthorFetcher; - type SelfParaId = ParachainId; - type SlotBeacon = DummyBeacon; - type ContainerChains = MockContainerChainGetter; - type AuthorNotingHook = (); - type RelayChainStateProvider = MockRelayStateProvider; -} - -struct BlockTest { - n: BlockNumberFor, - within_block: Box, - after_block: Option>, -} - -// This function basically just builds a genesis storage key/value store according to -// our desired mockup. -pub fn new_test_ext() -> sp_io::TestExternalities { - frame_system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into() -} - -fn wasm_ext() -> sp_io::TestExternalities { - new_test_ext() -} - -/// BlockTests exist to test blocks with some setup: we have to assume that -/// `validate_block` will mutate and check storage in certain predictable -/// ways, for example, and we want to always ensure that tests are executed -/// in the context of some particular block number. -#[derive(Default)] -pub struct BlockTests { - tests: Vec, - ran: bool, - relay_sproof_builder_hook: - Option>, - inherent_data_hook: Option< - Box< - dyn Fn( - &BlockTests, - RelayChainBlockNumber, - &mut tp_author_noting_inherent::OwnParachainInherentData, - ), - >, - >, - overriden_state_root: Option, - overriden_state_proof: Option, - skip_inherent_insertion: bool, - skip_author_noting_on_initialize: bool, -} - -impl BlockTests { - pub fn new() -> BlockTests { - Default::default() - } - - fn add_raw(mut self, test: BlockTest) -> Self { - self.tests.push(test); - self - } - - pub fn add(self, n: BlockNumberFor, within_block: F) -> Self - where - F: 'static + Fn(), - { - self.add_raw(BlockTest { - n, - within_block: Box::new(within_block), - after_block: None, - }) - } - - pub fn with_relay_sproof_builder(mut self, f: F) -> Self - where - F: 'static + Fn(&BlockTests, RelayChainBlockNumber, &mut ParaHeaderSproofBuilder), - { - self.relay_sproof_builder_hook = Some(Box::new(f)); - self - } - - pub fn with_overriden_state_root(mut self, root: H256) -> Self { - self.overriden_state_root = Some(root); - self - } - - pub fn with_overriden_state_proof(mut self, proof: StorageProof) -> Self { - self.overriden_state_proof = Some(proof); - self - } - - pub fn skip_inherent_insertion(mut self) -> Self { - self.skip_inherent_insertion = true; - self - } - - pub fn skip_author_noting_on_initialize(mut self) -> Self { - self.skip_author_noting_on_initialize = true; - self - } - - pub fn run(&mut self) { - self.ran = true; - wasm_ext().execute_with(|| { - for BlockTest { - n, - within_block, - after_block, - } in self.tests.iter() - { - // begin initialization - System::reset_events(); - System::initialize(n, &Default::default(), &Default::default()); - - // now mess with the storage the way validate_block does - let mut sproof_builder = ParaHeaderSproofBuilder::default(); - if let Some(ref hook) = self.relay_sproof_builder_hook { - hook(self, *n as RelayChainBlockNumber, &mut sproof_builder); - } - - let (mut relay_storage_root, mut relay_storage_proof) = - sproof_builder.into_state_root_and_proof(); - - if let Some(root) = self.overriden_state_root { - relay_storage_root = root; - } - - if let Some(state) = &self.overriden_state_proof { - relay_storage_proof = state.clone(); - } - - // We write relay storage root in mock storage. - frame_support::storage::unhashed::put(MOCK_RELAY_ROOT_KEY, &relay_storage_root); - - // It is insufficient to push the author function params - // to storage; they must also be included in the inherent data. - let inherent_data = { - let mut inherent_data = InherentData::default(); - let mut system_inherent_data = - tp_author_noting_inherent::OwnParachainInherentData { - relay_storage_proof, - }; - if let Some(ref hook) = self.inherent_data_hook { - hook(self, *n as RelayChainBlockNumber, &mut system_inherent_data); - } - inherent_data - .put_data( - tp_author_noting_inherent::INHERENT_IDENTIFIER, - &system_inherent_data, - ) - .expect("failed to put VFP inherent"); - inherent_data - }; - - // execute the block - if !self.skip_author_noting_on_initialize { - AuthorNoting::on_initialize(*n); - } - - if !self.skip_inherent_insertion { - AuthorNoting::create_inherent(&inherent_data) - .expect("got an inherent") - .dispatch_bypass_filter(RawOrigin::None.into()) - .expect("dispatch succeeded"); - } - within_block(); - AuthorNoting::on_finalize(*n); - - // clean up - System::finalize(); - if let Some(after_block) = after_block { - after_block(); - } - } - }); - } -} - -impl Drop for BlockTests { - fn drop(&mut self) { - if !self.ran { - self.run(); - } - } -} diff --git a/pallets/author-noting/src/mock_proof.rs b/pallets/author-noting/src/mock_proof.rs deleted file mode 100644 index 463e1c6..0000000 --- a/pallets/author-noting/src/mock_proof.rs +++ /dev/null @@ -1,7139 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -pub const ENCODED_PROOFS: &[(u32, &str, &[&str])] = &[ -(0, "03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314", &[ -]), -(1, "b2ab0e893a631ef1bb33b2429566b9352dc55ea24d1f94bf3c5c4b58db017c8b", &[ -"3f39cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3b4def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(2, "02ec33a53ca5079845bbcfb7bf417b3e4a74ab5b4243d788b963dcb849f7e1ac", &[ -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3704def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c32008805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580b8fbd180402857391788fd58d3b31c8a6e6acf38c966f04d2d21aac579f0f219", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(3, "87982082cb1c76986cc2a1b26af250763e9152f3d97b072df91c5c99a624c665", &[ -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3704def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3200a805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380b8fbd180402857391788fd58d3b31c8a6e6acf38c966f04d2d21aac579f0f219", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(4, "aeb02daf64d090ea9354996856d95d2d01905597d7fd6fee73a9527cc157c0e3", &[ -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80108080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef654801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3200a805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380b3a05087c6d3b7c815bbe8865c4198226875db043093184ea55d232572864c59", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(5, "6e968f98e0c49d3287f19df1405f42a7f37ea858b22a1f573391bd3c28176c0d", &[ -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80108080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef654801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3202a805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380b3a05087c6d3b7c815bbe8865c4198226875db043093184ea55d232572864c59808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(6, "8a3881730253198f3518a55fb1571554cf6f28783f084b29ce918391152ffc33", &[ -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80108080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef654801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3282a80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c5805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380b3a05087c6d3b7c815bbe8865c4198226875db043093184ea55d232572864c59808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(7, "542952c121d8121bc3c92797468047c873ac0472c591eb0320d06302c9c43c7e", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80508080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da304801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3282a80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c5805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380150871c26641b8a18bcd06619ccb4a1b1a6fcb8b4514ccb946d722a81035de70808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(8, "358d100f08be73c92e0cbef1112f9fc8b3964555e346b1166e1412da762bead8", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80508080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da304801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3292a80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c5805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380150871c26641b8a18bcd06619ccb4a1b1a6fcb8b4514ccb946d722a81035de70808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(9, "932ba2bfca901da99cf913a1a1251c1574772fca247044fca9de2bcc7b1321c3", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370153cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80508080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da304801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3392a80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c58021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e805daf3d34595790f5e0b7fd3f8a1602e3037fe9c01fecaf97b9f2c3a47bdd6cf580d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380150871c26641b8a18bcd06619ccb4a1b1a6fcb8b4514ccb946d722a81035de70808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(10, "0a1dfdf13f32c6226bfaef50281786c793d92cd4757f10e616bea4cfd7b7a519", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80508080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da304801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3392a80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c58021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b380150871c26641b8a18bcd06619ccb4a1b1a6fcb8b4514ccb946d722a81035de70808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(11, "b5a1185bb1d7e3729761bbfb16b5c483dd6e55f2f073870e2623a369923a0e34", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80508080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da304801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3392e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c58021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd2280150871c26641b8a18bcd06619ccb4a1b1a6fcb8b4514ccb946d722a81035de70808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(12, "8c8c8671c3d01590d4676073c851584fa2fd9eb2ed3f1dc0c8ffc84a507e6143", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3392e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c58021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(13, "38fde536e1453db0c4d82529f6a5ccc448218a5adec53a669af3c0e7e88d9e88", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3396e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80c600c207d01c2c289813b51608e03c0ee423351c7ef4e8e30075d026ee3485c58021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(14, "df839fd538e98a9cc2921a5413e0be0c2c631060cf74fd77ae65a323b61206b7", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3396e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(15, "d77d0abe90c65dca0e62a771a1f6f1c451e60cd2ce57e7344ffdfd1fe9b69e87", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370b25ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3796e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080017fcf7ea721db85622f499809b33f2d9c1538cbfb264b7e7d5cebdbf007099780d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(16, "953508b0a6469355a675c4030ed42902d4a8de324b040449bb839a2436f5a4c7", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370b25ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3f96e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d080017fcf7ea721db85622f499809b33f2d9c1538cbfb264b7e7d5cebdbf007099780206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(17, "b50e914243762d5d52a23519484e63bc262397fc8f6717d74f0c5fc7470ebc45", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3f96e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d0805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca89808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(18, "826bc6051e895d1d67ad242a7d66409e25c80c7b11c0bdb2f27fcb6964103d69", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3702d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3f97e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d0805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980ad550109429b70b894031fe36b782d487be0e89ce368c68cd4ef904057a2f5fa808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(19, "4213c5836b1a371216b7a59725f77d701b0415da3c6410c8216576f6b21d5a3c", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3f97e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e808adb7128b638d6c55354ba0a2edcbdc73754524dd3e85dd41731be76894b54d0805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(20, "5026fa3d653b3b5982c681ae24c229421502bbd0fccbc5a7c436c747eed02d73", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3f97e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e80b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(21, "b8fa8dc00483122f9b64ee0016493824c9eeea363c74c78e7bbb27eed6e74b9e", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370bed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80206445d23bd6909453e061dbebc62741ae2c9904f8f2b7635e76c9239a7fcf1280d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(22, "cf89679cc278b481f61322b0780669d361d2cb5d7c439e3d906a3b0a37bf54a2", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370eb2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c080d5f6cd2c30d25655c3b347412b49761830f83702a9705c956b6683b66611e2b38007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(23, "5dee3a050f013c35671b21f81e16258bece9d356ddcfbb9223b12c430169a4cd", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3709c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c08058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf8007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808f4fb6d62059d528a066144dc6742ce52aef0d20a0863d218a3e331ddbfd1970801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(24, "ec79c439c702690be363ea0c9fe45fd540d73cdcb15e39522b798059d33a8167", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7e80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c08058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf8007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(25, "ee1c9a6c6a6601cc9dea297437ce36e517846f2847ddc9ac8e2728fa5cf270e1", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f8763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e8058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf8007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec801bd030c6922eb0315ba99ebf554e9782e828edac27dae3092036e6cd9f8f4979", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(26, "52e02dc01145842b0ed1c5c4a1bc3d8b3461d2be067efe78e56fd3760295cd90", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80020280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f97230680e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f3580b0a8a0fb4fc4c98430b66e832a8d053111a7df44a6217ecac95f31f8d608f4688021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e8058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf8007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(27, "fd7e2c543edb7a8aae96870440255ec760059cd7a1a904c36006e3f860b6d048", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3706b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e8058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf8007c699bfd292627df4a3a9e9b1d83a3a1fa2b1d3ab08132536dec3943d9ccd22809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(28, "20c073de1ad929a4813138f4f39a8ced7f250dd9e809277c336005da2a742bb4", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8050c080cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e8058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac809e876d296189987bb0189362197bc587d90a6c4e497208b646de659c77e0ca8980688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(29, "cba2b43efb60ccb739003a6d074018562daa9e2ba87e927be0eeba178fc18cb9", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800440804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e08086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e8058a70212812acb1ca24042410ec4808a4082d3cca3f4eb87639aad3c6f3ec6bf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(30, "af864c51d89b8b67b8d57da6e3ef3b285a805fed5a9696bacd42049b35b15a08", &[ -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370e0d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80d295d1e98eec95623add624c2f88424542f277e74ed041f2b07ba1ba52d1527e806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(31, "9bb58142083046de2f0ecb495ef913a3f39519fd1e7e43a93c913a8a996102d1", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"80100880258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b803c3129359cad79a2195f5312223fd224c6c5e723801dc4c2ab480bf231baa4c0806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(32, "bc7f9cc69315247ce83daa9da458c8c56b162601670a26f737e5b8b73e08f4a1", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2808e5bbef4cac7b9f03b34ca5c4cbfb7963d94709077b92d5031e4a43f1a709cec8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(33, "7c3f6ae66198d97ad67943a181d334f7900a383253c317ae0be4b72d65333566", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008828087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8021f86ed0abca5a9958c325eb63c5309aa820d4ff05441e60998c375079ab315e8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f280c0b85a615597d3e1d9adea44d53b875101bd46082fe8aba857907ac26b4d0df98010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(34, "5f2f581543f6bae7f1ee4b7615827268111f45ca4f0fd239d1c175969bc0ef38", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008828087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf66803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f280c0b85a615597d3e1d9adea44d53b875101bd46082fe8aba857907ac26b4d0df98010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(35, "00348281dfdb0d87431010c4e9972367658c7db783c74080c91ff92753b1ed4a", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370f0e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff806c471a5a533bad5bfe6f436e01479b8a3ffa6cc349e39a5e5523fdb63a800f35803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(36, "bd55e82aef5be71ecf57b23084d1253b7a5185e3c9b6dfb9b34f7e8f8a34b63d", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"8080808011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fb7f80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff807a56ce2d7712898c0d7cf5770cbf5c6d13364c9c5974a4a41f8fc61499be4f61803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae2", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(37, "653c040ed56010c7329484a57b8a182229cc1908331d5d9d4efb90860a3df023", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"8080808011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fbff80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff807a56ce2d7712898c0d7cf5770cbf5c6d13364c9c5974a4a41f8fc61499be4f61803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(38, "9f968f345d7c5604749c50c40be56d5fe139d025423d71f5224d1f4c1ee13b12", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3fbff80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f27803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(39, "514ff098f8be6d5194240197e3f011b74ed4e4a6a8d02fd3e972fea0ae9a0d63", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"801202809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a0803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da8050594cc778b2b84eb2937ace0b735780d0e594d74bc9779c04672142d0ff10d1805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(40, "4a26e56138abb01608a9807c20fd1964b2a466cb2c40ab05478fabda9a67b7b2", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80024080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80a1c82554a4a12a0706699b8360e814c7bd0b433a50f001cecadf7d64cc45b7ff80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a0803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f6205673805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(41, "eff1078ea5e9ea92497ad8b097b56927bc0305122e60263d9bed68e191f31f70", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80120280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a0803a35efd3ad925d2d0497021c41eeb4f88f077a44b502c4a1ef62880057d52c2c8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f6205673805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(42, "741c4d4a2c6c14a855832a3f322793312c4a8cd9ca6ba4bfdb93af7092f3a5de", &[ -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3701fc507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80121280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec3", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08017408758681ab8cdaf0f3abfa3ca64d298b4a512e7dda5c9cc8e87811a43a2fe8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f6205673805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28072e030ca172d3a1e02d3e9f2c0b88a21bab058c593f9460e9b9ee520db0b8407", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(43, "b5144749d474539a02e477fdf794d21a15006f355a894f48f1f9fc141e67a6c6", &[ -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80121280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec3", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c808c21b9ea676d83a7685ae64ee202342e9ef12962b21fd83306f39346ffab3588", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"81010180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08017408758681ab8cdaf0f3abfa3ca64d298b4a512e7dda5c9cc8e87811a43a2fe8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f6205673805ee92edf77b5ce7dd582d0142093cb93edc6816360abc4b90cb485040c6f1e8b80ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28046c72f7a71d8ef6af974a8aa9f821238d4314dad4bb8823cc28c6d4b41d98180", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(44, "7f867f8d48a2f2a2ec532722af96739b756aa0a8f271af040336775543f4b066", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80121280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec3", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"81010180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08017408758681ab8cdaf0f3abfa3ca64d298b4a512e7dda5c9cc8e87811a43a2fe8064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f62056738089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28046c72f7a71d8ef6af974a8aa9f821238d4314dad4bb8823cc28c6d4b41d98180", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(45, "f2bf33d541038b7b55cc99d32024411bea353a87d0ac04ed4a17529ad7f26f41", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80130280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"81010180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da804843dbb1f9e9ceb4c9214f2cfd7c71834c3918aa1355125e5f515444f62056738089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28046c72f7a71d8ef6af974a8aa9f821238d4314dad4bb8823cc28c6d4b41d98180", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(46, "8c54785d8170059e65fa0dec459a9f7280529c496dcea8f6703e8a3be0eab26f", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"81010180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28046c72f7a71d8ef6af974a8aa9f821238d4314dad4bb8823cc28c6d4b41d98180", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(47, "811fec3246b2e88193534771bac5eb924b928e7e09c888332f959428ac90ed62", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e8019c801283c4dcb7f5215285a810ccb938b8af7a8fc3eedb5203d45d0a46a69d1", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80140880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d46", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780ec5cc08eb0cfa9c33038d4ed85b38d0e4e23e0bfe7c7d925b6e84d5cd90b66ab806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28055249cd029dbb71406e441d9b83fa57f884b6db86b1e48e7e31248b3b5b121dc", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(48, "3e596a4f3dc22a05d5f2b468ae20054f739dbad74f4d9725c164f76e0258da84", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e8019c801283c4dcb7f5215285a810ccb938b8af7a8fc3eedb5203d45d0a46a69d1", -"80124080e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d580af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8025fb7ddfbe9d4a74b9f29ee802f160f51cfb47abc0266989be8447a4b9963d2780dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28055249cd029dbb71406e441d9b83fa57f884b6db86b1e48e7e31248b3b5b121dc", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(49, "2da2007b7410ec5b794f792d7512a0313365393664567b93d3b22f3e38c7211f", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3707351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e8019c801283c4dcb7f5215285a810ccb938b8af7a8fc3eedb5203d45d0a46a69d1", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d806816a6558cf8ed512b3fdb0294aad5405c2ab1e6c57532e8bd88d61446f24e9e80c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28055249cd029dbb71406e441d9b83fa57f884b6db86b1e48e7e31248b3b5b121dc", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(50, "08ba6e5b104aeff46d7558721c5ffb2d307a904258d3e6b757aa233af605202e", &[ -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e8019c801283c4dcb7f5215285a810ccb938b8af7a8fc3eedb5203d45d0a46a69d1", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec6167180c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae28055249cd029dbb71406e441d9b83fa57f884b6db86b1e48e7e31248b3b5b121dc", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(51, "e39c485c0b448759b69719298bb3fca5098fa656cf4657c8fdb219d453449673", &[ -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366f3965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"800460804bda4345a327c69cfb1a460b496f4308547c5b6dff5f45544813c7f296cdb7e080b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec6167180c4197388f534b001e615eec4f737f7fa7cf8ff5771d4be33285a7023fa8f78f380676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(52, "3213f300fb439adf0c8fd6c61636f22d34cf418e650ef495e2f78132f0b514e5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"808080806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58064497ded3218d1ba2f82551bcac3abf617a2c725dd54b992b6339ff16dc525da802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(53, "a199ddb5c669e2b024b4969f2136d4aa002bca0a305ed29ca6d73a73249758da", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"804008801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c80ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58083a2d31543870d9943cc15f053fd9db8b6a7c036e5cdcb37a49051c7821b90c9802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8089f0295eadf3a847f5bd32c1365ca4c400b424bb32005f709954e2ad96d6add780628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(54, "1d4fe71e6036726528ac6929941cece3950c7c8f92e36a0c9709cd1c50408bd7", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80124280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff8046e39c9a8b7829759c026c054489da511e9cf23d579367beda812bfdc1d11d7c80dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58083a2d31543870d9943cc15f053fd9db8b6a7c036e5cdcb37a49051c7821b90c9802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(55, "c276f168d8160a785e061b16653cf0c02fa62d183aa019b2b9bf6089b58e1d17", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ab1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2806c0029cd50ed80f251d175a8342dd45078c031358b25f544850431da1ae573538019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f58083a2d31543870d9943cc15f053fd9db8b6a7c036e5cdcb37a49051c7821b90c9802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(56, "cfd592b79031884d80dc05639ed611a9d6ea3f7337c37522ebfc70c1abd27a44", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800044803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a09809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004018064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f8", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef280024a49ff0b5f3eefdaf569de9eacb3eff9fc56570df1267be7382c0a5f86c3ad8019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f5806524ad3ce2bc20cdf490d6819ab69e2d38d4538642a0f904c463132468d62def802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80688d4df901a64929ce89cb558c000839cbf9e26ea30ba7f5451ee5f798ea47f2800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(57, "4f218eced95492bc82fe95534fbcef306b0e471c410b1bb2b3576fe9392bca2a", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800044803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a09809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125280ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b9080e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef280024a49ff0b5f3eefdaf569de9eacb3eff9fc56570df1267be7382c0a5f86c3ad8019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080eea952c3f34bf874953c7e39208ba3c42377bd50ed9fad16843fd456679229f5806524ad3ce2bc20cdf490d6819ab69e2d38d4538642a0f904c463132468d62def802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(58, "67591660c23cfcfd2c1d76e6023780e9fa58de590e76c52d96f89cdeffd70a94", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800044803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a09809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125380ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8052c080e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef280024a49ff0b5f3eefdaf569de9eacb3eff9fc56570df1267be7382c0a5f86c3ad8019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080146ff11f04d93fb61ef5b76bb525acf4a2faf31554a09aa087b12be29be56bd8806524ad3ce2bc20cdf490d6819ab69e2d38d4538642a0f904c463132468d62def802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac80e73d54ab5ee0577d32068ea39913439d0ef01fd21a2d012df52c1e49fb525b2e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(59, "c5b6a99dffcde6ca971b8dc283e9aba51679f149fc6113b3f79c5728700f3c85", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800044803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a09809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125380ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef280024a49ff0b5f3eefdaf569de9eacb3eff9fc56570df1267be7382c0a5f86c3ad8019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080146ff11f04d93fb61ef5b76bb525acf4a2faf31554a09aa087b12be29be56bd8806524ad3ce2bc20cdf490d6819ab69e2d38d4538642a0f904c463132468d62def802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(60, "ed1340c229c96ddb82359882b4108fb1b1187d737091b4f855ef2a67e936ca54", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800a0080a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125380ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080146ff11f04d93fb61ef5b76bb525acf4a2faf31554a09aa087b12be29be56bd88082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280ea8d6faedcf64fa17af64d887eefeda987c8b8ed8baaa3f3029988f52f3aefc1", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(61, "3eb90c410a9d4d76f2325f8346a775b887a74e18233a4fc147a9fd363c5140ca", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125380ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400280f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a2938088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080146ff11f04d93fb61ef5b76bb525acf4a2faf31554a09aa087b12be29be56bd88082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf80676423908b2abb20630e230ebb2ba986e4fe3175d93fd78ff92557b48d9fa4ac808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(62, "849b436dd551563eb33612e4e657ac0d47cac7bbadc0a9555b338436900dfb05", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80125380ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080146ff11f04d93fb61ef5b76bb525acf4a2faf31554a09aa087b12be29be56bd88082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(63, "478aecfc36420f9c9f94459608c1ba39c387ae06946a758a7819a3a58c3d37c5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3635383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e80ba100d8205178e32867a31e9691e61f2b1be5faa67306e136f2347bb8f9723068063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a0809a5401680df902c050cc77da76247493138973e105f0a738405301eb029527288082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(64, "2a23267b790b6c13eb5c1b960cf9e686b33e74c57a41896403cd2781289f545e", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a4280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80456870037dca8a846f89115705ad5287a1e89224cd619e64f2c46e687879380580dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(65, "84719e1eca09c87ab7c64e9dd4f2d18ab67bc935f43b0ac70ab6904226cdfea5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"80046080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671805cdcdc506cef4cbde63abdd64d34641863f9f1c2ab878e35d0a22d581d8d25cf802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(66, "e58ba82130be591871ad6b1d81caa44d0821b47b956b9e7237d37a2f05a7714c", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3687dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d80ebc2a061e9dac3dfb463c6dae34575c708e6f40a7499a762839452767a5ba1f680df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680dfa35075ae1cec4413b52f1aebe6d9b2c6d552535f556ea49a71cdee8d2b9f2780aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(67, "5a1eb7ca6c189eef701f38613645b575ea8fe3a988dad1e14b75849617c9dcb5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400c801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c8021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac8061c8513f8b44db012557b101f6eae8e9834497cc281e9162f22bdafc00074c3080628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(68, "443a300f65ff78ef82d0e1249ff8cc472e3f1996a12b37d8179ad62bacf7fbb8", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004058064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400e801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac80f37e248886162c3a3422f8615b24098a703b60940512e05aed9d957638cf9b3e80628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80c5b74caffec30153ceb77805e2116b3f73939c8aef5c16db327ce3b4360005e8800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(69, "56f71110e35307a12ee10c095e0ee6531f3ab622104c2850bc36626e96c9ced5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"8008928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400e801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac80f37e248886162c3a3422f8615b24098a703b60940512e05aed9d957638cf9b3e80628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b7800f84e8b76210b123fb2cc384b04d0fa398f22e30ec27c7b1f706cb2a51bb4b5b8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(70, "896af49730cc259282019f44ead09c316f7124df4d53466b4358769f8c71c91b", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80400e801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac80f37e248886162c3a3422f8615b24098a703b60940512e05aed9d957638cf9b3e80628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(71, "dcab65ad58a02ac87a328a8a19f81b5c05d87d90951f74e0ab46184a6797649d", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cc9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac801d372746b13555996b155819beb8afdbaa115efc81f96b770ad8225ab2445dae80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473802a011526a030d30bf0060887bee1f3bffb6f8044024a6da75307b2e66098c6ac80649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(72, "cb763437ca50f6f605cf494e6807043183c934e3ba9f86e6e3bb109c569dc901", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3656c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80930280763ff151e9b4657f9990f8a63a883cf18367125f84d4a2a02d10a3f308b0a83d809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473806bfe37e26a937f7fba4589c87b60c5a2e57a9200c6d83b887bdbe7cec5e2e15480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(73, "b8f9213bdf3f9fd29d0a20bd8d9b6a12b03b330e1d556870bb8320d95aea7161", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80400380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb717", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e802ee0f6f97c2ab1ce5f9c0f5f07d008930ac0f51469c83a6ff8466e60eda2eec7808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(74, "8b2c1940dbde5bf54b7668b3ba18ae359c256a5d4d13a339967f54bec923f3c0", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c9c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af80745b87b7b7c6e7b44197818ffb1a42d7e3eecb061201a1403b18b195edca5ec380b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a08099ef1ea287af00e3092d14a429b80e8c5823e672177a549c94ccea2de7d158c48082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(75, "8f188c07bf8e324213fa34ff22ccd1d7904e01081e1528aa6b14040522b4a2df", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"80818080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b1268019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b8082464d1a7f5a1d35d9f583ad600473bf04e5268a48b68ddcfb5592f3b2e1a473804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(76, "4dbea5abd79412579a5d943353571f988596b95503e12e48a90e898cbd6701b5", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c39180990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80dc059529172534e31b8dcf909d2de070fc8fc226b85769b7c4240c1bc38998b780e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(77, "1e5591c62c3e0b91103b918c6f72df26cf3ca24f1a5eb2937cf476c916a5cbce", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804080402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80587dfee5aac37203c7cd269ad8fe6de582c875a4e88d77b151cc57711ec61671804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b680e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(78, "20197241778e18f7e8328e30f96d061d83daf0cd0a3866ead101122eb55c4bdf", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"370c1954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e80aa56d24ce9e9a7c5a7b06844abb253ec544ef2244cdc84cf01f72b89fb0ee9a080b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b680e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(79, "7e3f0a75d0746df5b3faa9dcc90e0209c2a50757dd752106bea1206ba7df1546", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80148880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef880628319e3b9084bd5596a427c00d786e902debd69cd577ac2be083e71b939dd5d80e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b680e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(80, "76cfa2fd4c395aac0f611c92215b18caaa32d24fe455c4ba405e1903efad794e", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec160803902cf71be2c3bc0a7c9e7da6ba580019bd4802db998fbbf7723c85acc5fbf668021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b680e4fb338f8ff160780e9f806bc567edc3413bc5d370d281d830428f90bf97b4498010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(81, "9135e264dd83dbc8e1a7e6ece2224c4d521628ec4115f6e5a91635b3b4363124", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b9d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f9980e2dc3d1fe8cf87075c5f7f1aa4cea634d3cf2d90d5ff95da68c8edbeaaa582af8058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec1608050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80b87694ac2a77879caec0c112e89692100b623b1ccb9ac8fcfcb219479ebccb4b80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b68068be96b3276d6b37b3e075370fd8f677b406403548b5cfb4dad670cba871924f8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(82, "e7f25a8dc72e740791c6e1a990aed37fa36aa2f533dead83ae79aadf140d619f", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3670660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80fab4494e214b907b4924c298d4fb3a5c79e1614dca72aed54a0654f9e4172920", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec1608050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ee91f57386d1aa49c0343574f46fe2e5327b4f5bc181d5209ea876cfff64feac80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e80635cd90dc3330d1ea606c733eb1884109d7e33f68c40d01c74a8e47b6fb813b68068be96b3276d6b37b3e075370fd8f677b406403548b5cfb4dad670cba871924f8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(83, "aef4f10a8fb41f1342540c662f27b27c4ee921427c23bdd7f730bf3c25241c2a", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80135380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f97008063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec1608050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ee91f57386d1aa49c0343574f46fe2e5327b4f5bc181d5209ea876cfff64feac80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918068be96b3276d6b37b3e075370fd8f677b406403548b5cfb4dad670cba871924f8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(84, "4a5ad0aedda255b6fdc72dcadec874d0a4ecf6ad0db42d322cdba70554e7e308", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b01ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80dd704a0393cb6703c5185be5b1c522cfc941df9cfc40ea8e829a7152e5eec1608050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918068be96b3276d6b37b3e075370fd8f677b406403548b5cfb4dad670cba871924f8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(85, "4a96bf323dcd1570729a603338f425aaaae6d228d8076d78b36ed0fb7141d1e7", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"80804180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a9005480e0d9073ef4e83545b5aa673366e86c80741a08b5681dc45a58c9c326c0d9daf9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918069a9fb37f34624e6b89827f4b8cf479bbf922e145344193d54d9b65563d36ad08010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(86, "cab983b349ed026c6a47f17277e428e43897efa4303df2dff6710fc11b728622", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350adf0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"800210804e69397633b7cc5f01353feb7a30392e7180fee11bfe0a9d4077d8e92932cbf0803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8050da9108f67e43f86e887efadf46652106005f82140cfda88093f27a0e67fd6d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918069a9fb37f34624e6b89827f4b8cf479bbf922e145344193d54d9b65563d36ad08010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(87, "98c7eefb5743fb61c855e72738756c330238ed13776130b925450e162af5df1b", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080848011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680089794666f59d195afc45eb88cdc19fb5976219a30c67173fa59ea4b09ad3e9e8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(88, "75645220bfe4d0e0f75236d0914184816453d0c99c6e090f6e8aabbeb1478765", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"8000908028c8d8515e64aa88b94657dc6442dc9feb1602a249b97cae3b576441305ea69580f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc8093e25c450e175a08d5c4bdf3ee71ac71f840b61aabc38d644e59235f944ec90c80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(89, "f0f7d81ed326f9b587c45c200998a04175b62148b88583480712b439ab0a37a8", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80009080b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081c080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b126802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80db248dd9a8ce85cbb96c709af7d0f855d0c2d07765839001ca3e619aeb4d95ad80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80c989abf8c26de90fe350762b1d6fb1ddf71c41b13123b4793a7d56a7b8c7d566804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(90, "07db3627835cddb007ca6029d8a326030a05ee125820bd65c5f75ca13c9e9525", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80009080b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80446080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd2680b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80db248dd9a8ce85cbb96c709af7d0f855d0c2d07765839001ca3e619aeb4d95ad80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9804e5acb320b896f55cd5cff0b6ba3f55e037e509e13f611914d0bb09d93f3147e80fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(91, "a3e1e51f6340b236ebcdc1ee8f64da44905bf808befebbf58092fdfe2dd8c45a", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80009080b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"801b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80db248dd9a8ce85cbb96c709af7d0f855d0c2d07765839001ca3e619aeb4d95ad80ac450c4d8fbdd116fabf1d1bd81389e36639d156616bb992c3e80926bc54b42f80179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e880fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(92, "ae617c4c3ef39158b855a1534494a72c366e90abc6ff45cd2b781cf9ce325f17", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"80009080b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80db248dd9a8ce85cbb96c709af7d0f855d0c2d07765839001ca3e619aeb4d95ad80b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e880fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(93, "ac9e5a7a6b10d78af1c000970762dc0df8f9043f77eafd9163dc3e63cf9f2dcc", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800091801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"8053c080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80cf9e6d82109110c899eff90a4111caa2f384381c884f597a1c453d0bbdfa822480b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e880fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb95808958883017365deab17598c47410dc55158d556f4b49ee4a0246cdf3ba5b288e809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(94, "4fec7f322c9df4a9a69e9b66dc850c251b0dd95f734107617fbfb75c97295f33", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800082809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"800091801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80cf9e6d82109110c899eff90a4111caa2f384381c884f597a1c453d0bbdfa822480b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e880fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb9580303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd8010af897c696d0bfd628a7d96813bd7b3bb1222d9f8bf508836a713d4b66c6ae280bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(95, "be870e97db7399a66d2a4cfe881a0dacef17c862c9ecf9358231c7960f2d0a8d", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800091801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80402380f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80cf9e6d82109110c899eff90a4111caa2f384381c884f597a1c453d0bbdfa822480b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e880fe71a812a9086838817ee8d7beeae13aed00daa0bec81a9340737c2213d6fb9580303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(96, "4e8fcd921f37e2447d291f8eea9487a42256b82289655c2a1203edc0fa8f732f", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36bdd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c0ca5d4ed90bc35f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800091801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80502380520e2095f1bc5b9fbfda653446e65cd648a005f9cf673d79328d1e8fe42eb6c080f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c807c9cd4470fa944d5459e28a2a6ae93e67b9d6d079c10917af4c674733df1b34b80df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a6806183ed46b25558d4ea6478db1042e3cb5542e928ae030ddbe974824861e4c2bc80cf9e6d82109110c899eff90a4111caa2f384381c884f597a1c453d0bbdfa822480b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e8801d03f3b796acd059cd74c4b853fe4fc97e30feab303b3787cea011c7e081df4c80303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(97, "a1ac381aafa26f1e38db92052a2dec8351a6130f68dd96a50a2437891bb4b228", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3504d0e2f032f8fb60000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c0ca5d4ed90bc35f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80002880a18c99579083e06002d88611e5d819f73880d14292f528ce208f4a31fb74dcaf8091ecc4849bb56f990174440714e8f633bcdf11570802376ce3384e398cb3f39e", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"800091801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80502380520e2095f1bc5b9fbfda653446e65cd648a005f9cf673d79328d1e8fe42eb6c080f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c800c04a15184b3e8a99683ad55ae2394a88bc6b37ac85606674f460ec01862518880df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680c7b8794c5dd8078bea433732afae6f91f59a716d700594c0492e4d14a4232d6380cf9e6d82109110c899eff90a4111caa2f384381c884f597a1c453d0bbdfa822480b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e8801d03f3b796acd059cd74c4b853fe4fc97e30feab303b3787cea011c7e081df4c80303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(98, "e6f9c099aad295807ba88685f2648106b3827a40b88ae69ceb38b50cac1fc871", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3504d0e2f032f8fb60000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c0ca5d4ed90bc35f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cca24f559b81f161000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80002880a18c99579083e06002d88611e5d819f73880d14292f528ce208f4a31fb74dcaf8091ecc4849bb56f990174440714e8f633bcdf11570802376ce3384e398cb3f39e", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800891801df5a0986c26f435abf53b0f3cceb325fa75215ff44872f2d98d0841d554bd75801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806fa687070fef5cfac06d7cd36a1ceff49f3b291e058b203f1f37d3db57aa50cf80d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80502380520e2095f1bc5b9fbfda653446e65cd648a005f9cf673d79328d1e8fe42eb6c080f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c800c04a15184b3e8a99683ad55ae2394a88bc6b37ac85606674f460ec01862518880df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff802a5c23712605db3d526b86ee3ca151f783b2940fafdf7d8c34e138e4941583a680c7b8794c5dd8078bea433732afae6f91f59a716d700594c0492e4d14a4232d6380ba66995a4b3ebf1a8d1790f7704e6cb669bd22b84a849f37c64896b0a7b57fc880b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e8801d03f3b796acd059cd74c4b853fe4fc97e30feab303b3787cea011c7e081df4c80303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(99, "50ca34086ca6894bd58cc772db1e58c29b8fd80006f29943801813d6c9a3d765", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3504d0e2f032f8fb60000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506063c3c4b380762000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c0ca5d4ed90bc35f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cca24f559b81f161000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80002880a18c99579083e06002d88611e5d819f73880d14292f528ce208f4a31fb74dcaf8091ecc4849bb56f990174440714e8f633bcdf11570802376ce3384e398cb3f39e", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8002018048eaa995a2bd759c6f3d71c2a5bba09df95b021401399e9a67ac6ffd2a7edd228077e15bf2d309885c6146bf04a0a564aae51d00be986c202e5ddd0bcd1cf83b13", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800891801df5a0986c26f435abf53b0f3cceb325fa75215ff44872f2d98d0841d554bd75801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806efef5b40140fbe61f34e7ecf285d9a38400c9448d70d5b3d871b0812904e41280d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80502380520e2095f1bc5b9fbfda653446e65cd648a005f9cf673d79328d1e8fe42eb6c080f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c800c04a15184b3e8a99683ad55ae2394a88bc6b37ac85606674f460ec01862518880df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8081e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef2802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80460c8f46364ccb2ea354b431415940c4cb35be6f4c706bbe9f87e14ef3fa1a2880c7b8794c5dd8078bea433732afae6f91f59a716d700594c0492e4d14a4232d6380ba66995a4b3ebf1a8d1790f7704e6cb669bd22b84a849f37c64896b0a7b57fc880b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580179b8b59c5d16586932adadb1677eb88be82fac6016574c00f2b7d0552ef8226804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e8801d03f3b796acd059cd74c4b853fe4fc97e30feab303b3787cea011c7e081df4c80303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -(100, "3a23b69cb1531afeb6062a6d0548bb61c5ea7a19c0b6adac9f820a68d24c3b77", &[ -"330965faf45f0f16000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"330e72d371f90b33000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34df0979c61e5050000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"34fc1bc25c1a0256000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35001ffae5405ae545000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500644d464b2ada3f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3500660717b7e77744000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350341bfbb0a4e9232000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3503e11458bdb7d23b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3504d0e2f032f8fb60000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505383ae310c5170d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3505ca40f14443730e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506063c3c4b380762000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3506c834eadafc6027000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35070f195e2e239e54000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"35071e8bab8df16b37000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507b154ae2c3eac52000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3507dce6c74c4c4b25000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350831b37c29790042000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350954dd9f53cf8c26000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350986912843223804000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509bec0ea9167f851000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509c353c0737ed329000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3509d2792f8bd4c305000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b1c010b3bff4908000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b5f9185eb807358000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7388d1b4acc847000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350b7abb205636532e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350bc52fb6d756d72a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c507d3bfbfd3f24000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c62a803faa4cc30000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350c9d27e0a04ef82d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350d454046f82f9a48000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dd9e89b24ae1c57000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350dfbd1761799352b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"350e7397d1da2f934a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360d969b0e48cab707000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"360e76f06ebd150314000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361526abea1f15b63d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361b534b9db2069d34000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f6295e49ed2492c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"361f803a716bd3b906000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3620dc6e976795f45e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36233f9722d30ebf31000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362549884eecaf5b4d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3625d85e1a2f8d065b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"362e391cb054825c59000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36351b19f226feaa18000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3648917b575ca3da4e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"364ecfc48eeb4c4c1f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365232b38c69c55b55000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3653cb1f00942ff401000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3654b59c80ee3d6140000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655c2a66f0d62cb63000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3655d945662af3f54c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"365a72f5787cb1a035000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"366e51c7f40142a143000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3674d8ea3f6de8f43c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"367a9a93920005ae1d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3681a5fc457aa15c36000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368763d79d01484e0c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368b52bf1678443909000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"368f1513cb50220646000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369190c148ccde2019000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3693d8a4ce7799c00b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36981f68b97df47f41000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36988731014ffd2c3e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369892d44badd6af13000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"3699714fc5c21da95c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"369f0caa17b4771b4b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a155a227f42ece22000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a35891bef7ae6139000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a723b5515886f73a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36a97cdde594c82e23000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36af5aee76b6da942f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b274250e6753f00a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b27f1eaef06bb903000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b2dcce60f37a2702000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b3c130b5564d5d5a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36b444df785313ea49000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c0ca5d4ed90bc35f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36c5c8b4e6df936d28000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cca24f559b81f161000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ccada06515787c10000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cda15e347d758120000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36cfe8bf76ba27f01e000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d276a543d165445d000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d703a71c18388a53000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36d9675cf95dcf1a11000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36def25cfda6ef3a00000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36e76a9656c0445715000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ea158dbfc2e1de12000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ec63ce7d367c571b000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ed79b7ec00219e0f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ee89fbf5fe7bf01c000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f0427aaa15e6e138000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f163007fa5a70017000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f476545300866c4f000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36f85e685c16504e1a000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"36ff66b7ca63162821000000f4729b675f958ea8b142b18b8a20a26c703633f8d8ec8653a7043ddc3ca20922", -"800009803c07fdae738e5a90e9c773e644ca9830ff4106c78deb999c49b06a285e9351c3809260ef60e9cd811583eafe7b1c95b0a4dd542621a2a39c38479ca994be40284c", -"80002880a18c99579083e06002d88611e5d819f73880d14292f528ce208f4a31fb74dcaf8091ecc4849bb56f990174440714e8f633bcdf11570802376ce3384e398cb3f39e", -"80003080fdba8764e3fb4b1c4b9864eefd272d3c58627fb8ede7b797cb07b0434a7fbf658026e9b7889f608274e4ee4fb842281af8cdeb14c51ef6add7c7c9fd974468003c", -"800064803b37982828bc05d280cf9b5abf56a7499db46abc478612309b8f62fd78760a0980950e488fd69cc8a099f8ef82654a0f315c7cc77e8ca402fb1ee63257703f3a91809221c38f84ce1b1222666f26bb2e3002ad7844286c3370a81665fbbd15186169", -"8001088048a3f89999e1f1a682e87a2a9e27de527c7924fae99dd7741c56643009750f658068f7f60f7408917bd088b9d692438824dadc31a6989db1e4b4f641dca2bd71fd", -"800180805ec22d1a589102212487dfb0992d09b0377e5d14464b247592068bc4566573d280c6f4fcca50e776a7ced6a9570c03c2270d5c8cac317d227e5ff16c36dcf039e4", -"8002018048eaa995a2bd759c6f3d71c2a5bba09df95b021401399e9a67ac6ffd2a7edd228077e15bf2d309885c6146bf04a0a564aae51d00be986c202e5ddd0bcd1cf83b13", -"800210801d28e528ad66024b83d96f8de8945178450173ecc5e3daf793b4b58e6c56b6398065bb8364425107d0c20e3ecb1acc16ba2708edccedc57e3ee33672ba5b68230e", -"8002108073b50b0c8d753c7b7924f04616837dfbc3f41b9540d44a138003c76cb6037767803ee8d587897b72a4a5cd90bb0560139350532ee434cc4c79d652b39491a884f9", -"80040880978573f60ea6b4ea22f6e123c3ddb1dba8d467cc8692dd6505585c06af8d911a80fb3baf251bc07c61f41ddf36c4236fa3c729e0ec69d9440f6d28366ffb2b3a12", -"8004408021b561044d3f715c006840fc152fdb0cf3664cc9ee2258932d213a0f418b63928098ec96fa9f9d7b4ab57b392c42739d12e9d189f08a459c401db647daeb993586", -"8008028070f87082dacff6d3fc4c29eb3b528c7715996838ec218673c1a23856f634fa5980f5f339ea9a1cba05b3c82a8df5caeb5c2ba385d5b88eb13ac081b2ec947b33e7", -"800891801df5a0986c26f435abf53b0f3cceb325fa75215ff44872f2d98d0841d554bd75801202603992f87ffd1b331ecff6286dcb3a10158df4d90547559f3c4a2e420d7a80b8a5f657163084109a89c63d529bd646d8f03a805005d87438803c7de0c21db680f11d188dda110f1c765398d003adbe6eca8035a2fa678406ce8abcae67442b0f", -"800a00808f8a3b21891f572172bd56220186493255cb26c89d96a1fb042d3bdf16dbbbfa80bbf52b48d123774f61c0afa6e5d8997fdfb368570853ecb720eb53855dbd57c0", -"800b00800c686fd9f6dbafdc0e30fc1b1433c3095e6421552ef64fd8ecd39a24e702451b80a23eee3e1343850de4884f1b9e5a79eda441c810b3c7828630687555dabb329e804c35f4cf81164836355a13a7136ed623d1661c12d454000a55e22a3cf31ac997", -"800c258064240a40f9e8ac3663a71ad8c939a30cfabce30bc437e87860de88dc0e01c391805f8b81822a3a7da05050e14a02f05059cf85aed792912d63e2ace04f840aa5ef80990f02858526dc89d11726f71540519b6fbfbc3d2d7fc6bb266e3bc5d4afd8f880e222fad3d8c35686bc05731b8e44ec9b9e3e982f8ad7e54507f02eb7e9842a2b80be59474dcf0ae8e00e15bb1344b249dfad37be8e4b9ec12e938c8ddc10b773a1", -"80100480e30bf622c50fe9a8fe454fb366988271896cddd1761bd4aa0600e4eb3bebbc59805699fdd817b520d8654dfd55d9315fd1d42c16f033d23a53740788affa05c1d2", -"8010828087ddc195e3b4d9237e7fed1086593051760ae3cf47ef9ca3dbdec0422fdf80d5809b569662f10cb0da1fad3c1925f24eb9d0ef50acadb48d9dacd90543ba589a8980a8979fa6b27b899b4c3a9b5e3582195dacb1b4bf803dba8881848c65324b9c4a", -"801a6280e2fd488c284b0b89c7172d86b7e0ba58a0400d54f13c887dab21fa274e81f98680e21d1c44044fe853b6ffe8eddb08cb351e633be8237ee62d31704e09509f8da280a7e2caa08deb0caf0e7c0fd0957ae930d7f031e5ed4d2696a23195768ddc93d5806efef5b40140fbe61f34e7ecf285d9a38400c9448d70d5b3d871b0812904e41280d062795aed20f6dba752613cd0fc916018fdddc775e1412fefe7f243e15d3f2980af2fb6f70525f21c9e8d65db1a04b748d066bf4676a965c6d37bb6ad578a0e8a", -"802010804b3f0a374f23be6a4953fc994ae308ecd2a1eacf210f8c109fd37b1d79661e918022a6477c8f2130e75e2a9a379384bf2bba7edb5d418043290ec487b22803c2cb", -"80348880dd4c285b40aab18b4beaf60e780d83115e9ed4da663aa28f9690876d677d956b80258c21c997c7c69e407e036f37cc6581d6ffcb17ed09ce4c1ebbee7b0c9b4f968060e0e545f3d2f4f253782b1e34ba92645802f20e2799b36fcac970baa5eebfa78023ba132c7f01fea45ed9fa8098e59e06b6ff6e86256bd32c23c2401595394d4680d83ddd1730b455ecc731a048fb20334d2c8d0955d92297961baeac88bf3272ee", -"803b5380f0cedcdee2617db27c7e8cbcc0271011410423fbef66c80771e181919e61308e8075f3874e71ad137809fa33336c3b1b1c1c75969c4c44de835d9955126c8f970080196f8f1a834101d28512ee8b31dc8b78ec706853e26a14845675edc08515ac3f8063a5b7203043ac1d20e87a231a08f4c7d6d1dd89fb6d355f9f366dfa53f79b90801f6576aedc0634a4b5172e787cc50286b60d23d7c398aee2fd5c432c8acd678b804095cee52485ed5e5ddd962d8568d03a5a1db134ee11fcaf3f7976e6ae777f99804ef82319bcd2434518335bccb68342a1836e1dc10c541b712f0940396b34f4158058fc2e1f312065ffcf9a9da79a37df4ff2a202e2bd7be09ea9599ea5a2786c6e80b41bcff09c12dee7ea9e02804052db0642b87ea1178204b9371f4ff874a222ff", -"80500e8047795f007ce96848bca5918c8d9d26368404904bc883af0631adc155bbb111aa801fe1021789299240c30f1129390c5e82bc36e6de97844588716101044c1a287c807c7ca05df58b2bbfc2a52c7df4ffc116b23b5b662914985e47ae675db2f1e5e98021a2b46c632d08822c6a9f838312c35bf9484eab9a6adfcc0d124cf9c254ed9780ef447f45f3fa601345a1908c3de25b71c260781c613f366d367fb2c4e8236e95", -"80502380520e2095f1bc5b9fbfda653446e65cd648a005f9cf673d79328d1e8fe42eb6c080f973d54a58252d2a5fa41596c30a0eb9ed9c0c294ff3e6d27056893517a6a293806cee9f553028df63145eb7919de1ed5d06463c566da2784185a6d4968a21d18d8088638544b5666f00de2f386910fe9d8578021d79a426b1baa98ad28acbefb71780db4e8710ed9e05c0363dd7c165db95504b9d977004bc95dc1bb928aff5fb0011", -"805bc080966da5003b69b16940e61c4ff79c938b4e500273194efedcc8f95e9cd254863380e1ebc5a44b577bb781d2992c0070f4a6aceff6b853fb6128e688b51d61a7f7c680a68121188572e2e7e80261f91ce5854f73cc30b5041d0dc55e12a75206d48be580cfc72dac419fdf4dfc43916fa9146a49507eeee5674c2a500ee69950d5eef65480d2021046b527da079f18e82d7139322192321ca0724d20f65527cff16f3da30480cd94faadc04c34ccd6fb033c1437b1832547a3bd7b49075c45328d1f7c5b201b801a388efd7762b7d4f42cf95a8f12ebaeb84dc181d9ef1bf764a0973ed7936f72", -"806000801d1a40bba8b805e94d1f1e5abecfb85c8ff610dbf41f96f75e6fea4ecf85d13e808a3052b45cf25c1ae299da5853afe561a275098f1665132b5d4b8ae7946f806b", -"808004802ba56636c0f3b16dcb9b329f7ea583532efe941d004a6fe25e83a5cd73e4e0eb803d715494fc555ca8ff67c956c910bbfd79c0f4b9e462b1fb00e45f5252547d4c", -"8080a48011743a145bd135e09d0e877e18cf620ab0002186e5f34ea3930f07d0779d9c5d8051d6b67790642bab25003a22348448862a5736558af4493ebfd2383a6e84a97c800c04a15184b3e8a99683ad55ae2394a88bc6b37ac85606674f460ec01862518880df0a8a43bb2d634cbce12aed710b9e07024e640904b39a1527801a362f62fb1a", -"8083e080eee48c0992858e0e7d169f61eed4e6bb165a5818ecf1704c1e1ba76a73a60ef28064a9bd94877cf964137ba78535452374ef91434cb5980a2782945a34878479da802bfa4b7ce27ba234d6329d1ef42f5c1ca1784a76b0c1ab03c7805e0e18d0b12680fa952eb660aed3c7dc6b8edada1a002eaed8fac98bdcc6cbd0b66df07eb04cf2802049d9671a7644a4011fa6b8c733ab72f38d13572f3fee52141acdd98c0fa4958019218e901207479d5b2c7b56b44c9923b02b90fa87a548e6a0c36e7f6f15630d", -"8088928087c0d1937f391842b64a28f7af325c718fdd164fe7947613eb68dc926bd8287d80d31a622e6218fdf9c0c124872741180eae9198e22aa4168b516e9bdee352853e8040030c7172201a22391f97749b2cdb98165afdde8d0024d6e110d86ea668a82d8021ff8d6c78ab2724d505f3f806e5f076395901969d39e5806b071d799d16dbc9803892fff661312871f069a1a7cde455fc5191cabdd2c4a9e2d9670b0d9443c385", -"80904180f0eac025c8f43de3b9ea20a2445e02f2d2845401aded6dee7c6d6ca9edf60a0180402a347af97153e731ad0e5d3acb6fd538a0fa97730b9e570eb945551f2b7f0b80a08b1ec5bbb2ad535f083a359c6911f37eaff3851d7bd64094ed4d5fa39c001a806b45b6cb17339318e73756539bb447c84f729b3a13cbb608617d05cb78be52be", -"809302803644638584c9e36aff25b1da0e15abee3940c13651820bcf1424fcb21f799aed809e598d62614767572b958b1b664e7905be721024d7782bbf4ffb52684ea87ea080aef06d49d4722ceea3b435d803dc032415be5603ac5c8fe7ebb17962782430ac8046034b9c31d5dba931d90edc3f0e685b1375e70c901959e605e5ea0166568e6d80f8882a2a94f6dee983f906b1411730dff25b5a61ffe58d81862e8076751ceba9", -"80c46080ab97bd8a801e8ee08e981a0027711c7f07b526cc279411d1c3c178a2c9535f4c80393739790fc85d74c93825e6bb6fb8887b695579c3f272ece422fe898ffdfd26806b7060002c34c7674c07fb4041122ce0fcfccfd614f6af54ac6fe33b3fc0019c80b75964048acbc449d79d05f2f828a34d451548985f6e52c6c565c38365ad8b738086f8a367a41d659bf95bddf03fb2bc4e589cfdffad4f3c68fc07a7f1ce437589", -"826f084080fbf037bbe3b6397c895187d7f587076ec4c64c52ab346e64951803062ed3cb5d805a967c33d3d57d51c07881d92a84b13bda05190a9f1c7e22ad7193d550df5fd7", -"bf01cd710b30bd2eab0352ddcc26417aa1941b3c252fcb29d88eff4f3de5de4476c3ffff80460c8f46364ccb2ea354b431415940c4cb35be6f4c706bbe9f87e14ef3fa1a2880c7b8794c5dd8078bea433732afae6f91f59a716d700594c0492e4d14a4232d6380ba66995a4b3ebf1a8d1790f7704e6cb669bd22b84a849f37c64896b0a7b57fc880b1799f10898e3d56d2326ad758a591e5347e9f0278c6d5727db9fbfadea65ac580ba1969805848ef9dfea6a52b7e58f48bfe375f6048eb3785f5ff384f4813ca49804c2f428a882271aaa8ee024dca2efa8158967882a9bb52d95c82db6a3193b38480649946c289dd94ee6b5cdcc97192c99f872c109d526ea77940eee6964f499ef88003417ebd5d827d968c1af84849a9e1045701025d77d2c2be7948bdf599a90054807e8d535456d5bafc507ca49c7d17ead1572d061781ff55301fb8f99cc14afbd9805cf5f7beac71ab67bd32c28ddf7c204de8d483f648c8399de3185c0a8ff057e8801d03f3b796acd059cd74c4b853fe4fc97e30feab303b3787cea011c7e081df4c80303b184451f2c64109bdf968775ad930b7227a2672614b60aae10dbcf4aa0896809d5a8db9556cd997a36aafbc557f6c7adcb7c2f61592d8d1c87b4add3dd7cc918003ab0095f2261e97db0d4b46a574908596a716a8a233b6e4c55c3f86f35650fd80a4d7f76f6fd090b20abee5a4d65e17452679c6912ac85e09e25a8bbeaa79722080bf5b4d3f1c7fe43d7ecec7f558d79f556bd88f0de97810bc467fab3947b28ce6", -"c10100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040661757261200d00000000000000", -]), -]; diff --git a/pallets/author-noting/src/tests.rs b/pallets/author-noting/src/tests.rs deleted file mode 100644 index 4e90837..0000000 --- a/pallets/author-noting/src/tests.rs +++ /dev/null @@ -1,791 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, ContainerChainBlockInfo, Event}, - bounded_collections::bounded_vec, - cumulus_primitives_core::ParaId, - frame_support::{ - assert_ok, - dispatch::GetDispatchInfo, - inherent::{InherentData, ProvideInherent}, - traits::UnfilteredDispatchable, - }, - frame_system::RawOrigin, - hex_literal::hex, - parity_scale_codec::Encode, - sp_consensus_aura::{inherents::InherentType, AURA_ENGINE_ID}, - sp_core::H256, - sp_runtime::{ - generic::DigestItem, - traits::{BlakeTwo256, HashingFor}, - }, - test_relay_sproof_builder::{HeaderAs, ParaHeaderSproofBuilder, ParaHeaderSproofBuilderItem}, - tp_traits::GetCurrentContainerChains, -}; - -#[test] -fn test_author_id_insertion() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 1u64.into(), - }) - ); - }); -} - -#[test] -fn test_author_id_insertion_real_data() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| { - // Statemint data: - // Block: 3,511,063 - // Slot: 140,006,956 - // RelayHash 0x5ea27df08fe09a82b5e835d4fa67735d0fbdf8d97b9c382f0af7b9c9c92a8545 - let statemint_data = hex!( - "5d1b54ce2845dedd7f43805849747c44388b7b7cc84dc5083815cc2b58b513145e4cd6000a98bf - 27921e16366f5a2a388595f87744608684f43ff613026241634390d0c28a9dee52544070b989c71634 - db54222b86391a75fa37d12544e7022bcd3cd42a080661757261202c56580800000000056175726101 - 018fb36de33276e8d54f77ea0a006ed7ab97b8d0aad00869f7ce6a5709eb1fc3256428b8b2428a2a3e - c4fa1c1058ab0e33c5a6b2b5789ab7b3e0accaeccafb4506" - ); - - match relay_block_num { - 1 => { - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::AlreadyEncoded(statemint_data.to_vec()), - }; - sproof.items.push(s); - } - _ => unreachable!(), - } - }) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - // Our mock author fetcher will just note the slot - Some(ContainerChainBlockInfo { - block_number: 3511063, - author: 140006956, - latest_slot_number: 1u64.into() - }) - ); - }); -} - -#[test] -fn test_author_id_insertion_many_paras() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - // Since the default parachain list is vec![1001], - // we must always include a sproof for this para_id - let slot: InherentType = 10u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - 2 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 2, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - - let slot: InherentType = 14u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1002.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - // Writing to this pallet storage will only change the sproofs of the next block, - // not the ones of the current block - MockData::mutate(|m| { - m.container_chains = bounded_vec![1001.into(), 1002.into()]; - }); - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 10u64, - latest_slot_number: 1u64.into() - }) - ); - assert_eq!(AuthorNoting::latest_author(ParaId::from(1002)), None); - }) - .add(2, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 2, - author: 13u64, - latest_slot_number: 2u64.into() - }) - ); - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1002)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 14u64, - latest_slot_number: 2u64.into() - }) - ); - }); -} - -#[test] -#[should_panic(expected = "Invalid relay chain state proof")] -fn test_should_panic_with_invalid_proof_root() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - // Insert an invalid root, not matching the proof generated - .with_overriden_state_root(H256::default()) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 0u64.into() - }) - ); - }); -} - -#[test] -#[should_panic(expected = "Invalid proof provided for para head key")] -fn test_should_panic_with_invalid_proof_state() { - let sproof_builder = ParaHeaderSproofBuilder::default(); - let (_, relay_chain_state) = sproof_builder.into_state_root_and_proof(); - - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - // Insert a proof, not matching the root generated - .with_overriden_state_proof(relay_chain_state) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 0u64.into() - }) - ); - }); -} - -#[test] -#[should_panic(expected = "Invalid proof provided for para head key")] -fn test_should_panic_with_proof_for_not_including_required_para() { - // Since the default parachain list is vec![1001], - // we must always include a sproof for this para_id - let slot: InherentType = 10u64.into(); - let para_id_1001_item = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - let mut proof_item = ParaHeaderSproofBuilder::default(); - proof_item.items.push(para_id_1001_item.clone()); - - // However we insert a new para in the state. The idea is that the proof we - // will pass is for this new paraId, and not 1001. Passing 1001 is required so - // we should see the node panicking. - - let slot: InherentType = 14u64.into(); - let para_id_1002_item = ParaHeaderSproofBuilderItem { - para_id: 1002.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - proof_item.items.push(para_id_1002_item.clone()); - - // lets get the generated proof here. However we will modify later on the proof we pass to include para id 1002 - let (root, proof) = proof_item.clone().into_state_root_and_proof(); - let db = proof.into_memory_db::>(); - let backend = sp_state_machine::TrieBackendBuilder::new(db, root).build(); - - // this should contain both keys (1001, 1002). but we will now generate a proof without one of the keys (1001) - let mut relevant_keys = proof_item.relevant_keys(); - // remove para 1001 - relevant_keys.remove(0); - // re-generate the proof only for para 1002 - let proof = sp_state_machine::prove_read(backend, relevant_keys).expect("prove read"); - - // We now have a state containing 1001 and 1002 paras, but only 1002 is passed in the proof (when 1001 is required) - BlockTests::new() - .with_relay_sproof_builder(move |_, relay_block_num, sproof| match relay_block_num { - 1 => { - // We guarantee we generate the same DB by constructing the same items - sproof.items.push(para_id_1001_item.clone()); - sproof.items.push(para_id_1002_item.clone()); - } - _ => unreachable!(), - }) - .with_overriden_state_proof(proof) - .add(1, || {}); -} - -#[test] -#[should_panic(expected = "Invalid proof provided for para head key")] -fn test_should_panic_with_empty_proof() { - // Since the default parachain list is vec![1001], - // we must always include a sproof for this para_id - let slot: InherentType = 10u64.into(); - let mut para_id_1001_item = ParaHeaderSproofBuilderItem::default(); - let mut proof_item = ParaHeaderSproofBuilder::default(); - - para_id_1001_item.para_id = 1001.into(); - para_id_1001_item.author_id = - HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }); - proof_item.items.push(para_id_1001_item.clone()); - - // lets get the generated proof here. However we will modify later on the proof to not include anything - let (root, proof) = proof_item.clone().into_state_root_and_proof(); - let db = proof.into_memory_db::>(); - let backend = sp_state_machine::TrieBackendBuilder::new(db, root).build(); - - // Empty relevant keys - let relevant_keys: Vec> = Vec::new(); - // re-generate the proof for nothing - let proof = sp_state_machine::prove_read(backend, relevant_keys).expect("prove read"); - - // We now have a state containing 1001, but an empty proof will be passed - BlockTests::new() - .with_relay_sproof_builder(move |_, relay_block_num, sproof| match relay_block_num { - 1 => { - // We guarantee we generate the same DB by constructing the same items - sproof.items.push(para_id_1001_item.clone()); - } - _ => unreachable!(), - }) - .with_overriden_state_proof(proof) - .add(1, || {}); -} - -#[test] -#[should_panic(expected = "Container chain author data needs to be present in every block!")] -fn test_not_inserting_inherent() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .skip_inherent_insertion() - .add(1, || { - assert!(AuthorNoting::latest_author(ParaId::from(1001)).is_none()); - }); -} - -#[test] -#[ignore = "used to generate benchmark data"] -fn encode_proof_for_benchmarks() { - println!("pub const ENCODED_PROOFS: &[(u32, &str, &[&str])] = &["); - - for x in 0u32..=100 { - let mut sproof_builder = ParaHeaderSproofBuilder::default(); - - for para_id in 0..x { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: para_id.into(), - - // TODO: this header can be arbitrarily large, because "digest.logs" is an unbounded vec - author_id: HeaderAs::NonEncoded(dp_core::Header { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof_builder.items.push(s); - } - - let (root, proof) = sproof_builder.into_state_root_and_proof(); - - println!("({}, \"{}\", &[", x, hex::encode(root),); - - for x in proof.iter_nodes() { - println!("\"{}\",", hex::encode(x)); - } - - println!("]),"); - } - - println!("];") -} - -#[test] -fn test_set_author() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 1u64.into() - }) - ); - assert_ok!(AuthorNoting::set_author( - RuntimeOrigin::root(), - 1001.into(), - 1, - 14u64, - 14u64.into() - )); - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 14u64, - latest_slot_number: 14u64.into() - }) - ); - System::assert_last_event( - Event::LatestAuthorChanged { - para_id: 1001.into(), - block_number: 1, - new_author: 14u64, - latest_slot_number: 14u64.into(), - } - .into(), - ); - }); -} - -#[test] -#[should_panic(expected = "DidSetContainerAuthorData must be updated only once in a block")] -fn test_on_initalize_does_not_kill_and_panics() { - BlockTests::new() - .skip_author_noting_on_initialize() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - crate::DidSetContainerAuthorData::::put(true); - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || {}); -} - -#[test] -fn test_header_non_decodable_does_not_insert() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::AlreadyEncoded(hex!("4321").to_vec()), - }; - - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!(AuthorNoting::latest_author(ParaId::from(1001)), None); - }); -} - -#[test] -fn test_non_aura_digest_does_not_insert_key() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - // we inject a non-aura digest - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime( - [b'a', b'a', b'a', b'a'], - slot.encode(), - )], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!(AuthorNoting::latest_author(ParaId::from(1001)), None); - }); -} - -#[test] -fn test_non_decodable_slot_does_not_insert_key() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - // we inject 1u8 slot, but inherentType is expected so it should not decode - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, 1u8.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!(AuthorNoting::latest_author(ParaId::from(1001)), None); - }); -} - -#[test] -fn weights_assigned_to_extrinsics_are_correct() { - new_test_ext().execute_with(|| { - assert_eq!( - crate::Call::::set_author { - para_id: 1.into(), - block_number: 1, - author: 1u64, - latest_slot_number: 0u64.into() - } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::set_author() - ); - - let sproof_builder = ParaHeaderSproofBuilder::default(); - - let (relay_root, relay_chain_state) = sproof_builder.into_state_root_and_proof(); - frame_support::storage::unhashed::put(MOCK_RELAY_ROOT_KEY, &relay_root); - - let mut inherent_data = InherentData::default(); - let system_inherent_data = tp_author_noting_inherent::OwnParachainInherentData { - relay_storage_proof: relay_chain_state, - }; - inherent_data - .put_data( - tp_author_noting_inherent::INHERENT_IDENTIFIER, - &system_inherent_data, - ) - .expect("failed to put VFP inherent"); - let inherent_weight = AuthorNoting::create_inherent(&inherent_data) - .expect("got an inherent") - .dispatch_bypass_filter(RawOrigin::None.into()) - .expect("dispatch succeeded"); - - assert_eq!( - inherent_weight.actual_weight.unwrap(), - <() as crate::weights::WeightInfo>::set_latest_author_data( - ::ContainerChains::current_container_chains().len() as u32 - ) - ); - }); -} - -#[test] -fn test_kill_author_data() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 1u64.into() - }) - ); - assert_ok!(AuthorNoting::kill_author_data( - RuntimeOrigin::root(), - 1001.into(), - )); - assert_eq!(AuthorNoting::latest_author(ParaId::from(1001)), None); - System::assert_last_event( - Event::RemovedAuthorData { - para_id: 1001.into(), - } - .into(), - ); - }); -} - -#[test] -fn test_author_id_insertion_not_first_log() { - BlockTests::new() - .with_relay_sproof_builder(|_, relay_block_num, sproof| match relay_block_num { - 1 => { - let slot: InherentType = 13u64.into(); - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header::< - u32, - BlakeTwo256, - > { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![ - // Dummy item before aura log - DigestItem::PreRuntime([0; 4], vec![]), - DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode()), - ], - }, - }), - }; - sproof.items.push(s); - } - _ => unreachable!(), - }) - .add(1, || { - assert_eq!( - AuthorNoting::latest_author(ParaId::from(1001)), - Some(ContainerChainBlockInfo { - block_number: 1, - author: 13u64, - latest_slot_number: 1u64.into() - }) - ); - }); -} diff --git a/pallets/author-noting/src/weights.rs b/pallets/author-noting/src/weights.rs deleted file mode 100644 index ea0c992..0000000 --- a/pallets/author-noting/src/weights.rs +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_author_noting -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_author_noting -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_author_noting. -pub trait WeightInfo { - fn set_latest_author_data(x: u32, ) -> Weight; - fn set_author() -> Weight; - fn kill_author_data() -> Weight; -} - -/// Weights for pallet_author_noting using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: AuthorNoting DidSetContainerAuthorData (r:1 w:1) - /// Proof: AuthorNoting DidSetContainerAuthorData (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) - /// Storage: Registrar RegisteredParaIds (r:1 w:0) - /// Proof Skipped: Registrar RegisteredParaIds (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ValidationData (r:1 w:0) - /// Proof Skipped: ParachainSystem ValidationData (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: CollatorAssignment CollatorContainerChain (r:1 w:0) - /// Proof Skipped: CollatorAssignment CollatorContainerChain (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: AuthorNoting LatestAuthor (r:0 w:100) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - /// The range of component `x` is `[0, 100]`. - fn set_latest_author_data(x: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `427 + x * (73 ±0)` - // Estimated: `1912 + x * (73 ±0)` - // Minimum execution time: 7_767_000 picoseconds. - Weight::from_parts(7_985_000, 1912) - // Standard Error: 125_649 - .saturating_add(Weight::from_parts(19_274_325, 0).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) - .saturating_add(Weight::from_parts(0, 73).saturating_mul(x.into())) - } - /// Storage: AuthorNoting LatestAuthor (r:0 w:1) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - fn set_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_877_000 picoseconds. - Weight::from_parts(8_127_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: AuthorNoting LatestAuthor (r:0 w:1) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - fn kill_author_data() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_190_000 picoseconds. - Weight::from_parts(7_520_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: AuthorNoting DidSetContainerAuthorData (r:1 w:1) - /// Proof: AuthorNoting DidSetContainerAuthorData (max_values: Some(1), max_size: Some(1), added: 496, mode: MaxEncodedLen) - /// Storage: Registrar RegisteredParaIds (r:1 w:0) - /// Proof Skipped: Registrar RegisteredParaIds (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: ParachainSystem ValidationData (r:1 w:0) - /// Proof Skipped: ParachainSystem ValidationData (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: CollatorAssignment CollatorContainerChain (r:1 w:0) - /// Proof Skipped: CollatorAssignment CollatorContainerChain (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: AuthorNoting LatestAuthor (r:0 w:100) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - /// The range of component `x` is `[0, 100]`. - fn set_latest_author_data(x: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `427 + x * (73 ±0)` - // Estimated: `1912 + x * (73 ±0)` - // Minimum execution time: 7_767_000 picoseconds. - Weight::from_parts(7_985_000, 1912) - // Standard Error: 125_649 - .saturating_add(Weight::from_parts(19_274_325, 0).saturating_mul(x.into())) - .saturating_add(RocksDbWeight::get().reads(4_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(x.into()))) - .saturating_add(Weight::from_parts(0, 73).saturating_mul(x.into())) - } - /// Storage: AuthorNoting LatestAuthor (r:0 w:1) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - fn set_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_877_000 picoseconds. - Weight::from_parts(8_127_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: AuthorNoting LatestAuthor (r:0 w:1) - /// Proof: AuthorNoting LatestAuthor (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen) - fn kill_author_data() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_190_000 picoseconds. - Weight::from_parts(7_520_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/authority-assignment/Cargo.toml b/pallets/authority-assignment/Cargo.toml deleted file mode 100644 index ef7acd5..0000000 --- a/pallets/authority-assignment/Cargo.toml +++ /dev/null @@ -1,52 +0,0 @@ -[package] -name = "pallet-authority-assignment" -authors = { workspace = true } -description = "Authority collator assignment pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -dp-collator-assignment = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -scale-info = { workspace = true } -serde = { workspace = true, optional = true, features = [ "derive" ] } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "dp-collator-assignment/std", - "frame-support/std", - "frame-system/std", - "log/std", - "parity-scale-codec/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/authority-assignment/src/lib.rs b/pallets/authority-assignment/src/lib.rs deleted file mode 100644 index 66a73f3..0000000 --- a/pallets/authority-assignment/src/lib.rs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Nimbus Collator Assignment Pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use pallet::*; -use { - dp_collator_assignment::AssignedCollators, - frame_support::pallet_prelude::*, - sp_runtime::{ - traits::{AtLeast32BitUnsigned, One, Zero}, - Saturating, - }, - sp_std::{collections::btree_map::BTreeMap, prelude::*, vec}, -}; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - type SessionIndex: parity_scale_codec::FullCodec + TypeInfo + Copy + AtLeast32BitUnsigned; - type AuthorityId: parity_scale_codec::FullCodec + TypeInfo + Clone; - } - - #[pallet::storage] - #[pallet::getter(fn collator_container_chain)] - pub type CollatorContainerChain = StorageMap< - _, - Twox64Concat, - T::SessionIndex, - AssignedCollators, - OptionQuery, - >; - - #[pallet::call] - impl Pallet {} - - impl Pallet { - /// Assign new collators - /// collators should be queued collators - pub fn assign_collators( - current_session_index: &T::SessionIndex, - queued_id_to_nimbus_map: &BTreeMap, - next_collator_assignment: &AssignedCollators, - ) { - let next_nimbus_assignment = next_collator_assignment - .map(|account_id| queued_id_to_nimbus_map[account_id].clone()); - - // Only applies to session index 0 - if current_session_index == &T::SessionIndex::zero() { - CollatorContainerChain::::insert( - current_session_index, - next_nimbus_assignment.clone(), - ); - CollatorContainerChain::::insert( - current_session_index.saturating_add(T::SessionIndex::one()), - next_nimbus_assignment, - ); - - return; - } - - // Remove value at session - 1, insert new value at session + 1 - CollatorContainerChain::::remove( - current_session_index.saturating_sub(T::SessionIndex::one()), - ); - CollatorContainerChain::::insert( - current_session_index.saturating_add(T::SessionIndex::one()), - next_nimbus_assignment, - ); - } - - pub fn initializer_on_new_session( - current_session_index: &T::SessionIndex, - queued_id_to_nimbus_map: &BTreeMap, - next_collator_assignment: &AssignedCollators, - ) { - Self::assign_collators( - current_session_index, - queued_id_to_nimbus_map, - next_collator_assignment, - ) - } - } -} diff --git a/pallets/authority-assignment/src/mock.rs b/pallets/authority-assignment/src/mock.rs deleted file mode 100644 index 44bf6ea..0000000 --- a/pallets/authority-assignment/src/mock.rs +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use dp_collator_assignment::AssignedCollators; - -use { - crate::{self as pallet_authority_assignment}, - frame_support::traits::{ConstU16, ConstU64}, - frame_system as system, - parity_scale_codec::{Decode, Encode}, - sp_core::H256, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, - sp_std::collections::btree_map::BTreeMap, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - MockData: mock_data, - AuthorityAssignment: pallet_authority_assignment, - } -); - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use {super::*, frame_support::pallet_prelude::*}; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -#[derive( - Default, Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo, -)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - pub nimbus_map: BTreeMap, - pub next_collator_assignment: AssignedCollators, -} - -impl mock_data::Config for Test {} - -// In tests, we ignore the session_index param, so changes to the configuration are instant - -impl pallet_authority_assignment::Config for Test { - type SessionIndex = u32; - type AuthorityId = String; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into() -} - -pub const SESSION_LEN: u64 = 5; - -pub fn run_to_session(n: u32) { - let block_number = SESSION_LEN * u64::from(n); - run_to_block(block_number + 1); -} - -pub fn run_to_block(n: u64) { - let old_block_number = System::block_number(); - - for x in (old_block_number + 1)..=n { - System::reset_events(); - System::set_block_number(x); - - if x % SESSION_LEN == 1 { - let session_index = (x / SESSION_LEN) as u32; - let nimbus_map = &MockData::mock().nimbus_map; - let next_collator_assignment = &MockData::mock().next_collator_assignment; - AuthorityAssignment::initializer_on_new_session( - &session_index, - nimbus_map, - next_collator_assignment, - ); - } - } -} diff --git a/pallets/authority-assignment/src/tests.rs b/pallets/authority-assignment/src/tests.rs deleted file mode 100644 index b66f13c..0000000 --- a/pallets/authority-assignment/src/tests.rs +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, CollatorContainerChain}, - dp_collator_assignment::AssignedCollators, - std::collections::BTreeMap, -}; - -fn assigned_collators_at_session(session_index: u32) -> Option> { - let assigned_collators = CollatorContainerChain::::get(session_index)?; - - let mut h = BTreeMap::new(); - - for (para_id, collators) in assigned_collators.container_chains.iter() { - for collator in collators.iter() { - h.insert(collator.clone(), u32::from(*para_id)); - } - } - - for collator in assigned_collators.orchestrator_chain { - h.insert(collator, 999); - } - - Some(h) -} - -#[test] -fn assign_collators_genesis() { - new_test_ext().execute_with(|| { - MockData::mutate(|m| { - m.next_collator_assignment = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![ - (1001.into(), vec![6, 7]), - (1002.into(), vec![8, 9]), - ]), - }; - - m.nimbus_map = BTreeMap::from_iter( - vec![ - (1, "nmbs1"), - (2, "nmbs2"), - (3, "nmbs3"), - (4, "nmbs4"), - (5, "nmbs5"), - (6, "nmbs6"), - (7, "nmbs7"), - (8, "nmbs8"), - (9, "nmbs9"), - ] - .into_iter() - .map(|(id, nimbus_id)| (id, nimbus_id.to_string())), - ); - }); - - run_to_block(1); - - let expected_collators: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - assert_eq!(assigned_collators_at_session(0), expected_collators); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), None); - }); -} - -#[test] -fn assign_collators_session_one() { - new_test_ext().execute_with(|| { - MockData::mutate(|m| { - m.next_collator_assignment = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![ - (1001.into(), vec![6, 7]), - (1002.into(), vec![8, 9]), - ]), - }; - - m.nimbus_map = BTreeMap::from_iter( - vec![ - (1, "nmbs1"), - (2, "nmbs2"), - (3, "nmbs3"), - (4, "nmbs4"), - (5, "nmbs5"), - (6, "nmbs6"), - (7, "nmbs7"), - (8, "nmbs8"), - (9, "nmbs9"), - ] - .into_iter() - .map(|(id, nimbus_id)| (id, nimbus_id.to_string())), - ); - }); - - run_to_block(1); - - let expected_collators: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - assert_eq!(assigned_collators_at_session(0), expected_collators); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), None); - - run_to_session(1); - - assert_eq!(assigned_collators_at_session(0), None); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), expected_collators); - assert_eq!(assigned_collators_at_session(3), None); - }); -} - -#[test] -fn assign_collators_change_nimbus_key() { - new_test_ext().execute_with(|| { - MockData::mutate(|m| { - m.next_collator_assignment = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![ - (1001.into(), vec![6, 7]), - (1002.into(), vec![8, 9]), - ]), - }; - - m.nimbus_map = BTreeMap::from_iter( - vec![ - (1, "nmbs1"), - (2, "nmbs2"), - (3, "nmbs3"), - (4, "nmbs4"), - (5, "nmbs5"), - (6, "nmbs6"), - (7, "nmbs7"), - (8, "nmbs8"), - (9, "nmbs9"), - ] - .into_iter() - .map(|(id, nimbus_id)| (id, nimbus_id.to_string())), - ); - }); - - run_to_block(1); - - let expected_collators: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - assert_eq!(assigned_collators_at_session(0), expected_collators); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), None); - - MockData::mutate(|m| { - // Change key for collator 1 - m.nimbus_map.insert(1, "nmbs1-changed".to_string()); - }); - - run_to_session(1); - - let expected_collators_at_2: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1-changed", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - // Collators in session 2 use the new keys, but collators in session 1 use the old keys - assert_eq!(assigned_collators_at_session(0), None); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), expected_collators_at_2); - assert_eq!(assigned_collators_at_session(3), None); - }); -} - -#[test] -fn assign_collators_remove_collator() { - new_test_ext().execute_with(|| { - MockData::mutate(|m| { - m.next_collator_assignment = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![ - (1001.into(), vec![6, 7]), - (1002.into(), vec![8, 9]), - ]), - }; - - m.nimbus_map = BTreeMap::from_iter( - vec![ - (1, "nmbs1"), - (2, "nmbs2"), - (3, "nmbs3"), - (4, "nmbs4"), - (5, "nmbs5"), - (6, "nmbs6"), - (7, "nmbs7"), - (8, "nmbs8"), - (9, "nmbs9"), - ] - .into_iter() - .map(|(id, nimbus_id)| (id, nimbus_id.to_string())), - ); - }); - - run_to_block(1); - - let expected_collators: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - assert_eq!(assigned_collators_at_session(0), expected_collators); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), None); - - MockData::mutate(|m| { - // Remove key for collator 9 - m.nimbus_map.remove(&9); - // And remove collator 9 from assignment - let collators_1002 = m - .next_collator_assignment - .container_chains - .get_mut(&1002.into()) - .unwrap(); - assert_eq!(collators_1002.pop(), Some(9)); - }); - - run_to_session(1); - - let expected_collators_at_2: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - // Collators in session 2 use the new keys, but collators in session 1 use the old keys - assert_eq!(assigned_collators_at_session(0), None); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), expected_collators_at_2); - assert_eq!(assigned_collators_at_session(3), None); - }); -} - -#[test] -fn assign_collators_insert_collator() { - new_test_ext().execute_with(|| { - MockData::mutate(|m| { - m.next_collator_assignment = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![ - (1001.into(), vec![6, 7]), - (1002.into(), vec![8, 9]), - ]), - }; - - m.nimbus_map = BTreeMap::from_iter( - vec![ - (1, "nmbs1"), - (2, "nmbs2"), - (3, "nmbs3"), - (4, "nmbs4"), - (5, "nmbs5"), - (6, "nmbs6"), - (7, "nmbs7"), - (8, "nmbs8"), - (9, "nmbs9"), - ] - .into_iter() - .map(|(id, nimbus_id)| (id, nimbus_id.to_string())), - ); - }); - - run_to_block(1); - - let expected_collators: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - assert_eq!(assigned_collators_at_session(0), expected_collators); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), None); - - MockData::mutate(|m| { - m.nimbus_map.insert(10, "nmbs10".to_string()); - m.next_collator_assignment.orchestrator_chain.push(10); - }); - - run_to_session(1); - - let expected_collators_at_2: Option> = Some(BTreeMap::from_iter( - vec![ - ("nmbs1", 999), - ("nmbs2", 999), - ("nmbs3", 999), - ("nmbs4", 999), - ("nmbs5", 999), - ("nmbs6", 1001), - ("nmbs7", 1001), - ("nmbs8", 1002), - ("nmbs9", 1002), - ("nmbs10", 999), - ] - .into_iter() - .map(|(nimbus_id, para_id)| (nimbus_id.to_string(), para_id)), - )); - - // Collators in session 2 use the new keys, but collators in session 1 use the old keys - assert_eq!(assigned_collators_at_session(0), None); - assert_eq!(assigned_collators_at_session(1), expected_collators); - assert_eq!(assigned_collators_at_session(2), expected_collators_at_2); - assert_eq!(assigned_collators_at_session(3), None); - }); -} diff --git a/pallets/authority-mapping/Cargo.toml b/pallets/authority-mapping/Cargo.toml deleted file mode 100644 index 51224b8..0000000 --- a/pallets/authority-mapping/Cargo.toml +++ /dev/null @@ -1,43 +0,0 @@ -[package] -name = "pallet-authority-mapping" -authors = { workspace = true } -description = "authority mapping pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-support = { workspace = true } -frame-system = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-support/std", - "frame-system/std", - "parity-scale-codec/std", - "scale-info/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/authority-mapping/src/lib.rs b/pallets/authority-mapping/src/lib.rs deleted file mode 100644 index 4158e5d..0000000 --- a/pallets/authority-mapping/src/lib.rs +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Authority Mapping Pallet -//! -//! This pallet stores the AuthorityId -> AccountID mapping for two sessions -//! In particular it holds the mapping for the current and the past session -//! Both are necessary to verify block-authorship with respect to current -//! block proposals or blocks that have been proposed in the past-session - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use pallet::*; -use { - frame_support::pallet_prelude::*, - sp_runtime::{ - traits::{AtLeast32BitUnsigned, CheckedSub}, - RuntimeAppPublic, - }, - sp_std::{collections::btree_map::BTreeMap, vec}, -}; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - type SessionIndex: parity_scale_codec::FullCodec + TypeInfo + Copy + AtLeast32BitUnsigned; - - // Sessions after which keys should be removed - #[pallet::constant] - type SessionRemovalBoundary: Get; - - type AuthorityId: Member - + Parameter - + Ord - + RuntimeAppPublic - + MaybeSerializeDeserialize - + MaxEncodedLen; - } - - #[pallet::storage] - #[pallet::getter(fn authority_id_mapping)] - pub(super) type AuthorityIdMapping = StorageMap< - _, - Twox64Concat, - T::SessionIndex, - BTreeMap, - OptionQuery, - >; - - impl Pallet { - pub fn initializer_on_new_session( - session_index: &T::SessionIndex, - authorities: &[(T::AccountId, T::AuthorityId)], - ) { - // Remove only if the checked sub does not saturate - if let Some(session_index_to_remove) = - session_index.checked_sub(&T::SessionRemovalBoundary::get()) - { - AuthorityIdMapping::::remove(session_index_to_remove) - } - - let assignation: BTreeMap = - authorities.iter().cloned().map(|(a, b)| (b, a)).collect(); - AuthorityIdMapping::::insert(session_index, assignation); - } - } -} diff --git a/pallets/authority-mapping/src/mock.rs b/pallets/authority-mapping/src/mock.rs deleted file mode 100644 index 36f5389..0000000 --- a/pallets/authority-mapping/src/mock.rs +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate as pallet_authority_mapping, - frame_support::{ - parameter_types, - traits::{ConstU16, ConstU64}, - }, - frame_system as system, - sp_core::H256, - sp_runtime::{ - testing::UintAuthorityId, - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - AuthorityMapping: pallet_authority_mapping, - } -); - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const SessionKeyRemovalLimit: u32 = 2u32; -} - -impl pallet_authority_mapping::Config for Test { - type SessionIndex = u32; - - type SessionRemovalBoundary = SessionKeyRemovalLimit; - - /// The identifier type for an authority. - type AuthorityId = UintAuthorityId; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into() -} diff --git a/pallets/authority-mapping/src/tests.rs b/pallets/authority-mapping/src/tests.rs deleted file mode 100644 index 03a1b30..0000000 --- a/pallets/authority-mapping/src/tests.rs +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::*, - crate::mock::{new_test_ext, AuthorityMapping, Test}, -}; - -#[test] -fn session_0_fills_in_first_mapping() { - new_test_ext().execute_with(|| { - AuthorityMapping::initializer_on_new_session(&0, &[(1, 1u64.into())]); - - let v = AuthorityIdMapping::::get(0).unwrap(); - assert_eq!(v.len(), 1); - assert_eq!(v.get(&1u64.into()), Some(&1u64)); - }); -} - -#[test] -fn session_1_fills_in_second_mapping_but_does_not_remove_first() { - new_test_ext().execute_with(|| { - AuthorityMapping::initializer_on_new_session(&0, &[(1, 1u64.into())]); - - AuthorityMapping::initializer_on_new_session(&1, &[(1, 2u64.into())]); - - let v0 = AuthorityIdMapping::::get(0).unwrap(); - assert_eq!(v0.len(), 1); - assert_eq!(v0.get(&1u64.into()), Some(&1u64)); - - let v1 = AuthorityIdMapping::::get(1).unwrap(); - assert_eq!(v1.len(), 1); - assert_eq!(v1.get(&2u64.into()), Some(&1u64)); - }); -} - -#[test] -fn session_2_fills_in_third_mapping_removes_first_not_second() { - new_test_ext().execute_with(|| { - AuthorityMapping::initializer_on_new_session(&0, &[(1, 1u64.into())]); - - AuthorityMapping::initializer_on_new_session(&1, &[(1, 2u64.into())]); - - AuthorityMapping::initializer_on_new_session(&2, &[(1, 3u64.into())]); - - assert!(AuthorityIdMapping::::get(0).is_none()); - - let v1 = AuthorityIdMapping::::get(1).unwrap(); - assert_eq!(v1.len(), 1); - assert_eq!(v1.get(&2u64.into()), Some(&1u64)); - - let v2 = AuthorityIdMapping::::get(2).unwrap(); - assert_eq!(v2.len(), 1); - assert_eq!(v2.get(&3u64.into()), Some(&1u64)); - }); -} diff --git a/pallets/collator-assignment/Cargo.toml b/pallets/collator-assignment/Cargo.toml deleted file mode 100644 index 6d05552..0000000 --- a/pallets/collator-assignment/Cargo.toml +++ /dev/null @@ -1,68 +0,0 @@ -[package] -name = "pallet-collator-assignment" -authors = { workspace = true } -description = "Collator assignment pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -dp-collator-assignment = { workspace = true } -frame-benchmarking = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -rand = { workspace = true } -rand_chacha = { workspace = true } -scale-info = { workspace = true } -serde = { workspace = true, optional = true, features = [ "derive" ] } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -sp-io = { workspace = true } -tracing = { workspace = true } -tracing-subscriber = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "dp-collator-assignment/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "parity-scale-codec/std", - "rand/std", - "rand_chacha/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", - "tracing/std", -] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/collator-assignment/rpc/runtime-api/Cargo.toml b/pallets/collator-assignment/rpc/runtime-api/Cargo.toml deleted file mode 100644 index aa03676..0000000 --- a/pallets/collator-assignment/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "pallet-collator-assignment-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-collator-assignment" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-api = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "parity-scale-codec/std", - "scale-info/std", - "sp-api/std", -] diff --git a/pallets/collator-assignment/rpc/runtime-api/src/lib.rs b/pallets/collator-assignment/rpc/runtime-api/src/lib.rs deleted file mode 100644 index 7a584a8..0000000 --- a/pallets/collator-assignment/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for CollatorAssignment pallet. Can be used by collators to check -//! which parachain will they be collating, as well as the current assignment of -//! collators to parachains and parachains to collators. - -#![cfg_attr(not(feature = "std"), no_std)] - -use scale_info::prelude::vec::Vec; - -sp_api::decl_runtime_apis! { - pub trait CollatorAssignmentApi where - AccountId: parity_scale_codec::Codec, - ParaId: parity_scale_codec::Codec, - { - /// Return the parachain that the given `AccountId` is collating for. - /// Returns `None` if the `AccountId` is not collating. - fn current_collator_parachain_assignment(account: AccountId) -> Option; - /// Return the parachain that the given `AccountId` will be collating for - /// in the next session change. - /// Returns `None` if the `AccountId` will not be collating. - fn future_collator_parachain_assignment(account: AccountId) -> Option; - /// Return the list of collators of the given `ParaId`. - /// Returns `None` if the `ParaId` is not in the registrar. - fn parachain_collators(para_id: ParaId) -> Option>; - } -} diff --git a/pallets/collator-assignment/src/assignment.rs b/pallets/collator-assignment/src/assignment.rs deleted file mode 100644 index c3d8abe..0000000 --- a/pallets/collator-assignment/src/assignment.rs +++ /dev/null @@ -1,494 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - dp_collator_assignment::AssignedCollators, - sp_std::{ - cmp, - collections::{btree_map::BTreeMap, btree_set::BTreeSet}, - marker::PhantomData, - mem, - vec::Vec, - }, - tp_traits::{ParaId, RemoveInvulnerables as RemoveInvulnerablesT}, -}; - -// Separate import of `sp_std::vec!` macro, which cause issues with rustfmt if grouped -// with `sp_std::vec::Vec`. -use sp_std::vec; - -/// Helper methods to implement collator assignment algorithm -pub struct Assignment(PhantomData); - -impl Assignment -where - T: crate::Config, -{ - /// Recompute collator assignment from scratch. If the list of collators and the list of - /// container chains are shuffled, this returns a random assignment. - pub fn assign_collators_rotate_all( - collators: Vec, - orchestrator_chain: ChainNumCollators, - chains: Vec, - shuffle: Option, - ) -> Result, AssignmentError> - where - TShuffle: FnOnce(&mut Vec), - { - // This is just the "always_keep_old" algorithm but with an empty "old" - let old_assigned = Default::default(); - - Self::assign_collators_always_keep_old( - collators, - orchestrator_chain, - chains, - old_assigned, - shuffle, - ) - } - - /// Assign new collators to missing container_chains. - /// Old collators always have preference to remain on the same chain. - /// If there are no missing collators, nothing is changed. - /// - /// `chains` should be shuffled or at least rotated on every session to ensure - /// a fair distribution, because the order of that list affects container chain priority: - /// the first chain on that list will be the first one to get new collators. - /// - /// Similarly, in the `collators` list order means priority, the first collators will be more - /// likely to get assigned. Unlike the list of `chains` which should already be shuffled, - /// collators will be shuffled using the `shuffle` callback when needed. This allows the - /// algorithm to truncate the list of collators and only shuffle the first N. This ensures that - /// shuffling doesn't cause a collator with low priority to be assigned instead of a collator - /// with higher priority. - pub fn assign_collators_always_keep_old( - collators: Vec, - orchestrator_chain: ChainNumCollators, - mut chains: Vec, - mut old_assigned: AssignedCollators, - shuffle: Option, - ) -> Result, AssignmentError> - where - TShuffle: FnOnce(&mut Vec), - { - if collators.is_empty() { - return Err(AssignmentError::ZeroCollators); - } - // The rest of this function mostly treats orchestrator chain as another container chain, so move it into - // `old_assigned.container_chains` - let old_orchestrator_assigned = mem::take(&mut old_assigned.orchestrator_chain); - old_assigned - .container_chains - .insert(orchestrator_chain.para_id, old_orchestrator_assigned); - let mut old_assigned = old_assigned.container_chains; - // Orchestrator chain must be the first one in the list because it always has priority - chains.insert(0, orchestrator_chain); - let all_para_ids: Vec = chains.iter().map(|cc| cc.para_id).collect(); - let collators_set = BTreeSet::from_iter(collators.iter().cloned()); - let chains_with_collators = - Self::select_chains_with_collators(collators.len() as u32, &chains); - let chains_with_collators_set: BTreeSet = chains_with_collators - .iter() - .map(|(para_id, _num_collators)| *para_id) - .collect(); - Self::retain_valid_old_assigned( - &mut old_assigned, - &chains_with_collators_set, - &collators_set, - ); - - // Ensure the first `min_orchestrator_collators` of orchestrator chain are invulnerables - Self::prioritize_invulnerables(&collators, orchestrator_chain, &mut old_assigned); - - let new_assigned_chains = - Self::assign_full(collators, chains_with_collators, old_assigned, shuffle)?; - - let mut new_assigned = AssignedCollators { - container_chains: new_assigned_chains, - ..Default::default() - }; - - // Add container chains with 0 collators so that they are shown in UI - for para_id in all_para_ids { - new_assigned.container_chains.entry(para_id).or_default(); - } - - // The rest of this function mostly treats orchestrator chain as another container chain, remove it from - // container chains before returning the final assignment. - let orchestrator_assigned = new_assigned - .container_chains - .remove(&orchestrator_chain.para_id) - .unwrap(); - // Sanity check to avoid bricking orchestrator chain - if orchestrator_assigned.is_empty() { - return Err(AssignmentError::EmptyOrchestrator); - } - new_assigned.orchestrator_chain = orchestrator_assigned; - - Ok(new_assigned) - } - - /// Select which container chains will be assigned collators and how many collators, but do not specify which - /// collator goes to which chain. - /// - /// Each chain has a min and max number of collators. If the number of collators is not enough to reach the min, - /// no collators are assigned to that chain. - /// - /// If the available number of collators is: - /// * lower than the min of the first chain: we assign all the collators to the first chain. This is the - /// orchestrator chain and we always want it to have collators. - /// * lower than the sum of all the min: we cannot assign collators to all the chains. So remove chains until - /// we can. The order is important, the first chains will be assigned collators and the last ones will not. - /// * lower than the sum of all the max: we can assign the min value to all the chains, and have some leftover. - /// We use the same order to decide where this extra collators will go, by filling the max of the first chain, - /// then the max of the second chain, and so on. - /// * greater than the sum of all the max: all the chains will be assigned their max number of collators. - /// - /// # Params - /// - /// The first item of `chains` should be the orchestrator chain, because it will be the first one to be assigned - /// collators. - /// - /// # Returns - /// - /// A list of `(para_id, num_collators)`. - pub fn select_chains_with_collators( - num_collators: u32, - chains: &[ChainNumCollators], - ) -> Vec<(ParaId, u32)> { - if chains.is_empty() { - // Avoid panic if chains is empty - return vec![]; - } - // Let's count how many container chains we can support with the current number of collators - let mut available_collators = num_collators; - // Handle orchestrator chain in a special way, we always want to assign collators to it, even if we don't - // reach the min. - let min_orchestrator_collators = chains[0].min_collators; - available_collators = available_collators.saturating_sub(min_orchestrator_collators); - - let mut container_chains_with_collators = vec![chains[0]]; - // Skipping orchestrator chain because it was handled above - for cc in chains.iter().skip(1) { - if available_collators >= cc.min_collators { - available_collators -= cc.min_collators; - container_chains_with_collators.push(*cc); - } else if available_collators == 0 { - // Do not break if there are still some available collators. Even if they were not enough to reach the - // `min` of this chain, it is possible that one of the chains with less priority has a lower `min`, so - // that chain should be assigned collators. - break; - } - } - - let mut required_collators_min = 0; - for cc in &container_chains_with_collators { - required_collators_min += cc.min_collators; - } - - if num_collators < min_orchestrator_collators { - // Edge case: num collators less than min orchestrator collators: fill as much as we can - vec![(chains[0].para_id, num_collators)] - } else { - // After assigning the min to all the chains we have this remainder. The remainder will be assigned until - // all the chains reach the max value. - let mut required_collators_remainder = num_collators - required_collators_min; - let mut container_chains_variable = vec![]; - for cc in &container_chains_with_collators { - // Each chain will have `min + extra` collators, where extra is capped so `min + extra <= max`. - let extra = cmp::min( - required_collators_remainder, - cc.max_collators.saturating_sub(cc.min_collators), - ); - let num = cc.min_collators + extra; - required_collators_remainder -= extra; - container_chains_variable.push((cc.para_id, num)); - } - - container_chains_variable - } - } - - /// Same as `prioritize_invulnerables` but return the invulnerables instead of inserting them into `old_assigned`. - /// - /// Mutates `old_assigned` by removing invulnerables from their old chain, even if they will later be assigned to - /// the same chain. - pub fn remove_invulnerables( - collators: &[T::AccountId], - orchestrator_chain: ChainNumCollators, - old_assigned: &mut BTreeMap>, - ) -> Vec { - // TODO: clean this up, maybe change remove_invulnerables trait into something more ergonomic - let min_orchestrator_collators = orchestrator_chain.min_collators as usize; - let invulnerables_already_assigned = T::RemoveInvulnerables::remove_invulnerables( - &mut old_assigned - .get(&orchestrator_chain.para_id) - .cloned() - .unwrap_or_default(), - min_orchestrator_collators, - ); - let mut new_invulnerables = invulnerables_already_assigned; - if new_invulnerables.len() >= min_orchestrator_collators { - // We already had invulnerables, we will just move them to the front of the list if they weren't already - return new_invulnerables; - } - - // Not enough invulnerables currently assigned, get rest from new_collators - let mut new_collators = collators.to_vec(); - for (_id, cs) in old_assigned.iter() { - new_collators.retain(|c| !cs.contains(c)); - } - let num_missing_invulnerables = min_orchestrator_collators - new_invulnerables.len(); - let invulnerables_not_assigned = T::RemoveInvulnerables::remove_invulnerables( - &mut new_collators, - num_missing_invulnerables, - ); - new_invulnerables.extend(invulnerables_not_assigned); - - if new_invulnerables.len() >= min_orchestrator_collators { - // Got invulnerables from new_collators, and maybe some were already assigned - return new_invulnerables; - } - - // Still not enough invulnerables, try to get an invulnerable that is currently assigned somewhere else - let num_missing_invulnerables = min_orchestrator_collators - new_invulnerables.len(); - let mut collators = collators.to_vec(); - let new_invulnerables_set = BTreeSet::from_iter(new_invulnerables.iter().cloned()); - collators.retain(|c| { - // Remove collators already selected - !new_invulnerables_set.contains(c) - }); - let invulnerables_assigned_elsewhere = - T::RemoveInvulnerables::remove_invulnerables(&mut collators, num_missing_invulnerables); - - if invulnerables_assigned_elsewhere.is_empty() { - // If at this point we still do not have enough invulnerables, it means that there are no - // enough invulnerables, so no problem, but return the invulnerables - return new_invulnerables; - } - - new_invulnerables.extend(invulnerables_assigned_elsewhere.iter().cloned()); - - // In this case we must delete the old assignment of the invulnerables - let reassigned_invulnerables_set = BTreeSet::from_iter(invulnerables_assigned_elsewhere); - // old_assigned.remove_collators_in_set - for (_id, cs) in old_assigned.iter_mut() { - cs.retain(|c| !reassigned_invulnerables_set.contains(c)); - } - - new_invulnerables - } - - /// Ensure orchestrator chain has `min_orchestrator` invulnerables. If that's not possible, it tries to add as - /// many invulnerables as possible. - /// - /// Get invulnerables from: - /// * old_assigned in orchestrator - /// * new collators - /// * old_assigned elsewhere - /// - /// In that order. - /// - /// Mutates `old_assigned` because invulnerables will be inserted there, and if invulnerables were already - /// assigned to some other chain, they will be removed from that other chain as well. - /// - /// # Params - /// - /// * `old_assigned` must be a subset of `collators` - /// * `old_assigned` must not have duplicate collators. - /// - /// # Returns - /// - /// The number of invulnerables assigned to the orchestrator chain, capped to `min_collators`. - pub fn prioritize_invulnerables( - collators: &[T::AccountId], - orchestrator_chain: ChainNumCollators, - old_assigned: &mut BTreeMap>, - ) -> usize { - let new_invulnerables = - Self::remove_invulnerables(collators, orchestrator_chain, old_assigned); - - if !new_invulnerables.is_empty() { - Self::insert_invulnerables( - old_assigned.entry(orchestrator_chain.para_id).or_default(), - &new_invulnerables, - ); - } - - new_invulnerables.len() - } - - /// Assign collators assuming that the number of collators is greater than or equal to the required. - /// The order of both container chains and collators is important to ensure randomness when `old_assigned` is - /// empty. - /// - /// # Params - /// - /// * `old_assigned` does not need to be a subset of `collators`: collators are checked and removed. - /// * `old_assigned` does not need to be a subset of `chains`, unused para ids are removed. Collators - /// assigned to a para_id not present in `chains` may be reassigned to another para_id. - /// * `chains` `num_collators` can be 0. In that case an empty vec is returned for that para id. - /// * `old_assigned` must not have duplicate collators. - /// * `shuffle` is used to shuffle the list collators. The list will be truncated to only have - /// the number of required collators, to ensure that shuffling doesn't cause a collator with low - /// priority to be assigned instead of a collator with higher priority. - /// - /// # Returns - /// - /// The collator assigment, a map from `ParaId` to `Vec`. - /// - /// Or an error if the number of collators is not enough to fill all the chains, or if the required number - /// of collators overflows a `u32`. - pub fn assign_full( - collators: Vec, - chains: Vec<(ParaId, u32)>, - mut old_assigned: BTreeMap>, - shuffle: Option, - ) -> Result>, AssignmentError> - where - TShuffle: FnOnce(&mut Vec), - { - let mut required_collators = 0usize; - for (_para_id, num_collators) in chains.iter() { - let num_collators = - usize::try_from(*num_collators).map_err(|_| AssignmentError::NotEnoughCollators)?; - required_collators = required_collators - .checked_add(num_collators) - .ok_or(AssignmentError::NotEnoughCollators)?; - } - - // This check is necessary to ensure priority: if the number of collators is less than required, it is - // possible that the chain with the least priority could be assigned collators (since they are in - // old_assigned), while some chains with higher priority might have no collators. - if collators.len() < required_collators { - return Err(AssignmentError::NotEnoughCollators); - } - // We checked that the sum of all `num_collators` fits in `usize`, so we can safely use `as usize`. - - // Remove invalid collators and para ids from `old_assigned` - let para_ids_set = - BTreeSet::from_iter(chains.iter().map(|(para_id, _num_collators)| *para_id)); - let collators_set = BTreeSet::from_iter(collators.iter().cloned()); - Self::retain_valid_old_assigned(&mut old_assigned, ¶_ids_set, &collators_set); - - // Truncate num collators to required - for (para_id, num_collators) in chains.iter() { - let entry = old_assigned.entry(*para_id).or_default(); - entry.truncate(*num_collators as usize); - } - - // Count number of needed new collators. This is equivalent to: - // `required_collators - old_assigned.iter().map(|cs| cs.len()).sum()`. - let mut needed_new_collators = 0; - for (para_id, num_collators) in chains.iter() { - let cs = old_assigned.entry(*para_id).or_default(); - needed_new_collators += (*num_collators as usize).saturating_sub(cs.len()); - } - - let assigned_collators: BTreeSet = old_assigned - .iter() - .flat_map(|(_para_id, para_collators)| para_collators.iter().cloned()) - .collect(); - - // Truncate list of new_collators to `needed_new_collators` and shuffle it. - // This has the effect of keeping collator priority (the first collator of that list is more - // likely to be assigned to a chain than the last collator of that list), while also - // ensuring randomness (the original order does not directly affect which chain the - // collators are assigned to). - let mut new_collators: Vec<_> = collators - .into_iter() - .filter(|x| { - // Keep collators not already assigned - !assigned_collators.contains(x) - }) - .take(needed_new_collators) - .collect(); - if let Some(shuffle) = shuffle { - shuffle(&mut new_collators); - } - let mut new_collators = new_collators.into_iter(); - - // Fill missing collators - for (para_id, num_collators) in chains.iter() { - let cs = old_assigned.entry(*para_id).or_default(); - - while cs.len() < *num_collators as usize { - // This error should never happen because we calculated `needed_new_collators` - // using the same algorithm - let nc = new_collators - .next() - .ok_or(AssignmentError::NotEnoughCollators)?; - cs.push(nc); - } - } - - Ok(old_assigned) - } - - /// Insert invulnerables ensuring that they are always the first in the list. - /// The order of both lists is preserved. - /// `assigned` may already contain the invulnerables, in that case they are only moved to the front. - /// - /// Invulnerables need to be the first of the list because we may truncate the list of collators if the number of - /// collators changes, and in that case we want invulnerables to stay assigned there. - pub fn insert_invulnerables(assigned: &mut Vec, invulnerables: &[T::AccountId]) { - assigned.retain(|item| !invulnerables.contains(item)); - - let mut new_assigned = invulnerables.to_vec(); - new_assigned.extend(mem::take(assigned)); - - *assigned = new_assigned; - } - - /// Removes invalid entries from `old_assigned`: - /// - /// * para ids not in `chains_with_collators` - /// * collators not in `collators` - pub fn retain_valid_old_assigned( - old_assigned: &mut BTreeMap>, - chains_with_collators: &BTreeSet, - collators: &BTreeSet, - ) { - // old_assigned.remove_container_chains_not_in_set - old_assigned.retain(|id, _cs| chains_with_collators.contains(id)); - // old_assigned.remove_collators_not_in_set - for (_id, cs) in old_assigned.iter_mut() { - cs.retain(|c| collators.contains(c)); - } - } -} - -/// Errors than can happen during collator assignment -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum AssignmentError { - /// An empty list of collators was passed to `assign_collators_always_keep_old` - ZeroCollators, - /// The required number of collators for `assign_full` is greater than the provided number of collators. - /// Also includes possible overflows in number of collators. - NotEnoughCollators, - /// No collators were assigned to orchestrator chain - EmptyOrchestrator, -} - -/// A `ParaId` and a range of collators that need to be assigned to it. -/// This can be a container chain, a parathread, or the orchestrator chain. -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub struct ChainNumCollators { - pub para_id: ParaId, - pub min_collators: u32, - // This will only be filled if all the other min have been reached - pub max_collators: u32, -} diff --git a/pallets/collator-assignment/src/benchmarking.rs b/pallets/collator-assignment/src/benchmarking.rs deleted file mode 100644 index 3078806..0000000 --- a/pallets/collator-assignment/src/benchmarking.rs +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Benchmarking setup for pallet-invulnerables - -#![cfg(feature = "runtime-benchmarks")] - -use super::*; - -#[allow(unused)] -use { - crate::Pallet, - frame_benchmarking::{account, impl_benchmark_test_suite, v2::*, BenchmarkError}, - frame_support::{ - pallet_prelude::*, - traits::{Currency, EnsureOrigin, Get}, - }, - frame_system::{EventRecord, RawOrigin}, - sp_std::collections::btree_map::BTreeMap, - sp_std::prelude::*, -}; - -const SEED: u32 = 0; - -fn invulnerable(c: u32, seed: u32) -> T::AccountId { - account::("candidate", c, seed) -} - -fn invulnerables(count: u32, seed: u32) -> Vec { - (0..count) - .map(|c| invulnerable::(c, seed)) - .collect::>() -} - -fn assert_event_is_present(generic_event: ::RuntimeEvent) { - let events = frame_system::Pallet::::events(); - let system_event: ::RuntimeEvent = generic_event.into(); - // compare to the last event record - let event_records: Vec<::RuntimeEvent> = - events.iter().map(|i| i.event.clone()).collect(); - assert!(event_records.contains(&system_event)); -} - -#[benchmarks] -mod benchmarks { - use super::*; - - // worst case for new session. - // TODO: this should be parametric over the config values: - // * min_collators_for_orchestrator - // * max_collators_for_orchestrator - // * collators_per_container - #[benchmark] - fn new_session(x: Linear<1, 200>, y: Linear<1, 20>) -> Result<(), BenchmarkError> { - frame_system::Pallet::::set_block_number(0u32.into()); - - let collators = invulnerables::(x, SEED); - let container_chains: Vec<_> = (0..y).map(ParaId::from).collect(); - let session_index = 0u32.into(); - T::ContainerChains::set_session_container_chains(session_index, &container_chains); - T::RemoveParaIdsWithNoCredits::make_valid_para_ids(&container_chains); - T::HostConfiguration::set_host_configuration(session_index); - - // Assign random collators to test worst case: when collators need to be checked against existing collators - // In this case all of the old collators don't exist anymore - let old_container_chains: Vec<(ParaId, _)> = (0..y) - .map(|para_id| (para_id.into(), invulnerables::(10, SEED + 2 + para_id))) - .collect(); - - let old_assigned = AssignedCollators { - orchestrator_chain: invulnerables::(100, SEED + 1), - container_chains: BTreeMap::from_iter(old_container_chains), - }; - >::put(&old_assigned); - // Do not use [0; 32] because that seed will not shuffle the list of collators - // We use a different random seed every time to make sure that the event is included - let random_seed = [x as u8; 32]; - >::put(random_seed); - - #[block] - { - >::initializer_on_new_session(&session_index, collators); - } - - // Assignment changed - assert_ne!(>::get(), old_assigned); - // New assignment is not empty - // If more than one, at least one chain should have gotten collators - if x > 1 { - assert_ne!( - >::get().container_chains.len(), - 0 - ); - } - - // Worst case is `full_rotation: false` because it needs to check the previous assignment - assert_event_is_present::( - Event::NewPendingAssignment { - random_seed, - full_rotation: false, - target_session: T::SessionIndex::from(1u32), - } - .into(), - ); - - Ok(()) - } - - impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test,); -} diff --git a/pallets/collator-assignment/src/lib.rs b/pallets/collator-assignment/src/lib.rs deleted file mode 100644 index 1b4d5fa..0000000 --- a/pallets/collator-assignment/src/lib.rs +++ /dev/null @@ -1,533 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Collator Assignment Pallet -//! -//! This pallet assigns a list of collators to: -//! - the orchestrator chain -//! - a set of container chains -//! -//! The set of container chains is retrieved thanks to the GetContainerChains trait -//! The number of collators to assign to the orchestrator chain and the number -//! of collators to assign to each container chain is retrieved through the GetHostConfiguration -//! trait. -//! -//! The pallet uses the following approach: -//! -//! - First, it aims at filling the necessary collators to serve the orchestrator chain -//! - Second, it aims at filling in-order (FIFO) the existing containerChains -//! -//! Upon new session, this pallet takes whatever assignation was in the PendingCollatorContainerChain -//! storage, and assigns it as the current CollatorContainerChain. In addition, it takes the next -//! queued set of parachains and collators and calculates the assignment for the next session, storing -//! it in the PendingCollatorContainerChain storage item. -//! -//! The reason for the collator-assignment pallet to work with a one-session delay assignment is because -//! we want collators to know at least one session in advance the container chain/orchestrator that they -//! are assigned to. - -#![cfg_attr(not(feature = "std"), no_std)] - -use { - crate::assignment::{Assignment, ChainNumCollators}, - frame_support::{pallet_prelude::*, traits::Currency}, - frame_system::pallet_prelude::BlockNumberFor, - rand::{seq::SliceRandom, SeedableRng}, - rand_chacha::ChaCha20Rng, - sp_runtime::{ - traits::{AtLeast32BitUnsigned, One, Zero}, - Saturating, - }, - sp_std::{collections::btree_set::BTreeSet, fmt::Debug, prelude::*, vec}, - tp_traits::{ - CollatorAssignmentHook, CollatorAssignmentTip, GetContainerChainAuthor, - GetHostConfiguration, GetSessionContainerChains, ParaId, RemoveInvulnerables, - RemoveParaIdsWithNoCredits, ShouldRotateAllCollators, Slot, - }, -}; -pub use {dp_collator_assignment::AssignedCollators, pallet::*}; - -mod assignment; -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; -pub mod weights; -pub use weights::WeightInfo; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type SessionIndex: parity_scale_codec::FullCodec - + TypeInfo - + Copy - + AtLeast32BitUnsigned - + Debug; - // `SESSION_DELAY` is used to delay any changes to Paras registration or configurations. - // Wait until the session index is 2 larger then the current index to apply any changes, - // which guarantees that at least one full session has passed before any changes are applied. - type HostConfiguration: GetHostConfiguration; - type ContainerChains: GetSessionContainerChains; - type SelfParaId: Get; - type ShouldRotateAllCollators: ShouldRotateAllCollators; - type GetRandomnessForNextBlock: GetRandomnessForNextBlock>; - type RemoveInvulnerables: RemoveInvulnerables; - type RemoveParaIdsWithNoCredits: RemoveParaIdsWithNoCredits; - type CollatorAssignmentHook: CollatorAssignmentHook>; - type Currency: Currency; - type CollatorAssignmentTip: CollatorAssignmentTip>; - /// The weight information of this pallet. - type WeightInfo: WeightInfo; - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - NewPendingAssignment { - random_seed: [u8; 32], - full_rotation: bool, - target_session: T::SessionIndex, - }, - } - - #[pallet::storage] - #[pallet::getter(fn collator_container_chain)] - pub(crate) type CollatorContainerChain = - StorageValue<_, AssignedCollators, ValueQuery>; - - /// Pending configuration changes. - /// - /// This is a list of configuration changes, each with a session index at which it should - /// be applied. - /// - /// The list is sorted ascending by session index. Also, this list can only contain at most - /// 2 items: for the next session and for the `scheduled_session`. - #[pallet::storage] - #[pallet::getter(fn pending_collator_container_chain)] - pub(crate) type PendingCollatorContainerChain = - StorageValue<_, Option>, ValueQuery>; - - /// Randomness from previous block. Used to shuffle collators on session change. - /// Should only be set on the last block of each session and should be killed on the on_initialize of the next block. - /// The default value of [0; 32] disables randomness in the pallet. - #[pallet::storage] - #[pallet::getter(fn randomness)] - pub(crate) type Randomness = StorageValue<_, [u8; 32], ValueQuery>; - - #[pallet::call] - impl Pallet {} - - /// A struct that holds the assignment that is active after the session change and optionally - /// the assignment that becomes active after the next session change. - pub struct SessionChangeOutcome { - /// New active assignment. - pub active_assignment: AssignedCollators, - /// Next session active assignment. - pub next_assignment: AssignedCollators, - /// Total number of registered parachains before filtering them out, used as a weight hint - pub num_total_registered_paras: u32, - } - - impl Pallet { - /// Assign new collators - /// collators should be queued collators - pub fn assign_collators( - current_session_index: &T::SessionIndex, - random_seed: [u8; 32], - collators: Vec, - ) -> SessionChangeOutcome { - // We work with one session delay to calculate assignments - let session_delay = T::SessionIndex::one(); - let target_session_index = current_session_index.saturating_add(session_delay); - // We get the containerChains that we will have at the target session - let container_chains = - T::ContainerChains::session_container_chains(target_session_index); - let num_total_registered_paras = - (container_chains.parachains.len() + container_chains.parathreads.len()) as u32; - let mut container_chain_ids = container_chains.parachains; - let mut parathreads: Vec<_> = container_chains - .parathreads - .into_iter() - .map(|(para_id, _)| para_id) - .collect(); - - // We read current assigned collators - let old_assigned = Self::read_assigned_collators(); - let old_assigned_para_ids: BTreeSet = - old_assigned.container_chains.keys().cloned().collect(); - - // Remove the containerChains that do not have enough credits for block production - T::RemoveParaIdsWithNoCredits::remove_para_ids_with_no_credits( - &mut container_chain_ids, - &old_assigned_para_ids, - ); - // TODO: parathreads should be treated a bit differently, they don't need to have the same amount of credits - // as parathreads because they will not be producing blocks on every slot. - T::RemoveParaIdsWithNoCredits::remove_para_ids_with_no_credits( - &mut parathreads, - &old_assigned_para_ids, - ); - - let mut shuffle_collators = None; - // If the random_seed is all zeros, we don't shuffle the list of collators nor the list - // of container chains. - // This should only happen in tests, and in the genesis block. - if random_seed != [0; 32] { - let mut rng: ChaCha20Rng = SeedableRng::from_seed(random_seed); - container_chain_ids.shuffle(&mut rng); - parathreads.shuffle(&mut rng); - shuffle_collators = Some(move |collators: &mut Vec| { - collators.shuffle(&mut rng); - }) - } - - let orchestrator_chain = ChainNumCollators { - para_id: T::SelfParaId::get(), - min_collators: T::HostConfiguration::min_collators_for_orchestrator( - target_session_index, - ), - max_collators: T::HostConfiguration::max_collators_for_orchestrator( - target_session_index, - ), - }; - // Initialize list of chains as `[container1, container2, parathread1, parathread2]`. - // The order means priority: the first chain in the list will be the first one to get assigned collators. - // Chains will not be assigned less than `min_collators`, except the orchestrator chain. - // First all chains will be assigned `min_collators`, and then the first one will be assigned up to `max`, - // then the second one, and so on. - let mut chains = vec![]; - let collators_per_container = - T::HostConfiguration::collators_per_container(target_session_index); - for para_id in &container_chain_ids { - chains.push(ChainNumCollators { - para_id: *para_id, - min_collators: collators_per_container, - max_collators: collators_per_container, - }); - } - let collators_per_parathread = - T::HostConfiguration::collators_per_parathread(target_session_index); - for para_id in ¶threads { - chains.push(ChainNumCollators { - para_id: *para_id, - min_collators: collators_per_parathread, - max_collators: collators_per_parathread, - }); - } - - // Are there enough collators to satisfy the minimum demand? - let enough_collators_for_all_chain = collators.len() as u32 - >= T::HostConfiguration::min_collators_for_orchestrator(target_session_index) - .saturating_add( - collators_per_container.saturating_mul(container_chain_ids.len() as u32), - ) - .saturating_add( - collators_per_parathread.saturating_mul(parathreads.len() as u32), - ); - - // Prioritize paras by tip on congestion - // As of now this doesn't distinguish between parachains and parathreads - // TODO apply different logic to parathreads - if !enough_collators_for_all_chain { - chains.sort_by(|a, b| { - T::CollatorAssignmentTip::get_para_tip(b.para_id) - .cmp(&T::CollatorAssignmentTip::get_para_tip(a.para_id)) - }); - } - - // We assign new collators - // we use the config scheduled at the target_session_index - let new_assigned = - if T::ShouldRotateAllCollators::should_rotate_all_collators(target_session_index) { - log::debug!( - "Collator assignment: rotating collators. Session {:?}, Seed: {:?}", - current_session_index.encode(), - random_seed - ); - - Self::deposit_event(Event::NewPendingAssignment { - random_seed, - full_rotation: true, - target_session: target_session_index, - }); - - Assignment::::assign_collators_rotate_all( - collators, - orchestrator_chain, - chains, - shuffle_collators, - ) - } else { - log::debug!( - "Collator assignment: keep old assigned. Session {:?}, Seed: {:?}", - current_session_index.encode(), - random_seed - ); - - Self::deposit_event(Event::NewPendingAssignment { - random_seed, - full_rotation: false, - target_session: target_session_index, - }); - - Assignment::::assign_collators_always_keep_old( - collators, - orchestrator_chain, - chains, - old_assigned.clone(), - shuffle_collators, - ) - }; - - let mut new_assigned = match new_assigned { - Ok(x) => x, - Err(e) => { - log::error!( - "Error in collator assignment, will keep previous assignment. {:?}", - e - ); - - old_assigned.clone() - } - }; - - let mut assigned_containers = new_assigned.container_chains.clone(); - assigned_containers.retain(|_, v| !v.is_empty()); - - // On congestion, prioritized chains need to pay the minimum tip of the prioritized chains - let maybe_tip: Option> = if enough_collators_for_all_chain { - None - } else { - assigned_containers - .into_keys() - .filter_map(T::CollatorAssignmentTip::get_para_tip) - .min() - }; - - // TODO: this probably is asking for a refactor - // only apply the onCollatorAssignedHook if sufficient collators - for para_id in &container_chain_ids { - if !new_assigned - .container_chains - .get(para_id) - .unwrap_or(&vec![]) - .is_empty() - { - if let Err(e) = T::CollatorAssignmentHook::on_collators_assigned( - *para_id, - maybe_tip.as_ref(), - false, - ) { - // On error remove para from assignment - log::warn!( - "CollatorAssignmentHook error! Removing para {} from assignment: {:?}", - u32::from(*para_id), - e - ); - new_assigned.container_chains.remove(para_id); - } - } - } - - for para_id in ¶threads { - if !new_assigned - .container_chains - .get(para_id) - .unwrap_or(&vec![]) - .is_empty() - { - if let Err(e) = T::CollatorAssignmentHook::on_collators_assigned( - *para_id, - maybe_tip.as_ref(), - true, - ) { - // On error remove para from assignment - log::warn!( - "CollatorAssignmentHook error! Removing para {} from assignment: {:?}", - u32::from(*para_id), - e - ); - new_assigned.container_chains.remove(para_id); - } - } - } - - let mut pending = PendingCollatorContainerChain::::get(); - - let old_assigned_changed = old_assigned != new_assigned; - let mut pending_changed = false; - // Update CollatorContainerChain using last entry of pending, if needed - if let Some(current) = pending.take() { - pending_changed = true; - CollatorContainerChain::::put(current); - } - if old_assigned_changed { - pending = Some(new_assigned.clone()); - pending_changed = true; - } - // Update PendingCollatorContainerChain, if it changed - if pending_changed { - PendingCollatorContainerChain::::put(pending); - } - - // Only applies to session index 0 - if current_session_index == &T::SessionIndex::zero() { - CollatorContainerChain::::put(new_assigned.clone()); - return SessionChangeOutcome { - active_assignment: new_assigned.clone(), - next_assignment: new_assigned, - num_total_registered_paras, - }; - } - - SessionChangeOutcome { - active_assignment: old_assigned, - next_assignment: new_assigned, - num_total_registered_paras, - } - } - - // Returns the assigned collators as read from storage. - // If there is any item in PendingCollatorContainerChain, returns that element. - // Otherwise, reads and returns the current CollatorContainerChain - fn read_assigned_collators() -> AssignedCollators { - let mut pending_collator_list = PendingCollatorContainerChain::::get(); - - if let Some(assigned_collators) = pending_collator_list.take() { - assigned_collators - } else { - // Read current - CollatorContainerChain::::get() - } - } - - pub fn initializer_on_new_session( - session_index: &T::SessionIndex, - collators: Vec, - ) -> SessionChangeOutcome { - let random_seed = Randomness::::take(); - let num_collators = collators.len(); - let assigned_collators = Self::assign_collators(session_index, random_seed, collators); - let num_total_registered_paras = assigned_collators.num_total_registered_paras; - - frame_system::Pallet::::register_extra_weight_unchecked( - T::WeightInfo::new_session(num_collators as u32, num_total_registered_paras), - DispatchClass::Mandatory, - ); - - assigned_collators - } - } - - impl GetContainerChainAuthor for Pallet { - // TODO: pending collator container chain if the block is a session change! - fn author_for_slot(slot: Slot, para_id: ParaId) -> Option { - let assigned_collators = Pallet::::collator_container_chain(); - let collators = if para_id == T::SelfParaId::get() { - Some(&assigned_collators.orchestrator_chain) - } else { - assigned_collators.container_chains.get(¶_id) - }?; - - if collators.is_empty() { - // Avoid division by zero below - return None; - } - let author_index = u64::from(slot) % collators.len() as u64; - collators.get(author_index as usize).cloned() - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_authors_for_para_id(para_id: ParaId, authors: Vec) { - let mut assigned_collators = Pallet::::collator_container_chain(); - assigned_collators.container_chains.insert(para_id, authors); - CollatorContainerChain::::put(assigned_collators); - } - } - - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_initialize(n: BlockNumberFor) -> Weight { - let mut weight = Weight::zero(); - - // Account reads and writes for on_finalize - if T::GetRandomnessForNextBlock::should_end_session(n.saturating_add(One::one())) { - weight += T::DbWeight::get().reads_writes(1, 1); - } - - weight - } - - fn on_finalize(n: BlockNumberFor) { - // If the next block is a session change, read randomness and store in pallet storage - if T::GetRandomnessForNextBlock::should_end_session(n.saturating_add(One::one())) { - let random_seed = T::GetRandomnessForNextBlock::get_randomness(); - Randomness::::put(random_seed); - } - } - } -} - -/// Balance used by this pallet -pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - -pub struct RotateCollatorsEveryNSessions(PhantomData); - -impl ShouldRotateAllCollators for RotateCollatorsEveryNSessions -where - Period: Get, -{ - fn should_rotate_all_collators(session_index: u32) -> bool { - let period = Period::get(); - - if period == 0 { - // A period of 0 disables rotation - false - } else { - session_index % Period::get() == 0 - } - } -} - -pub trait GetRandomnessForNextBlock { - fn should_end_session(block_number: BlockNumber) -> bool; - fn get_randomness() -> [u8; 32]; -} - -impl GetRandomnessForNextBlock for () { - fn should_end_session(_block_number: BlockNumber) -> bool { - false - } - - fn get_randomness() -> [u8; 32] { - [0; 32] - } -} diff --git a/pallets/collator-assignment/src/mock.rs b/pallets/collator-assignment/src/mock.rs deleted file mode 100644 index b42086e..0000000 --- a/pallets/collator-assignment/src/mock.rs +++ /dev/null @@ -1,400 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - self as pallet_collator_assignment, pallet::CollatorContainerChain, - GetRandomnessForNextBlock, RotateCollatorsEveryNSessions, - }, - frame_support::{ - parameter_types, - traits::{ConstU16, ConstU64, Hooks}, - weights::Weight, - }, - frame_system as system, - parity_scale_codec::{Decode, Encode}, - sp_core::{Get, H256}, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, - sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}, - tp_traits::{ - CollatorAssignmentHook, CollatorAssignmentTip, ParaId, ParathreadParams, - RemoveInvulnerables, RemoveParaIdsWithNoCredits, SessionContainerChains, - }, - tracing_subscriber::{layer::SubscriberExt, FmtSubscriber}, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - MockData: mock_data, - CollatorAssignment: pallet_collator_assignment, - } -); - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use {super::*, frame_support::pallet_prelude::*}; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -#[derive( - Default, Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo, -)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - pub min_orchestrator_chain_collators: u32, - pub max_orchestrator_chain_collators: u32, - pub collators_per_container: u32, - pub collators_per_parathread: u32, - pub collators: Vec, - pub container_chains: Vec, - pub parathreads: Vec, - pub random_seed: [u8; 32], - // None means 5 - pub full_rotation_period: Option, - pub apply_tip: bool, - pub assignment_hook_errors: bool, -} - -impl mock_data::Config for Test {} - -// In tests, we ignore the session_index param, so changes to the configuration are instant - -pub struct HostConfigurationGetter; - -parameter_types! { - pub const ParachainId: ParaId = ParaId::new(1000); -} - -impl pallet_collator_assignment::GetHostConfiguration for HostConfigurationGetter { - fn max_collators(_session_index: u32) -> u32 { - unimplemented!() - } - - fn min_collators_for_orchestrator(_session_index: u32) -> u32 { - MockData::mock().min_orchestrator_chain_collators - } - - fn max_collators_for_orchestrator(_session_index: u32) -> u32 { - MockData::mock().max_orchestrator_chain_collators - } - - fn collators_per_container(_session_index: u32) -> u32 { - MockData::mock().collators_per_container - } - - fn collators_per_parathread(_session_index: u32) -> u32 { - MockData::mock().collators_per_parathread - } - #[cfg(feature = "runtime-benchmarks")] - fn set_host_configuration(_session_index: u32) { - MockData::mutate(|mocks| { - mocks.collators = vec![100]; - mocks.min_orchestrator_chain_collators = 1; - mocks.collators_per_container = 1; - mocks.max_orchestrator_chain_collators = 1; - }) - } -} - -pub struct CollatorsGetter; - -impl GetCollators for CollatorsGetter { - fn collators(_session_index: u32) -> Vec { - MockData::mock().collators - } -} - -pub struct ContainerChainsGetter; - -impl tp_traits::GetSessionContainerChains for ContainerChainsGetter { - fn session_container_chains(_session_index: u32) -> SessionContainerChains { - let parachains = MockData::mock() - .container_chains - .iter() - .cloned() - .map(ParaId::from) - .collect(); - - let parathreads = MockData::mock() - .parathreads - .iter() - .cloned() - .map(|para_id| { - ( - ParaId::from(para_id), - ParathreadParams { - slot_frequency: Default::default(), - }, - ) - }) - .collect(); - - SessionContainerChains { - parachains, - parathreads, - } - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_session_container_chains(_session_index: u32, para_ids: &[ParaId]) { - MockData::mutate(|mocks| { - mocks.container_chains = para_ids.iter().cloned().map(|x| x.into()).collect(); - }); - } -} - -pub struct MockGetRandomnessForNextBlock; - -impl GetRandomnessForNextBlock for MockGetRandomnessForNextBlock { - fn should_end_session(n: u64) -> bool { - n % 5 == 0 - } - - fn get_randomness() -> [u8; 32] { - MockData::mock().random_seed - } -} - -parameter_types! { - pub const CollatorRotationSessionPeriod: u32 = 5; -} - -pub struct MockCollatorRotationSessionPeriod; - -impl Get for MockCollatorRotationSessionPeriod { - fn get() -> u32 { - MockData::mock().full_rotation_period.unwrap_or(5) - } -} - -// Mock the service payment tip as only for 1003 -pub struct MockCollatorAssignmentTip; - -impl CollatorAssignmentTip for MockCollatorAssignmentTip { - fn get_para_tip(para_id: ParaId) -> Option { - if MockData::mock().apply_tip && (para_id == 1003u32.into() || para_id == 1004u32.into()) { - Some(1_000u32) - } else { - None - } - } -} -pub struct MockCollatorAssignmentHook; - -impl CollatorAssignmentHook for MockCollatorAssignmentHook { - fn on_collators_assigned( - para_id: ParaId, - _maybe_tip: Option<&u32>, - _is_parathread: bool, - ) -> Result { - // Only fail for para 1001 - if MockData::mock().assignment_hook_errors && para_id == 1001.into() { - // The error doesn't matter - Err(sp_runtime::DispatchError::Unavailable) - } else { - Ok(Weight::default()) - } - } -} - -impl pallet_collator_assignment::Config for Test { - type RuntimeEvent = RuntimeEvent; - type SessionIndex = u32; - type HostConfiguration = HostConfigurationGetter; - type ContainerChains = ContainerChainsGetter; - type SelfParaId = ParachainId; - type ShouldRotateAllCollators = - RotateCollatorsEveryNSessions; - type GetRandomnessForNextBlock = MockGetRandomnessForNextBlock; - type RemoveInvulnerables = RemoveAccountIdsAbove100; - type RemoveParaIdsWithNoCredits = RemoveParaIdsAbove5000; - type CollatorAssignmentHook = MockCollatorAssignmentHook; - type CollatorAssignmentTip = MockCollatorAssignmentTip; - type Currency = (); - type WeightInfo = (); -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut ext: sp_io::TestExternalities = system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into(); - - ext.execute_with(|| { - MockData::mutate(|mocks| { - // Initialize collators with 1 collator to avoid error `ZeroCollators` in session 0 - mocks.collators = vec![100]; - mocks.min_orchestrator_chain_collators = 1; - }) - }); - - ext -} - -pub trait GetCollators { - fn collators(session_index: SessionIndex) -> Vec; -} - -pub fn run_to_block(n: u64) { - let old_block_number = System::block_number(); - let session_len = 5; - - for x in (old_block_number + 1)..=n { - System::reset_events(); - System::set_block_number(x); - CollatorAssignment::on_initialize(x); - - if x % session_len == 1 { - let session_index = (x / session_len) as u32; - CollatorAssignment::initializer_on_new_session( - &session_index, - CollatorsGetter::collators(session_index), - ); - } - - CollatorAssignment::on_finalize(x); - } -} - -/// Any AccountId >= 100 will be considered an invulnerable -pub struct RemoveAccountIdsAbove100; - -impl RemoveInvulnerables for RemoveAccountIdsAbove100 { - fn remove_invulnerables(collators: &mut Vec, num_invulnerables: usize) -> Vec { - let mut invulnerables = vec![]; - collators.retain(|x| { - if invulnerables.len() < num_invulnerables && *x >= 100 { - invulnerables.push(*x); - false - } else { - true - } - }); - - invulnerables - } -} - -/// Any ParaId >= 5000 will be considered to not have enough credits -pub struct RemoveParaIdsAbove5000; - -impl RemoveParaIdsWithNoCredits for RemoveParaIdsAbove5000 { - fn remove_para_ids_with_no_credits( - para_ids: &mut Vec, - _currently_assigned: &BTreeSet, - ) { - para_ids.retain(|para_id| *para_id <= ParaId::from(5000)); - } - - #[cfg(feature = "runtime-benchmarks")] - fn make_valid_para_ids(_para_ids: &[ParaId]) {} -} - -/// Returns a map of collator to assigned para id -pub fn assigned_collators() -> BTreeMap { - let assigned_collators = CollatorContainerChain::::get(); - - let mut h = BTreeMap::new(); - - for (para_id, collators) in assigned_collators.container_chains.iter() { - for collator in collators.iter() { - h.insert(*collator, u32::from(*para_id)); - } - } - - for collator in assigned_collators.orchestrator_chain { - h.insert(collator, 1000); - } - - h -} - -/// Returns the default assignment for session 0 used in tests. Collator 100 is assigned to the orchestrator chain. -pub fn initial_collators() -> BTreeMap { - BTreeMap::from_iter(vec![(100, 1000)]) -} - -/// Executes code without printing any logs. Can be used in tests where we expect logs to be printed, to avoid clogging -/// up stderr. Only affects the current thread, if `f` spawns any threads or if logs come from another thread, they will -/// not be silenced. -pub fn silence_logs R, R>(f: F) -> R { - let no_logging_layer = tracing_subscriber::filter::LevelFilter::OFF; - let no_logging_subscriber = FmtSubscriber::builder().finish().with(no_logging_layer); - - tracing::subscriber::with_default(no_logging_subscriber, f) -} diff --git a/pallets/collator-assignment/src/tests.rs b/pallets/collator-assignment/src/tests.rs deleted file mode 100644 index dedcb9c..0000000 --- a/pallets/collator-assignment/src/tests.rs +++ /dev/null @@ -1,1429 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, CollatorContainerChain, Event, PendingCollatorContainerChain}, - dp_collator_assignment::AssignedCollators, - std::collections::BTreeMap, -}; - -mod assign_full; -mod prioritize_invulnerables; -mod select_chains; - -#[test] -fn assign_initial_collators() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - m.container_chains = vec![1001, 1002] - }); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(6); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - }); -} - -#[test] -fn assign_collators_after_one_leaves_container() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - m.container_chains = vec![1001, 1002] - }); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(6); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Remove 6 - m.collators = vec![1, 2, 3, 4, 5, /*6,*/ 7, 8, 9, 10]; - }); - - run_to_block(16); - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - //(6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - // 10 is assigned in place of 6 - (10, 1001), - ]), - ); - }); -} - -#[test] -fn assign_collators_after_one_leaves_orchestrator_chain() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - m.container_chains = vec![1001, 1002] - }); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Remove 4 - m.collators = vec![1, 2, 3, /*4,*/ 5, 6, 7, 8, 9, 10]; - }); - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - //(4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - // 10 is assigned in place of 4 - (10, 1000), - ]), - ); - }); -} - -#[test] -fn assign_collators_if_config_orchestrator_chain_collators_increases() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Add 3 new collators to orchestrator_chain - m.min_orchestrator_chain_collators = 8; - m.max_orchestrator_chain_collators = 8; - }); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - (10, 1000), - (11, 1000), - (12, 1000), - ]), - ); - }); -} - -#[test] -fn assign_collators_if_config_orchestrator_chain_collators_decreases() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Remove 3 collators from orchestrator_chain - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 2; - }); - - run_to_block(21); - - // The removed collators are random so no easy way to test the full list - assert_eq!(assigned_collators().len(), 6,); - }); -} - -#[test] -fn assign_collators_if_config_collators_per_container_increases() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Add 2 new collators to each container_chain - m.collators_per_container = 4; - }); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - (10, 1001), - (11, 1001), - (12, 1002), - (13, 1002), - ]), - ); - }); -} - -#[test] -fn assign_collators_if_container_chain_is_removed() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Remove 1 container_chain - m.container_chains = vec![1001 /*1002*/]; - }); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - ]), - ); - }); -} - -#[test] -fn assign_collators_if_container_chain_is_added() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - - MockData::mutate(|m| { - // Add 1 new container_chain - m.container_chains = vec![1001, 1002, 1003]; - }); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - (10, 1003), - (11, 1003), - ]), - ); - }); -} - -#[test] -fn assign_collators_after_decrease_num_collators() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![1001, 1002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]); - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - m.collators = vec![]; - }); - - // Disable logs in this test because it will print: - // Error in collator assignment, will keep previous assignment. ZeroCollators - // But only if this test runs after: - // test mock::__construct_runtime_integrity_test::runtime_integrity_tests ... ok - // Because that test enables logging - silence_logs(|| { - run_to_block(21); - }); - - // There are no collators but that would brick the chain, so we keep the old assignment - assert_eq!(assigned_collators(), initial_assignment); - }); -} - -#[test] -fn assign_collators_stay_constant_if_new_collators_can_take_new_chains() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - m.container_chains = vec![]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1000), (4, 1000), (5, 1000),]), - ); - - MockData::mutate(|m| { - m.container_chains = vec![1001, 1002]; - }); - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]), - ); - }); -} - -#[test] -fn assign_collators_move_extra_container_chain_to_orchestrator_chain_if_not_enough_collators() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4]; - m.container_chains = vec![]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1000), (4, 1000),]), - ); - - MockData::mutate(|m| { - m.collators = vec![1, 2, 3, 4, 5]; - m.container_chains = vec![1001, 1002]; - }); - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1000), (4, 1001), (5, 1001),]), - ); - }); -} - -#[test] -fn assign_collators_reorganize_container_chains_if_not_enough_collators() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; - m.container_chains = vec![1001, 1002, 1003, 1004, 1005]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1001), - (4, 1001), - (5, 1002), - (6, 1002), - (7, 1003), - (8, 1003), - (9, 1004), - (10, 1004), - (11, 1005), - (12, 1005) - ]), - ); - - MockData::mutate(|m| { - // Remove collators to leave only 1 per container chain - m.collators = vec![1, 2, 3, 5, 7, 9, 11]; - }); - run_to_block(21); - - // There are 7 collators in total: 2x2 container chains, plus 3 in the orchestrator chain - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1001), - (5, 1002), - (7, 1000), - (9, 1001), - (11, 1002) - ]), - ); - }); -} - -#[test] -fn assign_collators_set_zero_per_container() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; - m.container_chains = vec![1001, 1002, 1003, 1004]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1001), - (6, 1001), - (7, 1002), - (8, 1002), - (9, 1003), - (10, 1003), - (11, 1004), - (12, 1004), - ]), - ); - - MockData::mutate(|m| { - // We don't want to assign collators to container chains anymore - m.collators_per_container = 0; - }); - run_to_block(21); - - // There are 5 collators in total: 0x4 container chains, plus 5 in the orchestrator chain - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1000), (4, 1000), (5, 1000),]), - ); - }); -} - -#[test] -fn assign_collators_rotation() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; - m.container_chains = vec![1001, 1002, 1003, 1004]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1001), - (6, 1001), - (7, 1002), - (8, 1002), - (9, 1003), - (10, 1003), - (11, 1004), - (12, 1004), - ]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - m.random_seed = [1; 32]; - }); - - // The rotation period is every 5 sessions, so the first session with a different assignment - // will be session 5. Collators are calculated one session in advance, so they will be decided - // on session 4. - run_to_block(20); - - assert_eq!(assigned_collators(), initial_assignment,); - assert_eq!(PendingCollatorContainerChain::::get(), None,); - - run_to_block(21); - assert_eq!(assigned_collators(), initial_assignment,); - - assert!(PendingCollatorContainerChain::::get().is_some(),); - - run_to_block(25); - assert_eq!(assigned_collators(), initial_assignment,); - run_to_block(26); - - // Random assignment depends on the seed, shouldn't change unless the algorithm changes - let shuffled_assignment = BTreeMap::from_iter(vec![ - (1, 1003), - (2, 1000), - (3, 1001), - (4, 1003), - (5, 1000), - (6, 1000), - (7, 1001), - (8, 1000), - (9, 1004), - (10, 1004), - (11, 1002), - (12, 1002), - ]); - - assert_eq!(assigned_collators(), shuffled_assignment); - }); -} - -#[test] -fn assign_collators_rotation_container_chains_are_shuffled() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - // 4 collators so we can only assign to one container chain - m.collators = vec![1, 2, 3, 4]; - m.container_chains = vec![1001, 1002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1001), (4, 1001)]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - // Seed chosen manually to see the case where container 1002 is given priority - m.random_seed = [1; 32]; - }); - - run_to_block(26); - - // Random assignment depends on the seed, shouldn't change unless the algorithm changes - // Test that container chains are shuffled because 1001 does not have priority - let shuffled_assignment = - BTreeMap::from_iter(vec![(1, 1002), (2, 1000), (3, 1000), (4, 1002)]); - - assert_eq!(assigned_collators(), shuffled_assignment,); - }); -} - -#[test] -fn assign_collators_rotation_parathreads_are_shuffled() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - // 4 collators so we can only assign to one parathread - m.collators = vec![1, 2, 3, 4]; - m.parathreads = vec![3001, 3002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = - BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 3001), (4, 3001)]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - // Seed chosen manually to see the case where parathread 3002 is given priority - m.random_seed = [1; 32]; - }); - - run_to_block(26); - - // Random assignment depends on the seed, shouldn't change unless the algorithm changes - // Test that container chains are shuffled because 1001 does not have priority - let shuffled_assignment = - BTreeMap::from_iter(vec![(1, 3002), (2, 1000), (3, 1000), (4, 3002)]); - - assert_eq!(assigned_collators(), shuffled_assignment,); - }); -} - -#[test] -fn assign_collators_rotation_collators_are_shuffled() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - // 10 collators but we only need 9, so 1 collator will not be assigned - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - m.container_chains = vec![1001, 1002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - m.random_seed = [1; 32]; - }); - - run_to_block(26); - - // Random assignment depends on the seed, shouldn't change unless the algorithm changes - // Test that collators are shuffled and the collators of each container chain are not - // consecutive in order. For example, if collators 8 and 9 are both assigned to chain 1002, - // change the random seed until they are on different chains. - // Collator 10 will never be assigned because of the collator priority. - let shuffled_assignment = BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1001), - (3, 1000), - (4, 1000), - (5, 1002), - (6, 1001), - (7, 1000), - (8, 1002), - (9, 1000), - ]); - - assert_eq!(assigned_collators(), shuffled_assignment,); - }); -} - -#[test] -fn assign_collators_invulnerables_priority_orchestrator() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - // 11 collators but we only need 9, so 2 collator will not be assigned - // id 100 is an invulnerable so it will be assigned to the orchestrator - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]; - m.container_chains = vec![1001, 1002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (100, 1000), - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1001), - (6, 1001), - (7, 1002), - (8, 1002), - ]); - - assert_eq!(assigned_collators(), initial_assignment,); - }); -} - -#[test] -fn assign_collators_invulnerables_priority_orchestrator_reassigned() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - // Disable rotation because this test is long - m.full_rotation_period = Some(0); - - // 10 collators but we only need 9, so 1 collator will not be assigned - // ids >= 100 are invulnerables so 2 of them will always be assigned to the orchestrator - m.collators = vec![1, 2, 3, 4, 5, 100, 101, 102, 103, 104]; - m.container_chains = vec![1001, 1002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (100, 1000), - (101, 1000), - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1001), - (5, 1001), - (102, 1002), - (103, 1002), - ]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - // Remove invulnerable from orchestrator, the unassigned invulnerable will take its place - m.collators = vec![1, 2, 3, 4, 5, 101, 102, 103, 104]; - }); - - run_to_block(21); - - let assignment = BTreeMap::from_iter(vec![ - (104, 1000), - (101, 1000), - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1001), - (5, 1001), - (102, 1002), - (103, 1002), - ]); - - assert_eq!(assigned_collators(), assignment,); - - MockData::mutate(|m| { - // Remove another invulnerable from orchestrator, there are no unassigned invulnerables so the ones in a - // container chain will move from the container chain to the orchestrator - m.collators = vec![1, 2, 3, 4, 5, 102, 103, 104]; - }); - - run_to_block(31); - - let assignment = BTreeMap::from_iter(vec![ - (104, 1000), - (102, 1000), - (1, 1000), - (2, 1000), - (3, 1002), - (4, 1001), - (5, 1001), - (103, 1002), - ]); - - assert_eq!(assigned_collators(), assignment,); - }); -} - -#[test] -fn assign_collators_all_invulnerables() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - // All collators are invulnerables: this results in the same assignment as if there were not invulnerables - m.collators = vec![101, 102, 103, 104, 105, 106, 107, 108, 109, 110]; - m.container_chains = vec![1001, 1002]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![ - (101, 1000), - (102, 1000), - (103, 1000), - (104, 1000), - (105, 1000), - (106, 1001), - (107, 1001), - (108, 1002), - (109, 1002), - ]); - - assert_eq!(assigned_collators(), initial_assignment,); - }); -} - -#[test] -fn rotation_events() { - // Ensure that the NewPendingAssignment event is correct - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; - m.container_chains = vec![1001, 1002, 1003, 1004]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - - // Block 1 should emit event, random seed was not set - System::assert_last_event( - Event::NewPendingAssignment { - random_seed: [0; 32], - full_rotation: false, - target_session: 1, - } - .into(), - ); - - for i in 2..=11 { - run_to_block(i); - match i { - 6 | 11 => { - System::assert_last_event( - Event::NewPendingAssignment { - random_seed: [0; 32], - full_rotation: false, - target_session: (i / 5) as u32 + 1, - } - .into(), - ); - } - _ => { - assert_eq!( - System::events(), - vec![], - "Block #{} should not have any events", - i - ); - } - } - } - - MockData::mutate(|m| { - m.random_seed = [1; 32]; - }); - - // The rotation period is every 5 sessions, so the first session with a different assignment - // will be session 5. Collators are calculated one session in advance, so they will be decided - // on session 4, which starts on block 21. - for i in 12..=51 { - run_to_block(i); - match i { - 16 | 26 | 31 | 36 | 41 | 51 => { - System::assert_last_event( - Event::NewPendingAssignment { - random_seed: [1; 32], - full_rotation: false, - target_session: (i / 5) as u32 + 1, - } - .into(), - ); - } - 21 | 46 => { - System::assert_last_event( - Event::NewPendingAssignment { - random_seed: [1; 32], - full_rotation: true, - target_session: (i / 5) as u32 + 1, - } - .into(), - ); - } - _ => { - assert_eq!( - System::events(), - vec![], - "Block #{} should not have any events", - i - ); - } - } - } - }); -} - -#[test] -fn assign_collators_remove_from_orchestator_when_all_assigned() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 2; - - m.collators = vec![1, 2]; - m.container_chains = vec![1001]; - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let initial_assignment = BTreeMap::from_iter(vec![(1, 1000), (2, 1000)]); - - assert_eq!(assigned_collators(), initial_assignment,); - - MockData::mutate(|m| { - m.collators = vec![1, 2, 3, 4]; - }); - - run_to_block(26); - - let assignment = BTreeMap::from_iter(vec![(1, 1000), (2, 1000), (3, 1001), (4, 1001)]); - assert_eq!(assigned_collators(), assignment,); - - MockData::mutate(|m| { - m.collators = vec![1, 3, 4]; - }); - - run_to_block(36); - - let assignment = BTreeMap::from_iter(vec![(1, 1000), (3, 1000)]); - - assert_eq!(assigned_collators(), assignment,); - - MockData::mutate(|m| { - m.collators = vec![3, 4]; - }); - - run_to_block(46); - - let assignment = BTreeMap::from_iter(vec![(3, 1000), (4, 1000)]); - - assert_eq!(assigned_collators(), assignment,); - }); -} - -#[test] -fn collator_assignment_includes_empty_chains() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 2; - - m.collators = vec![1, 2]; - m.container_chains = vec![2000, 2001, 2002]; - m.parathreads = vec![3000, 3001, 3002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let assigned_collators = CollatorContainerChain::::get(); - let expected = AssignedCollators { - orchestrator_chain: vec![1, 2], - container_chains: BTreeMap::from_iter(vec![ - (2000.into(), vec![]), - (2001.into(), vec![]), - (2002.into(), vec![]), - (3000.into(), vec![]), - (3001.into(), vec![]), - (3002.into(), vec![]), - ]), - }; - assert_eq!(assigned_collators, expected); - }); -} - -#[test] -fn collator_assignment_remove_parachains_without_credits() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7]; - m.container_chains = vec![2000, 5001, 5002]; - m.parathreads = vec![] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let assigned_collators = CollatorContainerChain::::get(); - let expected = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![(2000.into(), vec![6, 7])]), - }; - assert_eq!(assigned_collators, expected); - }); -} - -#[test] -fn collator_assignment_remove_parathreads_without_credits() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 2; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7]; - m.container_chains = vec![]; - m.parathreads = vec![3000, 5001, 5002] - }); - assert_eq!(assigned_collators(), initial_collators(),); - run_to_block(11); - - let assigned_collators = CollatorContainerChain::::get(); - let expected = AssignedCollators { - orchestrator_chain: vec![1, 2, 3, 4, 5], - container_chains: BTreeMap::from_iter(vec![(3000.into(), vec![6, 7])]), - }; - assert_eq!(assigned_collators, expected); - }); -} - -#[test] -fn assign_collators_prioritizing_tip() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; - m.container_chains = vec![1001, 1002, 1003, 1004]; - m.apply_tip = false - }); - - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - ]) - ); - - // Enable tip for 1003 and 1004 - MockData::mutate(|m| m.apply_tip = true); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1003), - (7, 1003), - (8, 1004), - (9, 1004), - ]), - ); - }); -} - -#[test] -fn on_collators_assigned_hook_failure_removes_para_from_assignment() { - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - m.collators_per_container = 2; - m.collators_per_parathread = 2; - m.min_orchestrator_chain_collators = 5; - m.max_orchestrator_chain_collators = 5; - - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; - m.container_chains = vec![1001, 1002, 1003, 1004]; - m.assignment_hook_errors = false; - }); - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (6, 1001), - (7, 1001), - (8, 1002), - (9, 1002), - (10, 1003), - (11, 1003), - ]), - ); - - // Para 1001 will fail on_assignment_hook - MockData::mutate(|m| { - m.assignment_hook_errors = true; - }); - - run_to_block(21); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![ - (1, 1000), - (2, 1000), - (3, 1000), - (4, 1000), - (5, 1000), - (8, 1002), - (9, 1002), - (10, 1003), - (11, 1003), - ]), - ); - }); -} - -#[test] -fn assign_collators_truncates_before_shuffling() { - // Check that if there are more collators than needed, we only assign the first collators - new_test_ext().execute_with(|| { - run_to_block(1); - - MockData::mutate(|m| { - // Need 5 collators in total, 3 for orchestrator and 2 for 1 container chain - m.collators_per_container = 2; - m.min_orchestrator_chain_collators = 3; - m.max_orchestrator_chain_collators = 3; - - // Have 10 collators in total, but only the first 5 will be assigned, in random order - m.collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - m.container_chains = vec![1001]; - m.random_seed = [1; 32]; - }); - - run_to_block(11); - - assert_eq!( - assigned_collators(), - BTreeMap::from_iter(vec![(1, 1001), (2, 1000), (3, 1000), (4, 1001), (5, 1000),]) - ); - }); -} diff --git a/pallets/collator-assignment/src/tests/assign_full.rs b/pallets/collator-assignment/src/tests/assign_full.rs deleted file mode 100644 index 047cff9..0000000 --- a/pallets/collator-assignment/src/tests/assign_full.rs +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - assignment::{Assignment, AssignmentError}, - tests::Test, - }, - rand::{seq::SliceRandom, SeedableRng}, - rand_chacha::ChaCha20Rng, - sp_std::collections::btree_map::BTreeMap, -}; - -fn no_shuffle() -> Option)> { - None -} - -#[test] -fn assign_full_old_assigned_priority() { - // Collators in old_assigned will be selected before other collators - let collators = vec![1, 2, 3, 4, 5]; - let container_chains = vec![(1000.into(), 5)]; - let old_assigned = BTreeMap::from_iter(vec![(1000.into(), vec![3, 4])]); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()) - .unwrap(); - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![3, 4, 1, 2, 5])]); - assert_eq!(new_assigned, expected); -} - -#[test] -fn assign_full_invalid_old_assigned_collators_removed() { - // If the collators in old_assigned are no longer collators, they are not assigned - let collators = vec![1, 2, 3, 4, 5]; - let container_chains = vec![(1000.into(), 5)]; - let old_assigned = BTreeMap::from_iter(vec![(1000.into(), vec![20, 21])]); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()) - .unwrap(); - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![1, 2, 3, 4, 5])]); - assert_eq!(new_assigned, expected); -} - -#[test] -fn assign_full_invalid_chains_removed() { - // Mark all collators as already assigned to a chain that does not exist. Should treat them as not assigned. - let collators = vec![1, 2, 3, 4, 5]; - let container_chains = vec![(1000.into(), 5)]; - let old_assigned = BTreeMap::from_iter(vec![(1001.into(), vec![1, 2, 3, 4, 5])]); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()) - .unwrap(); - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![1, 2, 3, 4, 5])]); - assert_eq!(new_assigned, expected); -} - -#[test] -fn assign_full_truncates_collators() { - // Need 2 collators for each chain, when old_assigned has more than 2. Should truncate old_assigned to 2. - let collators = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - let container_chains = vec![(1000.into(), 2), (2000.into(), 2)]; - let old_assigned = BTreeMap::from_iter(vec![ - (1000.into(), vec![1, 2, 3, 4, 5]), - (2000.into(), vec![6, 7, 8, 9, 10]), - ]); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()) - .unwrap(); - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![1, 2]), (2000.into(), vec![6, 7])]); - assert_eq!(new_assigned, expected); -} - -#[test] -fn assign_full_old_assigned_error_if_not_enough_collators() { - // Need 4 collators, only have 2, and all 2 were assigned to the second chain. If the function did not panic, we - // would have 0 collators assigned to the first chain, which is supposed to have priority. - let collators = vec![1, 2]; - let container_chains = vec![(1000.into(), 2), (2000.into(), 2)]; - let old_assigned = BTreeMap::from_iter(vec![(2000.into(), vec![1, 2])]); - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()); - assert_eq!( - new_assigned.unwrap_err(), - AssignmentError::NotEnoughCollators - ); -} - -#[test] -fn assign_full_list_priority() { - // The order in the collators list is priority - let collators = vec![ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - ]; - let container_chains = vec![(1000.into(), 2), (2000.into(), 2)]; - let old_assigned = BTreeMap::from_iter(vec![]); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, no_shuffle()) - .unwrap(); - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![1, 2]), (2000.into(), vec![3, 4])]); - assert_eq!(new_assigned, expected); -} - -#[test] -fn assign_full_list_priority_shuffle() { - // The order in the collators list is priority - let collators = vec![ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - ]; - let container_chains = vec![(1000.into(), 2), (2000.into(), 2)]; - let old_assigned = BTreeMap::from_iter(vec![]); - let shuffle = Some(move |collators: &mut Vec| { - // Shuffle with a fixed seed, we do not need randomness in a unit test - let seed = [1; 32]; - let mut rng: ChaCha20Rng = SeedableRng::from_seed(seed); - collators.shuffle(&mut rng); - }); - - let new_assigned = - Assignment::::assign_full(collators, container_chains, old_assigned, shuffle) - .unwrap(); - // Expect only [1, 2, 3, 4] to be assigned, in random order - let expected = BTreeMap::from_iter(vec![(1000.into(), vec![3, 2]), (2000.into(), vec![1, 4])]); - assert_eq!(new_assigned, expected); -} diff --git a/pallets/collator-assignment/src/tests/prioritize_invulnerables.rs b/pallets/collator-assignment/src/tests/prioritize_invulnerables.rs deleted file mode 100644 index 4e13c69..0000000 --- a/pallets/collator-assignment/src/tests/prioritize_invulnerables.rs +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - assignment::{Assignment, ChainNumCollators}, - tests::Test, - }, - sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}, -}; - -#[test] -fn invulnerable_priority_0_collators() { - let collators = vec![]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = BTreeMap::new(); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 0); -} - -#[test] -fn invulnerable_priority_0_invulnerables() { - let collators = vec![1, 2, 3, 4, 5]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = BTreeMap::from_iter(vec![(1000.into(), vec![1, 2])]); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 0); -} - -#[test] -fn invulnerable_priority_1_invulnerable_orchestrator() { - let collators = vec![1, 2, 3, 4, 5, 101]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = BTreeMap::from_iter(vec![(1000.into(), vec![101])]); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 1); -} - -#[test] -fn invulnerable_priority_1_invulnerable_not_assigned() { - let collators = vec![1, 2, 3, 4, 5, 101]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = BTreeMap::new(); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 1); -} - -#[test] -fn invulnerable_priority_1_invulnerable_assigned_to_another_chain() { - let collators = vec![1, 2, 3, 4, 5, 101]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = - BTreeMap::from_iter(vec![(1000.into(), vec![]), (2000.into(), vec![101])]); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 1); -} - -#[test] -fn bug_same_invulnerable_selected_twice() { - let collators = vec![100]; - let orchestrator_chain = ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }; - let mut old_assigned = BTreeMap::from_iter(vec![(1000.into(), vec![100])]); - - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 1); -} - -#[test] -fn bug_not_using_assigned_invulnerables() { - // There are 3 invulnerables, 1 assigned to orchestrator and 2 assigned to a container chain. - // After `prioritize_invulnerables` the first one from the container should move to orchestrator - let collators = vec![1, 2, 3, 4, 5, 102, 103, 104]; - - let container_chains = [ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 2, - max_collators: 2, - }, - ChainNumCollators { - para_id: 2001.into(), - min_collators: 2, - max_collators: 2, - }, - ]; - let orchestrator_chain = container_chains[0]; - - let mut old_assigned = BTreeMap::from_iter(vec![ - (1000.into(), vec![101, 104, 1, 2, 3]), - (2000.into(), vec![4, 5]), - (2001.into(), vec![102, 103]), - ]); - - let chains_with_collators_set = - BTreeSet::from_iter(container_chains.iter().map(|cc| cc.para_id)); - let collators_set = BTreeSet::from_iter(collators.iter().cloned()); - Assignment::::retain_valid_old_assigned( - &mut old_assigned, - &chains_with_collators_set, - &collators_set, - ); - let num_invulnerables = Assignment::::prioritize_invulnerables( - &collators, - orchestrator_chain, - &mut old_assigned, - ); - - assert_eq!(num_invulnerables, 2); -} diff --git a/pallets/collator-assignment/src/tests/select_chains.rs b/pallets/collator-assignment/src/tests/select_chains.rs deleted file mode 100644 index c524c0c..0000000 --- a/pallets/collator-assignment/src/tests/select_chains.rs +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use crate::{ - assignment::{Assignment, ChainNumCollators}, - tests::Test, -}; - -#[test] -fn select_chains_not_enough_to_reach_min_container() { - // 10 collators when the orchestrator needs 2 and the containers need 10 result in no containers having collators - let container_chains = vec![ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 10, - max_collators: 10, - }, - ChainNumCollators { - para_id: 2001.into(), - min_collators: 10, - max_collators: 10, - }, - ]; - let new_assigned = Assignment::::select_chains_with_collators(10, &container_chains); - assert_eq!(new_assigned, vec![(1000.into(), 5),]); -} - -#[test] -fn select_chains_not_enough_to_reach_min_orchestrator() { - // 1 collator when the orchestrator needs 2 results in 1 collators being assigned to orchestrator - let container_chains = vec![ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }]; - let new_assigned = Assignment::::select_chains_with_collators(1, &container_chains); - assert_eq!(new_assigned, vec![(1000.into(), 1),]); -} - -#[test] -fn select_chains_not_enough_for_all_min() { - // Need 6 collators to support 3 chains, only have 5. The last chain will be removed and the remaining collator - // will be assigned to orchestrator. - let container_chains = vec![ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 2, - max_collators: 2, - }, - ChainNumCollators { - para_id: 2001.into(), - min_collators: 2, - max_collators: 2, - }, - ]; - let new_assigned = Assignment::::select_chains_with_collators(5, &container_chains); - assert_eq!(new_assigned, vec![(1000.into(), 3), (2000.into(), 2),]); -} - -#[test] -fn select_chains_not_enough_for_all_max() { - // Need 6 collators to support 3 chains at min, but 15 collators to support them at max. - // The last chain will be removed and the remaining collator - let container_chains = vec![ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2001.into(), - min_collators: 2, - max_collators: 5, - }, - ]; - let new_assigned = Assignment::::select_chains_with_collators(7, &container_chains); - assert_eq!( - new_assigned, - vec![(1000.into(), 3), (2000.into(), 2), (2001.into(), 2),] - ); - let new_assigned = Assignment::::select_chains_with_collators(10, &container_chains); - assert_eq!( - new_assigned, - vec![(1000.into(), 5), (2000.into(), 3), (2001.into(), 2),] - ); - let new_assigned = Assignment::::select_chains_with_collators(13, &container_chains); - assert_eq!( - new_assigned, - vec![(1000.into(), 5), (2000.into(), 5), (2001.into(), 3),] - ); - let new_assigned = Assignment::::select_chains_with_collators(15, &container_chains); - assert_eq!( - new_assigned, - vec![(1000.into(), 5), (2000.into(), 5), (2001.into(), 5),] - ); -} - -#[test] -fn select_chains_more_than_max() { - // When the number of collators is greater than the sum of the max, all the chains are assigned max collators - let container_chains = vec![ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2001.into(), - min_collators: 2, - max_collators: 5, - }, - ]; - let new_assigned = Assignment::::select_chains_with_collators(20, &container_chains); - assert_eq!( - new_assigned, - vec![(1000.into(), 5), (2000.into(), 5), (2001.into(), 5),] - ); -} - -#[test] -fn select_chains_not_enough_to_reach_min_container_but_enough_for_parathread() { - // Chain 2000 has more priority than parathread 3000, but we do not have enough min collators so the container - // chain gets 0 collator and the parathread gets 1 - let container_chains = vec![ - ChainNumCollators { - para_id: 1000.into(), - min_collators: 2, - max_collators: 5, - }, - ChainNumCollators { - para_id: 2000.into(), - min_collators: 2, - max_collators: 2, - }, - ChainNumCollators { - para_id: 3000.into(), - min_collators: 1, - max_collators: 1, - }, - ]; - let new_assigned = Assignment::::select_chains_with_collators(3, &container_chains); - assert_eq!(new_assigned, vec![(1000.into(), 2), (3000.into(), 1)]); -} diff --git a/pallets/collator-assignment/src/weights.rs b/pallets/collator-assignment/src/weights.rs deleted file mode 100644 index 147d121..0000000 --- a/pallets/collator-assignment/src/weights.rs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_collator_assignment -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-11-13, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_collator_assignment -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_collator_assignment. -pub trait WeightInfo { - fn new_session(x: u32, y: u32, ) -> Weight; -} - -/// Weights for pallet_collator_assignment using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `CollatorAssignment::Randomness` (r:1 w:1) - /// Proof: `CollatorAssignment::Randomness` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:0) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:20 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `CollatorAssignment::PendingCollatorContainerChain` (r:1 w:1) - /// Proof: `CollatorAssignment::PendingCollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::ActiveConfig` (r:1 w:0) - /// Proof: `Configuration::ActiveConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::PendingConfigs` (r:1 w:0) - /// Proof: `Configuration::PendingConfigs` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorAssignment::CollatorContainerChain` (r:0 w:1) - /// Proof: `CollatorAssignment::CollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 20]`. - fn new_session(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `766 + y * (32 ±0)` - // Estimated: `4687 + y * (2499 ±0)` - // Minimum execution time: 56_626_000 picoseconds. - Weight::from_parts(41_872_969, 4687) - // Standard Error: 1_156 - .saturating_add(Weight::from_parts(76_061, 0).saturating_mul(x.into())) - // Standard Error: 11_776 - .saturating_add(Weight::from_parts(2_758_758, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(y.into()))) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 2499).saturating_mul(y.into())) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `CollatorAssignment::Randomness` (r:1 w:1) - /// Proof: `CollatorAssignment::Randomness` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:0) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:20 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `CollatorAssignment::PendingCollatorContainerChain` (r:1 w:1) - /// Proof: `CollatorAssignment::PendingCollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::ActiveConfig` (r:1 w:0) - /// Proof: `Configuration::ActiveConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::PendingConfigs` (r:1 w:0) - /// Proof: `Configuration::PendingConfigs` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorAssignment::CollatorContainerChain` (r:0 w:1) - /// Proof: `CollatorAssignment::CollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 20]`. - fn new_session(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `766 + y * (32 ±0)` - // Estimated: `4687 + y * (2499 ±0)` - // Minimum execution time: 56_626_000 picoseconds. - Weight::from_parts(41_872_969, 4687) - // Standard Error: 1_156 - .saturating_add(Weight::from_parts(76_061, 0).saturating_mul(x.into())) - // Standard Error: 11_776 - .saturating_add(Weight::from_parts(2_758_758, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(8_u64)) - .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(y.into()))) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 2499).saturating_mul(y.into())) - } -} diff --git a/pallets/configuration/Cargo.toml b/pallets/configuration/Cargo.toml deleted file mode 100644 index ec8d9db..0000000 --- a/pallets/configuration/Cargo.toml +++ /dev/null @@ -1,59 +0,0 @@ -[package] -name = "pallet-configuration" -authors = { workspace = true } -description = "Configuration pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -scale-info = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "parity-scale-codec/std", - "scale-info/std", - "serde/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/configuration/src/benchmarks.rs b/pallets/configuration/src/benchmarks.rs deleted file mode 100644 index 6dcb033..0000000 --- a/pallets/configuration/src/benchmarks.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -//! Benchmarking -use { - crate::{Call, Config, Pallet}, - frame_benchmarking::benchmarks, - frame_system::RawOrigin, -}; - -benchmarks! { - set_config_with_u32 {}: set_max_collators(RawOrigin::Root, 100) - - impl_benchmark_test_suite!( - Pallet, - crate::mock::new_test_ext(), - crate::mock::Test - ); -} diff --git a/pallets/configuration/src/lib.rs b/pallets/configuration/src/lib.rs deleted file mode 100644 index 40f037d..0000000 --- a/pallets/configuration/src/lib.rs +++ /dev/null @@ -1,597 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Configuration Pallet -//! -//! This pallet stores the configuration for an orchestration-collator assignation chain. In -//! particular stores: -//! -//! - How many collators are taken. -//! - How many of those collators should be serving the orchestrator chain -//! - Howe many of those collators should be serving the containerChains -//! -//! All configuration changes are protected behind the root origin -//! CHanges to the configuration are not immeditaly applied, but rather we wait -//! T::SessionDelay to apply these changes - -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; -pub mod weights; - -pub use weights::WeightInfo; - -#[cfg(any(test, feature = "runtime-benchmarks"))] -mod benchmarks; - -pub use pallet::*; -use { - frame_support::pallet_prelude::*, - frame_system::pallet_prelude::*, - serde::{Deserialize, Serialize}, - sp_runtime::{traits::AtLeast32BitUnsigned, Perbill, RuntimeAppPublic, Saturating}, - sp_std::prelude::*, - tp_traits::GetSessionIndex, -}; - -const LOG_TARGET: &str = "pallet_configuration"; - -/// All configuration of the runtime with respect to parachains and parathreads. -#[derive( - Clone, - Encode, - Decode, - PartialEq, - sp_core::RuntimeDebug, - scale_info::TypeInfo, - Serialize, - Deserialize, -)] -pub struct HostConfiguration { - /// Maximum number of collators, in total, including orchestrator and containers - pub max_collators: u32, - /// Minimum number of collators to be assigned to orchestrator chain - pub min_orchestrator_collators: u32, - /// Maximum number of collators to be assigned to orchestrator chain after all the container chains have been - /// assigned collators. - pub max_orchestrator_collators: u32, - /// How many collators to assign to one container chain - pub collators_per_container: u32, - /// Rotate all collators once every n sessions. If this value is 0 means that there is no rotation - pub full_rotation_period: u32, - /// How many collators to assign to one parathread - // TODO: for now we only support 1 collator per parathread because using Aura for consensus conflicts with - // the idea of being able to create blocks every n slots: if there are 2 collators and we create blocks - // every 2 slots, 1 collator will create all the blocks. - pub collators_per_parathread: u32, - /// How many parathreads can be assigned to one collator - pub parathreads_per_collator: u32, - /// Ratio of collators that we expect to be assigned to container chains. Affects fees. - pub target_container_chain_fullness: Perbill, -} - -impl Default for HostConfiguration { - fn default() -> Self { - Self { - max_collators: 100u32, - min_orchestrator_collators: 2u32, - max_orchestrator_collators: 5u32, - collators_per_container: 2u32, - full_rotation_period: 24u32, - collators_per_parathread: 1, - parathreads_per_collator: 1, - target_container_chain_fullness: Perbill::from_percent(80), - } - } -} - -/// Enumerates the possible inconsistencies of `HostConfiguration`. -#[derive(Debug)] -pub enum InconsistentError { - /// `max_orchestrator_collators` is lower than `min_orchestrator_collators` - MaxCollatorsLowerThanMinCollators, - /// `min_orchestrator_collators` must be at least 1 - MinOrchestratorCollatorsTooLow, - /// `max_collators` must be at least 1 - MaxCollatorsTooLow, - /// Tried to modify an unimplemented parameter - UnimplementedParameter, -} - -impl HostConfiguration { - /// Checks that this instance is consistent with the requirements on each individual member. - /// - /// # Errors - /// - /// This function returns an error if the configuration is inconsistent. - pub fn check_consistency(&self) -> Result<(), InconsistentError> { - if self.max_collators < 1 { - return Err(InconsistentError::MaxCollatorsTooLow); - } - if self.min_orchestrator_collators < 1 { - return Err(InconsistentError::MinOrchestratorCollatorsTooLow); - } - if self.max_orchestrator_collators < self.min_orchestrator_collators { - return Err(InconsistentError::MaxCollatorsLowerThanMinCollators); - } - if self.parathreads_per_collator != 1 { - return Err(InconsistentError::UnimplementedParameter); - } - if self.max_collators < self.min_orchestrator_collators { - return Err(InconsistentError::MaxCollatorsLowerThanMinCollators); - } - Ok(()) - } - - /// Checks that this instance is consistent with the requirements on each individual member. - /// - /// # Panics - /// - /// This function panics if the configuration is inconsistent. - pub fn panic_if_not_consistent(&self) { - if let Err(err) = self.check_consistency() { - panic!("Host configuration is inconsistent: {:?}", err); - } - } -} - -#[frame_support::pallet] -pub mod pallet { - use tp_traits::GetHostConfiguration; - - use super::*; - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - type SessionIndex: parity_scale_codec::FullCodec + TypeInfo + Copy + AtLeast32BitUnsigned; - - // `SESSION_DELAY` is used to delay any changes to Paras registration or configurations. - // Wait until the session index is 2 larger then the current index to apply any changes, - // which guarantees that at least one full session has passed before any changes are applied. - #[pallet::constant] - type SessionDelay: Get; - - type CurrentSessionIndex: GetSessionIndex; - - /// The identifier type for an authority. - type AuthorityId: Member - + Parameter - + RuntimeAppPublic - + MaybeSerializeDeserialize - + MaxEncodedLen; - - /// Weight information for extrinsics in this pallet. - type WeightInfo: WeightInfo; - } - - #[pallet::error] - pub enum Error { - /// The new value for a configuration parameter is invalid. - InvalidNewValue, - } - - /// The active configuration for the current session. - #[pallet::storage] - #[pallet::getter(fn config)] - pub(crate) type ActiveConfig = StorageValue<_, HostConfiguration, ValueQuery>; - - /// Pending configuration changes. - /// - /// This is a list of configuration changes, each with a session index at which it should - /// be applied. - /// - /// The list is sorted ascending by session index. Also, this list can only contain at most - /// 2 items: for the next session and for the `scheduled_session`. - #[pallet::storage] - #[pallet::getter(fn pending_configs)] - pub(crate) type PendingConfigs = - StorageValue<_, Vec<(T::SessionIndex, HostConfiguration)>, ValueQuery>; - - /// If this is set, then the configuration setters will bypass the consistency checks. This - /// is meant to be used only as the last resort. - #[pallet::storage] - pub(crate) type BypassConsistencyCheck = StorageValue<_, bool, ValueQuery>; - - #[pallet::genesis_config] - #[derive(frame_support::DefaultNoBound)] - pub struct GenesisConfig { - pub config: HostConfiguration, - #[serde(skip)] - pub _config: sp_std::marker::PhantomData, - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - self.config.panic_if_not_consistent(); - ActiveConfig::::put(&self.config); - } - } - - #[pallet::call] - impl Pallet { - #[pallet::call_index(0)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_max_collators(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.max_collators = new; - }) - } - - #[pallet::call_index(1)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_min_orchestrator_collators(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - if config.max_orchestrator_collators < new { - config.max_orchestrator_collators = new; - } - config.min_orchestrator_collators = new; - }) - } - - #[pallet::call_index(2)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_max_orchestrator_collators(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - if config.min_orchestrator_collators > new { - config.min_orchestrator_collators = new; - } - config.max_orchestrator_collators = new; - }) - } - - #[pallet::call_index(3)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_collators_per_container(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.collators_per_container = new; - }) - } - - #[pallet::call_index(4)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_full_rotation_period(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.full_rotation_period = new; - }) - } - - #[pallet::call_index(5)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_collators_per_parathread(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.collators_per_parathread = new; - }) - } - - #[pallet::call_index(6)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_parathreads_per_collator(origin: OriginFor, new: u32) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.parathreads_per_collator = new; - }) - } - - #[pallet::call_index(7)] - #[pallet::weight(( - T::WeightInfo::set_config_with_u32(), - DispatchClass::Operational, - ))] - pub fn set_target_container_chain_fullness( - origin: OriginFor, - new: Perbill, - ) -> DispatchResult { - ensure_root(origin)?; - Self::schedule_config_update(|config| { - config.target_container_chain_fullness = new; - }) - } - - /// Setting this to true will disable consistency checks for the configuration setters. - /// Use with caution. - #[pallet::call_index(44)] - #[pallet::weight(( - T::DbWeight::get().writes(1), - DispatchClass::Operational, - ))] - pub fn set_bypass_consistency_check(origin: OriginFor, new: bool) -> DispatchResult { - ensure_root(origin)?; - BypassConsistencyCheck::::put(new); - Ok(()) - } - } - - /// A struct that holds the configuration that was active before the session change and optionally - /// a configuration that became active after the session change. - pub struct SessionChangeOutcome { - /// Previously active configuration. - pub prev_config: HostConfiguration, - /// If new configuration was applied during the session change, this is the new configuration. - pub new_config: Option, - } - - impl Pallet { - /// Called by the initializer to note that a new session has started. - /// - /// Returns the configuration that was actual before the session change and the configuration - /// that became active after the session change. If there were no scheduled changes, both will - /// be the same. - pub fn initializer_on_new_session(session_index: &T::SessionIndex) -> SessionChangeOutcome { - let pending_configs = >::get(); - let prev_config = ActiveConfig::::get(); - - // No pending configuration changes, so we're done. - if pending_configs.is_empty() { - return SessionChangeOutcome { - prev_config, - new_config: None, - }; - } - - // We partition those configs scheduled for the present - // and those for the future - let (mut past_and_present, future) = pending_configs - .into_iter() - .partition::, _>(|&(apply_at_session, _)| { - apply_at_session <= *session_index - }); - - if past_and_present.len() > 1 { - // This should never happen since we schedule configuration changes only into the future - // sessions and this handler called for each session change. - log::error!( - target: LOG_TARGET, - "Skipping applying configuration changes scheduled sessions in the past", - ); - } - - let new_config = past_and_present.pop().map(|(_, config)| config); - if let Some(ref new_config) = new_config { - // Apply the new configuration. - ActiveConfig::::put(new_config); - } - - // We insert future as PendingConfig - >::put(future); - - SessionChangeOutcome { - prev_config, - new_config, - } - } - - /// Return the session index that should be used for any future scheduled changes. - fn scheduled_session() -> T::SessionIndex { - T::CurrentSessionIndex::session_index().saturating_add(T::SessionDelay::get()) - } - - /// Forcibly set the active config. This should be used with extreme care, and typically - /// only when enabling parachains runtime pallets for the first time on a chain which has - /// been running without them. - pub fn force_set_active_config(config: HostConfiguration) { - ActiveConfig::::set(config); - } - - /// This function should be used to update members of the configuration. - /// - /// This function is used to update the configuration in a way that is safe. It will check the - /// resulting configuration and ensure that the update is valid. If the update is invalid, it - /// will check if the previous configuration was valid. If it was invalid, we proceed with - /// updating the configuration, giving a chance to recover from such a condition. - /// - /// The actual configuration change take place after a couple of sessions have passed. In case - /// this function is called more than once in a session, then the pending configuration change - /// will be updated and the changes will be applied at once. - // NOTE: Explicitly tell rustc not to inline this because otherwise heuristics note the incoming - // closure making it's attractive to inline. However, in this case, we will end up with lots of - // duplicated code (making this function to show up in the top of heaviest functions) only for - // the sake of essentially avoiding an indirect call. Doesn't worth it. - #[inline(never)] - fn schedule_config_update(updater: impl FnOnce(&mut HostConfiguration)) -> DispatchResult { - let mut pending_configs = >::get(); - - // 1. pending_configs = [] - // No pending configuration changes. - // - // That means we should use the active config as the base configuration. We will insert - // the new pending configuration as (cur+2, new_config) into the list. - // - // 2. pending_configs = [(cur+2, X)] - // There is a configuration that is pending for the scheduled session. - // - // We will use X as the base configuration. We can update the pending configuration X - // directly. - // - // 3. pending_configs = [(cur+1, X)] - // There is a pending configuration scheduled and it will be applied in the next session. - // - // We will use X as the base configuration. We need to schedule a new configuration change - // for the `scheduled_session` and use X as the base for the new configuration. - // - // 4. pending_configs = [(cur+1, X), (cur+2, Y)] - // There is a pending configuration change in the next session and for the scheduled - // session. Due to case №3, we can be sure that Y is based on top of X. This means we - // can use Y as the base configuration and update Y directly. - // - // There cannot be (cur, X) because those are applied in the session change handler for the - // current session. - - // First, we need to decide what we should use as the base configuration. - let mut base_config = pending_configs - .last() - .map(|(_, config)| config.clone()) - .unwrap_or_else(Self::config); - let base_config_consistent = base_config.check_consistency().is_ok(); - - // Now, we need to decide what the new configuration should be. - // We also move the `base_config` to `new_config` to empahsize that the base config was - // destroyed by the `updater`. - updater(&mut base_config); - let new_config = base_config; - - if BypassConsistencyCheck::::get() { - // This will emit a warning each configuration update if the consistency check is - // bypassed. This is an attempt to make sure the bypass is not accidentally left on. - log::warn!( - target: LOG_TARGET, - "Bypassing the consistency check for the configuration change!", - ); - } else if let Err(e) = new_config.check_consistency() { - if base_config_consistent { - // Base configuration is consistent and the new configuration is inconsistent. - // This means that the value set by the `updater` is invalid and we can return - // it as an error. - log::warn!( - target: LOG_TARGET, - "Configuration change rejected due to invalid configuration: {:?}", - e, - ); - return Err(Error::::InvalidNewValue.into()); - } else { - // The configuration was already broken, so we can as well proceed with the update. - // You cannot break something that is already broken. - // - // That will allow to call several functions and ultimately return the configuration - // into consistent state. - log::warn!( - target: LOG_TARGET, - "The new configuration is broken but the old is broken as well. Proceeding", - ); - } - } - - let scheduled_session = Self::scheduled_session(); - - if let Some(&mut (_, ref mut config)) = pending_configs - .iter_mut() - .find(|&&mut (apply_at_session, _)| apply_at_session >= scheduled_session) - { - *config = new_config; - } else { - // We are scheduling a new configuration change for the scheduled session. - pending_configs.push((scheduled_session, new_config)); - } - - >::put(pending_configs); - - Ok(()) - } - } - - impl GetHostConfiguration for Pallet { - fn max_collators(session_index: T::SessionIndex) -> u32 { - let (past_and_present, _) = Pallet::::pending_configs() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let config = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::config() - }; - config.max_collators - } - - fn collators_per_container(session_index: T::SessionIndex) -> u32 { - let (past_and_present, _) = Pallet::::pending_configs() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let config = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::config() - }; - config.collators_per_container - } - - fn collators_per_parathread(session_index: T::SessionIndex) -> u32 { - let (past_and_present, _) = Pallet::::pending_configs() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let config = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::config() - }; - config.collators_per_parathread - } - - fn min_collators_for_orchestrator(session_index: T::SessionIndex) -> u32 { - let (past_and_present, _) = Pallet::::pending_configs() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let config = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::config() - }; - config.min_orchestrator_collators - } - - fn max_collators_for_orchestrator(session_index: T::SessionIndex) -> u32 { - let (past_and_present, _) = Pallet::::pending_configs() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let config = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::config() - }; - config.max_orchestrator_collators - } - } -} diff --git a/pallets/configuration/src/mock.rs b/pallets/configuration/src/mock.rs deleted file mode 100644 index 5ffa997..0000000 --- a/pallets/configuration/src/mock.rs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{self as pallet_configuration, HostConfiguration}, - frame_support::traits::{ConstU16, ConstU64}, - frame_system as system, - sp_core::{ConstU32, H256}, - sp_runtime::{ - testing::UintAuthorityId, - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Configuration: pallet_configuration, - } -); - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -pub struct CurrentSessionIndexGetter; - -impl pallet_configuration::GetSessionIndex for CurrentSessionIndexGetter { - /// Returns current session index. - fn session_index() -> u32 { - // For tests, let 1 session be 5 blocks - (System::block_number() / 5) as u32 - } -} - -impl pallet_configuration::Config for Test { - type WeightInfo = (); - type SessionDelay = ConstU32<2>; - type SessionIndex = u32; - type CurrentSessionIndex = CurrentSessionIndexGetter; - type AuthorityId = UintAuthorityId; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into() -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext_with_genesis(config: HostConfiguration) -> sp_io::TestExternalities { - RuntimeGenesisConfig { - system: Default::default(), - configuration: pallet_configuration::GenesisConfig { - config, - ..Default::default() - }, - } - .build_storage() - .unwrap() - .into() -} - -pub fn run_to_block(n: u64) { - let old_block_number = System::block_number(); - let session_len = 5; - - for x in (old_block_number + 1)..=n { - System::reset_events(); - System::set_block_number(x); - - if x % session_len == 1 { - let session_index = (x / session_len) as u32; - Configuration::initializer_on_new_session(&session_index); - } - } -} diff --git a/pallets/configuration/src/tests.rs b/pallets/configuration/src/tests.rs deleted file mode 100644 index 0e36b10..0000000 --- a/pallets/configuration/src/tests.rs +++ /dev/null @@ -1,446 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, Error, HostConfiguration, PendingConfigs}, - frame_support::{assert_noop, assert_ok, dispatch::GetDispatchInfo}, - sp_std::vec, -}; - -#[test] -fn config_sets_values_from_genesis() { - let custom_config = HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 40, - max_orchestrator_collators: 40, - collators_per_container: 20, - full_rotation_period: 24, - ..Default::default() - }; - new_test_ext_with_genesis(custom_config.clone()).execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config(), custom_config); - }); -} - -#[test] -fn config_sets_default_values() { - let default_config = HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }; - new_test_ext().execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config(), default_config); - }); -} - -#[test] -fn config_set_value() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - assert_ok!( - Configuration::set_max_collators(RuntimeOrigin::root(), 50), - () - ); - - assert_eq!( - PendingConfigs::::get(), - vec![( - 2, - HostConfiguration { - max_collators: 50, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - } - )] - ); - - // The session delay is set to 2, and one session is 5 blocks, - // so the change should not happen until block 11 - assert_eq!(Configuration::config().max_collators, 100); - run_to_block(2); - assert_eq!(Configuration::config().max_collators, 100); - // First block of session 1 - run_to_block(6); - assert_eq!(Configuration::config().max_collators, 100); - run_to_block(10); - assert_eq!(Configuration::config().max_collators, 100); - // First block of session 2 - run_to_block(11); - assert_eq!(Configuration::config().max_collators, 50); - }); -} - -#[test] -fn config_set_full_rotation_period_to_zero_works() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().full_rotation_period, 24); - assert_ok!( - Configuration::set_full_rotation_period(RuntimeOrigin::root(), 0), - () - ); - - assert_eq!( - PendingConfigs::::get(), - vec![( - 2, - HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - } - )] - ); - - // The session delay is set to 2, and one session is 5 blocks, - // so the change should not happen until block 11 - assert_eq!(Configuration::config().full_rotation_period, 24); - run_to_block(2); - assert_eq!(Configuration::config().full_rotation_period, 24); - // First block of session 1 - run_to_block(6); - assert_eq!(Configuration::config().full_rotation_period, 24); - run_to_block(10); - assert_eq!(Configuration::config().full_rotation_period, 24); - // First block of session 2 - run_to_block(11); - assert_eq!(Configuration::config().full_rotation_period, 0); - }); -} - -#[test] -fn config_set_many_values_same_block() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().collators_per_container, 2); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_ok!( - Configuration::set_max_collators(RuntimeOrigin::root(), 50), - () - ); - assert_ok!( - Configuration::set_min_orchestrator_collators(RuntimeOrigin::root(), 20), - () - ); - assert_ok!( - Configuration::set_collators_per_container(RuntimeOrigin::root(), 10), - () - ); - - assert_eq!( - PendingConfigs::::get(), - vec![( - 2, - HostConfiguration { - max_collators: 50, - min_orchestrator_collators: 20, - max_orchestrator_collators: 20, - collators_per_container: 10, - full_rotation_period: 24, - ..Default::default() - } - )] - ); - - // The session delay is set to 2, and one session is 5 blocks, - // so the change should not happen until block 11 - run_to_block(10); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().collators_per_container, 2); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - // First block of session 2 - run_to_block(11); - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().collators_per_container, 10); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - }); -} - -#[test] -fn config_set_many_values_different_blocks() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().collators_per_container, 2); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_ok!( - Configuration::set_max_collators(RuntimeOrigin::root(), 50), - () - ); - run_to_block(2); - assert_ok!( - Configuration::set_min_orchestrator_collators(RuntimeOrigin::root(), 20), - () - ); - run_to_block(3); - assert_ok!( - Configuration::set_collators_per_container(RuntimeOrigin::root(), 10), - () - ); - - assert_eq!( - PendingConfigs::::get(), - vec![( - 2, - HostConfiguration { - max_collators: 50, - min_orchestrator_collators: 20, - max_orchestrator_collators: 20, - collators_per_container: 10, - full_rotation_period: 24, - ..Default::default() - } - )] - ); - - // The session delay is set to 2, and one session is 5 blocks, - // so the change should not happen until block 11 - run_to_block(10); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - // First block of session 2 - run_to_block(11); - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - assert_eq!(Configuration::config().collators_per_container, 10); - }); -} - -#[test] -fn config_set_many_values_different_sessions() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - assert_ok!( - Configuration::set_max_collators(RuntimeOrigin::root(), 50), - () - ); - run_to_block(6); - assert_ok!( - Configuration::set_min_orchestrator_collators(RuntimeOrigin::root(), 20), - () - ); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - run_to_block(11); - assert_ok!( - Configuration::set_collators_per_container(RuntimeOrigin::root(), 10), - () - ); - - assert_eq!( - PendingConfigs::::get(), - vec![ - ( - 3, - HostConfiguration { - max_collators: 50, - min_orchestrator_collators: 20, - max_orchestrator_collators: 20, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - } - ), - ( - 4, - HostConfiguration { - max_collators: 50, - min_orchestrator_collators: 20, - max_orchestrator_collators: 20, - collators_per_container: 10, - full_rotation_period: 24, - ..Default::default() - } - ) - ] - ); - - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - run_to_block(16); - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - assert_eq!(Configuration::config().collators_per_container, 2); - run_to_block(21); - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - assert_eq!(Configuration::config().collators_per_container, 10); - }); -} - -#[test] -fn config_cannot_set_invalid_values() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_noop!( - Configuration::set_max_collators(RuntimeOrigin::root(), 0), - Error::::InvalidNewValue - ); - assert_noop!( - Configuration::set_min_orchestrator_collators(RuntimeOrigin::root(), 0), - Error::::InvalidNewValue - ); - assert_noop!( - Configuration::set_max_orchestrator_collators(RuntimeOrigin::root(), 0), - Error::::InvalidNewValue - ); - }); -} - -#[test] -fn weights_assigned_to_extrinsics_are_correct() { - new_test_ext().execute_with(|| { - assert_eq!( - crate::Call::::set_max_collators { new: 1u32 } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::set_config_with_u32() - ); - - assert_eq!( - crate::Call::::set_min_orchestrator_collators { new: 1u32 } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::set_config_with_u32() - ); - - assert_eq!( - crate::Call::::set_collators_per_container { new: 1u32 } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::set_config_with_u32() - ); - - assert_eq!( - crate::Call::::set_max_orchestrator_collators { new: 1u32 } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::set_config_with_u32() - ); - }); -} - -#[test] -fn set_max_collators_below_min_orch_collators_errors() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - - // set max_collators to 1 - assert_noop!( - Configuration::set_max_collators(RuntimeOrigin::root(), 1), - Error::::InvalidNewValue - ); - }); -} - -#[test] -fn set_max_collators_below_min_orch_collators_errors_reverse() { - new_test_ext_with_genesis(HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .execute_with(|| { - run_to_block(1); - assert_eq!(Configuration::config().max_collators, 100); - - // set max_collators to 1 - assert_noop!( - Configuration::set_min_orchestrator_collators(RuntimeOrigin::root(), 101), - Error::::InvalidNewValue - ); - }); -} diff --git a/pallets/configuration/src/weights.rs b/pallets/configuration/src/weights.rs deleted file mode 100644 index d296423..0000000 --- a/pallets/configuration/src/weights.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_configuration -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-06-06, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_configuration -// --extrinsic -// set_config_with_u32 -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_configuration. -pub trait WeightInfo { - fn set_config_with_u32() -> Weight; -} - -/// Weights for pallet_configuration using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: Configuration PendingConfigs (r:1 w:1) - /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Configuration ActiveConfig (r:1 w:0) - /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) - /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `252` - // Estimated: `6948` - // Minimum execution time: 9_507_000 picoseconds. - Weight::from_parts(9_924_000, 6948) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: Configuration PendingConfigs (r:1 w:1) - /// Proof Skipped: Configuration PendingConfigs (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Configuration ActiveConfig (r:1 w:0) - /// Proof Skipped: Configuration ActiveConfig (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Configuration BypassConsistencyCheck (r:1 w:0) - /// Proof Skipped: Configuration BypassConsistencyCheck (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `252` - // Estimated: `6948` - // Minimum execution time: 9_507_000 picoseconds. - Weight::from_parts(9_924_000, 6948) - .saturating_add(RocksDbWeight::get().reads(4_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/data-preservers/Cargo.toml b/pallets/data-preservers/Cargo.toml deleted file mode 100644 index 54c0604..0000000 --- a/pallets/data-preservers/Cargo.toml +++ /dev/null @@ -1,79 +0,0 @@ -[package] -name = "pallet-data-preservers" -authors = { workspace = true } -description = "Allows container chains to select data preservers" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] - -dp-core = { workspace = true } -log = { workspace = true } -serde = { workspace = true, optional = true } -tp-traits = { workspace = true } - -# Substrate -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } - -# Nimbus -nimbus-primitives = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -bounded-collections = { workspace = true } -num-traits = { workspace = true } -pallet-balances = { workspace = true, features = [ "std" ] } -similar-asserts = { workspace = true } -sp-io = { workspace = true, features = [ "std" ] } - -[features] -default = [ "std" ] -std = [ - "bounded-collections/std", - "dp-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "nimbus-primitives/std", - "pallet-balances/std", - "parity-scale-codec/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/data-preservers/src/benchmarks.rs b/pallets/data-preservers/src/benchmarks.rs deleted file mode 100644 index 6a07dd3..0000000 --- a/pallets/data-preservers/src/benchmarks.rs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -//! Benchmarking -use { - crate::{Call, Config, Pallet}, - frame_benchmarking::v2::*, - frame_support::{ - traits::{EnsureOriginWithArg, OriginTrait}, - BoundedVec, - }, - frame_system::RawOrigin, - sp_std::vec, - tp_traits::ParaId, -}; - -#[benchmarks] -mod benchmarks { - use super::*; - - #[benchmark] - fn set_boot_nodes(x: Linear<1, 200>, y: Linear<1, 10>) { - // x: url len, y: num boot_nodes - let boot_nodes = BoundedVec::try_from(vec![ - BoundedVec::try_from(vec![b'A'; x as usize]) - .unwrap(); - y as usize - ]) - .unwrap(); - let para_id = ParaId::from(2); - let origin = T::SetBootNodesOrigin::try_successful_origin(¶_id) - .expect("failed to create SetBootNodesOrigin"); - // Worst case is when caller is not root - let raw_origin = origin.as_system_ref(); - assert!(matches!(raw_origin, Some(RawOrigin::Signed(..)))); - - #[extrinsic_call] - Pallet::::set_boot_nodes(origin as T::RuntimeOrigin, para_id, boot_nodes.clone()); - - assert_eq!(Pallet::::boot_nodes(para_id), boot_nodes); - } - - impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test); -} diff --git a/pallets/data-preservers/src/lib.rs b/pallets/data-preservers/src/lib.rs deleted file mode 100644 index 5626c39..0000000 --- a/pallets/data-preservers/src/lib.rs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Data Preservers Pallet -//! -//! This pallet allows container chains to select data preservers. - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use pallet::*; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(any(test, feature = "runtime-benchmarks"))] -mod benchmarks; -pub mod weights; -pub use weights::WeightInfo; - -use { - dp_core::ParaId, - frame_support::{ - pallet_prelude::*, - traits::{ - fungible::{Balanced, Inspect}, - EnsureOriginWithArg, - }, - DefaultNoBound, - }, - frame_system::pallet_prelude::*, - sp_runtime::traits::Get, - sp_std::vec::Vec, -}; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::genesis_config] - #[derive(DefaultNoBound)] - pub struct GenesisConfig { - /// Para ids - pub para_id_boot_nodes: Vec<(ParaId, Vec>)>, - pub _phantom: PhantomData, - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - // Sort para ids and detect duplicates, but do it using a vector of - // references to avoid cloning the boot nodes. - let mut para_ids: Vec<&_> = self.para_id_boot_nodes.iter().collect(); - para_ids.sort_by(|a, b| a.0.cmp(&b.0)); - para_ids.dedup_by(|a, b| { - if a.0 == b.0 { - panic!("Duplicate para_id: {}", u32::from(a.0)); - } else { - false - } - }); - - for (para_id, boot_nodes) in para_ids { - let boot_nodes: Vec<_> = boot_nodes - .iter() - .map(|x| BoundedVec::try_from(x.clone()).expect("boot node url too long")) - .collect(); - let boot_nodes = BoundedVec::try_from(boot_nodes).expect("too many boot nodes"); - >::insert(para_id, boot_nodes); - } - } - } - - /// Data preservers pallet. - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(PhantomData); - - #[pallet::config] - pub trait Config: frame_system::Config { - /// Overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - type Currency: Inspect + Balanced; - // Who can call set_boot_nodes? - type SetBootNodesOrigin: EnsureOriginWithArg; - - #[pallet::constant] - type MaxBootNodes: Get; - #[pallet::constant] - type MaxBootNodeUrlLen: Get; - - type WeightInfo: WeightInfo; - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// The list of boot_nodes changed. - BootNodesChanged { para_id: ParaId }, - } - - #[pallet::error] - pub enum Error { - /// This container chain does not have any boot nodes - NoBootNodes, - } - - #[pallet::storage] - #[pallet::getter(fn boot_nodes)] - pub type BootNodes = StorageMap< - _, - Blake2_128Concat, - ParaId, - BoundedVec, T::MaxBootNodes>, - ValueQuery, - >; - - #[pallet::call] - impl Pallet { - /// Set boot_nodes for this para id - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::set_boot_nodes( - T::MaxBootNodeUrlLen::get(), - boot_nodes.len() as u32, - ))] - pub fn set_boot_nodes( - origin: OriginFor, - para_id: ParaId, - boot_nodes: BoundedVec, T::MaxBootNodes>, - ) -> DispatchResult { - T::SetBootNodesOrigin::ensure_origin(origin, ¶_id)?; - - BootNodes::::insert(para_id, boot_nodes); - - Self::deposit_event(Event::BootNodesChanged { para_id }); - - Ok(()) - } - } - - impl Pallet { - /// Function that will be called when a container chain is deregistered. Cleans up all the storage related to this para_id. - /// Cannot fail. - pub fn para_deregistered(para_id: ParaId) { - BootNodes::::remove(para_id); - } - - pub fn check_valid_for_collating(para_id: ParaId) -> DispatchResult { - // To be able to call mark_valid_for_collating, a container chain must have bootnodes - if Pallet::::boot_nodes(para_id).len() > 0 { - Ok(()) - } else { - Err(Error::::NoBootNodes.into()) - } - } - } -} diff --git a/pallets/data-preservers/src/mock.rs b/pallets/data-preservers/src/mock.rs deleted file mode 100644 index d4f99cf..0000000 --- a/pallets/data-preservers/src/mock.rs +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{self as pallet_data_preservers}, - dp_core::ParaId, - frame_support::{ - pallet_prelude::*, - parameter_types, - traits::{ConstU64, EitherOfDiverse, EnsureOriginWithArg, Everything}, - }, - frame_system::{EnsureRoot, EnsureSigned, RawOrigin}, - sp_core::H256, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, Either, - }, - sp_std::collections::btree_map::BTreeMap, -}; - -type Block = frame_system::mocking::MockBlock; -pub type AccountId = u64; -pub type Balance = u128; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Balances: pallet_balances, - DataPreservers: pallet_data_preservers, - MockData: mock_data, - } -); - -impl frame_system::Config for Test { - type BaseCallFilter = Everything; - type Block = Block; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const ExistentialDeposit: u128 = 1; -} - -impl pallet_balances::Config for Test { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type RuntimeFreezeReason = (); - type MaxHolds = ConstU32<5>; - type WeightInfo = (); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use super::*; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -impl mock_data::Config for Test {} - -#[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - /// List of container chains, with the corresponding "manager" account. - /// In dancebox, the manager is the one who put the deposit in pallet_registrar. - /// The manager can be None if the chain was registered by root, or in genesis. - pub container_chain_managers: BTreeMap>, -} - -impl Default for Mocks { - fn default() -> Self { - Self { - container_chain_managers: BTreeMap::from_iter([(ParaId::from(1001), None)]), - } - } -} - -pub struct MockContainerChainManagerOrRootOrigin { - // Configurable root origin - container_chain_manager_origin: PhantomData, - _phantom: PhantomData, -} - -impl EnsureOriginWithArg - for MockContainerChainManagerOrRootOrigin -where - T: crate::Config, - RootOrigin: EnsureOriginWithArg, - O: From>, - Result, O>: From, - u64: From, - T::AccountId: From, - O: Clone, -{ - type Success = Either>::Success>; - - fn try_origin(o: O, para_id: &ParaId) -> Result { - let origin = EitherOfDiverse::, RootOrigin>::try_origin( - o.clone(), - para_id, - )?; - - if let Either::Left(signed_account) = &origin { - // This check will only pass if both are true: - // * The para_id has a deposit in pallet_registrar - // * The deposit creator is the signed_account - MockData::get() - .container_chain_managers - .get(para_id) - .and_then(|inner| *inner) - .and_then(|manager| { - if manager != u64::from(signed_account.clone()) { - None - } else { - Some(()) - } - }) - .ok_or(o)?; - } - - Ok(origin) - } - - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin(para_id: &ParaId) -> Result { - // Return container chain manager, or register container chain as ALICE if it does not exist - MockData::mutate(|m| { - m.container_chain_managers - .entry(*para_id) - .or_insert_with(move || { - const ALICE: u64 = 1; - - Some(ALICE) - }); - }); - - // This panics if the container chain was registered by root (None) - let o = MockData::get() - .container_chain_managers - .get(para_id) - .unwrap() - .unwrap(); - - Ok(O::from(RawOrigin::Signed(o.into()))) - } -} - -impl pallet_data_preservers::Config for Test { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type SetBootNodesOrigin = MockContainerChainManagerOrRootOrigin>; - type MaxBootNodes = ConstU32<10>; - type MaxBootNodeUrlLen = ConstU32<200>; - type WeightInfo = (); -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - - let balances = vec![(0, 10_000)]; - - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - - t.into() -} diff --git a/pallets/data-preservers/src/tests.rs b/pallets/data-preservers/src/tests.rs deleted file mode 100644 index bc738b2..0000000 --- a/pallets/data-preservers/src/tests.rs +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, *}, - frame_support::{assert_noop, assert_ok, pallet_prelude::*}, -}; - -const ALICE: u64 = 1; -const BOB: u64 = 2; - -#[test] -fn set_boot_nodes_bad_origin() { - new_test_ext().execute_with(|| { - // Para 1001 has no manager, Alice cannot set boot nodes - assert_noop!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(ALICE), - 1001.into(), - vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9".to_vec().try_into().unwrap() - ].try_into().unwrap() - ), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn set_boot_nodes_by_root_no_manager() { - new_test_ext().execute_with(|| { - // Para 1001 has no manager, root can set boot nodes - let boot_nodes: BoundedVec, _> = vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec() - .try_into() - .unwrap(), - ] - .try_into() - .unwrap(); - assert_ok!(DataPreservers::set_boot_nodes( - RuntimeOrigin::root(), - 1001.into(), - boot_nodes.clone(), - )); - assert_eq!(DataPreservers::boot_nodes(ParaId::from(1001)), boot_nodes); - }); -} - -#[test] -fn set_boot_nodes_by_root_with_manager() { - new_test_ext().execute_with(|| { - // Set ALICE as manager of para 1002 - MockData::mutate(|m| { - m.container_chain_managers.insert(1002.into(), Some(ALICE)); - }); - // Root can set bootnodes - let boot_nodes: BoundedVec, _> = vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec() - .try_into() - .unwrap(), - ] - .try_into() - .unwrap(); - assert_ok!(DataPreservers::set_boot_nodes( - RuntimeOrigin::root(), - 1002.into(), - boot_nodes.clone() - )); - assert_eq!(DataPreservers::boot_nodes(ParaId::from(1002)), boot_nodes); - }); -} - -#[test] -fn set_boot_nodes_by_para_id_registrar() { - new_test_ext().execute_with(|| { - // Set ALICE as manager of para 1002 - MockData::mutate(|m| { - m.container_chain_managers.insert(1002.into(), Some(ALICE)); - }); - // Alice can set bootnodes - let boot_nodes: BoundedVec, _> = vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec() - .try_into() - .unwrap(), - ] - .try_into() - .unwrap(); - assert_ok!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(ALICE), - 1002.into(), - boot_nodes.clone(), - )); - assert_eq!(DataPreservers::boot_nodes(ParaId::from(1002)), boot_nodes); - }); -} - -#[test] -fn set_boot_nodes_by_invalid_user_no_manager() { - new_test_ext().execute_with(|| { - // Para 1001 has no manager - MockData::mutate(|m| { - m.container_chain_managers.insert(1002.into(), Some(ALICE)); - }); - // Bob cannot set the bootnodes - assert_noop!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(BOB), - 1001.into(), - vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9".to_vec().try_into().unwrap() - ].try_into().unwrap() - ), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn set_boot_nodes_by_invalid_user() { - new_test_ext().execute_with(|| { - // Set ALICE as manager of para 1002 - MockData::mutate(|m| { - m.container_chain_managers.insert(1002.into(), Some(ALICE)); - }); - // Bob cannot set the bootnodes - assert_noop!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(BOB), - 1002.into(), - vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9".to_vec().try_into().unwrap() - ].try_into().unwrap() - ), - DispatchError::BadOrigin - ); - - assert_noop!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(BOB), - 1003.into(), - vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9".to_vec().try_into().unwrap() - ].try_into().unwrap() - ), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn set_boot_nodes_by_invalid_user_bad_para_id() { - new_test_ext().execute_with(|| { - // Para 1003 does not exist, only root can set bootnodes - assert_noop!(DataPreservers::set_boot_nodes( - RuntimeOrigin::signed(BOB), - 1003.into(), - vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9".to_vec().try_into().unwrap() - ].try_into().unwrap() - ), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn set_boot_nodes_bad_para_id() { - // Para 1003 does not exist, only root can set bootnodes - // This is allowed in case we want to set bootnodes before registering the chain - new_test_ext().execute_with(|| { - let boot_nodes: BoundedVec, _> = vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec() - .try_into() - .unwrap(), - ] - .try_into() - .unwrap(); - assert_ok!(DataPreservers::set_boot_nodes( - RuntimeOrigin::root(), - 1003.into(), - boot_nodes.clone(), - )); - assert_eq!(DataPreservers::boot_nodes(ParaId::from(1003)), boot_nodes); - }); -} diff --git a/pallets/data-preservers/src/weights.rs b/pallets/data-preservers/src/weights.rs deleted file mode 100644 index b93d57d..0000000 --- a/pallets/data-preservers/src/weights.rs +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_data_preservers -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-12-11, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_data_preservers -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_data_preservers. -pub trait WeightInfo { - fn set_boot_nodes(x: u32, y: u32, ) -> Weight; -} - -/// Weights for pallet_data_preservers using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 10_703_000 picoseconds. - Weight::from_parts(9_788_229, 3660) - // Standard Error: 170 - .saturating_add(Weight::from_parts(7_964, 0).saturating_mul(x.into())) - // Standard Error: 3_552 - .saturating_add(Weight::from_parts(334_296, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 10_703_000 picoseconds. - Weight::from_parts(9_788_229, 3660) - // Standard Error: 170 - .saturating_add(Weight::from_parts(7_964, 0).saturating_mul(x.into())) - // Standard Error: 3_552 - .saturating_add(Weight::from_parts(334_296, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/inflation-rewards/Cargo.toml b/pallets/inflation-rewards/Cargo.toml deleted file mode 100644 index 4878b74..0000000 --- a/pallets/inflation-rewards/Cargo.toml +++ /dev/null @@ -1,79 +0,0 @@ -[package] -name = "pallet-inflation-rewards" -authors = { workspace = true } -description = "A pallet to handle token inflation and rewards" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] - -dp-core = { workspace = true } -log = { workspace = true } -serde = { workspace = true, optional = true } -tp-traits = { workspace = true } - -# Substrate -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } - -# Nimbus -nimbus-primitives = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -bounded-collections = { workspace = true } -num-traits = { workspace = true } -pallet-balances = { workspace = true, features = [ "std" ] } -similar-asserts = { workspace = true } -sp-io = { workspace = true, features = [ "std" ] } - -[features] -default = [ "std" ] -std = [ - "bounded-collections/std", - "dp-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "nimbus-primitives/std", - "pallet-balances/std", - "parity-scale-codec/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/inflation-rewards/src/lib.rs b/pallets/inflation-rewards/src/lib.rs deleted file mode 100644 index 3d5e48b..0000000 --- a/pallets/inflation-rewards/src/lib.rs +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Inflation Rewards Pallet -//! -//! This pallet handle native token inflation and rewards distribution. - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use pallet::*; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -use { - dp_core::{BlockNumber, ParaId}, - frame_support::{ - pallet_prelude::*, - traits::{ - fungible::{Balanced, Credit, Inspect}, - tokens::{Fortitude, Precision, Preservation}, - Imbalance, OnUnbalanced, - }, - }, - frame_system::pallet_prelude::*, - sp_runtime::{ - traits::{Get, Saturating}, - Perbill, - }, - tp_traits::{AuthorNotingHook, DistributeRewards, GetCurrentContainerChains}, -}; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - pub type BalanceOf = - <::Currency as Inspect<::AccountId>>::Balance; - pub type CreditOf = Credit<::AccountId, ::Currency>; - - /// Inflation rewards pallet. - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(PhantomData); - - #[pallet::hooks] - impl Hooks> for Pallet { - fn on_initialize(_: BlockNumberFor) -> Weight { - let mut weight = T::DbWeight::get().reads(1); - - // Collect indistributed rewards, if any - // Any parachain we have not rewarded is handled by onUnbalanced - let not_distributed_rewards = - if let Some(chains_to_reward) = ChainsToReward::::take() { - // Collect and sum all undistributed rewards - let rewards_not_distributed: BalanceOf = chains_to_reward - .rewards_per_chain - .saturating_mul((chains_to_reward.para_ids.len() as u32).into()); - T::Currency::withdraw( - &T::PendingRewardsAccount::get(), - rewards_not_distributed, - Precision::BestEffort, - Preservation::Expendable, - Fortitude::Force, - ) - .unwrap_or(CreditOf::::zero()) - } else { - CreditOf::::zero() - }; - - // Get the number of chains at this block (tanssi + container chain blocks) - weight += T::DbWeight::get().reads_writes(1, 1); - let registered_para_ids = T::ContainerChains::current_container_chains(); - let number_of_chains: BalanceOf = - ((registered_para_ids.len() as u32).saturating_add(1)).into(); - - // Issue new supply - let new_supply = - T::Currency::issue(T::InflationRate::get() * T::Currency::total_issuance()); - - // Split staking reward portion - let total_rewards = T::RewardsPortion::get() * new_supply.peek(); - let (rewards_credit, reminder_credit) = new_supply.split(total_rewards); - - let rewards_per_chain: BalanceOf = rewards_credit.peek() / number_of_chains; - let (mut total_reminder, staking_rewards) = rewards_credit.split_merge( - total_rewards % number_of_chains, - (reminder_credit, CreditOf::::zero()), - ); - - // Deposit the new supply dedicated to rewards in the pending rewards account - if let Err(undistributed_rewards) = - T::Currency::resolve(&T::PendingRewardsAccount::get(), staking_rewards) - { - total_reminder = total_reminder.merge(undistributed_rewards); - } - - // Keep track of chains to reward - ChainsToReward::::put(ChainsToRewardValue { - para_ids: registered_para_ids, - rewards_per_chain, - }); - - // Let the runtime handle the non-staking part - T::OnUnbalanced::on_unbalanced(not_distributed_rewards.merge(total_reminder)); - - weight += Self::reward_orchestrator_author(); - - weight - } - } - - #[pallet::config] - pub trait Config: frame_system::Config { - /// Overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - type Currency: Inspect + Balanced; - - type ContainerChains: GetCurrentContainerChains; - - /// Get block author for self chain - type GetSelfChainBlockAuthor: Get; - - /// Inflation rate per orchestrator block (proportion of the total issuance) - #[pallet::constant] - type InflationRate: Get; - - /// What to do with the new supply not dedicated to staking - type OnUnbalanced: OnUnbalanced>; - - /// The account that will store rewards waiting to be paid out - #[pallet::constant] - type PendingRewardsAccount: Get; - - /// Staking rewards distribution implementation - type StakingRewardsDistributor: DistributeRewards>; - - /// Proportion of the new supply dedicated to staking - #[pallet::constant] - type RewardsPortion: Get; - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Rewarding orchestrator author - RewardedOrchestrator { - account_id: T::AccountId, - balance: BalanceOf, - }, - /// Rewarding container author - RewardedContainer { - account_id: T::AccountId, - para_id: ParaId, - balance: BalanceOf, - }, - } - - /// Container chains to reward per block - #[pallet::storage] - #[pallet::getter(fn container_chains_to_reward)] - pub(super) type ChainsToReward = - StorageValue<_, ChainsToRewardValue, OptionQuery>; - #[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo)] - #[scale_info(skip_type_params(T))] - pub struct ChainsToRewardValue { - pub para_ids: BoundedVec< - ParaId, - ::MaxContainerChains, - >, - pub rewards_per_chain: BalanceOf, - } - - impl Pallet { - fn reward_orchestrator_author() -> Weight { - let mut total_weight = T::DbWeight::get().reads(1); - let orchestrator_author = T::GetSelfChainBlockAuthor::get(); - - if let Some(chains_to_reward) = ChainsToReward::::get() { - total_weight += T::DbWeight::get().reads(1); - match T::StakingRewardsDistributor::distribute_rewards( - orchestrator_author.clone(), - T::Currency::withdraw( - &T::PendingRewardsAccount::get(), - chains_to_reward.rewards_per_chain, - Precision::BestEffort, - Preservation::Expendable, - Fortitude::Force, - ) - .unwrap_or(CreditOf::::zero()), - ) { - Ok(frame_support::dispatch::PostDispatchInfo { actual_weight, .. }) => { - Self::deposit_event(Event::RewardedOrchestrator { - account_id: orchestrator_author, - balance: chains_to_reward.rewards_per_chain, - }); - - if let Some(weight) = actual_weight { - total_weight += weight - } - } - Err(e) => { - log::debug!("Fail to distribute rewards: {:?}", e) - } - } - } else { - panic!("ChainsToReward not filled"); - } - - total_weight - } - } -} - -// This function should only be used to **reward** a container author. -// There will be no additional check other than checking if we have already -// rewarded this author for **in this tanssi block** -// Any additional check should be done in the calling function -// TODO: consider passing a vector here -impl AuthorNotingHook for Pallet { - fn on_container_author_noted( - author: &T::AccountId, - _block_number: BlockNumber, - para_id: ParaId, - ) -> Weight { - let mut total_weight = T::DbWeight::get().reads_writes(1, 0); - // We take chains to reward, to see what containers are left to reward - if let Some(mut container_chains_to_reward) = ChainsToReward::::get() { - // If we find the index is because we still have not rewarded it - if let Ok(index) = container_chains_to_reward.para_ids.binary_search(¶_id) { - // we distribute rewards to the author - match T::StakingRewardsDistributor::distribute_rewards( - author.clone(), - T::Currency::withdraw( - &T::PendingRewardsAccount::get(), - container_chains_to_reward.rewards_per_chain, - Precision::BestEffort, - Preservation::Expendable, - Fortitude::Force, - ) - .unwrap_or(CreditOf::::zero()), - ) { - Ok(frame_support::dispatch::PostDispatchInfo { actual_weight, .. }) => { - Self::deposit_event(Event::RewardedContainer { - account_id: author.clone(), - balance: container_chains_to_reward.rewards_per_chain, - para_id, - }); - if let Some(weight) = actual_weight { - total_weight += weight - } - } - Err(e) => { - log::debug!("Fail to distribute rewards: {:?}", e) - } - } - // we remove the para id from container-chains to reward - // this makes sure we dont reward it twice in the same block - container_chains_to_reward.para_ids.remove(index); - - total_weight += T::DbWeight::get().writes(1); - // Keep track of chains to reward - ChainsToReward::::put(container_chains_to_reward); - } - } - total_weight - } -} diff --git a/pallets/inflation-rewards/src/mock.rs b/pallets/inflation-rewards/src/mock.rs deleted file mode 100644 index 2cf1d34..0000000 --- a/pallets/inflation-rewards/src/mock.rs +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{self as pallet_inflation_rewards}, - bounded_collections::bounded_vec, - dp_core::ParaId, - frame_support::{ - pallet_prelude::*, - parameter_types, - traits::{ - fungible::{Balanced, Credit}, - ConstU64, Everything, - }, - }, - sp_core::H256, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, Perbill, - }, -}; - -type Block = frame_system::mocking::MockBlock; -pub type AccountId = u64; -pub type Balance = u128; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Balances: pallet_balances, - InflationRewards: pallet_inflation_rewards, - MockData: mock_data, - } -); - -impl frame_system::Config for Test { - type BaseCallFilter = Everything; - type Block = Block; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const ExistentialDeposit: u128 = 1; -} - -impl pallet_balances::Config for Test { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type RuntimeFreezeReason = (); - type MaxHolds = ConstU32<5>; - type WeightInfo = (); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use super::*; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -impl mock_data::Config for Test {} - -#[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - pub container_chains: BoundedVec>, - pub orchestrator_author: AccountId, -} - -impl Default for Mocks { - fn default() -> Self { - Self { - container_chains: bounded_vec![1001.into()], - orchestrator_author: 1, - } - } -} - -pub struct MockContainerChainGetter; - -impl tp_traits::GetCurrentContainerChains for MockContainerChainGetter { - type MaxContainerChains = ConstU32<5>; - - fn current_container_chains() -> BoundedVec { - MockData::mock().container_chains - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_current_container_chains(container_chains: &[ParaId]) { - MockData::mutate(|m| { - m.container_chains = container_chains.to_vec().try_into().unwrap(); - }); - } -} - -pub struct MockGetSelfChainBlockAuthor; - -impl Get for MockGetSelfChainBlockAuthor { - fn get() -> AccountId { - MockData::mock().orchestrator_author - } -} - -pub struct OnUnbalancedInflation; -impl frame_support::traits::OnUnbalanced> for OnUnbalancedInflation { - fn on_nonzero_unbalanced(credit: Credit) { - let _ = >::resolve(&OnUnbalancedInflationAccount::get(), credit); - } -} - -pub struct MockRewardsDistributor; -impl tp_traits::DistributeRewards> - for MockRewardsDistributor -{ - fn distribute_rewards( - rewarded: AccountId, - amount: Credit, - ) -> DispatchResultWithPostInfo { - <::Currency as Balanced>::resolve( - &rewarded, amount, - ) - .map_err(|_| DispatchError::NoProviders)?; - Ok(().into()) - } -} - -parameter_types! { - pub OnUnbalancedInflationAccount: AccountId = 0; - pub PendingRewardsAccount: AccountId = 99; - pub const RewardsPortion: Perbill = Perbill::from_percent(70); - pub const InflationRate: Perbill = Perbill::from_percent(1); -} - -impl pallet_inflation_rewards::Config for Test { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type ContainerChains = MockContainerChainGetter; - type GetSelfChainBlockAuthor = MockGetSelfChainBlockAuthor; - type InflationRate = InflationRate; - type OnUnbalanced = OnUnbalancedInflation; - type PendingRewardsAccount = PendingRewardsAccount; - type StakingRewardsDistributor = MockRewardsDistributor; - type RewardsPortion = RewardsPortion; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - - let balances = vec![(0, 10_000)]; - - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - - t.into() -} diff --git a/pallets/inflation-rewards/src/tests.rs b/pallets/inflation-rewards/src/tests.rs deleted file mode 100644 index f23f0de..0000000 --- a/pallets/inflation-rewards/src/tests.rs +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, Config, *}, - frame_support::{pallet_prelude::*, traits::fungible::Inspect}, - sp_runtime::Permill, -}; - -fn get_balance(who: &AccountId) -> Balance { - <::Currency as Inspect>::balance(who) -} - -fn get_total_issuance() -> Balance { - <::Currency as Inspect>::total_issuance() -} - -#[test] -fn test_increase_supply() { - new_test_ext().execute_with(|| { - let total_supply_0 = get_total_issuance(); - - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - assert_eq!( - total_supply_1, - total_supply_0 + (::InflationRate::get() * total_supply_0), - ); - - as Hooks>::on_initialize(2); - let total_supply_2 = get_total_issuance(); - assert_eq!( - total_supply_2, - total_supply_1 + (::InflationRate::get() * total_supply_1), - ); - }); -} - -#[test] -fn test_undistributed_rewards() { - new_test_ext().execute_with(|| { - let total_supply_0 = get_total_issuance(); - let initial_balance = get_balance(&OnUnbalancedInflationAccount::get()); - - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - - let new_supply = total_supply_1 - total_supply_0; - - // The OnUnbalancedInflationAccount should receive 30% of the new supply - assert_eq!( - get_balance(&OnUnbalancedInflationAccount::get()), - initial_balance + (Permill::from_percent(30) * new_supply), - ); - }); -} - -#[test] -fn test_reward_orchestrator_author() { - new_test_ext().execute_with(|| { - let author = ::GetSelfChainBlockAuthor::get(); - let author_balance = get_balance(&author); - - let total_supply_0 = get_total_issuance(); - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - - let new_supply = total_supply_1 - total_supply_0; - - assert_eq!( - get_balance(&author), - // 70% rewards for 2 chains, so 35% per chain - author_balance + (Permill::from_percent(35) * new_supply), - ); - }); -} - -#[test] -fn test_reward_orchestrator_author_less_if_more_chains() { - new_test_ext().execute_with(|| { - // Add 2 container chains - MockData::mutate(|data| { - data.container_chains.try_push(1002.into()).unwrap(); - data.container_chains.try_push(1003.into()).unwrap(); - }); - - let author = ::GetSelfChainBlockAuthor::get(); - let author_balance = get_balance(&author); - - let total_supply_0 = get_total_issuance(); - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - - let new_supply = total_supply_1 - total_supply_0; - - assert_eq!( - get_balance(&author), - // 70% rewards for 3 chains, so 17.5% per chain - author_balance + (Permill::from_perthousand(175) * new_supply), - ); - }); -} - -#[test] -fn test_reward_container_chain_author() { - new_test_ext().execute_with(|| { - let container_author = 2; - let container_author_2 = 3; - let container_author_balance = get_balance(&container_author); - let container_author_balance_2 = get_balance(&container_author_2); - - let total_supply_0 = get_total_issuance(); - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - - let new_supply_1 = total_supply_1 - total_supply_0; - - // Note container author - let registered_para_ids = ::ContainerChains::current_container_chains(); - as AuthorNotingHook>::on_container_author_noted( - &container_author, - 1, - registered_para_ids[0], - ); - - // Author should be rewarded immediately - assert_eq!( - get_balance(&container_author), - // 70% rewards for 2 chains, so 35% per chain - container_author_balance + (Permill::from_percent(35) * new_supply_1), - ); - - as Hooks>::on_initialize(2); - let total_supply_2 = get_total_issuance(); - let new_supply_2 = total_supply_2 - total_supply_1; - - // Note next container author - as AuthorNotingHook>::on_container_author_noted( - &container_author_2, - 2, - registered_para_ids[0], - ); - - // Author should be rewarded immediately - assert_eq!( - get_balance(&container_author_2), - // 70% rewards for 2 chains, so 35% per chain - container_author_balance_2 + (Permill::from_percent(35) * new_supply_2), - ); - }); -} - -#[test] -fn test_cannot_reward_twice_in_same_tanssi_block() { - new_test_ext().execute_with(|| { - let container_author = 2; - let container_author_balance = get_balance(&container_author); - - let total_supply_0 = get_total_issuance(); - as Hooks>::on_initialize(1); - let total_supply_1 = get_total_issuance(); - - let new_supply_1 = total_supply_1 - total_supply_0; - - // Note container author - let registered_para_ids = ::ContainerChains::current_container_chains(); - as AuthorNotingHook>::on_container_author_noted( - &container_author, - 1, - registered_para_ids[0], - ); - - // Regardless if we inject a new block, we cannot reward twice the same paraId - as AuthorNotingHook>::on_container_author_noted( - &container_author, - 2, - registered_para_ids[0], - ); - - // Author should be rewarded only once - assert_eq!( - get_balance(&container_author), - // 70% rewards for 2 chains, so 35% per chain - container_author_balance + (Permill::from_percent(35) * new_supply_1), - ); - }); -} - -#[test] -fn test_non_claimed_rewards_go_to_on_unbalanced() { - new_test_ext().execute_with(|| { - let container_author = 2; - let container_author_balance = get_balance(&container_author); - - as Hooks>::on_initialize(1); - let on_unbalanced_account = get_balance(&OnUnbalancedInflationAccount::get()); - - let total_supply_1 = get_total_issuance(); - - // We initilize the next block without claiming rewards for the container - // author should have not been rewarded and the onUNbalanced hook should kick in - // we use block 2 because it has reminder - as Hooks>::on_initialize(2); - - let total_supply_2 = get_total_issuance(); - - let new_supply_2 = total_supply_2 - total_supply_1; - - // OnUnbalancedInflationAccount::get() should be rewarded with the non-claimed - // rewards - // The onUnbalanedInflationAccount should have: - // the non-reward portion ((Permill::from_percent(30) * new_supply_1)) - // the reminder ((Permill::from_percent(70) * suppl7 % number of container chains)) - // the non-claimed rewards - let staking_rewards = Permill::from_percent(70) * new_supply_2; - let non_staking_rewards = new_supply_2 - staking_rewards; - // (orchestrator plus container); - let reminder = staking_rewards % 2; - - assert_eq!( - get_balance(&OnUnbalancedInflationAccount::get()), - // 70% rewards for 2 chains, so 35% per chain - on_unbalanced_account - + non_staking_rewards - + reminder - + (Permill::from_percent(35) * new_supply_2), - ); - - // and the author is not rewarded - assert_eq!( - get_balance(&container_author), - // 70% rewards for 2 chains, so 35% per chain - container_author_balance, - ); - }); -} diff --git a/pallets/initializer/Cargo.toml b/pallets/initializer/Cargo.toml deleted file mode 100644 index c2bf206..0000000 --- a/pallets/initializer/Cargo.toml +++ /dev/null @@ -1,46 +0,0 @@ -[package] -name = "pallet-initializer" -authors = { workspace = true } -description = "Initializer pallet that allows to orchestrate what happens on session changes" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-support = { workspace = true } -frame-system = { workspace = true } -pallet-session = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -sp-core = { workspace = true } -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-support/std", - "frame-system/std", - "pallet-session/std", - "parity-scale-codec/std", - "scale-info/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-session/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/initializer/src/lib.rs b/pallets/initializer/src/lib.rs deleted file mode 100644 index 60f622f..0000000 --- a/pallets/initializer/src/lib.rs +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Initializer Pallet -//! -//! This pallet is in charge of organizing what happens on session changes. -//! In particular this pallet has implemented the OneSessionHandler trait -//! which will be called upon a session change. There it will call the -//! SessionHandler config trait - -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -pub use pallet::*; -use { - frame_support::{pallet_prelude::*, traits::OneSessionHandler}, - scale_info::TypeInfo, - sp_runtime::{traits::AtLeast32BitUnsigned, RuntimeAppPublic}, - sp_std::prelude::*, -}; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - // The apply_new_session trait. We need to comply with this - pub trait ApplyNewSession { - fn apply_new_session( - changed: bool, - session_index: T::SessionIndex, - all_validators: Vec<(T::AccountId, T::AuthorityId)>, - queued: Vec<(T::AccountId, T::AuthorityId)>, - ); - } - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::config] - pub trait Config: frame_system::Config { - type SessionIndex: parity_scale_codec::FullCodec + TypeInfo + Copy + AtLeast32BitUnsigned; - - /// The identifier type for an authority. - type AuthorityId: Member - + Parameter - + RuntimeAppPublic - + MaybeSerializeDeserialize - + MaxEncodedLen; - - type SessionHandler: ApplyNewSession; - } -} - -impl Pallet { - /// Should be called when a new session occurs. If `queued` is `None`, - /// the `validators` are considered queued. - fn on_new_session<'a, I>( - changed: bool, - session_index: T::SessionIndex, - validators: I, - queued: Option, - ) where - I: Iterator + 'a, - { - let validators: Vec<_> = validators.map(|(k, v)| (k.clone(), v)).collect(); - let queued: Vec<_> = if let Some(queued) = queued { - queued.map(|(k, v)| (k.clone(), v)).collect() - } else { - validators.clone() - }; - - T::SessionHandler::apply_new_session(changed, session_index, validators, queued); - } - - /// Should be called when a new session occurs. Buffers the session notification to be applied - /// at the end of the block. If `queued` is `None`, the `validators` are considered queued. - fn on_genesis_session<'a, I>(validators: I) - where - I: Iterator + 'a, - { - >::on_new_session(false, 0u32.into(), validators, None); - } - - // Allow to trigger `on_new_session` in tests, this is needed as long as `pallet_session` is not - // implemented in mock. - #[cfg(any(test, feature = "runtime-benchmarks"))] - pub(crate) fn test_trigger_on_new_session<'a, I>( - changed: bool, - session_index: T::SessionIndex, - validators: I, - queued: Option, - ) where - I: Iterator + 'a, - { - Self::on_new_session(changed, session_index, validators, queued) - } -} - -impl sp_runtime::BoundToRuntimeAppPublic for Pallet { - type Public = T::AuthorityId; -} - -impl OneSessionHandler for Pallet { - type Key = T::AuthorityId; - - fn on_genesis_session<'a, I>(validators: I) - where - I: Iterator + 'a, - { - >::on_genesis_session(validators); - } - - fn on_new_session<'a, I>(changed: bool, validators: I, queued: I) - where - I: Iterator + 'a, - { - let session_index = >::current_index(); - >::on_new_session(changed, session_index.into(), validators, Some(queued)); - } - - fn on_disabled(_i: u32) {} -} diff --git a/pallets/initializer/src/mock.rs b/pallets/initializer/src/mock.rs deleted file mode 100644 index 3e97c9a..0000000 --- a/pallets/initializer/src/mock.rs +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate as pallet_initializer, - frame_support::traits::{ConstU16, ConstU64}, - frame_system as system, - sp_core::H256, - sp_runtime::{ - testing::UintAuthorityId, - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, - sp_std::cell::RefCell, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Initializer: pallet_initializer, - } -); - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = (); - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -thread_local! { - pub static SESSION_CHANGE_VALIDATORS: RefCell)>> = const { RefCell::new(None) }; -} - -pub fn session_change_validators() -> Option<(u32, Vec)> { - SESSION_CHANGE_VALIDATORS.with(|q| (*q.borrow()).clone()) -} - -pub struct OwnApplySession; -impl pallet_initializer::ApplyNewSession for OwnApplySession { - fn apply_new_session( - _changed: bool, - session_index: u32, - all_validators: Vec<(u64, UintAuthorityId)>, - _queued: Vec<(u64, UintAuthorityId)>, - ) { - let validators: Vec<_> = all_validators.iter().map(|(k, _)| *k).collect(); - SESSION_CHANGE_VALIDATORS.with(|r| *r.borrow_mut() = Some((session_index, validators))); - } -} - -impl pallet_initializer::Config for Test { - type SessionIndex = u32; - - /// The identifier type for an authority. - type AuthorityId = UintAuthorityId; - - type SessionHandler = OwnApplySession; -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - // Start with None in the global var - SESSION_CHANGE_VALIDATORS.with(|r| *r.borrow_mut() = None); - - system::GenesisConfig::::default() - .build_storage() - .unwrap() - .into() -} diff --git a/pallets/initializer/src/tests.rs b/pallets/initializer/src/tests.rs deleted file mode 100644 index 9cde050..0000000 --- a/pallets/initializer/src/tests.rs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::*, - crate::mock::{new_test_ext, session_change_validators, Initializer}, -}; - -#[test] -fn session_0_is_instantly_applied() { - new_test_ext().execute_with(|| { - Initializer::test_trigger_on_new_session( - false, - 0, - Vec::new().into_iter(), - Some(Vec::new().into_iter()), - ); - - assert_eq!(session_change_validators(), Some((0, Vec::new()))); - }); -} - -#[test] -fn session_change_applied() { - new_test_ext().execute_with(|| { - Initializer::test_trigger_on_new_session( - false, - 1, - Vec::new().into_iter(), - Some(Vec::new().into_iter()), - ); - - // Session change validators are applied - assert_eq!(session_change_validators(), Some((1, Vec::new()))); - }); -} diff --git a/pallets/invulnerables/Cargo.toml b/pallets/invulnerables/Cargo.toml deleted file mode 100644 index c36ae6e..0000000 --- a/pallets/invulnerables/Cargo.toml +++ /dev/null @@ -1,73 +0,0 @@ -[package] -name = "pallet-invulnerables" -authors = { workspace = true } -description = "Simple pallet to store invulnarable collators." -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -log = { workspace = true } -parity-scale-codec = { workspace = true } -rand = { workspace = true, optional = true } -scale-info = { workspace = true, features = [ "derive" ] } - -frame-support = { workspace = true } -frame-system = { workspace = true } -sp-runtime = { workspace = true } -sp-staking = { workspace = true } -sp-std = { workspace = true } -tp-traits = { workspace = true } - -frame-benchmarking = { workspace = true } - -pallet-balances = { workspace = true, optional = true } -pallet-session = { workspace = true } - -[dev-dependencies] -sp-core = { workspace = true } -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "pallet-balances/std", - "pallet-session/std", - "parity-scale-codec/std", - "rand?/std", - "scale-info/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-staking/std", - "sp-std/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "rand", - "sp-runtime/runtime-benchmarks", - "sp-staking/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] - -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances?/try-runtime", - "pallet-session/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/invulnerables/src/benchmarking.rs b/pallets/invulnerables/src/benchmarking.rs deleted file mode 100644 index a80683a..0000000 --- a/pallets/invulnerables/src/benchmarking.rs +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Benchmarking setup for pallet-invulnerables - -#![cfg(feature = "runtime-benchmarks")] - -use super::*; - -#[allow(unused)] -use crate::Pallet as InvulnerablesPallet; -use { - frame_benchmarking::{account, impl_benchmark_test_suite, v2::*, BenchmarkError}, - frame_support::{ - pallet_prelude::*, - traits::{tokens::fungible::Balanced, Currency, EnsureOrigin, Get}, - }, - frame_system::{EventRecord, RawOrigin}, - pallet_session::{self as session, SessionManager}, - sp_runtime::traits::AtLeast32BitUnsigned, - sp_std::prelude::*, - tp_traits::DistributeRewards, -}; -const SEED: u32 = 0; - -fn assert_last_event(generic_event: ::RuntimeEvent) { - let events = frame_system::Pallet::::events(); - let system_event: ::RuntimeEvent = generic_event.into(); - // compare to the last event record - let EventRecord { event, .. } = &events[events.len() - 1]; - assert_eq!(event, &system_event); -} - -fn create_funded_user( - string: &'static str, - n: u32, - balance_factor: u32, -) -> T::AccountId { - let user = account(string, n, SEED); - let balance = as Currency>::minimum_balance() - * balance_factor.into(); - let _ = as Currency>::make_free_balance_be( - &user, balance, - ); - user -} - -fn keys(c: u32) -> ::Keys { - use rand::{RngCore, SeedableRng}; - - let keys = { - let mut keys = [0u8; 128]; - - if c > 0 { - let mut rng = rand::rngs::StdRng::seed_from_u64(c as u64); - rng.fill_bytes(&mut keys); - } - - keys - }; - - Decode::decode(&mut &keys[..]).unwrap() -} - -fn invulnerable( - c: u32, -) -> (T::AccountId, T::CollatorId, ::Keys) { - let funded_user = create_funded_user::("candidate", c, 100); - let collator_id = T::CollatorIdOf::convert(funded_user.clone()) - .expect("Converstion of account id of collator id failed."); - (funded_user, collator_id, keys::(c)) -} - -fn invulnerables< - T: Config + frame_system::Config + pallet_session::Config + pallet_balances::Config, ->( - count: u32, -) -> Vec<(T::AccountId, T::CollatorId)> { - let invulnerables = (0..count).map(|c| invulnerable::(c)).collect::>(); - - for (who, _collator_id, keys) in invulnerables.clone() { - >::set_keys(RawOrigin::Signed(who).into(), keys, Vec::new()).unwrap(); - } - - invulnerables - .into_iter() - .map(|(who, collator_id, _)| (who, collator_id)) - .collect() -} - -pub type BalanceOf = - <::Currency as frame_support::traits::fungible::Inspect< - ::AccountId, - >>::Balance; - -pub(crate) fn currency_issue( - amount: BalanceOf, -) -> crate::CreditOf { - <::Currency as Balanced>::issue(amount) -} - -#[allow(clippy::multiple_bound_locations)] -#[benchmarks(where T: session::Config + pallet_balances::Config, BalanceOf: AtLeast32BitUnsigned)] -mod benchmarks { - use super::*; - - #[benchmark] - fn add_invulnerable( - b: Linear<1, { T::MaxInvulnerables::get() - 1 }>, - ) -> Result<(), BenchmarkError> { - let origin = - T::UpdateOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; - - // now we need to fill up invulnerables - let mut invulnerables = invulnerables::(b); - invulnerables.sort(); - - let (_account_ids, collator_ids): (Vec, Vec) = - invulnerables.into_iter().unzip(); - - let invulnerables: frame_support::BoundedVec<_, T::MaxInvulnerables> = - frame_support::BoundedVec::try_from(collator_ids).unwrap(); - >::put(invulnerables); - - let (new_invulnerable, _collator_id, keys) = invulnerable::(b + 1); - >::set_keys( - RawOrigin::Signed(new_invulnerable.clone()).into(), - keys, - Vec::new(), - ) - .unwrap(); - - #[extrinsic_call] - _(origin as T::RuntimeOrigin, new_invulnerable.clone()); - - assert_last_event::( - Event::InvulnerableAdded { - account_id: new_invulnerable, - } - .into(), - ); - Ok(()) - } - - #[benchmark] - fn remove_invulnerable( - b: Linear<{ 1 }, { T::MaxInvulnerables::get() }>, - ) -> Result<(), BenchmarkError> { - let origin = - T::UpdateOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; - let mut invulnerables = invulnerables::(b); - invulnerables.sort(); - - let (account_ids, collator_ids): (Vec, Vec) = - invulnerables.into_iter().unzip(); - - let invulnerables: frame_support::BoundedVec<_, T::MaxInvulnerables> = - frame_support::BoundedVec::try_from(collator_ids).unwrap(); - >::put(invulnerables); - - let to_remove = account_ids.last().unwrap().clone(); - - #[extrinsic_call] - _(origin as T::RuntimeOrigin, to_remove.clone()); - - assert_last_event::( - Event::InvulnerableRemoved { - account_id: to_remove, - } - .into(), - ); - Ok(()) - } - - // worst case for new session. - #[benchmark] - fn new_session(r: Linear<1, { T::MaxInvulnerables::get() }>) -> Result<(), BenchmarkError> { - let origin = - T::UpdateOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; - - frame_system::Pallet::::set_block_number(0u32.into()); - // now we need to fill up invulnerables - let mut invulnerables = invulnerables::(r); - invulnerables.sort(); - - let (account_ids, _collator_ids): (Vec, Vec) = - invulnerables.into_iter().unzip(); - - for account in account_ids { - >::add_invulnerable(origin.clone(), account) - .expect("add invulnerable failed"); - } - - #[block] - { - as SessionManager<_>>::new_session(0); - } - - Ok(()) - } - - #[benchmark] - fn reward_invulnerable( - b: Linear<{ 1 }, { T::MaxInvulnerables::get() }>, - ) -> Result<(), BenchmarkError> where { - let mut invulnerables = invulnerables::(b); - invulnerables.sort(); - - let (account_ids, collator_ids): (Vec, Vec) = - invulnerables.into_iter().unzip(); - - let invulnerables: frame_support::BoundedVec<_, T::MaxInvulnerables> = - frame_support::BoundedVec::try_from(collator_ids).unwrap(); - >::put(invulnerables); - let to_reward = account_ids.first().unwrap().clone(); - // Create new supply for rewards - let new_supply = currency_issue::(1000u32.into()); - #[block] - { - let _ = InvulnerableRewardDistribution::::distribute_rewards( - to_reward, new_supply, - ); - } - - Ok(()) - } - impl_benchmark_test_suite!( - InvulnerablesPallet, - crate::mock::new_test_ext(), - crate::mock::Test, - ); -} diff --git a/pallets/invulnerables/src/lib.rs b/pallets/invulnerables/src/lib.rs deleted file mode 100644 index 2c16885..0000000 --- a/pallets/invulnerables/src/lib.rs +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Invulnerables pallet. -//! -//! A pallet to manage invulnerable collators in a parachain. -//! -//! ## Terminology -//! -//! - Collator: A parachain block producer. -//! - Invulnerable: An account appointed by governance and guaranteed to be in the collator set. - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use pallet::*; -use { - core::marker::PhantomData, - sp_runtime::{traits::Convert, TokenError}, -}; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; -pub mod weights; - -#[frame_support::pallet] -pub mod pallet { - pub use crate::weights::WeightInfo; - - #[cfg(feature = "runtime-benchmarks")] - use frame_support::traits::Currency; - - use { - frame_support::{ - dispatch::DispatchResultWithPostInfo, - pallet_prelude::*, - traits::{EnsureOrigin, ValidatorRegistration}, - BoundedVec, DefaultNoBound, - }, - frame_system::pallet_prelude::*, - pallet_session::SessionManager, - sp_runtime::traits::Convert, - sp_staking::SessionIndex, - sp_std::vec::Vec, - }; - - /// The current storage version. - const STORAGE_VERSION: StorageVersion = StorageVersion::new(0); - - /// A convertor from collators id. Since this pallet does not have stash/controller, this is - /// just identity. - pub struct IdentityCollator; - impl sp_runtime::traits::Convert> for IdentityCollator { - fn convert(t: T) -> Option { - Some(t) - } - } - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// Overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// Origin that can dictate updating parameters of this pallet. - type UpdateOrigin: EnsureOrigin; - - /// Maximum number of invulnerables. - #[pallet::constant] - type MaxInvulnerables: Get; - - /// A stable ID for a collator. - type CollatorId: Member + Parameter + MaybeSerializeDeserialize + MaxEncodedLen + Ord; - - /// A conversion from account ID to collator ID. - /// - /// Its cost must be at most one storage read. - type CollatorIdOf: Convert>; - - /// Validate a user is registered - type CollatorRegistration: ValidatorRegistration; - - /// The weight information of this pallet. - type WeightInfo: WeightInfo; - - #[cfg(feature = "runtime-benchmarks")] - type Currency: Currency - + frame_support::traits::fungible::Balanced; - } - - #[pallet::pallet] - #[pallet::storage_version(STORAGE_VERSION)] - pub struct Pallet(_); - - /// The invulnerable, permissioned collators. This list must be sorted. - #[pallet::storage] - #[pallet::getter(fn invulnerables)] - pub type Invulnerables = - StorageValue<_, BoundedVec, ValueQuery>; - - #[pallet::genesis_config] - #[derive(DefaultNoBound)] - pub struct GenesisConfig { - pub invulnerables: Vec, - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - let duplicate_invulnerables = self - .invulnerables - .iter() - .collect::>(); - assert!( - duplicate_invulnerables.len() == self.invulnerables.len(), - "duplicate invulnerables in genesis." - ); - - let bounded_invulnerables = - BoundedVec::<_, T::MaxInvulnerables>::try_from(self.invulnerables.clone()) - .expect("genesis invulnerables are more than T::MaxInvulnerables"); - - >::put(bounded_invulnerables); - } - } - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// New Invulnerables were set. - NewInvulnerables { invulnerables: Vec }, - /// A new Invulnerable was added. - InvulnerableAdded { account_id: T::AccountId }, - /// An Invulnerable was removed. - InvulnerableRemoved { account_id: T::AccountId }, - /// An account was unable to be added to the Invulnerables because they did not have keys - /// registered. Other Invulnerables may have been set. - InvalidInvulnerableSkipped { account_id: T::AccountId }, - } - - #[pallet::error] - pub enum Error { - /// There are too many Invulnerables. - TooManyInvulnerables, - /// Account is already an Invulnerable. - AlreadyInvulnerable, - /// Account is not an Invulnerable. - NotInvulnerable, - /// Account does not have keys registered - NoKeysRegistered, - /// Unable to derive collator id from account id - UnableToDeriveCollatorId, - } - - #[pallet::call] - impl Pallet { - /// Add a new account `who` to the list of `Invulnerables` collators. - /// - /// The origin for this call must be the `UpdateOrigin`. - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::add_invulnerable( - T::MaxInvulnerables::get().saturating_sub(1), - ))] - pub fn add_invulnerable( - origin: OriginFor, - who: T::AccountId, - ) -> DispatchResultWithPostInfo { - T::UpdateOrigin::ensure_origin(origin)?; - // don't let one unprepared collator ruin things for everyone. - let maybe_collator_id = T::CollatorIdOf::convert(who.clone()) - .filter(T::CollatorRegistration::is_registered); - - let collator_id = maybe_collator_id.ok_or(Error::::NoKeysRegistered)?; - - >::try_mutate(|invulnerables| -> DispatchResult { - if invulnerables.contains(&collator_id) { - Err(Error::::AlreadyInvulnerable)?; - } - invulnerables - .try_push(collator_id.clone()) - .map_err(|_| Error::::TooManyInvulnerables)?; - Ok(()) - })?; - - Self::deposit_event(Event::InvulnerableAdded { account_id: who }); - - let weight_used = T::WeightInfo::add_invulnerable( - Invulnerables::::decode_len() - .unwrap_or_default() - .try_into() - .unwrap_or(T::MaxInvulnerables::get().saturating_sub(1)), - ); - - Ok(Some(weight_used).into()) - } - - /// Remove an account `who` from the list of `Invulnerables` collators. `Invulnerables` must - /// be sorted. - /// - /// The origin for this call must be the `UpdateOrigin`. - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::remove_invulnerable(T::MaxInvulnerables::get()))] - pub fn remove_invulnerable(origin: OriginFor, who: T::AccountId) -> DispatchResult { - T::UpdateOrigin::ensure_origin(origin)?; - - let collator_id = T::CollatorIdOf::convert(who.clone()) - .ok_or(Error::::UnableToDeriveCollatorId)?; - - >::try_mutate(|invulnerables| -> DispatchResult { - let pos = invulnerables - .iter() - .position(|x| x == &collator_id) - .ok_or(Error::::NotInvulnerable)?; - invulnerables.remove(pos); - Ok(()) - })?; - - Self::deposit_event(Event::InvulnerableRemoved { account_id: who }); - Ok(()) - } - } - - /// Play the role of the session manager. - impl SessionManager for Pallet { - fn new_session(index: SessionIndex) -> Option> { - log::info!( - "assembling new invulnerable collators for new session {} at #{:?}", - index, - >::block_number(), - ); - - let invulnerables = Self::invulnerables().to_vec(); - frame_system::Pallet::::register_extra_weight_unchecked( - T::WeightInfo::new_session(invulnerables.len() as u32), - DispatchClass::Mandatory, - ); - Some(invulnerables) - } - fn start_session(_: SessionIndex) { - // we don't care. - } - fn end_session(_: SessionIndex) { - // we don't care. - } - } -} - -/// If the rewarded account is an Invulnerable, distribute the entire reward -/// amount to them. Otherwise use the `Fallback` distribution. -pub struct InvulnerableRewardDistribution( - PhantomData<(Runtime, Currency, Fallback)>, -); - -use {frame_support::pallet_prelude::Weight, sp_runtime::traits::Get}; - -type CreditOf = - frame_support::traits::fungible::Credit<::AccountId, Currency>; -pub type AccountIdOf = ::AccountId; - -impl - tp_traits::DistributeRewards, CreditOf> - for InvulnerableRewardDistribution -where - Runtime: frame_system::Config + Config, - Fallback: tp_traits::DistributeRewards, CreditOf>, - Currency: frame_support::traits::fungible::Balanced>, -{ - fn distribute_rewards( - rewarded: AccountIdOf, - amount: CreditOf, - ) -> frame_support::pallet_prelude::DispatchResultWithPostInfo { - let mut total_weight = Weight::zero(); - let collator_id = Runtime::CollatorIdOf::convert(rewarded.clone()) - .ok_or(Error::::UnableToDeriveCollatorId)?; - // weight to read invulnerables - total_weight += Runtime::DbWeight::get().reads(1); - if !Invulnerables::::get().contains(&collator_id) { - let post_info = Fallback::distribute_rewards(rewarded, amount)?; - if let Some(weight) = post_info.actual_weight { - total_weight += weight; - } - } else { - Currency::resolve(&rewarded, amount).map_err(|_| TokenError::NotExpendable)?; - total_weight += - Runtime::WeightInfo::reward_invulnerable(Runtime::MaxInvulnerables::get()) - } - Ok(Some(total_weight).into()) - } -} diff --git a/pallets/invulnerables/src/mock.rs b/pallets/invulnerables/src/mock.rs deleted file mode 100644 index 62a843b..0000000 --- a/pallets/invulnerables/src/mock.rs +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::*, - crate as invulnerables, - frame_support::{ - ord_parameter_types, parameter_types, - traits::{ConstU32, ValidatorRegistration}, - }, - frame_system::{self as system, EnsureSignedBy}, - pallet_balances::AccountData, - sp_core::H256, - sp_runtime::{ - testing::UintAuthorityId, - traits::{BlakeTwo256, IdentityLookup, OpaqueKeys}, - BuildStorage, RuntimeAppPublic, - }, -}; - -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Invulnerables: invulnerables, - Session: pallet_session, - Balances: pallet_balances, - } -); - -parameter_types! { - pub const BlockHashCount: u64 = 250; - pub const SS58Prefix: u8 = 42; -} - -impl system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = BlockHashCount; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = SS58Prefix; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type Nonce = u64; - type Block = Block; - type RuntimeTask = (); -} - -parameter_types! { - pub const ExistentialDeposit: u64 = 5; - pub const MaxReserves: u32 = 50; -} - -impl pallet_balances::Config for Test { - type RuntimeEvent = RuntimeEvent; - type WeightInfo = (); - type Balance = u64; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type ReserveIdentifier = [u8; 8]; - type RuntimeHoldReason = (); - type RuntimeFreezeReason = (); - type FreezeIdentifier = (); - type MaxLocks = (); - type MaxReserves = MaxReserves; - type MaxHolds = ConstU32<0>; - type MaxFreezes = ConstU32<0>; -} - -ord_parameter_types! { - pub const RootAccount: u64 = 777; -} - -pub struct IsRegistered; -impl ValidatorRegistration for IsRegistered { - fn is_registered(id: &u64) -> bool { - *id != 42u64 - } -} - -impl Config for Test { - type RuntimeEvent = RuntimeEvent; - type UpdateOrigin = EnsureSignedBy; - type MaxInvulnerables = ConstU32<20>; - type CollatorId = ::AccountId; - type CollatorIdOf = IdentityCollator; - type CollatorRegistration = IsRegistered; - type WeightInfo = (); - #[cfg(feature = "runtime-benchmarks")] - type Currency = Balances; -} - -sp_runtime::impl_opaque_keys! { - pub struct MockSessionKeys { - // a key for aura authoring - pub aura: UintAuthorityId, - } -} - -impl From for MockSessionKeys { - fn from(aura: sp_runtime::testing::UintAuthorityId) -> Self { - Self { aura } - } -} - -parameter_types! { - pub static SessionHandlerCollators: Vec = Vec::new(); - pub static SessionChangeBlock: u64 = 0; -} - -pub struct TestSessionHandler; -impl pallet_session::SessionHandler for TestSessionHandler { - const KEY_TYPE_IDS: &'static [sp_runtime::KeyTypeId] = &[UintAuthorityId::ID]; - fn on_genesis_session(keys: &[(u64, Ks)]) { - SessionHandlerCollators::set(keys.iter().map(|(a, _)| *a).collect::>()) - } - fn on_new_session(_: bool, keys: &[(u64, Ks)], _: &[(u64, Ks)]) { - SessionChangeBlock::set(System::block_number()); - SessionHandlerCollators::set(keys.iter().map(|(a, _)| *a).collect::>()) - } - fn on_before_session_ending() {} - fn on_disabled(_: u32) {} -} - -parameter_types! { - pub const Offset: u64 = 0; - pub const Period: u64 = 10; -} - -impl pallet_session::Config for Test { - type RuntimeEvent = RuntimeEvent; - type ValidatorId = ::AccountId; - // we don't have stash and controller, thus we don't need the convert as well. - type ValidatorIdOf = IdentityCollator; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionManager = Invulnerables; - type SessionHandler = TestSessionHandler; - type Keys = MockSessionKeys; - type WeightInfo = (); -} - -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - let invulnerables = vec![1, 2]; - - let balances = vec![(1, 100), (2, 100), (3, 100), (4, 100), (5, 100)]; - let keys = balances - .iter() - .map(|&(i, _)| { - ( - i, - i, - MockSessionKeys { - aura: UintAuthorityId(i), - }, - ) - }) - .collect::>(); - let session = pallet_session::GenesisConfig:: { keys }; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - invulnerables::GenesisConfig:: { invulnerables } - .assimilate_storage(&mut t) - .unwrap(); - session.assimilate_storage(&mut t).unwrap(); - - t.into() -} - -pub fn initialize_to_block(n: u64) { - for i in System::block_number() + 1..=n { - System::set_block_number(i); - >::on_initialize(i); - } -} diff --git a/pallets/invulnerables/src/tests.rs b/pallets/invulnerables/src/tests.rs deleted file mode 100644 index 928aff0..0000000 --- a/pallets/invulnerables/src/tests.rs +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - mock::{ - initialize_to_block, new_test_ext, Invulnerables, RootAccount, RuntimeEvent, - RuntimeOrigin, System, Test, - }, - Error, - }, - frame_support::{assert_noop, assert_ok}, - sp_runtime::traits::BadOrigin, -}; - -#[test] -fn basic_setup_works() { - new_test_ext().execute_with(|| { - // genesis should sort input - assert_eq!(Invulnerables::invulnerables(), vec![1, 2]); - }); -} - -#[test] -fn add_invulnerable_works() { - new_test_ext().execute_with(|| { - initialize_to_block(1); - assert_eq!(Invulnerables::invulnerables(), vec![1, 2]); - let new = 3; - - // function runs - assert_ok!(Invulnerables::add_invulnerable( - RuntimeOrigin::signed(RootAccount::get()), - new - )); - - System::assert_last_event(RuntimeEvent::Invulnerables( - crate::Event::InvulnerableAdded { account_id: new }, - )); - - // same element cannot be added more than once - assert_noop!( - Invulnerables::add_invulnerable(RuntimeOrigin::signed(RootAccount::get()), new), - Error::::AlreadyInvulnerable - ); - - // new element is now part of the invulnerables list - assert!(Invulnerables::invulnerables().to_vec().contains(&new)); - - // cannot add with non-root - assert_noop!( - Invulnerables::add_invulnerable(RuntimeOrigin::signed(1), new), - BadOrigin - ); - }); -} - -#[test] -fn add_invulnerable_does_not_work_if_not_registered() { - new_test_ext().execute_with(|| { - initialize_to_block(1); - assert_eq!(Invulnerables::invulnerables(), vec![1, 2]); - let new = 42; - - assert_noop!( - Invulnerables::add_invulnerable(RuntimeOrigin::signed(RootAccount::get()), new), - Error::::NoKeysRegistered - ); - }); -} - -#[test] -fn invulnerable_limit_works() { - new_test_ext().execute_with(|| { - assert_eq!(Invulnerables::invulnerables(), vec![1, 2]); - - // MaxInvulnerables: u32 = 20 - for ii in 3..=21 { - if ii < 21 { - assert_ok!(Invulnerables::add_invulnerable( - RuntimeOrigin::signed(RootAccount::get()), - ii - )); - } else { - assert_noop!( - Invulnerables::add_invulnerable(RuntimeOrigin::signed(RootAccount::get()), ii), - Error::::TooManyInvulnerables - ); - } - } - let expected: Vec = (1..=20).collect(); - assert_eq!(Invulnerables::invulnerables(), expected); - }); -} - -#[test] -fn remove_invulnerable_works() { - new_test_ext().execute_with(|| { - initialize_to_block(1); - assert_eq!(Invulnerables::invulnerables(), vec![1, 2]); - - assert_ok!(Invulnerables::add_invulnerable( - RuntimeOrigin::signed(RootAccount::get()), - 4 - )); - assert_ok!(Invulnerables::add_invulnerable( - RuntimeOrigin::signed(RootAccount::get()), - 3 - )); - - assert_eq!(Invulnerables::invulnerables(), vec![1, 2, 4, 3]); - - assert_ok!(Invulnerables::remove_invulnerable( - RuntimeOrigin::signed(RootAccount::get()), - 2 - )); - - System::assert_last_event(RuntimeEvent::Invulnerables( - crate::Event::InvulnerableRemoved { account_id: 2 }, - )); - assert_eq!(Invulnerables::invulnerables(), vec![1, 4, 3]); - - // cannot remove invulnerable not in the list - assert_noop!( - Invulnerables::remove_invulnerable(RuntimeOrigin::signed(RootAccount::get()), 2), - Error::::NotInvulnerable - ); - - // cannot remove without privilege - assert_noop!( - Invulnerables::remove_invulnerable(RuntimeOrigin::signed(1), 3), - BadOrigin - ); - }); -} diff --git a/pallets/invulnerables/src/weights.rs b/pallets/invulnerables/src/weights.rs deleted file mode 100644 index 574193b..0000000 --- a/pallets/invulnerables/src/weights.rs +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_invulnerables -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `girazoki-XPS-15-9530`, CPU: `13th Gen Intel(R) Core(TM) i9-13900H` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_invulnerables -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// tmp/pallet_invulnerables.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_invulnerables. -pub trait WeightInfo { - fn add_invulnerable(_b: u32) -> Weight; - fn remove_invulnerable(_b: u32) -> Weight; - fn new_session(_b: u32) -> Weight; - fn reward_invulnerable(_b: u32) -> Weight; -} - -/// Weights for pallet_invulnerables using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 99]`. - fn add_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `549 + b * (36 ±0)` - // Estimated: `4687 + b * (37 ±0)` - // Minimum execution time: 14_073_000 picoseconds. - Weight::from_parts(17_124_910, 4687) - // Standard Error: 1_519 - .saturating_add(Weight::from_parts(76_594, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + b * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 8_623_000 picoseconds. - Weight::from_parts(10_574_224, 4687) - // Standard Error: 992 - .saturating_add(Weight::from_parts(52_490, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - fn new_session(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + r * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 7_295_000 picoseconds. - Weight::from_parts(7_742_784, 4687) - // Standard Error: 4_715 - .saturating_add(Weight::from_parts(105_985, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn reward_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `218 + b * (33 ±0)` - // Estimated: `4687` - // Minimum execution time: 17_514_000 picoseconds. - Weight::from_parts(19_797_082, 4687) - // Standard Error: 1_701 - .saturating_add(Weight::from_parts(69_693, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 99]`. - fn add_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `549 + b * (36 ±0)` - // Estimated: `4687 + b * (37 ±0)` - // Minimum execution time: 14_073_000 picoseconds. - Weight::from_parts(17_124_910, 4687) - // Standard Error: 1_519 - .saturating_add(Weight::from_parts(76_594, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + b * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 8_623_000 picoseconds. - Weight::from_parts(10_574_224, 4687) - // Standard Error: 992 - .saturating_add(Weight::from_parts(52_490, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - fn new_session(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + r * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 7_295_000 picoseconds. - Weight::from_parts(7_742_784, 4687) - // Standard Error: 4_715 - .saturating_add(Weight::from_parts(105_985, 0).saturating_mul(r.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn reward_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `218 + b * (33 ±0)` - // Estimated: `4687` - // Minimum execution time: 17_514_000 picoseconds. - Weight::from_parts(19_797_082, 4687) - // Standard Error: 1_701 - .saturating_add(Weight::from_parts(69_693, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/pooled-staking/Cargo.toml b/pallets/pooled-staking/Cargo.toml deleted file mode 100644 index 486a344..0000000 --- a/pallets/pooled-staking/Cargo.toml +++ /dev/null @@ -1,79 +0,0 @@ -[package] -name = "pallet-pooled-staking" -authors = { workspace = true } -description = "A staking pallet implemented using shares in pools" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -dp-core = { workspace = true } -log = { workspace = true } -serde = { workspace = true, optional = true } -tp-maths = { workspace = true } -tp-traits = { workspace = true } - -# Substrate -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } - -# Nimbus -nimbus-primitives = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -num-traits = { workspace = true } -pallet-balances = { workspace = true, features = [ "std" ] } -similar-asserts = { workspace = true } -sp-io = { workspace = true, features = [ "std" ] } - -[features] -default = [ "std" ] -std = [ - "dp-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "nimbus-primitives/std", - "pallet-balances/std", - "parity-scale-codec/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-maths/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-maths/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/pooled-staking/README.md b/pallets/pooled-staking/README.md deleted file mode 100644 index ac68c15..0000000 --- a/pallets/pooled-staking/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Pooled staking pallet - -This pallet implements a Delegated Proof of Stake (DPoS) election system based -on a pool logic inspired from AMM Liquidity Pools, which provide computationally -efficient reward distribution. - -## Pool design - -A pool represent an amount of currency shared among many users, whom own some amount of shares -among a total share supply. Users can join or leave the pool, which both increase the total amount -of shared currency and the supply of shares such that each share keeps the same value. Rewards or -slashing are shared among all share holders by increasing/decreasing the total amount of shared -currency without changing the shares amounts or supply. This pool system can be used for any state a delegator can be in which they can receive rewards and/or be slashed. - -For each candidate there are 4 pools a delegator can be in: -- **Joining pool**: The delegator requested to start delegating for that candidate. However they must wait some - time before they are eligible to rewards, as it would otherwise allow to earn rewards for past sessions the - delegator was not yet contributing to the election of the candidate. Once the joining delay is elapsed the - delegator can convert their **joining shares** into **auto compounding shares** or **manual rewards shares** - (decided in advance so that anyone can trigger the convertion). -- **Auto compounding pool**: The delegator is eligible to rewards which are automatically compounded. This is - done by increasing the total amount of stake backing the pool without changing the amount of shares owned, which indirectly increase the value of each share. -- **Manual rewards pool**: The delegator is eligible to rewards which are kept out of the pool. It is based - around a counter of how much reward has been distributed per share since genesis. For each delegator is stored the value of the counter when they joined the pool or last claimed, such that it is possible to compute the amount of withdrawable rewards based on the amount of owned shares. Any change of the amount - of shares of a delegator (joining/leaving) requires to force claiming the rewards to keep the calculations - correct. -- **Leaving pool**: The delegator requested to stop delegating for that candidate. However they are still - accountable if the candidate is slashed until the end of the leaving delay. They no longer count towards - the candidate score nor are eligible to rewards. - -## Held currency - -To allow delegators to participate in other pallets such as democracy, their stake stays in their account and -is **held** by the staking pallet. However since reward distribution and slashing are made indirectly without -iterating over the set of delegators, the amount held in the account can mismatch the funds at stake. It means -rewards are distributed to an account dedicated to the staking pallet, and delegators can then call an -extrinsic to get their rewards transfered to their account (with an hold for auto compounding rewards). -For slashing, it requires anyone to call an extrinsic to transfer the slashed currency out of the -slashed delegators account. \ No newline at end of file diff --git a/pallets/pooled-staking/src/benchmarking.rs b/pallets/pooled-staking/src/benchmarking.rs deleted file mode 100644 index 6c90902..0000000 --- a/pallets/pooled-staking/src/benchmarking.rs +++ /dev/null @@ -1,618 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -use {super::*, crate::Pallet as PooledStaking}; - -use { - crate::{ - pools::Pool, - traits::{IsCandidateEligible, Timer}, - HoldReason, - PendingOperationKey::{JoiningAutoCompounding, JoiningManualRewards}, - }, - frame_benchmarking::{account, impl_benchmark_test_suite, v2::*, BenchmarkError}, - frame_support::{ - dispatch::RawOrigin, - traits::{ - fungible::{InspectHold, Mutate, MutateHold}, - tokens::{fungible::Balanced, Precision}, - Get, - }, - }, - frame_system::EventRecord, - sp_std::prelude::*, -}; - -/// Minimum collator candidate stake -fn min_candidate_stk() -> T::Balance { - <::MinimumSelfDelegation as Get>::get() -} - -fn assert_last_event(generic_event: ::RuntimeEvent) { - let events = frame_system::Pallet::::events(); - let system_event: ::RuntimeEvent = generic_event.into(); - // compare to the last event record - let EventRecord { event, .. } = &events[events.len() - 1]; - assert_eq!(event, &system_event); -} - -/// Create a funded user. -/// Extra + min_candidate_stk is total minted funds -/// Returns tuple (id, balance) -fn create_funded_user( - string: &'static str, - n: u32, - extra: T::Balance, -) -> (T::AccountId, T::Balance) { - const SEED: u32 = 0; - let user = account(string, n, SEED); - let min_candidate_stk = min_candidate_stk::(); - let total = min_candidate_stk + extra; - T::Currency::set_balance(&user, total); - (user, total) -} - -pub(crate) fn currency_issue( - amount: T::Balance, -) -> crate::CreditOf { - <::Currency as Balanced>::issue(amount) -} - -#[benchmarks] -mod benchmarks { - use super::*; - - #[benchmark] - fn request_delegate() -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1; - let (caller_candidate, _deposit_amount) = create_funded_user::( - "candidate", - USER_SEED, - min_candidate_stk::() * 10u32.into(), - ); - - let (caller_delegator, _deposit_amount) = create_funded_user::( - "delegator", - USER_SEED, - min_candidate_stk::() * 10u32.into(), - ); - - T::EligibleCandidatesFilter::make_candidate_eligible(&caller_candidate, true); - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(caller_candidate.clone()).into(), - caller_candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(caller_candidate.clone()).into(), - caller_candidate.clone(), - TargetPool::ManualRewards, - min_candidate_stk::(), - )?; - - let timer = T::JoiningRequestTimer::now(); - - T::JoiningRequestTimer::skip_to_elapsed(); - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller_candidate.clone()).into(), - vec![PendingOperationQuery { - delegator: caller_candidate.clone(), - operation: JoiningAutoCompounding { - candidate: caller_candidate.clone(), - at: timer.clone(), - }, - }], - )?; - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller_candidate.clone()).into(), - vec![PendingOperationQuery { - delegator: caller_candidate.clone(), - operation: JoiningManualRewards { - candidate: caller_candidate.clone(), - at: timer.clone(), - }, - }], - )?; - - // self delegation to have something in joining - PooledStaking::::request_delegate( - RawOrigin::Signed(caller_candidate.clone()).into(), - caller_candidate.clone(), - TargetPool::ManualRewards, - min_candidate_stk::(), - )?; - - // Worst case scenario is: we have already shares in both pools, and we delegate again - // but we delegate with a different account - #[extrinsic_call] - _( - RawOrigin::Signed(caller_delegator.clone()), - caller_candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::() * 2u32.into(), - ); - - // assert that it comes out sorted - assert_last_event::( - Event::RequestedDelegate { - candidate: caller_candidate.clone(), - delegator: caller_delegator, - pool: TargetPool::AutoCompounding, - pending: min_candidate_stk::() * 2u32.into(), - } - .into(), - ); - Ok(()) - } - - #[benchmark] - fn execute_pending_operations( - b: Linear<1, { T::EligibleCandidatesBufferSize::get() }>, - ) -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1000; - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, min_candidate_stk::() * b.into()); - - let mut pending_operations = vec![]; - let mut candidates = vec![]; - - T::Currency::set_balance(&T::StakingAccount::get(), min_candidate_stk::()); - - let timer = T::JoiningRequestTimer::now(); - - // Create as many delegations as one can - for i in 0..b { - let (candidate, _deposit) = create_funded_user::( - "candidate", - USER_SEED - i - 1, - min_candidate_stk::() * 2u32.into(), - ); - T::EligibleCandidatesFilter::make_candidate_eligible(&candidate, true); - - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - pending_operations.push(PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningAutoCompounding { - candidate: candidate.clone(), - at: timer.clone(), - }, - }); - candidates.push(candidate); - } - - T::JoiningRequestTimer::skip_to_elapsed(); - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone()), pending_operations); - - let last_candidate = &candidates[candidates.len() - 1]; - // assert that it comes out sorted - assert_last_event::( - Event::ExecutedDelegate { - candidate: last_candidate.clone(), - delegator: caller, - pool: TargetPool::AutoCompounding, - staked: min_candidate_stk::(), - released: 0u32.into(), - } - .into(), - ); - Ok(()) - } - - #[benchmark] - fn request_undelegate() -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1; - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, min_candidate_stk::()); - - T::EligibleCandidatesFilter::make_candidate_eligible(&caller, true); - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - caller.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - let timer = T::JoiningRequestTimer::now(); - - T::JoiningRequestTimer::skip_to_elapsed(); - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller.clone()).into(), - vec![PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningAutoCompounding { - candidate: caller.clone(), - at: timer.clone(), - }, - }], - )?; - - let stake_to_remove = min_candidate_stk::() / 2u32.into(); - - // We now have a working delegation, and we can request to undelegate - // This should take the candidate out from being eligible - - #[extrinsic_call] - _( - RawOrigin::Signed(caller.clone()), - caller.clone(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake_to_remove), - ); - - // lets get the hold amount to know dust - let on_hold = T::Currency::balance_on_hold(&HoldReason::PooledStake.into(), &caller); - // dust gets released immediatly - let dust = min_candidate_stk::() - on_hold; - - // assert that it comes out sorted - // TODO: hardcoded numbers should dissapear - assert_last_event::( - Event::RequestedUndelegate { - candidate: caller.clone(), - delegator: caller, - from: TargetPool::AutoCompounding, - pending: stake_to_remove - dust, - released: dust, - } - .into(), - ); - Ok(()) - } - - #[benchmark] - fn claim_manual_rewards( - b: Linear<1, { T::EligibleCandidatesBufferSize::get() }>, - ) -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1000; - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, min_candidate_stk::() * b.into()); - - let mut candidate_delegator = vec![]; - T::Currency::set_balance(&T::StakingAccount::get(), min_candidate_stk::()); - // Create as many delegations as one can - for i in 0..b { - let (candidate, _deposit) = create_funded_user::( - "candidate", - USER_SEED - i - 1, - min_candidate_stk::() * 2u32.into(), - ); - T::EligibleCandidatesFilter::make_candidate_eligible(&candidate, true); - - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(candidate.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - candidate.clone(), - TargetPool::ManualRewards, - min_candidate_stk::(), - )?; - - candidate_delegator.push((candidate.clone(), caller.clone())) - } - - let timer = T::JoiningRequestTimer::now(); - - T::JoiningRequestTimer::skip_to_elapsed(); - - // Set counter to simulate rewards. - let counter = 100u32; - // Execute as many pending operations as posible - for i in 0..b { - let candidate: T::AccountId = account("candidate", USER_SEED - i - 1, 0); - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller.clone()).into(), - vec![PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningManualRewards { - candidate: candidate.clone(), - at: timer.clone(), - }, - }], - )?; - - crate::Pools::::set(candidate, &PoolsKey::ManualRewardsCounter, counter.into()); - } - - #[extrinsic_call] - _( - RawOrigin::Signed(caller.clone()), - candidate_delegator.clone(), - ); - - let (candidate, delegator) = &candidate_delegator[candidate_delegator.len() - 1]; - let shares = min_candidate_stk::() / T::InitialManualClaimShareValue::get(); - // We should have the last pairs event as the last event - assert_last_event::( - Event::ClaimedManualRewards { - candidate: candidate.clone(), - delegator: delegator.clone(), - rewards: shares * counter.into(), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn rebalance_hold() -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1000; - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, min_candidate_stk::() * 2u32.into()); - - T::Currency::set_balance(&T::StakingAccount::get(), min_candidate_stk::()); - // Create as many delegations as one can - - let (candidate, _deposit) = create_funded_user::( - "caller", - USER_SEED - 1, - min_candidate_stk::() * 2u32.into(), - ); - - let (caller_2, _deposit_amount) = create_funded_user::( - "caller", - USER_SEED - 2u32, - min_candidate_stk::() * 2u32.into(), - ); - - T::EligibleCandidatesFilter::make_candidate_eligible(&candidate, true); - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(candidate.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller_2.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - let fake_hold = min_candidate_stk::() / 2u32.into(); - - // We manually hack it such that hold!=stake - pools::Joining::::set_hold(&candidate, &caller, Stake(fake_hold)); - let on_hold_before = T::Currency::balance_on_hold(&HoldReason::PooledStake.into(), &caller); - T::Currency::release( - &HoldReason::PooledStake.into(), - &caller, - on_hold_before - fake_hold, - Precision::Exact, - )?; - - #[extrinsic_call] - _( - RawOrigin::Signed(caller.clone()), - candidate.clone(), - caller.clone(), - AllTargetPool::Joining, - ); - - // After this hold should have been rebalanced - let on_hold = T::Currency::balance_on_hold(&HoldReason::PooledStake.into(), &caller); - assert_eq!(on_hold, min_candidate_stk::()); - Ok(()) - } - - #[benchmark] - fn update_candidate_position( - b: Linear<1, { T::EligibleCandidatesBufferSize::get() }>, - ) -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1000; - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, min_candidate_stk::()); - - T::Currency::set_balance(&T::StakingAccount::get(), min_candidate_stk::()); - let mut candidates = vec![]; - - // Create as many candidates as one can - for i in 0..b { - let (candidate, _deposit) = create_funded_user::( - "candidate", - USER_SEED - i - 1, - min_candidate_stk::() * 2u32.into(), - ); - - // self delegation - PooledStaking::::request_delegate( - RawOrigin::Signed(candidate.clone()).into(), - candidate.clone(), - TargetPool::AutoCompounding, - min_candidate_stk::(), - )?; - - // Make candidate eligible - T::EligibleCandidatesFilter::make_candidate_eligible(&candidate, true); - - candidates.push(candidate.clone()) - } - - #[extrinsic_call] - _(RawOrigin::Signed(caller.clone()), candidates); - - Ok(()) - } - - #[benchmark] - fn swap_pool() -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1; - - let source_stake = min_candidate_stk::() * 10u32.into(); - - let (caller, _deposit_amount) = create_funded_user::("caller", USER_SEED, source_stake); - - T::EligibleCandidatesFilter::make_candidate_eligible(&caller, true); - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - caller.clone(), - TargetPool::AutoCompounding, - source_stake, - )?; - - let timer = T::JoiningRequestTimer::now(); - - T::JoiningRequestTimer::skip_to_elapsed(); - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller.clone()).into(), - vec![PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningAutoCompounding { - candidate: caller.clone(), - at: timer.clone(), - }, - }], - )?; - - #[extrinsic_call] - _( - RawOrigin::Signed(caller.clone()), - caller.clone(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(source_stake), - ); - - let target_stake = source_stake; - let source_shares = crate::pools::AutoCompounding::::stake_to_shares_or_init( - &caller, - Stake(source_stake), - ) - .unwrap() - .0; - - let target_shares = - crate::pools::ManualRewards::::stake_to_shares_or_init(&caller, Stake(target_stake)) - .unwrap() - .0; - - assert_last_event::( - Event::SwappedPool { - candidate: caller.clone(), - delegator: caller, - source_pool: TargetPool::AutoCompounding, - source_shares, - source_stake, - target_shares, - target_stake, - pending_leaving: 0u32.into(), - released: 0u32.into(), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn distribute_rewards() -> Result<(), BenchmarkError> { - const USER_SEED: u32 = 1; - - let source_stake = min_candidate_stk::() * 10u32.into(); - - let (caller, _deposit_amount) = - create_funded_user::("caller", USER_SEED, source_stake * 2u32.into()); - - T::EligibleCandidatesFilter::make_candidate_eligible(&caller, true); - - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - caller.clone(), - TargetPool::AutoCompounding, - source_stake, - )?; - PooledStaking::::request_delegate( - RawOrigin::Signed(caller.clone()).into(), - caller.clone(), - TargetPool::ManualRewards, - source_stake, - )?; - - let timer = T::JoiningRequestTimer::now(); - - T::JoiningRequestTimer::skip_to_elapsed(); - - PooledStaking::::execute_pending_operations( - RawOrigin::Signed(caller.clone()).into(), - vec![ - PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningAutoCompounding { - candidate: caller.clone(), - at: timer.clone(), - }, - }, - PendingOperationQuery { - delegator: caller.clone(), - operation: JoiningManualRewards { - candidate: caller.clone(), - at: timer.clone(), - }, - }, - ], - )?; - - T::Currency::mint_into(&T::StakingAccount::get(), source_stake).unwrap(); - - #[block] - { - crate::pools::distribute_rewards::(&caller, currency_issue::(source_stake))?; - } - - Ok(()) - } - - impl_benchmark_test_suite!( - PooledStaking, - crate::mock::ExtBuilder::default().build(), - crate::mock::Runtime, - ); -} diff --git a/pallets/pooled-staking/src/calls.rs b/pallets/pooled-staking/src/calls.rs deleted file mode 100644 index e71ad06..0000000 --- a/pallets/pooled-staking/src/calls.rs +++ /dev/null @@ -1,621 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - candidate::Candidates, - pools::{self, Pool}, - traits::Timer, - AllTargetPool, Candidate, Config, Delegator, Error, Event, HoldReason, Pallet, - PendingOperationKey, PendingOperationQuery, PendingOperationQueryOf, PendingOperations, - Shares, SharesOrStake, Stake, TargetPool, - }, - frame_support::{ - dispatch::DispatchErrorWithPostInfo, - pallet_prelude::*, - traits::{ - fungible::{Mutate, MutateHold}, - tokens::{Precision, Preservation}, - }, - }, - sp_runtime::traits::{CheckedSub, Zero}, - sp_std::vec::Vec, - tp_maths::{ErrAdd, ErrSub}, -}; - -pub struct Calls(PhantomData); - -impl Calls { - pub fn rebalance_hold( - candidate: Candidate, - delegator: Delegator, - pool: AllTargetPool, - ) -> DispatchResultWithPostInfo { - let (held, stake) = match pool { - AllTargetPool::Joining => { - let held = pools::Joining::::hold(&candidate, &delegator); - let shares = pools::Joining::::shares(&candidate, &delegator); - let stake = pools::Joining::::shares_to_stake(&candidate, shares)?; - pools::Joining::::set_hold(&candidate, &delegator, stake); - (held, stake) - } - AllTargetPool::AutoCompounding => { - let held = pools::AutoCompounding::::hold(&candidate, &delegator); - let shares = pools::AutoCompounding::::shares(&candidate, &delegator); - let stake = pools::AutoCompounding::::shares_to_stake(&candidate, shares)?; - pools::AutoCompounding::::set_hold(&candidate, &delegator, stake); - (held, stake) - } - AllTargetPool::ManualRewards => { - let held = pools::ManualRewards::::hold(&candidate, &delegator); - let shares = pools::ManualRewards::::shares(&candidate, &delegator); - let stake = pools::ManualRewards::::shares_to_stake(&candidate, shares)?; - pools::ManualRewards::::set_hold(&candidate, &delegator, stake); - (held, stake) - } - AllTargetPool::Leaving => { - let held = pools::Leaving::::hold(&candidate, &delegator); - let shares = pools::Leaving::::shares(&candidate, &delegator); - let stake = pools::Leaving::::shares_to_stake(&candidate, shares)?; - pools::Leaving::::set_hold(&candidate, &delegator, stake); - (held, stake) - } - }; - - if stake == held { - return Ok(().into()); - } - - if let Some(diff) = stake.0.checked_sub(&held.0) { - T::Currency::transfer( - &T::StakingAccount::get(), - &delegator, - diff, - Preservation::Preserve, - )?; - T::Currency::hold(&HoldReason::PooledStake.into(), &delegator, diff)?; - return Ok(().into()); - } - - if let Some(diff) = held.0.checked_sub(&stake.0) { - T::Currency::release( - &HoldReason::PooledStake.into(), - &delegator, - diff, - Precision::Exact, - )?; - T::Currency::transfer( - &delegator, - &T::StakingAccount::get(), - diff, - Preservation::Preserve, - )?; - return Ok(().into()); - } - - // should be unreachable as diff must either be positive or negative - Ok(().into()) - } - - pub fn request_delegate( - candidate: Candidate, - delegator: Delegator, - pool: TargetPool, - stake: T::Balance, - ) -> DispatchResultWithPostInfo { - ensure!(!stake.is_zero(), Error::::StakeMustBeNonZero); - - // Convert stake into joining shares quantity. - let shares = pools::Joining::::stake_to_shares_or_init(&candidate, Stake(stake))?; - - // If the amount was stake and is less than the value of 1 share it will round down to - // 0 share. We avoid doing any work for 0 shares. - ensure!(!shares.0.is_zero(), Error::::StakeMustBeNonZero); - - // We create the new joining shares. It returns the actual amount of stake those shares - // represents (due to rounding). - let stake = pools::Joining::::add_shares(&candidate, &delegator, shares)?; - - // We hold the funds of the delegator and register its stake into the candidate stake. - T::Currency::hold(&HoldReason::PooledStake.into(), &delegator, stake.0)?; - pools::Joining::::increase_hold(&candidate, &delegator, &stake)?; - Candidates::::add_total_stake(&candidate, &stake)?; - - // We create/mutate a request for joining. - let now = T::JoiningRequestTimer::now(); - let operation_key = match pool { - TargetPool::AutoCompounding => PendingOperationKey::JoiningAutoCompounding { - candidate: candidate.clone(), - at: now, - }, - TargetPool::ManualRewards => PendingOperationKey::JoiningManualRewards { - candidate: candidate.clone(), - at: now, - }, - }; - - // We store/mutate the operation in storage. - let operation = PendingOperations::::get(&delegator, &operation_key); - let operation = operation - .err_add(&shares.0) - .map_err(|_| Error::::MathOverflow)?; - PendingOperations::::set(&delegator, &operation_key, operation); - - pools::check_candidate_consistency::(&candidate)?; - - Pallet::::deposit_event(Event::::RequestedDelegate { - candidate, - delegator, - pool, - pending: stake.0, - }); - - Ok(().into()) - } - - pub fn request_undelegate( - candidate: Candidate, - delegator: Delegator, - pool: TargetPool, - amount: SharesOrStake, - ) -> DispatchResultWithPostInfo { - // Converts amount to shares of the correct pool - let shares = match (amount, pool) { - (SharesOrStake::Shares(s), _) => s, - (SharesOrStake::Stake(s), TargetPool::AutoCompounding) => { - pools::AutoCompounding::::stake_to_shares(&candidate, Stake(s))?.0 - } - (SharesOrStake::Stake(s), TargetPool::ManualRewards) => { - pools::ManualRewards::::stake_to_shares(&candidate, Stake(s))?.0 - } - }; - - // Any change in the amount of Manual Rewards shares requires to claim manual rewards. - if let TargetPool::ManualRewards = pool { - Self::claim_manual_rewards(&[(candidate.clone(), delegator.clone())])?; - } - - // Destroy shares - let removed_stake = Self::destroy_shares(&candidate, &delegator, pool, Shares(shares))?; - - // All this stake no longer contribute to the election of the candidate. - Candidates::::sub_total_stake(&candidate, removed_stake)?; - - // We proceed with the leaving, which create Leaving shares and request, - // and release the dust from the convertion to Leaving shares. - let (leaving_stake, dust) = Self::leave_stake(&candidate, &delegator, removed_stake)?; - - pools::check_candidate_consistency::(&candidate)?; - - Pallet::::deposit_event(Event::::RequestedUndelegate { - candidate, - delegator, - from: pool, - pending: leaving_stake.0, - released: dust.0, - }); - - Ok(().into()) - } - - pub fn execute_pending_operations( - operations: Vec>, - ) -> DispatchResultWithPostInfo { - for (index, query) in operations.into_iter().enumerate() { - // We deconstruct the query and find the balance associated with it. - // If it is zero it may not exist or have been executed before, thus - // we simply skip it instead of erroring. - let PendingOperationQuery { - delegator, - operation, - } = query; - - let value = PendingOperations::::get(&delegator, &operation); - - if value.is_zero() { - continue; - } - - match &operation { - PendingOperationKey::JoiningAutoCompounding { candidate, at } => { - ensure!( - T::JoiningRequestTimer::is_elapsed(at), - Error::::RequestCannotBeExecuted(index as u16) - ); - - Self::execute_joining( - candidate.clone(), - delegator.clone(), - TargetPool::AutoCompounding, - Shares(value), - )?; - } - PendingOperationKey::JoiningManualRewards { candidate, at } => { - ensure!( - T::JoiningRequestTimer::is_elapsed(at), - Error::::RequestCannotBeExecuted(index as u16) - ); - - Self::execute_joining( - candidate.clone(), - delegator.clone(), - TargetPool::ManualRewards, - Shares(value), - )?; - } - PendingOperationKey::Leaving { candidate, at } => { - ensure!( - T::LeavingRequestTimer::is_elapsed(at), - Error::::RequestCannotBeExecuted(index as u16) - ); - - Self::execute_leaving(candidate.clone(), delegator.clone(), Shares(value))?; - } - } - - PendingOperations::::remove(&delegator, &operation); - } - - Ok(().into()) - } - - fn execute_joining( - candidate: Candidate, - delegator: Delegator, - pool: TargetPool, - joining_shares: Shares, - ) -> DispatchResultWithPostInfo { - // Convert joining shares into stake. - let stake = pools::Joining::::sub_shares(&candidate, &delegator, joining_shares)?; - - // No rewards are distributed to the Joining pools, so there should always - // be enough hold. Thus no need to rebalance. - pools::Joining::::decrease_hold(&candidate, &delegator, &stake)?; - - // Any change in the amount of Manual Rewards shares requires to claim manual rewards. - if let TargetPool::ManualRewards = pool { - Self::claim_manual_rewards(&[(candidate.clone(), delegator.clone())])?; - } - - // Convert stake into shares quantity. - let shares = match pool { - TargetPool::AutoCompounding => { - pools::AutoCompounding::::stake_to_shares_or_init(&candidate, stake)? - } - TargetPool::ManualRewards => { - pools::ManualRewards::::stake_to_shares_or_init(&candidate, stake)? - } - }; - - // If stake doesn't allow to get at least one share we release all the funds. - if shares.0.is_zero() { - T::Currency::release( - &HoldReason::PooledStake.into(), - &delegator, - stake.0, - Precision::Exact, - )?; - Candidates::::sub_total_stake(&candidate, Stake(stake.0))?; - pools::check_candidate_consistency::(&candidate)?; - return Ok(().into()); - } - - // We create the new shares. It returns the actual amount of stake those shares - // represents (due to rounding). - let actually_staked = match pool { - TargetPool::AutoCompounding => { - let stake = - pools::AutoCompounding::::add_shares(&candidate, &delegator, shares)?; - pools::AutoCompounding::::increase_hold(&candidate, &delegator, &stake)?; - stake - } - TargetPool::ManualRewards => { - let stake = pools::ManualRewards::::add_shares(&candidate, &delegator, shares)?; - pools::ManualRewards::::increase_hold(&candidate, &delegator, &stake)?; - stake - } - }; - - // We release currency that couldn't be converted to shares due to rounding. - // This thus can reduce slighly the total stake of the candidate. - let release = stake - .0 - .err_sub(&actually_staked.0) - .map_err(|_| Error::::MathUnderflow)?; - T::Currency::release( - &HoldReason::PooledStake.into(), - &delegator, - release, - Precision::Exact, - )?; - Candidates::::sub_total_stake(&candidate, Stake(release))?; - - // Events - let event = match pool { - TargetPool::AutoCompounding => Event::::StakedAutoCompounding { - candidate: candidate.clone(), - delegator: delegator.clone(), - shares: shares.0, - stake: actually_staked.0, - }, - TargetPool::ManualRewards => Event::::StakedManualRewards { - candidate: candidate.clone(), - delegator: delegator.clone(), - shares: shares.0, - stake: actually_staked.0, - }, - }; - - pools::check_candidate_consistency::(&candidate)?; - - Pallet::::deposit_event(event); - Pallet::::deposit_event(Event::::ExecutedDelegate { - candidate, - delegator, - pool, - staked: actually_staked.0, - released: release, - }); - - Ok(().into()) - } - - fn execute_leaving( - candidate: Candidate, - delegator: Delegator, - leavinig_shares: Shares, - ) -> DispatchResultWithPostInfo { - // Convert leaving shares into stake. - let stake = pools::Leaving::::sub_shares(&candidate, &delegator, leavinig_shares)?; - - // No rewards are distributed to the Leaving pools, so there should always - // be enough hold. Thus no need to rebalance. - pools::Leaving::::decrease_hold(&candidate, &delegator, &stake)?; - - // We release the funds and consider them unstaked. - T::Currency::release( - &HoldReason::PooledStake.into(), - &delegator, - stake.0, - Precision::Exact, - )?; - - Pallet::::deposit_event(Event::::ExecutedUndelegate { - candidate, - delegator, - released: stake.0, - }); - - Ok(().into()) - } - - pub fn claim_manual_rewards( - pairs: &[(Candidate, Delegator)], - ) -> DispatchResultWithPostInfo { - for (candidate, delegator) in pairs { - let Stake(rewards) = pools::ManualRewards::::claim_rewards(candidate, delegator)?; - - if rewards.is_zero() { - continue; - } - - T::Currency::transfer( - &T::StakingAccount::get(), - delegator, - rewards, - Preservation::Preserve, - )?; - - Pallet::::deposit_event(Event::::ClaimedManualRewards { - candidate: candidate.clone(), - delegator: delegator.clone(), - rewards, - }); - } - - Ok(().into()) - } - - pub fn update_candidate_position(candidates: &[Candidate]) -> DispatchResultWithPostInfo { - for candidate in candidates { - let stake = Candidates::::total_stake(candidate); - Candidates::::update_total_stake(candidate, stake)?; - } - - Ok(().into()) - } - - pub fn swap_pool( - candidate: Candidate, - delegator: Delegator, - source_pool: TargetPool, - amount: SharesOrStake, - ) -> DispatchResultWithPostInfo { - // Converts amount to shares of the correct pool - let old_shares = match (amount, source_pool) { - (SharesOrStake::Shares(s), _) => s, - (SharesOrStake::Stake(s), TargetPool::AutoCompounding) => { - pools::AutoCompounding::::stake_to_shares(&candidate, Stake(s))?.0 - } - (SharesOrStake::Stake(s), TargetPool::ManualRewards) => { - pools::ManualRewards::::stake_to_shares(&candidate, Stake(s))?.0 - } - }; - - // As it will either move in or out of the ManualRewards pool, manual rewards - // needs to be claimed. - Self::claim_manual_rewards(&[(candidate.clone(), delegator.clone())])?; - - // Destroy shares from the old pool. - let removed_stake = - Self::destroy_shares(&candidate, &delegator, source_pool, Shares(old_shares))?; - - // Convert removed amount to new pool shares. - let new_shares = match source_pool { - TargetPool::AutoCompounding => { - pools::ManualRewards::::stake_to_shares_or_init(&candidate, removed_stake)? - } - TargetPool::ManualRewards => { - pools::AutoCompounding::::stake_to_shares_or_init(&candidate, removed_stake)? - } - }; - - ensure!(!new_shares.0.is_zero(), Error::::SwapResultsInZeroShares); - - // We create new shares in the new pool. It returns the actual amount of stake those shares - // represents (due to rounding). - let actually_staked = match source_pool { - TargetPool::ManualRewards => { - let stake = - pools::AutoCompounding::::add_shares(&candidate, &delegator, new_shares)?; - pools::AutoCompounding::::increase_hold(&candidate, &delegator, &stake)?; - stake - } - TargetPool::AutoCompounding => { - let stake = - pools::ManualRewards::::add_shares(&candidate, &delegator, new_shares)?; - pools::ManualRewards::::increase_hold(&candidate, &delegator, &stake)?; - stake - } - }; - - let stake_decrease = removed_stake - .0 - .err_sub(&actually_staked.0) - .map_err(Error::::from)?; - - // The left-over no longer contribute to the election of the candidate. - Candidates::::sub_total_stake(&candidate, Stake(stake_decrease))?; - - // We proceed with the leaving, which create Leaving shares and request, - // and release the dust from the convertion to Leaving shares. - let (leaving_stake, dust) = if stake_decrease.is_zero() { - (Stake(0u32.into()), Stake(0u32.into())) - } else { - Self::leave_stake(&candidate, &delegator, Stake(stake_decrease))? - }; - - pools::check_candidate_consistency::(&candidate)?; - - Pallet::::deposit_event(Event::::SwappedPool { - candidate: candidate.clone(), - delegator: delegator.clone(), - source_pool, - source_shares: old_shares, - source_stake: removed_stake.0, - target_shares: new_shares.0, - target_stake: actually_staked.0, - pending_leaving: leaving_stake.0, - released: dust.0, - }); - - Ok(().into()) - } - - /// Destory ManualReward or AutoCompounding shares while performing hold rebalancing if - /// necessary. - fn destroy_shares( - candidate: &Candidate, - delegator: &Delegator, - pool: TargetPool, - shares: Shares, - ) -> Result, DispatchErrorWithPostInfo> { - match pool { - TargetPool::AutoCompounding => { - let stake = pools::AutoCompounding::::shares_to_stake(candidate, shares)?; - - if stake.0 > pools::AutoCompounding::::hold(candidate, delegator).0 { - Self::rebalance_hold( - candidate.clone(), - delegator.clone(), - AllTargetPool::AutoCompounding, - )?; - } - - // This should be the same `stake` as before. - let stake = pools::AutoCompounding::::sub_shares(candidate, delegator, shares)?; - - pools::AutoCompounding::::decrease_hold(candidate, delegator, &stake)?; - Ok(stake) - } - TargetPool::ManualRewards => { - let stake = pools::ManualRewards::::shares_to_stake(candidate, shares)?; - - if stake.0 > pools::ManualRewards::::hold(candidate, delegator).0 { - Self::rebalance_hold( - candidate.clone(), - delegator.clone(), - AllTargetPool::ManualRewards, - )?; - } - - // This should be the same `stake` as before. - let stake = pools::ManualRewards::::sub_shares(candidate, delegator, shares)?; - - pools::ManualRewards::::decrease_hold(candidate, delegator, &stake)?; - Ok(stake) - } - } - } - - /// Perform the leaving proceduce with provided stake, which will create - /// Leaving shares and request, and release the rounding dust. It DOES NOT - /// destroy shares in other pools. - /// Returns a tuple of the amount of stake in the leaving pool and the dust - /// that was released. - fn leave_stake( - candidate: &Candidate, - delegator: &Delegator, - stake: Stake, - ) -> Result<(Stake, Stake), DispatchErrorWithPostInfo> { - // Create leaving shares. - // As with all pools there will be some rounding error, this amount - // should be small enough so that it is safe to directly release it - // in the delegator account. - let leaving_shares = pools::Leaving::::stake_to_shares_or_init(candidate, stake)?; - let leaving_stake = pools::Leaving::::add_shares(candidate, delegator, leaving_shares)?; - pools::Leaving::::increase_hold(candidate, delegator, &leaving_stake)?; - - // We create/mutate a request for leaving. - let now = T::LeavingRequestTimer::now(); - let operation_key = PendingOperationKey::Leaving { - candidate: candidate.clone(), - at: now, - }; - let operation = PendingOperations::::get(delegator, &operation_key); - let operation = operation - .err_add(&leaving_shares.0) - .map_err(|_| Error::::MathOverflow)?; - PendingOperations::::set(delegator, &operation_key, operation); - - // We release the dust if non-zero. - let dust = stake - .0 - .err_sub(&leaving_stake.0) - .map_err(Error::::from)?; - - if !dust.is_zero() { - T::Currency::release( - &HoldReason::PooledStake.into(), - delegator, - dust, - Precision::Exact, - )?; - } - - Ok((leaving_stake, Stake(dust))) - } -} diff --git a/pallets/pooled-staking/src/candidate.rs b/pallets/pooled-staking/src/candidate.rs deleted file mode 100644 index 13d9aed..0000000 --- a/pallets/pooled-staking/src/candidate.rs +++ /dev/null @@ -1,202 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - pools::{self, Pool}, - traits::IsCandidateEligible, - Candidate, Config, Error, Event, Pallet, Pools, PoolsKey, SortedEligibleCandidates, Stake, - }, - core::{cmp::Ordering, marker::PhantomData}, - parity_scale_codec::{Decode, Encode}, - scale_info::TypeInfo, - sp_core::{Get, RuntimeDebug}, - sp_runtime::traits::Zero, - tp_maths::{ErrAdd, ErrSub}, -}; - -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; - -/// Eligible candidate with its stake. -#[cfg_attr(feature = "std", derive(Serialize, Deserialize))] -#[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] -pub struct EligibleCandidate { - pub candidate: C, - pub stake: S, -} - -impl Ord for EligibleCandidate { - fn cmp(&self, other: &Self) -> Ordering { - self.stake - .cmp(&other.stake) - .reverse() - .then_with(|| self.candidate.cmp(&other.candidate)) - } -} - -impl PartialOrd for EligibleCandidate { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - -pub struct Candidates(PhantomData); - -impl Candidates { - pub fn total_stake(candidate: &Candidate) -> Stake { - Stake(Pools::::get(candidate, &PoolsKey::CandidateTotalStake)) - } - - pub fn add_total_stake( - candidate: &Candidate, - stake: &Stake, - ) -> Result<(), Error> { - if stake.0.is_zero() { - return Ok(()); - } - - let new_stake = Self::total_stake(candidate).0.err_add(&stake.0)?; - - Pallet::::deposit_event(Event::::IncreasedStake { - candidate: candidate.clone(), - stake_diff: stake.0, - }); - - Self::update_total_stake(candidate, Stake(new_stake))?; - - Ok(()) - } - - pub fn sub_total_stake( - candidate: &Candidate, - stake: Stake, - ) -> Result<(), Error> { - if stake.0.is_zero() { - return Ok(()); - } - - let new_stake = Self::total_stake(candidate).0.err_sub(&stake.0)?; - - Pallet::::deposit_event(Event::::DecreasedStake { - candidate: candidate.clone(), - stake_diff: stake.0, - }); - - Self::update_total_stake(candidate, Stake(new_stake))?; - - Ok(()) - } - - pub fn update_total_stake( - candidate: &Candidate, - new_stake: Stake, - ) -> Result<(), Error> { - let stake_before = Pools::::get(candidate, &PoolsKey::CandidateTotalStake); - Pools::::set(candidate, &PoolsKey::CandidateTotalStake, new_stake.0); - - // Compute self delegation. - let ac_self = if pools::AutoCompounding::::shares_supply(candidate) - .0 - .is_zero() - { - Zero::zero() - } else { - let shares = pools::AutoCompounding::::shares(candidate, candidate); - pools::AutoCompounding::shares_to_stake(candidate, shares)?.0 - }; - - let mr_self = if pools::ManualRewards::::shares_supply(candidate) - .0 - .is_zero() - { - Zero::zero() - } else { - let shares = pools::ManualRewards::::shares(candidate, candidate); - pools::ManualRewards::shares_to_stake(candidate, shares)?.0 - }; - - let joining_self = if pools::Joining::::shares_supply(candidate).0.is_zero() { - Zero::zero() - } else { - let shares = pools::Joining::::shares(candidate, candidate); - pools::Joining::shares_to_stake(candidate, shares)?.0 - }; - - let self_delegation = ac_self.err_add(&mr_self)?.err_add(&joining_self)?; - - let mut list = SortedEligibleCandidates::::get(); - - // Remove old data if it exists. - let old_position = match list.binary_search(&EligibleCandidate { - candidate: candidate.clone(), - stake: stake_before, - }) { - Ok(pos) => { - let _ = list.remove(pos); - Some(pos as u32) - } - Err(_) => None, - }; - - let eligible = self_delegation >= T::MinimumSelfDelegation::get() - && T::EligibleCandidatesFilter::is_candidate_eligible(candidate); - - // Find new position in the sorted list. - // It will not be inserted if under the minimum self delegation. - let new_position = if eligible { - let entry = EligibleCandidate { - candidate: candidate.clone(), - stake: new_stake.0, - }; - - // Candidate should not appear in the list, we're instead searching where - // to insert it. - let Err(pos) = list.binary_search(&entry) else { - return Err(Error::::InconsistentState); - }; - - if pos >= T::EligibleCandidatesBufferSize::get() as usize { - None - } else { - // Insert in correct position then truncate the list if necessary. - list = list - .try_mutate(move |list| { - list.insert(pos, entry.clone()); - list.truncate(T::EligibleCandidatesBufferSize::get() as usize) - }) - // This should not occur as we truncate the list above. - .ok_or(Error::::InconsistentState)?; - - Some(pos as u32) - } - } else { - None - }; - - Pallet::::deposit_event(Event::::UpdatedCandidatePosition { - candidate: candidate.clone(), - stake: new_stake.0, - self_delegation, - before: old_position, - after: new_position, - }); - - SortedEligibleCandidates::::set(list); - - Ok(()) - } -} diff --git a/pallets/pooled-staking/src/lib.rs b/pallets/pooled-staking/src/lib.rs deleted file mode 100644 index c638df2..0000000 --- a/pallets/pooled-staking/src/lib.rs +++ /dev/null @@ -1,640 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! A staking pallet based on pools of shares. -//! -//! This pallet works with pools inspired by AMM liquidity pools to easily distribute -//! rewards with support for both non-compounding and compounding rewards. -//! -//! Each candidate internally have 3 pools: -//! - a pool for all delegators willing to auto compound. -//! - a pool for all delegators not willing to auto compound. -//! - a pool for all delegators that are in the process of removing stake. -//! -//! When delegating the funds of the delegator are reserved, and shares allow to easily -//! distribute auto compounding rewards (by simply increasing the total shared amount) -//! and easily slash (each share loose part of its value). Rewards are distributed to an account -//! id dedicated to the staking pallet, and delegators can call an extrinsic to transfer their rewards -//! to their own account (but as reserved). Keeping funds reserved in user accounts allow them to -//! participate in other processes such as gouvernance. - -#![cfg_attr(not(feature = "std"), no_std)] - -mod calls; -mod candidate; -mod pools; -pub mod traits; - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -pub mod weights; -use frame_support::pallet; -pub use weights::WeightInfo; - -pub use {candidate::EligibleCandidate, pallet::*}; - -#[pallet] -pub mod pallet { - use { - super::*, - crate::{ - traits::{IsCandidateEligible, Timer}, - weights::WeightInfo, - }, - calls::Calls, - core::marker::PhantomData, - frame_support::{ - pallet_prelude::*, - storage::types::{StorageDoubleMap, StorageValue, ValueQuery}, - traits::{fungible, tokens::Balance, IsType}, - Blake2_128Concat, - }, - frame_system::pallet_prelude::*, - parity_scale_codec::{Decode, Encode, FullCodec}, - scale_info::TypeInfo, - sp_core::Get, - sp_runtime::{BoundedVec, Perbill}, - sp_std::vec::Vec, - tp_maths::MulDiv, - }; - - /// A reason for this pallet placing a hold on funds. - #[pallet::composite_enum] - pub enum HoldReason { - PooledStake, - } - - #[cfg(feature = "std")] - use serde::{Deserialize, Serialize}; - - // Type aliases for better readability. - pub type Candidate = ::AccountId; - pub type CreditOf = - fungible::Credit<::AccountId, ::Currency>; - pub type Delegator = ::AccountId; - - /// Key used by the `Pools` StorageDoubleMap, avoiding lots of maps. - /// StorageDoubleMap first key is the account id of the candidate. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] - pub enum PoolsKey { - /// Total amount of currency backing this candidate across all pools. - CandidateTotalStake, - - /// Amount of joining shares a delegator have for that candidate. - JoiningShares { delegator: A }, - /// Total amount of joining shares existing for that candidate. - JoiningSharesSupply, - /// Amount of currency backing all the joining shares of that candidate. - JoiningSharesTotalStaked, - /// Amount of currency held in the delegator account. - JoiningSharesHeldStake { delegator: A }, - - /// Amount of auto compounding shares a delegator have for that candidate. - AutoCompoundingShares { delegator: A }, - /// Total amount of auto compounding shares existing for that candidate. - AutoCompoundingSharesSupply, - /// Amount of currency backing all the auto compounding shares of that candidate. - AutoCompoundingSharesTotalStaked, - /// Amount of currency held in the delegator account. - AutoCompoundingSharesHeldStake { delegator: A }, - - /// Amount of manual rewards shares a delegator have for that candidate. - ManualRewardsShares { delegator: A }, - /// Total amount of manual rewards shares existing for that candidate. - ManualRewardsSharesSupply, - /// Amount of currency backing all the manual rewards shares of that candidate. - ManualRewardsSharesTotalStaked, - /// Amount of currency held in the delegator account. - ManualRewardsSharesHeldStake { delegator: A }, - /// Counter of the cumulated rewards per share generated by that candidate since genesis. - /// Is safe to wrap around the maximum value of the balance type. - ManualRewardsCounter, - /// Value of the counter at the last time the delegator claimed its rewards or changed its amount of shares - /// (changing the amount of shares automatically claims pending rewards). - /// The difference between the checkpoint and the counter is the amount of claimable reward per share for - /// that delegator. - ManualRewardsCheckpoint { delegator: A }, - - /// Amount of shares of that delegator in the leaving pool of that candidate. - /// When leaving delegating funds are placed in the leaving pool until the leaving period is elapsed. - /// While in the leaving pool the funds are still slashable. - LeavingShares { delegator: A }, - /// Total amount of leaving shares existing for that candidate. - LeavingSharesSupply, - /// Amount of currency backing all the leaving shares of that candidate. - LeavingSharesTotalStaked, - /// Amount of currency held in the delegator account. - LeavingSharesHeldStake { delegator: A }, - } - - /// Key used by the "PendingOperations" StorageDoubleMap. - /// StorageDoubleMap first key is the account id of the delegator who made the request. - /// Value is the amount of shares in the joining/leaving pool. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] - pub enum PendingOperationKey { - /// Candidate requested to join the auto compounding pool of a candidate. - JoiningAutoCompounding { candidate: A, at: J }, - /// Candidate requested to join the manual rewards pool of a candidate. - JoiningManualRewards { candidate: A, at: J }, - /// Candidate requested to to leave a pool of a candidate. - Leaving { candidate: A, at: L }, - } - - pub type PendingOperationKeyOf = PendingOperationKey< - ::AccountId, - <::JoiningRequestTimer as Timer>::Instant, - <::LeavingRequestTimer as Timer>::Instant, - >; - - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] - pub struct PendingOperationQuery { - pub delegator: A, - pub operation: PendingOperationKey, - } - - pub type PendingOperationQueryOf = PendingOperationQuery< - ::AccountId, - <::JoiningRequestTimer as Timer>::Instant, - <::LeavingRequestTimer as Timer>::Instant, - >; - - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub enum TargetPool { - AutoCompounding, - ManualRewards, - } - - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub enum AllTargetPool { - Joining, - AutoCompounding, - ManualRewards, - Leaving, - } - - impl From for AllTargetPool { - fn from(value: TargetPool) -> Self { - match value { - TargetPool::AutoCompounding => AllTargetPool::AutoCompounding, - TargetPool::ManualRewards => AllTargetPool::ManualRewards, - } - } - } - - /// Allow calls to be performed using either share amounts or stake. - /// When providing stake, calls will convert them into share amounts that are - /// worth up to the provided stake. The amount of stake thus will be at most the provided - /// amount. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] - pub enum SharesOrStake { - Shares(T), - Stake(T), - } - - /// Wrapper type for an amount of shares. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, Default, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub struct Shares(pub T); - - /// Wrapper type for an amount of staked currency. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, Default, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub struct Stake(pub T); - - /// Pooled Staking pallet. - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(PhantomData); - - #[pallet::config] - pub trait Config: frame_system::Config { - /// Overarching event type - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - /// The currency type. - /// Shares will use the same Balance type. - type Currency: fungible::Inspect - + fungible::Mutate - + fungible::Balanced - + fungible::MutateHold; - - /// Same as Currency::Balance. Must impl `MulDiv` which perform - /// multiplication followed by division using a bigger type to avoid - /// overflows. - type Balance: Balance + MulDiv; - - /// Account holding Currency of all delegators. - #[pallet::constant] - type StakingAccount: Get; - - /// When creating the first Shares for a candidate the supply can be arbitrary. - /// Picking a value too low will make an higher supply, which means each share will get - /// less rewards, and rewards calculations will have more impactful rounding errors. - /// Picking a value too high is a barrier of entry for staking. - #[pallet::constant] - type InitialManualClaimShareValue: Get; - /// When creating the first Shares for a candidate the supply can arbitrary. - /// Picking a value too high is a barrier of entry for staking, which will increase overtime - /// as the value of each share will increase due to auto compounding. - #[pallet::constant] - type InitialAutoCompoundingShareValue: Get; - - /// Minimum amount of stake a Candidate must delegate (stake) towards itself. Not reaching - /// this minimum prevents from being elected. - #[pallet::constant] - type MinimumSelfDelegation: Get; - /// Part of the rewards that will be sent exclusively to the collator. - #[pallet::constant] - type RewardsCollatorCommission: Get; - - /// The overarching runtime hold reason. - type RuntimeHoldReason: From; - - /// Condition for when a joining request can be executed. - type JoiningRequestTimer: Timer; - /// Condition for when a leaving request can be executed. - type LeavingRequestTimer: Timer; - /// All eligible candidates are stored in a sorted list that is modified each time - /// delegations changes. It is safer to bound this list, in which case eligible candidate - /// could fall out of this list if they have less stake than the top `EligibleCandidatesBufferSize` - /// eligible candidates. One of this top candidates leaving will then not bring the dropped candidate - /// in the list. An extrinsic is available to manually bring back such dropped candidate. - #[pallet::constant] - type EligibleCandidatesBufferSize: Get; - /// Additional filter for candidates to be eligible. - type EligibleCandidatesFilter: IsCandidateEligible; - - type WeightInfo: WeightInfo; - } - - /// Keeps a list of all eligible candidates, sorted by the amount of stake backing them. - /// This can be quickly updated using a binary search, and allow to easily take the top - /// `MaxCollatorSetSize`. - #[pallet::storage] - pub type SortedEligibleCandidates = StorageValue< - _, - BoundedVec< - candidate::EligibleCandidate, T::Balance>, - T::EligibleCandidatesBufferSize, - >, - ValueQuery, - >; - - /// Pools balances. - #[pallet::storage] - pub type Pools = StorageDoubleMap< - _, - Blake2_128Concat, - Candidate, - Blake2_128Concat, - PoolsKey, - T::Balance, - ValueQuery, - >; - - /// Pending operations balances. - /// Balances are expressed in joining/leaving shares amounts. - #[pallet::storage] - pub type PendingOperations = StorageDoubleMap< - _, - Blake2_128Concat, - Delegator, - Blake2_128Concat, - PendingOperationKeyOf, - T::Balance, - ValueQuery, - >; - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// Stake of the candidate has changed, which may have modified its - /// position in the eligible candidates list. - UpdatedCandidatePosition { - candidate: Candidate, - stake: T::Balance, - self_delegation: T::Balance, - before: Option, - after: Option, - }, - - /// User requested to delegate towards a candidate. - RequestedDelegate { - candidate: Candidate, - delegator: Delegator, - pool: TargetPool, - pending: T::Balance, - }, - /// Delegation request was executed. `staked` has been properly staked - /// in `pool`, while the rounding when converting to shares has been - /// `released`. - ExecutedDelegate { - candidate: Candidate, - delegator: Delegator, - pool: TargetPool, - staked: T::Balance, - released: T::Balance, - }, - /// User requested to undelegate from a candidate. - /// Stake was removed from a `pool` and is `pending` for the request - /// to be executed. The rounding when converting to leaving shares has - /// been `released` immediately. - RequestedUndelegate { - candidate: Candidate, - delegator: Delegator, - from: TargetPool, - pending: T::Balance, - released: T::Balance, - }, - /// Undelegation request was executed. - ExecutedUndelegate { - candidate: Candidate, - delegator: Delegator, - released: T::Balance, - }, - - /// Stake of that Candidate increased. - IncreasedStake { - candidate: Candidate, - stake_diff: T::Balance, - }, - /// Stake of that Candidate decreased. - DecreasedStake { - candidate: Candidate, - stake_diff: T::Balance, - }, - /// Delegator staked towards a Candidate for AutoCompounding Shares. - StakedAutoCompounding { - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - }, - /// Delegator unstaked towards a candidate with AutoCompounding Shares. - UnstakedAutoCompounding { - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - }, - /// Delegator staked towards a candidate for ManualRewards Shares. - StakedManualRewards { - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - }, - /// Delegator unstaked towards a candidate with ManualRewards Shares. - UnstakedManualRewards { - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - }, - /// Collator has been rewarded. - RewardedCollator { - collator: Candidate, - auto_compounding_rewards: T::Balance, - manual_claim_rewards: T::Balance, - }, - /// Delegators have been rewarded. - RewardedDelegators { - collator: Candidate, - auto_compounding_rewards: T::Balance, - manual_claim_rewards: T::Balance, - }, - /// Rewards manually claimed. - ClaimedManualRewards { - candidate: Candidate, - delegator: Delegator, - rewards: T::Balance, - }, - /// Swapped between AutoCompounding and ManualReward shares - SwappedPool { - candidate: Candidate, - delegator: Delegator, - source_pool: TargetPool, - source_shares: T::Balance, - source_stake: T::Balance, - target_shares: T::Balance, - target_stake: T::Balance, - pending_leaving: T::Balance, - released: T::Balance, - }, - } - - #[pallet::error] - pub enum Error { - InvalidPalletSetting, - DisabledFeature, - NoOneIsStaking, - StakeMustBeNonZero, - RewardsMustBeNonZero, - MathUnderflow, - MathOverflow, - NotEnoughShares, - TryingToLeaveTooSoon, - InconsistentState, - UnsufficientSharesForTransfer, - CandidateTransferingOwnSharesForbidden, - RequestCannotBeExecuted(u16), - SwapResultsInZeroShares, - } - - impl From for Error { - fn from(_: tp_maths::OverflowError) -> Self { - Error::MathOverflow - } - } - - impl From for Error { - fn from(_: tp_maths::UnderflowError) -> Self { - Error::MathUnderflow - } - } - - #[pallet::hooks] - impl Hooks> for Pallet { - #[cfg(feature = "try-runtime")] - fn try_state(_n: BlockNumberFor) -> Result<(), sp_runtime::TryRuntimeError> { - use sp_std::collections::btree_set::BTreeSet; - let mut all_candidates = BTreeSet::new(); - for (candidate, _k2) in Pools::::iter_keys() { - all_candidates.insert(candidate); - } - - for candidate in all_candidates { - pools::check_candidate_consistency::(&candidate)?; - } - - // Sorted storage items are sorted - fn assert_is_sorted_and_unique(x: &[T], name: &str) { - assert!( - x.windows(2).all(|w| w[0] < w[1]), - "sorted list not sorted or not unique: {}", - name, - ); - } - assert_is_sorted_and_unique( - &SortedEligibleCandidates::::get(), - "SortedEligibleCandidates", - ); - - Ok(()) - } - } - - #[pallet::call] - impl Pallet { - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::rebalance_hold())] - pub fn rebalance_hold( - origin: OriginFor, - candidate: Candidate, - delegator: Delegator, - pool: AllTargetPool, - ) -> DispatchResultWithPostInfo { - // We don't care about the sender. - let _ = ensure_signed(origin)?; - - Calls::::rebalance_hold(candidate, delegator, pool) - } - - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::request_delegate())] - pub fn request_delegate( - origin: OriginFor, - candidate: Candidate, - pool: TargetPool, - stake: T::Balance, - ) -> DispatchResultWithPostInfo { - let delegator = ensure_signed(origin)?; - - Calls::::request_delegate(candidate, delegator, pool, stake) - } - - /// Execute pending operations can incur in claim manual rewards per operation, we simply add the worst case - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::execute_pending_operations(operations.len() as u32).saturating_add(T::WeightInfo::claim_manual_rewards(operations.len() as u32)))] - pub fn execute_pending_operations( - origin: OriginFor, - operations: Vec>, - ) -> DispatchResultWithPostInfo { - // We don't care about the sender. - let _ = ensure_signed(origin)?; - - Calls::::execute_pending_operations(operations) - } - - /// Request undelegate can incur in either claim manual rewards or hold rebalances, we simply add the worst case - #[pallet::call_index(3)] - #[pallet::weight(T::WeightInfo::request_undelegate().saturating_add(T::WeightInfo::claim_manual_rewards(1).max(T::WeightInfo::rebalance_hold())))] - pub fn request_undelegate( - origin: OriginFor, - candidate: Candidate, - pool: TargetPool, - amount: SharesOrStake, - ) -> DispatchResultWithPostInfo { - let delegator = ensure_signed(origin)?; - - Calls::::request_undelegate(candidate, delegator, pool, amount) - } - - #[pallet::call_index(4)] - #[pallet::weight(T::WeightInfo::claim_manual_rewards(pairs.len() as u32))] - pub fn claim_manual_rewards( - origin: OriginFor, - pairs: Vec<(Candidate, Delegator)>, - ) -> DispatchResultWithPostInfo { - // We don't care about the sender. - let _ = ensure_signed(origin)?; - - Calls::::claim_manual_rewards(&pairs) - } - - #[pallet::call_index(5)] - #[pallet::weight(T::WeightInfo::update_candidate_position(candidates.len() as u32))] - pub fn update_candidate_position( - origin: OriginFor, - candidates: Vec>, - ) -> DispatchResultWithPostInfo { - // We don't care about the sender. - let _ = ensure_signed(origin)?; - - Calls::::update_candidate_position(&candidates) - } - - #[pallet::call_index(6)] - #[pallet::weight(T::WeightInfo::swap_pool())] - pub fn swap_pool( - origin: OriginFor, - candidate: Candidate, - source_pool: TargetPool, - amount: SharesOrStake, - ) -> DispatchResultWithPostInfo { - let delegator = ensure_signed(origin)?; - - Calls::::swap_pool(candidate, delegator, source_pool, amount) - } - } - - impl Pallet { - pub fn computed_stake( - candidate: Candidate, - delegator: Delegator, - pool: AllTargetPool, - ) -> Option { - use pools::Pool; - match pool { - AllTargetPool::Joining => { - pools::Joining::::computed_stake(&candidate, &delegator) - } - AllTargetPool::AutoCompounding => { - pools::AutoCompounding::::computed_stake(&candidate, &delegator) - } - AllTargetPool::ManualRewards => { - pools::ManualRewards::::computed_stake(&candidate, &delegator) - } - AllTargetPool::Leaving => { - pools::Leaving::::computed_stake(&candidate, &delegator) - } - } - .ok() - .map(|x| x.0) - } - } - - impl tp_traits::DistributeRewards, CreditOf> for Pallet { - fn distribute_rewards( - candidate: Candidate, - rewards: CreditOf, - ) -> DispatchResultWithPostInfo { - pools::distribute_rewards::(&candidate, rewards) - } - } -} diff --git a/pallets/pooled-staking/src/mock.rs b/pallets/pooled-staking/src/mock.rs deleted file mode 100644 index 0b73525..0000000 --- a/pallets/pooled-staking/src/mock.rs +++ /dev/null @@ -1,567 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - self as pallet_pooled_staking, - candidate::Candidates, - pools::Pool, - traits::{BlockNumberTimer, Timer}, - Candidate, Delegator, PendingOperationKey, PendingOperationKeyOf, TargetPool, - }, - frame_support::{ - parameter_types, - traits::{ - tokens::fungible::{Inspect, InspectHold}, - Everything, OnFinalize, OnInitialize, - }, - }, - frame_system::pallet_prelude::BlockNumberFor, - num_traits::Num, - parity_scale_codec::{Decode, Encode, MaxEncodedLen}, - scale_info::TypeInfo, - sp_core::{ConstU32, ConstU64, RuntimeDebug, H256}, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, Perbill, - }, -}; - -#[derive( - RuntimeDebug, - PartialEq, - Eq, - Encode, - Decode, - Copy, - Clone, - TypeInfo, - PartialOrd, - Ord, - MaxEncodedLen, -)] -pub enum HoldIdentifier { - Staking, -} - -type Block = frame_system::mocking::MockBlock; -pub type AccountId = u64; -pub type Balance = u128; - -pub const ACCOUNT_STAKING: u64 = 0; -pub const ACCOUNT_CANDIDATE_1: u64 = 1; -pub const ACCOUNT_CANDIDATE_2: u64 = 2; -pub const ACCOUNT_DELEGATOR_1: u64 = 3; -pub const ACCOUNT_DELEGATOR_2: u64 = 4; - -pub const KILO: u128 = 1000; -pub const MEGA: u128 = 1000 * KILO; -pub const GIGA: u128 = 1000 * MEGA; -pub const TERA: u128 = 1000 * GIGA; -pub const PETA: u128 = 1000 * TERA; -pub const DEFAULT_BALANCE: u128 = PETA; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Runtime - { - System: frame_system, - Balances: pallet_balances, - Staking: pallet_pooled_staking, - } -); - -impl frame_system::Config for Runtime { - type BaseCallFilter = Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; - type RuntimeTask = (); -} - -/// Allows to change ED mid-test. -pub struct MockExistentialDeposit; -impl MockExistentialDeposit { - pub fn get() -> Balance { - frame_support::storage::unhashed::get(b":mock_ed").unwrap_or(1) - } - - pub fn set(amount: Balance) { - frame_support::storage::unhashed::put(b":mock_ed", &amount); - } -} - -parameter_types! { - pub ExistentialDeposit: u128 = MockExistentialDeposit::get(); -} - -impl pallet_balances::Config for Runtime { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type MaxHolds = ConstU32<5>; - type WeightInfo = (); -} - -pub const SHARE_INIT: u128 = MEGA; -pub const BLOCKS_TO_WAIT: u64 = 2; - -parameter_types! { - pub const StakingAccount: u64 = ACCOUNT_STAKING; - pub const InitialManualClaimShareValue: u128 = SHARE_INIT; - pub const InitialAutoCompoundingShareValue: u128 = SHARE_INIT; - pub const MinimumSelfDelegation: u128 = 10 * MEGA; - pub const RewardsCollatorCommission: Perbill = Perbill::from_percent(20); - pub const BlocksToWait: u64 = BLOCKS_TO_WAIT; -} - -impl pallet_pooled_staking::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type Balance = Balance; - type StakingAccount = StakingAccount; - type InitialManualClaimShareValue = InitialManualClaimShareValue; - type InitialAutoCompoundingShareValue = InitialAutoCompoundingShareValue; - type MinimumSelfDelegation = MinimumSelfDelegation; - type RewardsCollatorCommission = RewardsCollatorCommission; - type JoiningRequestTimer = BlockNumberTimer; - type LeavingRequestTimer = BlockNumberTimer; - // low value so we can test vec bounding, in practice it should be bigger - type EligibleCandidatesBufferSize = ConstU32<3>; - type EligibleCandidatesFilter = (); - type WeightInfo = (); - type RuntimeHoldReason = RuntimeHoldReason; -} - -pub trait PoolExt: Pool { - type OppositePool: PoolExt; - - fn target_pool() -> TargetPool; - fn event_staked( - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - ) -> crate::Event; - fn joining_operation_key( - candidate: Candidate, - at: ::Instant, - ) -> PendingOperationKeyOf; -} - -impl PoolExt for crate::pools::ManualRewards { - type OppositePool = crate::pools::AutoCompounding; - - fn target_pool() -> TargetPool { - TargetPool::ManualRewards - } - - fn event_staked( - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - ) -> crate::Event { - crate::Event::StakedManualRewards { - candidate, - delegator, - shares, - stake, - } - } - - fn joining_operation_key( - candidate: Candidate, - at: ::Instant, - ) -> PendingOperationKeyOf { - PendingOperationKey::JoiningManualRewards { candidate, at } - } -} - -impl PoolExt for crate::pools::AutoCompounding { - type OppositePool = crate::pools::ManualRewards; - - fn target_pool() -> TargetPool { - TargetPool::AutoCompounding - } - fn event_staked( - candidate: Candidate, - delegator: Delegator, - shares: T::Balance, - stake: T::Balance, - ) -> crate::Event { - crate::Event::StakedAutoCompounding { - candidate, - delegator, - shares, - stake, - } - } - - fn joining_operation_key( - candidate: Candidate, - at: ::Instant, - ) -> PendingOperationKeyOf { - PendingOperationKey::JoiningAutoCompounding { candidate, at } - } -} - -#[macro_export] -macro_rules! pool_test { - (fn $name:ident<$pool:ident>() { $body:expr }) => { - mod $name { - use super::*; - fn generic<$pool: PoolExt>() { - $body - } - - #[test] - fn manual() { - generic::>(); - } - - #[test] - fn auto() { - generic::>(); - } - } - }; -} - -pub fn total_balance(who: &AccountId) -> Balance { - Balances::total_balance(who) -} - -pub fn balance_hold(who: &AccountId) -> Balance { - Balances::balance_on_hold(&crate::HoldReason::PooledStake.into(), who) -} - -pub fn block_number() -> BlockNumberFor { - System::block_number() -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub struct State { - pub delegator_balance: Balance, - pub delegator_hold: Balance, - pub staking_balance: Balance, - pub candidate_total_stake: Balance, -} - -impl State { - pub fn extract(candidate: AccountId, delegator: AccountId) -> Self { - Self { - delegator_balance: total_balance(&delegator), - delegator_hold: balance_hold(&delegator), - staking_balance: total_balance(&ACCOUNT_STAKING), - candidate_total_stake: Candidates::::total_stake(&candidate).0, - } - } -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub struct PoolState { - pub hold: Balance, - pub stake: Balance, -} - -impl PoolState { - pub fn extract>(candidate: AccountId, delegator: AccountId) -> Self { - Self { - hold: P::hold(&candidate, &delegator).0, - stake: P::computed_stake(&candidate, &delegator) - .expect("invalid state") - .0, - } - } -} - -#[derive(Debug, Copy, Clone, PartialEq, Eq)] -pub enum SignedBalance { - Positive(Balance), - Negative(Balance), -} - -#[allow(dead_code)] -pub fn round_down(value: T, increment: T) -> T { - if (value % increment).is_zero() { - value - } else { - (value / increment) * increment - } -} - -pub(crate) struct ExtBuilder { - // endowed accounts with balances - balances: Vec<(AccountId, Balance)>, -} - -impl Default for ExtBuilder { - fn default() -> ExtBuilder { - ExtBuilder { - balances: vec![ - (ACCOUNT_STAKING, 1 * DEFAULT_BALANCE), - (ACCOUNT_CANDIDATE_1, 1 * DEFAULT_BALANCE), - (ACCOUNT_CANDIDATE_2, 1 * DEFAULT_BALANCE), - (ACCOUNT_DELEGATOR_1, 1 * DEFAULT_BALANCE), - (ACCOUNT_DELEGATOR_2, 1 * DEFAULT_BALANCE), - ], - } - } -} - -impl ExtBuilder { - #[allow(dead_code)] - pub(crate) fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { - self.balances = balances; - self - } - - pub(crate) fn build(self) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .expect("Frame system builds valid default genesis config"); - - pallet_balances::GenesisConfig:: { - balances: self.balances, - } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); - - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(1)); - ext - } -} - -/// Rolls forward one block. Returns the new block number. -#[allow(dead_code)] -pub(crate) fn roll_one_block() -> u64 { - // Staking::on_finalize(System::block_number()); - Balances::on_finalize(System::block_number()); - System::on_finalize(System::block_number()); - System::set_block_number(System::block_number() + 1); - System::on_initialize(System::block_number()); - Balances::on_initialize(System::block_number()); - // Staking::on_initialize(System::block_number()); - System::block_number() -} - -/// Rolls to the desired block. Returns the number of blocks played. -#[allow(dead_code)] -pub(crate) fn roll_to(n: u64) -> u64 { - let mut num_blocks = 0; - let mut block = System::block_number(); - while block < n { - block = roll_one_block(); - num_blocks += 1; - } - num_blocks -} - -#[allow(dead_code)] -pub(crate) fn last_event() -> RuntimeEvent { - System::events().pop().expect("Event expected").event -} - -#[allow(dead_code)] -pub(crate) fn events() -> Vec> { - System::events() - .into_iter() - .map(|r| r.event) - .filter_map(|e| { - if let RuntimeEvent::Staking(inner) = e { - Some(inner) - } else { - None - } - }) - .collect::>() -} - -/// Assert input equal to the last event emitted -#[macro_export] -macro_rules! assert_last_event { - ($event:expr) => { - match &$event { - e => assert_eq!(*e, $crate::mock::last_event()), - } - }; -} - -/// Compares the system events with passed in events -/// Prints highlighted diff iff assert_eq fails -#[macro_export] -macro_rules! assert_eq_events { - ($events:expr) => { - match &$events { - e => similar_asserts::assert_eq!(*e, $crate::mock::events()), - } - }; -} - -/// Compares the last N system events with passed in events, where N is the length of events passed -/// in. -/// -/// Prints highlighted diff iff assert_eq fails. -/// The last events from frame_system will be taken in order to match the number passed to this -/// macro. If there are insufficient events from frame_system, they will still be compared; the -/// output may or may not be helpful. -/// -/// Examples: -/// If frame_system has events [A, B, C, D, E] and events [C, D, E] are passed in, the result would -/// be a successful match ([C, D, E] == [C, D, E]). -/// -/// If frame_system has events [A, B, C, D] and events [B, C] are passed in, the result would be an -/// error and a hopefully-useful diff will be printed between [C, D] and [B, C]. -/// -/// Note that events are filtered to only match parachain-staking (see events()). -#[macro_export] -macro_rules! assert_eq_last_events { - ($events:expr) => { - $crate::assert_tail_eq!($events, $crate::mock::events()) - }; -} - -/// Assert that one array is equal to the tail of the other. A more generic and testable version of -/// assert_eq_last_events. -#[macro_export] -macro_rules! assert_tail_eq { - ($tail:expr, $arr:expr) => { - if $tail.len() != 0 { - // 0-length always passes - - if $tail.len() > $arr.len() { - similar_asserts::assert_eq!($tail, $arr); // will fail - } - - let len_diff = $arr.len() - $tail.len(); - similar_asserts::assert_eq!($tail, $arr[len_diff..]); - } - }; -} - -/// Panics if an event is not found in the system log of events -#[macro_export] -macro_rules! assert_event_emitted { - ($event:expr) => { - match &$event { - e => { - assert!( - $crate::mock::events().iter().find(|x| *x == e).is_some(), - "Event {:?} was not found in events: \n {:?}", - e, - $crate::mock::events() - ); - } - } - }; -} - -/// Panics if an event is found in the system log of events -#[macro_export] -macro_rules! assert_event_not_emitted { - ($event:expr) => { - match &$event { - e => { - assert!( - $crate::mock::events().iter().find(|x| *x == e).is_none(), - "Event {:?} was found in events: \n {:?}", - e, - $crate::mock::events() - ); - } - } - }; -} - -#[macro_export] -macro_rules! assert_fields_eq { - ($left:expr, $right:expr, $field:ident) => { - assert_eq!($left.$field, $right.$field); - }; - ($left:expr, $right:expr, [$( $field:ident ),+ $(,)?] ) => { - $( - assert_eq!($left.$field, $right.$field); - )+ - }; -} - -#[test] -fn assert_tail_eq_works() { - assert_tail_eq!(vec![1, 2], vec![0, 1, 2]); - - assert_tail_eq!(vec![1], vec![1]); - - assert_tail_eq!( - vec![0u32; 0], // 0 length array - vec![0u32; 1] // 1-length array - ); - - assert_tail_eq!(vec![0u32, 0], vec![0u32, 0]); -} - -#[test] -#[should_panic] -fn assert_tail_eq_panics_on_non_equal_tail() { - assert_tail_eq!(vec![2, 2], vec![0, 1, 2]); -} - -#[test] -#[should_panic] -fn assert_tail_eq_panics_on_empty_arr() { - assert_tail_eq!(vec![2, 2], vec![0u32; 0]); -} - -#[test] -#[should_panic] -fn assert_tail_eq_panics_on_longer_tail() { - assert_tail_eq!(vec![1, 2, 3], vec![1, 2]); -} - -#[test] -#[should_panic] -fn assert_tail_eq_panics_on_unequal_elements_same_length_array() { - assert_tail_eq!(vec![1, 2, 3], vec![0, 1, 2]); -} diff --git a/pallets/pooled-staking/src/pools.rs b/pallets/pooled-staking/src/pools.rs deleted file mode 100644 index d230919..0000000 --- a/pallets/pooled-staking/src/pools.rs +++ /dev/null @@ -1,564 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - candidate::Candidates, weights::WeightInfo, Candidate, Config, CreditOf, Delegator, Error, - Event, Pallet, Pools, PoolsKey, Shares, Stake, - }, - core::marker::PhantomData, - frame_support::{ - ensure, - pallet_prelude::*, - traits::{fungible::Balanced, Imbalance}, - }, - sp_core::Get, - sp_runtime::traits::{CheckedAdd, CheckedDiv, Zero}, - tp_maths::{ErrAdd, ErrMul, ErrSub, MulDiv}, -}; - -#[allow(dead_code)] -pub trait Pool { - /// Get the amount of shares a delegator have for given candidate. - fn shares(candidate: &Candidate, delegator: &Delegator) -> Shares; - /// Get the total amount of shares all delegators have for given candidate. - fn shares_supply(candidate: &Candidate) -> Shares; - /// Get the total amount of currency staked for given candidate / the value of all shares. - fn total_staked(candidate: &Candidate) -> Stake; - /// Get the amount of currency held for that pool in the delegator account. - fn hold(candidate: &Candidate, delegator: &Delegator) -> Stake; - - /// Set the amount of shares a delegator have for given candidate. - fn set_shares(candidate: &Candidate, delegator: &Delegator, value: Shares); - /// Set the total amount of shares all delegators have for given candidate. - fn set_shares_supply(candidate: &Candidate, value: Shares); - /// Set the total amount of currency staked for given candidate / the value of all shares. - fn set_total_staked(candidate: &Candidate, value: Stake); - /// Set the amount of currency held for that pool in the delegator account. - fn set_hold(candidate: &Candidate, delegator: &Delegator, value: Stake); - - /// Get the initial value of a share in case none exist yet. - fn initial_share_value() -> Stake; - - /// Convert an amount of shares to an amount of staked currency for given candidate. - /// Returns an error if there are no shares for that candidate. - fn shares_to_stake( - candidate: &Candidate, - shares: Shares, - ) -> Result, Error> { - let total_staked = Self::total_staked(candidate).0; - let supply = Self::shares_supply(candidate).0; - ensure!(!supply.is_zero(), Error::NoOneIsStaking); - - Ok(Stake(shares.0.mul_div(total_staked, supply)?)) - } - - /// Convert an amount of shares to an amount of staked currency for given candidate. - /// If this candidate have no shares then it uses `initial_share_value` to compute the value. - fn shares_to_stake_or_init( - candidate: &Candidate, - shares: Shares, - ) -> Result, Error> { - if Self::total_staked(candidate).0.is_zero() { - Ok(Stake(shares.0.err_mul(&Self::initial_share_value().0)?)) - } else { - Self::shares_to_stake(candidate, shares) - } - } - - /// Convert an amount of staked currency to an amount of shares for given candidate. - /// Returns an error if there are no shares for that candidate. - fn stake_to_shares( - candidate: &Candidate, - stake: Stake, - ) -> Result, Error> { - let total_staked = Self::total_staked(candidate).0; - let supply = Self::shares_supply(candidate).0; - ensure!(!supply.is_zero(), Error::NoOneIsStaking); - - Ok(Shares(stake.0.mul_div(supply, total_staked)?)) - } - - fn computed_stake( - candidate: &Candidate, - delegator: &Delegator, - ) -> Result, Error> { - let shares = Self::shares(candidate, delegator); - if shares.0.is_zero() { - return Ok(Stake(Zero::zero())); - } - - Self::shares_to_stake(candidate, shares) - } - - /// Convert an amount of staked currency to an amount of shares for given candidate. - /// If this candidate have no shares then it uses `initial_share_value` to compute the value. - fn stake_to_shares_or_init( - candidate: &Candidate, - stake: Stake, - ) -> Result, Error> { - if Self::total_staked(candidate).0.is_zero() { - Ok(Shares( - stake - .0 - .checked_div(&Self::initial_share_value().0) - .ok_or(Error::::InvalidPalletSetting)?, - )) - } else { - Self::stake_to_shares(candidate, stake) - } - } - - /// Increase the total stake of a pool without creating new shares, which basically increase - /// the value of each share. - fn share_stake_among_holders( - candidate: &Candidate, - stake: Stake, - ) -> Result<(), Error> { - let total_staked = Self::total_staked(candidate).0; - let total_staked = total_staked.err_add(&stake.0)?; - Self::set_total_staked(candidate, Stake(total_staked)); - Ok(()) - } - - /// Decrease the total stake of a pool without creating new shares, which basically decrease - /// the value of each share. - fn slash_stake_among_holders( - candidate: &Candidate, - stake: Stake, - ) -> Result<(), Error> { - let total_staked = Self::total_staked(candidate).0; - let total_staked = total_staked.err_sub(&stake.0)?; - Self::set_total_staked(candidate, Stake(total_staked)); - Ok(()) - } - - /// Add new shares for that delegator towards the given candidate. - /// Function returns the value of those new shares. - /// Returns an error if underflow/overflows occurs. - fn add_shares( - candidate: &Candidate, - delegator: &Delegator, - shares: Shares, - ) -> Result, Error> { - ensure!(!shares.0.is_zero(), Error::StakeMustBeNonZero); - - let stake = Self::shares_to_stake_or_init(candidate, shares)?; - - let new_shares_supply = Self::shares_supply(candidate).0.err_add(&shares.0)?; - let new_shares = Self::shares(candidate, delegator).0.err_add(&shares.0)?; - let new_total_stake = Self::total_staked(candidate).0.err_add(&stake.0)?; - - Self::set_shares_supply(candidate, Shares(new_shares_supply)); - Self::set_shares(candidate, delegator, Shares(new_shares)); - Self::set_total_staked(candidate, Stake(new_total_stake)); - - Ok(stake) - } - - /// Remove shares for that delegator towards the given candidate. - /// Function returns the value of those removed shares. - /// Returns an error if that delegator don't have enough shares or if underflow/overflows occurs. - fn sub_shares( - candidate: &Candidate, - delegator: &Delegator, - shares: Shares, - ) -> Result, Error> { - ensure!(!shares.0.is_zero(), Error::StakeMustBeNonZero); - - let stake = Self::shares_to_stake(candidate, shares)?; - - let new_shares_supply = Self::shares_supply(candidate).0.err_sub(&shares.0)?; - let new_shares = Self::shares(candidate, delegator).0.err_sub(&shares.0)?; - let new_total_stake = Self::total_staked(candidate).0.err_sub(&stake.0)?; - - Self::set_shares_supply(candidate, Shares(new_shares_supply)); - Self::set_shares(candidate, delegator, Shares(new_shares)); - Self::set_total_staked(candidate, Stake(new_total_stake)); - - Ok(stake) - } - - fn increase_hold( - candidate: &Candidate, - delegator: &Delegator, - stake: &Stake, - ) -> Result<(), Error> { - let hold = Self::hold(candidate, delegator); - let hold = hold.0.err_add(&stake.0)?; - Self::set_hold(candidate, delegator, Stake(hold)); - Ok(()) - } - - fn decrease_hold( - candidate: &Candidate, - delegator: &Delegator, - stake: &Stake, - ) -> Result<(), Error> { - let hold = Self::hold(candidate, delegator); - let hold = hold.0.err_sub(&stake.0)?; - Self::set_hold(candidate, delegator, Stake(hold)); - Ok(()) - } -} - -pub fn check_candidate_consistency(candidate: &Candidate) -> Result<(), Error> { - let total0 = Pools::::get(candidate, &PoolsKey::CandidateTotalStake); - - let joining = Joining::::total_staked(candidate).0; - let auto = AutoCompounding::::total_staked(candidate).0; - let manual = ManualRewards::::total_staked(candidate).0; - - let total1 = joining - .checked_add(&auto) - .ok_or(Error::InconsistentState)? - .checked_add(&manual) - .ok_or(Error::InconsistentState)?; - - ensure!(total0 == total1, Error::InconsistentState); - - Ok(()) -} - -macro_rules! impl_pool { - ($name:ident, $shares:ident, $supply:ident, $total:ident, $hold: ident, $init:expr $(,)?) => { - pub struct $name(PhantomData); - impl Pool for $name { - fn shares(candidate: &Candidate, delegator: &Delegator) -> Shares { - Shares(Pools::::get( - candidate, - &PoolsKey::$shares { - delegator: delegator.clone(), - }, - )) - } - - fn shares_supply(candidate: &Candidate) -> Shares { - Shares(Pools::::get(candidate, &PoolsKey::$supply)) - } - - fn total_staked(candidate: &Candidate) -> Stake { - Stake(Pools::::get(candidate, &PoolsKey::$total)) - } - - fn hold(candidate: &Candidate, delegator: &Delegator) -> Stake { - Stake(Pools::::get( - candidate, - &PoolsKey::$hold { - delegator: delegator.clone(), - }, - )) - } - - fn set_shares( - candidate: &Candidate, - delegator: &Delegator, - value: Shares, - ) { - Pools::::set( - candidate, - &PoolsKey::$shares { - delegator: delegator.clone(), - }, - value.0, - ) - } - - fn set_shares_supply(candidate: &Candidate, value: Shares) { - Pools::::set(candidate, &PoolsKey::$supply, value.0) - } - - fn set_total_staked(candidate: &Candidate, value: Stake) { - Pools::::set(candidate, &PoolsKey::$total, value.0) - } - - fn set_hold( - candidate: &Candidate, - delegator: &Delegator, - value: Stake, - ) { - Pools::::set( - candidate, - &PoolsKey::$hold { - delegator: delegator.clone(), - }, - value.0, - ) - } - - fn initial_share_value() -> Stake { - Stake($init) - } - } - }; -} - -impl_pool!( - Joining, - JoiningShares, - JoiningSharesSupply, - JoiningSharesTotalStaked, - JoiningSharesHeldStake, - if cfg!(test) { 2u32 } else { 1 }.into(), -); - -impl_pool!( - AutoCompounding, - AutoCompoundingShares, - AutoCompoundingSharesSupply, - AutoCompoundingSharesTotalStaked, - AutoCompoundingSharesHeldStake, - T::InitialAutoCompoundingShareValue::get(), -); - -impl_pool!( - ManualRewards, - ManualRewardsShares, - ManualRewardsSharesSupply, - ManualRewardsSharesTotalStaked, - ManualRewardsSharesHeldStake, - T::InitialManualClaimShareValue::get(), -); - -impl_pool!( - Leaving, - LeavingShares, - LeavingSharesSupply, - LeavingSharesTotalStaked, - LeavingSharesHeldStake, - if cfg!(test) { 3u32 } else { 1u32 }.into(), -); - -impl ManualRewards { - #[allow(dead_code)] - pub fn pending_rewards( - candidate: &Candidate, - delegator: &Delegator, - ) -> Result, Error> { - let shares = Self::shares(candidate, delegator); - - if shares.0.is_zero() { - return Ok(Stake(0u32.into())); - } - - let counter = Pools::::get(candidate, &PoolsKey::ManualRewardsCounter); - let checkpoint = Pools::::get( - candidate, - &PoolsKey::ManualRewardsCheckpoint { - delegator: delegator.clone(), - }, - ); - - // TODO: Should be safe to wrap around. - let diff = counter.err_sub(&checkpoint)?; - Ok(Stake(diff.err_mul(&shares.0)?)) - } - - /// Increase the rewards of the ManualRewards pool with best effort. - /// Returns the actual amount distributed (after rounding). - pub fn increase_rewards( - candidate: &Candidate, - rewards: Stake, - ) -> Result, Error> { - let Shares(supply) = Self::shares_supply(candidate); - if supply.is_zero() { - return Ok(Stake(Zero::zero())); - } - - let rewards_per_share = rewards - .0 - .checked_div(&supply) - .ok_or(Error::::InconsistentState)?; - if rewards_per_share.is_zero() { - return Ok(Stake(Zero::zero())); - } - - let rewards = rewards_per_share.err_mul(&supply)?; - - let counter = Pools::::get(candidate, &PoolsKey::ManualRewardsCounter); - let counter = counter.err_add(&rewards_per_share)?; - Pools::::set(candidate, &PoolsKey::ManualRewardsCounter, counter); - - Ok(Stake(rewards)) - } - - pub fn claim_rewards( - candidate: &Candidate, - delegator: &Delegator, - ) -> Result, Error> { - let shares = Self::shares(candidate, delegator); - - let counter = Pools::::get(candidate, &PoolsKey::ManualRewardsCounter); - let checkpoint = Pools::::get( - candidate, - &PoolsKey::ManualRewardsCheckpoint { - delegator: delegator.clone(), - }, - ); - - // TODO: Should be safe to wrap around. - let diff = counter.err_sub(&checkpoint)?; - - if diff.is_zero() { - return Ok(Stake(0u32.into())); - } - - let rewards = diff.err_mul(&shares.0)?; - - // Update checkpoint - Pools::::set( - candidate, - &PoolsKey::ManualRewardsCheckpoint { - delegator: delegator.clone(), - }, - counter, - ); - - Ok(Stake(rewards)) - } -} - -/// Perform rewards distribution for the provided candidate. -/// -/// The pallet considered that it already posses the rewards in its account, -/// and it is the responsibility of the caller to transfer or mint the currency -/// to the staking pallet account. -/// -/// Rewards are split using `RewardsCollatorCommission` between the candidate -/// and all the delegators (including the candidate self-delegation). For each, -/// the rewards are then split according to the value of all the ManualRewards -/// and AutoCompounding shares. -/// -/// As candidate rewards will give increase the candidate auto compounding -/// self-delegation, the delegator rewards are distributed first. ManualRewards -/// pool rewards are first distributed by increasing the pool counter, which may -/// result in some rounding. As distributing the AutoCompounding pool rewards -/// consists of simply increasing `AutoCompoundingSharesTotalStaked`, it is not -/// subject to rounding and it can absorb the rounding dust from ManualRewards -/// reward distribution. -/// -/// Then it is time to distribute the candidate dedicated rewards. For -/// AutoCompounding, it is as if the candidate received the rewards then -/// self-delegated (instantly). It is thus implemented by creating new -/// AutoCompounding shares. This can lead to some rounding, which will be -/// absorbed in the ManualRewards distribution, which simply consist of -/// transfering the funds to the candidate account. -#[frame_support::transactional] -pub fn distribute_rewards( - candidate: &Candidate, - rewards: CreditOf, -) -> DispatchResultWithPostInfo { - let candidate_manual_rewards = distribute_rewards_inner::(candidate, rewards.peek())?; - - let (candidate_manual_rewards, other_rewards) = rewards.split(candidate_manual_rewards); - - if !candidate_manual_rewards.peek().is_zero() { - T::Currency::resolve(candidate, candidate_manual_rewards) - .map_err(|_| DispatchError::NoProviders)?; - } - - T::Currency::resolve(&T::StakingAccount::get(), other_rewards) - .map_err(|_| DispatchError::NoProviders)?; - - Ok(Some(T::WeightInfo::distribute_rewards()).into()) -} - -fn distribute_rewards_inner( - candidate: &Candidate, - rewards: T::Balance, -) -> Result> { - // `RewardsCollatorCommission` is a `Perbill` so we're not worried about overflow. - let candidate_rewards = T::RewardsCollatorCommission::get() * rewards; - let delegators_rewards = rewards.err_sub(&candidate_rewards)?; - - let Stake(auto_total_stake) = AutoCompounding::::total_staked(candidate); - let Stake(manual_total_stake) = ManualRewards::::total_staked(candidate); - let combined_total_stake = auto_total_stake.err_add(&manual_total_stake)?; - - let candidate_manual_stake = if manual_total_stake.is_zero() { - Zero::zero() - } else { - ManualRewards::::computed_stake(candidate, candidate)?.0 - }; - - // Distribute delegators ManualRewards rewards, it implies some rounding. - let delegators_manual_rewards = if manual_total_stake.is_zero() { - Zero::zero() - } else { - let rewards = delegators_rewards.mul_div(manual_total_stake, combined_total_stake)?; - ManualRewards::::increase_rewards(candidate, Stake(rewards))?.0 - }; - - // Distribute delegators AutoCompounding rewards with dust from ManualRewards. - // If there is no auto compounding stake but auto compounding rewards it - // means it comes from manual rewards rounding. Having non-zero total stake - // with 0 share supply will cause issues, so in this case we distribute this - // dust as candidate manual rewards. - let delegators_auto_rewards = delegators_rewards.err_sub(&delegators_manual_rewards)?; - let (delegators_auto_rewards, delegators_auto_dust) = if !auto_total_stake.is_zero() { - AutoCompounding::::share_stake_among_holders(candidate, Stake(delegators_auto_rewards))?; - (delegators_auto_rewards, Zero::zero()) - } else { - (Zero::zero(), delegators_auto_rewards) - }; - - // Distribute candidate AutoCompounding rewards, it implies some rounding. - let candidate_auto_rewards = if auto_total_stake.is_zero() { - Zero::zero() - } else { - 'a: { - let candidate_auto_stake = - AutoCompounding::::computed_stake(candidate, candidate)?.0; - let candidate_combined_stake = candidate_manual_stake.err_add(&candidate_auto_stake)?; - - if candidate_combined_stake.is_zero() { - break 'a Zero::zero(); - } - - let rewards = - candidate_rewards.mul_div(candidate_auto_stake, candidate_combined_stake)?; - let new_shares = AutoCompounding::::stake_to_shares(candidate, Stake(rewards))?; - - if new_shares.0.is_zero() { - break 'a Zero::zero(); - } - - AutoCompounding::::add_shares(candidate, candidate, new_shares)?.0 - } - }; - - // Distribute candidate ManualRewards rewards with dust from AutoCompounding. - // The amount is returned by the function and will be transfered to the candidate account. - let candidate_manual_rewards = candidate_rewards - .err_sub(&candidate_auto_rewards)? - .err_add(&delegators_auto_dust)?; - - let additional_stake = delegators_auto_rewards.err_add(&candidate_auto_rewards)?; - Candidates::::add_total_stake(candidate, &Stake(additional_stake))?; - - Pallet::::deposit_event(Event::::RewardedCollator { - collator: candidate.clone(), - auto_compounding_rewards: candidate_auto_rewards, - manual_claim_rewards: candidate_manual_rewards, - }); - Pallet::::deposit_event(Event::::RewardedDelegators { - collator: candidate.clone(), - auto_compounding_rewards: delegators_auto_rewards, - manual_claim_rewards: delegators_manual_rewards, - }); - - Ok(candidate_manual_rewards) -} diff --git a/pallets/pooled-staking/src/tests/candidates.rs b/pallets/pooled-staking/src/tests/candidates.rs deleted file mode 100644 index 528cb48..0000000 --- a/pallets/pooled-staking/src/tests/candidates.rs +++ /dev/null @@ -1,510 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use crate::{assert_eq_last_events, candidate::EligibleCandidate, SortedEligibleCandidates}; - -use super::*; - -pool_test!( - fn self_delegation_below_minimum

() { - ExtBuilder::default().build().execute_with(|| { - let requested_amount = MinimumSelfDelegation::get() - 1; - let final_amount = round_down( - requested_amount, - P::shares_to_stake_or_init(&ACCOUNT_CANDIDATE_1, Shares(1)) - .unwrap() - .0, - ); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - request_amount: requested_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - assert_eq_events!(vec![ - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: round_down(requested_amount, 2), - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: round_down(requested_amount, 2), - self_delegation: round_down(requested_amount, 2), - before: None, - after: None, - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - pending: round_down(requested_amount, 2), - }, - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: round_down(requested_amount, 2) - final_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: final_amount, - self_delegation: final_amount, - before: None, - after: None, - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_CANDIDATE_1, 9, final_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - staked: final_amount, - released: round_down(requested_amount, 2) - final_amount, - }, - ]); - }) - } -); - -pool_test!( - fn self_delegation_above_minimum

() { - ExtBuilder::default().build().execute_with(|| { - let requested_amount = MinimumSelfDelegation::get(); - let final_amount = round_down( - requested_amount, - P::shares_to_stake_or_init(&ACCOUNT_CANDIDATE_1, Shares(1)) - .unwrap() - .0, - ); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - request_amount: requested_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - request_amount: requested_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - FullUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - request_amount: SharesOrStake::Stake(requested_amount * 2), - expected_removed: requested_amount * 2, - expected_leaving: round_down(requested_amount * 2, 3), - ..default() - } - .test::

(); - - assert_eq_events!(vec![ - // delegation 1 - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: round_down(requested_amount, 2), - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: round_down(requested_amount, 2), - self_delegation: round_down(requested_amount, 2), - before: None, - after: Some(0), - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - pending: round_down(requested_amount, 2), - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_CANDIDATE_1, 10, final_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - staked: final_amount, - released: round_down(requested_amount, 2) - final_amount, - }, - // delegation 2 - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: round_down(requested_amount, 2), - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: round_down(requested_amount * 2, 2), - self_delegation: round_down(requested_amount * 2, 2), - before: Some(0), - after: Some(0), - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - pending: round_down(requested_amount, 2), - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_CANDIDATE_1, 10, final_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: P::target_pool(), - staked: final_amount, - released: round_down(requested_amount, 2) - final_amount, - }, - // undelegation - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: requested_amount * 2, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: 0, - self_delegation: 0, - before: Some(0), - after: None, - }, - Event::RequestedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - from: P::target_pool(), - pending: round_down(requested_amount * 2, 3), - released: 2, - }, - Event::ExecutedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - released: round_down(requested_amount * 2, 3) - } - ]); - }) - } -); - -#[test] -fn many_candidates_mixed_pools() { - ExtBuilder::default().build().execute_with(|| { - let share = InitialAutoCompoundingShareValue::get(); - // for simplicity we consider shares of both pools have the same value. - assert_eq!( - InitialAutoCompoundingShareValue::get(), - InitialManualClaimShareValue::get() - ); - - struct Action { - candidate: AccountId, - delegator: AccountId, - join: bool, - auto: bool, - amount: Balance, - total_stake: Balance, - total_self: Balance, - - rank_before: Option, - rank_after: Option, - } - - fn perform_actions(actions: &[Action]) { - let share = InitialAutoCompoundingShareValue::get(); - for action in actions { - match action { - Action { - join: true, - auto: true, - .. - } => { - FullDelegation { - candidate: action.candidate, - delegator: action.delegator, - request_amount: action.amount, - expected_increase: action.amount, - ..default() - } - .test::>(); - - assert_eq_last_events!(vec![ - Event::::IncreasedStake { - candidate: action.candidate, - stake_diff: action.amount, - }, - Event::UpdatedCandidatePosition { - candidate: action.candidate, - stake: action.total_stake, - self_delegation: action.total_self, - before: action.rank_before, - after: action.rank_after, - }, - Event::RequestedDelegate { - candidate: action.candidate, - delegator: action.delegator, - pool: TargetPool::AutoCompounding, - pending: action.amount, - }, - Event::StakedAutoCompounding { - candidate: action.candidate, - delegator: action.delegator, - shares: action.amount / share, - stake: action.amount, - }, - Event::ExecutedDelegate { - candidate: action.candidate, - delegator: action.delegator, - pool: TargetPool::AutoCompounding, - staked: action.amount, - released: 0, - }, - ]) - } - Action { - join: true, - auto: false, - .. - } => { - FullDelegation { - candidate: action.candidate, - delegator: action.delegator, - request_amount: action.amount, - expected_increase: action.amount, - ..default() - } - .test::>(); - - assert_eq_last_events!(vec![ - Event::::IncreasedStake { - candidate: action.candidate, - stake_diff: action.amount, - }, - Event::UpdatedCandidatePosition { - candidate: action.candidate, - stake: action.total_stake, - self_delegation: action.total_self, - before: action.rank_before, - after: action.rank_after, - }, - Event::RequestedDelegate { - candidate: action.candidate, - delegator: action.delegator, - pool: TargetPool::ManualRewards, - pending: action.amount, - }, - Event::StakedManualRewards { - candidate: action.candidate, - delegator: action.delegator, - shares: action.amount / share, - stake: action.amount, - }, - Event::ExecutedDelegate { - candidate: action.candidate, - delegator: action.delegator, - pool: TargetPool::ManualRewards, - staked: action.amount, - released: 0, - }, - ]) - } - Action { - join: false, - auto: true, - .. - } => { - FullUndelegation { - candidate: action.candidate, - delegator: action.delegator, - request_amount: SharesOrStake::Stake(action.amount), - expected_removed: action.amount, - expected_leaving: round_down(action.amount, 3), - ..default() - } - .test::>(); - - assert_eq_last_events!(vec![ - Event::::DecreasedStake { - candidate: action.candidate, - stake_diff: action.amount, - }, - Event::UpdatedCandidatePosition { - candidate: action.candidate, - stake: action.total_stake, - self_delegation: action.total_self, - before: action.rank_before, - after: action.rank_after, - }, - Event::RequestedUndelegate { - candidate: action.candidate, - delegator: action.delegator, - from: TargetPool::AutoCompounding, - pending: round_down(action.amount, 3), - released: action.amount - round_down(action.amount, 3), - }, - Event::ExecutedUndelegate { - candidate: action.candidate, - delegator: action.delegator, - released: round_down(action.amount, 3), - }, - ]) - } - _ => todo!(), - } - } - } - - perform_actions(&[ - Action { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - join: true, - auto: true, - amount: share * 11, - total_stake: share * 11, - total_self: share * 11, - rank_before: None, - rank_after: Some(0), - }, - Action { - candidate: ACCOUNT_CANDIDATE_2, - delegator: ACCOUNT_CANDIDATE_2, - join: true, - auto: false, - amount: share * 10, - total_stake: share * 10, - total_self: share * 10, - rank_before: None, - rank_after: Some(1), - }, - Action { - candidate: ACCOUNT_CANDIDATE_2, - delegator: ACCOUNT_DELEGATOR_1, - join: true, - auto: true, - amount: share * 3, - total_stake: share * 13, - total_self: share * 10, - rank_before: Some(1), - rank_after: Some(0), - }, - Action { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_2, - join: true, - auto: false, - amount: share, - total_stake: share * 12, - total_self: share * 11, - rank_before: Some(1), - rank_after: Some(1), - }, - Action { - candidate: ACCOUNT_DELEGATOR_1, - delegator: ACCOUNT_DELEGATOR_1, - join: true, - auto: true, - amount: share * 11, - total_stake: share * 11, - total_self: share * 11, - rank_before: None, - rank_after: Some(2), - }, - Action { - candidate: ACCOUNT_DELEGATOR_2, - delegator: ACCOUNT_DELEGATOR_2, - join: true, - auto: true, - amount: share * 10, - total_stake: share * 10, - total_self: share * 10, - rank_before: None, - rank_after: None, // list is full - }, - ]); - - assert_eq!( - SortedEligibleCandidates::::get().into_inner(), - vec![ - EligibleCandidate { - candidate: ACCOUNT_CANDIDATE_2, - stake: share * 13, - }, - EligibleCandidate { - candidate: ACCOUNT_CANDIDATE_1, - stake: share * 12, - }, - EligibleCandidate { - candidate: ACCOUNT_DELEGATOR_1, - stake: share * 11, - }, - ] - ); - - // We make candidate 1 leave, which doesn't make the out of list - // candidate back in the list. - perform_actions(&[Action { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - join: false, - auto: true, - amount: share * 11, - total_stake: share * 1, - total_self: 0, - rank_before: Some(1), - rank_after: None, - }]); - - assert_eq!( - SortedEligibleCandidates::::get().into_inner(), - vec![ - EligibleCandidate { - candidate: ACCOUNT_CANDIDATE_2, - stake: share * 13, - }, - EligibleCandidate { - candidate: ACCOUNT_DELEGATOR_1, - stake: share * 11, - }, - ] - ); - - // It needs to be done manually. - assert_ok!(Staking::update_candidate_position( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_2), - vec![ACCOUNT_DELEGATOR_2] - )); - - assert_eq!( - SortedEligibleCandidates::::get().into_inner(), - vec![ - EligibleCandidate { - candidate: ACCOUNT_CANDIDATE_2, - stake: share * 13, - }, - EligibleCandidate { - candidate: ACCOUNT_DELEGATOR_1, - stake: share * 11, - }, - EligibleCandidate { - candidate: ACCOUNT_DELEGATOR_2, - stake: share * 10, - }, - ] - ); - }) -} diff --git a/pallets/pooled-staking/src/tests/delegator_flow.rs b/pallets/pooled-staking/src/tests/delegator_flow.rs deleted file mode 100644 index fe25630..0000000 --- a/pallets/pooled-staking/src/tests/delegator_flow.rs +++ /dev/null @@ -1,571 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use {super::*, crate::assert_eq_last_events}; - -pool_test!( - fn empty_delegation

() { - ExtBuilder::default().build().execute_with(|| { - let before = State::extract(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - let pool_before = - PoolState::extract::(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - - assert_noop!( - Staking::request_delegate( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - ACCOUNT_CANDIDATE_1, - P::target_pool(), - 0 - ), - Error::::StakeMustBeNonZero - ); - - let after = State::extract(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - let pool_after = - PoolState::extract::(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - - assert_eq!(before, after); - assert_eq!(pool_before, pool_after); - - assert_eq_events!(Vec::>::new()); - }) - } -); - -pool_test!( - fn delegation_request

() { - ExtBuilder::default().build().execute_with(|| { - let amount = 3324; - RequestDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - amount: amount + 1, // to test joining rounding - expected_joining: amount, - } - .test(); - - assert_eq_events!(vec![ - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: amount, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - pending: amount - }, - ]); - }) - } -); - -pool_test!( - fn delegation_request_more_than_available

() { - ExtBuilder::default().build().execute_with(|| { - let amount = DEFAULT_BALANCE; // not enough to keep ED - - let before = State::extract(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - let pool_before = - PoolState::extract::(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - - assert_noop!( - Staking::request_delegate( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - ACCOUNT_CANDIDATE_1, - P::target_pool(), - amount, - ), - TokenError::FundsUnavailable - ); - - let after = State::extract(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - let pool_after = - PoolState::extract::(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1); - - assert_eq!(before, after); - assert_eq!(pool_before, pool_after); - - assert_eq_events!(Vec::>::new()); - }) - } -); - -pool_test!( - fn delegation_execution

() { - ExtBuilder::default().build().execute_with(|| { - let final_amount = 2 * SHARE_INIT; - let requested_amount = final_amount + 10; // test share rounding - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: requested_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - assert_eq_events!(vec![ - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: requested_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: requested_amount, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - pending: requested_amount, - }, - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: 10, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: final_amount, - self_delegation: 0, - before: None, - after: None, - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1, 2, final_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - staked: final_amount, - released: 10, - }, - ]); - }) - } -); - -pool_test!( - fn delegation_execution_too_soon

() { - ExtBuilder::default().build().execute_with(|| { - let final_amount = 2 * SHARE_INIT; - let block_number = block_number(); - - RequestDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - amount: final_amount, - expected_joining: final_amount, - } - .test(); - roll_to(block_number + BLOCKS_TO_WAIT - 1); // too soon - - assert_noop!( - Staking::execute_pending_operations( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - vec![PendingOperationQuery { - delegator: ACCOUNT_DELEGATOR_1, - operation: P::joining_operation_key(ACCOUNT_CANDIDATE_1, block_number) - }] - ), - Error::::RequestCannotBeExecuted(0) - ); - }) - } -); - -pool_test!( - fn undelegation_execution_too_soon

() { - ExtBuilder::default().build().execute_with(|| { - let final_amount = 2 * SHARE_INIT; - let leaving_amount = round_down(final_amount, 3); // test leaving rounding - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: final_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - let block_number = block_number(); - - RequestUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: SharesOrStake::Stake(final_amount), - expected_removed: final_amount, - expected_leaving: leaving_amount, - ..default() - } - .test::

(); - - roll_to(block_number + BLOCKS_TO_WAIT - 1); // too soon - assert_noop!( - Staking::execute_pending_operations( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - vec![PendingOperationQuery { - delegator: ACCOUNT_DELEGATOR_1, - operation: PendingOperationKey::Leaving { - candidate: ACCOUNT_CANDIDATE_1, - at: block_number, - } - }] - ), - Error::::RequestCannotBeExecuted(0) - ); - }) - } -); - -pool_test!( - fn undelegation_execution

() { - ExtBuilder::default().build().execute_with(|| { - let final_amount = 2 * SHARE_INIT; - let requested_amount = final_amount + 10; // test share rounding - let leaving_amount = round_down(final_amount, 3); // test leaving rounding - - assert_eq!(leaving_amount, 1_999_998); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: requested_amount, - expected_increase: final_amount, - ..default() - } - .test::

(); - - FullUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: SharesOrStake::Stake(final_amount), - expected_removed: final_amount, - expected_leaving: leaving_amount, - ..default() - } - .test::

(); - - assert_eq_events!(vec![ - // delegate request - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: requested_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: requested_amount, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - pending: requested_amount - }, - // delegate exec - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: 10, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: final_amount, - self_delegation: 0, - before: None, - after: None, - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1, 2, final_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - staked: final_amount, - released: 10, - }, - // undelegate request - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: final_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: 0, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - from: P::target_pool(), - pending: leaving_amount, - released: 2 - }, - // undelegate exec - Event::ExecutedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - released: leaving_amount, - }, - ]); - }) - } -); - -pool_test!( - fn undelegation_execution_amount_in_shares

() { - ExtBuilder::default().build().execute_with(|| { - let joining_amount = 2 * SHARE_INIT; - let joining_requested_amount = joining_amount + 10; // test share rounding - - let leaving_requested_amount = SHARE_INIT; - let leaving_amount = round_down(leaving_requested_amount, 3); // test leaving rounding - - assert_eq!(leaving_amount, 999_999); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: joining_requested_amount, - expected_increase: joining_amount, - ..default() - } - .test::

(); - - FullUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: SharesOrStake::Shares(1), - expected_removed: leaving_requested_amount, - expected_leaving: leaving_amount, - ..default() - } - .test::

(); - - assert_eq_events!(vec![ - // delegate request - Event::IncreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: joining_requested_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: joining_requested_amount, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - pending: joining_requested_amount - }, - // delegate exec - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: 10, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: joining_amount, - self_delegation: 0, - before: None, - after: None, - }, - P::event_staked(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1, 2, joining_amount), - Event::ExecutedDelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: P::target_pool(), - staked: joining_amount, - released: 10, - }, - // undelegate request - Event::DecreasedStake { - candidate: ACCOUNT_CANDIDATE_1, - stake_diff: leaving_requested_amount, - }, - Event::UpdatedCandidatePosition { - candidate: ACCOUNT_CANDIDATE_1, - stake: joining_amount - leaving_requested_amount, - self_delegation: 0, - before: None, - after: None, - }, - Event::RequestedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - from: P::target_pool(), - pending: leaving_amount, - released: 1 - }, - // undelegate exec - Event::ExecutedUndelegate { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - released: leaving_amount, - }, - ]); - }) - } -); - -pool_test!( - fn swap_works

() { - ExtBuilder::default().build().execute_with(|| { - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: 10 * SHARE_INIT, - expected_increase: 10 * SHARE_INIT, - ..default() - } - .test::

(); - - Swap { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - requested_amount: SharesOrStake::Stake(5 * SHARE_INIT + 10), - expected_removed: 5 * SHARE_INIT, - expected_restaked: 5 * SHARE_INIT, - ..default() - } - .test::

(); - - assert_eq_last_events!(vec![Event::::SwappedPool { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - source_pool: P::target_pool(), - source_shares: 5, - source_stake: 5 * SHARE_INIT, - target_shares: 5, - target_stake: 5 * SHARE_INIT, - pending_leaving: 0, - released: 0, - }]); - }) - } -); - -pool_test!( - fn swap_too_much

() { - ExtBuilder::default().build().execute_with(|| { - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: 10 * SHARE_INIT, - expected_increase: 10 * SHARE_INIT, - ..default() - } - .test::

(); - - assert_noop!( - Staking::swap_pool( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - ACCOUNT_CANDIDATE_1, - P::target_pool(), - SharesOrStake::Shares(11), - ), - Error::::MathUnderflow - ); - }) - } -); - -pool_test!( - fn swap_with_rounding

() { - ExtBuilder::default().build().execute_with(|| { - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: 10 * SHARE_INIT, - expected_increase: 10 * SHARE_INIT, - ..default() - } - .test::

(); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: 1 * SHARE_INIT, - expected_increase: 1 * SHARE_INIT, - ..default() - } - .test::(); - - // We then artificialy distribute rewards to the target by increasing the value of the pool - // and minting currency to the staking account (this is not how manual rewards would - // be distributed but whatever). - let rewards = 5 * KILO; - assert_ok!(Balances::mint_into(&ACCOUNT_STAKING, rewards)); - assert_ok!(P::OppositePool::share_stake_among_holders( - &ACCOUNT_CANDIDATE_1, - Stake(rewards) - )); - assert_ok!(Candidates::::add_total_stake( - &ACCOUNT_CANDIDATE_1, - &Stake(rewards) - )); - - Swap { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - requested_amount: SharesOrStake::Stake(5 * SHARE_INIT + 10), - expected_removed: 5 * SHARE_INIT, - // due to 1 target share now being worth a bit more than SHARE_INIT, - // only 4 target shares can be restaked - expected_restaked: 4_020_000, - // remaining amount is put in the leaving pool, rounded down - // to the closest multiple of 3 (test leaving share init value) - expected_leaving: 979_998, - // thus the 2 stake that could not be put in the leaving pool - // are directly released - expected_released: 2, - ..default() - } - .test::

(); - - assert_eq_last_events!(vec![Event::::SwappedPool { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - source_pool: P::target_pool(), - source_shares: 5, - source_stake: 5 * SHARE_INIT, - target_shares: 4, - target_stake: 4_020_000, - pending_leaving: 979_998, - released: 2, - }]); - }) - } -); diff --git a/pallets/pooled-staking/src/tests/manual_rewards.rs b/pallets/pooled-staking/src/tests/manual_rewards.rs deleted file mode 100644 index 5998915..0000000 --- a/pallets/pooled-staking/src/tests/manual_rewards.rs +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use {super::*, crate::PoolsKey}; - -fn pending_rewards(candicate: AccountId, delegator: AccountId) -> Balance { - pools::ManualRewards::::pending_rewards(&candicate, &delegator) - .unwrap() - .0 -} - -#[test] -fn first_delegation_init_checkpoint() { - ExtBuilder::default().build().execute_with(|| { - // Set counter to simulate past rewards. - // New delegator should not receive any rewards when joining - // and their checkpoint should be set to the current counter. - let counter = 10; - crate::Pools::::set( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCounter, - counter, - ); - - assert_eq!(pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), 0); - - let amount = 2 * SHARE_INIT; - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: amount, - expected_increase: amount, - ..default() - } - .test::>(); - - let checkpoint = crate::Pools::::get( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCheckpoint { - delegator: ACCOUNT_DELEGATOR_1, - }, - ); - assert_eq!(checkpoint, counter); - assert_eq!(pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), 0); - }); -} - -#[test] -fn second_delegation_transfer_rewards() { - ExtBuilder::default().build().execute_with(|| { - let amount = 2 * SHARE_INIT; - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: amount, - expected_increase: amount, - ..default() - } - .test::>(); - - // Set counter to simulate rewards. - let counter = 10; - crate::Pools::::set( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCounter, - counter, - ); - - let expected_rewards = 20; // 10 coins (counter) * 2 shares - assert_eq!( - pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), - expected_rewards - ); - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: amount, - expected_increase: amount, - expected_manual_rewards: expected_rewards, - } - .test::>(); - - let checkpoint = crate::Pools::::get( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCheckpoint { - delegator: ACCOUNT_DELEGATOR_1, - }, - ); - assert_eq!(checkpoint, counter); - assert_eq!(pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), 0); - }); -} - -#[test] -fn undelegation_transfer_rewards() { - ExtBuilder::default().build().execute_with(|| { - let amount = 2 * SHARE_INIT; - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: amount, - expected_increase: amount, - ..default() - } - .test::>(); - - // Set counter to simulate rewards. - let counter = 10; - crate::Pools::::set( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCounter, - counter, - ); - - let expected_rewards = 20; // 10 coins (counter) * 2 shares - assert_eq!( - pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), - expected_rewards - ); - - let final_amount = 2 * SHARE_INIT; - let leaving_amount = round_down(final_amount, 3); // test leaving rounding - - RequestUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: SharesOrStake::Stake(final_amount), - expected_removed: final_amount, - expected_leaving: leaving_amount, - expected_manual_rewards: expected_rewards, - ..default() - } - .test::>(); - - let checkpoint = crate::Pools::::get( - ACCOUNT_CANDIDATE_1, - &PoolsKey::ManualRewardsCheckpoint { - delegator: ACCOUNT_DELEGATOR_1, - }, - ); - assert_eq!(checkpoint, counter); - assert_eq!(pending_rewards(ACCOUNT_CANDIDATE_1, ACCOUNT_DELEGATOR_1), 0); - }); -} diff --git a/pallets/pooled-staking/src/tests/mod.rs b/pallets/pooled-staking/src/tests/mod.rs deleted file mode 100644 index 05d1201..0000000 --- a/pallets/pooled-staking/src/tests/mod.rs +++ /dev/null @@ -1,588 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -mod candidates; -mod delegator_flow; -mod manual_rewards; -mod rebalance; -mod rewards; - -use { - crate::{ - assert_eq_events, assert_fields_eq, - candidate::Candidates, - mock::*, - pool_test, - pools::{self, Pool}, - AllTargetPool, Error, Event, PendingOperationKey, PendingOperationQuery, PendingOperations, - Shares, SharesOrStake, Stake, TargetPool, - }, - frame_support::{ - assert_noop, assert_ok, - traits::tokens::fungible::{Balanced, Mutate}, - }, - sp_runtime::TokenError, -}; - -pub type Joining = pools::Joining; -pub type Leaving = pools::Leaving; - -pub fn default() -> T { - Default::default() -} - -pub(crate) fn operation_stake( - candidate: AccountId, - delegator: AccountId, - pool: TargetPool, - at: u64, -) -> Balance { - let operation_key = match pool { - TargetPool::AutoCompounding => { - PendingOperationKey::JoiningAutoCompounding { candidate, at } - } - TargetPool::ManualRewards => PendingOperationKey::JoiningManualRewards { candidate, at }, - }; - - let shares = PendingOperations::::get(delegator, operation_key); - if shares == 0 { - return 0; - } - - Joining::shares_to_stake(&candidate, Shares(shares)) - .unwrap() - .0 -} - -#[must_use] -pub(crate) struct RequestDelegation { - candidate: AccountId, - delegator: AccountId, - pool: TargetPool, - amount: Balance, - expected_joining: Balance, -} - -impl RequestDelegation { - pub fn test(self) { - let Self { - candidate, - delegator, - pool, - amount, - expected_joining, - } = self; - - let now = block_number(); - - let before = State::extract(candidate, delegator); - let pool_before = PoolState::extract::(candidate, delegator); - let operation_before = operation_stake(candidate, delegator, pool, now); - - assert_ok!(Staking::request_delegate( - RuntimeOrigin::signed(delegator), - candidate, - pool, - amount, - )); - - let after = State::extract(candidate, delegator); - let pool_after = PoolState::extract::(candidate, delegator); - let operation_after = operation_stake(candidate, delegator, pool, now); - - // Actual balances don't change - assert_fields_eq!(before, after, [delegator_balance, staking_balance]); - assert_eq!( - before.delegator_hold + expected_joining, - after.delegator_hold - ); - assert_eq!(pool_before.hold + expected_joining, pool_after.hold); - assert_eq!(pool_before.stake + expected_joining, pool_after.stake); - assert_eq!( - before.candidate_total_stake + expected_joining, - after.candidate_total_stake - ); - assert_eq!(operation_before + expected_joining, operation_after); - } -} - -#[must_use] -#[derive(Default)] -pub(crate) struct ExecuteDelegation { - candidate: AccountId, - delegator: AccountId, - block_number: u64, - expected_increase: Balance, - expected_manual_rewards: Balance, -} - -impl ExecuteDelegation { - pub fn test>(self) { - let Self { - candidate, - delegator, - block_number, - expected_increase, - expected_manual_rewards, - } = self; - - let before = State::extract(candidate, delegator); - let joining_before = PoolState::extract::(candidate, delegator); - let pool_before = PoolState::extract::

(candidate, delegator); - let request_before = crate::PendingOperations::::get( - delegator, - P::joining_operation_key(candidate, block_number), - ); - let request_before = - pools::Joining::::shares_to_stake(&candidate, Shares(request_before)) - .unwrap() - .0; - - let refund = request_before - .checked_sub(expected_increase) - .expect("expected increase should be <= requested amount"); - - assert_ok!(Staking::execute_pending_operations( - RuntimeOrigin::signed(delegator), - vec![PendingOperationQuery { - delegator, - operation: P::joining_operation_key(candidate, block_number) - }] - )); - - let after = State::extract(candidate, delegator); - let joining_after = PoolState::extract::(candidate, delegator); - let pool_after = PoolState::extract::

(candidate, delegator); - let request_after = crate::PendingOperations::::get( - delegator, - P::joining_operation_key(candidate, block_number), - ); - - // Actual balances changes only due to manuyal rewards. - assert_eq!( - before.delegator_balance + expected_manual_rewards, - after.delegator_balance - ); - assert_eq!( - before.staking_balance - expected_manual_rewards, - after.staking_balance - ); - // However funds are held (with share rounding released) - assert_eq!(request_after, 0); - - assert_eq!(before.delegator_hold - refund, after.delegator_hold); - assert_eq!( - before.candidate_total_stake - refund, - after.candidate_total_stake - ); - - assert_eq!(joining_before.hold - request_before, joining_after.hold); - assert_eq!(joining_before.stake - request_before, joining_after.stake); - - assert_eq!(pool_before.hold + expected_increase, pool_after.hold); - assert_eq!(pool_before.stake + expected_increase, pool_after.stake); - } -} - -#[must_use] -#[derive(Default)] -pub(crate) struct FullDelegation { - candidate: AccountId, - delegator: AccountId, - request_amount: Balance, - expected_increase: Balance, - expected_manual_rewards: Balance, -} - -impl FullDelegation { - pub fn test>(self) { - let Self { - candidate, - delegator, - request_amount, - expected_increase, - expected_manual_rewards, - } = self; - - let block_number = block_number(); - - RequestDelegation { - candidate, - delegator, - pool: P::target_pool(), - amount: request_amount, - expected_joining: round_down(request_amount, 2), - } - .test(); - - roll_to(block_number + BLOCKS_TO_WAIT); - - ExecuteDelegation { - candidate, - delegator, - block_number, - expected_increase, - expected_manual_rewards, - } - .test::

(); - } -} - -#[must_use] -pub(crate) struct RequestUndelegation { - candidate: AccountId, - delegator: AccountId, - request_amount: SharesOrStake, - expected_removed: Balance, - expected_leaving: Balance, - expected_manual_rewards: Balance, - expected_hold_rebalance: Balance, -} - -impl Default for RequestUndelegation { - fn default() -> Self { - Self { - candidate: 0, - delegator: 0, - request_amount: SharesOrStake::Stake(0), - expected_removed: 0, - expected_leaving: 0, - expected_manual_rewards: 0, - expected_hold_rebalance: 0, - } - } -} - -impl RequestUndelegation { - pub fn test>(self) { - let Self { - candidate, - delegator, - request_amount, - expected_removed, - expected_leaving, - expected_manual_rewards, - expected_hold_rebalance, - } = self; - - let dust = expected_removed - .checked_sub(expected_leaving) - .expect("should removed >= leaving"); - - let before = State::extract(candidate, delegator); - let pool_before = PoolState::extract::

(candidate, delegator); - let leaving_before = PoolState::extract::(candidate, delegator); - - assert_ok!(Staking::request_undelegate( - RuntimeOrigin::signed(delegator), - candidate, - P::target_pool(), - request_amount, - )); - - let after = State::extract(candidate, delegator); - let pool_after = PoolState::extract::

(candidate, delegator); - let leaving_after = PoolState::extract::(candidate, delegator); - - // Actual balances changes due to manual rewards and hold rebalance. - assert_eq!( - before.delegator_balance + expected_manual_rewards + expected_hold_rebalance, - after.delegator_balance - ); - assert_eq!( - before.staking_balance - expected_manual_rewards - expected_hold_rebalance, - after.staking_balance - ); - // Dust is released immediately. - assert_eq!( - before.delegator_hold - dust + expected_hold_rebalance, - after.delegator_hold - ); - // Pool decrease. - assert_eq!(pool_before.stake - expected_removed, pool_after.stake); - assert_eq!( - pool_before.hold + expected_hold_rebalance - expected_removed, - pool_after.stake - ); - // Leaving increase. - assert_eq!(leaving_before.stake + expected_leaving, leaving_after.stake); - assert_eq!(leaving_before.hold + expected_leaving, leaving_after.stake); - // Stake no longer contribute to election - assert_eq!( - before.candidate_total_stake - expected_removed, - after.candidate_total_stake - ); - } -} - -#[must_use] -#[derive(Default)] -pub(crate) struct ExecuteUndelegation { - candidate: AccountId, - delegator: AccountId, - block_number: u64, - expected_decrease: Balance, -} - -impl ExecuteUndelegation { - pub fn test(self) { - let Self { - candidate, - delegator, - block_number, - expected_decrease, - } = self; - - let before = State::extract(candidate, delegator); - let leaving_before = PoolState::extract::(candidate, delegator); - - assert_ok!(Staking::execute_pending_operations( - RuntimeOrigin::signed(delegator), - vec![PendingOperationQuery { - delegator, - operation: PendingOperationKey::Leaving { - candidate, - at: block_number - } - }] - )); - - let after = State::extract(candidate, delegator); - let leaving_after = PoolState::extract::(candidate, delegator); - let request_after = crate::PendingOperations::::get( - delegator, - PendingOperationKey::Leaving { - candidate, - at: block_number, - }, - ); - - // Actual balances don't change - assert_fields_eq!(before, after, [delegator_balance, staking_balance]); - assert_eq!(request_after, 0); - assert_eq!( - before.delegator_hold - expected_decrease, - after.delegator_hold - ); - assert_fields_eq!(before, after, candidate_total_stake); - assert_eq!(leaving_before.hold - expected_decrease, leaving_after.hold); - assert_eq!( - leaving_before.stake - expected_decrease, - leaving_after.stake - ); - } -} - -#[must_use] -pub(crate) struct FullUndelegation { - candidate: AccountId, - delegator: AccountId, - request_amount: SharesOrStake, - expected_removed: Balance, - expected_leaving: Balance, - expected_hold_rebalance: Balance, -} - -impl Default for FullUndelegation { - fn default() -> Self { - Self { - candidate: 0, - delegator: 0, - request_amount: SharesOrStake::Stake(0), - expected_removed: 0, - expected_leaving: 0, - expected_hold_rebalance: 0, - } - } -} - -impl FullUndelegation { - pub fn test>(self) { - let Self { - candidate, - delegator, - request_amount, - expected_removed, - expected_leaving, - expected_hold_rebalance, - } = self; - - let block_number = block_number(); - RequestUndelegation { - candidate, - delegator, - request_amount, - expected_removed, - expected_leaving, - expected_hold_rebalance, - ..default() - } - .test::

(); - - roll_to(block_number + BLOCKS_TO_WAIT); - - ExecuteUndelegation { - candidate, - delegator, - block_number, - expected_decrease: expected_leaving, - } - .test(); - } -} - -pub(crate) fn do_rebalance_hold>( - candidate: AccountId, - delegator: AccountId, - target_pool: AllTargetPool, - expected_rebalance: SignedBalance, -) { - let before = State::extract(candidate, delegator); - let pool_before = PoolState::extract::

(candidate, delegator); - - assert_ok!(Staking::rebalance_hold( - RuntimeOrigin::signed(ACCOUNT_DELEGATOR_1), - ACCOUNT_CANDIDATE_1, - ACCOUNT_DELEGATOR_1, - target_pool - )); - - let after = State::extract(candidate, delegator); - let pool_after = PoolState::extract::

(candidate, delegator); - - // Balances should update - match expected_rebalance { - SignedBalance::Positive(balance) => { - assert_eq!(pool_before.hold + balance, pool_after.hold); - assert_eq!(before.delegator_balance + balance, after.delegator_balance); - assert_eq!(before.staking_balance - balance, after.staking_balance); - } - SignedBalance::Negative(balance) => { - assert_eq!(pool_before.hold - balance, pool_after.hold); - assert_eq!(before.delegator_balance - balance, after.delegator_balance); - assert_eq!(before.staking_balance + balance, after.staking_balance); - } - } - - // Stake stay the same. - assert_fields_eq!(pool_before, pool_after, stake); -} - -pub(crate) fn currency_issue(amount: Balance) -> crate::CreditOf { - <::Currency as Balanced>::issue(amount) -} - -#[must_use] -pub(crate) struct Swap { - candidate: AccountId, - delegator: AccountId, - requested_amount: SharesOrStake, - - expected_removed: Balance, - expected_restaked: Balance, - expected_leaving: Balance, - expected_released: Balance, - expected_hold_rebalance: Balance, -} - -impl Default for Swap { - fn default() -> Self { - Self { - candidate: 0, - delegator: 0, - requested_amount: SharesOrStake::Stake(0), - expected_removed: 0, - expected_restaked: 0, - expected_leaving: 0, - expected_released: 0, - expected_hold_rebalance: 0, - } - } -} - -impl Swap { - pub fn test>(self) { - let Self { - candidate, - delegator, - requested_amount, - expected_removed, - expected_restaked, - expected_leaving, - expected_released, - expected_hold_rebalance, - } = self; - - let before = State::extract(candidate, delegator); - let source_pool_before = PoolState::extract::

(candidate, delegator); - let target_pool_before = PoolState::extract::(candidate, delegator); - let leaving_before = PoolState::extract::(candidate, delegator); - - assert_ok!(Staking::swap_pool( - RuntimeOrigin::signed(delegator), - candidate, - P::target_pool(), - requested_amount - )); - - let after = State::extract(candidate, delegator); - let source_pool_after = PoolState::extract::

(candidate, delegator); - let target_pool_after = PoolState::extract::(candidate, delegator); - let leaving_after = PoolState::extract::(candidate, delegator); - - // Actual balances changes due to hold rebalance. - assert_eq!( - before.delegator_balance + expected_hold_rebalance, - after.delegator_balance - ); - assert_eq!( - before.staking_balance - expected_hold_rebalance, - after.staking_balance - ); - - // Pool change. - assert_eq!( - source_pool_before.stake - expected_removed, - source_pool_after.stake - ); - assert_eq!( - source_pool_before.hold + expected_hold_rebalance - expected_removed, - source_pool_after.stake - ); - - assert_eq!( - target_pool_before.stake + expected_restaked, - target_pool_after.stake - ); - assert_eq!( - target_pool_before.hold + expected_restaked, - target_pool_after.hold - ); - - assert_eq!(leaving_before.stake + expected_leaving, leaving_after.stake); - assert_eq!(leaving_before.hold + expected_leaving, leaving_after.stake); - - assert_eq!( - before.candidate_total_stake - expected_leaving - expected_released, - after.candidate_total_stake - ); - // Dust is released immediately. - assert_eq!( - before.delegator_hold - expected_released + expected_hold_rebalance, - after.delegator_hold - ); - } -} diff --git a/pallets/pooled-staking/src/tests/rebalance.rs b/pallets/pooled-staking/src/tests/rebalance.rs deleted file mode 100644 index a1e3597..0000000 --- a/pallets/pooled-staking/src/tests/rebalance.rs +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use super::*; - -pool_test!( - fn rebalance_increase

() { - ExtBuilder::default().build().execute_with(|| { - // Preparation: - // We naturaly delegate towards a candidate. - let initial_amount = 2 * SHARE_INIT; - let rewards = 5 * KILO; - let final_amount = initial_amount + rewards; - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: initial_amount, - expected_increase: initial_amount, - ..default() - } - .test::

(); - - // We then artificialy distribute rewards by increasing the value of the pool - // and minting currency to the staking account (this is not how manual rewards would - // be distributed but whatever). - assert_ok!(Balances::mint_into(&ACCOUNT_STAKING, rewards)); - assert_ok!(P::share_stake_among_holders( - &ACCOUNT_CANDIDATE_1, - Stake(rewards) - )); - assert_ok!(Candidates::::add_total_stake( - &ACCOUNT_CANDIDATE_1, - &Stake(rewards) - )); - assert_eq!(total_balance(&ACCOUNT_STAKING), DEFAULT_BALANCE + rewards); - - // Holds should not change but the computed stake should increase. - assert_eq!(total_balance(&ACCOUNT_DELEGATOR_1), 1 * DEFAULT_BALANCE); - assert_eq!(balance_hold(&ACCOUNT_DELEGATOR_1), initial_amount); - assert_eq!( - P::hold(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1), - Stake(initial_amount) - ); - assert_eq!( - P::shares(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1), - Shares(2) - ); - assert_eq!( - P::computed_stake(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1) - .unwrap() - .0, - final_amount - ); - assert_eq!( - Candidates::::total_stake(&ACCOUNT_CANDIDATE_1), - Stake(final_amount) - ); - - // We perform the rebalancing and check it works. - do_rebalance_hold::

( - ACCOUNT_CANDIDATE_1, - ACCOUNT_DELEGATOR_1, - P::target_pool().into(), - SignedBalance::Positive(rewards), - ); - }) - } -); - -pool_test!( - fn rebalance_decrease

() { - ExtBuilder::default().build().execute_with(|| { - // Preparation: - // We naturaly delegate towards a candidate. - let initial_amount = 2 * SHARE_INIT; - let slash = 5 * KILO; - let final_amount = initial_amount - slash; - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: initial_amount, - expected_increase: initial_amount, - ..default() - } - .test::

(); - - // We then artificialy slash by decreasing the value of the pool. - assert_ok!(P::slash_stake_among_holders( - &ACCOUNT_CANDIDATE_1, - Stake(slash) - )); - assert_ok!(Candidates::::sub_total_stake( - &ACCOUNT_CANDIDATE_1, - Stake(slash) - )); - assert_eq!(total_balance(&ACCOUNT_STAKING), DEFAULT_BALANCE); // didn't change - - // Holds should not change but the computed stake should decrease. - assert_eq!(total_balance(&ACCOUNT_DELEGATOR_1), 1 * DEFAULT_BALANCE); - assert_eq!(balance_hold(&ACCOUNT_DELEGATOR_1), initial_amount); - assert_eq!( - P::hold(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1), - Stake(initial_amount) - ); - assert_eq!( - P::shares(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1), - Shares(2) - ); - assert_eq!( - P::computed_stake(&ACCOUNT_CANDIDATE_1, &ACCOUNT_DELEGATOR_1) - .unwrap() - .0, - final_amount - ); - assert_eq!( - Candidates::::total_stake(&ACCOUNT_CANDIDATE_1), - Stake(final_amount) - ); - - // We perform the rebalancing and check it works. - do_rebalance_hold::

( - ACCOUNT_CANDIDATE_1, - ACCOUNT_DELEGATOR_1, - P::target_pool().into(), - SignedBalance::Negative(slash), - ); - }) - } -); - -pool_test!( - fn rebalance_noop

() { - ExtBuilder::default().build().execute_with(|| { - // Preparation: - // We naturaly delegate towards a candidate. - let initial_amount = 2 * SHARE_INIT; - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: initial_amount, - expected_increase: initial_amount, - ..default() - } - .test::

(); - - // We perform the rebalancing and check nothing happen. - do_rebalance_hold::

( - ACCOUNT_CANDIDATE_1, - ACCOUNT_DELEGATOR_1, - P::target_pool().into(), - SignedBalance::Positive(0), - ); - }) - } -); - -pool_test!( - fn rebalance_in_undelegation_request

() { - ExtBuilder::default().build().execute_with(|| { - let joining_amount = 2 * SHARE_INIT; - let rewards = 5 * KILO; - let leaving_requested_amount = joining_amount + rewards; - let leaving_amount = round_down(leaving_requested_amount, 3); // test leaving rounding - - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: joining_amount, - expected_increase: joining_amount, - ..default() - } - .test::

(); - - // We then artificialy distribute rewards by increasing the value of the pool - // and minting currency to the staking account (this is not how manual rewards would - // be distributed but whatever). - assert_ok!(Balances::mint_into(&ACCOUNT_STAKING, rewards)); - assert_ok!(P::share_stake_among_holders( - &ACCOUNT_CANDIDATE_1, - Stake(rewards) - )); - assert_ok!(Candidates::::add_total_stake( - &ACCOUNT_CANDIDATE_1, - &Stake(rewards) - )); - assert_eq!(total_balance(&ACCOUNT_STAKING), DEFAULT_BALANCE + rewards); - - // We then do the undelegation - RequestUndelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: SharesOrStake::Stake(leaving_requested_amount), - expected_removed: leaving_requested_amount, - expected_leaving: leaving_amount, - expected_hold_rebalance: rewards, - ..default() - } - .test::

(); - }) - } -); - -pool_test!( - fn rebalance_in_swap

() { - ExtBuilder::default().build().execute_with(|| { - FullDelegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - request_amount: 10 * SHARE_INIT, - expected_increase: 10 * SHARE_INIT, - ..default() - } - .test::

(); - - // We then artificialy distribute rewards to the source pool by increasing the value of the pool - // and minting currency to the staking account (this is not how manual rewards would - // be distributed but whatever). - let rewards = 2 * SHARE_INIT; - assert_ok!(Balances::mint_into(&ACCOUNT_STAKING, rewards)); - assert_ok!(P::share_stake_among_holders( - &ACCOUNT_CANDIDATE_1, - Stake(rewards) - )); - assert_ok!(Candidates::::add_total_stake( - &ACCOUNT_CANDIDATE_1, - &Stake(rewards) - )); - - Swap { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - requested_amount: SharesOrStake::Shares(9), - expected_removed: 10_800_000, - expected_restaked: 10_000_000, - expected_leaving: 799998, - expected_released: 2, - expected_hold_rebalance: rewards, - } - .test::

{ - // Get the latest header from relay storage - const encoded = await relayApi.query.paras.heads(paraId); - const header = await relayApi.createType("Header", encoded); - return header; -} diff --git a/test/util/xcm.ts b/test/util/xcm.ts deleted file mode 100644 index c76fbe8..0000000 --- a/test/util/xcm.ts +++ /dev/null @@ -1,977 +0,0 @@ -import "@tanssi/api-augment"; -import { DevModeContext, customDevRpcRequest, expect } from "@moonwall/cli"; -import { XcmpMessageFormat } from "@polkadot/types/interfaces"; -import { - CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, - XcmV3JunctionNetworkId, - XcmVersionedXcm, -} from "@polkadot/types/lookup"; -import { BN, hexToU8a, stringToU8a, u8aToHex } from "@polkadot/util"; -import { xxhashAsU8a } from "@polkadot/util-crypto"; - -// Creates and returns the tx that overrides the paraHRMP existence -// This needs to be inserted at every block in which you are willing to test -// state changes -// The reason is that set_validation_data inherent overrides it -export function mockHrmpChannelExistanceTx( - context: DevModeContext, - para: number, - maxCapacity: number, - maxTotalSize: number, - maxMessageSize: number -) { - // This constructs the relevant state to be inserted - const relevantMessageState = { - dmqMqcHead: "0x0000000000000000000000000000000000000000000000000000000000000000", - relayDispatchQueueSize: [0, 0], - egressChannels: [ - [ - para, - { - maxCapacity, - maxTotalSize, - maxMessageSize, - msgCount: 0, - totalSize: 0, - mqcHead: null, - }, - ], - ], - ingressChannels: [ - [ - para, - { - maxCapacity, - maxTotalSize, - maxMessageSize, - msgCount: 0, - totalSize: 0, - mqcHead: null, - }, - ], - ], - }; - - const stateToInsert: CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot = context - .polkadotJs() - .createType( - "CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot", - relevantMessageState - ) as any; - - // Get keys to modify state - const module = xxhashAsU8a(new TextEncoder().encode("ParachainSystem"), 128); - const account_key = xxhashAsU8a(new TextEncoder().encode("RelevantMessagingState"), 128); - - const overallKey = new Uint8Array([...module, ...account_key]); - - return context.polkadotJs().tx.system.setStorage([[u8aToHex(overallKey), u8aToHex(stateToInsert.toU8a())]]); -} - -export function descendSiblingOriginFromAddress20( - context: DevModeContext, - address: `0x${string}` = "0x0101010101010101010101010101010101010101", - paraId: number = 1 -) { - const toHash = new Uint8Array([ - ...new TextEncoder().encode("SiblingChain"), - ...context.polkadotJs().createType("Compact", paraId).toU8a(), - ...context - .polkadotJs() - .createType("Compact", "AccountKey20".length + 20) - .toU8a(), - ...new TextEncoder().encode("AccountKey20"), - ...context.polkadotJs().createType("AccountId", address).toU8a(), - ]); - - return { - originAddress: address, - descendOriginAddress: u8aToHex(context.polkadotJs().registry.hash(toHash).slice(0, 20)), - }; -} - -export function descendSiblingOriginFromAddress32( - context: DevModeContext, - address: `0x${string}` = "0x0101010101010101010101010101010101010101010101010101010101010101", - paraId: number = 1 -) { - const toHash = new Uint8Array([ - ...new TextEncoder().encode("SiblingChain"), - ...context.polkadotJs().createType("Compact", paraId).toU8a(), - ...context - .polkadotJs() - .createType("Compact", "AccountId32".length + 32) - .toU8a(), - ...new TextEncoder().encode("AccountId32"), - ...context.polkadotJs().createType("AccountId32", address).toU8a(), - ]); - - return { - originAddress: address, - descendOriginAddress: u8aToHex(context.polkadotJs().registry.hash(toHash).slice(0, 32)), - }; -} - -export function descendParentOriginFromAddress32( - context: DevModeContext, - address: `0x${string}` = "0x0101010101010101010101010101010101010101010101010101010101010101" -) { - const toHash = new Uint8Array([ - ...new TextEncoder().encode("ParentChain"), - ...context - .polkadotJs() - .createType("Compact", "AccountId32".length + 32) - .toU8a(), - ...new TextEncoder().encode("AccountId32"), - ...context.polkadotJs().createType("AccountId32", address).toU8a(), - ]); - - return { - originAddress: address, - descendOriginAddress: u8aToHex(context.polkadotJs().registry.hash(toHash).slice(0, 32)), - }; -} - -export function descendParentOriginForAddress20( - context: DevModeContext, - address: `0x${string}` = "0x0101010101010101010101010101010101010101010101010101010101010101" -) { - const toHash = new Uint8Array([ - ...new TextEncoder().encode("ParentChain"), - ...context - .polkadotJs() - .createType("Compact", "AccountId32".length + 32) - .toU8a(), - ...new TextEncoder().encode("AccountId32"), - ...context.polkadotJs().createType("AccountId32", address).toU8a(), - ]); - - return { - originAddress: address, - descendOriginAddress: u8aToHex(context.polkadotJs().registry.hash(toHash).slice(0, 20)), - }; -} - -export function sovereignAccountOfSiblingForAddress32(context: DevModeContext, paraId: number): string { - return u8aToHex( - new Uint8Array([ - ...new TextEncoder().encode("sibl"), - ...context.polkadotJs().createType("u32", paraId).toU8a(), - ...new Uint8Array(24), - ]) - ); -} - -export function sovereignAccountOfSiblingForAddress20(context: DevModeContext, paraId: number): string { - return u8aToHex( - new Uint8Array([ - ...new TextEncoder().encode("sibl"), - ...context.polkadotJs().createType("u32", paraId).toU8a(), - ...new Uint8Array(12), - ]) - ); -} - -export interface RawXcmMessage { - type: string; - payload: any; - format?: string; -} - -export function buildXcmpMessage(context: DevModeContext, message: RawXcmMessage): number[] { - const format = message.format != null ? message.format : "ConcatenatedVersionedXcm"; - const xcmpFormat: XcmpMessageFormat = context.polkadotJs().createType("XcmpMessageFormat", format) as any; - const receivedMessage: XcmVersionedXcm = context.polkadotJs().createType(message.type, message.payload) as any; - - return [...xcmpFormat.toU8a(), ...receivedMessage.toU8a()]; -} - -export function buildDmpMessage(context: DevModeContext, message: RawXcmMessage): number[] { - const receivedMessage: XcmVersionedXcm = context.polkadotJs().createType("XcmVersionedXcm", message.payload) as any; - - return [...receivedMessage.toU8a()]; -} - -export async function injectHrmpMessage(context: DevModeContext, paraId: number, message?: RawXcmMessage) { - const totalMessage = message != null ? buildXcmpMessage(context, message) : []; - // Send RPC call to inject XCM message - await customDevRpcRequest("xcm_injectHrmpMessage", [paraId, totalMessage]); -} - -export async function injectDmpMessage(context: DevModeContext, message?: RawXcmMessage) { - const totalMessage = message != null ? buildDmpMessage(context, message) : []; - // Send RPC call to inject XCM message - await customDevRpcRequest("xcm_injectDownwardMessage", [totalMessage]); -} - -// Weight a particular message using the xcm utils precompile -export async function weightMessage(context: DevModeContext, message: XcmVersionedXcm) { - return (await context.readPrecompile!({ - precompileName: "XcmUtils", - functionName: "weightMessage", - args: [message.toHex()], - })) as bigint; -} - -export async function injectHrmpMessageAndSeal(context: DevModeContext, paraId: number, message?: RawXcmMessage) { - await injectHrmpMessage(context, paraId, message); - // Create a block in which the XCM will be executed - await context.createBlock(); -} - -export async function injectDmpMessageAndSeal(context: DevModeContext, message?: RawXcmMessage) { - await injectDmpMessage(context, message); - // Create a block in which the XCM will be executed - await context.createBlock(); -} - -interface Junction { - Parachain?: number; - AccountId32?: { - network: "Any" | XcmV3JunctionNetworkId["type"]; - id: Uint8Array | string; - }; - AccountIndex64?: { - network: "Any" | XcmV3JunctionNetworkId["type"]; - index: number; - }; - AccountKey20?: { - network: "Any" | XcmV3JunctionNetworkId["type"]; - key: Uint8Array | string; - }; - PalletInstance?: number; - GeneralIndex?: bigint; - GeneralKey?: { length: number; data: Uint8Array }; - OnlyChild?: null; - Plurality?: { id: any; part: any }; - GlobalConsensus?: "Any" | XcmV3JunctionNetworkId["type"]; -} - -interface Junctions { - Here?: null; - X1?: Junction; - X2?: [Junction, Junction]; - X3?: [Junction, Junction, Junction]; - X4?: [Junction, Junction, Junction, Junction]; - X5?: [Junction, Junction, Junction, Junction, Junction]; - X6?: [Junction, Junction, Junction, Junction, Junction, Junction]; - X7?: [Junction, Junction, Junction, Junction, Junction, Junction, Junction]; - X8?: [Junction, Junction, Junction, Junction, Junction, Junction, Junction, Junction]; -} - -export interface MultiLocation { - parents: number; - interior: Junctions; -} - -export interface XcmFragmentConfig { - assets: { - multilocation: MultiLocation; - fungible: bigint; - }[]; - weight_limit?: BN; - descend_origin?: string; - beneficiary?: string; -} - -export class XcmFragment { - config: XcmFragmentConfig; - instructions: any[]; - - constructor(config: XcmFragmentConfig) { - this.config = config; - this.instructions = []; - } - - // Add a `ReserveAssetDeposited` instruction - reserve_asset_deposited(): this { - this.instructions.push({ - ReserveAssetDeposited: this.config.assets.map(({ multilocation, fungible }) => { - return { - id: { - Concrete: multilocation, - }, - fun: { Fungible: fungible }, - }; - }, this), - }); - return this; - } - - // Add a `ReceiveTeleportedAsset` instruction - teleported_assets_received(): this { - this.instructions.push({ - ReceiveTeleportedAsset: this.config.assets.map(({ multilocation, fungible }) => { - return { - id: { - Concrete: multilocation, - }, - fun: { Fungible: fungible }, - }; - }, this), - }); - return this; - } - - // Add a `WithdrawAsset` instruction - withdraw_asset(): this { - this.instructions.push({ - WithdrawAsset: this.config.assets.map(({ multilocation, fungible }) => { - return { - id: { - Concrete: multilocation, - }, - fun: { Fungible: fungible }, - }; - }, this), - }); - return this; - } - - // Add one or more `BuyExecution` instruction - // if weight_limit is not set in config, then we put unlimited - buy_execution(fee_index: number = 0, repeat: bigint = 1n): this { - const weightLimit = - this.config.weight_limit != null ? { Limited: this.config.weight_limit } : { Unlimited: null }; - for (let i = 0; i < repeat; i++) { - this.instructions.push({ - BuyExecution: { - fees: { - id: { - Concrete: this.config.assets[fee_index].multilocation, - }, - fun: { Fungible: this.config.assets[fee_index].fungible }, - }, - weightLimit: weightLimit, - }, - }); - } - return this; - } - - // Add one or more `BuyExecution` instruction - // if weight_limit is not set in config, then we put unlimited - refund_surplus(repeat: bigint = 1n): this { - for (let i = 0; i < repeat; i++) { - this.instructions.push({ - RefundSurplus: null, - }); - } - return this; - } - - // Add a `ClaimAsset` instruction - claim_asset(index: number = 0): this { - this.instructions.push({ - ClaimAsset: { - assets: [ - { - id: { - Concrete: this.config.assets[index].multilocation, - }, - fun: { Fungible: this.config.assets[index].fungible }, - }, - ], - // Ticket seems to indicate the version of the assets - ticket: { - parents: 0, - interior: { X1: { GeneralIndex: 3 } }, - }, - }, - }); - return this; - } - - // Add a `ClearOrigin` instruction - clear_origin(repeat: bigint = 1n): this { - for (let i = 0; i < repeat; i++) { - this.instructions.push({ ClearOrigin: null as any }); - } - return this; - } - - // Add a `DescendOrigin` instruction - descend_origin(): this { - if (this.config.descend_origin != null) { - if (hexToU8a(this.config.descend_origin).length == 32) { - this.instructions.push({ - DescendOrigin: { - X1: { - AccountId32: { - network: "Any", - id: this.config.descend_origin, - }, - }, - }, - }); - } else { - this.instructions.push({ - DescendOrigin: { - X1: { - AccountKey20: { - network: "Any", - key: this.config.descend_origin, - }, - }, - }, - }); - } - } else { - console.warn("!Building a DescendOrigin instruction without a configured descend_origin"); - } - return this; - } - - // Add a `DepositAsset` instruction - deposit_asset(max_assets: bigint = 1n, network: "Any" | XcmV3JunctionNetworkId["type"] = "Any"): this { - if (this.config.beneficiary == null) { - console.warn("!Building a DepositAsset instruction without a configured beneficiary"); - } else { - if (hexToU8a(this.config.beneficiary).length == 20) { - this.instructions.push({ - DepositAsset: { - assets: { Wild: "All" }, - maxAssets: max_assets, - beneficiary: { - parents: 0, - interior: { - X1: { AccountKey20: { network, key: this.config.beneficiary } }, - }, - }, - }, - }); - } else { - this.instructions.push({ - DepositAsset: { - assets: { Wild: "All" }, - maxAssets: max_assets, - beneficiary: { - parents: 0, - interior: { - X1: { AccountId32: { network, id: this.config.beneficiary } }, - }, - }, - }, - }); - } - } - return this; - } - - // Add a `DepositAsset` instruction for xcm v3 - deposit_asset_v3(max_assets: bigint = 1n, network: XcmV3JunctionNetworkId["type"] | null = null): this { - if (this.config.beneficiary == null) { - console.warn("!Building a DepositAsset instruction without a configured beneficiary"); - } else { - if (hexToU8a(this.config.beneficiary).length == 20) { - this.instructions.push({ - DepositAsset: { - assets: { Wild: { AllCounted: max_assets } }, - beneficiary: { - parents: 0, - interior: { - X1: { AccountKey20: { network, key: this.config.beneficiary } }, - }, - }, - }, - }); - } else { - this.instructions.push({ - DepositAsset: { - assets: { Wild: { AllCounted: max_assets } }, - beneficiary: { - parents: 0, - interior: { - X1: { AccountId32: { network, id: this.config.beneficiary } }, - }, - }, - }, - }); - } - } - return this; - } - - // Add a `SetErrorHandler` instruction, appending all the nested instructions - set_error_handler_with(callbacks: (() => any)[]): this { - const error_instructions: any[] = []; - callbacks.forEach((cb) => { - cb.call(this); - // As each method in the class pushes to the instruction stack, we pop - error_instructions.push(this.instructions.pop()); - }); - this.instructions.push({ - SetErrorHandler: error_instructions, - }); - return this; - } - - // Add a `SetAppendix` instruction, appending all the nested instructions - set_appendix_with(callbacks: (() => any)[]): this { - const appendix_instructions: any[] = []; - callbacks.forEach((cb) => { - cb.call(this); - // As each method in the class pushes to the instruction stack, we pop - appendix_instructions.push(this.instructions.pop()); - }); - this.instructions.push({ - SetAppendix: appendix_instructions, - }); - return this; - } - - // Add a `Trap` instruction - trap(): this { - this.instructions.push({ - Trap: 0, - }); - return this; - } - - // Utility function to support functional style method call chaining bound to `this` context - with(callback: (() => any)[]): this { - return callback.call(this); - } - - // Pushes the given instruction - push_any(instruction: any): this { - this.instructions.push(instruction); - return this; - } - - // Returns a V2 fragment payload - as_v2(): any { - return { - V2: this.instructions, - }; - } - - /// XCM V3 calls - as_v3(): any { - return { - V3: replaceNetworkAny(this.instructions), - }; - } - - // Add a `BurnAsset` instruction - burn_asset(amount: bigint = 0n): this { - this.instructions.push({ - BurnAsset: this.config.assets.map(({ multilocation, fungible }) => { - return { - id: { - Concrete: multilocation, - }, - fun: { Fungible: amount == 0n ? fungible : amount }, - }; - }, this), - }); - return this; - } - - // Add a `ReportHolding` instruction - report_holding( - destination: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - }, - query_id: number = Math.floor(Math.random() * 1000), - max_weight: { refTime: bigint; proofSize: bigint } = { - refTime: 1_000_000_000n, - proofSize: 1_000_000_000n, - } - ): this { - this.instructions.push({ - ReportHolding: { - response_info: { - destination, - query_id, - max_weight, - }, - assets: { Wild: "All" }, - }, - }); - return this; - } - - // Add a `ExpectAsset` instruction - expect_asset(): this { - this.instructions.push({ - ExpectAsset: this.config.assets.map(({ multilocation, fungible }) => { - return { - id: { - Concrete: multilocation, - }, - fun: { Fungible: fungible }, - }; - }, this), - }); - return this; - } - - // Add a `ExpectOrigin` instruction - expect_origin( - multilocation: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - } - ): this { - this.instructions.push({ - ExpectOrigin: multilocation, - }); - return this; - } - - // Add a `ExpectError` instruction - expect_error(index: number = 0, error: string = "Unimplemented"): this { - this.instructions.push({ - ExpectError: [index, error], - }); - return this; - } - - // Add a `ExpectTransactStatus` instruction - expect_transact_status(status: string = "Success"): this { - this.instructions.push({ - ExpectTransactStatus: status, - }); - return this; - } - - // Add a `QueryPallet` instruction - query_pallet( - destination: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - }, - query_id: number = Math.floor(Math.random() * 1000), - module_name: string = "pallet_balances", - max_weight: { refTime: bigint; proofSize: bigint } = { - refTime: 1_000_000_000n, - proofSize: 1_000_000_000n, - } - ): this { - this.instructions.push({ - QueryPallet: { - module_name: stringToU8a(module_name), - response_info: { - destination, - query_id, - max_weight, - }, - }, - }); - return this; - } - - // Add a `ExpectPallet` instruction - expect_pallet( - index: number = 0, - name: string = "Balances", - module_name: string = "pallet_balances", - crate_major: number = 4, - min_crate_minor: number = 0 - ): this { - this.instructions.push({ - ExpectPallet: { - index, - name: stringToU8a(name), - module_name: stringToU8a(module_name), - crate_major, - min_crate_minor, - }, - }); - return this; - } - - // Add a `ReportTransactStatus` instruction - report_transact_status( - destination: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - }, - query_id: number = Math.floor(Math.random() * 1000), - max_weight: { refTime: bigint; proofSize: bigint } = { - refTime: 1_000_000_000n, - proofSize: 1_000_000_000n, - } - ): this { - this.instructions.push({ - ReportTransactStatus: { - destination, - query_id, - max_weight, - }, - }); - return this; - } - - // Add a `ClearTransactStatus` instruction - clear_transact_status(): this { - this.instructions.push({ - ClearTransactStatus: null as any, - }); - return this; - } - - // Add a `UniversalOrigin` instruction - universal_origin(junction: Junction): this { - this.instructions.push({ - UniversalOrigin: junction, - }); - return this; - } - - // Add a `ExportMessage` instruction - export_message( - xcm_hex: string = "", - network: "Any" | XcmV3JunctionNetworkId["type"] = "Ethereum", - destination: Junctions = { X1: { Parachain: 1000 } } - ): this { - const callVec = stringToU8a(xcm_hex); - const xcm = Array.from(callVec); - this.instructions.push({ - ExportMessage: { - network, - destination, - xcm, - }, - }); - return this; - } - - // Add a `LockAsset` instruction - lock_asset( - multilocation: MultiLocation = this.config.assets[0].multilocation, - fungible: bigint = this.config.assets[0].fungible, - unlocker: MultiLocation = this.config.assets[0].multilocation - ): this { - this.instructions.push({ - LockAsset: { - asset: { - id: { - Concrete: multilocation, - }, - fun: { - Fungible: fungible, - }, - }, - unlocker, - }, - }); - return this; - } - - // Add a `UnlockAsset` instruction - unlock_asset( - multilocation: MultiLocation = this.config.assets[0].multilocation, - fungible: bigint = this.config.assets[0].fungible, - target: MultiLocation = this.config.assets[0].multilocation - ): this { - this.instructions.push({ - UnlockAsset: { - asset: { - id: { - Concrete: multilocation, - }, - fun: { - Fungible: fungible, - }, - }, - target, - }, - }); - return this; - } - - // Add a `NoteUnlockable` instruction - note_unlockable( - multilocation: MultiLocation = this.config.assets[0].multilocation, - fungible: bigint = this.config.assets[0].fungible, - owner: MultiLocation = this.config.assets[0].multilocation - ): this { - this.instructions.push({ - NoteUnlockable: { - asset: { - id: { - Concrete: multilocation, - }, - fun: { - Fungible: fungible, - }, - }, - owner, - }, - }); - return this; - } - - // Add a `RequestUnlock` instruction - request_unlock( - multilocation: MultiLocation = this.config.assets[0].multilocation, - fungible: bigint = this.config.assets[0].fungible, - locker: MultiLocation = this.config.assets[0].multilocation - ): this { - this.instructions.push({ - RequestUnlock: { - asset: { - id: { - Concrete: multilocation, - }, - fun: { - Fungible: fungible, - }, - }, - locker, - }, - }); - return this; - } - - // Add a `SetFeesMode` instruction - set_fees_mode(jit_withdraw: boolean = true): this { - this.instructions.push({ - SetFeesMode: { jit_withdraw }, - }); - return this; - } - - // Add a `SetTopic` instruction - set_topic(topic: string = "0xk89103a9CF04c71Dbc94D0b566f7A2"): this { - this.instructions.push({ - SetTopic: Array.from(stringToU8a(topic)), - }); - return this; - } - - // Add a `ClearTopic` instruction - clear_topic(): this { - this.instructions.push({ - ClearTopic: null as any, - }); - return this; - } - - // Add a `AliasOrigin` instruction - alias_origin( - destination: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - } - ): this { - this.instructions.push({ - AliasOrigin: destination, - }); - return this; - } - - // Add a `UnpaidExecution` instruction - unpaid_execution( - destination: MultiLocation = { - parents: 1, - interior: { X1: { Parachain: 1000 } }, - } - ): this { - const weight_limit = - this.config.weight_limit != null ? { Limited: this.config.weight_limit } : { Unlimited: null }; - this.instructions.push({ - UnpaidExecution: { - weight_limit, - check_origin: destination, - }, - }); - return this; - } - - // Overrides the weight limit of the first buyExeuction encountered - // with the measured weight - async override_weight(context: DevModeContext): Promise { - const message: XcmVersionedXcm = context.polkadotJs().createType("XcmVersionedXcm", this.as_v2()) as any; - - const instructions = message.asV2; - for (let i = 0; i < instructions.length; i++) { - if (instructions[i].isBuyExecution == true) { - const newWeight = await weightMessage(context, message); - this.instructions[i] = { - BuyExecution: { - fees: instructions[i].asBuyExecution.fees, - weightLimit: { Limited: newWeight }, - }, - }; - break; - } - } - return this; - } -} - -function replaceNetworkAny(obj: AnyObject | Array): any { - if (Array.isArray(obj)) { - return obj.map((item) => replaceNetworkAny(item)); - } else if (typeof obj === "object" && obj !== null) { - const newObj: AnyObject = {}; - for (const key in obj) { - if (key === "network" && obj[key] === "Any") { - newObj[key] = null; - } else { - newObj[key] = replaceNetworkAny(obj[key]); - } - } - return newObj; - } - return obj; -} - -type AnyObject = { - [key: string]: any; -}; - -export const expectXcmEventMessage = async (context: DevModeContext, message: string) => { - const records = await context.polkadotJs().query.system.events(); - - const filteredEvents = records - .map(({ event }) => (context.polkadotJs().events.xcmpQueue.Fail.is(event) ? event : undefined)) - .filter((event) => event); - - return filteredEvents.length ? filteredEvents[0]!.data.error.toString() === message : false; -}; - -export const extractPaidDeliveryFees = async (context: DevModeContext) => { - const records = await context.polkadotJs().query.system.events(); - - const filteredEvents = records - .map(({ event }) => (context.polkadotJs().events.polkadotXcm.FeesPaid.is(event) ? event : undefined)) - .filter((event) => event); - - return filteredEvents[0]!.data[1][0].fun.asFungible.toBigInt(); -}; - -export const getLastSentUmpMessageFee = async (context: DevModeContext, baseDelivery: bigint, txByteFee: bigint) => { - const upwardMessages = await context.polkadotJs().query.parachainSystem.upwardMessages(); - expect(upwardMessages.length > 0, "There is no upward message").to.be.true; - const sentXcm = upwardMessages[0]; - - // We need to slice once to get to the actual message (version) - const messageBytes = sentXcm.slice(1); - - const txPrice = baseDelivery + txByteFee * BigInt(messageBytes.length); - const deliveryFeeFactor = await context.polkadotJs().query.parachainSystem.upwardDeliveryFeeFactor(); - const fee = (BigInt(deliveryFeeFactor.toString()) * txPrice) / BigInt(10 ** 18); - return fee; -}; - -export const getLastSentHrmpMessageFee = async ( - context: DevModeContext, - paraId: number, - baseDelivery: bigint, - txByteFee: bigint -) => { - const sentXcm = await context.polkadotJs().query.xcmpQueue.outboundXcmpMessages(paraId, 0); - expect(sentXcm.length > 0, `There is no hrmp message for para id ${paraId}`).to.be.true; - // We need to slice 2 first bytes to get to the actual message (version plus HRMP) - const messageBytes = sentXcm.slice(2); - - const txPrice = baseDelivery + txByteFee * BigInt(messageBytes.length); - const deliveryFeeFactor = await context.polkadotJs().query.xcmpQueue.deliveryFeeFactor(paraId); - const fee = (BigInt(deliveryFeeFactor.toString()) * txPrice) / BigInt(10 ** 18); - return fee; -}; diff --git a/toml-maid.toml b/toml-maid.toml deleted file mode 100644 index 5b6eca7..0000000 --- a/toml-maid.toml +++ /dev/null @@ -1,30 +0,0 @@ -keys = [ - "workspace", - "name", - "package", - "bin", - "lib", - "test", - "lints", - "dependencies", - "dev-dependencies", - "build-dependencies", - "features", - "default", - "std", -] - -inline_keys = [ - "package", - "workspace", - "path", - "git", - "branch", - "rev", - "version", - "default-features", - "optional", - "features", -] - -sort_arrays = true diff --git a/tools/benchmarking.sh b/tools/benchmarking.sh deleted file mode 100755 index b42278a..0000000 --- a/tools/benchmarking.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env bash - -# This script can be used for running tanssi's benchmarks. -# -# The tanssi binary is required to be compiled with --features=runtime-benchmarks -# in release mode. - -set -e - -# By default we use the tanssi-node release binary -# However we can use any binary by running the benchmark tool with -# BINARY=./target/release/container-chain-simple-node ./tools/benchmarking.sh -if [[ -z "${BINARY}" ]]; then - BINARY="./target/release/tanssi-node" -else - BINARY="${BINARY}" -fi - -if [[ -z "${CHAIN}" ]]; then - CHAIN="dev" -else - CHAIN="${CHAIN}" -fi - -if [[ -z "${OUTPUT_PATH}" ]]; then - mkdir -p tmp - OUTPUT_PATH="tmp" -else - OUTPUT_PATH="${OUTPUT_PATH}" -fi - -if [[ -z "${TEMPLATE_PATH}" ]]; then - TEMPLATE_PATH="./benchmarking/frame-weight-pallet-template.hbs" -else - TEMPLATE_PATH="${TEMPLATE_PATH}" -fi - -STEPS=50 -REPEAT=20 - -if [[ ! -f "${BINARY}" ]]; then - echo "binary '${BINARY}' does not exist." - echo "ensure that the tanssi binary is compiled with '--features=runtime-benchmarks' and in production mode." - exit 1 -fi - -function help { - echo "USAGE:" - echo " ${0} [ ] [--check]" - echo "" - echo "EXAMPLES:" - echo " ${0} " "list all benchmarks and provide a selection to choose from" - echo " ${0} --check " "list all benchmarks and provide a selection to choose from, runs in 'check' mode (reduced steps and repetitions)" - echo " ${0} foo \"*\" " "run all benchmarks for pallet 'foo' (the * must be inside quotes)" - echo " ${0} foo bar " "run a benchmark for pallet 'foo' and benchmark 'bar'" - echo " ${0} foo bar --check " "run a benchmark for pallet 'foo' and benchmark 'bar' in 'check' mode (reduced steps and repetitions)" - echo " ${0} foo bar --all " "run a benchmark for all pallets" - echo " ${0} foo bar --all --check " "run a benchmark for all pallets in 'check' mode (reduced steps and repetitions)" -} - -function choose_and_bench { - readarray -t options < <(${BINARY} benchmark pallet --chain=${CHAIN} --list | sed 1d) - options+=('EXIT') - - select opt in "${options[@]}"; do - IFS=', ' read -ra parts <<< "${opt}" - [[ "${opt}" == 'EXIT' ]] && exit 0 - - bench "${parts[0]}" "${parts[1]}" "${1}" - break - done -} - -function bench { - OUTPUT="${OUTPUT_PATH}/${1}.rs" - echo "benchmarking '${1}::${2}' --check=${3}, writing results to '${OUTPUT}'" - # Check enabled - if [[ "${3}" -eq 1 ]]; then - STEPS=16 - REPEAT=1 - fi - echo "${1}" - if [[ ${1} == "*" ]] ; then - # Load all pallet names in an array. - ALL_PALLETS=($( - $BINARY benchmark pallet --list --chain="${CHAIN}" |\ - tail -n+2 |\ - cut -d',' -f1 |\ - sort |\ - uniq - )) - echo "[+] Benchmarking ${#ALL_PALLETS[@]} pallets" - for PALLET in "${ALL_PALLETS[@]}"; do - if [[ "$PALLET" == *"pallet_xcm_benchmarks"* ]]; then - TEMPLATE_PATH="./benchmarking/frame-weight-runtime-template-xcm.hbs" - fi - OUTPUT="${OUTPUT_PATH}/$PALLET.rs" - WASMTIME_BACKTRACE_DETAILS=1 ${BINARY} benchmark pallet \ - --execution=wasm \ - --wasm-execution=compiled \ - --pallet "$PALLET" \ - --extrinsic "*" \ - --chain="${CHAIN}" \ - --steps "${STEPS}" \ - --repeat "${REPEAT}" \ - --template="${TEMPLATE_PATH}" \ - --json-file raw.json \ - --output "${OUTPUT}" - done - else - if [[ "${1}" == *"pallet_xcm_benchmarks"* ]]; then - TEMPLATE_PATH="./benchmarking/frame-weight-runtime-template-xcm.hbs" - fi - WASMTIME_BACKTRACE_DETAILS=1 ${BINARY} benchmark pallet \ - --execution=wasm \ - --wasm-execution=compiled \ - --pallet "${1}" \ - --extrinsic "${2}" \ - --chain="${CHAIN}" \ - --steps "${STEPS}" \ - --repeat "${REPEAT}" \ - --template="${TEMPLATE_PATH}" \ - --json-file raw.json \ - --output "${OUTPUT}" - fi -} - -if [[ "${@}" =~ "--help" ]]; then - help -else - CHECK=0 - if [[ "${@}" =~ "--check" ]]; then - CHECK=1 - set -o noglob && set -- ${@/'--check'} && set +o noglob - fi - - ALL=0 - if [[ "${@}" =~ "--all" ]]; then - ALL=1 - fi - - if [[ "${ALL}" -eq 1 ]]; then - mkdir -p weights/ - bench '*' '*' "${CHECK}" "weights/" - elif [[ $# -ne 2 ]]; then - choose_and_bench "${CHECK}" - else - bench "${1}" "${2}" "${CHECK}" - fi -fi diff --git a/tools/github/generate-release-body.ts b/tools/github/generate-release-body.ts deleted file mode 100644 index 108b109..0000000 --- a/tools/github/generate-release-body.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Octokit } from "octokit"; -import yargs from "yargs"; -import { getCommitAndLabels, getCompareLink } from "./github-utils"; - -const BINARY_CHANGES_LABEL = "B5-clientnoteworthy"; -const BREAKING_CHANGES_LABEL = "D2-breaksapi"; - -function capitalize(s) { - return s[0].toUpperCase() + s.slice(1); -} - -async function main() { - const argv = yargs(process.argv.slice(2)) - .usage("Usage: npm run ts-node github/generate-release-body.ts [args]") - .version("1.0.0") - .options({ - from: { - type: "string", - describe: "previous tag to retrieve commits from", - required: true, - }, - to: { - type: "string", - describe: "current tag being drafted", - required: true, - }, - owner: { - type: "string", - describe: "Repository owner (Ex: moondance-labs)", - required: true, - }, - repo: { - type: "string", - describe: "Repository name (Ex: dancebox)", - required: true, - }, - }) - .demandOption(["from", "to"]) - .help().argv; - - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN || undefined, - }); - - const previousTag = argv.from; - const newTag = argv.to; - - const moduleLinks = ["polkadot-sdk", "frontier"].map((repoName) => ({ - name: repoName, - link: getCompareLink(repoName, previousTag, newTag), - })); - - const { prByLabels } = await getCommitAndLabels( - octokit, - argv.owner, - argv.repo, - previousTag, - newTag - ); - const filteredPr = prByLabels[BINARY_CHANGES_LABEL] || []; - - const printPr = (pr) => { - if (pr.labels.includes(BREAKING_CHANGES_LABEL)) { - return "⚠️ " + pr.title + " (#" + pr.number + ")"; - } else { - return pr.title + " (#" + pr.number + ")"; - } - }; - - const template = ` -## Changes - -${filteredPr.map((pr) => `* ${printPr(pr)}`).join("\n")} - -## Dependency changes - -Tanssi: https://github.com/${argv.owner}/${argv.repo}/compare/${previousTag}...${newTag} -${moduleLinks.map((modules) => `${capitalize(modules.name)}: ${modules.link}`).join("\n")} -`; - console.log(template); -} - -main(); diff --git a/tools/github/generate-runtimes-body.ts b/tools/github/generate-runtimes-body.ts deleted file mode 100644 index 9477b81..0000000 --- a/tools/github/generate-runtimes-body.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { execSync } from "child_process"; -import { Octokit } from "octokit"; -import { readFileSync } from "fs"; -import yargs from "yargs"; -import path from "path"; -import { getCommitAndLabels, getCompareLink } from "./github-utils"; -import { blake2AsHex } from "@polkadot/util-crypto"; - -const BREAKING_CHANGES_LABEL = "D2-breaksapi"; -const RUNTIME_CHANGES_LABEL = "B7-runtimenoteworthy"; -// `ParachainSystem` is pallet index 1. `authorize_upgrade` is extrinsic index 2. -const DANCEBOX_PREFIX_PARACHAINSYSTEM_AUTHORIZE_UPGRADE = "0x0102"; - -function capitalize(s) { - return s[0].toUpperCase() + s.slice(1); -} - -function getRuntimeInfo(srtoolReportFolder: string, runtimeName: string) { - if (runtimeName.includes("-template")) { - const specVersion = execSync( - `cat ../container-chains/templates/${runtimeName.split("-template")[0]}/runtime/src/lib.rs | grep 'spec_version: [0-9]*' | tail -1` - ).toString(); - return { - name: runtimeName, - version: /:\s?([0-9A-z\-]*)/.exec(specVersion)[1], - srtool: JSON.parse( - readFileSync(path.join(srtoolReportFolder, `./${runtimeName}-srtool-digest.json`)).toString() - ), - }; - } - else { - const specVersion = execSync( - `cat ../runtime/${runtimeName}/src/lib.rs | grep 'spec_version: [0-9]*' | tail -1` - ).toString(); - return { - name: runtimeName, - version: /:\s?([0-9A-z\-]*)/.exec(specVersion)[1], - srtool: JSON.parse( - readFileSync(path.join(srtoolReportFolder, `./${runtimeName}-srtool-digest.json`)).toString() - ), - }; - } -} - -// Srtool expects the pallet parachain_system to be at index 1. However just in case we recalculate -function authorizeUpgradeHash(runtimeName: string, srtool: any): string { - if (runtimeName == "dancebox") { - return blake2AsHex( - DANCEBOX_PREFIX_PARACHAINSYSTEM_AUTHORIZE_UPGRADE + - srtool.runtimes.compressed.blake2_256.substr(2) // remove "0x" prefix - ); - } else { - return blake2AsHex( - DANCEBOX_PREFIX_PARACHAINSYSTEM_AUTHORIZE_UPGRADE + - srtool.runtimes.compressed.blake2_256.substr(2) // remove "0x" prefix - ); - } -} - -async function main() { - const argv = yargs(process.argv.slice(2)) - .usage("Usage: npm run ts-node github/generate-release-body.ts [args]") - .version("1.0.0") - .options({ - "srtool-report-folder": { - type: "string", - describe: "folder which contains -srtool-digest.json", - required: true, - }, - from: { - type: "string", - describe: "previous tag to retrieve commits from", - required: true, - }, - to: { - type: "string", - describe: "current tag to draft", - required: true, - }, - owner: { - type: "string", - describe: "Repository owner (Ex: moondance-labs)", - required: true, - }, - repo: { - type: "string", - describe: "Repository name (Ex: dancebox)", - required: true, - }, - runtimes: { - type: "array", - describe: "The runtimes for which it needs to be run", - required: true - } - }) - .demandOption(["srtool-report-folder", "from", "to", "runtimes"]) - .help().argv; - - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN || undefined, - }); - - const previousTag = argv.from; - const newTag = argv.to; - const injectedRuntimes = argv.runtimes; - - const runtimes = injectedRuntimes.map((runtimeName) => - getRuntimeInfo(argv["srtool-report-folder"], runtimeName as string) - ); - - const moduleLinks = ["polkadot-sdk", "frontier"].map((repoName) => ({ - name: repoName, - link: getCompareLink(repoName, previousTag, newTag), - })); - - const { prByLabels } = await getCommitAndLabels( - octokit, - argv.owner, - argv.repo, - previousTag, - newTag - ); - const filteredPr = prByLabels[RUNTIME_CHANGES_LABEL] || []; - - const printPr = (pr) => { - if (pr.labels.includes(BREAKING_CHANGES_LABEL)) { - return "⚠️ " + pr.title + " (#" + pr.number + ")"; - } else { - return pr.title + " (#" + pr.number + ")"; - } - }; - - // - - const template = `${ - runtimes.length > 0 - ? `## Runtimes - -${runtimes - .map( - (runtime) => `### ${capitalize(runtime.name)} -\`\`\` -✨ spec_version : ${runtime.version} -🏋 size : ${runtime.srtool.runtimes.compressed.size} -#️⃣ sha256 : ${runtime.srtool.runtimes.compressed.sha256} -#️⃣ blake2-256 : ${runtime.srtool.runtimes.compressed.blake2_256} -🗳️ proposal (authorizeUpgrade) : ${authorizeUpgradeHash(runtime.name, runtime.srtool)} -\`\`\`` - ) - .join(`\n\n`)} -` - : "" - } - -## Build information - -WASM runtime built using \`${runtimes[0]?.srtool.info.rustc}\` - -## Changes - -${filteredPr.map((pr) => `* ${printPr(pr)}`).join("\n")} - -## Dependency changes - -Tanssi: https://github.com/${argv.owner}/${argv.repo}/compare/${previousTag}...${newTag} -${moduleLinks.map((modules) => `${capitalize(modules.name)}: ${modules.link}`).join("\n")} -`; - console.log(template); -} - -main(); diff --git a/tools/github/github-utils.ts b/tools/github/github-utils.ts deleted file mode 100644 index 5694a19..0000000 --- a/tools/github/github-utils.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { Octokit } from "octokit"; -import { execSync } from "child_process"; - -// Typescript 4 will support it natively, but not yet :( -type Await = T extends PromiseLike ? U : T; -type Commits = Await>["data"]["commits"]; - -export function getCompareLink(packageName: string, previousTag: string, newTag: string) { - const previousPackage = execSync( - `git show ${previousTag}:../Cargo.lock | grep ${packageName}? | head -1 | grep -o '".*"'` - ).toString(); - const previousCommit = /#([0-9a-f]*)/g.exec(previousPackage)[1].slice(0, 8); - const previousRepo = /(https:\/\/.*)\?/g.exec(previousPackage)[1]; - - const newPackage = execSync( - `git show ${newTag}:../Cargo.lock | grep ${packageName}? | head -1 | grep -o '".*"'` - ).toString(); - const newCommit = /#([0-9a-f]*)/g.exec(newPackage)[1].slice(0, 8); - const newRepo = /(https:\/\/.*)\?/g.exec(newPackage)[1]; - const newRepoOrganization = /github.com\/([^\/]*)/g.exec(newRepo)[1]; - - const diffLink = - previousRepo !== newRepo - ? `${previousRepo}/compare/${previousCommit}...${newRepoOrganization}:${newCommit}` - : `${previousRepo}/compare/${previousCommit}...${newCommit}`; - - return diffLink; -} - -export async function getCommitAndLabels( - octokit: Octokit, - owner: string, - repo: string, - previousTag: string, - newTag: string -): Promise<{ prByLabels: any; commits: any[] }> { - let commits: Commits = []; - let more = true; - let page = 0; - while (more) { - const compare = await octokit.rest.repos.compareCommitsWithBasehead({ - owner, - repo, - basehead: previousTag + "..." + newTag, - per_page: 200, - page, - }); - commits = commits.concat(compare.data.commits); - more = compare.data.commits.length == 200; - page++; - } - - // Determine commits to exclude - // - commits reverted in the same range - const excludedCommits: number[] = []; - const revertedCommits: number[] = []; - for (let i = commits.length - 1; i >= 0; i--) { - const commitMessageFirstLine = commits[i].commit.message.split("\n")[0].trim(); - - if (revertedCommits[commitMessageFirstLine] != null) { - excludedCommits.push(i); - excludedCommits.push(revertedCommits[commitMessageFirstLine]); - } else { - const foundRevertedCommitName = commitMessageFirstLine.match(/Revert \"(.*)\"/); - if (foundRevertedCommitName?.length > 0) { - revertedCommits[foundRevertedCommitName[1]] = i; - } - } - } - - const prByLabels = {}; - for (let i = 0; i < commits.length; i++) { - const commitMessageFirstLine = commits[i].commit.message.split("\n")[0].trim(); - if (!excludedCommits.includes(i)) { - const foundPrsNumbers = commitMessageFirstLine.match(/\(#([0-9]+)\)$/); - if (foundPrsNumbers && foundPrsNumbers.length > 1) { - // This will check current repo and if the PR is not found, will try the official repo - const repos = [ - { owner, repo }, - { owner: "moondance-labs", repo: "tanssi" }, - ]; - for (const { owner, repo } of repos) { - try { - const pr = await octokit.rest.pulls.get({ - owner, - repo, - pull_number: parseInt(foundPrsNumbers[1]), - }); - - if (pr.data.labels && pr.data.labels.length > 0) { - for (const label of pr.data.labels) { - prByLabels[label.name] = prByLabels[label.name] || []; - prByLabels[label.name].push(pr.data); - } - } else { - prByLabels[""] = prByLabels[""] || []; - prByLabels[""].push(pr); - } - break; - } catch (e) { - // PR not found... let's try the other repo - } - } - } - } - } - return { - prByLabels, - commits, - }; -} diff --git a/tools/github/print-client-release-issue.ts b/tools/github/print-client-release-issue.ts deleted file mode 100644 index 57b2f39..0000000 --- a/tools/github/print-client-release-issue.ts +++ /dev/null @@ -1,73 +0,0 @@ -import yargs from "yargs"; - -async function main() { - const argv = yargs(process.argv.slice(2)) - .usage("Usage: npm run ts-node github/generate-gh-issue-client-release.ts [args]") - .version("1.0.0") - .options({ - from: { - type: "string", - describe: "previous client version", - required: true, - }, - to: { - type: "string", - describe: "next client version", - required: true, - }, - }) - .demandOption(["from", "to"]) - .help().argv; - - const previousVersion = argv.from; - const newVersion = argv.to; - - const commonTemplate = ` - - [ ] Start the github action Publish Binary Draft with ${previousVersion} => ${newVersion} - (master branch). - - [ ] Review the generated Draft and clean a bit the messages if needed (keep it draft). - - [ ] Start the internal optimized binary build by starting the github action Prepare Optimized Binary Draft with the commit of ${previousVersion} (mster branch) - - [ ] Update chain-networks stagenet-dancebox config.json to include sha-xxxxx built from the optimized binary and pushed to docker - (matching your ${newVersion} tag) and increase the config version + 1. - - [ ] Test the new client on stagenet-dancebox. - - [ ] Publish the client release draft. - - [ ] When everything is ok, publish the new docker image: start github action Publish Docker - with ${newVersion}. -`; - - // Detect if it's a major release or hotfix - if (newVersion.endsWith(".0")) { - const template = ` -## Requirements -- [ ] To be manually edited (add pending PRs) - -## Pre-Release -- [ ] Get that PR approved and merged. -- [ ] Re-run all extrinsics/hooks benchmarks. - -## Release -- [ ] Tag master with ${newVersion} and push to github -${commonTemplate} - -## Post Release -- [ ] Bump client version to the next one on master - `; - console.log(template); - } else { - const template = ` -## Requirements -- [ ] To be manually edited (add pending PRs) - -## Pre-Release -- [ ] Create branch \`perm-${newVersion}\` against previous client git tag. -- [ ] In the branch \`perm-${newVersion}\`, bump client version to ${newVersion}. - -## Release -- [ ] Tag \`perm-${newVersion}\` with ${newVersion} and push to github. -${commonTemplate} - `; - console.log(template); - } -} - -main(); \ No newline at end of file diff --git a/tools/github/print-runtime-release-issue.ts b/tools/github/print-runtime-release-issue.ts deleted file mode 100644 index e711cbf..0000000 --- a/tools/github/print-runtime-release-issue.ts +++ /dev/null @@ -1,91 +0,0 @@ -import yargs from "yargs"; - -async function main() { - const argv = yargs(process.argv.slice(2)) - .usage("Usage: npm run ts-node github/generate-gh-issue-runtime-release.ts [args]") - .version("1.0.0") - .options({ - from: { - type: "string", - describe: "previous runtime version", - required: true, - }, - to: { - type: "string", - describe: "next runtime version", - required: true, - }, - client: { - type: "string", - describe: "current client version", - required: true, - }, - }) - .demandOption(["from", "to", "client"]) - .help().argv; - - const previousVersion = argv.from; - const newVersion = argv.to; - const lastClientVersion = argv.client; - - const commonTemplate = - ` -## Release -- [ ] Check all proxy types. -- [ ] Re-run all extrinsics/hooks benchmarks. -- [ ] Branch from master and create branch \`perm-runtime-${newVersion}\`. -- [ ] Tag \`perm-${newVersion}\` with runtime-${newVersion} and push to github -- [ ] Branch from master and create branch \`perm-runtime-${newVersion}-templates\`. -- [ ] Tag \`perm-runtime-${newVersion}-templates\` with runtime-${newVersion}-templates and push to github -- [ ] Start the github action Publish Runtime Draft -with runtime-${previousVersion} => runtime-${newVersion} - - \`gh workflow run "Publish Runtime Draft" -r 'master' ` + - `-f from=runtime-${previousVersion} -f to=runtime-${newVersion} -f chains=run-all\` -- [ ] Review the generated Draft and clean a bit the messages if needed (keep it draft) -- [ ] Upgrade typescript API: Start the github action "Upgrade typescript API" -- [ ] Upgrade stagenet-dancebox -- [ ] When everything is ok, publish the draft release - `; - - // Detect if it's a major release or hotfix - if (newVersion.endsWith("00")) { - const template = - ` -## Requirements -- [ ] To be manually edited (add pending PRs) - -## Pre-Release -- [ ] Check that proxy types are adapted to extrinsics changes ( - read all PR descriptions with B7-runtimenoteworthy) -- [ ] Re-run all extrinsics/hooks benchmarks. - -${commonTemplate} - -## Post Release -- [ ] Publish the docker runtime image (trigger the github action "Publish Docker runtime tanssi") - - \`gh workflow run "Publish Runtime Draft" -r 'master' ` + - `-f from=runtime-${previousVersion} -f to=runtime-${newVersion}\` -- [ ] Publish the docker runtime image (trigger the github action "Publish Docker runtime containers") - - \`gh workflow run "Publish Runtime Draft" -r 'master' ` + - `-f from=runtime-${previousVersion}-templates -f to=runtime-${newVersion}-templates\` -- [ ] Create a PR that increment spec version (like #1051) in both containers and tanssi runtimes - `; - console.log(template); - } else { - const template = ` -## Requirements -- [ ] To be manually edited (add pending PRs) - -## Pre-Release -- [ ] Bump spec version to ${newVersion} - -${commonTemplate} - -## Post Release -- [ ] Publish the docker runtime image (trigger the github action "Publish Docker runtime") - `; - console.log(template); - } -} - -main(); \ No newline at end of file diff --git a/tools/github/print-version-bump-info.ts b/tools/github/print-version-bump-info.ts deleted file mode 100644 index 734fc70..0000000 --- a/tools/github/print-version-bump-info.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { Octokit } from "octokit"; -import yargs from "yargs"; -import { getCommitAndLabels } from "./github-utils"; - -async function printInfo(octokit: Octokit, previousVersion: string, nextVersion: string) { - const owners = { - "polkadot-sdk": "paritytech", - }; - const prefixes = { - "polkadot-sdk": "polkadot-", - }; - console.log(`# Description\n`); - console.log(`This ticket is automatically generated using\n`); - console.log("```"); - console.log(`$ npm run print-version-bump-info -- --from ${previousVersion} --to ${nextVersion}`); - console.log("```"); - - const prInfoByLabels = {}; - for (const repo of Object.keys(prefixes)) { - const previousTag = `${prefixes[repo]}${previousVersion}`; - const nextTag = `${prefixes[repo]}${nextVersion}`; - try { - const previousCommit = await octokit.rest.git.getCommit({ - owner: owners[repo], - repo, - commit_sha: ( - await octokit.rest.git.getTree({ - owner: owners[repo], - repo, - tree_sha: previousTag, - }) - ).data.sha, - }); - const nextCommit = await octokit.rest.git.getCommit({ - owner: owners[repo], - repo, - commit_sha: ( - await octokit.rest.git.getTree({ - owner: owners[repo], - repo, - tree_sha: nextTag, - }) - ).data.sha, - }); - console.log( - `\n## ${repo} (${previousCommit.data.author.date.slice( - 0, - 10 - )} -> ${nextCommit.data.author.date.slice(0, 10)})\n` - ); - const { commits, prByLabels } = await getCommitAndLabels( - octokit, - owners[repo], - repo, - previousTag, - nextTag - ); - console.log(`https://github.com/${owners[repo]}/${repo}/compare/${previousTag}...${nextTag}`); - console.log("```"); - console.log(` from: ${previousCommit.data.sha}`); - console.log(` to: ${nextCommit.data.sha}`); - console.log(` commits: ${commits.length}`); - console.log("```"); - - for (const label of Object.keys(prByLabels)) { - prInfoByLabels[label] = (prInfoByLabels[label] || []).concat( - prByLabels[label].map((pr) => { - return ` ${`(${owners[repo]}/${repo}#${pr.number}) ${pr.title}`}`; - }) - ); - } - } catch (e) { - console.trace(`Failing to query ${repo} [${previousTag}..${nextTag}]: ${e.toString()}`); - process.exit(1); - } - } - - console.log( - `\n# Important commits by [label](https://paritytech.github.io/labels/doc_polkadot-sdk.html)\n` - ); - const excludeRegs = [ - /R0-/, // Silent Release - /I[0-9]-/, // Issue Category - /D[0-9]-/, // Difficulty - /C[0-9]-/, // Contribution - /A[0-9]-/, // Action - ]; - for (const labelName of Object.keys(prInfoByLabels).sort().reverse()) { - if (excludeRegs.some((f) => f.test(labelName))) { - continue; - } - console.log(`\n### ${labelName || "N/A"}\n`); - // Deduplicate PRs on same label - const deduplicatePrsOfLabel = prInfoByLabels[labelName].filter(function (elem, index, self) { - return index === self.indexOf(elem); - }); - for (const prInfo of deduplicatePrsOfLabel) { - console.log(prInfo); - } - } - - console.log(`\n## Review 'substrate-migrations' repo\n`); - console.log(`https://github.com/apopiak/substrate-migrations#frame-migrations`); - console.log(`\nThis repository contains a list of FRAME-related migrations which might be`); - console.log(`relevant to Moonbeam.`); -} - -async function main() { - const argv = yargs(process.argv.slice(2)) - .usage("Usage: npm run print-version-deps [args]") - .version("1.0.0") - .options({ - from: { - type: "string", - describe: "commit-sha/tag of range start", - }, - to: { - type: "string", - describe: "commit-sha/tag of range end", - }, - }) - .demandOption(["from", "to"]) - .help().argv; - - const octokit = new Octokit({ - auth: process.env.GITHUB_TOKEN || undefined, - }); - - printInfo(octokit, argv.from, argv.to); -} - -main(); \ No newline at end of file diff --git a/tools/package-lock.json b/tools/package-lock.json deleted file mode 100644 index 59138dc..0000000 --- a/tools/package-lock.json +++ /dev/null @@ -1,21099 +0,0 @@ -{ - "name": "tanssi-tools", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "tanssi-tools", - "version": "0.0.1", - "license": "GPL-3.0", - "dependencies": { - "@polkadot/api": "^6.6.1", - "bip39": "^3.1.0", - "eth-block-tracker": "^4.4.3", - "ethereumjs-wallet": "^1.0.0", - "octokit": "^1.0.6", - "pkg": "^4.4.9", - "polkadot-launch": "^2.3.0", - "rlp": "^2.2.6", - "solc": "^0.8.0", - "ts-node": "^8.10.1", - "typescript": "^4.4.3", - "web3": "^1.8.0", - "yargs": "^17.0.1" - }, - "devDependencies": { - "@types/yargs": "^15.0.12", - "node-fetch": "^3.3.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "peer": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "peer": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "peer": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "peer": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "peer": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "peer": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - }, - "node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" - }, - "node_modules/@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/app": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.7.tgz", - "integrity": "sha512-NqgLlaaf7Yy1s5ghhiiBRGzstICpBYnVX5ce3Klk3iKaGeXJDBLVyrJ6e6sYOiTXolFK56Nx5QWS6oUBgP6rSw==", - "dependencies": { - "@octokit/auth-app": "^3.3.0", - "@octokit/auth-unauthenticated": "^2.0.4", - "@octokit/core": "^3.4.0", - "@octokit/oauth-app": "^3.3.2", - "@octokit/plugin-paginate-rest": "^2.13.3", - "@octokit/types": "^6.27.1", - "@octokit/webhooks": "^9.0.1" - } - }, - "node_modules/@octokit/auth-app": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.6.1.tgz", - "integrity": "sha512-6oa6CFphIYI7NxxHrdVOzhG7hkcKyGyYocg7lNDSJVauVOLtylg8hNJzoUyPAYKKK0yUeoZamE/lMs2tG+S+JA==", - "dependencies": { - "@octokit/auth-oauth-app": "^4.3.0", - "@octokit/auth-oauth-user": "^1.2.3", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.0.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@octokit/auth-app/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.3.4.tgz", - "integrity": "sha512-OYOTSSINeUAiLMk1uelaGB/dEkReBqHHr8+hBejzMG4z1vA4c7QSvDAS0RVZSr4oD4PEUPYFzEl34K7uNrXcWA==", - "dependencies": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^5.6.3", - "@octokit/types": "^6.0.3", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", - "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/auth-oauth-device": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", - "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.4.tgz", - "integrity": "sha512-6sHE/++r+aEFZ/BKXOGPJcH/nbgbBjS1A4CHfq/PbPEwb0kZEt43ykW98GBO/rYBPAYaNpCPvXfGwzgR9yMCXg==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.10.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.3.0.tgz", - "integrity": "sha512-3QC/TAdk7onnxfyZ24BnJRfZv8TRzQK7SEFUS9vLng4Vv6Hv6I64ujdk/CUkREec8lhrwU764SZ/d+yrjjqhaQ==", - "dependencies": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/oauth-methods": "^1.1.0", - "@octokit/request": "^5.4.14", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "dependencies": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.1.0.tgz", - "integrity": "sha512-+baofLfSL0CAv3CfGQ9rxiZZQEX8VNJMGuuS4PgrMRBUL52Ho5+hQYb63UJQshw7EXYMPDZxbXznc0y33cbPqw==", - "dependencies": { - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.7.1.tgz", - "integrity": "sha512-NTmFuB4jcwnxj7xlipHuuX9DRprfb7vHGSBIizIygx2u8LlNYqGvHYWNgw3TpxRxYrFA+SMIfjoVgrtnYpdbrA==", - "dependencies": { - "@octokit/auth-oauth-app": "^4.0.0", - "@octokit/auth-oauth-user": "^1.3.0", - "@octokit/auth-unauthenticated": "^2.0.0", - "@octokit/core": "^3.3.2", - "@octokit/oauth-authorization-url": "^4.2.1", - "@octokit/oauth-methods": "^1.2.2", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - }, - "optionalDependencies": { - "aws-lambda": "^1.0.7" - } - }, - "node_modules/@octokit/oauth-app/node_modules/@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "dependencies": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.3.tgz", - "integrity": "sha512-lhP/t0i8EwTmayHG4dqLXgU+uPVys4WD/qUNvC+HfB1S1dyqULm5Yx9uKc1x79aP66U1Cb4OZeW8QU/RA9A4XA==" - }, - "node_modules/@octokit/oauth-methods": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", - "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", - "dependencies": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.2.3", - "@octokit/request-error": "^3.0.3", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", - "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { - "@octokit/core": "^3.5.0" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/request/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz", - "integrity": "sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA==", - "dependencies": { - "@octokit/request-error": "^2.0.2", - "@octokit/webhooks-methods": "^2.0.0", - "@octokit/webhooks-types": "5.8.0", - "aggregate-error": "^3.1.0" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", - "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" - }, - "node_modules/@octokit/webhooks-types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", - "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" - }, - "node_modules/@polkadot/api": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-6.12.1.tgz", - "integrity": "sha512-RVdTiA2WaEvproM3i6E9TKS1bfXpPd9Ly9lUG/kVLaspjKoIot9DJUDTl97TJ+7xr8LXGbXqm448Ud0hsEBV8Q==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/api-derive": "6.12.1", - "@polkadot/keyring": "^8.1.2", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "eventemitter3": "^4.0.7", - "rxjs": "^7.4.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.14.1.tgz", - "integrity": "sha512-65GMlgVnZd08Ifh8uAj+p/+MlXxvsAfBcCHjQhOmbCE0dki+rzTPUR31LsWyDKtuw+nUBj0iZN4PelO+wU4r0g==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/api-base": "8.14.1", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-augment/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-augment/node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-base": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.14.1.tgz", - "integrity": "sha512-EXFhNXIfpirf18IsqcG2pGQW1/Xn+bfjqVYQMMJ4ZONtYH4baZZlXk7SoXCCHonN2x1ixs4DOcRx5oVxjabdIQ==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-base/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/api-base/node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/api-derive": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-6.12.1.tgz", - "integrity": "sha512-5LOVlG5EBCT+ytY6aHmQ4RdEWZovZQqRoc6DLd5BLhkR7BFTHKSkLQW+89so8jd0zEtmSXBVPPnsrXS8joM35Q==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/api": "6.12.1", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "node_modules/@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.14.1.tgz", - "integrity": "sha512-0dIsNVIMeCp0kV7+Obz0Odt6K32Ka2ygwhiV5jhhJthy8GJBPo94mKDed5gzln3Dgl2LEdJJt1h/pgCx4a2i4A==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/rpc-augment/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/rpc-core": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-6.12.1.tgz", - "integrity": "sha512-Hb08D9zho3SB1UNlUCmG5q0gdgbOx25JKGLDfSYpD/wtD0Y1Sf2X5cfgtMoSYE3USWiRdCu4BxQkXTiRjPjzJg==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "rxjs": "^7.4.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/rpc-provider": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-6.12.1.tgz", - "integrity": "sha512-uUHD3fLTOeZYWJoc6DQlhz+MJR33rVelasV+OxFY2nSD9MSNXRwQh+9UKDQBnyxw5B4BZ2QaEGfucDeavXmVDw==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "@polkadot/x-fetch": "^8.1.2", - "@polkadot/x-global": "^8.1.2", - "@polkadot/x-ws": "^8.1.2", - "eventemitter3": "^4.0.7" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.12.1.tgz", - "integrity": "sha512-O37cAGUL0xiXTuO3ySweVh0OuFUD6asrd0TfuzGsEp3jAISWdElEHV5QDiftWq8J9Vf8BMgTcP2QLFbmSusxqA==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.14.1.tgz", - "integrity": "sha512-Xa4TUFqyZT+IJ6pBSwDjWcF42u/E34OyC+gbs5Z2vWQ4EzSDkq4xNoUKjJlEEgTemsD9lhPOIc4jvqTCefwxEw==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/types-augment/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-augment/node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@polkadot/types-codec": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.14.1.tgz", - "integrity": "sha512-y6YDN4HwvEgSWlgrEV04QBBxDxES1cTuUQFzZJzOTuZCWpA371Mdj3M9wYxGXMnj0wa+rCQGECHPZZaNxBMiKg==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/util": "^10.1.1", - "@polkadot/x-bigint": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-codec/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-codec/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.14.1.tgz", - "integrity": "sha512-fb9yyblj5AYAPzeCIq0kYSfzDxRDi/0ud9gN2UzB3H7M/O4n2mPC1vD4UOLF+B7l9QzCrt4e+k+/riGp7GfvyA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-create/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-known": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.12.1.tgz", - "integrity": "sha512-Z8bHpPQy+mqUm0uR1tai6ra0bQIoPmgRcGFYUM+rJtW1kx/6kZLh10HAICjLpPeA1cwLRzaxHRDqH5MCU6OgXw==", - "dependencies": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "^8.1.2", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.14.1.tgz", - "integrity": "sha512-XqR4qq6pCZyNBuFVod8nFSNUmLssrjoU9bOIn4Ua2cqNlI9xsuKaI1X5ySEn/oWOtKQ2L5hbCm9vkXrEtXBl1w==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/types-support/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", - "ip-regex": "^4.3.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/util-crypto": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-8.7.1.tgz", - "integrity": "sha512-TaSuJ2aNrB5sYK7YXszkEv24nYJKRFqjF2OrggoMg6uYxUAECvTkldFnhtgeizMweRMxJIBu6bMHlSIutbWgjw==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "8.7.1", - "@polkadot/util": "8.7.1", - "@polkadot/wasm-crypto": "^5.1.1", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-randomvalues": "8.7.1", - "@scure/base": "1.0.0", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "8.7.1" - } - }, - "node_modules/@polkadot/wasm-bridge": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.4.1.tgz", - "integrity": "sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-init": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz", - "integrity": "sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-init/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-init/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-util": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz", - "integrity": "sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/x-bigint": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-8.7.1.tgz", - "integrity": "sha512-ClkhgdB/KqcAKk3zA6Qw8wBL6Wz67pYTPkrAtImpvoPJmR+l4RARauv+MH34JXMUNlNb3aUwqN6lq2Z1zN+mJg==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-fetch": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-8.7.1.tgz", - "integrity": "sha512-ygNparcalYFGbspXtdtZOHvNXZBkNgmNO+um9C0JYq74K5OY9/be93uyfJKJ8JcRJtOqBfVDsJpbiRkuJ1PRfg==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", - "@types/node-fetch": "^2.6.1", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-fetch/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-randomvalues": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-8.7.1.tgz", - "integrity": "sha512-njt17MlfN6yNyNEti7fL12lr5qM6A1aSGkWKVuqzc7XwSBesifJuW4km5u6r2gwhXjH2eHDv9SoQ7WXu8vrrkg==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@polkadot/x-ws": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-8.7.1.tgz", - "integrity": "sha512-Mt0tcNzGXyKnN3DQ06alkv+JLtTfXWu6zSypFrrKHSQe3u79xMQ1nSicmpT3gWLhIa8YF+8CYJXMrqaXgCnDhw==", - "dependencies": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@substrate/connect": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.9.tgz", - "integrity": "sha512-E6bdBhzsfHNAKlmQSvbTW1jyb0WcIvgbrEBfJ4B6FZ3t1wpGjldL6GrYtegVtKr9/ySQ/pFNn0uVbugukpMDjQ==", - "dependencies": { - "@substrate/connect-extension-protocol": "^1.0.1", - "@substrate/smoldot-light": "0.6.25", - "eventemitter3": "^4.0.7" - } - }, - "node_modules/@substrate/connect-extension-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz", - "integrity": "sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==" - }, - "node_modules/@substrate/smoldot-light": { - "version": "0.6.25", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.25.tgz", - "integrity": "sha512-OQ9/bnJJy90xSRg5Vp9MIvrgbrVt/r/FwXYSmyLeBBNbJt6o1gSeshVo8icD+2VWwd/TJ2oHl5CVQWe89MyByA==", - "dependencies": { - "websocket": "^1.0.32" - } - }, - "node_modules/@substrate/ss58-registry": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.40.0.tgz", - "integrity": "sha512-QuU2nBql3J4KCnOWtWDw4n1K4JU0T79j54ZZvm/9nhsX6AIar13FyhsaBfs6QkJ2ixTQAnd7TocJIoJRWbqMZA==" - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==" - }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - }, - "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" - }, - "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "optional": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-lambda": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", - "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", - "optional": true, - "dependencies": { - "aws-sdk": "^2.814.0", - "commander": "^3.0.2", - "js-yaml": "^3.14.1", - "watchpack": "^2.0.0-beta.10" - }, - "bin": { - "lambda": "bin/lambda" - } - }, - "node_modules/aws-sdk": { - "version": "2.1399.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1399.0.tgz", - "integrity": "sha512-u9G78zs4vN/jl/AI+wNA0qnId2bUmXaCUrzRjTqN8/MWMda7igXmWHbcLmUC3BKmQPrp3EzgC+jBzFWoz5QL9A==", - "optional": true, - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "dependencies": { - "@noble/hashes": "^1.2.0" - } - }, - "node_modules/bip39/node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "optional": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "optional": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "dependencies": { - "node-fetch": "^2.6.11" - } - }, - "node_modules/cross-fetch/node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ed2curve": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", - "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", - "dependencies": { - "tweetnacl": "1.x.x" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "dependencies": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "dependencies": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "optional": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-console": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/filter-console/-/filter-console-0.1.1.tgz", - "integrity": "sha512-zrXoV1Uaz52DqPs+qEwNJWJFAWZpYJ47UNmpN9q4j+/EYsz85uV0DC9k8tRND5kYmoVzL0W+Y75q4Rg8sRJCdg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "optional": true - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/into-stream": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", - "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==", - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "node_modules/is2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", - "dependencies": { - "deep-is": "^0.1.3", - "ip-regex": "^4.1.0", - "is-url": "^1.2.4" - }, - "engines": { - "node": ">=v0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/iso-random-stream": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", - "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", - "dependencies": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/iso-random-stream/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "optional": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonwebtoken/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keypair": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", - "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" - }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libp2p-crypto": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", - "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", - "dependencies": { - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.4", - "multiformats": "^9.4.5", - "noble-ed25519": "^1.2.6", - "noble-secp256k1": "^1.2.10", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mocha/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, - "node_modules/mock-socket": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.2.1.tgz", - "integrity": "sha512-aw9F9T9G2zpGipLLhSNh6ZpgUyUl4frcVmRN08uE1NWPWg43Wx6+sGPDbQ7E5iFZZDJW5b5bypMeAEHqTbIFag==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multibase/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multistream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz", - "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5" - } - }, - "node_modules/multistream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/multistream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/multistream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/noble-ed25519": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", - "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==", - "deprecated": "Switch to namespaced @noble/ed25519 for security and feature updates" - }, - "node_modules/noble-secp256k1": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", - "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==", - "deprecated": "Switch to namespaced @noble/secp256k1 for security and feature updates" - }, - "node_modules/nock": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", - "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" - }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/octokit": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.8.1.tgz", - "integrity": "sha512-xBLKFIivbl7wnLwxzLYuDO/JDNYxdyxoSjFrl/QMrY/fwGGQYYklvKUDTUyGMU0aXPrQtJ0IZnG3BXpCkDQzWg==", - "dependencies": { - "@octokit/app": "^12.0.4", - "@octokit/core": "^3.5.1", - "@octokit/oauth-app": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.18.0", - "@octokit/plugin-rest-endpoint-methods": "^5.14.0", - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.5.1", - "@octokit/types": "^6.35.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/peer-id": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", - "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", - "dependencies": { - "class-is": "^1.1.0", - "libp2p-crypto": "^0.20.0", - "minimist": "^1.2.5", - "multiformats": "^9.4.5", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - }, - "bin": { - "peer-id": "src/bin.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/pem-jwk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", - "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", - "dependencies": { - "asn1.js": "^5.0.1" - }, - "bin": { - "pem-jwk": "bin/pem-jwk.js" - }, - "engines": { - "node": ">=5.10.0" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.5.1.tgz", - "integrity": "sha512-UXKL88jGQ+FD4//PyrFeRcqurVQ3BVIfUNaEU9cXY24EJz08JyBj85qrGh0CFGvyzNb1jpwHOnns5Sw0M5H92Q==", - "dependencies": { - "@babel/parser": "7.13.12", - "@babel/runtime": "7.13.10", - "chalk": "^3.0.0", - "escodegen": "^1.14.1", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "into-stream": "^5.1.1", - "minimist": "^1.2.5", - "multistream": "^2.1.1", - "pkg-fetch": "2.6.9", - "prebuild-install": "6.0.1", - "progress": "^2.0.3", - "resolve": "^1.15.1", - "stream-meter": "^1.0.4" - }, - "bin": { - "pkg": "lib-es5/bin.js" - }, - "peerDependencies": { - "node-notifier": ">=6.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/pkg-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz", - "integrity": "sha512-EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==", - "dependencies": { - "@babel/runtime": "^7.9.2", - "byline": "^5.0.0", - "chalk": "^3.0.0", - "expand-template": "^2.0.3", - "fs-extra": "^8.1.0", - "minimist": "^1.2.5", - "progress": "^2.0.3", - "request": "^2.88.0", - "request-progress": "^3.0.0", - "semver": "^6.3.0", - "unique-temp-dir": "^1.0.0" - }, - "bin": { - "pkg-fetch": "lib-es5/bin.js" - } - }, - "node_modules/pkg-fetch/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pkg-fetch/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-fetch/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pkg-fetch/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/pkg-fetch/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-fetch/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg/node_modules/@babel/parser": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", - "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pkg/node_modules/@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/pkg/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pkg/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pkg/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/pkg/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/polkadot-launch/-/polkadot-launch-2.3.0.tgz", - "integrity": "sha512-X+m5RT1VSq1cQ0ONImSwmb0t+lts+udVORXZzF3C5ljlTAN15M2J/sjLjp6S67i7xBf1HTKGb6cBFVge57PNCg==", - "dependencies": { - "@polkadot/api": "^8.9.1", - "@polkadot/api-augment": "^8.9.1", - "@polkadot/keyring": "^9.5.1", - "@polkadot/types": "^8.9.1", - "@polkadot/util": "^9.5.1", - "@polkadot/util-crypto": "^9.5.1", - "@types/chai": "^4.2.22", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "ethers": "^5.4.7", - "filter-console": "^0.1.1", - "libp2p-crypto": "^0.20.0", - "mocha": "^9.1.2", - "peer-id": "^0.15.3", - "tcp-port-used": "^1.0.2", - "ts-node": "^10.3.0", - "web3": "^1.6.0", - "web3-core": "^1.6.0", - "web3-eth": "^1.6.0", - "yargs": "^15.4.1" - }, - "bin": { - "polkadot-launch": "dist/cli.js" - } - }, - "node_modules/polkadot-launch/node_modules/@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@noble/secp256k1": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", - "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.14.1.tgz", - "integrity": "sha512-jg26eIKFYqVfDBTAopHL3aDaNw9j6TdUkXuvYJOnynpecU4xwbTVKcOtSOjJ2eRX4MgMQ4zlyMHJx3iKw0uUTA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/api-augment": "8.14.1", - "@polkadot/api-base": "8.14.1", - "@polkadot/api-derive": "8.14.1", - "@polkadot/keyring": "^10.1.1", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/types-known": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "eventemitter3": "^4.0.7", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.14.1.tgz", - "integrity": "sha512-eWG1MrQhHMUjt9gDHN9/9/ZMATu1MolqcalPFhNoGtdON3+I0J3ntjQ4y5X7+p2OGwQplpYRKqbK4k7tKzu8tA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/api": "8.14.1", - "@polkadot/api-augment": "8.14.1", - "@polkadot/api-base": "8.14.1", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api-derive/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/api/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/keyring": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.2.tgz", - "integrity": "sha512-qY5baU1qduwTE04Cyrqtf2pCpsIk7Z5vi45CD9U3cbkKXaJoNUqIpfKoL8Vh/yVJBwhclMdxV9E2rEJs8Iv4bg==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/util": "9.7.2", - "@polkadot/util-crypto": "9.7.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "9.7.2", - "@polkadot/util-crypto": "9.7.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/networks/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/networks/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/networks/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/networks/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-core/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/rpc-provider/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types-known": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.14.1.tgz", - "integrity": "sha512-GP7gRo9nmitykkrRnoLF61Qm19UFdTwMsOnJkdm7AOeWDmZGxutacgO6k1tBsHr38hsiCCGsB/JiseUgywvGIw==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "@polkadot/networks": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types-known/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types-known/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types-known/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types-known/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "10.4.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/types/node_modules/@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/util": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.2.tgz", - "integrity": "sha512-ivTmA+KkPCq5i3O0Gk+dTds/hwdwlYCh89aKfeaG9ni3XHUbbuBgTqHneo648HqxwAwSAyiDiwE9EdXrzAdO4Q==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-bigint": "9.7.2", - "@polkadot/x-global": "9.7.2", - "@polkadot/x-textdecoder": "9.7.2", - "@polkadot/x-textencoder": "9.7.2", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.1", - "ip-regex": "^4.3.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/util-crypto": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.2.tgz", - "integrity": "sha512-tfz6mJtPwoNteivKCmR+QklC4mr1/hGZRsDJLWKaFhanDinYZ3V2pJM1EbCI6WONLuuzlTxsDXjAffWzzRqlPA==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.0", - "@polkadot/networks": "9.7.2", - "@polkadot/util": "9.7.2", - "@polkadot/wasm-crypto": "^6.2.2", - "@polkadot/x-bigint": "9.7.2", - "@polkadot/x-randomvalues": "9.7.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "9.7.2" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/util-crypto/node_modules/@polkadot/networks": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.2.tgz", - "integrity": "sha512-oMAdF8Y9CLBI0EUZBcycHcvbQQdbkJHevPJ/lwnZXJTaueXuav/Xm2yiFj5J3V8meIjLocURlMawgsAVItXOBQ==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/util": "9.7.2", - "@substrate/ss58-registry": "^1.23.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/util/node_modules/@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "dependencies": { - "@babel/runtime": "^7.18.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "dependencies": { - "@babel/runtime": "^7.20.6" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "dependencies": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-bigint": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.7.2.tgz", - "integrity": "sha512-qi8/DTGypFSt5vvNOsYcEaqH72lymfyidGlsHlZ6e7nNASnEhk/NaOcINiTr1ds+fpu4dtKXWAIPZufujf2JeQ==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-bigint/node_modules/@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "dependencies": { - "@babel/runtime": "^7.18.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "dependencies": { - "@babel/runtime": "^7.20.13" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-randomvalues": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.2.tgz", - "integrity": "sha512-819slnXNpoVtqdhjI19ao7w5m+Zwx11VfwCZkFQypVv3b/1UEoKG/baJA9dVI6yMvhnBN//i8mLgNy3IXWbVVw==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-randomvalues/node_modules/@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "dependencies": { - "@babel/runtime": "^7.18.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-textdecoder": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.2.tgz", - "integrity": "sha512-hhrMNZwJBmusdpqjDRpOHZoMB4hpyJt9Gu9Bi9is7/D/vq/hpxq8z7s6NxrbRyXJf1SIk6NMK0jf5XjRLdKdbw==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-textdecoder/node_modules/@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "dependencies": { - "@babel/runtime": "^7.18.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-textencoder": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.2.tgz", - "integrity": "sha512-GHbSdbMPixDAOnJ9cvL/x9sPNeHegPoDSqCAzY5H6/zHc/fNn0vUu0To9VpPgPhp/Jb9dbc0h8YqEyvOcOlphw==", - "dependencies": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-textencoder/node_modules/@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "dependencies": { - "@babel/runtime": "^7.18.6" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "dependencies": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/polkadot-launch/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/polkadot-launch/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/polkadot-launch/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/polkadot-launch/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/polkadot-launch/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/polkadot-launch/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/polkadot-launch/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/polkadot-launch/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/polkadot-launch/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/polkadot-launch/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/polkadot-launch/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polkadot-launch/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prebuild-install": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "optional": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "deprecated": "Renamed to @metamask/safe-event-emitter", - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safe-event-emitter/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "optional": true - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/solc": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", - "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "optional": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-meter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", - "dependencies": { - "readable-stream": "^2.1.4" - } - }, - "node_modules/stream-meter/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-meter/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/stream-meter/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swarm-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/swarm-js/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tcp-port-used": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", - "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", - "dependencies": { - "debug": "4.3.1", - "is2": "^2.0.6" - } - }, - "node_modules/tcp-port-used/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==" - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha512-5gSP1liv10Gjp8cMEnFd6shzkL/D6W1uhXSFNCxDC+YI8+L8wkCYCbJ7n77Ezb4wE/xzMogecE+DtamEe9PZjg==" - }, - "node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "node_modules/unique-temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", - "integrity": "sha512-tE68ki2FndoVdPioyiz8mYaJeX3xU/9lk4dml7KlLKEkWLtDGAYeg5LGjE2dMkzB8d6R3HbcKTn/I14nukP2dw==", - "dependencies": { - "mkdirp": "^0.5.1", - "os-tmpdir": "^1.0.1", - "uid2": "0.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "optional": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "optional": true - }, - "node_modules/ursa-optional": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", - "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.14.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "optional": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/web3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core-requestmanager": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-eth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", - "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/web3-net": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/web3-shh": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", - "hasInstallScript": true, - "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr-request/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "optional": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "optional": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "peer": true, - "requires": { - "@babel/highlight": "^7.22.5" - } - }, - "@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==" - }, - "@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "peer": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "peer": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", - "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "peer": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "peer": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", - "peer": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==" - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==" - }, - "@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", - "peer": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "peer": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", - "peer": true - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", - "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.3", - "babel-plugin-polyfill-corejs3": "^0.8.1", - "babel-plugin-polyfill-regenerator": "^0.5.0", - "semver": "^6.3.0" - } - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" - } - }, - "@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", - "requires": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } - }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - }, - "dependencies": { - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - } - } - }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" - }, - "@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "peer": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "peer": true - } - } - }, - "@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==" - }, - "@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@octokit/app": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.7.tgz", - "integrity": "sha512-NqgLlaaf7Yy1s5ghhiiBRGzstICpBYnVX5ce3Klk3iKaGeXJDBLVyrJ6e6sYOiTXolFK56Nx5QWS6oUBgP6rSw==", - "requires": { - "@octokit/auth-app": "^3.3.0", - "@octokit/auth-unauthenticated": "^2.0.4", - "@octokit/core": "^3.4.0", - "@octokit/oauth-app": "^3.3.2", - "@octokit/plugin-paginate-rest": "^2.13.3", - "@octokit/types": "^6.27.1", - "@octokit/webhooks": "^9.0.1" - } - }, - "@octokit/auth-app": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.6.1.tgz", - "integrity": "sha512-6oa6CFphIYI7NxxHrdVOzhG7hkcKyGyYocg7lNDSJVauVOLtylg8hNJzoUyPAYKKK0yUeoZamE/lMs2tG+S+JA==", - "requires": { - "@octokit/auth-oauth-app": "^4.3.0", - "@octokit/auth-oauth-user": "^1.2.3", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.0.1", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@octokit/auth-oauth-app": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.3.4.tgz", - "integrity": "sha512-OYOTSSINeUAiLMk1uelaGB/dEkReBqHHr8+hBejzMG4z1vA4c7QSvDAS0RVZSr4oD4PEUPYFzEl34K7uNrXcWA==", - "requires": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^5.6.3", - "@octokit/types": "^6.0.3", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/auth-oauth-user": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", - "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", - "requires": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/auth-oauth-device": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", - "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", - "requires": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "dependencies": { - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@octokit/auth-oauth-device": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.4.tgz", - "integrity": "sha512-6sHE/++r+aEFZ/BKXOGPJcH/nbgbBjS1A4CHfq/PbPEwb0kZEt43ykW98GBO/rYBPAYaNpCPvXfGwzgR9yMCXg==", - "requires": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.10.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "dependencies": { - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - } - } - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@octokit/auth-oauth-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.3.0.tgz", - "integrity": "sha512-3QC/TAdk7onnxfyZ24BnJRfZv8TRzQK7SEFUS9vLng4Vv6Hv6I64ujdk/CUkREec8lhrwU764SZ/d+yrjjqhaQ==", - "requires": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/oauth-methods": "^1.1.0", - "@octokit/request": "^5.4.14", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "requires": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - } - } - }, - "@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/auth-unauthenticated": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.1.0.tgz", - "integrity": "sha512-+baofLfSL0CAv3CfGQ9rxiZZQEX8VNJMGuuS4PgrMRBUL52Ho5+hQYb63UJQshw7EXYMPDZxbXznc0y33cbPqw==", - "requires": { - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-app": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.7.1.tgz", - "integrity": "sha512-NTmFuB4jcwnxj7xlipHuuX9DRprfb7vHGSBIizIygx2u8LlNYqGvHYWNgw3TpxRxYrFA+SMIfjoVgrtnYpdbrA==", - "requires": { - "@octokit/auth-oauth-app": "^4.0.0", - "@octokit/auth-oauth-user": "^1.3.0", - "@octokit/auth-unauthenticated": "^2.0.0", - "@octokit/core": "^3.3.2", - "@octokit/oauth-authorization-url": "^4.2.1", - "@octokit/oauth-methods": "^1.2.2", - "@types/aws-lambda": "^8.10.83", - "aws-lambda": "^1.0.7", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "requires": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - } - } - }, - "@octokit/oauth-authorization-url": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.3.tgz", - "integrity": "sha512-lhP/t0i8EwTmayHG4dqLXgU+uPVys4WD/qUNvC+HfB1S1dyqULm5Yx9uKc1x79aP66U1Cb4OZeW8QU/RA9A4XA==" - }, - "@octokit/oauth-methods": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", - "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", - "requires": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.2.3", - "@octokit/request-error": "^3.0.3", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0" - }, - "dependencies": { - "@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "requires": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==" - }, - "@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "requires": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" - }, - "@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "requires": { - "@octokit/types": "^6.40.0" - } - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "requires": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "requires": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", - "requires": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - } - }, - "@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@octokit/webhooks": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz", - "integrity": "sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA==", - "requires": { - "@octokit/request-error": "^2.0.2", - "@octokit/webhooks-methods": "^2.0.0", - "@octokit/webhooks-types": "5.8.0", - "aggregate-error": "^3.1.0" - } - }, - "@octokit/webhooks-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", - "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" - }, - "@octokit/webhooks-types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", - "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" - }, - "@polkadot/api": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-6.12.1.tgz", - "integrity": "sha512-RVdTiA2WaEvproM3i6E9TKS1bfXpPd9Ly9lUG/kVLaspjKoIot9DJUDTl97TJ+7xr8LXGbXqm448Ud0hsEBV8Q==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/api-derive": "6.12.1", - "@polkadot/keyring": "^8.1.2", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "eventemitter3": "^4.0.7", - "rxjs": "^7.4.0" - } - }, - "@polkadot/api-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.14.1.tgz", - "integrity": "sha512-65GMlgVnZd08Ifh8uAj+p/+MlXxvsAfBcCHjQhOmbCE0dki+rzTPUR31LsWyDKtuw+nUBj0iZN4PelO+wU4r0g==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/api-base": "8.14.1", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - } - }, - "@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - } - } - }, - "@polkadot/api-base": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.14.1.tgz", - "integrity": "sha512-EXFhNXIfpirf18IsqcG2pGQW1/Xn+bfjqVYQMMJ4ZONtYH4baZZlXk7SoXCCHonN2x1ixs4DOcRx5oVxjabdIQ==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - } - }, - "@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - } - }, - "@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - } - } - }, - "@polkadot/api-derive": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-6.12.1.tgz", - "integrity": "sha512-5LOVlG5EBCT+ytY6aHmQ4RdEWZovZQqRoc6DLd5BLhkR7BFTHKSkLQW+89so8jd0zEtmSXBVPPnsrXS8joM35Q==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/api": "6.12.1", - "@polkadot/rpc-core": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/keyring": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-8.7.1.tgz", - "integrity": "sha512-t6ZgQVC+nQT7XwbWtEhkDpiAzxKVJw8Xd/gWdww6xIrawHu7jo3SGB4QNdPgkf8TvDHYAAJiupzVQYAlOIq3GA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@polkadot/util-crypto": "8.7.1" - } - }, - "@polkadot/networks": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-8.7.1.tgz", - "integrity": "sha512-8xAmhDW0ry5EKcEjp6VTuwoTm0DdDo/zHsmx88P6sVL87gupuFsL+B6TrsYLl8GcaqxujwrOlKB+CKTUg7qFKg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/util": "8.7.1", - "@substrate/ss58-registry": "^1.17.0" - } - }, - "@polkadot/rpc-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.14.1.tgz", - "integrity": "sha512-0dIsNVIMeCp0kV7+Obz0Odt6K32Ka2ygwhiV5jhhJthy8GJBPo94mKDed5gzln3Dgl2LEdJJt1h/pgCx4a2i4A==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - } - }, - "@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - } - }, - "@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - } - } - }, - "@polkadot/rpc-core": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-6.12.1.tgz", - "integrity": "sha512-Hb08D9zho3SB1UNlUCmG5q0gdgbOx25JKGLDfSYpD/wtD0Y1Sf2X5cfgtMoSYE3USWiRdCu4BxQkXTiRjPjzJg==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/rpc-provider": "6.12.1", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/rpc-provider": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-6.12.1.tgz", - "integrity": "sha512-uUHD3fLTOeZYWJoc6DQlhz+MJR33rVelasV+OxFY2nSD9MSNXRwQh+9UKDQBnyxw5B4BZ2QaEGfucDeavXmVDw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "@polkadot/x-fetch": "^8.1.2", - "@polkadot/x-global": "^8.1.2", - "@polkadot/x-ws": "^8.1.2", - "eventemitter3": "^4.0.7" - } - }, - "@polkadot/types": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-6.12.1.tgz", - "integrity": "sha512-O37cAGUL0xiXTuO3ySweVh0OuFUD6asrd0TfuzGsEp3jAISWdElEHV5QDiftWq8J9Vf8BMgTcP2QLFbmSusxqA==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/types-known": "6.12.1", - "@polkadot/util": "^8.1.2", - "@polkadot/util-crypto": "^8.1.2", - "rxjs": "^7.4.0" - } - }, - "@polkadot/types-augment": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.14.1.tgz", - "integrity": "sha512-Xa4TUFqyZT+IJ6pBSwDjWcF42u/E34OyC+gbs5Z2vWQ4EzSDkq4xNoUKjJlEEgTemsD9lhPOIc4jvqTCefwxEw==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - } - }, - "@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - } - } - }, - "@polkadot/types-codec": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.14.1.tgz", - "integrity": "sha512-y6YDN4HwvEgSWlgrEV04QBBxDxES1cTuUQFzZJzOTuZCWpA371Mdj3M9wYxGXMnj0wa+rCQGECHPZZaNxBMiKg==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/util": "^10.1.1", - "@polkadot/x-bigint": "^10.1.1" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/types-create": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.14.1.tgz", - "integrity": "sha512-fb9yyblj5AYAPzeCIq0kYSfzDxRDi/0ud9gN2UzB3H7M/O4n2mPC1vD4UOLF+B7l9QzCrt4e+k+/riGp7GfvyA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/types-known": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-6.12.1.tgz", - "integrity": "sha512-Z8bHpPQy+mqUm0uR1tai6ra0bQIoPmgRcGFYUM+rJtW1kx/6kZLh10HAICjLpPeA1cwLRzaxHRDqH5MCU6OgXw==", - "requires": { - "@babel/runtime": "^7.16.3", - "@polkadot/networks": "^8.1.2", - "@polkadot/types": "6.12.1", - "@polkadot/util": "^8.1.2" - } - }, - "@polkadot/types-support": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.14.1.tgz", - "integrity": "sha512-XqR4qq6pCZyNBuFVod8nFSNUmLssrjoU9bOIn4Ua2cqNlI9xsuKaI1X5ySEn/oWOtKQ2L5hbCm9vkXrEtXBl1w==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/util": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-8.7.1.tgz", - "integrity": "sha512-XjY1bTo7V6OvOCe4yn8H2vifeuBciCy0gq0k5P1tlGUQLI/Yt0hvDmxcA0FEPtqg8CL+rYRG7WXGPVNjkrNvyQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-global": "8.7.1", - "@polkadot/x-textdecoder": "8.7.1", - "@polkadot/x-textencoder": "8.7.1", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.0", - "ip-regex": "^4.3.0" - } - }, - "@polkadot/util-crypto": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-8.7.1.tgz", - "integrity": "sha512-TaSuJ2aNrB5sYK7YXszkEv24nYJKRFqjF2OrggoMg6uYxUAECvTkldFnhtgeizMweRMxJIBu6bMHlSIutbWgjw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@polkadot/networks": "8.7.1", - "@polkadot/util": "8.7.1", - "@polkadot/wasm-crypto": "^5.1.1", - "@polkadot/x-bigint": "8.7.1", - "@polkadot/x-randomvalues": "8.7.1", - "@scure/base": "1.0.0", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/wasm-bridge": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.4.1.tgz", - "integrity": "sha512-QZDvz6dsUlbYsaMV5biZgZWkYH9BC5AfhT0f0/knv8+LrbAoQdP3Asbvddw8vyU9sbpuCHXrd4bDLBwUCRfrBQ==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-5.1.1.tgz", - "integrity": "sha512-JCcAVfH8DhYuEyd4oX1ouByxhou0TvpErKn8kHjtzt7+tRoFi0nzWlmK4z49vszsV3JJgXxV81i10C0BYlwTcQ==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/wasm-crypto-asmjs": "^5.1.1", - "@polkadot/wasm-crypto-wasm": "^5.1.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-5.1.1.tgz", - "integrity": "sha512-1WBwc2G3pZMKW1T01uXzKE30Sg22MXmF3RbbZiWWk3H2d/Er4jZQRpjumxO5YGWan+xOb7HQQdwnrUnrPgbDhg==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-crypto-init": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-6.4.1.tgz", - "integrity": "sha512-1ALagSi/nfkyFaH6JDYfy/QbicVbSn99K8PV9rctDUfxc7P06R7CoqbjGQ4OMPX6w1WYVPU7B4jPHGLYBlVuMw==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1" - }, - "dependencies": { - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - } - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-5.1.1.tgz", - "integrity": "sha512-F9PZ30J2S8vUNl2oY7Myow5Xsx5z5uNVpnNlJwlmY8IXBvyucvyQ4HSdhJsrbs4W1BfFc0mHghxgp0FbBCnf/Q==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/wasm-util": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-6.4.1.tgz", - "integrity": "sha512-Uwo+WpEsDmFExWC5kTNvsVhvqXMZEKf4gUHXFn4c6Xz4lmieRT5g+1bO1KJ21pl4msuIgdV3Bksfs/oiqMFqlw==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/x-bigint": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-8.7.1.tgz", - "integrity": "sha512-ClkhgdB/KqcAKk3zA6Qw8wBL6Wz67pYTPkrAtImpvoPJmR+l4RARauv+MH34JXMUNlNb3aUwqN6lq2Z1zN+mJg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-fetch": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-8.7.1.tgz", - "integrity": "sha512-ygNparcalYFGbspXtdtZOHvNXZBkNgmNO+um9C0JYq74K5OY9/be93uyfJKJ8JcRJtOqBfVDsJpbiRkuJ1PRfg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", - "@types/node-fetch": "^2.6.1", - "node-fetch": "^2.6.7" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "@polkadot/x-global": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-8.7.1.tgz", - "integrity": "sha512-WOgUor16IihgNVdiTVGAWksYLUAlqjmODmIK1cuWrLOZtV1VBomWcb3obkO9sh5P6iWziAvCB/i+L0vnTN9ZCA==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "@polkadot/x-randomvalues": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-8.7.1.tgz", - "integrity": "sha512-njt17MlfN6yNyNEti7fL12lr5qM6A1aSGkWKVuqzc7XwSBesifJuW4km5u6r2gwhXjH2eHDv9SoQ7WXu8vrrkg==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textdecoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-8.7.1.tgz", - "integrity": "sha512-ia0Ie2zi4VdQdNVD2GE2FZzBMfX//hEL4w546RMJfZM2LqDS674LofHmcyrsv5zscLnnRyCxZC1+J2dt+6MDIA==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-textencoder": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-8.7.1.tgz", - "integrity": "sha512-XDO0A27Xy+eJCKSxENroB8Dcnl+UclGG4ZBei+P/BqZ9rsjskUyd2Vsl6peMXAcsxwOE7g0uTvujoGM8jpKOXw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1" - } - }, - "@polkadot/x-ws": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-8.7.1.tgz", - "integrity": "sha512-Mt0tcNzGXyKnN3DQ06alkv+JLtTfXWu6zSypFrrKHSQe3u79xMQ1nSicmpT3gWLhIa8YF+8CYJXMrqaXgCnDhw==", - "requires": { - "@babel/runtime": "^7.17.8", - "@polkadot/x-global": "8.7.1", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==" - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" - }, - "@substrate/connect": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.9.tgz", - "integrity": "sha512-E6bdBhzsfHNAKlmQSvbTW1jyb0WcIvgbrEBfJ4B6FZ3t1wpGjldL6GrYtegVtKr9/ySQ/pFNn0uVbugukpMDjQ==", - "requires": { - "@substrate/connect-extension-protocol": "^1.0.1", - "@substrate/smoldot-light": "0.6.25", - "eventemitter3": "^4.0.7" - } - }, - "@substrate/connect-extension-protocol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz", - "integrity": "sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==" - }, - "@substrate/smoldot-light": { - "version": "0.6.25", - "resolved": "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.25.tgz", - "integrity": "sha512-OQ9/bnJJy90xSRg5Vp9MIvrgbrVt/r/FwXYSmyLeBBNbJt6o1gSeshVo8icD+2VWwd/TJ2oHl5CVQWe89MyByA==", - "requires": { - "websocket": "^1.0.32" - } - }, - "@substrate/ss58-registry": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.40.0.tgz", - "integrity": "sha512-QuU2nBql3J4KCnOWtWDw4n1K4JU0T79j54ZZvm/9nhsX6AIar13FyhsaBfs6QkJ2ixTQAnd7TocJIoJRWbqMZA==" - }, - "@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "requires": { - "defer-to-connect": "^2.0.1" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" - }, - "@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==" - }, - "@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "requires": { - "@types/node": "*" - } - }, - "@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==" - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "requires": { - "@types/node": "*" - } - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - }, - "@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" - }, - "@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@types/websocket": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", - "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "15.0.15", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz", - "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "optional": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "aws-lambda": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", - "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", - "optional": true, - "requires": { - "aws-sdk": "^2.814.0", - "commander": "^3.0.2", - "js-yaml": "^3.14.1", - "watchpack": "^2.0.0-beta.10" - } - }, - "aws-sdk": { - "version": "2.1399.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1399.0.tgz", - "integrity": "sha512-u9G78zs4vN/jl/AI+wNA0qnId2bUmXaCUrzRjTqN8/MWMda7igXmWHbcLmUC3BKmQPrp3EzgC+jBzFWoz5QL9A==", - "optional": true, - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "dependencies": { - "uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "optional": true - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", - "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.4.0", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", - "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0", - "core-js-compat": "^3.30.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", - "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - } - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, - "bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip39": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", - "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", - "requires": { - "@noble/hashes": "^1.2.0" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" - } - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "optional": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==" - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==" - }, - "cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "caniuse-lite": { - "version": "1.0.30001504", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001504.tgz", - "integrity": "sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "peer": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "peer": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "core-js-compat": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", - "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "requires": { - "node-fetch": "^2.6.11" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "requires": { - "whatwg-url": "^5.0.0" - } - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ed2curve": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ed2curve/-/ed2curve-0.3.0.tgz", - "integrity": "sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==", - "requires": { - "tweetnacl": "1.x.x" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.433", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.433.tgz", - "integrity": "sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "peer": true - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eth-block-tracker": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", - "requires": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - } - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ethereumjs-wallet": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-1.0.2.tgz", - "integrity": "sha512-CCWV4RESJgRdHIvFciVQFnCHfqyhXWchTPlkfp28Qc53ufs+doi5I/cV2+xeK9+qEo25XCWfP9MiL+WEPAZfdA==", - "requires": { - "aes-js": "^3.1.2", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^7.1.2", - "randombytes": "^2.1.0", - "scrypt-js": "^3.0.1", - "utf8": "^3.0.0", - "uuid": "^8.3.2" - } - }, - "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "optional": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-console": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/filter-console/-/filter-console-0.1.1.tgz", - "integrity": "sha512-zrXoV1Uaz52DqPs+qEwNJWJFAWZpYJ47UNmpN9q4j+/EYsz85uV0DC9k8tRND5kYmoVzL0W+Y75q4Rg8sRJCdg==" - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "peer": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "optional": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "peer": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "requires": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "peer": true - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==" - } - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "into-stream": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-5.1.1.tgz", - "integrity": "sha512-krrAJ7McQxGGmvaYbB7Q1mcA+cRwg9Ij2RfWIeVesNBgVDZmzY/Fa4IpZUT3bmdRzMzdf/mzltCG2Dq99IZGBA==", - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } - }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "is2": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.9.tgz", - "integrity": "sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==", - "requires": { - "deep-is": "^0.1.3", - "ip-regex": "^4.1.0", - "is-url": "^1.2.4" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "iso-random-stream": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/iso-random-stream/-/iso-random-stream-2.0.2.tgz", - "integrity": "sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==", - "requires": { - "events": "^3.3.0", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "optional": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "peer": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "optional": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "peer": true - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "requires": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "keypair": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.4.tgz", - "integrity": "sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==" - }, - "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libp2p-crypto": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.20.0.tgz", - "integrity": "sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==", - "requires": { - "err-code": "^3.0.1", - "iso-random-stream": "^2.0.0", - "keypair": "^1.0.4", - "multiformats": "^9.4.5", - "noble-ed25519": "^1.2.6", - "noble-secp256k1": "^1.2.10", - "node-forge": "^0.10.0", - "pem-jwk": "^2.0.0", - "protobufjs": "^6.11.2", - "uint8arrays": "^3.0.0", - "ursa-optional": "^0.10.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "requires": { - "mkdirp": "*" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - } - } - }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, - "mock-socket": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.2.1.tgz", - "integrity": "sha512-aw9F9T9G2zpGipLLhSNh6ZpgUyUl4frcVmRN08uE1NWPWg43Wx6+sGPDbQ7E5iFZZDJW5b5bypMeAEHqTbIFag==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "requires": { - "varint": "^5.0.0" - } - }, - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "multistream": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-2.1.1.tgz", - "integrity": "sha512-xasv76hl6nr1dEy3lPvy7Ej7K/Lx3O/FCvwge8PeVJpciPPoNCbaANcNiBug3IpdvTveZUcAV0DJzdnUDMesNQ==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "noble-ed25519": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/noble-ed25519/-/noble-ed25519-1.2.6.tgz", - "integrity": "sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==" - }, - "noble-secp256k1": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/noble-secp256k1/-/noble-secp256k1-1.2.14.tgz", - "integrity": "sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==" - }, - "nock": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", - "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.21", - "propagate": "^2.0.0" - } - }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" - }, - "node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "requires": { - "http-https": "^1.0.0" - } - }, - "octokit": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.8.1.tgz", - "integrity": "sha512-xBLKFIivbl7wnLwxzLYuDO/JDNYxdyxoSjFrl/QMrY/fwGGQYYklvKUDTUyGMU0aXPrQtJ0IZnG3BXpCkDQzWg==", - "requires": { - "@octokit/app": "^12.0.4", - "@octokit/core": "^3.5.1", - "@octokit/oauth-app": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.18.0", - "@octokit/plugin-rest-endpoint-methods": "^5.14.0", - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.5.1", - "@octokit/types": "^6.35.0" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" - }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "peer-id": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.15.4.tgz", - "integrity": "sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==", - "requires": { - "class-is": "^1.1.0", - "libp2p-crypto": "^0.20.0", - "minimist": "^1.2.5", - "multiformats": "^9.4.5", - "protobufjs": "^6.10.2", - "uint8arrays": "^3.0.0" - } - }, - "pem-jwk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-2.0.0.tgz", - "integrity": "sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==", - "requires": { - "asn1.js": "^5.0.1" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "pkg": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-4.5.1.tgz", - "integrity": "sha512-UXKL88jGQ+FD4//PyrFeRcqurVQ3BVIfUNaEU9cXY24EJz08JyBj85qrGh0CFGvyzNb1jpwHOnns5Sw0M5H92Q==", - "requires": { - "@babel/parser": "7.13.12", - "@babel/runtime": "7.13.10", - "chalk": "^3.0.0", - "escodegen": "^1.14.1", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "into-stream": "^5.1.1", - "minimist": "^1.2.5", - "multistream": "^2.1.1", - "pkg-fetch": "2.6.9", - "prebuild-install": "6.0.1", - "progress": "^2.0.3", - "resolve": "^1.15.1", - "stream-meter": "^1.0.4" - }, - "dependencies": { - "@babel/parser": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", - "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==" - }, - "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "pkg-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-2.6.9.tgz", - "integrity": "sha512-EnVR8LRILXBvaNP+wJOSY02c3+qDDfyEyR+aqAHLhcc9PBnbxFT9UZ1+If49goPQzQPn26TzF//fc6KXZ0aXEg==", - "requires": { - "@babel/runtime": "^7.9.2", - "byline": "^5.0.0", - "chalk": "^3.0.0", - "expand-template": "^2.0.3", - "fs-extra": "^8.1.0", - "minimist": "^1.2.5", - "progress": "^2.0.3", - "request": "^2.88.0", - "request-progress": "^3.0.0", - "semver": "^6.3.0", - "unique-temp-dir": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "polkadot-launch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/polkadot-launch/-/polkadot-launch-2.3.0.tgz", - "integrity": "sha512-X+m5RT1VSq1cQ0ONImSwmb0t+lts+udVORXZzF3C5ljlTAN15M2J/sjLjp6S67i7xBf1HTKGb6cBFVge57PNCg==", - "requires": { - "@polkadot/api": "^8.9.1", - "@polkadot/api-augment": "^8.9.1", - "@polkadot/keyring": "^9.5.1", - "@polkadot/types": "^8.9.1", - "@polkadot/util": "^9.5.1", - "@polkadot/util-crypto": "^9.5.1", - "@types/chai": "^4.2.22", - "@types/mocha": "^9.0.0", - "chai": "^4.3.4", - "ethers": "^5.4.7", - "filter-console": "^0.1.1", - "libp2p-crypto": "^0.20.0", - "mocha": "^9.1.2", - "peer-id": "^0.15.3", - "tcp-port-used": "^1.0.2", - "ts-node": "^10.3.0", - "web3": "^1.6.0", - "web3-core": "^1.6.0", - "web3-eth": "^1.6.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - }, - "@noble/secp256k1": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz", - "integrity": "sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==" - }, - "@polkadot/api": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-8.14.1.tgz", - "integrity": "sha512-jg26eIKFYqVfDBTAopHL3aDaNw9j6TdUkXuvYJOnynpecU4xwbTVKcOtSOjJ2eRX4MgMQ4zlyMHJx3iKw0uUTA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/api-augment": "8.14.1", - "@polkadot/api-base": "8.14.1", - "@polkadot/api-derive": "8.14.1", - "@polkadot/keyring": "^10.1.1", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/types-known": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "eventemitter3": "^4.0.7", - "rxjs": "^7.5.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/api-derive": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.14.1.tgz", - "integrity": "sha512-eWG1MrQhHMUjt9gDHN9/9/ZMATu1MolqcalPFhNoGtdON3+I0J3ntjQ4y5X7+p2OGwQplpYRKqbK4k7tKzu8tA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/api": "8.14.1", - "@polkadot/api-augment": "8.14.1", - "@polkadot/api-base": "8.14.1", - "@polkadot/rpc-core": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/keyring": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.2.tgz", - "integrity": "sha512-qY5baU1qduwTE04Cyrqtf2pCpsIk7Z5vi45CD9U3cbkKXaJoNUqIpfKoL8Vh/yVJBwhclMdxV9E2rEJs8Iv4bg==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/util": "9.7.2", - "@polkadot/util-crypto": "9.7.2" - } - }, - "@polkadot/networks": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-10.4.2.tgz", - "integrity": "sha512-FAh/znrEvWBiA/LbcT5GXHsCFUl//y9KqxLghSr/CreAmAergiJNT0MVUezC7Y36nkATgmsr4ylFwIxhVtuuCw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@substrate/ss58-registry": "^1.38.0" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/rpc-core": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz", - "integrity": "sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/rpc-augment": "8.14.1", - "@polkadot/rpc-provider": "8.14.1", - "@polkadot/types": "8.14.1", - "@polkadot/util": "^10.1.1", - "rxjs": "^7.5.6" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/rpc-provider": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz", - "integrity": "sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-support": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "@polkadot/x-fetch": "^10.1.1", - "@polkadot/x-global": "^10.1.1", - "@polkadot/x-ws": "^10.1.1", - "@substrate/connect": "0.7.9", - "eventemitter3": "^4.0.7", - "mock-socket": "^9.1.5", - "nock": "^13.2.9" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/types": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz", - "integrity": "sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/keyring": "^10.1.1", - "@polkadot/types-augment": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1", - "@polkadot/util-crypto": "^10.1.1", - "rxjs": "^7.5.6" - }, - "dependencies": { - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==" - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" - }, - "@polkadot/keyring": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.4.2.tgz", - "integrity": "sha512-7iHhJuXaHrRTG6cJDbZE9G+c1ts1dujp0qbO4RfAPmT7YUvphHvAtCKueN9UKPz5+TYDL+rP/jDEaSKU8jl/qQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/util": "10.4.2", - "@polkadot/util-crypto": "10.4.2" - } - }, - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/util-crypto": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.4.2.tgz", - "integrity": "sha512-RxZvF7C4+EF3fzQv8hZOLrYCBq5+wA+2LWv98nECkroChY3C2ZZvyWDqn8+aonNULt4dCVTWDZM0QIY6y4LUAQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@polkadot/networks": "10.4.2", - "@polkadot/util": "10.4.2", - "@polkadot/wasm-crypto": "^6.4.1", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-randomvalues": "10.4.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-randomvalues": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.4.2.tgz", - "integrity": "sha512-mf1Wbpe7pRZHO0V3V89isPLqZOy5XGX2bCqsfUWHgb1NvV1MMx5TjVjdaYyNlGTiOkAmJKlOHshcfPU2sYWpNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/types-known": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.14.1.tgz", - "integrity": "sha512-GP7gRo9nmitykkrRnoLF61Qm19UFdTwMsOnJkdm7AOeWDmZGxutacgO6k1tBsHr38hsiCCGsB/JiseUgywvGIw==", - "requires": { - "@babel/runtime": "^7.18.9", - "@polkadot/networks": "^10.1.1", - "@polkadot/types": "8.14.1", - "@polkadot/types-codec": "8.14.1", - "@polkadot/types-create": "8.14.1", - "@polkadot/util": "^10.1.1" - }, - "dependencies": { - "@polkadot/util": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-10.4.2.tgz", - "integrity": "sha512-0r5MGICYiaCdWnx+7Axlpvzisy/bi1wZGXgCSw5+ZTyPTOqvsYRqM2X879yxvMsGfibxzWqNzaiVjToz1jvUaA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-bigint": "10.4.2", - "@polkadot/x-global": "10.4.2", - "@polkadot/x-textdecoder": "10.4.2", - "@polkadot/x-textencoder": "10.4.2", - "@types/bn.js": "^5.1.1", - "bn.js": "^5.2.1" - } - }, - "@polkadot/x-bigint": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.4.2.tgz", - "integrity": "sha512-awRiox+/XSReLzimAU94fPldowiwnnMUkQJe8AebYhNocAj6SJU00GNoj6j6tAho6yleOwrTJXZaWFBaQVJQNg==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textdecoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.4.2.tgz", - "integrity": "sha512-d3ADduOKUTU+cliz839+KCFmi23pxTlabH7qh7Vs1GZQvXOELWdqFOqakdiAjtMn68n1KVF4O14Y+OUm7gp/zA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - }, - "@polkadot/x-textencoder": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.4.2.tgz", - "integrity": "sha512-mxcQuA1exnyv74Kasl5vxBq01QwckG088lYjc3KwmND6+pPrW2OWagbxFX5VFoDLDAE+UJtnUHsjdWyOTDhpQA==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2" - } - } - } - }, - "@polkadot/util": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-9.7.2.tgz", - "integrity": "sha512-ivTmA+KkPCq5i3O0Gk+dTds/hwdwlYCh89aKfeaG9ni3XHUbbuBgTqHneo648HqxwAwSAyiDiwE9EdXrzAdO4Q==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-bigint": "9.7.2", - "@polkadot/x-global": "9.7.2", - "@polkadot/x-textdecoder": "9.7.2", - "@polkadot/x-textencoder": "9.7.2", - "@types/bn.js": "^5.1.0", - "bn.js": "^5.2.1", - "ip-regex": "^4.3.0" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "requires": { - "@babel/runtime": "^7.18.6" - } - } - } - }, - "@polkadot/util-crypto": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.2.tgz", - "integrity": "sha512-tfz6mJtPwoNteivKCmR+QklC4mr1/hGZRsDJLWKaFhanDinYZ3V2pJM1EbCI6WONLuuzlTxsDXjAffWzzRqlPA==", - "requires": { - "@babel/runtime": "^7.18.6", - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.0", - "@polkadot/networks": "9.7.2", - "@polkadot/util": "9.7.2", - "@polkadot/wasm-crypto": "^6.2.2", - "@polkadot/x-bigint": "9.7.2", - "@polkadot/x-randomvalues": "9.7.2", - "@scure/base": "1.1.1", - "ed2curve": "^0.3.0", - "tweetnacl": "^1.0.3" - }, - "dependencies": { - "@polkadot/networks": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.2.tgz", - "integrity": "sha512-oMAdF8Y9CLBI0EUZBcycHcvbQQdbkJHevPJ/lwnZXJTaueXuav/Xm2yiFj5J3V8meIjLocURlMawgsAVItXOBQ==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/util": "9.7.2", - "@substrate/ss58-registry": "^1.23.0" - } - } - } - }, - "@polkadot/wasm-crypto": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.4.1.tgz", - "integrity": "sha512-FH+dcDPdhSLJvwL0pMLtn/LIPd62QDPODZRCmDyw+pFjLOMaRBc7raomWUOqyRWJTnqVf/iscc2rLVLNMyt7ag==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-bridge": "6.4.1", - "@polkadot/wasm-crypto-asmjs": "6.4.1", - "@polkadot/wasm-crypto-init": "6.4.1", - "@polkadot/wasm-crypto-wasm": "6.4.1", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/wasm-crypto-asmjs": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-6.4.1.tgz", - "integrity": "sha512-UxZTwuBZlnODGIQdCsE2Sn/jU0O2xrNQ/TkhRFELfkZXEXTNu4lw6NpaKq7Iey4L+wKd8h4lT3VPVkMcPBLOvA==", - "requires": { - "@babel/runtime": "^7.20.6" - } - }, - "@polkadot/wasm-crypto-wasm": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-6.4.1.tgz", - "integrity": "sha512-3VV9ZGzh0ZY3SmkkSw+0TRXxIpiO0nB8lFwlRgcwaCihwrvLfRnH9GI8WE12mKsHVjWTEVR3ogzILJxccAUjDA==", - "requires": { - "@babel/runtime": "^7.20.6", - "@polkadot/wasm-util": "6.4.1" - } - }, - "@polkadot/x-bigint": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.7.2.tgz", - "integrity": "sha512-qi8/DTGypFSt5vvNOsYcEaqH72lymfyidGlsHlZ6e7nNASnEhk/NaOcINiTr1ds+fpu4dtKXWAIPZufujf2JeQ==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "requires": { - "@babel/runtime": "^7.18.6" - } - } - } - }, - "@polkadot/x-fetch": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.4.2.tgz", - "integrity": "sha512-Ubb64yaM4qwhogNP+4mZ3ibRghEg5UuCYRMNaCFoPgNAY8tQXuDKrHzeks3+frlmeH9YRd89o8wXLtWouwZIcw==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/node-fetch": "^2.6.2", - "node-fetch": "^3.3.0" - } - }, - "@polkadot/x-global": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.4.2.tgz", - "integrity": "sha512-g6GXHD/ykZvHap3M6wh19dO70Zm43l4jEhlxf5LtTo5/0/UporFCXr2YJYZqfbn9JbQwl1AU+NroYio+vtJdiA==", - "requires": { - "@babel/runtime": "^7.20.13" - } - }, - "@polkadot/x-randomvalues": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.2.tgz", - "integrity": "sha512-819slnXNpoVtqdhjI19ao7w5m+Zwx11VfwCZkFQypVv3b/1UEoKG/baJA9dVI6yMvhnBN//i8mLgNy3IXWbVVw==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "requires": { - "@babel/runtime": "^7.18.6" - } - } - } - }, - "@polkadot/x-textdecoder": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.2.tgz", - "integrity": "sha512-hhrMNZwJBmusdpqjDRpOHZoMB4hpyJt9Gu9Bi9is7/D/vq/hpxq8z7s6NxrbRyXJf1SIk6NMK0jf5XjRLdKdbw==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "requires": { - "@babel/runtime": "^7.18.6" - } - } - } - }, - "@polkadot/x-textencoder": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.2.tgz", - "integrity": "sha512-GHbSdbMPixDAOnJ9cvL/x9sPNeHegPoDSqCAzY5H6/zHc/fNn0vUu0To9VpPgPhp/Jb9dbc0h8YqEyvOcOlphw==", - "requires": { - "@babel/runtime": "^7.18.6", - "@polkadot/x-global": "9.7.2" - }, - "dependencies": { - "@polkadot/x-global": { - "version": "9.7.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz", - "integrity": "sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==", - "requires": { - "@babel/runtime": "^7.18.6" - } - } - } - }, - "@polkadot/x-ws": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.4.2.tgz", - "integrity": "sha512-3gHSTXAWQu1EMcMVTF5QDKHhEHzKxhAArweEyDXE7VsgKUP/ixxw4hVZBrkX122iI5l5mjSiooRSnp/Zl3xqDQ==", - "requires": { - "@babel/runtime": "^7.20.13", - "@polkadot/x-global": "10.4.2", - "@types/websocket": "^1.0.5", - "websocket": "^1.0.34" - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "prebuild-install": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - }, - "protobufjs": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", - "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.1", - "@types/node": ">=13.7.0", - "long": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "optional": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "requires": { - "throttleit": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "requires": { - "lowercase-keys": "^2.0.0" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "requires": { - "events": "^3.0.0" - }, - "dependencies": { - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - } - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", - "optional": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "solc": { - "version": "0.8.20", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.20.tgz", - "integrity": "sha512-fPRnGspIEqmhu63RFO3pc79sLA7ZmzO0Uy0L5l6hEt2wAsq0o7UV6pXkAp3Mfv9IBhg7Px/oTu3a+y4gs3BWrQ==", - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "optional": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-meter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", - "requires": { - "readable-stream": "^2.1.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" - } - } - }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "tcp-port-used": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.2.tgz", - "integrity": "sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==", - "requires": { - "debug": "4.3.1", - "is2": "^2.0.6" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - } - } - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - } - } - }, - "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" - }, - "uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha512-5gSP1liv10Gjp8cMEnFd6shzkL/D6W1uhXSFNCxDC+YI8+L8wkCYCbJ7n77Ezb4wE/xzMogecE+DtamEe9PZjg==" - }, - "uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "requires": { - "multiformats": "^9.4.2" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unique-temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz", - "integrity": "sha512-tE68ki2FndoVdPioyiz8mYaJeX3xU/9lk4dml7KlLKEkWLtDGAYeg5LGjE2dMkzB8d6R3HbcKTn/I14nukP2dw==", - "requires": { - "mkdirp": "^0.5.1", - "os-tmpdir": "^1.0.1", - "uid2": "0.0.3" - } - }, - "universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "requires": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "optional": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "optional": true - } - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "ursa-optional": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz", - "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==", - "requires": { - "bindings": "^1.5.0", - "nan": "^2.14.2" - } - }, - "utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "optional": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "web3": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", - "requires": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-bzz": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", - "requires": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", - "requires": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-core-helpers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", - "requires": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-core-method": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", - "requires": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-core-promievent": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", - "requires": { - "eventemitter3": "4.0.4" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-core-requestmanager": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", - "requires": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - } - }, - "web3-core-subscriptions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-eth": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", - "requires": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-abi": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - } - }, - "web3-eth-accounts": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", - "requires": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } - } - }, - "web3-eth-contract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", - "requires": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-ens": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-eth-iban": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", - "requires": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - } - }, - "web3-eth-personal": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - } - } - }, - "web3-net": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", - "requires": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - } - }, - "web3-providers-http": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", - "requires": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - } - }, - "web3-providers-ipc": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", - "requires": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" - } - }, - "web3-providers-ws": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", - "requires": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - } - } - }, - "web3-shh": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", - "requires": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" - } - }, - "web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", - "requires": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" - }, - "which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==" - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "optional": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "optional": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } - } -} diff --git a/tools/package.json b/tools/package.json deleted file mode 100644 index 7ad9552..0000000 --- a/tools/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "tanssi-tools", - "version": "0.0.1", - "license": "GPL-3.0", - "dependencies": { - "@polkadot/api": "^6.6.1", - "bip39": "^3.1.0", - "eth-block-tracker": "^4.4.3", - "ethereumjs-wallet": "^1.0.0", - "octokit": "^1.0.6", - "pkg": "^4.4.9", - "polkadot-launch": "^2.3.0", - "rlp": "^2.2.6", - "solc": "^0.8.0", - "ts-node": "^8.10.1", - "typescript": "^4.4.3", - "web3": "^1.8.0", - "yargs": "^17.0.1" - }, - "devDependencies": { - "@types/yargs": "^15.0.12", - "node-fetch": "^3.3.1" - }, - "scripts": { - "print-client-release-issue": "ts-node github/print-client-release-issue.ts", - "print-runtime-release-issue": "ts-node github/print-runtime-release-issue.ts", - "print-version-bump-info": "ts-node github/print-version-bump-info.ts" - } -} diff --git a/tools/tsconfig.json b/tools/tsconfig.json deleted file mode 100644 index bca570d..0000000 --- a/tools/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "target": "es2020", - "module": "commonjs" - }, - "exclude": ["node_modules", "tests"] -} diff --git a/typescript-api/.gitignore b/typescript-api/.gitignore deleted file mode 100644 index 15b9b74..0000000 --- a/typescript-api/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -metadata-*.json -build -*.tgz - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Dependency directories -node_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache \ No newline at end of file diff --git a/typescript-api/README.md b/typescript-api/README.md deleted file mode 100644 index f5b8cb6..0000000 --- a/typescript-api/README.md +++ /dev/null @@ -1,54 +0,0 @@ -## Description - -TypeScript type definitions that can be used to decorate the @polkadot/api. - -## Installation - -```bash -npm i @tanssi/api-augment -``` - -> :warning: `@polkadot/api` should be installed in your project! - -## Usage - -Add to your codebase entry point before any imports from the API itself. - -- `import '@tanssi/api-augment'` - applies Moonbeam types and endpoint augmentation -- `import '@tanssi/api-augment/dancebox'` - applies Dancebox types and endpoint augmentation - -## Docs - -- @polkadot/api - TS type generation -- @polkadot/api - Since upgrading to the 7.x series, TypeScript augmentation is missing -- @polkadot/api - TypeScript interfaces - -## Publish - -Update package version. - -```bash -npm version --no-git-tag-version 0.1500.0 -``` - -Generate new types. - -```bash -npm run generate -``` - -`The version change and new generated types should be merged to master.` - -Build the package. - -```bash -npm run build -``` - -`This will build the package and copy necessary files to the build folder.` - -```bash -npm run publish -``` - -`This will publish content of the build folder.` diff --git a/typescript-api/package.json b/typescript-api/package.json deleted file mode 100644 index 85c7fc7..0000000 --- a/typescript-api/package.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "name": "@tanssi/api-augment", - "version": "0.601.0", - "type": "module", - "description": "Tanssi types augment for @polkadot/api", - "author": "Moondance-labs", - "license": "GPL-3.0-only", - "homepage": "https://github.com/moondance-labs/tanssi/tree/master/typescript-api#readme", - "repository": { - "type": "git", - "url": "https://github.com/moondance-labs/tanssi.git", - "directory": "typescript-api" - }, - "engines": { - "node": ">=16.0.0" - }, - "scripts": { - "create-local-interfaces": "pnpm tsx ./scripts/runtime-upgrade.ts && pnpm fmt:fix", - "generate": "pnpm run load:meta && pnpm run generate:defs && pnpm run generate:meta", - "clean": "pnpm exec rm -rf node_modules && pnpm exec rm -rf build", - "fmt": "prettier --check --ignore-path ../.prettierignore ./", - "fmt:fix": "prettier --write --ignore-path ../.prettierignore 'src'", - "postgenerate": "pnpm run pretty", - "load:meta:local": "curl -s -H \"Content-Type: application/json\" -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > metadata-dancebox.json", - "generate:defs": "pnpm run generate:defs:dancebox && pnpm run generate:defs:flashbox", - "generate:defs:dancebox": "pnpm tsx node_modules/@polkadot/typegen/scripts/polkadot-types-from-defs.mjs --package @tanssi/api-augment/tanssi/interfaces --input ./src/dancebox/interfaces --endpoint ./metadata-dancebox.json", - "generate:defs:flashbox": "pnpm tsx node_modules/@polkadot/typegen/scripts/polkadot-types-from-defs.mjs --package @tanssi/api-augment/tanssi/interfaces --input ./src/flashbox/interfaces --endpoint ./metadata-flashbox.json", - "generate:meta": "pnpm run generate:meta:dancebox && pnpm run generate:meta:flashbox", - "generate:meta:dancebox": "pnpm tsx node_modules/@polkadot/typegen/scripts/polkadot-types-from-chain.mjs --endpoint ./metadata-dancebox.json --package @tanssi/api-augment/tanssi/interfaces --output ./src/dancebox/interfaces", - "generate:meta:flashbox": "pnpm tsx node_modules/@polkadot/typegen/scripts/polkadot-types-from-chain.mjs --endpoint ./metadata-flashbox.json --package @tanssi/api-augment/tanssi/interfaces --output ./src/flashbox/interfaces", - "prebuild": "rimraf build", - "build": "tsc -b --verbose", - "postbuild": "pnpm tsx ./scripts/postbuild.ts", - "publish": "npm publish", - "deploy": "pnpm run generate && pnpm run build && pnpm run publish", - "pretty": "prettier --write --ignore-unknown --plugin prettier-plugin-jsdoc 'src/**/*'" - }, - "main": "./build/index.cjs", - "module": "./build/index.js", - "types": "./build/index.d.ts", - "exports": { - ".": { - "types": "./build/index.d.ts", - "require": "./build/index.cjs", - "default": "./build/index.js" - }, - "./dancebox": { - "types": "./build/dancebox/index.d.ts", - "require": "./build/dancebox/index.cjs", - "default": "./build/dancebox/index.js" - }, - "./flashbox": { - "types": "./build/flashbox/index.d.ts", - "require": "./build/flashbox/index.cjs", - "default": "./build/flashbox/index.js" - } - }, - "typesVersions": { - "*": { - "dancebox": [ - "./build/dancebox/index.d.ts" - ], - "flashbox": [ - "./build/flashbox/index.d.ts" - ] - } - }, - "keywords": [ - "dancebox", - "types", - "polkadot", - "api" - ], - "files": [ - "/build", - "README.md", - "LICENSE" - ], - "dependencies": { - "@polkadot/api": "^10.11.2", - "@polkadot/api-augment": "^10.11.2", - "@polkadot/api-base": "^10.11.2", - "@polkadot/api-derive": "^10.11.2", - "@polkadot/rpc-augment": "^10.11.2", - "@polkadot/rpc-core": "^10.11.2", - "@polkadot/rpc-provider": "^10.11.2", - "@polkadot/types": "^10.11.2", - "@polkadot/types-augment": "^10.11.2", - "@polkadot/types-codec": "^10.11.2", - "@polkadot/types-create": "^10.11.2", - "@polkadot/types-known": "^10.11.2", - "@polkadot/types-support": "^10.11.2", - "chalk": "^5.3.0" - }, - "devDependencies": { - "@polkadot/typegen": "^10.11.2", - "prettier": "^2.8.8", - "prettier-plugin-jsdoc": "^0.3.38", - "rimraf": "^5.0.5", - "tsx": "^4.7.0", - "typescript": "^5.3.3" - } -} diff --git a/typescript-api/scripts/generate-types.ts b/typescript-api/scripts/generate-types.ts deleted file mode 100644 index cdf7a9d..0000000 --- a/typescript-api/scripts/generate-types.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { execSync, spawn, ChildProcessWithoutNullStreams } from "child_process"; -import { existsSync, writeFileSync } from "fs"; -import path from "path"; - -let nodeProcess: ChildProcessWithoutNullStreams | undefined = undefined; - -async function main() { - const CHAINS = ["dancebox"]; - - const RUNTIME_CHAIN_SPEC = process.argv[2]; - - // Bump package version - if (process.argv.length > 2) { - console.log(`Bump package version to 0.${RUNTIME_CHAIN_SPEC}.0`); - execSync(`pnpm version --no-git-tag-version 0.${RUNTIME_CHAIN_SPEC}.0`, { stdio: "inherit" }); - } - - if (!existsSync("../target/release/tanssi-node")) { - console.error("Missing ../target/release/tanssi binary"); - process.exit(1); - } - - // Install dependencies - execSync("pnpm install", { stdio: "inherit" }); - - // Get runtimes metadata - for (const CHAIN of CHAINS) { - console.log(`Starting ${CHAIN} node`); - nodeProcess = spawn("../target/release/tanssi-node", [ - "--no-hardware-benchmarks", - "--no-telemetry", - "--no-prometheus", - "--alice", - "--tmp", - `--chain=${CHAIN}-local`, - "--dev-service", - "--wasm-execution=interpreted-i-know-what-i-do", - "--rpc-port=9933", - ]); - - const onProcessExit = () => { - nodeProcess && nodeProcess.kill(); - }; - - process.once("exit", onProcessExit); - process.once("SIGINT", onProcessExit); - - nodeProcess.once("exit", () => { - process.removeListener("exit", onProcessExit); - process.removeListener("SIGINT", onProcessExit); - }); - - await new Promise(async (resolve, reject) => { - const onData = async (data: any) => { - if (data.includes("Running JSON-RPC server")) { - console.log(`Getting ${CHAIN} metadata`); - - const requestOptions = { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - id: "1", - jsonrpc: "2.0", - method: "state_getMetadata", - params: [], - }), - }; - - fetch("http://localhost:9933", requestOptions) - .then((response) => response.json()) - .then((data) => { - writeFileSync(path.join(process.cwd(), `metadata-${CHAIN}.json`), JSON.stringify(data)); - - execSync("pnpm run load:meta:local", { stdio: "inherit" }); - nodeProcess!.kill(); - setTimeout(() => {}, 5000); // Sleep for 5 seconds - resolve("success"); - }); - } - }; - - nodeProcess!.stderr!.on("data", onData); - nodeProcess!.stdout!.on("data", onData); - nodeProcess!.stderr.on("error", (error) => { - console.error(error); - reject(error); - }); - nodeProcess!.stdout.on("error", (error) => { - console.error(error); - reject(error); - }); - }); - } - - // Generate typescript api code - console.log("Generating typescript api code..."); - execSync("pnpm run generate:defs", { stdio: "inherit" }); - execSync("pnpm run generate:meta", { stdio: "inherit" }); - execSync("pnpm run postgenerate", { stdio: "inherit" }); - - // Build the package - execSync("pnpm run build", { stdio: "inherit" }); -} - -main() - .catch((error) => { - console.error(error); - nodeProcess?.kill(); - process.exit(1); - }) - .then(() => { - nodeProcess?.kill(); - process.exit(0); - }); diff --git a/typescript-api/scripts/postbuild.ts b/typescript-api/scripts/postbuild.ts deleted file mode 100644 index b8f8223..0000000 --- a/typescript-api/scripts/postbuild.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { writeFileSync, copyFileSync, readFileSync } from "fs"; -import path from "path"; - -async function main() { - // console.log("Loading package.json"); - - // const pck = JSON.parse(readFileSync(path.join(process.cwd(), "package.json"), "utf-8")); - const buildPath = `${process.env.PWD}/build`; - - // pck.scripts = {}; - // pck.private = false; - // pck.type = "module"; - // pck.files = ["**/*", "!**/tsconfig.tsbuildinfo", "!**/*.tgz"]; - - // console.log(`Writing ${buildPath}/package.json`); - // writeFileSync(`${buildPath}/package.json`, JSON.stringify(pck, null, 2)); - // copyFileSync("README.md", `${buildPath}/README.md`); - - // console.log(`Copy ${buildPath}/README.md`); - - // Copy empty files for CommonJS modules - copyFileSync("./src/index.cjs", `${buildPath}/index.cjs`); - copyFileSync("./src/index.cjs", `${buildPath}/flashbox/index.cjs`); - console.log(`Done postbuild`); -} - -main() - .catch((error) => { - console.error(error); - process.exit(1); - }) - .then(() => { - process.exit(0); - }); diff --git a/typescript-api/scripts/runtime-upgrade.ts b/typescript-api/scripts/runtime-upgrade.ts deleted file mode 100644 index f5c6b5a..0000000 --- a/typescript-api/scripts/runtime-upgrade.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { execSync, spawn, ChildProcessWithoutNullStreams } from "child_process"; -import { existsSync, writeFileSync } from "fs"; -import path from "path"; -import chalk from "chalk"; - -let nodeProcess: ChildProcessWithoutNullStreams | undefined = undefined; - -async function main() { - const CHAINS = ["dancebox", "flashbox"]; - - const RUNTIME_CHAIN_SPEC = process.argv[2]; - - // Bump package version - if (process.argv.length > 2) { - console.log(`Bump package version to 0.${RUNTIME_CHAIN_SPEC}.0`); - execSync(`pnpm version --no-git-tag-version 0.${RUNTIME_CHAIN_SPEC}.0`, { - stdio: "inherit", - }); - } - - if (!existsSync("../target/release/tanssi-node")) { - console.error("Missing ../target/release/tanssi binary"); - process.exit(1); - } - - // Get runtimes metadata - for (const CHAIN of CHAINS) { - console.log(`Starting ${CHAIN} node`); - nodeProcess = spawn("../target/release/tanssi-node", [ - "--no-hardware-benchmarks", - "--no-telemetry", - "--no-prometheus", - "--alice", - "--tmp", - `--chain=${CHAIN}-local`, - "--dev-service", - "--wasm-execution=interpreted-i-know-what-i-do", - "--rpc-port=9933", - ]); - - const onProcessExit = () => { - nodeProcess && nodeProcess.kill(); - }; - - process.once("exit", onProcessExit); - process.once("SIGINT", onProcessExit); - - await new Promise((resolve, reject) => { - const onData = async (data: any) => { - if (data.includes("Running JSON-RPC server")) { - console.log(`Getting ${CHAIN} metadata`); - - const requestOptions = { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - id: "1", - jsonrpc: "2.0", - method: "state_getMetadata", - params: [], - }), - }; - - fetch("http://localhost:9933", requestOptions) - .then((response) => response.json()) - .then((data) => { - writeFileSync(path.join(process.cwd(), `metadata-${CHAIN}.json`), JSON.stringify(data)); - - nodeProcess!.kill(); - setTimeout(() => {}, 5000); // Sleep for 5 seconds - resolve("success"); - }); - } - }; - - nodeProcess!.stderr!.on("data", onData); - nodeProcess!.stdout!.on("data", onData); - - nodeProcess!.stderr.on("error", (error) => { - console.error(error); - reject(error); - }); - nodeProcess!.stderr.on("error", (error) => { - console.error(error); - reject(error); - }); - }); - } - - // Generate typescript api code - console.log("Generating typescript api code..."); - execSync("pnpm run generate:defs", { stdio: "inherit" }); - execSync("pnpm run generate:meta", { stdio: "inherit" }); - - // Build the package - console.log("Building package..."); - execSync("pnpm run build", { stdio: "inherit" }); - console.log("Post build..."); - execSync("pnpm run postbuild", { stdio: "inherit" }); - execSync("pnpm run postgenerate", { stdio: "inherit" }); - - console.log(`Script complete ${chalk.bgBlackBright.greenBright("api-augment")} package built successfully ✅`); -} - -main() - .catch((error) => { - console.error(error); - nodeProcess?.kill(); - process.exit(1); - }) - .then(() => { - nodeProcess?.kill(); - process.exit(0); - }); diff --git a/typescript-api/src/dancebox/index.ts b/typescript-api/src/dancebox/index.ts deleted file mode 100644 index ec8687d..0000000 --- a/typescript-api/src/dancebox/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import "./interfaces/types-lookup.js"; -import "./interfaces/augment-api.js"; -import "./interfaces/augment-types.js"; diff --git a/typescript-api/src/dancebox/interfaces/augment-api-consts.ts b/typescript-api/src/dancebox/interfaces/augment-api-consts.ts deleted file mode 100644 index 983e22c..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-consts.ts +++ /dev/null @@ -1,407 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/consts"; - -import type { ApiTypes, AugmentedConst } from "@polkadot/api-base/types"; -import type { Option, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; -import type { Codec } from "@polkadot/types-codec/types"; -import type { AccountId32, Perbill, Permill } from "@polkadot/types/interfaces/runtime"; -import type { - FrameSupportPalletId, - FrameSystemLimitsBlockLength, - FrameSystemLimitsBlockWeights, - SpVersionRuntimeVersion, - SpWeightsRuntimeDbWeight, - SpWeightsWeightV2Weight, - XcmV3Junctions, -} from "@polkadot/types/lookup"; - -export type __AugmentedConst = AugmentedConst; - -declare module "@polkadot/api-base/types/consts" { - interface AugmentedConsts { - asyncBacking: { - /** Purely informative, but used by mocking tools like chospticks to allow knowing how to mock blocks */ - expectedBlockTime: u64 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - authorityMapping: { - sessionRemovalBoundary: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - balances: { - /** - * The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO! - * - * If you _really_ need it to be zero, you can enable the feature `insecure_zero_ed` for this pallet. However, you - * do so at your own risk: this will open up a major DoS vector. In case you have multiple sources of provider - * references, you may also get unexpected behaviour if you set this to zero. - * - * Bottom line: Do yourself a favour and make it at least one! - */ - existentialDeposit: u128 & AugmentedConst; - /** The maximum number of individual freeze locks that can exist on an account at any time. */ - maxFreezes: u32 & AugmentedConst; - /** The maximum number of holds that can exist on an account at any time. */ - maxHolds: u32 & AugmentedConst; - /** The maximum number of locks that should exist on an account. Not strictly enforced, but used for weight estimation. */ - maxLocks: u32 & AugmentedConst; - /** The maximum number of named reserves that can exist on an account. */ - maxReserves: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - configuration: { - sessionDelay: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - dataPreservers: { - maxBootNodes: u32 & AugmentedConst; - maxBootNodeUrlLen: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - foreignAssets: { - /** The amount of funds that must be reserved when creating a new approval. */ - approvalDeposit: u128 & AugmentedConst; - /** The amount of funds that must be reserved for a non-provider asset account to be maintained. */ - assetAccountDeposit: u128 & AugmentedConst; - /** The basic amount of funds that must be reserved for an asset. */ - assetDeposit: u128 & AugmentedConst; - /** The basic amount of funds that must be reserved when adding metadata to your asset. */ - metadataDepositBase: u128 & AugmentedConst; - /** The additional funds that must be reserved for the number of bytes you store in your metadata. */ - metadataDepositPerByte: u128 & AugmentedConst; - /** - * Max number of items to destroy per `destroy_accounts` and `destroy_approvals` call. - * - * Must be configured to result in a weight that makes each call fit in a block. - */ - removeItemsLimit: u32 & AugmentedConst; - /** The maximum length of a name or symbol stored on-chain. */ - stringLimit: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - identity: { - /** The amount held on deposit for a registered identity. */ - basicDeposit: u128 & AugmentedConst; - /** The amount held on deposit per encoded byte for a registered identity. */ - byteDeposit: u128 & AugmentedConst; - /** Maxmimum number of registrars allowed in the system. Needed to bound the complexity of, e.g., updating judgements. */ - maxRegistrars: u32 & AugmentedConst; - /** The maximum number of sub-accounts allowed per identified account. */ - maxSubAccounts: u32 & AugmentedConst; - /** The maximum length of a suffix. */ - maxSuffixLength: u32 & AugmentedConst; - /** The maximum length of a username, including its suffix and any system-added delimiters. */ - maxUsernameLength: u32 & AugmentedConst; - /** The number of blocks within which a username grant must be accepted. */ - pendingUsernameExpiration: u32 & AugmentedConst; - /** - * The amount held on deposit for a registered subaccount. This should account for the fact that one storage - * item's value will increase by the size of an account ID, and there will be another trie item whose value is the - * size of an account ID plus 32 bytes. - */ - subAccountDeposit: u128 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - inflationRewards: { - /** Inflation rate per orchestrator block (proportion of the total issuance) */ - inflationRate: Perbill & AugmentedConst; - /** The account that will store rewards waiting to be paid out */ - pendingRewardsAccount: AccountId32 & AugmentedConst; - /** Proportion of the new supply dedicated to staking */ - rewardsPortion: Perbill & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - invulnerables: { - /** Maximum number of invulnerables. */ - maxInvulnerables: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - messageQueue: { - /** - * The size of the page; this implies the maximum message size which can be sent. - * - * A good value depends on the expected message sizes, their weights, the weight that is available for processing - * them and the maximal needed message size. The maximal message size is slightly lower than this as defined by - * [`MaxMessageLenOf`]. - */ - heapSize: u32 & AugmentedConst; - /** - * The maximum number of stale pages (i.e. of overweight messages) allowed before culling can happen. Once there - * are more stale pages than this, then historical pages may be dropped, even if they contain unprocessed - * overweight messages. - */ - maxStale: u32 & AugmentedConst; - /** - * The amount of weight (if any) which should be provided to the message queue for servicing enqueued items. - * - * This may be legitimately `None` in the case that you will call `ServiceQueues::service_queues` manually. - */ - serviceWeight: Option & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - multisig: { - /** - * The base amount of currency needed to reserve for creating a multisig execution or to store a dispatch call for later. - * - * This is held for an additional storage item whose value size is `4 + sizeof((BlockNumber, Balance, AccountId))` - * bytes and whose key size is `32 + sizeof(AccountId)` bytes. - */ - depositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per unit threshold when creating a multisig execution. - * - * This is held for adding 32 bytes more into a pre-existing storage value. - */ - depositFactor: u128 & AugmentedConst; - /** The maximum amount of signatories allowed in the multisig. */ - maxSignatories: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - pooledStaking: { - /** - * All eligible candidates are stored in a sorted list that is modified each time delegations changes. It is safer - * to bound this list, in which case eligible candidate could fall out of this list if they have less stake than - * the top `EligibleCandidatesBufferSize` eligible candidates. One of this top candidates leaving will then not - * bring the dropped candidate in the list. An extrinsic is available to manually bring back such dropped candidate. - */ - eligibleCandidatesBufferSize: u32 & AugmentedConst; - /** - * When creating the first Shares for a candidate the supply can arbitrary. Picking a value too high is a barrier - * of entry for staking, which will increase overtime as the value of each share will increase due to auto compounding. - */ - initialAutoCompoundingShareValue: u128 & AugmentedConst; - /** - * When creating the first Shares for a candidate the supply can be arbitrary. Picking a value too low will make - * an higher supply, which means each share will get less rewards, and rewards calculations will have more - * impactful rounding errors. Picking a value too high is a barrier of entry for staking. - */ - initialManualClaimShareValue: u128 & AugmentedConst; - /** - * Minimum amount of stake a Candidate must delegate (stake) towards itself. Not reaching this minimum prevents - * from being elected. - */ - minimumSelfDelegation: u128 & AugmentedConst; - /** Part of the rewards that will be sent exclusively to the collator. */ - rewardsCollatorCommission: Perbill & AugmentedConst; - /** Account holding Currency of all delegators. */ - stakingAccount: AccountId32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - proxy: { - /** - * The base amount of currency needed to reserve for creating an announcement. - * - * This is held when a new storage item holding a `Balance` is created (typically 16 bytes). - */ - announcementDepositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per announcement made. - * - * This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes) into a pre-existing storage value. - */ - announcementDepositFactor: u128 & AugmentedConst; - /** The maximum amount of time-delayed announcements that are allowed to be pending. */ - maxPending: u32 & AugmentedConst; - /** The maximum amount of proxies allowed for a single account. */ - maxProxies: u32 & AugmentedConst; - /** - * The base amount of currency needed to reserve for creating a proxy. - * - * This is held for an additional storage item whose value size is `sizeof(Balance)` bytes and whose key size is - * `sizeof(AccountId)` bytes. - */ - proxyDepositBase: u128 & AugmentedConst; - /** - * The amount of currency needed per proxy added. - * - * This is held for adding 32 bytes plus an instance of `ProxyType` more into a pre-existing storage value. Thus, - * when configuring `ProxyDepositFactor` one should take into account `32 + proxy_type.encode().len()` bytes of data. - */ - proxyDepositFactor: u128 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - registrar: { - depositAmount: u128 & AugmentedConst; - /** Max length of encoded genesis data */ - maxGenesisDataSize: u32 & AugmentedConst; - /** Max length of para id list */ - maxLengthParaIds: u32 & AugmentedConst; - maxLengthTokenSymbol: u32 & AugmentedConst; - sessionDelay: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - relayStorageRoots: { - /** - * Limit the number of relay storage roots that will be stored. This limit applies to the number of items, not to - * their age. Decreasing the value of `MaxStorageRoots` is a breaking change and needs a migration to clean the - * `RelayStorageRoots` mapping. - */ - maxStorageRoots: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - servicesPayment: { - /** The maximum number of block production credits that can be accumulated */ - freeBlockProductionCredits: u32 & AugmentedConst; - /** The maximum number of collator assigment production credits that can be accumulated */ - freeCollatorAssignmentCredits: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - streamPayment: { - openStreamHoldAmount: u128 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - system: { - /** Maximum number of block number to block hash mappings to keep (oldest pruned first). */ - blockHashCount: u32 & AugmentedConst; - /** The maximum length of a block (in bytes). */ - blockLength: FrameSystemLimitsBlockLength & AugmentedConst; - /** Block & extrinsics weights: base values and limits. */ - blockWeights: FrameSystemLimitsBlockWeights & AugmentedConst; - /** The weight of runtime database operations the runtime can invoke. */ - dbWeight: SpWeightsRuntimeDbWeight & AugmentedConst; - /** - * The designated SS58 prefix of this chain. - * - * This replaces the "ss58Format" property declared in the chain spec. Reason is that the runtime should know - * about the prefix in order to make use of it as an identifier of the chain. - */ - ss58Prefix: u16 & AugmentedConst; - /** Get the chain's current version. */ - version: SpVersionRuntimeVersion & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - timestamp: { - /** - * The minimum period between blocks. - * - * Be aware that this is different to the _expected_ period that the block production apparatus provides. Your - * chosen consensus system will generally work with this to determine a sensible block time. For example, in the - * Aura pallet it will be double this period on default settings. - */ - minimumPeriod: u64 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - transactionPayment: { - /** - * A fee multiplier for `Operational` extrinsics to compute "virtual tip" to boost their `priority` - * - * This value is multiplied by the `final_fee` to obtain a "virtual tip" that is later added to a tip component in - * regular `priority` calculations. It means that a `Normal` transaction can front-run a similarly-sized - * `Operational` extrinsic (with no tip), by including a tip value greater than the virtual tip. - * - * ```rust,ignore - * // For `Normal` - * let priority = priority_calc(tip); - * - * // For `Operational` - * let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier; - * let priority = priority_calc(tip + virtual_tip); - * ``` - * - * Note that since we use `final_fee` the multiplier applies also to the regular `tip` sent with the transaction. - * So, not only does the transaction get a priority bump based on the `inclusion_fee`, but we also amplify the - * impact of tips applied to `Operational` transactions. - */ - operationalFeeMultiplier: u8 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - treasury: { - /** Percentage of spare funds (if any) that are burnt per spend period. */ - burn: Permill & AugmentedConst; - /** - * The maximum number of approvals that can wait in the spending queue. - * - * NOTE: This parameter is also used within the Bounties Pallet extension if enabled. - */ - maxApprovals: u32 & AugmentedConst; - /** The treasury's pallet id, used for deriving its sovereign account ID. */ - palletId: FrameSupportPalletId & AugmentedConst; - /** The period during which an approved treasury spend has to be claimed. */ - payoutPeriod: u32 & AugmentedConst; - /** - * Fraction of a proposal's value that should be bonded in order to place the proposal. An accepted proposal gets - * these back. A rejected proposal does not. - */ - proposalBond: Permill & AugmentedConst; - /** Maximum amount of funds that should be placed in a deposit for making a proposal. */ - proposalBondMaximum: Option & AugmentedConst; - /** Minimum amount of funds that should be placed in a deposit for making a proposal. */ - proposalBondMinimum: u128 & AugmentedConst; - /** Period between successive spends. */ - spendPeriod: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - txPause: { - /** - * Maximum length for pallet name and call name SCALE encoded string names. - * - * TOO LONG NAMES WILL BE TREATED AS PAUSED. - */ - maxNameLen: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - utility: { - /** The limit on the number of batched calls. */ - batchedCallsLimit: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - xcmCoreBuyer: { - /** - * Additional ttl for in flight orders (total would be CoreBuyingXCMQueryTtl + AdditionalTtlForInflightOrders) - * after which the in flight orders can be cleaned up by anyone. - */ - additionalTtlForInflightOrders: u32 & AugmentedConst; - /** TTL to be used in xcm's notify query */ - coreBuyingXCMQueryTtl: u32 & AugmentedConst; - /** TTL for pending blocks entry, which prevents anyone to submit another core buying xcm. */ - pendingBlocksTtl: u32 & AugmentedConst; - universalLocation: XcmV3Junctions & AugmentedConst; - /** - * A configuration for base priority of unsigned transactions. - * - * This is exposed so that it can be tuned for particular runtime, when multiple pallets send unsigned transactions. - */ - unsignedPriority: u64 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - xcmpQueue: { - /** - * The maximum number of inbound XCMP channels that can be suspended simultaneously. - * - * Any further channel suspensions will fail and messages may get dropped without further notice. Choosing a high - * value (1000) is okay; the trade-off that is described in [`InboundXcmpSuspended`] still applies at that scale. - */ - maxInboundSuspended: u32 & AugmentedConst; - /** Generic const */ - [key: string]: Codec; - }; - } // AugmentedConsts -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-errors.ts b/typescript-api/src/dancebox/interfaces/augment-api-errors.ts deleted file mode 100644 index caaaa9f..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-errors.ts +++ /dev/null @@ -1,588 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/errors"; - -import type { ApiTypes, AugmentedError } from "@polkadot/api-base/types"; - -export type __AugmentedError = AugmentedError; - -declare module "@polkadot/api-base/types/errors" { - interface AugmentedErrors { - assetRate: { - /** The given asset ID already has an assigned conversion rate and cannot be re-created. */ - AlreadyExists: AugmentedError; - /** Overflow ocurred when calculating the inverse rate. */ - Overflow: AugmentedError; - /** The given asset ID is unknown. */ - UnknownAssetKind: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - authorInherent: { - /** Author already set in block. */ - AuthorAlreadySet: AugmentedError; - /** The author in the inherent is not an eligible author. */ - CannotBeAuthor: AugmentedError; - /** No AccountId was found to be associated with this author */ - NoAccountId: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - authorNoting: { - AsPreRuntimeError: AugmentedError; - AuraDigestFirstItem: AugmentedError; - AuthorNotFound: AugmentedError; - FailedDecodingHeader: AugmentedError; - /** The new value for a configuration parameter is invalid. */ - FailedReading: AugmentedError; - NonAuraDigest: AugmentedError; - NonDecodableSlot: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - balances: { - /** Beneficiary account must pre-exist. */ - DeadAccount: AugmentedError; - /** Value too low to create account due to existential deposit. */ - ExistentialDeposit: AugmentedError; - /** A vesting schedule already exists for this account. */ - ExistingVestingSchedule: AugmentedError; - /** Transfer/payment would kill account. */ - Expendability: AugmentedError; - /** Balance too low to send value. */ - InsufficientBalance: AugmentedError; - /** Account liquidity restrictions prevent withdrawal. */ - LiquidityRestrictions: AugmentedError; - /** Number of freezes exceed `MaxFreezes`. */ - TooManyFreezes: AugmentedError; - /** Number of holds exceed `MaxHolds`. */ - TooManyHolds: AugmentedError; - /** Number of named reserves exceed `MaxReserves`. */ - TooManyReserves: AugmentedError; - /** Vesting balance too high to send value. */ - VestingBalance: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - configuration: { - /** The new value for a configuration parameter is invalid. */ - InvalidNewValue: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - dataPreservers: { - /** This container chain does not have any boot nodes */ - NoBootNodes: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - foreignAssets: { - /** The asset-account already exists. */ - AlreadyExists: AugmentedError; - /** The asset is not live, and likely being destroyed. */ - AssetNotLive: AugmentedError; - /** Invalid metadata given. */ - BadMetadata: AugmentedError; - /** Invalid witness data given. */ - BadWitness: AugmentedError; - /** Account balance must be greater than or equal to the transfer amount. */ - BalanceLow: AugmentedError; - /** Callback action resulted in error */ - CallbackFailed: AugmentedError; - /** The origin account is frozen. */ - Frozen: AugmentedError; - /** The asset status is not the expected status. */ - IncorrectStatus: AugmentedError; - /** The asset ID is already taken. */ - InUse: AugmentedError; - /** - * The asset is a live asset and is actively being used. Usually emit for operations such as `start_destroy` which - * require the asset to be in a destroying state. - */ - LiveAsset: AugmentedError; - /** Minimum balance should be non-zero. */ - MinBalanceZero: AugmentedError; - /** The account to alter does not exist. */ - NoAccount: AugmentedError; - /** The asset-account doesn't have an associated deposit. */ - NoDeposit: AugmentedError; - /** The signing account has no permission to do the operation. */ - NoPermission: AugmentedError; - /** The asset should be frozen before the given operation. */ - NotFrozen: AugmentedError; - /** No approval exists that would allow the transfer. */ - Unapproved: AugmentedError; - /** - * Unable to increment the consumer reference counters on the account. Either no provider reference exists to - * allow a non-zero balance of a non-self-sufficient asset, or one fewer then the maximum number of consumers has - * been reached. - */ - UnavailableConsumer: AugmentedError; - /** The given asset ID is unknown. */ - Unknown: AugmentedError; - /** The operation would result in funds being burned. */ - WouldBurn: AugmentedError; - /** The source account would not survive the transfer and it needs to stay alive. */ - WouldDie: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - foreignAssetsCreator: { - AssetAlreadyExists: AugmentedError; - AssetDoesNotExist: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - identity: { - /** Account ID is already named. */ - AlreadyClaimed: AugmentedError; - /** Empty index. */ - EmptyIndex: AugmentedError; - /** Fee is changed. */ - FeeChanged: AugmentedError; - /** The index is invalid. */ - InvalidIndex: AugmentedError; - /** Invalid judgement. */ - InvalidJudgement: AugmentedError; - /** The signature on a username was not valid. */ - InvalidSignature: AugmentedError; - /** The provided suffix is too long. */ - InvalidSuffix: AugmentedError; - /** The target is invalid. */ - InvalidTarget: AugmentedError; - /** The username does not meet the requirements. */ - InvalidUsername: AugmentedError; - /** The provided judgement was for a different identity. */ - JudgementForDifferentIdentity: AugmentedError; - /** Judgement given. */ - JudgementGiven: AugmentedError; - /** Error that occurs when there is an issue paying for judgement. */ - JudgementPaymentFailed: AugmentedError; - /** The authority cannot allocate any more usernames. */ - NoAllocation: AugmentedError; - /** No identity found. */ - NoIdentity: AugmentedError; - /** The username cannot be forcefully removed because it can still be accepted. */ - NotExpired: AugmentedError; - /** Account isn't found. */ - NotFound: AugmentedError; - /** Account isn't named. */ - NotNamed: AugmentedError; - /** Sub-account isn't owned by sender. */ - NotOwned: AugmentedError; - /** Sender is not a sub-account. */ - NotSub: AugmentedError; - /** The sender does not have permission to issue a username. */ - NotUsernameAuthority: AugmentedError; - /** The requested username does not exist. */ - NoUsername: AugmentedError; - /** Setting this username requires a signature, but none was provided. */ - RequiresSignature: AugmentedError; - /** Sticky judgement. */ - StickyJudgement: AugmentedError; - /** Maximum amount of registrars reached. Cannot add any more. */ - TooManyRegistrars: AugmentedError; - /** Too many subs-accounts. */ - TooManySubAccounts: AugmentedError; - /** The username is already taken. */ - UsernameTaken: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - invulnerables: { - /** Account is already an Invulnerable. */ - AlreadyInvulnerable: AugmentedError; - /** Account does not have keys registered */ - NoKeysRegistered: AugmentedError; - /** Account is not an Invulnerable. */ - NotInvulnerable: AugmentedError; - /** There are too many Invulnerables. */ - TooManyInvulnerables: AugmentedError; - /** Unable to derive collator id from account id */ - UnableToDeriveCollatorId: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - maintenanceMode: { - /** The chain cannot enter maintenance mode because it is already in maintenance mode */ - AlreadyInMaintenanceMode: AugmentedError; - /** The chain cannot resume normal operation because it is not in maintenance mode */ - NotInMaintenanceMode: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - messageQueue: { - /** The message was already processed and cannot be processed again. */ - AlreadyProcessed: AugmentedError; - /** There is temporarily not enough weight to continue servicing messages. */ - InsufficientWeight: AugmentedError; - /** The referenced message could not be found. */ - NoMessage: AugmentedError; - /** Page to be reaped does not exist. */ - NoPage: AugmentedError; - /** Page is not reapable because it has items remaining to be processed and is not old enough. */ - NotReapable: AugmentedError; - /** The message is queued for future execution. */ - Queued: AugmentedError; - /** - * The queue is paused and no message can be executed from it. - * - * This can change at any time and may resolve in the future by re-trying. - */ - QueuePaused: AugmentedError; - /** Another call is in progress and needs to finish before this call can happen. */ - RecursiveDisallowed: AugmentedError; - /** - * This message is temporarily unprocessable. - * - * Such errors are expected, but not guaranteed, to resolve themselves eventually through retrying. - */ - TemporarilyUnprocessable: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - migrations: { - /** Preimage already exists in the new storage. */ - PreimageAlreadyExists: AugmentedError; - /** Preimage is larger than the new max size. */ - PreimageIsTooBig: AugmentedError; - /** Missing preimage in original democracy storage */ - PreimageMissing: AugmentedError; - /** Provided upper bound is too low. */ - WrongUpperBound: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - multisig: { - /** Call is already approved by this signatory. */ - AlreadyApproved: AugmentedError; - /** The data to be stored is already stored. */ - AlreadyStored: AugmentedError; - /** The maximum weight information provided was too low. */ - MaxWeightTooLow: AugmentedError; - /** Threshold must be 2 or greater. */ - MinimumThreshold: AugmentedError; - /** Call doesn't need any (more) approvals. */ - NoApprovalsNeeded: AugmentedError; - /** Multisig operation not found when attempting to cancel. */ - NotFound: AugmentedError; - /** No timepoint was given, yet the multisig operation is already underway. */ - NoTimepoint: AugmentedError; - /** Only the account that originally created the multisig is able to cancel it. */ - NotOwner: AugmentedError; - /** The sender was contained in the other signatories; it shouldn't be. */ - SenderInSignatories: AugmentedError; - /** The signatories were provided out of order; they should be ordered. */ - SignatoriesOutOfOrder: AugmentedError; - /** There are too few signatories in the list. */ - TooFewSignatories: AugmentedError; - /** There are too many signatories in the list. */ - TooManySignatories: AugmentedError; - /** A timepoint was given, yet no multisig operation is underway. */ - UnexpectedTimepoint: AugmentedError; - /** A different timepoint was given to the multisig operation that is underway. */ - WrongTimepoint: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - parachainSystem: { - /** The inherent which supplies the host configuration did not run this block. */ - HostConfigurationNotAvailable: AugmentedError; - /** No code upgrade has been authorized. */ - NothingAuthorized: AugmentedError; - /** No validation function upgrade is currently scheduled. */ - NotScheduled: AugmentedError; - /** Attempt to upgrade validation function while existing upgrade pending. */ - OverlappingUpgrades: AugmentedError; - /** Polkadot currently prohibits this parachain from upgrading its validation function. */ - ProhibitedByPolkadot: AugmentedError; - /** The supplied validation function has compiled into a blob larger than Polkadot is willing to run. */ - TooBig: AugmentedError; - /** The given code upgrade has not been authorized. */ - Unauthorized: AugmentedError; - /** The inherent which supplies the validation data did not run this block. */ - ValidationDataNotAvailable: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - polkadotXcm: { - /** The given account is not an identifiable sovereign account for any location. */ - AccountNotSovereign: AugmentedError; - /** The location is invalid since it already has a subscription from us. */ - AlreadySubscribed: AugmentedError; - /** The given location could not be used (e.g. because it cannot be expressed in the desired version of XCM). */ - BadLocation: AugmentedError; - /** The version of the `Versioned` value used is not able to be interpreted. */ - BadVersion: AugmentedError; - /** Could not check-out the assets for teleportation to the destination chain. */ - CannotCheckOutTeleport: AugmentedError; - /** Could not re-anchor the assets to declare the fees for the destination chain. */ - CannotReanchor: AugmentedError; - /** The destination `MultiLocation` provided cannot be inverted. */ - DestinationNotInvertible: AugmentedError; - /** The assets to be sent are empty. */ - Empty: AugmentedError; - /** The operation required fees to be paid which the initiator could not meet. */ - FeesNotMet: AugmentedError; - /** The message execution fails the filter. */ - Filtered: AugmentedError; - /** The unlock operation cannot succeed because there are still consumers of the lock. */ - InUse: AugmentedError; - /** Invalid non-concrete asset. */ - InvalidAssetNotConcrete: AugmentedError; - /** Invalid asset, reserve chain could not be determined for it. */ - InvalidAssetUnknownReserve: AugmentedError; - /** Invalid asset, do not support remote asset reserves with different fees reserves. */ - InvalidAssetUnsupportedReserve: AugmentedError; - /** Origin is invalid for sending. */ - InvalidOrigin: AugmentedError; - /** Local XCM execution incomplete. */ - LocalExecutionIncomplete: AugmentedError; - /** A remote lock with the corresponding data could not be found. */ - LockNotFound: AugmentedError; - /** The owner does not own (all) of the asset that they wish to do the operation on. */ - LowBalance: AugmentedError; - /** The referenced subscription could not be found. */ - NoSubscription: AugmentedError; - /** - * There was some other issue (i.e. not to do with routing) in sending the message. Perhaps a lack of space for - * buffering the message. - */ - SendFailure: AugmentedError; - /** Too many assets have been attempted for transfer. */ - TooManyAssets: AugmentedError; - /** The asset owner has too many locks on the asset. */ - TooManyLocks: AugmentedError; - /** Too many assets with different reserve locations have been attempted for transfer. */ - TooManyReserves: AugmentedError; - /** The desired destination was unreachable, generally because there is a no way of routing to it. */ - Unreachable: AugmentedError; - /** The message's weight could not be determined. */ - UnweighableMessage: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - pooledStaking: { - CandidateTransferingOwnSharesForbidden: AugmentedError; - DisabledFeature: AugmentedError; - InconsistentState: AugmentedError; - InvalidPalletSetting: AugmentedError; - MathOverflow: AugmentedError; - MathUnderflow: AugmentedError; - NoOneIsStaking: AugmentedError; - NotEnoughShares: AugmentedError; - RequestCannotBeExecuted: AugmentedError; - RewardsMustBeNonZero: AugmentedError; - StakeMustBeNonZero: AugmentedError; - SwapResultsInZeroShares: AugmentedError; - TryingToLeaveTooSoon: AugmentedError; - UnsufficientSharesForTransfer: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - proxy: { - /** Account is already a proxy. */ - Duplicate: AugmentedError; - /** Call may not be made by proxy because it may escalate its privileges. */ - NoPermission: AugmentedError; - /** Cannot add self as proxy. */ - NoSelfProxy: AugmentedError; - /** Proxy registration not found. */ - NotFound: AugmentedError; - /** Sender is not a proxy of the account to be proxied. */ - NotProxy: AugmentedError; - /** There are too many proxies registered or too many announcements pending. */ - TooMany: AugmentedError; - /** Announcement, if made at all, was made too recently. */ - Unannounced: AugmentedError; - /** A call which is incompatible with the proxy type's filter was attempted. */ - Unproxyable: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - registrar: { - /** Attempted to register a ParaId with a genesis data size greater than the limit */ - GenesisDataTooBig: AugmentedError; - /** Tried to change parathread params for a para id that is not a registered parathread */ - NotAParathread: AugmentedError; - /** Tried to register a ParaId with an account that did not have enough balance for the deposit */ - NotSufficientDeposit: AugmentedError; - /** Attempted to deregister a ParaId that is already being deregistered */ - ParaIdAlreadyDeregistered: AugmentedError; - /** Attempted to pause a ParaId that was already paused */ - ParaIdAlreadyPaused: AugmentedError; - /** Attempted to register a ParaId that was already registered */ - ParaIdAlreadyRegistered: AugmentedError; - /** The bounded list of ParaIds has reached its limit */ - ParaIdListFull: AugmentedError; - /** Tried to mark_valid_for_collating a ParaId that is not in PendingVerification */ - ParaIdNotInPendingVerification: AugmentedError; - /** Attempted to unpause a ParaId that was not paused */ - ParaIdNotPaused: AugmentedError; - /** Attempted to deregister a ParaId that is not registered */ - ParaIdNotRegistered: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - servicesPayment: { - CreditPriceTooExpensive: AugmentedError; - InsufficientCredits: AugmentedError; - InsufficientFundsToPurchaseCredits: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - session: { - /** Registered duplicate key. */ - DuplicatedKey: AugmentedError; - /** Invalid ownership proof. */ - InvalidProof: AugmentedError; - /** Key setting account is not live, so it's impossible to associate keys. */ - NoAccount: AugmentedError; - /** No associated validator ID for account. */ - NoAssociatedValidatorId: AugmentedError; - /** No keys are associated with this account. */ - NoKeys: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - streamPayment: { - CanOnlyCancelOwnRequest: AugmentedError; - CantAcceptOwnRequest: AugmentedError; - CantBeBothSourceAndTarget: AugmentedError; - CantFetchCurrentTime: AugmentedError; - CantOverrideMandatoryChange: AugmentedError; - ChangingAssetRequiresAbsoluteDepositChange: AugmentedError; - ImmediateDepositChangeRequiresSameAssetId: AugmentedError; - NoPendingRequest: AugmentedError; - SourceCantDecreaseRate: AugmentedError; - StreamIdOverflow: AugmentedError; - TargetCantChangeDeposit: AugmentedError; - TargetCantIncreaseRate: AugmentedError; - UnauthorizedOrigin: AugmentedError; - UnknownStreamId: AugmentedError; - WrongRequestNonce: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - sudo: { - /** Sender must be the Sudo account. */ - RequireSudo: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - system: { - /** The origin filter prevent the call to be dispatched. */ - CallFiltered: AugmentedError; - /** - * Failed to extract the runtime version from the new runtime. - * - * Either calling `Core_version` or decoding `RuntimeVersion` failed. - */ - FailedToExtractRuntimeVersion: AugmentedError; - /** The name of specification does not match between the current runtime and the new runtime. */ - InvalidSpecName: AugmentedError; - /** Suicide called when the account has non-default composite data. */ - NonDefaultComposite: AugmentedError; - /** There is a non-zero reference count preventing the account from being purged. */ - NonZeroRefCount: AugmentedError; - /** No upgrade authorized. */ - NothingAuthorized: AugmentedError; - /** The specification version is not allowed to decrease between the current runtime and the new runtime. */ - SpecVersionNeedsToIncrease: AugmentedError; - /** The submitted code is not authorized. */ - Unauthorized: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - treasury: { - /** The payment has already been attempted. */ - AlreadyAttempted: AugmentedError; - /** The spend is not yet eligible for payout. */ - EarlyPayout: AugmentedError; - /** The balance of the asset kind is not convertible to the balance of the native asset. */ - FailedToConvertBalance: AugmentedError; - /** The payment has neither failed nor succeeded yet. */ - Inconclusive: AugmentedError; - /** The spend origin is valid but the amount it is allowed to spend is lower than the amount to be spent. */ - InsufficientPermission: AugmentedError; - /** Proposer's balance is too low. */ - InsufficientProposersBalance: AugmentedError; - /** No proposal, bounty or spend at that index. */ - InvalidIndex: AugmentedError; - /** The payout was not yet attempted/claimed. */ - NotAttempted: AugmentedError; - /** There was some issue with the mechanism of payment. */ - PayoutError: AugmentedError; - /** Proposal has not been approved. */ - ProposalNotApproved: AugmentedError; - /** The spend has expired and cannot be claimed. */ - SpendExpired: AugmentedError; - /** Too many approvals in the queue. */ - TooManyApprovals: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - txPause: { - /** The call is paused. */ - IsPaused: AugmentedError; - /** The call is unpaused. */ - IsUnpaused: AugmentedError; - NotFound: AugmentedError; - /** The call is whitelisted and cannot be paused. */ - Unpausable: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - utility: { - /** Too many calls batched. */ - TooManyCalls: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - xcmCoreBuyer: { - /** Block production is pending for para id with successfully placed order */ - BlockProductionPending: AugmentedError; - /** This collator is not assigned to this parathread */ - CollatorNotAssigned: AugmentedError; - ErrorDeliveringXCM: AugmentedError; - ErrorValidatingXCM: AugmentedError; - /** There are too many in-flight orders, buying cores will not work until some of those orders finish. */ - InFlightLimitReached: AugmentedError; - InvalidProof: AugmentedError; - /** Inverting location from destination point of view failed */ - LocationInversionFailed: AugmentedError; - /** There are no collators assigned to this parathread, so no point in buying a core */ - NoAssignedCollators: AugmentedError; - /** The para id is not a parathread */ - NotAParathread: AugmentedError; - /** An order for this para id already exists */ - OrderAlreadyExists: AugmentedError; - /** Converting a multilocation into a relay relative multilocation failed */ - ReanchorFailed: AugmentedError; - /** Modifying XCM to report the result of XCM failed */ - ReportNotifyingSetupFailed: AugmentedError; - /** Unexpected XCM response */ - UnexpectedXCMResponse: AugmentedError; - /** - * The `XcmWeights` storage has not been set. This must have been set by root with the value of the relay chain - * xcm call weight and extrinsic weight - */ - XcmWeightStorageNotSet: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - xcmpQueue: { - /** The execution is already resumed. */ - AlreadyResumed: AugmentedError; - /** The execution is already suspended. */ - AlreadySuspended: AugmentedError; - /** Setting the queue config failed since one of its values was invalid. */ - BadQueueConfig: AugmentedError; - /** Generic error */ - [key: string]: AugmentedError; - }; - } // AugmentedErrors -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-events.ts b/typescript-api/src/dancebox/interfaces/augment-api-events.ts deleted file mode 100644 index f652da6..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-events.ts +++ /dev/null @@ -1,1331 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/events"; - -import type { ApiTypes, AugmentedEvent } from "@polkadot/api-base/types"; -import type { Bytes, Null, Option, Result, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; -import type { ITuple } from "@polkadot/types-codec/types"; -import type { AccountId32, H256 } from "@polkadot/types/interfaces/runtime"; -import type { - CumulusPrimitivesCoreAggregateMessageOrigin, - DanceboxRuntimeProxyType, - FrameSupportDispatchDispatchInfo, - FrameSupportMessagesProcessMessageError, - FrameSupportTokensMiscBalanceStatus, - PalletMultisigTimepoint, - PalletPooledStakingTargetPool, - PalletStreamPaymentDepositChange, - PalletStreamPaymentParty, - PalletStreamPaymentStreamConfig, - SpRuntimeDispatchError, - SpWeightsWeightV2Weight, - StagingXcmV3MultiLocation, - XcmV3MultiassetMultiAssets, - XcmV3Response, - XcmV3TraitsError, - XcmV3TraitsOutcome, - XcmV3Xcm, - XcmVersionedMultiAssets, - XcmVersionedMultiLocation, -} from "@polkadot/types/lookup"; - -export type __AugmentedEvent = AugmentedEvent; - -declare module "@polkadot/api-base/types/events" { - interface AugmentedEvents { - assetRate: { - AssetRateCreated: AugmentedEvent; - AssetRateRemoved: AugmentedEvent; - AssetRateUpdated: AugmentedEvent< - ApiType, - [assetKind: u16, old: u128, new_: u128], - { assetKind: u16; old: u128; new_: u128 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - authorNoting: { - /** Latest author changed */ - LatestAuthorChanged: AugmentedEvent< - ApiType, - [paraId: u32, blockNumber: u32, newAuthor: AccountId32, latestSlotNumber: u64], - { paraId: u32; blockNumber: u32; newAuthor: AccountId32; latestSlotNumber: u64 } - >; - /** Removed author data */ - RemovedAuthorData: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - balances: { - /** A balance was set by root. */ - BalanceSet: AugmentedEvent; - /** Some amount was burned from an account. */ - Burned: AugmentedEvent; - /** Some amount was deposited (e.g. for transaction fees). */ - Deposit: AugmentedEvent; - /** An account was removed whose balance was non-zero but below ExistentialDeposit, resulting in an outright loss. */ - DustLost: AugmentedEvent< - ApiType, - [account: AccountId32, amount: u128], - { account: AccountId32; amount: u128 } - >; - /** An account was created with some free balance. */ - Endowed: AugmentedEvent< - ApiType, - [account: AccountId32, freeBalance: u128], - { account: AccountId32; freeBalance: u128 } - >; - /** Some balance was frozen. */ - Frozen: AugmentedEvent; - /** Total issuance was increased by `amount`, creating a credit to be balanced. */ - Issued: AugmentedEvent; - /** Some balance was locked. */ - Locked: AugmentedEvent; - /** Some amount was minted into an account. */ - Minted: AugmentedEvent; - /** Total issuance was decreased by `amount`, creating a debt to be balanced. */ - Rescinded: AugmentedEvent; - /** Some balance was reserved (moved from free to reserved). */ - Reserved: AugmentedEvent; - /** - * Some balance was moved from the reserve of the first account to the second account. Final argument indicates - * the destination balance type. - */ - ReserveRepatriated: AugmentedEvent< - ApiType, - [ - from: AccountId32, - to: AccountId32, - amount: u128, - destinationStatus: FrameSupportTokensMiscBalanceStatus - ], - { - from: AccountId32; - to: AccountId32; - amount: u128; - destinationStatus: FrameSupportTokensMiscBalanceStatus; - } - >; - /** Some amount was restored into an account. */ - Restored: AugmentedEvent; - /** Some amount was removed from the account (e.g. for misbehavior). */ - Slashed: AugmentedEvent; - /** Some amount was suspended from an account (it can be restored later). */ - Suspended: AugmentedEvent; - /** Some balance was thawed. */ - Thawed: AugmentedEvent; - /** Transfer succeeded. */ - Transfer: AugmentedEvent< - ApiType, - [from: AccountId32, to: AccountId32, amount: u128], - { from: AccountId32; to: AccountId32; amount: u128 } - >; - /** Some balance was unlocked. */ - Unlocked: AugmentedEvent; - /** Some balance was unreserved (moved from reserved to free). */ - Unreserved: AugmentedEvent; - /** An account was upgraded. */ - Upgraded: AugmentedEvent; - /** Some amount was withdrawn from the account (e.g. for transaction fees). */ - Withdraw: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - collatorAssignment: { - NewPendingAssignment: AugmentedEvent< - ApiType, - [randomSeed: U8aFixed, fullRotation: bool, targetSession: u32], - { randomSeed: U8aFixed; fullRotation: bool; targetSession: u32 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - cumulusXcm: { - /** Downward message executed with the given outcome. [ id, outcome ] */ - ExecutedDownward: AugmentedEvent; - /** Downward message is invalid XCM. [ id ] */ - InvalidFormat: AugmentedEvent; - /** Downward message is unsupported version of XCM. [ id ] */ - UnsupportedVersion: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - dataPreservers: { - /** The list of boot_nodes changed. */ - BootNodesChanged: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - dmpQueue: { - /** Some debris was cleaned up. */ - CleanedSome: AugmentedEvent; - /** The cleanup of remaining pallet storage completed. */ - Completed: AugmentedEvent; - /** The export of pages completed. */ - CompletedExport: AugmentedEvent; - /** The export of overweight messages completed. */ - CompletedOverweightExport: AugmentedEvent; - /** The export of a page completed. */ - Exported: AugmentedEvent; - /** The export of an overweight message completed. */ - ExportedOverweight: AugmentedEvent; - /** - * The export of a page failed. - * - * This should never be emitted. - */ - ExportFailed: AugmentedEvent; - /** - * The export of an overweight message failed. - * - * This should never be emitted. - */ - ExportOverweightFailed: AugmentedEvent; - /** The cleanup of remaining pallet storage started. */ - StartedCleanup: AugmentedEvent; - /** The export of pages started. */ - StartedExport: AugmentedEvent; - /** The export of overweight messages started. */ - StartedOverweightExport: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - foreignAssets: { - /** Accounts were destroyed for given asset. */ - AccountsDestroyed: AugmentedEvent< - ApiType, - [assetId: u16, accountsDestroyed: u32, accountsRemaining: u32], - { assetId: u16; accountsDestroyed: u32; accountsRemaining: u32 } - >; - /** An approval for account `delegate` was cancelled by `owner`. */ - ApprovalCancelled: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32, delegate: AccountId32], - { assetId: u16; owner: AccountId32; delegate: AccountId32 } - >; - /** Approvals were destroyed for given asset. */ - ApprovalsDestroyed: AugmentedEvent< - ApiType, - [assetId: u16, approvalsDestroyed: u32, approvalsRemaining: u32], - { assetId: u16; approvalsDestroyed: u32; approvalsRemaining: u32 } - >; - /** (Additional) funds have been approved for transfer to a destination account. */ - ApprovedTransfer: AugmentedEvent< - ApiType, - [assetId: u16, source: AccountId32, delegate: AccountId32, amount: u128], - { assetId: u16; source: AccountId32; delegate: AccountId32; amount: u128 } - >; - /** Some asset `asset_id` was frozen. */ - AssetFrozen: AugmentedEvent; - /** The min_balance of an asset has been updated by the asset owner. */ - AssetMinBalanceChanged: AugmentedEvent< - ApiType, - [assetId: u16, newMinBalance: u128], - { assetId: u16; newMinBalance: u128 } - >; - /** An asset has had its attributes changed by the `Force` origin. */ - AssetStatusChanged: AugmentedEvent; - /** Some asset `asset_id` was thawed. */ - AssetThawed: AugmentedEvent; - /** Some account `who` was blocked. */ - Blocked: AugmentedEvent; - /** Some assets were destroyed. */ - Burned: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32, balance: u128], - { assetId: u16; owner: AccountId32; balance: u128 } - >; - /** Some asset class was created. */ - Created: AugmentedEvent< - ApiType, - [assetId: u16, creator: AccountId32, owner: AccountId32], - { assetId: u16; creator: AccountId32; owner: AccountId32 } - >; - /** An asset class was destroyed. */ - Destroyed: AugmentedEvent; - /** An asset class is in the process of being destroyed. */ - DestructionStarted: AugmentedEvent; - /** Some asset class was force-created. */ - ForceCreated: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32], - { assetId: u16; owner: AccountId32 } - >; - /** Some account `who` was frozen. */ - Frozen: AugmentedEvent; - /** Some assets were issued. */ - Issued: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32, amount: u128], - { assetId: u16; owner: AccountId32; amount: u128 } - >; - /** Metadata has been cleared for an asset. */ - MetadataCleared: AugmentedEvent; - /** New metadata has been set for an asset. */ - MetadataSet: AugmentedEvent< - ApiType, - [assetId: u16, name: Bytes, symbol_: Bytes, decimals: u8, isFrozen: bool], - { assetId: u16; name: Bytes; symbol: Bytes; decimals: u8; isFrozen: bool } - >; - /** The owner changed. */ - OwnerChanged: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32], - { assetId: u16; owner: AccountId32 } - >; - /** The management team changed. */ - TeamChanged: AugmentedEvent< - ApiType, - [assetId: u16, issuer: AccountId32, admin: AccountId32, freezer: AccountId32], - { assetId: u16; issuer: AccountId32; admin: AccountId32; freezer: AccountId32 } - >; - /** Some account `who` was thawed. */ - Thawed: AugmentedEvent; - /** Some account `who` was created with a deposit from `depositor`. */ - Touched: AugmentedEvent< - ApiType, - [assetId: u16, who: AccountId32, depositor: AccountId32], - { assetId: u16; who: AccountId32; depositor: AccountId32 } - >; - /** Some assets were transferred. */ - Transferred: AugmentedEvent< - ApiType, - [assetId: u16, from: AccountId32, to: AccountId32, amount: u128], - { assetId: u16; from: AccountId32; to: AccountId32; amount: u128 } - >; - /** An `amount` was transferred in its entirety from `owner` to `destination` by the approved `delegate`. */ - TransferredApproved: AugmentedEvent< - ApiType, - [assetId: u16, owner: AccountId32, delegate: AccountId32, destination: AccountId32, amount: u128], - { assetId: u16; owner: AccountId32; delegate: AccountId32; destination: AccountId32; amount: u128 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - foreignAssetsCreator: { - /** New asset with the asset manager is registered */ - ForeignAssetCreated: AugmentedEvent< - ApiType, - [assetId: u16, foreignAsset: StagingXcmV3MultiLocation], - { assetId: u16; foreignAsset: StagingXcmV3MultiLocation } - >; - /** Removed all information related to an assetId and destroyed asset */ - ForeignAssetDestroyed: AugmentedEvent< - ApiType, - [assetId: u16, foreignAsset: StagingXcmV3MultiLocation], - { assetId: u16; foreignAsset: StagingXcmV3MultiLocation } - >; - /** Removed all information related to an assetId */ - ForeignAssetRemoved: AugmentedEvent< - ApiType, - [assetId: u16, foreignAsset: StagingXcmV3MultiLocation], - { assetId: u16; foreignAsset: StagingXcmV3MultiLocation } - >; - /** Changed the xcm type mapping for a given asset id */ - ForeignAssetTypeChanged: AugmentedEvent< - ApiType, - [assetId: u16, newForeignAsset: StagingXcmV3MultiLocation], - { assetId: u16; newForeignAsset: StagingXcmV3MultiLocation } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - identity: { - /** A username authority was added. */ - AuthorityAdded: AugmentedEvent; - /** A username authority was removed. */ - AuthorityRemoved: AugmentedEvent; - /** A dangling username (as in, a username corresponding to an account that has removed its identity) has been removed. */ - DanglingUsernameRemoved: AugmentedEvent< - ApiType, - [who: AccountId32, username: Bytes], - { who: AccountId32; username: Bytes } - >; - /** A name was cleared, and the given balance returned. */ - IdentityCleared: AugmentedEvent< - ApiType, - [who: AccountId32, deposit: u128], - { who: AccountId32; deposit: u128 } - >; - /** A name was removed and the given balance slashed. */ - IdentityKilled: AugmentedEvent< - ApiType, - [who: AccountId32, deposit: u128], - { who: AccountId32; deposit: u128 } - >; - /** A name was set or reset (which will remove all judgements). */ - IdentitySet: AugmentedEvent; - /** A judgement was given by a registrar. */ - JudgementGiven: AugmentedEvent< - ApiType, - [target: AccountId32, registrarIndex: u32], - { target: AccountId32; registrarIndex: u32 } - >; - /** A judgement was asked from a registrar. */ - JudgementRequested: AugmentedEvent< - ApiType, - [who: AccountId32, registrarIndex: u32], - { who: AccountId32; registrarIndex: u32 } - >; - /** A judgement request was retracted. */ - JudgementUnrequested: AugmentedEvent< - ApiType, - [who: AccountId32, registrarIndex: u32], - { who: AccountId32; registrarIndex: u32 } - >; - /** A queued username passed its expiration without being claimed and was removed. */ - PreapprovalExpired: AugmentedEvent; - /** A username was set as a primary and can be looked up from `who`. */ - PrimaryUsernameSet: AugmentedEvent< - ApiType, - [who: AccountId32, username: Bytes], - { who: AccountId32; username: Bytes } - >; - /** A registrar was added. */ - RegistrarAdded: AugmentedEvent; - /** A sub-identity was added to an identity and the deposit paid. */ - SubIdentityAdded: AugmentedEvent< - ApiType, - [sub: AccountId32, main: AccountId32, deposit: u128], - { sub: AccountId32; main: AccountId32; deposit: u128 } - >; - /** A sub-identity was removed from an identity and the deposit freed. */ - SubIdentityRemoved: AugmentedEvent< - ApiType, - [sub: AccountId32, main: AccountId32, deposit: u128], - { sub: AccountId32; main: AccountId32; deposit: u128 } - >; - /** A sub-identity was cleared, and the given deposit repatriated from the main identity account to the sub-identity account. */ - SubIdentityRevoked: AugmentedEvent< - ApiType, - [sub: AccountId32, main: AccountId32, deposit: u128], - { sub: AccountId32; main: AccountId32; deposit: u128 } - >; - /** A username was queued, but `who` must accept it prior to `expiration`. */ - UsernameQueued: AugmentedEvent< - ApiType, - [who: AccountId32, username: Bytes, expiration: u32], - { who: AccountId32; username: Bytes; expiration: u32 } - >; - /** A username was set for `who`. */ - UsernameSet: AugmentedEvent< - ApiType, - [who: AccountId32, username: Bytes], - { who: AccountId32; username: Bytes } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - inflationRewards: { - /** Rewarding container author */ - RewardedContainer: AugmentedEvent< - ApiType, - [accountId: AccountId32, paraId: u32, balance: u128], - { accountId: AccountId32; paraId: u32; balance: u128 } - >; - /** Rewarding orchestrator author */ - RewardedOrchestrator: AugmentedEvent< - ApiType, - [accountId: AccountId32, balance: u128], - { accountId: AccountId32; balance: u128 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - invulnerables: { - /** - * An account was unable to be added to the Invulnerables because they did not have keys registered. Other - * Invulnerables may have been set. - */ - InvalidInvulnerableSkipped: AugmentedEvent; - /** A new Invulnerable was added. */ - InvulnerableAdded: AugmentedEvent; - /** An Invulnerable was removed. */ - InvulnerableRemoved: AugmentedEvent; - /** New Invulnerables were set. */ - NewInvulnerables: AugmentedEvent< - ApiType, - [invulnerables: Vec], - { invulnerables: Vec } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - maintenanceMode: { - /** The chain was put into Maintenance Mode */ - EnteredMaintenanceMode: AugmentedEvent; - /** The call to resume on_idle XCM execution failed with inner error */ - FailedToResumeIdleXcmExecution: AugmentedEvent< - ApiType, - [error: SpRuntimeDispatchError], - { error: SpRuntimeDispatchError } - >; - /** The call to suspend on_idle XCM execution failed with inner error */ - FailedToSuspendIdleXcmExecution: AugmentedEvent< - ApiType, - [error: SpRuntimeDispatchError], - { error: SpRuntimeDispatchError } - >; - /** The chain returned to its normal operating state */ - NormalOperationResumed: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - messageQueue: { - /** Message placed in overweight queue. */ - OverweightEnqueued: AugmentedEvent< - ApiType, - [id: U8aFixed, origin: CumulusPrimitivesCoreAggregateMessageOrigin, pageIndex: u32, messageIndex: u32], - { id: U8aFixed; origin: CumulusPrimitivesCoreAggregateMessageOrigin; pageIndex: u32; messageIndex: u32 } - >; - /** This page was reaped. */ - PageReaped: AugmentedEvent< - ApiType, - [origin: CumulusPrimitivesCoreAggregateMessageOrigin, index: u32], - { origin: CumulusPrimitivesCoreAggregateMessageOrigin; index: u32 } - >; - /** Message is processed. */ - Processed: AugmentedEvent< - ApiType, - [ - id: H256, - origin: CumulusPrimitivesCoreAggregateMessageOrigin, - weightUsed: SpWeightsWeightV2Weight, - success: bool - ], - { - id: H256; - origin: CumulusPrimitivesCoreAggregateMessageOrigin; - weightUsed: SpWeightsWeightV2Weight; - success: bool; - } - >; - /** Message discarded due to an error in the `MessageProcessor` (usually a format error). */ - ProcessingFailed: AugmentedEvent< - ApiType, - [ - id: H256, - origin: CumulusPrimitivesCoreAggregateMessageOrigin, - error: FrameSupportMessagesProcessMessageError - ], - { - id: H256; - origin: CumulusPrimitivesCoreAggregateMessageOrigin; - error: FrameSupportMessagesProcessMessageError; - } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - migrations: { - /** XCM execution resume failed with inner error */ - FailedToResumeIdleXcmExecution: AugmentedEvent< - ApiType, - [error: SpRuntimeDispatchError], - { error: SpRuntimeDispatchError } - >; - /** XCM execution suspension failed with inner error */ - FailedToSuspendIdleXcmExecution: AugmentedEvent< - ApiType, - [error: SpRuntimeDispatchError], - { error: SpRuntimeDispatchError } - >; - /** Migration completed */ - MigrationCompleted: AugmentedEvent< - ApiType, - [migrationName: Bytes, consumedWeight: SpWeightsWeightV2Weight], - { migrationName: Bytes; consumedWeight: SpWeightsWeightV2Weight } - >; - /** Migration started */ - MigrationStarted: AugmentedEvent; - /** Runtime upgrade completed */ - RuntimeUpgradeCompleted: AugmentedEvent< - ApiType, - [weight: SpWeightsWeightV2Weight], - { weight: SpWeightsWeightV2Weight } - >; - /** Runtime upgrade started */ - RuntimeUpgradeStarted: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - multisig: { - /** A multisig operation has been approved by someone. */ - MultisigApproval: AugmentedEvent< - ApiType, - [approving: AccountId32, timepoint: PalletMultisigTimepoint, multisig: AccountId32, callHash: U8aFixed], - { - approving: AccountId32; - timepoint: PalletMultisigTimepoint; - multisig: AccountId32; - callHash: U8aFixed; - } - >; - /** A multisig operation has been cancelled. */ - MultisigCancelled: AugmentedEvent< - ApiType, - [ - cancelling: AccountId32, - timepoint: PalletMultisigTimepoint, - multisig: AccountId32, - callHash: U8aFixed - ], - { - cancelling: AccountId32; - timepoint: PalletMultisigTimepoint; - multisig: AccountId32; - callHash: U8aFixed; - } - >; - /** A multisig operation has been executed. */ - MultisigExecuted: AugmentedEvent< - ApiType, - [ - approving: AccountId32, - timepoint: PalletMultisigTimepoint, - multisig: AccountId32, - callHash: U8aFixed, - result: Result - ], - { - approving: AccountId32; - timepoint: PalletMultisigTimepoint; - multisig: AccountId32; - callHash: U8aFixed; - result: Result; - } - >; - /** A new multisig operation has begun. */ - NewMultisig: AugmentedEvent< - ApiType, - [approving: AccountId32, multisig: AccountId32, callHash: U8aFixed], - { approving: AccountId32; multisig: AccountId32; callHash: U8aFixed } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - parachainSystem: { - /** Downward messages were processed using the given weight. */ - DownwardMessagesProcessed: AugmentedEvent< - ApiType, - [weightUsed: SpWeightsWeightV2Weight, dmqHead: H256], - { weightUsed: SpWeightsWeightV2Weight; dmqHead: H256 } - >; - /** Some downward messages have been received and will be processed. */ - DownwardMessagesReceived: AugmentedEvent; - /** An upward message was sent to the relay chain. */ - UpwardMessageSent: AugmentedEvent< - ApiType, - [messageHash: Option], - { messageHash: Option } - >; - /** The validation function was applied as of the contained relay chain block number. */ - ValidationFunctionApplied: AugmentedEvent; - /** The relay-chain aborted the upgrade process. */ - ValidationFunctionDiscarded: AugmentedEvent; - /** The validation function has been scheduled to apply. */ - ValidationFunctionStored: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - polkadotXcm: { - /** Some assets have been claimed from an asset trap */ - AssetsClaimed: AugmentedEvent< - ApiType, - [hash_: H256, origin: StagingXcmV3MultiLocation, assets: XcmVersionedMultiAssets], - { hash_: H256; origin: StagingXcmV3MultiLocation; assets: XcmVersionedMultiAssets } - >; - /** Some assets have been placed in an asset trap. */ - AssetsTrapped: AugmentedEvent< - ApiType, - [hash_: H256, origin: StagingXcmV3MultiLocation, assets: XcmVersionedMultiAssets], - { hash_: H256; origin: StagingXcmV3MultiLocation; assets: XcmVersionedMultiAssets } - >; - /** Execution of an XCM message was attempted. */ - Attempted: AugmentedEvent; - /** Fees were paid from a location for an operation (often for using `SendXcm`). */ - FeesPaid: AugmentedEvent< - ApiType, - [paying: StagingXcmV3MultiLocation, fees: XcmV3MultiassetMultiAssets], - { paying: StagingXcmV3MultiLocation; fees: XcmV3MultiassetMultiAssets } - >; - /** - * Expected query response has been received but the querier location of the response does not match the expected. - * The query remains registered for a later, valid, response to be received and acted upon. - */ - InvalidQuerier: AugmentedEvent< - ApiType, - [ - origin: StagingXcmV3MultiLocation, - queryId: u64, - expectedQuerier: StagingXcmV3MultiLocation, - maybeActualQuerier: Option - ], - { - origin: StagingXcmV3MultiLocation; - queryId: u64; - expectedQuerier: StagingXcmV3MultiLocation; - maybeActualQuerier: Option; - } - >; - /** - * Expected query response has been received but the expected querier location placed in storage by this runtime - * previously cannot be decoded. The query remains registered. - * - * This is unexpected (since a location placed in storage in a previously executing runtime should be readable - * prior to query timeout) and dangerous since the possibly valid response will be dropped. Manual governance - * intervention is probably going to be needed. - */ - InvalidQuerierVersion: AugmentedEvent< - ApiType, - [origin: StagingXcmV3MultiLocation, queryId: u64], - { origin: StagingXcmV3MultiLocation; queryId: u64 } - >; - /** - * Expected query response has been received but the origin location of the response does not match that expected. - * The query remains registered for a later, valid, response to be received and acted upon. - */ - InvalidResponder: AugmentedEvent< - ApiType, - [origin: StagingXcmV3MultiLocation, queryId: u64, expectedLocation: Option], - { origin: StagingXcmV3MultiLocation; queryId: u64; expectedLocation: Option } - >; - /** - * Expected query response has been received but the expected origin location placed in storage by this runtime - * previously cannot be decoded. The query remains registered. - * - * This is unexpected (since a location placed in storage in a previously executing runtime should be readable - * prior to query timeout) and dangerous since the possibly valid response will be dropped. Manual governance - * intervention is probably going to be needed. - */ - InvalidResponderVersion: AugmentedEvent< - ApiType, - [origin: StagingXcmV3MultiLocation, queryId: u64], - { origin: StagingXcmV3MultiLocation; queryId: u64 } - >; - /** - * Query response has been received and query is removed. The registered notification has been dispatched and - * executed successfully. - */ - Notified: AugmentedEvent< - ApiType, - [queryId: u64, palletIndex: u8, callIndex: u8], - { queryId: u64; palletIndex: u8; callIndex: u8 } - >; - /** - * Query response has been received and query is removed. The dispatch was unable to be decoded into a `Call`; - * this might be due to dispatch function having a signature which is not `(origin, QueryId, Response)`. - */ - NotifyDecodeFailed: AugmentedEvent< - ApiType, - [queryId: u64, palletIndex: u8, callIndex: u8], - { queryId: u64; palletIndex: u8; callIndex: u8 } - >; - /** Query response has been received and query is removed. There was a general error with dispatching the notification call. */ - NotifyDispatchError: AugmentedEvent< - ApiType, - [queryId: u64, palletIndex: u8, callIndex: u8], - { queryId: u64; palletIndex: u8; callIndex: u8 } - >; - /** - * Query response has been received and query is removed. The registered notification could not be dispatched - * because the dispatch weight is greater than the maximum weight originally budgeted by this runtime for the query result. - */ - NotifyOverweight: AugmentedEvent< - ApiType, - [ - queryId: u64, - palletIndex: u8, - callIndex: u8, - actualWeight: SpWeightsWeightV2Weight, - maxBudgetedWeight: SpWeightsWeightV2Weight - ], - { - queryId: u64; - palletIndex: u8; - callIndex: u8; - actualWeight: SpWeightsWeightV2Weight; - maxBudgetedWeight: SpWeightsWeightV2Weight; - } - >; - /** - * A given location which had a version change subscription was dropped owing to an error migrating the location - * to our new XCM format. - */ - NotifyTargetMigrationFail: AugmentedEvent< - ApiType, - [location: XcmVersionedMultiLocation, queryId: u64], - { location: XcmVersionedMultiLocation; queryId: u64 } - >; - /** A given location which had a version change subscription was dropped owing to an error sending the notification to it. */ - NotifyTargetSendFail: AugmentedEvent< - ApiType, - [location: StagingXcmV3MultiLocation, queryId: u64, error: XcmV3TraitsError], - { location: StagingXcmV3MultiLocation; queryId: u64; error: XcmV3TraitsError } - >; - /** Query response has been received and is ready for taking with `take_response`. There is no registered notification call. */ - ResponseReady: AugmentedEvent< - ApiType, - [queryId: u64, response: XcmV3Response], - { queryId: u64; response: XcmV3Response } - >; - /** Received query response has been read and removed. */ - ResponseTaken: AugmentedEvent; - /** A XCM message was sent. */ - Sent: AugmentedEvent< - ApiType, - [ - origin: StagingXcmV3MultiLocation, - destination: StagingXcmV3MultiLocation, - message: XcmV3Xcm, - messageId: U8aFixed - ], - { - origin: StagingXcmV3MultiLocation; - destination: StagingXcmV3MultiLocation; - message: XcmV3Xcm; - messageId: U8aFixed; - } - >; - /** - * The supported version of a location has been changed. This might be through an automatic notification or a - * manual intervention. - */ - SupportedVersionChanged: AugmentedEvent< - ApiType, - [location: StagingXcmV3MultiLocation, version: u32], - { location: StagingXcmV3MultiLocation; version: u32 } - >; - /** - * Query response received which does not match a registered query. This may be because a matching query was never - * registered, it may be because it is a duplicate response, or because the query timed out. - */ - UnexpectedResponse: AugmentedEvent< - ApiType, - [origin: StagingXcmV3MultiLocation, queryId: u64], - { origin: StagingXcmV3MultiLocation; queryId: u64 } - >; - /** - * An XCM version change notification message has been attempted to be sent. - * - * The cost of sending it (borne by the chain) is included. - */ - VersionChangeNotified: AugmentedEvent< - ApiType, - [ - destination: StagingXcmV3MultiLocation, - result: u32, - cost: XcmV3MultiassetMultiAssets, - messageId: U8aFixed - ], - { - destination: StagingXcmV3MultiLocation; - result: u32; - cost: XcmV3MultiassetMultiAssets; - messageId: U8aFixed; - } - >; - /** We have requested that a remote chain send us XCM version change notifications. */ - VersionNotifyRequested: AugmentedEvent< - ApiType, - [destination: StagingXcmV3MultiLocation, cost: XcmV3MultiassetMultiAssets, messageId: U8aFixed], - { destination: StagingXcmV3MultiLocation; cost: XcmV3MultiassetMultiAssets; messageId: U8aFixed } - >; - /** - * A remote has requested XCM version change notification from us and we have honored it. A version information - * message is sent to them and its cost is included. - */ - VersionNotifyStarted: AugmentedEvent< - ApiType, - [destination: StagingXcmV3MultiLocation, cost: XcmV3MultiassetMultiAssets, messageId: U8aFixed], - { destination: StagingXcmV3MultiLocation; cost: XcmV3MultiassetMultiAssets; messageId: U8aFixed } - >; - /** We have requested that a remote chain stops sending us XCM version change notifications. */ - VersionNotifyUnrequested: AugmentedEvent< - ApiType, - [destination: StagingXcmV3MultiLocation, cost: XcmV3MultiassetMultiAssets, messageId: U8aFixed], - { destination: StagingXcmV3MultiLocation; cost: XcmV3MultiassetMultiAssets; messageId: U8aFixed } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - pooledStaking: { - /** Rewards manually claimed. */ - ClaimedManualRewards: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, rewards: u128], - { candidate: AccountId32; delegator: AccountId32; rewards: u128 } - >; - /** Stake of that Candidate decreased. */ - DecreasedStake: AugmentedEvent< - ApiType, - [candidate: AccountId32, stakeDiff: u128], - { candidate: AccountId32; stakeDiff: u128 } - >; - /** - * Delegation request was executed. `staked` has been properly staked in `pool`, while the rounding when - * converting to shares has been `released`. - */ - ExecutedDelegate: AugmentedEvent< - ApiType, - [ - candidate: AccountId32, - delegator: AccountId32, - pool: PalletPooledStakingTargetPool, - staked: u128, - released: u128 - ], - { - candidate: AccountId32; - delegator: AccountId32; - pool: PalletPooledStakingTargetPool; - staked: u128; - released: u128; - } - >; - /** Undelegation request was executed. */ - ExecutedUndelegate: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, released: u128], - { candidate: AccountId32; delegator: AccountId32; released: u128 } - >; - /** Stake of that Candidate increased. */ - IncreasedStake: AugmentedEvent< - ApiType, - [candidate: AccountId32, stakeDiff: u128], - { candidate: AccountId32; stakeDiff: u128 } - >; - /** User requested to delegate towards a candidate. */ - RequestedDelegate: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, pool: PalletPooledStakingTargetPool, pending: u128], - { candidate: AccountId32; delegator: AccountId32; pool: PalletPooledStakingTargetPool; pending: u128 } - >; - /** - * User requested to undelegate from a candidate. Stake was removed from a `pool` and is `pending` for the request - * to be executed. The rounding when converting to leaving shares has been `released` immediately. - */ - RequestedUndelegate: AugmentedEvent< - ApiType, - [ - candidate: AccountId32, - delegator: AccountId32, - from: PalletPooledStakingTargetPool, - pending: u128, - released: u128 - ], - { - candidate: AccountId32; - delegator: AccountId32; - from: PalletPooledStakingTargetPool; - pending: u128; - released: u128; - } - >; - /** Collator has been rewarded. */ - RewardedCollator: AugmentedEvent< - ApiType, - [collator: AccountId32, autoCompoundingRewards: u128, manualClaimRewards: u128], - { collator: AccountId32; autoCompoundingRewards: u128; manualClaimRewards: u128 } - >; - /** Delegators have been rewarded. */ - RewardedDelegators: AugmentedEvent< - ApiType, - [collator: AccountId32, autoCompoundingRewards: u128, manualClaimRewards: u128], - { collator: AccountId32; autoCompoundingRewards: u128; manualClaimRewards: u128 } - >; - /** Delegator staked towards a Candidate for AutoCompounding Shares. */ - StakedAutoCompounding: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, shares: u128, stake: u128], - { candidate: AccountId32; delegator: AccountId32; shares: u128; stake: u128 } - >; - /** Delegator staked towards a candidate for ManualRewards Shares. */ - StakedManualRewards: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, shares: u128, stake: u128], - { candidate: AccountId32; delegator: AccountId32; shares: u128; stake: u128 } - >; - /** Swapped between AutoCompounding and ManualReward shares */ - SwappedPool: AugmentedEvent< - ApiType, - [ - candidate: AccountId32, - delegator: AccountId32, - sourcePool: PalletPooledStakingTargetPool, - sourceShares: u128, - sourceStake: u128, - targetShares: u128, - targetStake: u128, - pendingLeaving: u128, - released: u128 - ], - { - candidate: AccountId32; - delegator: AccountId32; - sourcePool: PalletPooledStakingTargetPool; - sourceShares: u128; - sourceStake: u128; - targetShares: u128; - targetStake: u128; - pendingLeaving: u128; - released: u128; - } - >; - /** Delegator unstaked towards a candidate with AutoCompounding Shares. */ - UnstakedAutoCompounding: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, shares: u128, stake: u128], - { candidate: AccountId32; delegator: AccountId32; shares: u128; stake: u128 } - >; - /** Delegator unstaked towards a candidate with ManualRewards Shares. */ - UnstakedManualRewards: AugmentedEvent< - ApiType, - [candidate: AccountId32, delegator: AccountId32, shares: u128, stake: u128], - { candidate: AccountId32; delegator: AccountId32; shares: u128; stake: u128 } - >; - /** Stake of the candidate has changed, which may have modified its position in the eligible candidates list. */ - UpdatedCandidatePosition: AugmentedEvent< - ApiType, - [candidate: AccountId32, stake: u128, selfDelegation: u128, before: Option, after: Option], - { candidate: AccountId32; stake: u128; selfDelegation: u128; before: Option; after: Option } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - proxy: { - /** An announcement was placed to make a call in the future. */ - Announced: AugmentedEvent< - ApiType, - [real: AccountId32, proxy: AccountId32, callHash: H256], - { real: AccountId32; proxy: AccountId32; callHash: H256 } - >; - /** A proxy was added. */ - ProxyAdded: AugmentedEvent< - ApiType, - [delegator: AccountId32, delegatee: AccountId32, proxyType: DanceboxRuntimeProxyType, delay: u32], - { delegator: AccountId32; delegatee: AccountId32; proxyType: DanceboxRuntimeProxyType; delay: u32 } - >; - /** A proxy was executed correctly, with the given. */ - ProxyExecuted: AugmentedEvent< - ApiType, - [result: Result], - { result: Result } - >; - /** A proxy was removed. */ - ProxyRemoved: AugmentedEvent< - ApiType, - [delegator: AccountId32, delegatee: AccountId32, proxyType: DanceboxRuntimeProxyType, delay: u32], - { delegator: AccountId32; delegatee: AccountId32; proxyType: DanceboxRuntimeProxyType; delay: u32 } - >; - /** A pure account has been created by new proxy with given disambiguation index and proxy type. */ - PureCreated: AugmentedEvent< - ApiType, - [pure: AccountId32, who: AccountId32, proxyType: DanceboxRuntimeProxyType, disambiguationIndex: u16], - { pure: AccountId32; who: AccountId32; proxyType: DanceboxRuntimeProxyType; disambiguationIndex: u16 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - registrar: { - /** A para id has been deregistered. [para_id] */ - ParaIdDeregistered: AugmentedEvent; - /** A para id has been paused from collating. */ - ParaIdPaused: AugmentedEvent; - /** A new para id has been registered. [para_id] */ - ParaIdRegistered: AugmentedEvent; - /** A para id has been unpaused. */ - ParaIdUnpaused: AugmentedEvent; - /** A new para id is now valid for collating. [para_id] */ - ParaIdValidForCollating: AugmentedEvent; - /** Parathread params changed */ - ParathreadParamsChanged: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - rootTesting: { - /** Event dispatched when the trigger_defensive extrinsic is called. */ - DefensiveTestCall: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - servicesPayment: { - BlockProductionCreditBurned: AugmentedEvent< - ApiType, - [paraId: u32, creditsRemaining: u32], - { paraId: u32; creditsRemaining: u32 } - >; - BlockProductionCreditsSet: AugmentedEvent< - ApiType, - [paraId: u32, credits: u32], - { paraId: u32; credits: u32 } - >; - CollatorAssignmentCreditBurned: AugmentedEvent< - ApiType, - [paraId: u32, creditsRemaining: u32], - { paraId: u32; creditsRemaining: u32 } - >; - CollatorAssignmentCreditsSet: AugmentedEvent< - ApiType, - [paraId: u32, credits: u32], - { paraId: u32; credits: u32 } - >; - CollatorAssignmentTipCollected: AugmentedEvent< - ApiType, - [paraId: u32, payer: AccountId32, tip: u128], - { paraId: u32; payer: AccountId32; tip: u128 } - >; - CreditsPurchased: AugmentedEvent< - ApiType, - [paraId: u32, payer: AccountId32, credit: u128], - { paraId: u32; payer: AccountId32; credit: u128 } - >; - MaxCorePriceUpdated: AugmentedEvent< - ApiType, - [paraId: u32, maxCorePrice: Option], - { paraId: u32; maxCorePrice: Option } - >; - RefundAddressUpdated: AugmentedEvent< - ApiType, - [paraId: u32, refundAddress: Option], - { paraId: u32; refundAddress: Option } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - session: { - /** New session has happened. Note that the argument is the session index, not the block number as the type might suggest. */ - NewSession: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - streamPayment: { - StreamClosed: AugmentedEvent; - StreamConfigChanged: AugmentedEvent< - ApiType, - [ - streamId: u64, - oldConfig: PalletStreamPaymentStreamConfig, - newConfig: PalletStreamPaymentStreamConfig, - depositChange: Option - ], - { - streamId: u64; - oldConfig: PalletStreamPaymentStreamConfig; - newConfig: PalletStreamPaymentStreamConfig; - depositChange: Option; - } - >; - StreamConfigChangeRequested: AugmentedEvent< - ApiType, - [ - streamId: u64, - requestNonce: u32, - requester: PalletStreamPaymentParty, - oldConfig: PalletStreamPaymentStreamConfig, - newConfig: PalletStreamPaymentStreamConfig - ], - { - streamId: u64; - requestNonce: u32; - requester: PalletStreamPaymentParty; - oldConfig: PalletStreamPaymentStreamConfig; - newConfig: PalletStreamPaymentStreamConfig; - } - >; - StreamOpened: AugmentedEvent; - StreamPayment: AugmentedEvent< - ApiType, - [streamId: u64, source: AccountId32, target: AccountId32, amount: u128, stalled: bool], - { streamId: u64; source: AccountId32; target: AccountId32; amount: u128; stalled: bool } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - sudo: { - /** The sudo key has been updated. */ - KeyChanged: AugmentedEvent< - ApiType, - [old: Option, new_: AccountId32], - { old: Option; new_: AccountId32 } - >; - /** The key was permanently removed. */ - KeyRemoved: AugmentedEvent; - /** A sudo call just took place. */ - Sudid: AugmentedEvent< - ApiType, - [sudoResult: Result], - { sudoResult: Result } - >; - /** A [sudo_as](Pallet::sudo_as) call just took place. */ - SudoAsDone: AugmentedEvent< - ApiType, - [sudoResult: Result], - { sudoResult: Result } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - system: { - /** `:code` was updated. */ - CodeUpdated: AugmentedEvent; - /** An extrinsic failed. */ - ExtrinsicFailed: AugmentedEvent< - ApiType, - [dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportDispatchDispatchInfo], - { dispatchError: SpRuntimeDispatchError; dispatchInfo: FrameSupportDispatchDispatchInfo } - >; - /** An extrinsic completed successfully. */ - ExtrinsicSuccess: AugmentedEvent< - ApiType, - [dispatchInfo: FrameSupportDispatchDispatchInfo], - { dispatchInfo: FrameSupportDispatchDispatchInfo } - >; - /** An account was reaped. */ - KilledAccount: AugmentedEvent; - /** A new account was created. */ - NewAccount: AugmentedEvent; - /** On on-chain remark happened. */ - Remarked: AugmentedEvent; - /** An upgrade was authorized. */ - UpgradeAuthorized: AugmentedEvent< - ApiType, - [codeHash: H256, checkVersion: bool], - { codeHash: H256; checkVersion: bool } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - transactionPayment: { - /** A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee, has been paid by `who`. */ - TransactionFeePaid: AugmentedEvent< - ApiType, - [who: AccountId32, actualFee: u128, tip: u128], - { who: AccountId32; actualFee: u128; tip: u128 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - treasury: { - /** A new asset spend proposal has been approved. */ - AssetSpendApproved: AugmentedEvent< - ApiType, - [index: u32, assetKind: Null, amount: u128, beneficiary: AccountId32, validFrom: u32, expireAt: u32], - { index: u32; assetKind: Null; amount: u128; beneficiary: AccountId32; validFrom: u32; expireAt: u32 } - >; - /** An approved spend was voided. */ - AssetSpendVoided: AugmentedEvent; - /** Some funds have been allocated. */ - Awarded: AugmentedEvent< - ApiType, - [proposalIndex: u32, award: u128, account: AccountId32], - { proposalIndex: u32; award: u128; account: AccountId32 } - >; - /** Some of our funds have been burnt. */ - Burnt: AugmentedEvent; - /** Some funds have been deposited. */ - Deposit: AugmentedEvent; - /** A payment happened. */ - Paid: AugmentedEvent; - /** A payment failed and can be retried. */ - PaymentFailed: AugmentedEvent; - /** New proposal. */ - Proposed: AugmentedEvent; - /** A proposal was rejected; funds were slashed. */ - Rejected: AugmentedEvent< - ApiType, - [proposalIndex: u32, slashed: u128], - { proposalIndex: u32; slashed: u128 } - >; - /** Spending has finished; this is the amount that rolls over until next spend. */ - Rollover: AugmentedEvent; - /** A new spend proposal has been approved. */ - SpendApproved: AugmentedEvent< - ApiType, - [proposalIndex: u32, amount: u128, beneficiary: AccountId32], - { proposalIndex: u32; amount: u128; beneficiary: AccountId32 } - >; - /** We have ended a spend period and will now allocate funds. */ - Spending: AugmentedEvent; - /** A spend was processed and removed from the storage. It might have been successfully paid or it may have expired. */ - SpendProcessed: AugmentedEvent; - /** The inactive funds of the pallet have been updated. */ - UpdatedInactive: AugmentedEvent< - ApiType, - [reactivated: u128, deactivated: u128], - { reactivated: u128; deactivated: u128 } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - txPause: { - /** This pallet, or a specific call is now paused. */ - CallPaused: AugmentedEvent< - ApiType, - [fullName: ITuple<[Bytes, Bytes]>], - { fullName: ITuple<[Bytes, Bytes]> } - >; - /** This pallet, or a specific call is now unpaused. */ - CallUnpaused: AugmentedEvent< - ApiType, - [fullName: ITuple<[Bytes, Bytes]>], - { fullName: ITuple<[Bytes, Bytes]> } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - utility: { - /** Batch of dispatches completed fully with no error. */ - BatchCompleted: AugmentedEvent; - /** Batch of dispatches completed but has errors. */ - BatchCompletedWithErrors: AugmentedEvent; - /** Batch of dispatches did not complete fully. Index of first failing dispatch given, as well as the error. */ - BatchInterrupted: AugmentedEvent< - ApiType, - [index: u32, error: SpRuntimeDispatchError], - { index: u32; error: SpRuntimeDispatchError } - >; - /** A call was dispatched. */ - DispatchedAs: AugmentedEvent< - ApiType, - [result: Result], - { result: Result } - >; - /** A single item within a Batch of dispatches has completed with no error. */ - ItemCompleted: AugmentedEvent; - /** A single item within a Batch of dispatches has completed with error. */ - ItemFailed: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - xcmCoreBuyer: { - /** An XCM message to buy a core for this parathread has been sent to the relay chain. */ - BuyCoreXcmSent: AugmentedEvent< - ApiType, - [paraId: u32, transactionStatusQueryId: u64], - { paraId: u32; transactionStatusQueryId: u64 } - >; - /** We cleaned up expired in flight orders entries. */ - CleanedUpExpiredInFlightOrderEntries: AugmentedEvent], { paraIds: Vec }>; - /** We cleaned up expired pending blocks entries. */ - CleanedUpExpiredPendingBlocksEntries: AugmentedEvent], { paraIds: Vec }>; - /** We received response for xcm */ - ReceivedBuyCoreXCMResult: AugmentedEvent< - ApiType, - [paraId: u32, response: XcmV3Response], - { paraId: u32; response: XcmV3Response } - >; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - xcmpQueue: { - /** An HRMP message was sent to a sibling parachain. */ - XcmpMessageSent: AugmentedEvent; - /** Generic event */ - [key: string]: AugmentedEvent; - }; - } // AugmentedEvents -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-query.ts b/typescript-api/src/dancebox/interfaces/augment-api-query.ts deleted file mode 100644 index 28172c4..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-query.ts +++ /dev/null @@ -1,1368 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/storage"; - -import type { ApiTypes, AugmentedQuery, QueryableStorageEntry } from "@polkadot/api-base/types"; -import type { Data } from "@polkadot/types"; -import type { - BTreeMap, - BTreeSet, - Bytes, - Null, - Option, - U8aFixed, - Vec, - bool, - u128, - u16, - u32, - u64, -} from "@polkadot/types-codec"; -import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; -import type { AccountId32, H256 } from "@polkadot/types/interfaces/runtime"; -import type { - CumulusPalletDmpQueueMigrationState, - CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, - CumulusPalletParachainSystemUnincludedSegmentAncestor, - CumulusPalletParachainSystemUnincludedSegmentSegmentTracker, - CumulusPalletXcmpQueueOutboundChannelDetails, - CumulusPalletXcmpQueueQueueConfigData, - CumulusPrimitivesCoreAggregateMessageOrigin, - DanceboxRuntimeSessionKeys, - DanceboxRuntimeXcmConfigRelayChain, - DpCollatorAssignmentAssignedCollatorsAccountId32, - DpCollatorAssignmentAssignedCollatorsPublic, - FrameSupportDispatchPerDispatchClassWeight, - FrameSystemAccountInfo, - FrameSystemCodeUpgradeAuthorization, - FrameSystemEventRecord, - FrameSystemLastRuntimeUpgradeInfo, - FrameSystemPhase, - NimbusPrimitivesNimbusCryptoPublic, - PalletAssetsApproval, - PalletAssetsAssetAccount, - PalletAssetsAssetDetails, - PalletAssetsAssetMetadata, - PalletAuthorNotingContainerChainBlockInfo, - PalletBalancesAccountData, - PalletBalancesBalanceLock, - PalletBalancesIdAmountRuntimeFreezeReason, - PalletBalancesIdAmountRuntimeHoldReason, - PalletBalancesReserveData, - PalletConfigurationHostConfiguration, - PalletIdentityAuthorityProperties, - PalletIdentityRegistrarInfo, - PalletIdentityRegistration, - PalletInflationRewardsChainsToRewardValue, - PalletMessageQueueBookState, - PalletMessageQueuePage, - PalletMultisigMultisig, - PalletPooledStakingCandidateEligibleCandidate, - PalletPooledStakingPendingOperationKey, - PalletPooledStakingPoolsKey, - PalletProxyAnnouncement, - PalletProxyProxyDefinition, - PalletRegistrarDepositInfo, - PalletStreamPaymentStream, - PalletTransactionPaymentReleases, - PalletTreasuryProposal, - PalletTreasurySpendStatus, - PalletXcmCoreBuyerInFlightCoreBuyingOrder, - PalletXcmCoreBuyerRelayXcmWeightConfigInner, - PalletXcmQueryStatus, - PalletXcmRemoteLockedFungibleRecord, - PalletXcmVersionMigrationStage, - PolkadotCorePrimitivesOutboundHrmpMessage, - PolkadotPrimitivesV6AbridgedHostConfiguration, - PolkadotPrimitivesV6PersistedValidationData, - PolkadotPrimitivesV6UpgradeGoAhead, - PolkadotPrimitivesV6UpgradeRestriction, - SpCoreCryptoKeyTypeId, - SpRuntimeDigest, - SpTrieStorageProof, - SpWeightsWeightV2Weight, - StagingXcmV3MultiLocation, - TpContainerChainGenesisDataContainerChainGenesisData, - TpTraitsParathreadParams, - XcmVersionedAssetId, - XcmVersionedMultiLocation, -} from "@polkadot/types/lookup"; -import type { Observable } from "@polkadot/types/types"; - -export type __AugmentedQuery = AugmentedQuery unknown>; -export type __QueryableStorageEntry = QueryableStorageEntry; - -declare module "@polkadot/api-base/types/storage" { - interface AugmentedQueries { - assetRate: { - /** - * Maps an asset to its fixed point representation in the native balance. - * - * E.g. `native_amount = asset_amount * ConversionRateToNative::::get(asset_kind)` - */ - conversionRateToNative: AugmentedQuery< - ApiType, - (arg: u16 | AnyNumber | Uint8Array) => Observable>, - [u16] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - asyncBacking: { - /** - * First tuple element is the highest slot that has been seen in the history of this chain. Second tuple element - * is the number of authored blocks so far. This is a strictly-increasing value if T::AllowMultipleBlocksPerSlot = false. - */ - slotInfo: AugmentedQuery Observable>>, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - authorInherent: { - /** Author of current block. */ - author: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Check if the inherent was included */ - inherentIncluded: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - authorityAssignment: { - collatorContainerChain: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - authorityMapping: { - authorityIdMapping: AugmentedQuery< - ApiType, - ( - arg: u32 | AnyNumber | Uint8Array - ) => Observable>>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - authorNoting: { - /** Was the containerAuthorData set? */ - didSetContainerAuthorData: AugmentedQuery Observable, []> & - QueryableStorageEntry; - latestAuthor: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - balances: { - /** - * The Balances pallet example of storing the balance of an account. - * - * # Example - * - * ```nocompile - * impl pallet_balances::Config for Runtime { - * type AccountStore = StorageMapShim, frame_system::Provider, AccountId, Self::AccountData> - * } - * ``` - * - * You can also store the balance of an account in the `System` pallet. - * - * # Example - * - * ```nocompile - * impl pallet_balances::Config for Runtime { - * type AccountStore = System - * } - * ``` - * - * But this comes with tradeoffs, storing account balances in the system pallet stores `frame_system` data - * alongside the account data contrary to storing account balances in the `Balances` pallet, which uses a - * `StorageMap` to store balances data only. NOTE: This is only used in the case that this pallet is used to store - * balances. - */ - account: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable, - [AccountId32] - > & - QueryableStorageEntry; - /** Freeze locks on account balances. */ - freezes: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** Holds on account balances. */ - holds: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** The total units of outstanding deactivated balance in the system. */ - inactiveIssuance: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Any liquidity locks on some account balances. NOTE: Should only be accessed when setting, changing and freeing a lock. */ - locks: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** Named reserves on some account balances. */ - reserves: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** The total units issued in the system. */ - totalIssuance: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - collatorAssignment: { - collatorContainerChain: AugmentedQuery< - ApiType, - () => Observable, - [] - > & - QueryableStorageEntry; - /** - * Pending configuration changes. - * - * This is a list of configuration changes, each with a session index at which it should be applied. - * - * The list is sorted ascending by session index. Also, this list can only contain at most 2 items: for the next - * session and for the `scheduled_session`. - */ - pendingCollatorContainerChain: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * Randomness from previous block. Used to shuffle collators on session change. Should only be set on the last - * block of each session and should be killed on the on_initialize of the next block. The default value of [0; 32] - * disables randomness in the pallet. - */ - randomness: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - configuration: { - /** The active configuration for the current session. */ - activeConfig: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * If this is set, then the configuration setters will bypass the consistency checks. This is meant to be used - * only as the last resort. - */ - bypassConsistencyCheck: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * Pending configuration changes. - * - * This is a list of configuration changes, each with a session index at which it should be applied. - * - * The list is sorted ascending by session index. Also, this list can only contain at most 2 items: for the next - * session and for the `scheduled_session`. - */ - pendingConfigs: AugmentedQuery< - ApiType, - () => Observable>>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - dataPreservers: { - bootNodes: AugmentedQuery Observable>, [u32]> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - dmpQueue: { - /** The migration state of this pallet. */ - migrationStatus: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - foreignAssets: { - /** The holdings of a specific account for a specific asset. */ - account: AugmentedQuery< - ApiType, - ( - arg1: u16 | AnyNumber | Uint8Array, - arg2: AccountId32 | string | Uint8Array - ) => Observable>, - [u16, AccountId32] - > & - QueryableStorageEntry; - /** - * Approved balance transfers. First balance is the amount approved for transfer. Second is the amount of - * `T::Currency` reserved for storing this. First key is the asset ID, second key is the owner and third key is - * the delegate. - */ - approvals: AugmentedQuery< - ApiType, - ( - arg1: u16 | AnyNumber | Uint8Array, - arg2: AccountId32 | string | Uint8Array, - arg3: AccountId32 | string | Uint8Array - ) => Observable>, - [u16, AccountId32, AccountId32] - > & - QueryableStorageEntry; - /** Details of an asset. */ - asset: AugmentedQuery< - ApiType, - (arg: u16 | AnyNumber | Uint8Array) => Observable>, - [u16] - > & - QueryableStorageEntry; - /** Metadata of an asset. */ - metadata: AugmentedQuery< - ApiType, - (arg: u16 | AnyNumber | Uint8Array) => Observable, - [u16] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - foreignAssetsCreator: { - /** - * Mapping from an asset id to a Foreign asset type. This is mostly used when receiving transaction specifying an - * asset directly, like transferring an asset from this chain to another. - */ - assetIdToForeignAsset: AugmentedQuery< - ApiType, - (arg: u16 | AnyNumber | Uint8Array) => Observable>, - [u16] - > & - QueryableStorageEntry; - /** - * Reverse mapping of AssetIdToForeignAsset. Mapping from a foreign asset to an asset id. This is mostly used when - * receiving a multilocation XCM message to retrieve the corresponding asset in which tokens should me minted. - */ - foreignAssetToAssetId: AugmentedQuery< - ApiType, - ( - arg: StagingXcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array - ) => Observable>, - [StagingXcmV3MultiLocation] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - identity: { - /** - * Reverse lookup from `username` to the `AccountId` that has registered it. The value should be a key in the - * `IdentityOf` map, but it may not if the user has cleared their identity. - * - * Multiple usernames may map to the same `AccountId`, but `IdentityOf` will only map to one primary username. - */ - accountOfUsername: AugmentedQuery< - ApiType, - (arg: Bytes | string | Uint8Array) => Observable>, - [Bytes] - > & - QueryableStorageEntry; - /** - * Information that is pertinent to identify the entity behind an account. First item is the registration, second - * is the account's primary username. - * - * TWOX-NOTE: OK ― `AccountId` is a secure hash. - */ - identityOf: AugmentedQuery< - ApiType, - ( - arg: AccountId32 | string | Uint8Array - ) => Observable]>>>, - [AccountId32] - > & - QueryableStorageEntry; - /** - * Usernames that an authority has granted, but that the account controller has not confirmed that they want it. - * Used primarily in cases where the `AccountId` cannot provide a signature because they are a pure proxy, - * multisig, etc. In order to confirm it, they should call [`Call::accept_username`]. - * - * First tuple item is the account and second is the acceptance deadline. - */ - pendingUsernames: AugmentedQuery< - ApiType, - (arg: Bytes | string | Uint8Array) => Observable>>, - [Bytes] - > & - QueryableStorageEntry; - /** - * The set of registrars. Not expected to get very big as can only be added through a special origin (likely a - * council motion). - * - * The index into this can be cast to `RegistrarIndex` to get a valid value. - */ - registrars: AugmentedQuery Observable>>, []> & - QueryableStorageEntry; - /** - * Alternative "sub" identities of this account. - * - * The first item is the deposit, the second is a vector of the accounts. - * - * TWOX-NOTE: OK ― `AccountId` is a secure hash. - */ - subsOf: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable]>>, - [AccountId32] - > & - QueryableStorageEntry; - /** - * The super-identity of an alternative "sub" identity together with its name, within that context. If the account - * is not some other account's sub-identity, then just `None`. - */ - superOf: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>>, - [AccountId32] - > & - QueryableStorageEntry; - /** A map of the accounts who are authorized to grant usernames. */ - usernameAuthorities: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - inflationRewards: { - /** Container chains to reward per block */ - chainsToReward: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - invulnerables: { - /** The invulnerable, permissioned collators. This list must be sorted. */ - invulnerables: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - maintenanceMode: { - /** Whether the site is in maintenance mode */ - maintenanceMode: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - messageQueue: { - /** The index of the first and last (non-empty) pages. */ - bookStateFor: AugmentedQuery< - ApiType, - ( - arg: - | CumulusPrimitivesCoreAggregateMessageOrigin - | { Here: any } - | { Parent: any } - | { Sibling: any } - | string - | Uint8Array - ) => Observable, - [CumulusPrimitivesCoreAggregateMessageOrigin] - > & - QueryableStorageEntry; - /** The map of page indices to pages. */ - pages: AugmentedQuery< - ApiType, - ( - arg1: - | CumulusPrimitivesCoreAggregateMessageOrigin - | { Here: any } - | { Parent: any } - | { Sibling: any } - | string - | Uint8Array, - arg2: u32 | AnyNumber | Uint8Array - ) => Observable>, - [CumulusPrimitivesCoreAggregateMessageOrigin, u32] - > & - QueryableStorageEntry; - /** The origin at which we should begin servicing. */ - serviceHead: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - migrations: { - /** True if all required migrations have completed */ - fullyUpgraded: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * MigrationState tracks the progress of a migration. Maps name (Vec) -> whether or not migration has been - * completed (bool) - */ - migrationState: AugmentedQuery Observable, [Bytes]> & - QueryableStorageEntry; - /** - * Temporary value that is set to true at the beginning of the block during which the execution of xcm messages - * must be paused. - */ - shouldPauseXcm: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - multisig: { - /** The set of open multisig operations. */ - multisigs: AugmentedQuery< - ApiType, - ( - arg1: AccountId32 | string | Uint8Array, - arg2: U8aFixed | string | Uint8Array - ) => Observable>, - [AccountId32, U8aFixed] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - parachainInfo: { - parachainId: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - parachainSystem: { - /** - * Storage field that keeps track of bandwidth used by the unincluded segment along with the latest HRMP - * watermark. Used for limiting the acceptance of new blocks with respect to relay chain constraints. - */ - aggregatedUnincludedSegment: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * The number of HRMP messages we observed in `on_initialize` and thus used that number for announcing the weight - * of `on_initialize` and `on_finalize`. - */ - announcedHrmpMessagesPerCandidate: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * A custom head data that should be returned as result of `validate_block`. - * - * See `Pallet::set_custom_validation_head_data` for more information. - */ - customValidationHeadData: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Were the validation data set to notify the relay chain? */ - didSetValidationCode: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * The parachain host configuration that was obtained from the relay parent. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, before processing of - * the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - */ - hostConfiguration: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * HRMP messages that were sent in a block. - * - * This will be cleared in `on_initialize` of each new block. - */ - hrmpOutboundMessages: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * HRMP watermark that was set in a block. - * - * This will be cleared in `on_initialize` of each new block. - */ - hrmpWatermark: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * The last downward message queue chain head we have observed. - * - * This value is loaded before and saved after processing inbound downward messages carried by the system inherent. - */ - lastDmqMqcHead: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * The message queue chain heads we have observed per each channel incoming channel. - * - * This value is loaded before and saved after processing inbound downward messages carried by the system inherent. - */ - lastHrmpMqcHeads: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * The relay chain block number associated with the last parachain block. - * - * This is updated in `on_finalize`. - */ - lastRelayChainBlockNumber: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * Validation code that is set by the parachain and is to be communicated to collator and consequently the relay-chain. - * - * This will be cleared in `on_initialize` of each new block if no other pallet already set the value. - */ - newValidationCode: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Upward messages that are still pending and not yet send to the relay chain. */ - pendingUpwardMessages: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * In case of a scheduled upgrade, this storage field contains the validation code to be applied. - * - * As soon as the relay chain gives us the go-ahead signal, we will overwrite the - * [`:code`][sp_core::storage::well_known_keys::CODE] which will result the next block process with the new - * validation code. This concludes the upgrade process. - */ - pendingValidationCode: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * Number of downward messages processed in a block. - * - * This will be cleared in `on_initialize` of each new block. - */ - processedDownwardMessages: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * The state proof for the last relay parent block. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, before processing of - * the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - */ - relayStateProof: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * The snapshot of some state related to messaging relevant to the current parachain as per the relay parent. - * - * This field is meant to be updated each block with the validation data inherent. Therefore, before processing of - * the inherent, e.g. in `on_initialize` this data may be stale. - * - * This data is also absent from the genesis. - */ - relevantMessagingState: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * The weight we reserve at the beginning of the block for processing DMP messages. This overrides the amount set - * in the Config trait. - */ - reservedDmpWeightOverride: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * The weight we reserve at the beginning of the block for processing XCMP messages. This overrides the amount set - * in the Config trait. - */ - reservedXcmpWeightOverride: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * Latest included block descendants the runtime accepted. In other words, these are ancestors of the currently - * executing block which have not been included in the observed relay-chain state. - * - * The segment length is limited by the capacity returned from the [`ConsensusHook`] configured in the pallet. - */ - unincludedSegment: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** - * Optional upgrade go-ahead signal from the relay-chain. - * - * This storage item is a mirror of the corresponding value for the current parachain from the relay-chain. This - * value is ephemeral which means it doesn't hit the storage. This value is set after the inherent. - */ - upgradeGoAhead: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * An option which indicates if the relay-chain restricts signalling a validation code upgrade. In other words, if - * this is `Some` and [`NewValidationCode`] is `Some` then the produced candidate will be invalid. - * - * This storage item is a mirror of the corresponding value for the current parachain from the relay-chain. This - * value is ephemeral which means it doesn't hit the storage. This value is set after the inherent. - */ - upgradeRestrictionSignal: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** The factor to multiply the base delivery fee by for UMP. */ - upwardDeliveryFeeFactor: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * Upward messages that were sent in a block. - * - * This will be cleared in `on_initialize` of each new block. - */ - upwardMessages: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * The [`PersistedValidationData`] set for this block. This value is expected to be set only once per block and - * it's never stored in the trie. - */ - validationData: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - polkadotXcm: { - /** - * The existing asset traps. - * - * Key is the blake2 256 hash of (origin, versioned `MultiAssets`) pair. Value is the number of times this pair - * has been trapped (usually just 1 if it exists at all). - */ - assetTraps: AugmentedQuery Observable, [H256]> & - QueryableStorageEntry; - /** The current migration's stage, if any. */ - currentMigration: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Fungible assets which we know are locked on this chain. */ - lockedFungibles: AugmentedQuery< - ApiType, - ( - arg: AccountId32 | string | Uint8Array - ) => Observable>>>, - [AccountId32] - > & - QueryableStorageEntry; - /** The ongoing queries. */ - queries: AugmentedQuery< - ApiType, - (arg: u64 | AnyNumber | Uint8Array) => Observable>, - [u64] - > & - QueryableStorageEntry; - /** The latest available query index. */ - queryCounter: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Fungible assets which we know are locked on a remote chain. */ - remoteLockedFungibles: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: AccountId32 | string | Uint8Array, - arg3: XcmVersionedAssetId | { V3: any } | string | Uint8Array - ) => Observable>, - [u32, AccountId32, XcmVersionedAssetId] - > & - QueryableStorageEntry; - /** - * Default version to encode XCM when latest version of destination is unknown. If `None`, then the destinations - * whose XCM version is unknown are considered unreachable. - */ - safeXcmVersion: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** The Latest versions that we know various locations support. */ - supportedVersion: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array - ) => Observable>, - [u32, XcmVersionedMultiLocation] - > & - QueryableStorageEntry; - /** - * Destinations whose latest XCM version we would like to know. Duplicates not allowed, and the `u32` counter is - * the number of times that a send to the destination has been attempted, which is used as a prioritization. - */ - versionDiscoveryQueue: AugmentedQuery< - ApiType, - () => Observable>>, - [] - > & - QueryableStorageEntry; - /** All locations that we have requested version notifications from. */ - versionNotifiers: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array - ) => Observable>, - [u32, XcmVersionedMultiLocation] - > & - QueryableStorageEntry; - /** - * The target locations that are subscribed to our version changes, as well as the most recent of our versions we - * informed them of. - */ - versionNotifyTargets: AugmentedQuery< - ApiType, - ( - arg1: u32 | AnyNumber | Uint8Array, - arg2: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array - ) => Observable>>, - [u32, XcmVersionedMultiLocation] - > & - QueryableStorageEntry; - /** Global suspension state of the XCM executor. */ - xcmExecutionSuspended: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - pooledStaking: { - /** Pending operations balances. Balances are expressed in joining/leaving shares amounts. */ - pendingOperations: AugmentedQuery< - ApiType, - ( - arg1: AccountId32 | string | Uint8Array, - arg2: - | PalletPooledStakingPendingOperationKey - | { JoiningAutoCompounding: any } - | { JoiningManualRewards: any } - | { Leaving: any } - | string - | Uint8Array - ) => Observable, - [AccountId32, PalletPooledStakingPendingOperationKey] - > & - QueryableStorageEntry; - /** Pools balances. */ - pools: AugmentedQuery< - ApiType, - ( - arg1: AccountId32 | string | Uint8Array, - arg2: - | PalletPooledStakingPoolsKey - | { CandidateTotalStake: any } - | { JoiningShares: any } - | { JoiningSharesSupply: any } - | { JoiningSharesTotalStaked: any } - | { JoiningSharesHeldStake: any } - | { AutoCompoundingShares: any } - | { AutoCompoundingSharesSupply: any } - | { AutoCompoundingSharesTotalStaked: any } - | { AutoCompoundingSharesHeldStake: any } - | { ManualRewardsShares: any } - | { ManualRewardsSharesSupply: any } - | { ManualRewardsSharesTotalStaked: any } - | { ManualRewardsSharesHeldStake: any } - | { ManualRewardsCounter: any } - | { ManualRewardsCheckpoint: any } - | { LeavingShares: any } - | { LeavingSharesSupply: any } - | { LeavingSharesTotalStaked: any } - | { LeavingSharesHeldStake: any } - | string - | Uint8Array - ) => Observable, - [AccountId32, PalletPooledStakingPoolsKey] - > & - QueryableStorageEntry; - /** - * Keeps a list of all eligible candidates, sorted by the amount of stake backing them. This can be quickly - * updated using a binary search, and allow to easily take the top `MaxCollatorSetSize`. - */ - sortedEligibleCandidates: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - proxy: { - /** The announcements made by the proxy (key). */ - announcements: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable, u128]>>, - [AccountId32] - > & - QueryableStorageEntry; - /** - * The set of account proxies. Maps the account which has delegated to the accounts which are being delegated to, - * together with the amount held on deposit. - */ - proxies: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable, u128]>>, - [AccountId32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - registrar: { - paraGenesisData: AugmentedQuery< - ApiType, - ( - arg: u32 | AnyNumber | Uint8Array - ) => Observable>, - [u32] - > & - QueryableStorageEntry; - parathreadParams: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - paused: AugmentedQuery Observable>, []> & QueryableStorageEntry; - pendingParaIds: AugmentedQuery Observable]>>>, []> & - QueryableStorageEntry; - pendingParathreadParams: AugmentedQuery< - ApiType, - () => Observable>]>>>, - [] - > & - QueryableStorageEntry; - pendingPaused: AugmentedQuery Observable]>>>, []> & - QueryableStorageEntry; - pendingToRemove: AugmentedQuery Observable]>>>, []> & - QueryableStorageEntry; - pendingVerification: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - registeredParaIds: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * Registrar deposits, a mapping from paraId to a struct holding the creator (from which the deposit was reserved) - * and the deposit amount - */ - registrarDeposit: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - relayStorageRoots: { - /** Map of relay block number to relay storage root */ - relayStorageRoot: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** List of all the keys in `RelayStorageRoot`. Used to remove the oldest key without having to iterate over all of them. */ - relayStorageRootKeys: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - servicesPayment: { - blockProductionCredits: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - collatorAssignmentCredits: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** List of para ids that have already been given free credits */ - givenFreeCredits: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Max core price for parathread in relay chain currency */ - maxCorePrice: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Max tip for collator assignment on congestion */ - maxTip: AugmentedQuery Observable>, [u32]> & - QueryableStorageEntry; - /** Refund address */ - refundAddress: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - session: { - /** Current index of the session. */ - currentIndex: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * Indices of disabled validators. - * - * The vec is always kept sorted so that we can find whether a given validator is disabled using binary search. It - * gets cleared when `on_session_ending` returns a new set of identities. - */ - disabledValidators: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** The owner of a key. The key is the `KeyTypeId` + the encoded key. */ - keyOwner: AugmentedQuery< - ApiType, - ( - arg: - | ITuple<[SpCoreCryptoKeyTypeId, Bytes]> - | [SpCoreCryptoKeyTypeId | string | Uint8Array, Bytes | string | Uint8Array] - ) => Observable>, - [ITuple<[SpCoreCryptoKeyTypeId, Bytes]>] - > & - QueryableStorageEntry]>; - /** The next session keys for a validator. */ - nextKeys: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable>, - [AccountId32] - > & - QueryableStorageEntry; - /** True if the underlying economic identities or weighting behind the validators has changed in the queued validator set. */ - queuedChanged: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * The queued keys for the next session. When the next session begins, these keys will be used to determine the - * validator's session keys. - */ - queuedKeys: AugmentedQuery< - ApiType, - () => Observable>>, - [] - > & - QueryableStorageEntry; - /** The current set of validators. */ - validators: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - streamPayment: { - /** - * Lookup for all streams with given source. To avoid maintaining a growing list of stream ids, they are stored in - * the form of an entry (AccountId, StreamId). If such entry exists then this AccountId is a source in StreamId. - * One can iterate over all storage keys starting with the AccountId to find all StreamIds. - */ - lookupStreamsWithSource: AugmentedQuery< - ApiType, - ( - arg1: AccountId32 | string | Uint8Array, - arg2: u64 | AnyNumber | Uint8Array - ) => Observable>, - [AccountId32, u64] - > & - QueryableStorageEntry; - /** - * Lookup for all streams with given target. To avoid maintaining a growing list of stream ids, they are stored in - * the form of an entry (AccountId, StreamId). If such entry exists then this AccountId is a target in StreamId. - * One can iterate over all storage keys starting with the AccountId to find all StreamIds. - */ - lookupStreamsWithTarget: AugmentedQuery< - ApiType, - ( - arg1: AccountId32 | string | Uint8Array, - arg2: u64 | AnyNumber | Uint8Array - ) => Observable>, - [AccountId32, u64] - > & - QueryableStorageEntry; - /** Store the next available stream id. */ - nextStreamId: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Store each stream indexed by an Id. */ - streams: AugmentedQuery< - ApiType, - (arg: u64 | AnyNumber | Uint8Array) => Observable>, - [u64] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - sudo: { - /** The `AccountId` of the sudo key. */ - key: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - system: { - /** The full account information for a particular account ID. */ - account: AugmentedQuery< - ApiType, - (arg: AccountId32 | string | Uint8Array) => Observable, - [AccountId32] - > & - QueryableStorageEntry; - /** Total length (in bytes) for all extrinsics put together, for the current block. */ - allExtrinsicsLen: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** `Some` if a code upgrade has been authorized. */ - authorizedUpgrade: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Map of block numbers to block hashes. */ - blockHash: AugmentedQuery Observable, [u32]> & - QueryableStorageEntry; - /** The current weight for the block. */ - blockWeight: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Digest of the current block, also part of the block header. */ - digest: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** The number of events in the `Events` list. */ - eventCount: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** - * Events deposited for the current block. - * - * NOTE: The item is unbound and should therefore never be read on chain. It could otherwise inflate the PoV size - * of a block. - * - * Events have a large in-memory size. Box the events to not go out-of-memory just in case someone still reads - * them from within the runtime. - */ - events: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** - * Mapping between a topic (represented by T::Hash) and a vector of indexes of events in the `>` list. - * - * All topic vectors have deterministic storage locations depending on the topic. This allows light-clients to - * leverage the changes trie storage tracking mechanism and in case of changes fetch the list of events of interest. - * - * The value has the type `(BlockNumberFor, EventIndex)` because if we used only just the `EventIndex` then in - * case if the topic has the same contents on the next block no notification will be triggered thus the event - * might be lost. - */ - eventTopics: AugmentedQuery< - ApiType, - (arg: H256 | string | Uint8Array) => Observable>>, - [H256] - > & - QueryableStorageEntry; - /** The execution phase of the block. */ - executionPhase: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Total extrinsics count for the current block. */ - extrinsicCount: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** Extrinsics data for the current block (maps an extrinsic's index to its data). */ - extrinsicData: AugmentedQuery Observable, [u32]> & - QueryableStorageEntry; - /** Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened. */ - lastRuntimeUpgrade: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** The current block number being processed. Set by `execute_block`. */ - number: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Hash of the previous block. */ - parentHash: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** True if we have upgraded so that AccountInfo contains three types of `RefCount`. False (default) if not. */ - upgradedToTripleRefCount: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** True if we have upgraded so that `type RefCount` is `u32`. False (default) if not. */ - upgradedToU32RefCount: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - timestamp: { - /** - * Whether the timestamp has been updated in this block. - * - * This value is updated to `true` upon successful submission of a timestamp by a node. It is then checked at the - * end of each block execution in the `on_finalize` hook. - */ - didUpdate: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** The current time for the current block. */ - now: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - transactionPayment: { - nextFeeMultiplier: AugmentedQuery Observable, []> & QueryableStorageEntry; - storageVersion: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - treasury: { - /** Proposal indices that have been approved but not yet awarded. */ - approvals: AugmentedQuery Observable>, []> & QueryableStorageEntry; - /** The amount which has been reported as inactive to Currency. */ - deactivated: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Number of proposals that have been made. */ - proposalCount: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Proposals that have been made. */ - proposals: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** The count of spends that have been made. */ - spendCount: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Spends that have been approved and being processed. */ - spends: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - txPause: { - /** The set of calls that are explicitly paused. */ - pausedCalls: AugmentedQuery< - ApiType, - ( - arg: ITuple<[Bytes, Bytes]> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] - ) => Observable>, - [ITuple<[Bytes, Bytes]>] - > & - QueryableStorageEntry]>; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - xcmCoreBuyer: { - /** - * Set of parathreads that have already sent an XCM message to buy a core recently. Used to avoid 2 collators - * buying a core at the same time, because it is only possible to buy 1 core in 1 relay block for the same parathread. - */ - inFlightOrders: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Number of pending blocks */ - pendingBlocks: AugmentedQuery< - ApiType, - (arg: u32 | AnyNumber | Uint8Array) => Observable>, - [u32] - > & - QueryableStorageEntry; - /** Mapping of QueryId to ParaId */ - queryIdToParaId: AugmentedQuery< - ApiType, - (arg: u64 | AnyNumber | Uint8Array) => Observable>, - [u64] - > & - QueryableStorageEntry; - /** - * This must be set by root with the value of the relay chain xcm call weight and extrinsic weight limit. This is - * a storage item because relay chain weights can change, so we need to be able to adjust them without doing a - * runtime upgrade. - */ - relayChain: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** - * This must be set by root with the value of the relay chain xcm call weight and extrinsic weight limit. This is - * a storage item because relay chain weights can change, so we need to be able to adjust them without doing a - * runtime upgrade. - */ - relayXcmWeightConfig: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - xcmpQueue: { - /** The factor to multiply the base delivery fee by. */ - deliveryFeeFactor: AugmentedQuery Observable, [u32]> & - QueryableStorageEntry; - /** - * The suspended inbound XCMP channels. All others are not suspended. - * - * This is a `StorageValue` instead of a `StorageMap` since we expect multiple reads per block to different keys - * with a one byte payload. The access to `BoundedBTreeSet` will be cached within the block and therefore only - * included once in the proof size. - * - * NOTE: The PoV benchmarking cannot know this and will over-estimate, but the actual proof will be smaller. - */ - inboundXcmpSuspended: AugmentedQuery Observable>, []> & - QueryableStorageEntry; - /** The messages outbound in a given XCMP channel. */ - outboundXcmpMessages: AugmentedQuery< - ApiType, - (arg1: u32 | AnyNumber | Uint8Array, arg2: u16 | AnyNumber | Uint8Array) => Observable, - [u32, u16] - > & - QueryableStorageEntry; - /** - * The non-empty XCMP channels in order of becoming non-empty, and the index of the first and last outbound - * message. If the two indices are equal, then it indicates an empty queue and there must be a non-`Ok` - * `OutboundStatus`. We assume queues grow no greater than 65535 items. Queue indices for normal messages begin at - * one; zero is reserved in case of the need to send a high-priority signal message this block. The bool is true - * if there is a signal message waiting to be sent. - */ - outboundXcmpStatus: AugmentedQuery< - ApiType, - () => Observable>, - [] - > & - QueryableStorageEntry; - /** The configuration which controls the dynamics of the outbound queue. */ - queueConfig: AugmentedQuery Observable, []> & - QueryableStorageEntry; - /** Whether or not the XCMP queue is suspended from executing incoming XCMs or not. */ - queueSuspended: AugmentedQuery Observable, []> & QueryableStorageEntry; - /** Any signal messages waiting to be sent. */ - signalMessages: AugmentedQuery Observable, [u32]> & - QueryableStorageEntry; - /** Generic query */ - [key: string]: QueryableStorageEntry; - }; - } // AugmentedQueries -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-rpc.ts b/typescript-api/src/dancebox/interfaces/augment-api-rpc.ts deleted file mode 100644 index 78077c7..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-rpc.ts +++ /dev/null @@ -1,781 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/rpc-core/types/jsonrpc"; - -import type { AugmentedRpc } from "@polkadot/rpc-core/types"; -import type { Metadata, StorageKey } from "@polkadot/types"; -import type { - Bytes, - HashMap, - Json, - Null, - Option, - Text, - U256, - U64, - Vec, - bool, - f64, - u32, - u64, -} from "@polkadot/types-codec"; -import type { AnyNumber, Codec } from "@polkadot/types-codec/types"; -import type { ExtrinsicOrHash, ExtrinsicStatus } from "@polkadot/types/interfaces/author"; -import type { EpochAuthorship } from "@polkadot/types/interfaces/babe"; -import type { BeefyVersionedFinalityProof } from "@polkadot/types/interfaces/beefy"; -import type { BlockHash } from "@polkadot/types/interfaces/chain"; -import type { PrefixedStorageKey } from "@polkadot/types/interfaces/childstate"; -import type { AuthorityId } from "@polkadot/types/interfaces/consensus"; -import type { - CodeUploadRequest, - CodeUploadResult, - ContractCallRequest, - ContractExecResult, - ContractInstantiateResult, - InstantiateRequestV1, -} from "@polkadot/types/interfaces/contracts"; -import type { BlockStats } from "@polkadot/types/interfaces/dev"; -import type { CreatedBlock } from "@polkadot/types/interfaces/engine"; -import type { - EthAccount, - EthCallRequest, - EthFeeHistory, - EthFilter, - EthFilterChanges, - EthLog, - EthReceipt, - EthRichBlock, - EthSubKind, - EthSubParams, - EthSyncStatus, - EthTransaction, - EthTransactionRequest, - EthWork, -} from "@polkadot/types/interfaces/eth"; -import type { Extrinsic } from "@polkadot/types/interfaces/extrinsics"; -import type { - EncodedFinalityProofs, - JustificationNotification, - ReportedRoundStates, -} from "@polkadot/types/interfaces/grandpa"; -import type { MmrHash, MmrLeafBatchProof } from "@polkadot/types/interfaces/mmr"; -import type { StorageKind } from "@polkadot/types/interfaces/offchain"; -import type { FeeDetails, RuntimeDispatchInfoV1 } from "@polkadot/types/interfaces/payment"; -import type { RpcMethods } from "@polkadot/types/interfaces/rpc"; -import type { - AccountId, - BlockNumber, - H160, - H256, - H64, - Hash, - Header, - Index, - Justification, - KeyValue, - SignedBlock, - StorageData, -} from "@polkadot/types/interfaces/runtime"; -import type { - MigrationStatusResult, - ReadProof, - RuntimeVersion, - TraceBlockResponse, -} from "@polkadot/types/interfaces/state"; -import type { - ApplyExtrinsicResult, - ChainProperties, - ChainType, - Health, - NetworkState, - NodeRole, - PeerInfo, - SyncState, -} from "@polkadot/types/interfaces/system"; -import type { IExtrinsic, Observable } from "@polkadot/types/types"; - -export type __AugmentedRpc = AugmentedRpc<() => unknown>; - -declare module "@polkadot/rpc-core/types/jsonrpc" { - interface RpcInterface { - author: { - /** Returns true if the keystore has private keys for the given public key and key type. */ - hasKey: AugmentedRpc<(publicKey: Bytes | string | Uint8Array, keyType: Text | string) => Observable>; - /** Returns true if the keystore has private keys for the given session public keys. */ - hasSessionKeys: AugmentedRpc<(sessionKeys: Bytes | string | Uint8Array) => Observable>; - /** Insert a key into the keystore. */ - insertKey: AugmentedRpc< - ( - keyType: Text | string, - suri: Text | string, - publicKey: Bytes | string | Uint8Array - ) => Observable - >; - /** Returns all pending extrinsics, potentially grouped by sender */ - pendingExtrinsics: AugmentedRpc<() => Observable>>; - /** Remove given extrinsic from the pool and temporarily ban it to prevent reimporting */ - removeExtrinsic: AugmentedRpc< - ( - bytesOrHash: - | Vec - | (ExtrinsicOrHash | { Hash: any } | { Extrinsic: any } | string | Uint8Array)[] - ) => Observable> - >; - /** Generate new session keys and returns the corresponding public keys */ - rotateKeys: AugmentedRpc<() => Observable>; - /** Submit and subscribe to watch an extrinsic until unsubscribed */ - submitAndWatchExtrinsic: AugmentedRpc< - (extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable - >; - /** Submit a fully formatted extrinsic for block inclusion */ - submitExtrinsic: AugmentedRpc< - (extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable - >; - }; - babe: { - /** Returns data about which slots (primary or secondary) can be claimed in the current epoch with the keys in the keystore */ - epochAuthorship: AugmentedRpc<() => Observable>>; - }; - beefy: { - /** Returns hash of the latest BEEFY finalized block as seen by this client. */ - getFinalizedHead: AugmentedRpc<() => Observable>; - /** Returns the block most recently finalized by BEEFY, alongside its justification. */ - subscribeJustifications: AugmentedRpc<() => Observable>; - }; - chain: { - /** Get header and body of a relay chain block */ - getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable>; - /** Get the block hash for a specific block */ - getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable>; - /** Get hash of the last finalized block in the canon chain */ - getFinalizedHead: AugmentedRpc<() => Observable>; - /** Retrieves the header for a specific block */ - getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable
>; - /** Retrieves the newest header via subscription */ - subscribeAllHeads: AugmentedRpc<() => Observable
>; - /** Retrieves the best finalized header via subscription */ - subscribeFinalizedHeads: AugmentedRpc<() => Observable
>; - /** Retrieves the best header via subscription */ - subscribeNewHeads: AugmentedRpc<() => Observable
>; - }; - childstate: { - /** Returns the keys with prefix from a child storage, leave empty to get all the keys */ - getKeys: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - prefix: StorageKey | string | Uint8Array | any, - at?: Hash | string | Uint8Array - ) => Observable> - >; - /** Returns the keys with prefix from a child storage with pagination support */ - getKeysPaged: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - prefix: StorageKey | string | Uint8Array | any, - count: u32 | AnyNumber | Uint8Array, - startKey?: StorageKey | string | Uint8Array | any, - at?: Hash | string | Uint8Array - ) => Observable> - >; - /** Returns a child storage entry at a specific block state */ - getStorage: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: Hash | string | Uint8Array - ) => Observable> - >; - /** Returns child storage entries for multiple keys at a specific block state */ - getStorageEntries: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - keys: Vec | (StorageKey | string | Uint8Array | any)[], - at?: Hash | string | Uint8Array - ) => Observable>> - >; - /** Returns the hash of a child storage entry at a block state */ - getStorageHash: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: Hash | string | Uint8Array - ) => Observable> - >; - /** Returns the size of a child storage entry at a block state */ - getStorageSize: AugmentedRpc< - ( - childKey: PrefixedStorageKey | string | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: Hash | string | Uint8Array - ) => Observable> - >; - }; - contracts: { - /** @deprecated Use the runtime interface `api.call.contractsApi.call` instead Executes a call to a contract */ - call: AugmentedRpc< - ( - callRequest: - | ContractCallRequest - | { - origin?: any; - dest?: any; - value?: any; - gasLimit?: any; - storageDepositLimit?: any; - inputData?: any; - } - | string - | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** - * @deprecated Use the runtime interface `api.call.contractsApi.getStorage` instead Returns the value under a - * specified storage key in a contract - */ - getStorage: AugmentedRpc< - ( - address: AccountId | string | Uint8Array, - key: H256 | string | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** @deprecated Use the runtime interface `api.call.contractsApi.instantiate` instead Instantiate a new contract */ - instantiate: AugmentedRpc< - ( - request: - | InstantiateRequestV1 - | { origin?: any; value?: any; gasLimit?: any; code?: any; data?: any; salt?: any } - | string - | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** - * @deprecated Not available in newer versions of the contracts interfaces Returns the projected time a given - * contract will be able to sustain paying its rent - */ - rentProjection: AugmentedRpc< - ( - address: AccountId | string | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** - * @deprecated Use the runtime interface `api.call.contractsApi.uploadCode` instead Upload new code without - * instantiating a contract from it - */ - uploadCode: AugmentedRpc< - ( - uploadRequest: - | CodeUploadRequest - | { origin?: any; code?: any; storageDepositLimit?: any } - | string - | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - }; - dev: { - /** Reexecute the specified `block_hash` and gather statistics while doing so */ - getBlockStats: AugmentedRpc<(at: Hash | string | Uint8Array) => Observable>>; - }; - engine: { - /** Instructs the manual-seal authorship task to create a new block */ - createBlock: AugmentedRpc< - ( - createEmpty: bool | boolean | Uint8Array, - finalize: bool | boolean | Uint8Array, - parentHash?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Instructs the manual-seal authorship task to finalize a block */ - finalizeBlock: AugmentedRpc< - (hash: BlockHash | string | Uint8Array, justification?: Justification) => Observable - >; - }; - eth: { - /** Returns accounts list. */ - accounts: AugmentedRpc<() => Observable>>; - /** Returns the blockNumber */ - blockNumber: AugmentedRpc<() => Observable>; - /** Call contract, returning the output data. */ - call: AugmentedRpc< - ( - request: - | EthCallRequest - | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } - | string - | Uint8Array, - number?: BlockNumber | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns the chain ID used for transaction signing at the current best block. None is returned if not available. */ - chainId: AugmentedRpc<() => Observable>; - /** Returns block author. */ - coinbase: AugmentedRpc<() => Observable>; - /** Estimate gas needed for execution of given contract. */ - estimateGas: AugmentedRpc< - ( - request: - | EthCallRequest - | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } - | string - | Uint8Array, - number?: BlockNumber | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns fee history for given block count & reward percentiles */ - feeHistory: AugmentedRpc< - ( - blockCount: U256 | AnyNumber | Uint8Array, - newestBlock: BlockNumber | AnyNumber | Uint8Array, - rewardPercentiles: Option> | null | Uint8Array | Vec | f64[] - ) => Observable - >; - /** Returns current gas price. */ - gasPrice: AugmentedRpc<() => Observable>; - /** Returns balance of the given account. */ - getBalance: AugmentedRpc< - (address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable - >; - /** Returns block with given hash. */ - getBlockByHash: AugmentedRpc< - ( - hash: H256 | string | Uint8Array, - full: bool | boolean | Uint8Array - ) => Observable> - >; - /** Returns block with given number. */ - getBlockByNumber: AugmentedRpc< - ( - block: BlockNumber | AnyNumber | Uint8Array, - full: bool | boolean | Uint8Array - ) => Observable> - >; - /** Returns the number of transactions in a block with given hash. */ - getBlockTransactionCountByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** Returns the number of transactions in a block with given block number. */ - getBlockTransactionCountByNumber: AugmentedRpc< - (block: BlockNumber | AnyNumber | Uint8Array) => Observable - >; - /** Returns the code at given address at given time (block number). */ - getCode: AugmentedRpc< - ( - address: H160 | string | Uint8Array, - number?: BlockNumber | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns filter changes since last poll. */ - getFilterChanges: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>; - /** Returns all logs matching given filter (in a range 'from' - 'to'). */ - getFilterLogs: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>>; - /** Returns logs matching given filter object. */ - getLogs: AugmentedRpc< - ( - filter: - | EthFilter - | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } - | string - | Uint8Array - ) => Observable> - >; - /** Returns proof for account and storage. */ - getProof: AugmentedRpc< - ( - address: H160 | string | Uint8Array, - storageKeys: Vec | (H256 | string | Uint8Array)[], - number: BlockNumber | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns content of the storage at given address. */ - getStorageAt: AugmentedRpc< - ( - address: H160 | string | Uint8Array, - index: U256 | AnyNumber | Uint8Array, - number?: BlockNumber | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns transaction at given block hash and index. */ - getTransactionByBlockHashAndIndex: AugmentedRpc< - (hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable - >; - /** Returns transaction by given block number and index. */ - getTransactionByBlockNumberAndIndex: AugmentedRpc< - ( - number: BlockNumber | AnyNumber | Uint8Array, - index: U256 | AnyNumber | Uint8Array - ) => Observable - >; - /** Get transaction by its hash. */ - getTransactionByHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** Returns the number of transactions sent from given address at given time (block number). */ - getTransactionCount: AugmentedRpc< - (address: H160 | string | Uint8Array, number?: BlockNumber | AnyNumber | Uint8Array) => Observable - >; - /** Returns transaction receipt by transaction hash. */ - getTransactionReceipt: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** Returns an uncles at given block and index. */ - getUncleByBlockHashAndIndex: AugmentedRpc< - (hash: H256 | string | Uint8Array, index: U256 | AnyNumber | Uint8Array) => Observable - >; - /** Returns an uncles at given block and index. */ - getUncleByBlockNumberAndIndex: AugmentedRpc< - ( - number: BlockNumber | AnyNumber | Uint8Array, - index: U256 | AnyNumber | Uint8Array - ) => Observable - >; - /** Returns the number of uncles in a block with given hash. */ - getUncleCountByBlockHash: AugmentedRpc<(hash: H256 | string | Uint8Array) => Observable>; - /** Returns the number of uncles in a block with given block number. */ - getUncleCountByBlockNumber: AugmentedRpc< - (number: BlockNumber | AnyNumber | Uint8Array) => Observable - >; - /** Returns the hash of the current block, the seedHash, and the boundary condition to be met. */ - getWork: AugmentedRpc<() => Observable>; - /** Returns the number of hashes per second that the node is mining with. */ - hashrate: AugmentedRpc<() => Observable>; - /** Returns max priority fee per gas */ - maxPriorityFeePerGas: AugmentedRpc<() => Observable>; - /** Returns true if client is actively mining new blocks. */ - mining: AugmentedRpc<() => Observable>; - /** Returns id of new block filter. */ - newBlockFilter: AugmentedRpc<() => Observable>; - /** Returns id of new filter. */ - newFilter: AugmentedRpc< - ( - filter: - | EthFilter - | { fromBlock?: any; toBlock?: any; blockHash?: any; address?: any; topics?: any } - | string - | Uint8Array - ) => Observable - >; - /** Returns id of new block filter. */ - newPendingTransactionFilter: AugmentedRpc<() => Observable>; - /** Returns protocol version encoded as a string (quotes are necessary). */ - protocolVersion: AugmentedRpc<() => Observable>; - /** Sends signed transaction, returning its hash. */ - sendRawTransaction: AugmentedRpc<(bytes: Bytes | string | Uint8Array) => Observable>; - /** Sends transaction; will block waiting for signer to return the transaction hash */ - sendTransaction: AugmentedRpc< - ( - tx: - | EthTransactionRequest - | { from?: any; to?: any; gasPrice?: any; gas?: any; value?: any; data?: any; nonce?: any } - | string - | Uint8Array - ) => Observable - >; - /** Used for submitting mining hashrate. */ - submitHashrate: AugmentedRpc< - (index: U256 | AnyNumber | Uint8Array, hash: H256 | string | Uint8Array) => Observable - >; - /** Used for submitting a proof-of-work solution. */ - submitWork: AugmentedRpc< - ( - nonce: H64 | string | Uint8Array, - headerHash: H256 | string | Uint8Array, - mixDigest: H256 | string | Uint8Array - ) => Observable - >; - /** Subscribe to Eth subscription. */ - subscribe: AugmentedRpc< - ( - kind: EthSubKind | "newHeads" | "logs" | "newPendingTransactions" | "syncing" | number | Uint8Array, - params?: EthSubParams | { None: any } | { Logs: any } | string | Uint8Array - ) => Observable - >; - /** Returns an object with data about the sync status or false. */ - syncing: AugmentedRpc<() => Observable>; - /** Uninstalls filter. */ - uninstallFilter: AugmentedRpc<(index: U256 | AnyNumber | Uint8Array) => Observable>; - }; - grandpa: { - /** Prove finality for the given block number, returning the Justification for the last block in the set. */ - proveFinality: AugmentedRpc< - (blockNumber: BlockNumber | AnyNumber | Uint8Array) => Observable> - >; - /** Returns the state of the current best round state as well as the ongoing background rounds */ - roundState: AugmentedRpc<() => Observable>; - /** Subscribes to grandpa justifications */ - subscribeJustifications: AugmentedRpc<() => Observable>; - }; - mmr: { - /** Generate MMR proof for the given block numbers. */ - generateProof: AugmentedRpc< - ( - blockNumbers: Vec | (u64 | AnyNumber | Uint8Array)[], - bestKnownBlockNumber?: u64 | AnyNumber | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Get the MMR root hash for the current best block. */ - root: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** Verify an MMR proof */ - verifyProof: AugmentedRpc< - ( - proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array - ) => Observable - >; - /** Verify an MMR proof statelessly given an mmr_root */ - verifyProofStateless: AugmentedRpc< - ( - root: MmrHash | string | Uint8Array, - proof: MmrLeafBatchProof | { blockHash?: any; leaves?: any; proof?: any } | string | Uint8Array - ) => Observable - >; - }; - net: { - /** Returns true if client is actively listening for network connections. Otherwise false. */ - listening: AugmentedRpc<() => Observable>; - /** Returns number of peers connected to node. */ - peerCount: AugmentedRpc<() => Observable>; - /** Returns protocol version. */ - version: AugmentedRpc<() => Observable>; - }; - offchain: { - /** Get offchain local storage under given key and prefix */ - localStorageGet: AugmentedRpc< - ( - kind: StorageKind | "PERSISTENT" | "LOCAL" | number | Uint8Array, - key: Bytes | string | Uint8Array - ) => Observable> - >; - /** Set offchain local storage under given key and prefix */ - localStorageSet: AugmentedRpc< - ( - kind: StorageKind | "PERSISTENT" | "LOCAL" | number | Uint8Array, - key: Bytes | string | Uint8Array, - value: Bytes | string | Uint8Array - ) => Observable - >; - }; - payment: { - /** - * @deprecated Use `api.call.transactionPaymentApi.queryFeeDetails` instead Query the detailed fee of a given - * encoded extrinsic - */ - queryFeeDetails: AugmentedRpc< - (extrinsic: Bytes | string | Uint8Array, at?: BlockHash | string | Uint8Array) => Observable - >; - /** @deprecated Use `api.call.transactionPaymentApi.queryInfo` instead Retrieves the fee information for an encoded extrinsic */ - queryInfo: AugmentedRpc< - ( - extrinsic: Bytes | string | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - }; - rpc: { - /** Retrieves the list of RPC methods that are exposed by the node */ - methods: AugmentedRpc<() => Observable>; - }; - state: { - /** Perform a call to a builtin on the chain */ - call: AugmentedRpc< - ( - method: Text | string, - data: Bytes | string | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Retrieves the keys with prefix of a specific child storage */ - getChildKeys: AugmentedRpc< - ( - childStorageKey: StorageKey | string | Uint8Array | any, - childDefinition: StorageKey | string | Uint8Array | any, - childType: u32 | AnyNumber | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** Returns proof of storage for child key entries at a specific block state. */ - getChildReadProof: AugmentedRpc< - ( - childStorageKey: PrefixedStorageKey | string | Uint8Array, - keys: Vec | (StorageKey | string | Uint8Array | any)[], - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Retrieves the child storage for a key */ - getChildStorage: AugmentedRpc< - ( - childStorageKey: StorageKey | string | Uint8Array | any, - childDefinition: StorageKey | string | Uint8Array | any, - childType: u32 | AnyNumber | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Retrieves the child storage hash */ - getChildStorageHash: AugmentedRpc< - ( - childStorageKey: StorageKey | string | Uint8Array | any, - childDefinition: StorageKey | string | Uint8Array | any, - childType: u32 | AnyNumber | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Retrieves the child storage size */ - getChildStorageSize: AugmentedRpc< - ( - childStorageKey: StorageKey | string | Uint8Array | any, - childDefinition: StorageKey | string | Uint8Array | any, - childType: u32 | AnyNumber | Uint8Array, - key: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys Retrieves the keys with a certain prefix */ - getKeys: AugmentedRpc< - ( - key: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** Returns the keys with prefix with pagination support. */ - getKeysPaged: AugmentedRpc< - ( - key: StorageKey | string | Uint8Array | any, - count: u32 | AnyNumber | Uint8Array, - startKey?: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** Returns the runtime metadata */ - getMetadata: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** - * @deprecated Use `api.rpc.state.getKeysPaged` to retrieve keys Returns the keys with prefix, leave empty to get - * all the keys (deprecated: Use getKeysPaged) - */ - getPairs: AugmentedRpc< - ( - prefix: StorageKey | string | Uint8Array | any, - at?: BlockHash | string | Uint8Array - ) => Observable> - >; - /** Returns proof of storage entries at a specific block state */ - getReadProof: AugmentedRpc< - ( - keys: Vec | (StorageKey | string | Uint8Array | any)[], - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Get the runtime version */ - getRuntimeVersion: AugmentedRpc<(at?: BlockHash | string | Uint8Array) => Observable>; - /** Retrieves the storage for a key */ - getStorage: AugmentedRpc< - ( - key: StorageKey | string | Uint8Array | any, - block?: Hash | Uint8Array | string - ) => Observable - >; - /** Retrieves the storage hash */ - getStorageHash: AugmentedRpc< - (key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable - >; - /** Retrieves the storage size */ - getStorageSize: AugmentedRpc< - (key: StorageKey | string | Uint8Array | any, at?: BlockHash | string | Uint8Array) => Observable - >; - /** Query historical storage entries (by key) starting from a start block */ - queryStorage: AugmentedRpc< - ( - keys: Vec | (StorageKey | string | Uint8Array | any)[], - fromBlock?: Hash | Uint8Array | string, - toBlock?: Hash | Uint8Array | string - ) => Observable<[Hash, T][]> - >; - /** Query storage entries (by key) starting at block hash given as the second parameter */ - queryStorageAt: AugmentedRpc< - ( - keys: Vec | (StorageKey | string | Uint8Array | any)[], - at?: Hash | Uint8Array | string - ) => Observable - >; - /** Retrieves the runtime version via subscription */ - subscribeRuntimeVersion: AugmentedRpc<() => Observable>; - /** Subscribes to storage changes for the provided keys */ - subscribeStorage: AugmentedRpc< - (keys?: Vec | (StorageKey | string | Uint8Array | any)[]) => Observable - >; - /** Provides a way to trace the re-execution of a single block */ - traceBlock: AugmentedRpc< - ( - block: Hash | string | Uint8Array, - targets: Option | null | Uint8Array | Text | string, - storageKeys: Option | null | Uint8Array | Text | string, - methods: Option | null | Uint8Array | Text | string - ) => Observable - >; - /** Check current migration state */ - trieMigrationStatus: AugmentedRpc< - (at?: BlockHash | string | Uint8Array) => Observable - >; - }; - syncstate: { - /** Returns the json-serialized chainspec running the node, with a sync state. */ - genSyncSpec: AugmentedRpc<(raw: bool | boolean | Uint8Array) => Observable>; - }; - system: { - /** Retrieves the next accountIndex as available on the node */ - accountNextIndex: AugmentedRpc<(accountId: AccountId | string | Uint8Array) => Observable>; - /** Adds the supplied directives to the current log filter */ - addLogFilter: AugmentedRpc<(directives: Text | string) => Observable>; - /** Adds a reserved peer */ - addReservedPeer: AugmentedRpc<(peer: Text | string) => Observable>; - /** Retrieves the chain */ - chain: AugmentedRpc<() => Observable>; - /** Retrieves the chain type */ - chainType: AugmentedRpc<() => Observable>; - /** Dry run an extrinsic at a given block */ - dryRun: AugmentedRpc< - ( - extrinsic: Bytes | string | Uint8Array, - at?: BlockHash | string | Uint8Array - ) => Observable - >; - /** Return health status of the node */ - health: AugmentedRpc<() => Observable>; - /** - * The addresses include a trailing /p2p/ with the local PeerId, and are thus suitable to be passed to - * addReservedPeer or as a bootnode address for example - */ - localListenAddresses: AugmentedRpc<() => Observable>>; - /** Returns the base58-encoded PeerId of the node */ - localPeerId: AugmentedRpc<() => Observable>; - /** Retrieves the node name */ - name: AugmentedRpc<() => Observable>; - /** Returns current state of the network */ - networkState: AugmentedRpc<() => Observable>; - /** Returns the roles the node is running as */ - nodeRoles: AugmentedRpc<() => Observable>>; - /** Returns the currently connected peers */ - peers: AugmentedRpc<() => Observable>>; - /** Get a custom set of properties as a JSON object, defined in the chain spec */ - properties: AugmentedRpc<() => Observable>; - /** Remove a reserved peer */ - removeReservedPeer: AugmentedRpc<(peerId: Text | string) => Observable>; - /** Returns the list of reserved peers */ - reservedPeers: AugmentedRpc<() => Observable>>; - /** Resets the log filter to Substrate defaults */ - resetLogFilter: AugmentedRpc<() => Observable>; - /** Returns the state of the syncing of the node */ - syncState: AugmentedRpc<() => Observable>; - /** Retrieves the version of the node */ - version: AugmentedRpc<() => Observable>; - }; - web3: { - /** Returns current client version. */ - clientVersion: AugmentedRpc<() => Observable>; - /** Returns sha3 of the given data */ - sha3: AugmentedRpc<(data: Bytes | string | Uint8Array) => Observable>; - }; - } // RpcInterface -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-runtime.ts b/typescript-api/src/dancebox/interfaces/augment-api-runtime.ts deleted file mode 100644 index dd2fc6f..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-runtime.ts +++ /dev/null @@ -1,206 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/calls"; - -import type { ApiTypes, AugmentedCall, DecoratedCallBase } from "@polkadot/api-base/types"; -import type { Bytes, Null, Option, Vec, u32 } from "@polkadot/types-codec"; -import type { AnyNumber, ITuple } from "@polkadot/types-codec/types"; -import type { CheckInherentsResult, InherentData } from "@polkadot/types/interfaces/blockbuilder"; -import type { BlockHash } from "@polkadot/types/interfaces/chain"; -import type { AuthorityId } from "@polkadot/types/interfaces/consensus"; -import type { CollationInfo } from "@polkadot/types/interfaces/cumulus"; -import type { Extrinsic } from "@polkadot/types/interfaces/extrinsics"; -import type { OpaqueMetadata } from "@polkadot/types/interfaces/metadata"; -import type { FeeDetails, RuntimeDispatchInfo } from "@polkadot/types/interfaces/payment"; -import type { - AccountId, - Balance, - Block, - Header, - Index, - KeyTypeId, - SlotDuration, - Weight, -} from "@polkadot/types/interfaces/runtime"; -import type { RuntimeVersion } from "@polkadot/types/interfaces/state"; -import type { ApplyExtrinsicResult } from "@polkadot/types/interfaces/system"; -import type { TransactionSource, TransactionValidity } from "@polkadot/types/interfaces/txqueue"; -import type { IExtrinsic, Observable } from "@polkadot/types/types"; - -export type __AugmentedCall = AugmentedCall; -export type __DecoratedCallBase = DecoratedCallBase; - -declare module "@polkadot/api-base/types/calls" { - interface AugmentedCalls { - /** 0xbc9d89904f5b923f/1 */ - accountNonceApi: { - /** The API to query account nonce (aka transaction index) */ - accountNonce: AugmentedCall Observable>; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xdd718d5cc53262d4/1 */ - auraApi: { - /** Return the current set of authorities. */ - authorities: AugmentedCall Observable>>; - /** Returns the slot duration for Aura. */ - slotDuration: AugmentedCall Observable>; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0x40fe3ad401f8959a/6 */ - blockBuilder: { - /** Apply the given extrinsic. */ - applyExtrinsic: AugmentedCall< - ApiType, - (extrinsic: Extrinsic | IExtrinsic | string | Uint8Array) => Observable - >; - /** Check that the inherents are valid. */ - checkInherents: AugmentedCall< - ApiType, - ( - block: Block | { header?: any; extrinsics?: any } | string | Uint8Array, - data: InherentData | { data?: any } | string | Uint8Array - ) => Observable - >; - /** Finish the current block. */ - finalizeBlock: AugmentedCall Observable
>; - /** Generate inherent extrinsics. */ - inherentExtrinsics: AugmentedCall< - ApiType, - (inherent: InherentData | { data?: any } | string | Uint8Array) => Observable> - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xea93e3f16f3d6962/2 */ - collectCollationInfo: { - /** Collect information about a collation. */ - collectCollationInfo: AugmentedCall< - ApiType, - ( - header: - | Header - | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } - | string - | Uint8Array - ) => Observable - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xdf6acb689907609b/4 */ - core: { - /** Execute the given block. */ - executeBlock: AugmentedCall< - ApiType, - (block: Block | { header?: any; extrinsics?: any } | string | Uint8Array) => Observable - >; - /** Initialize a block with the given header. */ - initializeBlock: AugmentedCall< - ApiType, - ( - header: - | Header - | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } - | string - | Uint8Array - ) => Observable - >; - /** Returns the version of the runtime. */ - version: AugmentedCall Observable>; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0x37e397fc7c91f5e4/2 */ - metadata: { - /** Returns the metadata of a runtime */ - metadata: AugmentedCall Observable>; - /** Returns the metadata at a given version. */ - metadataAtVersion: AugmentedCall< - ApiType, - (version: u32 | AnyNumber | Uint8Array) => Observable> - >; - /** Returns the supported metadata versions. */ - metadataVersions: AugmentedCall Observable>>; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xf78b278be53f454c/2 */ - offchainWorkerApi: { - /** Starts the off-chain task for given block header. */ - offchainWorker: AugmentedCall< - ApiType, - ( - header: - | Header - | { parentHash?: any; number?: any; stateRoot?: any; extrinsicsRoot?: any; digest?: any } - | string - | Uint8Array - ) => Observable - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xab3c0572291feb8b/1 */ - sessionKeys: { - /** Decode the given public session keys. */ - decodeSessionKeys: AugmentedCall< - ApiType, - (encoded: Bytes | string | Uint8Array) => Observable>>> - >; - /** Generate a set of session keys with optionally using the given seed. */ - generateSessionKeys: AugmentedCall< - ApiType, - (seed: Option | null | Uint8Array | Bytes | string) => Observable - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0xd2bc9897eed08f15/3 */ - taggedTransactionQueue: { - /** Validate the transaction. */ - validateTransaction: AugmentedCall< - ApiType, - ( - source: TransactionSource | "InBlock" | "Local" | "External" | number | Uint8Array, - tx: Extrinsic | IExtrinsic | string | Uint8Array, - blockHash: BlockHash | string | Uint8Array - ) => Observable - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - /** 0x37c8bb1350a9a2a8/4 */ - transactionPaymentApi: { - /** The transaction fee details */ - queryFeeDetails: AugmentedCall< - ApiType, - ( - uxt: Extrinsic | IExtrinsic | string | Uint8Array, - len: u32 | AnyNumber | Uint8Array - ) => Observable - >; - /** The transaction info */ - queryInfo: AugmentedCall< - ApiType, - ( - uxt: Extrinsic | IExtrinsic | string | Uint8Array, - len: u32 | AnyNumber | Uint8Array - ) => Observable - >; - /** Query the output of the current LengthToFee given some input */ - queryLengthToFee: AugmentedCall Observable>; - /** Query the output of the current WeightToFee given some input */ - queryWeightToFee: AugmentedCall< - ApiType, - (weight: Weight | { refTime?: any; proofSize?: any } | string | Uint8Array) => Observable - >; - /** Generic call */ - [key: string]: DecoratedCallBase; - }; - } // AugmentedCalls -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api-tx.ts b/typescript-api/src/dancebox/interfaces/augment-api-tx.ts deleted file mode 100644 index b1d2854..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api-tx.ts +++ /dev/null @@ -1,2280 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/api-base/types/submittable"; - -import type { - ApiTypes, - AugmentedSubmittable, - SubmittableExtrinsic, - SubmittableExtrinsicFunction, -} from "@polkadot/api-base/types"; -import type { Data } from "@polkadot/types"; -import type { Bytes, Compact, Null, Option, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from "@polkadot/types-codec"; -import type { AnyNumber, IMethod, ITuple } from "@polkadot/types-codec/types"; -import type { AccountId32, Call, H256, MultiAddress, Perbill } from "@polkadot/types/interfaces/runtime"; -import type { - CumulusPrimitivesCoreAggregateMessageOrigin, - CumulusPrimitivesParachainInherentParachainInherentData, - DanceboxRuntimeOriginCaller, - DanceboxRuntimeProxyType, - DanceboxRuntimeSessionKeys, - DanceboxRuntimeStreamPaymentAssetId, - DanceboxRuntimeXcmConfigRelayChain, - PalletIdentityJudgement, - PalletIdentityLegacyIdentityInfo, - PalletMultisigTimepoint, - PalletPooledStakingAllTargetPool, - PalletPooledStakingPendingOperationQuery, - PalletPooledStakingSharesOrStake, - PalletPooledStakingTargetPool, - PalletStreamPaymentChangeKind, - PalletStreamPaymentDepositChange, - PalletStreamPaymentStreamConfig, - PalletXcmCoreBuyerBuyCoreCollatorProof, - PalletXcmCoreBuyerRelayXcmWeightConfigInner, - SpRuntimeMultiSignature, - SpWeightsWeightV2Weight, - StagingXcmV3MultiLocation, - TpAuthorNotingInherentOwnParachainInherentData, - TpContainerChainGenesisDataContainerChainGenesisData, - TpTraitsSlotFrequency, - XcmV3Response, - XcmV3WeightLimit, - XcmVersionedMultiAssets, - XcmVersionedMultiLocation, - XcmVersionedXcm, -} from "@polkadot/types/lookup"; - -export type __AugmentedSubmittable = AugmentedSubmittable<() => unknown>; -export type __SubmittableExtrinsic = SubmittableExtrinsic; -export type __SubmittableExtrinsicFunction = SubmittableExtrinsicFunction; - -declare module "@polkadot/api-base/types/submittable" { - interface AugmentedSubmittables { - assetRate: { - /** See [`Pallet::create`]. */ - create: AugmentedSubmittable< - ( - assetKind: u16 | AnyNumber | Uint8Array, - rate: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, u128] - >; - /** See [`Pallet::remove`]. */ - remove: AugmentedSubmittable< - (assetKind: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::update`]. */ - update: AugmentedSubmittable< - ( - assetKind: u16 | AnyNumber | Uint8Array, - rate: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, u128] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - authorInherent: { - /** See [`Pallet::kick_off_authorship_validation`]. */ - kickOffAuthorshipValidation: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - authorityAssignment: { - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - authorNoting: { - /** See [`Pallet::kill_author_data`]. */ - killAuthorData: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_author`]. */ - setAuthor: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - blockNumber: u32 | AnyNumber | Uint8Array, - author: AccountId32 | string | Uint8Array, - latestSlotNumber: u64 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u32, u32, AccountId32, u64] - >; - /** See [`Pallet::set_latest_author_data`]. */ - setLatestAuthorData: AugmentedSubmittable< - ( - data: - | TpAuthorNotingInherentOwnParachainInherentData - | { relayStorageProof?: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [TpAuthorNotingInherentOwnParachainInherentData] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - balances: { - /** See [`Pallet::force_set_balance`]. */ - forceSetBalance: AugmentedSubmittable< - ( - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - newFree: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Compact] - >; - /** See [`Pallet::force_transfer`]. */ - forceTransfer: AugmentedSubmittable< - ( - source: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - dest: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - value: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, MultiAddress, Compact] - >; - /** See [`Pallet::force_unreserve`]. */ - forceUnreserve: AugmentedSubmittable< - ( - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, u128] - >; - /** See [`Pallet::transfer_all`]. */ - transferAll: AugmentedSubmittable< - ( - dest: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - keepAlive: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, bool] - >; - /** See [`Pallet::transfer_allow_death`]. */ - transferAllowDeath: AugmentedSubmittable< - ( - dest: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - value: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Compact] - >; - /** See [`Pallet::transfer_keep_alive`]. */ - transferKeepAlive: AugmentedSubmittable< - ( - dest: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - value: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Compact] - >; - /** See [`Pallet::upgrade_accounts`]. */ - upgradeAccounts: AugmentedSubmittable< - (who: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - collatorAssignment: { - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - configuration: { - /** See [`Pallet::set_bypass_consistency_check`]. */ - setBypassConsistencyCheck: AugmentedSubmittable< - (updated: bool | boolean | Uint8Array) => SubmittableExtrinsic, - [bool] - >; - /** See [`Pallet::set_collators_per_container`]. */ - setCollatorsPerContainer: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_collators_per_parathread`]. */ - setCollatorsPerParathread: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_full_rotation_period`]. */ - setFullRotationPeriod: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_max_collators`]. */ - setMaxCollators: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_max_orchestrator_collators`]. */ - setMaxOrchestratorCollators: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_min_orchestrator_collators`]. */ - setMinOrchestratorCollators: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_parathreads_per_collator`]. */ - setParathreadsPerCollator: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::set_target_container_chain_fullness`]. */ - setTargetContainerChainFullness: AugmentedSubmittable< - (updated: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Perbill] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - dataPreservers: { - /** See [`Pallet::set_boot_nodes`]. */ - setBootNodes: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - bootNodes: Vec | (Bytes | string | Uint8Array)[] - ) => SubmittableExtrinsic, - [u32, Vec] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - dmpQueue: { - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - foreignAssets: { - /** See [`Pallet::approve_transfer`]. */ - approveTransfer: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, Compact] - >; - /** See [`Pallet::block`]. */ - block: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::burn`]. */ - burn: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, Compact] - >; - /** See [`Pallet::cancel_approval`]. */ - cancelApproval: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::clear_metadata`]. */ - clearMetadata: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::create`]. */ - create: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - admin: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - minBalance: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, u128] - >; - /** See [`Pallet::destroy_accounts`]. */ - destroyAccounts: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::destroy_approvals`]. */ - destroyApprovals: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::finish_destroy`]. */ - finishDestroy: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::force_asset_status`]. */ - forceAssetStatus: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - owner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - issuer: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - admin: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - freezer: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - minBalance: Compact | AnyNumber | Uint8Array, - isSufficient: bool | boolean | Uint8Array, - isFrozen: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, MultiAddress, MultiAddress, MultiAddress, Compact, bool, bool] - >; - /** See [`Pallet::force_cancel_approval`]. */ - forceCancelApproval: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - owner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, MultiAddress] - >; - /** See [`Pallet::force_clear_metadata`]. */ - forceClearMetadata: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::force_create`]. */ - forceCreate: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - owner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - isSufficient: bool | boolean | Uint8Array, - minBalance: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, bool, Compact] - >; - /** See [`Pallet::force_set_metadata`]. */ - forceSetMetadata: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - name: Bytes | string | Uint8Array, - symbol: Bytes | string | Uint8Array, - decimals: u8 | AnyNumber | Uint8Array, - isFrozen: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [u16, Bytes, Bytes, u8, bool] - >; - /** See [`Pallet::force_transfer`]. */ - forceTransfer: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - source: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - dest: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, MultiAddress, Compact] - >; - /** See [`Pallet::freeze`]. */ - freeze: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::freeze_asset`]. */ - freezeAsset: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::mint`]. */ - mint: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - beneficiary: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, Compact] - >; - /** See [`Pallet::refund`]. */ - refund: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - allowBurn: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [u16, bool] - >; - /** See [`Pallet::refund_other`]. */ - refundOther: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::set_metadata`]. */ - setMetadata: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - name: Bytes | string | Uint8Array, - symbol: Bytes | string | Uint8Array, - decimals: u8 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, Bytes, Bytes, u8] - >; - /** See [`Pallet::set_min_balance`]. */ - setMinBalance: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - minBalance: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, u128] - >; - /** See [`Pallet::set_team`]. */ - setTeam: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - issuer: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - admin: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - freezer: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, MultiAddress, MultiAddress] - >; - /** See [`Pallet::start_destroy`]. */ - startDestroy: AugmentedSubmittable< - (id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::thaw`]. */ - thaw: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::thaw_asset`]. */ - thawAsset: AugmentedSubmittable<(id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u16]>; - /** See [`Pallet::touch`]. */ - touch: AugmentedSubmittable<(id: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u16]>; - /** See [`Pallet::touch_other`]. */ - touchOther: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** See [`Pallet::transfer`]. */ - transfer: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - target: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, Compact] - >; - /** See [`Pallet::transfer_approved`]. */ - transferApproved: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - owner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - destination: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, MultiAddress, Compact] - >; - /** See [`Pallet::transfer_keep_alive`]. */ - transferKeepAlive: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - target: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - amount: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress, Compact] - >; - /** See [`Pallet::transfer_ownership`]. */ - transferOwnership: AugmentedSubmittable< - ( - id: u16 | AnyNumber | Uint8Array, - owner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u16, MultiAddress] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - foreignAssetsCreator: { - /** See [`Pallet::change_existing_asset_type`]. */ - changeExistingAssetType: AugmentedSubmittable< - ( - assetId: u16 | AnyNumber | Uint8Array, - newForeignAsset: StagingXcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [u16, StagingXcmV3MultiLocation] - >; - /** See [`Pallet::create_foreign_asset`]. */ - createForeignAsset: AugmentedSubmittable< - ( - foreignAsset: StagingXcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, - assetId: u16 | AnyNumber | Uint8Array, - admin: AccountId32 | string | Uint8Array, - isSufficient: bool | boolean | Uint8Array, - minBalance: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [StagingXcmV3MultiLocation, u16, AccountId32, bool, u128] - >; - /** See [`Pallet::destroy_foreign_asset`]. */ - destroyForeignAsset: AugmentedSubmittable< - (assetId: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** See [`Pallet::remove_existing_asset_type`]. */ - removeExistingAssetType: AugmentedSubmittable< - (assetId: u16 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u16] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - identity: { - /** See [`Pallet::accept_username`]. */ - acceptUsername: AugmentedSubmittable< - (username: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::add_registrar`]. */ - addRegistrar: AugmentedSubmittable< - ( - account: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress] - >; - /** See [`Pallet::add_sub`]. */ - addSub: AugmentedSubmittable< - ( - sub: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - data: - | Data - | { None: any } - | { Raw: any } - | { BlakeTwo256: any } - | { Sha256: any } - | { Keccak256: any } - | { ShaThree256: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Data] - >; - /** See [`Pallet::add_username_authority`]. */ - addUsernameAuthority: AugmentedSubmittable< - ( - authority: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - suffix: Bytes | string | Uint8Array, - allocation: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Bytes, u32] - >; - /** See [`Pallet::cancel_request`]. */ - cancelRequest: AugmentedSubmittable< - (regIndex: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::clear_identity`]. */ - clearIdentity: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::kill_identity`]. */ - killIdentity: AugmentedSubmittable< - ( - target: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress] - >; - /** See [`Pallet::provide_judgement`]. */ - provideJudgement: AugmentedSubmittable< - ( - regIndex: Compact | AnyNumber | Uint8Array, - target: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - judgement: - | PalletIdentityJudgement - | { Unknown: any } - | { FeePaid: any } - | { Reasonable: any } - | { KnownGood: any } - | { OutOfDate: any } - | { LowQuality: any } - | { Erroneous: any } - | string - | Uint8Array, - identity: H256 | string | Uint8Array - ) => SubmittableExtrinsic, - [Compact, MultiAddress, PalletIdentityJudgement, H256] - >; - /** See [`Pallet::quit_sub`]. */ - quitSub: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::remove_dangling_username`]. */ - removeDanglingUsername: AugmentedSubmittable< - (username: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::remove_expired_approval`]. */ - removeExpiredApproval: AugmentedSubmittable< - (username: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::remove_sub`]. */ - removeSub: AugmentedSubmittable< - ( - sub: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress] - >; - /** See [`Pallet::remove_username_authority`]. */ - removeUsernameAuthority: AugmentedSubmittable< - ( - authority: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress] - >; - /** See [`Pallet::rename_sub`]. */ - renameSub: AugmentedSubmittable< - ( - sub: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - data: - | Data - | { None: any } - | { Raw: any } - | { BlakeTwo256: any } - | { Sha256: any } - | { Keccak256: any } - | { ShaThree256: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Data] - >; - /** See [`Pallet::request_judgement`]. */ - requestJudgement: AugmentedSubmittable< - ( - regIndex: Compact | AnyNumber | Uint8Array, - maxFee: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [Compact, Compact] - >; - /** See [`Pallet::set_account_id`]. */ - setAccountId: AugmentedSubmittable< - ( - index: Compact | AnyNumber | Uint8Array, - updated: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [Compact, MultiAddress] - >; - /** See [`Pallet::set_fee`]. */ - setFee: AugmentedSubmittable< - ( - index: Compact | AnyNumber | Uint8Array, - fee: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [Compact, Compact] - >; - /** See [`Pallet::set_fields`]. */ - setFields: AugmentedSubmittable< - ( - index: Compact | AnyNumber | Uint8Array, - fields: u64 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [Compact, u64] - >; - /** See [`Pallet::set_identity`]. */ - setIdentity: AugmentedSubmittable< - ( - info: - | PalletIdentityLegacyIdentityInfo - | { - additional?: any; - display?: any; - legal?: any; - web?: any; - riot?: any; - email?: any; - pgpFingerprint?: any; - image?: any; - twitter?: any; - } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [PalletIdentityLegacyIdentityInfo] - >; - /** See [`Pallet::set_primary_username`]. */ - setPrimaryUsername: AugmentedSubmittable< - (username: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::set_subs`]. */ - setSubs: AugmentedSubmittable< - ( - subs: - | Vec> - | [ - AccountId32 | string | Uint8Array, - ( - | Data - | { None: any } - | { Raw: any } - | { BlakeTwo256: any } - | { Sha256: any } - | { Keccak256: any } - | { ShaThree256: any } - | string - | Uint8Array - ) - ][] - ) => SubmittableExtrinsic, - [Vec>] - >; - /** See [`Pallet::set_username_for`]. */ - setUsernameFor: AugmentedSubmittable< - ( - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - username: Bytes | string | Uint8Array, - signature: - | Option - | null - | Uint8Array - | SpRuntimeMultiSignature - | { Ed25519: any } - | { Sr25519: any } - | { Ecdsa: any } - | string - ) => SubmittableExtrinsic, - [MultiAddress, Bytes, Option] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - invulnerables: { - /** See [`Pallet::add_invulnerable`]. */ - addInvulnerable: AugmentedSubmittable< - (who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, - [AccountId32] - >; - /** See [`Pallet::remove_invulnerable`]. */ - removeInvulnerable: AugmentedSubmittable< - (who: AccountId32 | string | Uint8Array) => SubmittableExtrinsic, - [AccountId32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - maintenanceMode: { - /** See [`Pallet::enter_maintenance_mode`]. */ - enterMaintenanceMode: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::resume_normal_operation`]. */ - resumeNormalOperation: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - messageQueue: { - /** See [`Pallet::execute_overweight`]. */ - executeOverweight: AugmentedSubmittable< - ( - messageOrigin: - | CumulusPrimitivesCoreAggregateMessageOrigin - | { Here: any } - | { Parent: any } - | { Sibling: any } - | string - | Uint8Array, - page: u32 | AnyNumber | Uint8Array, - index: u32 | AnyNumber | Uint8Array, - weightLimit: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [CumulusPrimitivesCoreAggregateMessageOrigin, u32, u32, SpWeightsWeightV2Weight] - >; - /** See [`Pallet::reap_page`]. */ - reapPage: AugmentedSubmittable< - ( - messageOrigin: - | CumulusPrimitivesCoreAggregateMessageOrigin - | { Here: any } - | { Parent: any } - | { Sibling: any } - | string - | Uint8Array, - pageIndex: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [CumulusPrimitivesCoreAggregateMessageOrigin, u32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - multisig: { - /** See [`Pallet::approve_as_multi`]. */ - approveAsMulti: AugmentedSubmittable< - ( - threshold: u16 | AnyNumber | Uint8Array, - otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], - maybeTimepoint: - | Option - | null - | Uint8Array - | PalletMultisigTimepoint - | { height?: any; index?: any } - | string, - callHash: U8aFixed | string | Uint8Array, - maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [u16, Vec, Option, U8aFixed, SpWeightsWeightV2Weight] - >; - /** See [`Pallet::as_multi`]. */ - asMulti: AugmentedSubmittable< - ( - threshold: u16 | AnyNumber | Uint8Array, - otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], - maybeTimepoint: - | Option - | null - | Uint8Array - | PalletMultisigTimepoint - | { height?: any; index?: any } - | string, - call: Call | IMethod | string | Uint8Array, - maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [u16, Vec, Option, Call, SpWeightsWeightV2Weight] - >; - /** See [`Pallet::as_multi_threshold_1`]. */ - asMultiThreshold1: AugmentedSubmittable< - ( - otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [Vec, Call] - >; - /** See [`Pallet::cancel_as_multi`]. */ - cancelAsMulti: AugmentedSubmittable< - ( - threshold: u16 | AnyNumber | Uint8Array, - otherSignatories: Vec | (AccountId32 | string | Uint8Array)[], - timepoint: PalletMultisigTimepoint | { height?: any; index?: any } | string | Uint8Array, - callHash: U8aFixed | string | Uint8Array - ) => SubmittableExtrinsic, - [u16, Vec, PalletMultisigTimepoint, U8aFixed] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - parachainInfo: { - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - parachainSystem: { - /** See [`Pallet::authorize_upgrade`]. */ - authorizeUpgrade: AugmentedSubmittable< - ( - codeHash: H256 | string | Uint8Array, - checkVersion: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [H256, bool] - >; - /** See [`Pallet::enact_authorized_upgrade`]. */ - enactAuthorizedUpgrade: AugmentedSubmittable< - (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::set_validation_data`]. */ - setValidationData: AugmentedSubmittable< - ( - data: - | CumulusPrimitivesParachainInherentParachainInherentData - | { - validationData?: any; - relayChainState?: any; - downwardMessages?: any; - horizontalMessages?: any; - } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [CumulusPrimitivesParachainInherentParachainInherentData] - >; - /** See [`Pallet::sudo_send_upward_message`]. */ - sudoSendUpwardMessage: AugmentedSubmittable< - (message: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - polkadotXcm: { - /** See [`Pallet::execute`]. */ - execute: AugmentedSubmittable< - ( - message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array, - maxWeight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedXcm, SpWeightsWeightV2Weight] - >; - /** See [`Pallet::force_default_xcm_version`]. */ - forceDefaultXcmVersion: AugmentedSubmittable< - (maybeXcmVersion: Option | null | Uint8Array | u32 | AnyNumber) => SubmittableExtrinsic, - [Option] - >; - /** See [`Pallet::force_subscribe_version_notify`]. */ - forceSubscribeVersionNotify: AugmentedSubmittable< - ( - location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation] - >; - /** See [`Pallet::force_suspension`]. */ - forceSuspension: AugmentedSubmittable< - (suspended: bool | boolean | Uint8Array) => SubmittableExtrinsic, - [bool] - >; - /** See [`Pallet::force_unsubscribe_version_notify`]. */ - forceUnsubscribeVersionNotify: AugmentedSubmittable< - ( - location: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation] - >; - /** See [`Pallet::force_xcm_version`]. */ - forceXcmVersion: AugmentedSubmittable< - ( - location: StagingXcmV3MultiLocation | { parents?: any; interior?: any } | string | Uint8Array, - version: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [StagingXcmV3MultiLocation, u32] - >; - /** See [`Pallet::limited_reserve_transfer_assets`]. */ - limitedReserveTransferAssets: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, - feeAssetItem: u32 | AnyNumber | Uint8Array, - weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit] - >; - /** See [`Pallet::limited_teleport_assets`]. */ - limitedTeleportAssets: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, - feeAssetItem: u32 | AnyNumber | Uint8Array, - weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit] - >; - /** See [`Pallet::reserve_transfer_assets`]. */ - reserveTransferAssets: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, - feeAssetItem: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32] - >; - /** See [`Pallet::send`]. */ - send: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - message: XcmVersionedXcm | { V2: any } | { V3: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedXcm] - >; - /** See [`Pallet::teleport_assets`]. */ - teleportAssets: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, - feeAssetItem: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32] - >; - /** See [`Pallet::transfer_assets`]. */ - transferAssets: AugmentedSubmittable< - ( - dest: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - beneficiary: XcmVersionedMultiLocation | { V2: any } | { V3: any } | string | Uint8Array, - assets: XcmVersionedMultiAssets | { V2: any } | { V3: any } | string | Uint8Array, - feeAssetItem: u32 | AnyNumber | Uint8Array, - weightLimit: XcmV3WeightLimit | { Unlimited: any } | { Limited: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [XcmVersionedMultiLocation, XcmVersionedMultiLocation, XcmVersionedMultiAssets, u32, XcmV3WeightLimit] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - pooledStaking: { - /** See [`Pallet::claim_manual_rewards`]. */ - claimManualRewards: AugmentedSubmittable< - ( - pairs: - | Vec> - | [AccountId32 | string | Uint8Array, AccountId32 | string | Uint8Array][] - ) => SubmittableExtrinsic, - [Vec>] - >; - /** See [`Pallet::execute_pending_operations`]. */ - executePendingOperations: AugmentedSubmittable< - ( - operations: - | Vec - | ( - | PalletPooledStakingPendingOperationQuery - | { delegator?: any; operation?: any } - | string - | Uint8Array - )[] - ) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::rebalance_hold`]. */ - rebalanceHold: AugmentedSubmittable< - ( - candidate: AccountId32 | string | Uint8Array, - delegator: AccountId32 | string | Uint8Array, - pool: - | PalletPooledStakingAllTargetPool - | "Joining" - | "AutoCompounding" - | "ManualRewards" - | "Leaving" - | number - | Uint8Array - ) => SubmittableExtrinsic, - [AccountId32, AccountId32, PalletPooledStakingAllTargetPool] - >; - /** See [`Pallet::request_delegate`]. */ - requestDelegate: AugmentedSubmittable< - ( - candidate: AccountId32 | string | Uint8Array, - pool: PalletPooledStakingTargetPool | "AutoCompounding" | "ManualRewards" | number | Uint8Array, - stake: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [AccountId32, PalletPooledStakingTargetPool, u128] - >; - /** See [`Pallet::request_undelegate`]. */ - requestUndelegate: AugmentedSubmittable< - ( - candidate: AccountId32 | string | Uint8Array, - pool: PalletPooledStakingTargetPool | "AutoCompounding" | "ManualRewards" | number | Uint8Array, - amount: PalletPooledStakingSharesOrStake | { Shares: any } | { Stake: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [AccountId32, PalletPooledStakingTargetPool, PalletPooledStakingSharesOrStake] - >; - /** See [`Pallet::swap_pool`]. */ - swapPool: AugmentedSubmittable< - ( - candidate: AccountId32 | string | Uint8Array, - sourcePool: - | PalletPooledStakingTargetPool - | "AutoCompounding" - | "ManualRewards" - | number - | Uint8Array, - amount: PalletPooledStakingSharesOrStake | { Shares: any } | { Stake: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [AccountId32, PalletPooledStakingTargetPool, PalletPooledStakingSharesOrStake] - >; - /** See [`Pallet::update_candidate_position`]. */ - updateCandidatePosition: AugmentedSubmittable< - (candidates: Vec | (AccountId32 | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - proxy: { - /** See [`Pallet::add_proxy`]. */ - addProxy: AugmentedSubmittable< - ( - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - proxyType: - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number - | Uint8Array, - delay: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, DanceboxRuntimeProxyType, u32] - >; - /** See [`Pallet::announce`]. */ - announce: AugmentedSubmittable< - ( - real: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - callHash: H256 | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, H256] - >; - /** See [`Pallet::create_pure`]. */ - createPure: AugmentedSubmittable< - ( - proxyType: - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number - | Uint8Array, - delay: u32 | AnyNumber | Uint8Array, - index: u16 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [DanceboxRuntimeProxyType, u32, u16] - >; - /** See [`Pallet::kill_pure`]. */ - killPure: AugmentedSubmittable< - ( - spawner: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - proxyType: - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number - | Uint8Array, - index: u16 | AnyNumber | Uint8Array, - height: Compact | AnyNumber | Uint8Array, - extIndex: Compact | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, DanceboxRuntimeProxyType, u16, Compact, Compact] - >; - /** See [`Pallet::proxy`]. */ - proxy: AugmentedSubmittable< - ( - real: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - forceProxyType: - | Option - | null - | Uint8Array - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number, - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Option, Call] - >; - /** See [`Pallet::proxy_announced`]. */ - proxyAnnounced: AugmentedSubmittable< - ( - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - real: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - forceProxyType: - | Option - | null - | Uint8Array - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number, - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, MultiAddress, Option, Call] - >; - /** See [`Pallet::reject_announcement`]. */ - rejectAnnouncement: AugmentedSubmittable< - ( - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - callHash: H256 | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, H256] - >; - /** See [`Pallet::remove_announcement`]. */ - removeAnnouncement: AugmentedSubmittable< - ( - real: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - callHash: H256 | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, H256] - >; - /** See [`Pallet::remove_proxies`]. */ - removeProxies: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::remove_proxy`]. */ - removeProxy: AugmentedSubmittable< - ( - delegate: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - proxyType: - | DanceboxRuntimeProxyType - | "Any" - | "NonTransfer" - | "Governance" - | "Staking" - | "CancelProxy" - | "Balances" - | "Registrar" - | "SudoRegistrar" - | "SessionKeyManagement" - | number - | Uint8Array, - delay: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, DanceboxRuntimeProxyType, u32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - registrar: { - /** See [`Pallet::deregister`]. */ - deregister: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::mark_valid_for_collating`]. */ - markValidForCollating: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::pause_container_chain`]. */ - pauseContainerChain: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::register`]. */ - register: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - genesisData: - | TpContainerChainGenesisDataContainerChainGenesisData - | { storage?: any; name?: any; id?: any; forkId?: any; extensions?: any; properties?: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u32, TpContainerChainGenesisDataContainerChainGenesisData] - >; - /** See [`Pallet::register_parathread`]. */ - registerParathread: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - slotFrequency: TpTraitsSlotFrequency | { min?: any; max?: any } | string | Uint8Array, - genesisData: - | TpContainerChainGenesisDataContainerChainGenesisData - | { storage?: any; name?: any; id?: any; forkId?: any; extensions?: any; properties?: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u32, TpTraitsSlotFrequency, TpContainerChainGenesisDataContainerChainGenesisData] - >; - /** See [`Pallet::set_parathread_params`]. */ - setParathreadParams: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - slotFrequency: TpTraitsSlotFrequency | { min?: any; max?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [u32, TpTraitsSlotFrequency] - >; - /** See [`Pallet::unpause_container_chain`]. */ - unpauseContainerChain: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - rootTesting: { - /** See `Pallet::fill_block`. */ - fillBlock: AugmentedSubmittable< - (ratio: Perbill | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Perbill] - >; - /** See `Pallet::trigger_defensive`. */ - triggerDefensive: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - servicesPayment: { - /** See [`Pallet::purchase_credits`]. */ - purchaseCredits: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - credit: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u32, u128] - >; - /** See [`Pallet::set_block_production_credits`]. */ - setBlockProductionCredits: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - freeBlockCredits: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u32, u32] - >; - /** See [`Pallet::set_collator_assignment_credits`]. */ - setCollatorAssignmentCredits: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - freeCollatorAssignmentCredits: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [u32, u32] - >; - /** See [`Pallet::set_given_free_credits`]. */ - setGivenFreeCredits: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - givenFreeCredits: bool | boolean | Uint8Array - ) => SubmittableExtrinsic, - [u32, bool] - >; - /** See [`Pallet::set_max_core_price`]. */ - setMaxCorePrice: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - maxCorePrice: Option | null | Uint8Array | u128 | AnyNumber - ) => SubmittableExtrinsic, - [u32, Option] - >; - /** See [`Pallet::set_max_tip`]. */ - setMaxTip: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - maxTip: Option | null | Uint8Array | u128 | AnyNumber - ) => SubmittableExtrinsic, - [u32, Option] - >; - /** See [`Pallet::set_refund_address`]. */ - setRefundAddress: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - refundAddress: Option | null | Uint8Array | AccountId32 | string - ) => SubmittableExtrinsic, - [u32, Option] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - session: { - /** See [`Pallet::purge_keys`]. */ - purgeKeys: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::set_keys`]. */ - setKeys: AugmentedSubmittable< - ( - keys: DanceboxRuntimeSessionKeys | { nimbus?: any } | string | Uint8Array, - proof: Bytes | string | Uint8Array - ) => SubmittableExtrinsic, - [DanceboxRuntimeSessionKeys, Bytes] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - streamPayment: { - /** See [`Pallet::accept_requested_change`]. */ - acceptRequestedChange: AugmentedSubmittable< - ( - streamId: u64 | AnyNumber | Uint8Array, - requestNonce: u32 | AnyNumber | Uint8Array, - depositChange: - | Option - | null - | Uint8Array - | PalletStreamPaymentDepositChange - | { Increase: any } - | { Decrease: any } - | { Absolute: any } - | string - ) => SubmittableExtrinsic, - [u64, u32, Option] - >; - /** See [`Pallet::cancel_change_request`]. */ - cancelChangeRequest: AugmentedSubmittable< - (streamId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u64] - >; - /** See [`Pallet::close_stream`]. */ - closeStream: AugmentedSubmittable< - (streamId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u64] - >; - /** See [`Pallet::immediately_change_deposit`]. */ - immediatelyChangeDeposit: AugmentedSubmittable< - ( - streamId: u64 | AnyNumber | Uint8Array, - assetId: DanceboxRuntimeStreamPaymentAssetId | "Native" | number | Uint8Array, - change: - | PalletStreamPaymentDepositChange - | { Increase: any } - | { Decrease: any } - | { Absolute: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u64, DanceboxRuntimeStreamPaymentAssetId, PalletStreamPaymentDepositChange] - >; - /** See [`Pallet::open_stream`]. */ - openStream: AugmentedSubmittable< - ( - target: AccountId32 | string | Uint8Array, - config: - | PalletStreamPaymentStreamConfig - | { timeUnit?: any; assetId?: any; rate?: any } - | string - | Uint8Array, - initialDeposit: u128 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [AccountId32, PalletStreamPaymentStreamConfig, u128] - >; - /** See [`Pallet::perform_payment`]. */ - performPayment: AugmentedSubmittable< - (streamId: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u64] - >; - /** See [`Pallet::request_change`]. */ - requestChange: AugmentedSubmittable< - ( - streamId: u64 | AnyNumber | Uint8Array, - kind: - | PalletStreamPaymentChangeKind - | { Suggestion: any } - | { Mandatory: any } - | string - | Uint8Array, - newConfig: - | PalletStreamPaymentStreamConfig - | { timeUnit?: any; assetId?: any; rate?: any } - | string - | Uint8Array, - depositChange: - | Option - | null - | Uint8Array - | PalletStreamPaymentDepositChange - | { Increase: any } - | { Decrease: any } - | { Absolute: any } - | string - ) => SubmittableExtrinsic, - [ - u64, - PalletStreamPaymentChangeKind, - PalletStreamPaymentStreamConfig, - Option - ] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - sudo: { - /** See [`Pallet::remove_key`]. */ - removeKey: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::set_key`]. */ - setKey: AugmentedSubmittable< - ( - updated: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress] - >; - /** See [`Pallet::sudo`]. */ - sudo: AugmentedSubmittable< - (call: Call | IMethod | string | Uint8Array) => SubmittableExtrinsic, - [Call] - >; - /** See [`Pallet::sudo_as`]. */ - sudoAs: AugmentedSubmittable< - ( - who: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array, - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [MultiAddress, Call] - >; - /** See [`Pallet::sudo_unchecked_weight`]. */ - sudoUncheckedWeight: AugmentedSubmittable< - ( - call: Call | IMethod | string | Uint8Array, - weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [Call, SpWeightsWeightV2Weight] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - system: { - /** See [`Pallet::apply_authorized_upgrade`]. */ - applyAuthorizedUpgrade: AugmentedSubmittable< - (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::authorize_upgrade`]. */ - authorizeUpgrade: AugmentedSubmittable< - (codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, - [H256] - >; - /** See [`Pallet::authorize_upgrade_without_checks`]. */ - authorizeUpgradeWithoutChecks: AugmentedSubmittable< - (codeHash: H256 | string | Uint8Array) => SubmittableExtrinsic, - [H256] - >; - /** See [`Pallet::kill_prefix`]. */ - killPrefix: AugmentedSubmittable< - ( - prefix: Bytes | string | Uint8Array, - subkeys: u32 | AnyNumber | Uint8Array - ) => SubmittableExtrinsic, - [Bytes, u32] - >; - /** See [`Pallet::kill_storage`]. */ - killStorage: AugmentedSubmittable< - (keys: Vec | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::remark`]. */ - remark: AugmentedSubmittable< - (remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::remark_with_event`]. */ - remarkWithEvent: AugmentedSubmittable< - (remark: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::set_code`]. */ - setCode: AugmentedSubmittable< - (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::set_code_without_checks`]. */ - setCodeWithoutChecks: AugmentedSubmittable< - (code: Bytes | string | Uint8Array) => SubmittableExtrinsic, - [Bytes] - >; - /** See [`Pallet::set_heap_pages`]. */ - setHeapPages: AugmentedSubmittable< - (pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u64] - >; - /** See [`Pallet::set_storage`]. */ - setStorage: AugmentedSubmittable< - ( - items: Vec> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array][] - ) => SubmittableExtrinsic, - [Vec>] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - timestamp: { - /** See [`Pallet::set`]. */ - set: AugmentedSubmittable< - (now: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Compact] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - treasury: { - /** See [`Pallet::approve_proposal`]. */ - approveProposal: AugmentedSubmittable< - (proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Compact] - >; - /** See [`Pallet::check_status`]. */ - checkStatus: AugmentedSubmittable< - (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::payout`]. */ - payout: AugmentedSubmittable<(index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, [u32]>; - /** See [`Pallet::propose_spend`]. */ - proposeSpend: AugmentedSubmittable< - ( - value: Compact | AnyNumber | Uint8Array, - beneficiary: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [Compact, MultiAddress] - >; - /** See [`Pallet::reject_proposal`]. */ - rejectProposal: AugmentedSubmittable< - (proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Compact] - >; - /** See [`Pallet::remove_approval`]. */ - removeApproval: AugmentedSubmittable< - (proposalId: Compact | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [Compact] - >; - /** See [`Pallet::spend`]. */ - spend: AugmentedSubmittable< - ( - assetKind: Null | null, - amount: Compact | AnyNumber | Uint8Array, - beneficiary: AccountId32 | string | Uint8Array, - validFrom: Option | null | Uint8Array | u32 | AnyNumber - ) => SubmittableExtrinsic, - [Null, Compact, AccountId32, Option] - >; - /** See [`Pallet::spend_local`]. */ - spendLocal: AugmentedSubmittable< - ( - amount: Compact | AnyNumber | Uint8Array, - beneficiary: - | MultiAddress - | { Id: any } - | { Index: any } - | { Raw: any } - | { Address32: any } - | { Address20: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [Compact, MultiAddress] - >; - /** See [`Pallet::void_spend`]. */ - voidSpend: AugmentedSubmittable< - (index: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - txPause: { - /** See [`Pallet::pause`]. */ - pause: AugmentedSubmittable< - ( - fullName: ITuple<[Bytes, Bytes]> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] - ) => SubmittableExtrinsic, - [ITuple<[Bytes, Bytes]>] - >; - /** See [`Pallet::unpause`]. */ - unpause: AugmentedSubmittable< - ( - ident: ITuple<[Bytes, Bytes]> | [Bytes | string | Uint8Array, Bytes | string | Uint8Array] - ) => SubmittableExtrinsic, - [ITuple<[Bytes, Bytes]>] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - utility: { - /** See [`Pallet::as_derivative`]. */ - asDerivative: AugmentedSubmittable< - ( - index: u16 | AnyNumber | Uint8Array, - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [u16, Call] - >; - /** See [`Pallet::batch`]. */ - batch: AugmentedSubmittable< - (calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::batch_all`]. */ - batchAll: AugmentedSubmittable< - (calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::dispatch_as`]. */ - dispatchAs: AugmentedSubmittable< - ( - asOrigin: - | DanceboxRuntimeOriginCaller - | { system: any } - | { Void: any } - | { CumulusXcm: any } - | { PolkadotXcm: any } - | string - | Uint8Array, - call: Call | IMethod | string | Uint8Array - ) => SubmittableExtrinsic, - [DanceboxRuntimeOriginCaller, Call] - >; - /** See [`Pallet::force_batch`]. */ - forceBatch: AugmentedSubmittable< - (calls: Vec | (Call | IMethod | string | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::with_weight`]. */ - withWeight: AugmentedSubmittable< - ( - call: Call | IMethod | string | Uint8Array, - weight: SpWeightsWeightV2Weight | { refTime?: any; proofSize?: any } | string | Uint8Array - ) => SubmittableExtrinsic, - [Call, SpWeightsWeightV2Weight] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - xcmCoreBuyer: { - /** See [`Pallet::buy_core`]. */ - buyCore: AugmentedSubmittable< - ( - paraId: u32 | AnyNumber | Uint8Array, - proof: - | PalletXcmCoreBuyerBuyCoreCollatorProof - | { account?: any; signature?: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u32, PalletXcmCoreBuyerBuyCoreCollatorProof] - >; - /** See [`Pallet::clean_up_expired_in_flight_orders`]. */ - cleanUpExpiredInFlightOrders: AugmentedSubmittable< - (expiredInFlightOrders: Vec | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::clean_up_expired_pending_blocks`]. */ - cleanUpExpiredPendingBlocks: AugmentedSubmittable< - ( - expiredPendingBlocksParaId: Vec | (u32 | AnyNumber | Uint8Array)[] - ) => SubmittableExtrinsic, - [Vec] - >; - /** See [`Pallet::force_buy_core`]. */ - forceBuyCore: AugmentedSubmittable< - (paraId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::query_response`]. */ - queryResponse: AugmentedSubmittable< - ( - queryId: u64 | AnyNumber | Uint8Array, - response: - | XcmV3Response - | { Null: any } - | { Assets: any } - | { ExecutionResult: any } - | { Version: any } - | { PalletsInfo: any } - | { DispatchResult: any } - | string - | Uint8Array - ) => SubmittableExtrinsic, - [u64, XcmV3Response] - >; - /** See [`Pallet::set_relay_chain`]. */ - setRelayChain: AugmentedSubmittable< - ( - relayChain: - | Option - | null - | Uint8Array - | DanceboxRuntimeXcmConfigRelayChain - | "Westend" - | "Rococo" - | number - ) => SubmittableExtrinsic, - [Option] - >; - /** See [`Pallet::set_relay_xcm_weight_config`]. */ - setRelayXcmWeightConfig: AugmentedSubmittable< - ( - xcmWeights: - | Option - | null - | Uint8Array - | PalletXcmCoreBuyerRelayXcmWeightConfigInner - | { buyExecutionCost?: any; weightAtMost?: any } - | string - ) => SubmittableExtrinsic, - [Option] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - xcmpQueue: { - /** See [`Pallet::resume_xcm_execution`]. */ - resumeXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::suspend_xcm_execution`]. */ - suspendXcmExecution: AugmentedSubmittable<() => SubmittableExtrinsic, []>; - /** See [`Pallet::update_drop_threshold`]. */ - updateDropThreshold: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::update_resume_threshold`]. */ - updateResumeThreshold: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** See [`Pallet::update_suspend_threshold`]. */ - updateSuspendThreshold: AugmentedSubmittable< - (updated: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic, - [u32] - >; - /** Generic tx */ - [key: string]: SubmittableExtrinsicFunction; - }; - } // AugmentedSubmittables -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/augment-api.ts b/typescript-api/src/dancebox/interfaces/augment-api.ts deleted file mode 100644 index 20fc4dd..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-api.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-chain`, do not edit -/* eslint-disable */ - -import "./augment-api-consts.js"; -import "./augment-api-errors.js"; -import "./augment-api-events.js"; -import "./augment-api-query.js"; -import "./augment-api-tx.js"; -import "./augment-api-rpc.js"; -import "./augment-api-runtime.js"; diff --git a/typescript-api/src/dancebox/interfaces/augment-types.ts b/typescript-api/src/dancebox/interfaces/augment-types.ts deleted file mode 100644 index 1cedc66..0000000 --- a/typescript-api/src/dancebox/interfaces/augment-types.ts +++ /dev/null @@ -1,2370 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -// import type lookup before we augment - in some environments -// this is required to allow for ambient/previous definitions -import "@polkadot/types/types/registry"; - -import type { Data, StorageKey } from "@polkadot/types"; -import type { - BitVec, - Bool, - Bytes, - F32, - F64, - I128, - I16, - I256, - I32, - I64, - I8, - ISize, - Json, - Null, - OptionBool, - Raw, - Text, - Type, - U128, - U16, - U256, - U32, - U64, - U8, - USize, - bool, - f32, - f64, - i128, - i16, - i256, - i32, - i64, - i8, - isize, - u128, - u16, - u256, - u32, - u64, - u8, - usize, -} from "@polkadot/types-codec"; -import type { TAssetConversion } from "@polkadot/types/interfaces/assetConversion"; -import type { - AssetApproval, - AssetApprovalKey, - AssetBalance, - AssetDestroyWitness, - AssetDetails, - AssetMetadata, - TAssetBalance, - TAssetDepositBalance, -} from "@polkadot/types/interfaces/assets"; -import type { BlockAttestations, IncludedBlocks, MoreAttestations } from "@polkadot/types/interfaces/attestations"; -import type { RawAuraPreDigest } from "@polkadot/types/interfaces/aura"; -import type { ExtrinsicOrHash, ExtrinsicStatus } from "@polkadot/types/interfaces/author"; -import type { UncleEntryItem } from "@polkadot/types/interfaces/authorship"; -import type { - AllowedSlots, - BabeAuthorityWeight, - BabeBlockWeight, - BabeEpochConfiguration, - BabeEquivocationProof, - BabeGenesisConfiguration, - BabeGenesisConfigurationV1, - BabeWeight, - Epoch, - EpochAuthorship, - MaybeRandomness, - MaybeVrf, - NextConfigDescriptor, - NextConfigDescriptorV1, - OpaqueKeyOwnershipProof, - Randomness, - RawBabePreDigest, - RawBabePreDigestCompat, - RawBabePreDigestPrimary, - RawBabePreDigestPrimaryTo159, - RawBabePreDigestSecondaryPlain, - RawBabePreDigestSecondaryTo159, - RawBabePreDigestSecondaryVRF, - RawBabePreDigestTo159, - SlotNumber, - VrfData, - VrfOutput, - VrfProof, -} from "@polkadot/types/interfaces/babe"; -import type { - AccountData, - BalanceLock, - BalanceLockTo212, - BalanceStatus, - Reasons, - ReserveData, - ReserveIdentifier, - VestingSchedule, - WithdrawReasons, -} from "@polkadot/types/interfaces/balances"; -import type { - BeefyAuthoritySet, - BeefyCommitment, - BeefyEquivocationProof, - BeefyId, - BeefyNextAuthoritySet, - BeefyPayload, - BeefyPayloadId, - BeefySignedCommitment, - BeefyVersionedFinalityProof, - BeefyVoteMessage, - MmrRootHash, - ValidatorSet, - ValidatorSetId, -} from "@polkadot/types/interfaces/beefy"; -import type { - BenchmarkBatch, - BenchmarkConfig, - BenchmarkList, - BenchmarkMetadata, - BenchmarkParameter, - BenchmarkResult, -} from "@polkadot/types/interfaces/benchmark"; -import type { CheckInherentsResult, InherentData, InherentIdentifier } from "@polkadot/types/interfaces/blockbuilder"; -import type { - BridgeMessageId, - BridgedBlockHash, - BridgedBlockNumber, - BridgedHeader, - CallOrigin, - ChainId, - DeliveredMessages, - DispatchFeePayment, - InboundLaneData, - InboundRelayer, - InitializationData, - LaneId, - MessageData, - MessageKey, - MessageNonce, - MessagesDeliveryProofOf, - MessagesProofOf, - OperatingMode, - OutboundLaneData, - OutboundMessageFee, - OutboundPayload, - Parameter, - RelayerId, - UnrewardedRelayer, - UnrewardedRelayersState, -} from "@polkadot/types/interfaces/bridges"; -import type { BlockHash } from "@polkadot/types/interfaces/chain"; -import type { PrefixedStorageKey } from "@polkadot/types/interfaces/childstate"; -import type { StatementKind } from "@polkadot/types/interfaces/claims"; -import type { - CollectiveOrigin, - MemberCount, - ProposalIndex, - Votes, - VotesTo230, -} from "@polkadot/types/interfaces/collective"; -import type { AuthorityId, RawVRFOutput } from "@polkadot/types/interfaces/consensus"; -import type { - AliveContractInfo, - CodeHash, - CodeSource, - CodeUploadRequest, - CodeUploadResult, - CodeUploadResultValue, - ContractCallFlags, - ContractCallRequest, - ContractExecResult, - ContractExecResultOk, - ContractExecResultResult, - ContractExecResultSuccessTo255, - ContractExecResultSuccessTo260, - ContractExecResultTo255, - ContractExecResultTo260, - ContractExecResultTo267, - ContractExecResultU64, - ContractInfo, - ContractInstantiateResult, - ContractInstantiateResultTo267, - ContractInstantiateResultTo299, - ContractInstantiateResultU64, - ContractReturnFlags, - ContractStorageKey, - DeletedContract, - ExecReturnValue, - Gas, - HostFnWeights, - HostFnWeightsTo264, - InstantiateRequest, - InstantiateRequestV1, - InstantiateRequestV2, - InstantiateReturnValue, - InstantiateReturnValueOk, - InstantiateReturnValueTo267, - InstructionWeights, - Limits, - LimitsTo264, - PrefabWasmModule, - RentProjection, - Schedule, - ScheduleTo212, - ScheduleTo258, - ScheduleTo264, - SeedOf, - StorageDeposit, - TombstoneContractInfo, - TrieId, -} from "@polkadot/types/interfaces/contracts"; -import type { - ContractConstructorSpecLatest, - ContractConstructorSpecV0, - ContractConstructorSpecV1, - ContractConstructorSpecV2, - ContractConstructorSpecV3, - ContractConstructorSpecV4, - ContractContractSpecV0, - ContractContractSpecV1, - ContractContractSpecV2, - ContractContractSpecV3, - ContractContractSpecV4, - ContractCryptoHasher, - ContractDiscriminant, - ContractDisplayName, - ContractEnvironmentV4, - ContractEventParamSpecLatest, - ContractEventParamSpecV0, - ContractEventParamSpecV2, - ContractEventSpecLatest, - ContractEventSpecV0, - ContractEventSpecV1, - ContractEventSpecV2, - ContractLayoutArray, - ContractLayoutCell, - ContractLayoutEnum, - ContractLayoutHash, - ContractLayoutHashingStrategy, - ContractLayoutKey, - ContractLayoutStruct, - ContractLayoutStructField, - ContractMessageParamSpecLatest, - ContractMessageParamSpecV0, - ContractMessageParamSpecV2, - ContractMessageSpecLatest, - ContractMessageSpecV0, - ContractMessageSpecV1, - ContractMessageSpecV2, - ContractMessageSpecV3, - ContractMetadata, - ContractMetadataLatest, - ContractMetadataV0, - ContractMetadataV1, - ContractMetadataV2, - ContractMetadataV3, - ContractMetadataV4, - ContractProject, - ContractProjectContract, - ContractProjectInfo, - ContractProjectSource, - ContractProjectV0, - ContractSelector, - ContractStorageLayout, - ContractTypeSpec, -} from "@polkadot/types/interfaces/contractsAbi"; -import type { FundIndex, FundInfo, LastContribution, TrieIndex } from "@polkadot/types/interfaces/crowdloan"; -import type { - CollationInfo, - CollationInfoV1, - ConfigData, - MessageId, - OverweightIndex, - PageCounter, - PageIndexData, -} from "@polkadot/types/interfaces/cumulus"; -import type { - AccountVote, - AccountVoteSplit, - AccountVoteStandard, - Conviction, - Delegations, - PreimageStatus, - PreimageStatusAvailable, - PriorLock, - PropIndex, - Proposal, - ProxyState, - ReferendumIndex, - ReferendumInfo, - ReferendumInfoFinished, - ReferendumInfoTo239, - ReferendumStatus, - Tally, - Voting, - VotingDelegating, - VotingDirect, - VotingDirectVote, -} from "@polkadot/types/interfaces/democracy"; -import type { BlockStats } from "@polkadot/types/interfaces/dev"; -import type { - ApprovalFlag, - DefunctVoter, - Renouncing, - SetIndex, - Vote, - VoteIndex, - VoteThreshold, - VoterInfo, -} from "@polkadot/types/interfaces/elections"; -import type { CreatedBlock, ImportedAux } from "@polkadot/types/interfaces/engine"; -import type { - BlockV0, - BlockV1, - BlockV2, - EIP1559Transaction, - EIP2930Transaction, - EthAccessList, - EthAccessListItem, - EthAccount, - EthAddress, - EthBlock, - EthBloom, - EthCallRequest, - EthFeeHistory, - EthFilter, - EthFilterAddress, - EthFilterChanges, - EthFilterTopic, - EthFilterTopicEntry, - EthFilterTopicInner, - EthHeader, - EthLog, - EthReceipt, - EthReceiptV0, - EthReceiptV3, - EthRichBlock, - EthRichHeader, - EthStorageProof, - EthSubKind, - EthSubParams, - EthSubResult, - EthSyncInfo, - EthSyncStatus, - EthTransaction, - EthTransactionAction, - EthTransactionCondition, - EthTransactionRequest, - EthTransactionSignature, - EthTransactionStatus, - EthWork, - EthereumAccountId, - EthereumAddress, - EthereumLookupSource, - EthereumSignature, - LegacyTransaction, - TransactionV0, - TransactionV1, - TransactionV2, -} from "@polkadot/types/interfaces/eth"; -import type { - EvmAccount, - EvmCallInfo, - EvmCallInfoV2, - EvmCreateInfo, - EvmCreateInfoV2, - EvmLog, - EvmVicinity, - EvmWeightInfo, - ExitError, - ExitFatal, - ExitReason, - ExitRevert, - ExitSucceed, -} from "@polkadot/types/interfaces/evm"; -import type { - AnySignature, - EcdsaSignature, - Ed25519Signature, - Era, - Extrinsic, - ExtrinsicEra, - ExtrinsicPayload, - ExtrinsicPayloadUnknown, - ExtrinsicPayloadV4, - ExtrinsicSignature, - ExtrinsicSignatureV4, - ExtrinsicUnknown, - ExtrinsicV4, - ImmortalEra, - MortalEra, - MultiSignature, - Signature, - SignerPayload, - Sr25519Signature, -} from "@polkadot/types/interfaces/extrinsics"; -import type { FungiblesAccessError } from "@polkadot/types/interfaces/fungibles"; -import type { - AssetOptions, - Owner, - PermissionLatest, - PermissionVersions, - PermissionsV1, -} from "@polkadot/types/interfaces/genericAsset"; -import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from "@polkadot/types/interfaces/gilt"; -import type { - AuthorityIndex, - AuthorityList, - AuthoritySet, - AuthoritySetChange, - AuthoritySetChanges, - AuthorityWeight, - DelayKind, - DelayKindBest, - EncodedFinalityProofs, - ForkTreePendingChange, - ForkTreePendingChangeNode, - GrandpaCommit, - GrandpaEquivocation, - GrandpaEquivocationProof, - GrandpaEquivocationValue, - GrandpaJustification, - GrandpaPrecommit, - GrandpaPrevote, - GrandpaSignedPrecommit, - JustificationNotification, - KeyOwnerProof, - NextAuthority, - PendingChange, - PendingPause, - PendingResume, - Precommits, - Prevotes, - ReportedRoundStates, - RoundState, - SetId, - StoredPendingChange, - StoredState, -} from "@polkadot/types/interfaces/grandpa"; -import type { - IdentityFields, - IdentityInfo, - IdentityInfoAdditional, - IdentityInfoTo198, - IdentityJudgement, - RegistrarIndex, - RegistrarInfo, - Registration, - RegistrationJudgement, - RegistrationTo198, -} from "@polkadot/types/interfaces/identity"; -import type { - AuthIndex, - AuthoritySignature, - Heartbeat, - HeartbeatTo244, - OpaqueMultiaddr, - OpaqueNetworkState, - OpaquePeerId, -} from "@polkadot/types/interfaces/imOnline"; -import type { CallIndex, LotteryConfig } from "@polkadot/types/interfaces/lottery"; -import type { - CustomMetadata15, - CustomValueMetadata15, - ErrorMetadataLatest, - ErrorMetadataV10, - ErrorMetadataV11, - ErrorMetadataV12, - ErrorMetadataV13, - ErrorMetadataV14, - ErrorMetadataV9, - EventMetadataLatest, - EventMetadataV10, - EventMetadataV11, - EventMetadataV12, - EventMetadataV13, - EventMetadataV14, - EventMetadataV9, - ExtrinsicMetadataLatest, - ExtrinsicMetadataV11, - ExtrinsicMetadataV12, - ExtrinsicMetadataV13, - ExtrinsicMetadataV14, - ExtrinsicMetadataV15, - FunctionArgumentMetadataLatest, - FunctionArgumentMetadataV10, - FunctionArgumentMetadataV11, - FunctionArgumentMetadataV12, - FunctionArgumentMetadataV13, - FunctionArgumentMetadataV14, - FunctionArgumentMetadataV9, - FunctionMetadataLatest, - FunctionMetadataV10, - FunctionMetadataV11, - FunctionMetadataV12, - FunctionMetadataV13, - FunctionMetadataV14, - FunctionMetadataV9, - MetadataAll, - MetadataLatest, - MetadataV10, - MetadataV11, - MetadataV12, - MetadataV13, - MetadataV14, - MetadataV15, - MetadataV9, - ModuleConstantMetadataV10, - ModuleConstantMetadataV11, - ModuleConstantMetadataV12, - ModuleConstantMetadataV13, - ModuleConstantMetadataV9, - ModuleMetadataV10, - ModuleMetadataV11, - ModuleMetadataV12, - ModuleMetadataV13, - ModuleMetadataV9, - OpaqueMetadata, - OuterEnums15, - PalletCallMetadataLatest, - PalletCallMetadataV14, - PalletConstantMetadataLatest, - PalletConstantMetadataV14, - PalletErrorMetadataLatest, - PalletErrorMetadataV14, - PalletEventMetadataLatest, - PalletEventMetadataV14, - PalletMetadataLatest, - PalletMetadataV14, - PalletMetadataV15, - PalletStorageMetadataLatest, - PalletStorageMetadataV14, - PortableType, - PortableTypeV14, - RuntimeApiMetadataLatest, - RuntimeApiMetadataV15, - RuntimeApiMethodMetadataV15, - RuntimeApiMethodParamMetadataV15, - SignedExtensionMetadataLatest, - SignedExtensionMetadataV14, - StorageEntryMetadataLatest, - StorageEntryMetadataV10, - StorageEntryMetadataV11, - StorageEntryMetadataV12, - StorageEntryMetadataV13, - StorageEntryMetadataV14, - StorageEntryMetadataV9, - StorageEntryModifierLatest, - StorageEntryModifierV10, - StorageEntryModifierV11, - StorageEntryModifierV12, - StorageEntryModifierV13, - StorageEntryModifierV14, - StorageEntryModifierV9, - StorageEntryTypeLatest, - StorageEntryTypeV10, - StorageEntryTypeV11, - StorageEntryTypeV12, - StorageEntryTypeV13, - StorageEntryTypeV14, - StorageEntryTypeV9, - StorageHasher, - StorageHasherV10, - StorageHasherV11, - StorageHasherV12, - StorageHasherV13, - StorageHasherV14, - StorageHasherV9, - StorageMetadataV10, - StorageMetadataV11, - StorageMetadataV12, - StorageMetadataV13, - StorageMetadataV9, -} from "@polkadot/types/interfaces/metadata"; -import type { - MmrBatchProof, - MmrEncodableOpaqueLeaf, - MmrError, - MmrHash, - MmrLeafBatchProof, - MmrLeafIndex, - MmrLeafProof, - MmrNodeIndex, - MmrProof, -} from "@polkadot/types/interfaces/mmr"; -import type { NftCollectionId, NftItemId } from "@polkadot/types/interfaces/nfts"; -import type { NpApiError, NpPoolId } from "@polkadot/types/interfaces/nompools"; -import type { StorageKind } from "@polkadot/types/interfaces/offchain"; -import type { - DeferredOffenceOf, - Kind, - OffenceDetails, - Offender, - OpaqueTimeSlot, - ReportIdOf, - Reporter, -} from "@polkadot/types/interfaces/offences"; -import type { - AbridgedCandidateReceipt, - AbridgedHostConfiguration, - AbridgedHrmpChannel, - AssignmentId, - AssignmentKind, - AttestedCandidate, - AuctionIndex, - AuthorityDiscoveryId, - AvailabilityBitfield, - AvailabilityBitfieldRecord, - BackedCandidate, - Bidder, - BufferedSessionChange, - CandidateCommitments, - CandidateDescriptor, - CandidateEvent, - CandidateHash, - CandidateInfo, - CandidatePendingAvailability, - CandidateReceipt, - CollatorId, - CollatorSignature, - CommittedCandidateReceipt, - CoreAssignment, - CoreIndex, - CoreOccupied, - CoreState, - DisputeLocation, - DisputeProof, - DisputeResult, - DisputeState, - DisputeStatement, - DisputeStatementSet, - DisputesTimeSlot, - DoubleVoteReport, - DownwardMessage, - ExecutorParam, - ExecutorParams, - ExecutorParamsHash, - ExplicitDisputeStatement, - GlobalValidationData, - GlobalValidationSchedule, - GroupIndex, - GroupRotationInfo, - HeadData, - HostConfiguration, - HrmpChannel, - HrmpChannelId, - HrmpOpenChannelRequest, - InboundDownwardMessage, - InboundHrmpMessage, - InboundHrmpMessages, - IncomingParachain, - IncomingParachainDeploy, - IncomingParachainFixed, - InvalidDisputeStatementKind, - LeasePeriod, - LeasePeriodOf, - LocalValidationData, - MessageIngestionType, - MessageQueueChain, - MessagingStateSnapshot, - MessagingStateSnapshotEgressEntry, - MultiDisputeStatementSet, - NewBidder, - OccupiedCore, - OccupiedCoreAssumption, - OldV1SessionInfo, - OutboundHrmpMessage, - ParaGenesisArgs, - ParaId, - ParaInfo, - ParaLifecycle, - ParaPastCodeMeta, - ParaScheduling, - ParaValidatorIndex, - ParachainDispatchOrigin, - ParachainInherentData, - ParachainProposal, - ParachainsInherentData, - ParathreadClaim, - ParathreadClaimQueue, - ParathreadEntry, - PendingSlashes, - PersistedValidationData, - PvfCheckStatement, - PvfExecTimeoutKind, - PvfPrepTimeoutKind, - QueuedParathread, - RegisteredParachainInfo, - RelayBlockNumber, - RelayChainBlockNumber, - RelayChainHash, - RelayHash, - Remark, - ReplacementTimes, - Retriable, - ScheduledCore, - Scheduling, - ScrapedOnChainVotes, - ServiceQuality, - SessionInfo, - SessionInfoValidatorGroup, - SignedAvailabilityBitfield, - SignedAvailabilityBitfields, - SigningContext, - SlashingOffenceKind, - SlotRange, - SlotRange10, - Statement, - SubId, - SystemInherentData, - TransientValidationData, - UpgradeGoAhead, - UpgradeRestriction, - UpwardMessage, - ValidDisputeStatementKind, - ValidationCode, - ValidationCodeHash, - ValidationData, - ValidationDataType, - ValidationFunctionParams, - ValidatorSignature, - ValidityAttestation, - VecInboundHrmpMessage, - WinnersData, - WinnersData10, - WinnersDataTuple, - WinnersDataTuple10, - WinningData, - WinningData10, - WinningDataEntry, -} from "@polkadot/types/interfaces/parachains"; -import type { - FeeDetails, - InclusionFee, - RuntimeDispatchInfo, - RuntimeDispatchInfoV1, - RuntimeDispatchInfoV2, -} from "@polkadot/types/interfaces/payment"; -import type { Approvals } from "@polkadot/types/interfaces/poll"; -import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from "@polkadot/types/interfaces/proxy"; -import type { AccountStatus, AccountValidity } from "@polkadot/types/interfaces/purchase"; -import type { ActiveRecovery, RecoveryConfig } from "@polkadot/types/interfaces/recovery"; -import type { RpcMethods } from "@polkadot/types/interfaces/rpc"; -import type { - AccountId, - AccountId20, - AccountId32, - AccountId33, - AccountIdOf, - AccountIndex, - Address, - AssetId, - Balance, - BalanceOf, - Block, - BlockNumber, - BlockNumberFor, - BlockNumberOf, - Call, - CallHash, - CallHashOf, - ChangesTrieConfiguration, - ChangesTrieSignal, - CodecHash, - Consensus, - ConsensusEngineId, - CrateVersion, - Digest, - DigestItem, - EncodedJustification, - ExtrinsicsWeight, - Fixed128, - Fixed64, - FixedI128, - FixedI64, - FixedU128, - FixedU64, - H1024, - H128, - H160, - H2048, - H256, - H32, - H512, - H64, - Hash, - Header, - HeaderPartial, - I32F32, - Index, - IndicesLookupSource, - Justification, - Justifications, - KeyTypeId, - KeyValue, - LockIdentifier, - LookupSource, - LookupTarget, - ModuleId, - Moment, - MultiAddress, - MultiSigner, - OpaqueCall, - Origin, - OriginCaller, - PalletId, - PalletVersion, - PalletsOrigin, - Pays, - PerU16, - Perbill, - Percent, - Permill, - Perquintill, - Phantom, - PhantomData, - PreRuntime, - Releases, - RuntimeCall, - RuntimeDbWeight, - RuntimeEvent, - Seal, - SealV0, - SignedBlock, - SignedBlockWithJustification, - SignedBlockWithJustifications, - Slot, - SlotDuration, - StorageData, - StorageInfo, - StorageProof, - TransactionInfo, - TransactionLongevity, - TransactionPriority, - TransactionStorageProof, - TransactionTag, - U32F32, - ValidatorId, - ValidatorIdOf, - Weight, - WeightMultiplier, - WeightV0, - WeightV1, - WeightV2, -} from "@polkadot/types/interfaces/runtime"; -import type { - Si0Field, - Si0LookupTypeId, - Si0Path, - Si0Type, - Si0TypeDef, - Si0TypeDefArray, - Si0TypeDefBitSequence, - Si0TypeDefCompact, - Si0TypeDefComposite, - Si0TypeDefPhantom, - Si0TypeDefPrimitive, - Si0TypeDefSequence, - Si0TypeDefTuple, - Si0TypeDefVariant, - Si0TypeParameter, - Si0Variant, - Si1Field, - Si1LookupTypeId, - Si1Path, - Si1Type, - Si1TypeDef, - Si1TypeDefArray, - Si1TypeDefBitSequence, - Si1TypeDefCompact, - Si1TypeDefComposite, - Si1TypeDefPrimitive, - Si1TypeDefSequence, - Si1TypeDefTuple, - Si1TypeDefVariant, - Si1TypeParameter, - Si1Variant, - SiField, - SiLookupTypeId, - SiPath, - SiType, - SiTypeDef, - SiTypeDefArray, - SiTypeDefBitSequence, - SiTypeDefCompact, - SiTypeDefComposite, - SiTypeDefPrimitive, - SiTypeDefSequence, - SiTypeDefTuple, - SiTypeDefVariant, - SiTypeParameter, - SiVariant, -} from "@polkadot/types/interfaces/scaleInfo"; -import type { - Period, - Priority, - SchedulePeriod, - SchedulePriority, - Scheduled, - ScheduledTo254, - TaskAddress, -} from "@polkadot/types/interfaces/scheduler"; -import type { - BeefyKey, - FullIdentification, - IdentificationTuple, - Keys, - MembershipProof, - SessionIndex, - SessionKeys1, - SessionKeys10, - SessionKeys10B, - SessionKeys2, - SessionKeys3, - SessionKeys4, - SessionKeys5, - SessionKeys6, - SessionKeys6B, - SessionKeys7, - SessionKeys7B, - SessionKeys8, - SessionKeys8B, - SessionKeys9, - SessionKeys9B, - ValidatorCount, -} from "@polkadot/types/interfaces/session"; -import type { - Bid, - BidKind, - SocietyJudgement, - SocietyVote, - StrikeCount, - VouchingStatus, -} from "@polkadot/types/interfaces/society"; -import type { - ActiveEraInfo, - CompactAssignments, - CompactAssignmentsTo257, - CompactAssignmentsTo265, - CompactAssignmentsWith16, - CompactAssignmentsWith24, - CompactScore, - CompactScoreCompact, - ElectionCompute, - ElectionPhase, - ElectionResult, - ElectionScore, - ElectionSize, - ElectionStatus, - EraIndex, - EraPoints, - EraRewardPoints, - EraRewards, - Exposure, - ExtendedBalance, - Forcing, - IndividualExposure, - KeyType, - MomentOf, - Nominations, - NominatorIndex, - NominatorIndexCompact, - OffchainAccuracy, - OffchainAccuracyCompact, - PhragmenScore, - Points, - RawSolution, - RawSolutionTo265, - RawSolutionWith16, - RawSolutionWith24, - ReadySolution, - RewardDestination, - RewardPoint, - RoundSnapshot, - SeatHolder, - SignedSubmission, - SignedSubmissionOf, - SignedSubmissionTo276, - SlashJournalEntry, - SlashingSpans, - SlashingSpansTo204, - SolutionOrSnapshotSize, - SolutionSupport, - SolutionSupports, - SpanIndex, - SpanRecord, - StakingLedger, - StakingLedgerTo223, - StakingLedgerTo240, - SubmissionIndicesOf, - Supports, - UnappliedSlash, - UnappliedSlashOther, - UnlockChunk, - ValidatorIndex, - ValidatorIndexCompact, - ValidatorPrefs, - ValidatorPrefsTo145, - ValidatorPrefsTo196, - ValidatorPrefsWithBlocked, - ValidatorPrefsWithCommission, - VoteWeight, - Voter, -} from "@polkadot/types/interfaces/staking"; -import type { - ApiId, - BlockTrace, - BlockTraceEvent, - BlockTraceEventData, - BlockTraceSpan, - KeyValueOption, - MigrationStatusResult, - ReadProof, - RuntimeVersion, - RuntimeVersionApi, - RuntimeVersionPartial, - RuntimeVersionPre3, - RuntimeVersionPre4, - SpecVersion, - StorageChangeSet, - TraceBlockResponse, - TraceError, -} from "@polkadot/types/interfaces/state"; -import type { WeightToFeeCoefficient } from "@polkadot/types/interfaces/support"; -import type { - AccountInfo, - AccountInfoWithDualRefCount, - AccountInfoWithProviders, - AccountInfoWithRefCount, - AccountInfoWithRefCountU8, - AccountInfoWithTripleRefCount, - ApplyExtrinsicResult, - ApplyExtrinsicResultPre6, - ArithmeticError, - BlockLength, - BlockWeights, - ChainProperties, - ChainType, - ConsumedWeight, - DigestOf, - DispatchClass, - DispatchError, - DispatchErrorModule, - DispatchErrorModulePre6, - DispatchErrorModuleU8, - DispatchErrorModuleU8a, - DispatchErrorPre6, - DispatchErrorPre6First, - DispatchErrorTo198, - DispatchInfo, - DispatchInfoTo190, - DispatchInfoTo244, - DispatchOutcome, - DispatchOutcomePre6, - DispatchResult, - DispatchResultOf, - DispatchResultTo198, - Event, - EventId, - EventIndex, - EventRecord, - Health, - InvalidTransaction, - Key, - LastRuntimeUpgradeInfo, - NetworkState, - NetworkStatePeerset, - NetworkStatePeersetInfo, - NodeRole, - NotConnectedPeer, - Peer, - PeerEndpoint, - PeerEndpointAddr, - PeerInfo, - PeerPing, - PerDispatchClassU32, - PerDispatchClassWeight, - PerDispatchClassWeightsPerClass, - Phase, - RawOrigin, - RefCount, - RefCountTo259, - SyncState, - SystemOrigin, - TokenError, - TransactionValidityError, - TransactionalError, - UnknownTransaction, - WeightPerClass, -} from "@polkadot/types/interfaces/system"; -import type { - Bounty, - BountyIndex, - BountyStatus, - BountyStatusActive, - BountyStatusCuratorProposed, - BountyStatusPendingPayout, - OpenTip, - OpenTipFinderTo225, - OpenTipTip, - OpenTipTo225, - TreasuryProposal, -} from "@polkadot/types/interfaces/treasury"; -import type { Multiplier } from "@polkadot/types/interfaces/txpayment"; -import type { TransactionSource, TransactionValidity, ValidTransaction } from "@polkadot/types/interfaces/txqueue"; -import type { - ClassDetails, - ClassId, - ClassMetadata, - DepositBalance, - DepositBalanceOf, - DestroyWitness, - InstanceDetails, - InstanceId, - InstanceMetadata, -} from "@polkadot/types/interfaces/uniques"; -import type { Multisig, Timepoint } from "@polkadot/types/interfaces/utility"; -import type { VestingInfo } from "@polkadot/types/interfaces/vesting"; -import type { - AssetInstance, - AssetInstanceV0, - AssetInstanceV1, - AssetInstanceV2, - BodyId, - BodyPart, - DoubleEncodedCall, - Fungibility, - FungibilityV0, - FungibilityV1, - FungibilityV2, - InboundStatus, - InstructionV2, - InteriorMultiLocation, - Junction, - JunctionV0, - JunctionV1, - JunctionV2, - Junctions, - JunctionsV1, - JunctionsV2, - MultiAsset, - MultiAssetFilter, - MultiAssetFilterV1, - MultiAssetFilterV2, - MultiAssetV0, - MultiAssetV1, - MultiAssetV2, - MultiAssets, - MultiAssetsV1, - MultiAssetsV2, - MultiLocation, - MultiLocationV0, - MultiLocationV1, - MultiLocationV2, - NetworkId, - OriginKindV0, - OriginKindV1, - OriginKindV2, - OutboundStatus, - Outcome, - QueryId, - QueryStatus, - QueueConfigData, - Response, - ResponseV0, - ResponseV1, - ResponseV2, - ResponseV2Error, - ResponseV2Result, - VersionMigrationStage, - VersionedMultiAsset, - VersionedMultiAssets, - VersionedMultiLocation, - VersionedResponse, - VersionedXcm, - WeightLimitV2, - WildFungibility, - WildFungibilityV0, - WildFungibilityV1, - WildFungibilityV2, - WildMultiAsset, - WildMultiAssetV1, - WildMultiAssetV2, - Xcm, - XcmAssetId, - XcmError, - XcmErrorV0, - XcmErrorV1, - XcmErrorV2, - XcmOrder, - XcmOrderV0, - XcmOrderV1, - XcmOrderV2, - XcmOrigin, - XcmOriginKind, - XcmV0, - XcmV1, - XcmV2, - XcmVersion, - XcmpMessageFormat, -} from "@polkadot/types/interfaces/xcm"; - -declare module "@polkadot/types/types/registry" { - interface InterfaceTypes { - AbridgedCandidateReceipt: AbridgedCandidateReceipt; - AbridgedHostConfiguration: AbridgedHostConfiguration; - AbridgedHrmpChannel: AbridgedHrmpChannel; - AccountData: AccountData; - AccountId: AccountId; - AccountId20: AccountId20; - AccountId32: AccountId32; - AccountId33: AccountId33; - AccountIdOf: AccountIdOf; - AccountIndex: AccountIndex; - AccountInfo: AccountInfo; - AccountInfoWithDualRefCount: AccountInfoWithDualRefCount; - AccountInfoWithProviders: AccountInfoWithProviders; - AccountInfoWithRefCount: AccountInfoWithRefCount; - AccountInfoWithRefCountU8: AccountInfoWithRefCountU8; - AccountInfoWithTripleRefCount: AccountInfoWithTripleRefCount; - AccountStatus: AccountStatus; - AccountValidity: AccountValidity; - AccountVote: AccountVote; - AccountVoteSplit: AccountVoteSplit; - AccountVoteStandard: AccountVoteStandard; - ActiveEraInfo: ActiveEraInfo; - ActiveGilt: ActiveGilt; - ActiveGiltsTotal: ActiveGiltsTotal; - ActiveIndex: ActiveIndex; - ActiveRecovery: ActiveRecovery; - Address: Address; - AliveContractInfo: AliveContractInfo; - AllowedSlots: AllowedSlots; - AnySignature: AnySignature; - ApiId: ApiId; - ApplyExtrinsicResult: ApplyExtrinsicResult; - ApplyExtrinsicResultPre6: ApplyExtrinsicResultPre6; - ApprovalFlag: ApprovalFlag; - Approvals: Approvals; - ArithmeticError: ArithmeticError; - AssetApproval: AssetApproval; - AssetApprovalKey: AssetApprovalKey; - AssetBalance: AssetBalance; - AssetDestroyWitness: AssetDestroyWitness; - AssetDetails: AssetDetails; - AssetId: AssetId; - AssetInstance: AssetInstance; - AssetInstanceV0: AssetInstanceV0; - AssetInstanceV1: AssetInstanceV1; - AssetInstanceV2: AssetInstanceV2; - AssetMetadata: AssetMetadata; - AssetOptions: AssetOptions; - AssignmentId: AssignmentId; - AssignmentKind: AssignmentKind; - AttestedCandidate: AttestedCandidate; - AuctionIndex: AuctionIndex; - AuthIndex: AuthIndex; - AuthorityDiscoveryId: AuthorityDiscoveryId; - AuthorityId: AuthorityId; - AuthorityIndex: AuthorityIndex; - AuthorityList: AuthorityList; - AuthoritySet: AuthoritySet; - AuthoritySetChange: AuthoritySetChange; - AuthoritySetChanges: AuthoritySetChanges; - AuthoritySignature: AuthoritySignature; - AuthorityWeight: AuthorityWeight; - AvailabilityBitfield: AvailabilityBitfield; - AvailabilityBitfieldRecord: AvailabilityBitfieldRecord; - BabeAuthorityWeight: BabeAuthorityWeight; - BabeBlockWeight: BabeBlockWeight; - BabeEpochConfiguration: BabeEpochConfiguration; - BabeEquivocationProof: BabeEquivocationProof; - BabeGenesisConfiguration: BabeGenesisConfiguration; - BabeGenesisConfigurationV1: BabeGenesisConfigurationV1; - BabeWeight: BabeWeight; - BackedCandidate: BackedCandidate; - Balance: Balance; - BalanceLock: BalanceLock; - BalanceLockTo212: BalanceLockTo212; - BalanceOf: BalanceOf; - BalanceStatus: BalanceStatus; - BeefyAuthoritySet: BeefyAuthoritySet; - BeefyCommitment: BeefyCommitment; - BeefyEquivocationProof: BeefyEquivocationProof; - BeefyId: BeefyId; - BeefyKey: BeefyKey; - BeefyNextAuthoritySet: BeefyNextAuthoritySet; - BeefyPayload: BeefyPayload; - BeefyPayloadId: BeefyPayloadId; - BeefySignedCommitment: BeefySignedCommitment; - BeefyVersionedFinalityProof: BeefyVersionedFinalityProof; - BeefyVoteMessage: BeefyVoteMessage; - BenchmarkBatch: BenchmarkBatch; - BenchmarkConfig: BenchmarkConfig; - BenchmarkList: BenchmarkList; - BenchmarkMetadata: BenchmarkMetadata; - BenchmarkParameter: BenchmarkParameter; - BenchmarkResult: BenchmarkResult; - Bid: Bid; - Bidder: Bidder; - BidKind: BidKind; - BitVec: BitVec; - Block: Block; - BlockAttestations: BlockAttestations; - BlockHash: BlockHash; - BlockLength: BlockLength; - BlockNumber: BlockNumber; - BlockNumberFor: BlockNumberFor; - BlockNumberOf: BlockNumberOf; - BlockStats: BlockStats; - BlockTrace: BlockTrace; - BlockTraceEvent: BlockTraceEvent; - BlockTraceEventData: BlockTraceEventData; - BlockTraceSpan: BlockTraceSpan; - BlockV0: BlockV0; - BlockV1: BlockV1; - BlockV2: BlockV2; - BlockWeights: BlockWeights; - BodyId: BodyId; - BodyPart: BodyPart; - bool: bool; - Bool: Bool; - Bounty: Bounty; - BountyIndex: BountyIndex; - BountyStatus: BountyStatus; - BountyStatusActive: BountyStatusActive; - BountyStatusCuratorProposed: BountyStatusCuratorProposed; - BountyStatusPendingPayout: BountyStatusPendingPayout; - BridgedBlockHash: BridgedBlockHash; - BridgedBlockNumber: BridgedBlockNumber; - BridgedHeader: BridgedHeader; - BridgeMessageId: BridgeMessageId; - BufferedSessionChange: BufferedSessionChange; - Bytes: Bytes; - Call: Call; - CallHash: CallHash; - CallHashOf: CallHashOf; - CallIndex: CallIndex; - CallOrigin: CallOrigin; - CandidateCommitments: CandidateCommitments; - CandidateDescriptor: CandidateDescriptor; - CandidateEvent: CandidateEvent; - CandidateHash: CandidateHash; - CandidateInfo: CandidateInfo; - CandidatePendingAvailability: CandidatePendingAvailability; - CandidateReceipt: CandidateReceipt; - ChainId: ChainId; - ChainProperties: ChainProperties; - ChainType: ChainType; - ChangesTrieConfiguration: ChangesTrieConfiguration; - ChangesTrieSignal: ChangesTrieSignal; - CheckInherentsResult: CheckInherentsResult; - ClassDetails: ClassDetails; - ClassId: ClassId; - ClassMetadata: ClassMetadata; - CodecHash: CodecHash; - CodeHash: CodeHash; - CodeSource: CodeSource; - CodeUploadRequest: CodeUploadRequest; - CodeUploadResult: CodeUploadResult; - CodeUploadResultValue: CodeUploadResultValue; - CollationInfo: CollationInfo; - CollationInfoV1: CollationInfoV1; - CollatorId: CollatorId; - CollatorSignature: CollatorSignature; - CollectiveOrigin: CollectiveOrigin; - CommittedCandidateReceipt: CommittedCandidateReceipt; - CompactAssignments: CompactAssignments; - CompactAssignmentsTo257: CompactAssignmentsTo257; - CompactAssignmentsTo265: CompactAssignmentsTo265; - CompactAssignmentsWith16: CompactAssignmentsWith16; - CompactAssignmentsWith24: CompactAssignmentsWith24; - CompactScore: CompactScore; - CompactScoreCompact: CompactScoreCompact; - ConfigData: ConfigData; - Consensus: Consensus; - ConsensusEngineId: ConsensusEngineId; - ConsumedWeight: ConsumedWeight; - ContractCallFlags: ContractCallFlags; - ContractCallRequest: ContractCallRequest; - ContractConstructorSpecLatest: ContractConstructorSpecLatest; - ContractConstructorSpecV0: ContractConstructorSpecV0; - ContractConstructorSpecV1: ContractConstructorSpecV1; - ContractConstructorSpecV2: ContractConstructorSpecV2; - ContractConstructorSpecV3: ContractConstructorSpecV3; - ContractConstructorSpecV4: ContractConstructorSpecV4; - ContractContractSpecV0: ContractContractSpecV0; - ContractContractSpecV1: ContractContractSpecV1; - ContractContractSpecV2: ContractContractSpecV2; - ContractContractSpecV3: ContractContractSpecV3; - ContractContractSpecV4: ContractContractSpecV4; - ContractCryptoHasher: ContractCryptoHasher; - ContractDiscriminant: ContractDiscriminant; - ContractDisplayName: ContractDisplayName; - ContractEnvironmentV4: ContractEnvironmentV4; - ContractEventParamSpecLatest: ContractEventParamSpecLatest; - ContractEventParamSpecV0: ContractEventParamSpecV0; - ContractEventParamSpecV2: ContractEventParamSpecV2; - ContractEventSpecLatest: ContractEventSpecLatest; - ContractEventSpecV0: ContractEventSpecV0; - ContractEventSpecV1: ContractEventSpecV1; - ContractEventSpecV2: ContractEventSpecV2; - ContractExecResult: ContractExecResult; - ContractExecResultOk: ContractExecResultOk; - ContractExecResultResult: ContractExecResultResult; - ContractExecResultSuccessTo255: ContractExecResultSuccessTo255; - ContractExecResultSuccessTo260: ContractExecResultSuccessTo260; - ContractExecResultTo255: ContractExecResultTo255; - ContractExecResultTo260: ContractExecResultTo260; - ContractExecResultTo267: ContractExecResultTo267; - ContractExecResultU64: ContractExecResultU64; - ContractInfo: ContractInfo; - ContractInstantiateResult: ContractInstantiateResult; - ContractInstantiateResultTo267: ContractInstantiateResultTo267; - ContractInstantiateResultTo299: ContractInstantiateResultTo299; - ContractInstantiateResultU64: ContractInstantiateResultU64; - ContractLayoutArray: ContractLayoutArray; - ContractLayoutCell: ContractLayoutCell; - ContractLayoutEnum: ContractLayoutEnum; - ContractLayoutHash: ContractLayoutHash; - ContractLayoutHashingStrategy: ContractLayoutHashingStrategy; - ContractLayoutKey: ContractLayoutKey; - ContractLayoutStruct: ContractLayoutStruct; - ContractLayoutStructField: ContractLayoutStructField; - ContractMessageParamSpecLatest: ContractMessageParamSpecLatest; - ContractMessageParamSpecV0: ContractMessageParamSpecV0; - ContractMessageParamSpecV2: ContractMessageParamSpecV2; - ContractMessageSpecLatest: ContractMessageSpecLatest; - ContractMessageSpecV0: ContractMessageSpecV0; - ContractMessageSpecV1: ContractMessageSpecV1; - ContractMessageSpecV2: ContractMessageSpecV2; - ContractMessageSpecV3: ContractMessageSpecV3; - ContractMetadata: ContractMetadata; - ContractMetadataLatest: ContractMetadataLatest; - ContractMetadataV0: ContractMetadataV0; - ContractMetadataV1: ContractMetadataV1; - ContractMetadataV2: ContractMetadataV2; - ContractMetadataV3: ContractMetadataV3; - ContractMetadataV4: ContractMetadataV4; - ContractProject: ContractProject; - ContractProjectContract: ContractProjectContract; - ContractProjectInfo: ContractProjectInfo; - ContractProjectSource: ContractProjectSource; - ContractProjectV0: ContractProjectV0; - ContractReturnFlags: ContractReturnFlags; - ContractSelector: ContractSelector; - ContractStorageKey: ContractStorageKey; - ContractStorageLayout: ContractStorageLayout; - ContractTypeSpec: ContractTypeSpec; - Conviction: Conviction; - CoreAssignment: CoreAssignment; - CoreIndex: CoreIndex; - CoreOccupied: CoreOccupied; - CoreState: CoreState; - CrateVersion: CrateVersion; - CreatedBlock: CreatedBlock; - CustomMetadata15: CustomMetadata15; - CustomValueMetadata15: CustomValueMetadata15; - Data: Data; - DeferredOffenceOf: DeferredOffenceOf; - DefunctVoter: DefunctVoter; - DelayKind: DelayKind; - DelayKindBest: DelayKindBest; - Delegations: Delegations; - DeletedContract: DeletedContract; - DeliveredMessages: DeliveredMessages; - DepositBalance: DepositBalance; - DepositBalanceOf: DepositBalanceOf; - DestroyWitness: DestroyWitness; - Digest: Digest; - DigestItem: DigestItem; - DigestOf: DigestOf; - DispatchClass: DispatchClass; - DispatchError: DispatchError; - DispatchErrorModule: DispatchErrorModule; - DispatchErrorModulePre6: DispatchErrorModulePre6; - DispatchErrorModuleU8: DispatchErrorModuleU8; - DispatchErrorModuleU8a: DispatchErrorModuleU8a; - DispatchErrorPre6: DispatchErrorPre6; - DispatchErrorPre6First: DispatchErrorPre6First; - DispatchErrorTo198: DispatchErrorTo198; - DispatchFeePayment: DispatchFeePayment; - DispatchInfo: DispatchInfo; - DispatchInfoTo190: DispatchInfoTo190; - DispatchInfoTo244: DispatchInfoTo244; - DispatchOutcome: DispatchOutcome; - DispatchOutcomePre6: DispatchOutcomePre6; - DispatchResult: DispatchResult; - DispatchResultOf: DispatchResultOf; - DispatchResultTo198: DispatchResultTo198; - DisputeLocation: DisputeLocation; - DisputeProof: DisputeProof; - DisputeResult: DisputeResult; - DisputeState: DisputeState; - DisputeStatement: DisputeStatement; - DisputeStatementSet: DisputeStatementSet; - DisputesTimeSlot: DisputesTimeSlot; - DoubleEncodedCall: DoubleEncodedCall; - DoubleVoteReport: DoubleVoteReport; - DownwardMessage: DownwardMessage; - EcdsaSignature: EcdsaSignature; - Ed25519Signature: Ed25519Signature; - EIP1559Transaction: EIP1559Transaction; - EIP2930Transaction: EIP2930Transaction; - ElectionCompute: ElectionCompute; - ElectionPhase: ElectionPhase; - ElectionResult: ElectionResult; - ElectionScore: ElectionScore; - ElectionSize: ElectionSize; - ElectionStatus: ElectionStatus; - EncodedFinalityProofs: EncodedFinalityProofs; - EncodedJustification: EncodedJustification; - Epoch: Epoch; - EpochAuthorship: EpochAuthorship; - Era: Era; - EraIndex: EraIndex; - EraPoints: EraPoints; - EraRewardPoints: EraRewardPoints; - EraRewards: EraRewards; - ErrorMetadataLatest: ErrorMetadataLatest; - ErrorMetadataV10: ErrorMetadataV10; - ErrorMetadataV11: ErrorMetadataV11; - ErrorMetadataV12: ErrorMetadataV12; - ErrorMetadataV13: ErrorMetadataV13; - ErrorMetadataV14: ErrorMetadataV14; - ErrorMetadataV9: ErrorMetadataV9; - EthAccessList: EthAccessList; - EthAccessListItem: EthAccessListItem; - EthAccount: EthAccount; - EthAddress: EthAddress; - EthBlock: EthBlock; - EthBloom: EthBloom; - EthCallRequest: EthCallRequest; - EthereumAccountId: EthereumAccountId; - EthereumAddress: EthereumAddress; - EthereumLookupSource: EthereumLookupSource; - EthereumSignature: EthereumSignature; - EthFeeHistory: EthFeeHistory; - EthFilter: EthFilter; - EthFilterAddress: EthFilterAddress; - EthFilterChanges: EthFilterChanges; - EthFilterTopic: EthFilterTopic; - EthFilterTopicEntry: EthFilterTopicEntry; - EthFilterTopicInner: EthFilterTopicInner; - EthHeader: EthHeader; - EthLog: EthLog; - EthReceipt: EthReceipt; - EthReceiptV0: EthReceiptV0; - EthReceiptV3: EthReceiptV3; - EthRichBlock: EthRichBlock; - EthRichHeader: EthRichHeader; - EthStorageProof: EthStorageProof; - EthSubKind: EthSubKind; - EthSubParams: EthSubParams; - EthSubResult: EthSubResult; - EthSyncInfo: EthSyncInfo; - EthSyncStatus: EthSyncStatus; - EthTransaction: EthTransaction; - EthTransactionAction: EthTransactionAction; - EthTransactionCondition: EthTransactionCondition; - EthTransactionRequest: EthTransactionRequest; - EthTransactionSignature: EthTransactionSignature; - EthTransactionStatus: EthTransactionStatus; - EthWork: EthWork; - Event: Event; - EventId: EventId; - EventIndex: EventIndex; - EventMetadataLatest: EventMetadataLatest; - EventMetadataV10: EventMetadataV10; - EventMetadataV11: EventMetadataV11; - EventMetadataV12: EventMetadataV12; - EventMetadataV13: EventMetadataV13; - EventMetadataV14: EventMetadataV14; - EventMetadataV9: EventMetadataV9; - EventRecord: EventRecord; - EvmAccount: EvmAccount; - EvmCallInfo: EvmCallInfo; - EvmCallInfoV2: EvmCallInfoV2; - EvmCreateInfo: EvmCreateInfo; - EvmCreateInfoV2: EvmCreateInfoV2; - EvmLog: EvmLog; - EvmVicinity: EvmVicinity; - EvmWeightInfo: EvmWeightInfo; - ExecReturnValue: ExecReturnValue; - ExecutorParam: ExecutorParam; - ExecutorParams: ExecutorParams; - ExecutorParamsHash: ExecutorParamsHash; - ExitError: ExitError; - ExitFatal: ExitFatal; - ExitReason: ExitReason; - ExitRevert: ExitRevert; - ExitSucceed: ExitSucceed; - ExplicitDisputeStatement: ExplicitDisputeStatement; - Exposure: Exposure; - ExtendedBalance: ExtendedBalance; - Extrinsic: Extrinsic; - ExtrinsicEra: ExtrinsicEra; - ExtrinsicMetadataLatest: ExtrinsicMetadataLatest; - ExtrinsicMetadataV11: ExtrinsicMetadataV11; - ExtrinsicMetadataV12: ExtrinsicMetadataV12; - ExtrinsicMetadataV13: ExtrinsicMetadataV13; - ExtrinsicMetadataV14: ExtrinsicMetadataV14; - ExtrinsicMetadataV15: ExtrinsicMetadataV15; - ExtrinsicOrHash: ExtrinsicOrHash; - ExtrinsicPayload: ExtrinsicPayload; - ExtrinsicPayloadUnknown: ExtrinsicPayloadUnknown; - ExtrinsicPayloadV4: ExtrinsicPayloadV4; - ExtrinsicSignature: ExtrinsicSignature; - ExtrinsicSignatureV4: ExtrinsicSignatureV4; - ExtrinsicStatus: ExtrinsicStatus; - ExtrinsicsWeight: ExtrinsicsWeight; - ExtrinsicUnknown: ExtrinsicUnknown; - ExtrinsicV4: ExtrinsicV4; - f32: f32; - F32: F32; - f64: f64; - F64: F64; - FeeDetails: FeeDetails; - Fixed128: Fixed128; - Fixed64: Fixed64; - FixedI128: FixedI128; - FixedI64: FixedI64; - FixedU128: FixedU128; - FixedU64: FixedU64; - Forcing: Forcing; - ForkTreePendingChange: ForkTreePendingChange; - ForkTreePendingChangeNode: ForkTreePendingChangeNode; - FullIdentification: FullIdentification; - FunctionArgumentMetadataLatest: FunctionArgumentMetadataLatest; - FunctionArgumentMetadataV10: FunctionArgumentMetadataV10; - FunctionArgumentMetadataV11: FunctionArgumentMetadataV11; - FunctionArgumentMetadataV12: FunctionArgumentMetadataV12; - FunctionArgumentMetadataV13: FunctionArgumentMetadataV13; - FunctionArgumentMetadataV14: FunctionArgumentMetadataV14; - FunctionArgumentMetadataV9: FunctionArgumentMetadataV9; - FunctionMetadataLatest: FunctionMetadataLatest; - FunctionMetadataV10: FunctionMetadataV10; - FunctionMetadataV11: FunctionMetadataV11; - FunctionMetadataV12: FunctionMetadataV12; - FunctionMetadataV13: FunctionMetadataV13; - FunctionMetadataV14: FunctionMetadataV14; - FunctionMetadataV9: FunctionMetadataV9; - FundIndex: FundIndex; - FundInfo: FundInfo; - Fungibility: Fungibility; - FungibilityV0: FungibilityV0; - FungibilityV1: FungibilityV1; - FungibilityV2: FungibilityV2; - FungiblesAccessError: FungiblesAccessError; - Gas: Gas; - GiltBid: GiltBid; - GlobalValidationData: GlobalValidationData; - GlobalValidationSchedule: GlobalValidationSchedule; - GrandpaCommit: GrandpaCommit; - GrandpaEquivocation: GrandpaEquivocation; - GrandpaEquivocationProof: GrandpaEquivocationProof; - GrandpaEquivocationValue: GrandpaEquivocationValue; - GrandpaJustification: GrandpaJustification; - GrandpaPrecommit: GrandpaPrecommit; - GrandpaPrevote: GrandpaPrevote; - GrandpaSignedPrecommit: GrandpaSignedPrecommit; - GroupIndex: GroupIndex; - GroupRotationInfo: GroupRotationInfo; - H1024: H1024; - H128: H128; - H160: H160; - H2048: H2048; - H256: H256; - H32: H32; - H512: H512; - H64: H64; - Hash: Hash; - HeadData: HeadData; - Header: Header; - HeaderPartial: HeaderPartial; - Health: Health; - Heartbeat: Heartbeat; - HeartbeatTo244: HeartbeatTo244; - HostConfiguration: HostConfiguration; - HostFnWeights: HostFnWeights; - HostFnWeightsTo264: HostFnWeightsTo264; - HrmpChannel: HrmpChannel; - HrmpChannelId: HrmpChannelId; - HrmpOpenChannelRequest: HrmpOpenChannelRequest; - i128: i128; - I128: I128; - i16: i16; - I16: I16; - i256: i256; - I256: I256; - i32: i32; - I32: I32; - I32F32: I32F32; - i64: i64; - I64: I64; - i8: i8; - I8: I8; - IdentificationTuple: IdentificationTuple; - IdentityFields: IdentityFields; - IdentityInfo: IdentityInfo; - IdentityInfoAdditional: IdentityInfoAdditional; - IdentityInfoTo198: IdentityInfoTo198; - IdentityJudgement: IdentityJudgement; - ImmortalEra: ImmortalEra; - ImportedAux: ImportedAux; - InboundDownwardMessage: InboundDownwardMessage; - InboundHrmpMessage: InboundHrmpMessage; - InboundHrmpMessages: InboundHrmpMessages; - InboundLaneData: InboundLaneData; - InboundRelayer: InboundRelayer; - InboundStatus: InboundStatus; - IncludedBlocks: IncludedBlocks; - InclusionFee: InclusionFee; - IncomingParachain: IncomingParachain; - IncomingParachainDeploy: IncomingParachainDeploy; - IncomingParachainFixed: IncomingParachainFixed; - Index: Index; - IndicesLookupSource: IndicesLookupSource; - IndividualExposure: IndividualExposure; - InherentData: InherentData; - InherentIdentifier: InherentIdentifier; - InitializationData: InitializationData; - InstanceDetails: InstanceDetails; - InstanceId: InstanceId; - InstanceMetadata: InstanceMetadata; - InstantiateRequest: InstantiateRequest; - InstantiateRequestV1: InstantiateRequestV1; - InstantiateRequestV2: InstantiateRequestV2; - InstantiateReturnValue: InstantiateReturnValue; - InstantiateReturnValueOk: InstantiateReturnValueOk; - InstantiateReturnValueTo267: InstantiateReturnValueTo267; - InstructionV2: InstructionV2; - InstructionWeights: InstructionWeights; - InteriorMultiLocation: InteriorMultiLocation; - InvalidDisputeStatementKind: InvalidDisputeStatementKind; - InvalidTransaction: InvalidTransaction; - isize: isize; - ISize: ISize; - Json: Json; - Junction: Junction; - Junctions: Junctions; - JunctionsV1: JunctionsV1; - JunctionsV2: JunctionsV2; - JunctionV0: JunctionV0; - JunctionV1: JunctionV1; - JunctionV2: JunctionV2; - Justification: Justification; - JustificationNotification: JustificationNotification; - Justifications: Justifications; - Key: Key; - KeyOwnerProof: KeyOwnerProof; - Keys: Keys; - KeyType: KeyType; - KeyTypeId: KeyTypeId; - KeyValue: KeyValue; - KeyValueOption: KeyValueOption; - Kind: Kind; - LaneId: LaneId; - LastContribution: LastContribution; - LastRuntimeUpgradeInfo: LastRuntimeUpgradeInfo; - LeasePeriod: LeasePeriod; - LeasePeriodOf: LeasePeriodOf; - LegacyTransaction: LegacyTransaction; - Limits: Limits; - LimitsTo264: LimitsTo264; - LocalValidationData: LocalValidationData; - LockIdentifier: LockIdentifier; - LookupSource: LookupSource; - LookupTarget: LookupTarget; - LotteryConfig: LotteryConfig; - MaybeRandomness: MaybeRandomness; - MaybeVrf: MaybeVrf; - MemberCount: MemberCount; - MembershipProof: MembershipProof; - MessageData: MessageData; - MessageId: MessageId; - MessageIngestionType: MessageIngestionType; - MessageKey: MessageKey; - MessageNonce: MessageNonce; - MessageQueueChain: MessageQueueChain; - MessagesDeliveryProofOf: MessagesDeliveryProofOf; - MessagesProofOf: MessagesProofOf; - MessagingStateSnapshot: MessagingStateSnapshot; - MessagingStateSnapshotEgressEntry: MessagingStateSnapshotEgressEntry; - MetadataAll: MetadataAll; - MetadataLatest: MetadataLatest; - MetadataV10: MetadataV10; - MetadataV11: MetadataV11; - MetadataV12: MetadataV12; - MetadataV13: MetadataV13; - MetadataV14: MetadataV14; - MetadataV15: MetadataV15; - MetadataV9: MetadataV9; - MigrationStatusResult: MigrationStatusResult; - MmrBatchProof: MmrBatchProof; - MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; - MmrError: MmrError; - MmrHash: MmrHash; - MmrLeafBatchProof: MmrLeafBatchProof; - MmrLeafIndex: MmrLeafIndex; - MmrLeafProof: MmrLeafProof; - MmrNodeIndex: MmrNodeIndex; - MmrProof: MmrProof; - MmrRootHash: MmrRootHash; - ModuleConstantMetadataV10: ModuleConstantMetadataV10; - ModuleConstantMetadataV11: ModuleConstantMetadataV11; - ModuleConstantMetadataV12: ModuleConstantMetadataV12; - ModuleConstantMetadataV13: ModuleConstantMetadataV13; - ModuleConstantMetadataV9: ModuleConstantMetadataV9; - ModuleId: ModuleId; - ModuleMetadataV10: ModuleMetadataV10; - ModuleMetadataV11: ModuleMetadataV11; - ModuleMetadataV12: ModuleMetadataV12; - ModuleMetadataV13: ModuleMetadataV13; - ModuleMetadataV9: ModuleMetadataV9; - Moment: Moment; - MomentOf: MomentOf; - MoreAttestations: MoreAttestations; - MortalEra: MortalEra; - MultiAddress: MultiAddress; - MultiAsset: MultiAsset; - MultiAssetFilter: MultiAssetFilter; - MultiAssetFilterV1: MultiAssetFilterV1; - MultiAssetFilterV2: MultiAssetFilterV2; - MultiAssets: MultiAssets; - MultiAssetsV1: MultiAssetsV1; - MultiAssetsV2: MultiAssetsV2; - MultiAssetV0: MultiAssetV0; - MultiAssetV1: MultiAssetV1; - MultiAssetV2: MultiAssetV2; - MultiDisputeStatementSet: MultiDisputeStatementSet; - MultiLocation: MultiLocation; - MultiLocationV0: MultiLocationV0; - MultiLocationV1: MultiLocationV1; - MultiLocationV2: MultiLocationV2; - Multiplier: Multiplier; - Multisig: Multisig; - MultiSignature: MultiSignature; - MultiSigner: MultiSigner; - NetworkId: NetworkId; - NetworkState: NetworkState; - NetworkStatePeerset: NetworkStatePeerset; - NetworkStatePeersetInfo: NetworkStatePeersetInfo; - NewBidder: NewBidder; - NextAuthority: NextAuthority; - NextConfigDescriptor: NextConfigDescriptor; - NextConfigDescriptorV1: NextConfigDescriptorV1; - NftCollectionId: NftCollectionId; - NftItemId: NftItemId; - NodeRole: NodeRole; - Nominations: Nominations; - NominatorIndex: NominatorIndex; - NominatorIndexCompact: NominatorIndexCompact; - NotConnectedPeer: NotConnectedPeer; - NpApiError: NpApiError; - NpPoolId: NpPoolId; - Null: Null; - OccupiedCore: OccupiedCore; - OccupiedCoreAssumption: OccupiedCoreAssumption; - OffchainAccuracy: OffchainAccuracy; - OffchainAccuracyCompact: OffchainAccuracyCompact; - OffenceDetails: OffenceDetails; - Offender: Offender; - OldV1SessionInfo: OldV1SessionInfo; - OpaqueCall: OpaqueCall; - OpaqueKeyOwnershipProof: OpaqueKeyOwnershipProof; - OpaqueMetadata: OpaqueMetadata; - OpaqueMultiaddr: OpaqueMultiaddr; - OpaqueNetworkState: OpaqueNetworkState; - OpaquePeerId: OpaquePeerId; - OpaqueTimeSlot: OpaqueTimeSlot; - OpenTip: OpenTip; - OpenTipFinderTo225: OpenTipFinderTo225; - OpenTipTip: OpenTipTip; - OpenTipTo225: OpenTipTo225; - OperatingMode: OperatingMode; - OptionBool: OptionBool; - Origin: Origin; - OriginCaller: OriginCaller; - OriginKindV0: OriginKindV0; - OriginKindV1: OriginKindV1; - OriginKindV2: OriginKindV2; - OutboundHrmpMessage: OutboundHrmpMessage; - OutboundLaneData: OutboundLaneData; - OutboundMessageFee: OutboundMessageFee; - OutboundPayload: OutboundPayload; - OutboundStatus: OutboundStatus; - Outcome: Outcome; - OuterEnums15: OuterEnums15; - OverweightIndex: OverweightIndex; - Owner: Owner; - PageCounter: PageCounter; - PageIndexData: PageIndexData; - PalletCallMetadataLatest: PalletCallMetadataLatest; - PalletCallMetadataV14: PalletCallMetadataV14; - PalletConstantMetadataLatest: PalletConstantMetadataLatest; - PalletConstantMetadataV14: PalletConstantMetadataV14; - PalletErrorMetadataLatest: PalletErrorMetadataLatest; - PalletErrorMetadataV14: PalletErrorMetadataV14; - PalletEventMetadataLatest: PalletEventMetadataLatest; - PalletEventMetadataV14: PalletEventMetadataV14; - PalletId: PalletId; - PalletMetadataLatest: PalletMetadataLatest; - PalletMetadataV14: PalletMetadataV14; - PalletMetadataV15: PalletMetadataV15; - PalletsOrigin: PalletsOrigin; - PalletStorageMetadataLatest: PalletStorageMetadataLatest; - PalletStorageMetadataV14: PalletStorageMetadataV14; - PalletVersion: PalletVersion; - ParachainDispatchOrigin: ParachainDispatchOrigin; - ParachainInherentData: ParachainInherentData; - ParachainProposal: ParachainProposal; - ParachainsInherentData: ParachainsInherentData; - ParaGenesisArgs: ParaGenesisArgs; - ParaId: ParaId; - ParaInfo: ParaInfo; - ParaLifecycle: ParaLifecycle; - Parameter: Parameter; - ParaPastCodeMeta: ParaPastCodeMeta; - ParaScheduling: ParaScheduling; - ParathreadClaim: ParathreadClaim; - ParathreadClaimQueue: ParathreadClaimQueue; - ParathreadEntry: ParathreadEntry; - ParaValidatorIndex: ParaValidatorIndex; - Pays: Pays; - Peer: Peer; - PeerEndpoint: PeerEndpoint; - PeerEndpointAddr: PeerEndpointAddr; - PeerInfo: PeerInfo; - PeerPing: PeerPing; - PendingChange: PendingChange; - PendingPause: PendingPause; - PendingResume: PendingResume; - PendingSlashes: PendingSlashes; - Perbill: Perbill; - Percent: Percent; - PerDispatchClassU32: PerDispatchClassU32; - PerDispatchClassWeight: PerDispatchClassWeight; - PerDispatchClassWeightsPerClass: PerDispatchClassWeightsPerClass; - Period: Period; - Permill: Permill; - PermissionLatest: PermissionLatest; - PermissionsV1: PermissionsV1; - PermissionVersions: PermissionVersions; - Perquintill: Perquintill; - PersistedValidationData: PersistedValidationData; - PerU16: PerU16; - Phantom: Phantom; - PhantomData: PhantomData; - Phase: Phase; - PhragmenScore: PhragmenScore; - Points: Points; - PortableType: PortableType; - PortableTypeV14: PortableTypeV14; - Precommits: Precommits; - PrefabWasmModule: PrefabWasmModule; - PrefixedStorageKey: PrefixedStorageKey; - PreimageStatus: PreimageStatus; - PreimageStatusAvailable: PreimageStatusAvailable; - PreRuntime: PreRuntime; - Prevotes: Prevotes; - Priority: Priority; - PriorLock: PriorLock; - PropIndex: PropIndex; - Proposal: Proposal; - ProposalIndex: ProposalIndex; - ProxyAnnouncement: ProxyAnnouncement; - ProxyDefinition: ProxyDefinition; - ProxyState: ProxyState; - ProxyType: ProxyType; - PvfCheckStatement: PvfCheckStatement; - PvfExecTimeoutKind: PvfExecTimeoutKind; - PvfPrepTimeoutKind: PvfPrepTimeoutKind; - QueryId: QueryId; - QueryStatus: QueryStatus; - QueueConfigData: QueueConfigData; - QueuedParathread: QueuedParathread; - Randomness: Randomness; - Raw: Raw; - RawAuraPreDigest: RawAuraPreDigest; - RawBabePreDigest: RawBabePreDigest; - RawBabePreDigestCompat: RawBabePreDigestCompat; - RawBabePreDigestPrimary: RawBabePreDigestPrimary; - RawBabePreDigestPrimaryTo159: RawBabePreDigestPrimaryTo159; - RawBabePreDigestSecondaryPlain: RawBabePreDigestSecondaryPlain; - RawBabePreDigestSecondaryTo159: RawBabePreDigestSecondaryTo159; - RawBabePreDigestSecondaryVRF: RawBabePreDigestSecondaryVRF; - RawBabePreDigestTo159: RawBabePreDigestTo159; - RawOrigin: RawOrigin; - RawSolution: RawSolution; - RawSolutionTo265: RawSolutionTo265; - RawSolutionWith16: RawSolutionWith16; - RawSolutionWith24: RawSolutionWith24; - RawVRFOutput: RawVRFOutput; - ReadProof: ReadProof; - ReadySolution: ReadySolution; - Reasons: Reasons; - RecoveryConfig: RecoveryConfig; - RefCount: RefCount; - RefCountTo259: RefCountTo259; - ReferendumIndex: ReferendumIndex; - ReferendumInfo: ReferendumInfo; - ReferendumInfoFinished: ReferendumInfoFinished; - ReferendumInfoTo239: ReferendumInfoTo239; - ReferendumStatus: ReferendumStatus; - RegisteredParachainInfo: RegisteredParachainInfo; - RegistrarIndex: RegistrarIndex; - RegistrarInfo: RegistrarInfo; - Registration: Registration; - RegistrationJudgement: RegistrationJudgement; - RegistrationTo198: RegistrationTo198; - RelayBlockNumber: RelayBlockNumber; - RelayChainBlockNumber: RelayChainBlockNumber; - RelayChainHash: RelayChainHash; - RelayerId: RelayerId; - RelayHash: RelayHash; - Releases: Releases; - Remark: Remark; - Renouncing: Renouncing; - RentProjection: RentProjection; - ReplacementTimes: ReplacementTimes; - ReportedRoundStates: ReportedRoundStates; - Reporter: Reporter; - ReportIdOf: ReportIdOf; - ReserveData: ReserveData; - ReserveIdentifier: ReserveIdentifier; - Response: Response; - ResponseV0: ResponseV0; - ResponseV1: ResponseV1; - ResponseV2: ResponseV2; - ResponseV2Error: ResponseV2Error; - ResponseV2Result: ResponseV2Result; - Retriable: Retriable; - RewardDestination: RewardDestination; - RewardPoint: RewardPoint; - RoundSnapshot: RoundSnapshot; - RoundState: RoundState; - RpcMethods: RpcMethods; - RuntimeApiMetadataLatest: RuntimeApiMetadataLatest; - RuntimeApiMetadataV15: RuntimeApiMetadataV15; - RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15; - RuntimeApiMethodParamMetadataV15: RuntimeApiMethodParamMetadataV15; - RuntimeCall: RuntimeCall; - RuntimeDbWeight: RuntimeDbWeight; - RuntimeDispatchInfo: RuntimeDispatchInfo; - RuntimeDispatchInfoV1: RuntimeDispatchInfoV1; - RuntimeDispatchInfoV2: RuntimeDispatchInfoV2; - RuntimeEvent: RuntimeEvent; - RuntimeVersion: RuntimeVersion; - RuntimeVersionApi: RuntimeVersionApi; - RuntimeVersionPartial: RuntimeVersionPartial; - RuntimeVersionPre3: RuntimeVersionPre3; - RuntimeVersionPre4: RuntimeVersionPre4; - Schedule: Schedule; - Scheduled: Scheduled; - ScheduledCore: ScheduledCore; - ScheduledTo254: ScheduledTo254; - SchedulePeriod: SchedulePeriod; - SchedulePriority: SchedulePriority; - ScheduleTo212: ScheduleTo212; - ScheduleTo258: ScheduleTo258; - ScheduleTo264: ScheduleTo264; - Scheduling: Scheduling; - ScrapedOnChainVotes: ScrapedOnChainVotes; - Seal: Seal; - SealV0: SealV0; - SeatHolder: SeatHolder; - SeedOf: SeedOf; - ServiceQuality: ServiceQuality; - SessionIndex: SessionIndex; - SessionInfo: SessionInfo; - SessionInfoValidatorGroup: SessionInfoValidatorGroup; - SessionKeys1: SessionKeys1; - SessionKeys10: SessionKeys10; - SessionKeys10B: SessionKeys10B; - SessionKeys2: SessionKeys2; - SessionKeys3: SessionKeys3; - SessionKeys4: SessionKeys4; - SessionKeys5: SessionKeys5; - SessionKeys6: SessionKeys6; - SessionKeys6B: SessionKeys6B; - SessionKeys7: SessionKeys7; - SessionKeys7B: SessionKeys7B; - SessionKeys8: SessionKeys8; - SessionKeys8B: SessionKeys8B; - SessionKeys9: SessionKeys9; - SessionKeys9B: SessionKeys9B; - SetId: SetId; - SetIndex: SetIndex; - Si0Field: Si0Field; - Si0LookupTypeId: Si0LookupTypeId; - Si0Path: Si0Path; - Si0Type: Si0Type; - Si0TypeDef: Si0TypeDef; - Si0TypeDefArray: Si0TypeDefArray; - Si0TypeDefBitSequence: Si0TypeDefBitSequence; - Si0TypeDefCompact: Si0TypeDefCompact; - Si0TypeDefComposite: Si0TypeDefComposite; - Si0TypeDefPhantom: Si0TypeDefPhantom; - Si0TypeDefPrimitive: Si0TypeDefPrimitive; - Si0TypeDefSequence: Si0TypeDefSequence; - Si0TypeDefTuple: Si0TypeDefTuple; - Si0TypeDefVariant: Si0TypeDefVariant; - Si0TypeParameter: Si0TypeParameter; - Si0Variant: Si0Variant; - Si1Field: Si1Field; - Si1LookupTypeId: Si1LookupTypeId; - Si1Path: Si1Path; - Si1Type: Si1Type; - Si1TypeDef: Si1TypeDef; - Si1TypeDefArray: Si1TypeDefArray; - Si1TypeDefBitSequence: Si1TypeDefBitSequence; - Si1TypeDefCompact: Si1TypeDefCompact; - Si1TypeDefComposite: Si1TypeDefComposite; - Si1TypeDefPrimitive: Si1TypeDefPrimitive; - Si1TypeDefSequence: Si1TypeDefSequence; - Si1TypeDefTuple: Si1TypeDefTuple; - Si1TypeDefVariant: Si1TypeDefVariant; - Si1TypeParameter: Si1TypeParameter; - Si1Variant: Si1Variant; - SiField: SiField; - Signature: Signature; - SignedAvailabilityBitfield: SignedAvailabilityBitfield; - SignedAvailabilityBitfields: SignedAvailabilityBitfields; - SignedBlock: SignedBlock; - SignedBlockWithJustification: SignedBlockWithJustification; - SignedBlockWithJustifications: SignedBlockWithJustifications; - SignedExtensionMetadataLatest: SignedExtensionMetadataLatest; - SignedExtensionMetadataV14: SignedExtensionMetadataV14; - SignedSubmission: SignedSubmission; - SignedSubmissionOf: SignedSubmissionOf; - SignedSubmissionTo276: SignedSubmissionTo276; - SignerPayload: SignerPayload; - SigningContext: SigningContext; - SiLookupTypeId: SiLookupTypeId; - SiPath: SiPath; - SiType: SiType; - SiTypeDef: SiTypeDef; - SiTypeDefArray: SiTypeDefArray; - SiTypeDefBitSequence: SiTypeDefBitSequence; - SiTypeDefCompact: SiTypeDefCompact; - SiTypeDefComposite: SiTypeDefComposite; - SiTypeDefPrimitive: SiTypeDefPrimitive; - SiTypeDefSequence: SiTypeDefSequence; - SiTypeDefTuple: SiTypeDefTuple; - SiTypeDefVariant: SiTypeDefVariant; - SiTypeParameter: SiTypeParameter; - SiVariant: SiVariant; - SlashingOffenceKind: SlashingOffenceKind; - SlashingSpans: SlashingSpans; - SlashingSpansTo204: SlashingSpansTo204; - SlashJournalEntry: SlashJournalEntry; - Slot: Slot; - SlotDuration: SlotDuration; - SlotNumber: SlotNumber; - SlotRange: SlotRange; - SlotRange10: SlotRange10; - SocietyJudgement: SocietyJudgement; - SocietyVote: SocietyVote; - SolutionOrSnapshotSize: SolutionOrSnapshotSize; - SolutionSupport: SolutionSupport; - SolutionSupports: SolutionSupports; - SpanIndex: SpanIndex; - SpanRecord: SpanRecord; - SpecVersion: SpecVersion; - Sr25519Signature: Sr25519Signature; - StakingLedger: StakingLedger; - StakingLedgerTo223: StakingLedgerTo223; - StakingLedgerTo240: StakingLedgerTo240; - Statement: Statement; - StatementKind: StatementKind; - StorageChangeSet: StorageChangeSet; - StorageData: StorageData; - StorageDeposit: StorageDeposit; - StorageEntryMetadataLatest: StorageEntryMetadataLatest; - StorageEntryMetadataV10: StorageEntryMetadataV10; - StorageEntryMetadataV11: StorageEntryMetadataV11; - StorageEntryMetadataV12: StorageEntryMetadataV12; - StorageEntryMetadataV13: StorageEntryMetadataV13; - StorageEntryMetadataV14: StorageEntryMetadataV14; - StorageEntryMetadataV9: StorageEntryMetadataV9; - StorageEntryModifierLatest: StorageEntryModifierLatest; - StorageEntryModifierV10: StorageEntryModifierV10; - StorageEntryModifierV11: StorageEntryModifierV11; - StorageEntryModifierV12: StorageEntryModifierV12; - StorageEntryModifierV13: StorageEntryModifierV13; - StorageEntryModifierV14: StorageEntryModifierV14; - StorageEntryModifierV9: StorageEntryModifierV9; - StorageEntryTypeLatest: StorageEntryTypeLatest; - StorageEntryTypeV10: StorageEntryTypeV10; - StorageEntryTypeV11: StorageEntryTypeV11; - StorageEntryTypeV12: StorageEntryTypeV12; - StorageEntryTypeV13: StorageEntryTypeV13; - StorageEntryTypeV14: StorageEntryTypeV14; - StorageEntryTypeV9: StorageEntryTypeV9; - StorageHasher: StorageHasher; - StorageHasherV10: StorageHasherV10; - StorageHasherV11: StorageHasherV11; - StorageHasherV12: StorageHasherV12; - StorageHasherV13: StorageHasherV13; - StorageHasherV14: StorageHasherV14; - StorageHasherV9: StorageHasherV9; - StorageInfo: StorageInfo; - StorageKey: StorageKey; - StorageKind: StorageKind; - StorageMetadataV10: StorageMetadataV10; - StorageMetadataV11: StorageMetadataV11; - StorageMetadataV12: StorageMetadataV12; - StorageMetadataV13: StorageMetadataV13; - StorageMetadataV9: StorageMetadataV9; - StorageProof: StorageProof; - StoredPendingChange: StoredPendingChange; - StoredState: StoredState; - StrikeCount: StrikeCount; - SubId: SubId; - SubmissionIndicesOf: SubmissionIndicesOf; - Supports: Supports; - SyncState: SyncState; - SystemInherentData: SystemInherentData; - SystemOrigin: SystemOrigin; - Tally: Tally; - TaskAddress: TaskAddress; - TAssetBalance: TAssetBalance; - TAssetConversion: TAssetConversion; - TAssetDepositBalance: TAssetDepositBalance; - Text: Text; - Timepoint: Timepoint; - TokenError: TokenError; - TombstoneContractInfo: TombstoneContractInfo; - TraceBlockResponse: TraceBlockResponse; - TraceError: TraceError; - TransactionalError: TransactionalError; - TransactionInfo: TransactionInfo; - TransactionLongevity: TransactionLongevity; - TransactionPriority: TransactionPriority; - TransactionSource: TransactionSource; - TransactionStorageProof: TransactionStorageProof; - TransactionTag: TransactionTag; - TransactionV0: TransactionV0; - TransactionV1: TransactionV1; - TransactionV2: TransactionV2; - TransactionValidity: TransactionValidity; - TransactionValidityError: TransactionValidityError; - TransientValidationData: TransientValidationData; - TreasuryProposal: TreasuryProposal; - TrieId: TrieId; - TrieIndex: TrieIndex; - Type: Type; - u128: u128; - U128: U128; - u16: u16; - U16: U16; - u256: u256; - U256: U256; - u32: u32; - U32: U32; - U32F32: U32F32; - u64: u64; - U64: U64; - u8: u8; - U8: U8; - UnappliedSlash: UnappliedSlash; - UnappliedSlashOther: UnappliedSlashOther; - UncleEntryItem: UncleEntryItem; - UnknownTransaction: UnknownTransaction; - UnlockChunk: UnlockChunk; - UnrewardedRelayer: UnrewardedRelayer; - UnrewardedRelayersState: UnrewardedRelayersState; - UpgradeGoAhead: UpgradeGoAhead; - UpgradeRestriction: UpgradeRestriction; - UpwardMessage: UpwardMessage; - usize: usize; - USize: USize; - ValidationCode: ValidationCode; - ValidationCodeHash: ValidationCodeHash; - ValidationData: ValidationData; - ValidationDataType: ValidationDataType; - ValidationFunctionParams: ValidationFunctionParams; - ValidatorCount: ValidatorCount; - ValidatorId: ValidatorId; - ValidatorIdOf: ValidatorIdOf; - ValidatorIndex: ValidatorIndex; - ValidatorIndexCompact: ValidatorIndexCompact; - ValidatorPrefs: ValidatorPrefs; - ValidatorPrefsTo145: ValidatorPrefsTo145; - ValidatorPrefsTo196: ValidatorPrefsTo196; - ValidatorPrefsWithBlocked: ValidatorPrefsWithBlocked; - ValidatorPrefsWithCommission: ValidatorPrefsWithCommission; - ValidatorSet: ValidatorSet; - ValidatorSetId: ValidatorSetId; - ValidatorSignature: ValidatorSignature; - ValidDisputeStatementKind: ValidDisputeStatementKind; - ValidityAttestation: ValidityAttestation; - ValidTransaction: ValidTransaction; - VecInboundHrmpMessage: VecInboundHrmpMessage; - VersionedMultiAsset: VersionedMultiAsset; - VersionedMultiAssets: VersionedMultiAssets; - VersionedMultiLocation: VersionedMultiLocation; - VersionedResponse: VersionedResponse; - VersionedXcm: VersionedXcm; - VersionMigrationStage: VersionMigrationStage; - VestingInfo: VestingInfo; - VestingSchedule: VestingSchedule; - Vote: Vote; - VoteIndex: VoteIndex; - Voter: Voter; - VoterInfo: VoterInfo; - Votes: Votes; - VotesTo230: VotesTo230; - VoteThreshold: VoteThreshold; - VoteWeight: VoteWeight; - Voting: Voting; - VotingDelegating: VotingDelegating; - VotingDirect: VotingDirect; - VotingDirectVote: VotingDirectVote; - VouchingStatus: VouchingStatus; - VrfData: VrfData; - VrfOutput: VrfOutput; - VrfProof: VrfProof; - Weight: Weight; - WeightLimitV2: WeightLimitV2; - WeightMultiplier: WeightMultiplier; - WeightPerClass: WeightPerClass; - WeightToFeeCoefficient: WeightToFeeCoefficient; - WeightV0: WeightV0; - WeightV1: WeightV1; - WeightV2: WeightV2; - WildFungibility: WildFungibility; - WildFungibilityV0: WildFungibilityV0; - WildFungibilityV1: WildFungibilityV1; - WildFungibilityV2: WildFungibilityV2; - WildMultiAsset: WildMultiAsset; - WildMultiAssetV1: WildMultiAssetV1; - WildMultiAssetV2: WildMultiAssetV2; - WinnersData: WinnersData; - WinnersData10: WinnersData10; - WinnersDataTuple: WinnersDataTuple; - WinnersDataTuple10: WinnersDataTuple10; - WinningData: WinningData; - WinningData10: WinningData10; - WinningDataEntry: WinningDataEntry; - WithdrawReasons: WithdrawReasons; - Xcm: Xcm; - XcmAssetId: XcmAssetId; - XcmError: XcmError; - XcmErrorV0: XcmErrorV0; - XcmErrorV1: XcmErrorV1; - XcmErrorV2: XcmErrorV2; - XcmOrder: XcmOrder; - XcmOrderV0: XcmOrderV0; - XcmOrderV1: XcmOrderV1; - XcmOrderV2: XcmOrderV2; - XcmOrigin: XcmOrigin; - XcmOriginKind: XcmOriginKind; - XcmpMessageFormat: XcmpMessageFormat; - XcmV0: XcmV0; - XcmV1: XcmV1; - XcmV2: XcmV2; - XcmVersion: XcmVersion; - } // InterfaceTypes -} // declare module diff --git a/typescript-api/src/dancebox/interfaces/definitions.ts b/typescript-api/src/dancebox/interfaces/definitions.ts deleted file mode 100644 index b13302d..0000000 --- a/typescript-api/src/dancebox/interfaces/definitions.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as tanssi } from "./tanssi/definitions"; diff --git a/typescript-api/src/dancebox/interfaces/index.ts b/typescript-api/src/dancebox/interfaces/index.ts deleted file mode 100644 index 58fa3ba..0000000 --- a/typescript-api/src/dancebox/interfaces/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -export * from "./types.js"; diff --git a/typescript-api/src/dancebox/interfaces/lookup.ts b/typescript-api/src/dancebox/interfaces/lookup.ts deleted file mode 100644 index 3c583e4..0000000 --- a/typescript-api/src/dancebox/interfaces/lookup.ts +++ /dev/null @@ -1,4146 +0,0 @@ -// Auto-generated via `yarn polkadot-types-from-defs`, do not edit -/* eslint-disable */ - -/* eslint-disable sort-keys */ - -export default { - /** Lookup3: frame_system::AccountInfo> */ - FrameSystemAccountInfo: { - nonce: "u32", - consumers: "u32", - providers: "u32", - sufficients: "u32", - data: "PalletBalancesAccountData", - }, - /** Lookup5: pallet_balances::types::AccountData */ - PalletBalancesAccountData: { - free: "u128", - reserved: "u128", - frozen: "u128", - flags: "u128", - }, - /** Lookup8: frame_support::dispatch::PerDispatchClass */ - FrameSupportDispatchPerDispatchClassWeight: { - normal: "SpWeightsWeightV2Weight", - operational: "SpWeightsWeightV2Weight", - mandatory: "SpWeightsWeightV2Weight", - }, - /** Lookup9: sp_weights::weight_v2::Weight */ - SpWeightsWeightV2Weight: { - refTime: "Compact", - proofSize: "Compact", - }, - /** Lookup14: sp_runtime::generic::digest::Digest */ - SpRuntimeDigest: { - logs: "Vec", - }, - /** Lookup16: sp_runtime::generic::digest::DigestItem */ - SpRuntimeDigestDigestItem: { - _enum: { - Other: "Bytes", - __Unused1: "Null", - __Unused2: "Null", - __Unused3: "Null", - Consensus: "([u8;4],Bytes)", - Seal: "([u8;4],Bytes)", - PreRuntime: "([u8;4],Bytes)", - __Unused7: "Null", - RuntimeEnvironmentUpdated: "Null", - }, - }, - /** Lookup19: frame_system::EventRecord */ - FrameSystemEventRecord: { - phase: "FrameSystemPhase", - event: "Event", - topics: "Vec", - }, - /** Lookup21: frame_system::pallet::Event */ - FrameSystemEvent: { - _enum: { - ExtrinsicSuccess: { - dispatchInfo: "FrameSupportDispatchDispatchInfo", - }, - ExtrinsicFailed: { - dispatchError: "SpRuntimeDispatchError", - dispatchInfo: "FrameSupportDispatchDispatchInfo", - }, - CodeUpdated: "Null", - NewAccount: { - account: "AccountId32", - }, - KilledAccount: { - account: "AccountId32", - }, - Remarked: { - _alias: { - hash_: "hash", - }, - sender: "AccountId32", - hash_: "H256", - }, - UpgradeAuthorized: { - codeHash: "H256", - checkVersion: "bool", - }, - }, - }, - /** Lookup22: frame_support::dispatch::DispatchInfo */ - FrameSupportDispatchDispatchInfo: { - weight: "SpWeightsWeightV2Weight", - class: "FrameSupportDispatchDispatchClass", - paysFee: "FrameSupportDispatchPays", - }, - /** Lookup23: frame_support::dispatch::DispatchClass */ - FrameSupportDispatchDispatchClass: { - _enum: ["Normal", "Operational", "Mandatory"], - }, - /** Lookup24: frame_support::dispatch::Pays */ - FrameSupportDispatchPays: { - _enum: ["Yes", "No"], - }, - /** Lookup25: sp_runtime::DispatchError */ - SpRuntimeDispatchError: { - _enum: { - Other: "Null", - CannotLookup: "Null", - BadOrigin: "Null", - Module: "SpRuntimeModuleError", - ConsumerRemaining: "Null", - NoProviders: "Null", - TooManyConsumers: "Null", - Token: "SpRuntimeTokenError", - Arithmetic: "SpArithmeticArithmeticError", - Transactional: "SpRuntimeTransactionalError", - Exhausted: "Null", - Corruption: "Null", - Unavailable: "Null", - RootNotAllowed: "Null", - }, - }, - /** Lookup26: sp_runtime::ModuleError */ - SpRuntimeModuleError: { - index: "u8", - error: "[u8;4]", - }, - /** Lookup27: sp_runtime::TokenError */ - SpRuntimeTokenError: { - _enum: [ - "FundsUnavailable", - "OnlyProvider", - "BelowMinimum", - "CannotCreate", - "UnknownAsset", - "Frozen", - "Unsupported", - "CannotCreateHold", - "NotExpendable", - "Blocked", - ], - }, - /** Lookup28: sp_arithmetic::ArithmeticError */ - SpArithmeticArithmeticError: { - _enum: ["Underflow", "Overflow", "DivisionByZero"], - }, - /** Lookup29: sp_runtime::TransactionalError */ - SpRuntimeTransactionalError: { - _enum: ["LimitReached", "NoLayer"], - }, - /** Lookup31: cumulus_pallet_parachain_system::pallet::Event */ - CumulusPalletParachainSystemEvent: { - _enum: { - ValidationFunctionStored: "Null", - ValidationFunctionApplied: { - relayChainBlockNum: "u32", - }, - ValidationFunctionDiscarded: "Null", - DownwardMessagesReceived: { - count: "u32", - }, - DownwardMessagesProcessed: { - weightUsed: "SpWeightsWeightV2Weight", - dmqHead: "H256", - }, - UpwardMessageSent: { - messageHash: "Option<[u8;32]>", - }, - }, - }, - /** Lookup33: pallet_sudo::pallet::Event */ - PalletSudoEvent: { - _enum: { - Sudid: { - sudoResult: "Result", - }, - KeyChanged: { - _alias: { - new_: "new", - }, - old: "Option", - new_: "AccountId32", - }, - KeyRemoved: "Null", - SudoAsDone: { - sudoResult: "Result", - }, - }, - }, - /** Lookup37: pallet_utility::pallet::Event */ - PalletUtilityEvent: { - _enum: { - BatchInterrupted: { - index: "u32", - error: "SpRuntimeDispatchError", - }, - BatchCompleted: "Null", - BatchCompletedWithErrors: "Null", - ItemCompleted: "Null", - ItemFailed: { - error: "SpRuntimeDispatchError", - }, - DispatchedAs: { - result: "Result", - }, - }, - }, - /** Lookup38: pallet_proxy::pallet::Event */ - PalletProxyEvent: { - _enum: { - ProxyExecuted: { - result: "Result", - }, - PureCreated: { - pure: "AccountId32", - who: "AccountId32", - proxyType: "DanceboxRuntimeProxyType", - disambiguationIndex: "u16", - }, - Announced: { - real: "AccountId32", - proxy: "AccountId32", - callHash: "H256", - }, - ProxyAdded: { - delegator: "AccountId32", - delegatee: "AccountId32", - proxyType: "DanceboxRuntimeProxyType", - delay: "u32", - }, - ProxyRemoved: { - delegator: "AccountId32", - delegatee: "AccountId32", - proxyType: "DanceboxRuntimeProxyType", - delay: "u32", - }, - }, - }, - /** Lookup39: dancebox_runtime::ProxyType */ - DanceboxRuntimeProxyType: { - _enum: [ - "Any", - "NonTransfer", - "Governance", - "Staking", - "CancelProxy", - "Balances", - "Registrar", - "SudoRegistrar", - "SessionKeyManagement", - ], - }, - /** Lookup41: pallet_migrations::pallet::Event */ - PalletMigrationsEvent: { - _enum: { - RuntimeUpgradeStarted: "Null", - RuntimeUpgradeCompleted: { - weight: "SpWeightsWeightV2Weight", - }, - MigrationStarted: { - migrationName: "Bytes", - }, - MigrationCompleted: { - migrationName: "Bytes", - consumedWeight: "SpWeightsWeightV2Weight", - }, - FailedToSuspendIdleXcmExecution: { - error: "SpRuntimeDispatchError", - }, - FailedToResumeIdleXcmExecution: { - error: "SpRuntimeDispatchError", - }, - }, - }, - /** Lookup42: pallet_maintenance_mode::pallet::Event */ - PalletMaintenanceModeEvent: { - _enum: { - EnteredMaintenanceMode: "Null", - NormalOperationResumed: "Null", - FailedToSuspendIdleXcmExecution: { - error: "SpRuntimeDispatchError", - }, - FailedToResumeIdleXcmExecution: { - error: "SpRuntimeDispatchError", - }, - }, - }, - /** Lookup43: pallet_tx_pause::pallet::Event */ - PalletTxPauseEvent: { - _enum: { - CallPaused: { - fullName: "(Bytes,Bytes)", - }, - CallUnpaused: { - fullName: "(Bytes,Bytes)", - }, - }, - }, - /** Lookup46: pallet_balances::pallet::Event */ - PalletBalancesEvent: { - _enum: { - Endowed: { - account: "AccountId32", - freeBalance: "u128", - }, - DustLost: { - account: "AccountId32", - amount: "u128", - }, - Transfer: { - from: "AccountId32", - to: "AccountId32", - amount: "u128", - }, - BalanceSet: { - who: "AccountId32", - free: "u128", - }, - Reserved: { - who: "AccountId32", - amount: "u128", - }, - Unreserved: { - who: "AccountId32", - amount: "u128", - }, - ReserveRepatriated: { - from: "AccountId32", - to: "AccountId32", - amount: "u128", - destinationStatus: "FrameSupportTokensMiscBalanceStatus", - }, - Deposit: { - who: "AccountId32", - amount: "u128", - }, - Withdraw: { - who: "AccountId32", - amount: "u128", - }, - Slashed: { - who: "AccountId32", - amount: "u128", - }, - Minted: { - who: "AccountId32", - amount: "u128", - }, - Burned: { - who: "AccountId32", - amount: "u128", - }, - Suspended: { - who: "AccountId32", - amount: "u128", - }, - Restored: { - who: "AccountId32", - amount: "u128", - }, - Upgraded: { - who: "AccountId32", - }, - Issued: { - amount: "u128", - }, - Rescinded: { - amount: "u128", - }, - Locked: { - who: "AccountId32", - amount: "u128", - }, - Unlocked: { - who: "AccountId32", - amount: "u128", - }, - Frozen: { - who: "AccountId32", - amount: "u128", - }, - Thawed: { - who: "AccountId32", - amount: "u128", - }, - }, - }, - /** Lookup47: frame_support::traits::tokens::misc::BalanceStatus */ - FrameSupportTokensMiscBalanceStatus: { - _enum: ["Free", "Reserved"], - }, - /** Lookup48: pallet_transaction_payment::pallet::Event */ - PalletTransactionPaymentEvent: { - _enum: { - TransactionFeePaid: { - who: "AccountId32", - actualFee: "u128", - tip: "u128", - }, - }, - }, - /** Lookup49: pallet_stream_payment::pallet::Event */ - PalletStreamPaymentEvent: { - _enum: { - StreamOpened: { - streamId: "u64", - }, - StreamClosed: { - streamId: "u64", - refunded: "u128", - }, - StreamPayment: { - streamId: "u64", - source: "AccountId32", - target: "AccountId32", - amount: "u128", - stalled: "bool", - }, - StreamConfigChangeRequested: { - streamId: "u64", - requestNonce: "u32", - requester: "PalletStreamPaymentParty", - oldConfig: "PalletStreamPaymentStreamConfig", - newConfig: "PalletStreamPaymentStreamConfig", - }, - StreamConfigChanged: { - streamId: "u64", - oldConfig: "PalletStreamPaymentStreamConfig", - newConfig: "PalletStreamPaymentStreamConfig", - depositChange: "Option", - }, - }, - }, - /** Lookup50: pallet_stream_payment::pallet::Party */ - PalletStreamPaymentParty: { - _enum: ["Source", "Target"], - }, - /** - * Lookup51: pallet_stream_payment::pallet::StreamConfig - */ - PalletStreamPaymentStreamConfig: { - timeUnit: "DanceboxRuntimeTimeUnit", - assetId: "DanceboxRuntimeStreamPaymentAssetId", - rate: "u128", - }, - /** Lookup52: dancebox_runtime::TimeUnit */ - DanceboxRuntimeTimeUnit: { - _enum: ["BlockNumber", "Timestamp"], - }, - /** Lookup53: dancebox_runtime::StreamPaymentAssetId */ - DanceboxRuntimeStreamPaymentAssetId: { - _enum: ["Native"], - }, - /** Lookup55: pallet_stream_payment::pallet::DepositChange */ - PalletStreamPaymentDepositChange: { - _enum: { - Increase: "u128", - Decrease: "u128", - Absolute: "u128", - }, - }, - /** Lookup56: pallet_identity::pallet::Event */ - PalletIdentityEvent: { - _enum: { - IdentitySet: { - who: "AccountId32", - }, - IdentityCleared: { - who: "AccountId32", - deposit: "u128", - }, - IdentityKilled: { - who: "AccountId32", - deposit: "u128", - }, - JudgementRequested: { - who: "AccountId32", - registrarIndex: "u32", - }, - JudgementUnrequested: { - who: "AccountId32", - registrarIndex: "u32", - }, - JudgementGiven: { - target: "AccountId32", - registrarIndex: "u32", - }, - RegistrarAdded: { - registrarIndex: "u32", - }, - SubIdentityAdded: { - sub: "AccountId32", - main: "AccountId32", - deposit: "u128", - }, - SubIdentityRemoved: { - sub: "AccountId32", - main: "AccountId32", - deposit: "u128", - }, - SubIdentityRevoked: { - sub: "AccountId32", - main: "AccountId32", - deposit: "u128", - }, - AuthorityAdded: { - authority: "AccountId32", - }, - AuthorityRemoved: { - authority: "AccountId32", - }, - UsernameSet: { - who: "AccountId32", - username: "Bytes", - }, - UsernameQueued: { - who: "AccountId32", - username: "Bytes", - expiration: "u32", - }, - PreapprovalExpired: { - whose: "AccountId32", - }, - PrimaryUsernameSet: { - who: "AccountId32", - username: "Bytes", - }, - DanglingUsernameRemoved: { - who: "AccountId32", - username: "Bytes", - }, - }, - }, - /** Lookup58: pallet_multisig::pallet::Event */ - PalletMultisigEvent: { - _enum: { - NewMultisig: { - approving: "AccountId32", - multisig: "AccountId32", - callHash: "[u8;32]", - }, - MultisigApproval: { - approving: "AccountId32", - timepoint: "PalletMultisigTimepoint", - multisig: "AccountId32", - callHash: "[u8;32]", - }, - MultisigExecuted: { - approving: "AccountId32", - timepoint: "PalletMultisigTimepoint", - multisig: "AccountId32", - callHash: "[u8;32]", - result: "Result", - }, - MultisigCancelled: { - cancelling: "AccountId32", - timepoint: "PalletMultisigTimepoint", - multisig: "AccountId32", - callHash: "[u8;32]", - }, - }, - }, - /** Lookup59: pallet_multisig::Timepoint */ - PalletMultisigTimepoint: { - height: "u32", - index: "u32", - }, - /** Lookup60: pallet_registrar::pallet::Event */ - PalletRegistrarEvent: { - _enum: { - ParaIdRegistered: { - paraId: "u32", - }, - ParaIdDeregistered: { - paraId: "u32", - }, - ParaIdValidForCollating: { - paraId: "u32", - }, - ParaIdPaused: { - paraId: "u32", - }, - ParaIdUnpaused: { - paraId: "u32", - }, - ParathreadParamsChanged: { - paraId: "u32", - }, - }, - }, - /** Lookup62: pallet_collator_assignment::pallet::Event */ - PalletCollatorAssignmentEvent: { - _enum: { - NewPendingAssignment: { - randomSeed: "[u8;32]", - fullRotation: "bool", - targetSession: "u32", - }, - }, - }, - /** Lookup63: pallet_author_noting::pallet::Event */ - PalletAuthorNotingEvent: { - _enum: { - LatestAuthorChanged: { - paraId: "u32", - blockNumber: "u32", - newAuthor: "AccountId32", - latestSlotNumber: "u64", - }, - RemovedAuthorData: { - paraId: "u32", - }, - }, - }, - /** Lookup65: pallet_services_payment::pallet::Event */ - PalletServicesPaymentEvent: { - _enum: { - CreditsPurchased: { - paraId: "u32", - payer: "AccountId32", - credit: "u128", - }, - BlockProductionCreditBurned: { - paraId: "u32", - creditsRemaining: "u32", - }, - CollatorAssignmentCreditBurned: { - paraId: "u32", - creditsRemaining: "u32", - }, - CollatorAssignmentTipCollected: { - paraId: "u32", - payer: "AccountId32", - tip: "u128", - }, - BlockProductionCreditsSet: { - paraId: "u32", - credits: "u32", - }, - RefundAddressUpdated: { - paraId: "u32", - refundAddress: "Option", - }, - MaxCorePriceUpdated: { - paraId: "u32", - maxCorePrice: "Option", - }, - CollatorAssignmentCreditsSet: { - paraId: "u32", - credits: "u32", - }, - }, - }, - /** Lookup67: pallet_data_preservers::pallet::Event */ - PalletDataPreserversEvent: { - _enum: { - BootNodesChanged: { - paraId: "u32", - }, - }, - }, - /** Lookup68: pallet_invulnerables::pallet::Event */ - PalletInvulnerablesEvent: { - _enum: { - NewInvulnerables: { - invulnerables: "Vec", - }, - InvulnerableAdded: { - accountId: "AccountId32", - }, - InvulnerableRemoved: { - accountId: "AccountId32", - }, - InvalidInvulnerableSkipped: { - accountId: "AccountId32", - }, - }, - }, - /** Lookup70: pallet_session::pallet::Event */ - PalletSessionEvent: { - _enum: { - NewSession: { - sessionIndex: "u32", - }, - }, - }, - /** Lookup71: pallet_pooled_staking::pallet::Event */ - PalletPooledStakingEvent: { - _enum: { - UpdatedCandidatePosition: { - candidate: "AccountId32", - stake: "u128", - selfDelegation: "u128", - before: "Option", - after: "Option", - }, - RequestedDelegate: { - candidate: "AccountId32", - delegator: "AccountId32", - pool: "PalletPooledStakingTargetPool", - pending: "u128", - }, - ExecutedDelegate: { - candidate: "AccountId32", - delegator: "AccountId32", - pool: "PalletPooledStakingTargetPool", - staked: "u128", - released: "u128", - }, - RequestedUndelegate: { - candidate: "AccountId32", - delegator: "AccountId32", - from: "PalletPooledStakingTargetPool", - pending: "u128", - released: "u128", - }, - ExecutedUndelegate: { - candidate: "AccountId32", - delegator: "AccountId32", - released: "u128", - }, - IncreasedStake: { - candidate: "AccountId32", - stakeDiff: "u128", - }, - DecreasedStake: { - candidate: "AccountId32", - stakeDiff: "u128", - }, - StakedAutoCompounding: { - candidate: "AccountId32", - delegator: "AccountId32", - shares: "u128", - stake: "u128", - }, - UnstakedAutoCompounding: { - candidate: "AccountId32", - delegator: "AccountId32", - shares: "u128", - stake: "u128", - }, - StakedManualRewards: { - candidate: "AccountId32", - delegator: "AccountId32", - shares: "u128", - stake: "u128", - }, - UnstakedManualRewards: { - candidate: "AccountId32", - delegator: "AccountId32", - shares: "u128", - stake: "u128", - }, - RewardedCollator: { - collator: "AccountId32", - autoCompoundingRewards: "u128", - manualClaimRewards: "u128", - }, - RewardedDelegators: { - collator: "AccountId32", - autoCompoundingRewards: "u128", - manualClaimRewards: "u128", - }, - ClaimedManualRewards: { - candidate: "AccountId32", - delegator: "AccountId32", - rewards: "u128", - }, - SwappedPool: { - candidate: "AccountId32", - delegator: "AccountId32", - sourcePool: "PalletPooledStakingTargetPool", - sourceShares: "u128", - sourceStake: "u128", - targetShares: "u128", - targetStake: "u128", - pendingLeaving: "u128", - released: "u128", - }, - }, - }, - /** Lookup73: pallet_pooled_staking::pallet::TargetPool */ - PalletPooledStakingTargetPool: { - _enum: ["AutoCompounding", "ManualRewards"], - }, - /** Lookup74: pallet_inflation_rewards::pallet::Event */ - PalletInflationRewardsEvent: { - _enum: { - RewardedOrchestrator: { - accountId: "AccountId32", - balance: "u128", - }, - RewardedContainer: { - accountId: "AccountId32", - paraId: "u32", - balance: "u128", - }, - }, - }, - /** Lookup75: pallet_treasury::pallet::Event */ - PalletTreasuryEvent: { - _enum: { - Proposed: { - proposalIndex: "u32", - }, - Spending: { - budgetRemaining: "u128", - }, - Awarded: { - proposalIndex: "u32", - award: "u128", - account: "AccountId32", - }, - Rejected: { - proposalIndex: "u32", - slashed: "u128", - }, - Burnt: { - burntFunds: "u128", - }, - Rollover: { - rolloverBalance: "u128", - }, - Deposit: { - value: "u128", - }, - SpendApproved: { - proposalIndex: "u32", - amount: "u128", - beneficiary: "AccountId32", - }, - UpdatedInactive: { - reactivated: "u128", - deactivated: "u128", - }, - AssetSpendApproved: { - index: "u32", - assetKind: "Null", - amount: "u128", - beneficiary: "AccountId32", - validFrom: "u32", - expireAt: "u32", - }, - AssetSpendVoided: { - index: "u32", - }, - Paid: { - index: "u32", - paymentId: "Null", - }, - PaymentFailed: { - index: "u32", - paymentId: "Null", - }, - SpendProcessed: { - index: "u32", - }, - }, - }, - /** Lookup76: cumulus_pallet_xcmp_queue::pallet::Event */ - CumulusPalletXcmpQueueEvent: { - _enum: { - XcmpMessageSent: { - messageHash: "[u8;32]", - }, - }, - }, - /** Lookup77: cumulus_pallet_xcm::pallet::Event */ - CumulusPalletXcmEvent: { - _enum: { - InvalidFormat: "[u8;32]", - UnsupportedVersion: "[u8;32]", - ExecutedDownward: "([u8;32],XcmV3TraitsOutcome)", - }, - }, - /** Lookup78: xcm::v3::traits::Outcome */ - XcmV3TraitsOutcome: { - _enum: { - Complete: "SpWeightsWeightV2Weight", - Incomplete: "(SpWeightsWeightV2Weight,XcmV3TraitsError)", - Error: "XcmV3TraitsError", - }, - }, - /** Lookup79: xcm::v3::traits::Error */ - XcmV3TraitsError: { - _enum: { - Overflow: "Null", - Unimplemented: "Null", - UntrustedReserveLocation: "Null", - UntrustedTeleportLocation: "Null", - LocationFull: "Null", - LocationNotInvertible: "Null", - BadOrigin: "Null", - InvalidLocation: "Null", - AssetNotFound: "Null", - FailedToTransactAsset: "Null", - NotWithdrawable: "Null", - LocationCannotHold: "Null", - ExceedsMaxMessageSize: "Null", - DestinationUnsupported: "Null", - Transport: "Null", - Unroutable: "Null", - UnknownClaim: "Null", - FailedToDecode: "Null", - MaxWeightInvalid: "Null", - NotHoldingFees: "Null", - TooExpensive: "Null", - Trap: "u64", - ExpectationFalse: "Null", - PalletNotFound: "Null", - NameMismatch: "Null", - VersionIncompatible: "Null", - HoldingWouldOverflow: "Null", - ExportError: "Null", - ReanchorFailed: "Null", - NoDeal: "Null", - FeesNotMet: "Null", - LockError: "Null", - NoPermission: "Null", - Unanchored: "Null", - NotDepositable: "Null", - UnhandledXcmVersion: "Null", - WeightLimitReached: "SpWeightsWeightV2Weight", - Barrier: "Null", - WeightNotComputable: "Null", - ExceedsStackLimit: "Null", - }, - }, - /** Lookup80: cumulus_pallet_dmp_queue::pallet::Event */ - CumulusPalletDmpQueueEvent: { - _enum: { - StartedExport: "Null", - Exported: { - page: "u32", - }, - ExportFailed: { - page: "u32", - }, - CompletedExport: "Null", - StartedOverweightExport: "Null", - ExportedOverweight: { - index: "u64", - }, - ExportOverweightFailed: { - index: "u64", - }, - CompletedOverweightExport: "Null", - StartedCleanup: "Null", - CleanedSome: { - keysRemoved: "u32", - }, - Completed: { - error: "bool", - }, - }, - }, - /** Lookup81: pallet_xcm::pallet::Event */ - PalletXcmEvent: { - _enum: { - Attempted: { - outcome: "XcmV3TraitsOutcome", - }, - Sent: { - origin: "StagingXcmV3MultiLocation", - destination: "StagingXcmV3MultiLocation", - message: "XcmV3Xcm", - messageId: "[u8;32]", - }, - UnexpectedResponse: { - origin: "StagingXcmV3MultiLocation", - queryId: "u64", - }, - ResponseReady: { - queryId: "u64", - response: "XcmV3Response", - }, - Notified: { - queryId: "u64", - palletIndex: "u8", - callIndex: "u8", - }, - NotifyOverweight: { - queryId: "u64", - palletIndex: "u8", - callIndex: "u8", - actualWeight: "SpWeightsWeightV2Weight", - maxBudgetedWeight: "SpWeightsWeightV2Weight", - }, - NotifyDispatchError: { - queryId: "u64", - palletIndex: "u8", - callIndex: "u8", - }, - NotifyDecodeFailed: { - queryId: "u64", - palletIndex: "u8", - callIndex: "u8", - }, - InvalidResponder: { - origin: "StagingXcmV3MultiLocation", - queryId: "u64", - expectedLocation: "Option", - }, - InvalidResponderVersion: { - origin: "StagingXcmV3MultiLocation", - queryId: "u64", - }, - ResponseTaken: { - queryId: "u64", - }, - AssetsTrapped: { - _alias: { - hash_: "hash", - }, - hash_: "H256", - origin: "StagingXcmV3MultiLocation", - assets: "XcmVersionedMultiAssets", - }, - VersionChangeNotified: { - destination: "StagingXcmV3MultiLocation", - result: "u32", - cost: "XcmV3MultiassetMultiAssets", - messageId: "[u8;32]", - }, - SupportedVersionChanged: { - location: "StagingXcmV3MultiLocation", - version: "u32", - }, - NotifyTargetSendFail: { - location: "StagingXcmV3MultiLocation", - queryId: "u64", - error: "XcmV3TraitsError", - }, - NotifyTargetMigrationFail: { - location: "XcmVersionedMultiLocation", - queryId: "u64", - }, - InvalidQuerierVersion: { - origin: "StagingXcmV3MultiLocation", - queryId: "u64", - }, - InvalidQuerier: { - origin: "StagingXcmV3MultiLocation", - queryId: "u64", - expectedQuerier: "StagingXcmV3MultiLocation", - maybeActualQuerier: "Option", - }, - VersionNotifyStarted: { - destination: "StagingXcmV3MultiLocation", - cost: "XcmV3MultiassetMultiAssets", - messageId: "[u8;32]", - }, - VersionNotifyRequested: { - destination: "StagingXcmV3MultiLocation", - cost: "XcmV3MultiassetMultiAssets", - messageId: "[u8;32]", - }, - VersionNotifyUnrequested: { - destination: "StagingXcmV3MultiLocation", - cost: "XcmV3MultiassetMultiAssets", - messageId: "[u8;32]", - }, - FeesPaid: { - paying: "StagingXcmV3MultiLocation", - fees: "XcmV3MultiassetMultiAssets", - }, - AssetsClaimed: { - _alias: { - hash_: "hash", - }, - hash_: "H256", - origin: "StagingXcmV3MultiLocation", - assets: "XcmVersionedMultiAssets", - }, - }, - }, - /** Lookup82: staging_xcm::v3::multilocation::MultiLocation */ - StagingXcmV3MultiLocation: { - parents: "u8", - interior: "XcmV3Junctions", - }, - /** Lookup83: xcm::v3::junctions::Junctions */ - XcmV3Junctions: { - _enum: { - Here: "Null", - X1: "XcmV3Junction", - X2: "(XcmV3Junction,XcmV3Junction)", - X3: "(XcmV3Junction,XcmV3Junction,XcmV3Junction)", - X4: "(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)", - X5: "(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)", - X6: "(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)", - X7: "(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)", - X8: "(XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction,XcmV3Junction)", - }, - }, - /** Lookup84: xcm::v3::junction::Junction */ - XcmV3Junction: { - _enum: { - Parachain: "Compact", - AccountId32: { - network: "Option", - id: "[u8;32]", - }, - AccountIndex64: { - network: "Option", - index: "Compact", - }, - AccountKey20: { - network: "Option", - key: "[u8;20]", - }, - PalletInstance: "u8", - GeneralIndex: "Compact", - GeneralKey: { - length: "u8", - data: "[u8;32]", - }, - OnlyChild: "Null", - Plurality: { - id: "XcmV3JunctionBodyId", - part: "XcmV3JunctionBodyPart", - }, - GlobalConsensus: "XcmV3JunctionNetworkId", - }, - }, - /** Lookup87: xcm::v3::junction::NetworkId */ - XcmV3JunctionNetworkId: { - _enum: { - ByGenesis: "[u8;32]", - ByFork: { - blockNumber: "u64", - blockHash: "[u8;32]", - }, - Polkadot: "Null", - Kusama: "Null", - Westend: "Null", - Rococo: "Null", - Wococo: "Null", - Ethereum: { - chainId: "Compact", - }, - BitcoinCore: "Null", - BitcoinCash: "Null", - PolkadotBulletin: "Null", - }, - }, - /** Lookup90: xcm::v3::junction::BodyId */ - XcmV3JunctionBodyId: { - _enum: { - Unit: "Null", - Moniker: "[u8;4]", - Index: "Compact", - Executive: "Null", - Technical: "Null", - Legislative: "Null", - Judicial: "Null", - Defense: "Null", - Administration: "Null", - Treasury: "Null", - }, - }, - /** Lookup91: xcm::v3::junction::BodyPart */ - XcmV3JunctionBodyPart: { - _enum: { - Voice: "Null", - Members: { - count: "Compact", - }, - Fraction: { - nom: "Compact", - denom: "Compact", - }, - AtLeastProportion: { - nom: "Compact", - denom: "Compact", - }, - MoreThanProportion: { - nom: "Compact", - denom: "Compact", - }, - }, - }, - /** Lookup92: xcm::v3::Xcm */ - XcmV3Xcm: "Vec", - /** Lookup94: xcm::v3::Instruction */ - XcmV3Instruction: { - _enum: { - WithdrawAsset: "XcmV3MultiassetMultiAssets", - ReserveAssetDeposited: "XcmV3MultiassetMultiAssets", - ReceiveTeleportedAsset: "XcmV3MultiassetMultiAssets", - QueryResponse: { - queryId: "Compact", - response: "XcmV3Response", - maxWeight: "SpWeightsWeightV2Weight", - querier: "Option", - }, - TransferAsset: { - assets: "XcmV3MultiassetMultiAssets", - beneficiary: "StagingXcmV3MultiLocation", - }, - TransferReserveAsset: { - assets: "XcmV3MultiassetMultiAssets", - dest: "StagingXcmV3MultiLocation", - xcm: "XcmV3Xcm", - }, - Transact: { - originKind: "XcmV2OriginKind", - requireWeightAtMost: "SpWeightsWeightV2Weight", - call: "XcmDoubleEncoded", - }, - HrmpNewChannelOpenRequest: { - sender: "Compact", - maxMessageSize: "Compact", - maxCapacity: "Compact", - }, - HrmpChannelAccepted: { - recipient: "Compact", - }, - HrmpChannelClosing: { - initiator: "Compact", - sender: "Compact", - recipient: "Compact", - }, - ClearOrigin: "Null", - DescendOrigin: "XcmV3Junctions", - ReportError: "XcmV3QueryResponseInfo", - DepositAsset: { - assets: "XcmV3MultiassetMultiAssetFilter", - beneficiary: "StagingXcmV3MultiLocation", - }, - DepositReserveAsset: { - assets: "XcmV3MultiassetMultiAssetFilter", - dest: "StagingXcmV3MultiLocation", - xcm: "XcmV3Xcm", - }, - ExchangeAsset: { - give: "XcmV3MultiassetMultiAssetFilter", - want: "XcmV3MultiassetMultiAssets", - maximal: "bool", - }, - InitiateReserveWithdraw: { - assets: "XcmV3MultiassetMultiAssetFilter", - reserve: "StagingXcmV3MultiLocation", - xcm: "XcmV3Xcm", - }, - InitiateTeleport: { - assets: "XcmV3MultiassetMultiAssetFilter", - dest: "StagingXcmV3MultiLocation", - xcm: "XcmV3Xcm", - }, - ReportHolding: { - responseInfo: "XcmV3QueryResponseInfo", - assets: "XcmV3MultiassetMultiAssetFilter", - }, - BuyExecution: { - fees: "XcmV3MultiAsset", - weightLimit: "XcmV3WeightLimit", - }, - RefundSurplus: "Null", - SetErrorHandler: "XcmV3Xcm", - SetAppendix: "XcmV3Xcm", - ClearError: "Null", - ClaimAsset: { - assets: "XcmV3MultiassetMultiAssets", - ticket: "StagingXcmV3MultiLocation", - }, - Trap: "Compact", - SubscribeVersion: { - queryId: "Compact", - maxResponseWeight: "SpWeightsWeightV2Weight", - }, - UnsubscribeVersion: "Null", - BurnAsset: "XcmV3MultiassetMultiAssets", - ExpectAsset: "XcmV3MultiassetMultiAssets", - ExpectOrigin: "Option", - ExpectError: "Option<(u32,XcmV3TraitsError)>", - ExpectTransactStatus: "XcmV3MaybeErrorCode", - QueryPallet: { - moduleName: "Bytes", - responseInfo: "XcmV3QueryResponseInfo", - }, - ExpectPallet: { - index: "Compact", - name: "Bytes", - moduleName: "Bytes", - crateMajor: "Compact", - minCrateMinor: "Compact", - }, - ReportTransactStatus: "XcmV3QueryResponseInfo", - ClearTransactStatus: "Null", - UniversalOrigin: "XcmV3Junction", - ExportMessage: { - network: "XcmV3JunctionNetworkId", - destination: "XcmV3Junctions", - xcm: "XcmV3Xcm", - }, - LockAsset: { - asset: "XcmV3MultiAsset", - unlocker: "StagingXcmV3MultiLocation", - }, - UnlockAsset: { - asset: "XcmV3MultiAsset", - target: "StagingXcmV3MultiLocation", - }, - NoteUnlockable: { - asset: "XcmV3MultiAsset", - owner: "StagingXcmV3MultiLocation", - }, - RequestUnlock: { - asset: "XcmV3MultiAsset", - locker: "StagingXcmV3MultiLocation", - }, - SetFeesMode: { - jitWithdraw: "bool", - }, - SetTopic: "[u8;32]", - ClearTopic: "Null", - AliasOrigin: "StagingXcmV3MultiLocation", - UnpaidExecution: { - weightLimit: "XcmV3WeightLimit", - checkOrigin: "Option", - }, - }, - }, - /** Lookup95: xcm::v3::multiasset::MultiAssets */ - XcmV3MultiassetMultiAssets: "Vec", - /** Lookup97: xcm::v3::multiasset::MultiAsset */ - XcmV3MultiAsset: { - id: "XcmV3MultiassetAssetId", - fun: "XcmV3MultiassetFungibility", - }, - /** Lookup98: xcm::v3::multiasset::AssetId */ - XcmV3MultiassetAssetId: { - _enum: { - Concrete: "StagingXcmV3MultiLocation", - Abstract: "[u8;32]", - }, - }, - /** Lookup99: xcm::v3::multiasset::Fungibility */ - XcmV3MultiassetFungibility: { - _enum: { - Fungible: "Compact", - NonFungible: "XcmV3MultiassetAssetInstance", - }, - }, - /** Lookup100: xcm::v3::multiasset::AssetInstance */ - XcmV3MultiassetAssetInstance: { - _enum: { - Undefined: "Null", - Index: "Compact", - Array4: "[u8;4]", - Array8: "[u8;8]", - Array16: "[u8;16]", - Array32: "[u8;32]", - }, - }, - /** Lookup103: xcm::v3::Response */ - XcmV3Response: { - _enum: { - Null: "Null", - Assets: "XcmV3MultiassetMultiAssets", - ExecutionResult: "Option<(u32,XcmV3TraitsError)>", - Version: "u32", - PalletsInfo: "Vec", - DispatchResult: "XcmV3MaybeErrorCode", - }, - }, - /** Lookup107: xcm::v3::PalletInfo */ - XcmV3PalletInfo: { - index: "Compact", - name: "Bytes", - moduleName: "Bytes", - major: "Compact", - minor: "Compact", - patch: "Compact", - }, - /** Lookup110: xcm::v3::MaybeErrorCode */ - XcmV3MaybeErrorCode: { - _enum: { - Success: "Null", - Error: "Bytes", - TruncatedError: "Bytes", - }, - }, - /** Lookup113: xcm::v2::OriginKind */ - XcmV2OriginKind: { - _enum: ["Native", "SovereignAccount", "Superuser", "Xcm"], - }, - /** Lookup114: xcm::double_encoded::DoubleEncoded */ - XcmDoubleEncoded: { - encoded: "Bytes", - }, - /** Lookup115: xcm::v3::QueryResponseInfo */ - XcmV3QueryResponseInfo: { - destination: "StagingXcmV3MultiLocation", - queryId: "Compact", - maxWeight: "SpWeightsWeightV2Weight", - }, - /** Lookup116: xcm::v3::multiasset::MultiAssetFilter */ - XcmV3MultiassetMultiAssetFilter: { - _enum: { - Definite: "XcmV3MultiassetMultiAssets", - Wild: "XcmV3MultiassetWildMultiAsset", - }, - }, - /** Lookup117: xcm::v3::multiasset::WildMultiAsset */ - XcmV3MultiassetWildMultiAsset: { - _enum: { - All: "Null", - AllOf: { - id: "XcmV3MultiassetAssetId", - fun: "XcmV3MultiassetWildFungibility", - }, - AllCounted: "Compact", - AllOfCounted: { - id: "XcmV3MultiassetAssetId", - fun: "XcmV3MultiassetWildFungibility", - count: "Compact", - }, - }, - }, - /** Lookup118: xcm::v3::multiasset::WildFungibility */ - XcmV3MultiassetWildFungibility: { - _enum: ["Fungible", "NonFungible"], - }, - /** Lookup119: xcm::v3::WeightLimit */ - XcmV3WeightLimit: { - _enum: { - Unlimited: "Null", - Limited: "SpWeightsWeightV2Weight", - }, - }, - /** Lookup120: xcm::VersionedMultiAssets */ - XcmVersionedMultiAssets: { - _enum: { - __Unused0: "Null", - V2: "XcmV2MultiassetMultiAssets", - __Unused2: "Null", - V3: "XcmV3MultiassetMultiAssets", - }, - }, - /** Lookup121: xcm::v2::multiasset::MultiAssets */ - XcmV2MultiassetMultiAssets: "Vec", - /** Lookup123: xcm::v2::multiasset::MultiAsset */ - XcmV2MultiAsset: { - id: "XcmV2MultiassetAssetId", - fun: "XcmV2MultiassetFungibility", - }, - /** Lookup124: xcm::v2::multiasset::AssetId */ - XcmV2MultiassetAssetId: { - _enum: { - Concrete: "XcmV2MultiLocation", - Abstract: "Bytes", - }, - }, - /** Lookup125: xcm::v2::multilocation::MultiLocation */ - XcmV2MultiLocation: { - parents: "u8", - interior: "XcmV2MultilocationJunctions", - }, - /** Lookup126: xcm::v2::multilocation::Junctions */ - XcmV2MultilocationJunctions: { - _enum: { - Here: "Null", - X1: "XcmV2Junction", - X2: "(XcmV2Junction,XcmV2Junction)", - X3: "(XcmV2Junction,XcmV2Junction,XcmV2Junction)", - X4: "(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)", - X5: "(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)", - X6: "(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)", - X7: "(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)", - X8: "(XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction,XcmV2Junction)", - }, - }, - /** Lookup127: xcm::v2::junction::Junction */ - XcmV2Junction: { - _enum: { - Parachain: "Compact", - AccountId32: { - network: "XcmV2NetworkId", - id: "[u8;32]", - }, - AccountIndex64: { - network: "XcmV2NetworkId", - index: "Compact", - }, - AccountKey20: { - network: "XcmV2NetworkId", - key: "[u8;20]", - }, - PalletInstance: "u8", - GeneralIndex: "Compact", - GeneralKey: "Bytes", - OnlyChild: "Null", - Plurality: { - id: "XcmV2BodyId", - part: "XcmV2BodyPart", - }, - }, - }, - /** Lookup128: xcm::v2::NetworkId */ - XcmV2NetworkId: { - _enum: { - Any: "Null", - Named: "Bytes", - Polkadot: "Null", - Kusama: "Null", - }, - }, - /** Lookup130: xcm::v2::BodyId */ - XcmV2BodyId: { - _enum: { - Unit: "Null", - Named: "Bytes", - Index: "Compact", - Executive: "Null", - Technical: "Null", - Legislative: "Null", - Judicial: "Null", - Defense: "Null", - Administration: "Null", - Treasury: "Null", - }, - }, - /** Lookup131: xcm::v2::BodyPart */ - XcmV2BodyPart: { - _enum: { - Voice: "Null", - Members: { - count: "Compact", - }, - Fraction: { - nom: "Compact", - denom: "Compact", - }, - AtLeastProportion: { - nom: "Compact", - denom: "Compact", - }, - MoreThanProportion: { - nom: "Compact", - denom: "Compact", - }, - }, - }, - /** Lookup132: xcm::v2::multiasset::Fungibility */ - XcmV2MultiassetFungibility: { - _enum: { - Fungible: "Compact", - NonFungible: "XcmV2MultiassetAssetInstance", - }, - }, - /** Lookup133: xcm::v2::multiasset::AssetInstance */ - XcmV2MultiassetAssetInstance: { - _enum: { - Undefined: "Null", - Index: "Compact", - Array4: "[u8;4]", - Array8: "[u8;8]", - Array16: "[u8;16]", - Array32: "[u8;32]", - Blob: "Bytes", - }, - }, - /** Lookup134: xcm::VersionedMultiLocation */ - XcmVersionedMultiLocation: { - _enum: { - __Unused0: "Null", - V2: "XcmV2MultiLocation", - __Unused2: "Null", - V3: "StagingXcmV3MultiLocation", - }, - }, - /** Lookup135: pallet_assets::pallet::Event */ - PalletAssetsEvent: { - _enum: { - Created: { - assetId: "u16", - creator: "AccountId32", - owner: "AccountId32", - }, - Issued: { - assetId: "u16", - owner: "AccountId32", - amount: "u128", - }, - Transferred: { - assetId: "u16", - from: "AccountId32", - to: "AccountId32", - amount: "u128", - }, - Burned: { - assetId: "u16", - owner: "AccountId32", - balance: "u128", - }, - TeamChanged: { - assetId: "u16", - issuer: "AccountId32", - admin: "AccountId32", - freezer: "AccountId32", - }, - OwnerChanged: { - assetId: "u16", - owner: "AccountId32", - }, - Frozen: { - assetId: "u16", - who: "AccountId32", - }, - Thawed: { - assetId: "u16", - who: "AccountId32", - }, - AssetFrozen: { - assetId: "u16", - }, - AssetThawed: { - assetId: "u16", - }, - AccountsDestroyed: { - assetId: "u16", - accountsDestroyed: "u32", - accountsRemaining: "u32", - }, - ApprovalsDestroyed: { - assetId: "u16", - approvalsDestroyed: "u32", - approvalsRemaining: "u32", - }, - DestructionStarted: { - assetId: "u16", - }, - Destroyed: { - assetId: "u16", - }, - ForceCreated: { - assetId: "u16", - owner: "AccountId32", - }, - MetadataSet: { - assetId: "u16", - name: "Bytes", - symbol: "Bytes", - decimals: "u8", - isFrozen: "bool", - }, - MetadataCleared: { - assetId: "u16", - }, - ApprovedTransfer: { - assetId: "u16", - source: "AccountId32", - delegate: "AccountId32", - amount: "u128", - }, - ApprovalCancelled: { - assetId: "u16", - owner: "AccountId32", - delegate: "AccountId32", - }, - TransferredApproved: { - assetId: "u16", - owner: "AccountId32", - delegate: "AccountId32", - destination: "AccountId32", - amount: "u128", - }, - AssetStatusChanged: { - assetId: "u16", - }, - AssetMinBalanceChanged: { - assetId: "u16", - newMinBalance: "u128", - }, - Touched: { - assetId: "u16", - who: "AccountId32", - depositor: "AccountId32", - }, - Blocked: { - assetId: "u16", - who: "AccountId32", - }, - }, - }, - /** Lookup136: pallet_foreign_asset_creator::pallet::Event */ - PalletForeignAssetCreatorEvent: { - _enum: { - ForeignAssetCreated: { - assetId: "u16", - foreignAsset: "StagingXcmV3MultiLocation", - }, - ForeignAssetTypeChanged: { - assetId: "u16", - newForeignAsset: "StagingXcmV3MultiLocation", - }, - ForeignAssetRemoved: { - assetId: "u16", - foreignAsset: "StagingXcmV3MultiLocation", - }, - ForeignAssetDestroyed: { - assetId: "u16", - foreignAsset: "StagingXcmV3MultiLocation", - }, - }, - }, - /** Lookup137: pallet_asset_rate::pallet::Event */ - PalletAssetRateEvent: { - _enum: { - AssetRateCreated: { - assetKind: "u16", - rate: "u128", - }, - AssetRateRemoved: { - assetKind: "u16", - }, - AssetRateUpdated: { - _alias: { - new_: "new", - }, - assetKind: "u16", - old: "u128", - new_: "u128", - }, - }, - }, - /** Lookup139: pallet_message_queue::pallet::Event */ - PalletMessageQueueEvent: { - _enum: { - ProcessingFailed: { - id: "H256", - origin: "CumulusPrimitivesCoreAggregateMessageOrigin", - error: "FrameSupportMessagesProcessMessageError", - }, - Processed: { - id: "H256", - origin: "CumulusPrimitivesCoreAggregateMessageOrigin", - weightUsed: "SpWeightsWeightV2Weight", - success: "bool", - }, - OverweightEnqueued: { - id: "[u8;32]", - origin: "CumulusPrimitivesCoreAggregateMessageOrigin", - pageIndex: "u32", - messageIndex: "u32", - }, - PageReaped: { - origin: "CumulusPrimitivesCoreAggregateMessageOrigin", - index: "u32", - }, - }, - }, - /** Lookup140: cumulus_primitives_core::AggregateMessageOrigin */ - CumulusPrimitivesCoreAggregateMessageOrigin: { - _enum: { - Here: "Null", - Parent: "Null", - Sibling: "u32", - }, - }, - /** Lookup141: frame_support::traits::messages::ProcessMessageError */ - FrameSupportMessagesProcessMessageError: { - _enum: { - BadFormat: "Null", - Corrupt: "Null", - Unsupported: "Null", - Overweight: "SpWeightsWeightV2Weight", - Yield: "Null", - }, - }, - /** Lookup142: pallet_xcm_core_buyer::pallet::Event */ - PalletXcmCoreBuyerEvent: { - _enum: { - BuyCoreXcmSent: { - paraId: "u32", - transactionStatusQueryId: "u64", - }, - ReceivedBuyCoreXCMResult: { - paraId: "u32", - response: "XcmV3Response", - }, - CleanedUpExpiredPendingBlocksEntries: { - paraIds: "Vec", - }, - CleanedUpExpiredInFlightOrderEntries: { - paraIds: "Vec", - }, - }, - }, - /** Lookup144: pallet_root_testing::pallet::Event */ - PalletRootTestingEvent: { - _enum: ["DefensiveTestCall"], - }, - /** Lookup145: frame_system::Phase */ - FrameSystemPhase: { - _enum: { - ApplyExtrinsic: "u32", - Finalization: "Null", - Initialization: "Null", - }, - }, - /** Lookup149: frame_system::LastRuntimeUpgradeInfo */ - FrameSystemLastRuntimeUpgradeInfo: { - specVersion: "Compact", - specName: "Text", - }, - /** Lookup151: frame_system::CodeUpgradeAuthorization */ - FrameSystemCodeUpgradeAuthorization: { - codeHash: "H256", - checkVersion: "bool", - }, - /** Lookup152: frame_system::pallet::Call */ - FrameSystemCall: { - _enum: { - remark: { - remark: "Bytes", - }, - set_heap_pages: { - pages: "u64", - }, - set_code: { - code: "Bytes", - }, - set_code_without_checks: { - code: "Bytes", - }, - set_storage: { - items: "Vec<(Bytes,Bytes)>", - }, - kill_storage: { - _alias: { - keys_: "keys", - }, - keys_: "Vec", - }, - kill_prefix: { - prefix: "Bytes", - subkeys: "u32", - }, - remark_with_event: { - remark: "Bytes", - }, - __Unused8: "Null", - authorize_upgrade: { - codeHash: "H256", - }, - authorize_upgrade_without_checks: { - codeHash: "H256", - }, - apply_authorized_upgrade: { - code: "Bytes", - }, - }, - }, - /** Lookup156: frame_system::limits::BlockWeights */ - FrameSystemLimitsBlockWeights: { - baseBlock: "SpWeightsWeightV2Weight", - maxBlock: "SpWeightsWeightV2Weight", - perClass: "FrameSupportDispatchPerDispatchClassWeightsPerClass", - }, - /** Lookup157: frame_support::dispatch::PerDispatchClass */ - FrameSupportDispatchPerDispatchClassWeightsPerClass: { - normal: "FrameSystemLimitsWeightsPerClass", - operational: "FrameSystemLimitsWeightsPerClass", - mandatory: "FrameSystemLimitsWeightsPerClass", - }, - /** Lookup158: frame_system::limits::WeightsPerClass */ - FrameSystemLimitsWeightsPerClass: { - baseExtrinsic: "SpWeightsWeightV2Weight", - maxExtrinsic: "Option", - maxTotal: "Option", - reserved: "Option", - }, - /** Lookup160: frame_system::limits::BlockLength */ - FrameSystemLimitsBlockLength: { - max: "FrameSupportDispatchPerDispatchClassU32", - }, - /** Lookup161: frame_support::dispatch::PerDispatchClass */ - FrameSupportDispatchPerDispatchClassU32: { - normal: "u32", - operational: "u32", - mandatory: "u32", - }, - /** Lookup162: sp_weights::RuntimeDbWeight */ - SpWeightsRuntimeDbWeight: { - read: "u64", - write: "u64", - }, - /** Lookup163: sp_version::RuntimeVersion */ - SpVersionRuntimeVersion: { - specName: "Text", - implName: "Text", - authoringVersion: "u32", - specVersion: "u32", - implVersion: "u32", - apis: "Vec<([u8;8],u32)>", - transactionVersion: "u32", - stateVersion: "u8", - }, - /** Lookup167: frame_system::pallet::Error */ - FrameSystemError: { - _enum: [ - "InvalidSpecName", - "SpecVersionNeedsToIncrease", - "FailedToExtractRuntimeVersion", - "NonDefaultComposite", - "NonZeroRefCount", - "CallFiltered", - "NothingAuthorized", - "Unauthorized", - ], - }, - /** Lookup169: cumulus_pallet_parachain_system::unincluded_segment::Ancestor */ - CumulusPalletParachainSystemUnincludedSegmentAncestor: { - usedBandwidth: "CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth", - paraHeadHash: "Option", - consumedGoAheadSignal: "Option", - }, - /** Lookup170: cumulus_pallet_parachain_system::unincluded_segment::UsedBandwidth */ - CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth: { - umpMsgCount: "u32", - umpTotalBytes: "u32", - hrmpOutgoing: "BTreeMap", - }, - /** Lookup172: cumulus_pallet_parachain_system::unincluded_segment::HrmpChannelUpdate */ - CumulusPalletParachainSystemUnincludedSegmentHrmpChannelUpdate: { - msgCount: "u32", - totalBytes: "u32", - }, - /** Lookup177: polkadot_primitives::v6::UpgradeGoAhead */ - PolkadotPrimitivesV6UpgradeGoAhead: { - _enum: ["Abort", "GoAhead"], - }, - /** Lookup178: cumulus_pallet_parachain_system::unincluded_segment::SegmentTracker */ - CumulusPalletParachainSystemUnincludedSegmentSegmentTracker: { - usedBandwidth: "CumulusPalletParachainSystemUnincludedSegmentUsedBandwidth", - hrmpWatermark: "Option", - consumedGoAheadSignal: "Option", - }, - /** Lookup179: polkadot_primitives::v6::PersistedValidationData */ - PolkadotPrimitivesV6PersistedValidationData: { - parentHead: "Bytes", - relayParentNumber: "u32", - relayParentStorageRoot: "H256", - maxPovSize: "u32", - }, - /** Lookup182: polkadot_primitives::v6::UpgradeRestriction */ - PolkadotPrimitivesV6UpgradeRestriction: { - _enum: ["Present"], - }, - /** Lookup183: sp_trie::storage_proof::StorageProof */ - SpTrieStorageProof: { - trieNodes: "BTreeSet", - }, - /** Lookup185: cumulus_pallet_parachain_system::relay_state_snapshot::MessagingStateSnapshot */ - CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot: { - dmqMqcHead: "H256", - relayDispatchQueueRemainingCapacity: - "CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity", - ingressChannels: "Vec<(u32,PolkadotPrimitivesV6AbridgedHrmpChannel)>", - egressChannels: "Vec<(u32,PolkadotPrimitivesV6AbridgedHrmpChannel)>", - }, - /** Lookup186: cumulus_pallet_parachain_system::relay_state_snapshot::RelayDispatchQueueRemainingCapacity */ - CumulusPalletParachainSystemRelayStateSnapshotRelayDispatchQueueRemainingCapacity: { - remainingCount: "u32", - remainingSize: "u32", - }, - /** Lookup189: polkadot_primitives::v6::AbridgedHrmpChannel */ - PolkadotPrimitivesV6AbridgedHrmpChannel: { - maxCapacity: "u32", - maxTotalSize: "u32", - maxMessageSize: "u32", - msgCount: "u32", - totalSize: "u32", - mqcHead: "Option", - }, - /** Lookup190: polkadot_primitives::v6::AbridgedHostConfiguration */ - PolkadotPrimitivesV6AbridgedHostConfiguration: { - maxCodeSize: "u32", - maxHeadDataSize: "u32", - maxUpwardQueueCount: "u32", - maxUpwardQueueSize: "u32", - maxUpwardMessageSize: "u32", - maxUpwardMessageNumPerCandidate: "u32", - hrmpMaxMessageNumPerCandidate: "u32", - validationUpgradeCooldown: "u32", - validationUpgradeDelay: "u32", - asyncBackingParams: "PolkadotPrimitivesV6AsyncBackingAsyncBackingParams", - }, - /** Lookup191: polkadot_primitives::v6::async_backing::AsyncBackingParams */ - PolkadotPrimitivesV6AsyncBackingAsyncBackingParams: { - maxCandidateDepth: "u32", - allowedAncestryLen: "u32", - }, - /** Lookup197: polkadot_core_primitives::OutboundHrmpMessage */ - PolkadotCorePrimitivesOutboundHrmpMessage: { - recipient: "u32", - data: "Bytes", - }, - /** Lookup198: cumulus_pallet_parachain_system::pallet::Call */ - CumulusPalletParachainSystemCall: { - _enum: { - set_validation_data: { - data: "CumulusPrimitivesParachainInherentParachainInherentData", - }, - sudo_send_upward_message: { - message: "Bytes", - }, - authorize_upgrade: { - codeHash: "H256", - checkVersion: "bool", - }, - enact_authorized_upgrade: { - code: "Bytes", - }, - }, - }, - /** Lookup199: cumulus_primitives_parachain_inherent::ParachainInherentData */ - CumulusPrimitivesParachainInherentParachainInherentData: { - validationData: "PolkadotPrimitivesV6PersistedValidationData", - relayChainState: "SpTrieStorageProof", - downwardMessages: "Vec", - horizontalMessages: "BTreeMap>", - }, - /** Lookup201: polkadot_core_primitives::InboundDownwardMessage */ - PolkadotCorePrimitivesInboundDownwardMessage: { - sentAt: "u32", - msg: "Bytes", - }, - /** Lookup204: polkadot_core_primitives::InboundHrmpMessage */ - PolkadotCorePrimitivesInboundHrmpMessage: { - sentAt: "u32", - data: "Bytes", - }, - /** Lookup207: cumulus_pallet_parachain_system::pallet::Error */ - CumulusPalletParachainSystemError: { - _enum: [ - "OverlappingUpgrades", - "ProhibitedByPolkadot", - "TooBig", - "ValidationDataNotAvailable", - "HostConfigurationNotAvailable", - "NotScheduled", - "NothingAuthorized", - "Unauthorized", - ], - }, - /** Lookup208: pallet_timestamp::pallet::Call */ - PalletTimestampCall: { - _enum: { - set: { - now: "Compact", - }, - }, - }, - /** Lookup209: staging_parachain_info::pallet::Call */ - StagingParachainInfoCall: "Null", - /** Lookup210: pallet_sudo::pallet::Call */ - PalletSudoCall: { - _enum: { - sudo: { - call: "Call", - }, - sudo_unchecked_weight: { - call: "Call", - weight: "SpWeightsWeightV2Weight", - }, - set_key: { - _alias: { - new_: "new", - }, - new_: "MultiAddress", - }, - sudo_as: { - who: "MultiAddress", - call: "Call", - }, - remove_key: "Null", - }, - }, - /** Lookup212: pallet_utility::pallet::Call */ - PalletUtilityCall: { - _enum: { - batch: { - calls: "Vec", - }, - as_derivative: { - index: "u16", - call: "Call", - }, - batch_all: { - calls: "Vec", - }, - dispatch_as: { - asOrigin: "DanceboxRuntimeOriginCaller", - call: "Call", - }, - force_batch: { - calls: "Vec", - }, - with_weight: { - call: "Call", - weight: "SpWeightsWeightV2Weight", - }, - }, - }, - /** Lookup214: dancebox_runtime::OriginCaller */ - DanceboxRuntimeOriginCaller: { - _enum: { - system: "FrameSupportDispatchRawOrigin", - __Unused1: "Null", - __Unused2: "Null", - Void: "SpCoreVoid", - __Unused4: "Null", - __Unused5: "Null", - __Unused6: "Null", - __Unused7: "Null", - __Unused8: "Null", - __Unused9: "Null", - __Unused10: "Null", - __Unused11: "Null", - __Unused12: "Null", - __Unused13: "Null", - __Unused14: "Null", - __Unused15: "Null", - __Unused16: "Null", - __Unused17: "Null", - __Unused18: "Null", - __Unused19: "Null", - __Unused20: "Null", - __Unused21: "Null", - __Unused22: "Null", - __Unused23: "Null", - __Unused24: "Null", - __Unused25: "Null", - __Unused26: "Null", - __Unused27: "Null", - __Unused28: "Null", - __Unused29: "Null", - __Unused30: "Null", - __Unused31: "Null", - __Unused32: "Null", - __Unused33: "Null", - __Unused34: "Null", - __Unused35: "Null", - __Unused36: "Null", - __Unused37: "Null", - __Unused38: "Null", - __Unused39: "Null", - __Unused40: "Null", - __Unused41: "Null", - __Unused42: "Null", - __Unused43: "Null", - __Unused44: "Null", - __Unused45: "Null", - __Unused46: "Null", - __Unused47: "Null", - __Unused48: "Null", - __Unused49: "Null", - __Unused50: "Null", - CumulusXcm: "CumulusPalletXcmOrigin", - __Unused52: "Null", - PolkadotXcm: "PalletXcmOrigin", - }, - }, - /** Lookup215: frame_support::dispatch::RawOrigin */ - FrameSupportDispatchRawOrigin: { - _enum: { - Root: "Null", - Signed: "AccountId32", - None: "Null", - }, - }, - /** Lookup216: cumulus_pallet_xcm::pallet::Origin */ - CumulusPalletXcmOrigin: { - _enum: { - Relay: "Null", - SiblingParachain: "u32", - }, - }, - /** Lookup217: pallet_xcm::pallet::Origin */ - PalletXcmOrigin: { - _enum: { - Xcm: "StagingXcmV3MultiLocation", - Response: "StagingXcmV3MultiLocation", - }, - }, - /** Lookup218: sp_core::Void */ - SpCoreVoid: "Null", - /** Lookup219: pallet_proxy::pallet::Call */ - PalletProxyCall: { - _enum: { - proxy: { - real: "MultiAddress", - forceProxyType: "Option", - call: "Call", - }, - add_proxy: { - delegate: "MultiAddress", - proxyType: "DanceboxRuntimeProxyType", - delay: "u32", - }, - remove_proxy: { - delegate: "MultiAddress", - proxyType: "DanceboxRuntimeProxyType", - delay: "u32", - }, - remove_proxies: "Null", - create_pure: { - proxyType: "DanceboxRuntimeProxyType", - delay: "u32", - index: "u16", - }, - kill_pure: { - spawner: "MultiAddress", - proxyType: "DanceboxRuntimeProxyType", - index: "u16", - height: "Compact", - extIndex: "Compact", - }, - announce: { - real: "MultiAddress", - callHash: "H256", - }, - remove_announcement: { - real: "MultiAddress", - callHash: "H256", - }, - reject_announcement: { - delegate: "MultiAddress", - callHash: "H256", - }, - proxy_announced: { - delegate: "MultiAddress", - real: "MultiAddress", - forceProxyType: "Option", - call: "Call", - }, - }, - }, - /** Lookup223: pallet_maintenance_mode::pallet::Call */ - PalletMaintenanceModeCall: { - _enum: ["enter_maintenance_mode", "resume_normal_operation"], - }, - /** Lookup224: pallet_tx_pause::pallet::Call */ - PalletTxPauseCall: { - _enum: { - pause: { - fullName: "(Bytes,Bytes)", - }, - unpause: { - ident: "(Bytes,Bytes)", - }, - }, - }, - /** Lookup225: pallet_balances::pallet::Call */ - PalletBalancesCall: { - _enum: { - transfer_allow_death: { - dest: "MultiAddress", - value: "Compact", - }, - __Unused1: "Null", - force_transfer: { - source: "MultiAddress", - dest: "MultiAddress", - value: "Compact", - }, - transfer_keep_alive: { - dest: "MultiAddress", - value: "Compact", - }, - transfer_all: { - dest: "MultiAddress", - keepAlive: "bool", - }, - force_unreserve: { - who: "MultiAddress", - amount: "u128", - }, - upgrade_accounts: { - who: "Vec", - }, - __Unused7: "Null", - force_set_balance: { - who: "MultiAddress", - newFree: "Compact", - }, - }, - }, - /** Lookup226: pallet_stream_payment::pallet::Call */ - PalletStreamPaymentCall: { - _enum: { - open_stream: { - target: "AccountId32", - config: "PalletStreamPaymentStreamConfig", - initialDeposit: "u128", - }, - close_stream: { - streamId: "u64", - }, - perform_payment: { - streamId: "u64", - }, - request_change: { - streamId: "u64", - kind: "PalletStreamPaymentChangeKind", - newConfig: "PalletStreamPaymentStreamConfig", - depositChange: "Option", - }, - accept_requested_change: { - streamId: "u64", - requestNonce: "u32", - depositChange: "Option", - }, - cancel_change_request: { - streamId: "u64", - }, - immediately_change_deposit: { - streamId: "u64", - assetId: "DanceboxRuntimeStreamPaymentAssetId", - change: "PalletStreamPaymentDepositChange", - }, - }, - }, - /** Lookup227: pallet_stream_payment::pallet::ChangeKind

(); - }) - } -); diff --git a/pallets/pooled-staking/src/tests/rewards.rs b/pallets/pooled-staking/src/tests/rewards.rs deleted file mode 100644 index 82eeab5..0000000 --- a/pallets/pooled-staking/src/tests/rewards.rs +++ /dev/null @@ -1,637 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - super::*, - crate::{ - assert_eq_last_events, - pools::{AutoCompounding, ManualRewards}, - Pallet, TargetPool, - }, - frame_support::assert_err, - sp_runtime::DispatchError, - tp_traits::DistributeRewards, -}; - -struct Delegation { - candidate: AccountId, - delegator: AccountId, - pool: TargetPool, - stake: Balance, -} - -struct RewardRequest { - collator: AccountId, - rewards: Balance, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -struct DelegatorState { - candidate: AccountId, - delegator: AccountId, - auto_stake: Balance, - auto_shares: Balance, - manual_stake: Balance, - manual_shares: Balance, - pending_rewards: Balance, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -struct Distribution { - collator_auto: Balance, - collator_manual: Balance, - delegators_auto: Balance, - delegators_manual: Balance, -} - -fn test_distribution( - delegations: &[Delegation], - reward: RewardRequest, - stakes: &[DelegatorState], - distribution: Distribution, -) { - use crate::traits::Timer; - let block_number = ::JoiningRequestTimer::now(); - - // Create new supply for rewards - let new_supply = currency_issue(reward.rewards); - use frame_support::traits::Imbalance; - let new_supply_amount = new_supply.peek(); - - // Request all delegations - for d in delegations { - assert_ok!(Staking::request_delegate( - RuntimeOrigin::signed(d.delegator), - d.candidate, - d.pool, - d.stake, - )); - } - - // Wait for delegation to be executable - for _ in 0..BLOCKS_TO_WAIT { - roll_one_block(); - } - - // Execute delegations - for d in delegations { - assert_ok!(Staking::execute_pending_operations( - RuntimeOrigin::signed(d.delegator), - vec![PendingOperationQuery { - delegator: d.delegator, - operation: match d.pool { - TargetPool::AutoCompounding => PendingOperationKey::JoiningAutoCompounding { - candidate: d.candidate, - at: block_number - }, - TargetPool::ManualRewards => PendingOperationKey::JoiningManualRewards { - candidate: d.candidate, - at: block_number - }, - } - }] - )); - } - - // Distribute rewards - let candidate_balance_before = total_balance(&ACCOUNT_CANDIDATE_1); - assert_ok!(Pallet::::distribute_rewards( - reward.collator, - new_supply - )); - let candidate_balance_after = total_balance(&ACCOUNT_CANDIDATE_1); - - // Check events matches the expected distribution. - assert_eq_last_events!(vec![ - Event::::RewardedCollator { - collator: reward.collator, - auto_compounding_rewards: distribution.collator_auto, - manual_claim_rewards: distribution.collator_manual, - }, - Event::RewardedDelegators { - collator: reward.collator, - auto_compounding_rewards: distribution.delegators_auto, - manual_claim_rewards: distribution.delegators_manual, - }, - ]); - - // Check the state of each delegate match the expected values. - for expected in stakes { - let actual = DelegatorState { - candidate: expected.candidate, - delegator: expected.delegator, - auto_stake: AutoCompounding::::computed_stake( - &expected.candidate, - &expected.delegator, - ) - .expect("to have stake") - .0, - auto_shares: AutoCompounding::::shares( - &expected.candidate, - &expected.delegator, - ) - .0, - manual_stake: ManualRewards::::computed_stake( - &expected.candidate, - &expected.delegator, - ) - .expect("to have stake") - .0, - manual_shares: ManualRewards::::shares( - &expected.candidate, - &expected.delegator, - ) - .0, - pending_rewards: ManualRewards::::pending_rewards( - &expected.candidate, - &expected.delegator, - ) - .expect("no overflow") - .0, - }; - - similar_asserts::assert_eq!(&actual, expected); - } - - // Additional checks. - assert_eq!( - distribution.collator_auto - + distribution.collator_manual - + distribution.delegators_auto - + distribution.delegators_manual, - new_supply_amount, - "Distribution total doesn't match requested reward" - ); - - assert_eq!( - candidate_balance_before + distribution.collator_manual, - candidate_balance_after, - "candidate balance should be increased by collator_manual" - ); - - let sum_manual: Balance = stakes.iter().map(|s| s.pending_rewards).sum(); - assert_eq!( - sum_manual, distribution.delegators_manual, - "sum of pending rewards should match distributed delegators manual rewards" - ); - - let sum_auto_stake_before: Balance = delegations - .iter() - .filter_map(|d| match d.pool { - TargetPool::AutoCompounding => Some(d.stake), - _ => None, - }) - .sum(); - - let sum_auto_stake_after = AutoCompounding::::total_staked(&reward.collator).0; - assert_eq!( - sum_auto_stake_after - sum_auto_stake_before, - distribution.collator_auto + distribution.delegators_auto, - "diff between sum of auto stake before and after distribution should match distributed auto rewards" - ); -} - -#[test] -fn candidate_only_manual_only() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::ManualRewards, - stake: 1_000_000_000, - }], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 1_000_000, - }, - &[DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 0, - auto_stake: 0, - manual_shares: 1_000, - manual_stake: 1_000_000_000, - pending_rewards: 800_000, - }], - Distribution { - collator_auto: 0, - collator_manual: 200_000, // 20% of rewards - delegators_auto: 0, - delegators_manual: 800_000, // 80% of rewards - }, - ) - }); -} - -#[test] -fn candidate_only_auto_only() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::AutoCompounding, - stake: 1_000_000_000, - }], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 10_000_000, - }, - &[DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 1_001, - // initial auto stake is 1_000_000_000 for - // 8_000_000 is shared between all delegators, so 1 share - // is now worth 1_008_000_000 / 1000 = 1_008_000 now - // collator is should be rewarded 2_000_000 in auto shares, - // which allows to get 1 more share, so the collator now - // have 1_001 shares worth - // 1_008_000_000 + 1_008_000 = 1_009_008_000 - auto_stake: 1_009_008_000, - manual_shares: 0, - manual_stake: 0, - pending_rewards: 0, - }], - Distribution { - // 20% of rewards, rounded down to closest amount of Auto shares - // AFTER delegators rewards has been rewarded - collator_auto: 1_008_000, - // dust from collator_auto - collator_manual: 992_000, - delegators_auto: 8_000_000, // 80% of rewards - delegators_manual: 0, - }, - ) - }); -} - -#[test] -fn candidate_only_mixed() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[ - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::AutoCompounding, - stake: 1_000_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::ManualRewards, - stake: 250_000_000, - }, - ], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 10_000_000, - }, - &[DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 1_001, - auto_stake: 1_007_406_400, - manual_shares: 250, - manual_stake: 250_000_000, - pending_rewards: 1_600_000, - }], - Distribution { - collator_auto: 1_006_400, - collator_manual: 993_600, - delegators_auto: 6_400_000, - delegators_manual: 1_600_000, - }, - ) - }); -} - -#[test] -fn delegators_manual_only() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[ - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::ManualRewards, - stake: 1_000_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::ManualRewards, - stake: 250_000_000, - }, - ], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 10_000_000, - }, - &[ - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 0, - auto_stake: 0, - manual_shares: 1_000, - manual_stake: 1_000_000_000, - pending_rewards: 6_400_000, - }, - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - auto_shares: 0, - auto_stake: 0, - manual_shares: 250, - manual_stake: 250_000_000, - pending_rewards: 1_600_000, - }, - ], - Distribution { - collator_auto: 0, - collator_manual: 2_000_000, - delegators_auto: 0, - delegators_manual: 8_000_000, - }, - ) - }); -} - -#[test] -fn delegators_auto_only() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[ - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::AutoCompounding, - stake: 1_000_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::AutoCompounding, - stake: 250_000_000, - }, - ], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 10_000_000, - }, - &[ - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 1_001, - auto_stake: 1_007_406_400, - manual_shares: 0, - manual_stake: 0, - pending_rewards: 0, - }, - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - auto_shares: 250, - auto_stake: 251_600_000, - manual_shares: 0, - manual_stake: 0, - pending_rewards: 0, - }, - ], - Distribution { - collator_auto: 1_006_400, - collator_manual: 993_600, - delegators_auto: 8_000_000, - delegators_manual: 0, - }, - ) - }); -} - -#[test] -fn delegators_mixed() { - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[ - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::AutoCompounding, - stake: 1_000_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - pool: TargetPool::ManualRewards, - stake: 500_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::ManualRewards, - stake: 250_000_000, - }, - Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::AutoCompounding, - stake: 500_000_000, - }, - ], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 10_000_000, - }, - &[ - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_CANDIDATE_1, - auto_shares: 1_001, - auto_stake: 1_004_559_388, - manual_shares: 500, - manual_stake: 500_000_000, - pending_rewards: 1_777_500, - }, - DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - auto_shares: 500, - auto_stake: 501_777_916, - manual_shares: 250, - manual_stake: 250_000_000, - pending_rewards: 888_750, - }, - ], - Distribution { - collator_auto: 1_003_555, - collator_manual: 996_445, - // Total stake: 2_250_000_000 - // Auto stake: 1_500_000_000 - // Manual stake: 750_000_000 - // Manual shares: 750 - // Rewards towards delegators: 80% of 10_000_000 = 8_000_000 - // Rewards towards manual deleg - // = 8_000_000 * 750_000_000 / 2_250_000_000 - // = 2_666_666 - // => 2_666_250 (rounding down to closest multiple of 750) - // gives dust of 2_666_666 - 2_666_250 = 416 - delegators_manual: 2_666_250, - // Rewards towards auto deleg - // = Rewards deleg - Rewards manual deleg - // = 8_000_000 - 2_666_250 - // = 5_333_750 - delegators_auto: 5_333_750, - }, - ); - }); -} - -#[test] -fn candidate_only_no_stake() { - // Rewarding a candidate that does not have any stake works - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 1_000_000, - }, - &[], - Distribution { - collator_auto: 0, - collator_manual: 1_000_000, // 100% of rewards - delegators_auto: 0, - delegators_manual: 0, // 0% of rewards - }, - ) - }); -} - -#[test] -fn delegator_only_candidate_zero() { - // Rewarding a candidate that does not have any stake works - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::ManualRewards, - stake: 250_000_000, - }], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 1_000_000, - }, - &[DelegatorState { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - auto_shares: 0, - auto_stake: 0, - manual_shares: 250, - manual_stake: 250_000_000, - pending_rewards: 800_000, - }], - Distribution { - collator_auto: 0, - collator_manual: 200_000, // 20% of rewards - delegators_auto: 0, - delegators_manual: 800_000, // 80% of rewards - }, - ) - }); -} - -#[test] -fn delegator_only_candidate_no_stake_auto_compounding() { - // Rewarding a candidate that does not have any stake, while some delegator - // has stake for that candidate - ExtBuilder::default().build().execute_with(|| { - test_distribution( - &[Delegation { - candidate: ACCOUNT_CANDIDATE_1, - delegator: ACCOUNT_DELEGATOR_1, - pool: TargetPool::AutoCompounding, - stake: 250_000_000, - }], - RewardRequest { - collator: ACCOUNT_CANDIDATE_1, - rewards: 1_000_000, - }, - &[], - Distribution { - collator_auto: 0, - collator_manual: 200_000, // 20% of rewards - delegators_auto: 800_000, // 80% of rewards - delegators_manual: 0, - }, - ) - }); -} - -#[test] -fn reward_distribution_is_transactional() { - ExtBuilder::default().build().execute_with(|| { - use crate::traits::Timer; - let request_time = ::JoiningRequestTimer::now(); - - assert_ok!(Staking::request_delegate( - RuntimeOrigin::signed(ACCOUNT_CANDIDATE_1), - ACCOUNT_CANDIDATE_1, - TargetPool::AutoCompounding, - 1_000_000_000, - )); - - // Wait for delegation to be executable - for _ in 0..BLOCKS_TO_WAIT { - roll_one_block(); - } - - assert_ok!(Staking::execute_pending_operations( - RuntimeOrigin::signed(ACCOUNT_CANDIDATE_1), - vec![PendingOperationQuery { - delegator: ACCOUNT_CANDIDATE_1, - operation: PendingOperationKey::JoiningAutoCompounding { - candidate: ACCOUNT_CANDIDATE_1, - at: request_time - }, - }] - )); - - let total_staked_before = - pools::AutoCompounding::::total_staked(&ACCOUNT_CANDIDATE_1); - - // Increase ED to make reward destribution fail when resolving - // credit to Staking account. - MockExistentialDeposit::set(u128::MAX); - - let rewards = Balances::issue(1_000_000_000); - assert_err!( - Staking::distribute_rewards(ACCOUNT_CANDIDATE_1, rewards), - DispatchError::NoProviders - ); - - let total_staked_after = - pools::AutoCompounding::::total_staked(&ACCOUNT_CANDIDATE_1); - assert_eq!( - total_staked_before, total_staked_after, - "distribution should be reverted" - ); - }) -} diff --git a/pallets/pooled-staking/src/traits.rs b/pallets/pooled-staking/src/traits.rs deleted file mode 100644 index f597066..0000000 --- a/pallets/pooled-staking/src/traits.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - core::{fmt::Debug, marker::PhantomData}, - frame_system::pallet_prelude::BlockNumberFor, - parity_scale_codec::FullCodec, - scale_info::TypeInfo, - sp_runtime::traits::{CheckedAdd, Get}, -}; - -/// Allows to get the current instant and check if some duration is elapsed. -pub trait Timer { - /// Type for the instant. Must implement some traits to be used easily with - /// the Pooled Staking pallet. - type Instant: FullCodec + TypeInfo + Clone + Debug + Eq; - - /// Get the current instant. - fn now() -> Self::Instant; - - /// Check if the timer started at `started` is elapsed. - fn is_elapsed(start: &Self::Instant) -> bool; - - /// Returns an instant that will make `is_elapsed` true. - #[cfg(feature = "runtime-benchmarks")] - fn elapsed_instant() -> Self::Instant; - - /// Skip to a state where `now` will make `is_elapsed` true. - #[cfg(feature = "runtime-benchmarks")] - fn skip_to_elapsed(); -} - -/// A timer using block numbers. -/// `T` is the Runtime type while `G` is a getter for the delay. -pub struct BlockNumberTimer(PhantomData<(T, G)>); - -impl Timer for BlockNumberTimer -where - T: frame_system::Config, - G: Get>, -{ - type Instant = BlockNumberFor; - - fn now() -> Self::Instant { - frame_system::Pallet::::block_number() - } - - fn is_elapsed(start: &Self::Instant) -> bool { - let delay = G::get(); - let Some(end) = start.checked_add(&delay) else { - return false; - }; - end <= Self::now() - } - - #[cfg(feature = "runtime-benchmarks")] - fn elapsed_instant() -> Self::Instant { - let delay = G::get(); - Self::now() - .checked_add(&delay) - .expect("overflow when computing valid elapsed instant") - } - - #[cfg(feature = "runtime-benchmarks")] - fn skip_to_elapsed() { - frame_system::Pallet::::set_block_number(Self::elapsed_instant()); - } -} - -/// Allows knowing if some account is eligible to be a candidate. -pub trait IsCandidateEligible { - /// Is the provided account id eligible? - fn is_candidate_eligible(a: &AccountId) -> bool; - - /// Make the provided account id eligible if `eligible` is true, and not - /// eligible if false. - #[cfg(feature = "runtime-benchmarks")] - fn make_candidate_eligible(a: &AccountId, eligible: bool); -} - -impl IsCandidateEligible for () { - fn is_candidate_eligible(_: &AccountId) -> bool { - true - } - - #[cfg(feature = "runtime-benchmarks")] - fn make_candidate_eligible(_: &AccountId, _: bool) {} -} diff --git a/pallets/pooled-staking/src/weights.rs b/pallets/pooled-staking/src/weights.rs deleted file mode 100644 index 5af329c..0000000 --- a/pallets/pooled-staking/src/weights.rs +++ /dev/null @@ -1,368 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_pooled_staking -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-10-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `pop-os`, CPU: `12th Gen Intel(R) Core(TM) i7-1260P` -//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet-pooled-staking -// --extrinsic -// * -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// weights.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_pooled_staking. -pub trait WeightInfo { - fn request_delegate() -> Weight; - fn execute_pending_operations(b: u32, ) -> Weight; - fn request_undelegate() -> Weight; - fn claim_manual_rewards(b: u32, ) -> Weight; - fn rebalance_hold() -> Weight; - fn update_candidate_position(b: u32, ) -> Weight; - fn swap_pool() -> Weight; - fn distribute_rewards() -> Weight; -} - -/// Weights for pallet_pooled_staking using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: PooledStaking Pools (r:11 w:5) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:1 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking PendingOperations (r:1 w:1) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - fn request_delegate() -> Weight { - // Proof Size summary in bytes: - // Measured: `1321` - // Estimated: `29536` - // Minimum execution time: 127_339_000 picoseconds. - Weight::from_parts(133_146_000, 29536) - .saturating_add(T::DbWeight::get().reads(17_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) - } - /// Storage: PooledStaking PendingOperations (r:100 w:100) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking Pools (r:1000 w:800) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// The range of component `b` is `[1, 100]`. - fn execute_pending_operations(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `543 + b * (390 ±0)` - // Estimated: `3593 + b * (25141 ±0)` - // Minimum execution time: 89_544_000 picoseconds. - Weight::from_parts(91_417_000, 3593) - // Standard Error: 630_031 - .saturating_add(Weight::from_parts(99_103_944, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().reads((11_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(T::DbWeight::get().writes((9_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 25141).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:13 w:9) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking PendingOperations (r:1 w:1) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - fn request_undelegate() -> Weight { - // Proof Size summary in bytes: - // Measured: `724` - // Estimated: `33889` - // Minimum execution time: 111_997_000 picoseconds. - Weight::from_parts(124_683_000, 33889) - .saturating_add(T::DbWeight::get().reads(16_u64)) - .saturating_add(T::DbWeight::get().writes(11_u64)) - } - /// Storage: PooledStaking Pools (r:300 w:100) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// The range of component `b` is `[1, 100]`. - fn claim_manual_rewards(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `360 + b * (456 ±0)` - // Estimated: `6196 + b * (7882 ±0)` - // Minimum execution time: 57_580_000 picoseconds. - Weight::from_parts(60_814_000, 6196) - // Standard Error: 421_370 - .saturating_add(Weight::from_parts(55_273_020, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 7882).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:4 w:1) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - fn rebalance_hold() -> Weight { - // Proof Size summary in bytes: - // Measured: `980` - // Estimated: `11870` - // Minimum execution time: 98_014_000 picoseconds. - Weight::from_parts(128_615_000, 11870) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: PooledStaking Pools (r:600 w:100) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:100 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// The range of component `b` is `[1, 100]`. - fn update_candidate_position(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `399 + b * (356 ±0)` - // Estimated: `1881 + b * (15206 ±0)` - // Minimum execution time: 46_082_000 picoseconds. - Weight::from_parts(60_293_000, 1881) - // Standard Error: 131_937 - .saturating_add(Weight::from_parts(35_500_124, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().reads((7_u64).saturating_mul(b.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 15206).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:12 w:8) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - fn swap_pool() -> Weight { - // Proof Size summary in bytes: - // Measured: `478` - // Estimated: `31168` - // Minimum execution time: 80_829_000 picoseconds. - Weight::from_parts(97_569_000, 31168) - .saturating_add(T::DbWeight::get().reads(12_u64)) - .saturating_add(T::DbWeight::get().writes(8_u64)) - } - /// Storage: PooledStaking Pools (r:9 w:5) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:1 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn distribute_rewards() -> Weight { - // Proof Size summary in bytes: - // Measured: `1302` - // Estimated: `24567` - // Minimum execution time: 151_254_000 picoseconds. - Weight::from_parts(178_410_000, 24567) - .saturating_add(T::DbWeight::get().reads(13_u64)) - .saturating_add(T::DbWeight::get().writes(8_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: PooledStaking Pools (r:11 w:5) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:1 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking PendingOperations (r:1 w:1) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - fn request_delegate() -> Weight { - // Proof Size summary in bytes: - // Measured: `1321` - // Estimated: `29536` - // Minimum execution time: 127_339_000 picoseconds. - Weight::from_parts(133_146_000, 29536) - .saturating_add(RocksDbWeight::get().reads(17_u64)) - .saturating_add(RocksDbWeight::get().writes(9_u64)) - } - /// Storage: PooledStaking PendingOperations (r:100 w:100) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking Pools (r:1000 w:800) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - /// Storage: System Account (r:1 w:1) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// The range of component `b` is `[1, 100]`. - fn execute_pending_operations(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `543 + b * (390 ±0)` - // Estimated: `3593 + b * (25141 ±0)` - // Minimum execution time: 89_544_000 picoseconds. - Weight::from_parts(91_417_000, 3593) - // Standard Error: 630_031 - .saturating_add(Weight::from_parts(99_103_944, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().reads((11_u64).saturating_mul(b.into()))) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - .saturating_add(RocksDbWeight::get().writes((9_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 25141).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:13 w:9) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session CurrentIndex (r:1 w:0) - /// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: PooledStaking PendingOperations (r:1 w:1) - /// Proof Skipped: PooledStaking PendingOperations (max_values: None, max_size: None, mode: Measured) - fn request_undelegate() -> Weight { - // Proof Size summary in bytes: - // Measured: `724` - // Estimated: `33889` - // Minimum execution time: 111_997_000 picoseconds. - Weight::from_parts(124_683_000, 33889) - .saturating_add(RocksDbWeight::get().reads(16_u64)) - .saturating_add(RocksDbWeight::get().writes(11_u64)) - } - /// Storage: PooledStaking Pools (r:300 w:100) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// The range of component `b` is `[1, 100]`. - fn claim_manual_rewards(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `360 + b * (456 ±0)` - // Estimated: `6196 + b * (7882 ±0)` - // Minimum execution time: 57_580_000 picoseconds. - Weight::from_parts(60_814_000, 6196) - // Standard Error: 421_370 - .saturating_add(Weight::from_parts(55_273_020, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().reads((3_u64).saturating_mul(b.into()))) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 7882).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:4 w:1) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - /// Storage: Balances Holds (r:1 w:1) - /// Proof: Balances Holds (max_values: None, max_size: Some(66), added: 2541, mode: MaxEncodedLen) - fn rebalance_hold() -> Weight { - // Proof Size summary in bytes: - // Measured: `980` - // Estimated: `11870` - // Minimum execution time: 98_014_000 picoseconds. - Weight::from_parts(128_615_000, 11870) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - } - /// Storage: PooledStaking Pools (r:600 w:100) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:100 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// The range of component `b` is `[1, 100]`. - fn update_candidate_position(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `399 + b * (356 ±0)` - // Estimated: `1881 + b * (15206 ±0)` - // Minimum execution time: 46_082_000 picoseconds. - Weight::from_parts(60_293_000, 1881) - // Standard Error: 131_937 - .saturating_add(Weight::from_parts(35_500_124, 0).saturating_mul(b.into())) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().reads((7_u64).saturating_mul(b.into()))) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(b.into()))) - .saturating_add(Weight::from_parts(0, 15206).saturating_mul(b.into())) - } - /// Storage: PooledStaking Pools (r:12 w:8) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - fn swap_pool() -> Weight { - // Proof Size summary in bytes: - // Measured: `478` - // Estimated: `31168` - // Minimum execution time: 80_829_000 picoseconds. - Weight::from_parts(97_569_000, 31168) - .saturating_add(RocksDbWeight::get().reads(12_u64)) - .saturating_add(RocksDbWeight::get().writes(8_u64)) - } - /// Storage: PooledStaking Pools (r:9 w:5) - /// Proof Skipped: PooledStaking Pools (max_values: None, max_size: None, mode: Measured) - /// Storage: PooledStaking SortedEligibleCandidates (r:1 w:1) - /// Proof Skipped: PooledStaking SortedEligibleCandidates (max_values: Some(1), max_size: None, mode: Measured) - /// Storage: Session NextKeys (r:1 w:0) - /// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured) - /// Storage: System Account (r:2 w:2) - /// Proof: System Account (max_values: None, max_size: Some(128), added: 2603, mode: MaxEncodedLen) - fn distribute_rewards() -> Weight { - // Proof Size summary in bytes: - // Measured: `1302` - // Estimated: `24567` - // Minimum execution time: 151_254_000 picoseconds. - Weight::from_parts(178_410_000, 24567) - .saturating_add(RocksDbWeight::get().reads(13_u64)) - .saturating_add(RocksDbWeight::get().writes(8_u64)) - } -} diff --git a/pallets/registrar/Cargo.toml b/pallets/registrar/Cargo.toml deleted file mode 100644 index 8ddeb26..0000000 --- a/pallets/registrar/Cargo.toml +++ /dev/null @@ -1,71 +0,0 @@ -[package] -name = "pallet-registrar" -authors = { workspace = true } -description = "ParaRegistrar pallet that allows to register and deregister ParaIds" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -pallet-configuration = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -serde = { workspace = true, features = [ "derive" ] } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tp-container-chain-genesis-data = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -pallet-balances = { workspace = true } -sp-core = { workspace = true } -sp-io = { workspace = true } -sp-runtime = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "pallet-balances/std", - "pallet-configuration/std", - "parity-scale-codec/std", - "scale-info/std", - "serde/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-container-chain-genesis-data/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-configuration/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "pallet-configuration/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/registrar/rpc/runtime-api/Cargo.toml b/pallets/registrar/rpc/runtime-api/Cargo.toml deleted file mode 100644 index 31dd379..0000000 --- a/pallets/registrar/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "pallet-registrar-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-registrar" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -frame-support = { workspace = true } -pallet-registrar = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-api = { workspace = true } -tp-container-chain-genesis-data = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "frame-support/std", - "pallet-registrar/std", - "parity-scale-codec/std", - "scale-info/std", - "sp-api/std", - "tp-container-chain-genesis-data/std", -] diff --git a/pallets/registrar/rpc/runtime-api/src/lib.rs b/pallets/registrar/rpc/runtime-api/src/lib.rs deleted file mode 100644 index 5733f92..0000000 --- a/pallets/registrar/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for Registrar pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -pub use tp_container_chain_genesis_data::ContainerChainGenesisData; -use {frame_support::traits::Get, scale_info::prelude::vec::Vec}; - -sp_api::decl_runtime_apis! { - pub trait RegistrarApi where - ParaId: parity_scale_codec::Codec, - MaxLengthTokenSymbol: Get, - { - /// Return the registered para ids - fn registered_paras() -> Vec; - - /// Fetch genesis data for this para id - fn genesis_data(para_id: ParaId) -> Option>; - - /// Fetch boot_nodes for this para id - fn boot_nodes(para_id: ParaId) -> Vec>; - } -} - -sp_api::decl_runtime_apis! { - pub trait OnDemandBlockProductionApi where - ParaId: parity_scale_codec::Codec, - Slot: parity_scale_codec::Codec, - { - /// Return the minimum number of slots that must pass between to blocks before parathread collators can propose - /// the next block. - /// - /// # Returns - /// - /// * `Some(min)`, where the condition for the slot to be valid is `(slot - parent_slot) >= min`. - /// * `None` if the `para_id` is not a parathread. - fn min_slot_freq(para_id: ParaId) -> Option; - } -} diff --git a/pallets/registrar/src/benchmarks.rs b/pallets/registrar/src/benchmarks.rs deleted file mode 100644 index 8298d41..0000000 --- a/pallets/registrar/src/benchmarks.rs +++ /dev/null @@ -1,452 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -//! Benchmarking -use { - crate::{Call, Config, DepositBalanceOf, Pallet, RegistrarHooks}, - frame_benchmarking::{account, v2::*}, - frame_support::traits::Currency, - frame_system::RawOrigin, - sp_core::Get, - sp_std::{vec, vec::Vec}, - tp_container_chain_genesis_data::{ContainerChainGenesisData, ContainerChainGenesisDataItem}, - tp_traits::{ParaId, SlotFrequency}, -}; - -/// Create a funded user. -/// Used for generating the necessary amount for registering -fn create_funded_user( - string: &'static str, - n: u32, - extra: DepositBalanceOf, -) -> (T::AccountId, DepositBalanceOf) { - const SEED: u32 = 0; - let user = account(string, n, SEED); - let min_reserve_amount = T::DepositAmount::get(); - let total = min_reserve_amount + extra; - T::Currency::make_free_balance_be(&user, total); - let _ = T::Currency::issue(total); - (user, total) -} - -#[benchmarks] -mod benchmarks { - use super::*; - - fn new_genesis_data>( - storage: Vec, - ) -> ContainerChainGenesisData { - ContainerChainGenesisData { - storage, - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - } - } - - // Returns number of para ids in pending verification (registered but not marked as valid) - fn pending_verification_len() -> usize { - crate::PendingVerification::::iter_keys().count() - } - - #[benchmark] - fn register(x: Linear<5, 3_000_000>, y: Linear<1, 50>, z: Linear<1, 10>) { - let mut data = vec![]; - // Number of keys - for _i in 1..z { - data.push((b"code".to_vec(), vec![1; (x / z) as usize]).into()) - } - - let storage = new_genesis_data(data); - - for i in 1..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - } - - // We should have registered y-1 - assert_eq!(pending_verification_len::(), (y - 1) as usize); - - let (caller, _deposit_amount) = - create_funded_user::("caller", 0, T::DepositAmount::get()); - - #[extrinsic_call] - Pallet::::register(RawOrigin::Signed(caller), Default::default(), storage); - - // verification code - assert_eq!(pending_verification_len::(), y as usize); - assert!(Pallet::::registrar_deposit(ParaId::default()).is_some()); - } - - #[benchmark] - fn deregister_immediate(x: Linear<5, 3_000_000>, y: Linear<1, 50>) { - let storage = vec![(b"code".to_vec(), vec![1; x as usize]).into()]; - let storage = new_genesis_data(storage); - - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - // Do not call mark_valid_for_collating, to ensure that the deregister call also executes the cleanup hooks - } - - // We should have registered y - assert_eq!(pending_verification_len::(), y as usize); - assert!(Pallet::::registrar_deposit(ParaId::from(y - 1)).is_some()); - - #[extrinsic_call] - Pallet::::deregister(RawOrigin::Root, (y - 1).into()); - - // We should have y-1 - assert_eq!(pending_verification_len::(), (y - 1) as usize); - assert!(Pallet::::registrar_deposit(ParaId::from(y - 1)).is_none()); - } - - #[benchmark] - fn deregister_scheduled(x: Linear<5, 3_000_000>, y: Linear<1, 50>) { - let storage = vec![(b"code".to_vec(), vec![1; x as usize]).into()]; - let storage = new_genesis_data(storage); - let genesis_para_id_len = Pallet::::registered_para_ids().len(); - - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - // Call mark_valid_for_collating to ensure that the deregister call - // does not execute the cleanup hooks immediately - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(i.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), i.into()).unwrap(); - } - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - // We should have registered y - assert_eq!( - Pallet::::registered_para_ids().len(), - genesis_para_id_len + y as usize - ); - assert!(Pallet::::registrar_deposit(ParaId::from(y - 1)).is_some()); - - #[extrinsic_call] - Pallet::::deregister(RawOrigin::Root, (y - 1).into()); - - // We now have y - 1 but the deposit has not been removed yet - assert_eq!( - Pallet::::pending_registered_para_ids()[0].1.len(), - genesis_para_id_len + (y - 1) as usize - ); - assert!(Pallet::::registrar_deposit(ParaId::from(y - 1)).is_some()); - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - - // Now it has been removed - assert_eq!( - Pallet::::registered_para_ids().len(), - genesis_para_id_len + (y - 1) as usize - ); - assert!(Pallet::::registrar_deposit(ParaId::from(y - 1)).is_none()); - } - - #[benchmark] - fn mark_valid_for_collating(y: Linear<1, 50>) { - let storage = vec![(vec![1; 4], vec![1; 3_000_000usize]).into()]; - let storage = new_genesis_data(storage); - - // Worst case: when RegisteredParaIds and PendingVerification are both full - // First loop to fill PendingVerification to its maximum - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - } - - // Second loop to fill RegisteredParaIds to its maximum - for k in 1000..(1000 + y) { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", k, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - k.into(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(k.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), k.into()).unwrap(); - } - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - - // We should have registered y - assert_eq!(pending_verification_len::(), y as usize); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating((y - 1).into()); - - #[extrinsic_call] - Pallet::::mark_valid_for_collating(RawOrigin::Root, (y - 1).into()); - - // We should have y-1 - assert_eq!(pending_verification_len::(), (y - 1) as usize); - } - - #[benchmark] - fn pause_container_chain(y: Linear<1, 50>) { - let storage = vec![(vec![1; 4], vec![1; 3_000_000usize]).into()]; - let storage = new_genesis_data(storage); - - // Deregister all the existing chains to avoid conflicts with the new ones - for para_id in Pallet::::registered_para_ids() { - Pallet::::deregister(RawOrigin::Root.into(), para_id).unwrap(); - } - - // Worst case: when RegisteredParaIds and Paused are both full - // First loop to fill RegisteredParaIds to its maximum - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(i.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), i.into()).unwrap(); - } - - // Second loop to fill Paused to its maximum - for k in 1000..(1000 + y) { - let (caller, _deposit_amount) = - create_funded_user::("caller", k, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - k.into(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(k.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), k.into()).unwrap(); - Pallet::::pause_container_chain(RawOrigin::Root.into(), k.into()).unwrap(); - } - - // Check PendingPaused has a length of y - assert_eq!(Pallet::::pending_paused()[0].1.len(), y as usize); - // Check y-1 is not in PendingPaused - assert!(!Pallet::::pending_paused()[0] - .1 - .contains(&ParaId::from(y - 1))); - // Check y-1 is in pending_registered_para_ids - assert!(Pallet::::pending_registered_para_ids()[0] - .1 - .contains(&ParaId::from(y - 1))); - - #[extrinsic_call] - Pallet::::pause_container_chain(RawOrigin::Root, (y - 1).into()); - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - - // Check y-1 is in Paused - assert!(Pallet::::paused().contains(&ParaId::from(y - 1))); - // Check y-1 is not in registered_para_ids - assert!(!Pallet::::registered_para_ids().contains(&ParaId::from(y - 1))); - } - - #[benchmark] - fn unpause_container_chain(y: Linear<1, 50>) { - let storage = vec![(vec![1; 4], vec![1; 3_000_000usize]).into()]; - let storage = new_genesis_data(storage); - - // Deregister all the existing chains to avoid conflicts with the new ones - for para_id in Pallet::::registered_para_ids() { - Pallet::::deregister(RawOrigin::Root.into(), para_id).unwrap(); - } - - // Worst case: when RegisteredParaIds and Paused are both full - // First loop to fill RegisteredParaIds to its maximum - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(i.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), i.into()).unwrap(); - } - - // Second loop to fill Paused to its maximum - for k in 1000..(1000 + y) { - let (caller, _deposit_amount) = - create_funded_user::("caller", k, T::DepositAmount::get()); - Pallet::::register( - RawOrigin::Signed(caller.clone()).into(), - k.into(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(k.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), k.into()).unwrap(); - Pallet::::pause_container_chain(RawOrigin::Root.into(), k.into()).unwrap(); - } - - // Check PendingPaused has a length of y - assert_eq!(Pallet::::pending_paused()[0].1.len(), y as usize); - // Check 1000 is in PendingPaused - assert!(Pallet::::pending_paused()[0] - .1 - .contains(&ParaId::from(1000))); - // Check 1000 is not in pending_registered_para_ids - assert!(!Pallet::::pending_registered_para_ids()[0] - .1 - .contains(&ParaId::from(1000))); - - #[extrinsic_call] - Pallet::::unpause_container_chain(RawOrigin::Root, 1000u32.into()); - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - - // Check 1000 is not in Paused - assert!(!Pallet::::paused().contains(&ParaId::from(1000))); - // Check 1000 is in registered_para_ids - assert!(Pallet::::registered_para_ids().contains(&ParaId::from(1000))); - } - - #[benchmark] - fn register_parathread(x: Linear<5, 3_000_000>, y: Linear<1, 50>, z: Linear<1, 10>) { - let mut data = vec![]; - // Number of keys - for _i in 1..z { - data.push((b"code".to_vec(), vec![1; (x / z) as usize]).into()) - } - - let slot_frequency = SlotFrequency::default(); - let storage = new_genesis_data(data); - - for i in 1..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register_parathread( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - slot_frequency.clone(), - storage.clone(), - ) - .unwrap(); - } - - // We should have registered y-1 - assert_eq!(pending_verification_len::(), (y - 1) as usize); - - let (caller, _deposit_amount) = - create_funded_user::("caller", 0, T::DepositAmount::get()); - - #[extrinsic_call] - Pallet::::register_parathread( - RawOrigin::Signed(caller), - Default::default(), - slot_frequency, - storage, - ); - - // verification code - assert_eq!(pending_verification_len::(), y as usize); - assert!(Pallet::::registrar_deposit(ParaId::default()).is_some()); - } - - #[benchmark] - fn set_parathread_params(y: Linear<1, 50>) { - let storage = vec![(vec![1; 4], vec![1; 3_000_000usize]).into()]; - let storage = new_genesis_data(storage); - let slot_frequency = SlotFrequency::default(); - - // Deregister all the existing chains to avoid conflicts with the new ones - for para_id in Pallet::::registered_para_ids() { - Pallet::::deregister(RawOrigin::Root.into(), para_id).unwrap(); - } - - for i in 0..y { - // Twice the deposit just in case - let (caller, _deposit_amount) = - create_funded_user::("caller", i, T::DepositAmount::get()); - Pallet::::register_parathread( - RawOrigin::Signed(caller.clone()).into(), - i.into(), - slot_frequency.clone(), - storage.clone(), - ) - .unwrap(); - T::RegistrarHooks::benchmarks_ensure_valid_for_collating(i.into()); - Pallet::::mark_valid_for_collating(RawOrigin::Root.into(), i.into()).unwrap(); - } - - let new_slot_frequency = SlotFrequency { min: 2, max: 2 }; - - #[extrinsic_call] - Pallet::::set_parathread_params( - RawOrigin::Root, - (y - 1).into(), - new_slot_frequency.clone(), - ); - - // Start a new session - Pallet::::initializer_on_new_session(&T::SessionDelay::get()); - - // Check y-1 has new slot frequency - assert_eq!( - Pallet::::parathread_params(ParaId::from(y - 1)).map(|x| x.slot_frequency), - Some(new_slot_frequency) - ); - } - - impl_benchmark_test_suite!(Pallet, crate::mock::new_test_ext(), crate::mock::Test); -} diff --git a/pallets/registrar/src/lib.rs b/pallets/registrar/src/lib.rs deleted file mode 100644 index 4a0b6df..0000000 --- a/pallets/registrar/src/lib.rs +++ /dev/null @@ -1,1142 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Registrar Pallet -//! -//! This pallet is in charge of registering containerChains (identified by their Id) -//! that have to be served by the orchestrator chain. Parachains registrations and de- -//! registrations are not immediatly applied, but rather they take T::SessionDelay sessions -//! to be applied. -//! -//! Registered container chains are stored in the PendingParaIds storage item until the session -//! in which they can be onboarded arrives, in which case they are added to the RegisteredParaIds -//! storage item. - -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(any(test, feature = "runtime-benchmarks"))] -mod benchmarks; -pub mod weights; -pub use weights::WeightInfo; - -pub use pallet::*; - -use { - frame_support::{ - pallet_prelude::*, - traits::{Currency, ReservableCurrency}, - DefaultNoBound, LOG_TARGET, - }, - frame_system::pallet_prelude::*, - parity_scale_codec::{Decode, Encode}, - sp_runtime::{traits::AtLeast32BitUnsigned, Saturating}, - sp_std::{collections::btree_set::BTreeSet, prelude::*}, - tp_container_chain_genesis_data::ContainerChainGenesisData, - tp_traits::{ - GetCurrentContainerChains, GetSessionContainerChains, GetSessionIndex, ParaId, - ParathreadParams as ParathreadParamsTy, SlotFrequency, - }, -}; - -#[frame_support::pallet] -pub mod pallet { - use {super::*, tp_traits::SessionContainerChains}; - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::genesis_config] - #[derive(DefaultNoBound)] - pub struct GenesisConfig { - /// Para ids - pub para_ids: Vec<(ParaId, ContainerChainGenesisData)>, - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - // Sort para ids and detect duplicates, but do it using a vector of - // references to avoid cloning the genesis data, which may be big. - let mut para_ids: Vec<&_> = self.para_ids.iter().collect(); - para_ids.sort_by(|a, b| a.0.cmp(&b.0)); - para_ids.dedup_by(|a, b| { - if a.0 == b.0 { - panic!("Duplicate para_id: {}", u32::from(a.0)); - } else { - false - } - }); - - let mut bounded_para_ids = BoundedVec::default(); - - for (para_id, genesis_data) in para_ids { - bounded_para_ids - .try_push(*para_id) - .expect("too many para ids in genesis: bounded vec full"); - - let genesis_data_size = genesis_data.encoded_size(); - if genesis_data_size > T::MaxGenesisDataSize::get() as usize { - panic!( - "genesis data for para_id {:?} is too large: {} bytes (limit is {})", - u32::from(*para_id), - genesis_data_size, - T::MaxGenesisDataSize::get() - ); - } - >::insert(para_id, genesis_data); - } - - >::put(bounded_para_ids); - } - } - - /// Configure the pallet by specifying the parameters and types on which it depends. - #[pallet::config] - pub trait Config: frame_system::Config { - /// Because this pallet emits events, it depends on the runtime's definition of an event. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// Origin that is allowed to call register and deregister - type RegistrarOrigin: EnsureOrigin; - - /// Max length of para id list - #[pallet::constant] - type MaxLengthParaIds: Get; - - /// Max length of encoded genesis data - #[pallet::constant] - type MaxGenesisDataSize: Get; - - #[pallet::constant] - type MaxLengthTokenSymbol: Get; - - type SessionIndex: parity_scale_codec::FullCodec + TypeInfo + Copy + AtLeast32BitUnsigned; - - #[pallet::constant] - type SessionDelay: Get; - - type CurrentSessionIndex: GetSessionIndex; - - type Currency: ReservableCurrency; - - #[pallet::constant] - type DepositAmount: Get<>::Balance>; - - type RegistrarHooks: RegistrarHooks; - - type WeightInfo: WeightInfo; - } - - #[pallet::storage] - #[pallet::getter(fn registered_para_ids)] - pub type RegisteredParaIds = - StorageValue<_, BoundedVec, ValueQuery>; - - #[pallet::storage] - #[pallet::getter(fn pending_registered_para_ids)] - pub type PendingParaIds = StorageValue< - _, - Vec<(T::SessionIndex, BoundedVec)>, - ValueQuery, - >; - - #[pallet::storage] - #[pallet::getter(fn para_genesis_data)] - pub type ParaGenesisData = StorageMap< - _, - Blake2_128Concat, - ParaId, - ContainerChainGenesisData, - OptionQuery, - >; - - #[pallet::storage] - #[pallet::getter(fn pending_verification)] - pub type PendingVerification = - StorageMap<_, Blake2_128Concat, ParaId, (), OptionQuery>; - - #[pallet::storage] - #[pallet::getter(fn paused)] - pub type Paused = - StorageValue<_, BoundedVec, ValueQuery>; - - #[pallet::storage] - #[pallet::getter(fn pending_paused)] - pub type PendingPaused = StorageValue< - _, - Vec<(T::SessionIndex, BoundedVec)>, - ValueQuery, - >; - - #[pallet::storage] - #[pallet::getter(fn pending_to_remove)] - pub type PendingToRemove = StorageValue< - _, - Vec<(T::SessionIndex, BoundedVec)>, - ValueQuery, - >; - - #[pallet::storage] - #[pallet::getter(fn parathread_params)] - pub type ParathreadParams = - StorageMap<_, Blake2_128Concat, ParaId, ParathreadParamsTy, OptionQuery>; - - #[pallet::storage] - #[pallet::getter(fn pending_parathread_params)] - pub type PendingParathreadParams = StorageValue< - _, - Vec<( - T::SessionIndex, - BoundedVec<(ParaId, ParathreadParamsTy), T::MaxLengthParaIds>, - )>, - ValueQuery, - >; - - pub type DepositBalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - - #[derive(Default, Clone, Encode, Decode, RuntimeDebug, PartialEq, scale_info::TypeInfo)] - #[scale_info(skip_type_params(T))] - pub struct DepositInfo { - pub creator: T::AccountId, - pub deposit: DepositBalanceOf, - } - - /// Registrar deposits, a mapping from paraId to a struct - /// holding the creator (from which the deposit was reserved) and - /// the deposit amount - #[pallet::storage] - #[pallet::getter(fn registrar_deposit)] - pub type RegistrarDeposit = StorageMap<_, Blake2_128Concat, ParaId, DepositInfo>; - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - /// A new para id has been registered. [para_id] - ParaIdRegistered { para_id: ParaId }, - /// A para id has been deregistered. [para_id] - ParaIdDeregistered { para_id: ParaId }, - /// A new para id is now valid for collating. [para_id] - ParaIdValidForCollating { para_id: ParaId }, - /// A para id has been paused from collating. - ParaIdPaused { para_id: ParaId }, - /// A para id has been unpaused. - ParaIdUnpaused { para_id: ParaId }, - /// Parathread params changed - ParathreadParamsChanged { para_id: ParaId }, - } - - #[pallet::error] - pub enum Error { - /// Attempted to register a ParaId that was already registered - ParaIdAlreadyRegistered, - /// Attempted to deregister a ParaId that is not registered - ParaIdNotRegistered, - /// Attempted to deregister a ParaId that is already being deregistered - ParaIdAlreadyDeregistered, - /// Attempted to pause a ParaId that was already paused - ParaIdAlreadyPaused, - /// Attempted to unpause a ParaId that was not paused - ParaIdNotPaused, - /// The bounded list of ParaIds has reached its limit - ParaIdListFull, - /// Attempted to register a ParaId with a genesis data size greater than the limit - GenesisDataTooBig, - /// Tried to mark_valid_for_collating a ParaId that is not in PendingVerification - ParaIdNotInPendingVerification, - /// Tried to register a ParaId with an account that did not have enough balance for the deposit - NotSufficientDeposit, - /// Tried to change parathread params for a para id that is not a registered parathread - NotAParathread, - } - - #[pallet::hooks] - impl Hooks> for Pallet { - #[cfg(feature = "try-runtime")] - fn try_state(_n: BlockNumberFor) -> Result<(), sp_runtime::TryRuntimeError> { - use {scale_info::prelude::format, sp_std::collections::btree_set::BTreeSet}; - // A para id can only be in 1 of [`RegisteredParaIds`, `PendingVerification`, `Paused`] - // Get all those para ids and check for duplicates - let mut para_ids: Vec = vec![]; - para_ids.extend(RegisteredParaIds::::get()); - para_ids.extend(PendingVerification::::iter_keys()); - para_ids.extend(Paused::::get()); - para_ids.sort(); - para_ids.dedup_by(|a, b| { - if a == b { - panic!("Duplicate para id: {}", u32::from(*a)); - } else { - false - } - }); - - // All para ids have an entry in `ParaGenesisData` - for para_id in ¶_ids { - assert!( - ParaGenesisData::::contains_key(para_id), - "Para id {} missing genesis data", - u32::from(*para_id) - ); - } - - // All entries in `RegistrarDeposit` and `ParaGenesisData` are in one of the other lists - let mut para_id_set = BTreeSet::from_iter(para_ids.iter().cloned()); - // Also add the Pending lists here - para_id_set.extend( - PendingParaIds::::get() - .into_iter() - .flat_map(|(_session_index, x)| x), - ); - para_id_set.extend( - PendingPaused::::get() - .into_iter() - .flat_map(|(_session_index, x)| x), - ); - para_id_set.extend( - PendingToRemove::::get() - .into_iter() - .flat_map(|(_session_index, x)| x), - ); - let entries: Vec<_> = RegistrarDeposit::::iter().map(|(k, _v)| k).collect(); - for para_id in entries { - assert!( - para_id_set.contains(¶_id), - "Found RegistrarDeposit for unknown para id: {}", - u32::from(para_id) - ); - } - let entries: Vec<_> = ParaGenesisData::::iter().map(|(k, _v)| k).collect(); - for para_id in entries { - assert!( - para_id_set.contains(¶_id), - "Found ParaGenesisData for unknown para id: {}", - u32::from(para_id) - ); - } - - // Sorted storage items are sorted - fn assert_is_sorted_and_unique(x: &[T], name: &str) { - assert!( - x.windows(2).all(|w| w[0] < w[1]), - "sorted list not sorted or not unique: {}", - name, - ); - } - assert_is_sorted_and_unique(&RegisteredParaIds::::get(), "RegisteredParaIds"); - assert_is_sorted_and_unique(&Paused::::get(), "Paused"); - for (i, (_session_index, x)) in PendingParaIds::::get().into_iter().enumerate() { - assert_is_sorted_and_unique(&x, &format!("PendingParaIds[{}]", i)); - } - for (i, (_session_index, x)) in PendingPaused::::get().into_iter().enumerate() { - assert_is_sorted_and_unique(&x, &format!("PendingPaused[{}]", i)); - } - for (i, (_session_index, x)) in PendingToRemove::::get().into_iter().enumerate() { - assert_is_sorted_and_unique(&x, &format!("PendingToRemove[{}]", i)); - } - - // Pending storage items are sorted and session index is unique - let pending: Vec<_> = PendingParaIds::::get() - .into_iter() - .map(|(session_index, _x)| session_index) - .collect(); - assert_is_sorted_and_unique(&pending, "PendingParaIds"); - let pending: Vec<_> = PendingPaused::::get() - .into_iter() - .map(|(session_index, _x)| session_index) - .collect(); - assert_is_sorted_and_unique(&pending, "PendingPaused"); - let pending: Vec<_> = PendingToRemove::::get() - .into_iter() - .map(|(session_index, _x)| session_index) - .collect(); - assert_is_sorted_and_unique(&pending, "PendingToRemove"); - - Ok(()) - } - } - - #[pallet::call] - impl Pallet { - /// Register container-chain - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::register(genesis_data.encoded_size() as u32, T::MaxLengthParaIds::get(), genesis_data.storage.len() as u32))] - pub fn register( - origin: OriginFor, - para_id: ParaId, - genesis_data: ContainerChainGenesisData, - ) -> DispatchResult { - let account = ensure_signed(origin)?; - Self::do_register(account, para_id, genesis_data)?; - Self::deposit_event(Event::ParaIdRegistered { para_id }); - - Ok(()) - } - - /// Deregister container-chain. - /// - /// If a container-chain is registered but not marked as valid_for_collating, this will remove it - /// from `PendingVerification` as well. - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::deregister_immediate( - T::MaxGenesisDataSize::get(), - T::MaxLengthParaIds::get() - ).max(T::WeightInfo::deregister_scheduled( - T::MaxGenesisDataSize::get(), - T::MaxLengthParaIds::get() - )))] - pub fn deregister(origin: OriginFor, para_id: ParaId) -> DispatchResult { - T::RegistrarOrigin::ensure_origin(origin)?; - - // Check if the para id is in "PendingVerification". - // This is a special case because then we can remove it immediately, instead of waiting 2 sessions. - let is_pending_verification = PendingVerification::::take(para_id).is_some(); - if is_pending_verification { - Self::deposit_event(Event::ParaIdDeregistered { para_id }); - // Cleanup immediately - Self::cleanup_deregistered_para_id(para_id); - } else { - Self::schedule_paused_parachain_change(|para_ids, paused| { - // We have to find out where, in the sorted vec the para id is, if anywhere. - - match para_ids.binary_search(¶_id) { - Ok(index) => { - para_ids.remove(index); - } - Err(_) => { - // If the para id is not registered, it may be paused. In that case, remove it from there - match paused.binary_search(¶_id) { - Ok(index) => { - paused.remove(index); - } - Err(_) => { - return Err(Error::::ParaIdNotRegistered.into()); - } - } - } - } - - Ok(()) - })?; - // Mark this para id for cleanup later - Self::schedule_parachain_cleanup(para_id)?; - Self::deposit_event(Event::ParaIdDeregistered { para_id }); - } - - Ok(()) - } - - /// Mark container-chain valid for collating - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::mark_valid_for_collating(T::MaxLengthParaIds::get()))] - pub fn mark_valid_for_collating(origin: OriginFor, para_id: ParaId) -> DispatchResult { - T::RegistrarOrigin::ensure_origin(origin)?; - - let is_pending_verification = PendingVerification::::take(para_id).is_some(); - if !is_pending_verification { - return Err(Error::::ParaIdNotInPendingVerification.into()); - } - - Self::schedule_parachain_change(|para_ids| { - // We don't want to add duplicate para ids, so we check whether the potential new - // para id is already present in the list. Because the list is always ordered, we can - // leverage the binary search which makes this check O(log n). - - match para_ids.binary_search(¶_id) { - // This Ok is unreachable - Ok(_) => return Err(Error::::ParaIdAlreadyRegistered.into()), - Err(index) => { - para_ids - .try_insert(index, para_id) - .map_err(|_e| Error::::ParaIdListFull)?; - } - } - - Ok(()) - })?; - - T::RegistrarHooks::check_valid_for_collating(para_id)?; - - Self::deposit_event(Event::ParaIdValidForCollating { para_id }); - - T::RegistrarHooks::para_marked_valid_for_collating(para_id); - - Ok(()) - } - - /// Pause container-chain from collating. Does not remove its boot nodes nor its genesis config. - /// Only container-chains that have been marked as valid_for_collating can be paused. - #[pallet::call_index(4)] - #[pallet::weight(T::WeightInfo::pause_container_chain(T::MaxLengthParaIds::get()))] - pub fn pause_container_chain(origin: OriginFor, para_id: ParaId) -> DispatchResult { - T::RegistrarOrigin::ensure_origin(origin)?; - - Self::schedule_paused_parachain_change(|para_ids, paused| { - match paused.binary_search(¶_id) { - Ok(_) => return Err(Error::::ParaIdAlreadyPaused.into()), - Err(index) => { - paused - .try_insert(index, para_id) - .map_err(|_e| Error::::ParaIdListFull)?; - } - } - match para_ids.binary_search(¶_id) { - Ok(index) => { - para_ids.remove(index); - } - // We can only pause para ids that are marked as valid, - // otherwise unpausing them later would cause problems - Err(_) => return Err(Error::::ParaIdNotRegistered.into()), - } - Self::deposit_event(Event::ParaIdPaused { para_id }); - - Ok(()) - })?; - - Ok(()) - } - - /// Unpause container-chain. - /// Only container-chains that have been paused can be unpaused. - #[pallet::call_index(5)] - #[pallet::weight(T::WeightInfo::unpause_container_chain(T::MaxLengthParaIds::get()))] - pub fn unpause_container_chain(origin: OriginFor, para_id: ParaId) -> DispatchResult { - T::RegistrarOrigin::ensure_origin(origin)?; - - Self::schedule_paused_parachain_change(|para_ids, paused| { - match paused.binary_search(¶_id) { - Ok(index) => { - paused.remove(index); - } - Err(_) => return Err(Error::::ParaIdNotPaused.into()), - } - match para_ids.binary_search(¶_id) { - // This Ok is unreachable, a para id cannot be in "RegisteredParaIds" and "Paused" at the same time - Ok(_) => return Err(Error::::ParaIdAlreadyRegistered.into()), - Err(index) => { - para_ids - .try_insert(index, para_id) - .map_err(|_e| Error::::ParaIdListFull)?; - } - } - Self::deposit_event(Event::ParaIdUnpaused { para_id }); - - Ok(()) - })?; - - Ok(()) - } - - /// Register parathread - #[pallet::call_index(6)] - #[pallet::weight(T::WeightInfo::register_parathread(genesis_data.encoded_size() as u32, T::MaxLengthParaIds::get(), genesis_data.storage.len() as u32))] - pub fn register_parathread( - origin: OriginFor, - para_id: ParaId, - slot_frequency: SlotFrequency, - genesis_data: ContainerChainGenesisData, - ) -> DispatchResult { - let account = ensure_signed(origin)?; - Self::do_register(account, para_id, genesis_data)?; - // Insert parathread params - let params = ParathreadParamsTy { slot_frequency }; - ParathreadParams::::insert(para_id, params); - Self::deposit_event(Event::ParaIdRegistered { para_id }); - - Ok(()) - } - - /// Change parathread params - #[pallet::call_index(7)] - #[pallet::weight(T::WeightInfo::set_parathread_params(T::MaxLengthParaIds::get()))] - pub fn set_parathread_params( - origin: OriginFor, - para_id: ParaId, - slot_frequency: SlotFrequency, - ) -> DispatchResult { - T::RegistrarOrigin::ensure_origin(origin)?; - - Self::schedule_parathread_params_change(para_id, |params| { - params.slot_frequency = slot_frequency; - - Self::deposit_event(Event::ParathreadParamsChanged { para_id }); - - Ok(()) - })?; - - Ok(()) - } - } - - pub struct SessionChangeOutcome { - /// Previously active parachains. - pub prev_paras: BoundedVec, - /// If new parachains have been applied in the new session, this is the new list. - pub new_paras: Option>, - } - - impl Pallet { - pub fn is_para_manager(para_id: &ParaId, account: &T::AccountId) -> bool { - // This check will only pass if both are true: - // * The para_id has a deposit in pallet_registrar - // * The deposit creator is the signed_account - RegistrarDeposit::::get(para_id) - .map(|deposit_info| deposit_info.creator) - .as_ref() - == Some(account) - } - - #[cfg(feature = "runtime-benchmarks")] - pub fn benchmarks_get_or_create_para_manager(para_id: &ParaId) -> T::AccountId { - use { - frame_benchmarking::account, - frame_support::{assert_ok, dispatch::RawOrigin, traits::Currency}, - }; - // Return container chain manager, or register container chain as ALICE if it does not exist - if !ParaGenesisData::::contains_key(para_id) { - // Register as a new user - - /// Create a funded user. - /// Used for generating the necessary amount for registering - fn create_funded_user( - string: &'static str, - n: u32, - total: DepositBalanceOf, - ) -> (T::AccountId, DepositBalanceOf) { - const SEED: u32 = 0; - let user = account(string, n, SEED); - T::Currency::make_free_balance_be(&user, total); - let _ = T::Currency::issue(total); - (user, total) - } - let new_balance = - (T::Currency::minimum_balance() + T::DepositAmount::get()) * 2u32.into(); - let account = create_funded_user::("caller", 1000, new_balance).0; - let origin = RawOrigin::Signed(account); - assert_ok!(Self::register(origin.into(), *para_id, Default::default())); - } - - let deposit_info = RegistrarDeposit::::get(para_id).expect("Cannot return signed origin for a container chain that was registered by root. Try using a different para id"); - - // Fund deposit creator, just in case it is not a new account - let new_balance = - (T::Currency::minimum_balance() + T::DepositAmount::get()) * 2u32.into(); - T::Currency::make_free_balance_be(&deposit_info.creator, new_balance); - let _ = T::Currency::issue(new_balance); - - deposit_info.creator - } - - fn do_register( - account: T::AccountId, - para_id: ParaId, - genesis_data: ContainerChainGenesisData, - ) -> DispatchResult { - let deposit = T::DepositAmount::get(); - - // Verify we can reserve - T::Currency::can_reserve(&account, deposit) - .then_some(true) - .ok_or(Error::::NotSufficientDeposit)?; - - // Check if the para id is already registered by looking at the genesis data - if ParaGenesisData::::contains_key(para_id) { - return Err(Error::::ParaIdAlreadyRegistered.into()); - } - - // Check if the para id is already in PendingVerification (unreachable) - let is_pending_verification = PendingVerification::::take(para_id).is_some(); - if is_pending_verification { - return Err(Error::::ParaIdAlreadyRegistered.into()); - } - - // Insert para id into PendingVerification - PendingVerification::::insert(para_id, ()); - - // The actual registration takes place 2 sessions after the call to - // `mark_valid_for_collating`, but the genesis data is inserted now. - // This is because collators should be able to start syncing the new container chain - // before the first block is mined. However, we could store the genesis data in a - // different key, like PendingParaGenesisData. - // TODO: for benchmarks, this call to .encoded_size is O(n) with respect to the number - // of key-values in `genesis_data.storage`, even if those key-values are empty. And we - // won't detect that the size is too big until after iterating over all of them, so the - // limit in that case would be the transaction size. - let genesis_data_size = genesis_data.encoded_size(); - if genesis_data_size > T::MaxGenesisDataSize::get() as usize { - return Err(Error::::GenesisDataTooBig.into()); - } - - // Reserve the deposit, we verified we can do this - T::Currency::reserve(&account, deposit)?; - - // Update DepositInfo - RegistrarDeposit::::insert( - para_id, - DepositInfo { - creator: account, - deposit, - }, - ); - ParaGenesisData::::insert(para_id, genesis_data); - - Ok(()) - } - - fn schedule_parachain_change( - updater: impl FnOnce(&mut BoundedVec) -> DispatchResult, - ) -> DispatchResult { - let mut pending_paras = PendingParaIds::::get(); - // First, we need to decide what we should use as the base paras. - let mut base_paras = pending_paras - .last() - .map(|(_, paras)| paras.clone()) - .unwrap_or_else(Self::registered_para_ids); - - updater(&mut base_paras)?; - let new_paras = base_paras; - - let scheduled_session = Self::scheduled_session(); - - if let Some(&mut (_, ref mut paras)) = pending_paras - .iter_mut() - .find(|&&mut (apply_at_session, _)| apply_at_session >= scheduled_session) - { - *paras = new_paras; - } else { - // We are scheduling a new parachains change for the scheduled session. - pending_paras.push((scheduled_session, new_paras)); - } - - >::put(pending_paras); - - Ok(()) - } - - fn schedule_paused_parachain_change( - updater: impl FnOnce( - &mut BoundedVec, - &mut BoundedVec, - ) -> DispatchResult, - ) -> DispatchResult { - let mut pending_paras = PendingParaIds::::get(); - let mut pending_paused = PendingPaused::::get(); - // First, we need to decide what we should use as the base paras. - let mut base_paras = pending_paras - .last() - .map(|(_, paras)| paras.clone()) - .unwrap_or_else(Self::registered_para_ids); - let mut base_paused = pending_paused - .last() - .map(|(_, paras)| paras.clone()) - .unwrap_or_else(Self::paused); - let old_base_paras = base_paras.clone(); - let old_base_paused = base_paused.clone(); - - updater(&mut base_paras, &mut base_paused)?; - - if base_paras != old_base_paras { - let new_paras = base_paras; - let scheduled_session = Self::scheduled_session(); - - if let Some(&mut (_, ref mut paras)) = pending_paras - .iter_mut() - .find(|&&mut (apply_at_session, _)| apply_at_session >= scheduled_session) - { - *paras = new_paras; - } else { - // We are scheduling a new parachains change for the scheduled session. - pending_paras.push((scheduled_session, new_paras)); - } - - >::put(pending_paras); - } - - if base_paused != old_base_paused { - let new_paused = base_paused; - let scheduled_session = Self::scheduled_session(); - - if let Some(&mut (_, ref mut paras)) = pending_paused - .iter_mut() - .find(|&&mut (apply_at_session, _)| apply_at_session >= scheduled_session) - { - *paras = new_paused; - } else { - // We are scheduling a new parachains change for the scheduled session. - pending_paused.push((scheduled_session, new_paused)); - } - - >::put(pending_paused); - } - - Ok(()) - } - - fn schedule_parathread_params_change( - para_id: ParaId, - updater: impl FnOnce(&mut ParathreadParamsTy) -> DispatchResult, - ) -> DispatchResult { - // Check that the para id is a parathread by reading the old params - let params = match ParathreadParams::::get(para_id) { - Some(x) => x, - None => { - return Err(Error::::NotAParathread.into()); - } - }; - - let mut pending_params = PendingParathreadParams::::get(); - // First, we need to decide what we should use as the base params. - let mut base_params = pending_params - .last() - .and_then(|(_, para_id_params)| { - match para_id_params - .binary_search_by_key(¶_id, |(para_id, _params)| *para_id) - { - Ok(idx) => { - let (_para_id, params) = ¶_id_params[idx]; - Some(params.clone()) - } - Err(_idx) => None, - } - }) - .unwrap_or(params); - - updater(&mut base_params)?; - let new_params = base_params; - - let scheduled_session = Self::scheduled_session(); - - if let Some(&mut (_, ref mut para_id_params)) = pending_params - .iter_mut() - .find(|&&mut (apply_at_session, _)| apply_at_session >= scheduled_session) - { - match para_id_params.binary_search_by_key(¶_id, |(para_id, _params)| *para_id) { - Ok(idx) => { - let (_para_id, params) = &mut para_id_params[idx]; - *params = new_params; - } - Err(idx) => { - para_id_params - .try_insert(idx, (para_id, new_params)) - .map_err(|_e| Error::::ParaIdListFull)?; - } - } - } else { - // We are scheduling a new parathread params change for the scheduled session. - pending_params.push(( - scheduled_session, - BoundedVec::truncate_from(vec![(para_id, new_params)]), - )); - } - - >::put(pending_params); - - Ok(()) - } - - /// Return the session index that should be used for any future scheduled changes. - fn scheduled_session() -> T::SessionIndex { - T::CurrentSessionIndex::session_index().saturating_add(T::SessionDelay::get()) - } - - /// Called by the initializer to note that a new session has started. - /// - /// Returns the parachain list that was actual before the session change and the parachain list - /// that became active after the session change. If there were no scheduled changes, both will - /// be the same. - pub fn initializer_on_new_session( - session_index: &T::SessionIndex, - ) -> SessionChangeOutcome { - let pending_paras = >::get(); - let prev_paras = RegisteredParaIds::::get(); - - let new_paras = if !pending_paras.is_empty() { - let (mut past_and_present, future) = pending_paras - .into_iter() - .partition::, _>(|&(apply_at_session, _)| { - apply_at_session <= *session_index - }); - - if past_and_present.len() > 1 { - // This should never happen since we schedule parachain changes only into the future - // sessions and this handler called for each session change. - log::error!( - target: LOG_TARGET, - "Skipping applying parachain changes scheduled sessions in the past", - ); - } - - let new_paras = past_and_present.pop().map(|(_, paras)| paras); - if let Some(ref new_paras) = new_paras { - // Apply the new parachain list. - RegisteredParaIds::::put(new_paras); - >::put(future); - } - - new_paras - } else { - // pending_paras.is_empty, so parachain list did not change - None - }; - - let pending_paused = >::get(); - if !pending_paused.is_empty() { - let (mut past_and_present, future) = pending_paused - .into_iter() - .partition::, _>(|&(apply_at_session, _)| { - apply_at_session <= *session_index - }); - - if past_and_present.len() > 1 { - // This should never happen since we schedule parachain changes only into the future - // sessions and this handler called for each session change. - log::error!( - target: LOG_TARGET, - "Skipping applying paused parachain changes scheduled sessions in the past", - ); - } - - let new_paused = past_and_present.pop().map(|(_, paras)| paras); - if let Some(ref new_paused) = new_paused { - // Apply the new parachain list. - Paused::::put(new_paused); - >::put(future); - } - } - - let pending_parathread_params = >::get(); - if !pending_parathread_params.is_empty() { - let (mut past_and_present, future) = pending_parathread_params - .into_iter() - .partition::, _>(|&(apply_at_session, _)| { - apply_at_session <= *session_index - }); - - if past_and_present.len() > 1 { - // This should never happen since we schedule parachain changes only into the future - // sessions and this handler called for each session change. - log::error!( - target: LOG_TARGET, - "Skipping applying parathread params changes scheduled sessions in the past", - ); - } - - let new_params = past_and_present.pop().map(|(_, params)| params); - if let Some(ref new_params) = new_params { - for (para_id, params) in new_params { - >::insert(para_id, params); - } - >::put(future); - } - } - - let pending_to_remove = >::get(); - if !pending_to_remove.is_empty() { - let (past_and_present, future) = - pending_to_remove.into_iter().partition::, _>( - |&(apply_at_session, _)| apply_at_session <= *session_index, - ); - - if !past_and_present.is_empty() { - // Unlike `PendingParaIds`, this cannot skip items because we must cleanup all parachains. - // But this will only happen if `initializer_on_new_session` is not called for a big range of - // sessions, and many parachains are deregistered in the meantime. - let mut removed_para_ids = BTreeSet::new(); - for (_, new_paras) in &past_and_present { - for para_id in new_paras { - Self::cleanup_deregistered_para_id(*para_id); - removed_para_ids.insert(*para_id); - } - } - - // Also need to remove PendingParams to avoid setting params for a para id that does not exist - let mut pending_parathread_params = >::get(); - for (_, new_params) in &mut pending_parathread_params { - new_params.retain(|(para_id, _params)| { - // Retain para ids that are not in the list of removed para ids - !removed_para_ids.contains(para_id) - }); - } - >::put(pending_parathread_params); - >::put(future); - } - } - - SessionChangeOutcome { - prev_paras, - new_paras, - } - } - - /// Remove all para id storage in this pallet, - /// and execute para_deregistered hook to clean up other pallets as well - fn cleanup_deregistered_para_id(para_id: ParaId) { - ParaGenesisData::::remove(para_id); - ParathreadParams::::remove(para_id); - // Get asset creator and deposit amount - // Deposit may not exist, for example if the para id was registered on genesis - if let Some(asset_info) = RegistrarDeposit::::take(para_id) { - // Unreserve deposit - T::Currency::unreserve(&asset_info.creator, asset_info.deposit); - } - - T::RegistrarHooks::para_deregistered(para_id); - } - - fn schedule_parachain_cleanup(para_id: ParaId) -> DispatchResult { - let scheduled_session = Self::scheduled_session(); - let mut pending_paras = PendingToRemove::::get(); - // First, we need to decide what we should use as the base paras. - let base_paras = match pending_paras - .binary_search_by_key(&scheduled_session, |(session, _paras)| *session) - { - Ok(i) => &mut pending_paras[i].1, - Err(i) => { - pending_paras.insert(i, (scheduled_session, Default::default())); - - &mut pending_paras[i].1 - } - }; - - // Add the para_id to the entry for the scheduled session. - match base_paras.binary_search(¶_id) { - // This Ok is unreachable - Ok(_) => return Err(Error::::ParaIdAlreadyDeregistered.into()), - Err(index) => { - base_paras - .try_insert(index, para_id) - .map_err(|_e| Error::::ParaIdListFull)?; - } - } - - // Save the updated list of pending parachains for removal. - >::put(pending_paras); - - Ok(()) - } - } - - impl GetCurrentContainerChains for Pallet { - type MaxContainerChains = T::MaxLengthParaIds; - - fn current_container_chains() -> BoundedVec { - Self::registered_para_ids() - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_current_container_chains(container_chains: &[ParaId]) { - let paras: BoundedVec = - container_chains.to_vec().try_into().unwrap(); - RegisteredParaIds::::put(paras); - } - } - - impl GetSessionContainerChains for Pallet { - fn session_container_chains(session_index: T::SessionIndex) -> SessionContainerChains { - let (past_and_present, _) = Pallet::::pending_registered_para_ids() - .into_iter() - .partition::, _>(|&(apply_at_session, _)| apply_at_session <= session_index); - - let paras = if let Some(last) = past_and_present.last() { - last.1.clone() - } else { - Pallet::::registered_para_ids() - }; - - let mut parachains = vec![]; - let mut parathreads = vec![]; - - for para_id in paras { - // TODO: sweet O(n) db reads - if let Some(parathread_params) = ParathreadParams::::get(para_id) { - parathreads.push((para_id, parathread_params)); - } else { - parachains.push(para_id); - } - } - - SessionContainerChains { - parachains, - parathreads, - } - } - - #[cfg(feature = "runtime-benchmarks")] - fn set_session_container_chains( - _session_index: T::SessionIndex, - container_chains: &[ParaId], - ) { - // TODO: this assumes session_index == current - let paras: BoundedVec = - container_chains.to_vec().try_into().unwrap(); - RegisteredParaIds::::put(paras); - } - } -} - -pub trait RegistrarHooks { - fn para_marked_valid_for_collating(_para_id: ParaId) -> Weight { - Weight::default() - } - fn para_deregistered(_para_id: ParaId) -> Weight { - Weight::default() - } - fn check_valid_for_collating(_para_id: ParaId) -> DispatchResult { - Ok(()) - } - - #[cfg(feature = "runtime-benchmarks")] - fn benchmarks_ensure_valid_for_collating(_para_id: ParaId) {} -} - -impl RegistrarHooks for () {} - -pub struct EnsureSignedByManager(sp_std::marker::PhantomData); - -impl frame_support::traits::EnsureOriginWithArg - for EnsureSignedByManager -where - T: Config, -{ - type Success = (); - - fn try_origin( - o: T::RuntimeOrigin, - para_id: &ParaId, - ) -> Result { - let signed_account = - as EnsureOrigin<_>>::try_origin(o.clone())?; - - if !Pallet::::is_para_manager(para_id, &signed_account) { - return Err(frame_system::RawOrigin::Signed(signed_account).into()); - } - - Ok(()) - } - - #[cfg(feature = "runtime-benchmarks")] - fn try_successful_origin(para_id: &ParaId) -> Result { - let manager = Pallet::::benchmarks_get_or_create_para_manager(para_id); - - Ok(frame_system::RawOrigin::Signed(manager).into()) - } -} diff --git a/pallets/registrar/src/mock.rs b/pallets/registrar/src/mock.rs deleted file mode 100644 index a0ef533..0000000 --- a/pallets/registrar/src/mock.rs +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use tp_container_chain_genesis_data::ContainerChainGenesisData; - -use { - crate::{self as pallet_registrar, RegistrarHooks}, - frame_support::{ - traits::{ConstU16, ConstU64}, - weights::Weight, - }, - parity_scale_codec::{Decode, Encode}, - sp_core::{parameter_types, ConstU32, H256}, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, - std::collections::BTreeMap, - tp_traits::ParaId, -}; - -type Block = frame_system::mocking::MockBlock; -pub type Balance = u128; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - ParaRegistrar: pallet_registrar, - Mock: mock_data, - } -); - -impl frame_system::Config for Test { - type BaseCallFilter = frame_support::traits::Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = u64; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = ConstU16<42>; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const ExistentialDeposit: u128 = 1; -} -impl pallet_balances::Config for Test { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type RuntimeFreezeReason = (); - type MaxHolds = (); - type WeightInfo = (); -} - -pub struct CurrentSessionIndexGetter; - -impl tp_traits::GetSessionIndex for CurrentSessionIndexGetter { - /// Returns current session index. - fn session_index() -> u32 { - // For tests, let 1 session be 5 blocks - (System::block_number() / 5) as u32 - } -} - -parameter_types! { - pub const DepositAmount: Balance = 100; - pub const MaxLengthTokenSymbol: u32 = 255; -} -impl pallet_registrar::Config for Test { - type RuntimeEvent = RuntimeEvent; - type RegistrarOrigin = frame_system::EnsureRoot; - type MaxLengthParaIds = ConstU32<1000>; - type MaxGenesisDataSize = ConstU32<5_000_000>; - type MaxLengthTokenSymbol = MaxLengthTokenSymbol; - type SessionDelay = ConstU32<2>; - type SessionIndex = u32; - type CurrentSessionIndex = CurrentSessionIndexGetter; - type Currency = Balances; - type DepositAmount = DepositAmount; - type RegistrarHooks = Mock; - type WeightInfo = (); -} - -// Pallet to provide some mock data, used to test -#[frame_support::pallet] -pub mod mock_data { - use {super::*, frame_support::pallet_prelude::*}; - - #[pallet::config] - pub trait Config: frame_system::Config {} - - #[pallet::call] - impl Pallet {} - - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(_); - - #[pallet::storage] - #[pallet::getter(fn mock)] - pub(super) type Mock = StorageValue<_, Mocks, ValueQuery>; - - impl Pallet { - pub fn get() -> Mocks { - Mock::::get() - } - pub fn mutate(f: F) -> R - where - F: FnOnce(&mut Mocks) -> R, - { - Mock::::mutate(f) - } - } -} - -#[derive(Clone, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub enum HookCall { - MarkedValid(ParaId), - Deregistered(ParaId), -} - -pub enum HookCallType { - MarkedValid, - Deregistered, -} - -// We use the mock_data pallet to test registrar hooks: we store a list of all the calls, and then check that there -// are no consecutive calls. Because there used to be a bug where the deregister hook was called twice. -impl RegistrarHooks for mock_data::Pallet { - fn para_deregistered(para_id: ParaId) -> Weight { - Mock::mutate(|m| { - m.called_hooks.push(HookCall::Deregistered(para_id)); - - Weight::default() - }) - } - - fn para_marked_valid_for_collating(para_id: ParaId) -> Weight { - Mock::mutate(|m| { - m.called_hooks.push(HookCall::MarkedValid(para_id)); - - Weight::default() - }) - } - - fn check_valid_for_collating(_para_id: ParaId) -> crate::DispatchResult { - // Ignored, we already test this in integration tests - Ok(()) - } - - #[cfg(feature = "runtime-benchmarks")] - fn benchmarks_ensure_valid_for_collating(_para_id: ParaId) {} -} - -impl mock_data::Config for Test {} - -#[derive( - Clone, Default, Encode, Decode, PartialEq, sp_core::RuntimeDebug, scale_info::TypeInfo, -)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct Mocks { - pub called_hooks: Vec, -} - -impl Drop for Mocks { - fn drop(&mut self) { - self.check_consistency(); - } -} - -impl Mocks { - pub fn check_consistency(&self) { - /// Asserts that the calls for each ParaId alternate between MarkedValid and Deregister, - /// we never see two calls with the same type. - pub fn assert_alternating(hook_calls: &[HookCall]) { - let mut last_call_type: BTreeMap = BTreeMap::new(); - - for call in hook_calls { - match call { - HookCall::MarkedValid(para_id) => { - if let Some(HookCallType::MarkedValid) = last_call_type.get(para_id) { - panic!( - "Two consecutive MarkedValid calls for ParaId: {:?}", - para_id - ); - } - last_call_type.insert(*para_id, HookCallType::MarkedValid); - } - HookCall::Deregistered(para_id) => { - if let Some(HookCallType::Deregistered) = last_call_type.get(para_id) { - panic!( - "Two consecutive Deregistered calls for ParaId: {:?}", - para_id - ); - } - last_call_type.insert(*para_id, HookCallType::Deregistered); - } - } - } - } - - // For each para id, the calls must alterante between MarkedValid and Deregister - assert_alternating(&self.called_hooks); - // Since para ids can already be registered in genesis, we cannot assert that the first call is MarkedValid - } -} - -const ALICE: u64 = 1; - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext() -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - - pallet_balances::GenesisConfig:: { - balances: vec![(ALICE, 1_000)], - } - .assimilate_storage(&mut t) - .unwrap(); - - t.into() -} - -// Build genesis storage according to the mock runtime. -pub fn new_test_ext_with_genesis( - para_ids: Vec<(ParaId, ContainerChainGenesisData)>, -) -> sp_io::TestExternalities { - RuntimeGenesisConfig { - system: Default::default(), - balances: Default::default(), - para_registrar: pallet_registrar::GenesisConfig { para_ids }, - } - .build_storage() - .unwrap() - .into() -} - -pub fn empty_genesis_data() -> ContainerChainGenesisData { - ContainerChainGenesisData { - storage: Default::default(), - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - } -} - -pub const SESSION_LEN: u64 = 5; - -pub fn run_to_session(n: u32) { - let block_number = SESSION_LEN * u64::from(n); - run_to_block(block_number + 1); -} - -pub fn run_to_block(n: u64) { - let old_block_number = System::block_number(); - - for x in (old_block_number + 1)..=n { - System::reset_events(); - System::set_block_number(x); - - if x % SESSION_LEN == 1 { - let session_index = (x / SESSION_LEN) as u32; - ParaRegistrar::initializer_on_new_session(&session_index); - } - } -} diff --git a/pallets/registrar/src/tests.rs b/pallets/registrar/src/tests.rs deleted file mode 100644 index 1e93aa6..0000000 --- a/pallets/registrar/src/tests.rs +++ /dev/null @@ -1,1370 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{mock::*, Error, Event}, - frame_support::{assert_noop, assert_ok, dispatch::GetDispatchInfo, BoundedVec}, - parity_scale_codec::Encode, - sp_core::Get, - sp_runtime::DispatchError, - tp_container_chain_genesis_data::ContainerChainGenesisData, - tp_traits::{ParaId, SlotFrequency}, -}; - -const ALICE: u64 = 1; -//const BOB: u64 = 2; - -#[test] -fn register_para_id_42() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdRegistered { para_id: 42.into() }.into()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdValidForCollating { para_id: 42.into() }.into()); - - // Assert after two sessions it goes to the non-pending - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - assert_eq!(ParaRegistrar::pending_registered_para_ids(), vec![]); - }); -} - -#[test] -fn register_para_id_42_twice() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_noop!( - ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - ), - Error::::ParaIdAlreadyRegistered - ); - }); -} - -#[test] -fn register_para_id_42_genesis_data_size_too_big() { - new_test_ext().execute_with(|| { - run_to_block(1); - let genesis_data = ContainerChainGenesisData { - storage: vec![(vec![], vec![0; 5_000_000]).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - }; - assert_noop!( - ParaRegistrar::register(RuntimeOrigin::signed(ALICE), 42.into(), genesis_data,), - Error::::GenesisDataTooBig, - ); - }); -} - -#[test] -fn deregister_para_id_from_empty_list() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotRegistered - ); - }); -} - -#[test] -fn deregister_para_id_42_after_0_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![]).unwrap())] - ); - // This para id will never be in registered so we do not need to keep the genesis data, - // but we do anyway, and the genesis data is deleted after 2 sessions - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(1); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - // Assert after two sessions genesis data gets deleted - run_to_session(2); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn deregister_para_id_42_after_1_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(1); - // Deregister while its pending - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![ - (2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap()), - (3u32, BoundedVec::try_from(vec![]).unwrap()) - ] - ); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(3u32, BoundedVec::try_from(vec![]).unwrap())] - ); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(3); - assert_eq!(ParaRegistrar::pending_registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn deregister_para_id_42_after_2_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - - // Assert after two sessions it goes to the non-pending - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(4u32, BoundedVec::try_from(vec![]).unwrap())] - ); - - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(3); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(4); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn deregister_para_id_42_twice() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![]).unwrap())] - ); - assert_noop!( - ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotRegistered - ); - }); -} - -#[test] -fn deregister_para_id_removes_genesis_data() { - new_test_ext().execute_with(|| { - run_to_block(1); - let genesis_data = ContainerChainGenesisData { - storage: vec![(b"key".to_vec(), b"value".to_vec()).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - }; - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - genesis_data.clone(), - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&genesis_data), - ); - - // Assert after two sessions it goes to the non-pending - run_to_session(2); - - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(4u32, BoundedVec::try_from(vec![]).unwrap())] - ); - - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - - // Genesis data has not been deleted yet, it will be deleted after 2 sessions - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)), - Some(genesis_data), - ); - run_to_session(4); - assert_eq!(ParaRegistrar::para_genesis_data(ParaId::from(42)), None); - }); -} - -#[test] -fn register_para_id_bad_origin() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::register(RuntimeOrigin::root(), 42.into(), empty_genesis_data()), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn deregister_para_id_bad_origin() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::deregister(RuntimeOrigin::signed(1), 42.into()), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn mark_valid_for_collating_bad_origin() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::mark_valid_for_collating(RuntimeOrigin::signed(1), 42.into()), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn pause_para_id_42_works() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - - // Enable the container-chain for the first time - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - - // Pause the container-chain - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - - // Assert that the ParaIdPaused event was emitted - System::assert_last_event(Event::ParaIdPaused { para_id: 42.into() }.into()); - - // Check genesis data was not removed - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - // Check the container chain was not selected for the next period - run_to_session(4); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - }); -} - -#[test] -fn pause_para_id_42_twice_fails() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - - // Enable the container-chain for collating - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - - // Pause the container-chain - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - - // Try to pause again - assert_noop!( - ParaRegistrar::pause_container_chain(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdAlreadyPaused - ); - }); -} - -#[test] -fn pause_para_id_42_fails_not_registered() { - new_test_ext().execute_with(|| { - run_to_block(1); - // Try to pause - assert_noop!( - ParaRegistrar::pause_container_chain(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotRegistered - ); - }); -} - -#[test] -fn pause_container_chain_bad_origin() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::pause_container_chain(RuntimeOrigin::signed(1), 42.into()), - DispatchError::BadOrigin - ); - }); -} - -#[test] -fn unpause_para_id_that_is_not_paused_fails() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - - // Enable the container-chain for collating - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - - // Try to unpause - assert_noop!( - ParaRegistrar::unpause_container_chain(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotPaused - ); - }); -} - -#[test] -fn unpause_para_id_42_twice_fails() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - - // Enable the container-chain for collating - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - ParaRegistrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![42u32.into()]).unwrap())] - ); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - - // Pause the container-chain - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - - // Unpause - assert_ok!(ParaRegistrar::unpause_container_chain( - RuntimeOrigin::root(), - 42.into(), - ),); - - // Unpause again fails - assert_noop!( - ParaRegistrar::unpause_container_chain(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotPaused - ); - }); -} - -#[test] -fn unpause_para_id_42_fails_not_registered() { - new_test_ext().execute_with(|| { - run_to_block(1); - // Try to pause - assert_noop!( - ParaRegistrar::unpause_container_chain(RuntimeOrigin::root(), 42.into()), - Error::::ParaIdNotPaused - ); - }); -} - -#[test] -fn genesis_loads_para_ids() { - new_test_ext_with_genesis(vec![ - (1.into(), empty_genesis_data()), - (2.into(), empty_genesis_data()), - (3.into(), empty_genesis_data()), - (4.into(), empty_genesis_data()), - ]) - .execute_with(|| { - run_to_block(1); - assert_eq!( - ParaRegistrar::registered_para_ids(), - vec![1.into(), 2.into(), 3.into(), 4.into()] - ); - }); -} - -#[test] -fn genesis_sorts_para_ids() { - new_test_ext_with_genesis(vec![ - (4.into(), empty_genesis_data()), - (2.into(), empty_genesis_data()), - (3.into(), empty_genesis_data()), - (1.into(), empty_genesis_data()), - ]) - .execute_with(|| { - run_to_block(1); - assert_eq!( - ParaRegistrar::registered_para_ids(), - vec![1.into(), 2.into(), 3.into(), 4.into()] - ); - }); -} - -#[test] -#[should_panic = "Duplicate para_id: 2"] -fn genesis_error_on_duplicate() { - new_test_ext_with_genesis(vec![ - (2.into(), empty_genesis_data()), - (3.into(), empty_genesis_data()), - (4.into(), empty_genesis_data()), - (2.into(), empty_genesis_data()), - ]) - .execute_with(|| { - run_to_block(1); - }); -} - -#[test] -#[should_panic = "genesis data for para_id 2 is too large: 5000024 bytes"] -fn genesis_error_genesis_data_size_too_big() { - let genesis_data = ContainerChainGenesisData { - storage: vec![(vec![], vec![0; 5_000_000]).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - }; - new_test_ext_with_genesis(vec![(2.into(), genesis_data)]).execute_with(|| { - run_to_block(1); - }); -} - -#[test] -fn register_without_mark_valid_for_collating() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdRegistered { para_id: 42.into() }.into()); - assert_eq!(ParaRegistrar::pending_registered_para_ids(), vec![]); - - // Assert after two sessions registered para ids are still empty - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::pending_registered_para_ids(), vec![]); - }); -} - -#[test] -fn mark_valid_for_collating_twice() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_noop!( - ParaRegistrar::mark_valid_for_collating(RuntimeOrigin::root(), 42.into(),), - Error::::ParaIdNotInPendingVerification - ); - }); -} - -#[test] -fn mark_valid_for_collating_invalid_para_id() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_noop!( - ParaRegistrar::mark_valid_for_collating(RuntimeOrigin::root(), 1.into(),), - Error::::ParaIdNotInPendingVerification - ); - }); -} - -#[test] -fn mark_valid_for_collating_already_valid_para_id() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdRegistered { para_id: 42.into() }.into()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![42.into()]); - assert_eq!(ParaRegistrar::pending_registered_para_ids(), vec![]); - assert_noop!( - ParaRegistrar::mark_valid_for_collating(RuntimeOrigin::root(), 42.into(),), - Error::::ParaIdNotInPendingVerification - ); - }); -} - -#[test] -fn mark_valid_for_collating_calls_registered_hook() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_eq!(Mock::get().called_hooks, vec![]); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!( - Mock::get().called_hooks, - vec![HookCall::MarkedValid(42.into())] - ); - }); -} - -#[test] -fn deregister_returns_bond_immediately_if_not_marked_as_valid() { - new_test_ext().execute_with(|| { - run_to_block(1); - let bond = DepositAmount::get(); - let balance_before = Balances::free_balance(ALICE); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_eq!(Balances::free_balance(ALICE), balance_before - bond); - - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - - // Bond is returned immediately - assert_eq!(Balances::free_balance(ALICE), balance_before); - }); -} - -#[test] -fn deregister_returns_bond_after_2_sessions_if_marked_as_valid() { - new_test_ext().execute_with(|| { - run_to_block(1); - let bond = DepositAmount::get(); - let balance_before = Balances::free_balance(ALICE); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!(Balances::free_balance(ALICE), balance_before - bond); - - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - - // Bond is returned after 2 sessions - assert_eq!(Balances::free_balance(ALICE), balance_before - bond); - run_to_session(2); - assert_eq!(Balances::free_balance(ALICE), balance_before); - }); -} - -#[test] -fn can_deregister_before_valid_for_collating() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - System::assert_has_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - }); -} - -#[test] -fn can_deregister_paused_para_id_after_0_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - // Pause and deregister in the same block - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(1); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn can_deregister_paused_para_id_after_1_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - // Pause, wait 1 session, and deregister - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - - run_to_session(1); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![]); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![42.into()]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(3); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn can_deregister_paused_para_id_after_2_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::pause_container_chain( - RuntimeOrigin::root(), - 42.into(), - )); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - - run_to_session(2); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - // Pause, wait 2 sessions, and deregister - assert_eq!(ParaRegistrar::paused(), vec![42.into()]); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - // Assert that the correct event was deposited - System::assert_last_event(Event::ParaIdDeregistered { para_id: 42.into() }.into()); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![42.into()]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(3); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![42.into()]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - run_to_session(4); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!(ParaRegistrar::paused(), vec![]); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn cannot_register_same_para_id_while_deregister_is_pending() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - assert_noop!( - ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data(), - ), - Error::::ParaIdAlreadyRegistered, - ); - run_to_session(1); - assert_noop!( - ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data(), - ), - Error::::ParaIdAlreadyRegistered, - ); - run_to_session(2); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - }); -} - -#[test] -fn register_deregister_register_in_same_block() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - None - ); - let new_genesis_data = ContainerChainGenesisData { - storage: vec![(b"key".to_vec(), b"value".to_vec()).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - }; - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - new_genesis_data.clone(), - )); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&new_genesis_data) - ); - run_to_session(2); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&new_genesis_data) - ); - }); -} - -#[test] -fn deregister_2_container_chains_in_same_block() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 43.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 43.into(), - )); - - run_to_session(2); - assert_eq!( - ParaRegistrar::registered_para_ids(), - vec![42.into(), 43.into()] - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 43.into(),)); - assert_eq!( - Mock::get().called_hooks, - vec![ - HookCall::MarkedValid(42.into()), - HookCall::MarkedValid(43.into()), - ] - ); - - run_to_session(4); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - None - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - None - ); - assert_eq!( - Mock::get().called_hooks, - vec![ - HookCall::MarkedValid(42.into()), - HookCall::MarkedValid(43.into()), - HookCall::Deregistered(42.into()), - HookCall::Deregistered(43.into()), - ] - ); - }); -} - -#[test] -fn deregister_2_container_chains_in_consecutive_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 43.into(), - empty_genesis_data() - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 43.into(), - )); - - run_to_session(2); - assert_eq!( - ParaRegistrar::registered_para_ids(), - vec![42.into(), 43.into()] - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into(),)); - - run_to_session(3); - assert_eq!( - ParaRegistrar::registered_para_ids(), - vec![42.into(), 43.into()] - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 43.into(),)); - assert_eq!( - Mock::get().called_hooks, - vec![ - HookCall::MarkedValid(42.into()), - HookCall::MarkedValid(43.into()), - ] - ); - - run_to_session(4); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![43.into()]); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - None - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - Some(&empty_genesis_data()) - ); - assert_eq!( - Mock::get().called_hooks, - vec![ - HookCall::MarkedValid(42.into()), - HookCall::MarkedValid(43.into()), - HookCall::Deregistered(42.into()), - ] - ); - - run_to_session(5); - assert_eq!(ParaRegistrar::registered_para_ids(), vec![]); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(42)).as_ref(), - None - ); - assert_eq!( - ParaRegistrar::para_genesis_data(ParaId::from(43)).as_ref(), - None - ); - assert_eq!( - Mock::get().called_hooks, - vec![ - HookCall::MarkedValid(42.into()), - HookCall::MarkedValid(43.into()), - HookCall::Deregistered(42.into()), - HookCall::Deregistered(43.into()), - ] - ); - }); -} - -#[test] -fn deposit_removed_on_deregister_if_not_marked_as_valid() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - // Deregister a para id that was not marked as valid_for_collating, deposit and genesis data are - // removed immediately because no collators are assigned to this chain. - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_none()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn deposit_removed_after_2_sessions_if_marked_as_valid() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - - // Deregister a para id that has been marked as valid_for_collating, deposit and genesis data - // will be stored until all collators are unassigned, after 2 sessions. - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - - // Deposit removed after 2 sessions - run_to_session(2); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_none()); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn parathread_change_params_after_two_sessions() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register_parathread( - RuntimeOrigin::signed(ALICE), - 42.into(), - SlotFrequency { min: 1, max: 1 }, - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::set_parathread_params( - RuntimeOrigin::root(), - ParaId::from(42), - SlotFrequency { min: 2, max: 2 } - )); - // Params are not updated immediately - assert_eq!( - ParaRegistrar::parathread_params(ParaId::from(42)).map(|x| x.slot_frequency), - Some(SlotFrequency { min: 1, max: 1 }) - ); - - // Params are updated after 2 sessions - run_to_session(2); - assert_eq!( - ParaRegistrar::parathread_params(ParaId::from(42)).map(|x| x.slot_frequency), - Some(SlotFrequency { min: 2, max: 2 }) - ); - }); -} - -#[test] -fn parathread_params_cannot_be_set_for_parachains() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register( - RuntimeOrigin::signed(ALICE), - 42.into(), - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_noop!( - ParaRegistrar::set_parathread_params( - RuntimeOrigin::root(), - ParaId::from(42), - SlotFrequency { min: 2, max: 2 } - ), - Error::::NotAParathread - ); - }); -} - -#[test] -fn parathread_register_change_params_deregister() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register_parathread( - RuntimeOrigin::signed(ALICE), - 42.into(), - SlotFrequency { min: 1, max: 1 }, - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - assert_ok!(ParaRegistrar::set_parathread_params( - RuntimeOrigin::root(), - ParaId::from(42), - SlotFrequency { min: 2, max: 2 } - )); - - // Deregister parathread while parathread params are pending - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - assert_eq!( - ParaRegistrar::parathread_params(ParaId::from(42)).map(|x| x.slot_frequency), - Some(SlotFrequency { min: 1, max: 1 }) - ); - - // Params removed after 2 sessions - run_to_session(2); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - assert!(ParaRegistrar::parathread_params(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn parathread_register_deregister_change_params() { - new_test_ext().execute_with(|| { - run_to_block(1); - assert_ok!(ParaRegistrar::register_parathread( - RuntimeOrigin::signed(ALICE), - 42.into(), - SlotFrequency { min: 1, max: 1 }, - empty_genesis_data() - )); - assert!(ParaRegistrar::registrar_deposit(ParaId::from(42)).is_some()); - assert_ok!(ParaRegistrar::mark_valid_for_collating( - RuntimeOrigin::root(), - 42.into(), - )); - - // Deregister parathread while parathread params are pending - assert_ok!(ParaRegistrar::deregister(RuntimeOrigin::root(), 42.into())); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_some()); - assert!(ParaRegistrar::parathread_params(ParaId::from(42)).is_some()); - - run_to_session(1); - assert_ok!(ParaRegistrar::set_parathread_params( - RuntimeOrigin::root(), - ParaId::from(42), - SlotFrequency { min: 2, max: 2 } - )); - - // Params removed after 2 sessions - run_to_session(2); - assert!(ParaRegistrar::para_genesis_data(ParaId::from(42)).is_none()); - assert!(ParaRegistrar::parathread_params(ParaId::from(42)).is_none()); - - // Params not updated after 3 sessions - run_to_session(3); - assert!(ParaRegistrar::parathread_params(ParaId::from(42)).is_none()); - }); -} - -#[test] -fn weights_assigned_to_extrinsics_are_correct() { - new_test_ext().execute_with(|| { - assert_eq!( - crate::Call::::register { - para_id: 42.into(), - genesis_data: empty_genesis_data() - } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::register( - empty_genesis_data().encoded_size() as u32, - ::MaxLengthParaIds::get(), - 0 - ) - ); - - assert_eq!( - crate::Call::::deregister { para_id: 42.into() } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::deregister_immediate( - ::MaxGenesisDataSize::get(), - ::MaxLengthParaIds::get() - ) - .max(<() as crate::weights::WeightInfo>::deregister_scheduled( - ::MaxGenesisDataSize::get(), - ::MaxLengthParaIds::get() - )) - ); - - assert_eq!( - crate::Call::::mark_valid_for_collating { para_id: 42.into() } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::mark_valid_for_collating( - ::MaxLengthParaIds::get() - ) - ); - - assert_eq!( - crate::Call::::pause_container_chain { para_id: 42.into() } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::pause_container_chain( - ::MaxLengthParaIds::get() - ) - ); - - assert_eq!( - crate::Call::::unpause_container_chain { para_id: 42.into() } - .get_dispatch_info() - .weight, - <() as crate::weights::WeightInfo>::unpause_container_chain( - ::MaxLengthParaIds::get() - ) - ); - }); -} diff --git a/pallets/registrar/src/weights.rs b/pallets/registrar/src/weights.rs deleted file mode 100644 index 6d0ba39..0000000 --- a/pallets/registrar/src/weights.rs +++ /dev/null @@ -1,467 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_registrar -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-01-30, STEPS: `16`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_registrar -// --extrinsic -// * -// --chain=dev -// --steps -// 16 -// --repeat -// 1 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// tmp/pallet_registrar.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_registrar. -pub trait WeightInfo { - fn register(x: u32, y: u32, z: u32, ) -> Weight; - fn deregister_immediate(x: u32, y: u32, ) -> Weight; - fn deregister_scheduled(x: u32, y: u32, ) -> Weight; - fn mark_valid_for_collating(y: u32, ) -> Weight; - fn pause_container_chain(y: u32, ) -> Weight; - fn unpause_container_chain(y: u32, ) -> Weight; - fn register_parathread(x: u32, y: u32, z: u32, ) -> Weight; - fn set_parathread_params(y: u32, ) -> Weight; -} - -/// Weights for pallet_registrar using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `350 + y * (13 ±0)` - // Estimated: `3809 + y * (13 ±0) + z * (3 ±2)` - // Minimum execution time: 38_408_000 picoseconds. - Weight::from_parts(38_408_000, 3809) - // Standard Error: 53 - .saturating_add(Weight::from_parts(751, 0).saturating_mul(x.into())) - // Standard Error: 16_331_035 - .saturating_add(Weight::from_parts(115_744_655, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 13).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(z.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:0 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AuthorNoting::LatestAuthor` (r:0 w:1) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_immediate(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `250 + y * (17 ±0)` - // Estimated: `3785 + y * (15 ±0)` - // Minimum execution time: 48_129_000 picoseconds. - Weight::from_parts(52_650_930, 3785) - // Standard Error: 1 - .saturating_add(Weight::from_parts(2, 0).saturating_mul(x.into())) - // Standard Error: 87_727 - .saturating_add(Weight::from_parts(372_523, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(8_u64)) - .saturating_add(Weight::from_parts(0, 15).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:0) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:0) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::Paused` (r:1 w:0) - /// Proof: `Registrar::Paused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingToRemove` (r:1 w:1) - /// Proof: `Registrar::PendingToRemove` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_scheduled(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `396 + y * (4 ±0)` - // Estimated: `1879 + y * (4 ±0)` - // Minimum execution time: 23_181_000 picoseconds. - Weight::from_parts(24_298_819, 1879) - // Standard Error: 1 - .saturating_add(Weight::from_parts(1, 0).saturating_mul(x.into())) - // Standard Error: 91_621 - .saturating_add(Weight::from_parts(304_778, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 4).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:1 w:0) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::GivenFreeCredits` (r:1 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// The range of component `y` is `[1, 50]`. - fn mark_valid_for_collating(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1111 + y * (36 ±0)` - // Estimated: `4514 + y * (36 ±2)` - // Minimum execution time: 49_292_000 picoseconds. - Weight::from_parts(58_444_147, 4514) - // Standard Error: 202_350 - .saturating_add(Weight::from_parts(578_764, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn pause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `428 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 30_666_000 picoseconds. - Weight::from_parts(35_290_910, 1912) - // Standard Error: 50_241 - .saturating_add(Weight::from_parts(104_888, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn unpause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `428 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 25_774_000 picoseconds. - Weight::from_parts(29_010_669, 1912) - // Standard Error: 39_979 - .saturating_add(Weight::from_parts(267_751, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register_parathread(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `384 + y * (13 ±0)` - // Estimated: `3833 + y * (13 ±0) + z * (3 ±2)` - // Minimum execution time: 42_264_000 picoseconds. - Weight::from_parts(42_264_000, 3833) - // Standard Error: 51 - .saturating_add(Weight::from_parts(722, 0).saturating_mul(x.into())) - // Standard Error: 15_908_841 - .saturating_add(Weight::from_parts(112_465_553, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - .saturating_add(Weight::from_parts(0, 13).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(z.into())) - } - /// Storage: `Registrar::ParathreadParams` (r:1 w:0) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParathreadParams` (r:1 w:1) - /// Proof: `Registrar::PendingParathreadParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn set_parathread_params(_y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `483` - // Estimated: `3948` - // Minimum execution time: 19_970_000 picoseconds. - Weight::from_parts(23_219_566, 3948) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `350 + y * (13 ±0)` - // Estimated: `3809 + y * (13 ±0) + z * (3 ±2)` - // Minimum execution time: 38_408_000 picoseconds. - Weight::from_parts(38_408_000, 3809) - // Standard Error: 53 - .saturating_add(Weight::from_parts(751, 0).saturating_mul(x.into())) - // Standard Error: 16_331_035 - .saturating_add(Weight::from_parts(115_744_655, 0).saturating_mul(z.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 13).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(z.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:0 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AuthorNoting::LatestAuthor` (r:0 w:1) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_immediate(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `250 + y * (17 ±0)` - // Estimated: `3785 + y * (15 ±0)` - // Minimum execution time: 48_129_000 picoseconds. - Weight::from_parts(52_650_930, 3785) - // Standard Error: 1 - .saturating_add(Weight::from_parts(2, 0).saturating_mul(x.into())) - // Standard Error: 87_727 - .saturating_add(Weight::from_parts(372_523, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(8_u64)) - .saturating_add(Weight::from_parts(0, 15).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:0) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:0) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::Paused` (r:1 w:0) - /// Proof: `Registrar::Paused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingToRemove` (r:1 w:1) - /// Proof: `Registrar::PendingToRemove` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_scheduled(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `396 + y * (4 ±0)` - // Estimated: `1879 + y * (4 ±0)` - // Minimum execution time: 23_181_000 picoseconds. - Weight::from_parts(24_298_819, 1879) - // Standard Error: 1 - .saturating_add(Weight::from_parts(1, 0).saturating_mul(x.into())) - // Standard Error: 91_621 - .saturating_add(Weight::from_parts(304_778, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 4).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:1 w:0) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::GivenFreeCredits` (r:1 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// The range of component `y` is `[1, 50]`. - fn mark_valid_for_collating(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1111 + y * (36 ±0)` - // Estimated: `4514 + y * (36 ±2)` - // Minimum execution time: 49_292_000 picoseconds. - Weight::from_parts(58_444_147, 4514) - // Standard Error: 202_350 - .saturating_add(Weight::from_parts(578_764, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 36).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn pause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `428 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 30_666_000 picoseconds. - Weight::from_parts(35_290_910, 1912) - // Standard Error: 50_241 - .saturating_add(Weight::from_parts(104_888, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn unpause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `428 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 25_774_000 picoseconds. - Weight::from_parts(29_010_669, 1912) - // Standard Error: 39_979 - .saturating_add(Weight::from_parts(267_751, 0).saturating_mul(y.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register_parathread(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `384 + y * (13 ±0)` - // Estimated: `3833 + y * (13 ±0) + z * (3 ±2)` - // Minimum execution time: 42_264_000 picoseconds. - Weight::from_parts(42_264_000, 3833) - // Standard Error: 51 - .saturating_add(Weight::from_parts(722, 0).saturating_mul(x.into())) - // Standard Error: 15_908_841 - .saturating_add(Weight::from_parts(112_465_553, 0).saturating_mul(z.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(5_u64)) - .saturating_add(Weight::from_parts(0, 13).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(z.into())) - } - /// Storage: `Registrar::ParathreadParams` (r:1 w:0) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParathreadParams` (r:1 w:1) - /// Proof: `Registrar::PendingParathreadParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn set_parathread_params(_y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `483` - // Estimated: `3948` - // Minimum execution time: 19_970_000 picoseconds. - Weight::from_parts(23_219_566, 3948) - .saturating_add(RocksDbWeight::get().reads(3_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/services-payment/Cargo.toml b/pallets/services-payment/Cargo.toml deleted file mode 100644 index 651a3fa..0000000 --- a/pallets/services-payment/Cargo.toml +++ /dev/null @@ -1,67 +0,0 @@ -[package] -name = "pallet-services-payment" -authors = [] -description = "Services payment pallet" -edition = "2021" -publish = false -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -cumulus-primitives-core = { workspace = true } -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive", "max-encoded-len" ] } -scale-info = { workspace = true } -serde = { workspace = true, default-features = false, features = [ "derive" ] } -sp-io = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } -tp-traits = { workspace = true } - -[dev-dependencies] -pallet-balances = { workspace = true } -sp-core = { workspace = true } -sp-io = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "cumulus-primitives-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "pallet-balances/std", - "parity-scale-codec/std", - "scale-info/std", - "serde/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "cumulus-primitives-core/runtime-benchmarks", - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/services-payment/rpc/runtime-api/Cargo.toml b/pallets/services-payment/rpc/runtime-api/Cargo.toml deleted file mode 100644 index ab0042e..0000000 --- a/pallets/services-payment/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,24 +0,0 @@ -[package] -name = "pallet-services-payment-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-services-payment" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -parity-scale-codec = { workspace = true } -sp-api = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "parity-scale-codec/std", - "sp-api/std", -] diff --git a/pallets/services-payment/rpc/runtime-api/src/lib.rs b/pallets/services-payment/rpc/runtime-api/src/lib.rs deleted file mode 100644 index ce98778..0000000 --- a/pallets/services-payment/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for Services Payment pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -sp_api::decl_runtime_apis! { - pub trait ServicesPaymentApi - where - Balance: parity_scale_codec::Codec, - ParaId: parity_scale_codec::Codec, - { - fn block_cost(para_id: ParaId) -> Balance; - fn collator_assignment_cost(para_id: ParaId) -> Balance; - } -} diff --git a/pallets/services-payment/src/benchmarks.rs b/pallets/services-payment/src/benchmarks.rs deleted file mode 100644 index 6efe592..0000000 --- a/pallets/services-payment/src/benchmarks.rs +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(feature = "runtime-benchmarks")] - -//! Benchmarking -use { - crate::{ - BalanceOf, BlockNumberFor, Call, Config, Pallet, ProvideBlockProductionCost, - ProvideCollatorAssignmentCost, - }, - frame_benchmarking::{account, v2::*}, - frame_support::{ - assert_ok, - traits::{Currency, EnsureOriginWithArg, Get}, - }, - frame_system::RawOrigin, - sp_runtime::Saturating, - sp_std::prelude::*, - tp_traits::{AuthorNotingHook, CollatorAssignmentHook}, -}; - -// Build genesis storage according to the mock runtime. -#[cfg(test)] -pub fn new_test_ext() -> sp_io::TestExternalities { - const ALICE: u64 = 1; - - crate::mock::ExtBuilder::default() - .with_balances(vec![(ALICE, 1_000)]) - .build() -} - -const SEED: u32 = 0; - -fn create_funded_user( - string: &'static str, - n: u32, - balance_factor: u32, -) -> T::AccountId { - let user = account(string, n, SEED); - let balance = ::minimum_balance() * balance_factor.into(); - let _ = ::make_free_balance_be(&user, balance); - user -} - -#[benchmarks(where BalanceOf: From>)] -mod benchmarks { - use super::*; - - #[benchmark] - fn purchase_credits() { - let para_id = 1001u32.into(); - let payment: BalanceOf = T::ProvideBlockProductionCost::block_cost(¶_id) - .0 - .saturating_mul(1000u32.into()); - let caller = create_funded_user::("caller", 1, 1_000_000_000u32); - - // Before call: 0 credits - assert_eq!( - crate::BlockProductionCredits::::get(para_id).unwrap_or_default(), - 0u32.into() - ); - - #[extrinsic_call] - Pallet::::purchase_credits(RawOrigin::Signed(caller), para_id, payment); - - // verification code - assert_eq!( - ::total_balance(&crate::Pallet::::parachain_tank(para_id)), - payment - ); - } - - #[benchmark] - fn set_block_production_credits() { - let para_id = 1001u32.into(); - let credits = T::FreeBlockProductionCredits::get(); - - assert_ok!(Pallet::::set_block_production_credits( - RawOrigin::Root.into(), - para_id, - credits, - )); - - // Before call: 1000 credits - assert_eq!( - crate::BlockProductionCredits::::get(para_id).unwrap_or_default(), - T::FreeBlockProductionCredits::get() - ); - - #[extrinsic_call] - Pallet::::set_block_production_credits(RawOrigin::Root, para_id, 1u32.into()); - - // After call: 1 credit - assert_eq!( - crate::BlockProductionCredits::::get(para_id).unwrap_or_default(), - 1u32.into() - ); - } - - #[benchmark] - fn set_given_free_credits() { - let para_id = 1001u32.into(); - - // Before call: no given free credits - assert!(crate::GivenFreeCredits::::get(para_id).is_none()); - - #[extrinsic_call] - Pallet::::set_given_free_credits(RawOrigin::Root, para_id, true); - - // After call: given free credits - assert!(crate::GivenFreeCredits::::get(para_id).is_some()); - } - - #[benchmark] - fn set_refund_address() { - let para_id = 1001u32.into(); - - let origin = T::ManagerOrigin::try_successful_origin(¶_id) - .expect("failed to create ManagerOrigin"); - - let refund_address = account("sufficient", 0, 1000); - - // Before call: no given free credits - assert!(crate::RefundAddress::::get(para_id).is_none()); - - #[extrinsic_call] - Pallet::::set_refund_address(origin as T::RuntimeOrigin, para_id, Some(refund_address)); - - // After call: given free credits - assert!(crate::RefundAddress::::get(para_id).is_some()); - } - - #[benchmark] - fn set_max_core_price() { - let para_id = 1001u32.into(); - - let origin = T::ManagerOrigin::try_successful_origin(¶_id) - .expect("failed to create ManagerOrigin"); - - let max_price = 100_000_000; - - // Before call: none - assert_eq!(crate::MaxCorePrice::::get(para_id), None); - - #[extrinsic_call] - Pallet::::set_max_core_price(origin as T::RuntimeOrigin, para_id, Some(max_price)); - - // After call: some - assert_eq!(crate::MaxCorePrice::::get(para_id), Some(max_price)); - } - - #[benchmark] - fn on_container_author_noted() { - let para_id = 1001u32; - let block_cost = T::ProvideBlockProductionCost::block_cost(¶_id.into()).0; - let credits: BalanceOf = 1000u32.into(); - let balance_to_purchase = block_cost.saturating_mul(credits); - let caller = create_funded_user::("caller", 1, 1_000_000_000u32); - let existential_deposit = ::minimum_balance(); - assert_ok!(Pallet::::purchase_credits( - RawOrigin::Signed(caller.clone()).into(), - para_id.into(), - balance_to_purchase + existential_deposit - )); - #[block] - { - as AuthorNotingHook>::on_container_author_noted( - &caller, - 0, - para_id.into(), - ); - } - } - - #[benchmark] - fn on_collators_assigned() { - let para_id = 1001u32; - let collator_assignment_cost = - T::ProvideCollatorAssignmentCost::collator_assignment_cost(¶_id.into()).0; - let max_credit_stored = T::FreeCollatorAssignmentCredits::get(); - let balance_to_purchase = collator_assignment_cost.saturating_mul(max_credit_stored.into()); - let caller = create_funded_user::("caller", 1, 1_000_000_000u32); - let existential_deposit = ::minimum_balance(); - let tip = 1_000_000u32; - assert_ok!(Pallet::::purchase_credits( - RawOrigin::Signed(caller.clone()).into(), - para_id.into(), - balance_to_purchase + existential_deposit + tip.into() - )); - assert_ok!(Pallet::::set_max_tip( - RawOrigin::Root.into(), - para_id.into(), - Some(tip.into()) - )); - #[block] - { - as CollatorAssignmentHook>>::on_collators_assigned( - para_id.into(), - Some(&tip.into()), - false, - ) - .expect("failed on_collators_assigned"); - } - } - - #[benchmark] - fn set_max_tip() { - let para_id = 1001u32.into(); - - assert!(crate::MaxTip::::get(para_id).is_none()); - - #[extrinsic_call] - Pallet::::set_max_tip(RawOrigin::Root, para_id, Some(1_000_000u32.into())); - - assert!(crate::MaxTip::::get(para_id).is_some()); - } - - impl_benchmark_test_suite!(Pallet, crate::benchmarks::new_test_ext(), crate::mock::Test); -} diff --git a/pallets/services-payment/src/lib.rs b/pallets/services-payment/src/lib.rs deleted file mode 100644 index 0b372e8..0000000 --- a/pallets/services-payment/src/lib.rs +++ /dev/null @@ -1,640 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! # Services Payment pallet -//! -//! This pallet allows for block creation services to be paid for by a -//! containerChain. - -#![cfg_attr(not(feature = "std"), no_std)] - -use { - cumulus_primitives_core::ParaId, - frame_support::{ - pallet_prelude::*, - sp_runtime::{traits::Zero, Saturating}, - traits::{ - tokens::ExistenceRequirement, Currency, EnsureOriginWithArg, OnUnbalanced, - WithdrawReasons, - }, - }, - frame_system::pallet_prelude::*, - scale_info::prelude::vec::Vec, - serde::{Deserialize, Serialize}, - sp_io::hashing::blake2_256, - sp_runtime::{traits::TrailingZeroInput, DispatchError}, - tp_traits::{AuthorNotingHook, BlockNumber, CollatorAssignmentHook, CollatorAssignmentTip}, -}; - -#[cfg(any(test, feature = "runtime-benchmarks"))] -mod benchmarks; -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; -pub mod weights; -pub use weights::WeightInfo; - -pub use pallet::*; - -#[frame_support::pallet] -pub mod pallet { - use super::*; - - #[pallet::config] - pub trait Config: frame_system::Config { - /// The overarching event type. - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - /// Handlers for fees - type OnChargeForBlock: OnUnbalanced>; - type OnChargeForCollatorAssignment: OnUnbalanced>; - type OnChargeForCollatorAssignmentTip: OnUnbalanced>; - - /// Currency type for fee payment - type Currency: Currency; - /// Provider of a block cost which can adjust from block to block - type ProvideBlockProductionCost: ProvideBlockProductionCost; - /// Provider of a block cost which can adjust from block to block - type ProvideCollatorAssignmentCost: ProvideCollatorAssignmentCost; - - /// The maximum number of block production credits that can be accumulated - #[pallet::constant] - type FreeBlockProductionCredits: Get>; - - /// The maximum number of collator assigment production credits that can be accumulated - #[pallet::constant] - type FreeCollatorAssignmentCredits: Get; - /// Owner of the container chain, can call some only-owner methods - type ManagerOrigin: EnsureOriginWithArg; - - type WeightInfo: WeightInfo; - } - - #[pallet::error] - pub enum Error { - InsufficientFundsToPurchaseCredits, - InsufficientCredits, - CreditPriceTooExpensive, - } - - #[pallet::pallet] - pub struct Pallet(PhantomData); - - #[pallet::event] - #[pallet::generate_deposit(pub(super) fn deposit_event)] - pub enum Event { - CreditsPurchased { - para_id: ParaId, - payer: T::AccountId, - credit: BalanceOf, - }, - BlockProductionCreditBurned { - para_id: ParaId, - credits_remaining: BlockNumberFor, - }, - CollatorAssignmentCreditBurned { - para_id: ParaId, - credits_remaining: u32, - }, - CollatorAssignmentTipCollected { - para_id: ParaId, - payer: T::AccountId, - tip: BalanceOf, - }, - BlockProductionCreditsSet { - para_id: ParaId, - credits: BlockNumberFor, - }, - RefundAddressUpdated { - para_id: ParaId, - refund_address: Option, - }, - MaxCorePriceUpdated { - para_id: ParaId, - max_core_price: Option, - }, - CollatorAssignmentCreditsSet { - para_id: ParaId, - credits: u32, - }, - } - - #[pallet::storage] - #[pallet::getter(fn free_block_production_credits)] - pub type BlockProductionCredits = - StorageMap<_, Blake2_128Concat, ParaId, BlockNumberFor, OptionQuery>; - - #[pallet::storage] - #[pallet::getter(fn free_collator_assignment_credits)] - pub type CollatorAssignmentCredits = - StorageMap<_, Blake2_128Concat, ParaId, u32, OptionQuery>; - - /// List of para ids that have already been given free credits - #[pallet::storage] - #[pallet::getter(fn given_free_credits)] - pub type GivenFreeCredits = StorageMap<_, Blake2_128Concat, ParaId, (), OptionQuery>; - - /// Refund address - #[pallet::storage] - #[pallet::getter(fn refund_address)] - pub type RefundAddress = - StorageMap<_, Blake2_128Concat, ParaId, T::AccountId, OptionQuery>; - - /// Max core price for parathread in relay chain currency - #[pallet::storage] - pub type MaxCorePrice = StorageMap<_, Blake2_128Concat, ParaId, u128, OptionQuery>; - - /// Max tip for collator assignment on congestion - #[pallet::storage] - #[pallet::getter(fn max_tip)] - pub type MaxTip = StorageMap<_, Blake2_128Concat, ParaId, BalanceOf, OptionQuery>; - - #[pallet::call] - impl Pallet - where - BlockNumberFor: Into>, - { - #[pallet::call_index(0)] - #[pallet::weight(T::WeightInfo::purchase_credits())] - pub fn purchase_credits( - origin: OriginFor, - para_id: ParaId, - credit: BalanceOf, - ) -> DispatchResultWithPostInfo { - let account = ensure_signed(origin)?; - let parachain_tank = Self::parachain_tank(para_id); - T::Currency::transfer( - &account, - ¶chain_tank, - credit, - ExistenceRequirement::KeepAlive, - )?; - - Self::deposit_event(Event::::CreditsPurchased { - para_id, - payer: account, - credit, - }); - - Ok(().into()) - } - - /// Set the number of block production credits for this para_id without paying for them. - /// Can only be called by root. - #[pallet::call_index(1)] - #[pallet::weight(T::WeightInfo::set_block_production_credits())] - pub fn set_block_production_credits( - origin: OriginFor, - para_id: ParaId, - free_block_credits: BlockNumberFor, - ) -> DispatchResultWithPostInfo { - ensure_root(origin)?; - - Self::set_free_block_production_credits(¶_id, free_block_credits); - - Ok(().into()) - } - - /// Helper to set and cleanup the `GivenFreeCredits` storage. - /// Can only be called by root. - #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::set_given_free_credits())] - pub fn set_given_free_credits( - origin: OriginFor, - para_id: ParaId, - given_free_credits: bool, - ) -> DispatchResultWithPostInfo { - ensure_root(origin)?; - - if given_free_credits { - GivenFreeCredits::::insert(para_id, ()); - } else { - GivenFreeCredits::::remove(para_id); - } - - Ok(().into()) - } - - /// Call index to set the refund address for non-spent tokens - #[pallet::call_index(3)] - #[pallet::weight(T::WeightInfo::set_refund_address())] - pub fn set_refund_address( - origin: OriginFor, - para_id: ParaId, - refund_address: Option, - ) -> DispatchResultWithPostInfo { - T::ManagerOrigin::ensure_origin(origin, ¶_id)?; - - if let Some(refund_address) = refund_address.clone() { - RefundAddress::::insert(para_id, refund_address.clone()); - } else { - RefundAddress::::remove(para_id); - } - - Self::deposit_event(Event::::RefundAddressUpdated { - para_id, - refund_address, - }); - - Ok(().into()) - } - - /// Set the number of block production credits for this para_id without paying for them. - /// Can only be called by root. - #[pallet::call_index(4)] - #[pallet::weight(T::WeightInfo::set_block_production_credits())] - pub fn set_collator_assignment_credits( - origin: OriginFor, - para_id: ParaId, - free_collator_assignment_credits: u32, - ) -> DispatchResultWithPostInfo { - ensure_root(origin)?; - - Self::set_free_collator_assignment_credits(¶_id, free_collator_assignment_credits); - - Ok(().into()) - } - - /// Max core price for parathread in relay chain currency - #[pallet::call_index(5)] - #[pallet::weight(T::WeightInfo::set_max_core_price())] - pub fn set_max_core_price( - origin: OriginFor, - para_id: ParaId, - max_core_price: Option, - ) -> DispatchResultWithPostInfo { - T::ManagerOrigin::ensure_origin(origin, ¶_id)?; - - if let Some(max_core_price) = max_core_price { - MaxCorePrice::::insert(para_id, max_core_price); - } else { - MaxCorePrice::::remove(para_id); - } - - Self::deposit_event(Event::::MaxCorePriceUpdated { - para_id, - max_core_price, - }); - - Ok(().into()) - } - - /// Set the maximum tip a container chain is willing to pay to be assigned a collator on congestion. - /// Can only be called by container chain manager. - #[pallet::call_index(6)] - #[pallet::weight(T::WeightInfo::set_max_tip())] - pub fn set_max_tip( - origin: OriginFor, - para_id: ParaId, - max_tip: Option>, - ) -> DispatchResultWithPostInfo { - T::ManagerOrigin::ensure_origin(origin, ¶_id)?; - - if let Some(max_tip) = max_tip { - MaxTip::::insert(para_id, max_tip); - } else { - MaxTip::::remove(para_id); - } - - Ok(().into()) - } - } - - impl Pallet { - /// Burn a credit for the given para. Deducts one credit if possible, errors otherwise. - pub fn burn_block_production_free_credit_for_para( - para_id: &ParaId, - ) -> DispatchResultWithPostInfo { - let existing_credits = - BlockProductionCredits::::get(para_id).unwrap_or(BlockNumberFor::::zero()); - - ensure!( - existing_credits >= 1u32.into(), - Error::::InsufficientCredits, - ); - - let updated_credits = existing_credits.saturating_sub(1u32.into()); - BlockProductionCredits::::insert(para_id, updated_credits); - - Self::deposit_event(Event::::BlockProductionCreditBurned { - para_id: *para_id, - credits_remaining: updated_credits, - }); - - Ok(().into()) - } - - /// Burn a credit for the given para. Deducts one credit if possible, errors otherwise. - pub fn burn_collator_assignment_free_credit_for_para( - para_id: &ParaId, - ) -> DispatchResultWithPostInfo { - let existing_credits = CollatorAssignmentCredits::::get(para_id).unwrap_or(0u32); - - ensure!(existing_credits >= 1u32, Error::::InsufficientCredits,); - - let updated_credits = existing_credits.saturating_sub(1u32); - CollatorAssignmentCredits::::insert(para_id, updated_credits); - - Self::deposit_event(Event::::CollatorAssignmentCreditBurned { - para_id: *para_id, - credits_remaining: updated_credits, - }); - - Ok(().into()) - } - - pub fn give_free_credits(para_id: &ParaId) -> Weight { - if GivenFreeCredits::::contains_key(para_id) { - // This para id has already received free credits - return Weight::default(); - } - - // Set number of credits to FreeBlockProductionCredits - let block_production_existing_credits = - BlockProductionCredits::::get(para_id).unwrap_or(BlockNumberFor::::zero()); - let block_production_updated_credits = T::FreeBlockProductionCredits::get(); - // Do not update credits if for some reason this para id had more - if block_production_existing_credits < block_production_updated_credits { - Self::set_free_block_production_credits(para_id, block_production_updated_credits); - } - - // Set number of credits to FreeCollatorAssignmentCredits - let collator_assignment_existing_credits = - CollatorAssignmentCredits::::get(para_id).unwrap_or(0u32); - let collator_assignment_updated_credits = T::FreeCollatorAssignmentCredits::get(); - - // Do not update credits if for some reason this para id had more - if collator_assignment_existing_credits < collator_assignment_updated_credits { - Self::set_free_collator_assignment_credits( - para_id, - collator_assignment_updated_credits, - ); - } - - // We only allow to call this function once per para id, even if it didn't actually - // receive all the free credits - GivenFreeCredits::::insert(para_id, ()); - - Weight::default() - } - - pub fn set_free_collator_assignment_credits( - para_id: &ParaId, - free_collator_assignment_credits: u32, - ) { - if free_collator_assignment_credits.is_zero() { - CollatorAssignmentCredits::::remove(para_id); - } else { - CollatorAssignmentCredits::::insert(para_id, free_collator_assignment_credits); - } - - Self::deposit_event(Event::::CollatorAssignmentCreditsSet { - para_id: *para_id, - credits: free_collator_assignment_credits, - }); - } - - pub fn set_free_block_production_credits( - para_id: &ParaId, - free_collator_block_production_credits: BlockNumberFor, - ) { - if free_collator_block_production_credits.is_zero() { - BlockProductionCredits::::remove(para_id); - } else { - BlockProductionCredits::::insert( - para_id, - free_collator_block_production_credits, - ); - } - - Self::deposit_event(Event::::BlockProductionCreditsSet { - para_id: *para_id, - credits: free_collator_block_production_credits, - }); - } - } - - #[pallet::genesis_config] - pub struct GenesisConfig { - pub para_id_credits: Vec>>, - } - - impl Default for GenesisConfig { - fn default() -> Self { - Self { - para_id_credits: Default::default(), - } - } - } - - #[pallet::genesis_build] - impl BuildGenesisConfig for GenesisConfig { - fn build(&self) { - for para_id_credits in &self.para_id_credits { - BlockProductionCredits::::insert( - para_id_credits.para_id, - para_id_credits.block_production_credits, - ); - CollatorAssignmentCredits::::insert( - para_id_credits.para_id, - para_id_credits.collator_assignment_credits, - ); - } - } - } -} - -// Params to be set in genesis -#[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, Serialize, Deserialize)] -pub struct FreeCreditGenesisParams { - pub para_id: ParaId, - pub block_production_credits: BlockProductCredits, - pub collator_assignment_credits: u32, -} -impl From<(ParaId, BlockProductCredits, u32)> - for FreeCreditGenesisParams -{ - fn from(value: (ParaId, BlockProductCredits, u32)) -> Self { - Self { - para_id: value.0, - block_production_credits: value.1, - collator_assignment_credits: value.2, - } - } -} - -/// Balance used by this pallet -pub type BalanceOf = - <::Currency as Currency<::AccountId>>::Balance; - -pub type CurrencyOf = ::Currency; -/// Type alias to conveniently refer to the `Currency::NegativeImbalance` associated type. -pub type NegativeImbalanceOf = - as Currency<::AccountId>>::NegativeImbalance; -/// Handler for fee charging. This will be invoked when fees need to be deducted from the fee -/// account for a given paraId. - -/// Returns the cost for a given block credit at the current time. This can be a complex operation, -/// so it also returns the weight it consumes. (TODO: or just rely on benchmarking) -pub trait ProvideBlockProductionCost { - fn block_cost(para_id: &ParaId) -> (BalanceOf, Weight); -} - -/// Returns the cost for a given block credit at the current time. This can be a complex operation, -/// so it also returns the weight it consumes. (TODO: or just rely on benchmarking) -pub trait ProvideCollatorAssignmentCost { - fn collator_assignment_cost(para_id: &ParaId) -> (BalanceOf, Weight); -} - -impl AuthorNotingHook for Pallet { - // This hook is called when pallet_author_noting sees that the block number of a container chain has increased. - // Currently we always charge 1 credit, even if a container chain produced more that 1 block in between tanssi - // blocks. - fn on_container_author_noted( - _author: &T::AccountId, - _block_number: BlockNumber, - para_id: ParaId, - ) -> Weight { - if Pallet::::burn_block_production_free_credit_for_para(¶_id).is_err() { - let (amount_to_charge, _weight) = T::ProvideBlockProductionCost::block_cost(¶_id); - match T::Currency::withdraw( - &Self::parachain_tank(para_id), - amount_to_charge, - WithdrawReasons::FEE, - ExistenceRequirement::KeepAlive, - ) { - Err(e) => log::warn!( - "Failed to withdraw block production payment for container chain {}: {:?}", - u32::from(para_id), - e - ), - Ok(imbalance) => { - T::OnChargeForBlock::on_unbalanced(imbalance); - } - } - } - - T::WeightInfo::on_container_author_noted() - } -} - -impl CollatorAssignmentHook> for Pallet { - // is_parathread parameter for future use to apply different logic - fn on_collators_assigned( - para_id: ParaId, - maybe_tip: Option<&BalanceOf>, - _is_parathread: bool, - ) -> Result { - // Withdraw assignment fee - let maybe_assignment_imbalance = - if Pallet::::burn_collator_assignment_free_credit_for_para(¶_id).is_err() { - let (amount_to_charge, _weight) = - T::ProvideCollatorAssignmentCost::collator_assignment_cost(¶_id); - Some(T::Currency::withdraw( - &Self::parachain_tank(para_id), - amount_to_charge, - WithdrawReasons::FEE, - ExistenceRequirement::KeepAlive, - )?) - } else { - None - }; - - if let Some(&tip) = maybe_tip { - // Only charge the tip to the paras that had a max tip set - // (aka were willing to tip for being assigned a collator) - if MaxTip::::get(para_id).is_some() { - match T::Currency::withdraw( - &Self::parachain_tank(para_id), - tip, - WithdrawReasons::TIP, - ExistenceRequirement::KeepAlive, - ) { - Err(e) => { - // Return assignment imbalance to tank on error - if let Some(assignment_imbalance) = maybe_assignment_imbalance { - T::Currency::resolve_creating( - &Self::parachain_tank(para_id), - assignment_imbalance, - ); - } - return Err(e); - } - Ok(tip_imbalance) => { - Self::deposit_event(Event::::CollatorAssignmentTipCollected { - para_id, - payer: Self::parachain_tank(para_id), - tip, - }); - T::OnChargeForCollatorAssignmentTip::on_unbalanced(tip_imbalance); - } - } - } - } - - if let Some(assignment_imbalance) = maybe_assignment_imbalance { - T::OnChargeForCollatorAssignment::on_unbalanced(assignment_imbalance); - } - - Ok(T::WeightInfo::on_collators_assigned()) - } -} - -impl CollatorAssignmentTip> for Pallet { - fn get_para_tip(para_id: ParaId) -> Option> { - MaxTip::::get(para_id) - } -} - -impl Pallet { - /// Derive a derivative account ID from the paraId. - pub fn parachain_tank(para_id: ParaId) -> T::AccountId { - let entropy = (b"modlpy/serpayment", para_id).using_encoded(blake2_256); - Decode::decode(&mut TrailingZeroInput::new(entropy.as_ref())) - .expect("infinite length input; no invalid inputs for type; qed") - } - - /// Hook to perform things on deregister - pub fn para_deregistered(para_id: ParaId) { - // Drain the para-id account from tokens - let parachain_tank_balance = T::Currency::total_balance(&Self::parachain_tank(para_id)); - if !parachain_tank_balance.is_zero() { - if let Ok(imbalance) = T::Currency::withdraw( - &Self::parachain_tank(para_id), - parachain_tank_balance, - WithdrawReasons::FEE, - ExistenceRequirement::AllowDeath, - ) { - if let Some(address) = RefundAddress::::get(para_id) { - T::Currency::resolve_creating(&address, imbalance); - } else { - // Burn for now, we might be able to pass something to do with this - drop(imbalance); - } - } - } - - // Clean refund addres - RefundAddress::::remove(para_id); - - // Clean credits - BlockProductionCredits::::remove(para_id); - CollatorAssignmentCredits::::remove(para_id); - MaxTip::::remove(para_id); - MaxCorePrice::::remove(para_id); - } -} diff --git a/pallets/services-payment/src/mock.rs b/pallets/services-payment/src/mock.rs deleted file mode 100644 index 120f769..0000000 --- a/pallets/services-payment/src/mock.rs +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - self as pallet_services_payment, ProvideBlockProductionCost, ProvideCollatorAssignmentCost, - }, - cumulus_primitives_core::ParaId, - frame_support::{ - pallet_prelude::*, - parameter_types, - traits::{ConstU32, ConstU64, Everything}, - }, - frame_system::EnsureRoot, - sp_core::H256, - sp_runtime::{ - traits::{BlakeTwo256, IdentityLookup}, - BuildStorage, - }, -}; - -type Block = frame_system::mocking::MockBlock; -type AccountId = u64; -type Balance = u128; - -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system::{Pallet, Call, Config, Storage, Event}, - Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, - PaymentServices: pallet_services_payment::{Pallet, Call, Config, Storage, Event} - } -); - -impl frame_system::Config for Test { - type BaseCallFilter = Everything; - type BlockWeights = (); - type BlockLength = (); - type DbWeight = (); - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Nonce = u64; - type Block = Block; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = AccountId; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = ConstU64<250>; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = (); - type OnSetCode = (); - type MaxConsumers = ConstU32<16>; - type RuntimeTask = (); -} - -parameter_types! { - pub const ExistentialDeposit: u128 = 1; -} - -impl pallet_balances::Config for Test { - type MaxReserves = (); - type ReserveIdentifier = [u8; 4]; - type MaxLocks = (); - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type FreezeIdentifier = (); - type MaxFreezes = (); - type RuntimeHoldReason = (); - type RuntimeFreezeReason = (); - type MaxHolds = (); - type WeightInfo = (); -} - -parameter_types! { - pub const FreeBlockProductionCredits: u64 = 5; - pub const FreeCollatorAssignmentCredits: u32 = 5; -} - -impl pallet_services_payment::Config for Test { - type RuntimeEvent = RuntimeEvent; - type OnChargeForBlock = (); - type OnChargeForCollatorAssignment = (); - type OnChargeForCollatorAssignmentTip = (); - type Currency = Balances; - type ProvideBlockProductionCost = BlockProductionCost; - type ProvideCollatorAssignmentCost = CollatorAssignmentProductionCost; - type FreeBlockProductionCredits = FreeBlockProductionCredits; - type FreeCollatorAssignmentCredits = FreeCollatorAssignmentCredits; - type ManagerOrigin = EnsureRoot; - type WeightInfo = (); -} - -pub(crate) const FIXED_BLOCK_PRODUCTION_COST: u128 = 100; -pub(crate) const FIXED_COLLATOR_ASSIGNMENT_COST: u128 = 200; - -pub struct BlockProductionCost(PhantomData); -impl ProvideBlockProductionCost for BlockProductionCost { - fn block_cost(_para_id: &ParaId) -> (u128, Weight) { - (FIXED_BLOCK_PRODUCTION_COST, Weight::zero()) - } -} - -pub struct CollatorAssignmentProductionCost(PhantomData); -impl ProvideCollatorAssignmentCost for CollatorAssignmentProductionCost { - fn collator_assignment_cost(_para_id: &ParaId) -> (u128, Weight) { - (FIXED_COLLATOR_ASSIGNMENT_COST, Weight::zero()) - } -} - -#[derive(Default)] -pub struct ExtBuilder { - balances: Vec<(AccountId, Balance)>, -} - -impl ExtBuilder { - pub fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { - self.balances = balances; - self - } - - pub fn build(self) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - - pallet_balances::GenesisConfig:: { - balances: self.balances, - } - .assimilate_storage(&mut t) - .unwrap(); - - t.into() - } -} - -pub(crate) fn events() -> Vec> { - System::events() - .into_iter() - .map(|r| r.event) - .filter_map(|e| { - if let RuntimeEvent::PaymentServices(inner) = e { - Some(inner) - } else { - None - } - }) - .collect::>() -} diff --git a/pallets/services-payment/src/tests.rs b/pallets/services-payment/src/tests.rs deleted file mode 100644 index 7f6f2ee..0000000 --- a/pallets/services-payment/src/tests.rs +++ /dev/null @@ -1,509 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - mock::*, pallet as pallet_services_payment, BlockProductionCredits, - CollatorAssignmentCredits, ProvideBlockProductionCost, ProvideCollatorAssignmentCost, - RefundAddress, - }, - cumulus_primitives_core::ParaId, - frame_support::{assert_err, assert_noop, assert_ok, traits::fungible::Inspect}, - sp_runtime::DispatchError, - tp_traits::{AuthorNotingHook, CollatorAssignmentHook}, -}; - -const ALICE: u64 = 1; - -#[test] -fn purchase_credits_works() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - System::set_block_number(1); - - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 100u128, - ),); - - assert_eq!( - events(), - vec![pallet_services_payment::Event::CreditsPurchased { - para_id: 1.into(), - payer: ALICE, - credit: 100u128 - }] - ); - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 100u128 - ); - }); -} -#[test] -fn purchase_credits_fails_with_insufficient_balance() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - // cannot purchase if death - assert_err!( - PaymentServices::purchase_credits(RuntimeOrigin::signed(ALICE), 1.into(), 1000u128), - sp_runtime::TokenError::NotExpendable, - ); - }); -} - -#[test] -fn burn_credit_fails_with_no_credits() { - ExtBuilder::default().build().execute_with(|| { - assert_err!( - PaymentServices::burn_block_production_free_credit_for_para(&1u32.into()), - pallet_services_payment::Error::::InsufficientCredits, - ); - assert_err!( - PaymentServices::burn_collator_assignment_free_credit_for_para(&1u32.into()), - pallet_services_payment::Error::::InsufficientCredits, - ); - }); -} - -#[test] -fn burn_block_production_credit_works() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - let para_id = 1.into(); - assert_ok!(PaymentServices::set_block_production_credits( - RuntimeOrigin::root(), - para_id, - 1u64, - ),); - - // should succeed and burn one - assert_eq!(>::get(para_id), Some(1u64)); - assert_ok!(PaymentServices::burn_block_production_free_credit_for_para( - ¶_id - )); - assert_eq!(>::get(para_id), Some(0u64)); - - // now should fail - assert_err!( - PaymentServices::burn_block_production_free_credit_for_para(¶_id), - pallet_services_payment::Error::::InsufficientCredits, - ); - }); -} - -#[test] -fn burn_collator_assignment_credit_works() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - let para_id = 1.into(); - assert_ok!(PaymentServices::set_collator_assignment_credits( - RuntimeOrigin::root(), - para_id, - 1u32, - ),); - - // should succeed and burn one - assert_eq!(>::get(para_id), Some(1u32)); - assert_ok!(PaymentServices::burn_collator_assignment_free_credit_for_para(¶_id)); - assert_eq!(>::get(para_id), Some(0u32)); - - // now should fail - assert_err!( - PaymentServices::burn_collator_assignment_free_credit_for_para(¶_id), - pallet_services_payment::Error::::InsufficientCredits, - ); - }); -} - -#[test] -fn burn_credit_fails_for_wrong_para() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - let para_id = 1.into(); - assert_ok!(PaymentServices::set_block_production_credits( - RuntimeOrigin::root(), - para_id, - 1u64, - ),); - assert_ok!(PaymentServices::set_collator_assignment_credits( - RuntimeOrigin::root(), - para_id, - 1u32, - ),); - - // fails for wrong para - let wrong_para_id = 2.into(); - assert_err!( - PaymentServices::burn_block_production_free_credit_for_para(&wrong_para_id), - pallet_services_payment::Error::::InsufficientCredits, - ); - assert_err!( - PaymentServices::burn_collator_assignment_free_credit_for_para(&wrong_para_id), - pallet_services_payment::Error::::InsufficientCredits, - ); - }); -} - -#[test] -fn set_block_production_credits_bad_origin() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - assert_err!( - PaymentServices::set_block_production_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1u64, - ), - DispatchError::BadOrigin - ) - }); -} - -#[test] -fn set_block_production_credits_above_max_works() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - assert_ok!(PaymentServices::set_block_production_credits( - RuntimeOrigin::root(), - 1.into(), - FreeBlockProductionCredits::get() * 2, - )); - - assert_eq!( - >::get(ParaId::from(1)), - Some(FreeBlockProductionCredits::get() * 2) - ); - }); -} - -#[test] -fn set_block_production_credits_to_zero_kills_storage() { - ExtBuilder::default() - .with_balances([(ALICE, 1_000)].into()) - .build() - .execute_with(|| { - assert_ok!(PaymentServices::set_block_production_credits( - RuntimeOrigin::root(), - 1.into(), - 0u64, - )); - - assert_eq!(>::get(ParaId::from(1)), None,); - }); -} - -#[test] -fn credits_should_be_substracted_from_tank_if_no_free_credits() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1000u128, - )); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 1000u128 - ); - - PaymentServices::on_container_author_noted(&1, 1, 1.into()); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 900u128 - ); - }); -} - -#[test] -fn credits_should_not_be_substracted_from_tank_if_it_involves_death() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 100u128, - )); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 100u128 - ); - - PaymentServices::on_container_author_noted(&1, 1, 1.into()); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 100u128 - ); - - assert_noop!( - PaymentServices::on_collators_assigned(1.into(), None, false), - pallet_balances::Error::::InsufficientBalance - ); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 100u128 - ); - }); -} - -#[test] -fn not_having_enough_tokens_in_tank_should_not_error() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1u128, - )); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 1u128 - ); - - PaymentServices::on_container_author_noted(&1, 1, 1.into()); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(1.into())), - 1u128 - ); - }); -} - -#[test] -fn on_deregister_burns_if_no_deposit_address() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1000u128, - )); - - let issuance_before = Balances::total_issuance(); - crate::Pallet::::para_deregistered(1.into()); - let issuance_after = Balances::total_issuance(); - assert_eq!(issuance_after, issuance_before - 1000u128); - - // Refund address gets cleared - assert!(>::get(ParaId::from(1)).is_none()); - }); -} - -#[test] -fn on_deregister_cleans_refund_address_even_when_purchases_have_not_being_made() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - let refund_address = 10u64; - - assert_ok!(PaymentServices::set_refund_address( - RuntimeOrigin::root(), - 1.into(), - Some(refund_address), - )); - - crate::Pallet::::para_deregistered(1.into()); - - // Refund address gets cleared - assert!(>::get(ParaId::from(1)).is_none()); - }); -} - -#[test] -fn on_deregister_deposits_if_refund_address() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - let refund_address = 10u64; - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1000u128, - )); - - // this should set refund address - assert_ok!(PaymentServices::set_refund_address( - RuntimeOrigin::root(), - 1.into(), - Some(refund_address), - )); - - let issuance_before = Balances::total_issuance(); - crate::Pallet::::para_deregistered(1.into()); - let issuance_after = Balances::total_issuance(); - assert_eq!(issuance_after, issuance_before); - - let balance_refund_address = Balances::balance(&refund_address); - assert_eq!(balance_refund_address, 1000u128); - - assert!(>::get(ParaId::from(1)).is_none()); - }); -} - -#[test] -fn set_refund_address_with_none_removes_storage() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000)].into()) - .build() - .execute_with(|| { - let refund_address = 10u64; - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - 1.into(), - 1000u128, - )); - - // this should set refund address - assert_ok!(PaymentServices::set_refund_address( - RuntimeOrigin::root(), - 1.into(), - Some(refund_address), - )); - - assert!(>::get(ParaId::from(1)).is_some()); - - assert_ok!(PaymentServices::set_refund_address( - RuntimeOrigin::root(), - 1.into(), - None, - )); - - assert!(>::get(ParaId::from(1)).is_none()); - }); -} - -#[test] -fn tip_should_be_charged_on_collators_assignment() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000_000)].into()) - .build() - .execute_with(|| { - let para_id = 1; - let tip = 10u128; - let balance = 5000u128; - - // this should give 10 block credit - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - para_id.into(), - balance, - )); - - assert_ok!(PaymentServices::set_max_tip( - RuntimeOrigin::root(), - para_id.into(), - Some(tip), - )); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(para_id.into())), - balance, - ); - - assert_ok!(PaymentServices::on_collators_assigned( - para_id.into(), - Some(&tip), - false - )); - - PaymentServices::on_container_author_noted(&1, 1, para_id.into()); - - let (assignment_cost, _weight) = - ::ProvideCollatorAssignmentCost::collator_assignment_cost( - ¶_id.into(), - ); - let (block_cost, _weight) = - ::ProvideBlockProductionCost::block_cost(¶_id.into()); - - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(para_id.into())), - balance - assignment_cost - block_cost - tip, - ); - }); -} - -#[test] -fn insufficient_balance_for_tip_reimburses_fee_imbalance() { - ExtBuilder::default() - .with_balances([(ALICE, 2_000_000)].into()) - .build() - .execute_with(|| { - let para_id = 1; - let tip = 10u128; - // Just enough for one assignment but not for tip; - let balance = 205u128; - - assert_ok!(PaymentServices::purchase_credits( - RuntimeOrigin::signed(ALICE), - para_id.into(), - balance, - )); - - assert_ok!(PaymentServices::set_max_tip( - RuntimeOrigin::root(), - para_id.into(), - Some(tip), - )); - - // it should fail when trying to withdraw the tip - assert!( - PaymentServices::on_collators_assigned(para_id.into(), Some(&tip), false).is_err() - ); - - // Tank balance shouldn't have changed - assert_eq!( - Balances::balance(&crate::Pallet::::parachain_tank(para_id.into())), - balance, - ); - }); -} diff --git a/pallets/services-payment/src/weights.rs b/pallets/services-payment/src/weights.rs deleted file mode 100644 index 808e749..0000000 --- a/pallets/services-payment/src/weights.rs +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_services_payment -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_services_payment -// --extrinsic -// * -// --chain=dev -// --steps -// 50 -// --repeat -// 20 -// --template=./benchmarking/frame-weight-template.hbs -// --json-file -// raw.json -// --output -// tmp/dancebox_weights/pallet_services_payment.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weight functions needed for pallet_services_payment. -pub trait WeightInfo { - fn purchase_credits() -> Weight; - fn set_block_production_credits() -> Weight; - fn set_given_free_credits() -> Weight; - fn set_refund_address() -> Weight; - fn set_max_core_price() -> Weight; - fn on_container_author_noted() -> Weight; - fn on_collators_assigned() -> Weight; - fn set_max_tip() -> Weight; -} - -/// Weights for pallet_services_payment using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn purchase_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `155` - // Estimated: `6196` - // Minimum execution time: 57_174_000 picoseconds. - Weight::from_parts(57_971_000, 6196) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - fn set_block_production_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_445_000 picoseconds. - Weight::from_parts(8_713_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::GivenFreeCredits` (r:0 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - fn set_given_free_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_842_000 picoseconds. - Weight::from_parts(5_122_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::RefundAddress` (r:0 w:1) - /// Proof: `ServicesPayment::RefundAddress` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_refund_address() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 16_357_000 picoseconds. - Weight::from_parts(16_871_000, 3660) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::MaxCorePrice` (r:0 w:1) - /// Proof: `ServicesPayment::MaxCorePrice` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_core_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 8_773_000 picoseconds. - Weight::from_parts(9_211_000, 3660) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn on_container_author_noted() -> Weight { - // Proof Size summary in bytes: - // Measured: `258` - // Estimated: `3593` - // Minimum execution time: 24_336_000 picoseconds. - Weight::from_parts(24_786_000, 3593) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:1 w:0) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn on_collators_assigned() -> Weight { - // Proof Size summary in bytes: - // Measured: `258` - // Estimated: `3593` - // Minimum execution time: 24_209_000 picoseconds. - Weight::from_parts(24_682_000, 3593) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::MaxTip` (r:0 w:1) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_tip() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_157_000 picoseconds. - Weight::from_parts(4_576_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} - -// For backwards compatibility and tests -impl WeightInfo for () { - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn purchase_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `155` - // Estimated: `6196` - // Minimum execution time: 57_174_000 picoseconds. - Weight::from_parts(57_971_000, 6196) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(2_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - fn set_block_production_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_445_000 picoseconds. - Weight::from_parts(8_713_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::GivenFreeCredits` (r:0 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - fn set_given_free_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_842_000 picoseconds. - Weight::from_parts(5_122_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::RefundAddress` (r:0 w:1) - /// Proof: `ServicesPayment::RefundAddress` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_refund_address() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 16_357_000 picoseconds. - Weight::from_parts(16_871_000, 3660) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::MaxCorePrice` (r:0 w:1) - /// Proof: `ServicesPayment::MaxCorePrice` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_core_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 8_773_000 picoseconds. - Weight::from_parts(9_211_000, 3660) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn on_container_author_noted() -> Weight { - // Proof Size summary in bytes: - // Measured: `258` - // Estimated: `3593` - // Minimum execution time: 24_336_000 picoseconds. - Weight::from_parts(24_786_000, 3593) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:1 w:0) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn on_collators_assigned() -> Weight { - // Proof Size summary in bytes: - // Measured: `258` - // Estimated: `3593` - // Minimum execution time: 24_209_000 picoseconds. - Weight::from_parts(24_682_000, 3593) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::MaxTip` (r:0 w:1) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_tip() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_157_000 picoseconds. - Weight::from_parts(4_576_000, 0) - .saturating_add(RocksDbWeight::get().writes(1_u64)) - } -} diff --git a/pallets/stream-payment/Cargo.toml b/pallets/stream-payment/Cargo.toml deleted file mode 100644 index 6347a7e..0000000 --- a/pallets/stream-payment/Cargo.toml +++ /dev/null @@ -1,76 +0,0 @@ -[package] -name = "pallet-stream-payment" -authors = { workspace = true } -description = "Stream payment pallet" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -log = { workspace = true } -serde = { workspace = true, optional = true } - -dp-core = { workspace = true } -tp-maths = { workspace = true } -tp-traits = { workspace = true } - -# Substrate -frame-benchmarking = { workspace = true, optional = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -[dev-dependencies] -num-traits = { workspace = true } -pallet-balances = { workspace = true, features = [ "std" ] } -similar-asserts = { workspace = true } -sp-io = { workspace = true, features = [ "std" ] } -tap = { workspace = true } - -[features] -default = [ "std" ] -std = [ - "dp-core/std", - "frame-benchmarking/std", - "frame-support/std", - "frame-system/std", - "log/std", - "pallet-balances/std", - "parity-scale-codec/std", - "scale-info/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-core/std", - "sp-io/std", - "sp-runtime/std", - "sp-std/std", - "tp-maths/std", - "tp-traits/std", -] -runtime-benchmarks = [ - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-maths/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] -try-runtime = [ - "frame-support/try-runtime", - "frame-system/try-runtime", - "pallet-balances/try-runtime", - "sp-runtime/try-runtime", -] diff --git a/pallets/stream-payment/README.md b/pallets/stream-payment/README.md deleted file mode 100644 index c85fd90..0000000 --- a/pallets/stream-payment/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Stream payment pallet - -A pallet to create payment streams, where users can setup recurrent payment at some rate per unit of -time. The pallet aims to be configurable and usage agnostic: - -- Runtime configures which assets are supported by providing an `AssetId` type and a type - implementing the `Assets` trait which only requires function needed by the pallet (increase - deposit when creating or refilling a stream, decrease deposit when closing a stream, and - transferring a deposit when the stream payment is performed). Both types allows to easily add new - supported assets in the future while being retro-compatible. The pallet make few assumptions about - how the funds are deposited (thanks to the custom trait), which should allow to easily support - assets from various pallets/sources. -- Runtime configure which unit of time is supported to express the rate of payment. Units of time - should be monotonically increasing. Users can then choose which unit of time they want to use. - -The pallet provides the following calls: -- `open_stream(target, time_unit, asset_id, rate, initial_deposit)`: The origin creates a stream - towards a target (payee), with given time unit, asset and rate. A deposit is made, which is able - to pay for `initial_deposit / rate`. Streams are indexed using a `StreamId` which is returned with - an event. -- `perform_payment(stream_id)`: can be called by anyone to update a stream, performing the payment - for the elapsed time since the last update. All other calls implicitly call `perform_payment`, - such that at any point in time you're guaranteed you'll be able to redeem the payment for the - elapsed time; which allow to call it only when the funds are needed without fear of non-payment. -- `close_stream(stream_id)`: only callable by the source or target of the stream. It pays for the - elapsed time then refund the remaining deposit to the source. -- `immediately_change_deposit(stream_id, asset_id, change)`: Change the deposit in the stream. It - first perform a payment before applying the change, which means a source will not retro-actively - pay for a drained stream. A target that provides services in exchange for payment should suspend - the service as soon as updating the stream would make it drain, and should resume services once - the stream is refilled. The call takes an asset id which must match the config asset id, which - prevents unwanted amounts when a change request that changes the asset is accepted. -- `request_change(stream_id, kind, new_config, deposit_change)`: Allows to request changing the - config of the stream. `kind` states if the change is a mere suggestion or is mandatory, in which - case there is a provided deadline at which point payments will no longer occur. Requests that - don't change the time unit or asset id and change the rate at a disadvantage for the caller is - applied immediately. An existing request can be overritten by both parties if it was a suggestion, - while only by the previous requester if it was mandatory. A nonce is increased to prevent to - prevent one to frontrunner the acceptation of a request with another request. The target of the - stream cannot provide a deposit change, while the source can. It is however mandatory to provide - change with absolute value when changing asset. -- `accept_requested_change(stream_id, request_nonce, deposit_change)`: Accept the change for this - stream id and request nonce. If one want to refuse a change they can either leave it as is (which - will do nothing if the request is a suggestion, or stop payment when reaching the deadline if - mandatory) or close the stream with `close_stream`. The target of the stream cannot provide a - deposit change, while the source can. It is however mandatory to provide change with absolute - value when changing asset. -- `cancel_change_request(stream_id)`: Cancel a change request, only callable by the requester of a - previous request. - -For UIs the pallet provides the following storages: -- `Streams: StreamId => Stream`: stream data indexed by stream id. -- `LookupStreamsWithSource: AccountId => StreamId => ()`: allows to list allow the streams with a - given source by iterating over all storage keys with the key prefix corresponding to the account. -- `LookupStreamsWithTarget: AccountId => StreamId => ()`: same but for the target. Those last 2 - storages are solely for UIs to list incoming and outgoing streams. Key prefix is used to reduce - the POV cost that would require a single Vec of StreamId. \ No newline at end of file diff --git a/pallets/stream-payment/rpc/runtime-api/Cargo.toml b/pallets/stream-payment/rpc/runtime-api/Cargo.toml deleted file mode 100644 index 0f189c5..0000000 --- a/pallets/stream-payment/rpc/runtime-api/Cargo.toml +++ /dev/null @@ -1,31 +0,0 @@ -[package] -name = "pallet-stream-payment-runtime-api" -authors = { workspace = true } -description = "Runtime API definition of pallet-stream-payment" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -parity-scale-codec = { workspace = true } -scale-info = { workspace = true } -serde = { workspace = true, optional = true, features = [ "derive" ] } -sp-api = { workspace = true } -thiserror = { workspace = true, optional = true } - -[features] -default = [ "std" ] -std = [ - "parity-scale-codec/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-api/std", - "thiserror", -] diff --git a/pallets/stream-payment/rpc/runtime-api/src/lib.rs b/pallets/stream-payment/rpc/runtime-api/src/lib.rs deleted file mode 100644 index c65b696..0000000 --- a/pallets/stream-payment/rpc/runtime-api/src/lib.rs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! Runtime API for Stream Payment pallet - -#![cfg_attr(not(feature = "std"), no_std)] - -extern crate alloc; - -use { - alloc::string::String, - parity_scale_codec::{Decode, Encode}, -}; - -#[derive(Debug, Copy, Clone, PartialEq, Eq, Encode, Decode, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -pub struct StreamPaymentApiStatus { - pub payment: Balance, - pub deposit_left: Balance, - /// Whenever the stream is stalled, which can occur either when no funds are left or - /// if the time is past a mandatory request deadline. - pub stalled: bool, -} - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, scale_info::TypeInfo)] -#[cfg_attr(feature = "std", derive(thiserror::Error))] -pub enum StreamPaymentApiError { - #[cfg_attr(feature = "std", error("Unknown stream id"))] - UnknownStreamId, - #[cfg_attr(feature = "std", error("Other error: {0}"))] - Other(String), -} - -sp_api::decl_runtime_apis! { - pub trait StreamPaymentApi - where - StreamId: parity_scale_codec::Codec, - Instant: parity_scale_codec::Codec, - Balance: parity_scale_codec::Codec, - { - /// Get the stream payment current status, telling how much payment is - /// pending, how much deposit will be left and whenever the stream is stalled. - /// The stream is considered stalled if no funds are left or if the provided - /// time is past a mandatory request deadline. If the provided `now` is `None` - /// then the current time will be fetched. Being able to provide a custom `now` - /// allows to check the status in the future. - fn stream_payment_status( - stream_id: StreamId, - now: Option, - ) -> Result, StreamPaymentApiError>; - } -} diff --git a/pallets/stream-payment/src/benchmarking.rs b/pallets/stream-payment/src/benchmarking.rs deleted file mode 100644 index 474fb73..0000000 --- a/pallets/stream-payment/src/benchmarking.rs +++ /dev/null @@ -1,436 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::{ - Assets, Call, ChangeKind, Config, DepositChange, Event, Pallet, Party, StreamConfig, - Streams, TimeProvider, - }, - frame_benchmarking::{account, impl_benchmark_test_suite, v2::*, BenchmarkError}, - frame_support::{assert_ok, dispatch::RawOrigin}, - frame_system::EventRecord, -}; - -/// Create a funded user. -fn create_funded_user( - string: &'static str, - n: u32, - asset_id: &T::AssetId, - // amount: T::Balance, -) -> T::AccountId { - const SEED: u32 = 0; - let user = account(string, n, SEED); - - // create a large amount that should be greater than ED - let amount: T::Balance = 1_000_000_000u32.into(); - let amount: T::Balance = amount * T::Balance::from(1_000_000_000u32); - T::Assets::bench_set_balance(asset_id, &user, amount); - user -} - -fn assert_last_event(generic_event: ::RuntimeEvent) { - let events = frame_system::Pallet::::events(); - let system_event: ::RuntimeEvent = generic_event.into(); - // compare to the last event record - let EventRecord { event, .. } = &events[events.len() - 1]; - assert_eq!(event, &system_event); -} - -#[benchmarks] -mod benchmarks { - use super::*; - - #[benchmark] - fn open_stream() -> Result<(), BenchmarkError> { - let asset_id = T::Assets::bench_worst_case_asset_id(); - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - #[extrinsic_call] - _( - RawOrigin::Signed(source.clone()), - target, - StreamConfig { - time_unit, - asset_id, - rate: 100u32.into(), - }, - 1_000_000u32.into(), - ); - - assert_last_event::( - Event::StreamOpened { - stream_id: 0u32.into(), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn close_stream() -> Result<(), BenchmarkError> { - // Worst case is closing a stream with a pending payment. - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target, - StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }, - initial_deposit, - )); - - // Change time to trigger payment. - let now = T::TimeProvider::now(&time_unit).expect("can fetch time"); - let delta: T::Balance = 10u32.into(); - T::TimeProvider::bench_set_now(now + delta); - - #[extrinsic_call] - _(RawOrigin::Signed(source.clone()), 0u32.into()); - - assert_last_event::( - Event::StreamClosed { - stream_id: 0u32.into(), - refunded: initial_deposit - (rate * delta), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn perform_payment() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target.clone(), - StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }, - initial_deposit, - )); - - // Change time to trigger payment. - let now = T::TimeProvider::now(&time_unit).expect("can fetch time"); - let delta: T::Balance = 10u32.into(); - T::TimeProvider::bench_set_now(now + delta); - - #[extrinsic_call] - _(RawOrigin::Signed(source.clone()), 0u32.into()); - - assert_last_event::( - Event::StreamPayment { - stream_id: 0u32.into(), - source, - target, - amount: rate * delta, - stalled: false, - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn request_change_immediate() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - let config = StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }; - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target, - config.clone(), - initial_deposit, - )); - - let new_config = StreamConfig { - rate: 101u32.into(), - ..config.clone() - }; - - #[extrinsic_call] - Pallet::::request_change( - RawOrigin::Signed(source.clone()), - 0u32.into(), - ChangeKind::Suggestion, - new_config.clone(), - Some(DepositChange::Increase(1_000u32.into())), - ); - - assert_last_event::( - Event::StreamConfigChanged { - stream_id: 0u32.into(), - old_config: config, - new_config, - deposit_change: Some(DepositChange::Increase(1_000u32.into())), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn request_change_delayed() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - let asset_id2 = T::Assets::bench_worst_case_asset_id2(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - let config = StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }; - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target, - config.clone(), - initial_deposit, - )); - - // Change the asset id. In the case asset_id == asset_id2, we decrease the rate so that - // the request is not executed immediately. - let new_config = StreamConfig { - asset_id: asset_id2, - rate: 99u32.into(), - ..config.clone() - }; - - let stream_id = 0u32.into(); - - #[extrinsic_call] - Pallet::::request_change( - RawOrigin::Signed(source.clone()), - stream_id, - ChangeKind::Suggestion, - new_config.clone(), - Some(DepositChange::Absolute(500u32.into())), - ); - - assert_last_event::( - Event::StreamConfigChangeRequested { - stream_id, - request_nonce: 1, - requester: Party::Source, - old_config: config, - new_config, - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn accept_requested_change() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - let asset_id2 = T::Assets::bench_worst_case_asset_id2(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - let config = StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }; - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target.clone(), - config.clone(), - initial_deposit, - )); - - // Change the asset id. In the case asset_id == asset_id2, we decrease the rate so that - // the request is not executed immediately. - let new_config = StreamConfig { - asset_id: asset_id2, - rate: 99u32.into(), - ..config.clone() - }; - - assert_ok!(Pallet::::request_change( - RawOrigin::Signed(source.clone()).into(), - 0u32.into(), - ChangeKind::Suggestion, - new_config.clone(), - Some(DepositChange::Absolute(500u32.into())), - )); - - #[extrinsic_call] - _(RawOrigin::Signed(target.clone()), 0u32.into(), 1, None); - - assert_last_event::( - Event::StreamConfigChanged { - stream_id: 0u32.into(), - old_config: config, - new_config, - deposit_change: Some(DepositChange::Absolute(500u32.into())), - } - .into(), - ); - - Ok(()) - } - - #[benchmark] - fn cancel_change_request() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - let asset_id2 = T::Assets::bench_worst_case_asset_id2(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - let config = StreamConfig { - time_unit: time_unit.clone(), - asset_id, - rate, - }; - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target.clone(), - config.clone(), - initial_deposit, - )); - - // Change the asset id. In the case asset_id == asset_id2, we decrease the rate so that - // the request is not executed immediately. - let new_config = StreamConfig { - asset_id: asset_id2, - rate: 99u32.into(), - ..config.clone() - }; - - assert_ok!(Pallet::::request_change( - RawOrigin::Signed(source.clone()).into(), - 0u32.into(), - ChangeKind::Suggestion, - new_config.clone(), - Some(DepositChange::Absolute(500u32.into())), - )); - - #[extrinsic_call] - _(RawOrigin::Signed(source), 0u32.into()); - - let stream_id: T::StreamId = 0u32.into(); - assert!(Streams::::get(stream_id) - .expect("to be a stream") - .pending_request - .is_none()); - - Ok(()) - } - - #[benchmark] - fn immediately_change_deposit() -> Result<(), BenchmarkError> { - let time_unit = T::TimeProvider::bench_worst_case_time_unit(); - let asset_id = T::Assets::bench_worst_case_asset_id(); - - let source = create_funded_user::("source", 1, &asset_id); - let target = create_funded_user::("target", 2, &asset_id); - - let rate = 100u32.into(); - let initial_deposit = 1_000_000u32.into(); - let config = StreamConfig { - time_unit: time_unit.clone(), - asset_id: asset_id.clone(), - rate, - }; - - assert_ok!(Pallet::::open_stream( - RawOrigin::Signed(source.clone()).into(), - target.clone(), - config.clone(), - initial_deposit, - )); - - #[extrinsic_call] - _( - RawOrigin::Signed(source), - 0u32.into(), - asset_id, - DepositChange::Absolute(500u32.into()), - ); - - assert_last_event::( - Event::StreamConfigChanged { - stream_id: 0u32.into(), - old_config: config.clone(), - new_config: config, - deposit_change: Some(DepositChange::Absolute(500u32.into())), - } - .into(), - ); - - Ok(()) - } - - impl_benchmark_test_suite!( - Pallet, - crate::mock::ExtBuilder::default().build(), - crate::mock::Runtime, - ); -} diff --git a/pallets/stream-payment/src/lib.rs b/pallets/stream-payment/src/lib.rs deleted file mode 100644 index 15ac50d..0000000 --- a/pallets/stream-payment/src/lib.rs +++ /dev/null @@ -1,1036 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![doc = include_str!("../README.md")] -#![cfg_attr(not(feature = "std"), no_std)] - -#[cfg(test)] -mod mock; - -#[cfg(test)] -mod tests; - -#[cfg(feature = "runtime-benchmarks")] -mod benchmarking; - -pub mod weights; -pub use weights::WeightInfo; - -#[cfg(feature = "std")] -use serde::{Deserialize, Serialize}; - -use { - core::cmp::min, - frame_support::{ - dispatch::DispatchErrorWithPostInfo, - pallet, - pallet_prelude::*, - storage::types::{StorageDoubleMap, StorageMap}, - traits::{ - fungible::{Inspect, MutateHold}, - tokens::{Balance, Precision}, - }, - Blake2_128Concat, - }, - frame_system::pallet_prelude::*, - parity_scale_codec::{FullCodec, MaxEncodedLen}, - scale_info::TypeInfo, - sp_runtime::{ - traits::{AtLeast32BitUnsigned, CheckedAdd, CheckedSub, One, Saturating, Zero}, - ArithmeticError, - }, - sp_std::{fmt::Debug, marker::PhantomData}, -}; - -pub use pallet::*; - -/// Type able to provide the current time for given unit. -/// For each unit the returned number should monotonically increase and not -/// overflow. -pub trait TimeProvider { - fn now(unit: &Unit) -> Option; - - /// Benchmarks: should return the time unit which has the worst performance calling - /// `TimeProvider::now(unit)` with. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_time_unit() -> Unit; - - /// Benchmarks: sets the "now" time for time unit returned by `bench_worst_case_time_unit`. - #[cfg(feature = "runtime-benchmarks")] - fn bench_set_now(instant: Number); -} - -/// Interactions the pallet needs with assets. -pub trait Assets { - /// Transfer assets deposited by an account to another account. - /// Those assets should not be considered deposited in the target account. - fn transfer_deposit( - asset_id: &AssetId, - from: &AccountId, - to: &AccountId, - amount: Balance, - ) -> DispatchResult; - - /// Increase the deposit for an account and asset id. Should fail if account doesn't have - /// enough of that asset. Funds should be safe and not slashable. - fn increase_deposit(asset_id: &AssetId, account: &AccountId, amount: Balance) - -> DispatchResult; - - /// Decrease the deposit for an account and asset id. Should fail on underflow. - fn decrease_deposit(asset_id: &AssetId, account: &AccountId, amount: Balance) - -> DispatchResult; - - /// Return the deposit for given asset and account. - fn get_deposit(asset_id: &AssetId, account: &AccountId) -> Balance; - - /// Benchmarks: should return the asset id which has the worst performance when interacting - /// with it. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_asset_id() -> AssetId; - - /// Benchmarks: should return the another asset id which has the worst performance when interacting - /// with it afther `bench_worst_case_asset_id`. This is to benchmark the worst case when changing config - /// from one asset to another. If there is only one asset id it is fine to return it in both - /// `bench_worst_case_asset_id` and `bench_worst_case_asset_id2`. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_asset_id2() -> AssetId; - - /// Benchmarks: should set the balance. - #[cfg(feature = "runtime-benchmarks")] - fn bench_set_balance(asset_id: &AssetId, account: &AccountId, amount: Balance); -} - -#[pallet] -pub mod pallet { - use super::*; - - /// Pooled Staking pallet. - #[pallet::pallet] - #[pallet::without_storage_info] - pub struct Pallet(PhantomData); - - #[pallet::config] - pub trait Config: frame_system::Config { - /// Overarching event type - type RuntimeEvent: From> + IsType<::RuntimeEvent>; - - /// Type used to represent stream ids. Should be large enough to not overflow. - type StreamId: AtLeast32BitUnsigned - + Default - + Debug - + Copy - + Clone - + FullCodec - + TypeInfo - + MaxEncodedLen; - - /// The balance type, which is also the type representing time (as this - /// pallet will do math with both time and balances to compute how - /// much should be paid). - type Balance: Balance; - - /// Type representing an asset id, a identifier allowing distinguishing assets. - type AssetId: Debug + Clone + FullCodec + TypeInfo + MaxEncodedLen + PartialEq + Eq; - - /// Provide interaction with assets. - type Assets: Assets; - - /// Currency for the opening balance hold for the storage used by the Stream. - /// NOT to be confused with Assets. - type Currency: Inspect - + MutateHold; - - type RuntimeHoldReason: From; - - #[pallet::constant] - type OpenStreamHoldAmount: Get; - - /// Represents which units of time can be used. Designed to be an enum - /// with a variant for each kind of time source/scale supported. - type TimeUnit: Debug + Clone + FullCodec + TypeInfo + MaxEncodedLen + Eq; - - /// Provide the current time in given unit. - type TimeProvider: TimeProvider; - - type WeightInfo: weights::WeightInfo; - } - - type AccountIdOf = ::AccountId; - type AssetIdOf = ::AssetId; - - pub type RequestNonce = u32; - - /// A stream payment from source to target. - /// Stores the last time the stream was updated, which allows to compute - /// elapsed time and perform payment. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Clone, TypeInfo)] - pub struct Stream { - /// Payer, source of the stream. - pub source: AccountId, - /// Payee, target of the stream. - pub target: AccountId, - /// Steam config (time unit, asset id, rate) - pub config: StreamConfig, - /// How much is deposited to fund this stream. - pub deposit: Balance, - /// Last time the stream was updated in `config.time_unit`. - pub last_time_updated: Balance, - /// Nonce for requests. This prevents a request to make a first request - /// then change it to another request to frontrun the other party - /// accepting. - pub request_nonce: RequestNonce, - /// A pending change request if any. - pub pending_request: Option>, - /// One-time opening deposit. Will be released on close. - pub opening_deposit: Balance, - } - - impl Stream { - pub fn account_to_party(&self, account: AccountId) -> Option { - match account { - a if a == self.source => Some(Party::Source), - a if a == self.target => Some(Party::Target), - _ => None, - } - } - } - - /// Stream configuration. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub struct StreamConfig { - /// Unit in which time is measured using a `TimeProvider`. - pub time_unit: Unit, - /// Asset used for payment. - pub asset_id: AssetId, - /// Amount of asset / unit. - pub rate: Balance, - } - - /// Origin of a change request. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub enum Party { - Source, - Target, - } - - impl Party { - pub fn inverse(self) -> Self { - match self { - Party::Source => Party::Target, - Party::Target => Party::Source, - } - } - } - - /// Kind of change requested. - #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] - #[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo)] - pub enum ChangeKind, f: impl FnOnce() -> R) { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - for op in ops.iter() { - assert_ok!(PooledStaking::request_delegate( - origin_of(op.delegator.clone()), - op.candidate.clone(), - op.target_pool, - op.stake, - )); - } - - // We called request_delegate in session 0, we will be able to execute it starting from session 2 - run_to_session(2); - - for op in ops.iter() { - let operation = match op.target_pool { - TargetPool::AutoCompounding => PendingOperationKey::JoiningAutoCompounding { - candidate: op.candidate.clone(), - at: 0, - }, - TargetPool::ManualRewards => PendingOperationKey::JoiningManualRewards { - candidate: op.candidate.clone(), - at: 0, - }, - }; - - assert_ok!(PooledStaking::execute_pending_operations( - origin_of(op.delegator.clone()), - vec![PendingOperationQuery { - delegator: op.delegator.clone(), - operation, - }] - )); - } - - f() - }); -} - -#[test] -fn test_staking_leave_exact_amount() { - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake: 10 * MinimumSelfDelegation::get(), - }], - || { - let stake = 10 * MinimumSelfDelegation::get(); - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - )); - - // Immediately after calling request_undelegate, Alice is no longer a candidate - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!(eligible_candidates, vec![]); - }, - ) -} - -#[test] -fn test_staking_leave_bad_origin() { - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake: 10 * MinimumSelfDelegation::get(), - }], - || { - let stake = 10 * MinimumSelfDelegation::get(); - assert_noop!( - PooledStaking::request_undelegate( - root_origin(), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - ), - BadOrigin - ); - }, - ) -} - -#[test] -fn test_staking_leave_more_than_allowed() { - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake: 10 * MinimumSelfDelegation::get(), - }], - || { - let stake = 10 * MinimumSelfDelegation::get(); - assert_noop!( - PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake + 1 * MinimumSelfDelegation::get()), - ), - pallet_pooled_staking::Error::::MathUnderflow, - ); - }, - ); -} - -#[test] -fn test_staking_leave_in_separate_transactions() { - let stake = 10 * MinimumSelfDelegation::get(); - - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake, - }], - || { - let half_stake = stake / 2; - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(half_stake), - )); - - // Alice is still a valid candidate, now with less stake - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - let remaining_stake = stake - half_stake; - assert_eq!( - eligible_candidates, - vec![EligibleCandidate { - candidate: ALICE.into(), - stake: remaining_stake, - }], - ); - - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(remaining_stake), - )); - - // Unstaked remaining stake, so no longer a valid candidate - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!(eligible_candidates, vec![],); - }, - ); -} - -#[test] -fn test_staking_leave_all_except_some_dust() { - let stake = 10 * MinimumSelfDelegation::get(); - - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake, - }], - || { - let dust = MinimumSelfDelegation::get() / 2; - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake - dust), - )); - - // Alice still has some stake left, but not enough to reach MinimumSelfDelegation - assert_eq!( - pallet_pooled_staking::Pools::::get( - AccountId::from(ALICE), - PoolsKey::CandidateTotalStake - ), - dust, - ); - - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!(eligible_candidates, vec![],); - - // Leave with remaining stake - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(dust), - )); - - // Alice has no more stake left - assert_eq!( - pallet_pooled_staking::Pools::::get( - AccountId::from(ALICE), - PoolsKey::CandidateTotalStake - ), - 0, - ); - }, - ); -} - -#[test] -fn test_staking_leave_execute_before_time() { - let stake = 10 * MinimumSelfDelegation::get(); - - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake, - }], - || { - let balance_before = System::account(AccountId::from(ALICE)).data.free; - let at = Session::current_index(); - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - )); - - // Request undelegate does not change account balance - assert_eq!( - balance_before, - System::account(AccountId::from(ALICE)).data.free - ); - - // We called request_delegate in session 0, we will be able to execute it starting from session 2 - let start_of_session_4 = session_to_block(4); - // Session 4 starts at block 1200, but run_to_session runs to block 1201, so subtract 2 here to go to 1999 - run_to_block(start_of_session_4 - 2); - - assert_noop!( - PooledStaking::execute_pending_operations( - origin_of(ALICE.into()), - vec![PendingOperationQuery { - delegator: ALICE.into(), - operation: PendingOperationKey::Leaving { - candidate: ALICE.into(), - at, - } - }] - ), - pallet_pooled_staking::Error::::RequestCannotBeExecuted(0) - ); - }, - ); -} - -#[test] -fn test_staking_leave_execute_any_origin() { - let stake = 10 * MinimumSelfDelegation::get(); - - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake, - }], - || { - let balance_before = System::account(AccountId::from(ALICE)).data.free; - let at = Session::current_index(); - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - )); - - // Request undelegate does not change account balance - assert_eq!( - balance_before, - System::account(AccountId::from(ALICE)).data.free - ); - - run_to_session(4); - - let balance_before = System::account(AccountId::from(ALICE)).data.free; - - assert_ok!(PooledStaking::execute_pending_operations( - // Any signed origin can execute this, the stake will go to Alice account - origin_of(BOB.into()), - vec![PendingOperationQuery { - delegator: ALICE.into(), - operation: PendingOperationKey::Leaving { - candidate: ALICE.into(), - at, - } - }] - ),); - - let balance_after = System::account(AccountId::from(ALICE)).data.free; - assert_eq!(balance_after - balance_before, stake); - }, - ); -} - -#[test] -fn test_staking_leave_execute_bad_origin() { - let stake = 10 * MinimumSelfDelegation::get(); - - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake, - }], - || { - let at = Session::current_index(); - assert_ok!(PooledStaking::request_undelegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - )); - - run_to_session(4); - - assert_noop!( - PooledStaking::execute_pending_operations( - root_origin(), - vec![PendingOperationQuery { - delegator: ALICE.into(), - operation: PendingOperationKey::Leaving { - candidate: ALICE.into(), - at, - } - }] - ), - BadOrigin - ); - }, - ); -} - -#[test] -fn test_staking_swap() { - setup_staking_join_and_execute( - vec![A { - delegator: ALICE.into(), - candidate: ALICE.into(), - target_pool: TargetPool::AutoCompounding, - stake: 10 * MinimumSelfDelegation::get(), - }], - || { - let stake = 10 * MinimumSelfDelegation::get(); - assert_ok!(PooledStaking::swap_pool( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - SharesOrStake::Stake(stake), - )); - - assert_eq!( - PooledStaking::computed_stake( - ALICE.into(), - ALICE.into(), - AllTargetPool::AutoCompounding - ), - Some(0u32.into()) - ); - assert_eq!( - PooledStaking::computed_stake( - ALICE.into(), - ALICE.into(), - AllTargetPool::ManualRewards - ), - Some(stake) - ); - - assert_ok!(PooledStaking::swap_pool( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::ManualRewards, - SharesOrStake::Stake(stake), - )); - - assert_eq!( - PooledStaking::computed_stake( - ALICE.into(), - ALICE.into(), - AllTargetPool::AutoCompounding - ), - Some(stake) - ); - assert_eq!( - PooledStaking::computed_stake( - ALICE.into(), - ALICE.into(), - AllTargetPool::ManualRewards - ), - Some(0u32.into()) - ); - }, - ) -} - -#[test] -fn test_pallet_session_takes_validators_from_invulnerables_and_staking() { - // Alice, Bob, Charlie are invulnerables - // Alice, Dave are in pallet_staking - // Expected collators are Alice, Bob, Charlie, Dave - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let stake = 10 * MinimumSelfDelegation::get(); - - assert_ok!(PooledStaking::request_delegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - stake, - )); - - // Register Dave in pallet_session (invulnerables are automatically registered) - let dave_account_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - dancebox_runtime::SessionKeys { - nimbus: dave_account_id, - }, - vec![] - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(DAVE.into()), - DAVE.into(), - TargetPool::AutoCompounding, - stake, - )); - - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!( - eligible_candidates, - vec![ - EligibleCandidate { - candidate: ALICE.into(), - stake - }, - EligibleCandidate { - candidate: DAVE.into(), - stake - }, - ] - ); - - assert_eq!( - pallet_invulnerables::Invulnerables::::get().to_vec(), - vec![ - AccountId::from(ALICE), - AccountId::from(BOB), - AccountId::from(CHARLIE), - ] - ); - - // Need to trigger new session to update pallet_session - run_to_session(2); - - assert_eq!( - Session::validators(), - vec![ - AccountId::from(ALICE), - AccountId::from(BOB), - AccountId::from(CHARLIE), - AccountId::from(DAVE), - ] - ); - }); -} - -#[test] -fn test_pallet_session_limits_num_validators() { - // Set max_collators = 2, now only the first 2 invulnerables are valid collators - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .with_config(pallet_configuration::HostConfiguration { - max_collators: 2, - min_orchestrator_collators: 2, - max_orchestrator_collators: 2, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .build() - .execute_with(|| { - run_to_block(2); - - let stake = 10 * MinimumSelfDelegation::get(); - - assert_ok!(PooledStaking::request_delegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::AutoCompounding, - stake, - )); - - // Register Dave in pallet_session (invulnerables are automatically registered) - let dave_account_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - dancebox_runtime::SessionKeys { - nimbus: dave_account_id, - }, - vec![] - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(DAVE.into()), - DAVE.into(), - TargetPool::AutoCompounding, - stake, - )); - - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!( - eligible_candidates, - vec![ - EligibleCandidate { - candidate: ALICE.into(), - stake - }, - EligibleCandidate { - candidate: DAVE.into(), - stake - }, - ] - ); - - assert_eq!( - pallet_invulnerables::Invulnerables::::get().to_vec(), - vec![ - AccountId::from(ALICE), - AccountId::from(BOB), - AccountId::from(CHARLIE), - ] - ); - - // Need to trigger new session to update pallet_session - run_to_session(2); - - assert_eq!( - Session::validators(), - vec![AccountId::from(ALICE), AccountId::from(BOB),] - ); - }); -} - -#[test] -fn test_pallet_session_limits_num_validators_from_staking() { - // Set max_collators = 2, take 1 invulnerable and the rest from staking - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![(AccountId::from(ALICE), 210 * UNIT)]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .with_config(pallet_configuration::HostConfiguration { - max_collators: 2, - min_orchestrator_collators: 2, - max_orchestrator_collators: 2, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .build() - .execute_with(|| { - run_to_block(2); - - let stake = 10 * MinimumSelfDelegation::get(); - - // Register accounts in pallet_session (invulnerables are automatically registered) - let bob_account_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - assert_ok!(Session::set_keys( - origin_of(BOB.into()), - dancebox_runtime::SessionKeys { - nimbus: bob_account_id, - }, - vec![] - )); - let charlie_account_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - dancebox_runtime::SessionKeys { - nimbus: charlie_account_id, - }, - vec![] - )); - let dave_account_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - dancebox_runtime::SessionKeys { - nimbus: dave_account_id, - }, - vec![] - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(BOB.into()), - BOB.into(), - TargetPool::AutoCompounding, - stake, - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(CHARLIE.into()), - CHARLIE.into(), - TargetPool::AutoCompounding, - stake, - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(DAVE.into()), - DAVE.into(), - TargetPool::AutoCompounding, - stake, - )); - - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!( - eligible_candidates, - vec![ - EligibleCandidate { - candidate: BOB.into(), - stake - }, - EligibleCandidate { - candidate: CHARLIE.into(), - stake - }, - EligibleCandidate { - candidate: DAVE.into(), - stake - }, - ] - ); - - assert_eq!( - pallet_invulnerables::Invulnerables::::get().to_vec(), - vec![AccountId::from(ALICE),] - ); - - // Need to trigger new session to update pallet_session - run_to_session(2); - - assert_eq!( - Session::validators(), - vec![AccountId::from(ALICE), AccountId::from(BOB),] - ); - }); -} - -#[test] -fn test_reward_to_staking_candidate() { - // Alice, Bob, Charlie are invulnerables - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![(AccountId::from(ALICE), 210 * UNIT)]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let dave_account_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - dancebox_runtime::SessionKeys { - nimbus: dave_account_id, - }, - vec![] - )); - - // We make delegations to DAVE so that she is an elligible candidate. - - let stake = 10 * MinimumSelfDelegation::get(); - - assert_ok!(PooledStaking::request_delegate( - origin_of(DAVE.into()), - DAVE.into(), - TargetPool::ManualRewards, - stake, - )); - assert_ok!(PooledStaking::request_delegate( - origin_of(BOB.into()), - DAVE.into(), - TargetPool::AutoCompounding, - stake, - )); - - // wait few sessions for the request to be executable - run_to_session(3u32); - assert_ok!(PooledStaking::execute_pending_operations( - origin_of(ALICE.into()), - vec![ - PendingOperationQuery { - delegator: DAVE.into(), - operation: PendingOperationKey::JoiningManualRewards { - candidate: DAVE.into(), - at: 0 - } - }, - PendingOperationQuery { - delegator: BOB.into(), - operation: PendingOperationKey::JoiningAutoCompounding { - candidate: DAVE.into(), - at: 0 - } - } - ] - )); - - // wait for next session so that DAVE is elected - run_to_session(4u32); - - assert_eq!( - Session::validators(), - vec![AccountId::from(ALICE), AccountId::from(DAVE)] - ); - - let account: AccountId = DAVE.into(); - let balance_before = System::account(account.clone()).data.free; - let summary = (0..100) - .find_map(|_| { - let summary = run_block(); - if summary.author_id == DAVE.into() { - Some(summary) - } else { - None - } - }) - .unwrap_or_else(|| panic!("DAVE doesn't seem to author any blocks")); - let balance_after = System::account(account).data.free; - - let all_rewards = RewardsPortion::get() * summary.inflation; - // rewards are shared between orchestrator and registered paras - let orchestrator_rewards = all_rewards / 3; - let candidate_rewards = RewardsCollatorCommission::get() * orchestrator_rewards; - - assert_eq!( - candidate_rewards, - balance_after - balance_before, - "dave should get the correct reward portion" - ); - }); -} - -#[test] -fn test_reward_to_invulnerable() { - // Alice, Bob, Charlie are invulnerables - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // We make delegations to ALICE so that she is an elligible candidate. - // However since she is an invulnerable she should get all the - // rewards. - - let stake = 10 * MinimumSelfDelegation::get(); - - assert_ok!(PooledStaking::request_delegate( - origin_of(ALICE.into()), - ALICE.into(), - TargetPool::ManualRewards, - stake, - )); - assert_ok!(PooledStaking::request_delegate( - origin_of(BOB.into()), - ALICE.into(), - TargetPool::AutoCompounding, - stake, - )); - - // wait few sessions for the request to be executable - run_to_session(3u32); - assert_ok!(PooledStaking::execute_pending_operations( - origin_of(ALICE.into()), - vec![ - PendingOperationQuery { - delegator: ALICE.into(), - operation: PendingOperationKey::JoiningAutoCompounding { - candidate: ALICE.into(), - at: 0 - } - }, - PendingOperationQuery { - delegator: BOB.into(), - operation: PendingOperationKey::JoiningAutoCompounding { - candidate: ALICE.into(), - at: 0 - } - } - ] - )); - - // wait for next session so that ALICE is elected - run_to_session(4u32); - - let account: AccountId = ALICE.into(); - let balance_before = System::account(account.clone()).data.free; - - let summary = (0..100) - .find_map(|_| { - let summary = run_block(); - if summary.author_id == ALICE.into() { - Some(summary) - } else { - None - } - }) - .unwrap_or_else(|| panic!("ALICE doesn't seem to author any blocks")); - - let balance_after = System::account(account).data.free; - - let all_rewards = RewardsPortion::get() * summary.inflation; - // rewards are shared between orchestrator and registered paras - let orchestrator_rewards = all_rewards / 3; - assert_eq!( - orchestrator_rewards, - balance_after - balance_before, - "alice should get the correct reward portion" - ); - }); -} - -#[test] -fn test_reward_to_invulnerable_with_key_change() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![(AccountId::from(ALICE), 210 * UNIT)]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - run_to_session(2u32); - - // change key, this should be reflected 2 sessions afterward - let alice_new_key = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(ALICE.into()), - dancebox_runtime::SessionKeys { - nimbus: alice_new_key, - }, - vec![] - )); - - run_to_session(4u32); - - let account: AccountId = ALICE.into(); - let balance_before = System::account(account.clone()).data.free; - - let summary = run_block(); - assert_eq!(summary.author_id, ALICE.into()); - - let balance_after = System::account(account).data.free; - - let all_rewards = RewardsPortion::get() * summary.inflation; - // rewards are shared between orchestrator and registered paras - let orchestrator_rewards = all_rewards / 3; - assert_eq!( - orchestrator_rewards, - balance_after - balance_before, - "alice should get the correct reward portion" - ); - }); -} - -#[test] -fn test_migration_config_full_rotation_period() { - ExtBuilder::default() - .build() - .execute_with(|| { - const CONFIGURATION_ACTIVE_CONFIG_KEY: &[u8] = - &hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385"); - const CONFIGURATION_PENDING_CONFIGS_KEY: &[u8] = - &hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22d53b4123b2e186e07fb7bad5dda5f55c0"); - - // Modify active config - frame_support::storage::unhashed::put_raw(CONFIGURATION_ACTIVE_CONFIG_KEY, &hex_literal::hex!("6300000002000000050000000200000000000000")); - // Modify pending configs - frame_support::storage::unhashed::put_raw(CONFIGURATION_PENDING_CONFIGS_KEY, &hex_literal::hex!("08b10800006300000002000000050000000200000000000000b20800006400000002000000050000000200000000000000")); - - let migration = MigrateConfigurationParathreads::(Default::default()); - migration.migrate(Default::default()); - - let expected_active = pallet_configuration::HostConfiguration { - max_collators: 99, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - }; - assert_eq!(Configuration::config(), expected_active); - - let expected_pending = vec![ - ( - 2225, - pallet_configuration::HostConfiguration { - max_collators: 99, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - }, - ), - ( - 2226, - pallet_configuration::HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - }, - ), - ]; - assert_eq!(Configuration::pending_configs(), expected_pending); - }); -} - -#[test] -fn test_migration_registrar_pending_verification() { - ExtBuilder::default().build().execute_with(|| { - const REGISTRAR_PENDING_VERIFICATION_KEY: &[u8] = - &hex_literal::hex!("3fba98689ebed1138735e0e7a5a790ab57a35de516113188134ad8e43c6d55ec"); - - // Modify active config - let para_ids: Vec = vec![2000.into(), 2001.into(), 2002.into(), 3000.into()]; - frame_support::storage::unhashed::put(REGISTRAR_PENDING_VERIFICATION_KEY, ¶_ids); - - let migration = RegistrarPendingVerificationValueToMap::(Default::default()); - migration.migrate(Default::default()); - - let empty_key = - frame_support::storage::unhashed::get_raw(REGISTRAR_PENDING_VERIFICATION_KEY); - assert_eq!(empty_key, None); - - for para_id in para_ids { - let exists_in_map = - pallet_registrar::PendingVerification::::get(para_id).is_some(); - assert!( - exists_in_map, - "After migration, para id {:?} does not exist in storage map", - para_id - ); - } - }); -} - -#[test] -fn test_collator_assignment_gives_priority_to_invulnerables() { - // Set max_collators = 2, take 1 invulnerable and the rest from staking - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let stake = 10 * MinimumSelfDelegation::get(); - - // Register accounts in pallet_session (invulnerables are automatically registered) - let bob_account_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - assert_ok!(Session::set_keys( - origin_of(BOB.into()), - dancebox_runtime::SessionKeys { - nimbus: bob_account_id, - }, - vec![] - )); - let charlie_account_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - dancebox_runtime::SessionKeys { - nimbus: charlie_account_id, - }, - vec![] - )); - - assert_ok!(PooledStaking::request_delegate( - origin_of(BOB.into()), - BOB.into(), - TargetPool::AutoCompounding, - stake, - )); - assert_ok!(PooledStaking::request_delegate( - origin_of(CHARLIE.into()), - CHARLIE.into(), - TargetPool::AutoCompounding, - stake, - )); - - let eligible_candidates = - pallet_pooled_staking::SortedEligibleCandidates::::get().to_vec(); - assert_eq!( - eligible_candidates, - vec![ - EligibleCandidate { - candidate: BOB.into(), - stake - }, - EligibleCandidate { - candidate: CHARLIE.into(), - stake - }, - ] - ); - - assert_eq!( - pallet_invulnerables::Invulnerables::::get().to_vec(), - vec![AccountId::from(ALICE), AccountId::from(DAVE)] - ); - - set_parachain_inherent_data_random_seed([1; 32]); - run_block(); - - // Need to trigger new session to update pallet_session - run_to_session(2); - - assert_eq!( - Session::validators(), - vec![ - AccountId::from(ALICE), - AccountId::from(DAVE), - AccountId::from(BOB), - AccountId::from(CHARLIE) - ] - ); - - // Need to trigger full rotation to ensure invulnerables are assigned - let rotation_period = Configuration::config().full_rotation_period; - run_to_session(rotation_period); - - assert!( - CollatorAssignment::collator_container_chain() - .orchestrator_chain - .contains(&AccountId::from(ALICE)), - "CollatorAssignment did not give priority to invulnerable ALICE: {:?}", - CollatorAssignment::collator_container_chain() - ); - - assert!( - CollatorAssignment::collator_container_chain() - .orchestrator_chain - .contains(&AccountId::from(DAVE)), - "CollatorAssignment did not give priority to invulnerable DAVE: {:?}", - CollatorAssignment::collator_container_chain() - ); - }); -} - -#[test] -fn test_can_buy_credits_before_registering_para() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Try to buy the maximum amount of credits - let balance_before = System::account(AccountId::from(ALICE)).data.free; - - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance(u32::MAX, 1001.into()) - )); - let balance_after = System::account(AccountId::from(ALICE)).data.free; - - // Now parachain tank should have this amount - let balance_tank = System::account(ServicesPayment::parachain_tank(1001.into())) - .data - .free; - - assert_eq!( - balance_tank, - block_credits_to_required_balance(u32::MAX, 1001.into()) - ); - - let expected_cost = block_credits_to_required_balance(u32::MAX, 1001.into()); - assert_eq!(balance_before - balance_after, expected_cost); - }); -} - -#[test] -fn test_cannot_mark_valid_para_with_no_bootnodes() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_noop!( - Registrar::mark_valid_for_collating(root_origin(), 1001.into()), - pallet_data_preservers::Error::::NoBootNodes, - ); - }); -} - -#[test] -fn test_can_buy_credits_before_registering_para_and_receive_free_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Try to buy (MaxCreditsStored - 1) credits - let balance_before = System::account(AccountId::from(ALICE)).data.free; - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance( - dancebox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into() - ) - )); - let balance_after = System::account(AccountId::from(ALICE)).data.free; - - // Now parachain tank should have this amount - let balance_tank = System::account(ServicesPayment::parachain_tank(1001.into())) - .data - .free; - - assert_eq!( - balance_tank, - block_credits_to_required_balance( - dancebox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into() - ) - ); - - let expected_cost = block_credits_to_required_balance( - dancebox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into(), - ); - assert_eq!(balance_before - balance_after, expected_cost); - - // Now register para - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We received aññ free credits, because we cannot have more than MaxCreditsStored - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, dancebox_runtime::FreeBlockProductionCredits::get()); - }); -} - -#[test] -fn test_deregister_and_register_again_does_not_give_free_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Register - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - ),); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - ),); - // We received free credits - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, dancebox_runtime::FreeBlockProductionCredits::get()); - // Deregister after 1 session - run_to_session(1); - assert_ok!(Registrar::deregister(root_origin(), 1001.into()), ()); - - run_to_session(3); - let credits_before_2nd_register = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - // We spent some credits because this container chain had collators for 1 session - assert_ne!( - credits_before_2nd_register, - dancebox_runtime::FreeBlockProductionCredits::get() - ); - // Register again - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - ),); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - ),); - // No more free credits - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, credits_before_2nd_register); - }); -} - -#[test] -fn test_sudo_can_register_foreign_assets_and_manager_change_paremeters() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - - .build() - .execute_with(|| { - - // We register the asset with Alice as manager - assert_ok!(ForeignAssetsCreator::create_foreign_asset(root_origin(), MultiLocation::parent(), 1, AccountId::from(ALICE), true, 1), ()); - assert_eq!(ForeignAssetsCreator::foreign_asset_for_id(1), Some(MultiLocation::parent())); - assert_eq!(ForeignAssetsCreator::asset_id_for_foreign(MultiLocation::parent()), Some(1)); - - // Alice now can change parameters like metadata from the asset - assert_ok!(ForeignAssets::set_metadata(origin_of(ALICE.into()), 1, b"xcDot".to_vec(), b"xcDot".to_vec(), 12)); - assert_eq!(>::name(1), b"xcDot".to_vec()); - assert_eq!(>::symbol(1), b"xcDot".to_vec()); - assert_eq!(>::decimals(1), 12); - - // Any other person cannot do this - assert_noop!( - ForeignAssets::set_metadata(origin_of(BOB.into()), 1, b"dummy".to_vec(), b"dummy".to_vec(), 12), - pallet_assets::Error::::NoPermission - ); - - // Alice now can mint - assert_ok!(ForeignAssets::mint(origin_of(ALICE.into()), 1, AccountId::from(BOB).into(), 1000)); - assert_eq!(>::total_issuance(1), 1000); - assert_eq!(>::balance(1, &AccountId::from(BOB)), 1000); - }); -} - -#[test] -fn test_assets_cannot_be_created_from_signed_origins() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - // We try to register the asset with Alice as origin - // Any other person cannot do this - assert_noop!( - ForeignAssetsCreator::create_foreign_asset( - origin_of(ALICE.into()), - MultiLocation::parent(), - 1, - AccountId::from(ALICE), - true, - 1 - ), - BadOrigin - ); - - assert_noop!( - ForeignAssets::create(origin_of(ALICE.into()), 1, AccountId::from(ALICE).into(), 1), - BadOrigin - ); - }); -} - -#[test] -fn test_asset_rate_can_be_set_from_sudo_but_not_from_signed() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - // We try to set the rate from non-sudo - assert_noop!( - AssetRate::create(origin_of(ALICE.into()), Box::new(1), FixedU128::from_u32(1)), - BadOrigin - ); - - // We try to set the rate from sudo - assert_ok!(AssetRate::create( - root_origin(), - Box::new(1), - FixedU128::from_u32(1) - )); - - assert_eq!( - pallet_asset_rate::ConversionRateToNative::::get(1), - Some(FixedU128::from_u32(1)) - ); - }); -} - -#[test] -fn test_division_by_0() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - // We try to set 0 rate to make sure we dont overflow - assert_ok!(AssetRate::create( - root_origin(), - Box::new(1), - FixedU128::from_u32(0) - )); - - use frame_support::traits::tokens::ConversionToAssetBalance; - let balance = AssetRate::to_asset_balance(1, 1); - assert!(balance.is_err()); - }); -} - -#[test] -fn test_register_parathread() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Register - assert_ok!(Registrar::register_parathread( - origin_of(ALICE.into()), - 3001.into(), - SlotFrequency { min: 1, max: 1 }, - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 3001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 3001.into() - )); - - run_to_session(2); - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&ParaId::from(3001)], - vec![CHARLIE.into()] - ); - }); -} - -#[test] -fn test_ed_plus_block_credit_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(dancebox_runtime::Period::get(), 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(3u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_ed_plus_block_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(dancebox_runtime::Period::get(), 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should not be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_reassignment_ed_plus_two_block_credit_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - // On reassignment the blocks credits needed should be enough for the current session and the next one - let credits_1001 = - block_credits_to_required_balance(dancebox_runtime::Period::get() * 2, 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // Session 3 should still be assigned - run_to_session(3u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_reassignment_ed_plus_two_block_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(dancebox_runtime::Period::get() * 2, 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(3u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_block_credits_with_purchase_can_be_combined() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - dancebox_runtime::Period::get() - )); - let credits_1001 = - block_credits_to_required_balance(dancebox_runtime::Period::get(), 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} -#[test] -fn stream_payment_works() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 100_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - use pallet_stream_payment::{ChangeKind, StreamConfig}; - - assert_ok!(StreamPayment::open_stream( - origin_of(ALICE.into()), - BOB.into(), - StreamConfig { - rate: 2 * UNIT, - asset_id: StreamPaymentAssetId::Native, - time_unit: TimeUnit::BlockNumber, - }, - 1_000 * UNIT, - )); - - run_block(); - - assert_ok!(StreamPayment::perform_payment(origin_of(CHARLIE.into()), 0)); - assert_eq!( - Balances::free_balance(AccountId::from(BOB)), - 100_000 * UNIT + 2 * UNIT - ); - - assert_ok!(StreamPayment::request_change( - origin_of(ALICE.into()), - 0, - ChangeKind::Suggestion, - StreamConfig { - rate: 1 * UNIT, - asset_id: StreamPaymentAssetId::Native, - time_unit: TimeUnit::BlockNumber, - }, - None, - )); - - assert_ok!(StreamPayment::accept_requested_change( - origin_of(BOB.into()), - 0, - 1, // nonce - None, - )); - - run_block(); - - assert_ok!(StreamPayment::close_stream(origin_of(BOB.into()), 0)); - - assert_eq!( - Balances::free_balance(AccountId::from(BOB)), - 100_000 * UNIT + 3 * UNIT - ); - assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), - 100_000 * UNIT - 3 * UNIT - ); - }); -} - -#[test] -fn test_ed_plus_collator_assignment_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_ed_plus_collator_assignment_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should not be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_collator_assignment_credits_with_purchase_can_be_combined() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We assign one session to free credits - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 1 - )); - // We buy another session through the tank - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + dancebox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_block_credits_and_collator_assignation_credits_through_tank() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We make all free credits 0 - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - - // We buy 2 sessions through tank - let collator_assignation_credits = - collator_assignment_credits_to_required_balance(2, 1001.into()); - let block_production_credits = - block_credits_to_required_balance(dancebox_runtime::Period::get() * 2, 1001.into()); - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - collator_assignation_credits - + block_production_credits - + dancebox_runtime::EXISTENTIAL_DEPOSIT - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_migration_services_collator_assignment_payment() { - ExtBuilder::default().build().execute_with(|| { - // Register a new parachain with no credits - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Register another parachain with no credits, do not mark this as valid for collation - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1002.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1002.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1002.into() - )); - - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1002.into(), - 0 - )); - - let credits_1001 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits_1001, 0); - let credits_1002 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1002)) - .unwrap_or_default(); - assert_eq!(credits_1002, 0); - - // Apply migration - let migration = - MigrateServicesPaymentAddCollatorAssignmentCredits::(Default::default()); - migration.migrate(Default::default()); - - // Both parachains have been given credits - let credits_1001 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!( - credits_1001, - dancebox_runtime::FreeCollatorAssignmentCredits::get() - ); - let credits_1002 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1002)) - .unwrap_or_default(); - assert_eq!( - credits_1002, - dancebox_runtime::FreeCollatorAssignmentCredits::get() - ); - }); -} - -#[test] -fn test_max_collators_uses_pending_value() { - // Start with max_collators = 100, and collators_per_container = 2 - // Set max_collators = 2, and collators_per_container = 3 - // It should be impossible to have more than 2 collators per container at any point in time - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![( - 1001, - empty_genesis_data(), - vec![], - u32::MAX, - u32::MAX, - ) - .into()]) - .with_config(pallet_configuration::HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 1, - max_orchestrator_collators: 1, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .build() - .execute_with(|| { - run_to_block(2); - - // Initial assignment: 1 collator in orchestrator chain and 2 collators in container 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains[&1001u32.into()].len(), 2); - assert_eq!(assignment.orchestrator_chain.len(), 1); - - assert_ok!(Configuration::set_max_collators(root_origin(), 2)); - assert_ok!(Configuration::set_collators_per_container(root_origin(), 3)); - - // Check invariant for all intermediate assignments. We set collators_per_container = 3 - // but we also set max_collators = 2, so no collators will be assigned to container - // chains after the change is applied. - for session in 1..=4 { - run_to_session(session); - - let assignment = CollatorAssignment::collator_container_chain(); - assert!( - assignment.container_chains[&1001u32.into()].len() <= 2, - "session {}: {} collators assigned to container chain 1001", - session, - assignment.container_chains[&1001u32.into()].len() - ); - } - - // Final assignment: because max_collators = 2, there are only 2 collators, one in - // orchestrator chain, and the other one idle - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains[&1001u32.into()].len(), 0); - assert_eq!(assignment.orchestrator_chain.len(), 1); - }); -} - -#[test] -fn test_slow_adjusting_multiplier_changes_in_response_to_consumed_weight() { - ExtBuilder::default() - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - end_block(); - // If the block is full, the multiplier increases - let before_multiplier = TransactionPayment::next_fee_multiplier(); - start_block(); - let max_block_weights = dancebox_runtime::RuntimeBlockWeights::get(); - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"System", b"BlockWeight"), - &ConsumedWeight::new(|class| { - max_block_weights - .get(class) - .max_total - .unwrap_or(Weight::MAX) - }), - ); - end_block(); - let current_multiplier = TransactionPayment::next_fee_multiplier(); - assert!(current_multiplier > before_multiplier); - - // If the block is empty, the multiplier decreases - let before_multiplier = TransactionPayment::next_fee_multiplier(); - start_block(); - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"System", b"BlockWeight"), - &ConsumedWeight::new(|_class| Weight::zero()), - ); - end_block(); - let current_multiplier = TransactionPayment::next_fee_multiplier(); - assert!(current_multiplier < before_multiplier); - }); -} - -#[test] -fn test_collator_assignment_tip_priority_on_congestion() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let para_id = 1003u32; - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[&1003u32.into()] - .len(), - 0 - ); - - // Send funds to tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for 1003 - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(2); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[¶_id.into()] - .len(), - 2, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_charged_on_congestion() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - let para_id = 1003u32; - - // Send funds to tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for para_id - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(1); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id.into())), - tank_funds - max_tip, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_not_assigned_on_insufficient_balance() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 1 * UNIT; - let max_tip = 1 * UNIT; - let para_id = 1003u32; - - // Send insufficient funds to tank for tip for 2 sessions - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for para_id - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(1); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[¶_id.into()] - .len(), - 0 - ); - }); -} - -#[test] -fn test_collator_assignment_tip_only_charge_willing_paras() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - (AccountId::from(EVE), 100_000 * UNIT), - (AccountId::from(FERDIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - (AccountId::from(EVE), 100 * UNIT), - (AccountId::from(FERDIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - let para_id_with_tip = 1003u32; - let para_id_without_tip = 1001u32; - - // Send funds to tank to both paras - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_with_tip.into(), - tank_funds, - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_without_tip.into(), - tank_funds, - )); - - // Only set tip for 1003 - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_with_tip.into(), - Some(max_tip), - )); - - run_to_session(2); - - let assignment = CollatorAssignment::collator_container_chain().container_chains; - - // 2 out of the 3 paras should have collators assigned, with one paying tip to get - // prioritized, and the other selected at random that should not be charged any tips - assert_eq!(assignment[¶_id_with_tip.into()].len(), 2); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_with_tip.into())), - tank_funds - max_tip * 2, - ); - - assert_eq!(assignment[¶_id_without_tip.into()].len(), 2); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank( - para_id_without_tip.into() - )), - tank_funds, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_withdraw_min_tip() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - (AccountId::from(EVE), 100_000 * UNIT), - (AccountId::from(FERDIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - (AccountId::from(EVE), 100 * UNIT), - (AccountId::from(FERDIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip_1003 = 3 * UNIT; - let max_tip_1002 = 2 * UNIT; - let para_id_1003 = 1003u32; - let para_id_1002 = 1002u32; - - // Send funds to tank to both paras - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_1003.into(), - tank_funds, - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_1002.into(), - tank_funds, - )); - - // Set tips - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_1003.into(), - Some(max_tip_1003), - )); - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_1002.into(), - Some(max_tip_1002), - )); - - run_to_session(2); - - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains - [¶_id_1003.into()] - .len(), - 2 - ); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains - [¶_id_1002.into()] - .len(), - 2 - ); - - // Should have withdrawn the lowest tip from both paras - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_1003.into())), - tank_funds - max_tip_1002 * 2, - ); - - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_1002.into())), - tank_funds - max_tip_1002 * 2, - ); - }); -} diff --git a/runtime/flashbox/Cargo.toml b/runtime/flashbox/Cargo.toml deleted file mode 100644 index 301b1a3..0000000 --- a/runtime/flashbox/Cargo.toml +++ /dev/null @@ -1,304 +0,0 @@ -[package] -name = "flashbox-runtime" -authors = { workspace = true } -description = "Flashbox runtime" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -hex-literal = { workspace = true } -log = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive" ] } -scale-info = { workspace = true, features = [ "derive" ] } -serde = { workspace = true, optional = true, features = [ "derive" ] } -smallvec = { workspace = true } - -# Own -dp-core = { workspace = true } -dp-slot-duration-runtime-api = { workspace = true } -pallet-author-noting = { workspace = true } -pallet-author-noting-runtime-api = { workspace = true } -pallet-authority-assignment = { workspace = true } -pallet-authority-mapping = { workspace = true } -pallet-collator-assignment = { workspace = true } -pallet-collator-assignment-runtime-api = { workspace = true } -pallet-configuration = { workspace = true } -pallet-data-preservers = { workspace = true } -pallet-inflation-rewards = { workspace = true } -pallet-initializer = { workspace = true } -pallet-proxy = { workspace = true } -pallet-registrar = { workspace = true } -pallet-registrar-runtime-api = { workspace = true } -pallet-relay-storage-roots = { workspace = true } -pallet-services-payment = { workspace = true } -pallet-services-payment-runtime-api = { workspace = true } -pallet-stream-payment = { workspace = true } -pallet-stream-payment-runtime-api = { workspace = true } -runtime-common = { workspace = true } - -# Moonkit -async-backing-primitives = { workspace = true } -nimbus-primitives = { workspace = true } -pallet-async-backing = { workspace = true } -pallet-author-inherent = { workspace = true } -pallet-maintenance-mode = { workspace = true, features = [ "xcm-support" ] } -pallet-migrations = { workspace = true } - -# Substrate -frame-executive = { workspace = true } -frame-support = { workspace = true } -frame-system = { workspace = true } -frame-system-rpc-runtime-api = { workspace = true } -pallet-balances = { workspace = true } -pallet-identity = { workspace = true } -pallet-multisig = { workspace = true } -pallet-root-testing = { workspace = true } -pallet-session = { workspace = true } -pallet-sudo = { workspace = true } -pallet-timestamp = { workspace = true } -pallet-transaction-payment = { workspace = true } -pallet-transaction-payment-rpc-runtime-api = { workspace = true } -pallet-treasury = { workspace = true } -pallet-tx-pause = { workspace = true } -pallet-utility = { workspace = true } -sp-api = { workspace = true } -sp-application-crypto = { workspace = true } -sp-block-builder = { workspace = true } -sp-consensus-aura = { workspace = true } -sp-consensus-slots = { workspace = true } -sp-core = { workspace = true } -sp-debug-derive = { workspace = true } -sp-genesis-builder = { workspace = true } -sp-inherents = { workspace = true } -sp-offchain = { workspace = true } -sp-runtime = { workspace = true } -sp-session = { workspace = true } -sp-std = { workspace = true } -sp-transaction-pool = { workspace = true } -sp-trie = { workspace = true } - -dp-consensus = { workspace = true } -sp-version = { workspace = true } -tp-author-noting-inherent = { workspace = true } -tp-traits = { workspace = true } - -# Polkadot -polkadot-parachain-primitives = { workspace = true } -polkadot-runtime-common = { workspace = true } - -# Cumulus -cumulus-pallet-parachain-system = { workspace = true } -cumulus-pallet-session-benchmarking = { workspace = true } -cumulus-primitives-core = { workspace = true } -cumulus-primitives-timestamp = { workspace = true } -cumulus-primitives-utility = { workspace = true } -pallet-invulnerables = { workspace = true } -parachain-info = { workspace = true } - -# Benchmarking -frame-benchmarking = { workspace = true, optional = true } -frame-system-benchmarking = { workspace = true, optional = true } -frame-try-runtime = { workspace = true, optional = true } - -[dev-dependencies] -cumulus-primitives-parachain-inherent = { workspace = true } -cumulus-test-relay-sproof-builder = { workspace = true } -polkadot-runtime-parachains = { workspace = true, features = [ "std" ] } -sc-consensus-grandpa = { workspace = true } -sp-consensus-babe = { workspace = true, features = [ "std" ] } -sp-consensus-beefy = { workspace = true, features = [ "std" ] } -sp-io = { workspace = true } -test-relay-sproof-builder = { workspace = true } - -[build-dependencies] -substrate-wasm-builder = { workspace = true } - -[features] -default = [ - "std", -] -std = [ - "async-backing-primitives/std", - "cumulus-pallet-parachain-system/std", - "cumulus-pallet-session-benchmarking/std", - "cumulus-primitives-core/std", - "cumulus-primitives-parachain-inherent/std", - "cumulus-primitives-timestamp/std", - "cumulus-primitives-utility/std", - "cumulus-test-relay-sproof-builder/std", - "dp-consensus/std", - "dp-core/std", - "dp-slot-duration-runtime-api/std", - "frame-benchmarking?/std", - "frame-executive/std", - "frame-support/std", - "frame-system-benchmarking?/std", - "frame-system-rpc-runtime-api/std", - "frame-system/std", - "frame-try-runtime/std", - "log/std", - "nimbus-primitives/std", - "pallet-async-backing/std", - "pallet-author-inherent/std", - "pallet-author-noting-runtime-api/std", - "pallet-author-noting/std", - "pallet-authority-assignment/std", - "pallet-authority-mapping/std", - "pallet-balances/std", - "pallet-collator-assignment-runtime-api/std", - "pallet-collator-assignment/std", - "pallet-configuration/std", - "pallet-data-preservers/std", - "pallet-identity/std", - "pallet-inflation-rewards/std", - "pallet-initializer/std", - "pallet-invulnerables/std", - "pallet-maintenance-mode/std", - "pallet-migrations/std", - "pallet-multisig/std", - "pallet-proxy/std", - "pallet-registrar-runtime-api/std", - "pallet-registrar/std", - "pallet-relay-storage-roots/std", - "pallet-root-testing/std", - "pallet-services-payment-runtime-api/std", - "pallet-services-payment/std", - "pallet-session/std", - "pallet-stream-payment-runtime-api/std", - "pallet-stream-payment/std", - "pallet-sudo/std", - "pallet-timestamp/std", - "pallet-transaction-payment-rpc-runtime-api/std", - "pallet-transaction-payment/std", - "pallet-treasury/std", - "pallet-tx-pause/std", - "pallet-utility/std", - "parachain-info/std", - "parity-scale-codec/std", - "polkadot-parachain-primitives/std", - "polkadot-runtime-common/std", - "polkadot-runtime-parachains/std", - "runtime-common/std", - "scale-info/std", - "serde", - "serde?/std", - "sp-api/std", - "sp-application-crypto/std", - "sp-application-crypto/std", - "sp-block-builder/std", - "sp-consensus-aura/std", - "sp-consensus-babe/std", - "sp-consensus-beefy/std", - "sp-consensus-slots/std", - "sp-core/std", - "sp-debug-derive/std", - "sp-genesis-builder/std", - "sp-inherents/std", - "sp-io/std", - "sp-offchain/std", - "sp-runtime/std", - "sp-session/std", - "sp-std/std", - "sp-transaction-pool/std", - "sp-trie/std", - "sp-version/std", - "test-relay-sproof-builder/std", - "tp-author-noting-inherent/std", - "tp-traits/std", -] - -# Allow to print logs details (no wasm:stripped) -force-debug = [ "sp-debug-derive/force-debug" ] - -runtime-benchmarks = [ - "cumulus-pallet-parachain-system/runtime-benchmarks", - "cumulus-pallet-session-benchmarking/runtime-benchmarks", - "cumulus-primitives-core/runtime-benchmarks", - "cumulus-primitives-utility/runtime-benchmarks", - "dp-consensus/runtime-benchmarks", - "frame-benchmarking", - "frame-benchmarking/runtime-benchmarks", - "frame-support/runtime-benchmarks", - "frame-system-benchmarking/runtime-benchmarks", - "frame-system/runtime-benchmarks", - "nimbus-primitives/runtime-benchmarks", - "pallet-author-inherent/runtime-benchmarks", - "pallet-author-noting/runtime-benchmarks", - "pallet-balances/runtime-benchmarks", - "pallet-collator-assignment/runtime-benchmarks", - "pallet-configuration/runtime-benchmarks", - "pallet-data-preservers/runtime-benchmarks", - "pallet-identity/runtime-benchmarks", - "pallet-inflation-rewards/runtime-benchmarks", - "pallet-invulnerables/runtime-benchmarks", - "pallet-migrations/runtime-benchmarks", - "pallet-multisig/runtime-benchmarks", - "pallet-proxy/runtime-benchmarks", - "pallet-registrar/runtime-benchmarks", - "pallet-relay-storage-roots/runtime-benchmarks", - "pallet-services-payment/runtime-benchmarks", - "pallet-stream-payment/runtime-benchmarks", - "pallet-sudo/runtime-benchmarks", - "pallet-timestamp/runtime-benchmarks", - "pallet-treasury/runtime-benchmarks", - "pallet-tx-pause/runtime-benchmarks", - "pallet-utility/runtime-benchmarks", - "polkadot-parachain-primitives/runtime-benchmarks", - "polkadot-runtime-common/runtime-benchmarks", - "polkadot-runtime-parachains/runtime-benchmarks", - "runtime-common/runtime-benchmarks", - "sp-runtime/runtime-benchmarks", - "tp-traits/runtime-benchmarks", -] - -try-runtime = [ - "cumulus-pallet-parachain-system/try-runtime", - "frame-executive/try-runtime", - "frame-support/try-runtime", - "frame-system/try-runtime", - "frame-try-runtime/try-runtime", - "nimbus-primitives/try-runtime", - "pallet-async-backing/try-runtime", - "pallet-author-inherent/try-runtime", - "pallet-author-noting/try-runtime", - "pallet-authority-assignment/try-runtime", - "pallet-authority-mapping/try-runtime", - "pallet-balances/try-runtime", - "pallet-collator-assignment/try-runtime", - "pallet-configuration/try-runtime", - "pallet-data-preservers/try-runtime", - "pallet-identity/try-runtime", - "pallet-inflation-rewards/try-runtime", - "pallet-initializer/try-runtime", - "pallet-invulnerables/try-runtime", - "pallet-maintenance-mode/try-runtime", - "pallet-migrations/try-runtime", - "pallet-multisig/try-runtime", - "pallet-proxy/try-runtime", - "pallet-registrar/try-runtime", - "pallet-relay-storage-roots/try-runtime", - "pallet-root-testing/try-runtime", - "pallet-services-payment/try-runtime", - "pallet-session/try-runtime", - "pallet-stream-payment/try-runtime", - "pallet-sudo/try-runtime", - "pallet-timestamp/try-runtime", - "pallet-transaction-payment/try-runtime", - "pallet-treasury/try-runtime", - "pallet-tx-pause/try-runtime", - "pallet-utility/try-runtime", - "parachain-info/try-runtime", - "polkadot-runtime-common/try-runtime", - "polkadot-runtime-parachains/try-runtime", - "runtime-common/try-runtime", - "sp-runtime/try-runtime", -] - -fast-runtime = [] diff --git a/runtime/flashbox/build.rs b/runtime/flashbox/build.rs deleted file mode 100644 index dbf867d..0000000 --- a/runtime/flashbox/build.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use substrate_wasm_builder::WasmBuilder; - -fn main() { - WasmBuilder::new() - .with_current_project() - .export_heap_base() - .import_memory() - .build() -} diff --git a/runtime/flashbox/src/lib.rs b/runtime/flashbox/src/lib.rs deleted file mode 100644 index 5d75dee..0000000 --- a/runtime/flashbox/src/lib.rs +++ /dev/null @@ -1,1976 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg_attr(not(feature = "std"), no_std)] -// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256. -#![recursion_limit = "256"] - -// Make the WASM binary available. -#[cfg(feature = "std")] -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[cfg(feature = "std")] -use sp_version::NativeVersion; -use { - pallet_services_payment::ProvideCollatorAssignmentCost, - polkadot_runtime_common::SlowAdjustingFeeUpdate, -}; - -#[cfg(any(feature = "std", test))] -pub use sp_runtime::BuildStorage; - -pub mod weights; - -use { - cumulus_pallet_parachain_system::RelayNumberStrictlyIncreases, - cumulus_primitives_core::{relay_chain::SessionIndex, BodyId, ParaId}, - frame_support::{ - construct_runtime, - dispatch::DispatchClass, - genesis_builder_helper::{build_config, create_default_config}, - pallet_prelude::DispatchResult, - parameter_types, - traits::{ - fungible::{Balanced, Credit, Inspect, InspectHold, Mutate, MutateHold}, - tokens::{PayFromAccount, Precision, Preservation, UnityAssetBalanceConversion}, - ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, Contains, EitherOfDiverse, - Imbalance, InsideBoth, InstanceFilter, OnUnbalanced, - }, - weights::{ - constants::{ - BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, - WEIGHT_REF_TIME_PER_SECOND, - }, - ConstantMultiplier, Weight, WeightToFeeCoefficient, WeightToFeeCoefficients, - WeightToFeePolynomial, - }, - PalletId, - }, - frame_system::{ - limits::{BlockLength, BlockWeights}, - EnsureRoot, - }, - nimbus_primitives::{NimbusId, SlotBeacon}, - pallet_balances::NegativeImbalance, - pallet_invulnerables::InvulnerableRewardDistribution, - pallet_registrar::RegistrarHooks, - pallet_registrar_runtime_api::ContainerChainGenesisData, - pallet_services_payment::ProvideBlockProductionCost, - pallet_session::{SessionManager, ShouldEndSession}, - pallet_stream_payment_runtime_api::{StreamPaymentApiError, StreamPaymentApiStatus}, - pallet_transaction_payment::CurrencyAdapter, - polkadot_runtime_common::BlockHashCount, - scale_info::{prelude::format, TypeInfo}, - smallvec::smallvec, - sp_api::impl_runtime_apis, - sp_consensus_slots::{Slot, SlotDuration}, - sp_core::{crypto::KeyTypeId, Decode, Encode, Get, MaxEncodedLen, OpaqueMetadata}, - sp_runtime::{ - create_runtime_str, generic, impl_opaque_keys, - traits::{ - AccountIdConversion, AccountIdLookup, BlakeTwo256, Block as BlockT, IdentityLookup, - Verify, - }, - transaction_validity::{TransactionSource, TransactionValidity}, - AccountId32, ApplyExtrinsicResult, RuntimeDebug, - }, - sp_std::{collections::btree_set::BTreeSet, marker::PhantomData, prelude::*}, - sp_version::RuntimeVersion, - tp_traits::{ - GetContainerChainAuthor, GetHostConfiguration, GetSessionContainerChains, - RemoveInvulnerables, RemoveParaIdsWithNoCredits, ShouldRotateAllCollators, - }, -}; -pub use { - dp_core::{AccountId, Address, Balance, BlockNumber, Hash, Header, Index, Signature}, - sp_runtime::{MultiAddress, Perbill, Permill}, -}; - -/// Block type as expected by this runtime. -pub type Block = generic::Block; -/// A Block signed with a Justification -pub type SignedBlock = generic::SignedBlock; -/// BlockId type as expected by this runtime. -pub type BlockId = generic::BlockId; - -/// CollatorId type expected by this runtime. -pub type CollatorId = AccountId; - -/// The SignedExtension to the basic transaction logic. -pub type SignedExtra = ( - frame_system::CheckNonZeroSender, - frame_system::CheckSpecVersion, - frame_system::CheckTxVersion, - frame_system::CheckGenesis, - frame_system::CheckEra, - frame_system::CheckNonce, - frame_system::CheckWeight, - pallet_transaction_payment::ChargeTransactionPayment, -); - -/// Unchecked extrinsic type as expected by this runtime. -pub type UncheckedExtrinsic = - generic::UncheckedExtrinsic; - -/// Extrinsic type that has already been checked. -pub type CheckedExtrinsic = generic::CheckedExtrinsic; - -/// Executive: handles dispatch to the various modules. -pub type Executive = frame_executive::Executive< - Runtime, - Block, - frame_system::ChainContext, - Runtime, - AllPalletsWithSystem, ->; - -/// DANCE, the native token, uses 12 decimals of precision. -pub mod currency { - use super::Balance; - - // Provide a common factor between runtimes based on a supply of 10_000_000 tokens. - pub const SUPPLY_FACTOR: Balance = 100; - - pub const MICRODANCE: Balance = 1_000_000; - pub const MILLIDANCE: Balance = 1_000_000_000; - pub const DANCE: Balance = 1_000_000_000_000; - pub const KILODANCE: Balance = 1_000_000_000_000_000; - - pub const STORAGE_BYTE_FEE: Balance = 100 * MICRODANCE * SUPPLY_FACTOR; - - pub const fn deposit(items: u32, bytes: u32) -> Balance { - items as Balance * 100 * MILLIDANCE * SUPPLY_FACTOR + (bytes as Balance) * STORAGE_BYTE_FEE - } -} - -/// Handles converting a weight scalar to a fee value, based on the scale and granularity of the -/// node's balance type. -/// -/// This should typically create a mapping between the following ranges: -/// - `[0, MAXIMUM_BLOCK_WEIGHT]` -/// - `[Balance::min, Balance::max]` -/// -/// Yet, it can be used for any other sort of change to weight-fee. Some examples being: -/// - Setting it to `0` will essentially disable the weight fee. -/// - Setting it to `1` will cause the literal `#[weight = x]` values to be charged. -pub struct WeightToFee; -impl WeightToFeePolynomial for WeightToFee { - type Balance = Balance; - fn polynomial() -> WeightToFeeCoefficients { - // in Rococo, extrinsic base weight (smallest non-zero weight) is mapped to 1 MILLIUNIT: - // in our template, we map to 1/10 of that, or 1/10 MILLIUNIT - let p = MILLIUNIT / 10; - let q = 100 * Balance::from(ExtrinsicBaseWeight::get().ref_time()); - smallvec![WeightToFeeCoefficient { - degree: 1, - negative: false, - coeff_frac: Perbill::from_rational(p % q, q), - coeff_integer: p / q, - }] - } -} - -/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know -/// the specifics of the runtime. They can then be made to be agnostic over specific formats -/// of data like extrinsics, allowing for them to continue syncing the network through upgrades -/// to even the core data structures. -pub mod opaque { - use { - super::*, - sp_runtime::{generic, traits::BlakeTwo256}, - }; - - pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; - /// Opaque block header type. - pub type Header = generic::Header; - /// Opaque block type. - pub type Block = generic::Block; - /// Opaque block identifier type. - pub type BlockId = generic::BlockId; -} - -impl_opaque_keys! { - pub struct SessionKeys { - pub nimbus: Initializer, - } -} - -#[sp_version::runtime_version] -pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("flashbox"), - impl_name: create_runtime_str!("flashbox"), - authoring_version: 1, - spec_version: 700, - impl_version: 0, - apis: RUNTIME_API_VERSIONS, - transaction_version: 1, - state_version: 1, -}; - -/// This determines the average expected block time that we are targeting. -/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. -/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked -/// up by `pallet_aura` to implement `fn slot_duration()`. -/// -/// Change this to adjust the block time. -pub const MILLISECS_PER_BLOCK: u64 = 6000; - -// NOTE: Currently it is not possible to change the slot duration after the chain has started. -// Attempting to do so will brick block production. -pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; - -// Time is measured by number of blocks. -pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); -pub const HOURS: BlockNumber = MINUTES * 60; -pub const DAYS: BlockNumber = HOURS * 24; - -// Unit = the base number of indivisible units for balances -pub const UNIT: Balance = 1_000_000_000_000; -pub const MILLIUNIT: Balance = 1_000_000_000; -pub const MICROUNIT: Balance = 1_000_000; - -/// The existential deposit. Set to 1/10 of the Connected Relay Chain. -pub const EXISTENTIAL_DEPOSIT: Balance = MILLIUNIT; - -/// We assume that ~5% of the block weight is consumed by `on_initialize` handlers. This is -/// used to limit the maximal weight of a single extrinsic. -const AVERAGE_ON_INITIALIZE_RATIO: Perbill = Perbill::from_percent(5); - -/// We allow `Normal` extrinsics to fill up the block up to 75%, the rest can be used by -/// `Operational` extrinsics. -const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); - -/// We allow for 0.5 of a second of compute with a 12 second average block time. -const MAXIMUM_BLOCK_WEIGHT: Weight = Weight::from_parts( - WEIGHT_REF_TIME_PER_SECOND.saturating_div(2), - cumulus_primitives_core::relay_chain::MAX_POV_SIZE as u64, -); - -/// The version information used to identify this runtime when compiled natively. -#[cfg(feature = "std")] -pub fn native_version() -> NativeVersion { - NativeVersion { - runtime_version: VERSION, - can_author_with: Default::default(), - } -} - -parameter_types! { - pub const Version: RuntimeVersion = VERSION; - - // This part is copied from Substrate's `bin/node/runtime/src/lib.rs`. - // The `RuntimeBlockLength` and `RuntimeBlockWeights` exist here because the - // `DeletionWeightLimit` and `DeletionQueueDepth` depend on those to parameterize - // the lazy contract deletion. - pub RuntimeBlockLength: BlockLength = - BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); - pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder() - .base_block(BlockExecutionWeight::get()) - .for_class(DispatchClass::all(), |weights| { - weights.base_extrinsic = ExtrinsicBaseWeight::get(); - }) - .for_class(DispatchClass::Normal, |weights| { - weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT); - }) - .for_class(DispatchClass::Operational, |weights| { - weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT); - // Operational transactions have some extra reserved space, so that they - // are included even if block reached `MAXIMUM_BLOCK_WEIGHT`. - weights.reserved = Some( - MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT - ); - }) - .avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO) - .build_or_panic(); - pub const SS58Prefix: u16 = 42; -} - -// Configure FRAME pallets to include in runtime. - -impl frame_system::Config for Runtime { - /// The identifier used to distinguish between accounts. - type AccountId = AccountId; - /// The aggregated dispatch type that is available for extrinsics. - type RuntimeCall = RuntimeCall; - /// The lookup mechanism to get account ID from whatever is passed in dispatchers. - type Lookup = AccountIdLookup; - /// The index type for storing how many extrinsics an account has signed. - type Nonce = Index; - /// The index type for blocks. - type Block = Block; - /// The type for hashing blocks and tries. - type Hash = Hash; - /// The hashing algorithm used. - type Hashing = BlakeTwo256; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - /// The ubiquitous origin type. - type RuntimeOrigin = RuntimeOrigin; - /// Maximum number of block number to block hash mappings to keep (oldest pruned first). - type BlockHashCount = BlockHashCount; - /// Runtime version. - type Version = Version; - /// Converts a module to an index of this module in the runtime. - type PalletInfo = PalletInfo; - /// The data to be stored in an account. - type AccountData = pallet_balances::AccountData; - /// What to do if a new account is created. - type OnNewAccount = (); - /// What to do if an account is fully reaped from the system. - type OnKilledAccount = (); - /// The weight of database operations that the runtime can invoke. - type DbWeight = RocksDbWeight; - /// The basic call filter to use in dispatchable. - type BaseCallFilter = InsideBoth; - /// Weight information for the extrinsics of this pallet. - type SystemWeightInfo = weights::frame_system::SubstrateWeight; - /// Block & extrinsics weights: base values and limits. - type BlockWeights = RuntimeBlockWeights; - /// The maximum length of a block (in bytes). - type BlockLength = RuntimeBlockLength; - /// This is used as an identifier of the chain. 42 is the generic substrate prefix. - type SS58Prefix = SS58Prefix; - /// The action to take on a Runtime Upgrade - type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode; - type MaxConsumers = frame_support::traits::ConstU32<16>; - type RuntimeTask = RuntimeTask; -} - -impl pallet_timestamp::Config for Runtime { - /// A timestamp: milliseconds since the unix epoch. - type Moment = u64; - type OnTimestampSet = dp_consensus::OnTimestampSet< - ::SlotBeacon, - ConstU64<{ SLOT_DURATION }>, - >; - type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; - type WeightInfo = weights::pallet_timestamp::SubstrateWeight; -} - -pub struct CanAuthor; -impl nimbus_primitives::CanAuthor for CanAuthor { - fn can_author(author: &NimbusId, slot: &u32) -> bool { - let authorities = AuthorityAssignment::collator_container_chain(Session::current_index()) - .expect("authorities should be set") - .orchestrator_chain; - - if authorities.is_empty() { - return false; - } - - let author_index = (*slot as usize) % authorities.len(); - let expected_author = &authorities[author_index]; - - expected_author == author - } - #[cfg(feature = "runtime-benchmarks")] - fn get_authors(_slot: &u32) -> Vec { - AuthorityAssignment::collator_container_chain(Session::current_index()) - .expect("authorities should be set") - .orchestrator_chain - } -} - -impl pallet_author_inherent::Config for Runtime { - type AuthorId = NimbusId; - type AccountLookup = dp_consensus::NimbusLookUp; - type CanAuthor = CanAuthor; - type SlotBeacon = dp_consensus::AuraDigestSlotBeacon; - type WeightInfo = weights::pallet_author_inherent::SubstrateWeight; -} - -parameter_types! { - pub const ExistentialDeposit: Balance = EXISTENTIAL_DEPOSIT; -} - -impl pallet_balances::Config for Runtime { - type MaxLocks = ConstU32<50>; - /// The type for recording an account's balance. - type Balance = Balance; - /// The ubiquitous event type. - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type MaxReserves = ConstU32<50>; - type ReserveIdentifier = [u8; 8]; - type FreezeIdentifier = RuntimeFreezeReason; - type MaxFreezes = ConstU32<10>; - type RuntimeHoldReason = RuntimeHoldReason; - type RuntimeFreezeReason = RuntimeFreezeReason; - type MaxHolds = ConstU32<10>; - type WeightInfo = weights::pallet_balances::SubstrateWeight; -} - -pub struct DealWithFees(sp_std::marker::PhantomData); -impl OnUnbalanced> for DealWithFees -where - R: pallet_balances::Config + pallet_treasury::Config, - pallet_treasury::Pallet: OnUnbalanced>, -{ - // this seems to be called for substrate-based transactions - fn on_unbalanceds(mut fees_then_tips: impl Iterator>) { - if let Some(fees) = fees_then_tips.next() { - // 80% is burned, 20% goes to the treasury - // Same policy applies for tips as well - let burn_percentage = 80; - let treasury_percentage = 20; - - let (_, to_treasury) = fees.ration(burn_percentage, treasury_percentage); - // Balances pallet automatically burns dropped Negative Imbalances by decreasing total_supply accordingly - as OnUnbalanced<_>>::on_unbalanced(to_treasury); - - // handle tip if there is one - if let Some(tip) = fees_then_tips.next() { - let (_, to_treasury) = tip.ration(burn_percentage, treasury_percentage); - as OnUnbalanced<_>>::on_unbalanced(to_treasury); - } - } - } - - // this is called from pallet_evm for Ethereum-based transactions - // (technically, it calls on_unbalanced, which calls this when non-zero) - fn on_nonzero_unbalanced(amount: NegativeImbalance) { - // 80% is burned, 20% goes to the treasury - let burn_percentage = 80; - let treasury_percentage = 20; - - let (_, to_treasury) = amount.ration(burn_percentage, treasury_percentage); - as OnUnbalanced<_>>::on_unbalanced(to_treasury); - } -} - -parameter_types! { - pub const TransactionByteFee: Balance = 1; -} - -impl pallet_transaction_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - // This will burn the fees - type OnChargeTransaction = CurrencyAdapter>; - type OperationalFeeMultiplier = ConstU8<5>; - type WeightToFee = WeightToFee; - type LengthToFee = ConstantMultiplier; - type FeeMultiplierUpdate = SlowAdjustingFeeUpdate; -} - -pub const RELAY_CHAIN_SLOT_DURATION_MILLIS: u32 = 6000; -pub const UNINCLUDED_SEGMENT_CAPACITY: u32 = 3; -pub const BLOCK_PROCESSING_VELOCITY: u32 = 1; - -type ConsensusHook = pallet_async_backing::consensus_hook::FixedVelocityConsensusHook< - Runtime, - BLOCK_PROCESSING_VELOCITY, - UNINCLUDED_SEGMENT_CAPACITY, ->; - -impl cumulus_pallet_parachain_system::Config for Runtime { - type WeightInfo = weights::cumulus_pallet_parachain_system::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type OnSystemEvent = (); - type SelfParaId = parachain_info::Pallet; - type OutboundXcmpMessageSource = (); - // Ignore all DMP messages by enqueueing them into `()`: - type DmpQueue = frame_support::traits::EnqueueWithOrigin<(), sp_core::ConstU8<0>>; - type ReservedDmpWeight = (); - type XcmpMessageHandler = (); - type ReservedXcmpWeight = (); - type CheckAssociatedRelayNumber = RelayNumberStrictlyIncreases; - type ConsensusHook = ConsensusHook; -} - -pub struct ParaSlotProvider; -impl Get<(Slot, SlotDuration)> for ParaSlotProvider { - fn get() -> (Slot, SlotDuration) { - let slot = u64::from(::SlotBeacon::slot()); - (Slot::from(slot), SlotDuration::from_millis(SLOT_DURATION)) - } -} - -parameter_types! { - pub const ExpectedBlockTime: u64 = MILLISECS_PER_BLOCK; -} - -impl pallet_async_backing::Config for Runtime { - type AllowMultipleBlocksPerSlot = ConstBool; - type GetAndVerifySlot = - pallet_async_backing::ParaSlot; - type ExpectedBlockTime = ExpectedBlockTime; -} - -pub struct OwnApplySession; -impl pallet_initializer::ApplyNewSession for OwnApplySession { - fn apply_new_session( - _changed: bool, - session_index: u32, - all_validators: Vec<(AccountId, NimbusId)>, - queued: Vec<(AccountId, NimbusId)>, - ) { - // We first initialize Configuration - Configuration::initializer_on_new_session(&session_index); - // Next: Registrar - Registrar::initializer_on_new_session(&session_index); - // Next: AuthorityMapping - AuthorityMapping::initializer_on_new_session(&session_index, &all_validators); - - let next_collators = queued.iter().map(|(k, _)| k.clone()).collect(); - - // Next: CollatorAssignment - let assignments = - CollatorAssignment::initializer_on_new_session(&session_index, next_collators); - - let queued_id_to_nimbus_map = queued.iter().cloned().collect(); - AuthorityAssignment::initializer_on_new_session( - &session_index, - &queued_id_to_nimbus_map, - &assignments.next_assignment, - ); - } -} - -impl pallet_initializer::Config for Runtime { - type SessionIndex = u32; - - /// The identifier type for an authority. - type AuthorityId = NimbusId; - - type SessionHandler = OwnApplySession; -} - -impl parachain_info::Config for Runtime {} - -pub struct CollatorsFromInvulnerables; - -/// Play the role of the session manager. -impl SessionManager for CollatorsFromInvulnerables { - fn new_session(index: SessionIndex) -> Option> { - log::info!( - "assembling new collators for new session {} at #{:?}", - index, - >::block_number(), - ); - - let invulnerables = Invulnerables::invulnerables().to_vec(); - let target_session_index = index.saturating_add(1); - let max_collators = - >::max_collators(target_session_index); - let collators = invulnerables - .iter() - .take(max_collators as usize) - .cloned() - .collect(); - - Some(collators) - } - fn start_session(_: SessionIndex) { - // we don't care. - } - fn end_session(_: SessionIndex) { - // we don't care. - } -} - -parameter_types! { - pub const Period: u32 = prod_or_fast!(5 * MINUTES, 1 * MINUTES); - pub const Offset: u32 = 0; -} - -impl pallet_session::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ValidatorId = ::AccountId; - // we don't have stash and controller, thus we don't need the convert as well. - type ValidatorIdOf = pallet_invulnerables::IdentityCollator; - type ShouldEndSession = pallet_session::PeriodicSessions; - type NextSessionRotation = pallet_session::PeriodicSessions; - type SessionManager = CollatorsFromInvulnerables; - // Essentially just Aura, but let's be pedantic. - type SessionHandler = ::KeyTypeIdProviders; - type Keys = SessionKeys; - type WeightInfo = weights::pallet_session::SubstrateWeight; -} - -pub struct RemoveInvulnerablesImpl; - -impl RemoveInvulnerables for RemoveInvulnerablesImpl { - fn remove_invulnerables( - collators: &mut Vec, - num_invulnerables: usize, - ) -> Vec { - if num_invulnerables == 0 { - return vec![]; - } - // TODO: check if this works on session changes - let all_invulnerables = pallet_invulnerables::Invulnerables::::get(); - if all_invulnerables.is_empty() { - return vec![]; - } - let mut invulnerables = vec![]; - // TODO: use binary_search when invulnerables are sorted - collators.retain(|x| { - if invulnerables.len() < num_invulnerables && all_invulnerables.contains(x) { - invulnerables.push(x.clone()); - false - } else { - true - } - }); - - invulnerables - } -} - -pub struct RemoveParaIdsWithNoCreditsImpl; - -impl RemoveParaIdsWithNoCredits for RemoveParaIdsWithNoCreditsImpl { - fn remove_para_ids_with_no_credits( - para_ids: &mut Vec, - currently_assigned: &BTreeSet, - ) { - let blocks_per_session = Period::get(); - - para_ids.retain(|para_id| { - // If the para has been assigned collators for this session it must have enough block credits - // for the current and the next session. - let block_credits_needed = if currently_assigned.contains(para_id) { - blocks_per_session * 2 - } else { - blocks_per_session - }; - - // Check if the container chain has enough credits for producing blocks - let free_block_credits = pallet_services_payment::BlockProductionCredits::::get(para_id) - .unwrap_or_default(); - - // Check if the container chain has enough credits for a session assignments - let free_session_credits = pallet_services_payment::CollatorAssignmentCredits::::get(para_id) - .unwrap_or_default(); - - // If para's max tip is set it should have enough to pay for one assignment with tip - let max_tip = pallet_services_payment::MaxTip::::get(para_id).unwrap_or_default() ; - - // Return if we can survive with free credits - if free_block_credits >= block_credits_needed && free_session_credits >= 1 { - // Max tip should always be checked, as it can be withdrawn even if free credits were used - return Balances::can_withdraw(&pallet_services_payment::Pallet::::parachain_tank(*para_id), max_tip).into_result(true).is_ok() - } - - let remaining_block_credits = block_credits_needed.saturating_sub(free_block_credits); - let remaining_session_credits = 1u32.saturating_sub(free_session_credits); - - let (block_production_costs, _) = ::ProvideBlockProductionCost::block_cost(para_id); - let (collator_assignment_costs, _) = ::ProvideCollatorAssignmentCost::collator_assignment_cost(para_id); - // let's check if we can withdraw - let remaining_block_credits_to_pay = u128::from(remaining_block_credits).saturating_mul(block_production_costs); - let remaining_session_credits_to_pay = u128::from(remaining_session_credits).saturating_mul(collator_assignment_costs); - - let remaining_to_pay = remaining_block_credits_to_pay.saturating_add(remaining_session_credits_to_pay).saturating_add(max_tip); - - // This should take into account whether we tank goes below ED - // The true refers to keepAlive - Balances::can_withdraw(&pallet_services_payment::Pallet::::parachain_tank(*para_id), remaining_to_pay).into_result(true).is_ok() - }); - } - - /// Make those para ids valid by giving them enough credits, for benchmarking. - #[cfg(feature = "runtime-benchmarks")] - fn make_valid_para_ids(para_ids: &[ParaId]) { - use frame_support::assert_ok; - - let blocks_per_session = Period::get(); - // Enough credits to run any benchmark - let block_credits = 20 * blocks_per_session; - let session_credits = 20; - - for para_id in para_ids { - assert_ok!(ServicesPayment::set_block_production_credits( - RuntimeOrigin::root(), - *para_id, - block_credits, - )); - assert_ok!(ServicesPayment::set_collator_assignment_credits( - RuntimeOrigin::root(), - *para_id, - session_credits, - )); - } - } -} - -pub struct NeverRotateCollators; - -impl ShouldRotateAllCollators for NeverRotateCollators { - fn should_rotate_all_collators(_: u32) -> bool { - false - } -} - -impl pallet_collator_assignment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type HostConfiguration = Configuration; - type ContainerChains = Registrar; - type SessionIndex = u32; - type SelfParaId = ParachainInfo; - type ShouldRotateAllCollators = NeverRotateCollators; - type GetRandomnessForNextBlock = (); - type RemoveInvulnerables = RemoveInvulnerablesImpl; - type RemoveParaIdsWithNoCredits = RemoveParaIdsWithNoCreditsImpl; - type CollatorAssignmentHook = ServicesPayment; - type CollatorAssignmentTip = ServicesPayment; - type Currency = Balances; - type WeightInfo = weights::pallet_collator_assignment::SubstrateWeight; -} - -impl pallet_authority_assignment::Config for Runtime { - type SessionIndex = u32; - type AuthorityId = NimbusId; -} - -pub const FIXED_BLOCK_PRODUCTION_COST: u128 = 1 * currency::MICRODANCE; -pub const FIXED_COLLATOR_ASSIGNMENT_COST: u128 = 100 * currency::MICRODANCE; - -pub struct BlockProductionCost(PhantomData); -impl ProvideBlockProductionCost for BlockProductionCost { - fn block_cost(_para_id: &ParaId) -> (u128, Weight) { - (FIXED_BLOCK_PRODUCTION_COST, Weight::zero()) - } -} - -pub struct CollatorAssignmentCost(PhantomData); -impl ProvideCollatorAssignmentCost for CollatorAssignmentCost { - fn collator_assignment_cost(_para_id: &ParaId) -> (u128, Weight) { - (FIXED_COLLATOR_ASSIGNMENT_COST, Weight::zero()) - } -} - -parameter_types! { - // 60 days worth of blocks - pub const FreeBlockProductionCredits: BlockNumber = 60 * DAYS; - // 60 days worth of blocks - pub const FreeCollatorAssignmentCredits: u32 = FreeBlockProductionCredits::get()/Period::get(); -} - -impl pallet_services_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - /// Handler for fees - type OnChargeForBlock = (); - type OnChargeForCollatorAssignment = (); - type OnChargeForCollatorAssignmentTip = (); - /// Currency type for fee payment - type Currency = Balances; - /// Provider of a block cost which can adjust from block to block - type ProvideBlockProductionCost = BlockProductionCost; - /// Provider of a block cost which can adjust from block to block - type ProvideCollatorAssignmentCost = CollatorAssignmentCost; - /// The maximum number of block credits that can be accumulated - type FreeBlockProductionCredits = FreeBlockProductionCredits; - /// The maximum number of session credits that can be accumulated - type FreeCollatorAssignmentCredits = FreeCollatorAssignmentCredits; - type ManagerOrigin = - EitherOfDiverse, EnsureRoot>; - type WeightInfo = weights::pallet_services_payment::SubstrateWeight; -} -impl pallet_data_preservers::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type SetBootNodesOrigin = - EitherOfDiverse, EnsureRoot>; - type MaxBootNodes = MaxBootNodes; - type MaxBootNodeUrlLen = MaxBootNodeUrlLen; - type WeightInfo = weights::pallet_data_preservers::SubstrateWeight; -} - -impl pallet_author_noting::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type ContainerChains = Registrar; - type SelfParaId = parachain_info::Pallet; - type SlotBeacon = dp_consensus::AuraDigestSlotBeacon; - type ContainerChainAuthor = CollatorAssignment; - type RelayChainStateProvider = cumulus_pallet_parachain_system::RelaychainDataProvider; - // We benchmark each hook individually, so for runtime-benchmarks this should be empty - #[cfg(feature = "runtime-benchmarks")] - type AuthorNotingHook = (); - #[cfg(not(feature = "runtime-benchmarks"))] - type AuthorNotingHook = (InflationRewards, ServicesPayment); - type WeightInfo = weights::pallet_author_noting::SubstrateWeight; -} - -parameter_types! { - pub const PotId: PalletId = PalletId(*b"PotStake"); - pub const MaxCandidates: u32 = 1000; - pub const MinCandidates: u32 = 5; - pub const SessionLength: BlockNumber = 5; - pub const MaxInvulnerables: u32 = 200; - pub const ExecutiveBody: BodyId = BodyId::Executive; -} - -impl pallet_invulnerables::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type UpdateOrigin = EnsureRoot; - type MaxInvulnerables = MaxInvulnerables; - type CollatorId = CollatorId; - type CollatorIdOf = pallet_invulnerables::IdentityCollator; - type CollatorRegistration = Session; - type WeightInfo = weights::pallet_invulnerables::SubstrateWeight; - #[cfg(feature = "runtime-benchmarks")] - type Currency = Balances; -} - -parameter_types! { - pub const MaxLengthParaIds: u32 = 200u32; - pub const MaxEncodedGenesisDataSize: u32 = 5_000_000u32; // 5MB - pub const MaxBootNodes: u32 = 10; - pub const MaxBootNodeUrlLen: u32 = 200; -} - -pub struct CurrentSessionIndexGetter; - -impl tp_traits::GetSessionIndex for CurrentSessionIndexGetter { - /// Returns current session index. - fn session_index() -> u32 { - Session::current_index() - } -} - -impl pallet_configuration::Config for Runtime { - type SessionDelay = ConstU32<2>; - type SessionIndex = u32; - type CurrentSessionIndex = CurrentSessionIndexGetter; - type AuthorityId = NimbusId; - type WeightInfo = weights::pallet_configuration::SubstrateWeight; -} - -pub struct FlashboxRegistrarHooks; - -impl RegistrarHooks for FlashboxRegistrarHooks { - fn para_marked_valid_for_collating(para_id: ParaId) -> Weight { - // Give free credits but only once per para id - ServicesPayment::give_free_credits(¶_id) - } - - fn para_deregistered(para_id: ParaId) -> Weight { - // Clear pallet_author_noting storage - if let Err(e) = AuthorNoting::kill_author_data(RuntimeOrigin::root(), para_id) { - log::warn!( - "Failed to kill_author_data after para id {} deregistered: {:?}", - u32::from(para_id), - e, - ); - } - // Remove bootnodes from pallet_data_preservers - DataPreservers::para_deregistered(para_id); - - ServicesPayment::para_deregistered(para_id); - - Weight::default() - } - - fn check_valid_for_collating(para_id: ParaId) -> DispatchResult { - // To be able to call mark_valid_for_collating, a container chain must have bootnodes - DataPreservers::check_valid_for_collating(para_id) - } - - #[cfg(feature = "runtime-benchmarks")] - fn benchmarks_ensure_valid_for_collating(para_id: ParaId) { - use sp_runtime::BoundedVec; - let boot_nodes: BoundedVec, MaxBootNodes> = vec![ - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec() - .try_into() - .unwrap(), - ] - .try_into() - .unwrap(); - - pallet_data_preservers::BootNodes::::insert(para_id, boot_nodes); - } -} - -parameter_types! { - pub const DepositAmount: Balance = 100 * UNIT; - pub const MaxLengthTokenSymbol: u32 = 255; -} -impl pallet_registrar::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RegistrarOrigin = EnsureRoot; - type MaxLengthParaIds = MaxLengthParaIds; - type MaxGenesisDataSize = MaxEncodedGenesisDataSize; - type MaxLengthTokenSymbol = MaxLengthTokenSymbol; - type SessionDelay = ConstU32<2>; - type SessionIndex = u32; - type CurrentSessionIndex = CurrentSessionIndexGetter; - type Currency = Balances; - type DepositAmount = DepositAmount; - type RegistrarHooks = FlashboxRegistrarHooks; - type WeightInfo = weights::pallet_registrar::SubstrateWeight; -} - -impl pallet_authority_mapping::Config for Runtime { - type SessionIndex = u32; - type SessionRemovalBoundary = ConstU32<2>; - type AuthorityId = NimbusId; -} - -impl pallet_sudo::Config for Runtime { - type RuntimeCall = RuntimeCall; - type RuntimeEvent = RuntimeEvent; - type WeightInfo = weights::pallet_sudo::SubstrateWeight; -} - -impl pallet_utility::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PalletsOrigin = OriginCaller; - type WeightInfo = weights::pallet_utility::SubstrateWeight; -} - -/// The type used to represent the kinds of proxies allowed. -#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))] -#[derive( - Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, MaxEncodedLen, TypeInfo, -)] -#[allow(clippy::unnecessary_cast)] -pub enum ProxyType { - /// All calls can be proxied. This is the trivial/most permissive filter. - Any = 0, - /// Only extrinsics that do not transfer funds. - NonTransfer = 1, - /// Only extrinsics related to governance (democracy and collectives). - Governance = 2, - /// Only extrinsics related to staking. - Staking = 3, - /// Allow to veto an announced proxy call. - CancelProxy = 4, - /// Allow extrinsic related to Balances. - Balances = 5, - /// Allow extrinsics related to Registrar - Registrar = 6, - /// Allow extrinsics related to Registrar that needs to be called through Sudo - SudoRegistrar = 7, -} - -impl Default for ProxyType { - fn default() -> Self { - Self::Any - } -} - -impl InstanceFilter for ProxyType { - fn filter(&self, c: &RuntimeCall) -> bool { - // Since proxy filters are respected in all dispatches of the Utility - // pallet, it should never need to be filtered by any proxy. - if let RuntimeCall::Utility(..) = c { - return true; - } - - match self { - ProxyType::Any => true, - ProxyType::NonTransfer => { - matches!( - c, - RuntimeCall::System(..) - | RuntimeCall::ParachainSystem(..) - | RuntimeCall::Timestamp(..) - | RuntimeCall::Proxy(..) - | RuntimeCall::Registrar(..) - ) - } - // We don't have governance yet - ProxyType::Governance => false, - ProxyType::Staking => matches!(c, RuntimeCall::Session(..)), - ProxyType::CancelProxy => matches!( - c, - RuntimeCall::Proxy(pallet_proxy::Call::reject_announcement { .. }) - ), - ProxyType::Balances => { - matches!(c, RuntimeCall::Balances(..)) - } - ProxyType::Registrar => { - matches!( - c, - RuntimeCall::Registrar(..) | RuntimeCall::DataPreservers(..) - ) - } - ProxyType::SudoRegistrar => match c { - RuntimeCall::Sudo(pallet_sudo::Call::sudo { call: ref x }) => { - matches!( - x.as_ref(), - &RuntimeCall::Registrar(..) | &RuntimeCall::DataPreservers(..) - ) - } - _ => false, - }, - } - } - - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (ProxyType::Any, _) => true, - (_, ProxyType::Any) => false, - _ => false, - } - } -} - -impl pallet_proxy::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = ProxyType; - // One storage item; key size 32, value size 8 - type ProxyDepositBase = ConstU128<{ currency::deposit(1, 8) }>; - // Additional storage item size of 33 bytes (32 bytes AccountId + 1 byte sizeof(ProxyType)). - type ProxyDepositFactor = ConstU128<{ currency::deposit(0, 33) }>; - type MaxProxies = ConstU32<32>; - type MaxPending = ConstU32<32>; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = ConstU128<{ currency::deposit(1, 8) }>; - // Additional storage item size of 68 bytes: - // - 32 bytes AccountId - // - 32 bytes Hasher (Blake2256) - // - 4 bytes BlockNumber (u32) - type AnnouncementDepositFactor = ConstU128<{ currency::deposit(0, 68) }>; - type WeightInfo = weights::pallet_proxy::SubstrateWeight; -} - -impl pallet_migrations::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type MigrationsList = (runtime_common::migrations::FlashboxMigrations,); - type XcmExecutionManager = (); -} - -/// Maintenance mode Call filter -pub struct MaintenanceFilter; -impl Contains for MaintenanceFilter { - fn contains(c: &RuntimeCall) -> bool { - !matches!( - c, - RuntimeCall::Balances(..) - | RuntimeCall::Registrar(..) - | RuntimeCall::Session(..) - | RuntimeCall::System(..) - | RuntimeCall::Utility(..) - ) - } -} - -/// Normal Call Filter -pub struct NormalFilter; -impl Contains for NormalFilter { - fn contains(_c: &RuntimeCall) -> bool { - true - } -} - -impl pallet_maintenance_mode::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type NormalCallFilter = NormalFilter; - type MaintenanceCallFilter = MaintenanceFilter; - type MaintenanceOrigin = EnsureRoot; - type XcmExecutionManager = (); -} - -parameter_types! { - pub const MaxStorageRoots: u32 = 10; // 1 minute of relay blocks -} - -impl pallet_relay_storage_roots::Config for Runtime { - type RelaychainStateProvider = cumulus_pallet_parachain_system::RelaychainDataProvider; - type MaxStorageRoots = MaxStorageRoots; - type WeightInfo = weights::pallet_relay_storage_roots::SubstrateWeight; -} - -impl pallet_root_testing::Config for Runtime { - type RuntimeEvent = RuntimeEvent; -} - -parameter_types! { - pub StakingAccount: AccountId32 = PalletId(*b"POOLSTAK").into_account_truncating(); - pub const InitialManualClaimShareValue: u128 = currency::MILLIDANCE; - pub const InitialAutoCompoundingShareValue: u128 = currency::MILLIDANCE; - pub const MinimumSelfDelegation: u128 = 10 * currency::KILODANCE; - pub const RewardsCollatorCommission: Perbill = Perbill::from_percent(20); - // Need to wait 2 sessions before being able to join or leave staking pools - pub const StakingSessionDelay: u32 = 2; -} - -parameter_types! { - pub ParachainBondAccount: AccountId32 = PalletId(*b"ParaBond").into_account_truncating(); - pub PendingRewardsAccount: AccountId32 = PalletId(*b"PENDREWD").into_account_truncating(); - // The equation to solve is: - // initial_supply * (1.05) = initial_supply * (1+x)^5_259_600 - // we should solve for x = (1.05)^(1/5_259_600) -1 -> 0.000000009 per block or 9/1_000_000_000 - // 1% in the case of dev mode - // TODO: check if we can put the prod inflation for tests too - // TODO: better calculus for going from annual to block inflation (if it can be done) - pub const InflationRate: Perbill = prod_or_fast!(Perbill::from_parts(9), Perbill::from_percent(1)); - - // 30% for parachain bond, so 70% for staking - pub const RewardsPortion: Perbill = Perbill::from_percent(70); -} - -pub struct GetSelfChainBlockAuthor; -impl Get for GetSelfChainBlockAuthor { - fn get() -> AccountId32 { - // TODO: we should do a refactor here, and use either authority-mapping or collator-assignemnt - // we should also make sure we actually account for the weight of these - // although most of these should be cached as they are read every block - let slot = u64::from(::SlotBeacon::slot()); - let self_para_id = ParachainInfo::get(); - let author = CollatorAssignment::author_for_slot(slot.into(), self_para_id); - author.expect("author should be set") - } -} - -pub struct OnUnbalancedInflation; -impl frame_support::traits::OnUnbalanced> for OnUnbalancedInflation { - fn on_nonzero_unbalanced(credit: Credit) { - let _ = >::resolve(&ParachainBondAccount::get(), credit); - } -} - -impl pallet_inflation_rewards::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type ContainerChains = Registrar; - type GetSelfChainBlockAuthor = GetSelfChainBlockAuthor; - type InflationRate = InflationRate; - type OnUnbalanced = OnUnbalancedInflation; - type PendingRewardsAccount = PendingRewardsAccount; - type StakingRewardsDistributor = InvulnerableRewardDistribution; - type RewardsPortion = RewardsPortion; -} - -impl pallet_tx_pause::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type PauseOrigin = EnsureRoot; - type UnpauseOrigin = EnsureRoot; - type WhitelistedCalls = (); - type MaxNameLen = ConstU32<256>; - type WeightInfo = weights::pallet_tx_pause::SubstrateWeight; -} - -#[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo, MaxEncodedLen)] -pub enum StreamPaymentAssetId { - Native, -} - -pub struct StreamPaymentAssets; -impl pallet_stream_payment::Assets - for StreamPaymentAssets -{ - fn transfer_deposit( - asset_id: &StreamPaymentAssetId, - from: &AccountId, - to: &AccountId, - amount: Balance, - ) -> frame_support::pallet_prelude::DispatchResult { - match asset_id { - StreamPaymentAssetId::Native => { - // We remove the hold before transfering. - Self::decrease_deposit(asset_id, from, amount)?; - Balances::transfer(from, to, amount, Preservation::Preserve).map(|_| ()) - } - } - } - - fn increase_deposit( - asset_id: &StreamPaymentAssetId, - account: &AccountId, - amount: Balance, - ) -> frame_support::pallet_prelude::DispatchResult { - match asset_id { - StreamPaymentAssetId::Native => Balances::hold( - &pallet_stream_payment::HoldReason::StreamPayment.into(), - account, - amount, - ), - } - } - - fn decrease_deposit( - asset_id: &StreamPaymentAssetId, - account: &AccountId, - amount: Balance, - ) -> frame_support::pallet_prelude::DispatchResult { - match asset_id { - StreamPaymentAssetId::Native => Balances::release( - &pallet_stream_payment::HoldReason::StreamPayment.into(), - account, - amount, - Precision::Exact, - ) - .map(|_| ()), - } - } - - fn get_deposit(asset_id: &StreamPaymentAssetId, account: &AccountId) -> Balance { - match asset_id { - StreamPaymentAssetId::Native => Balances::balance_on_hold( - &pallet_stream_payment::HoldReason::StreamPayment.into(), - account, - ), - } - } - - /// Benchmarks: should return the asset id which has the worst performance when interacting - /// with it. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_asset_id() -> StreamPaymentAssetId { - StreamPaymentAssetId::Native - } - - /// Benchmarks: should return the another asset id which has the worst performance when interacting - /// with it afther `bench_worst_case_asset_id`. This is to benchmark the worst case when changing config - /// from one asset to another. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_asset_id2() -> StreamPaymentAssetId { - StreamPaymentAssetId::Native - } - - /// Benchmarks: should set the balance for the asset id returned by `bench_worst_case_asset_id`. - #[cfg(feature = "runtime-benchmarks")] - fn bench_set_balance(asset_id: &StreamPaymentAssetId, account: &AccountId, amount: Balance) { - // only one asset id - let StreamPaymentAssetId::Native = asset_id; - - Balances::set_balance(account, amount); - } -} - -#[derive(RuntimeDebug, PartialEq, Eq, Encode, Decode, Copy, Clone, TypeInfo, MaxEncodedLen)] -pub enum TimeUnit { - BlockNumber, - Timestamp, - // TODO: Container chains/relay block number. -} - -pub struct TimeProvider; -impl pallet_stream_payment::TimeProvider for TimeProvider { - fn now(unit: &TimeUnit) -> Option { - match *unit { - TimeUnit::BlockNumber => Some(System::block_number().into()), - TimeUnit::Timestamp => Some(Timestamp::now().into()), - } - } - - /// Benchmarks: should return the time unit which has the worst performance calling - /// `TimeProvider::now(unit)` with. - #[cfg(feature = "runtime-benchmarks")] - fn bench_worst_case_time_unit() -> TimeUnit { - // Both BlockNumber and Timestamp cost the same (1 db read), but overriding timestamp - // doesn't work well in benches, while block number works fine. - TimeUnit::BlockNumber - } - - /// Benchmarks: sets the "now" time for time unit returned by `worst_case_time_unit`. - #[cfg(feature = "runtime-benchmarks")] - fn bench_set_now(instant: Balance) { - System::set_block_number(instant as u32) - } -} - -type StreamId = u64; - -parameter_types! { - // 1 entry, storing 173 bytes on-chain - pub const OpenStreamHoldAmount: Balance = currency::deposit(1, 173); -} - -impl pallet_stream_payment::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type StreamId = StreamId; - type TimeUnit = TimeUnit; - type Balance = Balance; - type AssetId = StreamPaymentAssetId; - type Assets = StreamPaymentAssets; - type Currency = Balances; - type OpenStreamHoldAmount = OpenStreamHoldAmount; - type RuntimeHoldReason = RuntimeHoldReason; - type TimeProvider = TimeProvider; - type WeightInfo = weights::pallet_stream_payment::SubstrateWeight; -} - -parameter_types! { - // 1 entry, storing 258 bytes on-chain - pub const BasicDeposit: Balance = currency::deposit(1, 258); - // 1 entry, storing 53 bytes on-chain - pub const SubAccountDeposit: Balance = currency::deposit(1, 53); - // Additional bytes adds 0 entries, storing 1 byte on-chain - pub const ByteDeposit: Balance = currency::deposit(0, 1); - pub const MaxSubAccounts: u32 = 100; - pub const MaxAdditionalFields: u32 = 100; - pub const MaxRegistrars: u32 = 20; -} - -impl pallet_identity::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type BasicDeposit = BasicDeposit; - type ByteDeposit = ByteDeposit; - type SubAccountDeposit = SubAccountDeposit; - type MaxSubAccounts = MaxSubAccounts; - type MaxRegistrars = MaxRegistrars; - type IdentityInformation = pallet_identity::legacy::IdentityInfo; - // Slashed balances are burnt - type Slashed = (); - type ForceOrigin = EnsureRoot; - type RegistrarOrigin = EnsureRoot; - type OffchainSignature = Signature; - type SigningPublicKey = ::Signer; - type UsernameAuthorityOrigin = EnsureRoot; - type PendingUsernameExpiration = ConstU32<{ 7 * DAYS }>; - type MaxSuffixLength = ConstU32<7>; - type MaxUsernameLength = ConstU32<32>; - type WeightInfo = weights::pallet_identity::SubstrateWeight; -} - -parameter_types! { - pub const TreasuryId: PalletId = PalletId(*b"tns/tsry"); - pub const ProposalBond: Permill = Permill::from_percent(5); - pub TreasuryAccount: AccountId = Treasury::account_id(); - pub const MaxBalance: Balance = Balance::max_value(); -} - -impl pallet_treasury::Config for Runtime { - type PalletId = TreasuryId; - type Currency = Balances; - - type ApproveOrigin = EnsureRoot; - type RejectOrigin = EnsureRoot; - type RuntimeEvent = RuntimeEvent; - // If proposal gets rejected, bond goes to treasury - type OnSlash = Treasury; - type ProposalBond = ProposalBond; - type ProposalBondMinimum = ConstU128<{ 1 * currency::DANCE * currency::SUPPLY_FACTOR }>; - type SpendPeriod = ConstU32<{ 6 * DAYS }>; - type Burn = (); - type BurnDestination = (); - type MaxApprovals = ConstU32<100>; - type WeightInfo = weights::pallet_treasury::SubstrateWeight; - type SpendFunds = (); - type ProposalBondMaximum = (); - #[cfg(not(feature = "runtime-benchmarks"))] - type SpendOrigin = frame_support::traits::NeverEnsureOrigin; // Disabled, no spending - #[cfg(feature = "runtime-benchmarks")] - type SpendOrigin = - frame_system::EnsureWithSuccess, AccountId, MaxBalance>; - type AssetKind = (); - type Beneficiary = AccountId; - type BeneficiaryLookup = IdentityLookup; - type Paymaster = PayFromAccount; - type BalanceConverter = UnityAssetBalanceConversion; - type PayoutPeriod = ConstU32<{ 30 * DAYS }>; - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = runtime_common::benchmarking::TreasurtBenchmarkHelper; -} - -parameter_types! { - // One storage item; key size 32; value is size 4+4+16+32. Total = 1 * (32 + 56) - pub const DepositBase: Balance = currency::deposit(1, 88); - // Additional storage item size of 32 bytes. - pub const DepositFactor: Balance = currency::deposit(0, 32); - pub const MaxSignatories: u32 = 100; -} - -impl pallet_multisig::Config for Runtime { - type RuntimeEvent = RuntimeEvent; - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type DepositBase = DepositBase; - type DepositFactor = DepositFactor; - type MaxSignatories = MaxSignatories; - type WeightInfo = weights::pallet_multisig::SubstrateWeight; -} - -// Create the runtime by composing the FRAME pallets that were previously configured. -construct_runtime!( - pub enum Runtime - { - // System support stuff. - System: frame_system = 0, - ParachainSystem: cumulus_pallet_parachain_system = 1, - Timestamp: pallet_timestamp = 2, - ParachainInfo: parachain_info = 3, - Sudo: pallet_sudo = 4, - Utility: pallet_utility = 5, - Proxy: pallet_proxy = 6, - Migrations: pallet_migrations = 7, - MaintenanceMode: pallet_maintenance_mode = 8, - TxPause: pallet_tx_pause = 9, - - // Monetary stuff. - Balances: pallet_balances = 10, - TransactionPayment: pallet_transaction_payment = 11, - StreamPayment: pallet_stream_payment = 12, - - // Other utilities - Identity: pallet_identity = 15, - Multisig: pallet_multisig = 16, - - // ContainerChain management. It should go before Session for Genesis - Registrar: pallet_registrar = 20, - Configuration: pallet_configuration = 21, - CollatorAssignment: pallet_collator_assignment = 22, - Initializer: pallet_initializer = 23, - AuthorNoting: pallet_author_noting = 24, - AuthorityAssignment: pallet_authority_assignment = 25, - ServicesPayment: pallet_services_payment = 26, - DataPreservers: pallet_data_preservers = 27, - - // Collator support. The order of these 6 are important and shall not change. - Invulnerables: pallet_invulnerables = 30, - Session: pallet_session = 31, - AuthorityMapping: pallet_authority_mapping = 32, - AuthorInherent: pallet_author_inherent = 33, - // InflationRewards must be after Session and AuthorInherent - InflationRewards: pallet_inflation_rewards = 35, - - // Treasury stuff. - Treasury: pallet_treasury::{Pallet, Storage, Config, Event, Call} = 40, - - // More system support stuff - RelayStorageRoots: pallet_relay_storage_roots = 60, - - RootTesting: pallet_root_testing = 100, - AsyncBacking: pallet_async_backing::{Pallet, Storage} = 110, - } -); - -#[cfg(feature = "runtime-benchmarks")] -mod benches { - frame_benchmarking::define_benchmarks!( - [frame_system, frame_system_benchmarking::Pallet::] - [cumulus_pallet_parachain_system, ParachainSystem] - [pallet_timestamp, Timestamp] - [pallet_sudo, Sudo] - [pallet_utility, Utility] - [pallet_proxy, Proxy] - [pallet_tx_pause, TxPause] - [pallet_balances, Balances] - [pallet_stream_payment, StreamPayment] - [pallet_identity, Identity] - [pallet_multisig, Multisig] - [pallet_registrar, Registrar] - [pallet_configuration, Configuration] - [pallet_collator_assignment, CollatorAssignment] - [pallet_author_noting, AuthorNoting] - [pallet_services_payment, ServicesPayment] - [pallet_data_preservers, DataPreservers] - [pallet_invulnerables, Invulnerables] - [pallet_session, SessionBench::] - [pallet_author_inherent, AuthorInherent] - [pallet_treasury, Treasury] - [pallet_relay_storage_roots, RelayStorageRoots] - ); -} - -impl_runtime_apis! { - impl sp_consensus_aura::AuraApi for Runtime { - fn slot_duration() -> sp_consensus_aura::SlotDuration { - sp_consensus_aura::SlotDuration::from_millis(SLOT_DURATION) - } - - fn authorities() -> Vec { - - // Check whether we need to fetch the next authorities or current ones - let parent_number = System::block_number(); - let should_end_session = ::ShouldEndSession::should_end_session(parent_number + 1); - - let session_index = if should_end_session { - Session::current_index() +1 - } - else { - Session::current_index() - }; - - pallet_authority_assignment::CollatorContainerChain::::get(session_index) - .expect("authorities for current session should exist") - .orchestrator_chain - } - } - - impl sp_api::Core for Runtime { - fn version() -> RuntimeVersion { - VERSION - } - - fn execute_block(block: Block) { - Executive::execute_block(block) - } - - fn initialize_block(header: &::Header) { - Executive::initialize_block(header) - } - } - - impl sp_api::Metadata for Runtime { - fn metadata() -> OpaqueMetadata { - OpaqueMetadata::new(Runtime::metadata().into()) - } - - fn metadata_at_version(version: u32) -> Option { - Runtime::metadata_at_version(version) - } - - fn metadata_versions() -> Vec { - Runtime::metadata_versions() - } - } - - impl sp_block_builder::BlockBuilder for Runtime { - fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { - Executive::apply_extrinsic(extrinsic) - } - - fn finalize_block() -> ::Header { - Executive::finalize_block() - } - - fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { - data.create_extrinsics() - } - - fn check_inherents( - block: Block, - data: sp_inherents::InherentData, - ) -> sp_inherents::CheckInherentsResult { - data.check_extrinsics(&block) - } - } - - impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { - fn validate_transaction( - source: TransactionSource, - tx: ::Extrinsic, - block_hash: ::Hash, - ) -> TransactionValidity { - Executive::validate_transaction(source, tx, block_hash) - } - } - - impl sp_offchain::OffchainWorkerApi for Runtime { - fn offchain_worker(header: &::Header) { - Executive::offchain_worker(header) - } - } - - impl sp_session::SessionKeys for Runtime { - fn generate_session_keys(seed: Option>) -> Vec { - SessionKeys::generate(seed) - } - - fn decode_session_keys( - encoded: Vec, - ) -> Option, KeyTypeId)>> { - SessionKeys::decode_into_raw_public_keys(&encoded) - } - } - - impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { - fn account_nonce(account: AccountId) -> Index { - System::account_nonce(account) - } - } - - impl cumulus_primitives_core::CollectCollationInfo for Runtime { - fn collect_collation_info(header: &::Header) -> cumulus_primitives_core::CollationInfo { - ParachainSystem::collect_collation_info(header) - } - } - - impl sp_genesis_builder::GenesisBuilder for Runtime { - fn create_default_config() -> Vec { - create_default_config::() - } - - fn build_config(config: Vec) -> sp_genesis_builder::Result { - build_config::(config) - } - } - - #[cfg(feature = "runtime-benchmarks")] - impl frame_benchmarking::Benchmark for Runtime { - fn benchmark_metadata( - extra: bool, - ) -> ( - Vec, - Vec, - ) { - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - use frame_benchmarking::{Benchmarking, BenchmarkList}; - use frame_support::traits::StorageInfoTrait; - - let mut list = Vec::::new(); - list_benchmarks!(list, extra); - - let storage_info = AllPalletsWithSystem::storage_info(); - (list, storage_info) - } - - fn dispatch_benchmark( - config: frame_benchmarking::BenchmarkConfig, - ) -> Result, sp_runtime::RuntimeString> { - use frame_benchmarking::{BenchmarkBatch, Benchmarking, BenchmarkError}; - use sp_core::storage::TrackedStorageKey; - - impl frame_system_benchmarking::Config for Runtime { - fn setup_set_code_requirements(code: &sp_std::vec::Vec) -> Result<(), BenchmarkError> { - ParachainSystem::initialize_for_set_code_benchmark(code.len() as u32); - Ok(()) - } - - fn verify_set_code() { - System::assert_last_event(cumulus_pallet_parachain_system::Event::::ValidationFunctionStored.into()); - } - } - - use cumulus_pallet_session_benchmarking::Pallet as SessionBench; - impl cumulus_pallet_session_benchmarking::Config for Runtime {} - - let whitelist: Vec = vec![ - // Block Number - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac") - .to_vec() - .into(), - // Total Issuance - hex_literal::hex!("c2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80") - .to_vec() - .into(), - // Execution Phase - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7ff553b5a9862a516939d82b3d3d8661a") - .to_vec() - .into(), - // Event Count - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850") - .to_vec() - .into(), - // System Events - hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7") - .to_vec() - .into(), - // The transactional storage limit. - hex_literal::hex!("3a7472616e73616374696f6e5f6c6576656c3a") - .to_vec() - .into(), - - // ParachainInfo ParachainId - hex_literal::hex!( "0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f") - .to_vec() - .into(), - ]; - - let mut batches = Vec::::new(); - let params = (&config, &whitelist); - - add_benchmarks!(params, batches); - - Ok(batches) - } - } - - #[cfg(feature = "try-runtime")] - impl frame_try_runtime::TryRuntime for Runtime { - fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { - let weight = Executive::try_runtime_upgrade(checks).unwrap(); - (weight, RuntimeBlockWeights::get().max_block) - } - - fn execute_block( - block: Block, - state_root_check: bool, - signature_check: bool, - select: frame_try_runtime::TryStateSelect, - ) -> Weight { - // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to - // have a backtrace here. - Executive::try_execute_block(block, state_root_check, signature_check, select).unwrap() - } - } - - impl pallet_collator_assignment_runtime_api::CollatorAssignmentApi for Runtime { - /// Return the parachain that the given `AccountId` is collating for. - /// Returns `None` if the `AccountId` is not collating. - fn current_collator_parachain_assignment(account: AccountId) -> Option { - let assigned_collators = CollatorAssignment::collator_container_chain(); - let self_para_id = ParachainInfo::get(); - - assigned_collators.para_id_of(&account, self_para_id) - } - - /// Return the parachain that the given `AccountId` will be collating for - /// in the next session change. - /// Returns `None` if the `AccountId` will not be collating. - fn future_collator_parachain_assignment(account: AccountId) -> Option { - let assigned_collators = CollatorAssignment::pending_collator_container_chain(); - - match assigned_collators { - Some(assigned_collators) => { - let self_para_id = ParachainInfo::get(); - - assigned_collators.para_id_of(&account, self_para_id) - } - None => { - Self::current_collator_parachain_assignment(account) - } - } - - } - - /// Return the list of collators of the given `ParaId`. - /// Returns `None` if the `ParaId` is not in the registrar. - fn parachain_collators(para_id: ParaId) -> Option> { - let assigned_collators = CollatorAssignment::collator_container_chain(); - let self_para_id = ParachainInfo::get(); - - if para_id == self_para_id { - Some(assigned_collators.orchestrator_chain) - } else { - assigned_collators.container_chains.get(¶_id).cloned() - } - } - } - - impl pallet_registrar_runtime_api::RegistrarApi for Runtime { - /// Return the registered para ids - fn registered_paras() -> Vec { - // We should return the container-chains for the session in which we are kicking in - let parent_number = System::block_number(); - let should_end_session = ::ShouldEndSession::should_end_session(parent_number + 1); - - let session_index = if should_end_session { - Session::current_index() +1 - } - else { - Session::current_index() - }; - - let container_chains = Registrar::session_container_chains(session_index); - let mut para_ids = vec![]; - para_ids.extend(container_chains.parachains); - para_ids.extend(container_chains.parathreads.into_iter().map(|(para_id, _)| para_id)); - - para_ids - } - - /// Fetch genesis data for this para id - fn genesis_data(para_id: ParaId) -> Option> { - Registrar::para_genesis_data(para_id) - } - - /// Fetch boot_nodes for this para id - fn boot_nodes(para_id: ParaId) -> Vec> { - // TODO: remember to write migration to move boot nodes from pallet_registrar to pallet_data_preservers - let bounded_vec = DataPreservers::boot_nodes(para_id); - - bounded_vec.into_iter().map(|x| x.into()).collect() - } - } - - impl pallet_author_noting_runtime_api::AuthorNotingApi for Runtime - where - AccountId: parity_scale_codec::Codec, - BlockNumber: parity_scale_codec::Codec, - ParaId: parity_scale_codec::Codec, - { - fn latest_block_number(para_id: ParaId) -> Option { - AuthorNoting::latest_author(para_id).map(|info| info.block_number) - } - - fn latest_author(para_id: ParaId) -> Option { - AuthorNoting::latest_author(para_id).map(|info| info.author) - } - } - - impl dp_consensus::TanssiAuthorityAssignmentApi for Runtime { - /// Return the current authorities assigned to a given paraId - fn para_id_authorities(para_id: ParaId) -> Option> { - let parent_number = System::block_number(); - - let should_end_session = ::ShouldEndSession::should_end_session(parent_number + 1); - - let session_index = if should_end_session { - Session::current_index() +1 - } - else { - Session::current_index() - }; - - let assigned_authorities = AuthorityAssignment::collator_container_chain(session_index)?; - - let self_para_id = ParachainInfo::get(); - - if para_id == self_para_id { - Some(assigned_authorities.orchestrator_chain) - } else { - assigned_authorities.container_chains.get(¶_id).cloned() - } - } - - /// Return the paraId assigned to a given authority - fn check_para_id_assignment(authority: NimbusId) -> Option { - let parent_number = System::block_number(); - let should_end_session = ::ShouldEndSession::should_end_session(parent_number + 1); - - let session_index = if should_end_session { - Session::current_index() +1 - } - else { - Session::current_index() - }; - let assigned_authorities = AuthorityAssignment::collator_container_chain(session_index)?; - let self_para_id = ParachainInfo::get(); - - assigned_authorities.para_id_of(&authority, self_para_id) - } - - /// Return the paraId assigned to a given authority on the next session. - /// On session boundary this returns the same as `check_para_id_assignment`. - fn check_para_id_assignment_next_session(authority: NimbusId) -> Option { - let session_index = Session::current_index() + 1; - let assigned_authorities = AuthorityAssignment::collator_container_chain(session_index)?; - let self_para_id = ParachainInfo::get(); - - assigned_authorities.para_id_of(&authority, self_para_id) - } - } - - impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi - for Runtime { - fn query_info( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { - TransactionPayment::query_info(uxt, len) - } - - fn query_fee_details( - uxt: ::Extrinsic, - len: u32, - ) -> pallet_transaction_payment::FeeDetails { - TransactionPayment::query_fee_details(uxt, len) - } - - fn query_weight_to_fee(weight: Weight) -> Balance { - TransactionPayment::weight_to_fee(weight) - } - - fn query_length_to_fee(length: u32) -> Balance { - TransactionPayment::length_to_fee(length) - } - } - - impl pallet_stream_payment_runtime_api::StreamPaymentApi - for Runtime { - fn stream_payment_status( - stream_id: StreamId, - now: Option, - ) -> Result, StreamPaymentApiError> { - match StreamPayment::stream_payment_status(stream_id, now) { - Ok(pallet_stream_payment::StreamPaymentStatus { - payment, deposit_left, stalled - }) => Ok(StreamPaymentApiStatus { - payment, deposit_left, stalled - }), - Err(pallet_stream_payment::Error::::UnknownStreamId) - => Err(StreamPaymentApiError::UnknownStreamId), - Err(e) => Err(StreamPaymentApiError::Other(format!("{e:?}"))) - } - } - } - - impl async_backing_primitives::UnincludedSegmentApi for Runtime { - fn can_build_upon( - included_hash: ::Hash, - slot: async_backing_primitives::Slot, - ) -> bool { - ConsensusHook::can_build_upon(included_hash, slot) - } - } - - impl dp_slot_duration_runtime_api::TanssiSlotDurationApi for Runtime { - fn slot_duration() -> u64 { - SLOT_DURATION - } - } - - impl pallet_services_payment_runtime_api::ServicesPaymentApi for Runtime { - fn block_cost(para_id: ParaId) -> Balance { - let (block_production_costs, _) = ::ProvideBlockProductionCost::block_cost(¶_id); - block_production_costs - } - - fn collator_assignment_cost(para_id: ParaId) -> Balance { - let (collator_assignment_costs, _) = ::ProvideCollatorAssignmentCost::collator_assignment_cost(¶_id); - collator_assignment_costs - } - } -} - -#[allow(dead_code)] -struct CheckInherents; - -// TODO: this should be removed but currently if we remove it the relay does not check anything -// related to other inherents that are not parachain-system -#[allow(deprecated)] -impl cumulus_pallet_parachain_system::CheckInherents for CheckInherents { - fn check_inherents( - block: &Block, - relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof, - ) -> sp_inherents::CheckInherentsResult { - let relay_chain_slot = relay_state_proof - .read_slot() - .expect("Could not read the relay chain slot from the proof"); - - let inherent_data = - cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration( - relay_chain_slot, - sp_std::time::Duration::from_secs(6), - ) - .create_inherent_data() - .expect("Could not create the timestamp inherent data"); - - inherent_data.check_extrinsics(block) - } -} - -cumulus_pallet_parachain_system::register_validate_block! { - Runtime = Runtime, - CheckInherents = CheckInherents, - BlockExecutor = pallet_author_inherent::BlockExecutor::, -} - -#[macro_export] -macro_rules! prod_or_fast { - ($prod:expr, $test:expr) => { - if cfg!(feature = "fast-runtime") { - $test - } else { - $prod - } - }; - ($prod:expr, $test:expr, $env:expr) => { - if cfg!(feature = "fast-runtime") { - core::option_env!($env) - .map(|s| s.parse().ok()) - .flatten() - .unwrap_or($test) - } else { - $prod - } - }; -} diff --git a/runtime/flashbox/src/weights/cumulus_pallet_parachain_system.rs b/runtime/flashbox/src/weights/cumulus_pallet_parachain_system.rs deleted file mode 100644 index f44d7ac..0000000 --- a/runtime/flashbox/src/weights/cumulus_pallet_parachain_system.rs +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for cumulus_pallet_parachain_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// cumulus_pallet_parachain_system -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/cumulus_pallet_parachain_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for cumulus_pallet_parachain_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl cumulus_pallet_parachain_system::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::LastDmqMqcHead` (r:1 w:1) - /// Proof: `ParachainSystem::LastDmqMqcHead` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::ProcessedDownwardMessages` (r:0 w:1) - /// Proof: `ParachainSystem::ProcessedDownwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `n` is `[0, 1000]`. - fn enqueue_inbound_downward_messages(n: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `42` - // Estimated: `1527` - // Minimum execution time: 3_617_000 picoseconds. - Weight::from_parts(11_419_155, 1527) - // Standard Error: 674 - .saturating_add(Weight::from_parts(1_541_101, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/frame_system.rs b/runtime/flashbox/src/weights/frame_system.rs deleted file mode 100644 index 7e20945..0000000 --- a/runtime/flashbox/src/weights/frame_system.rs +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for frame_system -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// frame_system -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/frame_system.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for frame_system using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl frame_system::WeightInfo for SubstrateWeight { - /// The range of component `b` is `[0, 3932160]`. - fn remark(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_783_000 picoseconds. - Weight::from_parts(2_894_000, 0) - // Standard Error: 0 - .saturating_add(Weight::from_parts(372, 0).saturating_mul(b.into())) - } - /// The range of component `b` is `[0, 3932160]`. - fn remark_with_event(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 6_950_000 picoseconds. - Weight::from_parts(7_081_000, 0) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_696, 0).saturating_mul(b.into())) - } - /// Storage: `System::Digest` (r:1 w:1) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) - fn set_heap_pages() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `1485` - // Minimum execution time: 4_605_000 picoseconds. - Weight::from_parts(4_794_000, 1485) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_code() -> Weight { - // Proof Size summary in bytes: - // Measured: `164` - // Estimated: `1649` - // Minimum execution time: 144_734_374_000 picoseconds. - Weight::from_parts(146_039_633_000, 1649) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn set_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_847_000 picoseconds. - Weight::from_parts(2_959_000, 0) - // Standard Error: 2_151 - .saturating_add(Weight::from_parts(916_578, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `i` is `[0, 1000]`. - fn kill_storage(i: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 2_787_000 picoseconds. - Weight::from_parts(2_962_000, 0) - // Standard Error: 926 - .saturating_add(Weight::from_parts(646_255, 0).saturating_mul(i.into())) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) - } - /// Storage: `Skipped::Metadata` (r:0 w:0) - /// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `p` is `[0, 1000]`. - fn kill_prefix(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `63 + p * (69 ±0)` - // Estimated: `69 + p * (70 ±0)` - // Minimum execution time: 5_198_000 picoseconds. - Weight::from_parts(5_367_000, 69) - // Standard Error: 1_399 - .saturating_add(Weight::from_parts(1_196_245, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) - } - /// Storage: `System::AuthorizedUpgrade` (r:0 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - fn authorize_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 13_361_000 picoseconds. - Weight::from_parts(14_335_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) - /// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::UpgradeRestrictionSignal` (r:1 w:0) - /// Proof: `ParachainSystem::UpgradeRestrictionSignal` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::PendingValidationCode` (r:1 w:1) - /// Proof: `ParachainSystem::PendingValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::HostConfiguration` (r:1 w:0) - /// Proof: `ParachainSystem::HostConfiguration` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::NewValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::NewValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::DidSetValidationCode` (r:0 w:1) - /// Proof: `ParachainSystem::DidSetValidationCode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn apply_authorized_upgrade() -> Weight { - // Proof Size summary in bytes: - // Measured: `186` - // Estimated: `1671` - // Minimum execution time: 147_385_029_000 picoseconds. - Weight::from_parts(150_238_518_000, 1671) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/mod.rs b/runtime/flashbox/src/weights/mod.rs deleted file mode 100644 index 74be5ab..0000000 --- a/runtime/flashbox/src/weights/mod.rs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -//! A list of the different weight modules for our runtime. - -pub mod cumulus_pallet_parachain_system; -pub mod frame_system; -pub mod pallet_author_inherent; -pub mod pallet_author_noting; -pub mod pallet_balances; -pub mod pallet_collator_assignment; -pub mod pallet_configuration; -pub mod pallet_data_preservers; -pub mod pallet_identity; -pub mod pallet_invulnerables; -pub mod pallet_multisig; -pub mod pallet_proxy; -pub mod pallet_registrar; -pub mod pallet_relay_storage_roots; -pub mod pallet_services_payment; -pub mod pallet_session; -pub mod pallet_stream_payment; -pub mod pallet_sudo; -pub mod pallet_timestamp; -pub mod pallet_treasury; -pub mod pallet_tx_pause; -pub mod pallet_utility; diff --git a/runtime/flashbox/src/weights/pallet_author_inherent.rs b/runtime/flashbox/src/weights/pallet_author_inherent.rs deleted file mode 100644 index 7b570e1..0000000 --- a/runtime/flashbox/src/weights/pallet_author_inherent.rs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_author_inherent -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_author_inherent -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_author_inherent.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_author_inherent using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_author_inherent::WeightInfo for SubstrateWeight { - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::Author` (r:1 w:0) - /// Proof: `AuthorInherent::Author` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorityAssignment::CollatorContainerChain` (r:1 w:0) - /// Proof: `AuthorityAssignment::CollatorContainerChain` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AuthorInherent::InherentIncluded` (r:0 w:1) - /// Proof: `AuthorInherent::InherentIncluded` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) - fn kick_off_authorship_validation() -> Weight { - // Proof Size summary in bytes: - // Measured: `534` - // Estimated: `3999` - // Minimum execution time: 18_129_000 picoseconds. - Weight::from_parts(18_805_000, 3999) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_author_noting.rs b/runtime/flashbox/src/weights/pallet_author_noting.rs deleted file mode 100644 index 96a547a..0000000 --- a/runtime/flashbox/src/weights/pallet_author_noting.rs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_author_noting -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_author_noting -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_author_noting.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_author_noting using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_author_noting::WeightInfo for SubstrateWeight { - /// Storage: `AuthorNoting::DidSetContainerAuthorData` (r:1 w:1) - /// Proof: `AuthorNoting::DidSetContainerAuthorData` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `CollatorAssignment::CollatorContainerChain` (r:1 w:0) - /// Proof: `CollatorAssignment::CollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `AuthorNoting::LatestAuthor` (r:100 w:100) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - /// The range of component `x` is `[0, 100]`. - fn set_latest_author_data(x: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `393 + x * (73 ±0)` - // Estimated: `1878 + x * (2539 ±0)` - // Minimum execution time: 9_502_000 picoseconds. - Weight::from_parts(9_647_000, 1878) - // Standard Error: 165_225 - .saturating_add(Weight::from_parts(25_133_238, 0).saturating_mul(x.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(x.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(x.into()))) - .saturating_add(Weight::from_parts(0, 2539).saturating_mul(x.into())) - } - /// Storage: `AuthorNoting::LatestAuthor` (r:0 w:1) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - fn set_author() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_241_000 picoseconds. - Weight::from_parts(8_670_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `AuthorNoting::LatestAuthor` (r:0 w:1) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - fn kill_author_data() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_008_000 picoseconds. - Weight::from_parts(8_166_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_balances.rs b/runtime/flashbox/src/weights/pallet_balances.rs deleted file mode 100644 index cfc7ba0..0000000 --- a/runtime/flashbox/src/weights/pallet_balances.rs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_balances -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_balances -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_balances.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_balances using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_balances::WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_allow_death() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 61_205_000 picoseconds. - Weight::from_parts(62_377_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_keep_alive() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 48_718_000 picoseconds. - Weight::from_parts(49_260_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_creating() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 18_331_000 picoseconds. - Weight::from_parts(18_802_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_set_balance_killing() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 25_031_000 picoseconds. - Weight::from_parts(25_546_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_transfer() -> Weight { - // Proof Size summary in bytes: - // Measured: `103` - // Estimated: `6196` - // Minimum execution time: 64_434_000 picoseconds. - Weight::from_parts(64_976_000, 6196) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn transfer_all() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `3593` - // Minimum execution time: 61_375_000 picoseconds. - Weight::from_parts(61_927_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn force_unreserve() -> Weight { - // Proof Size summary in bytes: - // Measured: `174` - // Estimated: `3593` - // Minimum execution time: 22_398_000 picoseconds. - Weight::from_parts(22_861_000, 3593) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:999 w:999) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `u` is `[1, 1000]`. - fn upgrade_accounts(u: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `0 + u * (136 ±0)` - // Estimated: `990 + u * (2603 ±0)` - // Minimum execution time: 21_593_000 picoseconds. - Weight::from_parts(21_789_000, 990) - // Standard Error: 12_414 - .saturating_add(Weight::from_parts(17_244_654, 0).saturating_mul(u.into())) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) - .saturating_add(Weight::from_parts(0, 2603).saturating_mul(u.into())) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_collator_assignment.rs b/runtime/flashbox/src/weights/pallet_collator_assignment.rs deleted file mode 100644 index d5485e8..0000000 --- a/runtime/flashbox/src/weights/pallet_collator_assignment.rs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_collator_assignment -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_collator_assignment -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_collator_assignment.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_collator_assignment using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_collator_assignment::WeightInfo for SubstrateWeight { - /// Storage: `CollatorAssignment::Randomness` (r:1 w:1) - /// Proof: `CollatorAssignment::Randomness` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:0) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:20 w:0) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `CollatorAssignment::PendingCollatorContainerChain` (r:1 w:1) - /// Proof: `CollatorAssignment::PendingCollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:20 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:20 w:20) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::MaxTip` (r:20 w:0) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - /// Storage: `Configuration::PendingConfigs` (r:1 w:0) - /// Proof: `Configuration::PendingConfigs` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::ActiveConfig` (r:1 w:0) - /// Proof: `Configuration::ActiveConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// Storage: `CollatorAssignment::CollatorContainerChain` (r:0 w:1) - /// Proof: `CollatorAssignment::CollatorContainerChain` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 20]`. - fn new_session(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `781 + y * (59 ±0)` - // Estimated: `4687 + y * (2535 ±0)` - // Minimum execution time: 118_413_000 picoseconds. - Weight::from_parts(47_667_532, 4687) - // Standard Error: 8_902 - .saturating_add(Weight::from_parts(296_815, 0).saturating_mul(x.into())) - // Standard Error: 90_641 - .saturating_add(Weight::from_parts(16_724_313, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().reads((4_u64).saturating_mul(y.into()))) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(y.into()))) - .saturating_add(Weight::from_parts(0, 2535).saturating_mul(y.into())) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_configuration.rs b/runtime/flashbox/src/weights/pallet_configuration.rs deleted file mode 100644 index 1e1585a..0000000 --- a/runtime/flashbox/src/weights/pallet_configuration.rs +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_configuration -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_configuration -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_configuration.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_configuration using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_configuration::WeightInfo for SubstrateWeight { - /// Storage: `Configuration::PendingConfigs` (r:1 w:1) - /// Proof: `Configuration::PendingConfigs` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::ActiveConfig` (r:1 w:0) - /// Proof: `Configuration::ActiveConfig` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Configuration::BypassConsistencyCheck` (r:1 w:0) - /// Proof: `Configuration::BypassConsistencyCheck` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set_config_with_u32() -> Weight { - // Proof Size summary in bytes: - // Measured: `266` - // Estimated: `1751` - // Minimum execution time: 10_752_000 picoseconds. - Weight::from_parts(11_166_000, 1751) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_data_preservers.rs b/runtime/flashbox/src/weights/pallet_data_preservers.rs deleted file mode 100644 index c906acb..0000000 --- a/runtime/flashbox/src/weights/pallet_data_preservers.rs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_data_preservers -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_data_preservers -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_data_preservers.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_data_preservers using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_data_preservers::WeightInfo for SubstrateWeight { - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[1, 200]`. - /// The range of component `y` is `[1, 10]`. - fn set_boot_nodes(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 16_473_000 picoseconds. - Weight::from_parts(14_542_746, 3660) - // Standard Error: 159 - .saturating_add(Weight::from_parts(12_051, 0).saturating_mul(x.into())) - // Standard Error: 3_325 - .saturating_add(Weight::from_parts(452_868, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_identity.rs b/runtime/flashbox/src/weights/pallet_identity.rs deleted file mode 100644 index 9480bf6..0000000 --- a/runtime/flashbox/src/weights/pallet_identity.rs +++ /dev/null @@ -1,419 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_identity -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_identity -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_identity.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_identity using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_identity::WeightInfo for SubstrateWeight { - /// Storage: `Identity::Registrars` (r:1 w:1) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 19]`. - fn add_registrar(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `31 + r * (57 ±0)` - // Estimated: `2626` - // Minimum execution time: 11_138_000 picoseconds. - Weight::from_parts(11_786_449, 2626) - // Standard Error: 1_437 - .saturating_add(Weight::from_parts(94_496, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 20]`. - fn set_identity(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `6977 + r * (5 ±0)` - // Estimated: `11037` - // Minimum execution time: 146_444_000 picoseconds. - Weight::from_parts(147_885_449, 11037) - // Standard Error: 3_552 - .saturating_add(Weight::from_parts(248_685, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:100 w:100) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 100]`. - fn set_subs_new(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `100` - // Estimated: `11037 + s * (2589 ±0)` - // Minimum execution time: 11_959_000 picoseconds. - Weight::from_parts(27_235_476, 11037) - // Standard Error: 4_741 - .saturating_add(Weight::from_parts(4_426_600, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(s.into()))) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) - .saturating_add(Weight::from_parts(0, 2589).saturating_mul(s.into())) - } - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:0 w:100) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 100]`. - fn set_subs_old(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `193 + p * (32 ±0)` - // Estimated: `11037` - // Minimum execution time: 11_952_000 picoseconds. - Weight::from_parts(27_347_006, 11037) - // Standard Error: 3_777 - .saturating_add(Weight::from_parts(1_809_850, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) - } - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:0 w:100) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 20]`. - /// The range of component `s` is `[0, 100]`. - fn clear_identity(r: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `7069 + r * (5 ±0) + s * (32 ±0)` - // Estimated: `11037` - // Minimum execution time: 70_261_000 picoseconds. - Weight::from_parts(72_150_953, 11037) - // Standard Error: 15_608 - .saturating_add(Weight::from_parts(120_436, 0).saturating_mul(r.into())) - // Standard Error: 3_045 - .saturating_add(Weight::from_parts(1_774_706, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) - } - /// Storage: `Identity::Registrars` (r:1 w:0) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 20]`. - fn request_judgement(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `6967 + r * (57 ±0)` - // Estimated: `11037` - // Minimum execution time: 99_933_000 picoseconds. - Weight::from_parts(101_603_178, 11037) - // Standard Error: 3_496 - .saturating_add(Weight::from_parts(147_002, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 20]`. - fn cancel_request(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `6998` - // Estimated: `11037` - // Minimum execution time: 97_658_000 picoseconds. - Weight::from_parts(99_000_276, 11037) - // Standard Error: 2_987 - .saturating_add(Weight::from_parts(75_449, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::Registrars` (r:1 w:1) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 19]`. - fn set_fee(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `88 + r * (57 ±0)` - // Estimated: `2626` - // Minimum execution time: 8_433_000 picoseconds. - Weight::from_parts(8_897_283, 2626) - // Standard Error: 951 - .saturating_add(Weight::from_parts(64_920, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::Registrars` (r:1 w:1) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 19]`. - fn set_account_id(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `88 + r * (57 ±0)` - // Estimated: `2626` - // Minimum execution time: 7_622_000 picoseconds. - Weight::from_parts(7_973_953, 2626) - // Standard Error: 740 - .saturating_add(Weight::from_parts(65_827, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::Registrars` (r:1 w:1) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 19]`. - fn set_fields(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `88 + r * (57 ±0)` - // Estimated: `2626` - // Minimum execution time: 7_530_000 picoseconds. - Weight::from_parts(7_928_432, 2626) - // Standard Error: 766 - .saturating_add(Weight::from_parts(63_527, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::Registrars` (r:1 w:0) - /// Proof: `Identity::Registrars` (`max_values`: Some(1), `max_size`: Some(1141), added: 1636, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 19]`. - fn provide_judgement(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `7045 + r * (57 ±0)` - // Estimated: `11037` - // Minimum execution time: 127_330_000 picoseconds. - Weight::from_parts(128_956_352, 11037) - // Standard Error: 3_565 - .saturating_add(Weight::from_parts(112_996, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:0 w:100) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 20]`. - /// The range of component `s` is `[0, 100]`. - fn kill_identity(r: u32, s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `7276 + r * (5 ±0) + s * (32 ±0)` - // Estimated: `11037` - // Minimum execution time: 75_005_000 picoseconds. - Weight::from_parts(76_578_155, 11037) - // Standard Error: 8_874 - .saturating_add(Weight::from_parts(190_401, 0).saturating_mul(r.into())) - // Standard Error: 1_731 - .saturating_add(Weight::from_parts(1_804_891, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(s.into()))) - } - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:1 w:1) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 99]`. - fn add_sub(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `474 + s * (36 ±0)` - // Estimated: `11037` - // Minimum execution time: 33_234_000 picoseconds. - Weight::from_parts(37_407_522, 11037) - // Standard Error: 1_058 - .saturating_add(Weight::from_parts(105_222, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:1 w:1) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// The range of component `s` is `[1, 100]`. - fn rename_sub(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `590 + s * (3 ±0)` - // Estimated: `11037` - // Minimum execution time: 16_144_000 picoseconds. - Weight::from_parts(17_555_001, 11037) - // Standard Error: 507 - .saturating_add(Weight::from_parts(48_002, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::SuperOf` (r:1 w:1) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// The range of component `s` is `[1, 100]`. - fn remove_sub(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `637 + s * (35 ±0)` - // Estimated: `11037` - // Minimum execution time: 36_684_000 picoseconds. - Weight::from_parts(38_675_159, 11037) - // Standard Error: 745 - .saturating_add(Weight::from_parts(96_540, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Identity::SuperOf` (r:1 w:1) - /// Proof: `Identity::SuperOf` (`max_values`: None, `max_size`: Some(114), added: 2589, mode: `MaxEncodedLen`) - /// Storage: `Identity::SubsOf` (r:1 w:1) - /// Proof: `Identity::SubsOf` (`max_values`: None, `max_size`: Some(3258), added: 5733, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:0) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `s` is `[0, 99]`. - fn quit_sub(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `703 + s * (37 ±0)` - // Estimated: `6723` - // Minimum execution time: 28_000_000 picoseconds. - Weight::from_parts(29_724_464, 6723) - // Standard Error: 688 - .saturating_add(Weight::from_parts(93_639, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Identity::UsernameAuthorities` (r:0 w:1) - /// Proof: `Identity::UsernameAuthorities` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn add_username_authority() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_666_000 picoseconds. - Weight::from_parts(8_854_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::UsernameAuthorities` (r:1 w:1) - /// Proof: `Identity::UsernameAuthorities` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn remove_username_authority() -> Weight { - // Proof Size summary in bytes: - // Measured: `79` - // Estimated: `3517` - // Minimum execution time: 12_332_000 picoseconds. - Weight::from_parts(12_819_000, 3517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::UsernameAuthorities` (r:1 w:1) - /// Proof: `Identity::UsernameAuthorities` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `Identity::AccountOfUsername` (r:1 w:1) - /// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(81), added: 2556, mode: `MaxEncodedLen`) - /// Storage: `Identity::PendingUsernames` (r:1 w:0) - /// Proof: `Identity::PendingUsernames` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - fn set_username_for() -> Weight { - // Proof Size summary in bytes: - // Measured: `79` - // Estimated: `11037` - // Minimum execution time: 74_042_000 picoseconds. - Weight::from_parts(76_445_000, 11037) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Identity::PendingUsernames` (r:1 w:1) - /// Proof: `Identity::PendingUsernames` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - /// Storage: `Identity::AccountOfUsername` (r:0 w:1) - /// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(81), added: 2556, mode: `MaxEncodedLen`) - fn accept_username() -> Weight { - // Proof Size summary in bytes: - // Measured: `114` - // Estimated: `11037` - // Minimum execution time: 27_114_000 picoseconds. - Weight::from_parts(27_647_000, 11037) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Identity::PendingUsernames` (r:1 w:1) - /// Proof: `Identity::PendingUsernames` (`max_values`: None, `max_size`: Some(85), added: 2560, mode: `MaxEncodedLen`) - fn remove_expired_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `114` - // Estimated: `3550` - // Minimum execution time: 18_730_000 picoseconds. - Weight::from_parts(20_385_000, 3550) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::AccountOfUsername` (r:1 w:0) - /// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(81), added: 2556, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:1) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - fn set_primary_username() -> Weight { - // Proof Size summary in bytes: - // Measured: `256` - // Estimated: `11037` - // Minimum execution time: 21_045_000 picoseconds. - Weight::from_parts(21_591_000, 11037) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Identity::AccountOfUsername` (r:1 w:1) - /// Proof: `Identity::AccountOfUsername` (`max_values`: None, `max_size`: Some(81), added: 2556, mode: `MaxEncodedLen`) - /// Storage: `Identity::IdentityOf` (r:1 w:0) - /// Proof: `Identity::IdentityOf` (`max_values`: None, `max_size`: Some(7572), added: 10047, mode: `MaxEncodedLen`) - fn remove_dangling_username() -> Weight { - // Proof Size summary in bytes: - // Measured: `97` - // Estimated: `11037` - // Minimum execution time: 15_300_000 picoseconds. - Weight::from_parts(15_679_000, 11037) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_invulnerables.rs b/runtime/flashbox/src/weights/pallet_invulnerables.rs deleted file mode 100644 index b494261..0000000 --- a/runtime/flashbox/src/weights/pallet_invulnerables.rs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_invulnerables -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_invulnerables -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_invulnerables.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_invulnerables using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_invulnerables::WeightInfo for SubstrateWeight { - /// Storage: `Session::NextKeys` (r:1 w:0) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 99]`. - fn add_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `548 + b * (36 ±0)` - // Estimated: `4687 + b * (37 ±0)` - // Minimum execution time: 19_285_000 picoseconds. - Weight::from_parts(22_588_604, 4687) - // Standard Error: 1_802 - .saturating_add(Weight::from_parts(126_573, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:1) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn remove_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + b * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 11_917_000 picoseconds. - Weight::from_parts(13_766_990, 4687) - // Standard Error: 1_060 - .saturating_add(Weight::from_parts(89_095, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::BlockWeight` (r:1 w:1) - /// Proof: `System::BlockWeight` (`max_values`: Some(1), `max_size`: Some(48), added: 543, mode: `MaxEncodedLen`) - /// The range of component `r` is `[1, 100]`. - fn new_session(r: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `70 + r * (32 ±0)` - // Estimated: `4687` - // Minimum execution time: 11_265_000 picoseconds. - Weight::from_parts(13_878_522, 4687) - // Standard Error: 1_435 - .saturating_add(Weight::from_parts(90_798, 0).saturating_mul(r.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Invulnerables::Invulnerables` (r:1 w:0) - /// Proof: `Invulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `b` is `[1, 100]`. - fn reward_invulnerable(b: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `218 + b * (33 ±0)` - // Estimated: `4687` - // Minimum execution time: 24_080_000 picoseconds. - Weight::from_parts(26_355_006, 4687) - // Standard Error: 1_197 - .saturating_add(Weight::from_parts(93_305, 0).saturating_mul(b.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_multisig.rs b/runtime/flashbox/src/weights/pallet_multisig.rs deleted file mode 100644 index f3dc312..0000000 --- a/runtime/flashbox/src/weights/pallet_multisig.rs +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_multisig -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_multisig -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_multisig.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_multisig using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_multisig::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `z` is `[0, 10000]`. - fn as_multi_threshold_1(z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 22_724_000 picoseconds. - Weight::from_parts(24_341_474, 3997) - // Standard Error: 4 - .saturating_add(Weight::from_parts(510, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_create(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `193 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 47_310_000 picoseconds. - Weight::from_parts(36_634_772, 6811) - // Standard Error: 582 - .saturating_add(Weight::from_parts(120_605, 0).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_parts(1_413, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[3, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_approve(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `211` - // Estimated: `6811` - // Minimum execution time: 29_908_000 picoseconds. - Weight::from_parts(20_368_870, 6811) - // Standard Error: 479 - .saturating_add(Weight::from_parts(107_902, 0).saturating_mul(s.into())) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_413, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - /// The range of component `z` is `[0, 10000]`. - fn as_multi_complete(s: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `363 + s * (33 ±0)` - // Estimated: `6811 + s * (34 ±0)` - // Minimum execution time: 60_674_000 picoseconds. - Weight::from_parts(47_445_190, 6811) - // Standard Error: 828 - .saturating_add(Weight::from_parts(158_136, 0).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(1_478, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 34).saturating_mul(s.into())) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_create(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `193 + s * (2 ±0)` - // Estimated: `6811` - // Minimum execution time: 34_866_000 picoseconds. - Weight::from_parts(35_270_193, 6811) - // Standard Error: 787 - .saturating_add(Weight::from_parts(119_339, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn approve_as_multi_approve(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `211` - // Estimated: `6811` - // Minimum execution time: 19_197_000 picoseconds. - Weight::from_parts(19_154_003, 6811) - // Standard Error: 641 - .saturating_add(Weight::from_parts(105_905, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Multisig::Multisigs` (r:1 w:1) - /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(3346), added: 5821, mode: `MaxEncodedLen`) - /// The range of component `s` is `[2, 100]`. - fn cancel_as_multi(s: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `383 + s * (1 ±0)` - // Estimated: `6811` - // Minimum execution time: 36_272_000 picoseconds. - Weight::from_parts(36_793_332, 6811) - // Standard Error: 702 - .saturating_add(Weight::from_parts(111_985, 0).saturating_mul(s.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_proxy.rs b/runtime/flashbox/src/weights/pallet_proxy.rs deleted file mode 100644 index d5fa05d..0000000 --- a/runtime/flashbox/src/weights/pallet_proxy.rs +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_proxy -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_proxy -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_proxy.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_proxy using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_proxy::WeightInfo for SubstrateWeight { - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `174 + p * (37 ±0)` - // Estimated: `4706 + p * (37 ±0)` - // Minimum execution time: 22_035_000 picoseconds. - Weight::from_parts(23_152_317, 4706) - // Standard Error: 1_586 - .saturating_add(Weight::from_parts(47_453, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn proxy_announced(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `501 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698 + a * (68 ±0) + p * (37 ±0)` - // Minimum execution time: 49_523_000 picoseconds. - Weight::from_parts(50_819_227, 5698) - // Standard Error: 4_099 - .saturating_add(Weight::from_parts(181_731, 0).saturating_mul(a.into())) - // Standard Error: 4_235 - .saturating_add(Weight::from_parts(36_697, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 68).saturating_mul(a.into())) - .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn remove_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `370 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 27_240_000 picoseconds. - Weight::from_parts(27_796_775, 5698) - // Standard Error: 1_974 - .saturating_add(Weight::from_parts(180_937, 0).saturating_mul(a.into())) - // Standard Error: 2_039 - .saturating_add(Weight::from_parts(11_719, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn reject_announcement(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `370 + a * (68 ±0)` - // Estimated: `5698` - // Minimum execution time: 27_230_000 picoseconds. - Weight::from_parts(27_918_625, 5698) - // Standard Error: 1_399 - .saturating_add(Weight::from_parts(178_301, 0).saturating_mul(a.into())) - // Standard Error: 1_446 - .saturating_add(Weight::from_parts(5_970, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:0) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// Storage: `Proxy::Announcements` (r:1 w:1) - /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2233), added: 4708, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// The range of component `a` is `[0, 31]`. - /// The range of component `p` is `[1, 31]`. - fn announce(a: u32, p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `387 + a * (68 ±0) + p * (37 ±0)` - // Estimated: `5698` - // Minimum execution time: 36_725_000 picoseconds. - Weight::from_parts(36_307_680, 5698) - // Standard Error: 1_550 - .saturating_add(Weight::from_parts(188_616, 0).saturating_mul(a.into())) - // Standard Error: 1_602 - .saturating_add(Weight::from_parts(37_400, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn add_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `128 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_632_000 picoseconds. - Weight::from_parts(27_331_582, 4706) - // Standard Error: 1_092 - .saturating_add(Weight::from_parts(39_465, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxy(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `128 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_787_000 picoseconds. - Weight::from_parts(27_883_542, 4706) - // Standard Error: 1_972 - .saturating_add(Weight::from_parts(31_158, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn remove_proxies(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `128 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 26_039_000 picoseconds. - Weight::from_parts(26_877_411, 4706) - // Standard Error: 1_098 - .saturating_add(Weight::from_parts(40_083, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[1, 31]`. - fn create_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `140` - // Estimated: `4706` - // Minimum execution time: 28_778_000 picoseconds. - Weight::from_parts(29_707_894, 4706) - // Standard Error: 1_038 - .saturating_add(Weight::from_parts(6_875, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Proxy::Proxies` (r:1 w:1) - /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1241), added: 3716, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 30]`. - fn kill_pure(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `165 + p * (37 ±0)` - // Estimated: `4706` - // Minimum execution time: 27_344_000 picoseconds. - Weight::from_parts(28_255_709, 4706) - // Standard Error: 1_266 - .saturating_add(Weight::from_parts(39_097, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_registrar.rs b/runtime/flashbox/src/weights/pallet_registrar.rs deleted file mode 100644 index 04676a6..0000000 --- a/runtime/flashbox/src/weights/pallet_registrar.rs +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_registrar -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_registrar -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_registrar.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_registrar using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_registrar::WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `389 + y * (12 ±0)` - // Estimated: `3833 + y * (12 ±0) + z * (2 ±0)` - // Minimum execution time: 52_288_000 picoseconds. - Weight::from_parts(53_179_000, 3833) - // Standard Error: 12 - .saturating_add(Weight::from_parts(1_011, 0).saturating_mul(x.into())) - // Standard Error: 3_870_675 - .saturating_add(Weight::from_parts(152_168_165, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(Weight::from_parts(0, 12).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 2).saturating_mul(z.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::MaxTip` (r:0 w:1) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::RefundAddress` (r:0 w:1) - /// Proof: `ServicesPayment::RefundAddress` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:0 w:1) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::MaxCorePrice` (r:0 w:1) - /// Proof: `ServicesPayment::MaxCorePrice` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:0 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:0 w:1) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `AuthorNoting::LatestAuthor` (r:0 w:1) - /// Proof: `AuthorNoting::LatestAuthor` (`max_values`: None, `max_size`: Some(64), added: 2539, mode: `MaxEncodedLen`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_immediate(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `236 + y * (18 ±0)` - // Estimated: `6196 + y * (16 ±0)` - // Minimum execution time: 73_171_000 picoseconds. - Weight::from_parts(76_651_546, 6196) - // Standard Error: 0 - .saturating_add(Weight::from_parts(8, 0).saturating_mul(x.into())) - // Standard Error: 15_081 - .saturating_add(Weight::from_parts(572_373, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(12_u64)) - .saturating_add(Weight::from_parts(0, 16).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:0) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:0) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::Paused` (r:1 w:0) - /// Proof: `Registrar::Paused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingToRemove` (r:1 w:1) - /// Proof: `Registrar::PendingToRemove` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - fn deregister_scheduled(x: u32, y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `396 + y * (4 ±0)` - // Estimated: `1879 + y * (4 ±0)` - // Minimum execution time: 29_917_000 picoseconds. - Weight::from_parts(34_306_481, 1879) - // Standard Error: 0 - .saturating_add(Weight::from_parts(5, 0).saturating_mul(x.into())) - // Standard Error: 9_896 - .saturating_add(Weight::from_parts(415_267, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 4).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegisteredParaIds` (r:1 w:0) - /// Proof: `Registrar::RegisteredParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `DataPreservers::BootNodes` (r:1 w:0) - /// Proof: `DataPreservers::BootNodes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::GivenFreeCredits` (r:1 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:1 w:1) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// The range of component `y` is `[1, 50]`. - fn mark_valid_for_collating(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `1332 + y * (44 ±0)` - // Estimated: `4734 + y * (45 ±0)` - // Minimum execution time: 67_250_000 picoseconds. - Weight::from_parts(113_285_804, 4734) - // Standard Error: 28_836 - .saturating_add(Weight::from_parts(423_592, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - .saturating_add(Weight::from_parts(0, 45).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn pause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `431 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 27_866_000 picoseconds. - Weight::from_parts(51_145_095, 1912) - // Standard Error: 15_473 - .saturating_add(Weight::from_parts(263_522, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `Registrar::PendingParaIds` (r:1 w:1) - /// Proof: `Registrar::PendingParaIds` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingPaused` (r:1 w:1) - /// Proof: `Registrar::PendingPaused` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn unpause_container_chain(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `431 + y * (8 ±0)` - // Estimated: `1912 + y * (8 ±0)` - // Minimum execution time: 32_221_000 picoseconds. - Weight::from_parts(53_911_948, 1912) - // Standard Error: 15_713 - .saturating_add(Weight::from_parts(210_048, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - .saturating_add(Weight::from_parts(0, 8).saturating_mul(y.into())) - } - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Registrar::ParaGenesisData` (r:1 w:1) - /// Proof: `Registrar::ParaGenesisData` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingVerification` (r:1 w:1) - /// Proof: `Registrar::PendingVerification` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::ParathreadParams` (r:0 w:1) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::RegistrarDeposit` (r:0 w:1) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// The range of component `x` is `[5, 3000000]`. - /// The range of component `y` is `[1, 50]`. - /// The range of component `z` is `[1, 10]`. - fn register_parathread(x: u32, y: u32, z: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `423 + y * (12 ±0)` - // Estimated: `3864 + y * (12 ±0) + z * (3 ±0)` - // Minimum execution time: 55_408_000 picoseconds. - Weight::from_parts(56_533_000, 3864) - // Standard Error: 12 - .saturating_add(Weight::from_parts(989, 0).saturating_mul(x.into())) - // Standard Error: 3_956_187 - .saturating_add(Weight::from_parts(143_255_829, 0).saturating_mul(z.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(5_u64)) - .saturating_add(Weight::from_parts(0, 12).saturating_mul(y.into())) - .saturating_add(Weight::from_parts(0, 3).saturating_mul(z.into())) - } - /// Storage: `Registrar::ParathreadParams` (r:1 w:0) - /// Proof: `Registrar::ParathreadParams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Registrar::PendingParathreadParams` (r:1 w:1) - /// Proof: `Registrar::PendingParathreadParams` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `Session::CurrentIndex` (r:1 w:0) - /// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// The range of component `y` is `[1, 50]`. - fn set_parathread_params(y: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `568 + y * (11 ±0)` - // Estimated: `4044 + y * (11 ±0)` - // Minimum execution time: 25_614_000 picoseconds. - Weight::from_parts(43_282_157, 4044) - // Standard Error: 15_916 - .saturating_add(Weight::from_parts(535_478, 0).saturating_mul(y.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 11).saturating_mul(y.into())) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_relay_storage_roots.rs b/runtime/flashbox/src/weights/pallet_relay_storage_roots.rs deleted file mode 100644 index 5e49dfe..0000000 --- a/runtime/flashbox/src/weights/pallet_relay_storage_roots.rs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_relay_storage_roots -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_relay_storage_roots -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_relay_storage_roots.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_relay_storage_roots using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_relay_storage_roots::WeightInfo for SubstrateWeight { - /// Storage: `ParachainSystem::ValidationData` (r:1 w:0) - /// Proof: `ParachainSystem::ValidationData` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `RelayStorageRoots::RelayStorageRoot` (r:1 w:2) - /// Proof: `RelayStorageRoots::RelayStorageRoot` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) - /// Storage: `RelayStorageRoots::RelayStorageRootKeys` (r:1 w:1) - /// Proof: `RelayStorageRoots::RelayStorageRootKeys` (`max_values`: Some(1), `max_size`: Some(41), added: 536, mode: `MaxEncodedLen`) - fn set_relay_storage_root() -> Weight { - // Proof Size summary in bytes: - // Measured: `521` - // Estimated: `3509` - // Minimum execution time: 16_929_000 picoseconds. - Weight::from_parts(17_537_000, 3509) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_services_payment.rs b/runtime/flashbox/src/weights/pallet_services_payment.rs deleted file mode 100644 index 7de2973..0000000 --- a/runtime/flashbox/src/weights/pallet_services_payment.rs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_services_payment -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_services_payment -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_services_payment.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_services_payment using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_services_payment::WeightInfo for SubstrateWeight { - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn purchase_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `155` - // Estimated: `6196` - // Minimum execution time: 54_725_000 picoseconds. - Weight::from_parts(55_403_000, 6196) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:0 w:1) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - fn set_block_production_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 7_704_000 picoseconds. - Weight::from_parts(7_938_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::GivenFreeCredits` (r:0 w:1) - /// Proof: `ServicesPayment::GivenFreeCredits` (`max_values`: None, `max_size`: Some(20), added: 2495, mode: `MaxEncodedLen`) - fn set_given_free_credits() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 4_596_000 picoseconds. - Weight::from_parts(4_896_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::RefundAddress` (r:0 w:1) - /// Proof: `ServicesPayment::RefundAddress` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) - fn set_refund_address() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 15_734_000 picoseconds. - Weight::from_parts(16_120_000, 3660) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Registrar::RegistrarDeposit` (r:1 w:0) - /// Proof: `Registrar::RegistrarDeposit` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `ServicesPayment::MaxCorePrice` (r:0 w:1) - /// Proof: `ServicesPayment::MaxCorePrice` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_core_price() -> Weight { - // Proof Size summary in bytes: - // Measured: `195` - // Estimated: `3660` - // Minimum execution time: 15_475_000 picoseconds. - Weight::from_parts(15_795_000, 3660) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::BlockProductionCredits` (r:1 w:0) - /// Proof: `ServicesPayment::BlockProductionCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn on_container_author_noted() -> Weight { - // Proof Size summary in bytes: - // Measured: `258` - // Estimated: `3593` - // Minimum execution time: 23_809_000 picoseconds. - Weight::from_parts(24_539_000, 3593) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::CollatorAssignmentCredits` (r:1 w:0) - /// Proof: `ServicesPayment::CollatorAssignmentCredits` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `ServicesPayment::MaxTip` (r:1 w:0) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn on_collators_assigned() -> Weight { - // Proof Size summary in bytes: - // Measured: `315` - // Estimated: `3593` - // Minimum execution time: 42_719_000 picoseconds. - Weight::from_parts(43_545_000, 3593) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `ServicesPayment::MaxTip` (r:0 w:1) - /// Proof: `ServicesPayment::MaxTip` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`) - fn set_max_tip() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 5_075_000 picoseconds. - Weight::from_parts(5_240_000, 0) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_session.rs b/runtime/flashbox/src/weights/pallet_session.rs deleted file mode 100644 index ad3f3f9..0000000 --- a/runtime/flashbox/src/weights/pallet_session.rs +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_session -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-18, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_session -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_session.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_session using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_session::WeightInfo for SubstrateWeight { - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:1 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn set_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `397` - // Estimated: `3862` - // Minimum execution time: 21_605_000 picoseconds. - Weight::from_parts(22_113_000, 3862) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Session::NextKeys` (r:1 w:1) - /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Session::KeyOwner` (r:0 w:1) - /// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn purge_keys() -> Weight { - // Proof Size summary in bytes: - // Measured: `346` - // Estimated: `3811` - // Minimum execution time: 14_881_000 picoseconds. - Weight::from_parts(15_379_000, 3811) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_stream_payment.rs b/runtime/flashbox/src/weights/pallet_stream_payment.rs deleted file mode 100644 index 3d3fa40..0000000 --- a/runtime/flashbox/src/weights/pallet_stream_payment.rs +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_stream_payment -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_stream_payment -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_stream_payment.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_stream_payment using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_stream_payment::WeightInfo for SubstrateWeight { - /// Storage: `StreamPayment::NextStreamId` (r:1 w:1) - /// Proof: `StreamPayment::NextStreamId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:1 w:1) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `StreamPayment::LookupStreamsWithTarget` (r:0 w:1) - /// Proof: `StreamPayment::LookupStreamsWithTarget` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `StreamPayment::LookupStreamsWithSource` (r:0 w:1) - /// Proof: `StreamPayment::LookupStreamsWithSource` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `StreamPayment::Streams` (r:0 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn open_stream() -> Weight { - // Proof Size summary in bytes: - // Measured: `106` - // Estimated: `3593` - // Minimum execution time: 60_457_000 picoseconds. - Weight::from_parts(61_394_000, 3593) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - /// Storage: `StreamPayment::LookupStreamsWithTarget` (r:0 w:1) - /// Proof: `StreamPayment::LookupStreamsWithTarget` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `StreamPayment::LookupStreamsWithSource` (r:0 w:1) - /// Proof: `StreamPayment::LookupStreamsWithSource` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn close_stream() -> Weight { - // Proof Size summary in bytes: - // Measured: `579` - // Estimated: `6196` - // Minimum execution time: 123_881_000 picoseconds. - Weight::from_parts(126_338_000, 6196) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - fn perform_payment() -> Weight { - // Proof Size summary in bytes: - // Measured: `579` - // Estimated: `6196` - // Minimum execution time: 86_906_000 picoseconds. - Weight::from_parts(88_817_000, 6196) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - fn request_change_immediate() -> Weight { - // Proof Size summary in bytes: - // Measured: `579` - // Estimated: `6196` - // Minimum execution time: 125_805_000 picoseconds. - Weight::from_parts(128_165_000, 6196) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn request_change_delayed() -> Weight { - // Proof Size summary in bytes: - // Measured: `247` - // Estimated: `3712` - // Minimum execution time: 15_225_000 picoseconds. - Weight::from_parts(15_712_000, 3712) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - fn accept_requested_change() -> Weight { - // Proof Size summary in bytes: - // Measured: `617` - // Estimated: `6196` - // Minimum execution time: 117_052_000 picoseconds. - Weight::from_parts(118_871_000, 6196) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - fn cancel_change_request() -> Weight { - // Proof Size summary in bytes: - // Measured: `285` - // Estimated: `3750` - // Minimum execution time: 11_259_000 picoseconds. - Weight::from_parts(11_693_000, 3750) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `StreamPayment::Streams` (r:1 w:1) - /// Proof: `StreamPayment::Streams` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Balances::Holds` (r:1 w:1) - /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(67), added: 2542, mode: `MaxEncodedLen`) - fn immediately_change_deposit() -> Weight { - // Proof Size summary in bytes: - // Measured: `579` - // Estimated: `6196` - // Minimum execution time: 116_771_000 picoseconds. - Weight::from_parts(118_428_000, 6196) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_sudo.rs b/runtime/flashbox/src/weights/pallet_sudo.rs deleted file mode 100644 index c4f0827..0000000 --- a/runtime/flashbox/src/weights/pallet_sudo.rs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_sudo -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_sudo -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_sudo.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_sudo using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_sudo::WeightInfo for SubstrateWeight { - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn set_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `98` - // Estimated: `1517` - // Minimum execution time: 11_936_000 picoseconds. - Weight::from_parts(12_198_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn sudo() -> Weight { - // Proof Size summary in bytes: - // Measured: `98` - // Estimated: `1517` - // Minimum execution time: 13_121_000 picoseconds. - Weight::from_parts(13_497_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:0) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn sudo_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `98` - // Estimated: `1517` - // Minimum execution time: 13_275_000 picoseconds. - Weight::from_parts(13_659_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - } - /// Storage: `Sudo::Key` (r:1 w:1) - /// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`) - fn remove_key() -> Weight { - // Proof Size summary in bytes: - // Measured: `98` - // Estimated: `1517` - // Minimum execution time: 10_876_000 picoseconds. - Weight::from_parts(11_291_000, 1517) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_timestamp.rs b/runtime/flashbox/src/weights/pallet_timestamp.rs deleted file mode 100644 index 5118027..0000000 --- a/runtime/flashbox/src/weights/pallet_timestamp.rs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_timestamp -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_timestamp -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_timestamp.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_timestamp using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_timestamp::WeightInfo for SubstrateWeight { - /// Storage: `Timestamp::Now` (r:1 w:1) - /// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) - /// Storage: `System::Digest` (r:1 w:0) - /// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - fn set() -> Weight { - // Proof Size summary in bytes: - // Measured: `6` - // Estimated: `1493` - // Minimum execution time: 7_092_000 picoseconds. - Weight::from_parts(7_334_000, 1493) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - fn on_finalize() -> Weight { - // Proof Size summary in bytes: - // Measured: `57` - // Estimated: `0` - // Minimum execution time: 4_388_000 picoseconds. - Weight::from_parts(4_628_000, 0) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_treasury.rs b/runtime/flashbox/src/weights/pallet_treasury.rs deleted file mode 100644 index aa6a136..0000000 --- a/runtime/flashbox/src/weights/pallet_treasury.rs +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_treasury -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_treasury -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_treasury.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_treasury using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_treasury::WeightInfo for SubstrateWeight { - /// Storage: `Treasury::ProposalCount` (r:1 w:1) - /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Proposals` (r:0 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn spend_local() -> Weight { - // Proof Size summary in bytes: - // Measured: `80` - // Estimated: `1887` - // Minimum execution time: 15_524_000 picoseconds. - Weight::from_parts(15_992_000, 1887) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Treasury::ProposalCount` (r:1 w:1) - /// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Proposals` (r:0 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - fn propose_spend() -> Weight { - // Proof Size summary in bytes: - // Measured: `181` - // Estimated: `1489` - // Minimum execution time: 30_328_000 picoseconds. - Weight::from_parts(31_001_000, 1489) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Treasury::Proposals` (r:1 w:1) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn reject_proposal() -> Weight { - // Proof Size summary in bytes: - // Measured: `479` - // Estimated: `6196` - // Minimum execution time: 46_724_000 picoseconds. - Weight::from_parts(47_469_000, 6196) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Treasury::Proposals` (r:1 w:0) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 99]`. - fn approve_proposal(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `508 + p * (8 ±0)` - // Estimated: `3573` - // Minimum execution time: 11_626_000 picoseconds. - Weight::from_parts(14_814_330, 3573) - // Standard Error: 1_792 - .saturating_add(Weight::from_parts(101_762, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - fn remove_approval() -> Weight { - // Proof Size summary in bytes: - // Measured: `165` - // Estimated: `1887` - // Minimum execution time: 9_040_000 picoseconds. - Weight::from_parts(9_266_000, 1887) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `System::Account` (r:199 w:199) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Deactivated` (r:1 w:1) - /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Balances::InactiveIssuance` (r:1 w:1) - /// Proof: `Balances::InactiveIssuance` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Approvals` (r:1 w:1) - /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Proposals` (r:99 w:99) - /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(108), added: 2583, mode: `MaxEncodedLen`) - /// The range of component `p` is `[0, 99]`. - fn on_initialize_proposals(p: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `413 + p * (253 ±0)` - // Estimated: `3593 + p * (5206 ±0)` - // Minimum execution time: 24_123_000 picoseconds. - Weight::from_parts(36_152_759, 3593) - // Standard Error: 10_825 - .saturating_add(Weight::from_parts(41_249_001, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(4_u64)) - .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(p.into()))) - .saturating_add(T::DbWeight::get().writes(4_u64)) - .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(p.into()))) - .saturating_add(Weight::from_parts(0, 5206).saturating_mul(p.into())) - } - /// Storage: `Treasury::SpendCount` (r:1 w:1) - /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Spends` (r:0 w:1) - /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - fn spend() -> Weight { - // Proof Size summary in bytes: - // Measured: `80` - // Estimated: `1489` - // Minimum execution time: 14_191_000 picoseconds. - Weight::from_parts(14_697_000, 1489) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) - } - /// Storage: `Treasury::Spends` (r:1 w:1) - /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:2) - /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) - fn payout() -> Weight { - // Proof Size summary in bytes: - // Measured: `478` - // Estimated: `6196` - // Minimum execution time: 62_085_000 picoseconds. - Weight::from_parts(62_976_000, 6196) - .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } - /// Storage: `Treasury::Spends` (r:1 w:1) - /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - fn check_status() -> Weight { - // Proof Size summary in bytes: - // Measured: `198` - // Estimated: `3534` - // Minimum execution time: 15_886_000 picoseconds. - Weight::from_parts(16_124_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `Treasury::Spends` (r:1 w:1) - /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(69), added: 2544, mode: `MaxEncodedLen`) - fn void_spend() -> Weight { - // Proof Size summary in bytes: - // Measured: `198` - // Estimated: `3534` - // Minimum execution time: 14_957_000 picoseconds. - Weight::from_parts(15_332_000, 3534) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_tx_pause.rs b/runtime/flashbox/src/weights/pallet_tx_pause.rs deleted file mode 100644 index bb1c15d..0000000 --- a/runtime/flashbox/src/weights/pallet_tx_pause.rs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_tx_pause -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_tx_pause -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_tx_pause.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_tx_pause using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_tx_pause::WeightInfo for SubstrateWeight { - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn pause() -> Weight { - // Proof Size summary in bytes: - // Measured: `4` - // Estimated: `3997` - // Minimum execution time: 15_084_000 picoseconds. - Weight::from_parts(15_431_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } - /// Storage: `TxPause::PausedCalls` (r:1 w:1) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn unpause() -> Weight { - // Proof Size summary in bytes: - // Measured: `566` - // Estimated: `3997` - // Minimum execution time: 20_916_000 picoseconds. - Weight::from_parts(21_387_000, 3997) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(1_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/src/weights/pallet_utility.rs b/runtime/flashbox/src/weights/pallet_utility.rs deleted file mode 100644 index 533ad80..0000000 --- a/runtime/flashbox/src/weights/pallet_utility.rs +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - - -//! Autogenerated weights for pallet_utility -//! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2024-04-12, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` -//! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `benchmark-1`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` -//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("flashbox_dev"), DB CACHE: 1024 - -// Executed Command: -// ./target/release/tanssi-node -// benchmark -// pallet -// --execution=wasm -// --wasm-execution=compiled -// --pallet -// pallet_utility -// --extrinsic -// * -// --chain=flashbox_dev -// --steps -// 50 -// --repeat -// 20 -// --template=benchmarking/frame-weight-runtime-template.hbs -// --json-file -// raw.json -// --output -// tmp/flashbox_weights/pallet_utility.rs - -#![cfg_attr(rustfmt, rustfmt_skip)] -#![allow(unused_parens)] -#![allow(unused_imports)] - -use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; - -/// Weights for pallet_utility using the Substrate node and recommended hardware. -pub struct SubstrateWeight(PhantomData); -impl pallet_utility::WeightInfo for SubstrateWeight { - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 6_001_000 picoseconds. - Weight::from_parts(19_356_702, 3997) - // Standard Error: 1_787 - .saturating_add(Weight::from_parts(6_067_907, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - fn as_derivative() -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 12_529_000 picoseconds. - Weight::from_parts(13_167_000, 3997) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn batch_all(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 5_747_000 picoseconds. - Weight::from_parts(25_146_354, 3997) - // Standard Error: 1_662 - .saturating_add(Weight::from_parts(6_403_497, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } - fn dispatch_as() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 8_541_000 picoseconds. - Weight::from_parts(8_935_000, 0) - } - /// Storage: `MaintenanceMode::MaintenanceMode` (r:1 w:0) - /// Proof: `MaintenanceMode::MaintenanceMode` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) - /// Storage: `TxPause::PausedCalls` (r:1 w:0) - /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) - /// The range of component `c` is `[0, 1000]`. - fn force_batch(c: u32, ) -> Weight { - // Proof Size summary in bytes: - // Measured: `46` - // Estimated: `3997` - // Minimum execution time: 5_720_000 picoseconds. - Weight::from_parts(19_309_335, 3997) - // Standard Error: 1_766 - .saturating_add(Weight::from_parts(6_099_488, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } -} \ No newline at end of file diff --git a/runtime/flashbox/tests/common/mod.rs b/runtime/flashbox/tests/common/mod.rs deleted file mode 100644 index 27d4671..0000000 --- a/runtime/flashbox/tests/common/mod.rs +++ /dev/null @@ -1,655 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use { - crate::UNIT, - cumulus_primitives_core::{ParaId, PersistedValidationData}, - cumulus_primitives_parachain_inherent::ParachainInherentData, - dp_consensus::runtime_decl_for_tanssi_authority_assignment_api::TanssiAuthorityAssignmentApi, - flashbox_runtime::{ - AuthorInherent, BlockProductionCost, CollatorAssignmentCost, MaxBootNodeUrlLen, - MaxBootNodes, MaxLengthTokenSymbol, - }, - frame_support::{ - assert_ok, - traits::{OnFinalize, OnInitialize}, - }, - nimbus_primitives::{NimbusId, NIMBUS_ENGINE_ID}, - pallet_collator_assignment_runtime_api::runtime_decl_for_collator_assignment_api::CollatorAssignmentApi, - pallet_registrar_runtime_api::ContainerChainGenesisData, - pallet_services_payment::{ProvideBlockProductionCost, ProvideCollatorAssignmentCost}, - parity_scale_codec::{Decode, Encode, MaxEncodedLen}, - polkadot_parachain_primitives::primitives::HeadData, - sp_consensus_aura::AURA_ENGINE_ID, - sp_consensus_slots::Slot, - sp_core::{Get, Pair}, - sp_runtime::{traits::Dispatchable, BoundedVec, BuildStorage, Digest, DigestItem}, - sp_std::collections::btree_map::BTreeMap, - test_relay_sproof_builder::ParaHeaderSproofBuilder, -}; - -pub use flashbox_runtime::{ - AccountId, AuthorNoting, AuthorityAssignment, AuthorityMapping, Balance, Balances, - CollatorAssignment, Configuration, DataPreservers, InflationRewards, Initializer, - Invulnerables, ParachainInfo, Proxy, ProxyType, Registrar, RewardsPortion, Runtime, - RuntimeCall, ServicesPayment, Session, StreamPayment, System, TransactionPayment, -}; - -pub fn session_to_block(n: u32) -> u32 { - let block_number = flashbox_runtime::Period::get() * n; - - // Add 1 because the block that emits the NewSession event cannot contain any extrinsics, - // so this is the first block of the new session that can actually be used - block_number + 1 -} - -#[derive(Debug, Clone, Eq, PartialEq)] -pub struct RunSummary { - pub author_id: AccountId, - pub inflation: Balance, -} - -pub fn run_to_session(n: u32) { - run_to_block(session_to_block(n)); -} - -/// Utility function that advances the chain to the desired block number. -/// -/// After this function returns, the current block number will be `n`, and the block will be "open", -/// meaning that on_initialize has been executed, but on_finalize has not. To execute on_finalize as -/// well, for example to test a runtime api, manually call `end_block` after this, run the test, and -/// call `start_block` to ensure that this function keeps working as expected. -/// Extrinsics should always be executed before on_finalize. -pub fn run_to_block(n: u32) -> BTreeMap { - let current_block_number = System::block_number(); - assert!( - current_block_number < n, - "run_to_block called with block {} when current block is {}", - n, - current_block_number - ); - let mut summaries = BTreeMap::new(); - - while System::block_number() < n { - let summary = run_block(); - let block_number = System::block_number(); - summaries.insert(block_number, summary); - } - - summaries -} - -pub fn insert_authorities_and_slot_digests(slot: u64) { - let authorities = - Runtime::para_id_authorities(ParachainInfo::get()).expect("authorities should be set"); - - let authority: NimbusId = authorities[slot as usize % authorities.len()].clone(); - - let pre_digest = Digest { - logs: vec![ - DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode()), - DigestItem::PreRuntime(NIMBUS_ENGINE_ID, authority.encode()), - ], - }; - - System::reset_events(); - System::initialize( - &(System::block_number() + 1), - &System::parent_hash(), - &pre_digest, - ); -} - -// Used to create the next block inherent data -#[derive(Clone, Encode, Decode, Default, PartialEq, Debug, scale_info::TypeInfo, MaxEncodedLen)] -pub struct MockInherentData { - pub random_seed: Option<[u8; 32]>, -} - -fn take_new_inherent_data() -> Option { - let data: Option = - frame_support::storage::unhashed::take(b"__mock_new_inherent_data"); - - data -} - -#[derive(Clone, Encode, Decode, PartialEq, Debug, scale_info::TypeInfo, MaxEncodedLen)] -enum RunBlockState { - Start(u32), - End(u32), -} - -impl RunBlockState { - fn assert_can_advance(&self, new_state: &RunBlockState) { - match self { - RunBlockState::Start(n) => { - assert_eq!( - new_state, - &RunBlockState::End(*n), - "expected a call to end_block({}), but user called {:?}", - *n, - new_state - ); - } - RunBlockState::End(n) => { - assert_eq!( - new_state, - &RunBlockState::Start(*n + 1), - "expected a call to start_block({}), but user called {:?}", - *n + 1, - new_state - ) - } - } - } -} - -fn advance_block_state_machine(new_state: RunBlockState) { - if frame_support::storage::unhashed::exists(b"__mock_is_xcm_test") { - // Disable this check in XCM tests, because the XCM emulator runs on_initialize and - // on_finalize automatically - return; - } - let old_state: RunBlockState = - frame_support::storage::unhashed::get(b"__mock_debug_block_state").unwrap_or( - // Initial state is expecting a call to start() with block number 1, so old state should be - // end of block 0 - RunBlockState::End(0), - ); - old_state.assert_can_advance(&new_state); - frame_support::storage::unhashed::put(b"__mock_debug_block_state", &new_state); -} - -pub fn start_block() -> RunSummary { - let block_number = System::block_number(); - advance_block_state_machine(RunBlockState::Start(block_number + 1)); - let mut slot = current_slot() + 1; - if block_number == 0 { - // Hack to avoid breaking all tests. When the current block is 1, the slot number should be - // 1. But all of our tests assume it will be 0. So use slot number = block_number - 1. - slot = 0; - } - - let maybe_mock_inherent = take_new_inherent_data(); - - if let Some(mock_inherent_data) = maybe_mock_inherent { - set_parachain_inherent_data(mock_inherent_data); - } - - insert_authorities_and_slot_digests(slot); - - // Initialize the new block - CollatorAssignment::on_initialize(System::block_number()); - Session::on_initialize(System::block_number()); - Initializer::on_initialize(System::block_number()); - AuthorInherent::on_initialize(System::block_number()); - - // `Initializer::on_finalize` needs to run at least one to have - // author mapping setup. - let author_id = current_author(); - - let current_issuance = Balances::total_issuance(); - InflationRewards::on_initialize(System::block_number()); - let new_issuance = Balances::total_issuance(); - - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"AsyncBacking", b"SlotInfo"), - // TODO: this should be 0? - &(Slot::from(slot), 1), - ); - - pallet_author_inherent::Pallet::::kick_off_authorship_validation(None.into()) - .expect("author inherent to dispatch correctly"); - - RunSummary { - author_id, - inflation: new_issuance - current_issuance, - } -} - -pub fn end_block() { - let block_number = System::block_number(); - advance_block_state_machine(RunBlockState::End(block_number)); - // Finalize the block - CollatorAssignment::on_finalize(System::block_number()); - Session::on_finalize(System::block_number()); - Initializer::on_finalize(System::block_number()); - AuthorInherent::on_finalize(System::block_number()); - TransactionPayment::on_finalize(System::block_number()); -} - -pub fn run_block() -> RunSummary { - end_block(); - let summary = start_block(); - - summary -} - -/// Mock the inherent that sets validation data in ParachainSystem, which -/// contains the `relay_chain_block_number`, which is used in `collator-assignment` as a -/// source of randomness. -pub fn set_parachain_inherent_data(mock_inherent_data: MockInherentData) { - use { - cumulus_primitives_core::relay_chain::well_known_keys, - cumulus_test_relay_sproof_builder::RelayStateSproofBuilder, - }; - - let relay_sproof = RelayStateSproofBuilder { - para_id: 100u32.into(), - included_para_head: Some(HeadData(vec![1, 2, 3])), - current_slot: (current_slot()).into(), - additional_key_values: if mock_inherent_data.random_seed.is_some() { - vec![( - well_known_keys::CURRENT_BLOCK_RANDOMNESS.to_vec(), - Some(mock_inherent_data.random_seed).encode(), - )] - } else { - vec![] - }, - ..Default::default() - }; - - let (relay_parent_storage_root, relay_chain_state) = relay_sproof.into_state_root_and_proof(); - let vfp = PersistedValidationData { - relay_parent_number: 1u32, - relay_parent_storage_root, - ..Default::default() - }; - let parachain_inherent_data = ParachainInherentData { - validation_data: vfp, - relay_chain_state, - downward_messages: Default::default(), - horizontal_messages: Default::default(), - }; - - // Delete existing flag to avoid error - // 'ValidationData must be updated only once in a block' - // TODO: this is a hack - frame_support::storage::unhashed::kill(&frame_support::storage::storage_prefix( - b"ParachainSystem", - b"ValidationData", - )); - - assert_ok!(RuntimeCall::ParachainSystem( - cumulus_pallet_parachain_system::Call::::set_validation_data { - data: parachain_inherent_data - } - ) - .dispatch(inherent_origin())); -} - -#[derive(Default, Clone)] -pub struct ParaRegistrationParams { - para_id: u32, - genesis_data: ContainerChainGenesisData, - bootnodes: Vec>, - block_production_credits: u32, - collator_assignment_credits: u32, -} - -impl - From<( - u32, - ContainerChainGenesisData, - Vec>, - u32, - u32, - )> for ParaRegistrationParams -{ - fn from( - value: ( - u32, - ContainerChainGenesisData, - Vec>, - u32, - u32, - ), - ) -> Self { - Self { - para_id: value.0, - genesis_data: value.1, - bootnodes: value.2, - block_production_credits: value.3, - collator_assignment_credits: value.4, - } - } -} - -pub fn default_config() -> pallet_configuration::HostConfiguration { - pallet_configuration::HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 2, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - } -} - -pub struct ExtBuilder { - // endowed accounts with balances - balances: Vec<(AccountId, Balance)>, - // [collator, amount] - collators: Vec<(AccountId, Balance)>, - // sudo key - sudo: Option, - // list of registered para ids: para_id, genesis_data, boot_nodes, block_credits, session_credits - para_ids: Vec, - // configuration to apply - config: pallet_configuration::HostConfiguration, - own_para_id: Option, -} - -impl Default for ExtBuilder { - fn default() -> Self { - Self { - balances: vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - ], - collators: vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - ], - sudo: Default::default(), - para_ids: Default::default(), - config: default_config(), - own_para_id: Default::default(), - } - } -} - -impl ExtBuilder { - pub fn with_balances(mut self, balances: Vec<(AccountId, Balance)>) -> Self { - self.balances = balances; - self - } - - pub fn with_sudo(mut self, sudo: AccountId) -> Self { - self.sudo = Some(sudo); - self - } - - pub fn with_collators(mut self, collators: Vec<(AccountId, Balance)>) -> Self { - self.collators = collators; - self - } - - pub fn with_para_ids(mut self, para_ids: Vec) -> Self { - self.para_ids = para_ids; - self - } - - pub fn with_config(mut self, config: pallet_configuration::HostConfiguration) -> Self { - self.config = config; - self - } - - pub fn build_storage(self) -> sp_core::storage::Storage { - let mut t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - - pallet_balances::GenesisConfig:: { - balances: self.balances, - } - .assimilate_storage(&mut t) - .unwrap(); - - // We need to initialize these pallets first. When initializing pallet-session, - // these values will be taken into account for collator-assignment. - - pallet_registrar::GenesisConfig:: { - para_ids: self - .para_ids - .iter() - .cloned() - .map(|registered_para| { - (registered_para.para_id.into(), registered_para.genesis_data) - }) - .collect(), - } - .assimilate_storage(&mut t) - .unwrap(); - - pallet_services_payment::GenesisConfig:: { - para_id_credits: self - .para_ids - .clone() - .into_iter() - .map(|registered_para| { - ( - registered_para.para_id.into(), - registered_para.block_production_credits, - registered_para.collator_assignment_credits, - ) - .into() - }) - .collect(), - } - .assimilate_storage(&mut t) - .unwrap(); - - pallet_data_preservers::GenesisConfig:: { - para_id_boot_nodes: self - .para_ids - .into_iter() - .map(|registered_para| (registered_para.para_id.into(), registered_para.bootnodes)) - .collect(), - _phantom: Default::default(), - } - .assimilate_storage(&mut t) - .unwrap(); - - pallet_configuration::GenesisConfig:: { - config: self.config, - ..Default::default() - } - .assimilate_storage(&mut t) - .unwrap(); - - if let Some(own_para_id) = self.own_para_id { - parachain_info::GenesisConfig:: { - parachain_id: own_para_id, - ..Default::default() - } - .assimilate_storage(&mut t) - .unwrap(); - } - - if !self.collators.is_empty() { - // We set invulnerables in pallet_invulnerables - let invulnerables: Vec = self - .collators - .clone() - .into_iter() - .map(|(account, _balance)| account) - .collect(); - - pallet_invulnerables::GenesisConfig:: { - invulnerables: invulnerables.clone(), - } - .assimilate_storage(&mut t) - .unwrap(); - - // But we also initialize their keys in the session pallet - let keys: Vec<_> = self - .collators - .into_iter() - .map(|(account, _balance)| { - let nimbus_id = get_aura_id_from_seed(&account.to_string()); - ( - account.clone(), - account, - flashbox_runtime::SessionKeys { nimbus: nimbus_id }, - ) - }) - .collect(); - pallet_session::GenesisConfig:: { keys } - .assimilate_storage(&mut t) - .unwrap(); - } - pallet_sudo::GenesisConfig:: { key: self.sudo } - .assimilate_storage(&mut t) - .unwrap(); - t - } - - pub fn build(self) -> sp_io::TestExternalities { - let t = self.build_storage(); - let mut ext = sp_io::TestExternalities::new(t); - - ext.execute_with(|| { - // Start block 1 - start_block(); - set_parachain_inherent_data(Default::default()); - }); - ext - } -} - -pub fn root_origin() -> ::RuntimeOrigin { - ::RuntimeOrigin::root() -} - -pub fn origin_of(account_id: AccountId) -> ::RuntimeOrigin { - ::RuntimeOrigin::signed(account_id) -} - -pub fn inherent_origin() -> ::RuntimeOrigin { - ::RuntimeOrigin::none() -} - -/// Helper function to generate a crypto pair from seed -pub fn get_aura_id_from_seed(seed: &str) -> NimbusId { - sp_core::sr25519::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() - .into() -} - -pub fn get_orchestrator_current_author() -> Option { - let slot: u64 = current_slot(); - let orchestrator_collators = Runtime::parachain_collators(ParachainInfo::get())?; - let author_index = slot % orchestrator_collators.len() as u64; - let account = orchestrator_collators.get(author_index as usize)?; - Some(account.clone()) -} -/// Mocks the author noting inherent to insert the data we -pub fn set_author_noting_inherent_data(builder: ParaHeaderSproofBuilder) { - let (relay_storage_root, relay_storage_proof) = builder.into_state_root_and_proof(); - - // For now we directly touch parachain_system storage to set the relay state root. - // TODO: Properly set the parachain_system inherent, which require a sproof builder combining - // what is required by parachain_system and author_noting. - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"ParachainSystem", b"ValidationData"), - &PersistedValidationData { - parent_head: HeadData(Default::default()), - relay_parent_number: 0u32, - relay_parent_storage_root: relay_storage_root, - max_pov_size: 0u32, - }, - ); - - // But we also need to store the new proof submitted - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"ParachainSystem", b"RelayStateProof"), - &relay_storage_proof, - ); - - assert_ok!(RuntimeCall::AuthorNoting( - pallet_author_noting::Call::::set_latest_author_data { - data: tp_author_noting_inherent::OwnParachainInherentData { - relay_storage_proof, - } - } - ) - .dispatch(inherent_origin())); -} - -pub fn empty_genesis_data() -> ContainerChainGenesisData { - ContainerChainGenesisData { - storage: Default::default(), - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: Default::default(), - properties: Default::default(), - } -} - -pub fn dummy_boot_nodes() -> BoundedVec, MaxBootNodes> { - vec![BoundedVec::try_from( - b"/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" - .to_vec(), - ) - .unwrap()] - .try_into() - .unwrap() -} - -pub fn current_slot() -> u64 { - u64::from( - pallet_async_backing::SlotInfo::::get() - .unwrap_or_default() - .0, - ) -} - -pub fn authorities() -> Vec { - let session_index = Session::current_index(); - - AuthorityAssignment::collator_container_chain(session_index) - .expect("authorities should be set") - .orchestrator_chain -} - -pub fn current_author() -> AccountId { - let current_session = Session::current_index(); - let mapping = - pallet_authority_mapping::Pallet::::authority_id_mapping(current_session) - .expect("there is a mapping for the current session"); - - let author = pallet_author_inherent::Author::::get() - .expect("there should be a registered author"); - - mapping - .get(&author) - .expect("there is a mapping for the current author") - .clone() -} - -pub fn block_credits_to_required_balance(number_of_blocks: u32, para_id: ParaId) -> Balance { - let block_cost = BlockProductionCost::block_cost(¶_id).0; - u128::from(number_of_blocks).saturating_mul(block_cost) -} - -pub fn collator_assignment_credits_to_required_balance( - number_of_sessions: u32, - para_id: ParaId, -) -> Balance { - let collator_assignment_cost = CollatorAssignmentCost::collator_assignment_cost(¶_id).0; - u128::from(number_of_sessions).saturating_mul(collator_assignment_cost) -} - -pub const ALICE: [u8; 32] = [4u8; 32]; -pub const BOB: [u8; 32] = [5u8; 32]; -pub const CHARLIE: [u8; 32] = [6u8; 32]; -pub const DAVE: [u8; 32] = [7u8; 32]; -pub const EVE: [u8; 32] = [8u8; 32]; -pub const FERDIE: [u8; 32] = [9u8; 32]; diff --git a/runtime/flashbox/tests/integration_test.rs b/runtime/flashbox/tests/integration_test.rs deleted file mode 100644 index f165447..0000000 --- a/runtime/flashbox/tests/integration_test.rs +++ /dev/null @@ -1,3991 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg(test)] - -use { - common::*, - cumulus_primitives_core::{ParaId, Weight}, - dp_consensus::runtime_decl_for_tanssi_authority_assignment_api::TanssiAuthorityAssignmentApiV1, - dp_core::well_known_keys, - flashbox_runtime::{StreamPaymentAssetId, TimeUnit}, - frame_support::{assert_noop, assert_ok, BoundedVec}, - frame_system::ConsumedWeight, - nimbus_primitives::NIMBUS_KEY_ID, - pallet_author_noting::ContainerChainBlockInfo, - pallet_author_noting_runtime_api::runtime_decl_for_author_noting_api::AuthorNotingApi, - pallet_collator_assignment_runtime_api::runtime_decl_for_collator_assignment_api::CollatorAssignmentApi, - pallet_migrations::Migration, - pallet_registrar_runtime_api::{ - runtime_decl_for_registrar_api::RegistrarApi, ContainerChainGenesisData, - }, - parity_scale_codec::Encode, - runtime_common::migrations::MigrateServicesPaymentAddCollatorAssignmentCredits, - sp_consensus_aura::AURA_ENGINE_ID, - sp_core::Get, - sp_runtime::{ - traits::{BadOrigin, BlakeTwo256, OpaqueKeys}, - DigestItem, - }, - sp_std::vec, - test_relay_sproof_builder::{HeaderAs, ParaHeaderSproofBuilder, ParaHeaderSproofBuilderItem}, - tp_traits::SlotFrequency, -}; - -mod common; - -const UNIT: Balance = 1_000_000_000_000_000_000; - -#[test] -fn genesis_balances() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - // Remove ALICE and BOB from collators - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - assert_eq!( - Balances::usable_balance(AccountId::from(ALICE)), - 210_000 * UNIT, - ); - assert_eq!( - Balances::usable_balance(AccountId::from(BOB)), - 100_000 * UNIT, - ); - }); -} - -#[test] -fn genesis_para_registrar() { - ExtBuilder::default() - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - }); -} - -#[test] -fn genesis_para_registrar_deregister() { - ExtBuilder::default() - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - - run_to_block(2); - assert_ok!(Registrar::deregister(root_origin(), 1002.into()), ()); - - // Pending - assert_eq!( - Registrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![1001u32.into()]).unwrap())] - ); - - run_to_session(1); - assert_eq!( - Registrar::pending_registered_para_ids(), - vec![(2u32, BoundedVec::try_from(vec![1001u32.into()]).unwrap())] - ); - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - - run_to_session(2); - assert_eq!(Registrar::pending_registered_para_ids(), vec![]); - assert_eq!(Registrar::registered_para_ids(), vec![1001.into()]); - }); -} - -#[test] -fn genesis_para_registrar_runtime_api() { - ExtBuilder::default() - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - assert_eq!(Runtime::registered_paras(), vec![1001.into(), 1002.into()]); - - run_to_block(2); - assert_ok!(Registrar::deregister(root_origin(), 1002.into()), ()); - assert_eq!(Runtime::registered_paras(), vec![1001.into(), 1002.into()]); - - run_to_session(1); - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - assert_eq!(Runtime::registered_paras(), vec![1001.into(), 1002.into()]); - - run_to_session(2); - assert_eq!(Registrar::registered_para_ids(), vec![1001.into()]); - assert_eq!(Runtime::registered_paras(), vec![1001.into()]); - }); -} - -#[test] -fn genesis_para_registrar_container_chain_genesis_data_runtime_api() { - let genesis_data_1001 = empty_genesis_data(); - let genesis_data_1002 = ContainerChainGenesisData { - storage: vec![(b"key".to_vec(), b"value".to_vec()).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: vec![], - properties: Default::default(), - }; - ExtBuilder::default() - .with_para_ids(vec![ - (1001, genesis_data_1001.clone(), vec![], u32::MAX, u32::MAX).into(), - (1002, genesis_data_1002.clone(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - assert_eq!( - Registrar::registered_para_ids(), - vec![1001.into(), 1002.into()] - ); - assert_eq!(Runtime::registered_paras(), vec![1001.into(), 1002.into()]); - - assert_eq!( - Runtime::genesis_data(1001.into()).as_ref(), - Some(&genesis_data_1001) - ); - assert_eq!( - Runtime::genesis_data(1002.into()).as_ref(), - Some(&genesis_data_1002) - ); - assert_eq!(Runtime::genesis_data(1003.into()).as_ref(), None); - - // This API cannot be used to get the genesis data of the orchestrator chain, - // with id 100 - // TODO: where is that 100 defined? - assert_eq!(Runtime::genesis_data(100.into()).as_ref(), None); - - run_to_block(2); - assert_ok!(Registrar::deregister(root_origin(), 1002.into()), ()); - - assert_eq!(Runtime::genesis_data(1002.into()).as_ref(), Some(&genesis_data_1002), "Deregistered container chain genesis data should not be removed until after 2 sessions"); - - let genesis_data_1003 = ContainerChainGenesisData { - storage: vec![(b"key3".to_vec(), b"value3".to_vec()).into()], - name: Default::default(), - id: Default::default(), - fork_id: Default::default(), - extensions: vec![], - properties: Default::default(), - }; - assert_ok!( - Registrar::register( - origin_of(ALICE.into()), - 1003.into(), - genesis_data_1003.clone() - ), - () - ); - - // Registered container chains are inserted immediately - assert_eq!( - Runtime::genesis_data(1003.into()).as_ref(), - Some(&genesis_data_1003) - ); - - // Deregistered container chain genesis data is removed after 2 sessions - run_to_session(2u32); - assert_eq!(Runtime::genesis_data(1002.into()).as_ref(), None); - }); -} - -#[test] -fn test_author_collation_aura() { - ExtBuilder::default() - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(5); - // Assert current slot gets updated - assert_eq!(current_slot(), 4u64); - // slot 4, alice - assert!(current_author() == AccountId::from(ALICE)); - - run_to_block(6); - - assert_eq!(current_slot(), 5u64); - // slot 5, bob - assert!(current_author() == AccountId::from(BOB)); - }); -} - -#[test] -fn test_author_collation_aura_change_of_authorities_on_session() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // We change invulnerables - // We first need to set the keys - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { - nimbus: charlie_id.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { - nimbus: dave_id.clone(), - }, - vec![] - )); - - // Change invulnerables - assert_ok!(Invulnerables::remove_invulnerable( - root_origin(), - ALICE.into() - )); - assert_ok!(Invulnerables::remove_invulnerable( - root_origin(), - BOB.into() - )); - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - // SESSION CHANGE. First session. it takes 2 sessions to see the change - run_to_session(1u32); - let author = get_orchestrator_current_author().unwrap(); - - assert_eq!(current_author(), author); - assert!(authorities() == vec![alice_id.clone(), bob_id.clone()]); - - // Invulnerables should have triggered on new session authorities change - run_to_session(2u32); - let author_after_changes = get_orchestrator_current_author().unwrap(); - - assert_eq!(current_author(), author_after_changes); - assert_eq!(authorities(), vec![charlie_id, dave_id]); - }); -} - -#[test] -fn test_author_collation_aura_add_assigned_to_paras() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // We change invulnerables - // We first need to set the keys - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { nimbus: charlie_id }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { nimbus: dave_id }, - vec![] - )); - - // Add new invulnerables - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - // SESSION CHANGE. First session. it takes 2 sessions to see the change - run_to_session(1u32); - let author = get_orchestrator_current_author().unwrap(); - - assert_eq!(current_author(), author); - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - - // Invulnerables should have triggered on new session authorities change - // However charlie and dave should have gone to one para (1001) - run_to_session(2u32); - assert_eq!(authorities(), vec![alice_id, bob_id]); - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_authors_without_paras() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Only Alice and Bob collate for our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - // It does not matter if we insert more collators, only two will be assigned - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - - // Set moondance collators to min 2 max 5 - assert_ok!( - Configuration::set_min_orchestrator_collators(root_origin(), 2), - () - ); - assert_ok!( - Configuration::set_max_orchestrator_collators(root_origin(), 5), - () - ); - - run_to_session(2); - assert_eq!(authorities(), vec![alice_id, bob_id, charlie_id, dave_id]); - }); -} - -#[test] -fn test_authors_paras_inserted_a_posteriori() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance(1000, 1001.into()) - )); - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1002.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1002.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1002.into() - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1002.into(), - block_credits_to_required_balance(1000, 1002.into()) - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_authors_paras_inserted_a_posteriori_with_collators_already_assigned() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_config(pallet_configuration::HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 2, - max_orchestrator_collators: 5, - collators_per_container: 2, - full_rotation_period: 0, - ..Default::default() - }) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id, charlie_id, dave_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance(1000, 1001.into()) - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - - // Charlie and Dave are now assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - assert_eq!( - assignment.orchestrator_chain, - vec![ALICE.into(), BOB.into()] - ); - }); -} - -#[test] -fn test_paras_registered_but_zero_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None); - }); -} - -#[test] -fn test_paras_registered_but_not_enough_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - // Purchase 1 credit less that what is needed - let credits_1001 = flashbox_runtime::Period::get() - 1; - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None); - - // Now purchase the missing block credit - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - credits_1001 + 1 - )); - - run_to_session(4u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_paras_registered_but_only_credits_for_1_session() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - // Purchase only enough credits for 1 session - let credits_1001 = flashbox_runtime::Period::get(); - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // No credits are consumed if the container chain is not producing blocks - run_block(); - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, credits_1001); - - // Simulate block inclusion from container chain 1001 - let mut sproof = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, credits_1001 - 1); - - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - - // The container chain only produced one block, so it only consumed one block credit. - // (it could have produced more blocks, but at most it would have consumed `Period::get()` credits) - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, credits_1001 - 1); - }); -} - -#[test] -fn test_parachains_deregister_collators_re_assigned() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob are authorities - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - // Charlie and Dave to 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - assert_ok!(Registrar::deregister(root_origin(), 1001.into()), ()); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - run_to_session(2u32); - - // Charlie and Dave should be assigne dot para 1002 this time - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1002u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_parachains_deregister_collators_config_change_reassigned() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob are authorities - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - // Set orchestrator collators to 1 - assert_ok!( - Configuration::set_max_orchestrator_collators(root_origin(), 1), - () - ); - - // Set container chain collators to 3 - assert_ok!( - Configuration::set_collators_per_container(root_origin(), 3), - () - ); - - // Charlie and Dave to 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - run_to_session(2u32); - - // Charlie, Dave and BOB should be assigne dot para 1001 this time - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into(), BOB.into()] - ); - - assert_eq!(assignment.orchestrator_chain, vec![ALICE.into()]); - }); -} - -#[test] -fn test_orchestrator_collators_with_non_sufficient_collators() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - ]) - .with_collators(vec![(AccountId::from(ALICE), 210 * UNIT)]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(ALICE)); - - // Alice and Bob are authorities - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - - assert_eq!(authorities(), vec![alice_id]); - }); -} - -#[test] -fn test_configuration_on_session_change() { - ExtBuilder::default().build().execute_with(|| { - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - - assert_ok!(Configuration::set_max_collators(root_origin(), 50), ()); - run_to_session(1u32); - - assert_ok!( - Configuration::set_min_orchestrator_collators(root_origin(), 20), - () - ); - assert_eq!(Configuration::config().max_collators, 100); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - - run_to_session(2u32); - assert_ok!( - Configuration::set_collators_per_container(root_origin(), 10), - () - ); - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 2); - assert_eq!(Configuration::config().collators_per_container, 2); - - run_to_session(3u32); - - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - assert_eq!(Configuration::config().collators_per_container, 2); - - run_to_session(4u32); - - assert_eq!(Configuration::config().max_collators, 50); - assert_eq!(Configuration::config().min_orchestrator_collators, 20); - assert_eq!(Configuration::config().collators_per_container, 10); - }); -} - -#[test] -fn test_author_collation_aura_add_assigned_to_paras_runtime_api() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - assert_eq!( - Runtime::parachain_collators(100.into()), - Some(vec![ALICE.into(), BOB.into()]) - ); - assert_eq!(Runtime::parachain_collators(1001.into()), Some(vec![])); - assert_eq!( - Runtime::current_collator_parachain_assignment(ALICE.into()), - Some(100.into()) - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(ALICE.into()), - Some(100.into()) - ); - assert_eq!( - Runtime::current_collator_parachain_assignment(CHARLIE.into()), - None - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(CHARLIE.into()), - None - ); - - // We change invulnerables - // We first need to set the keys - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { nimbus: charlie_id }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { nimbus: dave_id }, - vec![] - )); - - // Set new invulnerables - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - // SESSION CHANGE. First session. it takes 2 sessions to see the change - run_to_session(1u32); - let author = get_orchestrator_current_author().unwrap(); - - assert_eq!(current_author(), author); - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - assert_eq!( - Runtime::parachain_collators(100.into()), - Some(vec![ALICE.into(), BOB.into()]) - ); - assert_eq!(Runtime::parachain_collators(1001.into()), Some(vec![])); - assert_eq!( - Runtime::current_collator_parachain_assignment(CHARLIE.into()), - None - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(CHARLIE.into()), - Some(1001.into()) - ); - - // Invulnerables should have triggered on new session authorities change - // However charlie and dave shoudl have gone to one para (1001) - run_to_session(2u32); - assert_eq!(authorities(), vec![alice_id, bob_id]); - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - assert_eq!( - Runtime::parachain_collators(100.into()), - Some(vec![ALICE.into(), BOB.into()]) - ); - assert_eq!( - Runtime::parachain_collators(1001.into()), - Some(vec![CHARLIE.into(), DAVE.into()]) - ); - assert_eq!( - Runtime::current_collator_parachain_assignment(CHARLIE.into()), - Some(1001.into()) - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(CHARLIE.into()), - Some(1001.into()) - ); - - // Remove BOB - assert_ok!(Invulnerables::remove_invulnerable( - root_origin(), - BOB.into() - )); - - run_to_session(3u32); - assert_eq!( - Runtime::parachain_collators(100.into()), - Some(vec![ALICE.into(), BOB.into()]) - ); - assert_eq!( - Runtime::parachain_collators(1001.into()), - Some(vec![CHARLIE.into(), DAVE.into()]) - ); - assert_eq!( - Runtime::current_collator_parachain_assignment(BOB.into()), - Some(100.into()) - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(BOB.into()), - None - ); - - run_to_session(4u32); - assert_eq!( - Runtime::parachain_collators(100.into()), - Some(vec![ALICE.into(), CHARLIE.into()]) - ); - assert_eq!(Runtime::parachain_collators(1001.into()), Some(vec![])); - assert_eq!( - Runtime::current_collator_parachain_assignment(BOB.into()), - None - ); - assert_eq!( - Runtime::future_collator_parachain_assignment(BOB.into()), - None - ); - }); -} - -#[test] -fn test_consensus_runtime_api() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!(Runtime::para_id_authorities(1001.into()), Some(vec![])); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(charlie_id.clone()), None); - assert_eq!(Runtime::check_para_id_assignment(dave_id.clone()), None); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { - nimbus: charlie_id.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { - nimbus: dave_id.clone(), - }, - vec![] - )); - - // Set new invulnerables - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - run_to_session(2u32); - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!( - Runtime::para_id_authorities(1001.into()), - Some(vec![charlie_id.clone(), dave_id.clone()]) - ); - assert_eq!( - Runtime::check_para_id_assignment(alice_id), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(bob_id), Some(100.into())); - assert_eq!( - Runtime::check_para_id_assignment(charlie_id), - Some(1001.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(dave_id), - Some(1001.into()) - ); - }); -} - -#[test] -fn test_consensus_runtime_api_session_changes() { - // The test shoul return always the assiignment on the next epoch - // Meaning that we need to see before the session change block - // if we can predict correctly - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!(Runtime::para_id_authorities(1001.into()), Some(vec![])); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(charlie_id.clone()), None); - assert_eq!(Runtime::check_para_id_assignment(dave_id.clone()), None); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { - nimbus: charlie_id.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { - nimbus: dave_id.clone(), - }, - vec![] - )); - - // Set new invulnerables - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - let session_two_edge = flashbox_runtime::Period::get() * 2; - // Let's run just 2 blocks before the session 2 change first - // Prediction should still be identical, as we are not in the - // edge of a session change - run_to_block(session_two_edge - 2); - - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!(Runtime::para_id_authorities(1001.into()), Some(vec![])); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(charlie_id.clone()), None); - assert_eq!(Runtime::check_para_id_assignment(dave_id.clone()), None); - - // Now we run to session edge -1. Here we should predict already with - // authorities of the next block! - run_to_block(session_two_edge - 1); - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!( - Runtime::para_id_authorities(1001.into()), - Some(vec![charlie_id.clone(), dave_id.clone()]) - ); - assert_eq!( - Runtime::check_para_id_assignment(alice_id), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(bob_id), Some(100.into())); - assert_eq!( - Runtime::check_para_id_assignment(charlie_id), - Some(1001.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(dave_id), - Some(1001.into()) - ); - }); -} - -#[test] -fn test_consensus_runtime_api_next_session() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - let charlie_id = get_aura_id_from_seed(&AccountId::from(CHARLIE).to_string()); - let dave_id = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!(Runtime::para_id_authorities(1001.into()), Some(vec![])); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(charlie_id.clone()), None); - assert_eq!(Runtime::check_para_id_assignment(dave_id.clone()), None); - - // In the next session the assignment will not change - assert_eq!( - Runtime::check_para_id_assignment_next_session(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(bob_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(charlie_id.clone()), - None, - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(dave_id.clone()), - None, - ); - - // Set CHARLIE and DAVE keys - assert_ok!(Session::set_keys( - origin_of(CHARLIE.into()), - flashbox_runtime::SessionKeys { - nimbus: charlie_id.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(DAVE.into()), - flashbox_runtime::SessionKeys { - nimbus: dave_id.clone(), - }, - vec![] - )); - - // Set new invulnerables - assert_ok!(Invulnerables::add_invulnerable( - root_origin(), - CHARLIE.into() - )); - assert_ok!(Invulnerables::add_invulnerable(root_origin(), DAVE.into())); - - let session_two_edge = flashbox_runtime::Period::get() * 2; - // Let's run just 2 blocks before the session 2 change first - // Prediction should still be identical, as we are not in the - // edge of a session change - run_to_block(session_two_edge - 2); - - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!(Runtime::para_id_authorities(1001.into()), Some(vec![])); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!(Runtime::check_para_id_assignment(charlie_id.clone()), None); - assert_eq!(Runtime::check_para_id_assignment(dave_id.clone()), None); - - // But in the next session the assignment will change, so future api returns different value - assert_eq!( - Runtime::check_para_id_assignment_next_session(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(bob_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(charlie_id.clone()), - Some(1001.into()), - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(dave_id.clone()), - Some(1001.into()), - ); - - // Now we run to session edge -1. Here we should predict already with - // authorities of the next block! - run_to_block(session_two_edge - 1); - assert_eq!( - Runtime::para_id_authorities(100.into()), - Some(vec![alice_id.clone(), bob_id.clone()]) - ); - assert_eq!( - Runtime::para_id_authorities(1001.into()), - Some(vec![charlie_id.clone(), dave_id.clone()]) - ); - assert_eq!( - Runtime::check_para_id_assignment(alice_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(bob_id.clone()), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(charlie_id.clone()), - Some(1001.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment(dave_id.clone()), - Some(1001.into()) - ); - - // check_para_id_assignment_next_session returns the same value as check_para_id_assignment - // because we are on a session boundary - assert_eq!( - Runtime::check_para_id_assignment_next_session(alice_id), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(bob_id), - Some(100.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(charlie_id), - Some(1001.into()) - ); - assert_eq!( - Runtime::check_para_id_assignment_next_session(dave_id), - Some(1001.into()) - ); - }); -} - -#[test] -fn test_author_noting_self_para_id_not_noting() { - ExtBuilder::default().build().execute_with(|| { - let mut sproof = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let self_para = parachain_info::Pallet::::get(); - let s = ParaHeaderSproofBuilderItem { - para_id: self_para, - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: Default::default(), - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - - set_author_noting_inherent_data(sproof); - - assert_eq!(AuthorNoting::latest_author(self_para), None); - }); -} - -#[test] -fn test_author_noting_not_self_para() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let mut sproof = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let other_para: ParaId = 1001u32.into(); - - // Charlie and Dave to 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - let s = ParaHeaderSproofBuilderItem { - para_id: other_para, - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - - set_author_noting_inherent_data(sproof); - - assert_eq!( - AuthorNoting::latest_author(other_para), - Some(ContainerChainBlockInfo { - block_number: 1, - author: AccountId::from(DAVE), - latest_slot_number: 0.into(), - }) - ); - }); -} - -#[test] -fn test_author_noting_set_author_and_kill_author_data() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let other_para: ParaId = 1001u32.into(); - - assert_ok!(AuthorNoting::set_author( - root_origin(), - other_para, - 1, - AccountId::from(DAVE), - 1.into() - )); - - assert_eq!( - AuthorNoting::latest_author(other_para), - Some(ContainerChainBlockInfo { - block_number: 1, - author: AccountId::from(DAVE), - latest_slot_number: 1.into(), - }) - ); - - assert_ok!(AuthorNoting::kill_author_data(root_origin(), other_para)); - - assert_eq!(AuthorNoting::latest_author(other_para), None); - }); -} - -#[test] -fn test_author_noting_set_author_and_kill_author_data_bad_origin() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let other_para: ParaId = 1001u32.into(); - - assert_noop!( - AuthorNoting::set_author( - origin_of(ALICE.into()), - other_para, - 1, - AccountId::from(DAVE), - 1.into() - ), - BadOrigin - ); - - assert_noop!( - AuthorNoting::kill_author_data(origin_of(ALICE.into()), other_para), - BadOrigin - ); - }); -} - -#[test] -fn test_author_noting_runtime_api() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let mut sproof = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let other_para: ParaId = 1001u32.into(); - - // Charlie and Dave to 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - let s = ParaHeaderSproofBuilderItem { - para_id: other_para, - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - - set_author_noting_inherent_data(sproof); - - assert_eq!( - AuthorNoting::latest_author(other_para), - Some(ContainerChainBlockInfo { - block_number: 1, - author: AccountId::from(DAVE), - latest_slot_number: 0.into(), - }) - ); - - assert_eq!( - Runtime::latest_author(other_para), - Some(AccountId::from(DAVE)) - ); - assert_eq!(Runtime::latest_block_number(other_para), Some(1)); - }); -} - -#[test] -fn session_keys_key_type_id() { - assert_eq!( - flashbox_runtime::SessionKeys::key_ids(), - vec![NIMBUS_KEY_ID] - ); -} - -#[test] -fn test_session_keys_with_authority_mapping() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - let key_mapping_session_0 = AuthorityMapping::authority_id_mapping(0).unwrap(); - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - let alice_id_2 = get_aura_id_from_seed("ALICE2"); - let bob_id_2 = get_aura_id_from_seed("BOB2"); - - assert_eq!(key_mapping_session_0.len(), 2); - assert_eq!(key_mapping_session_0.get(&alice_id), Some(&ALICE.into())); - assert_eq!(key_mapping_session_0.get(&bob_id), Some(&BOB.into())); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - - // Change Alice and Bob keys to something different - // for now lets change it to alice_2 and bob_2 - assert_ok!(Session::set_keys( - origin_of(ALICE.into()), - flashbox_runtime::SessionKeys { - nimbus: alice_id_2.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(BOB.into()), - flashbox_runtime::SessionKeys { - nimbus: bob_id_2.clone(), - }, - vec![] - )); - - run_to_session(1u32); - let key_mapping_session_0 = AuthorityMapping::authority_id_mapping(0).unwrap(); - assert_eq!(key_mapping_session_0.len(), 2); - assert_eq!(key_mapping_session_0.get(&alice_id), Some(&ALICE.into())); - assert_eq!(key_mapping_session_0.get(&bob_id), Some(&BOB.into())); - - let key_mapping_session_1 = AuthorityMapping::authority_id_mapping(1).unwrap(); - assert_eq!(key_mapping_session_1.len(), 2); - assert_eq!(key_mapping_session_1.get(&alice_id), Some(&ALICE.into())); - assert_eq!(key_mapping_session_1.get(&bob_id), Some(&BOB.into())); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - // - - run_to_session(2u32); - assert!(AuthorityMapping::authority_id_mapping(0).is_none()); - - let key_mapping_session_1 = AuthorityMapping::authority_id_mapping(1).unwrap(); - assert_eq!(key_mapping_session_1.len(), 2); - assert_eq!(key_mapping_session_1.get(&alice_id), Some(&ALICE.into())); - assert_eq!(key_mapping_session_1.get(&bob_id), Some(&BOB.into())); - - let key_mapping_session_2 = AuthorityMapping::authority_id_mapping(2).unwrap(); - assert_eq!(key_mapping_session_2.len(), 2); - assert_eq!(key_mapping_session_2.get(&alice_id_2), Some(&ALICE.into())); - assert_eq!(key_mapping_session_2.get(&bob_id_2), Some(&BOB.into())); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id_2, bob_id_2]); - }); -} - -#[test] -fn test_session_keys_with_authority_assignment() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - let alice_id_2 = get_aura_id_from_seed("ALICE2"); - let bob_id_2 = get_aura_id_from_seed("BOB2"); - - let key_mapping_session_0 = AuthorityAssignment::collator_container_chain(0).unwrap(); - assert_eq!( - key_mapping_session_0.orchestrator_chain, - vec![alice_id.clone(), bob_id.clone()], - ); - assert_eq!( - CollatorAssignment::collator_container_chain().orchestrator_chain, - vec![AccountId::from(ALICE), AccountId::from(BOB)], - ); - - let key_mapping_session_1 = AuthorityAssignment::collator_container_chain(1).unwrap(); - assert_eq!(key_mapping_session_1, key_mapping_session_0,); - let old_assignment_session_1 = - CollatorAssignment::pending_collator_container_chain().unwrap(); - assert_eq!( - old_assignment_session_1, - CollatorAssignment::collator_container_chain(), - ); - - let key_mapping_session_2 = AuthorityAssignment::collator_container_chain(2); - assert!(key_mapping_session_2.is_none()); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id.clone(), bob_id.clone()]); - - // Change Alice and Bob keys to something different - // for now lets change it to alice_2 and bob_2 - assert_ok!(Session::set_keys( - origin_of(ALICE.into()), - flashbox_runtime::SessionKeys { - nimbus: alice_id_2.clone(), - }, - vec![] - )); - assert_ok!(Session::set_keys( - origin_of(BOB.into()), - flashbox_runtime::SessionKeys { - nimbus: bob_id_2.clone(), - }, - vec![] - )); - - run_to_session(1u32); - let old_key_mapping_session_1 = key_mapping_session_1; - - // Session 0 got removed - let key_mapping_session_0 = AuthorityAssignment::collator_container_chain(0); - assert!(key_mapping_session_0.is_none()); - - // The values at session 1 did not change - let key_mapping_session_1 = AuthorityAssignment::collator_container_chain(1).unwrap(); - assert_eq!(key_mapping_session_1, old_key_mapping_session_1,); - assert_eq!( - CollatorAssignment::collator_container_chain(), - old_assignment_session_1, - ); - - // Session 2 uses the new keys - let key_mapping_session_2 = AuthorityAssignment::collator_container_chain(2).unwrap(); - assert_eq!( - key_mapping_session_2.orchestrator_chain, - vec![alice_id_2.clone(), bob_id_2.clone()], - ); - assert_eq!(CollatorAssignment::pending_collator_container_chain(), None); - - let key_mapping_session_3 = AuthorityAssignment::collator_container_chain(3); - assert!(key_mapping_session_3.is_none()); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id, bob_id]); - - run_to_session(2u32); - - // Session 1 got removed - let key_mapping_session_1 = AuthorityAssignment::collator_container_chain(1); - assert!(key_mapping_session_1.is_none()); - - // Session 2 uses the new keys - let key_mapping_session_2 = AuthorityAssignment::collator_container_chain(2).unwrap(); - assert_eq!( - key_mapping_session_2.orchestrator_chain, - vec![alice_id_2.clone(), bob_id_2.clone()], - ); - assert_eq!( - old_assignment_session_1, - CollatorAssignment::collator_container_chain(), - ); - - // Session 3 uses the new keys - let key_mapping_session_3 = AuthorityAssignment::collator_container_chain(3).unwrap(); - assert_eq!( - key_mapping_session_3.orchestrator_chain, - vec![alice_id_2.clone(), bob_id_2.clone()], - ); - assert_eq!(CollatorAssignment::pending_collator_container_chain(), None); - - let key_mapping_session_4 = AuthorityAssignment::collator_container_chain(4); - assert!(key_mapping_session_4.is_none()); - - // Everything should match to aura - assert_eq!(authorities(), vec![alice_id_2, bob_id_2]); - }); -} - -fn call_transfer( - dest: sp_runtime::MultiAddress, - value: u128, -) -> RuntimeCall { - RuntimeCall::Balances(pallet_balances::Call::transfer_allow_death { dest, value }) -} - -#[test] -fn test_proxy_any() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let delay = 0; - assert_ok!(Proxy::add_proxy( - origin_of(ALICE.into()), - AccountId::from(BOB).into(), - ProxyType::Any, - delay - )); - - let balance_before = System::account(AccountId::from(BOB)).data.free; - let call = Box::new(call_transfer(AccountId::from(BOB).into(), 200_000)); - assert_ok!(Proxy::proxy( - origin_of(BOB.into()), - AccountId::from(ALICE).into(), - None, - call - )); - let balance_after = System::account(AccountId::from(BOB)).data.free; - - assert_eq!(balance_after, balance_before + 200_000); - }); -} - -#[test] -fn test_proxy_non_transfer() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - let delay = 0; - assert_ok!(Proxy::add_proxy( - origin_of(ALICE.into()), - AccountId::from(BOB).into(), - ProxyType::NonTransfer, - delay - )); - - let balance_before = System::account(AccountId::from(BOB)).data.free; - let call = Box::new(call_transfer(AccountId::from(BOB).into(), 200_000)); - // The extrinsic succeeds but the call is filtered, so no transfer is actually done - assert_ok!(Proxy::proxy( - origin_of(BOB.into()), - AccountId::from(ALICE).into(), - None, - call - )); - let balance_after = System::account(AccountId::from(BOB)).data.free; - - assert_eq!(balance_after, balance_before); - }); -} - -#[test] -fn test_proxy_utility() { - // All proxy types should be able to use Utility pallet, but we ensure - // subcalls don't allow to circumvent filters. - - // Dummy match to ensure we update this test when adding new proxy types. - match ProxyType::Any { - ProxyType::Any - | ProxyType::NonTransfer - | ProxyType::Governance - | ProxyType::Staking - | ProxyType::CancelProxy - | ProxyType::Balances - | ProxyType::Registrar - | ProxyType::SudoRegistrar => (), - }; - - // All except for any - let proxy_types = &[ - ProxyType::NonTransfer, - ProxyType::Governance, - ProxyType::Staking, - ProxyType::CancelProxy, - ProxyType::Balances, - ProxyType::Registrar, - ProxyType::SudoRegistrar, - ]; - - for &proxy_type in proxy_types { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_sudo(AccountId::from(ALICE)) - .build() - .execute_with(|| { - assert_ok!(Proxy::add_proxy( - origin_of(ALICE.into()), - AccountId::from(BOB).into(), - proxy_type, - 0 - )); - - let free_balance = Balances::free_balance(AccountId::from(BOB)); - - assert_ok!(Proxy::proxy( - origin_of(BOB.into()), - AccountId::from(ALICE).into(), - None, - Box::new( - pallet_sudo::Call::sudo { - call: Box::new( - pallet_utility::Call::batch { - calls: vec![pallet_balances::Call::force_set_balance { - who: AccountId::from(BOB).into(), - new_free: 42424242424242 - } - .into()] - } - .into() - ) - } - .into() - ) - )); - - assert_eq!(Balances::free_balance(AccountId::from(BOB)), free_balance); - }); - } -} - -#[test] -fn check_well_known_keys() { - use frame_support::traits::PalletInfo; - - // Pallet is named "Paras" in Polkadot. - assert_eq!( - well_known_keys::PARAS_HEADS_INDEX, - frame_support::storage::storage_prefix(b"Paras", b"Heads") - ); - - // Tanssi storage. Since we cannot access the storages themselves, - // we test the pallet prefix matches and then compute manually the full prefix. - assert_eq!( - flashbox_runtime::PalletInfo::name::(), - Some("AuthorityAssignment") - ); - assert_eq!( - well_known_keys::AUTHORITY_ASSIGNMENT_PREFIX, - frame_support::storage::storage_prefix(b"AuthorityAssignment", b"CollatorContainerChain") - ); - - assert_eq!( - flashbox_runtime::PalletInfo::name::(), - Some("Session") - ); - assert_eq!( - well_known_keys::SESSION_INDEX, - frame_support::storage::storage_prefix(b"Session", b"CurrentIndex") - ); -} - -#[test] -fn test_reward_to_invulnerable() { - // Alice, Bob, Charlie are invulnerables - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // We make delegations to ALICE so that she is an elligible candidate. - // However since she is an invulnerable she should get all the - // rewards. - - // wait for next session so that ALICE is elected - run_to_session(4u32); - - let account: AccountId = ALICE.into(); - let balance_before = System::account(account.clone()).data.free; - - let summary = (0..100) - .find_map(|_| { - let summary = run_block(); - if summary.author_id == ALICE.into() { - Some(summary) - } else { - None - } - }) - .unwrap_or_else(|| panic!("ALICE doesn't seem to author any blocks")); - - let balance_after = System::account(account).data.free; - - let all_rewards = RewardsPortion::get() * summary.inflation; - // rewards are shared between orchestrator and registered paras - let orchestrator_rewards = all_rewards / 3; - assert_eq!( - orchestrator_rewards, - balance_after - balance_before, - "alice should get the correct reward portion" - ); - }); -} - -#[test] -fn test_reward_to_invulnerable_with_key_change() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![(AccountId::from(ALICE), 210 * UNIT)]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - run_to_session(2u32); - - // change key, this should be reflected 2 sessions afterward - let alice_new_key = get_aura_id_from_seed(&AccountId::from(DAVE).to_string()); - assert_ok!(Session::set_keys( - origin_of(ALICE.into()), - flashbox_runtime::SessionKeys { - nimbus: alice_new_key, - }, - vec![] - )); - - run_to_session(4u32); - - let account: AccountId = ALICE.into(); - let balance_before = System::account(account.clone()).data.free; - - let summary = run_block(); - assert_eq!(summary.author_id, ALICE.into()); - - let balance_after = System::account(account).data.free; - - let all_rewards = RewardsPortion::get() * summary.inflation; - // rewards are shared between orchestrator and registered paras - let orchestrator_rewards = all_rewards / 3; - assert_eq!( - orchestrator_rewards, - balance_after - balance_before, - "alice should get the correct reward portion" - ); - }); -} - -#[test] -fn test_can_buy_credits_before_registering_para() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Try to buy the maximum amount of credits - let balance_before = System::account(AccountId::from(ALICE)).data.free; - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance(u32::MAX, 1001.into()) - )); - let balance_after = System::account(AccountId::from(ALICE)).data.free; - - // Now parachain tank should have this amount - let balance_tank = System::account(ServicesPayment::parachain_tank(1001.into())) - .data - .free; - - assert_eq!( - balance_tank, - block_credits_to_required_balance(u32::MAX, 1001.into()) - ); - - let expected_cost = block_credits_to_required_balance(u32::MAX, 1001.into()); - assert_eq!(balance_before - balance_after, expected_cost); - }); -} - -#[test] -fn test_cannot_mark_valid_para_with_no_bootnodes() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_noop!( - Registrar::mark_valid_for_collating(root_origin(), 1001.into()), - pallet_data_preservers::Error::::NoBootNodes, - ); - }); -} - -#[test] -fn test_can_buy_credits_before_registering_para_and_receive_free_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Try to buy (FreeBlockProductionCredits - 1) credits - let balance_before = System::account(AccountId::from(ALICE)).data.free; - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - block_credits_to_required_balance( - flashbox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into() - ) - )); - let balance_after = System::account(AccountId::from(ALICE)).data.free; - - // Now parachain tank should have this amount - let balance_tank = System::account(ServicesPayment::parachain_tank(1001.into())) - .data - .free; - - assert_eq!( - balance_tank, - block_credits_to_required_balance( - flashbox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into() - ) - ); - - let expected_cost = block_credits_to_required_balance( - flashbox_runtime::FreeBlockProductionCredits::get() - 1, - 1001.into(), - ); - assert_eq!(balance_before - balance_after, expected_cost); - - // Now register para - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We received aññ free credits, because we cannot have more than FreeBlockProductionCredits - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, flashbox_runtime::FreeBlockProductionCredits::get()); - }); -} - -#[test] -fn test_deregister_and_register_again_does_not_give_free_credits() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Register - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - ),); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - ),); - // We received free credits - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, flashbox_runtime::FreeBlockProductionCredits::get()); - // Deregister after 1 session - run_to_session(1); - assert_ok!(Registrar::deregister(root_origin(), 1001.into()), ()); - - run_to_session(3); - let credits_before_2nd_register = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - // We spent some credits because this container chain had collators for 1 session - assert_ne!( - credits_before_2nd_register, - flashbox_runtime::FreeBlockProductionCredits::get() - ); - // Register again - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - ),); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - ),); - // No more free credits - let credits = - pallet_services_payment::BlockProductionCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits, credits_before_2nd_register); - }); -} - -#[test] -fn test_register_parathread() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - - // Register - assert_ok!(Registrar::register_parathread( - origin_of(ALICE.into()), - 3001.into(), - SlotFrequency { min: 1, max: 1 }, - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 3001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 3001.into() - )); - - run_to_session(2); - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&ParaId::from(3001)], - vec![CHARLIE.into()] - ); - }); -} - -#[test] -fn test_ed_plus_block_credit_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(flashbox_runtime::Period::get(), 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(3u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_ed_plus_block_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(flashbox_runtime::Period::get(), 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should not be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_reassignment_ed_plus_two_block_credit_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - // On reassignment the blocks credits needed should be enough for the current session and the next one - let credits_1001 = - block_credits_to_required_balance(flashbox_runtime::Period::get() * 2, 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // Session 3 should still be assigned - run_to_session(3u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_reassignment_ed_plus_two_block_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = - block_credits_to_required_balance(flashbox_runtime::Period::get() * 2, 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(3u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_credits_with_purchase_can_be_combined() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Set 1 session of free credits and purchase 1 session of credits - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - flashbox_runtime::Period::get() - )); - let credits_1001 = - block_credits_to_required_balance(flashbox_runtime::Period::get(), 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} -#[test] -fn stream_payment_works() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 100_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - use pallet_stream_payment::{ChangeKind, StreamConfig}; - - assert_ok!(StreamPayment::open_stream( - origin_of(ALICE.into()), - BOB.into(), - StreamConfig { - rate: 2 * UNIT, - asset_id: StreamPaymentAssetId::Native, - time_unit: TimeUnit::BlockNumber, - }, - 1_000 * UNIT, - )); - - run_block(); - - assert_ok!(StreamPayment::perform_payment(origin_of(CHARLIE.into()), 0)); - assert_eq!( - Balances::free_balance(AccountId::from(BOB)), - 100_000 * UNIT + 2 * UNIT - ); - - assert_ok!(StreamPayment::request_change( - origin_of(ALICE.into()), - 0, - ChangeKind::Suggestion, - StreamConfig { - rate: 1 * UNIT, - asset_id: StreamPaymentAssetId::Native, - time_unit: TimeUnit::BlockNumber, - }, - None, - )); - - assert_ok!(StreamPayment::accept_requested_change( - origin_of(BOB.into()), - 0, - 1, // nonce - None, - )); - - run_block(); - - assert_ok!(StreamPayment::close_stream(origin_of(BOB.into()), 0)); - - assert_eq!( - Balances::free_balance(AccountId::from(BOB)), - 100_000 * UNIT + 3 * UNIT - ); - assert_eq!( - Balances::free_balance(AccountId::from(ALICE)), - 100_000 * UNIT - 3 * UNIT - ); - }); -} - -#[test] -fn test_ed_plus_collator_assignment_session_purchase_works() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // Simulate block inclusion from container chain 1001 - let mut sproof: ParaHeaderSproofBuilder = ParaHeaderSproofBuilder::default(); - let slot: u64 = 5; - let s = ParaHeaderSproofBuilderItem { - para_id: 1001.into(), - author_id: HeaderAs::NonEncoded(sp_runtime::generic::Header:: { - parent_hash: Default::default(), - number: 1, - state_root: Default::default(), - extrinsics_root: Default::default(), - digest: sp_runtime::generic::Digest { - logs: vec![DigestItem::PreRuntime(AURA_ENGINE_ID, slot.encode())], - }, - }), - }; - sproof.items.push(s); - set_author_noting_inherent_data(sproof); - - run_block(); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_ed_plus_collator_assignment_credit_session_minus_1_purchase_fails() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT - - 1; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should not be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_collator_assignment_credits_with_purchase_can_be_combined() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We assign one session to free credits - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 1 - )); - // We buy another session through the tank - let credits_1001 = collator_assignment_credits_to_required_balance(1, 1001.into()) - + flashbox_runtime::EXISTENTIAL_DEPOSIT; - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - credits_1001 - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - }); -} - -#[test] -fn test_block_credits_and_collator_assignation_credits_through_tank() { - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - run_to_block(2); - // Assert current slot gets updated - assert_eq!(current_slot(), 1u64); - assert!(current_author() == AccountId::from(BOB)); - - // Alice and Bob collate in our chain - let alice_id = get_aura_id_from_seed(&AccountId::from(ALICE).to_string()); - let bob_id = get_aura_id_from_seed(&AccountId::from(BOB).to_string()); - - assert_eq!(authorities(), vec![alice_id, bob_id]); - - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - - // We make all free credits 0 - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - assert_ok!(ServicesPayment::set_block_production_credits( - root_origin(), - 1001.into(), - 0 - )); - - // We buy 2 sessions through tank - let collator_assignation_credits = - collator_assignment_credits_to_required_balance(2, 1001.into()); - let block_production_credits = - block_credits_to_required_balance(flashbox_runtime::Period::get() * 2, 1001.into()); - - // Fill the tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - 1001.into(), - collator_assignation_credits - + block_production_credits - + flashbox_runtime::EXISTENTIAL_DEPOSIT - )); - - // Assignment should happen after 2 sessions - run_to_session(1u32); - let assignment = CollatorAssignment::collator_container_chain(); - assert!(assignment.container_chains.is_empty()); - run_to_session(2u32); - // Charlie and Dave should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!( - assignment.container_chains[&1001u32.into()], - vec![CHARLIE.into(), DAVE.into()] - ); - - // After this it should not be assigned anymore, since credits are not payable - run_to_session(4u32); - // Nobody should be assigned to para 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains.get(&1001u32.into()), None,); - }); -} - -#[test] -fn test_migration_services_collator_assignment_payment() { - ExtBuilder::default().build().execute_with(|| { - // Register a new parachain with no credits - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1001.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1001.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1001.into() - )); - // Register another parachain with no credits, do not mark this as valid for collation - assert_ok!(Registrar::register( - origin_of(ALICE.into()), - 1002.into(), - empty_genesis_data() - )); - assert_ok!(DataPreservers::set_boot_nodes( - origin_of(ALICE.into()), - 1002.into(), - dummy_boot_nodes() - )); - assert_ok!(Registrar::mark_valid_for_collating( - root_origin(), - 1002.into() - )); - - // Need to reset credits to 0 because now parachains are given free credits on register - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1001.into(), - 0 - )); - assert_ok!(ServicesPayment::set_collator_assignment_credits( - root_origin(), - 1002.into(), - 0 - )); - - let credits_1001 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!(credits_1001, 0); - let credits_1002 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1002)) - .unwrap_or_default(); - assert_eq!(credits_1002, 0); - - // Apply migration - let migration = - MigrateServicesPaymentAddCollatorAssignmentCredits::(Default::default()); - migration.migrate(Default::default()); - - // Both parachains have been given credits - let credits_1001 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1001)) - .unwrap_or_default(); - assert_eq!( - credits_1001, - flashbox_runtime::FreeCollatorAssignmentCredits::get() - ); - let credits_1002 = - pallet_services_payment::CollatorAssignmentCredits::::get(ParaId::from(1002)) - .unwrap_or_default(); - assert_eq!( - credits_1002, - flashbox_runtime::FreeCollatorAssignmentCredits::get() - ); - }); -} - -#[test] -fn test_max_collators_uses_pending_value() { - // Start with max_collators = 100, and collators_per_container = 2 - // Set max_collators = 2, and collators_per_container = 3 - // It should be impossible to have more than 2 collators per container at any point in time - ExtBuilder::default() - .with_balances(vec![ - // Alice gets 10k extra tokens for her mapping deposit - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![( - 1001, - empty_genesis_data(), - vec![], - u32::MAX, - u32::MAX, - ) - .into()]) - .with_config(pallet_configuration::HostConfiguration { - max_collators: 100, - min_orchestrator_collators: 1, - max_orchestrator_collators: 1, - collators_per_container: 2, - full_rotation_period: 24, - ..Default::default() - }) - .build() - .execute_with(|| { - run_to_block(2); - - // Initial assignment: 1 collator in orchestrator chain and 2 collators in container 1001 - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains[&1001u32.into()].len(), 2); - assert_eq!(assignment.orchestrator_chain.len(), 1); - - assert_ok!(Configuration::set_max_collators(root_origin(), 2)); - assert_ok!(Configuration::set_collators_per_container(root_origin(), 3)); - - // Check invariant for all intermediate assignments. We set collators_per_container = 3 - // but we also set max_collators = 2, so no collators will be assigned to container - // chains after the change is applied. - for session in 1..=4 { - run_to_session(session); - - let assignment = CollatorAssignment::collator_container_chain(); - assert!( - assignment.container_chains[&1001u32.into()].len() <= 2, - "session {}: {} collators assigned to container chain 1001", - session, - assignment.container_chains[&1001u32.into()].len() - ); - } - - // Final assignment: because max_collators = 2, there are only 2 collators, one in - // orchestrator chain, and the other one idle - let assignment = CollatorAssignment::collator_container_chain(); - assert_eq!(assignment.container_chains[&1001u32.into()].len(), 0); - assert_eq!(assignment.orchestrator_chain.len(), 1); - }); -} - -#[test] -fn test_slow_adjusting_multiplier_changes_in_response_to_consumed_weight() { - ExtBuilder::default() - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .build() - .execute_with(|| { - end_block(); - // If the block is full, the multiplier increases - let before_multiplier = TransactionPayment::next_fee_multiplier(); - start_block(); - let max_block_weights = flashbox_runtime::RuntimeBlockWeights::get(); - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"System", b"BlockWeight"), - &ConsumedWeight::new(|class| { - max_block_weights - .get(class) - .max_total - .unwrap_or(Weight::MAX) - }), - ); - end_block(); - let current_multiplier = TransactionPayment::next_fee_multiplier(); - assert!(current_multiplier > before_multiplier); - - // If the block is empty, the multiplier decreases - let before_multiplier = TransactionPayment::next_fee_multiplier(); - start_block(); - frame_support::storage::unhashed::put( - &frame_support::storage::storage_prefix(b"System", b"BlockWeight"), - &ConsumedWeight::new(|_class| Weight::zero()), - ); - end_block(); - let current_multiplier = TransactionPayment::next_fee_multiplier(); - assert!(current_multiplier < before_multiplier); - }); -} - -#[test] -fn test_collator_assignment_tip_priority_on_congestion() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let para_id = 1003u32; - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[&1003u32.into()] - .len(), - 0 - ); - - // Send funds to tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for 1003 - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(2); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[¶_id.into()] - .len(), - 2, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_charged_on_congestion() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - let para_id = 1003u32; - - // Send funds to tank - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for para_id - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(1); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id.into())), - tank_funds - max_tip, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_not_assigned_on_insufficient_balance() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 1 * UNIT; - let max_tip = 1 * UNIT; - let para_id = 1003u32; - - // Send insufficient funds to tank for tip for 2 sessions - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id.into(), - tank_funds, - )); - - // Set tip for para_id - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id.into(), - Some(max_tip), - )); - - run_to_session(1); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains[¶_id.into()] - .len(), - 0 - ); - }); -} - -#[test] -fn test_collator_assignment_tip_only_charge_willing_paras() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - (AccountId::from(EVE), 100_000 * UNIT), - (AccountId::from(FERDIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - (AccountId::from(EVE), 100 * UNIT), - (AccountId::from(FERDIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip = 1 * UNIT; - let para_id_with_tip = 1003u32; - let para_id_without_tip = 1001u32; - - // Send funds to tank to both paras - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_with_tip.into(), - tank_funds, - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_without_tip.into(), - tank_funds, - )); - - // Only set tip for 1003 - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_with_tip.into(), - Some(max_tip), - )); - - run_to_session(2); - - let assignment = CollatorAssignment::collator_container_chain().container_chains; - - // 2 out of the 3 paras should have collators assigned, with one paying tip to get - // prioritized, and the other selected at random that should not be charged any tips - assert_eq!(assignment[¶_id_with_tip.into()].len(), 2); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_with_tip.into())), - tank_funds - max_tip * 2, - ); - - assert_eq!(assignment[¶_id_without_tip.into()].len(), 2); - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank( - para_id_without_tip.into() - )), - tank_funds, - ); - }); -} - -#[test] -fn test_collator_assignment_tip_withdraw_min_tip() { - ExtBuilder::default() - .with_balances(vec![ - (AccountId::from(ALICE), 210_000 * UNIT), - (AccountId::from(BOB), 100_000 * UNIT), - (AccountId::from(CHARLIE), 100_000 * UNIT), - (AccountId::from(DAVE), 100_000 * UNIT), - (AccountId::from(EVE), 100_000 * UNIT), - (AccountId::from(FERDIE), 100_000 * UNIT), - ]) - .with_collators(vec![ - (AccountId::from(ALICE), 210 * UNIT), - (AccountId::from(BOB), 100 * UNIT), - (AccountId::from(CHARLIE), 100 * UNIT), - (AccountId::from(DAVE), 100 * UNIT), - (AccountId::from(EVE), 100 * UNIT), - (AccountId::from(FERDIE), 100 * UNIT), - ]) - .with_para_ids(vec![ - (1001, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1002, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - (1003, empty_genesis_data(), vec![], u32::MAX, u32::MAX).into(), - ]) - .build() - .execute_with(|| { - let tank_funds = 100 * UNIT; - let max_tip_1003 = 3 * UNIT; - let max_tip_1002 = 2 * UNIT; - let para_id_1003 = 1003u32; - let para_id_1002 = 1002u32; - - // Send funds to tank to both paras - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_1003.into(), - tank_funds, - )); - assert_ok!(ServicesPayment::purchase_credits( - origin_of(ALICE.into()), - para_id_1002.into(), - tank_funds, - )); - - // Set tips - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_1003.into(), - Some(max_tip_1003), - )); - assert_ok!(ServicesPayment::set_max_tip( - root_origin(), - para_id_1002.into(), - Some(max_tip_1002), - )); - - run_to_session(2); - - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains - [¶_id_1003.into()] - .len(), - 2 - ); - assert_eq!( - CollatorAssignment::collator_container_chain().container_chains - [¶_id_1002.into()] - .len(), - 2 - ); - - // Should have withdrawn the lowest tip from both paras - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_1003.into())), - tank_funds - max_tip_1002 * 2, - ); - - assert_eq!( - Balances::usable_balance(ServicesPayment::parachain_tank(para_id_1002.into())), - tank_funds - max_tip_1002 * 2, - ); - }); -} diff --git a/runtime/relay-encoder/Cargo.toml b/runtime/relay-encoder/Cargo.toml deleted file mode 100644 index 81ec731..0000000 --- a/runtime/relay-encoder/Cargo.toml +++ /dev/null @@ -1,56 +0,0 @@ -[package] -name = "tanssi-relay-encoder" -authors = { workspace = true } -description = "Allows to create encoded relay calls without depending on the relay runtime" -edition = "2021" -license = "GPL-3.0-only" -version = "0.1.0" - -[package.metadata.docs.rs] -targets = [ "x86_64-unknown-linux-gnu" ] - -[lints] -workspace = true - -[dependencies] -hex-literal = { workspace = true } -parity-scale-codec = { workspace = true, features = [ "derive" ] } -scale-info = { workspace = true, features = [ "derive" ] } - -# Substrate -frame-support = { workspace = true } -frame-system = { workspace = true } -frame-try-runtime = { workspace = true, optional = true } -pallet-balances = { workspace = true } - -# Cumulus -sp-core = { workspace = true } -sp-runtime = { workspace = true } -sp-std = { workspace = true } - -cumulus-primitives-core = { workspace = true } - -[dev-dependencies] -polkadot-runtime-parachains = { workspace = true } -rococo-runtime = { workspace = true } -rococo-runtime-constants = { workspace = true } - -[features] -default = [ - "std", -] -std = [ - "cumulus-primitives-core/std", - "frame-support/std", - "frame-system/std", - "frame-try-runtime?/std", - "pallet-balances/std", - "parity-scale-codec/std", - "polkadot-runtime-parachains/std", - "rococo-runtime-constants/std", - "rococo-runtime/std", - "scale-info/std", - "sp-core/std", - "sp-runtime/std", - "sp-std/std", -] diff --git a/runtime/relay-encoder/src/lib.rs b/runtime/relay-encoder/src/lib.rs deleted file mode 100644 index b20d747..0000000 --- a/runtime/relay-encoder/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -#![cfg_attr(not(feature = "std"), no_std)] - -pub mod rococo; -pub mod westend; diff --git a/runtime/relay-encoder/src/rococo.rs b/runtime/relay-encoder/src/rococo.rs deleted file mode 100644 index 67f9e74..0000000 --- a/runtime/relay-encoder/src/rococo.rs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use {cumulus_primitives_core::ParaId, parity_scale_codec::Encode}; - -pub type Balance = u128; - -#[derive(Encode)] -pub enum RelayCall { - #[codec(index = 66u8)] - OnDemandAssignmentProvider(OnDemandAssignmentProviderCall), -} - -#[derive(Encode)] -pub enum OnDemandAssignmentProviderCall { - #[codec(index = 0u8)] - PlaceOrderAllowDeath { - max_amount: Balance, - para_id: ParaId, - }, -} - -#[cfg(test)] -mod tests { - use { - super::*, polkadot_runtime_parachains::assigner_on_demand as parachains_assigner_on_demand, - }; - - #[test] - fn encode_place_order_allow_death() { - let max_amount = u128::MAX; - let para_id = u32::MAX.into(); - let call = rococo_runtime::RuntimeCall::OnDemandAssignmentProvider( - parachains_assigner_on_demand::Call::place_order_allow_death { - max_amount, - para_id, - }, - ); - let call2 = RelayCall::OnDemandAssignmentProvider( - OnDemandAssignmentProviderCall::PlaceOrderAllowDeath { - max_amount, - para_id, - }, - ); - - // If this fails check most probably indices changed - assert_eq!(call.encode(), call2.encode()); - } -} diff --git a/runtime/relay-encoder/src/westend.rs b/runtime/relay-encoder/src/westend.rs deleted file mode 100644 index 61db20e..0000000 --- a/runtime/relay-encoder/src/westend.rs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) Moondance Labs Ltd. -// This file is part of Tanssi. - -// Tanssi is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Tanssi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Tanssi. If not, see - -use {cumulus_primitives_core::ParaId, parity_scale_codec::Encode}; - -pub type Balance = u128; - -#[derive(Encode)] -pub enum RelayCall { - #[codec(index = 56u8)] - OnDemandAssignmentProvider(OnDemandAssignmentProviderCall), -} - -#[derive(Encode)] -pub enum OnDemandAssignmentProviderCall { - #[codec(index = 0u8)] - PlaceOrderAllowDeath { - max_amount: Balance, - para_id: ParaId, - }, -} - -// TODO: uncomment tests after polkadot 1.8.0 upgrade -/* -#[cfg(test)] -mod tests { - use super::*; - use polkadot_runtime_parachains::assigner_on_demand as parachains_assigner_on_demand; - - #[test] - fn encode_place_order_allow_death() { - let max_amount = u128::MAX; - let para_id = u32::MAX.into(); - let call = westend_runtime::RuntimeCall::OnDemandAssignmentProvider( - parachains_assigner_on_demand::Call::place_order_allow_death { - max_amount, - para_id, - }, - ); - let call2 = RelayCall::OnDemandAssignmentProvider( - OnDemandAssignmentProviderCall::PlaceOrderAllowDeath { - max_amount, - para_id, - }, - ); - - // If this fails check most probably indices changed - assert_eq!(call.encode(), call2.encode()); - } -} -*/ diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs new file mode 100644 index 0000000..a8a5b78 --- /dev/null +++ b/runtime/src/lib.rs @@ -0,0 +1,588 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(feature = "std")] +include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); + +use pallet_grandpa::AuthorityId as GrandpaId; +use sp_api::impl_runtime_apis; +use sp_consensus_aura::sr25519::AuthorityId as AuraId; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; +use sp_runtime::{ + create_runtime_str, generic, impl_opaque_keys, + traits::{BlakeTwo256, Block as BlockT, IdentifyAccount, NumberFor, One, Verify}, + transaction_validity::{TransactionSource, TransactionValidity}, + ApplyExtrinsicResult, MultiSignature, +}; +use sp_std::prelude::*; +#[cfg(feature = "std")] +use sp_version::NativeVersion; +use sp_version::RuntimeVersion; + +use frame_support::genesis_builder_helper::{build_config, create_default_config}; +pub use frame_support::{ + construct_runtime, derive_impl, parameter_types, + traits::{ + ConstBool, ConstU128, ConstU32, ConstU64, ConstU8, KeyOwnerProofSystem, Randomness, + StorageInfo, + }, + weights::{ + constants::{ + BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_REF_TIME_PER_SECOND, + }, + IdentityFee, Weight, + }, + StorageValue, +}; +pub use frame_system::Call as SystemCall; +pub use pallet_balances::Call as BalancesCall; +pub use pallet_timestamp::Call as TimestampCall; +use pallet_transaction_payment::{ConstFeeMultiplier, CurrencyAdapter, Multiplier}; +#[cfg(any(feature = "std", test))] +pub use sp_runtime::BuildStorage; +pub use sp_runtime::{Perbill, Permill}; + +/// Import the template pallet. +pub use pallet_template; + +/// An index to a block. +pub type BlockNumber = u32; + +/// Alias to 512-bit hash when used in the context of a transaction signature on the chain. +pub type Signature = MultiSignature; + +/// Some way of identifying an account on the chain. We intentionally make it equivalent +/// to the public key of our transaction signing scheme. +pub type AccountId = <::Signer as IdentifyAccount>::AccountId; + +/// Balance of an account. +pub type Balance = u128; + +/// Index of a transaction in the chain. +pub type Nonce = u32; + +/// A hash of some data used by the chain. +pub type Hash = sp_core::H256; + +/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know +/// the specifics of the runtime. They can then be made to be agnostic over specific formats +/// of data like extrinsics, allowing for them to continue syncing the network through upgrades +/// to even the core data structures. +pub mod opaque { + use super::*; + + pub use sp_runtime::OpaqueExtrinsic as UncheckedExtrinsic; + + /// Opaque block header type. + pub type Header = generic::Header; + /// Opaque block type. + pub type Block = generic::Block; + /// Opaque block identifier type. + pub type BlockId = generic::BlockId; + + impl_opaque_keys! { + pub struct SessionKeys { + pub aura: Aura, + pub grandpa: Grandpa, + } + } +} + +// To learn more about runtime versioning, see: +// https://docs.substrate.io/main-docs/build/upgrade#runtime-versioning +#[sp_version::runtime_version] +pub const VERSION: RuntimeVersion = RuntimeVersion { + spec_name: create_runtime_str!("solochain-template-runtime"), + impl_name: create_runtime_str!("solochain-template-runtime"), + authoring_version: 1, + // The version of the runtime specification. A full node will not attempt to use its native + // runtime in substitute for the on-chain Wasm runtime unless all of `spec_name`, + // `spec_version`, and `authoring_version` are the same between Wasm and native. + // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use + // the compatible custom types. + spec_version: 100, + impl_version: 1, + apis: RUNTIME_API_VERSIONS, + transaction_version: 1, + state_version: 1, +}; + +/// This determines the average expected block time that we are targeting. +/// Blocks will be produced at a minimum duration defined by `SLOT_DURATION`. +/// `SLOT_DURATION` is picked up by `pallet_timestamp` which is in turn picked +/// up by `pallet_aura` to implement `fn slot_duration()`. +/// +/// Change this to adjust the block time. +pub const MILLISECS_PER_BLOCK: u64 = 6000; + +// NOTE: Currently it is not possible to change the slot duration after the chain has started. +// Attempting to do so will brick block production. +pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK; + +// Time is measured by number of blocks. +pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); +pub const HOURS: BlockNumber = MINUTES * 60; +pub const DAYS: BlockNumber = HOURS * 24; + +/// The version information used to identify this runtime when compiled natively. +#[cfg(feature = "std")] +pub fn native_version() -> NativeVersion { + NativeVersion { runtime_version: VERSION, can_author_with: Default::default() } +} + +const NORMAL_DISPATCH_RATIO: Perbill = Perbill::from_percent(75); + +parameter_types! { + pub const BlockHashCount: BlockNumber = 2400; + pub const Version: RuntimeVersion = VERSION; + /// We allow for 2 seconds of compute with a 6 second average block time. + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::with_sensible_defaults( + Weight::from_parts(2u64 * WEIGHT_REF_TIME_PER_SECOND, u64::MAX), + NORMAL_DISPATCH_RATIO, + ); + pub BlockLength: frame_system::limits::BlockLength = frame_system::limits::BlockLength + ::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO); + pub const SS58Prefix: u8 = 42; +} + +/// The default types are being injected by [`derive_impl`](`frame_support::derive_impl`) from +/// [`SoloChainDefaultConfig`](`struct@frame_system::config_preludes::SolochainDefaultConfig`), +/// but overridden as needed. +#[derive_impl(frame_system::config_preludes::SolochainDefaultConfig as frame_system::DefaultConfig)] +impl frame_system::Config for Runtime { + /// The block type for the runtime. + type Block = Block; + /// Block & extrinsics weights: base values and limits. + type BlockWeights = BlockWeights; + /// The maximum length of a block (in bytes). + type BlockLength = BlockLength; + /// The identifier used to distinguish between accounts. + type AccountId = AccountId; + /// The type for storing how many extrinsics an account has signed. + type Nonce = Nonce; + /// The type for hashing blocks and tries. + type Hash = Hash; + /// Maximum number of block number to block hash mappings to keep (oldest pruned first). + type BlockHashCount = BlockHashCount; + /// The weight of database operations that the runtime can invoke. + type DbWeight = RocksDbWeight; + /// Version of the runtime. + type Version = Version; + /// The data to be stored in an account. + type AccountData = pallet_balances::AccountData; + /// This is used as an identifier of the chain. 42 is the generic substrate prefix. + type SS58Prefix = SS58Prefix; + type MaxConsumers = frame_support::traits::ConstU32<16>; +} + +impl pallet_aura::Config for Runtime { + type AuthorityId = AuraId; + type DisabledValidators = (); + type MaxAuthorities = ConstU32<32>; + type AllowMultipleBlocksPerSlot = ConstBool; + + #[cfg(feature = "experimental")] + type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; +} + +impl pallet_grandpa::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + + type WeightInfo = (); + type MaxAuthorities = ConstU32<32>; + type MaxNominators = ConstU32<0>; + type MaxSetIdSessionEntries = ConstU64<0>; + + type KeyOwnerProof = sp_core::Void; + type EquivocationReportSystem = (); +} + +impl pallet_timestamp::Config for Runtime { + /// A timestamp: milliseconds since the unix epoch. + type Moment = u64; + type OnTimestampSet = Aura; + type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>; + type WeightInfo = (); +} + +/// Existential deposit. +pub const EXISTENTIAL_DEPOSIT: u128 = 500; + +impl pallet_balances::Config for Runtime { + type MaxLocks = ConstU32<50>; + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + /// The type for recording an account's balance. + type Balance = Balance; + /// The ubiquitous event type. + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ConstU128; + type AccountStore = System; + type WeightInfo = pallet_balances::weights::SubstrateWeight; + type FreezeIdentifier = (); + type MaxFreezes = (); + type RuntimeHoldReason = (); + type RuntimeFreezeReason = (); +} + +parameter_types! { + pub FeeMultiplier: Multiplier = Multiplier::one(); +} + +impl pallet_transaction_payment::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type OnChargeTransaction = CurrencyAdapter; + type OperationalFeeMultiplier = ConstU8<5>; + type WeightToFee = IdentityFee; + type LengthToFee = IdentityFee; + type FeeMultiplierUpdate = ConstFeeMultiplier; +} + +impl pallet_sudo::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; +} + +/// Configure the pallet-template in pallets/template. +impl pallet_template::Config for Runtime { + type RuntimeEvent = RuntimeEvent; + type WeightInfo = pallet_template::weights::SubstrateWeight; +} + +// Create the runtime by composing the FRAME pallets that were previously configured. +#[frame_support::runtime] +mod runtime { + #[runtime::runtime] + #[runtime::derive( + RuntimeCall, + RuntimeEvent, + RuntimeError, + RuntimeOrigin, + RuntimeFreezeReason, + RuntimeHoldReason, + RuntimeSlashReason, + RuntimeLockId, + RuntimeTask + )] + pub struct Runtime; + + #[runtime::pallet_index(0)] + pub type System = frame_system; + + #[runtime::pallet_index(1)] + pub type Timestamp = pallet_timestamp; + + #[runtime::pallet_index(2)] + pub type Aura = pallet_aura; + + #[runtime::pallet_index(3)] + pub type Grandpa = pallet_grandpa; + + #[runtime::pallet_index(4)] + pub type Balances = pallet_balances; + + #[runtime::pallet_index(5)] + pub type TransactionPayment = pallet_transaction_payment; + + #[runtime::pallet_index(6)] + pub type Sudo = pallet_sudo; + + // Include the custom logic from the pallet-template in the runtime. + #[runtime::pallet_index(7)] + pub type TemplateModule = pallet_template; +} + +/// The address format for describing accounts. +pub type Address = sp_runtime::MultiAddress; +/// Block header type as expected by this runtime. +pub type Header = generic::Header; +/// Block type as expected by this runtime. +pub type Block = generic::Block; +/// The SignedExtension to the basic transaction logic. +pub type SignedExtra = ( + frame_system::CheckNonZeroSender, + frame_system::CheckSpecVersion, + frame_system::CheckTxVersion, + frame_system::CheckGenesis, + frame_system::CheckEra, + frame_system::CheckNonce, + frame_system::CheckWeight, + pallet_transaction_payment::ChargeTransactionPayment, +); + +/// All migrations of the runtime, aside from the ones declared in the pallets. +/// +/// This can be a tuple of types, each implementing `OnRuntimeUpgrade`. +#[allow(unused_parens)] +type Migrations = (); + +/// Unchecked extrinsic type as expected by this runtime. +pub type UncheckedExtrinsic = + generic::UncheckedExtrinsic; +/// The payload being signed in transactions. +pub type SignedPayload = generic::SignedPayload; +/// Executive: handles dispatch to the various modules. +pub type Executive = frame_executive::Executive< + Runtime, + Block, + frame_system::ChainContext, + Runtime, + AllPalletsWithSystem, + Migrations, +>; + +#[cfg(feature = "runtime-benchmarks")] +mod benches { + frame_benchmarking::define_benchmarks!( + [frame_benchmarking, BaselineBench::] + [frame_system, SystemBench::] + [pallet_balances, Balances] + [pallet_timestamp, Timestamp] + [pallet_sudo, Sudo] + [pallet_template, TemplateModule] + ); +} + +impl_runtime_apis! { + impl sp_api::Core for Runtime { + fn version() -> RuntimeVersion { + VERSION + } + + fn execute_block(block: Block) { + Executive::execute_block(block); + } + + fn initialize_block(header: &::Header) -> sp_runtime::ExtrinsicInclusionMode { + Executive::initialize_block(header) + } + } + + impl sp_api::Metadata for Runtime { + fn metadata() -> OpaqueMetadata { + OpaqueMetadata::new(Runtime::metadata().into()) + } + + fn metadata_at_version(version: u32) -> Option { + Runtime::metadata_at_version(version) + } + + fn metadata_versions() -> sp_std::vec::Vec { + Runtime::metadata_versions() + } + } + + impl sp_block_builder::BlockBuilder for Runtime { + fn apply_extrinsic(extrinsic: ::Extrinsic) -> ApplyExtrinsicResult { + Executive::apply_extrinsic(extrinsic) + } + + fn finalize_block() -> ::Header { + Executive::finalize_block() + } + + fn inherent_extrinsics(data: sp_inherents::InherentData) -> Vec<::Extrinsic> { + data.create_extrinsics() + } + + fn check_inherents( + block: Block, + data: sp_inherents::InherentData, + ) -> sp_inherents::CheckInherentsResult { + data.check_extrinsics(&block) + } + } + + impl sp_transaction_pool::runtime_api::TaggedTransactionQueue for Runtime { + fn validate_transaction( + source: TransactionSource, + tx: ::Extrinsic, + block_hash: ::Hash, + ) -> TransactionValidity { + Executive::validate_transaction(source, tx, block_hash) + } + } + + impl sp_offchain::OffchainWorkerApi for Runtime { + fn offchain_worker(header: &::Header) { + Executive::offchain_worker(header) + } + } + + impl sp_consensus_aura::AuraApi for Runtime { + fn slot_duration() -> sp_consensus_aura::SlotDuration { + sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration()) + } + + fn authorities() -> Vec { + Aura::authorities().into_inner() + } + } + + impl sp_session::SessionKeys for Runtime { + fn generate_session_keys(seed: Option>) -> Vec { + opaque::SessionKeys::generate(seed) + } + + fn decode_session_keys( + encoded: Vec, + ) -> Option, KeyTypeId)>> { + opaque::SessionKeys::decode_into_raw_public_keys(&encoded) + } + } + + impl sp_consensus_grandpa::GrandpaApi for Runtime { + fn grandpa_authorities() -> sp_consensus_grandpa::AuthorityList { + Grandpa::grandpa_authorities() + } + + fn current_set_id() -> sp_consensus_grandpa::SetId { + Grandpa::current_set_id() + } + + fn submit_report_equivocation_unsigned_extrinsic( + _equivocation_proof: sp_consensus_grandpa::EquivocationProof< + ::Hash, + NumberFor, + >, + _key_owner_proof: sp_consensus_grandpa::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: sp_consensus_grandpa::SetId, + _authority_id: GrandpaId, + ) -> Option { + // NOTE: this is the only implementation possible since we've + // defined our key owner proof type as a bottom type (i.e. a type + // with no values). + None + } + } + + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { + fn account_nonce(account: AccountId) -> Nonce { + System::account_nonce(account) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi for Runtime { + fn query_info( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo { + TransactionPayment::query_info(uxt, len) + } + fn query_fee_details( + uxt: ::Extrinsic, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_fee_details(uxt, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentCallApi + for Runtime + { + fn query_call_info( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::RuntimeDispatchInfo { + TransactionPayment::query_call_info(call, len) + } + fn query_call_fee_details( + call: RuntimeCall, + len: u32, + ) -> pallet_transaction_payment::FeeDetails { + TransactionPayment::query_call_fee_details(call, len) + } + fn query_weight_to_fee(weight: Weight) -> Balance { + TransactionPayment::weight_to_fee(weight) + } + fn query_length_to_fee(length: u32) -> Balance { + TransactionPayment::length_to_fee(length) + } + } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{baseline, Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + use frame_system_benchmarking::Pallet as SystemBench; + use baseline::Pallet as BaselineBench; + + let mut list = Vec::::new(); + list_benchmarks!(list, extra); + + let storage_info = AllPalletsWithSystem::storage_info(); + + (list, storage_info) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig + ) -> Result, sp_runtime::RuntimeString> { + use frame_benchmarking::{baseline, Benchmarking, BenchmarkBatch}; + use sp_storage::TrackedStorageKey; + use frame_system_benchmarking::Pallet as SystemBench; + use baseline::Pallet as BaselineBench; + + impl frame_system_benchmarking::Config for Runtime {} + impl baseline::Config for Runtime {} + + use frame_support::traits::WhitelistedStorageKeys; + let whitelist: Vec = AllPalletsWithSystem::whitelisted_storage_keys(); + + let mut batches = Vec::::new(); + let params = (&config, &whitelist); + add_benchmarks!(params, batches); + + Ok(batches) + } + } + + #[cfg(feature = "try-runtime")] + impl frame_try_runtime::TryRuntime for Runtime { + fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. If any of the pre/post migration checks fail, we shall stop + // right here and right now. + let weight = Executive::try_runtime_upgrade(checks).unwrap(); + (weight, BlockWeights::get().max_block) + } + + fn execute_block( + block: Block, + state_root_check: bool, + signature_check: bool, + select: frame_try_runtime::TryStateSelect + ) -> Weight { + // NOTE: intentional unwrap: we don't want to propagate the error backwards, and want to + // have a backtrace here. + Executive::try_execute_block(block, state_root_check, signature_check, select).expect("execute-block failed") + } + } + + impl sp_genesis_builder::GenesisBuilder for Runtime { + fn create_default_config() -> Vec { + create_default_config::() + } + + fn build_config(config: Vec) -> sp_genesis_builder::Result { + build_config::(config) + } + } +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 6d7617d..f81199a 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,14 @@ [toolchain] -channel = "1.78.0" -components = [ "rustfmt", "clippy", "rust-src" ] -targets = [ "wasm32-unknown-unknown" ] +channel = "stable" +components = [ + "cargo", + "clippy", + "rust-analyzer", + "rust-src", + "rust-std", + "rustc", + "rustc-dev", + "rustfmt", +] +targets = ["wasm32-unknown-unknown"] profile = "minimal" diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..441913f --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,23 @@ +# Basic +hard_tabs = true +max_width = 100 +use_small_heuristics = "Max" +# Imports +imports_granularity = "Crate" +reorder_imports = true +# Consistency +newline_style = "Unix" +# Format comments +comment_width = 100 +wrap_comments = true +# Misc +chain_width = 80 +spaces_around_ranges = false +binop_separator = "Back" +reorder_impl_items = false +match_arm_leading_pipes = "Preserve" +match_arm_blocks = false +match_block_trailing_comma = true +trailing_comma = "Vertical" +trailing_semicolon = false +use_field_init_shorthand = true diff --git a/scripts/build-runtime-srtool.sh b/scripts/build-runtime-srtool.sh deleted file mode 100755 index 8ce949b..0000000 --- a/scripts/build-runtime-srtool.sh +++ /dev/null @@ -1,54 +0,0 @@ - -# CARGO_NET_GIT_FETCH_WITH_CLI=true and --entrypoint /srtool/entrypoint.sh -# are required to allow srtool to fetch from github private repositories - -# self-hosted runner uses user `maintenance` to match srtool `builder` user 1001 -# $(~/srtool/uid-gid-mapping.sh 1001 | xargs) is used to map the user and group - -# Docker command to generate JSON blob of the runtime -if [[ $GH_WORKFLOW_MATRIX_CHAIN == *"template"* ]]; then - FOLDER_NAME=$(echo $GH_WORKFLOW_MATRIX_CHAIN |sed 's/-template.*//') - RUNTIME_DIR=container-chains/templates/${FOLDER_NAME}/runtime - PACKAGE=container-chain-template-${FOLDER_NAME}-runtime -else - RUNTIME_DIR=runtime/${GH_WORKFLOW_MATRIX_CHAIN} - PACKAGE=${GH_WORKFLOW_MATRIX_CHAIN}-runtime -fi - -CMD="docker run \ - -i \ - --rm \ - $(~/srtool/uid-gid-mapping.sh 1001 | xargs) \ - -e CARGO_NET_GIT_FETCH_WITH_CLI=true \ - -e PACKAGE=${PACKAGE} \ - -e RUNTIME_DIR=${RUNTIME_DIR} \ - -e PROFILE=production \ - -v ${PWD}:/build \ - -v /home/${USER}/srtool/.ssh:/home/builder/.ssh \ - -v /home/${USER}/srtool/entrypoint.sh:/srtool/entrypoint.sh \ - --entrypoint /srtool/entrypoint.sh \ - ${GH_WORKFLOW_MATRIX_SRTOOL_IMAGE}:${GH_WORKFLOW_MATRIX_SRTOOL_IMAGE_TAG} \ - build --app --json -cM" - -# Here we run the command and stream the output (JSON blob) to a variable -stdbuf -oL $CMD | { - while IFS= read -r line - do - echo ║ $line - JSON="$line" - done - - echo "json=$JSON" >> $GITHUB_OUTPUT - - PROP=`echo $JSON | jq -r .runtimes.compact.prop` - echo "proposal_hash=$PROP" >> $GITHUB_OUTPUT - - WASM=`echo $JSON | jq -r .runtimes.compact.wasm` - echo "wasm=$WASM" >> $GITHUB_OUTPUT - - Z_WASM=`echo $JSON | jq -r .runtimes.compressed.wasm` - echo "wasm_compressed=$Z_WASM" >> $GITHUB_OUTPUT - - IPFS=`echo $JSON | jq -r .runtimes.compact.ipfs` - echo "ipfs=$IPFS" >> $GITHUB_OUTPUT -} diff --git a/scripts/init.sh b/scripts/init.sh new file mode 100755 index 0000000..f976f72 --- /dev/null +++ b/scripts/init.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# This script is meant to be run on Unix/Linux based systems +set -e + +echo "*** Initializing WASM build environment" + +if [ -z $CI_PROJECT_NAME ] ; then + rustup update nightly + rustup update stable +fi + +rustup target add wasm32-unknown-unknown --toolchain nightly diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..c08005c --- /dev/null +++ b/shell.nix @@ -0,0 +1,35 @@ +let + mozillaOverlay = + import (builtins.fetchGit { + url = "https://github.com/mozilla/nixpkgs-mozilla.git"; + rev = "57c8084c7ef41366993909c20491e359bbb90f54"; + }); + pinned = builtins.fetchGit { + # Descriptive name to make the store path easier to identify + url = "https://github.com/nixos/nixpkgs/"; + # Commit hash for nixos-unstable as of 2020-04-26 + # `git ls-remote https://github.com/nixos/nixpkgs nixos-unstable` + ref = "refs/heads/nixos-unstable"; + rev = "1fe6ed37fd9beb92afe90671c0c2a662a03463dd"; + }; + nixpkgs = import pinned { overlays = [ mozillaOverlay ]; }; + toolchain = with nixpkgs; (rustChannelOf { date = "2021-09-14"; channel = "nightly"; }); + rust-wasm = toolchain.rust.override { + targets = [ "wasm32-unknown-unknown" ]; + }; +in +with nixpkgs; pkgs.mkShell { + buildInputs = [ + clang + pkg-config + rust-wasm + ] ++ stdenv.lib.optionals stdenv.isDarwin [ + darwin.apple_sdk.frameworks.Security + ]; + + LIBCLANG_PATH = "${llvmPackages.libclang}/lib"; + PROTOC = "${protobuf}/bin/protoc"; + RUST_SRC_PATH = "${toolchain.rust-src}/lib/rustlib/src/rust/library/"; + ROCKSDB_LIB_DIR = "${rocksdb}/lib"; + +} diff --git a/specs/dancebox/alphanet-relay-raw-specs.json b/specs/dancebox/alphanet-relay-raw-specs.json deleted file mode 100644 index 0ce1f98..0000000 --- a/specs/dancebox/alphanet-relay-raw-specs.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "name": "Moonbase Relay Testnet", - "id": "westend_moonbase_relay_testnet", - "chainType": "Live", - "bootNodes": [ - "/dns4/fro-moon-bootcol-1-moonbase-relay-validator-1.moonbase.ol-infra.network/tcp/30334/p2p/12D3KooWDyNkSsGxhNuVtnLeVCrs5DDf8mxBhX4fogTbzE1pfkmM", - "/dns4/qco-moon-bootcol-1-moonbase-relay-validator-1.moonbase.ol-infra.network/tcp/30334/p2p/12D3KooWEJQxX9HKvBAK8J7QRxrPm7KNuHWU67gEMpmFamkohMpq", - "/dns4/del-moon-bootcol-1-moonbase-relay-validator-1.moonbase.ol-infra.network/tcp/30334/p2p/12D3KooWHEPorseTkNry9pBagRF6YmAAYxFePEgk3s1htwmxi2aT", - "/dns4/ukl-moon-bootcol-1-moonbase-relay-validator-1.moonbase.ol-infra.network/tcp/30334/p2p/12D3KooWMqDZ3rSBMM8js8p3xuuLrUWcAxMRR3hnuvVNC9q23tBp", - "/dns4/fra-moonbase-relay-val-0.a.dancebox.tanssi.network/tcp/30334/p2p/12D3KooWCiKPK8NWxpWcmFtyzGvtRH2W3ZuhJShnBQ6AUBscJrde", - "/dns4/fra-moonbase-relay-val-1.a.dancebox.tanssi.network/tcp/30334/p2p/12D3KooWPBdt6YxBKqnTdGT93mmMbf4BZoXEqcNdxuKsy4azC9M9", - "/dns/sa-01.unitedbloc.com/tcp/35060/p2p/12D3KooWKbo2qnyNdea2uR55z7dfg1BVDJw15Xr9xkUHd1csQnG2", - "/dns4/fra-moonbase-relay-val-2.a.dancebox.tanssi.network/tcp/30334/p2p/12D3KooWRuw1xZA4YJJ9D6uvgxr1ru7rz7UBMt42rMUuy5sQ7M7u", - "/dns4/fra-moonbase-relay-val-3.a.dancebox.tanssi.network/tcp/30334/p2p/12D3KooWSXF6wSGaZCRuBXydGX88qYVhHAhGZYE4SiG8E9BC8zc6" - ], - "telemetryEndpoints": null, - "protocolId": "dot", - "properties": null, - "forkBlocks": null, - "badBlocks": null, - "consensusEngine": null, - "lightSyncState": null, - "genesis": { - "raw": { - "top": { - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ec12245327ae1a01706172618094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x1405f2411d0af5a7ff397e7c9dc68d19878d434d6125b40443fe11fd292d13a4": "0x00000100", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb37236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x9ea8310d42b93ad9689215fd401107fd847b74923fc589730a28517f568ec5a294ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x3a636f6465": "0x0061736d0100000001c2033c60037f7f7f017f60027f7f017f60017f0060027f7f0060017f017e60057f7f7f7f7f0060047f7f7f7f0060037f7f7f0060027f7e017f60037f7e7f017f6000017f60027f7f017e60037f7f7e017e60000060017f017f60027e7e0060027e7e017e60037e7e7e0060017e017f60017e0060017e017e60027f7e0060047f7e7e7e017f60027f7e017e60037f7e7e006000017e60037e7e7f017e60027e7f017f60057f7f7f7f7f017f60047f7f7f7f017f60067f7f7f7f7f7f0060037e7f7f0060047f7f7f7e0060077f7e7e7e7e7e7e0060047f7f7e7e0060067f7f7f7f7f7f017f60057f7f7f7e7e0060067f7f7f7e7e7f0060087f7f7f7f7f7f7e7e0060067f7f7e7e7f7f017f60097f7f7e7e7e7f7f7f7f0060037e7e7f0060047f7f7f7f017e60097f7f7f7f7f7f7f7f7f00600a7f7f7f7f7f7f7f7f7f7f0060047e7e7e7e017f60037e7f7f017f60077f7f7e7e7e7f7f0060067f7f7e7e7e7e0060057f7e7e7f7f0060057e7f7e7e7f0060057f7f7f7f7f017e60097f7f7f7f7f7f7f7f7e0060067f7f7f7f7e7e0060047f7e7e7f0060047f7e7f7f00600b7f7f7f7f7f7f7f7f7f7f7f0060077f7f7f7e7f7f7f0060057f7f7f7e7e017f60057f7e7e7e7e0002e70f3103656e76066d656d6f727902001403656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31000803656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31000903656e76286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31000a03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31000b03656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31000803656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000403656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31000c03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32000903656e76276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31000d03656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000203656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31000e03656e76296578745f64656661756c745f6368696c645f73746f726167655f636c6561725f76657273696f6e5f31000f03656e76276578745f64656661756c745f6368696c645f73746f726167655f6765745f76657273696f6e5f31001003656e762c6578745f64656661756c745f6368696c645f73746f726167655f6e6578745f6b65795f76657273696f6e5f31001003656e76276578745f64656661756c745f6368696c645f73746f726167655f7365745f76657273696f6e5f31001103656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31001203656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31001203656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31001203656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31001203656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31001203656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31001303656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31001303656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31001403656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31000a03656e762a6578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636c6561725f76657273696f6e5f31001503656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001603656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001703656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31001803656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001903656e76226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f31000a03656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31001403656e76206578745f6f6666636861696e5f74696d657374616d705f76657273696f6e5f31001903656e761c6578745f73746f726167655f617070656e645f76657273696f6e5f31000f03656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31001403656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31001303656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31001303656e76286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31000d03656e761c6578745f73746f726167655f6578697374735f76657273696f6e5f31001203656e76196578745f73746f726167655f6765745f76657273696f6e5f31001403656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31001403656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001a03656e762a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f31000d03656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001903656e76196578745f73746f726167655f7365745f76657273696f6e5f31000f03656e76276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f31000d03656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31001803656e76206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f31000f03656e761f6578745f6c6f6767696e675f6d61785f6c6576656c5f76657273696f6e5f31000a03ad0bab0b0d0d0d0d0d0707070e020300070500010103010303011b02041c1d0700050101010e0e0107071e01010101070101001c010100010100001f010001010103010e0707030303010307070307070707070701030603010302010302060707052005010101010101030307030607010103070e02010101010303210207070e07030e2203030d01010101150303071d0a0707030303051d0d0605051e07070b010103030307050a072306050203020e19070703030d0107071e0d02060d070701010300010101010107031d0707070307030302070303020703070703030203020303070302070303020703030303070707070207030707030307070707030307070707030703070307070707040303070e03030203020603030703070307070707070707070707070707070303030303030303020303030303070303030303030101010103030303030303020707020303030303030303030303030302020306030303030307030302020202020202020202020202020202020202020202020202020101030303030302020d0d0d0d0d0d0d0d020202070303070002240e0303070303070301220302030707071d25030703070303050322070226020306010e0e0e0507270307220728070303070707070702290d0303070b072a0307070703070702020202020202020202020202020202020202020202020202021302020202020202020202020202030103010103070707022b03070207032c0303030707020203070206020303070302030e070e02030302030f02030107020307072522030603030303030303030303030e0303030303030303030203030303030303030303030e030303030203030303030702070307030707070307070303030703030303030707030302030303030303030303030303030503030303020202030303030303020202030303030202030303020303030303030303030703020202000d0303020201010101010d02020203030303030303030303030303030307030303030302030303030307030303030303030307070702030303072d0302030303030303030303030303030303030303030d0d03030303030d0d0d030303020307061906041303030303072e2f300101030201030322220203070306030303070202030102030301060202030301070303050602070106031e02060502010306060d0d02050703070703070703020603030702020303030307020203030203020707030303012203020e032d0103010103010303030702030703031e051e0307060703070202030202020303030303030303030301030202020203030202030207060302030303030503050305030303030303030303040103030303040301010231030307320707240303020203020203030303030606070307000303060002330103030302070334070203070735070307030202030607070307070702050d0303070703070303180702070e03070705070307030706070201020202030303030303070703070303070703030303070303030703070303073607030703020203030303030d02020203030302030303020203020302020303030703020202020706030303030303030303030303030703030303030303010303030303030303030303030307020102370202020203030322020306020202070507020202030303021e030303020304030103380106030102020203030303030404040202030307020303030307072202030303020302150239070703020203030303030302030303030303030203030303030505050b01020203030203030101030702020303030607020202020203020202020202030202020303030602030302020202020201020203033a02020203030303020202030303030303010101060204150e020203010302020303030303030503030303030202020301010202020b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b363b3b00000000363b3b0407017001eb02eb020619037f01418080c0000b7f0041d8a9ce000b7f0041d8a9ce000b07900c2e0c436f72655f76657273696f6e00a60b12436f72655f657865637574655f626c6f636b00a70b15436f72655f696e697469616c697a655f626c6f636b00a80b114d657461646174615f6d6574616461746100a90b1c426c6f636b4275696c6465725f6170706c795f65787472696e73696300aa0b1b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00ab0b20426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300ac0b1c426c6f636b4275696c6465725f636865636b5f696e686572656e747300ad0b2b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00ae0b214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200af0b1850617261636861696e486f73745f76616c696461746f727300b00b1e50617261636861696e486f73745f76616c696461746f725f67726f75707300b10b2050617261636861696e486f73745f617661696c6162696c6974795f636f72657300b20b2750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f6461746100b30b2650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f75747075747300b40b2550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c6400b50b1d50617261636861696e486f73745f76616c69646174696f6e5f636f646500b60b2850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f646500b70b2c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c69747900b80b1e50617261636861696e486f73745f63616e6469646174655f6576656e747300b90b1a50617261636861696e486f73745f73657373696f6e5f696e666f00ba0b1a50617261636861696e486f73745f646d715f636f6e74656e747300bb0b2c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e747300bc0b2550617261636861696e486f73745f76616c69646174696f6e5f636f64655f62795f6861736800bd0b1642656566794170695f76616c696461746f725f73657400be0b154d6d724170695f67656e65726174655f70726f6f6600bf0b134d6d724170695f7665726966795f70726f6f6600c00b1d4d6d724170695f7665726966795f70726f6f665f73746174656c65737300c10b1e4772616e6470614170695f6772616e6470615f617574686f72697469657300c20b384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300c30b274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600c40b15426162654170695f636f6e66696775726174696f6e00c50b1b426162654170695f63757272656e745f65706f63685f737461727400c60b15426162654170695f63757272656e745f65706f636800c70b12426162654170695f6e6578745f65706f636800c80b24426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f6600c90b35426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e73696300ca0b21417574686f72697479446973636f766572794170695f617574686f72697469657300cb0b2153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797300cc0b1f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797300cd0b1d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e636500ce0b205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f00cf0b275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c7300d00b195f5f696e6469726563745f66756e6374696f6e5f7461626c6501000a5f5f646174615f656e6403010b5f5f686561705f62617365030209c105010041010bea024542574ece014f50586ba4015d5cb904e303bb04bc04ad089d01c305f607e509f305a201f5058001ca08de06f407f807ef06f3069501f906f20193018d0ba501b80ab90aba0a83089401688401f9096aa3019c01e508cd01aa0a3e3f406c485e6061626364759101870188018901ed019201bd079001ec0a595ab701b501ee01ef01f0018a08f101f401f501f301ef02f002ee02af03b003b103d407d3079603d507eb07e807d209d809d709d909880ad205d105d305d20ad10a9703d30ae60ad90ad80a9803da0ac90abe0ac10ae809e709890aa30aa20a9903b20ac80a98099a038b098a099b03a809900b8f0b9c03a30b9e0b9d0b9d03a50ba9069e03c905c8059f03ca05f805dd0adc0aa003de0ae80ad60ad50aa103d70ae70aee0aed0aa203860b8b0b8a0ba303a40be708e608a403e808ab0993099209a5039409a909fe09fd09a603ff09d6099b089a08ef07a607f209a703d409a209a109c908dd059f079e07a803f90598089708e9099f0bd905d805a9039605e30af30af20aaa03f40ae90a9d099c09ab039f09ab08bd0a9b0afa0af90aac03fb0aea0ae407e307ad03e507d007c008bf08ae03aa09b6018006fd0584069106cf05ce05cd05cc05cb05920b8d09d405930bdb058e09910ba3078806da05e005df05de05ff06a908aa08a108a608fd06a208a508a708a808a107a007a707840b830b8e06fe058306860694068f069206dc07db07da07d907d707d6078b06e707d40ae6078b0899089c0895068906ed08ec08eb08ea08e908b00a8c0997099609950997069e09a009a10b9b06820685068d06db09da09fc05ea09f309f405fc09a20bf2058106bf0a820a810a800ab10aaf0aae0aac0aad0aab0aa90aa80aa70aa60aa50aa40ab70ab60ab50ab40ab30ac00ac30ac20af605b40198069a06ff05db0adf0ae10ae00ae40afb05f80af70af60af50afe0afd0afc0a9906940ba00b820b0aa6968101ab0b05001031000b05001033000b05001030000b170041014188d0c0004107418fd0c000412210d30100000b110041f8d2cd004111418080c0001035000b4701017f230041206b22032400200341146a4100360200200341b8c0cd00360210200342013702042003200136021c200320003602182003200341186a360200200320021043000bb90101027f230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024108200241084b1b21020240024020010d00200341003602100c010b200341106a41086a410136020020032001360214200320002802003602100b20032002200341106a1037200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001360200200341206a24000f0b1034000ba90101027f4100210302400240200141004e0d00410121010c010b0240024002400240024002400240200228020022030d0020010d010c050b200228020422040d012001450d040b2001103822020d010c020b200110382202450d0120022003200410d40b1a200310390b200121030c020b2000200136020441012103410121010c020b41012102410021030b20002002360204410021010b20002001360200200041086a20033602000b06002000100a0b0600200010090be00201067f230041206b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b0240024002400240024002400240200141146a2802000d00200621070c010b2004450d02410021054101210402402006410f4b0d00200341046a280200450d020b200620066a22072006490d010b2007417f4c0d02024020070d0041002105410121040c010b20072105200710382204450d030b20004100360208200020043602002000200536020420022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103b0d03200241206a24000f0b4100410041ac80c000103c000b1034000b1032000b41d480c0004133200241086a418881c000419881c000103d000bcc0501097f230041306b22032400200341246a2001360200200341033a002820034280808080800437030820032000360220410021042003410036021820034100360210024002400240024020022802082205450d0020022802002106200228020422072002410c6a2802002208200820074b1b2209450d01200020062802002006280204200128020c1100000d02200641086a21002002280210210a20092108034020032005411c6a2d00003a00282003200541046a290200422089370308200541186a28020021024100210441002101024002400240200541146a2802000e03010002010b2002410374210b41002101200a200b6a220b2802044101470d01200b28020028020021020b410121010b2003200236021420032001360210200541106a28020021020240024002402005410c6a2802000e03010002010b20024103742101200a20016a22012802044101470d01200128020028020021020b410121040b2003200236021c20032004360218200a20052802004103746a2202280200200341086a20022802041101000d0302402008417f6a22080d00200921040c030b200541206a2105200041046a210220002802002101200041086a2100200328022020012002280200200328022428020c110000450d000c030b0b2002280200210620022802042207200241146a2802002205200520074b1b2208450d0020022802102104200020062802002006280204200128020c1100000d0141002105200821020340200420056a2200280200200341086a200041046a2802001101000d0202402002417f6a22020d00200821040c020b200620056a2100200541086a21052003280220200041086a2802002000410c6a280200200328022428020c110000450d000c020b0b0240200720044d0d002003280220200620044103746a22052802002005280204200328022428020c1100000d010b410021050c010b410121050b200341306a240020050b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341d083c000360208200341023602242003200341206a360218200320033602282003200341046a360220200341086a20021043000b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541b4e0c200360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a20041043000b5101027f02402000280200220341046a280200200341086a220428020022006b20024f0d002003200020021036200428020021000b200328020020006a2001200210d40b1a2004200020026a36020041000be90201037f230041106b220224002000280200210002400240024002402001418001490d002002410036020c2001418010490d0102402001418080044f0d0020022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c020b024020002802082203200041046a280200470d002000200341011036200028020821030b2000200341016a360208200028020020036a20013a00000c020b20022001413f71418001723a000d2002200141067641c001723a000c410221010b0240200041046a280200200041086a220428020022036b20014f0d002000200320011036200428020021030b200028020020036a2002410c6a200110d40b1a2004200320016a3602000b200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41bc80c000200241086a103b2101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41023602002002420337020c200241c082c000360208200241023602242002200241206a3602182002200241046a36022820022002360220200241086a41d882c0001043000b0b002000350200200110460b3401017f230041106b220224002002200136020c20022000360208200241e083c000360204200241b8c0cd0036020020021047000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41023602002002420337020c2002419483c000360208200241023602242002200241206a3602182002200241046a36022820022002360220200241086a41ac83c0001043000b0d0020002802001a037f0c000b0bd20203027f017e037f230041306b22022400412721030240024020004290ce005a0d00200021040c010b412721030340200241096a20036a2205417c6a20004290ce0080220442f0b17f7e20007ca7220641ffff037141e4006e220741017441a284c0006a2f00003b00002005417e6a2007419c7f6c20066a41ffff037141017441a284c0006a2f00003b00002003417c6a2103200042ffc1d72f5621052004210020050d000b0b02402004a7220541e3004c0d00200241096a2003417e6a22036a2004a7220641ffff037141e4006e2205419c7f6c20066a41ffff037141017441a284c0006a2f00003b00000b02400240200541094a0d00200241096a2003417f6a22036a200541306a3a00000c010b200241096a2003417e6a22036a200541017441a284c0006a2f00003b00000b200141b8c0cd004100200241096a20036a412720036b10492103200241306a240020030b6f01017f230041c0006b220124002001200036020c200141346a410136020020014201370224200141a4fec7003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a103a41014188d0c00041072001280210200128021810d30100000b0c0042c0bda29dd583dac54a0bf50401077f20002802002205410171220620046a21070240024020054104710d00410021010c010b4100210802402002450d00200221092001210a03402008200a2d000041c00171418001476a2108200a41016a210a2009417f6a22090d000b0b200820076a21070b412b418080c40020061b21060240024020002802084101460d004101210a2000200620012002104a0d012000280218200320042000411c6a28020028020c1100000f0b02402000410c6a280200220820074b0d004101210a2000200620012002104a0d012000280218200320042000411c6a28020028020c1100000f0b024002402005410871450d00200028020421052000413036020420002d0020210b4101210a200041013a00202000200620012002104a0d02200820076b41016a210a2000411c6a2802002108200028021821090340200a417f6a220a450d02200941302008280210110100450d000b41010f0b4100210a200820076b22092105024002400240410120002d0020220820084103461b4103710e03020100020b2009410176210a200941016a41017621050c010b410021052009210a0b200a41016a210a2000411c6a2802002109200028020421082000280218210702400340200a417f6a220a450d01200720082009280210110100450d000b41010f0b4101210a2008418080c400460d012000200620012002104a0d01200720032004200928020c1100000d014100210a0240034002402005200a470d002005210a0c020b200a41016a210a200720082009280210110100450d000b200a417f6a210a0b200a200549210a0c010b4101210a200920032004200828020c1100000d002000200b3a00202000200536020441000f0b200a0b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341ec85c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021043000b9d08010a7f20002802102103024002400240200028020822044101460d0020034101460d012000280218200120022000411c6a28020028020c1100000f0b20034101470d010b200120026a2105024002400240200041146a28020022060d0041002107200121030c010b41002107200121030340200322082005460d02200841016a2103024020082c00002209417f4a0d00200941ff017121090240024020032005470d004100210a200521030c010b200841026a210320082d0001413f71210a0b200941e001490d000240024020032005470d004100210b2005210c0c010b200341016a210c20032d0000413f71210b0b0240200941f0014f0d00200c21030c010b02400240200c2005470d004100210c200521030c010b200c41016a2103200c2d0000413f71210c0b200a410c742009411274418080f0007172200b41067472200c72418080c400460d030b200720086b20036a21072006417f6a22060d000b0b20032005460d00024020032c00002208417f4a0d0002400240200341016a2005470d0041002103200521060c010b200341026a210620032d0001413f7141067421030b200841ff017141e001490d000240024020062005470d0041002106200521090c010b200641016a210920062d0000413f7121060b200841ff017141f001490d00200841ff01712108200620037221030240024020092005470d00410021050c010b20092d0000413f7121050b20034106742008411274418080f0007172200572418080c400460d010b024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b0240024002402002450d004100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000b2008200028020c22054f0d014100210820022107200121030340200820032d000041c00171418001476a2108200341016a21032007417f6a22070d000c030b0b41002108200028020c22050d010b2000280218200120022000411c6a28020028020c1100000f0b41002103200520086b22082106024002400240410020002d0020220720074103461b4103710e03020100020b20084101762103200841016a41017621060c010b41002106200821030b200341016a21032000411c6a28020021072000280204210820002802182105024003402003417f6a2203450d01200520082007280210110100450d000b41010f0b4101210302402008418080c400460d00200520012002200728020c1100000d004100210302400340024020062003470d00200621030c020b200341016a2103200520082007280210110100450d000b2003417f6a21030b200320064921030b20030bc80801057f230041f0006b220524002005200336020c20052002360208024002402001418102490d00410020016b21064180022107024003400240200720014f0d00200020076a2c000041bf7f4c0d00200721080c020b2007417f6a210820074101460d01200620076a21092008210720094101470d000b0b2005200836021420052000360210200541ae86c000360218410521070c010b2005200136021420052000360210200541b8c0cd00360218410021070b2005200736021c0240024002400240200220014b22070d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b200520023602202002450d0220022001460d02200141016a210903400240200220014f0d00200020026a2c000041404e0d040b2002417f6a210720024101460d0420092002462108200721022008450d000c040b0b20052002200320071b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541b486c0003602302005410236024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a20041043000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4102360200200541306a41146a410436020020054204370234200541cc86c0003602302005410236024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a20041043000b200221070b024020072001460d00410121094100210602400240200020076a22022c000022084100480d002005200841ff01713602240c010b200020016a220921010240200241016a2009460d00200241026a210120022d0001413f7121060b2008411f71210202400240200841ff017141e0014f0d00200620024106747221080c010b4100210020092103024020012009460d00200141016a210320012d0000413f7121000b200020064106747221010240200841ff017141f0014f0d0020012002410c747221080c010b41002108024020032009460d0020032d0000413f7121080b20014106742002411274418080f00071722008722208418080c400460d020b20052008360224410121092008418001490d00410221092008418010490d0041034104200841808004491b21090b200520073602282005200920076a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541ec86c0003602302005410236024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541286a3602582005200541246a3602502005200541206a360248200541306a20041043000b41a5cbc800412b20041035000b1000200120002802002000280204104c0b7c01037f230041206b2202240002402000280200200110530d002001411c6a2802002103200128021821042002411c6a4100360200200241b8c0cd003602182002420137020c200241d487c00036020820042003200241086a103b0d002000280204200110532101200241206a240020010f0b200241206a240041010ba20403047f017e017f4101210202402001280218220341272001411c6a28020028021022041101000d0041f40021054102210102400240024002400240024002402000280200220041776a0e1f06010404000404040404040404040404040404040404040404040404040402030b41f2002105410221010c050b41ee0021050c030b41272105410221010c030b41dc002105200041dc00460d010b0240024020001051450d00200041017267410276410773ad4280808080d0008421060c010b024020001052450d0041012101200021050c030b200041017267410276410773ad4280808080d0008421060b41032101200021050c010b410221010b03402001210741dc002100410121024101210102400240024002400240024020070e0402010500020b02400240024002402006422088a741ff01710e06050302010006050b200642ffffffff8f608342808080803084210641f50021000c060b200642ffffffff8f608342808080802084210641fb0021000c050b413041d70020052006a72201410274411c7176410f712200410a491b20006a2100024020010d00200642ffffffff8f60834280808080108421060c050b2006427f7c42ffffffff0f832006428080808070838421060c040b200642ffffffff8f6083210641fd0021000c030b41002101200521000c030b2003412720041101000f0b200642ffffffff8f60834280808080c0008421060b410321010b200320002004110100450d000b0b20020bec0201057f2000410b74210141002102411f2103411f210402400240034002400240200341017620026a220341027441f093c0006a280200410b74220520014f0d00200341016a21020c010b20052001460d02200321040b200420026b2103200420024b0d000c020b0b200341016a21020b0240024002402002411e4b0d002002410274210341b105210402402002411e460d00200341f493c0006a28020041157621040b4100210502402002417f6a220120024b0d002001411f4f0d03200141027441f093c0006a28020041ffffff007121050b02402004200341f093c0006a280200411576220241016a460d00200020056b2101200241b105200241b1054b1b21032004417f6a210541002104034020032002460d032004200241fc94c0006a2d00006a220420014b0d012005200241016a2202470d000b200521020b20024101710f0b2002411f41b09ac000103c000b200341b10541c09ac000103c000b2001411f41ec94c000103c000bd70601067f024002400240024002400240024002400240200041ffff034b0d0041ad88c000210141002102200041087641ff0171210302400340200141026a2104200220012d000122056a21060240024020012d000022012003470d0020062002490d06200641a3024f0d072002419089c0006a210103402005450d022005417f6a210520012d00002102200141016a21012002200041ff0171470d000b410021050c050b200120034b0d022006210220042101200441ff88c000470d010c020b2006210220042101200441ff88c000470d000b0b200041ffff0371210041b28bc0002101410121050340200141016a21060240024020012d000022024118744118752204417f4a0d00200641e78dc000460d07200441ff007141087420012d0001722102200141026a21010c010b200621010b200020026b22004100480d0220054101732105200141e78dc000470d000c020b0b0240200041ffff074b0d0041f88dc000210141002102200041087641ff0171210302400340200141026a2104200220012d000122056a21060240024020012d000022012003470d0020062002490d09200641b0014f0d0a200241c48ec0006a210103402005450d022005417f6a210520012d00002102200141016a21012002200041ff0171470d000b410021050c050b200120034b0d022006210220042101200441c48ec000470d010c020b2006210220042101200441c48ec000470d000b0b200041ffff0371210041f38fc0002101410121050340200141016a21060240024020012d000022024118744118752204417f4a0d002006419693c000460d0a200441ff007141087420012d0001722102200141026a21010c010b200621010b200020026b22004100480d02200541017321052001419693c000470d000c020b0b41002105200041e28b746a41e20b490d002000419fa8746a419f18490d00200041dee2746a410e490d00200041feffff0071419ef00a460d00200041a2b2756a4122490d00200041cb91756a410b4f0d070b20054101710f0b20022006418089c0001055000b200641a202418089c000104b000b41a5cbc800412b41e88dc0001035000b20022006418089c0001055000b200641af01418089c000104b000b41a5cbc800412b41e88dc0001035000b200041f0833849200041b5d9736a41b4db2b4b710ba70201037f23004180016b22022400024002400240024020012802002203411071450d00410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d02200141f1c5c0004102200220036a4180016a410020036b104921000c010b02402003412071450d00410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d03200141f1c5c0004102200220036a4180016a410020036b104921000c010b2000ad2001104621000b20024180016a240020000f0b200041800141e087c0001054000b200041800141e087c0001054000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341f087c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021043000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41023602002003420237020c200341bc93c000360208200341023602242003200341206a3602182003200341046a36022820032003360220200341086a20021043000bec0201017f230041f0006b220624002006200136020c2006200036020820062003360214200620023602102006410236021c200641b09bc000360218024020042802000d00200641386a41146a4103360200200641c4006a4103360200200641d8006a41146a41033602002006420437025c200641b49bc0003602582006410436023c2006200641386a3602682006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051043000b200641206a41106a200441106a290200370300200641206a41086a200441086a29020037030020062004290200370320200641d8006a41146a4104360200200641d4006a4108360200200641386a41146a4103360200200641c4006a41033602002006420437025c200641d49bc0003602582006410436023c2006200641386a3602682006200641206a3602502006200641106a3602482006200641086a3602402006200641186a360238200641d8006a20051043000b140020002802002001200028020428020c1101000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a103b2100200241206a240020000b1c00200128021841ae9cc000410b2001411c6a28020028020c1100000b1c00200128021841b99cc000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a410136020020034201370214200341a4fec7003602102003410436022c2003200341286a3602202003200341086a360228200341106a20021043000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a103b2101200241206a240020010b15002001200028020022002802002000280204104c0bfe0401097f0240024002402002450d002000280204210320002802002104200028020821050340024020052d0000450d002004418a9dc0004104200328020c110000450d0041010f0b4100210620022107024002400340200120066a210802400240200741074b0d002007450d03410021000340200820006a2d0000410a460d022007200041016a2200470d000c040b0b024002400240200841036a417c7120086b2200450d0020072000200020074b1b2109410021000340200820006a2d0000410a460d042009200041016a2200470d000b2009200741786a220a4b0d020c010b200741786a210a410021090b02400340200820096a220041046a280200220b417f73200b418a94a8d0007341fffdfb776a7120002802002200417f732000418a94a8d0007341fffdfb776a7172418081828478710d01200941086a2209200a4d0d000b0b200920074b0d070b20092007460d02200720096b21072001200920066a6a21084100210002400340200820006a2d0000410a460d012007200041016a2200470d000c040b0b200920006a21000b200020066a220041016a21060240200020024f0d00200120006a2d0000410a470d00410121000c030b200220066b2107200220064f0d000b0b41002100200221060b200520003a000002400240024020022006460d000240200220064d0d00200120066a22002c000041bf7f4a0d020b200120024100200641909dc000104d000b200420012002200328020c110000450d0141010f0b0240200420012006200328020c110000450d0041010f0b20002c000041bf7f4c0d040b200120066a2101200220066b22020d000b0b41000f0b2009200741d09dc0001054000b200120022006200241a09dc000104d000bb20302057f027e230041c0006b2205240041012106024020002d00040d0020002d000521070240200028020022082802002209410471450d000240200741ff01710d0041012106200828021841859ec00041032008411c6a28020028020c1100000d02200828020021090b41012106200541013a0017200541346a41889ec00036020020052009360218200520082902183703082005200541176a3602102008290208210a2008290210210b200520082d00203a00382005200828020436021c2005200b3703282005200a3703202005200541086a360230200541086a20012002105e0d01200541086a41f6d2cd004102105e0d012003200541186a200428020c1101000d01200528023041a09ec0004102200528023428020c11000021060c010b41012106200828021841839ec00041809ec000200741ff017122071b4102410320071b2008411c6a28020028020c1100000d0041012106200828021820012002200828021c28020c1100000d0041012106200828021841f6d2cd004102200828021c28020c1100000d0020032008200428020c11010021060b200041013a0005200020063a0004200541c0006a240020000bf30101017f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002002410c6a2001105e2101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41a49ec000200241086a103b2101200241206a240020010b0d00200028020020012002105e0bfa0101017f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002002410c6a2001105e2101200241106a240020010b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41a49ec000200241086a103b2101200241206a240020010bee0202057f027e230041c0006b220324000240024020002d0008450d0020002802042104410121050c010b20002802042104024002400240200028020022062802002207410471450d0020040d02200628021841c09ec00041022006411c6a28020028020c110000450d0141012105410021040c030b41012105200628021841839ec00041bf9ec00020041b4102410120041b2006411c6a28020028020c1100000d0220012006200228020c11010021050c020b200628020021070b41012105200341013a0017200341346a41889ec00036020020032007360218200320062902183703082003200341176a3602102006290208210820062902102109200320062d00203a00382003200628020436021c20032009370328200320083703202003200341086a3602302001200341186a200228020c1101000d00200328023041a09ec0004102200328023428020c11000021050b200020053a00082000200441016a360204200341c0006a240020000bd70202047f027e230041c0006b2203240041012104024020002d00040d0020002d000521040240200028020022052802002206410471450d000240200441ff01710d0041012104200528021841c39ec00041012005411c6a28020028020c1100000d02200528020021060b41012104200341013a0017200341346a41889ec00036020020032006360218200320052902183703082003200341176a3602102005290208210720052902102108200320052d00203a00382003200528020436021c20032008370328200320073703202003200341086a3602302001200341186a200228020c1101000d01200328023041a09ec0004102200328023428020c11000021040c010b0240200441ff0171450d0041012104200528021841839ec00041022005411c6a28020028020c1100000d010b20012005200228020c11010021040b200041013a0005200020043a0004200341c0006a240020000bc30603037f027e027f02402002280200220341134c0d00024002400240200042808084fea6dee111540d002002200341706a2204360200200320016a2205417c6a200042808084fea6dee111802206428080fc81d9a19e6e7e20007c220042e40080220742e40082a741017441a284c0006a2f00003b00002005417a6a20004290ce008042e40082a741017441a284c0006a2f00003b0000200541786a200042c0843d8042e40082a741017441a284c0006a2f00003b0000200541766a20004280c2d72f80a741e4007041017441a284c0006a2f00003b0000200541746a20004280c8afa02580a741e4007041017441a284c0006a2f00003b0000200541726a20004280a094a58d1d80a741ffff037141e4007041017441a284c0006a2f00003b0000200120046a2000428080e983b1de1680a741ff017141e4007041017441a284c0006a2f00003b00002007429c7f7e20007ca721050c010b024020004280c2d72f5a0d0020032104200021060c020b2002200341786a2204360200200320016a2208417c6a20004280c2d72f8022064280bea8507e20007ca7220541e4006e220941e4007041017441a284c0006a2f00003b00002008417a6a20054190ce006e41ffff037141e4007041017441a284c0006a2f00003b0000200120046a200541c0843d6e41ff017141e4007041017441a284c0006a2f00003b00002009419c7f6c20056a21050b200320016a417e6a200541017441a284c0006a2f00003b00000b024002402006a722084190ce004f0d0020042103200821050c010b20012004417c6a22036a20084190ce006e220541f0b17f6c20086a220841ffff037141e4006e220941017441a284c0006a2f00003b0000200420016a417e6a2009419c7f6c20086a41ffff037141017441a284c0006a2f00003b00000b02400240200541ffff0371220441e4004f0d00200521040c010b20012003417e6a22036a200441e4006e2204419c7f6c20056a41ffff037141017441a284c0006a2f00003b00000b0240200441ffff037141094b0d0020022003417f6a2203360200200120036a200441306a3a00000f0b20022003417e6a2203360200200120036a200441ffff037141017441a284c0006a2f00003b00000f0b41c59ec000411c41e49ec0001035000b2400024020002d0000450d00200141819dc0004104104c0f0b200141859dc0004105104c0bc108020d7f017e41012103024002402002280218220441222002411c6a280200220528021022061101000d000240024020010d00410021070c010b200020016a210820002109410021072000210a4100210b02400340200a41016a210c024002400240200a2c000022024100480d00200241ff0171210d0c010b02400240200c2008470d00410021032008210c0c010b200a41026a210c200a2d0001413f7121030b2002411f71210e0240200241ff0171220241e0014f0d002003200e41067472210d0c010b02400240200c2008470d004100210f2008210a0c010b200c41016a210a200c2d0000413f71210f0b200f20034106747221030240200241f0014f0d002003200e410c7472210d200a210c0c020b02400240200a2008470d00410021022008210c0c010b200a2d0000413f712102200a41016a220c210a0b2003410674200e411274418080f0007172200272220d418080c400470d010c030b200c210a0b41f400210f4102210202400240024002400240024002400240200d41776a0e1a0601040400040404040404040404040404040404040404040402030b41f200210f0c050b41ee00210f0c040b4122210f0c030b200d41dc00460d010b0240200d10510d00200d10520d030b200d41017267410276410773ad4280808080d00084211041032102200d210f0c010b41dc00210f0b02400240200b2007490d0002402007450d0020072001460d00200720014f0d01200020076a2c000041bf7f4c0d010b0240200b450d00200b2001460d00200b20014f0d012000200b6a2c000041bf7f4c0d010b2004200020076a200b20076b200528020c110000450d0141010f0b200020012007200b41849fc000104d000b03402002210e4101210341dc00210741012102024002400240024002400240200e0e0402010500020b02400240024002402010422088a741ff01710e06050302010006050b201042ffffffff8f60834280808080308421104103210241f50021070c070b201042ffffffff8f60834280808080208421104103210241fb0021070c060b413041d700200f2010a72202410274411c7176410f712207410a491b20076a2107024020020d00201042ffffffff8f60834280808080108421100c050b2010427f7c42ffffffff0f832010428080808070838421100c040b201042ffffffff8f608321104103210241fd0021070c040b41002102200f21070c030b410121020240200d418001490d0041022102200d418010490d0041034104200d41808004491b21020b2002200b6a21070c040b201042ffffffff8f60834280808080c0008421100b410321020b2004200720061101000d050c000b0b200b20096b200c6a210b200a2109200a2008470d000b0b2007450d0020072001460d00200720014f0d02200020076a2c000041bf7f4c0d020b410121032004200020076a200120076b200528020c1100000d0020044122200611010021030b20030f0b200020012007200141f49ec000104d000b0b002000310000200110460b870101027f23004180016b2202240020002d00002103410021000340200220006a41ff006a20034101714130723a00002000417f6a2100200341017641ff007122030d000b024020004180016a2203418101490d00200341800141e087c0001054000b200141af9fc0004102200220006a4180016a410020006b1049210020024180016a240020000b1c00200128021841e4b4c00041052001411c6a28020028020c1100000bc80401067e20002001290320220242338842137e2001290300220342ffffffffffffff03837c220442137c4233882001290308220542ffffffffffffff038320034233887c22037c4233882001290310220642ffffffffffffff038320054233887c22057c4233882001290318220742ffffffffffffff038320064233887c22067c423388200242ffffffffffffff038320074233887c22077c42338842137e20047c22023c0000200020024228883c0005200020024220883c0004200020024218883c0003200020024210883c0002200020024208883c00012000200242338820037c22044225883c000b20002004421d883c000a200020044215883c000920002004420d883c0008200020044205883c00072000200442338820057c2203422a883c0012200020034222883c001120002003421a883c0010200020034212883c000f20002003420a883c000e200020034202883c000d2000200442ffffffffffffff038322044203862002423088420783843c00062000200342338820067c22024227883c001820002002421f883c0017200020024217883c001620002002420f883c0015200020024207883c00142000200342ffffffffffffff038322054206862004422d88843c000c2000200242338820077c22034224883c001e20002003421c883c001d200020034214883c001c20002003420c883c001b200020034204883c001a2000200242ffffffffffffff038322024201862005423288843c00132000200342ffffffffffffff03832203422c883c001f200020034204862002422f88843c00190b7101027f230041c0006b2202240020022000106d200241206a2001106d41002101410121000340200241206a20016a2d0000200220016a2d0000732203410020036b72417f7341800171410776106f2000712100200141016a22014120470d000b2000106f2101200241c0006a240020010b1501017f230041106b220120003a000f20012d000f0bd00702017f147e230041f0016b2203240020012903202104200129031821052001290310210620012903082107200129030021080340200341b0016a200842002008420010d30b20034180016a20074200200442137e2209420010d30b200341c0006a200542137e220a42002006420010d30b200341e0016a200a42002005420010d30b200341f0006a200842002007420010d30b200341306a200642002009420010d30b200341e0006a200742002007420010d30b200341206a200842002006420010d30b200341d0016a200a42002004420010d30b200341c0016a200942002004420010d30b200341a0016a200842002005420010d30b200341106a200742002006420010d30b2003200642002006420010d30b20034190016a200842002004420010d30b200341d0006a200742002005420010d30b200329039001220b20032903507c2206420186220c20032903007c220720032903a001220d20032903107c2208420186220e20032903c0017c22042003290320220f20032903d0017c2205420186221020032903607c22092003290370221120032903307c220a420186221220032903e0017c2213200329038001221420032903407c2215420186221620032903b0017c221742338820034180016a41086a290300200341c0006a41086a2903007c2015201454ad7c4201862015423f8884200341b0016a41086a2903007c2017201654ad7c420d86847c2215423388200341f0006a41086a290300200341306a41086a2903007c200a201154ad7c420186200a423f8884200341e0016a41086a2903007c2013201254ad7c2015201354ad7c420d86847c220a423388200341206a41086a290300200341d0016a41086a2903007c2005200f54ad7c4201862005423f8884200341e0006a41086a2903007c2009201054ad7c200a200954ad7c420d86847c2205423388200341a0016a41086a290300200341106a41086a2903007c2008200d54ad7c4201862008423f8884200341c0016a41086a2903007c2004200e54ad7c2005200454ad7c420d86847c220442338820034190016a41086a290300200341d0006a41086a2903007c2006200b54ad7c4201862006423f8884200341086a2903007c2007200c54ad7c2004200754ad7c420d868442137e201742ffffffffffffff03837c220642ffffffffffffff038321082006423388201542ffffffffffffff03837c2107200442ffffffffffffff03832104200542ffffffffffffff03832105200a42ffffffffffffff038321062002417f6a22020d000b2000200437032020002005370318200020063703102000200737030820002008370300200341f0016a24000bb1d50103017f297e057f230041d0c1006b22032400200341a8c1006a200241011070200341a0386a20022903002204420020032903a8412205420010d30b200341b0396a20032903c841220642002002290308220742137e2208420010d30b200341f0396a20032903c041220942002002290310220a42137e220b420010d30b200341b03a6a20032903b841220c42002002290318220d42137e220e420010d30b200341f03a6a20032903b041220f42002002290320221042137e2211420010d30b200341f0386a200f42002004420010d30b200341b0386a200542002007420010d30b200341c0396a20064200200b420010d30b200341803a6a20094200200e420010d30b200341c03a6a200c42002011420010d30b20034180396a200c42002004420010d30b200341803b6a200f42002007420010d30b200341c0386a20054200200a420010d30b200341d0396a20064200200e420010d30b200341903a6a200942002011420010d30b20034190396a200942002004420010d30b200341d03a6a200c42002007420010d30b200341903b6a200f4200200a420010d30b200341d0386a20054200200d420010d30b200341e0396a200642002011420010d30b200341a0396a200642002004420010d30b200341a03a6a200942002007420010d30b200341e03a6a200c4200200a420010d30b200341a03b6a200f4200200d420010d30b200341e0386a200542002010420010d30b200320032903d039221220032903c0387c220520032903903a7c22062003290380397c220920032903803b7c220c20032903c039221320032903b0387c220f20032903803a7c221420032903c03a7c221520032903f0387c221620032903b039221720032903a0387c221820032903f0397c221920032903b03a7c221a20032903f03a7c221b423388200341b0396a41086a290300200341a0386a41086a2903007c2018201754ad7c200341f0396a41086a2903007c2019201854ad7c200341b03a6a41086a2903007c201a201954ad7c200341f03a6a41086a2903007c201b201a54ad7c420d86847c2219423388200341c0396a41086a290300200341b0386a41086a2903007c200f201354ad7c200341803a6a41086a2903007c2014200f54ad7c200341c03a6a41086a2903007c2015201454ad7c200341f0386a41086a2903007c2016201554ad7c2019201654ad7c420d86847c220f42ffffffffffffff038322143703c03b200320032903e039221720032903d0387c22152003290390397c221620032903d03a7c221a20032903903b7c2213200f423388200341d0396a41086a290300200341c0386a41086a2903007c2005201254ad7c200341903a6a41086a2903007c2006200554ad7c20034180396a41086a2903007c2009200654ad7c200341803b6a41086a2903007c200c200954ad7c200f200c54ad7c420d86847c220542ffffffffffffff038322183703c83b200320032903a039221220032903e0387c220620032903a03a7c220920032903e03a7c220c20032903a03b7c220f2005423388200341e0396a41086a290300200341d0386a41086a2903007c2015201754ad7c20034190396a41086a2903007c2016201554ad7c200341d03a6a41086a2903007c201a201654ad7c200341903b6a41086a2903007c2013201a54ad7c2005201354ad7c420d86847c220542ffffffffffffff0383221a3703d03b20032005423388200341a0396a41086a290300200341e0386a41086a2903007c2006201254ad7c200341a03a6a41086a2903007c2009200654ad7c200341e03a6a41086a2903007c200c200954ad7c200341a03b6a41086a2903007c200f200c54ad7c2005200f54ad7c420d868442137e201b42ffffffffffffff03837c220542ffffffffffffff0383220c3703b03b20032005423388201942ffffffffffffff03837c220f3703b83b200341a8c1006a200341b03b6a4101107020034190356a20032903a841220542002004420010d30b200341e0356a20032903c841220642002008420010d30b200341b0366a20032903c04122094200200b420010d30b20034180376a20032903b84122154200200e420010d30b200341d0376a20032903b041221642002011420010d30b200341e0376a201642002004420010d30b200341a0356a200542002007420010d30b200341f0356a20064200200b420010d30b200341c0366a20094200200e420010d30b20034190376a201542002011420010d30b200341a0376a201542002004420010d30b200341f0376a201642002007420010d30b200341b0356a20054200200a420010d30b20034180366a20064200200e420010d30b200341d0366a200942002011420010d30b200341e0366a200942002004420010d30b200341b0376a201542002007420010d30b20034180386a20164200200a420010d30b200341c0356a20054200200d420010d30b20034190366a200642002011420010d30b200341a0366a200642002004420010d30b200341f0366a200942002007420010d30b200341c0376a20154200200a420010d30b20034190386a20164200200d420010d30b200341d0356a200542002010420010d30b200341800d6a200c420020012903002211420010d30b20034190346a200f42137e42002001290320220e420010d30b200341d0336a200129031822054200201442137e220b420010d30b20034190336a200129031022064200201842137e2216420010d30b200341c0326a200129030822094200201a42137e2215420010d30b200341f00c6a20094200200c420010d30b20034180356a200f42002011420010d30b20034180346a200e4200200b420010d30b200341c0336a200542002016420010d30b20034180336a200642002015420010d30b200341e00c6a200c42002006420010d30b200341b0326a200f42002009420010d30b200341f0346a201142002014420010d30b200341f0336a200e42002016420010d30b200341b0336a200542002015420010d30b200341800c6a200c42002005420010d30b200341f0326a200f42002006420010d30b200341a0326a200942002014420010d30b200341e0346a201142002018420010d30b200341e0336a20154200200e420010d30b200341a00b6a200c4200200e420010d30b200341a0336a200f42002005420010d30b200341e0326a200642002014420010d30b20034190326a200942002018420010d30b200341d0346a201a42002011420010d30b20034180306a20032903a036221c20032903d0357c220c20032903f0367c220f20032903c0377c22142003290390387c2215200329039036221d20032903c0357c221620032903e0367c220b20032903b0377c22182003290380387c2219200329038036221e20032903b0357c221a20032903d0367c221b20032903a0377c221320032903f0377c220820032903f035221f20032903a0357c221220032903c0367c22172003290390377c222020032903e0377c222120032903e03522222003290390357c222320032903b0367c22242003290380377c222520032903d0377c2226423388200341e0356a41086a29030020034190356a41086a2903007c2023202254ad7c200341b0366a41086a2903007c2024202354ad7c20034180376a41086a2903007c2025202454ad7c200341d0376a41086a2903007c2026202554ad7c420d86847c2223423388200341f0356a41086a290300200341a0356a41086a2903007c2012201f54ad7c200341c0366a41086a2903007c2017201254ad7c20034190376a41086a2903007c2020201754ad7c200341e0376a41086a2903007c2021202054ad7c2023202154ad7c420d86847c221242338820034180366a41086a290300200341b0356a41086a2903007c201a201e54ad7c200341d0366a41086a2903007c201b201a54ad7c200341a0376a41086a2903007c2013201b54ad7c200341f0376a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a42338820034190366a41086a290300200341c0356a41086a2903007c2016201d54ad7c200341e0366a41086a2903007c200b201654ad7c200341b0376a41086a2903007c2018200b54ad7c20034180386a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2216423388200341a0366a41086a290300200341d0356a41086a2903007c200c201c54ad7c200341f0366a41086a2903007c200f200c54ad7c200341c0376a41086a2903007c2014200f54ad7c20034190386a41086a2903007c2015201454ad7c2016201554ad7c420d868442137e202642ffffffffffffff03837c220f42ffffffffffffff0383220c42002011420010d30b200341d0306a200f423388202342ffffffffffffff03837c220f42137e4200200e420010d30b200341f0306a201242ffffffffffffff0383221442137e221942002005420010d30b200341a0316a201a42ffffffffffffff0383220b42137e221842002006420010d30b200341e0316a201642ffffffffffffff0383221642137e221542002009420010d30b200341f02f6a200c42002009420010d30b200341c0306a200f42002011420010d30b200341e0306a20194200200e420010d30b20034190316a201842002005420010d30b200341d0316a201542002006420010d30b200341e02f6a200c42002006420010d30b200341b0306a200f42002009420010d30b200341c0346a201442002011420010d30b20034180316a20184200200e420010d30b200341c0316a201542002005420010d30b200341d02f6a200c42002005420010d30b200341a0306a200f42002006420010d30b20034180326a201442002009420010d30b200341b0346a200b42002011420010d30b200341b0316a20154200200e420010d30b200341c02f6a200c4200200e420010d30b20034190306a200f42002005420010d30b200341d0326a201442002006420010d30b200341f0316a200b42002009420010d30b200341a0346a201642002011420010d30b2003200329038031221220032903c0347c220f20032903c0317c221420032903e02f7c221520032903b0307c2216200329039031221720032903e0307c220c20032903d0317c220b20032903f02f7c221820032903c0307c221920032903a031222020032903f0307c221a20032903e0317c221b2003290380307c221320032903d0307c2208423388200341a0316a41086a290300200341f0306a41086a2903007c201a202054ad7c200341e0316a41086a2903007c201b201a54ad7c20034180306a41086a2903007c2013201b54ad7c200341d0306a41086a2903007c2008201354ad7c420d86847c221a42338820034190316a41086a290300200341e0306a41086a2903007c200c201754ad7c200341d0316a41086a2903007c200b200c54ad7c200341f02f6a41086a2903007c2018200b54ad7c200341c0306a41086a2903007c2019201854ad7c201a201954ad7c420d86847c220b42ffffffffffffff0383220c3703e83b200320032903b03422172003290380327c221820032903b0317c221920032903d02f7c221b20032903a0307c2213200b42338820034180316a41086a290300200341c0346a41086a2903007c200f201254ad7c200341c0316a41086a2903007c2014200f54ad7c200341e02f6a41086a2903007c2015201454ad7c200341b0306a41086a2903007c2016201554ad7c200b201654ad7c420d86847c221442ffffffffffffff0383220f3703f03b200320032903f031222020032903d0327c221520032903a0347c221620032903c02f7c220b2003290390307c22122014423388200341b0346a41086a29030020034180326a41086a2903007c2018201754ad7c200341b0316a41086a2903007c2019201854ad7c200341d02f6a41086a2903007c201b201954ad7c200341a0306a41086a2903007c2013201b54ad7c2014201354ad7c420d86847c221842ffffffffffffff038322143703f83b20032018423388200341f0316a41086a290300200341d0326a41086a2903007c2015202054ad7c200341a0346a41086a2903007c2016201554ad7c200341c02f6a41086a2903007c200b201654ad7c20034190306a41086a2903007c2012200b54ad7c2018201254ad7c420d868442137e200842ffffffffffffff03837c221642ffffffffffffff038322153703d83b20032016423388201a42ffffffffffffff03837c22163703e03b200341803c6a200341d83b6a41011070200341a8c1006a200341803c6a41011070200341a83c6a200341a8c1006a41011070200341b02f6a20032903a83c220b42002015420010d30b200341b02c6a2014420020032903b03c221842137e420010d30b200341902d6a200f420020032903b83c221942137e2208420010d30b200341f02d6a200c420020032903c03c221b42137e2213420010d30b200341d02e6a2016420020032903c83c221242137e221a420010d30b200341a02f6a20164200200b420010d30b200341f02c6a201542002018420010d30b200341802d6a201442002008420010d30b200341e02d6a200f42002013420010d30b200341c02e6a200c4200201a420010d30b200341902f6a200c4200200b420010d30b200341e02c6a201642002018420010d30b200341c02d6a201542002019420010d30b200341d02d6a201442002013420010d30b200341b02e6a200f4200201a420010d30b200341802f6a200f4200200b420010d30b200341d02c6a200c42002018420010d30b200341b02d6a201642002019420010d30b200341902e6a20154200201b420010d30b200341a02e6a20144200201a420010d30b200341f02e6a20144200200b420010d30b200341c02c6a200f42002018420010d30b200341a02d6a200c42002019420010d30b200341802e6a20164200201b420010d30b200341e02e6a201542002012420010d30b200341e0296a20032903f02e222720032903e02e7c220b20032903c02c7c221820032903a02d7c221920032903802e7c221a20032903a02e222820032903902e7c221b20032903802f7c221320032903d02c7c220820032903b02d7c221220032903d02d222920032903c02d7c221720032903b02e7c222020032903902f7c222120032903e02c7c222320032903802d222a20032903f02c7c222420032903e02d7c222520032903c02e7c222620032903a02f7c221c20032903b02c222b20032903b02f7c221d20032903902d7c221e20032903f02d7c221f20032903d02e7c2222423388200341b02c6a41086a290300200341b02f6a41086a2903007c201d202b54ad7c200341902d6a41086a2903007c201e201d54ad7c200341f02d6a41086a2903007c201f201e54ad7c200341d02e6a41086a2903007c2022201f54ad7c420d86847c221d423388200341802d6a41086a290300200341f02c6a41086a2903007c2024202a54ad7c200341e02d6a41086a2903007c2025202454ad7c200341c02e6a41086a2903007c2026202554ad7c200341a02f6a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341d02d6a41086a290300200341c02d6a41086a2903007c2017202954ad7c200341b02e6a41086a2903007c2020201754ad7c200341902f6a41086a2903007c2021202054ad7c200341e02c6a41086a2903007c2023202154ad7c2024202354ad7c420d86847c2217423388200341a02e6a41086a290300200341902e6a41086a2903007c201b202854ad7c200341802f6a41086a2903007c2013201b54ad7c200341d02c6a41086a2903007c2008201354ad7c200341b02d6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b423388200341f02e6a41086a290300200341e02e6a41086a2903007c200b202754ad7c200341c02c6a41086a2903007c2018200b54ad7c200341a02d6a41086a2903007c2019201854ad7c200341802e6a41086a2903007c201a201954ad7c201b201a54ad7c420d868442137e202242ffffffffffffff03837c221842ffffffffffffff0383220b420020032903803c2213420010d30b200341b02a6a2018423388201d42ffffffffffffff03837c221842137e420020032903a03c2208420010d30b200341d02a6a202442ffffffffffffff0383221942137e2224420020032903983c2212420010d30b200341802b6a201742ffffffffffffff0383221a42137e2223420020032903903c2217420010d30b200341c02b6a201b42ffffffffffffff0383221b42137e2221420020032903883c2220420010d30b200341d0296a200b42002020420010d30b200341a02a6a201842002013420010d30b200341c02a6a202442002008420010d30b200341f02a6a202342002012420010d30b200341b02b6a202142002017420010d30b200341c0296a200b42002017420010d30b200341902a6a201842002020420010d30b200341d02b6a201942002013420010d30b200341e02a6a202342002008420010d30b200341a02b6a202142002012420010d30b200341b0296a200b42002012420010d30b200341802a6a201842002017420010d30b200341e02b6a201942002020420010d30b200341802c6a201a42002013420010d30b200341902b6a202142002008420010d30b200341a0296a200b42002008420010d30b200341f0296a201842002012420010d30b200341f02b6a201942002017420010d30b200341902c6a201a42002020420010d30b200341a02c6a201b42002013420010d30b200320032903e02a221e20032903d02b7c221320032903a02b7c220820032903c0297c221220032903902a7c221720032903f02a221f20032903c02a7c222020032903b02b7c222120032903d0297c222320032903a02a7c222420032903802b222220032903d02a7c222520032903c02b7c222620032903e0297c221c20032903b02a7c221d423388200341802b6a41086a290300200341d02a6a41086a2903007c2025202254ad7c200341c02b6a41086a2903007c2026202554ad7c200341e0296a41086a2903007c201c202654ad7c200341b02a6a41086a2903007c201d201c54ad7c420d86847c2225423388200341f02a6a41086a290300200341c02a6a41086a2903007c2020201f54ad7c200341b02b6a41086a2903007c2021202054ad7c200341d0296a41086a2903007c2023202154ad7c200341a02a6a41086a2903007c2024202354ad7c2025202454ad7c420d86847c222042ffffffffffffff03833703e03c200320032903802c221c20032903e02b7c222120032903902b7c222320032903b0297c222420032903802a7c22262020423388200341e02a6a41086a290300200341d02b6a41086a2903007c2013201e54ad7c200341a02b6a41086a2903007c2008201354ad7c200341c0296a41086a2903007c2012200854ad7c200341902a6a41086a2903007c2017201254ad7c2020201754ad7c420d86847c221342ffffffffffffff03833703e83c200320032903902c221e20032903f02b7c220820032903a02c7c221220032903a0297c221720032903f0297c22202013423388200341802c6a41086a290300200341e02b6a41086a2903007c2021201c54ad7c200341902b6a41086a2903007c2023202154ad7c200341b0296a41086a2903007c2024202354ad7c200341802a6a41086a2903007c2026202454ad7c2013202654ad7c420d86847c221342ffffffffffffff03833703f03c20032013423388200341902c6a41086a290300200341f02b6a41086a2903007c2008201e54ad7c200341a02c6a41086a2903007c2012200854ad7c200341a0296a41086a2903007c2017201254ad7c200341f0296a41086a2903007c2020201754ad7c2013202054ad7c420d868442137e201d42ffffffffffffff03837c221342ffffffffffffff03833703d03c20032013423388202542ffffffffffffff03837c3703d83c200341f83c6a200341d03c6a4101107020034190296a20032903f83c22134200200b420010d30b20034190266a20032903803d220842137e4200201b420010d30b200341f0266a20032903883d221242137e22234200201a420010d30b200341d0276a20032903903d222042137e222142002019420010d30b200341b0286a20032903983d222442137e221742002018420010d30b20034180296a201342002018420010d30b200341d0266a200b42002008420010d30b200341e0266a20234200201b420010d30b200341c0276a20214200201a420010d30b200341a0286a201742002019420010d30b200341f0286a201342002019420010d30b200341c0266a201842002008420010d30b200341a0276a200b42002012420010d30b200341b0276a20214200201b420010d30b20034190286a20174200201a420010d30b200341e0286a20134200201a420010d30b200341b0266a200842002019420010d30b20034190276a201842002012420010d30b200341f0276a20204200200b420010d30b20034180286a20174200201b420010d30b200341d0286a20134200201b420010d30b200341a0266a20084200201a420010d30b20034180276a201242002019420010d30b200341e0276a201842002020420010d30b200341c0286a20244200200b420010d30b200320032903c026222520032903a0277c220b20032903b0277c22182003290390287c221a20032903f0287c221b20032903e026222420032903d0267c221920032903c0277c221320032903a0287c22082003290380297c221220032903f02622262003290390267c221720032903d0277c22202003290390297c222120032903b0287c2223423388200341f0266a41086a29030020034190266a41086a2903007c2017202654ad7c200341d0276a41086a2903007c2020201754ad7c20034190296a41086a2903007c2021202054ad7c200341b0286a41086a2903007c2023202154ad7c420d86847c2220423388200341e0266a41086a290300200341d0266a41086a2903007c2019202454ad7c200341c0276a41086a2903007c2013201954ad7c200341a0286a41086a2903007c2008201354ad7c20034180296a41086a2903007c2012200854ad7c2020201254ad7c420d86847c221342ffffffffffffff038322193703b03d200320032903f027222620032903b0267c22082003290390277c22122003290380287c222120032903e0287c22242013423388200341c0266a41086a290300200341a0276a41086a2903007c200b202554ad7c200341b0276a41086a2903007c2018200b54ad7c20034190286a41086a2903007c201a201854ad7c200341f0286a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff038322173703b83d2003200329038027222520032903a0267c221820032903e0277c221a20032903c0287c221b20032903d0287c2213200b423388200341f0276a41086a290300200341b0266a41086a2903007c2008202654ad7c20034190276a41086a2903007c2012200854ad7c20034180286a41086a2903007c2021201254ad7c200341e0286a41086a2903007c2024202154ad7c200b202454ad7c420d86847c220b42ffffffffffffff038322213703c03d2003200b42338820034180276a41086a290300200341a0266a41086a2903007c2018202554ad7c200341e0276a41086a2903007c201a201854ad7c200341c0286a41086a2903007c201b201a54ad7c200341d0286a41086a2903007c2013201b54ad7c200b201354ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703a03d20032018423388202042ffffffffffffff03837c22183703a83d200341c83d6a200341a03d6a41051070200341c0236a200b420020032903c83d221a420010d30b200341c0246a201842137e420020032903e83d221b420010d30b20034180256a201942137e2224420020032903e03d2213420010d30b200341c0256a201742137e2223420020032903d83d2208420010d30b20034180266a202142137e2220420020032903d03d2212420010d30b200341b0236a200b42002012420010d30b20034180246a20184200201a420010d30b200341b0246a20244200201b420010d30b200341f0246a202342002013420010d30b200341b0256a202042002008420010d30b200341a0236a200b42002008420010d30b200341f0256a201842002012420010d30b200341f0236a20194200201a420010d30b200341a0246a20234200201b420010d30b200341e0246a202042002013420010d30b20034190236a200b42002013420010d30b200341a0256a201842002008420010d30b200341e0256a201242002019420010d30b200341e0236a20174200201a420010d30b20034190246a20204200201b420010d30b20034180236a200b4200201b420010d30b200341d0246a201842002013420010d30b20034190256a200842002019420010d30b200341d0256a201742002012420010d30b200341d0236a20214200201a420010d30b200320032903a024222420032903f0237c220b20032903e0247c221820032903a0237c221a20032903f0257c221b20032903f024222520032903b0247c221920032903b0257c221320032903b0237c22082003290380247c221220032903c02522262003290380257c22172003290380267c222020032903c0237c222120032903c0247c2223423388200341c0256a41086a29030020034180256a41086a2903007c2017202654ad7c20034180266a41086a2903007c2020201754ad7c200341c0236a41086a2903007c2021202054ad7c200341c0246a41086a2903007c2023202154ad7c420d86847c2217423388200341f0246a41086a290300200341b0246a41086a2903007c2019202554ad7c200341b0256a41086a2903007c2013201954ad7c200341b0236a41086a2903007c2008201354ad7c20034180246a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703803e200320032903e023222520032903e0257c22082003290390247c22122003290390237c222020032903a0257c22212013423388200341a0246a41086a290300200341f0236a41086a2903007c200b202454ad7c200341e0246a41086a2903007c2018200b54ad7c200341a0236a41086a2903007c201a201854ad7c200341f0256a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703883e200320032903d025221c2003290390257c221820032903d0237c221a2003290380237c221320032903d0247c2224200b423388200341e0236a41086a290300200341e0256a41086a2903007c2008202554ad7c20034190246a41086a2903007c2012200854ad7c20034190236a41086a2903007c2020201254ad7c200341a0256a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff038322263703903e2003200b423388200341d0256a41086a29030020034190256a41086a2903007c2018201c54ad7c200341d0236a41086a2903007c201a201854ad7c20034180236a41086a2903007c2013201a54ad7c200341d0246a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703f03d20032018423388201742ffffffffffffff03837c22183703f83d200341983e6a200341f03d6a410a1070200341b0206a200b420020032903983e2208420010d30b20034180216a201842137e2228420020032903b83e2212420010d30b200341d0216a201942137e221c420020032903b03e2217420010d30b200341a0226a201b42137e2213420020032903a83e2220420010d30b200341f0226a202642137e221a420020032903a03e2221420010d30b200341e0226a200b42002021420010d30b200341a0206a201842002008420010d30b200341f0206a201c42002012420010d30b200341c0216a201342002017420010d30b20034190226a201a42002020420010d30b20034180226a200b42002020420010d30b200341d0226a201842002021420010d30b20034190206a201942002008420010d30b200341e0206a201342002012420010d30b200341b0216a201a42002017420010d30b200341a0216a200b42002017420010d30b200341f0216a201842002020420010d30b200341c0226a201942002021420010d30b20034180206a201b42002008420010d30b200341d0206a201a42002012420010d30b200341c0206a200b42002012420010d30b20034190216a201842002017420010d30b200341e0216a201942002020420010d30b200341b0226a201b42002021420010d30b200341f01f6a202642002008420010d30b200320032903e02022292003290390207c220820032903b0217c22122003290380227c222020032903d0227c222120032903c021222720032903f0207c22172003290390227c222320032903e0227c222420032903a0207c222520032903a022222a20032903d0217c221d20032903f0227c221e20032903b0207c221f2003290380217c2222423388200341a0226a41086a290300200341d0216a41086a2903007c201d202a54ad7c200341f0226a41086a2903007c201e201d54ad7c200341b0206a41086a2903007c201f201e54ad7c20034180216a41086a2903007c2022201f54ad7c420d86847c221e423388200341c0216a41086a290300200341f0206a41086a2903007c2017202754ad7c20034190226a41086a2903007c2023201754ad7c200341e0226a41086a2903007c2024202354ad7c200341a0206a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703d03e2003200329038020222a20032903c0227c222420032903d0207c222520032903a0217c221f20032903f0217c22272023423388200341e0206a41086a29030020034190206a41086a2903007c2008202954ad7c200341b0216a41086a2903007c2012200854ad7c20034180226a41086a2903007c2020201254ad7c200341d0226a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703d83e200320032903b022222920032903e0217c221220032903f01f7c222020032903c0207c22212003290390217c2223200842338820034180206a41086a290300200341c0226a41086a2903007c2024202a54ad7c200341d0206a41086a2903007c2025202454ad7c200341a0216a41086a2903007c201f202554ad7c200341f0216a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703e03e20032008423388200341b0226a41086a290300200341e0216a41086a2903007c2012202954ad7c200341f01f6a41086a2903007c2020201254ad7c200341c0206a41086a2903007c2021202054ad7c20034190216a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703c03e20032012423388201e42ffffffffffffff03837c22123703c83e200341e83e6a200341c03e6a41141070200341a01d6a2008420020032903e83e2220420010d30b200341f01d6a201242137e420020032903883f2221420010d30b200341c01e6a201742137e2227420020032903803f2223420010d30b200341901f6a201d42137e2222420020032903f83e2224420010d30b200341e01f6a201f42137e221e420020032903f03e2225420010d30b200341d01f6a200842002025420010d30b200341901d6a201242002020420010d30b200341e01d6a202742002021420010d30b200341b01e6a202242002023420010d30b200341801f6a201e42002024420010d30b200341f01e6a200842002024420010d30b200341c01f6a201242002025420010d30b200341801d6a201742002020420010d30b200341d01d6a202242002021420010d30b200341a01e6a201e42002023420010d30b200341901e6a200842002023420010d30b200341e01e6a201242002024420010d30b200341b01f6a201742002025420010d30b200341f01c6a201d42002020420010d30b200341c01d6a201e42002021420010d30b200341b01d6a200842002021420010d30b200341801e6a201242002023420010d30b200341d01e6a201742002024420010d30b200341a01f6a201d42002025420010d30b200341e01c6a201f42002020420010d30b200320032903d01d222720032903801d7c220820032903a01e7c221220032903f01e7c221720032903c01f7c222020032903b01e222920032903e01d7c222120032903801f7c222320032903d01f7c222420032903901d7c222520032903901f222a20032903c01e7c221d20032903e01f7c221e20032903a01d7c221f20032903f01d7c2222423388200341901f6a41086a290300200341c01e6a41086a2903007c201d202a54ad7c200341e01f6a41086a2903007c201e201d54ad7c200341a01d6a41086a2903007c201f201e54ad7c200341f01d6a41086a2903007c2022201f54ad7c420d86847c221d423388200341b01e6a41086a290300200341e01d6a41086a2903007c2021202954ad7c200341801f6a41086a2903007c2023202154ad7c200341d01f6a41086a2903007c2024202354ad7c200341901d6a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff03833703a03f200320032903f01c221f20032903b01f7c222320032903c01d7c222420032903901e7c222520032903e01e7c221e2021423388200341d01d6a41086a290300200341801d6a41086a2903007c2008202754ad7c200341a01e6a41086a2903007c2012200854ad7c200341f01e6a41086a2903007c2017201254ad7c200341c01f6a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff03833703a83f200320032903a01f222720032903d01e7c221220032903e01c7c221720032903b01d7c222020032903801e7c22212008423388200341f01c6a41086a290300200341b01f6a41086a2903007c2023201f54ad7c200341c01d6a41086a2903007c2024202354ad7c200341901e6a41086a2903007c2025202454ad7c200341e01e6a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703b03f20032008423388200341a01f6a41086a290300200341d01e6a41086a2903007c2012202754ad7c200341e01c6a41086a2903007c2017201254ad7c200341b01d6a41086a2903007c2020201754ad7c200341801e6a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703903f20032008423388201d42ffffffffffffff03837c3703983f200341b83f6a200341903f6a410a1070200341901a6a20032903b83f22084200200b420010d30b200341e01a6a20032903d83f221242002028420010d30b200341b01b6a20032903d03f22174200201c420010d30b200341801c6a20032903c83f222042002013420010d30b200341d01c6a20032903c03f22214200201a420010d30b200341c01c6a20214200200b420010d30b200341801a6a200842002018420010d30b200341d01a6a20124200201c420010d30b200341a01b6a201742002013420010d30b200341f01b6a20204200201a420010d30b200341e01b6a20204200200b420010d30b200341b01c6a202142002018420010d30b200341f0196a200842002019420010d30b200341c01a6a201242002013420010d30b200341901b6a20174200201a420010d30b200341801b6a20174200200b420010d30b200341d01b6a202042002018420010d30b200341a01c6a202142002019420010d30b200341e0196a20084200201b420010d30b200341b01a6a20124200201a420010d30b200341a01a6a20124200200b420010d30b200341f01a6a201742002018420010d30b200341c01b6a202042002019420010d30b200341901c6a20214200201b420010d30b200341d0196a200842002026420010d30b200320032903c01a222420032903f0197c220b20032903901b7c221820032903e01b7c221a20032903b01c7c221b20032903d01a222520032903801a7c221920032903a01b7c221320032903f01b7c220820032903c01c7c221220032903e01a222620032903901a7c221720032903b01b7c222020032903801c7c222120032903d01c7c2223423388200341e01a6a41086a290300200341901a6a41086a2903007c2017202654ad7c200341b01b6a41086a2903007c2020201754ad7c200341801c6a41086a2903007c2021202054ad7c200341d01c6a41086a2903007c2023202154ad7c420d86847c2217423388200341d01a6a41086a290300200341801a6a41086a2903007c2019202554ad7c200341a01b6a41086a2903007c2013201954ad7c200341f01b6a41086a2903007c2008201354ad7c200341c01c6a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221342ffffffffffffff038322193703f03f200320032903b01a222520032903e0197c220820032903801b7c221220032903d01b7c222020032903a01c7c22212013423388200341c01a6a41086a290300200341f0196a41086a2903007c200b202454ad7c200341901b6a41086a2903007c2018200b54ad7c200341e01b6a41086a2903007c201a201854ad7c200341b01c6a41086a2903007c201b201a54ad7c2013201b54ad7c420d86847c220b42ffffffffffffff0383221b3703f83f200320032903a01a221c20032903d0197c221820032903f01a7c221a20032903c01b7c221320032903901c7c2224200b423388200341b01a6a41086a290300200341e0196a41086a2903007c2008202554ad7c200341801b6a41086a2903007c2012200854ad7c200341d01b6a41086a2903007c2020201254ad7c200341a01c6a41086a2903007c2021202054ad7c200b202154ad7c420d86847c220b42ffffffffffffff03832226370380402003200b423388200341a01a6a41086a290300200341d0196a41086a2903007c2018201c54ad7c200341f01a6a41086a2903007c201a201854ad7c200341c01b6a41086a2903007c2013201a54ad7c200341901c6a41086a2903007c2024201354ad7c200b202454ad7c420d868442137e202342ffffffffffffff03837c221842ffffffffffffff0383220b3703e03f20032018423388201742ffffffffffffff03837c22183703e83f20034188c0006a200341e03f6a4132107020034180176a200b42002003290388402208420010d30b200341d0176a201842137e2228420020032903a8402212420010d30b200341a0186a20032903a04022174200201942137e221c420010d30b200341f0186a201b42137e221342002003290398402220420010d30b200341c0196a202642137e221a42002003290390402221420010d30b200341b0196a200b42002021420010d30b200341f0166a201842002008420010d30b200341c0176a20124200201c420010d30b20034190186a201342002017420010d30b200341e0186a201a42002020420010d30b200341d0186a200b42002020420010d30b200341a0196a201842002021420010d30b200341e0166a200842002019420010d30b200341b0176a201342002012420010d30b20034180186a201a42002017420010d30b200341f0176a200b42002017420010d30b200341c0186a201842002020420010d30b20034190196a202142002019420010d30b200341d0166a201b42002008420010d30b200341a0176a201a42002012420010d30b20034190176a200b42002012420010d30b200341e0176a201842002017420010d30b200341b0186a202042002019420010d30b20034180196a20214200201b420010d30b200341c0166a202642002008420010d30b200320032903b017222920032903e0167c22082003290380187c221220032903d0187c222020032903a0197c2221200329039018222720032903c0177c221720032903e0187c222320032903b0197c222420032903f0167c222520032903f018222a20032903a0187c221d20032903c0197c221e2003290380177c221f20032903d0177c2222423388200341f0186a41086a290300200341a0186a41086a2903007c201d202a54ad7c200341c0196a41086a2903007c201e201d54ad7c20034180176a41086a2903007c201f201e54ad7c200341d0176a41086a2903007c2022201f54ad7c420d86847c221e42338820034190186a41086a290300200341c0176a41086a2903007c2017202754ad7c200341e0186a41086a2903007c2023201754ad7c200341b0196a41086a2903007c2024202354ad7c200341f0166a41086a2903007c2025202454ad7c201e202554ad7c420d86847c222342ffffffffffffff038322173703c0402003200329039019222a20032903d0167c222420032903a0177c222520032903f0177c221f20032903c0187c22272023423388200341b0176a41086a290300200341e0166a41086a2903007c2008202954ad7c20034180186a41086a2903007c2012200854ad7c200341d0186a41086a2903007c2020201254ad7c200341a0196a41086a2903007c2021202054ad7c2023202154ad7c420d86847c220842ffffffffffffff0383221d3703c8402003200329038019222920032903b0187c221220032903c0167c22202003290390177c222120032903e0177c2223200842338820034190196a41086a290300200341d0166a41086a2903007c2024202a54ad7c200341a0176a41086a2903007c2025202454ad7c200341f0176a41086a2903007c201f202554ad7c200341c0186a41086a2903007c2027201f54ad7c2008202754ad7c420d86847c220842ffffffffffffff0383221f3703d0402003200842338820034180196a41086a290300200341b0186a41086a2903007c2012202954ad7c200341c0166a41086a2903007c2020201254ad7c20034190176a41086a2903007c2021202054ad7c200341e0176a41086a2903007c2023202154ad7c2008202354ad7c420d868442137e202242ffffffffffffff03837c221242ffffffffffffff038322083703b04020032012423388201e42ffffffffffffff03837c22123703b840200341d8c0006a200341b0c0006a41e4001070200341f0136a2008420020032903d8402220420010d30b200341c0146a201242137e420020032903f8402221420010d30b20034190156a201742137e2227420020032903f0402223420010d30b200341e0156a201d42137e2222420020032903e8402224420010d30b200341b0166a201f42137e221e420020032903e0402225420010d30b200341a0166a200842002025420010d30b200341e0136a201242002020420010d30b200341b0146a202742002021420010d30b20034180156a202242002023420010d30b200341d0156a201e42002024420010d30b200341c0156a200842002024420010d30b20034190166a201242002025420010d30b200341d0136a201742002020420010d30b200341a0146a202242002021420010d30b200341f0146a201e42002023420010d30b200341e0146a200842002023420010d30b200341b0156a201242002024420010d30b20034180166a201742002025420010d30b200341c0136a201d42002020420010d30b20034190146a201e42002021420010d30b20034180146a200842002021420010d30b200341d0146a201242002023420010d30b200341a0156a201742002024420010d30b200341f0156a201d42002025420010d30b200341b0136a201f42002020420010d30b200320032903a014222720032903d0137c220820032903f0147c221220032903c0157c22172003290390167c2220200329038015222920032903b0147c222120032903d0157c222320032903a0167c222420032903e0137c222520032903e015222a2003290390157c221d20032903b0167c221e20032903f0137c221f20032903c0147c2222423388200341e0156a41086a29030020034190156a41086a2903007c201d202a54ad7c200341b0166a41086a2903007c201e201d54ad7c200341f0136a41086a2903007c201f201e54ad7c200341c0146a41086a2903007c2022201f54ad7c420d86847c221d42338820034180156a41086a290300200341b0146a41086a2903007c2021202954ad7c200341d0156a41086a2903007c2023202154ad7c200341a0166a41086a2903007c2024202354ad7c200341e0136a41086a2903007c2025202454ad7c201d202554ad7c420d86847c222142ffffffffffffff038337039041200320032903c013221f2003290380167c22232003290390147c222420032903e0147c222520032903b0157c221e2021423388200341a0146a41086a290300200341d0136a41086a2903007c2008202754ad7c200341f0146a41086a2903007c2012200854ad7c200341c0156a41086a2903007c2017201254ad7c20034190166a41086a2903007c2020201754ad7c2021202054ad7c420d86847c220842ffffffffffffff038337039841200320032903f015222720032903a0157c221220032903b0137c22172003290380147c222020032903d0147c22212008423388200341c0136a41086a29030020034180166a41086a2903007c2023201f54ad7c20034190146a41086a2903007c2024202354ad7c200341e0146a41086a2903007c2025202454ad7c200341b0156a41086a2903007c201e202554ad7c2008201e54ad7c420d86847c220842ffffffffffffff03833703a04120032008423388200341f0156a41086a290300200341a0156a41086a2903007c2012202754ad7c200341b0136a41086a2903007c2017201254ad7c20034180146a41086a2903007c2020201754ad7c200341d0146a41086a2903007c2021202054ad7c2008202154ad7c420d868442137e202242ffffffffffffff03837c220842ffffffffffffff03833703804120032008423388201d42ffffffffffffff03837c37038841200341a8c1006a20034180c1006a41321070200341a0106a20032903a84122084200200b420010d30b200341f0106a20032903c841221242002028420010d30b200341c0116a20032903c04122174200201c420010d30b20034190126a20032903b841222042002013420010d30b200341e0126a20032903b04122214200201a420010d30b200341f0126a20214200200b420010d30b200341b0106a200842002018420010d30b20034180116a20124200201c420010d30b200341d0116a201742002013420010d30b200341a0126a20204200201a420010d30b200341b0126a20204200200b420010d30b20034180136a202142002018420010d30b200341c0106a200842002019420010d30b20034190116a201242002013420010d30b200341e0116a20174200201a420010d30b200341f0116a20174200200b420010d30b200341c0126a202042002018420010d30b20034190136a202142002019420010d30b200341d0106a20084200201b420010d30b200341a0116a20124200201a420010d30b200341b0116a20124200200b420010d30b20034180126a201742002018420010d30b200341d0126a202042002019420010d30b200341a0136a20214200201b420010d30b200341e0106a200842002026420010d30b2003200329039011222420032903c0107c220b20032903e0117c221820032903b0127c22192003290380137c221a200329038011222520032903b0107c221b20032903d0117c221320032903a0127c220820032903f0127c221220032903f010222620032903a0107c221720032903c0117c22202003290390127c222120032903e0127c2223423388200341f0106a41086a290300200341a0106a41086a2903007c2017202654ad7c200341c0116a41086a2903007c2020201754ad7c20034190126a41086a2903007c2021202054ad7c200341e0126a41086a2903007c2023202154ad7c420d86847c221742338820034180116a41086a290300200341b0106a41086a2903007c201b202554ad7c200341d0116a41086a2903007c2013201b54ad7c200341a0126a41086a2903007c2008201354ad7c200341f0126a41086a2903007c2012200854ad7c2017201254ad7c420d86847c221b42ffffffffffffff038337039041200320032903a011222120032903d0107c221320032903f0117c220820032903c0127c22122003290390137c2220201b42338820034190116a41086a290300200341c0106a41086a2903007c200b202454ad7c200341e0116a41086a2903007c2018200b54ad7c200341b0126a41086a2903007c2019201854ad7c20034180136a41086a2903007c201a201954ad7c201b201a54ad7c420d86847c220b42ffffffffffffff038337039841200320032903b011222420032903e0107c22182003290380127c221920032903d0127c221a20032903a0137c221b200b423388200341a0116a41086a290300200341d0106a41086a2903007c2013202154ad7c200341f0116a41086a2903007c2008201354ad7c200341c0126a41086a2903007c2012200854ad7c20034190136a41086a2903007c2020201254ad7c200b202054ad7c420d86847c220b42ffffffffffffff03833703a0412003200b423388200341b0116a41086a290300200341e0106a41086a2903007c2018202454ad7c20034180126a41086a2903007c2019201854ad7c200341d0126a41086a2903007c201a201954ad7c200341a0136a41086a2903007c201b201a54ad7c200b201b54ad7c420d868442137e202342ffffffffffffff03837c220b42ffffffffffffff0383370380412003200b423388201742ffffffffffffff03837c37038841200341a8c1006a20034180c1006a41021070200341900d6a2015420020032903a841220b420010d30b20034190106a2014420020032903b041221842137e420010d30b200341c00f6a200f420020032903b841221942137e2208420010d30b200341f00e6a200c420020032903c041221b42137e2213420010d30b200341a00e6a2016420020032903c841221242137e221a420010d30b200341a00d6a20164200200b420010d30b20034180106a201542002018420010d30b200341b00f6a201442002008420010d30b200341e00e6a200f42002013420010d30b200341900e6a200c4200201a420010d30b200341b00d6a200c4200200b420010d30b200341f00f6a201642002018420010d30b200341a00f6a201542002019420010d30b200341d00e6a201442002013420010d30b200341800e6a200f4200201a420010d30b200341c00d6a200f4200200b420010d30b200341e00f6a200c42002018420010d30b200341900f6a201642002019420010d30b200341c00e6a20154200201b420010d30b200341f00d6a20144200201a420010d30b200341d00d6a20144200200b420010d30b200341d00f6a200f42002018420010d30b200341800f6a200c42002019420010d30b200341b00e6a20164200201b420010d30b200341e00d6a201542002012420010d30b200341f0096a20032903d00f221c20032903800f7c220c20032903d00d7c220f20032903e00d7c221420032903b00e7c221520032903c00d221d20032903e00f7c221620032903f00d7c220b20032903c00e7c221820032903900f7c221920032903800e221e20032903b00d7c221a20032903d00e7c221b20032903a00f7c221320032903f00f7c220820032903e00e221f20032903900e7c221220032903b00f7c22172003290380107c222020032903a00d7c222120032903c00f222220032903f00e7c22232003290390107c222420032903900d7c222520032903a00e7c2226423388200341c00f6a41086a290300200341f00e6a41086a2903007c2023202254ad7c20034190106a41086a2903007c2024202354ad7c200341900d6a41086a2903007c2025202454ad7c200341a00e6a41086a2903007c2026202554ad7c420d86847c2223423388200341e00e6a41086a290300200341900e6a41086a2903007c2012201f54ad7c200341b00f6a41086a2903007c2017201254ad7c20034180106a41086a2903007c2020201754ad7c200341a00d6a41086a2903007c2021202054ad7c2023202154ad7c420d86847c2212423388200341800e6a41086a290300200341b00d6a41086a2903007c201a201e54ad7c200341d00e6a41086a2903007c201b201a54ad7c200341a00f6a41086a2903007c2013201b54ad7c200341f00f6a41086a2903007c2008201354ad7c2012200854ad7c420d86847c221a423388200341c00d6a41086a290300200341e00f6a41086a2903007c2016201d54ad7c200341f00d6a41086a2903007c200b201654ad7c200341c00e6a41086a2903007c2018200b54ad7c200341900f6a41086a2903007c2019201854ad7c201a201954ad7c420d86847c2218423388200341d00f6a41086a290300200341800f6a41086a2903007c200c201c54ad7c200341d00d6a41086a2903007c200f200c54ad7c200341e00d6a41086a2903007c2014200f54ad7c200341b00e6a41086a2903007c2015201454ad7c2018201554ad7c420d868442137e202642ffffffffffffff03837c222742ffffffffffffff0383220c420020032903e032222820032903d0347c220f20032903a00b7c22142003290390327c221520032903a0337c221620032903e033222920032903e0347c220b20032903800c7c221920032903a0327c221b20032903f0327c221320032903f033222a20032903f0347c220820032903b0337c221720032903e00c7c222020032903b0327c222120032903c033222b2003290380347c22242003290380337c222520032903f00c7c22262003290380357c221c200329039033222c20032903d0337c221d20032903800d7c221e20032903c0327c221f2003290390347c222242338820034190336a41086a290300200341d0336a41086a2903007c201d202c54ad7c200341800d6a41086a2903007c201e201d54ad7c200341c0326a41086a2903007c201f201e54ad7c20034190346a41086a2903007c2022201f54ad7c420d86847c221d423388200341c0336a41086a29030020034180346a41086a2903007c2024202b54ad7c20034180336a41086a2903007c2025202454ad7c200341f00c6a41086a2903007c2026202554ad7c20034180356a41086a2903007c201c202654ad7c201d201c54ad7c420d86847c2224423388200341f0336a41086a290300200341f0346a41086a2903007c2008202a54ad7c200341b0336a41086a2903007c2017200854ad7c200341e00c6a41086a2903007c2020201754ad7c200341b0326a41086a2903007c2021202054ad7c2024202154ad7c420d86847c2208423388200341e0336a41086a290300200341e0346a41086a2903007c200b202954ad7c200341800c6a41086a2903007c2019200b54ad7c200341a0326a41086a2903007c201b201954ad7c200341f0326a41086a2903007c2013201b54ad7c2008201354ad7c420d86847c220b423388200341e0326a41086a290300200341d0346a41086a2903007c200f202854ad7c200341a00b6a41086a2903007c2014200f54ad7c20034190326a41086a2903007c2015201454ad7c200341a0336a41086a2903007c2016201554ad7c200b201654ad7c420d868442137e202242ffffffffffffff03837c221742ffffffffffffff0383220f420010d30b200341900b6a200b42ffffffffffffff0383221442002027423388202342ffffffffffffff03837c221542137e420010d30b200341f00b6a200842ffffffffffffff038322164200201242ffffffffffffff0383221942137e2208420010d30b200341d00c6a202442ffffffffffffff0383220b4200201a42ffffffffffffff0383221b42137e2213420010d30b200341c00a6a201842ffffffffffffff0383221242137e221a42002017423388201d42ffffffffffffff03837c2218420010d30b200341b00a6a200c42002018420010d30b200341e0096a20154200200f420010d30b200341800b6a201442002008420010d30b200341e00b6a201642002013420010d30b200341c00c6a200b4200201a420010d30b200341b00c6a200b4200200c420010d30b200341a00a6a201542002018420010d30b200341d0096a20194200200f420010d30b200341f00a6a201442002013420010d30b200341d00b6a20164200201a420010d30b200341c00b6a20164200200c420010d30b200341a00c6a200b42002015420010d30b200341900a6a201942002018420010d30b200341c0096a201b4200200f420010d30b200341e00a6a20144200201a420010d30b200341d00a6a20144200200c420010d30b200341b00b6a201642002015420010d30b200341900c6a200b42002019420010d30b200341800a6a201b42002018420010d30b200341b0096a20124200200f420010d30b200320032903f00a221220032903d0097c220c20032903d00b7c220f20032903b00c7c221420032903a00a7c221520032903e00b221720032903800b7c221620032903c00c7c220b20032903b00a7c221820032903e0097c221920032903d00c222020032903f00b7c221a20032903c00a7c221b20032903f0097c221320032903900b7c2208423388200341d00c6a41086a290300200341f00b6a41086a2903007c201a202054ad7c200341c00a6a41086a2903007c201b201a54ad7c200341f0096a41086a2903007c2013201b54ad7c200341900b6a41086a2903007c2008201354ad7c221b420d86847c221a423388200341e00b6a41086a290300200341800b6a41086a2903007c2016201754ad7c200341c00c6a41086a2903007c200b201654ad7c200341b00a6a41086a2903007c2018200b54ad7c200341e0096a41086a2903007c2019201854ad7c201b4233887c201a201954ad7c2213420d86847c221642ffffffffffffff03833703e840200320032903c009221720032903900a7c220b20032903e00a7c221820032903c00b7c221920032903a00c7c221b2016423388200341f00a6a41086a290300200341d0096a41086a2903007c200c201254ad7c200341d00b6a41086a2903007c200f200c54ad7c200341b00c6a41086a2903007c2014200f54ad7c200341a00a6a41086a2903007c2015201454ad7c20134233887c2016201554ad7c2213420d86847c220c42ffffffffffffff03833703f040200320032903800a221220032903900c7c220f20032903b0097c221420032903d00a7c221520032903b00b7c2216200c423388200341c0096a41086a290300200341900a6a41086a2903007c200b201754ad7c200341e00a6a41086a2903007c2018200b54ad7c200341c00b6a41086a2903007c2019201854ad7c200341a00c6a41086a2903007c201b201954ad7c20134233887c200c201b54ad7c220b420d86847c220c42ffffffffffffff03833703f8402003200c423388200341800a6a41086a290300200341900c6a41086a2903007c200f201254ad7c200341b0096a41086a2903007c2014200f54ad7c200341d00a6a41086a2903007c2015201454ad7c200341b00b6a41086a2903007c2016201554ad7c200b4233887c200c201654ad7c420d868442137e200842ffffffffffffff03837c220c42ffffffffffffff03833703d8402003200c423388201a42ffffffffffffff03837c3703e040200341a8c1006a200341d8c0006a41011070200341a0066a20032903a841220c42002004420010d30b200341a0096a20032903b041220f42137e42002010420010d30b200341d0086a20032903b841221442137e22184200200d420010d30b20034180086a20032903c041221642137e220b4200200a420010d30b200341b0076a20032903c841221942137e221542002007420010d30b200341b0066a200c42002007420010d30b20034190096a200f42002004420010d30b200341c0086a201842002010420010d30b200341f0076a200b4200200d420010d30b200341a0076a20154200200a420010d30b200341c0066a200c4200200a420010d30b20034180096a200f42002007420010d30b200341b0086a201442002004420010d30b200341e0076a200b42002010420010d30b20034190076a20154200200d420010d30b200341d0066a200c4200200d420010d30b200341f0086a200f4200200a420010d30b200341a0086a201442002007420010d30b200341d0076a201642002004420010d30b20034180076a201542002010420010d30b200341e0066a200c42002010420010d30b200341e0086a200f4200200d420010d30b20034190086a20144200200a420010d30b200341c0076a201642002007420010d30b200341f0066a201942002004420010d30b200320032903b00822102003290380097c220420032903e0077c22072003290390077c220a20032903c0067c220c20032903c008221a2003290390097c220f20032903f0077c221420032903a0077c221520032903b0067c221620032903d008221b20032903a0097c220b2003290380087c220d20032903a0067c221820032903b0077c2219423388200341d0086a41086a290300200341a0096a41086a2903007c200b201b54ad7c20034180086a41086a2903007c200d200b54ad7c200341a0066a41086a2903007c2018200d54ad7c200341b0076a41086a2903007c2019201854ad7c420d86847c220b423388200341c0086a41086a29030020034190096a41086a2903007c200f201a54ad7c200341f0076a41086a2903007c2014200f54ad7c200341a0076a41086a2903007c2015201454ad7c200341b0066a41086a2903007c2016201554ad7c200b201654ad7c420d86847c220f42ffffffffffffff038337039041200320032903a008221820032903f0087c221420032903d0077c22152003290380077c221620032903d0067c220d200f423388200341b0086a41086a29030020034180096a41086a2903007c2004201054ad7c200341e0076a41086a2903007c2007200454ad7c20034190076a41086a2903007c200a200754ad7c200341c0066a41086a2903007c200c200a54ad7c200f200c54ad7c420d86847c220442ffffffffffffff0383370398412003200329039008221020032903e0087c220720032903c0077c220a20032903f0067c220c20032903e0067c220f2004423388200341a0086a41086a290300200341f0086a41086a2903007c2014201854ad7c200341d0076a41086a2903007c2015201454ad7c20034180076a41086a2903007c2016201554ad7c200341d0066a41086a2903007c200d201654ad7c2004200d54ad7c420d86847c220442ffffffffffffff03833703a0412003200442338820034190086a41086a290300200341e0086a41086a2903007c2007201054ad7c200341c0076a41086a2903007c200a200754ad7c200341f0066a41086a2903007c200c200a54ad7c200341e0066a41086a2903007c200f200c54ad7c2004200f54ad7c420d868442137e201942ffffffffffffff03837c220442ffffffffffffff03833703804120032004423388200b42ffffffffffffff03837c37038841200341b0c0006a20034180c1006a106d20034188c0006a2001106d410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106f202d71212d200241016a22024120470d000b202d106f212f200341a8c1006a41086a42f0ffffffffffff3f200141086a2903007d220442ffffffffffffff038342d0fdffffffffff3f20012903007d22074233887c370300200341a8c1006a41106a42f0ffffffffffff3f200141106a2903007d220a42ffffffffffffff038320044233887c370300200341a8c1006a41186a42f0ffffffffffff3f200141186a2903007d220442ffffffffffffff0383200a4233887c370300200341a8c1006a41206a42f0ffffffffffff3f200141206a2903007d220a42ffffffffffffff038320044233887c3703002003200a42338842137e200742ffffffffffffff03837c3703a841200341b0c0006a20034180c1006a106d20034188c0006a200341a8c1006a106d410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106f202d71212d200241016a22024120470d000b200341a0046a42f0ffffffffffff3f200e7d220742338842137e42d0fdffffffffff3f20117d220e42ffffffffffffff03837c2204420042b0c1bad0f4e48603420010d30b200341d0036a42f0ffffffffffff3f20057d220a423388200742ffffffffffffff03837c2207420042a7a7fbf49beaf607420010d30b200341f0046a42f0ffffffffffff3f20067d2211423388200a42ffffffffffffff03837c220a420042a0d69f90da80b1cb00420010d30b200341c0056a42f0ffffffffffff3f20097d2205423388201142ffffffffffffff03837c2211420042badf96dcb5c3bac700420010d30b20034190066a200542ffffffffffffff0383200e4233887c220e420042a7ecfac2b5f7ea19420010d30b20034180066a200e420042b0c1bad0f4e48603420010d30b20034190046a20044200429db1bce4dfb435420010d30b200341c0036a2007420042a0d69f90da80b1cb00420010d30b200341e0046a200a420042badf96dcb5c3bac700420010d30b200341b0056a2011420042a7ecfac2b5f7ea19420010d30b200341a0056a2011420042b0c1bad0f4e48603420010d30b200341f0056a200e4200429db1bce4dfb435420010d30b20034180046a2004420042e098f4e5e9ebfb03420010d30b200341b0036a2007420042badf96dcb5c3bac700420010d30b200341d0046a200a420042a7ecfac2b5f7ea19420010d30b200341c0046a200a420042b0c1bad0f4e48603420010d30b20034190056a20114200429db1bce4dfb435420010d30b200341e0056a200e420042e098f4e5e9ebfb03420010d30b200341f0036a20044200429e9981b4dab2e103420010d30b200341a0036a2007420042a7ecfac2b5f7ea19420010d30b20034190036a2007420042b0c1bad0f4e48603420010d30b200341b0046a200a4200429db1bce4dfb435420010d30b20034180056a2011420042e098f4e5e9ebfb03420010d30b200341d0056a200e4200429e9981b4dab2e103420010d30b200341e0036a20044200429df893c0a486ae01420010d30b200341c0036a41086a290300211820034190046a41086a290300211920032903c00321042003290390042109200341e0046a41086a290300211020032903e004210c200341b0056a41086a290300211a20032903b005210f20034180066a41086a290300211b2003290380062114200341d0036a41086a2903002113200341a0046a41086a290300210820032903d003210720032903a0042115200341f0046a41086a290300211220032903f0042116200341c0056a41086a290300211720032903c005210b20034190066a41086a2903002120200329039006210d20032903b003210a200329038004211120032903d004210e20032903a005210520032903f0052106202d106f2130200320062005200e200a20117c22117c220e7c22057c22062014200f200c200420097c22097c220c7c220f7c2214200d200b2016200720157c22157c22167c220b7c220d423388202020172012201320087c2015200754ad7c7c2016201554ad7c7c200b201654ad7c7c200d200b54ad7c2215420d86847c2207423388201b201a2010201820197c2009200454ad7c7c200c200954ad7c7c200f200c54ad7c7c2014200f54ad7c20154233887c2007201454ad7c2215420d86847c220442ffffffffffffff03833703b841200320032903a003221620032903f0037c220920032903c0047c220c2003290390057c220f20032903e0057c22142004423388200341b0036a41086a29030020034180046a41086a2903007c2011200a54ad7c200341d0046a41086a2903007c200e201154ad7c200341a0056a41086a2903007c2005200e54ad7c200341f0056a41086a2903007c2006200554ad7c20154233887c2004200654ad7c2206420d86847c220442ffffffffffffff03833703c0412003200329039003221520032903e0037c220a20032903b0047c22112003290380057c220e20032903d0057c22052004423388200341a0036a41086a290300200341f0036a41086a2903007c2009201654ad7c200341c0046a41086a2903007c200c200954ad7c20034190056a41086a2903007c200f200c54ad7c200341e0056a41086a2903007c2014200f54ad7c20064233887c2004201454ad7c2206420d86847c220442ffffffffffffff03833703c8412003200442338820034190036a41086a290300200341e0036a41086a2903007c200a201554ad7c200341b0046a41086a2903007c2011200a54ad7c20034180056a41086a2903007c200e201154ad7c200341d0056a41086a2903007c2005200e54ad7c20064233887c2004200554ad7c420d868442137e200d42ffffffffffffff03837c220442ffffffffffffff03833703a84120032004423388200742ffffffffffffff03837c3703b041200341b0c0006a20034180c1006a106d20034188c0006a200341a8c1006a106d410021024101212d034020034188c0006a20026a2d0000200341b0c0006a20026a2d000073222e4100202e6b72417f7341800171410776106f202d71212d200241016a22024120470d000b202d106f213120034180036a20032903d8402204420042b0c1bad0f4e48603420010d30b2003200341d8c0006a41086a2202290300220742137e4200429df893c0a486ae01420010d30b200341e0006a200341d8c0006a41106a222d290300220a42137e22064200429e9981b4dab2e103420010d30b200341c0016a200341d8c0006a41186a222e290300220e42137e2205420042e098f4e5e9ebfb03420010d30b200341a0026a200341d8c0006a41206a2201290300220942137e22114200429db1bce4dfb435420010d30b200341f0026a20044200429db1bce4dfb435420010d30b200341c0006a2007420042b0c1bad0f4e48603420010d30b200341d0006a20064200429df893c0a486ae01420010d30b200341b0016a20054200429e9981b4dab2e103420010d30b20034190026a2011420042e098f4e5e9ebfb03420010d30b200341e0026a2004420042e098f4e5e9ebfb03420010d30b200341306a20074200429db1bce4dfb435420010d30b20034190016a200a420042b0c1bad0f4e48603420010d30b200341a0016a20054200429df893c0a486ae01420010d30b20034180026a20114200429e9981b4dab2e103420010d30b200341d0026a20044200429e9981b4dab2e103420010d30b200341206a2007420042e098f4e5e9ebfb03420010d30b20034180016a200a4200429db1bce4dfb435420010d30b200341e0016a200e420042b0c1bad0f4e48603420010d30b200341f0016a20114200429df893c0a486ae01420010d30b200341c0026a20044200429df893c0a486ae01420010d30b200341106a20074200429e9981b4dab2e103420010d30b200341f0006a200a420042e098f4e5e9ebfb03420010d30b200341d0016a200e4200429db1bce4dfb435420010d30b200341b0026a2009420042b0c1bad0f4e48603420010d30b200341c0006a41086a2903002119200341d0006a41086a29030021102003290340210c20032903502107200341b0016a41086a290300211a20032903b001210f20034190026a41086a290300211b2003290390022114200341f0026a41086a290300211320032903f0022115200341086a2903002108200341e0006a41086a2903002112200329030021162003290360210a200341c0016a41086a290300211720032903c001210b20034180036a41086a2903002120200329038003210d200341a0026a41086a290300212120032903a00221182003290330210e200329039001211120032903a0012105200329038002210620032903e00221092031203072106f2131202d2009200620052011200e7c220e7c22057c22067c220920152014200f2007200c7c220c7c220f7c22147c22152018200d200b200a20167c22167c220b7c220d7c2218423388202120202017201220087c2016200a54ad7c7c200b201654ad7c7c200d200b54ad7c7c2018200d54ad7c420d86847c22164233882013201b201a201020197c200c200754ad7c7c200f200c54ad7c7c2014200f54ad7c7c2015201454ad7c2016201554ad7c420d86847c220c42ffffffffffffff0383202d290300220a8542002031ad42ff01837d220783200a85220a370300202e200329038001220d20032903207c220f20032903e0017c221420032903f0017c221520032903d0027c220b200c42338820034190016a41086a290300200341306a41086a2903007c200e201154ad7c200341a0016a41086a2903007c2005200e54ad7c20034180026a41086a2903007c2006200554ad7c200341e0026a41086a2903007c2009200654ad7c200c200954ad7c420d86847c220e42ffffffffffffff0383202e290300221185200783201185221137030020012003290370221920032903107c220520032903d0017c220620032903b0027c220920032903c0027c220c200e42338820034180016a41086a290300200341206a41086a2903007c200f200d54ad7c200341e0016a41086a2903007c2014200f54ad7c200341f0016a41086a2903007c2015201454ad7c200341d0026a41086a2903007c200b201554ad7c200e200b54ad7c420d86847c220f42ffffffffffffff03832001290300220e85200783200e85220e3703002002200f423388200341f0006a41086a290300200341106a41086a2903007c2005201954ad7c200341d0016a41086a2903007c2006200554ad7c200341b0026a41086a2903007c2009200654ad7c200341c0026a41086a2903007c200c200954ad7c200f200c54ad7c420d868442137e201842ffffffffffffff03837c2206423388201642ffffffffffffff03837c20022903002205852007832005852205370300200320042004200642ffffffffffffff0383852007838522073703d84020034188c0006a200341d8c0006a106d200142f0ffffffffffff3f200e7d220642ffffffffffffff038342f0ffffffffffff3f20117d22094233887c200e85420020032d008840410171106fad42ff01837d220483200e85370300202e200942ffffffffffffff038342f0ffffffffffff3f200a7d220e4233887c201185200483201185370300202d200e42ffffffffffffff038342f0ffffffffffff3f20057d22114233887c200a85200483200a853703002002201142ffffffffffffff038342d0fdffffffffff3f20077d220a4233887c2005852004832005853703002003200642338842137e200a42ffffffffffffff03837c2007852004832007853703d84020002030202f72106f3a0000200041286a2001290300370300200041206a202e290300370300200041186a202d290300370300200041106a2002290300370300200020032903d840370308200341d0c1006a24000bd003011a7e200131001221022001310011210320013100102104200131000f2105200131000d2106200131000e2107200131001f2108200131001e2109200131001d210a200131001c210b200131001b210c200131001a210d200131000c210e200131000b210f200131000a21102001310009211120013100072112200131000821132001310019211420013100182115200131001721162001310016211720013100132118200131001421192001310015211a200020013500002001310004422086842001310005422886842001310006221b4230868442ffffffffffffff038337030020002018201942088684201a4210868420174218868420164220868420154228868420144230868442018842ffffffffffffff03833703182000201b201242088684201342108684201142188684201042208684200f42288684200e4230868442038842ffffffffffffff038337030820002015201442088684200d42108684200c42188684200b42208684200a42288684200942308684200842388684420c8842ffffffffffffff03833703202000200e20064208868420074210868420054218868420044220868420034228868420024230868420184238868442068842ffffffffffffff03833703100bdf9c0103047f237e087f230041e02c6b22022400200241d8286a41106a22034200370300200241d8286a41186a22044200370300200241d8286a41206a22054200370300200242003703e028200242013703d828200241982b6a200141011070200241c8256a20022903982b2206420042b0c1bad0f4e48603420010d30b200241c8286a20022903a02b220742137e4200429df893c0a486ae01420010d30b200241f8276a20022903a82b220842137e22094200429e9981b4dab2e103420010d30b200241a8276a20022903b02b220a42137e220b420042e098f4e5e9ebfb03420010d30b200241d8266a20022903b82b220c42137e220d4200429db1bce4dfb435420010d30b200241d8256a20064200429db1bce4dfb435420010d30b200241b8286a2007420042b0c1bad0f4e48603420010d30b200241e8276a20094200429df893c0a486ae01420010d30b20024198276a200b4200429e9981b4dab2e103420010d30b200241c8266a200d420042e098f4e5e9ebfb03420010d30b200241e8256a2006420042e098f4e5e9ebfb03420010d30b200241a8286a20074200429db1bce4dfb435420010d30b200241d8276a2008420042b0c1bad0f4e48603420010d30b20024188276a200b4200429df893c0a486ae01420010d30b200241b8266a200d4200429e9981b4dab2e103420010d30b200241f8256a20064200429e9981b4dab2e103420010d30b20024198286a2007420042e098f4e5e9ebfb03420010d30b200241c8276a20084200429db1bce4dfb435420010d30b200241f8266a200a420042b0c1bad0f4e48603420010d30b200241a8266a200d4200429df893c0a486ae01420010d30b20024188266a20064200429df893c0a486ae01420010d30b20024188286a20074200429e9981b4dab2e103420010d30b200241b8276a2008420042e098f4e5e9ebfb03420010d30b200241e8266a200a4200429db1bce4dfb435420010d30b20024198266a200c420042b0c1bad0f4e48603420010d30b200241b81d6a200229038826220e2002290398267c22062002290388287c220720022903b8277c220820022903e8267c220d20022903a826220f20022903f8267c220a20022903f8257c220b2002290398287c220920022903c8277c220c200229038827221020022903d8277c221120022903b8267c221220022903e8257c221320022903a8287c221420022903e827221520022903b8287c22162002290398277c221720022903c8267c221820022903d8257c221920022903c828221a20022903c8257c221b20022903f8277c221c20022903a8277c221d20022903d8267c221e423388200241c8286a41086a290300200241c8256a41086a2903007c201b201a54ad7c200241f8276a41086a2903007c201c201b54ad7c200241a8276a41086a2903007c201d201c54ad7c200241d8266a41086a2903007c201e201d54ad7c420d86847c221b423388200241e8276a41086a290300200241b8286a41086a2903007c2016201554ad7c20024198276a41086a2903007c2017201654ad7c200241c8266a41086a2903007c2018201754ad7c200241d8256a41086a2903007c2019201854ad7c201b201954ad7c420d86847c221642338820024188276a41086a290300200241d8276a41086a2903007c2011201054ad7c200241b8266a41086a2903007c2012201154ad7c200241e8256a41086a2903007c2013201254ad7c200241a8286a41086a2903007c2014201354ad7c2016201454ad7c420d86847c2211423388200241a8266a41086a290300200241f8266a41086a2903007c200a200f54ad7c200241f8256a41086a2903007c200b200a54ad7c20024198286a41086a2903007c2009200b54ad7c200241c8276a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a42338820024188266a41086a29030020024198266a41086a2903007c2006200e54ad7c20024188286a41086a2903007c2007200654ad7c200241b8276a41086a2903007c2008200754ad7c200241e8266a41086a2903007c200d200854ad7c200a200d54ad7c420d868442137e201e42ffffffffffffff03837c220742ffffffffffffff0383220620022903d8287c220b420042f682ffa299b88202420010d30b200241d81c6a200a42ffffffffffffff0383220a20052903007c2209420042ddf396f0fbf7b9c300420010d30b200241e81c6a201142ffffffffffffff0383220d20042903007c220c420042ccf7d9e9fbcee010420010d30b20024188236a201642ffffffffffffff0383220820032903007c22114200428df582a3b0868004420010d30b200241e8216a2007423388201b42ffffffffffffff03837c220720022903e0287c22124200429aebd0c282f1c201420010d30b200241f8216a2012420042f682ffa299b88202420010d30b200241c81d6a200b420042cff887b5bcb5c603420010d30b200241c81c6a2009420042ccf7d9e9fbcee010420010d30b200241f81c6a200c4200428df582a3b0868004420010d30b20024198236a20114200429aebd0c282f1c201420010d30b200241a8236a2011420042f682ffa299b88202420010d30b20024188226a2012420042cff887b5bcb5c603420010d30b200241d81d6a200b420042848dc885f9eff000420010d30b200241b81c6a20094200428df582a3b0868004420010d30b200241881d6a200c4200429aebd0c282f1c201420010d30b200241981d6a200c420042f682ffa299b88202420010d30b200241b8236a2011420042cff887b5bcb5c603420010d30b20024198226a2012420042848dc885f9eff000420010d30b200241e81d6a200b420042dfddd7d2ccf91a420010d30b200241a81c6a20094200429aebd0c282f1c201420010d30b200241981c6a2009420042f682ffa299b88202420010d30b200241a81d6a200c420042cff887b5bcb5c603420010d30b200241c8236a2011420042848dc885f9eff000420010d30b200241a8226a2012420042dfddd7d2ccf91a420010d30b200241f81d6a200b420042bed6acd4f2a00a420010d30b200220022903b81c221c20022903d81d7c220b20022903881d7c220920022903a8237c220c2002290388227c221120022903c81c221d20022903c81d7c221220022903f81c7c22132002290398237c221420022903f8217c221620022903d81c221e20022903b81d7c221720022903e81c7c22182002290388237c221920022903e8217c221b423388200241d81c6a41086a290300200241b81d6a41086a2903007c2017201e54ad7c200241e81c6a41086a2903007c2018201754ad7c20024188236a41086a2903007c2019201854ad7c200241e8216a41086a2903007c201b201954ad7c420d86847c2217423388200241c81c6a41086a290300200241c81d6a41086a2903007c2012201d54ad7c200241f81c6a41086a2903007c2013201254ad7c20024198236a41086a2903007c2014201354ad7c200241f8216a41086a2903007c2016201454ad7c2017201654ad7c420d86847c221242ffffffffffffff038337039029200220022903a81c221920022903e81d7c221320022903981d7c221420022903b8237c22162002290398227c22182012423388200241b81c6a41086a290300200241d81d6a41086a2903007c200b201c54ad7c200241881d6a41086a2903007c2009200b54ad7c200241a8236a41086a2903007c200c200954ad7c20024188226a41086a2903007c2011200c54ad7c2012201154ad7c420d86847c220b42ffffffffffffff038337039829200220022903981c221c20022903f81d7c220920022903a81d7c220c20022903c8237c221120022903a8227c2212200b423388200241a81c6a41086a290300200241e81d6a41086a2903007c2013201954ad7c200241981d6a41086a2903007c2014201354ad7c200241b8236a41086a2903007c2016201454ad7c20024198226a41086a2903007c2018201654ad7c200b201854ad7c420d86847c220b42ffffffffffffff03833703a0292002200b423388200241981c6a41086a290300200241f81d6a41086a2903007c2009201c54ad7c200241a81d6a41086a2903007c200c200954ad7c200241c8236a41086a2903007c2011200c54ad7c200241a8226a41086a2903007c2012201154ad7c200b201254ad7c420d868442137e201b42ffffffffffffff03837c220b42ffffffffffffff0383370380292002200b423388201742ffffffffffffff03837c37038829200241d8216a2006420042a3f1e59aa1b9d301420010d30b200241f8226a200742137e221f420042ffed8af7ec86c802420010d30b200241e8236a200842137e2213420042bbf9809de6b8ce03420010d30b20024198246a200d42137e2214420042a9808780a6f4f902420010d30b200241d8246a200a42137e220b420042bdddd5d88385ea00420010d30b200241c8216a2006420042bdddd5d88385ea00420010d30b200241e8226a2007420042a3f1e59aa1b9d301420010d30b200241d8236a2013420042ffed8af7ec86c802420010d30b20024188246a2014420042bbf9809de6b8ce03420010d30b200241c8246a200b420042a9808780a6f4f902420010d30b200241b8216a2006420042a9808780a6f4f902420010d30b200241d8226a2007420042bdddd5d88385ea00420010d30b200241e8246a2008420042a3f1e59aa1b9d301420010d30b200241f8236a2014420042ffed8af7ec86c802420010d30b200241b8246a200b420042bbf9809de6b8ce03420010d30b200241a8216a2006420042bbf9809de6b8ce03420010d30b200241c8226a2007420042a9808780a6f4f902420010d30b200241f8246a2008420042bdddd5d88385ea00420010d30b20024198256a200d420042a3f1e59aa1b9d301420010d30b200241a8246a200b420042ffed8af7ec86c802420010d30b200241d8206a2006420042ffed8af7ec86c802420010d30b200241b8226a2007420042bbf9809de6b8ce03420010d30b20024188256a2008420042a9808780a6f4f902420010d30b200241a8256a200d420042bdddd5d88385ea00420010d30b200241b8256a200a420042a3f1e59aa1b9d301420010d30b200241881e6a200642a3f1e59aa1b9d3017c2209420042efffffffffffffc30020022903d820222020022903b8257c220c20022903b8227c22112002290388257c221220022903a8257c221620022903a82422212002290398257c221720022903a8217c221820022903c8227c221920022903f8247c221b20022903f823222220022903e8247c221c20022903b8247c221d20022903b8217c221e20022903d8227c220e20022903d823222320022903e8227c220f2002290388247c221020022903c8247c221520022903c8217c221a20022903f822222420022903d8217c222520022903e8237c22262002290398247c222720022903d8247c2228423388200241f8226a41086a290300200241d8216a41086a2903007c2025202454ad7c200241e8236a41086a2903007c2026202554ad7c20024198246a41086a2903007c2027202654ad7c200241d8246a41086a2903007c2028202754ad7c420d86847c2225423388200241d8236a41086a290300200241e8226a41086a2903007c200f202354ad7c20024188246a41086a2903007c2010200f54ad7c200241c8246a41086a2903007c2015201054ad7c200241c8216a41086a2903007c201a201554ad7c2025201a54ad7c420d86847c220f423388200241f8236a41086a290300200241e8246a41086a2903007c201c202254ad7c200241b8246a41086a2903007c201d201c54ad7c200241b8216a41086a2903007c201e201d54ad7c200241d8226a41086a2903007c200e201e54ad7c200f200e54ad7c420d86847c221c423388200241a8246a41086a29030020024198256a41086a2903007c2017202154ad7c200241a8216a41086a2903007c2018201754ad7c200241c8226a41086a2903007c2019201854ad7c200241f8246a41086a2903007c201b201954ad7c201c201b54ad7c420d86847c221742ffffffffffffff03837d221842338842137e42bcfdffffffffffc3002017423388200241d8206a41086a290300200241b8256a41086a2903007c200c202054ad7c200241b8226a41086a2903007c2011200c54ad7c20024188256a41086a2903007c2012201154ad7c200241a8256a41086a2903007c2016201254ad7c2017201654ad7c420d868442137e202842ffffffffffffff03837c221642ffffffffffffff03837d221942ffffffffffffff03837c220c420010d30b200241881f6a201842ffffffffffffff038342efffffffffffffc300201c42ffffffffffffff03837d22124233887c22114200201f4287f0dc94c6dfde0f7c420010d30b20024198216a201242ffffffffffffff038342efffffffffffffc300200f42ffffffffffffff03837d22174233887c221242002013428b868581d2a18c387c2218420010d30b200241c8206a201742ffffffffffffff038342efffffffffffffc3002016423388202542ffffffffffffff03837c7d22164233887c22134200201442e18392a796b7d2c4007c2217420010d30b20024188206a201642ffffffffffffff038320194233887c22144200200b42eda9ced69582d9307c220b420010d30b200241981e6a201442002009420010d30b200241c81f6a200c4200200742bdddd5d88385ea007c2216420010d30b200241f81e6a201142002018420010d30b20024188216a201242002017420010d30b200241b8206a20134200200b420010d30b200241a81e6a201342002009420010d30b200241f81f6a201442002016420010d30b200241b81f6a200c4200200842a9808780a6f4f9027c2218420010d30b200241e81e6a201142002017420010d30b200241f8206a20124200200b420010d30b200241b81e6a201242002009420010d30b200241a8206a201342002016420010d30b200241e81f6a201442002018420010d30b200241a81f6a200c4200200d42bbf9809de6b8ce037c2217420010d30b200241d81e6a20114200200b420010d30b200241c81e6a201142002009420010d30b200241e8206a201242002016420010d30b20024198206a201342002018420010d30b200241d81f6a201442002017420010d30b200241981f6a200c4200200a42ffed8af7ec86c8027c420010d30b200220022903e81e221c20022903b81f7c220b20022903f8207c220920022903a81e7c220c20022903f81f7c221120022903f81e221d20022903c81f7c22122002290388217c221320022903b8207c221420022903981e7c221620022903881f221e20022903881e7c22172002290398217c221820022903c8207c22192002290388207c221b423388200241881f6a41086a290300200241881e6a41086a2903007c2017201e54ad7c20024198216a41086a2903007c2018201754ad7c200241c8206a41086a2903007c2019201854ad7c20024188206a41086a2903007c201b201954ad7c420d86847c2217423388200241f81e6a41086a290300200241c81f6a41086a2903007c2012201d54ad7c20024188216a41086a2903007c2013201254ad7c200241b8206a41086a2903007c2014201354ad7c200241981e6a41086a2903007c2016201454ad7c2017201654ad7c420d86847c221242ffffffffffffff03833703e029200220022903d81e221920022903a81f7c221320022903b81e7c221420022903a8207c221620022903e81f7c22182012423388200241e81e6a41086a290300200241b81f6a41086a2903007c200b201c54ad7c200241f8206a41086a2903007c2009200b54ad7c200241a81e6a41086a2903007c200c200954ad7c200241f81f6a41086a2903007c2011200c54ad7c2012201154ad7c420d86847c220b42ffffffffffffff03833703e829200220022903c81e221c20022903981f7c220920022903e8207c220c2002290398207c221120022903d81f7c2212200b423388200241d81e6a41086a290300200241a81f6a41086a2903007c2013201954ad7c200241b81e6a41086a2903007c2014201354ad7c200241a8206a41086a2903007c2016201454ad7c200241e81f6a41086a2903007c2018201654ad7c200b201854ad7c420d86847c220b42ffffffffffffff03833703f0292002200b423388200241c81e6a41086a290300200241981f6a41086a2903007c2009201c54ad7c200241e8206a41086a2903007c200c200954ad7c20024198206a41086a2903007c2011200c54ad7c200241d81f6a41086a2903007c2012201154ad7c200b201254ad7c420d868442137e201b42ffffffffffffff03837c220b42ffffffffffffff03833703d0292002200b423388201742ffffffffffffff03837c3703d829200241982b6a20024180296a200241d0296a107120022d00982b2129200241a02a6a41206a222a200241c02b6a290300220b370300200241a02a6a41186a222b200241982b6a41206a2903002209370300200241a02a6a41106a222c200241982b6a41186a290300220c370300200241a02a6a41086a222d200241982b6a41106a2903002211370300200220022903a02b22123703a02a20024188196a2001290300221342002012420010d30b200241881c6a200b42002001290308221442137e420010d30b200241b81b6a200942002001290310221642137e221b420010d30b200241e81a6a200c42002001290318221842137e2219420010d30b200241981a6a201142002001290320221c42137e2217420010d30b20024198196a201142002013420010d30b200241f81b6a201242002014420010d30b200241a81b6a200b4200201b420010d30b200241d81a6a200942002019420010d30b200241881a6a200c42002017420010d30b200241a8196a200c42002013420010d30b200241e81b6a201142002014420010d30b200241981b6a201242002016420010d30b200241c81a6a200b42002019420010d30b200241f8196a200942002017420010d30b200241b8196a200942002013420010d30b200241d81b6a200c42002014420010d30b200241881b6a201142002016420010d30b200241b81a6a201242002018420010d30b200241e8196a200b42002017420010d30b200241c8196a200b42002013420010d30b200241c81b6a200942002014420010d30b200241f81a6a200c42002016420010d30b200241a81a6a201142002018420010d30b200241d8196a20124200201c420010d30b200220022903c819222520022903d8197c220b20022903c81b7c220920022903f81a7c220c20022903a81a7c221120022903e819222620022903b81a7c221220022903b8197c221320022903d81b7c221420022903881b7c221620022903c81a222720022903981b7c221720022903f8197c221820022903a8197c221920022903e81b7c221b20022903a81b222820022903f81b7c221c20022903d81a7c221d20022903881a7c221e2002290398197c220e20022903881c221f2002290388197c220f20022903b81b7c221020022903e81a7c221520022903981a7c221a423388200241881c6a41086a29030020024188196a41086a2903007c200f201f54ad7c200241b81b6a41086a2903007c2010200f54ad7c200241e81a6a41086a2903007c2015201054ad7c200241981a6a41086a2903007c201a201554ad7c420d86847c220f423388200241a81b6a41086a290300200241f81b6a41086a2903007c201c202854ad7c200241d81a6a41086a2903007c201d201c54ad7c200241881a6a41086a2903007c201e201d54ad7c20024198196a41086a2903007c200e201e54ad7c200f200e54ad7c420d86847c221c423388200241c81a6a41086a290300200241981b6a41086a2903007c2017202754ad7c200241f8196a41086a2903007c2018201754ad7c200241a8196a41086a2903007c2019201854ad7c200241e81b6a41086a2903007c201b201954ad7c201c201b54ad7c420d86847c2217423388200241e8196a41086a290300200241b81a6a41086a2903007c2012202654ad7c200241b8196a41086a2903007c2013201254ad7c200241d81b6a41086a2903007c2014201354ad7c200241881b6a41086a2903007c2016201454ad7c2017201654ad7c420d86847c2212423388200241c8196a41086a290300200241d8196a41086a2903007c200b202554ad7c200241c81b6a41086a2903007c2009200b54ad7c200241f81a6a41086a2903007c200c200954ad7c200241a81a6a41086a2903007c2011200c54ad7c2012201154ad7c420d868442137e201a42ffffffffffffff03837c220b42ffffffffffffff03833703c82a2002200b423388200f42ffffffffffffff03837c22093703d02a2002201242ffffffffffffff0383220c3703e82a2002201742ffffffffffffff038322113703e02a2002201c42ffffffffffffff038322123703d82a200241982b6a200241c82a6a106d20022d00982b410171106f417f73410171106f21012002200942f0ffffffffffff3f20097d221442ffffffffffffff038342d0fdffffffffff3f20022903c82a22137d22164233887c8542002001ad42ff01837d220b8320098522093703d02a2002200c42f0ffffffffffff3f200c7d221742ffffffffffffff038342f0ffffffffffff3f20117d22184233887c85200b83200c85220c3703e82a2002201242f0ffffffffffff3f20127d221942ffffffffffffff038320144233887c85200b8320128522123703d82a200220132013201742338842137e201642ffffffffffffff03837c85200b838522133703c82a20022011201842ffffffffffffff038320194233887c85200b8320118522113703e02a2029417f734101712201106f2129202d202d290300221420098542002029ad42ff01837d220b83201485370300202c202c2903002209201285200b83200985370300202b202b2903002209201185200b83200985370300202a202a2903002209200c85200b83200985370300200220022903a02a2209201385200b832009853703a02a2001106f2101200241c8146a200a20052903007d42f0ffffffffffff3f7c221442338842137e200620022903d8287d42d0fdffffffffff3f7c220c42ffffffffffffff03837c220b4200200642ecffffffffffff038542002001ad42ff01837d22068342ecffffffffffff03852209420010d30b20024188126a200a42ffffffffffffff038520068342ffffffffffffff0385220a4200200720022903e0287d42f0ffffffffffff3f7c221242ffffffffffffff0383200c4233887c220c42137e420010d30b200241d8126a200d42ffffffffffffff038520068342ffffffffffffff038522114200200820032903007d42f0ffffffffffff3f7c221342ffffffffffffff038320124233887c221242137e2216420010d30b200241a8136a200842ffffffffffffff038520068342ffffffffffffff038522084200200d20042903007d42f0ffffffffffff3f7c221742ffffffffffffff038320134233887c220d42137e2213420010d30b200241f8136a200742ffffffffffffff038520068342ffffffffffffff038522064200201442ffffffffffffff038320174233887c221442137e2207420010d30b200241e8136a20064200200b420010d30b200241b8146a20094200200c420010d30b200241f8116a200a42002016420010d30b200241c8126a201142002013420010d30b20024198136a200842002007420010d30b20024188136a20084200200b420010d30b200241d8136a20064200200c420010d30b200241a8146a200942002012420010d30b200241e8116a200a42002013420010d30b200241b8126a201142002007420010d30b200241a8126a20114200200b420010d30b200241f8126a20084200200c420010d30b200241c8136a200642002012420010d30b20024198146a20094200200d420010d30b20024188116a200a42002007420010d30b200241a8106a200a4200200b420010d30b20024198126a20114200200c420010d30b200241e8126a200842002012420010d30b200241b8136a20064200200d420010d30b20024188146a200942002014420010d30b200241f80e6a20022903a810220e2002290388147c22062002290398127c220720022903e8127c220820022903b8137c220d200229038811220f2002290398147c220a20022903a8127c220b20022903f8127c220920022903c8137c220c20022903e811221020022903a8147c221120022903b8127c22122002290388137c221320022903d8137c221420022903f811221520022903b8147c221620022903c8127c22172002290398137c221820022903e8137c2219200229038812221a20022903c8147c221b20022903d8127c221c20022903a8137c221d20022903f8137c221e42338820024188126a41086a290300200241c8146a41086a2903007c201b201a54ad7c200241d8126a41086a2903007c201c201b54ad7c200241a8136a41086a2903007c201d201c54ad7c200241f8136a41086a2903007c201e201d54ad7c420d86847c221b423388200241f8116a41086a290300200241b8146a41086a2903007c2016201554ad7c200241c8126a41086a2903007c2017201654ad7c20024198136a41086a2903007c2018201754ad7c200241e8136a41086a2903007c2019201854ad7c201b201954ad7c420d86847c2216423388200241e8116a41086a290300200241a8146a41086a2903007c2011201054ad7c200241b8126a41086a2903007c2012201154ad7c20024188136a41086a2903007c2013201254ad7c200241d8136a41086a2903007c2014201354ad7c2016201454ad7c420d86847c221142338820024188116a41086a29030020024198146a41086a2903007c200a200f54ad7c200241a8126a41086a2903007c200b200a54ad7c200241f8126a41086a2903007c2009200b54ad7c200241c8136a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a423388200241a8106a41086a29030020024188146a41086a2903007c2006200e54ad7c20024198126a41086a2903007c2007200654ad7c200241e8126a41086a2903007c2008200754ad7c200241b8136a41086a2903007c200d200854ad7c200a200d54ad7c420d868442137e201e42ffffffffffffff03837c220b42ffffffffffffff03832206420042a09ab5a7a4d5d602420010d30b20024198106a200a42ffffffffffffff03832207420042efabafe6f7c88835420010d30b200241f8106a201142ffffffffffffff03832208420042f8fb9b94e0ed8617420010d30b200241d8116a201642ffffffffffffff0383220d4200428b83d98ea38bdb0a420010d30b200241c80f6a200b423388201b42ffffffffffffff03837c220a420042e6c09290d28a8b35420010d30b200241b80f6a200a420042a09ab5a7a4d5d602420010d30b200241e80e6a2006420042b5cccc99bcc0e502420010d30b20024188106a2007420042f8fb9b94e0ed8617420010d30b200241e8106a20084200428b83d98ea38bdb0a420010d30b200241c8116a200d420042e6c09290d28a8b35420010d30b200241b8116a200d420042a09ab5a7a4d5d602420010d30b200241a80f6a200a420042b5cccc99bcc0e502420010d30b200241d80e6a2006420042a8f2a9fabaa79b01420010d30b200241f80f6a20074200428b83d98ea38bdb0a420010d30b200241d8106a2008420042e6c09290d28a8b35420010d30b200241c8106a2008420042a09ab5a7a4d5d602420010d30b200241a8116a200d420042b5cccc99bcc0e502420010d30b200241980f6a200a420042a8f2a9fabaa79b01420010d30b200241c80e6a2006420042a9afa6f3e694c800420010d30b200241e80f6a2007420042e6c09290d28a8b35420010d30b200241d80f6a2007420042a09ab5a7a4d5d602420010d30b200241b8106a2008420042b5cccc99bcc0e502420010d30b20024198116a200d420042a8f2a9fabaa79b01420010d30b200241880f6a200a420042a9afa6f3e694c800420010d30b200241b80e6a2006420042c2cdbdbdb3d1e502420010d30b20022903f029211220022903e829211120022903e029210820022903d829210620022903d0292107200241f02a6a200241a02a6a41011070200241b82c6a41086a2203202d290300220d370300200241b82c6a41106a222d202c290300220a370300200241b82c6a41186a2201202b290300220b370300200241b82c6a41206a222b202a2903003703002003200d200d7c220d370300202d200a200a7c220a3703002001200b20012903007c220b370300200220022903a02a220920097c22093703b82c202b202b290300202a2903007c220c37030020024188186a200742002009420010d30b200241f8166a200c4200200642137e420010d30b200241c8176a200b4200200842137e2216420010d30b20024188176a200a4200201142137e2214420010d30b200241b8166a200d4200201242137e2213420010d30b200241c8186a200d42002007420010d30b20024198186a200942002006420010d30b200241e8166a200c42002016420010d30b200241d8176a200b42002014420010d30b200241a8166a200a42002013420010d30b20024198176a200a42002007420010d30b200241d8186a200d42002006420010d30b200241a8186a200942002008420010d30b200241d8166a200c42002014420010d30b20024198166a200b42002013420010d30b200241e8176a200b42002007420010d30b200241a8176a200a42002006420010d30b200241e8186a200d42002008420010d30b200241b8186a200942002011420010d30b200241e8156a200c42002013420010d30b200241c8166a200c42002007420010d30b200241f8176a200b42002006420010d30b200241b8176a200a42002008420010d30b200241f8186a200d42002011420010d30b200241b8156a200942002012420010d30b200241e80b6a20022903d80f222520022903b80e7c220d20022903b8107c220a2002290398117c220b20022903880f7c220920022903e80f222620022903c80e7c220c20022903c8107c221320022903a8117c221420022903980f7c221620022903f80f222720022903d80e7c221720022903d8107c221820022903b8117c221920022903a80f7c221b200229038810222820022903e80e7c221c20022903e8107c221d20022903c8117c221e20022903b80f7c220e200229039810221f20022903f80e7c220f20022903f8107c221020022903d8117c221520022903c80f7c221a42338820024198106a41086a290300200241f80e6a41086a2903007c200f201f54ad7c200241f8106a41086a2903007c2010200f54ad7c200241d8116a41086a2903007c2015201054ad7c200241c80f6a41086a2903007c201a201554ad7c420d86847c220f42338820024188106a41086a290300200241e80e6a41086a2903007c201c202854ad7c200241e8106a41086a2903007c201d201c54ad7c200241c8116a41086a2903007c201e201d54ad7c200241b80f6a41086a2903007c200e201e54ad7c200f200e54ad7c420d86847c221c423388200241f80f6a41086a290300200241d80e6a41086a2903007c2017202754ad7c200241d8106a41086a2903007c2018201754ad7c200241b8116a41086a2903007c2019201854ad7c200241a80f6a41086a2903007c201b201954ad7c201c201b54ad7c420d86847c2217423388200241e80f6a41086a290300200241c80e6a41086a2903007c200c202654ad7c200241c8106a41086a2903007c2013200c54ad7c200241a8116a41086a2903007c2014201354ad7c200241980f6a41086a2903007c2016201454ad7c2017201654ad7c420d86847c220c42ffffffffffffff038320127d42f0ffffffffffff3f7c221242338842137e200c423388200241d80f6a41086a290300200241b80e6a41086a2903007c200d202554ad7c200241b8106a41086a2903007c200a200d54ad7c20024198116a41086a2903007c200b200a54ad7c200241880f6a41086a2903007c2009200b54ad7c200c200954ad7c420d868442137e201a42ffffffffffffff03837c220a42ffffffffffffff038320077d42d0fdffffffffff3f7c220b42ffffffffffffff03837c22074200429bdceccb84d4fd03420010d30b200241b80c6a201242ffffffffffffff0383201742ffffffffffffff038320117d42f0ffffffffffff3f7c22094233887c220d420042969988cadca7b00e420010d30b200241a80e6a200942ffffffffffffff0383201c42ffffffffffffff038320087d42f0ffffffffffff3f7c22094233887c2208420042a88c8b81f5cabeca00420010d30b200241d80d6a200942ffffffffffffff0383200a423388200f42ffffffffffffff03837c20067d42f0ffffffffffff3f7c220a4233887c2206420042c8ee859b8cd29829420010d30b200241880d6a200a42ffffffffffffff0383200b4233887c220a420042dcd78e98b19df320420010d30b200241f80c6a200a4200429bdceccb84d4fd03420010d30b200241d80b6a2007420042d2dfded4f0ede000420010d30b200241a80c6a200d420042a88c8b81f5cabeca00420010d30b200241980e6a2008420042c8ee859b8cd29829420010d30b200241c80d6a2006420042dcd78e98b19df320420010d30b200241b80d6a20064200429bdceccb84d4fd03420010d30b200241e80c6a200a420042d2dfded4f0ede000420010d30b200241c80b6a2007420042b8ecf9b5ffe8f503420010d30b200241980c6a200d420042c8ee859b8cd29829420010d30b200241880e6a2008420042dcd78e98b19df320420010d30b200241f80d6a20084200429bdceccb84d4fd03420010d30b200241a80d6a2006420042d2dfded4f0ede000420010d30b200241d80c6a200a420042b8ecf9b5ffe8f503420010d30b200241f80a6a200742004298c9f9f3f9c09502420010d30b200241880c6a200d420042dcd78e98b19df320420010d30b200241f80b6a200d4200429bdceccb84d4fd03420010d30b200241e80d6a2008420042d2dfded4f0ede000420010d30b200241980d6a2006420042b8ecf9b5ffe8f503420010d30b200241c80c6a200a42004298c9f9f3f9c09502420010d30b200241a80a6a2007420042b4f0cadfb1d2dd01420010d30b20022903f02a210d20022903f82a210820022903802b210720022903902b210620022903882b210a200241982b6a4198016a222b4200370300200241982b6a4190016a222c4200370300200241982b6a4188016a22014200370300200241982b6a4180016a222a4200370300200242013703902c200220022903f02a42017c3703902c202a202a29030020022903f82a7c3703002001200129030020022903802b7c370300202c202c29030020022903882b7c2218370300202b202b29030020022903902b7c221d370300200241982b6a41c8006a222d42f0ffffffffffff3f20067d220e42ffffffffffffff038342f0ffffffffffff3f200a7d220a4233887c2206370300200241982b6a41c0006a2203200a42ffffffffffffff038342f0ffffffffffff3f20077d220a4233887c2207370300200241982b6a41386a2204200a42ffffffffffffff038342f0ffffffffffff3f20087d220a4233887c2208370300200241982b6a41306a2205200a42ffffffffffffff038342d1fdffffffffff3f200d7d220f4233887c220d370300200241982b6a41e0006a222920022903980c221e20022903c80b7c220a20022903880e7c220b20022903b80d7c220920022903e80c7c220c20022903a80c221c20022903d80b7c221120022903980e7c221220022903c80d7c221320022903f80c7c221420022903b80c221020022903e80b7c221620022903a80e7c221720022903d80d7c221920022903880d7c221b423388200241b80c6a41086a290300200241e80b6a41086a2903007c2016201054ad7c200241a80e6a41086a2903007c2017201654ad7c200241d80d6a41086a2903007c2019201754ad7c200241880d6a41086a2903007c201b201954ad7c420d86847c2216423388200241a80c6a41086a290300200241d80b6a41086a2903007c2011201c54ad7c200241980e6a41086a2903007c2012201154ad7c200241c80d6a41086a2903007c2013201254ad7c200241f80c6a41086a2903007c2014201354ad7c2016201454ad7c420d86847c221142ffffffffffffff03832214370300200241982b6a41e8006a222e20022903880c221020022903f80a7c221220022903f80d7c221320022903a80d7c221720022903d80c7c221c2011423388200241980c6a41086a290300200241c80b6a41086a2903007c200a201e54ad7c200241880e6a41086a2903007c200b200a54ad7c200241b80d6a41086a2903007c2009200b54ad7c200241e80c6a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a42ffffffffffffff03832219370300200241982b6a41f0006a222f20022903f80b221520022903a80a7c220b20022903e80d7c220920022903980d7c220c20022903c80c7c2211200a423388200241880c6a41086a290300200241f80a6a41086a2903007c2012201054ad7c200241f80d6a41086a2903007c2013201254ad7c200241a80d6a41086a2903007c2017201354ad7c200241d80c6a41086a2903007c201c201754ad7c200a201c54ad7c420d86847c220a42ffffffffffffff0383221e370300200241982b6a41d8006a2230200a423388200241f80b6a41086a290300200241a80a6a41086a2903007c200b201554ad7c200241e80d6a41086a2903007c2009200b54ad7c200241980d6a41086a2903007c200c200954ad7c200241c80c6a41086a2903007c2011200c54ad7c200a201154ad7c420d868442137e201b42ffffffffffffff03837c2215423388201642ffffffffffffff03837c220a3703002002200e42338842137e200f42ffffffffffffff03837c3703c02b200220022903d816221020022903a8187c22092002290398167c220c2002290398177c221120022903d8187c221220022903e816221a2002290398187c220b20022903d8177c221320022903a8167c221620022903c8187c221720022903f81622252002290388187c221b20022903c8177c221c2002290388177c220e20022903b8167c220f423388200241f8166a41086a29030020024188186a41086a2903007c201b202554ad7c200241c8176a41086a2903007c201c201b54ad7c20024188176a41086a2903007c200e201c54ad7c200241b8166a41086a2903007c200f200e54ad7c420d86847c221b423388200241e8166a41086a29030020024198186a41086a2903007c200b201a54ad7c200241d8176a41086a2903007c2013200b54ad7c200241a8166a41086a2903007c2016201354ad7c200241c8186a41086a2903007c2017201654ad7c201b201754ad7c420d86847c221342ffffffffffffff0383220b3703a82b200220022903e815221a20022903b8187c221620022903e8177c221720022903a8177c221c20022903e8187c220e2013423388200241d8166a41086a290300200241a8186a41086a2903007c2009201054ad7c20024198166a41086a2903007c200c200954ad7c20024198176a41086a2903007c2011200c54ad7c200241d8186a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220c42ffffffffffffff038322093703b02b200220022903c816222520022903b8157c221120022903f8177c221220022903b8177c221320022903f8187c2210200c423388200241e8156a41086a290300200241b8186a41086a2903007c2016201a54ad7c200241e8176a41086a2903007c2017201654ad7c200241a8176a41086a2903007c201c201754ad7c200241e8186a41086a2903007c200e201c54ad7c200c200e54ad7c420d86847c221642ffffffffffffff0383220c3703b82b20022016423388200241c8166a41086a290300200241b8156a41086a2903007c2011202554ad7c200241f8176a41086a2903007c2012201154ad7c200241b8176a41086a2903007c2013201254ad7c200241f8186a41086a2903007c2010201354ad7c2016201054ad7c420d868442137e200f42ffffffffffffff03837c221242ffffffffffffff038322113703982b20022012423388201b42ffffffffffffff03837c22123703a02b2002201542ffffffffffffff038322133703e82b20024198086a20022903902c221642002011420010d30b200241b8076a200c4200202a290300221742137e420010d30b20024188086a200942002001290300221b42137e220f420010d30b200241f8156a200b4200201842137e220e420010d30b20024188156a20124200201d42137e221c420010d30b200241a8086a201242002016420010d30b200241a8076a201142002017420010d30b200241f8076a200c4200200f420010d30b200241c8156a20094200200e420010d30b20024188166a200b4200201c420010d30b200241b8086a200b42002016420010d30b20024198076a201242002017420010d30b200241e8076a20114200201b420010d30b20024198156a200c4200200e420010d30b200241d8156a20094200201c420010d30b200241c8086a200942002016420010d30b20024188076a200b42002017420010d30b200241d8076a20124200201b420010d30b200241e8146a201142002018420010d30b200241a8156a200c4200201c420010d30b200241d8086a200c42002016420010d30b200241f8066a200942002017420010d30b200241c8076a200b4200201b420010d30b200241f8146a201242002018420010d30b200241d8146a20114200201d420010d30b2000200229039815220f20022903e8077c220b20022903d8157c220920022903b8087c220c2002290398077c221120022903f807221020022903a8077c221220022903c8157c22162002290388167c221720022903a8087c221820022903b80722152002290398087c221b2002290388087c221c20022903f8157c221d2002290388157c220e423388200241b8076a41086a29030020024198086a41086a2903007c201b201554ad7c20024188086a41086a2903007c201c201b54ad7c200241f8156a41086a2903007c201d201c54ad7c20024188156a41086a2903007c200e201d54ad7c420d86847c221b423388200241f8076a41086a290300200241a8076a41086a2903007c2012201054ad7c200241c8156a41086a2903007c2016201254ad7c20024188166a41086a2903007c2017201654ad7c200241a8086a41086a2903007c2018201754ad7c201b201854ad7c420d86847c221242ffffffffffffff0383370310200020022903a815221d20022903e8147c221620022903c8087c22172002290388077c221820022903d8077c221c201242338820024198156a41086a290300200241e8076a41086a2903007c200b200f54ad7c200241d8156a41086a2903007c2009200b54ad7c200241b8086a41086a2903007c200c200954ad7c20024198076a41086a2903007c2011200c54ad7c2012201154ad7c420d86847c220b42ffffffffffffff0383370318200020022903d808220f20022903d8147c220920022903f8067c220c20022903c8077c221120022903f8147c2212200b423388200241a8156a41086a290300200241e8146a41086a2903007c2016201d54ad7c200241c8086a41086a2903007c2017201654ad7c20024188076a41086a2903007c2018201754ad7c200241d8076a41086a2903007c201c201854ad7c200b201c54ad7c420d86847c220b42ffffffffffffff03833703202000200b423388200241d8086a41086a290300200241d8146a41086a2903007c2009200f54ad7c200241f8066a41086a2903007c200c200954ad7c200241c8076a41086a2903007c2011200c54ad7c200241f8146a41086a2903007c2012201154ad7c200b201254ad7c420d868442137e200e42ffffffffffffff03837c220b42ffffffffffffff03833703002000200b423388201b42ffffffffffffff03837c370308200241a8066a2013420020022903c02b220b420010d30b200241980a6a20064200200a42137e420010d30b200241980b6a20074200201442137e2211420010d30b200241d80a6a20084200201942137e220c420010d30b20024198096a200d4200201e42137e2209420010d30b200241a8096a200d42002013420010d30b200241b8066a200b4200200a420010d30b200241880b6a200642002011420010d30b200241c80a6a20074200200c420010d30b20024188096a200842002009420010d30b200241b8096a200842002013420010d30b200241880a6a200d4200200a420010d30b200241c8066a200b42002014420010d30b200241b80a6a20064200200c420010d30b200241f8086a200742002009420010d30b200241c8096a200742002013420010d30b200241f8096a20084200200a420010d30b200241a80b6a200d42002014420010d30b200241d8066a200b42002019420010d30b200241e8086a200642002009420010d30b200241d8096a200642002013420010d30b200241e8096a20074200200a420010d30b200241b80b6a200842002014420010d30b200241e80a6a200d42002019420010d30b200241e8066a200b4200201e420010d30b200041386a20022903b80a221620022903c8067c220620022903f8087c220720022903b8097c220820022903880a7c220d20022903880b221720022903b8067c220a20022903c80a7c220b2002290388097c220920022903a8097c220c20022903980a221820022903a8067c221120022903980b7c221220022903d80a7c22132002290398097c2214423388200241980a6a41086a290300200241a8066a41086a2903007c2011201854ad7c200241980b6a41086a2903007c2012201154ad7c200241d80a6a41086a2903007c2013201254ad7c20024198096a41086a2903007c2014201354ad7c420d86847c2211423388200241880b6a41086a290300200241b8066a41086a2903007c200a201754ad7c200241c80a6a41086a2903007c200b200a54ad7c20024188096a41086a2903007c2009200b54ad7c200241a8096a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a42ffffffffffffff0383370300200041c0006a20022903e808221320022903d8067c220b20022903c8097c220920022903f8097c220c20022903a80b7c2212200a423388200241b80a6a41086a290300200241c8066a41086a2903007c2006201654ad7c200241f8086a41086a2903007c2007200654ad7c200241b8096a41086a2903007c2008200754ad7c200241880a6a41086a2903007c200d200854ad7c200a200d54ad7c420d86847c220642ffffffffffffff0383370300200041c8006a20022903d809221620022903e8067c220720022903e8097c220820022903b80b7c220d20022903e80a7c220a2006423388200241e8086a41086a290300200241d8066a41086a2903007c200b201354ad7c200241c8096a41086a2903007c2009200b54ad7c200241f8096a41086a2903007c200c200954ad7c200241a80b6a41086a2903007c2012200c54ad7c2006201254ad7c420d86847c220642ffffffffffffff038337030020002006423388200241d8096a41086a290300200241e8066a41086a2903007c2007201654ad7c200241e8096a41086a2903007c2008200754ad7c200241b80b6a41086a2903007c200d200854ad7c200241e80a6a41086a2903007c200a200d54ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff0383370328200041306a2006423388201142ffffffffffffff03837c37030020024198066a20022903902c2206420020022903e82b2207420010d30b200241d8036a202f29030022084200202a290300220d42137e420010d30b200241a8046a202e290300220a42002001290300220c42137e2214420010d30b200241f8046a2029290300220b4200202c290300221242137e2213420010d30b200241c8056a203029030022094200202b290300221642137e2211420010d30b200241d8056a200942002006420010d30b200241c8036a20074200200d420010d30b20024198046a200842002014420010d30b200241e8046a200a42002013420010d30b200241b8056a200b42002011420010d30b200241e8056a200b42002006420010d30b200241b8036a20094200200d420010d30b20024188046a20074200200c420010d30b200241d8046a200842002013420010d30b200241a8056a200a42002011420010d30b200241f8056a200a42002006420010d30b200241a8036a200b4200200d420010d30b200241f8036a20094200200c420010d30b200241c8046a200742002012420010d30b20024198056a200842002011420010d30b20024188066a200842002006420010d30b20024198036a200a4200200d420010d30b200241e8036a200b4200200c420010d30b200241b8046a200942002012420010d30b20024188056a200742002016420010d30b200041e0006a20022903d80422162002290388047c220620022903a8057c220720022903e8057c220820022903b8037c220d200229039804221720022903c8037c220a20022903e8047c220b20022903b8057c220920022903d8057c220c20022903d80322182002290398067c221120022903a8047c221220022903f8047c221320022903c8057c2214423388200241d8036a41086a29030020024198066a41086a2903007c2011201854ad7c200241a8046a41086a2903007c2012201154ad7c200241f8046a41086a2903007c2013201254ad7c200241c8056a41086a2903007c2014201354ad7c420d86847c221142338820024198046a41086a290300200241c8036a41086a2903007c200a201754ad7c200241e8046a41086a2903007c200b200a54ad7c200241b8056a41086a2903007c2009200b54ad7c200241d8056a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a42ffffffffffffff0383370300200041e8006a200229039805221320022903c8047c220b20022903f8057c220920022903a8037c220c20022903f8037c2212200a423388200241d8046a41086a29030020024188046a41086a2903007c2006201654ad7c200241a8056a41086a2903007c2007200654ad7c200241e8056a41086a2903007c2008200754ad7c200241b8036a41086a2903007c200d200854ad7c200a200d54ad7c420d86847c220642ffffffffffffff0383370300200041f0006a20022903880622162002290388057c22072002290398037c220820022903e8037c220d20022903b8047c220a200642338820024198056a41086a290300200241c8046a41086a2903007c200b201354ad7c200241f8056a41086a2903007c2009200b54ad7c200241a8036a41086a2903007c200c200954ad7c200241f8036a41086a2903007c2012200c54ad7c2006201254ad7c420d86847c220642ffffffffffffff03833703002000200642338820024188066a41086a29030020024188056a41086a2903007c2007201654ad7c20024198036a41086a2903007c2008200754ad7c200241e8036a41086a2903007c200d200854ad7c200241b8046a41086a2903007c200a200d54ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff0383370350200041d8006a2006423388201142ffffffffffffff03837c37030020024188036a20022903c02b2206420020022903982b2207420010d30b200241c8006a20022903b82b220842002005290300220d42137e420010d30b20024198016a20022903b02b220a42002004290300220c42137e2214420010d30b200241e8016a20022903a82b220b42002003290300221242137e2213420010d30b200241b8026a20022903a02b22094200202d290300221642137e2211420010d30b200241c8026a200942002006420010d30b200241386a20074200200d420010d30b20024188016a200842002014420010d30b200241d8016a200a42002013420010d30b200241a8026a200b42002011420010d30b200241d8026a200b42002006420010d30b200241286a20094200200d420010d30b200241f8006a20074200200c420010d30b200241c8016a200842002013420010d30b20024198026a200a42002011420010d30b200241e8026a200a42002006420010d30b200241186a200b4200200d420010d30b200241e8006a20094200200c420010d30b200241b8016a200742002012420010d30b20024188026a200842002011420010d30b200241f8026a200842002006420010d30b200241086a200a4200200d420010d30b200241d8006a200b4200200c420010d30b200241a8016a200942002012420010d30b200241f8016a200742002016420010d30b20004188016a20022903c801221620022903787c22062002290398027c220720022903d8027c220820022903287c220d200229038801221720022903387c220a20022903d8017c220b20022903a8027c220920022903c8027c220c200229034822182002290388037c22112002290398017c221220022903e8017c221320022903b8027c2214423388200241c8006a41086a29030020024188036a41086a2903007c2011201854ad7c20024198016a41086a2903007c2012201154ad7c200241e8016a41086a2903007c2013201254ad7c200241b8026a41086a2903007c2014201354ad7c420d86847c221142338820024188016a41086a290300200241386a41086a2903007c200a201754ad7c200241d8016a41086a2903007c200b200a54ad7c200241a8026a41086a2903007c2009200b54ad7c200241c8026a41086a2903007c200c200954ad7c2011200c54ad7c420d86847c220a42ffffffffffffff038337030020004190016a200229038802221320022903b8017c220b20022903e8027c220920022903187c220c20022903687c2212200a423388200241c8016a41086a290300200241f8006a41086a2903007c2006201654ad7c20024198026a41086a2903007c2007200654ad7c200241d8026a41086a2903007c2008200754ad7c200241286a41086a2903007c200d200854ad7c200a200d54ad7c420d86847c220642ffffffffffffff038337030020004198016a20022903f802221620022903f8017c220720022903087c220820022903587c220d20022903a8017c220a200642338820024188026a41086a290300200241b8016a41086a2903007c200b201354ad7c200241e8026a41086a2903007c2009200b54ad7c200241186a41086a2903007c200c200954ad7c200241e8006a41086a2903007c2012200c54ad7c2006201254ad7c420d86847c220642ffffffffffffff038337030020002006423388200241f8026a41086a290300200241f8016a41086a2903007c2007201654ad7c200241086a41086a2903007c2008200754ad7c200241d8006a41086a2903007c200d200854ad7c200241a8016a41086a2903007c200a200d54ad7c2006200a54ad7c420d868442137e201442ffffffffffffff03837c220642ffffffffffffff038337037820004180016a2006423388201142ffffffffffffff03837c370300200241e02c6a24000bd32004047f017e027f1c7e23004190066b220224000240024020012c001f417f4a0d00200041003a00000c010b20024180056a41186a2203200141186a29000037030020024180056a41106a2204200141106a29000037030020024180056a41086a2205200141086a29000037030020022001290000220637038005200220022d009f0541ff00713a009f05200241c0056a41186a22074200370300200241c0056a41106a22084200370300200241c0056a41086a220142003703002002200231008205421086200231008105420886200642ff0183848422063703c005200220023100830542188620068422063703c005200220023100840542208620068422063703c005200220023100850542288620068422063703c005200220023100860542308620068422063703c00520022002310087054238862006843703c005200120012903002005310000842206370300200120023100890542088620068422063703002001200231008a0542108620068422063703002001200231008b0542188620068422063703002001200231008c0542208620068422063703002001200231008d0542288620068422063703002001200231008e0542308620068422063703002001200231008f0542388620068437030020082008290300200431000084220637030020082002310091054208862006842206370300200820023100920542108620068422063703002008200231009305421886200684220637030020082002310094054220862006842206370300200820023100950542288620068422063703002008200231009605423086200684220637030020082002310097054238862006842209370300200720072903002003310000842206370300200720023100990542088620068422063703002007200231009a0542108620068422063703002007200231009b0542188620068422063703002007200231009c0542208620068422063703002007200231009d0542288620068422063703002007200231009e0542308620068422063703002007200231009f05423886200684220a37030020024180036a20022903c005220b42ffffffffffffff07832206420042edcd87b9d697d207420010d30b200241c0026a2006420042dac89fe3dad6ee01420010d30b20024180026a2001290300220c420c86200b4234888442ffffffffffffff0783220b420042edcd87b9d697d207420010d30b200241b0026a20064200429bcad7d9feffff07420010d30b200241c0016a200b420042dac89fe3dad6ee01420010d30b200241d0036a2009421886200c4228888442ffffffffffffff0783220c420042edcd87b9d697d207420010d30b200241a0026a2006420042ffffffffffffff07420010d30b20024180016a200b4200429bcad7d9feffff07420010d30b200241c0036a200c420042dac89fe3dad6ee01420010d30b200241a0046a200a4224862009421c888442ffffffffffffff07832209420042edcd87b9d697d207420010d30b20024190026a2006420042ffffffffffff03420010d30b200241c0006a200b420042ffffffffffffff07420010d30b200241b0036a200c4200429bcad7d9feffff07420010d30b20024190046a2009420042dac89fe3dad6ee01420010d30b200241f0046a200a4210882206420042edcd87b9d697d207420010d30b2002200b420042ffffffffffff03420010d30b200241a0036a200c420042ffffffffffffff07420010d30b20024180046a20094200429bcad7d9feffff07420010d30b200241e0046a2006420042dac89fe3dad6ee01420010d30b20024190036a200c420042ffffffffffff03420010d30b200241f0036a2009420042ffffffffffffff07420010d30b200241d0046a20064200429bcad7d9feffff07420010d30b200241e0036a2009420042ffffffffffff03420010d30b200241c0046a2006420042ffffffffffffff07420010d30b200241b0046a2006420042ffffffffffff03420010d30b200241f0026a200229038003220b429bfcd192b1b4c7027e42ffffffffffffff07832206420042eda7d7e7a5e39801420010d30b200241e0026a200642004281cbb5cef7c5fa06420010d30b200241f0016a200229038002220d20022903c0027c220c200b20022903f00222097c220b423488200241f0026a41086a29030020024180036a41086a2903007c200b200954ad7c220e420c86847c220920022903e0027c220a429bfcd192b1b4c7027e42ffffffffffffff0783220b420042eda7d7e7a5e39801420010d30b200241d0026a2006420042f9bdd300420010d30b200241e0016a200b42004281cbb5cef7c5fa06420010d30b200241b0016a20022903c001220f20022903b0027c221020022903d0037c221120022903d0027c221220022903e0017c221320022903f0012214200a7c2215423488200241f0016a41086a29030020024180026a41086a290300200241c0026a41086a2903007c200c200d54ad7c200e4234887c2009200c54ad7c200241e0026a41086a2903007c200a200954ad7c7c2015201454ad7c2216420c86847c2209429bfcd192b1b4c7027e42ffffffffffffff0783220c420042eda7d7e7a5e39801420010d30b200241d0016a200b420042f9bdd300420010d30b200241a0016a200c42004281cbb5cef7c5fa06420010d30b200241f0006a200229038001221720022903a0027c220a20022903c0037c220d20022903a0047c220e20022903d0017c221420022903a0017c221520022903b001221820097c2219423488200241b0016a41086a290300200241c0016a41086a290300200241b0026a41086a2903007c2010200f54ad7c200241d0036a41086a2903007c2011201054ad7c200241d0026a41086a2903007c2012201154ad7c200241e0016a41086a2903007c2013201254ad7c20164234887c2009201354ad7c7c2019201854ad7c221a420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff07832209420042eda7d7e7a5e39801420010d30b20024190016a200c420042f9bdd300420010d30b200241e0006a200942004281cbb5cef7c5fa06420010d30b200241306a2002290340221b2002290390027c221120022903b0037c22122002290390047c221320022903f0047c220f2006422c867c22162002290390017c221820022903607c22192002290370221c20107c221d423488200241f0006a41086a29030020024180016a41086a290300200241a0026a41086a2903007c200a201754ad7c200241c0036a41086a2903007c200d200a54ad7c200241a0046a41086a2903007c200e200d54ad7c200241d0016a41086a2903007c2014200e54ad7c200241a0016a41086a2903007c2015201454ad7c201a4234887c2010201554ad7c7c201d201c54ad7c221e420c86847c2210429bfcd192b1b4c7027e42ffffffffffffff0783220a420042eda7d7e7a5e39801420010d30b200241d0006a2009420042f9bdd300420010d30b200241206a200a42004281cbb5cef7c5fa06420010d30b200241106a200a420042f9bdd300420010d30b200120022903f003221f2002290390037c220d20022903d0047c220e200c422c867c221420022903107c221520022903a003222020022903007c22172002290380047c221a20022903e0047c221c200b422c867c221d20022903507c222120022903207c22222002290330222320107c2224423488200241306a41086a290300200241c0006a41086a29030020024190026a41086a2903007c2011201b54ad7c200241b0036a41086a2903007c2012201154ad7c20024190046a41086a2903007c2013201254ad7c200241f0046a41086a2903007c200f201354ad7c20064214887c2016200f54ad7c20024190016a41086a2903007c2018201654ad7c200241e0006a41086a2903007c2019201854ad7c201e4234887c2010201954ad7c7c2024202354ad7c2210420c86847c2206423488200241a0036a41086a290300200241086a2903007c2017202054ad7c20024180046a41086a2903007c201a201754ad7c200241e0046a41086a2903007c201c201a54ad7c200b4214887c201d201c54ad7c200241d0006a41086a2903007c2021201d54ad7c200241206a41086a2903007c2022202154ad7c20104234887c2006202254ad7c2212420c86847c220b42ffffffffffffff0783200642ffffffffffffff07834293d8a898da9ce77e7c2206423f877c42ffb4cab188ba85797c221342ffffffffffffff0783200642ffffffffffffff0783200a422c86220f20022903b0047c220620022903c004221620022903e0037c22102009422c867c2211200b423488200241f0036a41086a29030020024190036a41086a2903007c200d201f54ad7c200241d0046a41086a2903007c200e200d54ad7c200c4214887c2014200e54ad7c200241106a41086a2903007c2015201454ad7c20124234887c200b201554ad7c220c420c86847c220b423488200241c0046a41086a290300200241e0036a41086a2903007c2010201654ad7c20094214887c2011201054ad7c200c4234887c200b201154ad7c2209420c86847c220c423488200a421488200241b0046a41086a2903007c2006200f54ad7c20094234887c200c200654ad7c420c8684200c42ffffffffffffff0783200b42ffffffffffffff07832013423f877c4287c2ac7f7c220c423f877c2209423f877c428080808080807c7c2210423f87220a42eda7d7e7a5e39801837c22064234887c200a4281cbb5cef7c5fa06837c220b42ffffffffffffff078322113703002008200c42ffffffffffffff0783200b4234887c200a42f9bdd300837c220c42ffffffffffffff078322123703002007200942ffffffffffffff0783200c4234887c220942ffffffffffffff07832213370300200241e0056a201042ffffffffffffff078320094234887c200a4280808080808004837c220a42ffffffffffffff07833703002002200642ffffffffffffff078322103703c0052002200a4228883c00bf052002200a4220883c00be052002200a4218883c00bd052002200a4210883c00bc052002200a4208883c00bb052002200a3c00ba0520022009422c883c00b905200220094224883c00b80520022009421c883c00b705200220094214883c00b60520022009420c883c00b505200220094204883c00b405200220134204862012423088843c00b3052002200c4228883c00b2052002200c4220883c00b1052002200c4218883c00b0052002200c4210883c00af052002200c4208883c00ae052002200c3c00ad052002200b422c883c00ac052002200b4224883c00ab052002200b421c883c00aa052002200b4214883c00a9052002200b420c883c00a8052002200b4204883c00a705200220114204862010423088843c00a605200220064228883c00a505200220064220883c00a405200220064218883c00a305200220064210883c00a205200220064208883c00a105200220063c00a0052006a72108200241a0056a4101722103410021014101210702400340200820024180056a20016a2d0000732208410020086b72417f7341800171410776106f20077121072001411f460d01200320016a2d00002108200141016a21010c000b0b4100210102402007106f41ff01714101470d002000200229038005370001200041196a20024198056a290300370000200041116a20024190056a290300370000200041096a20024188056a290300370000410121010b200020013a00000b20024190066a24000b180020002802002200280200200041046a280200200110690bf20301017f02400240024002400240024002400240200041ff01710e0700010203040506070b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41003a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41013a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41023a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41033a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41043a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41053a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41063a00002002200041016a3602000b0bbc0101027f230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024108200241084b1b21020240024020010d00200341003602100c010b200341106a41086a410136020020032001360214200320002802003602100b200320024101200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001360200200341206a24000f0b1034000bc10301047f02402001450d002000200141186c6a210303400240024020002802004101470d00200041046a2802002104200041086a2802002201200210790240200241046a280200200241086a220528020022066b20014f0d002002200620011077200528020021060b200228020020066a2004200110d40b1a200620016a21060c010b200041046a2802002104200041086a2802002201200210790240200241046a280200200241086a220528020022066b20014f0d002002200620011077200528020021060b200228020020066a2004200110d40b1a200620016a21060b200241086a22012006360200024002402000410c6a2802004101470d00200041106a2802002105200041146a2802002206200210790240200241046a280200200128020022046b20064f0d002002200420061077200128020021040b200228020020046a2005200610d40b1a200420066a21060c010b200041106a2802002105200041146a2802002206200210790240200241046a280200200128020022046b20064f0d002002200420061077200128020021040b200228020020046a2005200610d40b1a200420066a21060b20012006360200200041186a22002003470d000b0b0b990301047f024002400240200041c000490d00200041808001490d012000418080808004490d020240200141046a22022802002203200141086a22042802002205470d00200120054101107720022802002103200428020021050b2001280200220220056a41033a00002004200541016a22053602000240200320056b41034b0d002001200541041077200141086a2802002105200128020021020b200220056a2000360000200141086a200541046a3602000f0b200041027421030240200141046a280200200141086a22052802002200470d002001200041011077200528020021000b200128020020006a20033a00002005200041016a3602000f0b200041027441017221030240200141046a280200200141086a220528020022006b41014b0d002001200041021077200528020021000b200128020020006a20033b00002005200041026a3602000f0b200041027441027221030240200141046a280200200141086a220528020022006b41034b0d002001200041041077200528020021000b200128020020006a20033600002005200041046a3602000bcf0401077f02402001450d0020002001412c6c6a2103200241086a2101200241046a2104034002400240200022052802004101470d0020052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070c010b20052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070b2001200736020002400240200528020c4101470d0020052802102107200528021822082002107920072008200210780c010b20052802102107200541146a28020022082002107920072008200210780b2005412c6a210002400240200528021c4101470d0020052802202107200528022822052002107920054103742205450d01200720056a2109034020072802002106200741046a28020022052002107902402004280200200128020022086b20054f0d002002200820051077200128020021080b200228020020086a2006200510d40b1a2001200820056a360200200741086a22072009470d000c020b0b20052802202107200528022422052002107920054103742205450d00200720056a2109034020072802002106200741046a28020022052002107902402004280200200128020022086b20054f0d002002200820051077200128020021080b200228020020086a2006200510d40b1a2001200820056a360200200741086a22072009470d000b0b20002003470d000b0b0b860401077f02402001450d0020002001411c6c6a2103200241086a2101200241046a2104034002400240200022052802004101470d0020052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070c010b20052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070b2005411c6a21002001200736020002400240200528020c4101470d0020052802102107200528021822052002107920054103742205450d01200720056a2109034020072802002106200741046a28020022052002107902402004280200200128020022086b20054f0d002002200820051077200128020021080b200228020020086a2006200510d40b1a2001200820056a360200200741086a22072009470d000c020b0b20052802102107200528021422052002107920054103742205450d00200720056a2109034020072802002106200741046a28020022052002107902402004280200200128020022086b20054f0d002002200820051077200128020021080b200228020020086a2006200510d40b1a2001200820056a360200200741086a22072009470d000b0b20002003470d000b0b0bf70d01077f230041c0006b2203240002402001450d002000200141f0006c6a2104200241086a2105200241046a210603400240024020002802004101470d0020002802042107200028020822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010c010b20002802042107200028020822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010b200520013602002006280200210802400240200028020c4102470d00024020082001470d002002200141011077200528020021010b200228020020016a41003a00002005200141016a3602000c010b024020082001470d002002200141011077200528020021010b200228020020016a41013a00002005200141016a3602000240200028020c4101470d000240024020002802104101470d0020002802142107200028021822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010c010b20002802142107200028021822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010b200520013602000240200028021c4101470d00200028022021012000280228220820021079200120082002107d0c020b20002802202101200041246a280200220820021079200120082002107d0c010b200341206a20002802101102000240024020032802204101470d0020032802242107200328022822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010c010b20032802242107200328022822012002107902402006280200200528020022086b20014f0d002002200820011077200528020021080b200228020020086a2007200110d40b1a200820016a21010b200520013602000240200328022c4101460d00200328023021012003280234220820021079200120082002107d0c010b200328023021072003280238220120021079200720012002107d024020032802382201450d00200141e0006c21094100210803400240200720086a2201410c6a2d00004103470d000240200141106a280200450d00200141186a28020041ffffffff0171450d00200141146a28020010390b200141206a280200450d00200141286a280200450d00200141246a28020010390b02402001413c6a280200450d00200141c4006a280200450d00200141c0006a28020010390b0240200141cc006a280200450d00200141d4006a28020041ffffffff0171450d00200141d0006a28020010390b2009200841e0006a2208470d000b0b20032802342201450d00200141e0006c450d00200710390b200628020021082005280200210102400240200028022c4102470d00024020082001470d002002200141011077200528020021010b200228020020016a41003a00002005200141016a3602000c010b024020082001470d002002200141011077200528020021010b200228020020016a41013a00002005200141016a3602000240200028022c4101470d00200028023021012000280238220820021079200120082002107a0c010b200341186a200028023011020020032802182101200328021c220820021079200120082002107a0b200628020021082005280200210102400240200028023c4102470d00024020082001470d002002200141011077200528020021010b200228020020016a41003a00002005200141016a3602000c010b024020082001470d002002200141011077200528020021010b200228020020016a41013a00002005200141016a3602000240200028023c4101470d00200028024021012000280248220820021079200120082002107e0c010b200341106a2000280240110200200328021021012003280214220820021079200120082002107e0b02400240200028024c4101470d00200028025021012000280258220820021079200120082002107f0c010b200341086a200028025011020020032802082101200328020c220820021079200120082002107f0b02400240200028025c4101470d00200028026021012000280268220820021079200120082002107b0c010b20032000280260110200200328020021012003280204220820021079200120082002107b0b200041f0006a210120002d006c21080240200628020020052802002200470d002002200041011077200528020021000b200228020020006a20083a00002005200041016a3602002001210020012004470d000b0b200341c0006a24000b881601087f230041106b2203240002402001450d002000200141e0006c6a2104200241086a2101200241046a2105034002400240200022062802004101470d0020062802042107200628020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802042107200628020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b20012008360200200528020021090240024020062d005c4101460d00024020092008470d002002200841011077200128020021080b200228020020086a41003a00000c010b024020092008470d002002200841011077200128020021080b200228020020086a41013a00000b2001200841016a22083602000240024002400240024020062d000c0e0400010203000b024020052802002008470d002002200841011077200128020021080b200228020020086a41003a00002001200841016a360200024020062802104101470d0020062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000c040b20062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000c030b024020052802002008470d002002200841011077200128020021080b200228020020086a41013a00002001200841016a36020020062d000d200210760240024020062802104101470d0020062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b2001200836020002400240200628021c4101470d0020062802202107200628022422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802202107200628022422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b2001200836020020062d000e2109024020052802002008470d002002200841011077200128020021080b200228020020086a20093a00002001200841016a3602000c020b024020052802002008470d002002200841011077200128020021080b200228020020086a41023a00002001200841016a36020020062d000d200210760240024020062802104101470d0020062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802142107200628021822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b2001200836020002400240200628021c4101470d0020062802202107200628022422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802202107200628022422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b200120083602000240024020062802284101470d00200628022c2107200628023022082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b200628022c2107200628023022082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b2001200836020020062d000e200210760c010b024020052802002008470d002002200841011077200128020021080b200228020020086a41033a00002001200841016a3602000240024020062802104101470d0020062802142108200628021c22092002107920094103742209450d01200820096a210003402008280200210a200841046a28020022092002107902402005280200200128020022076b20094f0d002002200720091077200128020021070b200228020020076a200a200910d40b1a2001200720096a360200200841086a22082000470d000c020b0b20062802142108200628021822092002107920094103742209450d00200820096a210003402008280200210a200841046a28020022092002107902402005280200200128020022076b20094f0d002002200720091077200128020021070b200228020020076a200a200910d40b1a2001200720096a360200200841086a22082000470d000b0b200628022421080240024020062802204101470d00200628022c2209200210792009450d01034020082d000020021076200841016a21082009417f6a22090d000c020b0b200641286a2802002209200210792009450d00034020082d000020021076200841016a21082009417f6a22090d000b0b024020062802304101470d0020062802342107200628023822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000c010b20062802342107200628023822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000b02400240200628023c4101470d0020062802402107200628024822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000c010b20032006280240200628024428020c11030020032802002107200328020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602002003280204450d00200710390b200641e0006a210002400240200628024c4101470d0020062802502108200628025822062002107920064103742206450d01200820066a210a034020082802002107200841046a28020022062002107902402005280200200128020022096b20064f0d002002200920061077200128020021090b200228020020096a2007200610d40b1a2001200920066a360200200841086a2208200a470d000c020b0b20062802502108200628025422062002107920064103742206450d00200820066a210a034020082802002107200841046a28020022062002107902402005280200200128020022096b20064f0d002002200920061077200128020021090b200228020020096a2007200610d40b1a2001200920066a360200200841086a2208200a470d000b0b20002004470d000b0b200341106a24000ba20601087f02402001450d0020002001412c6c6a2103200241086a2101200241046a2104034002400240200022052802004101470d0020052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070c010b20052802042106200528020822072002107902402004280200200128020022086b20074f0d002002200820071077200128020021080b200228020020086a2006200710d40b1a200820076a21070b2001200736020002400240200528020c4101470d0020052802102107200528021822082002107920084103742208450d01200720086a210903402007280200210a200741046a28020022082002107902402004280200200128020022066b20084f0d002002200620081077200128020021060b200228020020066a200a200810d40b1a2001200620086a360200200741086a22072009470d000c020b0b20052802102107200528021422082002107920084103742208450d00200720086a210903402007280200210a200741046a28020022082002107902402004280200200128020022066b20084f0d002002200620081077200128020021060b200228020020066a200a200810d40b1a2001200620086a360200200741086a22072009470d000b0b2005412c6a210002400240200528021c4101470d0020052802202107200528022822082002107920084103742208450d01200720086a210903402007280200210a200741046a28020022082002107902402004280200200128020022066b20084f0d002002200620081077200128020021060b200228020020066a200a200810d40b1a2001200620086a360200200741086a22072009470d000c020b0b20052802202107200528022422082002107920084103742208450d00200720086a210903402007280200210a200741046a28020022082002107902402004280200200128020022066b20084f0d002002200620081077200128020021060b200228020020066a200a200810d40b1a2001200620086a360200200741086a22072009470d000b0b20002003470d000b0b0b990701087f230041106b2203240002402001450d002000200141386c6a2104200241086a2101200241046a2105034002400240200022062802004101470d0020062802042107200628020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802042107200628020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b2001200836020002400240200628020c4101470d0020062802102107200628021422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080c010b20062802102107200628021422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a200920086a21080b200120083602000240024020062802184101470d00200628021c2107200628022422082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602000c010b2003200628021c200628022028020c11030020032802002107200328020822082002107902402005280200200128020022096b20084f0d002002200920081077200128020021090b200228020020096a2007200810d40b1a2001200920086a3602002003280204450d00200710390b200641386a21000240024020062802284101470d00200628022c2108200628023422062002107920064103742206450d01200820066a210a034020082802002107200841046a28020022062002107902402005280200200128020022096b20064f0d002002200920061077200128020021090b200228020020096a2007200610d40b1a2001200920066a360200200841086a2208200a470d000c020b0b200628022c2108200628023022062002107920064103742206450d00200820066a210a034020082802002107200841046a28020022062002107902402005280200200128020022096b20064f0d002002200920061077200128020021090b200228020020096a2007200610d40b1a2001200920066a360200200841086a2208200a470d000b0b20002004470d000b0b200341106a24000b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000bb00101037f230041206b22022400200041046a280200220341017422042001200420014b1b22014108200141084b1b21010240024020030d00200241003602100c010b200241106a41086a410136020020022003360214200220002802003602100b200220014101200241106a108201200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001360200200241206a24000f0b1034000bc80101017f02400240024002402002450d0020014100480d01024002400240200328020022040d0020010d01410121020c020b0240200328020422030d0020010d01410121020c020b200110382202450d0420022004200310d40b1a200410390c010b200110382202450d030b20002002360204410021020c030b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2000200136020441012101410121020b20002002360200200041086a20013602000bd00301087f2001410c6a28020021022001280208210320012802042104024002400240200128020022050d0020030d0120004201370200200041086a22014100360200200141003602000f0b200420056b2106024020030d00200621010c020b2006200220036b6a220120064f0d0141f8d2cd00411141c496c7001035000b200220036b21010b024002402001417f4c0d000240024020010d0041012107410021010c010b200110382207450d020b20002007360200200041086a22084100360200200041046a200136020002400240024020050d0020030d01200841003602000f0b200420056b2106024020030d00200621090c020b2006200220036b6a220920064f0d0141f8d2cd00411141e095c7001035000b200220036b21090b410021060240200120094f0d0020002009108101200041086a2802002106200028020021070b200720066a210102402005450d0020042005460d002004200620056b6a21060340200120052d00003a0000200141016a21012004200541016a2205470d000b0b02402003450d0020022003460d00200321050340200120052d00003a0000200141016a21012002200541016a2205470d000b2002200620036b6a21060b200820063602000f0b1034000b1032000b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000bb00904017f017e017f087e230041b0046b22022400200141bc016a350200210320012802b8012104200241c0016a200141b80110d40b1a20022903c801210502400240200241e8016a2903004201520d00200241f0016a29030022062005560d010b200521060b02400240200241a0026a2903004201520d00200241a8026a29030022052006560d010b200621050b02400240200241d8026a2903004201520d00200241e0026a29030022062005560d010b200521060b200220063703c80102402004450d002006428094ebdc038020037e42ffffffffffbfb2cd3b2006428094ebdc038220037e2206428094ebdc0380200642ffffffffffbfb2cd3b561b2006428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c21060240200241d8016a2903004201510d0002400240200241e8016a29030050450d00420021050c010b42004200200241f0016a290300220520067d220320032005561b220520022903d0017d220320032005561b2103420121050b200241e0016a2003370300200220053703d8010b024020024190026a2903004201510d0002400240200241a0026a29030050450d00420021050c010b42004200200241a8026a290300220520067d220320032005561b220520024188026a2903007d220320032005561b2103420121050b20024198026a200337030020022005370390020b200241c8026a2903004201510d0002400240200241d8026a29030050450d00420021060c010b42004200200241e0026a290300220520067d220620062005561b2206200241c0026a2903007d220520052006561b2105420121060b200241d0026a2005370300200220063703c8020b200241f8026a200241c0016a41b80110d40b1a02400240200229038003220620022903f8022205200241f8036a29030022077c580d002006420020024198046a290300220320024190046a2903005022011b540d00427e200241a8046a290300427f7c200241a0046a290300501b2007540d0020024188046a29030022085020024180046a2903002209420052710d00420020082009501b4200427f200320011b220320077d220820082003561b560d0020062005200241c0036a29030022097c580d0020064200200241e0036a2903002208200241f8026a41e0006a2903005022011b540d00427e200241f0036a290300427f7c200241e8036a290300501b2009540d00200241d0036a290300220a50200241c8036a290300220b420052710d004200200a200b501b4200427f200820011b220820097d220a200a2008561b560d0020062005200229038803220a7c580d0020064200200241a8036a290300220b200241a0036a2903005022011b540d00427e200241b8036a290300427f7c200241b0036a290300501b200a540d0020024198036a29030022065020024190036a290300220c420052710d0042002006200c501b4200427f200b20011b2206200a7d220b200b2006561b560d002006502006200a5620062005567172450d00200850200820095620082005567172450d002003502003200756200320055671720d010b200241013a000241e0a1c00041e000200241026a41f4a0c00041c0a2c000103d000b2000200241086a200241c0016a41b80110d40b41b80110d40b1a200241b0046a24000ba90803197e017f147e20002903c0012101200029039801210220002903702103200029034821042000290320210520002903b8012106200029039001210720002903682108200029034021092000290318210a20002903b001210b200029038801210c2000290360210d2000290338210e2000290310210f20002903a8012110200029038001211120002903582112200029033021132000290308211420002903a00121152000290378211620002903502117200029032821182000290300211941c07e211a0340200b200c200d200e200f85858585221b4201892015201620172018201985858585221c85221d201385211e20012006200720082009200a85858585221f201c42018985221c85212020012002200320042005858585852221420189201b85221b2009854237892222201f4201892010201120122013201485858585220985221f200f85423e892223427f8583201d201085420289222485210120222021200942018985220f20168542298922212003201c854227892225427f8583852110201b2006854238892226201f200c85420f892227427f8583201d201285420a89222885210c2028200f2018854224892229427f85832005201c85421b89222a852116200f2015854212892215201f200e85420689222b201d201485420189222c427f85838521032002201c85420889222d201b200885421989222e427f8583202b8521122004201c85421489221c201b200a85421c89220a427f8583201f200b85423d89220e852104200a200e427f8583201d201185422d89221d852109200f2017854203892214200e201d427f858385210e201d2014427f8583201c852113200a2014201c427f8583852118201b200785421589221d200f201985221c2020420e89221b427f858385210a201b201d427f8583201f200d85422b89221f85210f201d201f427f8583201e422c89221d852114201a41a8a4c0006a290300201c201f201d427f85838585211920262029202a427f858385221f2102201d201c427f8583201b85221d2105202120232024427f858385221c2106202a2026427f8583202785221b2107202c2015427f8583202d852226210820242021427f85832025852224210b202e2015202d427f8583852221210d202920272028427f8583852227211120252022427f858320238522222115202e202b427f8583202c8522232117201a41086a221a0d000b200020223703a00120002016370378200020233703502000201837032820002019370300200020103703a8012000202737038001200020123703582000201337033020002014370308200020243703b0012000200c37038801200020213703602000200e3703382000200f3703102000201c3703b8012000201b3703900120002026370368200020093703402000200a370318200020013703c0012000201f3703980120002003370370200020043703482000201d3703200b040041000b02000b02000b6601017f230041206b220424002004200136020420042000360200200441086a41106a200241106a290200370300200441086a41086a200241086a29020037030020042002290200370308200441d8a4c000200441046a41d8a4c000200441086a20031056000bd30501027f230041306b22032400200320013a000702400240024002402002450d0020002d00ca01200141ff0171460d01200341086a410c6a41093602002003412c6a4102360200200341186a410c6a4102360200200341206a41f0a5c0003602002003410236021c200341e0a5c0003602182003410936020c2003200041ca016a2200360208200341286a200341086a3602002003200341076a3602102000200341076a200341186a41b0a6c000108a01000b2003200141087122023a00080240024020020d00200020013a00ca0120002d00c9012104200020002d00c801220241016a3a00c901200320013a0019200320043a00180240200241c7014b0d00200020026a220120012d000020032d0018733a0000200020002d00c80141016a22023a00c8010240200241ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002102200041003b01c8010c030b200141c801490d020b200241ff017141c80141fca4c000103c000b2003412c6a4100360200200341286a41b8c0cd003602002003420137021c200341c0a6c000360218200341086a41919ece00200341186a41c8a6c000108a01000b2000200241ff01716a220120012d000020032d0019733a0000200020002d00c80141016a22013a00c8010240200141ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002101200041003b01c8010b20032d0007412471450d00200141ff01712201450d00200141c7014b0d01200020016a220120012d000020002d00c901733a000020002d00c80141016a41ff0171220141c8014f0d02200020016a220120012d00004104733a0000200020002d00a701418001733a00a7012000108601200041003b01c8010b200341306a24000f0b200141c80141d8a6c000103c000b200141c80141e8a6c000103c000b921901037f230041f0016b22032400200341106a41126a410041b60110d60b1a2003411e6a41002800f6a440360100200341002f00eca4403b0114200341002800e8a440360210200341002900eea440370116200341106a1086012000200341106a41c80110d40b220041003a00ca01200041003b01c801200041124100108b01024020002d00c801220441c7014b0d00200020046a220420042d000041cd00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c8014f0d010b2000200441ff01716a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f200733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ec00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041e900733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ee00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d00004120733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f600733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d00004131733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d0000412e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d00004130733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b2003200236020c200041124100108b01024020002d00c801220441c8014f0d00200020046a220420042d000041e400733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c8014f0d010b2000200441ff01716a220420042d000041ef00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041ed00733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d0000412d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041f300733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000041e500733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b200041ca016a21052000200441ff01716a220420042d000041f000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010b200341123a00df01024020052d00004112460d00200341e0016a410c6a4109360200200341246a4102360200200341106a410c6a4102360200200341186a41f0a5c00036020020034102360214200341e0a5c000360210200341093602e401200320053602e001200341206a200341e0016a3602002003200341df016a3602e8012005200341df016a200341106a41b0a6c000108a01000b0240200441ff0171220541c7014b0d00200020056a220420042d000020032d000c733a0000200020002d00c80141016a22043a00c80102400240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200441ff017141c8014f0d010b2000200441ff01716a220420042d000020032d000d733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000e733a0000200020002d00c80141016a22043a00c80102400240200441ff0171220541a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010c010b200541c7014b0d010b2000200441ff01716a220420042d000020032d000f733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b200041024100108b01024002402002450d0020002d00c80121040340200441ff0171220441c7014b0d02200020046a220420042d000020012d0000733a0000200020002d00c80141016a22043a00c8010240200441ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002104200041003b01c8010b200141016a21012002417f6a22020d000b0b200341f0016a24000f0b200441c80141fca4c000103c000b200441ff017141c80141fca4c000103c000b200441ff017141c80141fca4c000103c000b200441ff017141c80141fca4c000103c000b960801027f230041306b2205240020052004360200200041124100108b01024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c030b200141c801490d020c030b200641c80141fca4c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41f0a5c0003602002005410236020c200541e0a5c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41b0a6c000108a01000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b200041024100108b01024002402004450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020032d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010b200341016a21032004417f6a22040d000b0b200541306a24000f0b200641c80141fca4c000103c000b200641ff017141c80141fca4c000103c000be00e01027f230041c0006b220424002004200337030820044108360210200041124100108b01024002400240024002402002450d0020002d00c80121050340200541ff0171220541c7014b0d02200020056a220520052d000020012d0000733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010b200141016a21012002417f6a22020d000b0b200441123a001720002d00ca014112470d0120002d00c801220541c7014b0d03200020056a220520052d000020042d0010733a0000200020002d00c80141016a22053a00c8010240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c030b200141c801490d020c030b200541c80141fca4c000103c000b200441306a410c6a41093602002004412c6a4102360200200441186a410c6a4102360200200441206a41f0a5c0003602002004410236021c200441e0a5c000360218200441093602342004200041ca016a2200360230200441286a200441306a3602002004200441176a3602382000200441176a200441186a41b0a6c000108a01000b2000200541ff01716a220520052d000020042d0011733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0012733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d0013733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b200041024100108b01024020002d00c801220541c8014f0d00200020056a220520052d000020042d0008733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c8014f0d010b2000200541ff01716a220520052d000020042d0009733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000a733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000b733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000c733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000d733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000e733a0000200020002d00c80141016a22053a00c80102400240200541ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002105200041003b01c8010c010b200141c7014b0d010b2000200541ff01716a220520052d000020042d000f733a0000200020002d00c80141016a22053a00c8010240200541ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b200441c0006a24000f0b200541ff017141c80141fca4c000103c000b200541ff017141c80141fca4c000103c000b9b0801027f230041306b2205240020052004360200200041124100108b01024002400240024002402002450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a220620062d000020012d0000733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010b200141016a21012002417f6a22020d000b0b200541123a000720002d00ca014112470d0120002d00c801220641c7014b0d03200020066a220620062d000020052d0000733a0000200020002d00c80141016a22063a00c8010240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c030b200141c801490d020c030b200641c80141fca4c000103c000b200541206a410c6a41093602002005411c6a4102360200200541086a410c6a4102360200200541106a41f0a5c0003602002005410236020c200541e0a5c000360208200541093602242005200041ca016a2200360220200541186a200541206a3602002005200541076a3602282000200541076a200541086a41b0a6c000108a01000b2000200641ff01716a220620062d000020052d0001733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0002733a0000200020002d00c80141016a22063a00c80102400240200641ff0171220141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010c010b200141c7014b0d010b2000200641ff01716a220620062d000020052d0003733a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a7012000108601200041003b01c8010b200041074100108b01024002402004450d0020002d00c80121060340200641ff0171220641c7014b0d02200020066a22062d00002101200641003a0000200320013a0000200020002d00c80141016a22063a00c8010240200641ff017141a601470d00200020002d00a60120002d00c901733a00a601200020002d00a701418401733a00a701200010860141002106200041003b01c8010b200341016a21032004417f6a22040d000b0b200541306a24000f0b200641c80141e8a7c000103c000b200641ff017141c80141fca4c000103c000bdd0301027f230041106b220224002000280200220041046a21030240024020002802004101470d002002200128021841d0a9c000410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200336020c20022002410c6a41b49fc00010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b2002200128021841f8a9c000410d2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200336020c20022002410c6a41c49fc00010651a20022d0008210120022802042203450d00200141ff017121004101210120000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000b0c00200028020020011093010bf80301027f230041106b220224000240024002400240024002400240024002402000280200417b6a2203410220034108491b0e080102030405060700010b200128021841f8a7c000410c2001411c6a28020028020c11000021010c070b20012802184184a8c00041102001411c6a28020028020c11000021010c060b20012802184194a8c00041132001411c6a28020028020c11000021010c050b2002200128021841a7a8c000410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41b4a8c00010651a20022d0008210120022802042203450d04200141ff017121004101210120000d04024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d050b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c040b200128021841c4a8c000410b2001411c6a28020028020c11000021010c030b200128021841cfa8c000410c2001411c6a28020028020c11000021010c020b200128021841dba8c000410d2001411c6a28020028020c11000021010c010b200128021841e8a8c000410c2001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bb00701027f230041106b2202240002400240024002400240024020002802000e050102030400010b200128021841f4a8c00041142001411c6a28020028020c11000021010c040b2002200128021841d6aac000410b2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a4188a9c00010651a20022d0008210120022802042203450d03200141ff017121004101210120000d03024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d040b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c030b200220012802184198a9c00041052001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41a0a9c00010651a20022d0008210120022802042203450d02200141ff017121004101210120000d02024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d030b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c020b2002200128021841b0a9c000410f2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41c0a9c00010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b2002200128021841d0a9c000410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41dca9c00010651a20022d0008210120022802042203450d00200141ff017121004101210120000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470ba20701027f230041106b220224000240024002400240024002400240024002400240024020002802000e0a01020304050607080900010b200128021841eca9c000410c2001411c6a28020028020c11000021010c090b2002200128021841f8a9c000410d2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a4188aac00010651a20022d0008210120022802042203450d08200141ff017121004101210120000d08024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d090b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c080b20012802184198aac00041132001411c6a28020028020c11000021010c070b200128021841abaac00041142001411c6a28020028020c11000021010c060b200128021841bfaac00041172001411c6a28020028020c11000021010c050b2002200128021841d6aac000410b2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41e4aac00010651a20022d0008210120022802042203450d04200141ff017121004101210120000d04024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d050b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c040b2002200128021841f4aac00041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41f8aac00010651a20022d0008210120022802042203450d03200141ff017121004101210120000d03024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d040b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c030b20012802184188abc00041102001411c6a28020028020c11000021010c020b20012802184198abc00041132001411c6a28020028020c11000021010c010b200128021841ababc00041152001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bd80201057f230041106b22022400024002400240024002400240024002400240024020012d00000e06010203040500010b20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110382201450d06200042818080801037020420002001360200200141003a00000c050b2001410c6a22032802002204412020044120491b220541016a220410382206450d0520062004200410d60b2106200328020022032005490d06200641016a200141046a280200200510d40b1a2000200436020820002004360204200020063602000c040b20024181c4003b01082002200141216a3602042002200141016a3602000c020b20024181c6003b01082002200141216a3602042002200141016a3602000c010b20024181c8003b01082002200141216a3602042002200141016a3602000b200020021097010b200241106a24000f0b1032000b200520034198aec000104b000bc50301087f200141096a2d00002102200128020421032001280200210402400240024002400240024020012d000822054102470d0020040d0120004201370200200041086a22014100360200200141003602000f0b20054101462106024020040d00200621010c030b2006200320046b6a220120064f0d0141f8d2cd00411141c496c7001035000b200320046b21010b2001417f4c0d010b0240024020010d0041012107410021010c010b200110382207450d020b20002007360200200041086a22084100360200200041046a200136020002400240024020054102470d0020040d01200841003602000f0b20054101462106024020040d00200621090c020b2006200320046b6a220920064f0d0141f8d2cd00411141e095c7001035000b200320046b21090b410021060240200120094f0d00200041002009109801200041086a2802002106200028020021070b200720066a21010240024020050e03010001000b200120023a0000200641016a2106200141016a21010b02402004450d0020032004460d00200421000340200120002d00003a0000200141016a21012003200041016a2200470d000b2003200620046b6a21060b200820063602000f0b1034000b1032000bbc0101027f230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024108200241084b1b21020240024020010d00200341003602100c010b200341106a41086a410136020020032001360214200320002802003602100b200320024101200341106a108201200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001360200200341206a24000f0b1034000bd50101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffffff03712001464102742103200141027421010240024020040d00200241003602100c010b200241186a410436020020022004410274360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410276360200200241206a24000f0b1034000bc70101027f0240024002400240024002402002450d0020014100480d01024002400240200328020022040d002001450d010c050b200328020422050d0120010d040b200221030c050b200110382203450d0320032004200510d40b1a200410390c040b2000200136020420004101360200200041086a41003602000f0b20004101360200200041086a41003602000f0b2001103822030d010b2000200136020441012103200221010c010b20002003360204410021030b20002003360200200041086a20013602000bc50101087f200141146a280200220341027421042001410c6a280200210520012802002106417f210720012802042208210902400340024020040d00410021040c020b200741016a21072004417c6a2104200920024b210a200920052802006b2109200541046a2105200a0d000b200620036b2205210402402003200a20076a2209490d00200141146a20093602002006200a6b20076b21040b20002005360204200041086a2004360200410121040b20002004360200200120082002200820024b1b3602040b1c00200128021841d9b4c000410b2001411c6a28020028020c1100000b1c00200128021841e4b4c00041052001411c6a28020028020c1100000bc30601067f230041106b22022400200241003602082002420137030020012802002103200128020822042002107902402004450d0020032004410c6c6a2105034020032802002106200341086a28020022042002107902402002280204200228020822076b20044f0d002002200720041077200228020821070b200228020020076a2006200410d40b1a2002200720046a3602082003410c6a22032005470d000b0b200128020c2103200141146a28020022042002107902402004450d00200320044104746a2105200228020821040340200328020021070240200228020420046b41034b0d002002200441041077200228020821040b200228020020046a20073600002002200441046a360208200341046a28020021062003410c6a28020022042002107902402002280204200228020822076b20044f0d002002200720041077200228020821070b200228020020076a2006200410d40b1a2002200720046a2204360208200341106a22032005470d000b0b200228020421042002280208210302400240200128021822070d00024020042003470d002002200341011077200228020821030b200228020020036a41003a0000200341016a21030c010b024020042003470d002002200341011077200228020821030b200228020020036a41013a00002002200341016a360208200141206a28020022032002107902402002280204200228020822046b20034f0d002002200420031077200228020821040b200228020020046a2007200310d40b1a200420036a21030b20022003360208200128022421052001412c6a280200220320021079024020022802042207200228020822046b20034f0d00200220042003107720022802042107200228020821040b2002280200220620046a2005200310d40b1a2002200420036a2203360208200128023021040240200720036b41034b0d00200220034104107720022802002106200228020821030b200620036a20043600002002200341046a2203360208200128023421040240200228020420036b41034b0d002002200341041077200228020821030b200228020020036a20043600002002200341046a2203360208200020022802002003109f0102402002280204450d00200228020010390b200241106a24000b7201027f2002ad4220862001ad8410102101200041186a22024200370000200041106a22034200370000200041086a2204420037000020004200370000200020012900003700002004200141086a2900003700002003200141106a2900003700002002200141186a290000370000200110390bbe0101017f41012101024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402000413f710e2416150001020304051615060708090a16150b0c0d0e16150f101116151213161514161516160b41030f0b41040f0b41050f0b41060f0b41070f0b41080f0b41030f0b41040f0b41050f0b41060f0b41070f0b41030f0b41040f0b41050f0b41060f0b41030f0b41040f0b41050f0b41030f0b41040f0b41030f0b410221010b20010b940501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b37038803200120012903c8013703084100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341d49fc0006a2104200341016a210320042d000022024103470d010b0b20014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a4200370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a200129039003370300200141d0026a4200370300200141c8026a200129038803370300200142003703d00120014280e497d0123703c80120012001290398033703d801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110d40b1a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110d40b1a2001428180808080d0a5cc00370380032000200141c8016a108501200141a0036a24000b0e002000280200350200200110460b850201037f230041306b220224002000280200210302400240024020012d00004104710d002001411c6a2802002100200128021821040c010b2001411c6a2802002100200128021821042002412c6a4100360200200241b8c0cd003602282002420137021c200241f4c5c0003602184101210120042000200241186a103b0d010b41002101024003402002200320016a36020c2002410a36021420022002410c6a3602102002410136022c200241013602242002419cc6c0003602202002410136021c200241a4fec7003602182002200241106a36022820042000200241186a103b0d01200141016a22014120470d000b410021010c010b410121010b200241306a240020010b970101037f23004180016b2202240020002802002d00002103410021000340200220006a41ff006a2003410f712204413072200441d7006a2004410a491b3a00002000417f6a21002003410476410f7122030d000b024020004180016a2203418101490d00200341800141e087c0001054000b200141f1c5c0004102200220006a4180016a410020006b1049210020024180016a240020000b950401047f230041306b220224002001411c6a2802002103200128021821012002412c6a22044100360200200241b8c0cd003602282002420137021c200241f4c5c00036021841012105024020012003200241186a103b0d002002200036020c2002410a36021420022002410c6a3602104101210520044101360200200241246a41013602002002419cc6c0003602202002410136021c200241a4fec7003602182002200241106a36022820012003200241186a103b0d002002200041016a36020c2002410a36021420022002410c6a3602102002410136022c200241013602242002419cc6c0003602202002410136021c200241a4fec7003602182002200241106a36022820012003200241186a103b0d002002412c6a22044100360200200241b8c0cd003602282002420137021c200241bcc6c0003602184101210520012003200241186a103b0d0020022000411e6a36020c2002410a36021420022002410c6a3602104101210520044101360200200241246a41013602002002419cc6c0003602202002410136021c200241a4fec7003602182002200241106a36022820012003200241186a103b0d0020022000411f6a36020c2002410a36021420022002410c6a3602102002410136022c200241013602242002419cc6c0003602202002410136021c200241a4fec7003602182002200241106a36022820012003200241186a103b0d00410021050b200241306a240020050bf96505047f067e017f1e7e057f230041d01f6b22022400200241801c6a20011072200241a81c6a200241801c6a106d41002103410121040340200120036a2d0000200241a81c6a20036a2d0000732205410020056b72417f7341800171410776106f2004712104200341016a22034120470d000b2004106f2103200241881f6a200241801c6a106d20022d00881f410171106f210402400240200341ff0171450d00200441ff01714101460d00200241c81c6a200241801c6a41011070200242f0ffffffffffff3f20022903e81c7d220642ffffffffffffff038342f0ffffffffffff3f20022903e01c7d22074233887c3703901d2002200742ffffffffffffff038342f0ffffffffffff3f20022903d81c22077d22084233887c3703881d2002200842ffffffffffffff038342f0ffffffffffff3f20022903d01c22087d22094233887c3703801d2002200942ffffffffffffff038342d1fdffffffffff3f20022903c81c22097d220a4233887c3703f81c2002200642338842137e200a42ffffffffffffff03837c3703f01c4200210b200241981d6a41186a220c4200370300200241981d6a41206a22034200370300200241981d6a41106a220520073703002002200942017c3703981d200220083703a01d200c20022903e01c3703002003200329030020022903e81c7c370300200241c01d6a200241981d6a41011070200241b81e6a200241f01c6a41011070200241f8156a20022903b81e2206420042ca8e9ae5dec6ac02420010d30b200241f8186a20022903c01e220742137e4200428092f58893f9b701420010d30b200241a8186a20022903c81e220842137e220d420042c486ffe299c731420010d30b200241d8176a20022903d01e220a42137e220e420042d6fff8ffd98b8601420010d30b20024188176a20022903d81e220f42137e2209420042c2a2aaa7fcfa9503420010d30b20024188166a2006420042c2a2aaa7fcfa9503420010d30b200241e8186a2007420042ca8e9ae5dec6ac02420010d30b20024198186a200d4200428092f58893f9b701420010d30b200241c8176a200e420042c486ffe299c731420010d30b200241f8166a2009420042d6fff8ffd98b8601420010d30b20024198166a2006420042d6fff8ffd98b8601420010d30b200241d8186a2007420042c2a2aaa7fcfa9503420010d30b20024188186a2008420042ca8e9ae5dec6ac02420010d30b200241b8176a200e4200428092f58893f9b701420010d30b200241e8166a2009420042c486ffe299c731420010d30b200241a8166a2006420042c486ffe299c731420010d30b200241c8186a2007420042d6fff8ffd98b8601420010d30b200241f8176a2008420042c2a2aaa7fcfa9503420010d30b200241a8176a200a420042ca8e9ae5dec6ac02420010d30b200241d8166a20094200428092f58893f9b701420010d30b200241b8166a20064200428092f58893f9b701420010d30b200241b8186a2007420042c486ffe299c731420010d30b200241e8176a2008420042d6fff8ffd98b8601420010d30b20024198176a200a420042c2a2aaa7fcfa9503420010d30b200241c8166a200f420042ca8e9ae5dec6ac02420010d30b200241f8136a20022903c01d2208420020022903b816221020022903c8167c220620022903b8187c220720022903e8177c22092002290398177c220a20022903d816221120022903a8177c220e20022903a8167c220d20022903c8187c220f20022903f8177c221220022903b81722132002290388187c221420022903e8167c22152002290398167c221620022903d8187c2217200229039818221820022903e8187c221920022903c8177c221a20022903f8167c221b2002290388167c221c20022903f818221d20022903f8157c221e20022903a8187c221f20022903d8177c22202002290388177c2221423388200241f8186a41086a290300200241f8156a41086a2903007c201e201d54ad7c200241a8186a41086a2903007c201f201e54ad7c200241d8176a41086a2903007c2020201f54ad7c20024188176a41086a2903007c2021202054ad7c420d86847c221e42338820024198186a41086a290300200241e8186a41086a2903007c2019201854ad7c200241c8176a41086a2903007c201a201954ad7c200241f8166a41086a2903007c201b201a54ad7c20024188166a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c221a423388200241b8176a41086a29030020024188186a41086a2903007c2014201354ad7c200241e8166a41086a2903007c2015201454ad7c20024198166a41086a2903007c2016201554ad7c200241d8186a41086a2903007c2017201654ad7c201a201754ad7c420d86847c2214423388200241d8166a41086a290300200241a8176a41086a2903007c200e201154ad7c200241a8166a41086a2903007c200d200e54ad7c200241c8186a41086a2903007c200f200d54ad7c200241f8176a41086a2903007c2012200f54ad7c2014201254ad7c420d86847c220e42ffffffffffffff038320022903e01d220f7d42f0ffffffffffff3f7c220d42338842137e200e423388200241b8166a41086a290300200241c8166a41086a2903007c2006201054ad7c200241b8186a41086a2903007c2007200654ad7c200241e8176a41086a2903007c2009200754ad7c20024198176a41086a2903007c200a200954ad7c200e200a54ad7c420d868442137e202142feffffffffffff03837c220742ffffffffffffff038320087d42d0fdffffffffff3f7c221542ffffffffffffff03837c2206420010d30b200241e8156a200d42ffffffffffffff0383201442ffffffffffffff038320022903d81d220e7d42f0ffffffffffff3f7c220a4233887c2219420020022903c81d220942137e420010d30b20024198156a200a42ffffffffffffff0383201a42ffffffffffffff038320022903d01d220a7d42f0ffffffffffff3f7c220d4233887c22164200200a42137e2217420010d30b200241c8146a200d42ffffffffffffff03832007423388201e42ffffffffffffff03837c20097d42f0ffffffffffff3f7c22074233887c22144200200e42137e2212420010d30b200241a8136a200742ffffffffffffff038320154233887c22074200200f42137e220d420010d30b20024198136a200742002008420010d30b200241e8136a200642002009420010d30b200241d8156a201942002017420010d30b20024188156a201642002012420010d30b200241b8146a20144200200d420010d30b200241a8146a201442002008420010d30b20024188136a200742002009420010d30b200241d8136a20064200200a420010d30b200241c8156a201942002012420010d30b200241f8146a20164200200d420010d30b200241e8146a201642002008420010d30b20024198146a201442002009420010d30b200241f8126a20074200200a420010d30b200241c8136a20064200200e420010d30b200241b8156a20194200200d420010d30b200241a8156a201942002008420010d30b200241d8146a201642002009420010d30b20024188146a20144200200a420010d30b200241e8126a20074200200e420010d30b200241b8136a20064200200f420010d30b200220022903c815221e20022903d8137c220820022903f8147c220920022903a8147c220a2002290388137c220e20022903d815221f20022903e8137c220d2002290388157c220f20022903b8147c22122002290398137c221520022903e815222020022903f8137c22172002290398157c221a20022903c8147c221b20022903a8137c221c423388200241e8156a41086a290300200241f8136a41086a2903007c2017202054ad7c20024198156a41086a2903007c201a201754ad7c200241c8146a41086a2903007c201b201a54ad7c200241a8136a41086a2903007c201c201b54ad7c420d86847c2217423388200241d8156a41086a290300200241e8136a41086a2903007c200d201f54ad7c20024188156a41086a2903007c200f200d54ad7c200241b8146a41086a2903007c2012200f54ad7c20024198136a41086a2903007c2015201254ad7c2017201554ad7c420d86847c220d42ffffffffffffff03833703a01e200220022903b815221b20022903c8137c220f20022903e8147c22122002290398147c221520022903f8127c221a200d423388200241c8156a41086a290300200241d8136a41086a2903007c2008201e54ad7c200241f8146a41086a2903007c2009200854ad7c200241a8146a41086a2903007c200a200954ad7c20024188136a41086a2903007c200e200a54ad7c200d200e54ad7c420d86847c220842ffffffffffffff03833703a81e200220022903a815221e20022903b8137c220920022903d8147c220a2002290388147c220e20022903e8127c220d2008423388200241b8156a41086a290300200241c8136a41086a2903007c200f201b54ad7c200241e8146a41086a2903007c2012200f54ad7c20024198146a41086a2903007c2015201254ad7c200241f8126a41086a2903007c201a201554ad7c2008201a54ad7c420d86847c220842ffffffffffffff03833703b01e20022008423388200241a8156a41086a290300200241b8136a41086a2903007c2009201e54ad7c200241d8146a41086a2903007c200a200954ad7c20024188146a41086a2903007c200e200a54ad7c200241e8126a41086a2903007c200d200e54ad7c2008200d54ad7c420d868442137e201c42ffffffffffffff03837c220842ffffffffffffff03833703901e20022008423388201742ffffffffffffff03837c3703981e200241a81f6a41106a4200370300200241a81f6a41186a4200370300200241a81f6a41206a4200370300200242003703b01f200242013703a81f200241b81e6a200241a81f6a200241901e6a107120024198126a20022903981d220f420020022903c01e2208420010d30b200241d80f6a200241e01e6a2903002209420020022903a01d221242137e420010d30b200241b8106a200241b81e6a41206a2204290300220a42002005290300221542137e221c420010d30b20024198116a200241b81e6a41186a2205290300220e4200200c290300221a42137e221b420010d30b200241f8116a200241b81e6a41106a220c290300220d42002003290300221e42137e2217420010d30b200241d8126a200d4200200f420010d30b20024198106a200842002012420010d30b200241a8106a20094200201c420010d30b20024188116a200a4200201b420010d30b200241e8116a200e42002017420010d30b200241c8126a200e4200200f420010d30b20024188106a200d42002012420010d30b200241e8106a200842002015420010d30b200241f8106a20094200201b420010d30b200241d8116a200a42002017420010d30b200241b8126a200a4200200f420010d30b200241f80f6a200e42002012420010d30b200241d8106a200d42002015420010d30b200241b8116a20084200201a420010d30b200241c8116a200942002017420010d30b200241a8126a20094200200f420010d30b200241e80f6a200a42002012420010d30b200241c8106a200e42002015420010d30b200241a8116a200d4200201a420010d30b20024188126a20084200201e420010d30b200241980d6a2006420020022903a81222222002290388127c220f20022903e80f7c221220022903c8107c221520022903a8117c221720022903c811222320022903b8117c221a20022903b8127c221b20022903f80f7c221c20022903d8107c221e20022903f810222420022903e8107c221f20022903d8117c222020022903c8127c22212002290388107c221020022903a81022252002290398107c22112002290388117c221320022903e8117c221820022903d8127c221d20022903d80f22262002290398127c222720022903b8107c22282002290398117c222920022903f8117c222a423388200241d80f6a41086a29030020024198126a41086a2903007c2027202654ad7c200241b8106a41086a2903007c2028202754ad7c20024198116a41086a2903007c2029202854ad7c200241f8116a41086a2903007c202a202954ad7c420d86847c2227423388200241a8106a41086a29030020024198106a41086a2903007c2011202554ad7c20024188116a41086a2903007c2013201154ad7c200241e8116a41086a2903007c2018201354ad7c200241d8126a41086a2903007c201d201854ad7c2027201d54ad7c420d86847c2211423388200241f8106a41086a290300200241e8106a41086a2903007c201f202454ad7c200241d8116a41086a2903007c2020201f54ad7c200241c8126a41086a2903007c2021202054ad7c20024188106a41086a2903007c2010202154ad7c2011201054ad7c420d86847c221f423388200241c8116a41086a290300200241b8116a41086a2903007c201a202354ad7c200241b8126a41086a2903007c201b201a54ad7c200241f80f6a41086a2903007c201c201b54ad7c200241d8106a41086a2903007c201e201c54ad7c201f201e54ad7c420d86847c221a423388200241a8126a41086a29030020024188126a41086a2903007c200f202254ad7c200241e80f6a41086a2903007c2012200f54ad7c200241c8106a41086a2903007c2015201254ad7c200241a8116a41086a2903007c2017201554ad7c201a201754ad7c420d868442137e202a42ffffffffffffff03837c221242ffffffffffffff0383220f420010d30b200241b8096a201a42ffffffffffffff0383221a4200200742137e420010d30b200241c80e6a201f42ffffffffffffff038322174200201442137e221e420010d30b200241f80d6a201142ffffffffffffff038322154200201642137e221c420010d30b200241e80d6a2012423388202742ffffffffffffff03837c22124200201942137e221b420010d30b200241d80d6a201242002006420010d30b200241880d6a200f42002007420010d30b200241980f6a201a4200201e420010d30b200241d80e6a20174200201c420010d30b200241880e6a20154200201b420010d30b200241980e6a201542002006420010d30b200241c80d6a201242002007420010d30b200241f80c6a200f42002014420010d30b200241a80f6a201a4200201c420010d30b200241e80e6a20174200201b420010d30b200241f80e6a201742002006420010d30b200241a80e6a201542002007420010d30b200241b80d6a201242002014420010d30b200241e80c6a200f42002016420010d30b200241b80f6a201a4200201b420010d30b200241c80f6a201a42002006420010d30b200241880f6a201742002007420010d30b200241b80e6a201542002014420010d30b200241a80d6a201242002016420010d30b200241d80c6a200f42002019420010d30b200241e8066a20022903c80f222220022903d80c7c220620022903880f7c220720022903b80e7c221420022903a80d7c221620022903b80f222320022903e80c7c221920022903f80e7c221b20022903a80e7c221c20022903b80d7c221e20022903a80f222420022903f80c7c221f20022903e80e7c222020022903980e7c222120022903c80d7c221020022903980f222520022903880d7c221120022903d80e7c221320022903880e7c221820022903d80d7c221d20022903b809222620022903980d7c222720022903c80e7c222820022903f80d7c222920022903e80d7c222a423388200241b8096a41086a290300200241980d6a41086a2903007c2027202654ad7c200241c80e6a41086a2903007c2028202754ad7c200241f80d6a41086a2903007c2029202854ad7c200241e80d6a41086a2903007c202a202954ad7c420d86847c2227423388200241980f6a41086a290300200241880d6a41086a2903007c2011202554ad7c200241d80e6a41086a2903007c2013201154ad7c200241880e6a41086a2903007c2018201354ad7c200241d80d6a41086a2903007c201d201854ad7c2027201d54ad7c420d86847c2211423388200241a80f6a41086a290300200241f80c6a41086a2903007c201f202454ad7c200241e80e6a41086a2903007c2020201f54ad7c200241980e6a41086a2903007c2021202054ad7c200241c80d6a41086a2903007c2010202154ad7c2011201054ad7c420d86847c221f423388200241b80f6a41086a290300200241e80c6a41086a2903007c2019202354ad7c200241f80e6a41086a2903007c201b201954ad7c200241a80e6a41086a2903007c201c201b54ad7c200241b80d6a41086a2903007c201e201c54ad7c201f201e54ad7c420d86847c2219423388200241c80f6a41086a290300200241d80c6a41086a2903007c2006202254ad7c200241880f6a41086a2903007c2007200654ad7c200241b80e6a41086a2903007c2014200754ad7c200241a80d6a41086a2903007c2016201454ad7c2019201654ad7c420d868442137e202a42ffffffffffffff03837c220742ffffffffffffff0383220642002008420010d30b200241b8076a200942002007423388202742ffffffffffffff03837c220742137e420010d30b200241d8076a200a4200201142ffffffffffffff0383221442137e221e420010d30b20024188086a200e4200201f42ffffffffffffff0383221b42137e221c420010d30b200241c8086a200d4200201942ffffffffffffff0383221942137e2216420010d30b200241d8066a200d42002006420010d30b200241a8076a200842002007420010d30b200241c8076a20094200201e420010d30b200241f8076a200a4200201c420010d30b200241b8086a200e42002016420010d30b200241c8066a200e42002006420010d30b20024198076a200d42002007420010d30b200241d8086a200842002014420010d30b200241e8076a20094200201c420010d30b200241a8086a200a42002016420010d30b200241e8056a200a42002006420010d30b20024188076a200e42002007420010d30b200241e8086a200d42002014420010d30b20024188096a20084200201b420010d30b20024198086a200942002016420010d30b20024188056a200942002006420010d30b200241f8066a200a42002007420010d30b200241f8086a200e42002014420010d30b20024198096a200d4200201b420010d30b200241a8096a200842002019420010d30b20022d00b81e21032004200241801c6a41206a222b2903003703002005200241801c6a41186a222c290300370300200c200241801c6a41106a222d2903002208370300200241b81e6a41086a222e200241801c6a41086a222f2903002207370300200220022903801c22063703b81e2002200620022903801c7c22063703b81e202e2007202f2903007c2207370300200c2008202d2903007c220837030020052005290300202c2903007c220937030020042004290300202b2903007c220a370300200241880c6a200f42002006420010d30b200241880a6a200a4200201242137e420010d30b200241980a6a20094200201542137e2214420010d30b200241e80a6a20084200201742137e220d420010d30b200241b80b6a20074200201a42137e220e420010d30b200241c80b6a20074200200f420010d30b200241980c6a200642002012420010d30b200241f8096a200a42002014420010d30b200241a80a6a20094200200d420010d30b200241f80a6a20084200200e420010d30b200241880b6a20084200200f420010d30b200241d80b6a200742002012420010d30b200241a80c6a200642002015420010d30b200241e8096a200a4200200d420010d30b200241b80a6a20094200200e420010d30b200241c80a6a20094200200f420010d30b200241980b6a200842002012420010d30b200241e80b6a200742002015420010d30b200241b80c6a200642002017420010d30b200241d8096a200a4200200e420010d30b200241c8096a200a4200200f420010d30b200241d80a6a200942002012420010d30b200241a80b6a200842002015420010d30b200241f80b6a200742002017420010d30b200241c80c6a20064200201a420010d30b200220022903c809222120022903c80c7c220620022903d80a7c220720022903a80b7c220820022903f80b7c220920022903d809221020022903b80c7c220a20022903c80a7c220e20022903980b7c220d20022903e80b7c220f20022903e809221120022903a80c7c221220022903b80a7c221420022903880b7c221520022903d80b7c221620022903f809221320022903980c7c221720022903a80a7c221920022903f80a7c221a20022903c80b7c221b20022903880a221820022903880c7c221c20022903980a7c221e20022903e80a7c221f20022903b80b7c2220423388200241880a6a41086a290300200241880c6a41086a2903007c201c201854ad7c200241980a6a41086a2903007c201e201c54ad7c200241e80a6a41086a2903007c201f201e54ad7c200241b80b6a41086a2903007c2020201f54ad7c420d86847c221c423388200241f8096a41086a290300200241980c6a41086a2903007c2017201354ad7c200241a80a6a41086a2903007c2019201754ad7c200241f80a6a41086a2903007c201a201954ad7c200241c80b6a41086a2903007c201b201a54ad7c201c201b54ad7c420d86847c2217423388200241e8096a41086a290300200241a80c6a41086a2903007c2012201154ad7c200241b80a6a41086a2903007c2014201254ad7c200241880b6a41086a2903007c2015201454ad7c200241d80b6a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2212423388200241d8096a41086a290300200241b80c6a41086a2903007c200a201054ad7c200241c80a6a41086a2903007c200e200a54ad7c200241980b6a41086a2903007c200d200e54ad7c200241e80b6a41086a2903007c200f200d54ad7c2012200f54ad7c420d86847c220a423388200241c8096a41086a290300200241c80c6a41086a2903007c2006202154ad7c200241d80a6a41086a2903007c2007200654ad7c200241a80b6a41086a2903007c2008200754ad7c200241f80b6a41086a2903007c2009200854ad7c200a200954ad7c420d868442137e202042ffffffffffffff03837c220642ffffffffffffff03833703e81d20022006423388201c42ffffffffffffff03837c3703f01d2002200a42ffffffffffffff038322063703881e2002201242ffffffffffffff038322073703801e2002201742ffffffffffffff0383220e3703f81d200241881f6a200241e81d6a106d2002200642f0ffffffffffff3f20067d220942ffffffffffffff038342f0ffffffffffff3f20077d22084233887c85420020022d00881f410171106fad42ff01837d220a8320068522063703881e20022007200842ffffffffffffff038342f0ffffffffffff3f200e7d220d4233887c85200a8320078522073703801e200220022903e81d2208200942338842137e42d0fdffffffffff3f20087d220f42ffffffffffffff03837c85200a8320088522083703e81d200220022903f01d220942f0ffffffffffff3f20097d221242ffffffffffffff0383200f4233887c85200a8320098522093703f01d2002200e200d42ffffffffffffff038320124233887c85200a83200e85220a3703f81d20024198046a200229038805221d20022903a8097c220e20022903f8067c220d20022903f8087c220f2002290398097c221220022903980822272002290388097c221420022903e8057c22152002290388077c221620022903e8087c221720022903e807222820022903d8087c221920022903a8087c221a20022903c8067c221b2002290398077c221c20022903c807222920022903a8077c221e20022903f8077c221f20022903b8087c222020022903d8067c222120022903b807222a20022903e8067c221020022903d8077c22112002290388087c221320022903c8087c2218423388200241b8076a41086a290300200241e8066a41086a2903007c2010202a54ad7c200241d8076a41086a2903007c2011201054ad7c20024188086a41086a2903007c2013201154ad7c200241c8086a41086a2903007c2018201354ad7c420d86847c2210423388200241c8076a41086a290300200241a8076a41086a2903007c201e202954ad7c200241f8076a41086a2903007c201f201e54ad7c200241b8086a41086a2903007c2020201f54ad7c200241d8066a41086a2903007c2021202054ad7c2010202154ad7c420d86847c221e423388200241e8076a41086a290300200241d8086a41086a2903007c2019202854ad7c200241a8086a41086a2903007c201a201954ad7c200241c8066a41086a2903007c201b201a54ad7c20024198076a41086a2903007c201c201b54ad7c201e201c54ad7c420d86847c221942338820024198086a41086a29030020024188096a41086a2903007c2014202754ad7c200241e8056a41086a2903007c2015201454ad7c20024188076a41086a2903007c2016201554ad7c200241e8086a41086a2903007c2017201654ad7c2019201754ad7c420d86847c221a42338820024188056a41086a290300200241a8096a41086a2903007c200e201d54ad7c200241f8066a41086a2903007c200d200e54ad7c200241f8086a41086a2903007c200f200d54ad7c20024198096a41086a2903007c2012200f54ad7c201a201254ad7c420d868442137e201842ffffffffffffff03837c221242ffffffffffffff0383220e420020022903f01c220d420010d30b200241e8046a20022903901d220f42002012423388201042ffffffffffffff03837c221242137e420010d30b20024188066a20022903881d22144200201e42ffffffffffffff0383221742137e221e420010d30b200241b8056a20022903801d22154200201942ffffffffffffff0383221b42137e221c420010d30b200241c8036a20022903f81c22164200201a42ffffffffffffff0383221a42137e2219420010d30b20024188046a20164200200e420010d30b200241d8046a200d42002012420010d30b200241f8056a200f4200201e420010d30b200241a8056a20144200201c420010d30b200241b8036a201542002019420010d30b200241f8036a20154200200e420010d30b200241c8046a201642002012420010d30b20024198066a200d42002017420010d30b20024198056a200f4200201c420010d30b200241a8036a201442002019420010d30b200241e8036a20144200200e420010d30b200241b8046a201542002012420010d30b200241a8066a201642002017420010d30b200241c8056a200d4200201b420010d30b200241c8026a200f42002019420010d30b200241d8036a200f4200200e420010d30b200241a8046a201442002012420010d30b200241b8066a201542002017420010d30b200241d8056a20164200201b420010d30b200241f8046a200d4200201a420010d30b2002200229039805221e2002290398067c220e20022903a8037c220d20022903f8037c221220022903c8047c221420022903f805221f20022903d8047c220f20022903a8057c221520022903b8037c22162002290388047c221720022903e80422202002290398047c22192002290388067c221a20022903b8057c221b20022903c8037c221c423388200241e8046a41086a29030020024198046a41086a2903007c2019202054ad7c20024188066a41086a2903007c201a201954ad7c200241b8056a41086a2903007c201b201a54ad7c200241c8036a41086a2903007c201c201b54ad7c420d86847c2219423388200241f8056a41086a290300200241d8046a41086a2903007c200f201f54ad7c200241a8056a41086a2903007c2015200f54ad7c200241b8036a41086a2903007c2016201554ad7c20024188046a41086a2903007c2017201654ad7c2019201754ad7c420d86847c221542ffffffffffffff0383220f3703a01e200220022903c802221f20022903c8057c221620022903e8037c221720022903b8047c221a20022903a8067c221b201542338820024198056a41086a29030020024198066a41086a2903007c200e201e54ad7c200241a8036a41086a2903007c200d200e54ad7c200241f8036a41086a2903007c2012200d54ad7c200241c8046a41086a2903007c2014201254ad7c2015201454ad7c420d86847c220e42ffffffffffffff038322123703a81e200220022903d803222020022903f8047c220d20022903a8047c221420022903b8067c221520022903d8057c221e200e423388200241c8026a41086a290300200241c8056a41086a2903007c2016201f54ad7c200241e8036a41086a2903007c2017201654ad7c200241b8046a41086a2903007c201a201754ad7c200241a8066a41086a2903007c201b201a54ad7c200e201b54ad7c420d86847c220e42ffffffffffffff038322163703b01e2002200e423388200241d8036a41086a290300200241f8046a41086a2903007c200d202054ad7c200241a8046a41086a2903007c2014200d54ad7c200241b8066a41086a2903007c2015201454ad7c200241d8056a41086a2903007c201e201554ad7c200e201e54ad7c420d868442137e201c42ffffffffffffff03837c220d42ffffffffffffff0383220e3703901e2002200d423388201942ffffffffffffff03837c220d3703981e20024188016a200e42002008420010d30b200241d8016a20064200200d42137e420010d30b200241e8026a20074200200f42137e2217420010d30b20024188026a200a4200201242137e2215420010d30b200241386a20094200201642137e2214420010d30b200241f8006a20094200200e420010d30b200241c8016a20084200200d420010d30b200241d8026a200642002017420010d30b200241f8016a200742002015420010d30b200241286a200a42002014420010d30b200241e8006a200a4200200e420010d30b200241b8016a20094200200d420010d30b200241f8026a20084200200f420010d30b200241e8016a200642002015420010d30b200241186a200742002014420010d30b200241d8006a20074200200e420010d30b200241a8016a200a4200200d420010d30b20024188036a20094200200f420010d30b20024198026a200842002012420010d30b200241086a200642002014420010d30b200241c8006a20064200200e420010d30b20024198016a20074200200d420010d30b20024198036a200a4200200f420010d30b200241a8026a200942002012420010d30b200241b8026a200842002016420010d30b200220022903e801221720022903f8027c220620022903187c220720022903687c220820022903b8017c220920022903d802221920022903c8017c220a20022903f8017c220e20022903287c220d20022903787c220f20022903d801221a2002290388017c221220022903e8027c22142002290388027c221520022903387c2216423388200241d8016a41086a29030020024188016a41086a2903007c2012201a54ad7c200241e8026a41086a2903007c2014201254ad7c20024188026a41086a2903007c2015201454ad7c200241386a41086a2903007c2016201554ad7c420d86847c2212423388200241d8026a41086a290300200241c8016a41086a2903007c200a201954ad7c200241f8016a41086a2903007c200e200a54ad7c200241286a41086a2903007c200d200e54ad7c200241f8006a41086a2903007c200f200d54ad7c2012200f54ad7c420d86847c220a42ffffffffffffff03833703b81f2002200229030822152002290398027c220e20022903587c220d20022903a8017c220f2002290388037c2214200a423388200241e8016a41086a290300200241f8026a41086a2903007c2006201754ad7c200241186a41086a2903007c2007200654ad7c200241e8006a41086a2903007c2008200754ad7c200241b8016a41086a2903007c2009200854ad7c200a200954ad7c420d86847c220642ffffffffffffff03833703c01f20022002290348221720022903b8027c22072002290398017c22082002290398037c220920022903a8027c220a2006423388200241086a41086a29030020024198026a41086a2903007c200e201554ad7c200241d8006a41086a2903007c200d200e54ad7c200241a8016a41086a2903007c200f200d54ad7c20024188036a41086a2903007c2014200f54ad7c2006201454ad7c420d86847c220642ffffffffffffff03833703c81f20022006423388200241c8006a41086a290300200241b8026a41086a2903007c2007201754ad7c20024198016a41086a2903007c2008200754ad7c20024198036a41086a2903007c2009200854ad7c200241a8026a41086a2903007c200a200954ad7c2006200a54ad7c420d868442137e201642ffffffffffffff03837c220642ffffffffffffff03833703a81f20022006423388201242ffffffffffffff03837c3703b01f02402003450d00200241881f6a200241a81f6a106d20022d00881f410171106f41ff01714101460d00200241d01e6a4200370300200241c81e6a4200370300200241c01e6a4200370300200242003703b81e200241881f6a200241901e6a106d200241b81e6a410172210c410021054100210341012104024003402005200241881f6a20036a2d0000732205410020056b72417f7341800171410776106f20047121042003411f460d01200c20036a2d00002105200341016a21030c000b0b4200210b2004106f41ff01714101460d00200241b81e6a41206a200241e81d6a41206a290300370300200241b81e6a41186a200241e81d6a41186a290300370300200241b81e6a41106a200241e81d6a41106a290300370300200241b81e6a41086a200241e81d6a41086a290300370300200241e81e6a200241901e6a41086a290300370300200241f01e6a200241901e6a41106a290300370300200241f81e6a200241901e6a41186a290300370300200241801f6a200241901e6a41206a290300370300200220022903e81d3703b81e200220022903901e3703e01e200241881b6a41206a200241a81f6a41206a290300370300200241881b6a41186a200241a81f6a41186a290300370300200241881b6a41106a200241a81f6a41106a290300370300200241881b6a41086a200241a81f6a41086a290300370300200220022903a81f3703881b200241b01b6a200241b81e6a41d00010d40b1a4201210b0b200b500d00200241b51a6a41036a200241b01b6a41d00010d40b1a200241881a6a41206a2203200241881b6a41206a290300370300200241881a6a41186a2204200241881b6a41186a290300370300200241881a6a41106a2205200241881b6a41106a290300370300200241881a6a41086a220c200241881b6a41086a290300370300200220022903881b3703881a200241b5196a200241b51a6a41d30010d40b1a20024188196a41206a222b200329030037030020024188196a41186a2203200429030037030020024188196a41106a2204200529030037030020024188196a41086a2205200c290300370300200220022903881a37038819200041086a200241b5196a41036a41d00010d40b1a200041a0016a202b29030037000020004198016a200329030037000020004190016a200429030037000020004188016a200529030037000020004180016a200229038819370000200041a8016a2001290000370000200041b0016a200141086a290000370000200041b8016a200141106a290000370000200041c0016a200141186a290000370000200041f8006a4200370300200041d8006a4201370300200041f0006a4200370300200041e8006a4200370300200041e0006a4200370300410021030c010b200241b5196a200241b51a6a41d30010d40b1a41012103200041013a0004200020022900b5193700052000410d6a200241bd196a290000370000200041146a200241c4196a2900003700000b20002003360200200241d01f6a24000bcb0102037f017e230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1bad42187e2205422088a74541037421012005a721040240024020030d00200241003602100c010b200241106a41086a41083602002002200341186c360214200220002802003602100b200220042001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a200141186e360200200241206a24000f0b1034000bc62e05017f017e017f027e1c7f230041f0026b220724000240024002402001200284500d0020032004844200520d010b20004100360200200041106a4200370300200041086a42003703000c010b42012108200741f8006a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220520064200200c1b220610d20b2002200420091b21022001200320091b21040240024002402007290378200741f8006a41086a29030084500d00200741e8006a200420022005200610d20b2007290368200741e8006a41086a29030084500d01200521080c020b200741c8006a200a200b2005200610da0b200741c8006a41086a290300210b420021062007290348210a0c010b200741d8006a200420022005200610da0b200741e0006a29030021024200210642012108200729035821040b200741186a200b42002004420010d30b200741286a20024200200a420010d30b200741386a200a42002004420010d30b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729032042005272200729033042005272200741386a41086a2903002201200729031820072903287c7c2203200154724101470d00411010382209450d072009200a3e020c2009200a4220883e02082009200b3e02042009200b4220883e020020074284808080c00037028c01200720093602880120074188016a10a901411010382209450d07200920043e020c200920044220883e0208200920023e0204200920024220883e020020074284808080c00037029c01200720093602980120074198016a10a901411010382209450d0720092008a7220d36020c200920084220883e0208200920063e0204200920064220883e020020074284808080c0003702ac01200720093602a801200741a8016a10a901200741f8016a41086a20074198016a41086a28020036020020072007290398013703f80120074188026a41086a20074188016a41086a280200360200200720072903880137038802200741b8016a20074188026a200741f8016a10aa01024020072802fc0141ffffffff0371450d0020072802f80110390b200741b8016a10a90120072802c001210e20072802bc01210f20072802b8012110024020072802b00122114101470d00200e4101200e41014b1b220941ffffffff03712009470d092009410274220c417f4c0d0902400240200c0d00410421110c010b200c10382211450d0920114100200c10d60b1a0b200720093602e802200720113602e0022007200c4102763602e402200e450d1620112009410274200e4102746b6a210c200d4101200d41014b1bad21024200210441002109201021110340200e200e20096a220d490d03200c200442208620113502008422042002803e0200200d417f6a450d17201141046a2111200c41046a210c2009417f6a2109200420028221040c000b0b2011450d0320072802a80122122802000d020c030b200741086a200729033820032008200610da0b20004100360200200041106a200741086a41086a290300370300200041086a20072903083703000c160b410020096b200e41b4c9c000103c000b200e450d112010280200450d00200e20114d0d00200720113602c401200e20116b221341016a22144101201441014b1b221541ffffffff03712015470d0520154102742216417f4c0d0520160d01410421170c020b410021170240200f41ffffffff03710d000c030b201010390c020b201610382217450d0220174100201610d60b1a0b20114101201141014b1b221841ffffffff03712018470d0220184102742219417f4c0d02201910382209450d0120094100201910d60b211a4101210d41022109024002400240201228020067221b0e020201000b41022109201b210c4101210d034020094101200c4101711b200d6c210d200c41034b211c200920096c2109200c410176210c201c0d000b0b2009200d6c210d0b2007200e360280022007200f3602fc01200720103602f801410410382209450d012009200d360200200742818080801037028c022007200936028802200741c8016a200741f8016a20074188026a10aa0120091039201141ffffffff03712011470d0220114102742209417f4c0d024104210c02402009450d0020091038220c450d020b2007200c3602f801200720094102763602fc01200c2012201141027410d40b1a2007201136028002410410382209450d012009200d360200200742818080801037028c022007200936028802200741d8016a200741f8016a20074188026a10aa01200910390240201420072802c4016a220920072802d00122114d0d00200920116b220c41ffffffff0371200c470d03200c410274220d417f4c0d0302400240200d0d004104210e0c010b200d1038220e450d030b4100210920074100360280022007200e3602f8012007200d410276220d3602fc01024002400240200d200c4f0d00200741f8016a4100200c10ab0120072802fc01210d20072802f801210e20072802800221090c010b200c450d010b200e20094102746a4100200c41027410d60b1a2009200c6a21090b20114102742110200720093602800220072802c801210c0240200d20096b20114f0d00200741f8016a2009201110ab0120072802f801210e20072802800221090b200e20094102746a200c201010d40b1a200741f8016a41086a200920116a220936020020074188026a41086a22112009360200200720072903f80137038802024020072802cc0141ffffffff0371450d00200c10390b200741c8016a41086a201128020036020020072007290388023703c8010b2016410276211d2019410276211e200741d8016a10a901034020072013221f3602e4010240024002400240024002400240024002400240024002400240024020072802d001220920072802c4012211201f6a220c417f736a220e20094f0d0020092009200c6b220c4d0d0120072802e0012209200920116b22114d0d0220072802d80120114102746a35020022024200510d03201f201f4100476b211320072802c8012209200e4102746a35020021042009200c4102746a3502002101200741003602e8012007200120044220868422042002803703f0012007200420028237038002200741003602f8012007200741e4016a36029c022007200741c8016a360298022007200741c4016a360294022007200741d8016a360290022007200741f8016a36028c022007200741e8016a3602880220074188026a10ac011a034020072802f80141016a41004c0d05024020072903800242ffffffff0f560d0020074188026a10ac010d010b0b20072903f001210341002109024020072802c401220f20072802e401220d6a2211200f490d00200f41016a2209200f490d060b200941ffffffff03712009470d1120094102742209417f4c0d110240024020090d004104210c0c010b20091038220c450d110b200741003602a8022007200c3602a0022007200941027622093602a4020240024002402011200d490d00200f41016a220e200f490d092009200e490d01410021200c020b410021200c0c0b200741a0026a4100200e10ab0120072802a802212020072802a002210c0b200c20204102746a210c2011200d4d0d072011417f7321090340200920072802d00122106a220e20094f0d09200c20072802c801200e4102746a280200360200200941016a2109200c41046a210c200d2011417f6a2211490d000b200f20206a21200c090b200e200941b4c9c000103c000b200c200941b4c9c000103c000b2011200941b4c9c000103c000b41f0c9c0004119418ccac0001035000b41dcdccc004118200741e0026a419ccac00041accac000103d000b41f8d2cd00411141c496c7001035000b41f8d2cd00411141e095c7001035000b200f450d010c020b200e201041b4c9c000103c000b20072802d0012209200d417f736a221120094f0d01200c20072802c80120114102746a280200360200202041016a21200b200720203602a80220072802e001220c41ffffffff0371200c470d06200c4102742209417f4c0d0620072802d801210e0240024020090d00410421110c010b200910382211450d060b200720113602d002200720094102763602d4022011200e200910d40b1a2007200c3602d802410810382209450d052009200342208a37020020074282808080203702e402200720093602e002200741b0026a200741d0026a200741e0026a10aa0120091039202020072802b8022221202020214b1b22224101202241014b1b221041ffffffff03712010470d0620104102742223417f4c0d0620072802a402212420072802a00221250240024020230d00410421260c010b202310382226450d0620264100202310d60b1a0b024020220d004100210c0c030b2022417f6a21142010417f6a21112021417f6a221c20214b21122020417f6a221620204b2119202620236a417c6a210e410021094200210220072802b002212703404100210c024020190d004100210c201620096b220d20164b0d004100210c2020200d4d0d002025200d4102746a280200210c0b4100210d024020120d00201c20096b220f201c4b0d002021200f4d0d002027200f4102746a280200210d0b201020114d0d02200e200cad220420027d200dad22017d200420017d220120027d22022001200456200220015672220c1b3e020020142009460d03200941016a2109200e417c6a210e2011417f6a2111200cad21020c000b0b2011200941b4c9c000103c000b2011201041c4c9c000103c000b0240202441ffffffff0371450d00202510390b0240024002400240024002400240024002400240024002400240024020072802c401220e20072802e40122116a221c200e490d00024002402011201c4f0d002011417f73210903402010201020116a20096a220d4d0d04200920072802d001220f6a221120094f0d0520072802c80120114102746a2026200d4102746a2802003602002009417f6a210920072802e4012111200e417f6a220e0d000c020b0b200e0d010b2011201c417f73220e6a220920106a221120094f0d0320072802d0012209200e6a220e20094f0d0420072802c801200e4102746a202620114102746a28020036020020072802e40121110b20152011417f736a220920154f0d04201720094102746a2003a7360200200c450d0c201520072802e401417f736a220920154f0d05201720094102746a22092009280200417f6a36020041002109024020072802c401220f20072802e401220d6a2211200f490d00200f41016a2209200f490d070b200941ffffffff03712009470d1020094102742209417f4c0d100240024020090d004104210c0c010b20091038220c450d100b200741003602e8022007200c3602e0022007200941027622093602e4020240024002402011200d490d00200f41016a220e200f490d0a2009200e490d014100211c0c020b4100211c0c0d0b200741e0026a4100200e10ab0120072802e802211c20072802e002210c0b200c201c4102746a210c2011200d4d0d082011417f7321090340200920072802d00122106a220e20094f0d0a200c20072802c801200e4102746a280200360200200941016a2109200c41046a210c200d2011417f6a2211490d000b200f201c6a211c0c0a0b20224101202241014b1b20116a20096a201041b4c9c000103c000b2011200f41c4c9c000103c000b2011201041b4c9c000103c000b200e200941c4c9c000103c000b2009201541c4c9c000103c000b2009201541b4c9c000103c000b41f8d2cd00411141c496c7001035000b41f8d2cd00411141e095c7001035000b200f450d010c020b200e201041b4c9c000103c000b20072802d0012209200d417f736a221120094f0d06200c20072802c80120114102746a280200360200201c41016a211c0b200741c0026a41086a201c360200200720072903e0023703c00220072802e001220c41ffffffff0371200c470d04200c4102742209417f4c0d0420072802d801210e0240024020090d00410421110c010b200910382211450d040b200720113602e002200720094102763602e4022011200e200910d40b1a2007200c3602e802200741d0026a200741e0026a200741c0026a10ad01024020072802c401220920072802e401220f6a22112009490d0002400240200f20114f0d002011417f73210920072802c80120072802d001221020116b4102746a417c6a210c20072802d002211c20072802d802210e200f210d0340200e200e200d6a20096a220d4d0d0a2010201020096a22124d0d0b200c201c200d4102746a280200360200200c41046a210c200941016a210920072802e401210d200f2011417f6a2211490d000c020b0b20090d0120072802d802210e200f210d0b200e200d200f417f7322096a6a220c200e4f0d0920072802d001221120096a220920114f0d0a20072802c80120094102746a20072802d002200c4102746a2802003602000b024020072802d40241ffffffff0371450d0020072802d00210390b20072802c40241ffffffff0371450d0020072802c00210390b02402023450d00202610390b024020072802b40241ffffffff0371450d0020072802b00210390b201f0d000b02400240201b450d00024020072802c40122094101460d00410020096b2110201b411f71210f4100201b6b411f71211c2018410274201a6a417c6a210c417f21090340200920072802d001220e6a221120094f0d0e200e2011417f6a220d4d0d0f2018201820096a220e4d0d10200c20072802c801220e200d4102746a280200201c74200e20114102746a280200200f7672360200200c417c6a210c20102009417f6a2209470d000b20072802c40121090b20072802d001220c200c20096b22114d0d0a2018201820096b22094d0d0b201a20094102746a20072802c80120114102746a280200201b411f7176360200201a21110c010b20072802d001211820072802cc01211e20072802c8012111201a10390b024020072802dc0141ffffffff0371450d0020072802d80110390b201b450d0020072802cc0141ffffffff0371450d0020072802c80110390b410410382209450d002009410036020041041038220c450d00200c41003602000240024020170d00410121184101211e410121154101211d0c010b20091039200c10392011210c201721090b200720153602f0012007201d3602ec01200720093602e80120072018360280022007201e3602fc012007200c3602f80120074188026a200741f8016a10ae012007280288024101460d0c024020074188026a41086a29030020084201882006423f86845820074188026a41106a2903002202200642018822045820022004511b0d00200741f8016a41086a200741e8016a41086a280200360200200720072903e8013703f801411010382209450d0120094280808080103702082009420037020020074284808080c00037028c02200720093602880220074188026a10a901200741e8016a200741f8016a20074188026a10ad01200728028c0241ffffffff0371450d0020072802880210390b200741e0026a41086a200741e8016a41086a280200360200200720072903e8013703e0020c0f0b1032000b1034000b2011200941b4c9c000103c000b200d200e41b4c9c000103c000b2012201041c4c9c000103c000b200c200e41b4c9c000103c000b2009201141c4c9c000103c000b2011200c41b4c9c000103c000b2009201841c4c9c000103c000b2011200e41b4c9c000103c000b2011417f6a200e41b4c9c000103c000b200e201841c4c9c000103c000b2007200729028c023703f80141c7c6c000412f200741f8016a41f8c6c0004188c7c000103d000b4100410041d4c9c000103c000b200f41ffffffff0371450d00201010390b200741e0026a10a901200741f8016a41086a200741e0026a41086a280200360200200720072903e0023703f80120074188026a200741f8016a10ae0141012109024002402007280288024101470d0020004198c7c000360204200041086a41193602000c010b200041106a20074188026a41106a290300370300200041086a20074188026a41086a290300370300410021090b2000200936020020072802ac0141ffffffff0371450d0020072802a80110390b200741f0026a24000bfe0101057f0240024002400240200041086a2802002201450d0020014102742102410021032000280200220421050240034020052802000d01200541046a2105200341016a21032002417c6a22020d000b2001417f6a21030b2003450d0020012003490d01200120036b220541ffffffff03712005470d0220054102742202417f4c0d024104210102402002450d00200210382201450d040b2001200420034102746a200541027410d40b2103200241027621020240200041046a28020041ffffffff0371450d00200410390b20002003360200200041086a2005360200200041046a20023602000b0f0b2003200141bcc8c0001054000b1034000b1032000b8804030d7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742205417f4c0d0002400240024020050d00410421070c010b200510382207450d0120074100200510d60b1a0b20002007360200200041086a2006360200200020054102763602042004450d022006417f6a2108200341027420022802006a417c6a2109200641027420076a417c6a210a4100210b200141086a210c2004210d024003400240024002400240024002402004200d200b417f736a220e4d0d002001280200200e4102746a220f280200450d05024020030d00410021000c050b420021102003211120092102200a2105200821000340200d200e4d0d02200620004d0d0320052002350200200f3502007e20107c20053502007c22103e02002002417c6a21022005417c6a21052000417f6a2100201042208821102011417f6a2211450d040c000b0b200e200441b4c9c000103c000b200e200d41b4c9c000103c000b2000200641b4c9c000103c000b2010a721000b2006200b20036a417f736a220520064f0d02200720054102746a20003602000b200b41016a220b2004460d04200a417c6a210a2008417f6a2108200c280200210d0c000b0b2005200641c4c9c000103c000b1032000b1034000b0240200141046a28020041ffffffff0371450d00200128020010390b0bd50101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffffff03712001464102742102200141027421010240024020040d00200341003602100c010b200341186a410436020020032004410274360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410276360200200341206a24000f0b1034000bc60302097f017e230041106b2201240002400240024002400240024002402000280200220228020041016a41004c0d002000280204220328020041016a41004c0d012000280208220441086a2802002205200028020c220628020022076b41016a220820054f0d024101200028021428020020076a6b22052000280210220741086a28020022096a220020054f0d0302402002290308220a42ffffffff0f56200a200428020020084102746a3502007e2003290308422086200728020020004102746a35020084567222004101470d0020022802000d052002410036020020022002290308427f7c370308200441086a2802002202200220062802006b22054d0d0620032802000d07200428020020054102746a350200210a200341003602002003200a20032903087c3703080b200141106a240020000f0b41dcdccc004118200141086a419ccac00041bccac000103d000b41dcdccc004118200141086a419ccac00041cccac000103d000b2008200541b4c9c000103c000b2000200941b4c9c000103c000b41f0a2ca004110200141086a41dccac00041eccac000103d000b2005200241b4c9c000103c000b41f0a2ca004110200141086a41dccac00041fccac000103d000bda03030a7f017e027f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742206417f4c0d000240024020060d00410421080c010b200610382208450d0220084100200610d60b1a0b20002008360200200041086a200736020020002006410276360204024020050d00410021000c050b2007417f6a21002004417f6a220920044b210a200741027420086a417c6a210b2002280200210c410021024200210d03404100210602402003417f6a220e20034b0d0041002106200e20026b220f200e4b0d00410021062003200f4d0d002001280200200f4102746a28020021060b4100210e0240200a0d00200920026b220f20094b0d002004200f4d0d00200c200f4102746a280200210e0b200720004d0d03200b200d2006ad7c200ead7c220d3e0200200b417c6a210b2000417f6a2100200d422088210d2005200241016a2202460d040c000b0b1034000b1032000b2000200741c4c9c000103c000b200da721000b024020072005417f736a220620074f0d00200820064102746a20003602000240200141046a28020041ffffffff0371450d00200128020010390b0f0b2006200741c4c9c000103c000ba60203027f027e027f230041206b22022400200241106a41086a2203200141086a28020036020020022001290200370310200241106a10a9010240024020032802002201410574418101490d002000419ec8c00036020420004101360200200041086a411d3602000c010b0240024020010d0042002104420021050c010b200228021021062001410274417c6a210141002103200241086a2107420021044200210503402002200620016a3502004200200341e0007110d10b200729030020057c2002290300220520047c2204200554ad7c21052001450d01200341206a21032001417c6a21010c000b0b20004100360200200041106a2005370300200041086a20043703000b0240200228021441ffffffff0371450d00200228021010390b200241206a24000b2e01017e2000ad220120017e220142808090bbbad6adf00d200142808090bbbad6adf00d541b428094ebdc0380a70bb5340b047f037e017f017e027f077e067f017e097f017e067f230041f0006b2204240020012802002105024002400240024002402001280208220641047422070d0042002108420021090c010b4200210a2007210b4200210c2005210102400340200a20012903007c2208200a54220d200c200141086a2903007c200dad7c2209200c542009200c511b0d01200141106a21012008210a2009210c200b41706a220b450d020c000b0b200041a880c80036020420004101360200200041086a411e3602000c010b024020060d0020004100360200200041086a4200370200200041002802e8c8483602040c010b024020022008200820025420092003542009200351220e1b22011b220c2008200220011b220a7d220f2003200920011b2009200320011b7d200c200a54ad7d2210844200520d00200641ffffffff00712006470d0220064104742201417f4c0d0220011038220d450d03200d2005200641047410d40b21052000410c6a2006360200200041086a200141047636020020002005360204200041003602000c010b200441286a200f20102006ad2211420010da0b200441186a200f20102011420010d20b201142187e220c422088a70d01200ca72201417f4c0d01200441186a41086a2903002112200441286a41086a29030021132004290318211420042903282115200110382216450d02200520076a210d4100211720044100360240200420163602382004200141186e220136023c0240200120064f0d00200441386a200610a70120042802382116200428024021170b02402005200d460d002006410474210b2016201741186c6a21014100210d03402005290300210c200141106a200541086a290300370300200141086a200c3703002001200d360200200141186a2101200d41016a210d200541106a2105200b41706a220b0d000b2017200d6a2117200428023821160b2004201736024002400240024002400240201741144b0d00201741014b2218450d0420162017417f6a220d41186c6a21194100210b0340200d2201417f6a210d2018450d0302402017200d6b221a4102490d002016200141186c6a220141086a22072903002016200d41186c6a220541086a221b290300221c5a200141106a221d290300220a200541106a221e290300220c5a200a200c511b0d002005280200211f20052001290300370300201b2007290300370300201e201d2903003703000240201a4103490d00200b417f6a211d41002105201921010340200141206a2207290300201c5a200141286a221b290300220a200c5a200a200c511b0d01201d2005460d05200141106a201b290300370300200141086a20072903003703002001200141186a220729030037030020072101200b2005417f6a2205470d000b200721010b2001201c3703082001201f360200200141106a200c3703000b201941686a2119200b417f6a210b200d0d000c050b0b2017410176ad42187e220c422088a70d05200ca72220417f4c0d05202010382221450d062004420037024c41002118200441002802d8974e2222360248201641686a2123201641406a21242017211b034041002125410121190240201b417f6a220b450d0002400240024002400240024002402016200b41186c6a220141086a290300201b41186c221d20166a41586a2205290300220a54200141106a290300221c200541086a290300220c54201c200c511b0d00201b417e6a21192024201d6a210141002125410021050340024020192005470d00201b21190c090b200a200129030022265a210d200c200141086a290300221c51210b200c201c5a2107200141686a2101200541016a21052026210a201c210c200d2007200b1b0d000b200541016a21192005417f73201b6a210b0c010b2024201d6a2101024003400240200b4101470d004100210b0c020b200a20012903002226542105200c200141086a290300221c51210d200c201c542107200141686a2101200b417f6a210b2026210a201c210c20052007200d1b0d000b0b201b200b490d01201b20174b0d02201b200b6b2219410176220d450d002016200b41186c6a21012023201d6a21050340200441d8006a41106a2207200141106a221d290300370300200441d8006a41086a221a200141086a221e29030037030020042001290300370358200541106a221f290300210c200541086a2227290300210a20012005290300370300201e200a370300201d200c370300201f20072903003703002027201a29030037030020052004290358370300200141186a2101200541686a2105200d417f6a220d0d000b0b0240200b0d00200b21250c060b0240201941094d0d00200b21250c060b201b20174b0d03200b201b6b210d2016200b41186c6a211d0340201b200b417f6a2225490d050240201b20256b22194102490d002016200b41186c6a220141086a220b2903002016202541186c6a220541086a2207290300221c5a200141106a221a290300220a200541106a221e290300220c5a200a200c511b0d002005280200211f200520012903003703002007200b290300370300201e201a290300370300024020194103490d0041012105201d21010340200141206a220b290300201c5a200141286a2207290300220a200c5a200a200c511b0d01200d20056a4101460d06200141106a2007290300370300200141086a200b2903003703002001200141186a220b290300370300200b2101200d200541016a22056a0d000b200b21010b2001201c3703082001201f360200200141106a200c3703000b2025450d06201d41686a211d200d417f6a210d2025210b2019410a4f0d060c000b0b200b201b41c4bac3001055000b201b201741c4bac300104b000b2005201941a4bbc300103c000b201b200b417f6a2225490d00201b201741d4bac300104b000b2025201b41d4bac3001055000b02402018200428024c470d00200441c8006a201810b10120042802482122200428025021180b202220184103746a22012019360204200120253602002004200428025041016a222836025002400240202841024f0d00202821180c010b200428024821220240034002400240024002400240202220282218417f6a22284103746a2201280200450d00201841037420226a220b41746a280200220d200128020422054b0d010b20184103490d022001280204210520222018417d6a221f4103746a28020421010c010b201841024d0d0420222018417d6a221f4103746a28020422012005200d6a4d0d00201841034d0d04200b41646a2802002001200d6a4b0d040b20012005490d010b2018417e6a211f0b02400240024002400240024002402018201f41016a22014d0d002018201f4d0d012022201f4103746a2227280204222920272802006a2205202220014103746a222a280200222b490d02200520174b0d03202741046a212c2016202b41186c6a220d202a280204221e41186c220b6a2101200541186c210702402005202b6b221b201e6b2205201e490d002021200d200b10d40b2205200b6a210b0240201e41014e0d00200521050c080b201b201e4a0d05200521050c070b20212001200541186c220b10d40b221a200b6a210b201e4101480d0520054101480d05202320076a210503402005200141686a2219200b41686a221d200b41706a2207290300200141706a221b29030054200741086a290300220c201b41086a290300220a54200c200a511b22071b221b290300370300200541086a201b41086a290300370300200541106a201b41106a290300370300200b201d20071b210b200d2019200120071b22014f0d06200541686a2105200b201a4b0d000c060b0b2001201841e4bac300103c000b201f201841f4bac300103c000b202b20054184bbc3001055000b200520174184bbc300104b000b201620076a2119200521050340200d20012005200141086a290300200541086a29030054200141106a290300220c200541106a290300220a54200c200a511b22071b221b290300370300200d41086a201b41086a290300370300200d41106a201b41106a2903003703002005200541186a20071b2105200d41186a210d200141186a200120071b220120194f0d022005200b4f0d020c000b0b201a21052001210d0b200d2005200b20056b220120014118706b10d40b1a202c2029201e6a3602002027202b360200202a202a41086a2018201f6b41037441706a10d50b1a41012118202841014b0d000b0b200420183602500b2025211b2025450d030c000b0b410120056b201a41a4bbc300103c000b200d201741b4bac3001054000b0240200428024c41ffffffff0171450d00200428024810390b2020411870210120204118490d0020202001460d00202110390b02400240024002400240024002400240024002400240024002400240200820025a200920035a200e1b0d00200441086a200220032011420010da0b41002101200441086a41086a290300211c200429030821260240200f20115441002010501b0d00410021012004280238211b200428024021072006210d0340200720014d0d0c201b200141186c6a2205290308220c20157c2209200c54220b200541106a290300220a20137c200bad7c220c200a54200c200a511b4101460d0b200541086a220520093703002005200c37030802402009202654200c201c54200c201c511b0d00200141016a20067021010b200d417f6a220d0d000b0b20142012844200520d0120042802402117200428023821160c040b20042802402217450d0a2006417f6a210b2004280238221641106a290300210820162903082126200f20115441002010501b450d01200b21010c020b20042802382116200428024021170340201720014d0d072016200141186c6a2205290308220942017c220c200954220d200541106a2903002208200dad7c220a200854200c20095a1b4101460d06200541086a2205200c3703002005200a3703080240200c202654200a201c54200a201c511b0d00200141016a20067021010b2014427f7c220c2014542105200c2114200c20122005ad7c427f7c22128450450d000c030b0b200b21010340201720014d0d042016200141186c6a220541086a210d02402005290308220a20157d2209200a56200541106a290300221c20137d2203200a201554ad22027d220c201c56200c201c511b4101470d004200200320027d220c200a20157d2209200a56200c201c56200c201c511b22051b210c4200200920051b21092013201c7d2015200a54ad7d20127c2015200a7d220a20147c2214200a54ad7c21120b200d2009370300200d200c3703082001200b2001417f6a2205200520014b1b2009202656200c200856200c2008511b1b21012006417f6a22060d000b0b2014201284500d000340201720014d0d02024002402016200141186c6a2205290308220c427f7c221c200c56200541106a2903002209200c50ad7d220a200956200c4200521b4101470d00200b2001417f6a2205200520014b1b21010c010b200541086a2205201c3703002005200a3703082001200b2001417f6a2205200520014b1b201c202656200a200856200a2008511b1b210120122014427f7c220c201454ad7c427f7c2112200c21140b20142012844200520d000b0b024002400240201741144b0d00201741014b2218450d0b20162017417f6a220b41186c6a2119410021070340200b2201417f6a210b2018450d0302402017200b6b221a4102490d002016200141186c6a22012802002016200b41186c6a2205280200221b4f0d00200520012903003703002005290308210c200541086a200141086a290300370300200541106a2205290300210a2005200141106a2903003703000240201a4103490d002007417f6a211d41002105201921010340200141186a220d280200201b4f0d01201d2005460d05200141106a200141286a290300370300200141086a200141206a2903003703002001200d290300370300200d210120072005417f6a2205470d000b200d21010b2001200c3703082001201b360200200141106a200a3703000b201941686a21192007417f6a2107200b0d000c0c0b0b2017410176ad42187e220c422088a70d0c200ca72224417f4c0d0c202410382221450d0d2004420037024c41002118200441002802d8974e2222360248201641686a2106201641b87f6a212320172128034020282119410021284101211b02402019417f6a220d450d0002400240024002400240024002402016200d41186c6a280200201941186c221d20166a41506a2802002201490d002019417e6a211b2023201d6a210d410021284100210503400240201b2005470d002019211b0c090b200541016a21052001200d280200220b4f2107200d41686a210d200b210120070d000b200541016a211b2005417f7320196a210d0c010b2023201d6a2105024003400240200d4101470d004100210d0c020b200d417f6a210d20012005280200220b492107200541686a2105200b210120070d000b0b2019200d490d01201920174b0d022019200d6b221b410176220b450d002016200d41186c6a21012006201d6a21050340200441d8006a41106a2207200141106a221d290300370300200441d8006a41086a221a200141086a221e29030037030020042001290300370358200541106a221f290300210c200541086a2227290300210a20012005290300370300201e200a370300201d200c370300201f20072903003703002027201a29030037030020052004290358370300200141186a2101200541686a2105200b417f6a220b0d000b0b0240200d0d00200d21280c060b0240201b41094d0d00200d21280c060b201920174b0d03200d20196b210b2016200d41186c6a211d03402019200d417f6a2228490d050240201920286b221b4102490d002016200d41186c6a22012802002016202841186c6a220528020022074f0d00200520012903003703002005290308210c200541086a200141086a290300370300200541106a2205290300210a2005200141106a2903003703000240201b4103490d0041012105201d21010340200141186a220d28020020074f0d01200b20056a4101460d06200141106a200141286a290300370300200141086a200141206a2903003703002001200d290300370300200d2101200b200541016a22056a0d000b200d21010b2001200c37030820012007360200200141106a200a3703000b2028450d06201d41686a211d200b417f6a210b2028210d201b410a4f0d060c000b0b200d201941c4bac3001055000b2019201741c4bac300104b000b2005201b41a4bbc300103c000b2019200d417f6a2228490d002019201741d4bac300104b000b2028201941d4bac3001055000b024002402018200428024c460d00201821010c010b0240201820042802502201470d00200441c8006a201810b101200428025021010b200428024821220b202220014103746a2201201b360204200120283602002004200428025041016a222736025002400240202741024f0d00202721180c010b20042802482122034002400240024002400240202220272218417f6a22274103746a2201280200450d00201841037420226a220b41746a280200220d200128020422054b0d010b20184103490d022001280204210520222018417d6a221f4103746a28020421010c010b201841024d0d0420222018417d6a221f4103746a28020422012005200d6a4d0d00201841034d0d04200b41646a2802002001200d6a4b0d040b20012005490d010b2018417e6a211f0b02400240024002400240024002402018201f41016a22014d0d002018201f4d0d012022201f4103746a222b2802042229202b2802006a220d202220014103746a2225280200222a490d02200d20174b0d03202b41046a212c2016202a41186c6a22052025280204221e41186c220b6a2101200d41186c21070240200d202a6b221b201e6b220d201e490d0020212005200b10d40b220d200b6a210b0240201e41014e0d00200d210d0c080b201b201e4a0d05200d210d0c070b20212001200d41186c220b10d40b221a200b6a210b201e4101480d05200d4101480d05200620076a210d0340200d200141686a2207200b41686a221b201b28020020072802004922191b221d290300370300200d41106a201d41106a290300370300200d41086a201d41086a290300370300200b201b20191b210b20052007200120191b22014f0d06200d41686a210d200b201a4b0d000c060b0b2001201841e4bac300103c000b201f201841f4bac300103c000b202a200d4184bbc3001055000b200d20174184bbc300104b000b201620076a2119200d210d034020052001200d2001280200200d2802004922071b221b290300370300200541106a201b41106a290300370300200541086a201b41086a290300370300200d200d41186a20071b210d200541186a2105200141186a200120071b220120194f0d02200d200b4f0d020c000b0b201a210d200121050b2005200d200b200d6b220120014118706b10d40b1a202c2029201e6a360200202b202a3602002025202541086a2018201f6b41037441706a10d50b1a2004202736025041012118202741014b0d000b0b2028450d0a0c000b0b410120056b201a41a4bbc300103c000b200b201741b4bac3001054000b2001201741a082c800103c000b20012017418082c800103c000b41a881c800412641f081c800105b000b2001201741e081c800103c000b41a881c800412641d081c800105b000b20012007419881c800103c000b41c680c800413f418881c800105b000b0240200428024c41ffffffff0171450d00200428024810390b2024411870210120244118490d0020242001460d00202110390b2004280240220141ffffffff00712001470d0120014104742205417f4c0d01200428023c211b200428023821194108210702402005450d00200510382207450d030b4100210d2000410c6a220b4100360200200041086a20054104762205360200200041046a221d2007360200024002400240200520014f0d00201d200110b201200b280200210d200028020421070c010b2001450d010b200141186c210b201941086a21012007200d4104746a210503402001290300210c2005200141086a2903003703082005200c370300200141186a2101200d41016a210d200541106a2105200b41686a220b0d000b0b2000410c6a200d3602000240201b450d00201b41186c450d00201910390b200041003602000b200441f0006a24000f0b1034000b1032000bd50101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffffff01712001464102742103200141037421010240024020040d00200241003602100c010b200241186a410436020020022004410374360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410376360200200241206a24000f0b1034000bcc0101037f230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1b220141ffffffff00712001464103742104200141047421010240024020030d00200241003602100c010b200241106a41086a410836020020022003410474360214200220002802003602100b200220012004200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410476360200200241206a24000f0b1034000b1100419ccbc000411f41bccbc0001035000b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000b1c00200128021841e4b4c00041052001411c6a28020028020c1100000b9d0401027f230041106b22022400024002400240024020002d00000e03010200010b20012802184198ccc00041122001411c6a28020028020c11000021010c020b2002200128021841aaccc00041122001411c6a28020028020c1100003a000820022001360200200241003a000920024100360204410121012002200041016a36020c20022002410c6a41bcccc00010651a20022d000821000240200228020422030d00200021010c020b200041ff01710d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b2002200128021841ccccc000410e2001411c6a28020028020c1100003a000820022001360200200241003a000920024100360204410121012002200041016a220036020c20022002410c6a41dcccc000106521032002200036020c20032002410c6a41bcccc00010651a20022d000821000240200228020422030d00200021010c010b200041ff01710d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bc10201027f230041106b22022400200028020021004101210320024280808080104200200128021841e0b5ca0041012001411c6a28020028020c1100001b2001ad843703002002200036020c20022002410c6a4188ccc000106621012002200041016a36020c20012002410c6a4188ccc000106621012002200041026a36020c20012002410c6a4188ccc000106621012002200041036a36020c20012002410c6a4188ccc000106621012002200041046a36020c20012002410c6a4188ccc000106621012002200041056a36020c20012002410c6a4188ccc000106621012002200041066a36020c20012002410c6a4188ccc000106621012002200041076a36020c024020012002410c6a4188ccc00010662d00040d002002280200220028021841c49ec00041012000411c6a28020028020c11000021030b200241106a240020030b9b0101047f230041206b2202240002402001422088a72203450d002001a722042d0000210520022003417f6a36020c2002200441016a360208410021030240024020050e020100020b200241106a200241086a10b90120022802102203450d01200229021421010b200020013702042000200336020020041039200241206a24000f0b41b9cfc000412e200241106a41e8cfc00041f8cfc000103d000bc60102057f017e230041106b22022400200241086a200110c10102400240024002402002280208450d00200041003602000c010b024020012802042203200228020c2204490d002004417f4c0d020240024020040d00410121050c010b200410382205450d0420054100200410d60b1a0b200520012802002206200410d40b21052001200320046b3602042001200620046a3602002000200536020020002004ad22074220862007843702040c010b200041003602000b200241106a24000f0b1034000b1032000be10201057f230041106b22022400024002400240024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0120024100360208200242013703000c020b1034000b200410382205450d0341002106200241003602082002200436020420022005360200024020030d00200541003a00004101210420024101360208200228020021010c030b20040d010b200241004101107720022802002105200228020821060b200520066a41013a00002002200641016a36020820012802002106200141086a28020022042002107902402002280204200228020822056b20044f0d002002200520041077200228020821050b2002280200220120056a2006200410d40b1a2002200520046a22043602080b20002002290300370204200041013602002000410c6a200241086a280200360200200041106a2004ad4220862001ad84370300200241106a24000f0b1032000b9b0201057f230041c0006b2203240020032001360204200341086a200210ba01200341046a200341086a41106a200341086a41086a200328020822044101461b29030010002101200341206a41186a22054200370300200341206a41106a22064200370300200341206a41086a22074200370300200342003703202007200141086a2900003703002006200141106a2900003703002005200141186a2900003703002003200129000037032020011039200041186a2005290300370000200041106a2006290300370000200041086a20072903003700002000200329032037000002402004450d002003280210450d00200328020c10390b024020022802002201450d00200241046a280200450d00200110390b200341c0006a24000b150020002002ad4220862001ad84200310014101460b070010024101460bc30a03017f017e0f7f230041306b2203240002402001200210032204422088a72202450d002002417f6a210502400240024002402004a722012d00000e020001040b200341003602082005450d0320012d0001210520034101360208200320053a000c20024102470d010c030b2005450d02410121064100210702400240024020012d00010e03040001050b41012107410121060c010b410221070b0c010b20012d0002210520034102360208200320053a000d20024103460d0120012d0003210520034103360208200320053a000e20024104460d0120034104360208200320012d00043a000f20024105460d01200341106a20012d00053a00002003410536020820024106460d01200341116a20012d00063a00002003410636020820024107460d01200341126a20012d00073a00002003410736020820024108460d01200341136a20012d00083a00002003410836020820024109460d01200341146a20012d00093a0000200341093602082002410a460d01200341156a20012d000a3a00002003410a3602082002410b460d01200341166a20012d000b3a00002003410b3602082002410c460d01200341176a20012d000c3a00002003410c3602082002410d460d01200341186a20012d000d3a00002003410d3602082002410e460d01200341196a20012d000e3a00002003410e3602082002410f460d012003411a6a20012d000f3a00002003410f36020820024110460d012003411b6a20012d00103a00002003411036020820024111460d012003411c6a20012d00113a00002003411136020820024112460d012003411d6a20012d00123a00002003411236020820024113460d012003411e6a20012d00133a00002003411336020820024114460d012003411f6a20012d00143a00002003411436020820024115460d01200341206a20012d00153a00002003411536020820024116460d01200341216a20012d00163a00002003411636020820024117460d01200341226a20012d00173a00002003411736020820024118460d01200341236a20012d00183a00002003411836020820024119460d01200341246a20012d00193a0000200341193602082002411a460d01200341256a20012d001a3a00002003411a3602082002411b460d01200341266a20012d001b3a00002003411b3602082002411c460d01200341276a20012d001c3a00002003411c3602082002411d460d01200341286a20012d001d3a00002003411d3602082002411e460d01200341296a20012d001e3a00002003411e3602082002411f460d012003412a6a20012d001f3a00002003411f36020820024120460d012003412b6a220520012d00203a00002003412036020820024121460d012003412c6a20012d00213a0000200341086a41216a2f00002108200341286a2d00002102200341246a2802002109200341226a2f0100210a200341216a2d0000210b2003411d6a280000210c2003411b6a2f0000210d2003411a6a2d0000210e200341166a280100210f200341146a2f01002110200341136a2d0000211120052f00002105200328000f211220032f000d211320032d000c2107410021060b200020073a0001200020063a0000200041206a20053b00002000411e6a20083b00002000411d6a20023a0000200041196a2009360000200041176a200a3b0000200041166a200b3a0000200041126a200c360000200041106a200d3b00002000410f6a200e3a00002000410b6a200f360000200041096a20103b0000200041086a20113a0000200041046a2012360000200041026a20133b000020011039200341306a24000f0b41b9cfc000412e200341086a41e8cfc00041f8cfc000103d000b9b0201057f230041c0006b2203240020032001360204200341086a200210ba01200341046a200341086a41106a200341086a41086a200328020822044101461b29030010042101200341206a41186a22054200370300200341206a41106a22064200370300200341206a41086a22074200370300200342003703202007200141086a2900003703002006200141106a2900003703002005200141186a2900003703002003200129000037032020011039200041186a2005290300370000200041106a2006290300370000200041086a20072903003700002000200329032037000002402004450d002003280210450d00200328020c10390b024020022802002201450d00200241046a280200450d00200110390b200341c0006a24000b9d0603017f017e137f230041e0006b220224002002200136020c024002400240024002402002410c6a10052203422088a722010d002000420037020420004100280284ee4d3602000c010b2002200136021420022003a722043602102002200241106a10c10120022802000d0320022802042205200228021422064105762201200120054b1b22014105742207417f4c0d010240024020010d00410121080c010b200710382208450d030b41002109200241003602202002200136021c200220083602180240024020050d00200229021c21030c010b200241386a410472210a200241d1006a210b200241ca006a210c200241c3006a210d4100210e02400340200e41016a210e41002101034020062001460d02200a20016a2002280210220f2d00003a00002002200141016a22073602382002200f41016a3602102007210120074120470d000b200241306a41026a220f200d41026a2d00003a00002002412c6a41026a2210200c41026a2d00003a00002002200a2f01003b01342002200d2f00003b01302002200c2f00003b012c2002200a41026a2d00003a00362002280258211120022802542112200228004d211320022801462114200228003f2115200241286a41026a2216200b41026a2d00003a00002002200b2f00003b012802402009200228021c470d00200241186a200910c20120022802182108200228022021090b200620076b2106200820094105746a220120022f01343b0000200141026a20022d00363a0000200141096a200f2d00003a0000200120022f01303b0007200141106a20102d00003a0000200120022f012c3b000e200120153600032001201436000a20012013360011200141176a20162d00003a0000200120022f01283b00152001201136001c200120123600182002200941016a2209360220200e2005470d000b20022802182108200229021c21030c010b41002108200241003602140240200228021c41ffffff3f71450d00200228021810390b0b2008450d032000200337020420002008360200200410390b200241e0006a24000f0b1034000b1032000b41b9cfc000412e200241386a41ecccc00041fcccc000103d000bbf0201067f0240024020012802042202450d0020012002417f6a22033602044101210420012001280200220541016a360200024020052d0000220641037122074103460d0002400240024020070e03000102000b20064102762107410021040c040b41012104024020030d000c040b20012002417e6a3602042001200541026a36020020052d0001410874200672220141ffff0371418002490d03200141fcff03714102762107410021040c030b20034103490d0120012002417c6a3602042001200541046a36020020052f0001200541036a2d000041107472410874200672220141808004492104200141027621070c020b0240200641034d0d000c020b20034104490d0120012002417b6a3602042001200541056a360200200528000122074180808080044921040c010b410121040b20002007360204200020043602000bd10101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff3f712001462103200141057421010240024020040d00200241003602100c010b200241186a410136020020022004410574360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410576360200200241206a24000f0b1034000b9a0703017f017e077f230041f0006b220524002005200136020402400240200541046a20022004ad4220862003ad8410062206422088a722030d004100280284ee4d21070c010b2006a721070b02402003450d00410021020240024020072d00000e020100020b4100210220054100360228200741016a21012003417f6a2104200541286a4104722108034020042002460d02200820026a200120026a2d00003a00002005200241016a220336022820032102200341c000470d000b200541206a41026a200541356a2d00003a0000200520052f012c3b0124200520052d002e3a00262005200541336a2f00003b0120200541366a28010021012005413d6a2800002108200541c4006a2802002109200541cb006a280000210a200541d2006a280100210b200541d9006a280000210c200541e0006a280200210d200541e4006a2902002106200528002f21042005411c6a41026a2005413c6a2d00003a0000200541186a41026a200541c3006a2d00003a0000200541146a41026a200541ca006a2d00003a0000200541106a41026a200541d1006a2d00003a00002005410c6a41026a200541d8006a2d00003a000020052005413a6a2f01003b011c2005200541c1006a2f00003b01182005200541c8006a2f01003b01142005200541cf006a2f00003b01102005200541d6006a2f01003b010c200541086a41026a200541df006a2d00003a00002005200541dd006a2f00003b0108410121020b200020023a0000200020052f01243b0001200041036a20052d00263a0000200041046a2004360000200041086a20052f01203b00002000410b6a20013600002000410f6a20052f011c3b0000200041126a2008360000200041166a20052f01183b00002000410a6a200541206a41026a2d00003a0000200041116a2005411c6a41026a2d00003a0000200041186a200541186a41026a2d00003a0000200041196a2009360000200041206a200a360000200041276a200b3600002000412e6a200c3600002000411f6a200541146a41026a2d00003a00002000411d6a20052f01143b0000200041266a200541106a41026a2d00003a0000200041246a20052f01103b00002000412d6a2005410c6a41026a2d00003a00002000412b6a20052f010c3b0000200041346a200541086a41026a2d00003a0000200041326a20052f01083b0000200041396a2006370000200041356a200d36000020071039200541f0006a24000f0b41b9cfc000412e200541286a41e8cfc00041f8cfc000103d000b150020002002ad4220862001ad84200310074101460b040010080b18002001ad4220862000ad842003ad4220862002ad84100b0b1d0020002002ad4220862001ad842004ad4220862003ad84100c10b8010b1d0020002002ad4220862001ad842004ad4220862003ad84100d10b8010b22002001ad4220862000ad842003ad4220862002ad842005ad4220862004ad84100e0b3e002002ad4220862001ad84100f2101200041086a2202420037000020004200370000200020012900003700002002200141086a290000370000200110390b3e002002ad4220862001ad8410112101200041086a2202420037000020004200370000200020012900003700002002200141086a290000370000200110390b1d01017e2001ad4220862000ad841012220029000021022000103920020b0d00200141daedcd004102104c0b8b0301037f230041c0006b22022400200028020021034101210002402001280218220441c79cc000410c2001411c6a280200220128020c1100000d0002400240200328020822000d0020032802002200200328020428020c11040042f4f99ee6eea3aaf9fe00520d012002200036020c2002410b36021420022002410c6a360210410121002002413c6a41013602002002420237022c200241d49cc0003602282002200241106a36023820042001200241286a103b0d020c010b2002200036020c2002410c36021420022002410c6a360210410121002002413c6a41013602002002420237022c200241d49cc0003602282002200241106a36023820042001200241286a103b0d010b200328020c2100200241106a41146a4102360200200241106a410c6a410236020020022000410c6a3602202002200041086a3602182002410436021420022000360210200241286a41146a41033602002002420337022c200241e49cc0003602282002200241106a36023820042001200241286a103b21000b200241c0006a240020000b870401097f230041206b220224000240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b200410382206450d020b2002410036020820022004360204200220063602002003200210790240024020030d0020022802082104200228020021070c010b20052003410c6c6a210820052106034020062802002109200641086a280200220420021079024020022802042002280208220a6b20044f0d002002200a200410772002280208210a0b20022802002207200a6a2009200410d40b1a2002200a20046a22043602082006410c6a22062008470d000b0b200228020421082004ad4220862007ad8410132104200241186a22064200370300200241106a220a4200370300200241086a22094200370300200242003703002009200441086a290000370300200a200441106a2900003703002006200441186a2900003703002002200429000037030020041039200041186a2006290300370000200041106a200a290300370000200041086a20092903003700002000200229030037000002402008450d00200710390b02402003450d002003410c6c21062005210403400240200441046a280200450d00200428020010390b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d00200510390b200241206a24000f0b1034000b1032000b0e002001ad4220862000ad8410140b0e002001ad4220862000ad8410150b130020002002ad4220862001ad84101610b8010b5601017f4104210502400240024002400240200041ff0171417f6a0e050001020304000b410021050c030b410121050c020b410221050c010b410321050b20052002ad4220862001ad842004ad4220862003ad84102d0b070010174101460b130020004101472002ad4220862001ad8410180b8b0101017f230041206b22062400200641086a200310ba0120004101472002ad4220862001ad84200641186a200641106a200628020822014101461b2903002005ad4220862004ad841019210202402001450d002006280210450d00200628020c10390b024020032802002201450d00200341046a280200450d00200110390b200641206a240020024101460b1800200020014101472003ad4220862002ad84101a10b8010b1d0020004101472002ad4220862001ad842004ad4220862003ad84101b0bbf0403017f017e087f230041306b220124000240101c2202422088a72203450d002002a722042d0000210520012003417f6a36020c2001200441016a360208410021060240024002400240024020050e020001050b200141206a200141086a10b90120012802202206450d04200141286a2802002107200128022421082001200141086a10c10120012802000d0320012802042205200128020c410c6e2203200320054b1bad420c7e2202422088a70d012002a72209417f4c0d010240024020090d004104210a0c010b20091038220a450d030b41002103200141003602182001200a36021020012009410c6e36021402402005450d000340200141206a200141086a10b9010240200128022022090d002001280210210902402003450d002003410c6c21052009210303400240200341046a280200450d00200328020010390b2003410c6a2103200541746a22050d000b0b20012802142203450d062003410c6c450d06200910390c060b20012902242102024020032001280214470d00200141106a200310da012001280210210a200128021821030b200a2003410c6c6a22032002370204200320093602002001200128021841016a22033602182005417f6a22050d000b2001280210210a0b200a450d03200129021421020b2000200836020420002006360200200041106a20023702002000410c6a200a360200200041086a200736020020041039200141306a24000f0b1034000b1032000b2008450d00200610390b41b9cfc000412e200141206a41e8cfc00041f8cfc000103d000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad420c7e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a410436020020022001410c6c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410c6e360200200241206a24000f0b1034000b6801047f101d210120004200370000200041186a22024200370000200041106a22034200370000200041086a22044200370000200020012900003700002004200141086a2900003700002003200141106a2900003700002002200141186a290000370000200110390b850103027f017e027f230041106b22012400024002400240200035020842208620002802002202ad84101e2203428080808010540d00410021042003a722052d00000e020201000b41b9cfc000412e200141086a41e8cfc00041f8cfc000103d000b410121040b200510390240200041046a280200450d00200210390b200141106a240020040b0400101f0b31002001ad4220862000ad84200235020842208620022802002200ad8410200240200241046a280200450d00200010390b0b130020002002ad4220862001ad84102110b8010b0e002001ad4220862000ad8410220b0e002001ad4220862000ad8410230b040010240b11002001ad4220862000ad8410254101460b130020002002ad4220862001ad84102610b8010b130020002002ad4220862001ad84102710b8010b940102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510282207422088a72203450d0041002105024002402007a722022d00000e020100020b2003417f6a4104490d0120022800012101410121050b200210392000200136020420002005360200200641106a24000f0b41b9cfc000412e200641086a41e8cfc00041f8cfc000103d000b040010290b4002017e017f02400240102a2201422088a722020d004100210220004100280284ee4d3602000c010b20002001a73602000b20002002360208200020023602040b18002001ad4220862000ad842003ad4220862002ad84102b0b0400102c0bd30304017f027e077f027e230041106b220324002002290300210420012903002105200141106a2106200228021021070240200141146a280200200141186a220828020022096b200241186a280200220a4f0d0020062009200a10ec01200828020021090b20012802102009410c6c6a2007200a410c6c10d40b1a20082009200a6a3602004100210820024100360218200341086a200641086a280200360200200320062902003703002001411c6a2106200228021c210b0240200141206a280200200141246a220c28020022096b200241246a280200220a4f0d0020062009200a10ec01200c28020021090b200128021c2009410c6c6a200b200a410c6c10d40b1a20024100360224200c2009200a6a3602002002290308210d2001290308210e024020012d0028450d0020022d002841004721080b20002003290300370210200020083a00282000200629020037021c200041186a200341086a280200360200200041246a200641086a2802003602002000200d200e200e200d561b3703082000427f200520047c220d200d2005541b3703000240200241146a2802002201450d002001410c6c450d00200710390b0240200241206a2802002201450d002001410c6c450d00200b10390b200341106a24000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad420c7e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a410436020020032001410c6c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410c6e360200200341206a24000f0b1034000bc40201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002d00002103410021000340200220006a41ff006a2003410f712204413072200441d7006a2004410a491b3a00002000417f6a21002003410476410f7122030d000b20004180016a22034181014f0d02200141f1c5c0004102200220006a4180016a410020006b104921000c010b02402003412071450d0020002d00002103410021000340200220006a41ff006a2003410f712204413072200441376a2004410a491b3a00002000417f6a21002003410476410f7122030d000b20004180016a22034181014f0d03200141f1c5c0004102200220006a4180016a410020006b104921000c010b20003100002001104621000b20024180016a240020000f0b200341800141e087c0001054000b200341800141e087c0001054000b040041010b9c0301057f230041c0006b220224002002420037020c4100210320024100280284ee4d3602082002410c36021c20022001410c6a3602202002200241206a3602182002200241086a3602242002413c6a41013602002002420137022c200241a4fec7003602282002200241186a360238200241246a41c0d6c000200241286a103b1a02400240024002400240024002402001280200417f6a0e050102030400010b200141086a280200210441042103200141046a28020021010c040b200141086a2802002104200141046a28020021010c030b200141086a2802002104200141046a28020021012002280210210520022802082106410121030c030b200141086a2802002104200141046a28020021012002280210210520022802082106410221030c020b200141086a2802002104200141046a28020021012002280210210520022802082106410321030c010b20022802102105200228020821060b200220033a0029200241003a002820032004ad4220862001ad842005ad4220862006ad84102d0240200228020c450d00200228020810390b200241c0006a24000b5101027f02402000280200220341046a280200200341086a220428020022006b20024f0d002003200020021077200428020021000b200328020020006a2001200210d40b1a2004200020026a36020041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41c0d6c000200241086a103b2101200241206a240020010bc70801027f230041106b2202240002400240024002400240024002400240024020002d00000e080102030405060700010b2002200128021841e6d6c000410a2001411c6a28020028020c1100003a000820022001360200200241003a000920024100360204410121012002200041016a36020c20022002410c6a41f0d6c00010651a20022d000821000240200228020422030d00200021010c080b200041ff01710d07024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d080b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c070b2002200128021841f7d8c00041052001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a4180d7c00010651a20022d0008210120022802042203450d06200141ff017121004101210120000d06024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d070b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c060b20012802184190d7c000410c2001411c6a28020028020c11000021010c050b2001280218419cd7c00041092001411c6a28020028020c11000021010c040b20024280808080104200200128021841a5d7c00041062001411c6a28020028020c1100001b2001ad84370300410121012002200041016a36020c200241b4d3cc0041052002410c6a41acd7c000105f21032002200041026a36020c200341bcd7c00041052002410c6a41acd7c000105f21032002200041046a36020c200341bdaec50041072002410c6a41c4d7c000105f22002d00042103024020002d00050d00200321010c040b200341ff01710d030240200228020022012d0000410471450d00200128021841bc9ec00041012001411c6a28020028020c11000021010c040b200128021841bd9ec00041022001411c6a28020028020c11000021010c030b200128021841d4d7c00041112001411c6a28020028020c11000021010c020b200128021841e5d7c000410b2001411c6a28020028020c11000021010c010b2002200128021841f0d7c00041052001411c6a28020028020c1100003a000820022001360200200241003a000920024100360204410121012002200041016a36020c20022002410c6a41f8d7c00010651a20022d000821000240200228020422030d00200021010c010b200041ff01710d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bc6010002400240024002400240024020002802002d00000e06010203040500010b20012802184188d8c00041062001411c6a28020028020c1100000f0b2001280218418ed8c00041072001411c6a28020028020c1100000f0b20012802184195d8c00041082001411c6a28020028020c1100000f0b2001280218419dd8c000410c2001411c6a28020028020c1100000f0b200128021841a9d8c000410c2001411c6a28020028020c1100000f0b200128021841b5d8c000410c2001411c6a28020028020c1100000b690002400240024020002802002d00000e03010200010b200128021841c1d8c000410e2001411c6a28020028020c1100000f0b200128021841cfd8c00041092001411c6a28020028020c1100000f0b200128021841d4c6c30041082001411c6a28020028020c1100000b9f0201027f230041106b220224000240024020002802002200280200450d002002200128021841d0ecc60041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41d8d8c00010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b200128021841d4ecc60041042001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bde0101057f200041ffff03200041ffff03491b22032000413e2003413e491b22006b21042003413f20032000461b20016a2105200241086a2101200241046a210641012103034002400240200341ff01714102460d0020034101712100410021032000450d00200521070c010b024002402004450d00200441ff014b0d012004417f6a210741022103410021040c020b0f0b200441817e6a210441ff012107410221030b0240200628020020012802002200470d002002200041011077200128020021000b2001200041016a360200200228020020006a20073a00000c000b0bbc0301057f0240024002402001450d000240200028022c220220014b0d0002400240200028020022014125490d002000410c6a220228020021010c010b200021020b02402001450d00200241003602000b2000410036022c0f0b200220016b2203410176200341017122046a210202400240200028020022014125490d002000410c6a28020021050c010b200121050b0240200220054f0d002000410c6a2106200220056b41016a210203400240024020014125490d0020062802002101200621050c010b200021050b02402001450d0020052001417f6a3602000b2002450d01200241016a2102200028020021010c000b0b2000200336022c2004450d0002400240200028020022014125490d002000410c6a28020021020c010b200121020b2002417f6a21020240024020014125490d002000410c6a2802002105200041086a28020021060c010b200041056a2106200121050b200520024d0d010240024020014125490d002000410c6a2802002101200041086a28020021000c010b200041056a21000b200120024d0d02200020026a200620026a2d00004170713a00000b0f0b2002200541d4dac000103c000b2002200141e4dac000103c000bb00e010f7f230041106b22042400024002400240024002400240024002400240024020010d00410021010c010b200141086a28020022054101762106200128020421070240024002402005410171450d00200720064b0d01200620074184dcc000103c000b20072006490d03200720066b2108200128020020066a21090c010b2001280200220120066a2d0000410f71210a0240024020002d002c4101710d00024002402000280200220b4125490d002000410c6a220c280200210d200041086a280200210e0c010b200041056a210e200b210d2000210c4124210b0b0240200d200b470d0020042000410110f901024020042802004101470d00200441086a2802000d0741f8d2cd004111418cd3cd001035000b2000410c6a220c280200210d200041086a280200210e0b200e200d6a200a4104743a0000200c200c28020041016a3602000c010b024002402000280200220d4125490d002000410c6a280200210d200041086a280200210c0c010b200041056a210c0b200c450d05200d450d05200d200c6a417f6a220d200d2d0000200a723a00000b2007200641016a22066b2108200120066a21092000200028022c41016a36022c0b02400240200028020022014125490d002000410c6a28020021060c010b200121060b024002402006410174200028022c470d00024020014125490d002000410c6a28020021010b20042000200810f901024020042802004101470d00200441086a2802000d0541f8d2cd004111418cd3cd001035000b02400240200028020022064125490d002000410c6a28020022062001490d0c200041086a280200210a0c010b20062001490d0b200041056a210a0b200a20016a220a20086a200a200620016b10d50b1a200a2009200810d40b1a0240024020002802004125490d002000410c6a21010c010b200021010b2001200620086a3602000c010b0240024020014125490d002000410c6a28020021060c010b200121060b2008450d002006417f6a21060240024020014125490d002000410c6a280200210a200041086a280200210d0c010b200041056a210d2001210a0b200a20064d0d050240024020014125490d002000410c6a2802002101200041086a280200210a0c010b200041056a210a0b200120064d0d06200a20066a200d20066a2d00004170713a000002400240200028020022014125490d002000410c6a2802002101200041086a280200210a0c010b200041056a210a0b200120064d0d07200a20066a220120012d000020092d0000410476723a000002402008417f6a220f450d002000410c6a2110200041056a211120084101200841014b1b417f6a2112410021010340024002400240024020082001460d0020122001460d01200920016a220b41016a210e024002402000280200220d4125490d00200028020c21062000280208210c2010210a0c010b200d21062000210a2011210c4124210d0b200b2d0000210b200e2d0000210e2006200d470d0320042000410110f90120042802004101470d02200441086a2802000d0941f8d2cd004111418cd3cd001035000b2008200841d4dbc000103c000b200141016a200841e4dbc000103c000b200028020c21062000280208210c2010210a0b200c20066a200b410474200e411874411c76723a0000200a200a28020041016a360200200f200141016a2201470d000b0b2009200f6a210c024002402000280200220a4125490d002000410c6a22062802002101200041086a280200210d0c010b200041056a210d200a2101200021064124210a0b200c2d0000210c02402001200a470d0020042000410110f901024020042802004101470d00200441086a2802000d0541f8d2cd004111418cd3cd001035000b2000410c6a22062802002101200041086a280200210d0b200d20016a200c4104743a00002006200628020041016a3602000b2000200028022c20084101746a36022c200741017420056b21010b02402002450d000240024020002d002c4101710d00024002402000280200220d4125490d002000410c6a220a2802002106200041086a280200210c0c010b200041056a210c200d21062000210a4124210d0b02402006200d470d0020042000410110f901024020042802004101470d00200441086a2802000d0641f8d2cd004111418cd3cd001035000b2000410c6a220a2802002106200041086a280200210c0b200c20066a20034104743a0000200a200a28020041016a3602000c010b02400240200028020022064125490d002000410c6a2802002106200041086a280200210a0c010b200041056a210a0b200a450d082006450d082006200a6a417f6a220620062d00002003723a00000b2000200028022c41016a36022c200141016a21010b200441106a240020010f0b2006200741f4dbc0001054000b1032000b41a8d9c000413a41e4d9c000105b000b2006200a41a4dbc000103c000b2006200141b4dbc000103c000b2006200141c4dbc000103c000b41a8d9c000413a41e4d9c000105b000b41d8ddc000411e41f8ddc0001035000bbe0301057f02400240200128020022034125490d002001410c6a2802002104200321050c010b41242105200321040b0240200520046b2002490d00200041003602000f0b024002400240200420026a22022004490d004100417f2002417f6a677620024102491b220441016a22052004490d000240024020034125490d002001410c6a2802002104200141086a2802002102200321060c010b200141056a210241242106200321040b200420054b0d0102400240200541244b0d000240200341244b0d00200041003602000f0b200141003a0004200141056a2002200410d40b1a20012004360200200210390c010b20062005460d0020051038210702400240200341244b0d0002402007450d0020072002200410d40b1a0c020b2000200536020420004101360200200041086a41013602000f0b2007450d042007200220052006200620054b1b10d40b1a200210390b200141013a0004200120053602002001410c6a2004360200200141086a20073602000b200041003602000f0b2000200536020420004101360200200041086a41003602000f0b41efd3cd0041204190d4cd001035000b2000200536020420004101360200200041086a41013602000b8e1101097f230041e0006b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141046a2802002204410174200141086a28020022056b20024b0d00200420054101762202490d01200041046a200128020020026a200420026b10fb01200020054101713602000c190b20054101762106200520026a22074101762108024020074101710d0020082006490d0220042008490d03200128020020066a210402400240200820066b220141244b0d00200041096a2004200110d40b1a410021040c010b2001417f4c0d05200110382202450d1120022004200110d40b2104200041106a20013602002000410c6a2004360200410121040b2000200136020420002005410171360200200041086a20043a00000c190b200841016a22072006490d04200820044f0d05200128020020066a210102400240200720066b220441244b0d00200341096a2001200410d40b1a410021010c010b2004417f4c0d04200410382206450d1020062001200410d40b2101200320043600102003200136000c410121010b200341306a41086a20013a0000200341396a22062003290009370000200341c1006a200341096a41086a290000370000200341c9006a200341196a290000370000200341d1006a200341216a290000370000200341d8006a200341286a2900003700002003200436023420032002410171220136023002402005410171220520014d0d000240024020044125490d00200341c0006a28020021010c010b200421010b2001417f6a2209450d162001417e6a210a41002101034002400240200441254922050d0020032802402102200328023c21070c010b20062107200421020b200220014d0d08200141016a21020240024020050d0020032802402108200328023c210b0c010b2006210b200421080b200820024d0d090240024020050d0020032802402104200328023c21050c010b200621050b200420014d0d0a200520016a200720016a2d0000410474200b20016a41016a2d0000411874411c76723a00000240200a2001460d0020032802342104200221010c010b0b02400240200328023422014125490d0020032802402104200328023c21050c010b20062105200121040b200420094d0d0a024020014125490d0020032802402101200328023c21060b200120094d0d0b200520096a2d00002101200620096a21060c170b200520014f0d17024002400240024020044125490d00200341306a41106a220128020022052004460d012003413c6a28020021040c120b4124210520044124460d01200341306a410472210120042105200621040c110b200341306a41106a2802002101200421050c010b200421010b20052001470d0d02400240200141016a22052001490d004100417f2005417f6a677620054102491b220541016a22012005490d000240024020044125490d00200341c0006a28020021052003413c6a2802002102200421080c010b4124210820042105200621020b200520014b0d0d200141244b0d01200441244d0d0f200341003a003820062002200510d40b1a20032005360234200210390c0f0b41f8d2cd004111418cd3cd001035000b20082001470d0c0c0d0b2002200441f8dcc0001054000b200620084188ddc0001055000b200820044188ddc000104b000b1034000b200620074198ddc0001055000b200720044198ddc000104b000b2001200241dcdfc000103c000b200141016a200841ecdfc000103c000b2001200441fcdfc000103c000b20092004418ce0c000103c000b20092001419ce0c000103c000b41efd3cd0041204190d4cd001035000b20011038210702400240200441244b0d002007450d0420072002200510d40b1a0c010b2007450d032007200220012008200820014b1b10d40b1a200210390b200341c0006a20053602002003413c6a2007360200200341013a0038200320013602340b200341c0006a220128020021052003413c6a28020021040b200420056a41003a00002001200128020041016a36020002400240200328023422044125490d00200341c0006a28020021010c010b200421010b024020014102490d002001417f6a210103402001417f6a210502400240200441254922020d0020032802402108200328023c21070c010b20062107200421080b200820054d0d030240024020020d0020032802402108200328023c210b0c010b2006210b200421080b200820014d0d040240024020020d0020032802402104200328023c21020c010b200621020b200420014d0d05200220016a200720016a417f6a2d0000410474200b20016a2d0000411874411c76723a0000200141014b2102200328023421042005210120020d000b0b0240024020044125490d00200341c0006a2204280200450d072003413c6a22052802002d0000210120042802002104200528020021060c010b2004450d0620032d003921010b2004450d042006200141f001714104763a00000c080b1032000b2001417f6a20084188dec000103c000b200120084198dec000103c000b2001200441a8dec000103c000b4100410041bce0c000103c000b4100410041ace0c000103c000b0240024020044125490d00200341c0006a2204280200450d052003413c6a22052802002d0000210120042802002104200528020021060c010b2004450d0420032d003921010b20040d0041004100419ce0c000103c000b200620014104743a00000b02400240200328023422014125490d00200341c0006a220428020021010c010b200341306a41047221040b02402001450d0020042001417f6a3602000b20002003290330370200200041286a200341306a41286a290300370200200041206a200341306a41206a290300370200200041186a200341306a41186a290300370200200041106a200341306a41106a290300370200200041086a200341306a41086a2903003702000b200341e0006a24000f0b41004100418ce0c000103c000bc30301087f230041106b22032400200041003a00042000410036020020032000200210f9010240024020032802004101470d00200341086a2802000d0141f8d2cd004111418cd3cd001035000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b02400240024020062004490d00200121080c010b2002210920012108024003402009450d01200720066a20082d00003a00002009417f6a2109200841016a21082004200641016a2206470d000b200421060c010b200520063602000c010b200520063602002008200120026a2201460d002000410c6a2105200041056a210a034002400240200028020022044125490d00200028020c210620002802082107200521090c010b2004210620002109200a2107412421040b20082d00002102024020062004470d0020032000410110f901024020032802004101470d00200341086a2802000d0441f8d2cd004111418cd3cd001035000b200028020c210620002802082107200521090b200720066a20023a00002009200928020041016a3602002001200841016a2208470d000b0b200341106a24000f0b1032000bb80101057f2001280208220241017621032001280204210402400240024002402002410171450d00200420034d0d034101210220012802002205200341016a22066a2101200520036a2d0000410f712105200621030c010b20042003490d01200128020020036a210141002105410021020b200020023a000c20002001360204200041003602002000410d6a20053a0000200041086a200420036b3602000f0b2003200441f4dbc0001054000b200320044184dcc000103c000ba80303027f017e037f230041b0176b22032400024002402002200128020441e0076e2204200420024b1bad42e0077e2205422088a70d002005a72206417f4c0d000240024020060d00410821070c010b200610382207450d020b4100210420034100360208200320073602002003200641e0076e3602040240024002402002450d00200341d00f6a41017221080340200341d00f6a200110fe0120032d00d00f2106200341f1076a200841df0710d40b1a2006410b460d02200341126a200341f1076a41df0710d40b1a024020042003280204470d002003200410ff0120032802002107200328020821040b2007200441e0076c6a220420063a0000200441016a200341126a41df0710d40b1a2003200328020841016a22043602082002417f6a22020d000b0b20002003290300370200200041086a200341086a2802003602000c010b200041003602002003280200210202402004450d00200441e0076c21062002210403402004108002200441e0076a2104200641a0786a22060d000b0b20032802042204450d00200441e0076c450d00200210390b200341b0176a24000f0b1034000b1032000be51403057f027e017f23004180146b2202240002400240200128020422030d002000410b3a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e0b000102030405060708090b0a0b200241a00c6a200110980220022802a00c2203450d13200241a80c6a280200210520022802a40c21042002200110c101024002402002280200450d00200241003602a00c0c010b200241a00c6a20012002280204109f0220022802a00c0d210b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d21200441f8036c450d21200310390c210b200241a00c6a200110980220022802a00c2203450d11200241a80c6a280200210520022802a40c2104200241086a200110c101024002402002280208450d00200241003602a00c0c010b200241a00c6a2001200228020c109f0220022802a00c0d1f0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d20200441f8036c450d20200310390c200b200241a00c6a200110980220022802a00c2203450d0f200241a80c6a280200210520022802a40c2104200241106a200110c101024002402002280210450d00200241003602a00c0c010b200241a00c6a20012002280214109f0220022802a00c0d1d0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d1f200441f8036c450d1f200310390c1f0b200241186a2001109a022002290318a70d11024020012802042203450d0020022903202107200128020022042d0000210520012003417f6a3602042001200441016a36020020050d00200241a00c6a200110980220022802a00c2201450d0020022902a40c2108200041106a2007370300200041086a2008370000200041046a2001360000200041033a00000c1f0b2000410b3a00000c1e0b200241a00c6a200110980220022802a00c2203450d11200241a00c6a41086a280200210520022802a40c2104200241a00c6a2001109902024020022903a00c4209510d00200041106a200241a00c6a41c80310d40b1a2000410c6a2005360000200041086a2004360000200041046a2003360000200041043a00000c1e0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d1d200441f8036c450d1d200310390c1d0b200241c0046a200110980220022802c0042203450d11200241c8046a280200210520022802c4042104200241c0046a200110990220022903c0044209510d0a200241f8006a200241c0046a41c80310d40b1a200241286a200110c101024002402002280228450d00200241003602c0040c010b200241c0046a2001200228022c10970220022802c0040d190b2000410b3a0000200241f8006a108d020c0b0b2006450d1120042d0001210520012003417e6a22063602042001200441026a36020041002109024002400240024020050e0403000102150b410121090c020b410221090c010b410321090b0240024020064108490d00200429000221072001200341766a36020420012004410a6a360200200241306a200110c10120022802300d012001280204220420022802342203490d012003417f4c0d140240024020030d00410121050c010b200310382205450d0820054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041d0076a2005360200200041106a4126360200200041086a2007370300200020093a0001200041063a0000200041d4076a2003ad22074220862007843702000c1d0b2000410b3a00000c1c0b2000410b3a00000c1b0b200241c8006a200110c10120022802480d12200228024c2103200241c0006a200110c10120022802400d1320022802442104200241386a200110c101024020022802380d00200228023c2101200041073a00002000410c6a2001360200200041086a2004360200200041046a20033602000c1b0b2000410b3a00000c1a0b200241d0006a200110c101024020022802500d0020022802542101200041083a0000200041046a20013602000c1a0b2000410b3a00000c190b200241e8006a200110c10120022802680d12200228026c2103200241e0006a200110c10120022802600d1320022802642104200241d8006a200110c101024020022802580d00200228025c2101200041093a00002000410c6a2001360200200041086a2004360200200041046a20033602000c190b2000410b3a00000c180b2000410b3a00000c170b200241a00c6a200110990220022903a00c4209510d01200241f8006a200241a00c6a41c80310d40b1a200241a00c6a200110fe0120022d00a00c2101200241c0046a200241a00c6a41017241df0710d40b1a2001410b460d0341e007103822030d020b1032000b2000410b3a00000c140b200320013a0000200341016a200241c0046a41df0710d40b1a200041086a200241f8006a41c80310d40b1a200041046a20033602002000410a3a00000c130b2000410b3a0000200241f8006a108d020c120b2000410b3a00000b02402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d10200441f8036c450d10200310390c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b2000410b3a00000c090b1034000b2000410b3a00000c070b2000410b3a00000c060b2000410b3a00000c050b2000410b3a00000c040b200041106a20022903c004370200200041186a200241c0046a41086a280200360200200241a00c6a41046a200241f8006a41c80310d40b1a200041053a0000200020022f00753b0001200041036a200241f7006a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600002000411c6a200241a00c6a41cc0310d40b1a0c030b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041023a0000200020022f00c0043b0001200041036a200241c0046a41026a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000c020b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041013a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000c010b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041003a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000b20024180146a24000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42e0077e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141e0076c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141e0076e360200200241206a24000f0b1034000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d0020021096020b0f0b200041086a108d02200041046a2202280200108002200228020010390bae0303027f017e037f230041d00b6b22032400024002402002200128020441e8036e2204200420024b1bad42e8037e2205422088a70d002005a72206417f4c0d000240024020060d00410821070c010b200610382207450d020b4100210420034100360210200320073602082003200641e8036e36020c0240024002402002450d00200341e8076a41017221080340200341e8076a200110820220032d00e807210620034181046a200841e70310d40b1a2006410b460d022003411a6a20034181046a41e70310d40b1a02402004200328020c470d00200341086a200410830220032802082107200328021021040b2007200441e8036c6a220420063a0000200441016a2003411a6a41e70310d40b1a2003200328021041016a22043602102002417f6a22020d000b0b20002003290308370200200041086a200341086a41086a2802003602000c010b200041003602002003280208210202402004450d00200441e8036c21062002210403402004108402200441e8036a2104200641987c6a22060d000b0b200328020c2204450d00200441e8036c450d00200210390b200341d00b6a24000f0b1034000b1032000be31403057f027e017f230041900c6b2202240002400240200128020422030d002000410b3a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e0b000102030405060708090b0a0b200241a8086a200110980220022802a8082203450d13200241b0086a280200210520022802ac0821042002200110c101024002402002280200450d00200241003602a8080c010b200241a8086a2001200228020410970220022802a8080d210b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d21200441f8036c450d21200310390c210b200241a8086a200110980220022802a8082203450d11200241b0086a280200210520022802ac082104200241086a200110c101024002402002280208450d00200241003602a8080c010b200241a8086a2001200228020c10970220022802a8080d1f0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d20200441f8036c450d20200310390c200b200241a8086a200110980220022802a8082203450d0f200241b0086a280200210520022802ac082104200241106a200110c101024002402002280210450d00200241003602a8080c010b200241a8086a2001200228021410970220022802a8080d1d0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d1f200441f8036c450d1f200310390c1f0b200241186a2001109a022002290318a70d11024020012802042203450d0020022903202107200128020022042d0000210520012003417f6a3602042001200441016a36020020050d00200241a8086a200110980220022802a8082201450d0020022902ac082108200041106a2007370300200041086a2008370000200041046a2001360000200041033a00000c1f0b2000410b3a00000c1e0b200241a8086a200110980220022802a8082203450d11200241a8086a41086a280200210520022802ac082104200241a8086a2001109902024020022903a8084209510d00200041106a200241a8086a41c80310d40b1a2000410c6a2005360000200041086a2004360000200041046a2003360000200041043a00000c1e0b2000410b3a000002402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d1d200441f8036c450d1d200310390c1d0b200241c0046a200110980220022802c0042203450d11200241c8046a280200210520022802c4042104200241c0046a200110990220022903c0044209510d0a200241f8006a200241c0046a41c80310d40b1a200241286a200110c101024002402002280228450d00200241003602c0040c010b200241c0046a2001200228022c10970220022802c0040d190b2000410b3a0000200241f8006a108d020c0b0b2006450d1120042d0001210520012003417e6a22063602042001200441026a36020041002109024002400240024020050e0403000102150b410121090c020b410221090c010b410321090b0240024020064108490d00200429000221072001200341766a36020420012004410a6a360200200241306a200110c10120022802300d012001280204220420022802342203490d012003417f4c0d140240024020030d00410121050c010b200310382205450d0820054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041186a2007370300200041106a41003a0000200041046a2005360100200020093a0001200041063a0000200041086a2003ad22074220862007843701000c1d0b2000410b3a00000c1c0b2000410b3a00000c1b0b200241c8006a200110c10120022802480d12200228024c2103200241c0006a200110c10120022802400d1320022802442104200241386a200110c101024020022802380d00200228023c2101200041073a00002000410c6a2001360200200041086a2004360200200041046a20033602000c1b0b2000410b3a00000c1a0b200241d0006a200110c101024020022802500d0020022802542101200041083a0000200041046a20013602000c1a0b2000410b3a00000c190b200241e8006a200110c10120022802680d12200228026c2103200241e0006a200110c10120022802600d1320022802642104200241d8006a200110c101024020022802580d00200228025c2101200041093a00002000410c6a2001360200200041086a2004360200200041046a20033602000c190b2000410b3a00000c180b2000410b3a00000c170b200241a8086a200110990220022903a8084209510d01200241f8006a200241a8086a41c80310d40b1a200241a8086a200110820220022d00a8082101200241c0046a200241a8086a41017241e70310d40b1a2001410b460d0341e803103822030d020b1032000b2000410b3a00000c140b200320013a0000200341016a200241c0046a41e70310d40b1a200041086a200241f8006a41c80310d40b1a200041046a20033602002000410a3a00000c130b2000410b3a0000200241f8006a108d020c120b2000410b3a00000b02402005450d00200541f8036c21002003210103402001108b02200141f8036a2101200041887c6a22000d000b0b2004450d10200441f8036c450d10200310390c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b2000410b3a00000c090b1034000b2000410b3a00000c070b2000410b3a00000c060b2000410b3a00000c050b2000410b3a00000c040b200041106a20022903c004370200200041186a200241c0046a41086a280200360200200241a8086a41046a200241f8006a41c80310d40b1a200041053a0000200020022f00753b0001200041036a200241f7006a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600002000411c6a200241a8086a41cc0310d40b1a0c030b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041023a0000200020022f00c0043b0001200041036a200241c0046a41026a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000c020b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041013a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000c010b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041003a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2005360000200041086a2004360000200041046a20033600000b200241900c6a24000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42e8037e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141e8036c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141e8036e360200200241206a24000f0b1034000b820801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041086a280200450d00200041046a28020010390b0f0b200041086a108d02200041046a2202280200108402200228020010390bb30404027f017e077f037e23004180016b22032400024002402002200128020441286e2204200420024b1bad42287e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b4100210720034100360210200320063602082003200441286e36020c0240024002402002450d00200341d8006a41017221080340200341d8006a200110860220032d00584101460d02200341386a41186a2204200841186a290000370300200341386a41106a2209200841106a290000370300200341386a41086a220a200841086a290000370300200320082900003703382001280204220b41074d0d022001200b41786a36020420012001280200220b41086a360200200341186a41086a220c200a290300370300200341186a41106a220a2009290300370300200341186a41186a2209200429030037030020032003290338370318200b290000210502402007200328020c470d00200341086a2007410110870220032802082106200328021021070b2006200741286c6a22042003290318370300200c290300210d200a290300210e2009290300210f20042005370320200441186a200f370300200441106a200e370300200441086a200d3703002003200741016a22073602102002417f6a22020d000b0b20002003290308370200200041086a200341086a41086a2802003602000c010b20004100360200200328020c2201450d00200141286c450d00200328020810390b20034180016a24000f0b1034000b1032000bed0201067f230041306b220241047221032001280204210441002105417f21060240034020042005460d012001200420066a36020420012001280200220741016a360200200320056a20072d00003a00002002200541016a22073602002006417f6a21062007210520074120470d000b2002200241196a220528000036022820022002411c6a28000036002b200241206a2802002101200241156a28000021062002410e6a2801002107200228002b210420022800072103200041036a20022d00063a0000200020022f01043b0001200041046a20033600002000410b6a2007360000200041086a2002410b6a2f00003b00002000410a6a2002410d6a2d00003a0000200041126a20063600002000410f6a200241126a2f01003b0000200041116a200241146a2d00003a0000200041166a20052f00003b0000200041186a2002411b6a2d00003a00002000411d6a2001360000200041196a2004360000200041003a00000f0b200041013a00000bd70102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42287e2205422088a74541037421022005a721040240024020010d00200341003602100c010b200341106a41086a41083602002003200141286c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141286e360200200341206a24000f0b1034000bc71508027f017e0f7f017e017f037e017f027e230041d0176b22032400024002400240024002400240200220012802002802044198046e2204200420024b1bad4298047e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410382206450d010b2001200128020441016a22073602042003410036024020032006360238200320044198046e36023c200720012802084b0d042002450d03200341d8136a410c6a2108200341d8136a41046a2109200341e00f6a410472210a200341b8136a210b200341e00f6a410c6a210c410021074100210d0240034020012802002204280204220e450d012004280200220f2d000021102004200e417f6a3602042004200f41016a3602004100210e0240024002400240024002400240024002400240024002400240024002400240024020100e080300010205060708120b200341d8136a200110890220032802d813220f450d0820032802e013210420032802dc132110200341d8136a2001108a02024020032903d81322054209510d0020032802e0132111200341cc086a200841bc0310d40b1a4101210e200f21122010211320042114200521150c030b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0e201041f8036c450d0e200f10390c0e0b200341e00f6a200110890220032802e00f220f450d0720032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341086a2001108c02024002402003280208450d00200341003602e00f0c010b200341e00f6a2001200328020c10880220032802e00f0d0b0b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d07201041f8036c450d07200f10390c070b200341d8136a200110890220032802d813220f450d0620032802e013210420032802dc132110200341d8136a200110890220032802d813450d0120032802e013211120032903d81321154103210e200f211220102113200421140b200341dc046a200341cc086a41cc0310d40b1a0c0c0b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0a201041f8036c450d0a200f10390c0a0b200341e00f6a200110890220032802e00f220f450d0320032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341106a2001108c02024002402003280210450d00200341003602e00f0c010b200341e00f6a2001200328021410880220032802e00f0d090b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d03201041f8036c450d03200f10390c030b200341e00f6a200110890220032802e00f220f450d0220032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341186a2001108c02024002402003280218450d00200341003602e00f0c010b200341e00f6a2001200328021c10880220032802e00f0d070b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d02201041f8036c450d02200f10390c020b200341206a2001108e024108210e410121042003290320a70d0720032903282105200341d8136a2001108a0220032903d8134209510d07200341e00f6a200341d8136a41c80310d40b1a200341d8136a200110890220032802d813220f450d0220032802e013211420032802dc13211320032802e00f2111200341cc086a200a41c40310d40b1a4106210e41002104200f2112200521150c060b200341d8136a2001108f0220032802d813410c460d00200341e00f6a200341d8136a41f80310d40b1a024020012802002204280204220e4108490d002004280200220f29000021052004200e41786a3602042004200f41086a36020020012802002204280204220e4108490d002004280200220f29000021172004200e41786a3602042004200f41086a36020020012802002204280204220e450d002004280200220f2d000021102004200e417f6a3602042004200f41016a3602004100210f0240024020100e020100020b4101210f0b200341306a2001108c0220032802300d00200341d8136a2001200328023410900220032802d8132210450d0020032802e013211420032802dc13211320032903e00f211520032802e80f2111200341cc086a200c41cc0310d40b1a200341a8086a41186a200b41186a290300370300200341a8086a41106a200b41106a290300370300200341a8086a41086a200b41086a2903003703002003200b2903003703a8084107210e41002104201021122017211820052119200f211a0c070b200341e00f6a108b020b4108210e410121040c050b200341e00f6a108d020c040b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4102210e41002104200f211220102113201621140c020b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4105210e41002104200f211220102113201621140c010b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4104210e41002104200f211220102113201621140b0b200341dc046a200341cc086a41cc0310d40b1a200341b8046a41186a200341a8086a41186a290300370300200341b8046a41106a200341a8086a41106a290300370300200341b8046a41086a200341a8086a41086a290300370300200320032903a8083703b80420040d020b200d41016a210d200341ec006a200341dc046a41cc0310d40b1a200341c8006a41186a220f200341b8046a41186a290300370300200341c8006a41106a2210200341b8046a41106a290300370300200341c8006a41086a2216200341b8046a41086a290300370300200320032903b80437034802402007200328023c470d00200341386a200710910220032802382106200328024021070b200620074198046c6a22042011360018200420153700102004201436000c20042013360008200420123600042004201a3a00012004200e3a00002004411c6a200341ec006a41cc0310d40b1a2016290300210520102903002117200f290300211b2003290348211c200420183700900420042019370088042004201c3700e80320044180046a201b370000200441f8036a2017370000200441f0036a20053700002003200328024041016a2207360240200d2002460d040c000b0b20004100360200200328023821062007450d0520074198046c2101200621040340200410920220044198046a2104200141e87b6a22010d000c060b0b1032000b1034000b200128020421070b2000200329033837020020012007417f6a360204200041086a200341386a41086a2802003602000c020b200041003602000b200328023c2204450d0020044198046c450d00200610390b200341d0176a24000b890403037f017e037f230041800c6b22022400200241086a2001108c02024002402002280208450d00200041003602000c010b0240024002400240200228020c2203200128020028020441f8036e2204200420034b1bad42f8037e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b2001200128020441016a220736020420024100360218200220063602102002200441f8036e360214200720012802084b0d02024002402003450d0020024188086a410472210841002104034020024188086a2001108f02200228028808210720024194046a200841f40310d40b1a2007410c460d02200241206a20024194046a41f40310d40b1a024020042002280214470d00200241106a200410b50920022802102106200228021821040b2006200441f8036c6a22042007360200200441046a200241206a41f40310d40b1a2002200228021841016a22043602182003417f6a22030d000b200128020421070b2000200229031037020020012007417f6a360204200041086a200241106a41086a2802003602000c050b20004100360200200228021021062004450d03200441f8036c21072006210403402004108b02200441f8036a2104200741887c6a22070d000c040b0b1034000b1032000b200041003602000b20022802142204450d00200441f8036c450d00200610390b200241800c6a24000b836c1c087f017e0a7f017e057f017e017f017e047f017e0a7f017e057f017e017f017e047f017e0a7f017e057f017e017f017e047f017e0a7f017e230041e0006b22022400024002402001280200220328020422040d00200042093703000c010b200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e09000102030405060709080b200042003703000c3a0b200241286a2001109e08024020022d0028410a460d0020002002290328370308200041386a200241286a41306a290300370300200041306a200241286a41286a290300370300200041286a200241286a41206a290300370300200041206a200241286a41186a290300370300200041186a200241286a41106a290300370300200041106a200241306a290300370300200042013703000c3a0b200042093703000c390b200241286a2001109e0820022d00282203410a460d11200241266a220720022d002b3a0000200220022f00293b0124200241306a22082802002105200241286a410c6a2802002106200241286a41106a2209290300210a200241286a41186a220b280200210c200241c4006a280200210d200241286a41206a220e280200210f200241286a41246a2802002110200241286a41286a22112802002112200241286a412c6a2802002113200241286a41306a22142903002115200228022c2104200241286a2001109e08024020022d0028410a460d00200041c0006a2002290328370300200041f0006a2014290300370300200041e8006a2011290300370300200041e0006a200e290300370300200041d8006a200b290300370300200041d0006a2009290300370300200041c8006a2008290300370300200020033a0008200020022f01243b00092000410b6a20072d00003a0000200041386a2015370300200041346a2013360200200041306a20123602002000412c6a2010360200200041286a200f360200200041246a200d360200200041206a200c360200200041186a200a370300200041146a2006360200200041106a20053602002000410c6a2004360200200042023703000c390b20004209370300024002400240024002402003410f710e093d3d0001023d3d033d040b20104101470d3c2013450d3c201210390c3c0b20044101470d3b2006450d3b200510390c3b0b200c4101470d3a200f450d3a200d10390c3a0b2005450d39200410390c390b20044101470d382006450d38200510390c380b200241286a2001109e0820022d00282203410a460d11200241206a41026a20022d002b3a0000200220022f00293b0120200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d0e200241246a41026a20022d002b3a0000200220022f00293b01242004280200211a200528020021052006290300211b200c28020021062010280200211c200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2104200241286a2001109e08024020022d0028410a460d00200041f8006a2002290328370300200041a8016a200241286a41306a290300370300200041a0016a200241286a41286a29030037030020004198016a200241286a41206a29030037030020004190016a200241286a41186a29030037030020004188016a200241286a41106a29030037030020004180016a200241306a290300370300200020033a0008200020022f01203b00092000410b6a200241206a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201c360200200041d8006a2006360200200041d0006a201b370300200041cc006a2005360200200041c8006a201a360200200041c4006a2004360200200020022f01243b0041200041c3006a200241246a41026a2d00003a0000200042033703000c380b20004209370300024002400240024002402008410f710e09141400010214140314040b200c4101470d13200f450d13201310390c130b20044101470d122005450d12201a10390c120b20064101470d112010450d11201c10390c110b201a450d10200410390c100b20044101470d0f2005450d0f201a10390c0f0b200241286a2001109e0820022d00282203410a460d112002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d12200241206a41026a20022d002b3a0000200220022f00293b01202004280200211a2005280200211c2006290300211b200c28020021062010280200211e200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2105200241286a2001109e0820022d00282204410a460d0b200241246a41026a221f20022d002b3a0000200220022f00293b0124200241306a22202802002112200241286a410c6a2802002107200241286a41106a22212903002122200241286a41186a22232802002124200241c4006a2802002125200241286a41206a22262802002127200241286a41246a2802002128200241286a41286a2229280200212a200241286a412c6a280200212b200241286a41306a222c290300212d200228022c210d200241286a2001109e08024020022d0028410a460d00200041b0016a2002290328370300200041e0016a202c290300370300200041d8016a2029290300370300200041d0016a2026290300370300200041c8016a2023290300370300200041c0016a2021290300370300200041b8016a2020290300370300200020033a0008200020022f011c3b00092000410b6a2002411c6a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2006360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01203b0041200041c3006a200241206a41026a2d00003a0000200020022f01243b0079200041fb006a201f2d00003a0000200041a8016a202d370300200041a4016a202b360200200041a0016a202a3602002000419c016a202836020020004198016a202736020020004194016a202536020020004190016a202436020020004188016a202237030020004184016a200736020020004180016a2012360200200041fc006a200d360200200042043703000c370b20004209370300024002400240024002402004410f710e09111100010211110311040b20284101470d10202b450d10202a10390c100b200d4101470d0f2007450d0f201210390c0f0b20244101470d0e2027450d0e202510390c0e0b2012450d0d200d10390c0d0b200d4101470d0c2007450d0c201210390c0c0b200241286a2001109e0820022d00282203410a460d12200241186a41026a20022d002b3a0000200220022f00293b0118200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d132002411c6a41026a20022d002b3a0000200220022f00293b011c2004280200211a2005280200211c2006290300211b200c28020021062010280200211e200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2105200241286a2001109e0820022d00282204410a460d14200241206a41026a20022d002b3a0000200220022f00293b0120200241306a220d2802002123200241346a22122802002126200241386a22072903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109e0820022d00282220410a460d08200241246a41026a20022d002b3a0000200220022f00293b0124200d28020021322012280200211220072903002133202428020021072028280200213420272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c210d200241286a2001109e08024020022d0028410a460d00200041e8016a200229032837030020004198026a200241286a41306a29030037030020004190026a200241286a41286a29030037030020004188026a200241286a41206a29030037030020004180026a200241286a41186a290300370300200041f8016a200241286a41106a290300370300200041f0016a200241306a290300370300200020033a0008200020022f01183b00092000410b6a200241186a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2006360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f011c3b0041200041c3006a2002411c6a41026a2d00003a0000200020022f01203b0079200041fb006a200241206a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241246a41026a2d00003a0000200020022f01243b00b101200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2034360200200041c8016a2007360200200041c0016a2033370300200041bc016a2012360200200041b8016a2032360200200041b4016a200d360200200042053703000c360b20004209370300024002400240024002402020410f710e090e0e0001020e0e030e040b20244101470d0d2027450d0d202b10390c0d0b200d4101470d0c2012450d0c203210390c0c0b20074101470d0b2028450d0b203410390c0b0b2032450d0a200d10390c0a0b200d4101470d092012450d09203210390c090b200241286a2001109e0820022d00282203410a460d14200241146a41026a20022d002b3a0000200220022f00293b0114200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d15200241186a41026a20022d002b3a0000200220022f00293b01182004280200211a2005280200211c2006290300211b200c28020021062010280200211e200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2105200241286a2001109e0820022d00282204410a460d162002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a220d2802002123200241346a22122802002126200241386a22072903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109e0820022d00282220410a460d17200241206a41026a20022d002b3a0000200220022f00293b0120200d28020021322012280200213420072903002133202428020021072028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109e0820022d0028220d410a460d05200241246a41026a223720022d002b3a0000200220022f00293b0124200241306a2238280200212a200241286a410c6a280200211f200241286a41106a2239290300213a200241286a41186a223b280200213c200241c4006a280200213d200241286a41206a223e280200213f200241286a41246a2802002140200241286a41286a22412802002142200241286a412c6a2802002143200241286a41306a22442903002145200228022c2125200241286a2001109e08024020022d0028410a460d00200041a0026a2002290328370300200041d0026a2044290300370300200041c8026a2041290300370300200041c0026a203e290300370300200041b8026a203b290300370300200041b0026a2039290300370300200041a8026a2038290300370300200020033a0008200020022f01143b00092000410b6a200241146a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2006360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01183b0041200041c3006a200241186a41026a2d00003a0000200020022f011c3b0079200041fb006a2002411c6a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241206a41026a2d00003a0000200020022f01203b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2007360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a20372d00003a0000200020022f01243b00e90120004198026a204537030020004194026a204336020020004190026a20423602002000418c026a204036020020004188026a203f36020020004184026a203d36020020004180026a203c360200200041f8016a203a370300200041f4016a201f360200200041f0016a202a360200200041ec016a2025360200200042063703000c350b2000420937030002400240024002400240200d410f710e090b0b0001020b0b030b040b20404101470d0a2043450d0a204210390c0a0b20254101470d09201f450d09202a10390c090b203c4101470d08203f450d08203d10390c080b202a450d07202510390c070b20254101470d06201f450d06202a10390c060b200241286a2001109e0820022d00282203410a460d17200241106a41026a20022d002b3a0000200220022f00293b0110200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d18200241146a41026a20022d002b3a0000200220022f00293b01142004280200211a2005280200211c2006290300211b200c28020021062010280200211e200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2105200241286a2001109e0820022d00282204410a460d19200241186a41026a20022d002b3a0000200220022f00293b0118200241306a220d2802002123200241346a22122802002126200241386a22072903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109e0820022d00282220410a460d1a2002411c6a41026a20022d002b3a0000200220022f00293b011c200d28020021322012280200213420072903002133202428020021072028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109e0820022d0028220d410a460d1b200241206a41026a20022d002b3a0000200220022f00293b0120200241306a2225280200213b200241346a222a280200213e200241386a221f290300213a200241c0006a223c2802002141200241c4006a22402802002146200241c8006a223f2802002147200241cc006a22432802002144200241d0006a223d2802002148200241d4006a22422802002149200241d8006a22372903002145200228022c2139200241286a2001109e0820022d00282238410a460d02200241246a41026a20022d002b3a0000200220022f00293b01242025280200214a202a280200212a201f290300214b203c280200211f2040280200214c203f28020021402043280200213c203d28020021432042280200213f2037290300214d200228022c2125200241286a2001109e08024020022d0028410a460d00200041d8026a200229032837030020004188036a200241286a41306a29030037030020004180036a200241286a41286a290300370300200041f8026a200241286a41206a290300370300200041f0026a200241286a41186a290300370300200041e8026a200241286a41106a290300370300200041e0026a200241306a290300370300200020033a0008200020022f01103b00092000410b6a200241106a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2006360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01143b0041200041c3006a200241146a41026a2d00003a0000200020022f01183b0079200041fb006a200241186a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a2002411c6a41026a2d00003a0000200020022f011c3b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2007360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a200241206a41026a2d00003a0000200020022f01203b00e901200041a0026a20383a000020004198026a204537030020004194026a204936020020004190026a20483602002000418c026a204436020020004188026a204736020020004184026a204636020020004180026a2041360200200041f8016a203a370300200041f4016a203e360200200041f0016a203b360200200041ec016a2039360200200041a3026a200241246a41026a2d00003a0000200020022f01243b00a102200041d0026a204d370300200041cc026a203f360200200041c8026a2043360200200041c4026a203c360200200041c0026a2040360200200041bc026a204c360200200041b8026a201f360200200041b0026a204b370300200041ac026a202a360200200041a8026a204a360200200041a4026a2025360200200042073703000c340b20004209370300024002400240024002402038410f710e09080800010208080308040b203c4101470d07203f450d07204310390c070b20254101470d06202a450d06204a10390c060b201f4101470d052040450d05204c10390c050b204a450d04202510390c040b20254101470d03202a450d03204a10390c030b200042093703000c320b200241286a2001109e0820022d00282203410a460d1a2002410c6a41026a20022d002b3a0000200220022f00293b010c200241306a2204280200210b200241346a2205280200210e200241386a2206290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22072903002115200228022c2109200241286a2001109e0820022d00282208410a460d1b200241106a41026a20022d002b3a0000200220022f00293b01102004280200211a2005280200211c2006290300211b200c28020021062010280200211e200f28020021102013280200210c200d28020021132012280200210f2007290300211d200228022c2105200241286a2001109e0820022d00282204410a460d1c200241146a41026a20022d002b3a0000200220022f00293b0114200241306a220d2802002123200241346a22122802002126200241386a22072903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109e0820022d00282220410a460d1d200241186a41026a20022d002b3a0000200220022f00293b0118200d28020021322012280200213420072903002133202428020021072028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109e0820022d0028220d410a460d1e2002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a2225280200213b200241346a222a280200213e200241386a221f290300213a200241c0006a223c2802002141200241c4006a22402802002146200241c8006a223f2802002147200241cc006a22432802002144200241d0006a223d2802002148200241d4006a22422802002149200241d8006a22372903002145200228022c2139200241286a2001109e0820022d00282238410a460d1f200241206a41026a20022d002b3a0000200220022f00293b01202025280200214a202a280200214c201f290300214b203c280200211f2040280200214e203f28020021402043280200213c203d28020021432042280200213f2037290300214d200228022c212a200241286a2001109e0820022d00282225410a460d20200241246a41026a224f20022d002b3a0000200220022f00293b0124200241306a22502802002142200241286a410c6a2802002137200241286a41106a22512903002152200241286a41186a22532802002154200241c4006a2802002155200241286a41206a22562802002157200241286a41246a2802002158200241286a41286a2259280200215a200241286a412c6a280200215b200241286a41306a225c290300215d200228022c213d200241286a2001109e08024020022d0028410a460d0020004190036a2002290328370300200041c0036a205c290300370300200041b8036a2059290300370300200041b0036a2056290300370300200041a8036a2053290300370300200041a0036a205129030037030020004198036a2050290300370300200020033a0008200020022f010c3b00092000410b6a2002410c6a41026a2d00003a0000200041c0006a20083a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2006360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01103b0041200041c3006a200241106a41026a2d00003a0000200020022f01143b0079200041fb006a200241146a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241186a41026a2d00003a0000200020022f01183b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2007360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a2002411c6a41026a2d00003a0000200020022f011c3b00e901200041a0026a20383a000020004198026a204537030020004194026a204936020020004190026a20483602002000418c026a204436020020004188026a204736020020004184026a204636020020004180026a2041360200200041f8016a203a370300200041f4016a203e360200200041f0016a203b360200200041ec016a2039360200200041a3026a200241206a41026a2d00003a0000200020022f01203b00a102200041d8026a20253a0000200041d0026a204d370300200041cc026a203f360200200041c8026a2043360200200041c4026a203c360200200041c0026a2040360200200041bc026a204e360200200041b8026a201f360200200041b0026a204b370300200041ac026a204c360200200041a8026a204a360200200041a4026a202a360200200041db026a204f2d00003a0000200020022f01243b00d90220004188036a205d37030020004184036a205b36020020004180036a205a360200200041fc026a2058360200200041f8026a2057360200200041f4026a2055360200200041f0026a2054360200200041e8026a2052370300200041e4026a2037360200200041e0026a2042360200200041dc026a203d360200200042083703000c320b200042093703000240024002400240024002402025410f710e09313100010231310331040b20584101470d30205b450d30205a10390c300b203d4101470d2f20370d030c2f0b20544101470d2e2057450d2e205510390c2e0b2042450d2d203d10390c2d0b203d4101470d2c2037450d2c0b204210390c2b0b200042093703000b024002400240024002400240200d410f710e092b2b0001022b2b032b040b20444101470d2a2049450d2a204810390c2a0b20394101470d29203e0d030c290b20414101470d282047450d28204610390c280b203b450d27203910390c270b20394101470d26203e450d260b203b10390c250b200042093703000b0240024002400240024002402020410f710e09262600010226260326040b20244101470d252027450d25202b10390c250b20124101470d2420340d030c240b20074101470d232028450d23203610390c230b2032450d22201210390c220b20124101470d212034450d210b203210390c200b200042093703000b0240024002400240024002402004410f710e09222200010222220322040b202c4101470d212031450d21203010390c210b20214101470d2020260d030c200b20294101470d1f202f450d1f202e10390c1f0b2023450d1e202110390c1e0b20214101470d1d2026450d1d0b202310390c1c0b200042093703000b0240024002400240024002402008410f710e091f1f0001021f1f031f040b200c4101470d1e200f450d1e201310390c1e0b20054101470d1d201c0d030c1d0b20064101470d1c2010450d1c201e10390c1c0b201a450d1b200510390c1b0b20054101470d1a201c450d1a0b201a10390c190b200042093703000b0240024002400240024002402003410f710e092d2d0001022d2d032d040b20144101470d2c2019450d2c201810390c2c0b20094101470d2b200e0d030c2b0b20114101470d2a2017450d2a201610390c2a0b200b450d29200910390c290b20094101470d28200e450d280b200b10390c270b200042093703000c260b200042093703000c250b200042093703000c240b200042093703000c130b200042093703000c220b200042093703000c130b200042093703000c110b200042093703000c1f0b200042093703000c130b200042093703000c110b200042093703000c0f0b200042093703000c1b0b200042093703000c130b200042093703000c110b200042093703000c0f0b200042093703000c0d0b200042093703000c160b200042093703000c140b200042093703000c120b200042093703000c100b200042093703000c0e0b200042093703000c0c0b200042093703000c0a0b0240024002400240024002402003410f710e09151500010215150315040b20144101470d142019450d14201810390c140b20094101470d13200e0d030c130b20114101470d122017450d12201610390c120b200b450d11200910390c110b20094101470d10200e450d100b200b10390c0f0b0240024002400240024002402008410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20064101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09131300010213130313040b20144101470d122019450d12201810390c120b20094101470d11200e0d030c110b20114101470d102017450d10201610390c100b200b450d0f200910390c0f0b20094101470d0e200e450d0e0b200b10390c0d0b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402008410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20064101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09101000010210100310040b20144101470d0f2019450d0f201810390c0f0b20094101470d0e200e0d030c0e0b20114101470d0d2017450d0d201610390c0d0b200b450d0c200910390c0c0b20094101470d0b200e450d0b0b200b10390c0a0b0240024002400240024002402020410f710e09060600010206060306040b20244101470d052027450d05202b10390c050b20124101470d0420340d030c040b20074101470d032028450d03203610390c030b2032450d02201210390c020b20124101470d012034450d010b203210390b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402008410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20064101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e090c0c0001020c0c030c040b20144101470d0b2019450d0b201810390c0b0b20094101470d0a200e0d030c0a0b20114101470d092017450d09201610390c090b200b450d08200910390c080b20094101470d07200e450d070b200b10390c060b0240024002400240024002402038410f710e09060600010206060306040b203c4101470d05203f450d05204310390c050b202a4101470d04204c0d030c040b201f4101470d032040450d03204e10390c030b204a450d02202a10390c020b202a4101470d01204c450d010b204a10390b024002400240024002400240200d410f710e09060600010206060306040b20444101470d052049450d05204810390c050b20394101470d04203e0d030c040b20414101470d032047450d03204610390c030b203b450d02203910390c020b20394101470d01203e450d010b203b10390b0240024002400240024002402020410f710e09060600010206060306040b20244101470d052027450d05202b10390c050b20124101470d0420340d030c040b20074101470d032028450d03203610390c030b2032450d02201210390c020b20124101470d012034450d010b203210390b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402008410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20064101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09060600010206060306040b20144101470d052019450d05201810390c050b20094101470d04200e0d030c040b20114101470d032017450d03201610390c030b200b450d02200910390c020b20094101470d01200e450d010b200b10390b200241e0006a24000beb010002400240024002400240024002400240024020002802000e0b0808080800010203040506070b200041086a280200450d07200028020410390f0b200041086a280200450d06200028020410390f0b200041086a108d020f0b200041086a108d020f0b200041086a280200450d03200028020410390f0b0240200041086a280200450d00200028020410390b200041106a2d00004106490d02200041186a280200450d02200041146a28020010390f0b200041086a108d020c010b200041086a108d02200041d0036a2d00004106490d00200041d8036a280200450d00200041d4036a28020010390f0b0bcc0201067f02400240200128020022012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d0120012002417c6a3602042001200341046a36020020032f0001200341036a2d000041107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000bf0020002400240024002400240024002400240024020002802000e080700010203040506080b200041086a108a030f0b200041086a108a03200041c0006a108a030f0b200041086a108a03200041c0006a108a03200041f8006a108a030f0b200041086a108a03200041c0006a108a03200041f8006a108a03200041b0016a108a030f0b200041086a108a03200041c0006a108a03200041f8006a108a03200041b0016a108a03200041e8016a108a030f0b200041086a108a03200041c0006a108a03200041f8006a108a03200041b0016a108a03200041e8016a108a03200041a0026a108a030f0b200041086a108a03200041c0006a108a03200041f8006a108a03200041b0016a108a03200041e8016a108a03200041a0026a108a03200041d8026a108a030b0f0b200041086a108a03200041c0006a108a03200041f8006a108a03200041b0016a108a03200041e8016a108a03200041a0026a108a03200041d8026a108a0320004190036a108a030bad0404057f017e017f017e02400240200128020022012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a360200024002400240200441037122064103460d000240024020060e03030001030b41012106024020050d000c060b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d05200141fcff0371410276ad21070c030b410121060240200541034f0d000c050b20012002417c6a3602042001200341046a36020020032f0001200341036a2d000041107472410874200472220141808004490d042001410276ad21070c020b024002400240200441027622080e050002020201020b20054104490d042003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c050b20054108490d03200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c040b200441134b0d02200841046a21052002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c050b2003417f6a310000210920012002360204200120033602002002417f6a2102200341016a210320092004410374413871ad862007842107200441016a220441ff01712005490d000b2007427f412820084103746b413871ad885821060c030b2004410276ad21070b410021060c010b410121060b2000200737030820002006ad3703000be70d02067f027e230041b00b6b22022400024002402001280200220328020422040d002000410c3602000c010b200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024002400240024002400240024002400240024020060e0c000102030405060708090a0c0b0b200041003602000c130b200041013602000c120b200041023602000c110b200041033602000c100b20022001108c02024020022802000d0020012802002201280204220420022802042203490d002003417f4c0d0a0240024020030d00410121050c010b200310382205450d0e20054100200310d60b1a200128020421040b200420034f0d0b200510390b2000410c3602000c0f0b200241086a2001108c02024020022802080d00200128020022012802042204200228020c2203490d002003417f4c0d090240024020030d00410121050c010b200310382205450d0d20054100200310d60b1a200128020421040b200420034f0d0b200510390b2000410c3602000c0e0b200241e8076a2001108a02024020022903e8074209510d00200241a0046a200241e8076a41c80310d40b1a200241d0006a41046a200241a0046a41c80310d40b1a20004106360200200041046a200241d0006a41cc0310d40b1a0c0e0b2000410c3602000c0d0b200241e8076a2001108a02024020022903e8074209510d00200241a0046a200241e8076a41c80310d40b1a200241d0006a41046a200241a0046a41c80310d40b1a20004107360200200041046a200241d0006a41cc0310d40b1a0c0d0b2000410c3602000c0c0b200241286a2001108c020240024020022802280d00200128020022042802042205200228022c2203490d002003417f4c0d070240024020030d00410121060c010b200310382206450d0b20064100200310d60b1a200428020421050b200520034f0d01200610390b2000410c3602000c0c0b200620042802002207200310d40b21062004200520036b3602042004200720036a360200200241106a200110f5042002290310a7450d0a2000410c3602002003450d0b200610390c0b0b200241306a2001108c020240024020022802300d0020012802002205280204220420022802342203490d002003417f4c0d060240024020030d00410121060c010b200310382206450d0a20064100200310d60b1a200528020421040b200420034f0d01200610390b2000410c3602000c0b0b200620052802002207200310d40b21062005200420036b3602042005200720036a360200200241d0006a200110800b024020022d00504107460d00200041106a2002290350370300200041306a200241d0006a41206a290300370300200041286a200241d0006a41186a290300370300200041206a200241d0006a41106a290300370300200041186a200241d0006a41086a2903003703002000410c6a2003360200200041086a200336020020002006360204200041093602000c0b0b2000410c3602002003450d0a200610390c0a0b200241e8076a2001108a0220022903e8074209510d02200241a0046a200241e8076a41c80310d40b1a200241386a200110f50402402002290338a70d00200241c8006a290300210820022903402109200241d0006a41046a200241a0046a41c80310d40b1a2000410a360200200041046a200241d0006a41cc0310d40b1a200041d8036a2008370300200041d0036a20093703000c0a0b2000410c360200200241a0046a108d020c090b2000410c3602000c080b200241e8076a2001108a0220022903e8074209510d05200241a0046a200241e8076a41c80310d40b1a200241e8076a200110800b024020022d00e8074107460d00200041d0036a20022903e807370300200041f0036a20024188086a290300370300200041e8036a20024180086a290300370300200041e0036a200241f8076a290300370300200041d8036a200241f0076a290300370300200241d0006a41046a200241a0046a41c80310d40b1a2000410b360200200041046a200241d0006a41cc0310d40b1a0c080b2000410c360200200241a0046a108d020c070b2000410c3602000c060b1034000b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041086a2003ad220842208620088437020020002005360204200041043602000c040b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041086a2003ad220842208620088437020020002005360204200041053602000c030b1032000b2000410c3602000c010b200241106a41106a2903002108200229031821092000200636020420004108360200200041106a20093703002000410c6a2003360200200041086a2003360200200041186a20083703000b200241b00b6a24000be60303027f017e037f230041d00b6b22032400024002400240024002402002200128020028020441e8036e2204200420024b1bad42e8037e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b2001200128020441016a220736020420034100360210200320063602082003200441e8036e36020c200720012802084b0d02024002402002450d00200341e8076a4101722108410021040340200341e8076a200110a50220032d00e807210720034181046a200841e70310d40b1a2007410b460d022003411a6a20034181046a41e70310d40b1a02402004200328020c470d00200341086a200410830220032802082106200328021021040b2006200441e8036c6a220420073a0000200441016a2003411a6a41e70310d40b1a2003200328021041016a22043602102002417f6a22020d000b200128020421070b2000200329030837020020012007417f6a360204200041086a200341086a41086a2802003602000c050b20004100360200200328020821062004450d03200441e8036c21072006210403402004108402200441e8036a2104200741987c6a22070d000c040b0b1034000b1032000b200041003602000b200328020c2204450d00200441e8036c450d00200610390b200341d00b6a24000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad4298047e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a4108360200200220014198046c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a20014198046e360200200241206a24000f0b1034000bc50801027f0240024002400240024002400240024020002d00000e0707000102030405060b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041146a2802002202450d04200241f8036c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0320024198046c450d03200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0220024198046c450d02200028021010390f0b200041186a108d0202402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d01200241f8036c450d01200028020410390c010b200041106a108b0202402000410c6a2802002201450d00200041046a2802002102200141e8036c210103402002108402200241e8036a2102200141987c6a22010d000b0b200041086a2802002202450d00200241e8036c450d00200028020410390f0b0be60303027f017e037f230041d0166b22032400024002400240024002402002200128020028020441c0076e2204200420024b1bad42c0077e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b2001200128020441016a220736020420034100360210200320063602082003200441c0076e36020c200720012802084b0d02024002402002450d00200341900f6a4104722108410021040340200341900f6a200110940220032802900f2107200341d4076a200841bc0710d40b1a20074126460d02200341186a200341d4076a41bc0710d40b1a02402004200328020c470d00200341086a200410950220032802082106200328021021040b2006200441c0076c6a22042007360200200441046a200341186a41bc0710d40b1a2003200328021041016a22043602102002417f6a22020d000b200128020421070b2000200329030837020020012007417f6a360204200041086a200341086a41086a2802003602000c050b20004100360200200328020821062004450d03200441c0076c21072006210403402004109602200441c0076a2104200741c0786a22070d000c040b0b1034000b1032000b200041003602000b200328020c2204450d00200441c0076c450d00200610390b200341d0166a24000be5fc033a057f017e067f047e027f017e037f017e027f037e037f037e047f027e017f017e197f047e017f017e027f017e017f017e017f017e027f017e017f017e017f017e027f017e017f017e017f017e027f017e047f017e117f027e117f017e0f7f017e117f027e197f017e0a7f017e027f017e087f017e230041802d6b22022400024002402001280200220328020422040d00200041263602000c010b200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e6400010203040506070810090a0b1010100c0d28272625242322101010101010101010101010101010101021201f1e1d1c1b1a1918171010101010101016151413121010101010101010101010101010101010101010101010101010101010101010101011100b200128020022032802042204450d4a200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024002400240024020060e0a00010203040506070809580b2001280200220128020422044104490d5720012802002205280000210320012004417c6a3602042001200541046a3602002003418194ebdc034f0d57410121010c0c0b200241086a2001108c0220022802080d56200128020022042802042205200228020c2201490d562001417f4c0d410240024020010d00410121030c010b200110382203450d4320034100200110d60b1a200428020421050b20052001490d08200320042802002206200110d40b1a2004200520016b3602042004200620016a3602002001ad22074220862007842107410221010c0a0b2001280200220128020422034108490d552001280200220429000021072001200341786a3602042001200441086a360200410321010c0a0b200241106a2001108c0220022802100d5420012802002204280204220520022802142201490d542001417f4c0d3f0240024020010d00410121030c010b200110382203450d4120034100200110d60b1a200428020421050b20052001490d06200320042802002206200110d40b1a2004200520016b3602042004200620016a3602002001ad22074220862007842107410421010c080b200241186a2001108c0220022802180d53200128020022042802042205200228021c2201490d532001417f4c0d3e0240024020010d00410121030c010b200110382203450d4020034100200110d60b1a200428020421050b20052001490d05200320042802002206200110d40b1a2004200520016b3602042004200620016a3602002001ad22074220862007842107410521010c070b20024180236a200110f00420022802802322034102460d522002290284232107410621010c060b200241306a2001108c0220022802300d5120022802342208200128020028020441186e2203200320084b1bad42187e2207422088a70d3c2007a72204417f4c0d3c0240024020040d00410421030c010b200410382203450d3e0b2001200128020441016a2205360204200241003602882320022003360280232002200441186e360284230240200520012802084d0d0020022802802321040c510b02402008450d00410021090340200241286a2001108c020240024020022802280d00200128020022052802042206200228022c2204490d002004417f4c0d400240024020040d004101210a0c010b20041038220a450d42200a4100200410d60b1a2001280200220528020421060b024020062004490d00200a2005280200220b200410d40b210c2005200620046b3602042005200b20046a360200200241206a2001108c02024020022802200d0020012802002206280204220b20022802242205490d002005417f4c0d420240024020050d004101210d0c010b20051038220d450d44200d4100200510d60b1a20012802002206280204210b0b200b20054f0d03200d10390b2004450d010b200a10390b20022802802321042009450d53200941186c21032004210103400240200141046a280200450d00200128020010390b0240200141106a280200450d002001410c6a28020010390b200141186a2101200341686a2203450d540c000b0b2005ad22074220862007842107200d2006280200220a200510d40b210d2006200b20056b3602042006200a20056a36020002402009200228028423470d0020024180236a200910ff02200228028023210320022802882321090b2003200941186c6a220520043602042005200c360200200541106a20073702002005410c6a200d360200200541086a2004360200200220022802882341016a2209360288232008417f6a22080d000b2001280204210520022802802321030b20012005417f6a3602042003450d512002290284232107410721010c050b20024180236a200110f1042002280280232203450d502002290284232107410821010c040b200241386a2001108c0220022802380d4f200128020022052802042206200228023c2204490d4f2004417f4c0d3a0240024020040d00410121030c010b200410382203450d3c20034100200410d60b1a200528020421060b20062004490d01200320052802002208200410d40b1a2005200620046b3602042005200820046a36020002402001280200220128020422054104490d002004ad2207422086200784210720012802002206280000210420012005417c6a3602042001200641046a360200410921010c050b20040d010c4f0b200241c0006a2001108c0220022802400d4e20012802002204280204220520022802442201490d4e2001417f4c0d390240024020010d00410121030c010b200110382203450d3b20034100200110d60b1a200428020421050b200520014f0d010b200310390c4d0b200320042802002206200110d40b1a2004200520016b3602042004200620016a3602002001ad22074220862007842107410a21010b0b20004100360200200041186a2004360200200041106a20073702002000410c6a2003360200200041086a20013602000c4b0b200128020022032802042204450d46200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e030001034a0b20024180236a200110f2042002418c236a2802002204450d4920022002280081233602a00820022002280084233600a30820024190236a280200210520024194236a280200210320022d0080232109200228028823210a200241b8096a20024198236a41e40010d40b1a20024184246a280200210820024180236a4180016a2802002106200241fc236a280200210b200241a01b6a20024188246a41800110d40b1a20024180236a200110f3040240200228028423450d00200220022802a0083602a82c200220022800a3083600ab2c2002418c236a290200210e20022902842321072002280280232101200241d8176a200241b8096a41e40010d40b1a200241c8106a200241a01b6a41800110d40b1a4101210d0c4b0b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d00200410390b02402008450d00200841246c2103200b210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b2006450d49200641246c0d010c490b20024180236a200110f2042002418c236a2802002204450d4820022002280081233602a00820022002280084233600a30820024190236a280200210520024194236a280200210320022d0080232109200228028823210a200241b8096a20024198236a41e40010d40b1a20024184246a280200210820024180236a4180016a2802002106200241fc236a280200210b200241a01b6a20024188246a41800110d40b1a20024180236a200110f3040240200228028423450d00200220022802a0083602a82c200220022800a3083600ab2c2002418c236a290200210e20022902842321072002280280232101200241d8176a200241b8096a41e40010d40b1a200241c8106a200241a01b6a41800110d40b1a4102210d0c4a0b02402003450d00200341246c21032004210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b02402005450d00200541246c450d00200410390b02402008450d00200841246c2103200b210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b2006450d48200641246c450d480b200b10390c470b200128020022012802042204450d46200128020022032d0000210520012004417f6a22063602042001200341016a36020020054101470d4620064108490d46200329000121072001200441776a22053602042001200341096a36020020054108490d462003290009210e20012004416f6a22053602042001200341116a3602002005450d4620032d0011210c20012004416e6a3602042001200341126a3602004103210d4100210902400240200c0e03490001480b410121090c480b410221090c470b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241c8006a2001108e022002290348a70d002002290350210720004102360200200041086a20073703000c4a0b200041263602000c490b0240200128020022012802042204450d00200128020022082d0000210320012004417f6a220b3602042001200841016a3602000240024002400240024002400240024020030e050001020304080b200b4104490d072008280001210920012004417b6a3602042001200841056a3602004101210a0c040b20024180236a410472210a41002103417e21050340200b2003460d07200820036a220641016a2d000021092001200420056a3602042001200641026a360200200a20036a20093a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021032002419c236a2d000021052002418c236a290200210720024194236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220053a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b2006417f7320046a4104490d06200241af1b6a290000211020022900b71b210720022900a71b210e200820066a220541016a28000021082001200420066b417b6a3602042001200541056a360200200f420888a72104200f421888a721092010422088a72105200fa7210b2010a721064102210a0c040b200b4104490d052008280001210920012004417b6a3602042001200841056a3602004103210a0c020b20024180236a410472210a41002103417e21060340200b2003460d05200820036a220541016a2d000021092001200420066a3602042001200541026a360200200a20036a20093a00002002200341016a2205360280232006417f6a21062005210320054120470d000b200241a3236a2d000021032002419c236a2d0000210620024194236a29020021102002418c236a2902002107200229028423210f200241a01b6a411d6a200241a1236a2f00003b0000200220073703a81b200220103703b01b200220063a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b2005417f7320046a4104490d0420022800af1b210620022900b71b210720022900a71b210e200820056a220a41016a28000021082001200420056b220d417b6a3602042001200a41056a220c3602002004417b6a2005460d04200f421888a72109200f420888a721042010421888a72105200fa7210b200c2d0000210c2001200d417a6a3602042001200a41066a3602004104210a410021010240200c0e020400050b410121010c030b200b4104490d032008280001210920012004417b6a3602044105210a2001200841056a3602000b0b0b200020013a0025200020043b00062000200b3a00052000200a3a000420004103360200200041286a2008360200200041246a20033a00002000411c6a2007370200200041186a2005360200200041146a20063602002000410c6a200e370200200041086a20093602000c490b200041263602000c480b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024020060e0400010203060b20024180236a200110f40420022d00802322034105460d05200241b8096a41026a220620022d0083233a0000200241a01b6a41086a220820024194236a290200370300200241a01b6a41106a220b2002419c236a290200370300200220022f0081233b01b80920022002418c236a2902003703a01b20024180236a41086a28020021042002280284232105200241d8006a200110f50402402002290358a70d00200241d8006a41106a29030021072002290360210e200241d8176a41026a20062d00003a0000200241c8106a41086a2008290300370300200241c8106a41106a200b290300370300200220022f01b8093b01d817200220022903a01b3703c810200e422088a7210b2007422088a72109200ea721062007a72108410121010c490b20034102470d0520040d040c050b20024180236a200110f40420022d00802322034105460d04200241b8096a41026a20022d0083233a0000200241a01b6a41086a20024194236a290200370300200241a01b6a41106a2002419c236a290200370300200220022f0081233b01b80920022002418c236a2902003703a01b20024180236a41086a2802002104200228028423210520024188016a200110f504200229038801a70d0220024188016a41106a29030021072002290390012110200241f0006a200110f5042002290370a70d02200241f0006a41106a290300210f2002290378210e41022101200241d8176a41026a200241b8096a41026a2d00003a0000200241c8106a41086a200241a01b6a41086a290300370300200241c8106a41106a200241a01b6a41106a290300370300200220022f01b8093b01d817200220022903a01b3703c8102010422088a7210b2007422088a721092010a721062007a721080c470b20024180236a200110f40420022d00802322034105460d03200241ba096a20022d0083233a0000200241a01b6a41086a20024194236a290200370300200241a01b6a41106a2002419c236a290200370300200220022f0081233b01b80920022002418c236a22062902003703a01b20024180236a41086a22082802002104200228028423210520024180236a200110f404024020022d0080234105460d0020024198236a290300210f20024180236a41106a290300210e200241a0236a35020021072006280200210920082802002108200228028423210b2002280280232106200241a0016a200110f504024020022903a001a70d00200241a0016a41106a290300211120022903a8012110200241d8176a41026a200241b8096a41026a2d00003a0000200241c8106a41086a200241a01b6a41086a290300370300200241c8106a41106a200241a01b6a41106a290300370300200220022f01b8093b01d817200220022903a01b3703c810410321010c480b200641ff01714102470d002008450d00200b10390b20034102470d0320040d020c030b20024180236a200110f40420022d00802322034105460d02200241b8096a41026a220620022d0083233a0000200241a01b6a41086a220820024194236a290200370300200241a01b6a41106a220b2002419c236a290200370300200220022f0081233b01b80920022002418c236a2902003703a01b20024180236a41086a28020021042002280284232105200241b8016a200110f504024020022903b801a70d00200241b8016a41106a290300210720022903c001210e200241d8176a41026a20062d00003a0000200241c8106a41086a2008290300370300200241c8106a41106a200b290300370300200220022f01b8093b01d817200220022903a01b3703c810200e422088a7210b2007422088a72109200ea721062007a72108410421010c460b20034102470d0220040d010c020b20034102470d012004450d010b200510390b200041263602000c470b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241d0016a2001108c0220022802d0010d0020022802d4012205200128020028020441f0006e2203200320054b1bad42f0007e2207422088a70d312007a72203417f4c0d310240024020030d00410421080c010b200310382208450d330b2001200128020441016a2204360204200241003602c009200220083602b8092002200341f0006e3602bc090240200420012802084b0d00024002402005450d0020024180236a41086a210b41002103034020024180236a200110f60420022802842321042002280280232106200241a01b6a200b41e80010d40b1a2004450d02200241c8106a200241a01b6a41e80010d40b1a0240200320022802bc09470d00200241b8096a200310f70420022802b809210820022802c00921030b2008200341f0006c6a2203200436020420032006360200200341086a200241c8106a41e80010d40b1a200220022802c00941016a22033602c0092005417f6a22050d000b2001280204210420022802b80921080b20012004417f6a3602042008450d0220022902bc0921072000200836020420004105360200200041086a20073702000c490b20022802b80921082003450d002008200341f0006c6a2105200821010340024020012204410c6a2802002203450d0020042802042101200341246c210303400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b200441f0006a21010240200441086a2802002203450d00200341246c450d00200428020410390b20012005470d000b0b20022802bc092201450d00200141f0006c450d00200810390b200041263602000c460b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020041072112410021134100210802400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e1700010203040558060708090a0b0c0d0e0f101112131415180b20024180236a200110f40420022d0080234105460d17200241c8106a41086a20024194236a290200370300200241c8106a41106a2002419c236a29020037030020022002418c236a2902003703c81020024180236a41086a2802002109200228028423210c200228028023210b200241d8016a200110f50420022903d801a70d15200128020022032802042204450d15200241d8016a41106a290300211120022903e0012110200328020022052d0000210620032004417f6a360204410121122003200541016a36020042002107410021044200210f02400240024002400240024020060e0505000102031b0b42002107410121040c030b42002107410221040c020b20024180236a410472210a20012802002203280204210641002101417f2104034020062001460d19200328020022052d000021082003200620046a3602042003200541016a360200200a20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a2236a2d00002105200241a3236a2d0000210a2002419b236a2f0000210120024193236a290000210720022f018423210d2002280186232103200241a81b6a220420024192236a2d00003a0000200241b71b6a200241a1236a2d00003a0000200220073700a91b200220013b00b11b20022002419d236a2800003600b31b2002418a236a29010022144220882004290300220e422086842107200e422088210f20022903b01b210e2014a72108410321040c020b42002107410421040b4200210f0b200241b8096a41106a200241c8106a41106a290300370300200241b8096a41086a200241c8106a41086a290300370300200220022903c8103703b809200841087621130c570b200241f0016a200110f50420022903f001a70d1620022903f801220e42208820024180026a290300220f422086842107200f422088210f200ea722084108762113410221120c550b20024188026a200110f504200229038802a70d15200229039002220e42208820024198026a290300220f422086842107200f422088210f200ea722084108762113410321120c540b410421122001280200220128020422044104490d1420012802002205280000210320012004417c6a3602042001200541046a360200410021080c530b200241a0026a2001108c0220022802a0020d1320022802a40221032002418094ebdc03360284232002200336028023200128020022012802042204450d1320024180236a2003418094ebdc034b4102746a2802002103200128020022052d0000210620012004417f6a3602042001200541016a3602004105211241002108024020060e025400140b410121080c520b20024180236a200110f8042002280280232203450d122002280284232208410876211320024180236a41086a35020021074200210f410621120c510b200128020022032802042204450d11200328020022052d0000210620032004417f6a3602042003200541016a36020042002107410021044200210f02400240024002400240024020060e050500010203170b42002107410121040c030b42002107410221040c020b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d15200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a2236a2d00002105200241a3236a2d0000210a2002419b236a2f0000210120024193236a290000210720022f018423210d2002280186232103200241a81b6a220420024192236a2d00003a0000200241b71b6a200241a1236a2d00003a0000200220073700a91b200220013b00b11b20022002419d236a2800003600b31b2002418a236a29010022104220882004290300220e422086842107200e422088210f20022903b01b210e2010a72108410321040c020b42002107410421040b4200210f0b41082112200841087621130c510b20024180236a200110f40420022d0080234105460d10200229028423220e4220882002418c236a290200220f422086842107200ea722084108762113200f422088210f200241a0236a280200210b2002419e236a2f010021152002419d236a2d0000210a2002419c236a2d0000210520024194236a290200210e2002280280232103410921120c4f0b200241a8026a2001108c0220022802a8020d0f20022802ac022103410a2112410021080c4e0b200241b0026a2001108c0220022802b0020d0e20022802b4022103410b2112410021080c4d0b200128020022012802042203450d0d200128020022052d0000210420012003417f6a3602042001200541016a360200200441e5004f0d0d410c2112410021080c4d0b410d2112410021080c4b0b410e2112410021080c4a0b20024180236a200110f9042002280280232203450d0a2002280284232208410876211320024180236a41086a35020021074200210f410f21120c490b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d0a200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021052002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2001280200220128020422034104490d09200241af1b6a290000210f20022900b71b210e20022900a71b211120012802002204280000210b20012003417c6a3602042001200441046a3602002011422088200f422086842107200f422088210f2011a7220841087621132010420888a7210d2010421888a721032010a72104411021120c490b41112112410021080c470b2001280200220428020422054104490d0720042802002206280000210320042005417c6a3602042004200641046a360200200241b8026a2001108c0220022802b8020d0720022802bc02220441ffffffff03712004470d07200441027422052001280200220128020422064b0d072005417f4c0d372005450d06200510382208450d3820084100200510d60b2109200128020422062004410274220b4f0d45200910390c070b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d07200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021052002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2001280200220128020422034104490d06200241af1b6a290000210f20022900b71b210e20022900a71b211120012802002204280000210b20012003417c6a3602042001200441046a3602002011422088200f422086842107200f422088210f2011a7220841087621132010420888a7210d2010421888a721032010a72104411321120c460b200241c0026a200110f50420022903c002a70d0520022903c802220e422088200241d0026a290300220f422086842107200f422088210f200ea722084108762113411421120c440b200241e0026a2001108c0220022802e0020d0420022802e4022103200241d8026a2001108c0220022802d8020d0420022802dc0222084108762113411521120c430b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d04200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021052002419c236a2d0000210320024194236a29020021072002418c236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2001280200220128020422034104490d0320022800af1b210420022900b71b210e20022900a71b210f20012802002206280000210b20012003417c6a3602042001200641046a360200200f4220882007420886428080808070832004ad842211422086842107200fa7220841087621132011422088210f2010420888a7210d2010421888a721032010a72104411621120c430b20024180236a200110f8042002280280232203450d02200229028423220e4220882107200e420888a72113200ea721084200210f411721120c410b200b41ff01714102470d012009450d01200c10390c010b4104210820062004410274220b4f0d3e0b200041263602000c450b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c440b024002400240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020041002116024020060e020003010b20024180236a410472210b2001280200220328020421044100210503402004450d01200328020022082d0000210620032004417f6a22043602042003200841016a360200200b20056a20063a00002002200541016a2206360280232006210520064120470d000b200241a3236a2d000021152002419c236a2d000021052002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220053a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2004417f6a21052010421888a721122010420888a7210c200241af1b6a290000210e20022900b71b210f20022900a71b210720024180236a410472210a2010a7210d41002106034020042006460d01200820066a220b41016a2d00002109200320053602042003200b41026a360200200a20066a20093a00002002200641016a220b360280232005417f6a2105200b2106200b4120470d000b200241a3236a2d000021172002419c236a2d000021042002418c236a290200211020024194236a29020021112002290284232118200241a01b6a411d6a200241a1236a2f00003b0000200220113703b01b200220103703a81b200220043a00b81b200220024180236a411d6a2800003600b91b200220183703a01b200241af1b6a290000211120022900b71b211420022900a71b21104100210420024100360280232008200b6a210b2018421888a721192018420888a7211320024180236a41047221092018a7210a03402005417f460d01200b20046a220641016a2d00002108200320053602042003200641026a360200200920046a20083a00002002200441016a2206360280232005417f6a21052006210420064120470d000b200241a3236a2d0000211a2002419c236a2d000021042002418c236a290200211820024194236a290200211b200229028423211c200241a01b6a411d6a200241a1236a2f00003b00002002201b3703b01b200220183703a81b200220043a00b81b200220024180236a411d6a2800003600b91b2002201c3703a01b200241af1b6a290000211b20022900b71b211d20022900a71b2118410021082002410036028023200b20066a41016a2104201c421888a7211e201c420888a7210920024180236a410472211f201ca7210b03402005417f460d0120042d00002106200320053602042003200441016a2204360200201f20086a20063a00002002200841016a2206360280232005417f6a21052006210820064120470d000b200241a3236a2d000021202002419c236a2d000021062002418c236a290200211c20024194236a29020021212002290284232122200241a01b6a411d6a200241a1236a2f00003b0000200220213703b01b2002201c3703a81b200220063a00b81b200220024180236a411d6a2800003600b91b200220223703a01b200241af1b6a290000212120022900b71b212320022900a71b211c4100210620024100360280232022421888a721242022420888a7211f20024180236a41047221252022a7210803402005417f460d0120042d00002126200320053602042003200441016a2204360200202520066a20263a00002002200641016a2226360280232005417f6a21052026210620264120470d000b200241a3236a2d000021272002419c236a2d0000210620024194236a29020021282002418c236a29020021222002290284232129200241a01b6a411d6a200241a1236a2f00003b0000200220223703a81b200220283703b01b200220063a00b81b200220024180236a411d6a2800003600b91b200220293703a01b20022800af1b212a20022900b71b212b20022900a71b21224100210620024100360280232029421888a7212c2029420888a721252028421888a7212d20024180236a410472212e2029a7212603402005417f460d0120042d0000212f200320053602042003200441016a2204360200202e20066a202f3a00002002200641016a222f360280232005417f6a2105202f2106202f4120470d000b200241b8096a41026a2002418d236a2d00003a0000200241d8176a41026a20024194236a2d00003a0000200220022f0184233b01c810200220022d0086233a00ca1020022002418b236a2f00003b01b809200220024192236a2f01003b01d817200241a0236a280200212e2002419c236a280200212f20024195236a28000021052002418e236a28010021042002280087232103200241a0086a41026a2002419b236a2d00003a0000200220024199236a2f00003b01a008200241e8026a2001108c0220022802e8020d0020012802002206280204223020022802ec022201490d002001417f4c0d300240024020010d00410121160c010b200110382216450d3220164100200110d60b1a200628020421300b203020014f0d01201610390b200041263602000c450b201620062802002231200110d40b1a2006203020016b3602042006203120016a360200200241f82b6a41026a200241b8096a41026a2d00003a000020024188096a41026a200241d8176a41026a2d00003a0000200241d8086a41026a200241a0086a41026a2d00003a0000200220022f01c8103b01a82c200220022d00ca103a00aa2c200220022f01b8093b01f82b200220022f01d8173b018809200220022f01a0083b01d8082001ad222942208620298421290b200020273a00af01200020203a008f012000201a3a006f200020173a004f200020153a002f20002016360204200041ff006a2021370000200041f7006a201c370000200041df006a201b370000200041d7006a20183700002000413f6a2011370000200041376a20103700002000411f6a200e370000200041176a2007370000200041a7016a202b370000200041a3016a202d3600002000419f016a202a36000020004197016a202237000020004193016a202c36000020004191016a20253b000020004190016a20263a000020004187016a2023370000200041f3006a2024360000200041f1006a201f3b0000200041f0006a20083a0000200041e7006a201d370000200041d3006a201e360000200041d1006a20093b0000200041d0006a200b3a0000200041c7006a2014370000200041336a2019360000200041316a20133b0000200041306a200a3a0000200041276a200f370000200041136a2012360000200041116a200c3b0000200041106a200d3a0000200041086a2029370200200041b3016a2003360000200020043600ba01200020053600c101200041b2016a20022d00aa2c3a0000200041b0016a20022f01a82c3b0100200020022f01f82b3b00b701200041b9016a200241f82b6a41026a2d00003a0000200020022f0188093b00be01200041c0016a20024188096a41026a2d00003a0000200020022f01d8083b00c501200041c7016a200241d8086a41026a2d00003a0000200041cc016a202e360000200041c8016a202f360000200041083602000c430b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024020060e03000102040b200241a01b6a200110fa0420022903a81b4202510d03200241c8106a200241a01b6a41800210d40b1a200241a01b6a200110f30420022802a41b2201450d0320024188236a200241b01b6a280200360200200220022903a81b3703802320022802a01b21042002418c236a200241c8106a41800210d40b1a410121030c020b200241a01b6a200110fa0420022903a81b4202510d02200241c8106a200241a01b6a41800210d40b1a200241a01b6a200110f30420022802a41b2201450d0220024188236a200241b01b6a280200360200200220022903a81b3703802320022802a01b21042002418c236a200241c8106a41800210d40b1a410221030c010b2001280200220328020422054104490d0120032802002206280000210420032005417c6a3602042003200641046a3602002001280200220328020422054104490d0120032802002206280000210120032005417c6a3602042003200641046a360200410321030b200041146a20024180236a418c0210d40b1a200041106a20013602002000410c6a2004360200200041086a2003360200200041093602000c430b200041263602000c420b200128020022032802042204450d38200328020022052d0000210620032004417f6a3602042003200541016a36020020060d382001280200220328020422044104490d3820032802002205280000210620032004417c6a3602042003200541046a36020020024180036a2001108c022002280280030d382001280200220428020422052002280284032203490d382003417f4c0d2b0240024020030d00410121080c010b200310382208450d2d20084100200310d60b1a200428020421050b0240200520034f0d00200810390c390b20082004280200220b200310d40b21122004200520036b3602042004200b20036a360200200241f8026a2001108c0220022802f8020d3720022802fc0222092001280200280204410c6e2204200420094b1bad420c7e2207422088a70d2b2007a72204417f4c0d2b0240024020040d004104210d0c010b20041038220d450d2d0b2001200128020441016a22053602044100210820024100360288232002200d3602802320022004410c6e2204360284230240200520012802084d0d0020022802802321050c370b02402009450d00410021080340200241f0026a2001108c020240024020022802f0020d0020012802002205280204220b20022802f4022204490d002004417f4c0d2f0240024020040d004101210a0c010b20041038220a450d31200a4100200410d60b1a20012802002205280204210b0b200b20044f0d01200a10390b20022802802321052008450d392008410c6c21042005210103400240200141046a280200450d00200128020010390b2001410c6a2101200441746a2204450d3a0c000b0b2004ad22074220862007842107200a2005280200220c200410d40b210a2005200b20046b3602042005200c20046a36020002402008200228028423470d0020024180236a200810da01200228028023210d20022802882321080b200d2008410c6c6a220420073702042004200a360200200220022802882341016a2208360288232009417f6a22090d000b200128020421052002280284232104200228028023210d0b20012005417f6a360204200d450d370240024020012802002205280204220b4104490d0020052802002209280000210c2005200b417c6a3602042005200941046a36020020012802002205280204220b4104490d002005280200220928000021152005200b417c6a3602042005200941046a36020020012802002205280204220b41034b0d010b02402003450d00201210390b02402008450d002008410c6c2103200d210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b2004450d392004410c6c0d360c390b2005280200220928000021132005200b417c6a3602042005200941046a36020020024100360280232001280200210141c000210b03400240200128020422050d0002402003450d00201210390b02402008450d002008410c6c2103200d210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b2004450d3a2004410c6c450d3a0c370b200128020022092d0000210a2001200941016a36020020012005417f6a360204200228028023220541c0004f0d0520024180236a20056a41046a200a3a00002002200541016a36028023200b417f6a220b0d000b2005413f490d03200241c8106a41026a22012002418d236a2d00003a0000200220022f0184233b01a01b200220022d0086233a00a21b20022002418b236a2f00003b01c810200241b8236a280200210520024180236a413c6a2902002107200241b1236a280000210b200241aa236a2801002109200241a3236a280000210a20024180236a411c6a280200211920024195236a28000021172002418e236a280100211e200228008723211a200241b8096a41026a221f20024180236a41146a2d00003a0000200241d8176a41026a22242002419b236a2d00003a0000200241a0086a41026a2220200241a2236a2d00003a0000200241a82c6a41026a2226200241a9236a2d00003a0000200241f82b6a41026a2225200241b0236a2d00003a0000200220024192236a2f01003b01b809200220024199236a2f00003b01d817200220024180236a41206a2f01003b01a0082002200241a7236a2f00003b01a82c200220024180236a412e6a2f01003b01f82b20024188096a41026a222c200241b7236a2d00003a0000200220024180236a41356a2f00003b018809200041286a2013360200200041246a2015360200200041206a200c3602002000411c6a2008360200200041186a2004360200200041146a200d360200200041106a20033602002000410c6a2003360200200041086a2012360200200020063602042000412c6a20022f01a01b3b01002000412e6a20022d00a21b3a00002000412f6a201a360000200020022f01c8103b0033200041356a20012d00003a00002000201e3600362000413c6a201f2d00003a0000200020022f01b8093b003a2000201736003d200041c3006a20242d00003a0000200020022f01d8173b0041200041c4006a2019360000200041ca006a20202d00003a0000200041c8006a20022f01a0083b00002000200a36004b200041d1006a20262d00003a0000200020022f01a82c3b004f20002009360052200041d8006a20252d00003a0000200020022f01f82b3b00562000200b360059200041df006a202c2d00003a0000200020022f0188093b005d200041e4006a2007370000200041e0006a20053600002000410a3602000c410b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c400b200128020022032802042204450d32200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024020060e03000102370b20024188036a2001108c022002280288030d3620024180236a2001200228028c031093022002280280232201450d362002290284232107410121040c020b410221042001280200220328020422064102490d35200328020022082f0000210520032006417e6a3602042003200841026a360200200110fb0422010d020c350b20024190036a2001108c022002280290030d3420024180236a20012002280294031093022002280280232201450d342002290284232107410321040b0b200020043b01042000410c3602002000410c6a2007370200200041086a2001360200200041066a20053b01000c3f0b200128020022032802042204450d30200328020022052d0000210620032004417f6a3602042003200541016a3602004104210a0240024020060e0f0001282927262524232221201f1e1d320b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d32200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d0000210b2002419c236a2d000021012002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220013a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a721032010420888a72127200241af1b6a290000210e20022900b71b210720022900a71b210f2010a7212d4101210a0c280b20024198036a2001108c022002280298030d30200228029c032206200128020028020441c8006e2203200320064b1bad42c8007e2207422088a70d282007a72204417f4c0d280240024020040d00410421030c010b200410382203450d2a0b2001200128020441016a2205360204200241003602f02c200220033602e82c2002200441c8006e3602ec2c024002400240200520012802084b0d00024002402006450d00200241a01b6a410c6a2117200241a01b6a410172211e410021040340200241a01b6a200110fc0402400240024020022d00a01b22054106460d0020022802a81b210820022802a41b210b20024180236a200110fc0420022d0080234106470d0120054101470d002008450d00200b10390b410621050c010b200241c8106a41206a20024180236a41206a280200360200200241c8106a41186a20024180236a41186a290300370300200241c8106a41106a20024180236a41106a290300370300200241c8106a41086a20024180236a41086a290300370300200241fc2c6a41026a201e41026a2d00003a0000200241f82b6a41086a201741086a290000370300200241f82b6a41106a201741106a29000037030020022002290380233703c8102002201e2f00003b01fc2c200220172900003703f82b200b2113200821190b200241f82c6a41026a2208200241fc2c6a41026a2d00003a000020024188096a41086a220b200241f82b6a41086a29030037030020024188096a41106a2209200241f82b6a41106a290300370300200241b8096a41086a220a200241c8106a41086a290300370300200241b8096a41106a220d200241c8106a41106a290300370300200241b8096a41186a220c200241c8106a41186a290300370300200241b8096a41206a2212200241c8106a41206a280200360200200220022f01fc2c3b01f82c200220022903f82b37038809200220022903c8103703b80920054106460d02200241f42c6a41026a221520082d00003a0000200241d8086a41086a2208200b290300370300200241d8086a41106a220b2009290300370300200241d8176a41086a2209200a290300370300200241d8176a41106a220a200d290300370300200241d8176a41186a220d200c290300370300200241d8176a41206a220c2012280200360200200220022f01f82c3b01f42c20022002290388093703d808200220022903b8093703d8170240200420022802ec2c470d00200241e82c6a200410fd0420022802e82c210320022802f02c21040b2003200441c8006c6a220420053a0000200441086a2019360000200441046a2013360000200441036a20152d00003a0000200420022f01f42c3b0001200441146a20082903003700002004411c6a200b2903003700002004410c6a20022903d808370000200441246a20022903d817370000200441346a200a2903003700002004412c6a20092903003700002004413c6a200d290300370000200441c4006a200c280200360000200220022802f02c41016a22043602f02c2006417f6a22060d000b2001280204210520022802e82c21030b20012005417f6a3602042003450d3420022902ec2c210f20024180236a200110fc0420022d0080234106460d33200241a0236a2204350200210e20024198236a220a290300211820024194236a220d280200210520024192236a2f0100210820024191236a2d0000210920024190236a2d0000210b20024180236a41086a22122903002107200228028423212d200228028023210620024180236a200110fc0420022d0080234106460d32200241f82b6a41086a20042802003602002002200a2903003703f82b200d280200210c2002418c236a220429020021102012280200212f200228028423212e200228028023212720024180236a200110fc0420022d008023220d4106460d31200241e02c6a41026a20022d0083233a0000200241d8176a41086a20024194236a220a290200370300200241d8176a41106a2002419c236a2219290200370300200220022f0081233b01e02c200220042902003703d81720024180236a41086a22042802002112200228028423211520024180236a200110fc0420022d00802322134106460d30200241e42c6a41026a20022d0083233a0000200241b8096a41086a200a290200370300200241b8096a41106a2019290200370300200220022f0081233b01e42c20022002418c236a220a2902003703b80920042802002119200228028423211720024180236a200110fc0420022d008023221e4106460d2f200241f62c6a20022d0083233a0000200241c8106a41086a20024194236a290200370300200241d8106a2002419c236a290200370300200220022f0081233b01f42c2002200a2902003703c81020024180236a41086a280200211a200228028423211f2001280200220a280204222c450d2e200a28020022252d0000212a200a202c417f6a2216360204200a202541016a36020041002124202a0e0203022e0b20022802e82c21032004450d002003200441c8006c6a2104200321010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012004470d000b0b20022802ec2c2201450d32200141c8006c450d32200310390c320b2016450d2b20252d00012104200a202541026a360200200a202c417e6a22243602042002410136028023200220043a0084232024450d2b20252d00022104200a202541036a360200200a202c417d6a22243602042002410236028023200220043a0085232024450d2b20252d00032104200a202541046a360200200a202c417c6a22243602042002410336028023200220043a0086232024450d2b20252d00042104200a202541056a360200200a202c417b6a22243602042002410436028023200220043a0087232024450d2b20252d00052104200a202c417a6a2224360204200a202541066a36020020024188236a20043a000020024105360280232024450d2b20252d00062104200a202c41796a2224360204200a202541076a36020020024189236a20043a000020024106360280232024450d2b20252d00072104200a202c41786a2224360204200a202541086a3602002002418a236a20043a000020024107360280232024450d2b20252d00082104200a202c41776a2224360204200a202541096a3602002002418b236a20043a000020024108360280232024450d2b20252d00092104200a202c41766a2224360204200a2025410a6a3602002002418c236a20043a000020024109360280232024450d2b20252d000a2104200a202c41756a2224360204200a2025410b6a3602002002418d236a20043a00002002410a360280232024450d2b20252d000b2104200a202c41746a2224360204200a2025410c6a3602002002418e236a20043a00002002410b360280232024450d2b20252d000c2104200a202c41736a2224360204200a2025410d6a3602002002418f236a20043a00002002410c360280232024450d2b20252d000d2104200a202c41726a2224360204200a2025410e6a36020020024190236a20043a00002002410d360280232024450d2b20252d000e2104200a202c41716a2224360204200a2025410f6a36020020024191236a20043a00002002410e360280232024450d2b20252d000f2104200a202c41706a2224360204200a202541106a36020020024192236a20043a00002002410f360280232024450d2b20252d00102104200a202c416f6a2224360204200a202541116a36020020024193236a20043a000020024110360280232024450d2b20252d00112104200a202c416e6a2224360204200a202541126a36020020024194236a20043a000020024111360280232024450d2b20252d00122104200a202c416d6a2224360204200a202541136a36020020024195236a20043a000020024112360280232024450d2b20252d00132104200a202c416c6a2224360204200a202541146a36020020024196236a20043a000020024113360280232024450d2b20252d00142104200a202c416b6a360204200a202541156a36020020024188096a41026a2002418d236a2d00003a0000200241d8086a41026a20024180236a41146a2d00003a0000200220022f0184233b01a01b200220022d0086233a00a21b20022002418b236a2f00003b018809200220024192236a2f01003b01d80820024180236a41156a2f000020044110747221042002418e236a28010021262002280087232120410121240b200241e82c6a41026a20022d00a21b3a0000200241fc2c6a41026a20024188096a41026a220a2d00003a0000200241f82c6a41026a200241d8086a41026a2d00003a0000200220022f01a01b3b01e82c200220022f0188093b01fc2c200220022f01d8083b01f82c20024180236a200110fc0420022d00802322254106460d2a200a20022d0083233a0000200241a01b6a41086a221620024194236a290200370300200241a01b6a41106a22302002419c236a290200370300200220022f0081233b01880920022002418c236a2902003703a01b20024180236a41086a220a280200212c200228028423212a20024180236a200110fc04024020022d0080234106470d0020254101470d2b202c450d2b202a10390c2b0b200241a0086a41206a20024180236a41206a280200360200200241a0086a41186a20024180236a41186a290300370300200241a0086a41106a20024180236a41106a290300370300200241a0086a41086a200a29030037030020024190086a41086a200241f82b6a41086a2802003602004102210a200241f42b6a41026a200241e02c6a41026a2d00003a000020022002290380233703a008200220022903f82b37039008200220022f01e02c3b01f42b200241f8076a41106a200241d8176a41106a290300370300200241f8076a41086a200241d8176a41086a290300370300200220022903d8173703f807200241f02b6a41026a200241e42c6a41026a2d00003a0000200220022f01e42c3b01f02b200241e0076a41106a200241b8096a41106a290300370300200241e0076a41086a200241b8096a41086a290300370300200220022903b8093703e007200241ec2b6a41026a200241f42c6a41026a2d00003a0000200220022f01f42c3b01ec2b200241c8076a41106a200241c8106a41106a290300370300200241c8076a41086a200241c8106a41086a290300370300200220022903c8103703c807200241e42b6a41026a200241e82c6a41026a2d00003a0000200220022f01e82c3b01e42b200241e02b6a41026a200241fc2c6a41026a2d00003a0000200220022f01fc2c3b01e02b200241dc2b6a41026a200241f82c6a41026a2d00003a0000200220022f01f82c3b01dc2b200241e82b6a41026a20024188096a41026a2d00003a0000200220022f0188093b01e82b200241b0076a41106a2030290300370300200241b0076a41086a2016290300370300200220022903a01b3703b007200241d82b6a41026a200241dc2c6a41026a2d00003a0000200220022f00dc2c3b01d82b202fad422086202ead8421112027ad422086200e842114202dad4220862006ad84210e0c270b41958bcc00411b41b08bcc001035000b2002200a3a00d80841ffc5ca00412b200241d8086a419cc7ca0041acc6ca00103d000b200041263602000c3b0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024020060e0400010203070b20024180236a2001108a022002290380234209510d06200241a01b6a20024180236a41c80310d40b1a20024180236a200110a50220022d008023410b460d05200241c8106a41c0036a20024180236a41d00310d40b1a200241a0086a41086a200241e0266a2903003703002002200241d8266a2903003703a00820024180236a41d0036a290300210e20022903a01b2107200241c8106a200241a01b6a41086a41c00310d40b1a410121010c030b20024180236a2001108a022002290380234209510d05200241d8176a20024180236a41c80310d40b1a20024180236a2001108a0202402002290380234209510d00200241a01b6a20024180236a41c80310d40b1a20024180236a200110890202402002280280232204450d00200229028423210702402001280200220128020422034108490d0020012802002205290000210e2001200341786a3602042001200541086a360200200241c8106a200241d8176a41c80310d40b1a200241c8106a41c8036a200241a01b6a41c80310d40b1a410221010c050b02402007422088a72201450d00200141f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2007a72201450d00200141f8036c450d00200410390b200241a01b6a108d020b200241d8176a108d020c050b20024180236a2001108a022002290380234209510d04200241d8176a20024180236a41c80310d40b1a20024180236a2001108a0202402002290380234209510d00200241a01b6a20024180236a41c80310d40b1a20024180236a200110890202402002280280232204450d00200229028423210702402001280200220128020422034108490d0020012802002205290000210e2001200341786a3602042001200541086a360200200241c8106a200241d8176a41c80310d40b1a200241c8106a41c8036a200241a01b6a41c80310d40b1a410321010c040b02402007422088a72201450d00200141f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2007a72201450d00200141f8036c450d00200410390b200241a01b6a108d020b200241d8176a108d020c040b2001200128020441016a2203360204200320012802084b0d0320024180236a200110a60220022d0080232103200241a01b6a20024180236a41017241df0710d40b1a2003410b460d0341e00710382204450d29200420033a0000200441016a200241a01b6a41df0710d40b1a20012001280204417f6a3602042001280200220128020422034108490d012001280200220529000021072001200341786a3602042001200541086a360200410421010b200241b8096a200241c8106a41900710d40b1a200241a82c6a41086a2203200241a0086a41086a290300370300200220022903a0083703a82c200041106a20073702002000410c6a2004360200200041086a200136020020004125360200200041186a200241b8096a41900710d40b1a200041a8076a200e370200200041b0076a20022903a82c370200200041b8076a20032903003702000c3d0b200410b703200410390c010b200241a01b6a108d020b200041263602000c3a0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024020060e0800010203040506070b0b200241b0066a2001108c0220022802b0060d0a20022802b406210420024198066a200110f504200229039806a70d0a200241a8066a290300210f20022903a006210e20024190066a2001108c022002280290060d0a200228029406210b20024188066a2001108c022002280288060d0a200228028c06210920024180066a2001108c022002280280060d0a200228028406210d20024180236a200110fe0420022d008023220a4104460d0a20022900872322104220882114200f422088a72108200241a0236a2f010021122002419f236a2d0000210620024197236a290000210720024193236a28000021152002418f236a2800002103200228008323210520022f00812321132010a72101410121170c090b200241d0066a2001108c0220022802d0060d0920022802d4062108200241b8066a200110f50420022903b806a70d09200128020022032802042204450d09200241c8066a290300211120022903c0062110200328020022052d0000211720032004417f6a3602042003200541016a3602004103210a0240024020170e0201000b0b20024180236a200110ff0420022d008023220a4103460d0a200241bf236a330000200241c1236a31000042108684210f200241b7236a290000210e200241b3236a280000210c200241af236a280000210d200241ab236a2800002109200241a7236a280000210b200241a3236a2800002104200241a2236a2d00002119200241a0236a2f010021122002419f236a2d0000210620024197236a290000210720024193236a28000021152002418f236a28000021032002290087232118200228008323210520022f00812321130b20184220882114200f42ffffff0783210f2018a72101410221170c080b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d09200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021062002419c236a2d0000210320024194236a290200210f2002418c236a2902002107200229028423210e200241a01b6a411d6a200241a1236a2f00003b0000200220073703a81b2002200f3703b01b200220033a00b81b200220024180236a411d6a2800003600b91b2002200e3703a01b20022800af1b210320022900b71b210720022900a71b2110200241d8066a2001108c0220022802d8060d0820022802dc06210420104220882114200e420888a72113200e421888a72105200f421888a721152010a72101200ea7210a410321170c070b200241e0066a2001108c0220022802e0060d0720022802e4062105410421170c040b200241e8066a2001108c0220022802e8060d0620022802ec062105410521170c030b200241a0076a2001108c0220022802a0070d0520022802a407210420024188076a200110f504200229038807a70d0520024198076a290300210f200229039007210e20024180076a2001108c022002280280070d05200228028407210b200241f8066a2001108c0220022802f8060d0520022802fc062109200241f0066a2001108c0220022802f0060d0520022802f406210d20024180236a200110fe0420022d008023220a4104460d0520022900872322104220882114200f422088a72108200241a0236a2f010021122002419f236a2d0000210620024197236a290000210720024193236a28000021152002418f236a2800002103200228008323210520022f00812321132010a72101410621170c040b2001280200220328020422044104490d0420032802002206280000210520032004417c6a3602042003200641046a360200200241a8076a2001108c0220022802a8070d0420012802002204280204220620022802ac072203490d042003417f4c0d280240024020030d00410121010c010b200310382201450d2a20014100200310d60b1a200428020421060b0240200620034f0d00200110390c050b200120042802002208200310d40b1a2004200620036b3602042004200820036a3602002003ad22074220862007842114410721170c020b2001280200220128020422034104490d0320012802002204280000210520012003417c6a3602042001200441046a360200410821170b420021140b0b200020193a002b200020123b0029200020133b000a2000200a3a000920004124360200200041d8006a2011370200200041d0006a2010370200200041c0006a200e3702002000413c6a200c360200200041386a200d360200200041346a2009360200200041306a200b3602002000412c6a2004360200200041286a20063a0000200041206a20073702002000411c6a2015360200200041186a20033602002000410c6a2005360200200041086a20173a0000200041106a20144220862001ad84370200200041c8006a2008ad422086200f42ffffffff0f83843702000c3a0b200041263602000c390b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004103210b02400240024020060e03000102030b200241c0056a2001108c0220022802c0050d0220022802c4052103200241b8056a2001108c0220022802b8050d0220022802bc0521044101210b0c010b200241f8056a2001108c0220022802f8050d0120022802fc052103200241f0056a2001108c0220022802f0050d0120022802f4052104200241e8056a2001108c0220022802e8050d0120022802ec052105200241e0056a2001108c0220022802e0050d0120022802e4052108200241c8056a200110f50420022903c805a70d01200241d8056a290300210e20022903d00521074102210b0b20004123360200200041286a200e370200200041206a2007370200200041186a2008360200200041146a2005360200200041106a20043602002000410c6a2003360200200041086a200b3602000c390b200041263602000c380b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024020060e06000102030405070b2001280200220428020422054104490d0620042802002206280000210320042005417c6a3602042004200641046a360200200241b0056a2001108c0220022802b0050d0620012802002206280204220820022802b4052204490d062004417f4c0d280240024020040d00410121050c010b200410382205450d2a20054100200410d60b1a200628020421080b02400240024020082004490d0020052006280200220b200410d40b1a2006200820046b3602042006200b20046a360200200241a8056a2001108c02024020022802a8050d0020012802002206280204220b20022802ac052208490d002008417f4c0d2c0240024020080d00410121090c010b200810382209450d2e20094100200810d60b1a2006280204210b0b0240200b2008490d0020092006280200220a200810d40b1a2006200b20086b3602042006200a20086a3602000240200128020022012802042206450d002001280200220b2d0000210a20012006417f6a360204410121062001200b41016a36020041002101200a0e020504000b2008450d010b200910390b2004450d090b200510390c080b410121010b2008210a2004210b0c050b2001280200220128020422044104490d0520012802002205280000210320012004417c6a3602042001200541046a360200410221060c040b2001280200220128020422044104490d0420012802002205280000210320012004417c6a3602042001200541046a360200410321060c030b410421062001280200220128020422044104490d0320012802002205280000210320012004417c6a3602042001200541046a3602000c020b2001280200220428020422054104490d0220042802002206280000210320042005417c6a3602042004200641046a360200200128020022042802042205450d02200428020022062d0000210820042005417f6a3602042004200641016a36020020080d0220024180236a200110a50220022d008023410b460d02200241b8096a41026a22062002419b236a2d00003a0000200220024199236a2f00003b01b80920024198236a2d0000210120024194236a280200210820024190236a280200210a2002418c236a280200210920024188236a2802002104200228028423210b2002280280232105200241a01b6a2002419c236a41cc0310d40b1a200541ff0171410b460d02200241d8176a41026a20062d00003a0000200220022f01b8093b01d817200241c8106a200241a01b6a41cc0310d40b1a410521060c010b2001280200220428020422054104490d0120042802002206280000210320042005417c6a3602042004200641046a3602002001280200220428020422064104490d0120042802002208280000210520042006417c6a3602042004200841046a3602002001280200220428020422064104490d0120042802002208280000210b20042006417c6a3602042004200841046a3602002001280200220128020422064104490d0120012802002208280000210420012006417c6a3602042001200841046a360200410621060b200241a0086a41026a220d200241d8176a41026a2d00003a0000200220022f01d8173b01a0082000412c6a200241c8106a41cc0310d40b1a200041286a20013a0000200041246a2008360200200041206a200a3602002000411c6a2009360200200041186a2004360200200041146a200b360200200041106a20053602002000410c6a2003360200200041086a200636020020004122360200200020022f01a0083b00292000412b6a200d2d00003a00000c380b200041263602000c370b02400240200128020022032802042206450d00200328020022082d0000210120032006417f6a22043602042003200841016a36020002400240024020010e03000102030b20044104490d022008280001210d20032006417b6a22093602042003200841056a36020020024180236a410472210a41002101417a2104034020092001460d03200820016a220541056a2d0000210b2003200620046a3602042003200541066a360200200a20016a200b3a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021012002419c236a2d0000210420024194236a29020021142002418c236a29020021072002290284232111200241a01b6a411d6a200241a1236a2f00003b0000200220073703a81b200220143703b01b200220043a00b81b200220024180236a411d6a2800003600b91b200220113703a01b200620056b220c417b6a4110490d0220022800af1b210420022900b71b210720022900a71b210e2003200c416b6a22063602042003200820056a221241156a220536020020064104490d022012410d6a290000210f201241056a2900002110200528000021052003200c41676a22063602042003201241196a220a36020020064104490d022011421888a7210b2011420888a721062014421888a721082011a72109200a280000210a2003200c41636a36020420032012411d6a360200410121030c030b20044104490d012008280001210b20032006417b6a3602042003200841056a360200410221030c020b20044104490d002008280001210b20032006417b6a3602042003200841056a360200410321030c010b200041263602000c370b200020063b000a200020093a000920004121360200200020022f00c8103b0029200041c0006a200f370200200041386a2010370200200041286a20013a0000200041206a20073702002000411c6a2008360200200041186a2004360200200041106a200e3702002000410c6a200b360200200041086a20033a0000200041346a200a360200200041306a20053602002000412c6a200d3602002000412b6a200241ca106a2d00003a00000c360b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602004106211202400240024002400240024002400240024020060e06000102030408090b2001280200220328020422044104490d0820032802002206280000210520032004417c6a3602042003200641046a36020020024190056a2001108c022002280290050d082001280200220328020422062002280294052204490d082004417f4c0d280240024020040d004101210b0c010b20041038220b450d2a200b4100200410d60b1a200328020421060b0240200620044f0d00200b10390c090b200b20032802002208200410d40b21092003200620046b3602042003200820046a36020020024188056a2001108c0202402002280288050d00200128020022032802042206200228028c052201490d002001417f4c0d290240024020010d004101210d0c010b20011038220d450d2b200d4100200110d60b1a200328020421060b200620014f0d06200d10390b2004450d08200910390c080b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d08200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d0000210320024194236a29020021112002418c236a29020021072002290284232110200241a01b6a411d6a200241a1236a2f00003b0000200220073703a81b200220113703b01b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2001280200220328020422054110490d0720022800af1b210420022900b71b210720022900a71b21142003200541706a36020420032003280200220541106a3602002001280200220328020422064104490d07200541086a290000210f2005290000210e20032802002205280000210920032006417c6a3602042003200541046a360200200241a0056a2001108c0220022802a0050d0720012802002205280204220620022802a4052203490d072003417f4c0d270240024020030d004101210a0c010b20031038220a450d29200a4100200310d60b1a200528020421060b024020062003490d00200a2005280200220b200310d40b1a2005200620036b3602042005200b20036a36020020024198056a2001108c0202402002280298050d00200128020022062802042212200228029c052201490d002001417f4c0d290240024020010d004101210c0c010b20011038220c450d2b200c4100200110d60b1a200628020421120b201220014f0d07200c10390b2003450d080b200a10390c070b2001280200220128020422034104490d0620012802002204280000210520012003417c6a3602042001200441046a360200410321120c020b2001280200220328020422044104490d0520032802002206280000210520032004417c6a3602042003200641046a3602002001280200220128020422034104490d0520012802002204280000210b20012003417c6a360204410421122001200441046a3602000c040b2001280200220128020422034104490d0420012802002204280000210520012003417c6a3602042001200441046a360200410521120b0c020b200d20032802002208200110d40b1a2003200620016b3602042003200820016a3602002001ad2207422086200784210741012112200421190c010b2010421888a721052010420888a721152011421888a7210d2014422088a721192010a721132014a7210b200c20062802002217200110d40b1a2006201220016b3602042006201720016a3602002001ad22104220862010842110410221120b200020153b000a200020133a000920004120360200200041d0006a200f370200200041c8006a200e370200200041c0006a20103702002000413c6a200c360200200041386a2003360200200041346a2003360200200041306a200a3602002000412c6a2009360200200041286a2008360200200041206a20073702002000411c6a200d360200200041186a2004360200200041146a2019360200200041106a200b3602002000410c6a2005360200200041086a20123a00000c360b200041263602000c350b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c340b0240200128020022012802042203450d00200128020022042d0000210520012003417f6a220a3602042001200441016a3602004105210802400240024002400240024020050e06000102030504060b200a4104490d052004280001210620012003417b6a22053602042001200441056a36020020054104490d052004280005210b2001200341776a22053602042001200441096a36020020054104490d05200428000921092001200341736a36020420012004410d6a360200410121080c040b200a4104490d042004280001210620012003417b6a3602042001200441056a360200410221080c030b200a4104490d032004280001210620012003417b6a22053602042001200441056a36020020054104490d032004280005210b2001200341776a3602042001200441096a360200410321080c020b41042108200a4104490d022004280001210620012003417b6a3602042001200441056a3602000c010b410621080b200020083602042000411e360200200041106a20093602002000410c6a200b360200200041086a20063602000c340b200041263602000c330b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c320b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c310b0240200128020022012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a36020020050d0020064104490d002004280001210520012003417b6a3602042001200441056a360200200020053602042000411b3602000c310b200041263602000c300b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024020060e050001020306090b2001280200220428020422054104490d0820042802002206280000210320042005417c6a3602042004200641046a360200200241e8046a2001108c0220022802e8040d0820012802002205280204220620022802ec042201490d082001417f4c0d220240024020010d00410121040c010b200110382204450d2420044100200110d60b1a200528020421060b20062001490d03200420052802002208200110d40b1a2005200620016b3602042005200820016a3602002001ad22074220862007842107410121010c060b2001280200220428020422054104490d0720042802002206280000210320042005417c6a3602042004200641046a360200200241f0046a2001108c0220022802f0040d0720012802002205280204220620022802f4042201490d072001417f4c0d210240024020010d00410121040c010b200110382204450d2320044100200110d60b1a200528020421060b20062001490d02200420052802002208200110d40b1a2005200620016b3602042005200820016a3602002001ad22074220862007842107410221010c050b2001280200220428020422054104490d0620042802002206280000210320042005417c6a3602042004200641046a360200200241f8046a2001108c0220022802f8040d0620012802002206280204220820022802fc042205490d062005417f4c0d200240024020050d00410121040c010b200510382204450d2220044100200510d60b1a200628020421080b20082005490d0120042006280200220b200510d40b1a2006200820056b3602042006200b20056a36020002402001280200220128020422064104490d002005ad2207422086200784210720012802002208280000210520012006417c6a3602042001200841046a360200410321010c060b20050d010c060b2001280200220428020422054104490d0520042802002206280000210320042005417c6a3602042004200641046a36020020024180056a2001108c022002280280050d052001280200220528020422062002280284052201490d052001417f4c0d1f0240024020010d00410121040c010b200110382204450d2120044100200110d60b1a200528020421060b200620014f0d010b200410390c040b200420052802002208200110d40b1a2005200620016b3602042005200820016a3602002001ad22074220862007842107410421010c010b2001280200220128020422044104490d0220012802002205280000210320012004417c6a3602042001200541046a360200410521010b0b200020013602042000411a360200200041186a2005360200200041106a20073702002000410c6a2004360200200041086a20033602000c300b200041263602000c2f0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c2e0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241e0046a2001108c0220022802e0040d0020022802e404220b200128020028020441d0006e22032003200b4b1bad42d0007e2207422088a70d182007a72203417f4c0d180240024020030d004104210d0c010b20031038220d450d1a0b2001200128020441016a22043602044100210a200241003602d0102002200d3602c8102002200341d0006e220c3602cc1002400240200420012802084d0d0020022802c81021080c010b024002400240024002400240024002400240200b450d00200241b7236a211e200241b0236a211a200241a9236a211f200241a2236a21242002419b236a212020024194236a21262002418d236a21254100210a41002109034020024180236a200110800502400240200228028023220c450d00200229028423210702402001280200220328020422044104490d00200941016a210920032802002205280000211220032004417c6a3602042003200541046a36020020024100360280232001280200210341c0002105034020032802042204450d01200328020022062d000021082003200641016a36020020032004417f6a360204200228028023220441c0004f0d0620024180236a20046a41046a20083a00002002200441016a360280232005417f6a22050d000b2004413f4f0d0241958bcc00411b41b08bcc001035000b2007428080808010540d00200c10390b20022802c8102108200a450d0b200a41d0006c2104200821010340200128020021030240200141086a22052802002206450d00200310390b2001200336020020052006360200200141d0006a2101200441b07f6a2204450d0c0c000b0b20022f01842320022d00862341107472210420022f00b523201e2d000041107472210520022f01ae23201a2d000041107472210620022f00a723201f2d000041107472210820022f01a02320242d000041107472211520022f00992320202d000041107472211320022f01922320262d000041107472211920022f008b2320252d000041107472211720022902bc23210e20022802b823212c20022800b123212a20022801aa23212d20022800a3232127200228029c23212f200228009523212e200228018e23211620022800872321300240200a20022802cc10470d00200241c8106a200a10810520022802c810210d20022802d010210a0b200d200a41d0006c6a220320053b0041200320063b003a200320083b0033200320153b002c200320133b0025200320193b001e200320173b0017200320043b01102003200e3700482003202c3600442003202a36003d2003202d3600362003202736002f2003202f3600282003202e3600212003201636001a200320303600132003201236020c200320073702042003200c360200200341c3006a20054110763a00002003413c6a20064110763a0000200341356a20084110763a00002003412e6a20154110763a0000200341276a20134110763a0000200341206a20194110763a0000200341196a20174110763a0000200341126a20044110763a0000200220022802d01041016a220a3602d0102009200b470d000b2001280204210420022802cc10210c20022802c810210d0b20012004417f6a360204200d450d09200241d8046a2001108c0220022802d8040d0720022802dc04222f200128020028020441f4026e22032003202f4b1bad42f4027e2207422088a70d212007a72204417f4c0d210240024020040d00410421050c010b200410382205450d230b2001200128020441016a220636020441002103200241003602e017200220053602d8172002200441f4026e22083602dc17024002400240200620012802084b0d0002400240202f450d0020024180236a4104722109200241c8106a41086a2132200241bd236a2133200241b8096a410472213420024180236a41196a213520024192236a213620024180236a410b6a2137200241c8106a41196a21382002419d236a2139200241b5236a213a200241ae236a213b20024180236a41276a213c20024180236a41206a213d20024180236a410c6a213e200241d7106a213f200241b0236a2140200241a9236a2141200241a2236a214220024194236a21432002418d236a2144410021120340024002402001280200220328020422044104490d0020032802002205280000212020032004417c6a3602042003200541046a36020020012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b203e290200214520022d00a323212c20022d009c2321032002290284232107200229029423214620382039280000360000203841046a2226203941046a22252f00003b0000200220463703d810200220453703d010200220073703c810200220033a00e0102007421888a7212a2007420888a7212d203f290000214520022900cf10214620022900df1021472007a7212720012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b203e290200214820022d00a323214920022d009c2321032002290284232107200229029423214a20382039280000360000202620252f00003b00002002204a3703d810200220483703d010200220073703c810200220033a00e0102007421888a7214b2007420888a7214c203f290000214820022900cf10214a20022900df10214d2007a7214e20012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b203e290200214f20022d00a323215020022d009c2321032002290284232107200229029423215120382039280000360000202620252f00003b0000200220513703d8102002204f3703d010200220073703c810200220033a00e0102007421888a721522007420888a72153203f290000214f20022900cf10215120022900df1021542007a7215520012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b203e290200215620022d00a323215720022d009c2321032002290284232107200229029423215820382039280000360000202620252f00003b0000200220583703d810200220563703d010200220073703c810200220033a00e0102007421888a721592007420888a7215a203f290000215620022900cf10215820022900df10215b2007a7215c20012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b203e290200215d20022d00a323215e20022d009c2321032002290284232107200229029423215f20382039280000360000202620252f00003b00002002205f3703d8102002205d3703d010200220073703c810200220033a00e0102007421888a721602007420888a72161203f290000215d20022900cf10215f20022900df1021622007a7216320012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a210520062103200641c000470d000b200241a0086a41026a2264203741026a22652d00003a0000200220092f01003b01b809200220372f00003b01a0082002200941026a22662d00003a00ba0920022902bc23216720022802b823216820022800b123216920022801aa23216a20022800a323216b200228029c23216c200228009523216d200228018e23216e200228008723216f200241a82c6a41026a2270203641026a22712d00003a0000200241f82b6a41026a2272203541026a22732d00003a000020024188096a41026a2274203d41026a2d00003a0000200241d8086a41026a2275203c41026a2d00003a0000200241f8076a41026a2276203b41026a2d00003a0000200220362f00003b01a82c200220352f00003b01f82b2002203d2f00003b0188092002203c2f00003b01d8082002203b2f00003b01f807200241e0076a41026a2277203a41026a2d00003a00002002203a2f00003b01e00720012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b20022d00a323217820022d009c23210320022902842321072002290294232179200229028c23217a20382039280000360000202620252f00003b00002002207a3703d010200220793703d810200220073703c810200220033a00e0102079421888a7217b2007421888a7217c2007420888a7217d20022800d710217e20022900cf10217920022900df10217a2007a7217f20012802002204280204210841002103417f2105034020082003460d01200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241dc2c6a41026a220320652d00003a0000200241f42b6a41026a220520712d00003a0000200220092f01003b01e02c200220372f00003b01dc2c200220362f00003b01f42b200220662d00003a00e22c20022802a023218001200228029c23218101200228009523218201200228018e23218301200228008723218401200241f02b6a41026a220620732d00003a0000200241b0076a41026a226620642d00003a0000200241e82c6a41026a227120702d00003a000020024190086a41026a220820722d00003a0000200220352f00003b01f02b200220022f01b8093b01c807200220022d00ba093a00ca07200220022f01a0083b01b007200220022f01a82c3b01e82c200220022f01f82b3b019008200241fc2c6a41026a220b20742d00003a0000200241f82c6a41026a222620752d00003a0000200241f42c6a41026a222520762d00003a0000200241e42c6a41026a226520772d00003a0000200220022f0188093b01fc2c200220022f01d8083b01f82c200220022f01f8073b01f42c200220022f01e0073b01e42c20024180236a20011082052002280280232204450d00200220022f01c8073b01ec2b200220022d00ca073a00ee2b20024180236a41236a2d0000218501203b2d0000218601203a2d000021870120022f01b62321880120022800af2321890120022802a823217720022802a423218a0120022d00a023218b0120022802982321702002290390232107200228028c232173200229028423218c0120022f00a123218d0120022f01ac23218e0120022f00b323218f01200228029c23219001200241e82b6a41026a22910120662d00003a0000200220022f01b0073b01e82b200241e42b6a41026a22920120712d00003a0000200220022f01e82c3b01e42b200241e02b6a41026a22930120082d00003a0000200220022f0190083b01e02b200241dc2b6a41026a229401200b2d00003a0000200220022f01fc2c3b01dc2b200241d82b6a41026a22950120262d00003a0000200220022f01f82c3b01d82b200241d42b6a41026a22960120252d00003a0000200220022f01f42c3b01d42b200241d02b6a41026a22970120652d00003a0000200220022f01e42c3b01d02b200220022d00e22c3a00ce2b200220022f01e02c3b01cc2b200241c82b6a41026a22980120032d00003a0000200220022f01dc2c3b01c82b200241c42b6a41026a22990120052d00003a0000200220022f01f42b3b01c42b200241c02b6a41026a229a0120062d00003a0000200220022f01f02b3b01c02b200241d0046a2001108c02024020022802d0040d0020022802d404229b01200128020028020441c1006e22032003209b014b1bad42c1007e229c01422088a70d2a209c01a72203417f4c0d2a0240024020030d004101219d010c010b20031038229d01450d2c0b2001200128020441016a2205360204200241003602c0092002209d013602b8092002200341c1006e3602bc0902400240200520012802084b0d0002400240209b010d00410021060c010b200128020021054100219e014100219f0103402005280204220b450d02200528020022262d000021032005200b417f6a22253602042005202641016a3602000240024002402003417f6a0e020001050b41002103417e2106034020252003460d05202620036a220841016a2d000021652005200b20066a3602042005200841026a360200200920036a20653a00002002200341016a2208360280232006417f6a210620082103200841c000470d000b20402d0000210320412d0000210620422d0000216520024180236a411b6a2d0000212520432d0000212620442d0000210b20022800b12321a00120022801aa2321a10120022800a32321a201200228029c2321a30120022800952321a401200228018e2321a50120022800872321a60120022f01ae2321a70120022f00a72321a80120022f01a02321a90120022f00992321aa0120022f01922321ab0120022f008b2321ac0120022f018423210820022d00862321ad0120022900b523219c0120322033280000360000203241036a203341036a2800003600002002209c013703c810200820ad0141107472210820ac01200b41107472210b20ab01202641107472212620aa01202541107472212520a901206541107472216520a80120064110747221a80120a70120034110747221a70120022900cf1021ae01410021aa010c010b41002103417e2106034020252003460d04202620036a220841016a2d000021652005200b20066a3602042005200841026a360200200920036a20653a00002002200341016a2208360280232006417f6a210620082103200841c000470d000b20402d0000210320412d0000210620422d0000216520024180236a411b6a2d0000212520432d0000212620442d0000210b20022800b12321a00120022801aa2321a10120022800a32321a201200228029c2321a30120022800952321a401200228018e2321a50120022800872321a60120022f01ae2321a70120022f00a72321a80120022f01a02321a90120022f00992321aa0120022f01922321ab0120022f008b2321ac0120022f018423210820022d00862321ad0120022900b523219c0120322033280000360000203241036a203341036a2800003600002002209c013703c810200820ad0141107472210820ac01200b41107472210b20ab01202641107472212620aa01202541107472212520a901206541107472216520a80120064110747221a80120a70120034110747221a70120022900cf1021ae01410121aa010b209f0141016a219f01209c01421888a721a901209c01a721060240209e0120022802bc09470d00200241b8096a209e0110830520022802b809219d0120022802c009219e010b209d01209e0141c1006c6a220320063b0032200320a7013b002b200320a8013b0024200320653b001d200320253b0016200320263b000f2003200b3b0008200320083b0001200320ae01370039200320a901360035200320a00136002e200320a101360027200320a201360020200320a301360019200320a401360012200320a50136000b200320a601360004200320aa013a0000200341346a20064110763a00002003412d6a20a7014110763a0000200341266a20a8014110763a00002003411f6a20654110763a0000200341186a20254110763a0000200341116a20264110763a00002003410a6a200b4110763a0000200341036a20084110763a0000200220022802c00941016a229e013602c009209f01209b01470d000b209e0141087621062001280204210520022802b809219d010b20012005417f6a360204200241a0086a41046a2203203441046a2d00003a0000200220342802003602a008209d01450d02200241a82c6a41046a20032d00003a0000200220022802a0083602a82c20024180236a20011080052002280280232203450d01208f0120870141107472211a208e0120860141107472211f200241b8096a41026a2091012d00003a000020642092012d00003a000020722093012d00003a0000200220022f01ec2b3b01c810200220022d00ee2b3a00ca10200220022f01e82b3b01b809200220022f01e42b3b01a008200220022f01e02b3b01f82b20022902842321af0120024180236a41026a2094012d00003a000020742095012d00003a000020752096012d00003a000020762097012d00003a0000200220022f01dc2b3b018023200220022f01d82b3b018809200220022f01d42b3b01d808200220022f01d02b3b01f807200220022d00ce2b3a00e207200220022f01cc2b3b01e007200241c8076a41026a2098012d00003a000020662099012d00003a00002071209a012d00003a0000200220022f01c82b3b01c807200220022f01c42b3b01b007200220022f01c02b3b01e82c208a01411874208d012085014110747241ffffff07717221b00120900141107420704110767221b10120704108742007423888a772211320022d00a82c411074209d0141107672211e208a014108762124208b01411074209001411076722119209d014110742088017221b2012007421888a721b30120022800a92c21b4012007a72115208001212e20810121162082012130208301213120840121b5012067210e206821b601206921b701206a21b801206b21b901206c21ba01206d21bb01206e21bc01206f21bd01205e21be012062210f205f2110205d2111206021bf01206121c001206321c101205721c201205b2114205821182056211b205921c301205a21c401205c21c501202c21c6012047211d2046211c20452121204921c701204d2123204a21222048212b205021c8012054212920512128204f21c901205221ca01205321cb01205521cc01204b21cd01204c21ce01204e21cf01202a21d001202d21d101202721d201207821d301207a21d401207b21d501207e21d601207921d701207c21d801207d21d901207f21da01202021db0120062117200321dc0120890121dd01207721de01207321df01208c0121e0010c040b20022802bc092203450d01200341c1006c450d0120022802b80910390c010b20022802a82c2203450d00200341c1006c450d00209d0110390b208c01a721060240208c01422088a72203450d002003410c6c21052004210303400240200341046a280200450d00200328020010390b2003410c6a2103200541746a22050d000b0b02402006450d002006410c6c450d00200410390b02402007422088a72203450d0020034104742104207341086a2103034002402003280200450d002003417c6a28020010390b200341106a2103200441706a22040d000b0b0240200742ffffffff0083500d00207310390b02402070450d00209001450d00207010390b2077450d00208a0110390b410021040b200241b82b6a41026a2203200241b8096a41026a2d00003a0000200241b42b6a41026a2205200241a0086a41026a2d00003a0000200241b02b6a41026a2206200241f82b6a41026a2d00003a0000200241ac2b6a41026a220820024180236a41026a2d00003a0000200220022d00ca103a00be2b200220022f01c8103b01bc2b200220022f01b8093b01b82b200220022f01a0083b01b42b200220022f01f82b3b01b02b200220022f0180233b01ac2b200241a82b6a41026a220b20024188096a41026a2d00003a0000200241a42b6a41026a2220200241d8086a41026a2d00003a0000200241a02b6a41026a2226200241f8076a41026a2d00003a0000200241982b6a41026a2225200241c8076a41026a2d00003a0000200220022f0188093b01a82b200220022f01d8083b01a42b200220022f01f8073b01a02b200220022f01e0073b019c2b200220022d00e2073a009e2b200220022f01c8073b01982b200241942b6a41026a222c200241b0076a41026a2d00003a0000200241902b6a41026a222a200241e82c6a41026a2d00003a0000200220022f01b0073b01942b200220022f01e82c3b01902b2004450d02201241016a2112200241882b6a41026a222d20032d00003a0000200241842b6a41026a222720052d00003a0000200241802b6a41026a220520062d00003a0000200241fc2a6a41026a220620082d00003a0000200220022d00be2b3a008e2b200220022f01bc2b3b018c2b200220022f01b82b3b01882b200220022f01b42b3b01842b200220022f01b02b3b01802b200220022f01ac2b3b01fc2a200241f82a6a41026a2208200b2d00003a0000200241f42a6a41026a220b20202d00003a0000200241f02a6a41026a222020262d00003a0000200241e82a6a41026a222620252d00003a0000200220022f01a82b3b01f82a200220022f01a42b3b01f42a200220022f01a02b3b01f02a200220022f019c2b3b01ec2a200220022d009e2b3a00ee2a200220022f01982b3b01e82a200241e42a6a41026a2225202c2d00003a0000200241e02a6a41026a222c202a2d00003a0000200220022f01942b3b01e42a200220022f01902b3b01e02a024020022802e017220320022802dc17470d00200241d8176a200310840520022802e01721030b20022802d817200341f4026c6a220320c1013a008401200320c5013a0064200320cc013a0044200320cf013a0024200320d2013a0004200320db0136020020034193016a20113700002003418b016a2010370000200341f3006a201b370000200341eb006a2018370000200341d3006a20c901370000200341cb006a2028370000200341336a202b3700002003412b6a2022370000200341136a20213700002003410b6a201c370000200341a3016a20be013a00002003419b016a200f37000020034187016a20bf0136000020034185016a20c0013b000020034183016a20c2013a0000200341fb006a2014370000200341e7006a20c301360000200341e5006a20c4013b0000200341e3006a20c8013a0000200341db006a2029370000200341c7006a20ca01360000200341c5006a20cb013b0000200341c3006a20c7013a00002003413b6a2023370000200341276a20cd01360000200341256a20ce013b0000200341236a20c6013a00002003411b6a201d370000200341076a20d001360000200341056a20d1013b0000200341a7016a20bd01360000200341ae016a20bc01360000200341b5016a20bb01360000200341a6016a20022d008e2b3a0000200320022f018c2b3b01a401200341ab016a20022f01882b3b0000200341ad016a202d2d00003a0000200341b2016a20022f01842b3b0000200341b4016a20272d00003a0000200341b9016a20022f01802b3b0000200341bb016a20052d00003a0000200341bc016a20ba01360000200341c3016a20b901360000200341ca016a20b801360000200341d1016a20b701360000200341c2016a20062d00003a0000200341c0016a20022f01fc2a3b0000200341c9016a20082d00003a0000200341c7016a20022f01f82a3b0000200341d0016a200b2d00003a0000200341ce016a20022f01f42a3b0000200341d7016a20202d00003a0000200341d5016a20022f01f02a3b000020034183026a20d3013a0000200341fb016a20d401370000200341f7016a20d501360000200341f3016a20d601360000200341eb016a20d701370000200341e7016a20d801360000200341e5016a20d9013b0000200320da013a00e401200341dc016a200e370000200341d8016a20b60136000020034186026a20022d00ee2a3a0000200320022f01ec2a3b01840220034187026a20b5013600002003418d026a20262d00003a00002003418b026a20022f01e82a3b00002003418e026a203136000020034194026a20252d00003a000020034192026a20022f01e42a3b000020034195026a20303600002003419b026a202c2d00003a000020034199026a20022f01e02a3b0000200341e7026a20174110763a0000200341e5026a20173b0000200341e0026a201e4110763a0000200341de026a201e3b0000200341d9026a201a4110763a0000200341d7026a201a3b0000200341d2026a201f4110763a0000200341d0026a201f3b0000200341cb026a20244110763a0000200341c9026a20243b0000200341c4026a20194110763a0000200341c2026a20193b0000200341bd026a20134110763a0000200341bb026a20133b0000200341b6026a20154110763a0000200341b4026a20153b0100200341ec026a20af01370000200341e8026a20dc01360000200341e1026a20b401360000200341da026a20b201360000200341d3026a20dd01360000200341cc026a20de01360000200341c5026a20b001360000200341be026a20b101360000200341b7026a20b301360000200341b0026a20df01360200200341a8026a20e001370200200320043602a402200341a0026a202e3600002003419c026a2016360000200220022802e01741016a22033602e0172012202f470d000b2001280204210620022802dc17210820022802d81721050b20012006417f6a3602042005450d0b200241c8046a2001108c0220022802c8040d0920022802cc042219200128020028020441306e2204200420194b1bad42307e2207422088a70d252007a72204417f4c0d2520040d02410421060c030b20022802d817210520022802e0172201450d00200141f4026c2103200521010340200110c203200141f4026a21012003418c7d6a22030d000b0b20022802dc172201450d09200141f4026c0d080c090b200410382206450d230b2001200128020441016a220b360204200241003602c009200220063602b8092002200441306e22093602bc09200b20012802084b0d04024002402019450d0020024180236a4104722113200241b5236a2126200241ae236a212520024180236a41276a212c20024180236a41206a212a20024180236a41196a212d20024192236a21272002418b236a212f200241c8106a41196a211e20024180236a411d6a211a410021170340201741016a2117200128020022062802042112417f210b41002104034020122004460d08200628020022092d0000211520062012200b6a3602042006200941016a360200201320046a20153a00002002200441016a220936028023200b417f6a210b2009210420094120470d000b20022d00a323211620022d009c2321042002290284232107200229029423210e200229028c23210f201e201a280000360000201e41046a201a41046a2f00003b00002002200f3703d0102002200e3703d810200220073703c810200220043a00e0102001280200220428020422064104490d0720022800d710213020022900cf10211020022900df1021112004280200220b280000213120042006417c6a3602042004200b41046a360200200241c0046a2001108c0220022802c0040d0720022802c4042224200128020028020441c8006e2204200420244b1bad42c8007e220f422088a70d24200fa72204417f4c0d240240024020040d004104211f0c010b20041038221f450d260b2001200128020441016a2206360204200241003602d0102002201f3602c8102002200441c8006e22043602cc10024002400240200620012802084b0d002024450d01410021200240034020012802002204280204220b450d01200428020022062d000021092004200b417f6a22123602042004200641016a36020002400240024020090e020001040b2012450d0320062d000121092004200b417e6a3602042004200641026a3602004100212e02400240024020090e0404000102060b4101212e0c030b4102212e0c020b4103212e0c010b2012450d0220062d000121092004200b417e6a3602042004200641026a3602004104212e20090d020b2001280200220928020422154104490d01202041016a21202009280200220428000021b50120092015417c6a3602042009200441046a3602002002410036028023200441056a210441c00021060340201520066a220b41c400460d022004417f6a2d00002112200920043602002009200b41bb7f6a360204200228028023220b41c0004f0d0a20024180236a200b6a41046a20123a00002002200b41016a36028023200441016a21042006417f6a22060d000b200b413f490d0a20022902bc23210f20022802b823210b20022800b123210920022801aa23211220022800a3232115200228029c2321b60120022800952321b701200228018e2321b80120022800872321b901200241a0086a41026a22ba01202f41026a2d00003a0000200241a82c6a41026a22bb01202741026a2d00003a0000200241f82b6a41026a22bc01202d41026a2d00003a000020024188096a41026a22bd01202a41026a2d00003a0000200220132f01003b01d8172002202f2f00003b01a008200220272f00003b01a82c2002202d2f00003b01f82b2002202a2f00003b0188092002201341026a2d00003a00da17200241d8086a41026a22be01202c41026a2d00003a0000200241f8076a41026a22bf01202541026a2d00003a0000200241e0076a41026a22c001202641026a2d00003a00002002202c2f00003b01d808200220252f00003b01f807200220262f00003b01e007024020022802d010220620022802cc10470d00200241c8106a200610fd0420022802d01021060b20022802c810221f200641c8006c6a2204202e3a0004200420b501360200200420022f01d8173b0005200441076a20022d00da173a0000200441086a20b9013600002004410c6a20022f01a0083b00002004410e6a20ba012d00003a00002004410f6a20b801360000200441136a20022f01a82c3b0000200441156a20bb012d00003a0000200441166a20b7013600002004411d6a20b601360000200441246a20153600002004412b6a20123600002004411c6a20bc012d00003a00002004411a6a20022f01f82b3b0000200441216a20022f0188093b0000200441236a20bd012d00003a0000200441286a20022f01d8083b00002004412a6a20be012d00003a00002004412f6a20022f01f8073b0000200441316a20bf012d00003a0000200441326a20093600002004413d6a200f370000200441396a200b360000200441386a20c0012d00003a0000200441366a20022f01e0073b0000200441c5006a20022f01c8073b0000200441c7006a20022d00ca073a00002002200641016a3602d01020202024470d000b20012001280204417f6a3602040c030b20022802cc1021040b2004450d09200441c8006c450d09201f10390c090b20012006417f6a360204201f450d080b20022902cc10210f200e421888a721092007421888a721122007420888a721152007a72124024020022802c009220b20022802bc09470d00200241b8096a200b10840320022802c009210b0b20022802b8092206200b41306c6a2204201f360204200420313602002004412f6a20163a0000200441276a2011370000200441236a20093600002004411f6a2030360000200441176a2010370000200441136a2012360000200441116a20153b0000200441106a20243a0000200441086a200f3702002002200b41016a22043602c00920172019470d000b20012001280204417f6a36020420022802bc0921090c010b2001200b417f6a3602042006450d06410021040b20024180236a200110f6042002280284230d0302402004450d00200441306c21124100210103400240200620016a220b41086a2802002204450d00200441c8006c450d00200b41046a28020010390b2012200141306a2201470d000b0b2009450d05200941306c450d05200610390c050b200220083a00b80941ffc5ca00412b200241b8096a419cc7ca0041acc6ca00103d000b200220123a00b00741ffc5ca00412b200241b0076a419cc7ca0041acc6ca00103d000b41958bcc00411b41b08bcc001035000b200241a01b6a20024180236a41f00010d40b1a200041286a200241a01b6a41f00010d40b1a200041246a2004360200200041206a20093602002000411c6a2006360200200041186a2003360200200041146a2008360200200041106a20053602002000410c6a200a360200200041086a200c3602002000200d360204200041183602000c330b20022802b809210b024020022802c0092201450d00200141306c2104200b41086a21010340024020012802002206450d00200641c8006c450d002001417c6a28020010390b200141306a2101200441506a22040d000b0b20022802bc092201450d00200141306c450d00200b10390b02402003450d00200341f4026c2103200521010340200110c203200141f4026a21012003418c7d6a22030d000b0b2008450d01200841f4026c450d010b200510390b0240200a450d00200a41d0006c2104200d21010340200128020021030240200141086a22052802002206450d00200310390b2001200336020020052006360200200141d0006a2101200441b07f6a22040d000b0b200c450d01200c41d0006c450d01200d10390c010b20022802cc102201450d00200141d0006c450d00200810390b200041263602000c2d0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c2c0b0240200128020022012802042203450d0020012003417f6a3602042001200128020041016a3602000b200041263602000c2b0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e28000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272a0b2001280200220328020422044104490d2920032802002205280000210120032004417c6a3602042003200541046a360200410121030c270b2001280200220328020422044104490d2820032802002205280000210120032004417c6a3602042003200541046a360200410221030c260b2001280200220328020422044104490d2720032802002205280000210120032004417c6a3602042003200541046a360200410321030c250b410421032001280200220428020422054104490d2620042802002206280000210120042005417c6a3602042004200641046a3602000c240b2001280200220328020422044104490d2520032802002205280000210120032004417c6a3602042003200541046a360200410521030c230b2001280200220328020422044104490d2420032802002205280000210120032004417c6a3602042003200541046a360200410621030c220b2001280200220328020422044104490d2320032802002205280000210120032004417c6a3602042003200541046a360200410721030c210b2001280200220328020422044104490d2220032802002205280000210120032004417c6a3602042003200541046a360200410821030c200b2001280200220328020422044104490d2120032802002205280000210120032004417c6a3602042003200541046a360200410921030c1f0b2001280200220328020422044104490d2020032802002205280000210120032004417c6a3602042003200541046a360200410a21030c1e0b2001280200220328020422044104490d1f20032802002205280000210120032004417c6a3602042003200541046a360200410b21030c1d0b2001280200220328020422044104490d1e20032802002205280000210120032004417c6a3602042003200541046a360200410c21030c1c0b200128020022032802042204450d1d200328020022052d0000210620032004417f6a220b3602042003200541016a360200410021010240024020060e0201001f0b200b4104490d1e2005280001210820032004417b6a3602042003200541056a360200410121010b2008ad21074200210e410d21030c1c0b200128020022032802042204450d1c200328020022052d0000210620032004417f6a220b3602042003200541016a360200410021010240024020060e0201001e0b200b4104490d1d2005280001210820032004417b6a3602042003200541056a360200410121010b2008ad21074200210e410e21030c1b0b2001280200220328020422044104490d1b20032802002205280000210120032004417c6a3602042003200541046a360200410f21030c190b2001280200220328020422044104490d1a20032802002205280000210120032004417c6a3602042003200541046a360200411021030c180b2001280200220328020422044104490d1920032802002205280000210120032004417c6a3602042003200541046a360200411121030c170b2001280200220328020422044104490d1820032802002205280000210120032004417c6a3602042003200541046a360200411221030c160b2001280200220328020422044104490d1720032802002205280000210120032004417c6a3602042003200541046a360200411321030c150b2001280200220328020422044104490d1620032802002205280000210120032004417c6a3602042003200541046a360200411421030c140b2001280200220328020422044104490d1520032802002205280000210120032004417c6a3602042003200541046a360200411521030c130b2001280200220328020422044104490d1420032802002205280000210120032004417c6a3602042003200541046a360200411621030c120b2001280200220328020422044104490d1320032802002205280000210120032004417c6a3602042003200541046a360200411721030c110b2001280200220328020422044104490d1220032802002205280000210120032004417c6a3602042003200541046a360200411821030c100b2001280200220328020422044104490d1120032802002205280000210120032004417c6a3602042003200541046a360200411921030c0f0b2001280200220328020422044104490d1020032802002205280000210120032004417c6a3602042003200541046a360200411a21030c0e0b2001280200220128020422034108490d0f2001280200220429000021072001200341786a3602042001200441086a3602004200210e411b21030c0e0b2001280200220328020422044104490d0e20032802002205280000210120032004417c6a3602042003200541046a360200411c21030c0c0b2001280200220328020422044104490d0d20032802002205280000210120032004417c6a3602042003200541046a360200411d21030c0b0b2001280200220328020422044104490d0c20032802002205280000210120032004417c6a3602042003200541046a360200411e21030c0a0b2001280200220128020422034110490d0b2001200341706a36020420012001280200220341106a360200200341086a290000210e20032900002107411f21030c0a0b2001280200220128020422034110490d0a2001200341706a36020420012001280200220341106a360200200341086a290000210e20032900002107412021030c090b2001280200220328020422044104490d0920032802002205280000210120032004417c6a3602042003200541046a360200412121030c070b2001280200220328020422044104490d0820032802002205280000210120032004417c6a3602042003200541046a360200412221030c060b2001280200220328020422044104490d0720032802002205280000210120032004417c6a3602042003200541046a360200412321030c050b2001280200220328020422044104490d0620032802002205280000210120032004417c6a3602042003200541046a360200412421030c040b2001280200220328020422044104490d0520032802002205280000210120032004417c6a3602042003200541046a360200412521030c030b2001280200220328020422044104490d0420032802002205280000210120032004417c6a3602042003200541046a360200412621030c020b2001280200220328020422044104490d0320032802002205280000210120032004417c6a3602042003200541046a360200412721030c010b2001280200220328020422044104490d0220032802002205280000210120032004417c6a3602042003200541046a360200412821030b0b20004115360200200041186a200e370200200041106a20073702002000410c6a2001360200200041086a20033602000c2b0b200041263602000c2a0b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241c8106a200110f30220022802c810450d00200241b8096a200241c8106a41c00110d40b1a02402001280200220328020422044110490d002003200441706a220636020420032003280200220541106a360200200220052900003703c8102002200541086a2900003703d01020064110490d002003200441606a220636020420032003280200220541106a360200200241c8106a41186a2208200541086a290000370300200220052900003703d81020064110490d002003200441506a36020420032003280200220441106a360200200241a82c6a41086a2205200241c8106a41086a290300370300200241a82c6a41106a200241c8106a41106a290300370300200241a82c6a41186a2008290300370300200241a82c6a41206a22062004290000370300200241a82c6a41286a2208200441086a290000370300200220022903c8103703a82c2001280200220328020422044104490d002003280200220b280000210920032004417c6a3602042003200b41046a36020020022802b8092103200241d8176a200241b8096a41047241bc0110d40b1a200241f82b6a41286a2008290300370300200241f82b6a41206a2006290300370300200241f82b6a41186a2204200241a82c6a41186a290300370300200241f82b6a41106a2206200241a82c6a41106a290300370300200241f82b6a41086a2005290300370300200220022903a82c3703f82b2003450d0120024180236a41286a200241f82b6a41286a29030037030020024180236a41206a200241f82b6a41206a29030037030020024180236a41186a200429030037030020024180236a41106a200629030037030020024180236a41086a200241f82b6a41086a290300370300200220022903f82b37038023200220033602b023200241b4236a200241d8176a41bc0110d40b2104200220093602f024200241b8046a2001108c020240024020022802b8040d0020022802bc042105200241b0046a2001108c0220022802b004450d010b200241b0236a10fc020c020b20022802b404210120024188096a41286a220620024180236a41286a29030037030020024188096a41206a220820024180236a41206a29030037030020024188096a41186a220b20024180236a41186a29030037030020024188096a41106a220920024180236a41106a29030037030020024188096a41086a220a20024180236a41086a290300370300200220022903802337038809200241a01b6a200441c40110d40b1a200241d8086a41086a2204200a290300370300200241d8086a41106a220a2009290300370300200241d8086a41186a2209200b290300370300200241d8086a41206a220b2008290300370300200241d8086a41286a2208200629030037030020022002290388093703d8082000413c6a200241a01b6a41c40110d40b1a200241a0086a412c6a2008290300370200200241a0086a41246a200b290300370200200241a0086a411c6a2009290300370200200241a0086a41146a200a290300370200200241a0086a410c6a2004290300370200200220022903d8083702a40820004114360200200020022902a0083702042000410c6a200241a0086a41086a290200370200200041146a200241a0086a41106a2902003702002000411c6a200241a0086a41186a290200370200200041246a200241a0086a41206a2902003702002000412c6a200241a0086a41286a290200370200200041346a200241d0086a28020036020020004184026a200136020020004180026a2005360200200041386a20033602000c2b0b200241b8096a10fc020b200041263602000c290b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024020060e04000102030b0b20024180236a200110f9042002280280232203450d0a200229028423210e0240200110fb042204450d00410121010c040b200e42ffffff3f8350450d090c0a0b2001280200220328020422044102490d09200328020022062f0000210520032004417e6a3602042003200641026a36020020024180236a200110f9042002280280232203450d09200229028423210e200128020022042802042206450d07200428020022082d0000210b20042006417f6a3602042004200841016a3602004200210f4100210402400240200b0e020100090b2001280200220428020422084104490d082004280200220b280000210620042008417c6a3602042004200b41046a3602002001280200220428020422084104490d082004280200220b350000210f20042008417c6a3602042004200b41046a360200410121040b200241a8046a2001108c0220022802a8040d072001280200220b280204220920022802ac042208490d072008417f4c0d1c0240024020080d004101210a0c010b20081038220a450d1e200a4100200810d60b1a200b28020421090b20092008490d06200a200b280200220d200810d40b2112200b200920086b360204200b200d20086a3602002001280200220b2802042209450d05200b280200220d2d0000210c200b2009417f6a360204200b200d41016a3602004100210b02400240200c0e020100070b4101210b0b2001280200220128020422094108490d052008411076210a2008410876210d2001280200220c29000021072001200941786a3602042001200c41086a360200200f2012ad42208684211041022101200821090c020b2001280200220328020422044102490d08200328020022052f0000210a20032004417e6a3602042003200541026a36020020024180236a200110f9042002280280232209450d082002290284232107200128020022032802042204450d03200328020022052d0000210620032004417f6a3602042003200541016a3602004200210f410021034100210c0240024020060e020100050b2001280200220428020422054104490d0420042802002206280000211220042005417c6a3602042004200641046a3602002001280200220428020422054104490d0420042802002206350000210f20042005417c6a3602042004200641046a3602004101210c0b20024180236a410472210d200128020022042802042108417f2105034020082003460d04200428020022062d0000210b2004200820056a3602042004200641016a360200200d20036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d0000210320024194236a29020021182002418c236a290200210e2002290284232114200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220183703b01b200220033a00b81b200220024180236a411d6a2800003600b91b200220143703a01b2001280200220128020422034108490d0320022800af1b210420022900b71b211020022900a71b210e2001280200220529000021112001200341786a3602042001200541086a3602002014420888a721052014421888a721032018421888a721062014a7210b410321010c010b2001280200220328020422044102490d07200328020022052f0000210a20032004417e6a3602042003200541026a36020020024180236a200110f9042002280280232209450d0720022902842321072001280200220328020422044104490d0120032802002205280000210c20032004417c6a3602042003200541046a3602002001280200220328020422044104490d0120032802002205280000211220032004417c6a3602042003200541046a36020020024180236a410472210320012802002204280204210b417f21010340200b20016a2205417f460d02200428020022062d00002108200420053602042004200641016a360200200320083a0000200341016a21032001417f6a2201415f470d000b20024194236a2902002211a741087420024190236a28020022014118767221042001ad4228862002418c236a35020042088684200229028423220f42388884210e2002419d236a350000200241a1236a330000422086844210862002419c236a310000420886842011423888842110200f421888a72103200f420888a721052011421888a72106200241a3236a2d00002108200fa7210b410421010b2000200d3a00292000200b3a000920004113360200200041c8006a2011370200200041c0006a200f3702002000413c6a2012360200200041386a200c360200200041306a20073702002000412c6a20093602002000412a6a200a3b0100200041286a20083a0000200041206a20103702002000411c6a2006360200200041186a2004360200200041106a200e3702002000410c6a20033602002000410a6a20053b0100200041086a20013a00000c2f0b200742ffffff3f83500d05200910390c050b200742ffffff3f83500d04200910390c040b2008450d010b200a10390b200e42ffffff3f83500d010b200310390b200041263602000c280b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a36020041042117024002400240024002400240024002400240024020060e0a000102090304050607080a0b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d0a200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b200128020022032802042204450d09200241af1b6a290000210f20022900b71b210720022900a71b210e200328020022052d0000210620032004417f6a3602042003200541016a360200410621030240024020060e0201000b0b200128020022032802042204450d0a200328020022052d0000210620032004417f6a3602042003200541016a360200410021030240024002400240024020060e060500010203040f0b410121030c040b410221030c030b410321030c020b410421030c010b410521030b200110fb04220c450d092010421888a7210a2010420888a7210d2010a7210b410121170c080b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d09200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b200128020022032802042204450d08200241af1b6a290000210f20022900b71b210720022900a71b210e200328020022052d0000210620032004417f6a3602042003200541016a3602004100210302400240024002400240024020060e060500010203040e0b410121030c040b410221030c030b410321030c020b410421030c010b410521030b2001280200220128020422044104490d082010421888a7210a2010420888a7210d2010a7210b20012802002205280000210c20012004417c6a3602042001200541046a360200410221170c070b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d08200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b200128020022032802042204450d07200241af1b6a290000210f20022900b71b210720022900a71b210e200328020022052d0000210620032004417f6a3602042003200541016a3602004100210302400240024002400240024020060e060500010203040d0b410121030c040b410221030c030b410321030c020b410421030c010b410521030b2001280200220128020422044104490d072010421888a7210a2010420888a7210d2010a7210b20012802002205280000210c20012004417c6a3602042001200541046a360200410321170c060b200128020022032802042204450d06200328020022052d0000210620032004417f6a3602042003200541016a3602004100210b02400240024002400240024020060e060500010203040c0b4101210b0c040b4102210b0c030b4103210b0c020b4104210b0c010b4105210b0b2001280200220328020422044104490d0620032802002205280000210a20032004417c6a3602042003200541046a3602002001280200220128020422034102490d06200128020022042f0000210d20012003417e6a3602042001200441026a360200410521170c050b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d06200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b200128020022032802042204450d05200241af1b6a290000210f20022900b71b210720022900a71b210e200328020022052d0000210620032004417f6a3602042003200541016a3602004100210302400240024002400240024020060e060500010203040b0b410121030c040b410221030c030b410321030c020b410421030c010b410521030b2001280200220428020422054102490d05200428020022062f0000210920042005417e6a3602042004200641026a360200200241a0046a2001108c0220022802a0040d0520022802a404210c20024198046a2001108c022002280298040d052010421888a7210a2010420888a7210d2010a7210b200228029c04211e410621170c040b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d05200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a7210a2010420888a7210d200241af1b6a290000210f20022900b71b210720022900a71b210e20024180236a410472210c2010a7210b20012802002203280204210641002101417f2104034020062001460d05200328020022052d000021092003200620046a3602042003200541016a360200200c20016a20093a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021042002419c236a2d0000210120024194236a290200211020024180236a41086a28020021052002418c236a29020021112002280284232103200241a01b6a411d6a200241a1236a2f00003b0000200220113702a81b200220053602a41b200220103702b01b200220013a00b81b200220024180236a411d6a2800003600b91b200220033602a01b200341087621092010421888a7211320022800a71b211e20022800af1b211220022900b71b211020022800ab1b211920022800a31b210c410721170c030b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d04200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a7210a2010420888a7210d200241af1b6a290000210f20022900b71b210720022900a71b210e20024180236a410472210c2010a7210b20012802002203280204210641002101417f2104034020062001460d04200328020022052d000021092003200620046a3602042003200541016a360200200c20016a20093a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021042002419c236a2d0000210120024194236a29020021104108211720024180236a41086a28020021052002418c236a29020021112002280284232103200241a01b6a411d6a200241a1236a2f00003b0000200220113702a81b200220053602a41b200220103702b01b200220013a00b81b200220024180236a411d6a2800003600b91b200220033602a01b200341087621092010421888a7211320022800a71b211e20022800af1b211220022900b71b211020022800ab1b211920022800a31b210c0c020b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d03200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a7210a2010420888a7210d200241af1b6a290000210f20022900b71b210720022900a71b210e20024180236a410472210c2010a7210b20012802002203280204210641002101417f2104034020062001460d03200328020022052d000021092003200620046a3602042003200541016a360200200c20016a20093a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021042002419c236a2d0000210120024194236a290200211020024180236a41086a28020021052002418c236a29020021112002280284232103200241a01b6a411d6a200241a1236a2f00003b0000200220113702a81b200220053602a41b200220103702b01b200220013a00b81b200220024180236a411d6a2800003600b91b200220033602a01b200341087621092010421888a7211320022800a71b211e20022800af1b211220022900b71b211020022800ab1b211920022800a31b210c410921170c010b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d02200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021082002419c236a2d000021032002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a7210a2010420888a7210d200241af1b6a290000210f20022900b71b210720022900a71b210e20024180236a41047221122010a7210b20012802002204280204210941002103417f2105034020092003460d02200428020022062d0000210c2004200920056a3602042004200641016a360200201220036a200c3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021042002419c236a2d0000210320024194236a29020021142002418c236a29020021102002290284232111200241a01b6a411d6a200241a1236a2f00003b0000200220103703a81b200220113703a01b200220143703b01b200220033a00b81b200220024180236a411d6a2800003600b91b200128020022032802042205450d0120022900a71b211820022800af1b211220022900b71b2110200328020022062d0000210920032005417f6a3602042003200641016a360200410621050240024020090e020100030b200128020022032802042205450d02200328020022062d0000210920032005417f6a3602042003200641016a360200410021050240024002400240024020090e06050001020304070b410121050c040b410221050c030b410321050c020b410421050c010b410521050b200110fb042215450d012011421888a7210c2011420888a721092014421888a721132018422088a721192011a721032018a7211e410a21170b200020053a0045200020033a00252000200b3a0005200020173a000420004112360200200041146a200f3702002000410c6a200e370200200041c8006a2015360200200041c4006a20043a00002000413c6a2010370200200041386a2013360200200041346a2012360200200041306a20193602002000412c6a201e360200200041286a200c360200200041266a20093b0100200041246a20083a00002000411c6a2007370200200041086a200a360200200041066a200d3b01000c280b200041263602000c270b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a360204410121042003200541016a360200024002400240024002400240024020060e0400010203070b200110fb042203450d060c030b200110fb042203450d052001280200220128020422044108490d042001280200220529000021072001200441786a3602042001200541086a3602002007422088a721052007a72106410221040c020b20024180236a200110f40420022d0080234105460d04200241d0106a20024194236a290200370300200241d8106a2002419c236a29020037030020022002418c236a2902003703c8102002290284232207422088a7210520022802802321032007a72106410321040c010b20024180236a200110f40420022d0080234105460d03200241a01b6a41086a220420024194236a290200370300200241a01b6a41106a22082002419c236a29020037030020022002418c236a2902003703a01b20024180236a41086a280200210520022802842321062002280280232103200110fb042201450d01200241c8106a41106a2008290300370300200241c8106a41086a2004290300370300200220022903a01b3703c810410421040b200241b8096a41106a200241c8106a41106a2903002207370300200241b8096a41086a200241c8106a41086a290300220e370300200220022903c810220f3703b809200041106a2005ad4220862006ad843702002000410c6a2003360200200041086a200436020020004111360200200041186a200f370200200041206a200e370200200041286a2007370200200041306a20013602000c290b200341ff01714102470d012005450d01200610390c010b2003108505200310390b200041263602000c260b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602042003200541016a3602000240024002400240024002400240024002400240024020060e060001020304050b0b2001280200220328020422054104490d0a20032802002206280000210420032005417c6a3602042003200641046a36020020024180236a200110f00420022802802322054102460d0a200128020022082802042209450d0a20024188236a280200210620022802842321032008280200220a2d0000210b20082009417f6a360204410121092008200a41016a360200200110fb042208450d0a0c060b2001280200220328020422054104490d0920032802002206280000210420032005417c6a3602042003200641046a3602002001280200220128020422034104490d0920012802002206280000210520012003417c6a3602042001200641046a360200410221090c050b20024180046a2001108c022002280280040d082001280200220528020422062002280284042203490d082003417f4c0d180240024020030d00410121040c010b200310382204450d1a20044100200310d60b1a200528020421060b20062003490d07200420052802002208200310d40b1a2005200620036b3602042005200820036a3602002001280200220528020422084104490d062005280200220b280000210620052008417c6a3602042005200b41046a36020020024180236a200110f00420022802802322084102460d06200128020022052802042209450d0620022902842321072005280200220a2d0000210b20052009417f6a3602042005200a41016a360200200110fb042201450d06410321090c030b20024188046a2001108c022002280288040d07200128020022012802042205200228028c042203490d072003417f4c0d170240024020030d00410121040c010b200310382204450d1920044100200310d60b1a200128020421050b20052003490d06200420012802002206200310d40b1a2001200520036b3602042001200620036a36020041042109200321050c030b2001280200220328020422054104490d0620032802002206280000210420032005417c6a3602042003200641046a36020020024180236a200110f00420022802802322054102460d06200128020022082802042209450d0620024188236a280200210620022802842321032008280200220a2d0000210b20082009417f6a3602042008200a41016a360200200110fb042208450d06410521090c020b20024190046a2001108c022002280290040d052001280200220528020422062002280294042203490d052003417f4c0d150240024020030d00410121040c010b200310382204450d1720044100200310d60b1a200528020421060b20062003490d04200420052802002208200310d40b1a2005200620036b3602042005200820036a3602002001280200220528020422084104490d022005280200220b280000210620052008417c6a3602042005200b41046a36020020024180236a200110f00420022802802322084102460d02200128020022052802042209450d0220022902842321072005280200220a2d0000210b20052009417f6a3602042005200a41016a360200200110fb042201450d02410621090b200321050b2000200b3a0005200020093a000420004110360200200041246a20013602002000411c6a2007370200200041186a2008360200200041146a2006360200200041106a20033602002000410c6a2005360200200041086a20043602000c290b2003450d020c010b2003450d010b200410390b200041263602000c250b0240200128020022032802042204450d00200328020022052d0000210620032004417f6a3602044101210c2003200541016a360200024002400240024002400240024020060e0403000102070b20024180236a200110f40420022d00802322034105460d064102210c200241d8176a41026a20022d0083233a0000200241c8106a41086a20024194236a290200370300200241d8106a2002419c236a290200370300200220022f0081233b01d81720022002418c236a2902003703c81020024180236a41086a280200210420022802842321050c020b20024180236a200110f40420022d00802322034105460d05200241b8096a41026a20022d0083233a0000200241a01b6a41086a20024194236a290200370300200241a01b6a41106a2002419c236a290200370300200220022f0081233b01b80920022002418c236a2902003703a01b20024180236a41086a2802002104200228028423210502402001280200220128020422064110490d002001200641706a220b36020420012001280200220841106a360200200b4110490d00200841086a290000210f200829000021102001200641606a220b3602042001200841206a360200200b4104490d00200841186a290000210e200829001021072008280020210a20012006415c6a3602042001200841246a360200200241d8176a41026a200241b8096a41026a2d00003a0000200241c8106a41086a200241a01b6a41086a290300370300200241c8106a41106a200241a01b6a41106a290300370300200220022f01b8093b01d817200220022903a01b3703c8102010422088a72109200f422088a7210d2010a72108200fa7210b4103210c0c020b20034102470d0520040d040c050b20024180236a200110f40420022d00802322034105460d04200241ba096a20022d0083233a0000200241a01b6a41086a20024194236a290200370300200241a01b6a41106a2002419c236a290200370300200220022f0081233b01b80920022002418c236a220d2902003703a01b20024180236a41086a22062802002104200228028423210520024180236a200110f40420022d0080234105460d022006280200210b200228028423210920022802802321082001280200220128020422064110490d0120024198236a290300210e20024180236a41106a2903002107200241a0236a280200210a200d280200210d2001200641706a220c36020420012001280200221541106a360200200c4110490d01201541086a29000021102015290000210f2001200641606a22123602042001201541206a3602004104210c20124104490d01201541186a2900002114201529001021112015280020211220012006415c6a3602042001201541246a360200200241d8176a41026a200241b8096a41026a2d00003a0000200241c8106a41086a200241a01b6a41086a290300370300200241c8106a41106a200241a01b6a41106a290300370300200220022f01b8093b01d817200220022903a01b3703c8100b200041186a20022903c810370200200241a0086a41026a200241d8176a41026a2d000022013a0000200041206a200241c8106a41086a290300370200200041286a200241c8106a41106a290300370200200220022f01d81722063b01a008200041f0006a2014370200200041e8006a2011370200200041e0006a2010370200200041d8006a200f370200200041c8006a200e370200200041c0006a2007370200200041386a200dad422086200bad84370200200041306a2009ad4220862008ad843702002000410c6a20033a0000200041086a200c3602002000410f360200200020063b000d2000410f6a20013a0000200041f8006a2012360200200041d0006a200a360200200041146a2004360200200041106a20053602000c280b200841ff01714102470d00200b450d00200910390b20034102470d012004450d010b200510390b200041263602000c240b0240200128020022032802042204450d00200328020022052d0000210820032004417f6a3602042003200541016a3602004108211a0240024002400240024002400240024002400240024020080e09000102030405060a070b0b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d0b200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021092002419c236a2d000021032002418c236a290200210720024194236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200241af1b6a290000211020022900b71b210e20022900a71b21072001200128020441016a2203360204200320012802084b0d0a20024180236a20011094022002280280232103200241a01b6a20024180236a41047241bc0710d40b1a20034126460d0a41c00710382215450d19200f421888a7210b200f420888a7210a2010422088a7210d200fa721122010a7210c20152003360200201541046a200241a01b6a41bc0710d40b1a20012001280204417f6a3602044101211a0c090b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d0a200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021092002419c236a2d000021032002418c236a290200210720024194236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220033a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a200241af1b6a2900002210422088a7210d20022900b71b210e20022900a71b210720024180236a4104722103200fa721122010a7210c200128020022042802042115417f21010340201520016a2205417f460d0a200428020022062d00002108200420053602042004200641016a360200200320083a0000200341016a21032001417f6a2201415f470d000b2002419d236a2f00002002419f236a2d00004110747241087420024199236a280000220641187672211720022f01842320022d0086234110747221032002418b236a2f00002002418d236a2d000041107472210420024192236a2f010020024194236a2d00004110747221052002418e236a280100211320024195236a2800002119200241a0236a280200211e20022800872321154102211a0c080b20024180236a200110f904200228028023220b450d08200229028423210702402001280200220328020422044102490d00200328020022052f0000210a20032004417e6a3602042003200541026a36020020012802002201280204220341044f0d060b200742ffffff3f83500d08200b10390c080b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d08200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120460d060c000b0b20024180236a410472210920012802002204280204210841002103417f2105034020082003460d07200428020022062d0000210b2004200820056a3602042004200641016a360200200920036a200b3a00002002200341016a2206360280232005417f6a21052006210320064120470d000b200241a3236a2d000021092002419c236a2d0000210320024194236a29020021072002418c236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220033a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a2007421888a7210d20022800af1b210c20022900b71b210e20022900a71b210720024180236a4104722103200fa72112200128020022042802042115417f21010340201520016a2205417f460d07200428020022062d00002108200420053602042004200641016a360200200320083a0000200341016a21032001417f6a2201415f470d000b2002419d236a2f00002002419f236a2d00004110747241087420024199236a280000220641187672211720022f01842320022d0086234110747221032002418b236a2f00002002418d236a2d000041107472210420024192236a2f010020024194236a2d00004110747221052002418e236a280100211320024195236a2800002119200241a0236a280200211e20022800872321154105211a0c050b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d06200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021092002419c236a2d0000210120024194236a29020021072002418c236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220013a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a2007421888a7210d20022800af1b210c20022900b71b210e20022900a71b2107200fa721124106211a0c040b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d05200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021092002419c236a2d0000210120024194236a29020021072002418c236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220013a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a2007421888a7210d20022800af1b210c20022900b71b210e20022900a71b2107200fa721124107211a0c030b20024180236a410472210b20012802002203280204210641002101417f2104034020062001460d04200328020022052d000021082003200620046a3602042003200541016a360200200b20016a20083a00002002200141016a2205360280232004417f6a21042005210120054120470d000b200241a3236a2d000021092002419c236a2d0000210120024194236a29020021072002418c236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220013a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a2007421888a7210d20022800af1b210c20022900b71b210e20022900a71b2107200fa721124109211a0c020b20012802002204280000210c20012003417c6a3602042001200441046a3602004103211a0c010b200241a3236a2d000021092002419c236a2d0000210120024194236a29020021072002418c236a290200210e200229028423210f200241a01b6a411d6a200241a1236a2f00003b00002002200e3703a81b200220073703b01b200220013a00b81b200220024180236a411d6a2800003600b91b2002200f3703a01b200f421888a7210b200f420888a7210a2007421888a7210d20022800af1b210c20022900b71b210e20022900a71b2107200fa721124104211a0b200020033b0025200020123a00052000201a3a0004200020022f00c8103b00452000413c6a20064110763a00002000413a6a20063b0100200041356a20054110763a0000200041336a20053b00002000412e6a20044110763a00002000412c6a20043b0100200041276a20034110763a0000200041c1006a201e3600002000413d6a2017360000200041366a20193601002000412f6a2013360000200041286a2015360200200041246a20093a00002000411c6a200e370200200041186a200d360200200041146a200c3602002000410c6a2007370200200041086a200b360200200041066a200a3b0100200041c7006a200241ca106a2d00003a00002000410e3602000c240b200041263602000c230b410f210a0c0b0b20024180236a200110f40420022d0080234105460d132002418c236a290200210e200241a0236a28020021052002419e236a2f010021082002419d236a2d000021092002419c236a2d0000210b20024194236a2902002107200229028423210f2002280280232103410e210a0c0a0b20024180236a200110f40420022d0080234105460d12200241a0236a220a28020021052002419e236a2f010021082002419d236a2d000021092002419c236a2d0000210b20024194236a29020021072002418c236a290200210e20024188236a220d28020021042002280284232106200228028023210320024180236a200110fc04024020022d0080234106460d002004ad4220862006ad84210f20024198236a290300211020024190236a2903002111200a280200210c200d29030021142002290380232118410d210a0c0a0b200341ff01714102470d122004450d12200610390c120b20024180236a200110f40420022d0080234105460d11200241a0236a220d28020021052002419e236a2f010021082002419d236a2d000021092002419c236a2d0000210b20024194236a2902002107410c210a20024180236a410c6a290200210e20024188236a221228020021042002280284232106200228028023210320024180236a200110fc04024020022d0080234106460d002004ad4220862006ad84210f20024198236a290300211020024190236a2903002111200d280200210c2012290300211420022903802321180c090b200341ff01714102470d112004450d11200610390c110b20024180236a200110f40420022d0080234105460d102002418c236a290200210e200241a0236a28020021052002419e236a2f010021082002419d236a2d000021092002419c236a2d0000210b20024194236a2902002107200229028423210f2002280280232103410b210a0c070b200241f8036a2001108c0220022802f8030d0f20022802fc03210320024180236a200110f40420022d0080234105460d0f20024188236a2802002106200228028423210a20022802802321040240024020012802002201280204220d450d00200241a0236a35020021182002419c236a28020021052002419a236a2f0100210820024199236a2d0000210920024198236a2d0000210b20024190236a29030021072002418c236a350200210e2001280200220c2d000021122001200d417f6a22153602042001200c41016a3602004200211402400240024002400240024020120e0707000102030405060b20154110490d052001200d416f6a3602042001200c41116a360200200c41096a2900002110200c2900012111420121140c060b420221140c050b420321140c040b420421140c030b420521140c020b420621140c010b200441ff01714102470d102006450d10200a10390c100b200e4220862006ad84210e200aad4220862004ad84210f410a210a0c060b200241f0036a2001108c0220022802f0030d0e2001280200220128020422044108490d0e20022802f40321032001280200220529000021072001200441786a3602042001200541086a360200200742ff01560d0e200742ff0183210f4109210a0c050b200241e8036a2001108c0220022802e8030d0d20022802ec03210520024180236a410472210920012802002203280204210841002101417f2104034020082001460d0e200328020022062d0000210b2003200820046a3602042003200641016a360200200920016a200b3a00002002200141016a2206360280232004417f6a21042006210120064120470d000b200241a3236a2d0000210b2002419c236a2d000021012002418c236a290200210720024194236a290200210e2002290284232110200241a01b6a411d6a200241a1236a2f00003b00002002200e3703b01b200220073703a81b200220013a00b81b200220024180236a411d6a2800003600b91b200220103703a01b2010421888a721032010420888a72127200241af1b6a290000210e20022900b71b210720022900a71b210f2010a7212d4108210a0c040b200241e0036a2001108c0220022802e0030d0c20022802e4032103200241c8036a200110f50420022903c803a70d0c200241d8036a290300210e20022903d003210f4107210a0c030b2001280200220128020422044104490d0b20012802002205280000210320012004417c6a3602042001200541046a3602004106210a0c020b200241c0036a2001108c0220022802c0030d0a20022802c4032103200241a8036a200110f50420022903a803a70d0a200241b8036a290300210e20022903b003210f4105210a0c010b200241a0036a2001108c0220022802a0030d0920022802a403220d2001280200220528020441c4006e22032003200d4b1bad42c4007e2207422088a70d012007a72204417f4c0d010240024020040d00410421030c010b200410382203450d030b2001200128020441016a2206360204200241003602802c200220033602f82b2002200441c4006e3602fc2b024002400240200620012802084b0d00200d450d0220024180236a410472210a20024180236a4101722112200241f1176a21132002419d236a2119410021154100210c0340200c41016a210c2005280204210b417f21064100210402400340200b2004460d01200528020022082d000021092005200b20066a3602042005200841016a360200200a20046a20093a00002002200441016a2208360280232006417f6a21062008210420084120470d000b20022d00a323210520022d009c2321042002290284232107200229029423210e200229028c23210f20132019280000360000201341046a201941046a2f00003b00002002200f3703e0172002200e3703e817200220073703d817200220043a00f01720022800e717210620022900df17210f20022900ef17211020024180236a200110fc0420022d00802322084106460d00200241a01b6a411f6a22042012411f6a280000360000200241a01b6a41186a220b201241186a290000370300200241c8106a41086a201241086a2900002211370300200241c8106a41106a201241106a2900002214370300200241c8106a41186a2209200b290300370300200241c8106a411f6a220b20042800003600002002201229000022183703c810200241b8096a411f6a2217200b280000360000200241b8096a41186a220b2009290300370300200241b8096a41106a22092014370300200241b8096a41086a221e2011370300200220183703b8092007420888a7211a2007421888a7211f200e421888a721242007a721200240201520022802fc2b470d00200241f82b6a201510890320022802f82b210320022802802c21150b2003201541c4006c6a2204200f370007200420083a0020200420053a001f200420103700172004201f3600032004201a3b0001200420203a00002004410f6a2024ad4220862006ad84370000200420022903b809370021200441296a201e290300370000200441316a2009290300370000200441396a200b290300370000200441c0006a2017280000360000200220022802802c41016a22153602802c200c200d460d03200128020021050c010b0b200241c8106a411f6a200241a01b6a411f6a280000360000200241c8106a41186a200241a01b6a41186a29030037030020022802f82b21032015450d00201541c4006c2104200341286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010390b200141c4006a2101200441bc7f6a22040d000b0b20022802fc2b2201450d0b200141c4006c450d0b200310390c0b0b2001280204210620022802f82b21030b20012006417f6a3602042003450d0920022902fc2b210f4103210a0b200041d4006a200229039008370200200041ec006a20022903f807370200200041dc006a20024190086a41086a280200360200200241d42b6a41026a2201200241f42b6a41026a2d00003a0000200041f4006a200241f8076a41086a290300370200200041fc006a200241f8076a41106a290300370200200241d02b6a41026a2206200241f02b6a41026a2d00003a0000200220022f01f42b3b01d42b200220022f01f02b3b01d02b200041a0016a200241e0076a41106a29030037020020004198016a200241e0076a41086a29030037020020004190016a20022903e007370200200241cc2b6a41026a222f200241ec2b6a41026a2d00003a0000200041b4016a20022903c807370200200041bc016a200241c8076a41086a290300370200200041c4016a200241c8076a41106a290300370200200241c82b6a41026a222e200241e82b6a41026a2d00003a0000200220022f01ec2b3b01cc2b200220022f01e82b3b01c82b200041e8016a200241b0076a41106a290300370200200041e0016a200241b0076a41086a290300370200200041d8016a20022903b007370200200241a82c6a41206a2216200241a0086a41206a280200360200200241a82c6a41186a2230200241a0086a41186a290300370300200241a82c6a41106a2231200241a0086a41106a290300370300200241a82c6a41086a22b501200241a0086a41086a290300370300200241c42b6a41026a22b601200241e42b6a41026a2d00003a0000200220022903a0083703a82c200220022f01e42b3b01c42b2000419e026a200241e02b6a41026a2d00003a00002000419c026a20022f01e02b3b0000200241c02b6a41026a22b701200241dc2b6a41026a2d00003a0000200220022f01dc2b3b01c02b200241bc2b6a41026a22b801200241d82b6a41026a2d00003a0000200220022f01d82b3b01bc2b200041c8006a2010370200200041c0006a2011370200200041186a200e370200200041106a200f370200200041e0006a200d3a0000200041d0006a200c360200200041386a2014370200200041306a20183702002000412c6a2005360200200020083b012a200020093a0029200041286a200b3a0000200041206a20073702002000410c6a2003360200200020273b000a2000202d3a0009200041086a200a3a00002000410d360200200041e4006a2015360200200041e8006a201236020020004184016a20133a0000200020022f01d42b3b0061200041e3006a20012d00003a000020004188016a20173602002000418c016a2019360200200041a8016a201e3a0000200020022f01d02b3b00850120004187016a20062d00003a0000200020022f01cc2b3b00a901200041ab016a202f2d00003a0000200041cc016a20253a0000200041b0016a201a360200200041ac016a201f360200200041cf016a202e2d00003a0000200020022f01c82b3b00cd01200041d4016a202c360200200041d0016a202a36020020004190026a201628020036020020004188026a203029030037020020004180026a2031290300370200200041f8016a20b501290300370200200041f0016a20022903a82c37020020004194026a20243a000020004197026a20b6012d00003a0000200020022f01c42b3b0095022000419f026a202636000020004198026a2020360000200041a5026a20b7012d00003a0000200020022f01c02b3b00a302200041a8026a20044110763a0000200041a6026a20043b0000200041ab026a20b8012d00003a0000200020022f01bc2b3b00a9020c160b1034000b1032000b201e4101470d00201a450d00201f10390b20134101470d002019450d00201710390b200d4101470d002012450d00201510390b202741ff01714101470d00202f450d00202e10390b200641ff01714101470d002007a7450d00202d10390b0240200f422088a72201450d002003200141c8006c6a2104200321010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012004470d000b0b200fa72201450d00200141c8006c450d00200310390b200041263602000c0d0b200041263602000c0c0b200d10390c020b2002280284232201450d002001410c6c450d00200510390b2003450d00201210390b200041263602000c080b200820012802002209200b10d40b210a20012006200b6b36020420012009200b6a3602002004ad4220862005410276ad842107200a41087621134200210f411221120b0b200241d8176a41106a2201200241b8096a41106a290300370300200241d8176a41086a2206200241b8096a41086a290300370300200220022903b8093703d817200041186a200f422086200742208884370200200041106a20074220862013410874200841ff017172ad84370200200041346a2009360200200041306a200c3602002000412c6a200b360200200020153b002a2000200a3a0029200041286a20053a0000200041206a200e3702002000410c6a20033602002000200d3b010a200020043a0009200041086a20123a000020004106360200200041386a20022903d817370200200041c0006a2006290300370200200041c8006a2001290300370200200041d8006a2011370200200041d0006a20103702000c050b200041186a20022903c810370200200241a0086a41026a200241d8176a41026a2d0000220a3a0000200041206a200241c8106a41086a290300370200200041286a200241c8106a41106a290300370200200220022f01d817220d3b01a008200041e0006a2011370200200041d8006a2010370200200041c8006a200f370200200041c0006a200e370200200041386a2009ad4220862008ad84370200200041306a200bad4220862006ad843702002000410c6a20033a0000200041086a2001360200200041043602002000200d3b000d2000410f6a200a3a0000200041d0006a2007370200200041146a2004360200200041106a20053602000c040b200041263602000c030b200220022800ab2c3600fb2b200220022802a82c3602f82b200041386a200241d8176a41e40010d40b1a200041a8016a200241c8106a41800110d40b1a200041206a20093a0000200041186a200e370200200041106a20073702002000410c6a2001360200200041086a200d36020020004101360200200020022802f82b360021200041246a20022800fb2b360000200041a4016a2008360200200041a0016a20063602002000419c016a200b360200200041346a2003360200200041306a20053602002000412c6a2004360200200041286a200a3602000c020b2002280284232201450d00200141186c450d00200410390b200041263602000b200241802d6a24000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42c0077e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141c0076c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141c0076e360200200241206a24000f0b1034000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a2202280200109602200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a2202280200109602200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a2202280200109602200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a2202280200109602200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a2202280200109602200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a2202280200109602200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2202280200109602200228020010390f0b2000410c6a2202280200109602200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2202280200109602200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a2202280200109602200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a2202280200109602200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a1084020f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a1084020f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a2202280200108002200228020010390f0b200041286a2202280200109602200228020010390f0b0be61408027f017e0f7f017e017f037e017f027e230041d0176b220324000240200220012802044198046e2204200420024b1bad4298047e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410382206450d010b2003410036024020032006360238200320044198046e36023c0240024002402002450d00200341d8136a410c6a2107200341d8136a41046a2108200341e00f6a4104722109200341b8136a210a200341e00f6a410c6a210b4100210c4100210d034020012802042204450d022001280200220e2d0000210f20012004417f6a3602042001200e41016a3602004100210e02400240024002400240024002400240024002400240024002400240024002400240200f0e080300010205060708130b200341d8136a200110980220032802d813220f450d0820032802e013210420032802dc132110200341d8136a2001109902024020032903d81322054209510d0020032802e0132111200341cc086a200741bc0310d40b1a4101210e200f21122010211320042114200521150c030b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0e201041f8036c450d0e200f10390c0e0b200341e00f6a200110980220032802e00f220f450d0720032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341086a200110c101024002402003280208450d00200341003602e00f0c010b200341e00f6a2001200328020c10970220032802e00f0d0b0b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d07201041f8036c450d07200f10390c070b200341d8136a200110980220032802d813220f450d0620032802e013210420032802dc132110200341d8136a200110980220032802d813450d0120032802e013211120032903d81321154103210e200f211220102113200421140b200341dc046a200341cc086a41cc0310d40b1a0c0c0b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0a201041f8036c450d0a200f10390c0a0b200341e00f6a200110980220032802e00f220f450d0320032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341106a200110c101024002402003280210450d00200341003602e00f0c010b200341e00f6a2001200328021410970220032802e00f0d090b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d03201041f8036c450d03200f10390c030b200341e00f6a200110980220032802e00f220f450d0220032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341186a200110c101024002402003280218450d00200341003602e00f0c010b200341e00f6a2001200328021c10970220032802e00f0d070b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d02201041f8036c450d02200f10390c020b200341206a2001109a024108210e410121042003290320a70d0720032903282105200341d8136a200110990220032903d8134209510d07200341e00f6a200341d8136a41c80310d40b1a200341d8136a200110980220032802d813220f450d0220032802e013211420032802dc13211320032802e00f2111200341cc086a200941c40310d40b1a4106210e41002104200f2112200521150c060b200341d8136a2001109b0220032802d813410c460d00200341e00f6a200341d8136a41f80310d40b1a0240200128020422044108490d002001280200220e29000021052001200441786a220f3602042001200e41086a360200200f4108490d00200e29000821172001200441706a220f3602042001200e41106a360200200f450d00200e2d0010210f20012004416f6a3602042001200e41116a3602004100211002400240200f0e020100020b410121100b200341306a200110c10120032802300d00200341d8136a2001200328023410810220032802d813220f450d0020032802e013211420032802dc13211320032903e00f211520032802e80f2111200341cc086a200b41cc0310d40b1a200341a8086a41186a200a41186a290300370300200341a8086a41106a200a41106a290300370300200341a8086a41086a200a41086a2903003703002003200a2903003703a8084107210e41002104200f211220172118200521192010211a0c070b200341e00f6a108b020b4108210e410121040c050b200341e00f6a108d020c040b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4102210e41002104200f211220102113201621140c020b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4105210e41002104200f211220102113201621140c010b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4104210e41002104200f211220102113201621140b0b200341dc046a200341cc086a41cc0310d40b1a200341b8046a41186a200341a8086a41186a290300370300200341b8046a41106a200341a8086a41106a290300370300200341b8046a41086a200341a8086a41086a290300370300200320032903a8083703b80420040d030b200d41016a210d200341ec006a200341dc046a41cc0310d40b1a200341c8006a41186a220f200341b8046a41186a290300370300200341c8006a41106a2210200341b8046a41106a290300370300200341c8006a41086a2216200341b8046a41086a290300370300200320032903b8043703480240200c200328023c470d00200341386a200c109102200328023821062003280240210c0b2006200c4198046c6a22042011360018200420153700102004201436000c20042013360008200420123600042004201a3a00012004200e3a00002004411c6a200341ec006a41cc0310d40b1a2016290300210520102903002117200f290300211b2003290348211c200420183700900420042019370088042004201c3700e80320044180046a201b370000200441f8036a2017370000200441f0036a20053700002003200328024041016a220c360240200d2002470d000b0b20002003290338370200200041086a200341386a41086a2802003602000c010b200041003602002003280238210d0240200c450d00200c4198046c2101200d21040340200410920220044198046a2104200141e87b6a22010d000b0b200328023c2204450d0020044198046c450d00200d10390b200341d0176a24000f0b1032000b1034000bd10303037f017e037f230041800c6b22022400200241086a200110c10102400240024002402002280208450d00200041003602000c010b200228020c2203200128020441f8036e2204200420034b1bad42f8037e2205422088a70d012005a72206417f4c0d010240024020060d00410821070c010b200610382207450d030b4100210420024100360218200220073602102002200641f8036e360214024002402003450d0020024188086a4104722108034020024188086a2001109b02200228028808210620024194046a200841f40310d40b1a2006410c460d02200241206a20024194046a41f40310d40b1a024020042002280214470d00200241106a200410b50920022802102107200228021821040b2007200441f8036c6a22042006360200200441046a200241206a41f40310d40b1a2002200228021841016a22043602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b200041003602002002280210210302402004450d00200441f8036c21062003210403402004108b02200441f8036a2104200641887c6a22060d000b0b20022802142204450d00200441f8036c450d00200310390b200241800c6a24000f0b1034000b1032000bfe6b1c087f017e0a7f017e057f017e017f017e047f017e0a7f017e057f017e017f017e047f017e0a7f017e057f017e017f017e047f017e0a7f017e230041e0006b2202240002400240200128020422030d00200042093703000c010b200128020022042d0000210520012003417f6a3602042001200441016a3602000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e09000102030405060709080b200042003703000c3a0b200241286a2001109d08024020022d0028410a460d0020002002290328370308200041386a200241286a41306a290300370300200041306a200241286a41286a290300370300200041286a200241286a41206a290300370300200041206a200241286a41186a290300370300200041186a200241286a41106a290300370300200041106a200241306a290300370300200042013703000c3a0b200042093703000c390b200241286a2001109d0820022d00282203410a460d11200241266a220620022d002b3a0000200220022f00293b0124200241306a22072802002105200241286a410c6a2802002108200241286a41106a2209290300210a200241286a41186a220b280200210c200241c4006a280200210d200241286a41206a220e280200210f200241286a41246a2802002110200241286a41286a22112802002112200241286a412c6a2802002113200241286a41306a22142903002115200228022c2104200241286a2001109d08024020022d0028410a460d00200041c0006a2002290328370300200041f0006a2014290300370300200041e8006a2011290300370300200041e0006a200e290300370300200041d8006a200b290300370300200041d0006a2009290300370300200041c8006a2007290300370300200020033a0008200020022f01243b00092000410b6a20062d00003a0000200041386a2015370300200041346a2013360200200041306a20123602002000412c6a2010360200200041286a200f360200200041246a200d360200200041206a200c360200200041186a200a370300200041146a2008360200200041106a20053602002000410c6a2004360200200042023703000c390b20004209370300024002400240024002402003410f710e093d3d0001023d3d033d040b20104101470d3c2013450d3c201210390c3c0b20044101470d3b2008450d3b200510390c3b0b200c4101470d3a200f450d3a200d10390c3a0b2005450d39200410390c390b20044101470d382008450d38200510390c380b200241286a2001109d0820022d00282203410a460d11200241206a41026a20022d002b3a0000200220022f00293b0120200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d0e200241246a41026a20022d002b3a0000200220022f00293b01242004280200211a200528020021052008290300211b200c28020021082010280200211c200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2104200241286a2001109d08024020022d0028410a460d00200041f8006a2002290328370300200041a8016a200241286a41306a290300370300200041a0016a200241286a41286a29030037030020004198016a200241286a41206a29030037030020004190016a200241286a41186a29030037030020004188016a200241286a41106a29030037030020004180016a200241306a290300370300200020033a0008200020022f01203b00092000410b6a200241206a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201c360200200041d8006a2008360200200041d0006a201b370300200041cc006a2005360200200041c8006a201a360200200041c4006a2004360200200020022f01243b0041200041c3006a200241246a41026a2d00003a0000200042033703000c380b20004209370300024002400240024002402007410f710e09141400010214140314040b200c4101470d13200f450d13201310390c130b20044101470d122005450d12201a10390c120b20084101470d112010450d11201c10390c110b201a450d10200410390c100b20044101470d0f2005450d0f201a10390c0f0b200241286a2001109d0820022d00282203410a460d112002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d12200241206a41026a20022d002b3a0000200220022f00293b01202004280200211a2005280200211c2008290300211b200c28020021082010280200211e200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2105200241286a2001109d0820022d00282204410a460d0b200241246a41026a221f20022d002b3a0000200220022f00293b0124200241306a22202802002112200241286a410c6a2802002106200241286a41106a22212903002122200241286a41186a22232802002124200241c4006a2802002125200241286a41206a22262802002127200241286a41246a2802002128200241286a41286a2229280200212a200241286a412c6a280200212b200241286a41306a222c290300212d200228022c210d200241286a2001109d08024020022d0028410a460d00200041b0016a2002290328370300200041e0016a202c290300370300200041d8016a2029290300370300200041d0016a2026290300370300200041c8016a2023290300370300200041c0016a2021290300370300200041b8016a2020290300370300200020033a0008200020022f011c3b00092000410b6a2002411c6a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2008360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01203b0041200041c3006a200241206a41026a2d00003a0000200020022f01243b0079200041fb006a201f2d00003a0000200041a8016a202d370300200041a4016a202b360200200041a0016a202a3602002000419c016a202836020020004198016a202736020020004194016a202536020020004190016a202436020020004188016a202237030020004184016a200636020020004180016a2012360200200041fc006a200d360200200042043703000c370b20004209370300024002400240024002402004410f710e09111100010211110311040b20284101470d10202b450d10202a10390c100b200d4101470d0f2006450d0f201210390c0f0b20244101470d0e2027450d0e202510390c0e0b2012450d0d200d10390c0d0b200d4101470d0c2006450d0c201210390c0c0b200241286a2001109d0820022d00282203410a460d12200241186a41026a20022d002b3a0000200220022f00293b0118200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d132002411c6a41026a20022d002b3a0000200220022f00293b011c2004280200211a2005280200211c2008290300211b200c28020021082010280200211e200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2105200241286a2001109d0820022d00282204410a460d14200241206a41026a20022d002b3a0000200220022f00293b0120200241306a220d2802002123200241346a22122802002126200241386a22062903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109d0820022d00282220410a460d08200241246a41026a20022d002b3a0000200220022f00293b0124200d28020021322012280200211220062903002133202428020021062028280200213420272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c210d200241286a2001109d08024020022d0028410a460d00200041e8016a200229032837030020004198026a200241286a41306a29030037030020004190026a200241286a41286a29030037030020004188026a200241286a41206a29030037030020004180026a200241286a41186a290300370300200041f8016a200241286a41106a290300370300200041f0016a200241306a290300370300200020033a0008200020022f01183b00092000410b6a200241186a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2008360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f011c3b0041200041c3006a2002411c6a41026a2d00003a0000200020022f01203b0079200041fb006a200241206a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241246a41026a2d00003a0000200020022f01243b00b101200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2034360200200041c8016a2006360200200041c0016a2033370300200041bc016a2012360200200041b8016a2032360200200041b4016a200d360200200042053703000c360b20004209370300024002400240024002402020410f710e090e0e0001020e0e030e040b20244101470d0d2027450d0d202b10390c0d0b200d4101470d0c2012450d0c203210390c0c0b20064101470d0b2028450d0b203410390c0b0b2032450d0a200d10390c0a0b200d4101470d092012450d09203210390c090b200241286a2001109d0820022d00282203410a460d14200241146a41026a20022d002b3a0000200220022f00293b0114200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d15200241186a41026a20022d002b3a0000200220022f00293b01182004280200211a2005280200211c2008290300211b200c28020021082010280200211e200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2105200241286a2001109d0820022d00282204410a460d162002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a220d2802002123200241346a22122802002126200241386a22062903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109d0820022d00282220410a460d17200241206a41026a20022d002b3a0000200220022f00293b0120200d28020021322012280200213420062903002133202428020021062028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109d0820022d0028220d410a460d05200241246a41026a223720022d002b3a0000200220022f00293b0124200241306a2238280200212a200241286a410c6a280200211f200241286a41106a2239290300213a200241286a41186a223b280200213c200241c4006a280200213d200241286a41206a223e280200213f200241286a41246a2802002140200241286a41286a22412802002142200241286a412c6a2802002143200241286a41306a22442903002145200228022c2125200241286a2001109d08024020022d0028410a460d00200041a0026a2002290328370300200041d0026a2044290300370300200041c8026a2041290300370300200041c0026a203e290300370300200041b8026a203b290300370300200041b0026a2039290300370300200041a8026a2038290300370300200020033a0008200020022f01143b00092000410b6a200241146a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2008360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01183b0041200041c3006a200241186a41026a2d00003a0000200020022f011c3b0079200041fb006a2002411c6a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241206a41026a2d00003a0000200020022f01203b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2006360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a20372d00003a0000200020022f01243b00e90120004198026a204537030020004194026a204336020020004190026a20423602002000418c026a204036020020004188026a203f36020020004184026a203d36020020004180026a203c360200200041f8016a203a370300200041f4016a201f360200200041f0016a202a360200200041ec016a2025360200200042063703000c350b2000420937030002400240024002400240200d410f710e090b0b0001020b0b030b040b20404101470d0a2043450d0a204210390c0a0b20254101470d09201f450d09202a10390c090b203c4101470d08203f450d08203d10390c080b202a450d07202510390c070b20254101470d06201f450d06202a10390c060b200241286a2001109d0820022d00282203410a460d17200241106a41026a20022d002b3a0000200220022f00293b0110200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d18200241146a41026a20022d002b3a0000200220022f00293b01142004280200211a2005280200211c2008290300211b200c28020021082010280200211e200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2105200241286a2001109d0820022d00282204410a460d19200241186a41026a20022d002b3a0000200220022f00293b0118200241306a220d2802002123200241346a22122802002126200241386a22062903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109d0820022d00282220410a460d1a2002411c6a41026a20022d002b3a0000200220022f00293b011c200d28020021322012280200213420062903002133202428020021062028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109d0820022d0028220d410a460d1b200241206a41026a20022d002b3a0000200220022f00293b0120200241306a2225280200213b200241346a222a280200213e200241386a221f290300213a200241c0006a223c2802002141200241c4006a22402802002146200241c8006a223f2802002147200241cc006a22432802002144200241d0006a223d2802002148200241d4006a22422802002149200241d8006a22372903002145200228022c2139200241286a2001109d0820022d00282238410a460d02200241246a41026a20022d002b3a0000200220022f00293b01242025280200214a202a280200212a201f290300214b203c280200211f2040280200214c203f28020021402043280200213c203d28020021432042280200213f2037290300214d200228022c2125200241286a2001109d08024020022d0028410a460d00200041d8026a200229032837030020004188036a200241286a41306a29030037030020004180036a200241286a41286a290300370300200041f8026a200241286a41206a290300370300200041f0026a200241286a41186a290300370300200041e8026a200241286a41106a290300370300200041e0026a200241306a290300370300200020033a0008200020022f01103b00092000410b6a200241106a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2008360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01143b0041200041c3006a200241146a41026a2d00003a0000200020022f01183b0079200041fb006a200241186a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a2002411c6a41026a2d00003a0000200020022f011c3b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2006360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a200241206a41026a2d00003a0000200020022f01203b00e901200041a0026a20383a000020004198026a204537030020004194026a204936020020004190026a20483602002000418c026a204436020020004188026a204736020020004184026a204636020020004180026a2041360200200041f8016a203a370300200041f4016a203e360200200041f0016a203b360200200041ec016a2039360200200041a3026a200241246a41026a2d00003a0000200020022f01243b00a102200041d0026a204d370300200041cc026a203f360200200041c8026a2043360200200041c4026a203c360200200041c0026a2040360200200041bc026a204c360200200041b8026a201f360200200041b0026a204b370300200041ac026a202a360200200041a8026a204a360200200041a4026a2025360200200042073703000c340b20004209370300024002400240024002402038410f710e09080800010208080308040b203c4101470d07203f450d07204310390c070b20254101470d06202a450d06204a10390c060b201f4101470d052040450d05204c10390c050b204a450d04202510390c040b20254101470d03202a450d03204a10390c030b200042093703000c320b200241286a2001109d0820022d00282203410a460d1a2002410c6a41026a20022d002b3a0000200220022f00293b010c200241306a2204280200210b200241346a2205280200210e200241386a2208290300210a200241c0006a220c2802002111200241c4006a22102802002116200241c8006a220f2802002117200241cc006a22132802002114200241d0006a220d2802002118200241d4006a22122802002119200241d8006a22062903002115200228022c2109200241286a2001109d0820022d00282207410a460d1b200241106a41026a20022d002b3a0000200220022f00293b01102004280200211a2005280200211c2008290300211b200c28020021082010280200211e200f28020021102013280200210c200d28020021132012280200210f2006290300211d200228022c2105200241286a2001109d0820022d00282204410a460d1c200241146a41026a20022d002b3a0000200220022f00293b0114200241306a220d2802002123200241346a22122802002126200241386a22062903002122200241c0006a22242802002129200241c4006a2228280200212e200241c8006a2227280200212f200241cc006a222b280200212c200241d0006a22252802002130200241d4006a222a2802002131200241d8006a221f290300212d200228022c2121200241286a2001109d0820022d00282220410a460d1d200241186a41026a20022d002b3a0000200220022f00293b0118200d28020021322012280200213420062903002133202428020021062028280200213620272802002128202b28020021242025280200212b202a2802002127201f2903002135200228022c2112200241286a2001109d0820022d0028220d410a460d1e2002411c6a41026a20022d002b3a0000200220022f00293b011c200241306a2225280200213b200241346a222a280200213e200241386a221f290300213a200241c0006a223c2802002141200241c4006a22402802002146200241c8006a223f2802002147200241cc006a22432802002144200241d0006a223d2802002148200241d4006a22422802002149200241d8006a22372903002145200228022c2139200241286a2001109d0820022d00282238410a460d1f200241206a41026a20022d002b3a0000200220022f00293b01202025280200214a202a280200214c201f290300214b203c280200211f2040280200214e203f28020021402043280200213c203d28020021432042280200213f2037290300214d200228022c212a200241286a2001109d0820022d00282225410a460d20200241246a41026a224f20022d002b3a0000200220022f00293b0124200241306a22502802002142200241286a410c6a2802002137200241286a41106a22512903002152200241286a41186a22532802002154200241c4006a2802002155200241286a41206a22562802002157200241286a41246a2802002158200241286a41286a2259280200215a200241286a412c6a280200215b200241286a41306a225c290300215d200228022c213d200241286a2001109d08024020022d0028410a460d0020004190036a2002290328370300200041c0036a205c290300370300200041b8036a2059290300370300200041b0036a2056290300370300200041a8036a2053290300370300200041a0036a205129030037030020004198036a2050290300370300200020033a0008200020022f010c3b00092000410b6a2002410c6a41026a2d00003a0000200041c0006a20073a0000200041386a2015370300200041346a2019360200200041306a20183602002000412c6a2014360200200041286a2017360200200041246a2016360200200041206a2011360200200041186a200a370300200041146a200e360200200041106a200b3602002000410c6a2009360200200041f8006a20043a0000200041f0006a201d370300200041ec006a200f360200200041e8006a2013360200200041e4006a200c360200200041e0006a2010360200200041dc006a201e360200200041d8006a2008360200200041d0006a201b370300200041cc006a201c360200200041c8006a201a360200200041c4006a2005360200200020022f01103b0041200041c3006a200241106a41026a2d00003a0000200020022f01143b0079200041fb006a200241146a41026a2d00003a0000200041b0016a20203a0000200041a8016a202d370300200041a4016a2031360200200041a0016a20303602002000419c016a202c36020020004198016a202f36020020004194016a202e36020020004190016a202936020020004188016a202237030020004184016a202636020020004180016a2023360200200041fc006a2021360200200041b3016a200241186a41026a2d00003a0000200020022f01183b00b101200041e8016a200d3a0000200041e0016a2035370300200041dc016a2027360200200041d8016a202b360200200041d4016a2024360200200041d0016a2028360200200041cc016a2036360200200041c8016a2006360200200041c0016a2033370300200041bc016a2034360200200041b8016a2032360200200041b4016a2012360200200041eb016a2002411c6a41026a2d00003a0000200020022f011c3b00e901200041a0026a20383a000020004198026a204537030020004194026a204936020020004190026a20483602002000418c026a204436020020004188026a204736020020004184026a204636020020004180026a2041360200200041f8016a203a370300200041f4016a203e360200200041f0016a203b360200200041ec016a2039360200200041a3026a200241206a41026a2d00003a0000200020022f01203b00a102200041d8026a20253a0000200041d0026a204d370300200041cc026a203f360200200041c8026a2043360200200041c4026a203c360200200041c0026a2040360200200041bc026a204e360200200041b8026a201f360200200041b0026a204b370300200041ac026a204c360200200041a8026a204a360200200041a4026a202a360200200041db026a204f2d00003a0000200020022f01243b00d90220004188036a205d37030020004184036a205b36020020004180036a205a360200200041fc026a2058360200200041f8026a2057360200200041f4026a2055360200200041f0026a2054360200200041e8026a2052370300200041e4026a2037360200200041e0026a2042360200200041dc026a203d360200200042083703000c320b200042093703000240024002400240024002402025410f710e09313100010231310331040b20584101470d30205b450d30205a10390c300b203d4101470d2f20370d030c2f0b20544101470d2e2057450d2e205510390c2e0b2042450d2d203d10390c2d0b203d4101470d2c2037450d2c0b204210390c2b0b200042093703000b024002400240024002400240200d410f710e092b2b0001022b2b032b040b20444101470d2a2049450d2a204810390c2a0b20394101470d29203e0d030c290b20414101470d282047450d28204610390c280b203b450d27203910390c270b20394101470d26203e450d260b203b10390c250b200042093703000b0240024002400240024002402020410f710e09262600010226260326040b20244101470d252027450d25202b10390c250b20124101470d2420340d030c240b20064101470d232028450d23203610390c230b2032450d22201210390c220b20124101470d212034450d210b203210390c200b200042093703000b0240024002400240024002402004410f710e09222200010222220322040b202c4101470d212031450d21203010390c210b20214101470d2020260d030c200b20294101470d1f202f450d1f202e10390c1f0b2023450d1e202110390c1e0b20214101470d1d2026450d1d0b202310390c1c0b200042093703000b0240024002400240024002402007410f710e091f1f0001021f1f031f040b200c4101470d1e200f450d1e201310390c1e0b20054101470d1d201c0d030c1d0b20084101470d1c2010450d1c201e10390c1c0b201a450d1b200510390c1b0b20054101470d1a201c450d1a0b201a10390c190b200042093703000b0240024002400240024002402003410f710e092d2d0001022d2d032d040b20144101470d2c2019450d2c201810390c2c0b20094101470d2b200e0d030c2b0b20114101470d2a2017450d2a201610390c2a0b200b450d29200910390c290b20094101470d28200e450d280b200b10390c270b200042093703000c260b200042093703000c250b200042093703000c240b200042093703000c130b200042093703000c220b200042093703000c130b200042093703000c110b200042093703000c1f0b200042093703000c130b200042093703000c110b200042093703000c0f0b200042093703000c1b0b200042093703000c130b200042093703000c110b200042093703000c0f0b200042093703000c0d0b200042093703000c160b200042093703000c140b200042093703000c120b200042093703000c100b200042093703000c0e0b200042093703000c0c0b200042093703000c0a0b0240024002400240024002402003410f710e09151500010215150315040b20144101470d142019450d14201810390c140b20094101470d13200e0d030c130b20114101470d122017450d12201610390c120b200b450d11200910390c110b20094101470d10200e450d100b200b10390c0f0b0240024002400240024002402007410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20084101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09131300010213130313040b20144101470d122019450d12201810390c120b20094101470d11200e0d030c110b20114101470d102017450d10201610390c100b200b450d0f200910390c0f0b20094101470d0e200e450d0e0b200b10390c0d0b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402007410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20084101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09101000010210100310040b20144101470d0f2019450d0f201810390c0f0b20094101470d0e200e0d030c0e0b20114101470d0d2017450d0d201610390c0d0b200b450d0c200910390c0c0b20094101470d0b200e450d0b0b200b10390c0a0b0240024002400240024002402020410f710e09060600010206060306040b20244101470d052027450d05202b10390c050b20124101470d0420340d030c040b20064101470d032028450d03203610390c030b2032450d02201210390c020b20124101470d012034450d010b203210390b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402007410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20084101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e090c0c0001020c0c030c040b20144101470d0b2019450d0b201810390c0b0b20094101470d0a200e0d030c0a0b20114101470d092017450d09201610390c090b200b450d08200910390c080b20094101470d07200e450d070b200b10390c060b0240024002400240024002402038410f710e09060600010206060306040b203c4101470d05203f450d05204310390c050b202a4101470d04204c0d030c040b201f4101470d032040450d03204e10390c030b204a450d02202a10390c020b202a4101470d01204c450d010b204a10390b024002400240024002400240200d410f710e09060600010206060306040b20444101470d052049450d05204810390c050b20394101470d04203e0d030c040b20414101470d032047450d03204610390c030b203b450d02203910390c020b20394101470d01203e450d010b203b10390b0240024002400240024002402020410f710e09060600010206060306040b20244101470d052027450d05202b10390c050b20124101470d0420340d030c040b20064101470d032028450d03203610390c030b2032450d02201210390c020b20124101470d012034450d010b203210390b0240024002400240024002402004410f710e09060600010206060306040b202c4101470d052031450d05203010390c050b20214101470d0420260d030c040b20294101470d03202f450d03202e10390c030b2023450d02202110390c020b20214101470d012026450d010b202310390b0240024002400240024002402007410f710e09060600010206060306040b200c4101470d05200f450d05201310390c050b20054101470d04201c0d030c040b20084101470d032010450d03201e10390c030b201a450d02200510390c020b20054101470d01201c450d010b201a10390b0240024002400240024002402003410f710e09060600010206060306040b20144101470d052019450d05201810390c050b20094101470d04200e0d030c040b20114101470d032017450d03201610390c030b200b450d02200910390c020b20094101470d01200e450d010b200b10390b200241e0006a24000b9c0403057f017e027f0240024020012802042202450d0020012002417f6a220336020420012001280200220441016a36020002400240024020042d0000220541037122064103460d000240024020060e03030001030b41012106024020030d000c060b20012002417e6a3602042001200441026a36020020042d0001410874200572220141ffff0371418002490d05200141fcff0371410276ad21070c030b410121060240200341034f0d000c050b20012002417c6a3602042001200441046a36020020042f0001200441036a2d000041107472410874200572220141808004490d042001410276ad21070c020b024002400240200541027622080e050002020201020b20034104490d0420012002417b6a3602042001200441056a360200200435000122074280808080045421060c050b20034108490d032001200241776a3602042001200441096a36020020042900012207428080808080808080015421060c040b200541134b0d02200841046a21092002417e6a2102200441026a2104410021054200210741012106034002402002417f470d000c050b2004417f6a210320012002360204200120043602002002417f6a2102200441016a210420033100002005410374413871ad862007842107200541016a220541ff01712009490d000b2007427f412820084103746b413871ad885821060c030b2005410276ad21070b410021060c010b410121060b2000200737030820002006ad3703000bf90c02057f027e230041b00b6b2202240002400240200128020422030d002000410c3602000c010b200128020022042d0000210520012003417f6a3602042001200441016a360200024002400240024002400240024002400240024002400240024002400240024002400240024020050e0c000102030405060708090a0c0b0b200041003602000c120b200041013602000c110b200041023602000c100b200041033602000c0f0b2002200110c101024020022802000d002001280204220420022802042203490d002003417f4c0d0a0240024020030d00410121050c010b200310382205450d0d20054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a3602002000200536020420004104360200200041086a2003ad22074220862007843702000c0f0b2000410c3602000c0e0b200241086a200110c101024020022802080d0020012802042204200228020c2203490d002003417f4c0d090240024020030d00410121050c010b200310382205450d0c20054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a3602002000200536020420004105360200200041086a2003ad22074220862007843702000c0e0b2000410c3602000c0d0b200241e8076a2001109902024020022903e8074209510d00200241a0046a200241e8076a41c80310d40b1a200241d0006a41046a200241a0046a41c80310d40b1a20004106360200200041046a200241d0006a41cc0310d40b1a0c0d0b2000410c3602000c0c0b200241e8076a2001109902024020022903e8074209510d00200241a0046a200241e8076a41c80310d40b1a200241d0006a41046a200241a0046a41c80310d40b1a20004107360200200041046a200241d0006a41cc0310d40b1a0c0c0b2000410c3602000c0b0b200241286a200110c10120022802280d0620012802042204200228022c2203490d062003417f4c0d050240024020030d00410121050c010b200310382205450d0820054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200241106a2001108c0502402002290310a70d00200241106a41106a2903002107200229031821082000200536020420004108360200200041106a20083703002000410c6a2003360200200041086a2003360200200041186a20073703000c0b0b2000410c3602002003450d0a200510390c0a0b200241306a200110c10120022802300d072001280204220420022802342203490d072003417f4c0d040240024020030d00410121050c010b200310382205450d0720054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200241d0006a200110ff0a024020022d00504107460d00200041106a2002290350370300200041306a200241d0006a41206a290300370300200041286a200241d0006a41186a290300370300200041206a200241d0006a41106a290300370300200041186a200241d0006a41086a2903003703002000410c6a2003360200200041086a200336020020002005360204200041093602000c0a0b2000410c3602002003450d09200510390c090b200241e8076a200110990220022903e8074209510d02200241a0046a200241e8076a41c80310d40b1a200241386a2001108c0502402002290338a70d00200241c8006a290300210720022903402108200241d0006a41046a200241a0046a41c80310d40b1a2000410a360200200041046a200241d0006a41cc0310d40b1a200041d8036a2007370300200041d0036a20083703000c090b2000410c360200200241a0046a108d020c080b2000410c3602000c070b200241e8076a200110990220022903e8074209510d05200241a0046a200241e8076a41c80310d40b1a200241e8076a200110ff0a024020022d00e8074107460d00200041d0036a20022903e807370300200041f0036a20024188086a290300370300200041e8036a20024180086a290300370300200041e0036a200241f8076a290300370300200041d8036a200241f0076a290300370300200241d0006a41046a200241a0046a41c80310d40b1a2000410b360200200041046a200241d0006a41cc0310d40b1a0c070b2000410c360200200241a0046a108d020c060b2000410c3602000c050b1034000b2000410c3602000c030b1032000b2000410c3602000c010b2000410c3602000b200241b00b6a24000bad0201057f230041106b22032400024002402002200128020422044102762205200520024b1b22064102742205417f4c0d000240024020060d00410421070c010b200510382207450d020b410021052003410036020820032006360204200320073602000240024002402002450d00034020044104490d0220012004417c6a220436020420012001280200220641046a36020020062800002106024020052003280204470d002003200510990120032802002107200328020821050b200720054102746a20063602002003200328020841016a22053602082002417f6a22020d000b0b20002003290300370200200041086a200341086a2802003602000c010b20004100360200200328020441ffffffff0371450d00200328020010390b200341106a24000f0b1034000b1032000b980301087f230041e0006b2203240002400240200220012802044105762204200420024b1b22054105742204417f4c0d000240024020050d00410121060c010b200410382206450d020b41002104200341003602102003200536020c200320063602080240024002402002450d00200341386a41017221050340200341386a200110860220032d00384101460d02200341186a41186a2207200541186a290000370300200341186a41106a2208200541106a290000370300200341186a41086a2209200541086a2900003703002003200529000037031802402004200328020c470d00200341086a20044101109e0220032802082106200328021021040b200620044105746a220a2003290318370000200a41186a2007290300370000200a41106a2008290300370000200a41086a20092903003700002003200441016a22043602102002417f6a22020d000b0b20002003290308370200200041086a200341086a41086a2802003602000c010b20004100360200200328020c41ffffff3f71450d00200610390b200341e0006a24000f0b1034000b1032000bd10101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffff3f712001462102200141057421010240024020040d00200341003602100c010b200341186a410136020020032004410574360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410576360200200341206a24000f0b1034000be61408027f017e0f7f017e017f037e017f027e230041d0176b220324000240200220012802044198046e2204200420024b1bad4298047e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410382206450d010b2003410036024020032006360238200320044198046e36023c0240024002402002450d00200341d8136a410c6a2107200341d8136a41046a2108200341e00f6a4104722109200341b8136a210a200341e00f6a410c6a210b4100210c4100210d034020012802042204450d022001280200220e2d0000210f20012004417f6a3602042001200e41016a3602004100210e02400240024002400240024002400240024002400240024002400240024002400240200f0e080300010205060708130b200341d8136a200110980220032802d813220f450d0820032802e013210420032802dc132110200341d8136a2001109902024020032903d81322054209510d0020032802e0132111200341cc086a200741bc0310d40b1a4101210e200f21122010211320042114200521150c030b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0e201041f8036c450d0e200f10390c0e0b200341e00f6a200110980220032802e00f220f450d0720032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341086a200110c101024002402003280208450d00200341003602e00f0c010b200341e00f6a2001200328020c10970220032802e00f0d0b0b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d07201041f8036c450d07200f10390c070b200341d8136a200110980220032802d813220f450d0620032802e013210420032802dc132110200341d8136a200110980220032802d813450d0120032802e013211120032903d81321154103210e200f211220102113200421140b200341dc046a200341cc086a41cc0310d40b1a0c0c0b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0a201041f8036c450d0a200f10390c0a0b200341e00f6a200110980220032802e00f220f450d0320032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341106a200110c101024002402003280210450d00200341003602e00f0c010b200341e00f6a2001200328021410970220032802e00f0d090b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d03201041f8036c450d03200f10390c030b200341e00f6a200110980220032802e00f220f450d0220032802e80f211620032802e40f2110200341e00f6a2001109902024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341186a200110c101024002402003280218450d00200341003602e00f0c010b200341e00f6a2001200328021c10970220032802e00f0d070b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d02201041f8036c450d02200f10390c020b200341206a2001109a024108210e410121042003290320a70d0720032903282105200341d8136a200110990220032903d8134209510d07200341e00f6a200341d8136a41c80310d40b1a200341d8136a200110980220032802d813220f450d0220032802e013211420032802dc13211320032802e00f2111200341cc086a200941c40310d40b1a4106210e41002104200f2112200521150c060b200341d8136a2001109b0220032802d813410c460d00200341e00f6a200341d8136a41f80310d40b1a0240200128020422044108490d002001280200220e29000021052001200441786a220f3602042001200e41086a360200200f4108490d00200e29000821172001200441706a220f3602042001200e41106a360200200f450d00200e2d0010210f20012004416f6a3602042001200e41116a3602004100211002400240200f0e020100020b410121100b200341306a200110c10120032802300d00200341d8136a2001200328023410fd0120032802d813220f450d0020032802e013211420032802dc13211320032903e00f211520032802e80f2111200341cc086a200b41cc0310d40b1a200341a8086a41186a200a41186a290300370300200341a8086a41106a200a41106a290300370300200341a8086a41086a200a41086a2903003703002003200a2903003703a8084107210e41002104200f211220172118200521192010211a0c070b200341e00f6a108b020b4108210e410121040c050b200341e00f6a108d020c040b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4102210e41002104200f211220102113201621140c020b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4105210e41002104200f211220102113201621140c010b20032802e80f211120032903e00f21152008200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4104210e41002104200f211220102113201621140b0b200341dc046a200341cc086a41cc0310d40b1a200341b8046a41186a200341a8086a41186a290300370300200341b8046a41106a200341a8086a41106a290300370300200341b8046a41086a200341a8086a41086a290300370300200320032903a8083703b80420040d030b200d41016a210d200341ec006a200341dc046a41cc0310d40b1a200341c8006a41186a220f200341b8046a41186a290300370300200341c8006a41106a2210200341b8046a41106a290300370300200341c8006a41086a2216200341b8046a41086a290300370300200320032903b8043703480240200c200328023c470d00200341386a200c109102200328023821062003280240210c0b2006200c4198046c6a22042011360018200420153700102004201436000c20042013360008200420123600042004201a3a00012004200e3a00002004411c6a200341ec006a41cc0310d40b1a2016290300210520102903002117200f290300211b2003290348211c200420183700900420042019370088042004201c3700e80320044180046a201b370000200441f8036a2017370000200441f0036a20053700002003200328024041016a220c360240200d2002470d000b0b20002003290338370200200041086a200341386a41086a2802003602000c010b200041003602002003280238210d0240200c450d00200c4198046c2101200d21040340200410a00220044198046a2104200141e87b6a22010d000b0b200328023c2204450d0020044198046c450d00200d10390b200341d0176a24000f0b1032000b1034000bc50801027f0240024002400240024002400240024020002d00000e0707000102030405060b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041146a2802002202450d04200241f8036c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0320024198046c450d03200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0220024198046c450d02200028021010390f0b200041186a108d0202402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d01200241f8036c450d01200028020410390c010b200041106a108b0202402000410c6a2802002201450d00200041046a2802002102200141e0076c210103402002108002200241e0076a2102200141a0786a22010d000b0b200041086a2802002202450d00200241e0076c450d00200028020410390f0b0bae0303027f017e037f230041d0166b22032400024002402002200128020441c0076e2204200420024b1bad42c0077e2205422088a70d002005a72206417f4c0d000240024020060d00410821070c010b200610382207450d020b4100210420034100360210200320073602082003200641c0076e36020c0240024002402002450d00200341900f6a41047221080340200341900f6a200110a20220032802900f2106200341d4076a200841bc0710d40b1a20064126460d02200341186a200341d4076a41bc0710d40b1a02402004200328020c470d00200341086a200410950220032802082107200328021021040b2007200441c0076c6a22042006360200200441046a200341186a41bc0710d40b1a2003200328021041016a22043602102002417f6a22020d000b0b20002003290308370200200041086a200341086a41086a2802003602000c010b200041003602002003280208210202402004450d00200441c0076c21062002210403402004109602200441c0076a2104200641c0786a22060d000b0b200328020c2204450d00200441c0076c450d00200210390b200341d0166a24000f0b1034000b1032000bf5bf0209067f017e057f047e047f017e0c7f017e097f230041d02b6b2202240002400240200128020422030d00200041263602000c010b200141046a2104200128020022052d0000210620012003417f6a22073602042001200541016a36020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e640001020304050607080e090a0b0e0e0e0c0d262524232221200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1f1e1d1c1b1a19181716150e0e0e0e0e0e0e14131211100e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0f0e0b2007450d4020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024002400240024020060e0a000102030405060708094c0b20074104490d4b2005280002210620012003417a6a3602042001200541066a3602002006418194ebdc034f0d4b410121010c0a0b2002200110c10120022802000d4a2004280200220520022802042203490d4a2003417f4c0d3d0240024020030d00410121060c010b200310382206450d3f20064100200310d60b1a0b200620012802002207200310d40b1a2001200520036b3602042001200720036a3602002003ad22084220862008842108410221010c080b20074108490d49200529000221082001200341766a36020420012005410a6a360200410321010c080b200241086a200110c10120022802080d4820042802002205200228020c2203490d482003417f4c0d3b0240024020030d00410121060c010b200310382206450d3d20064100200310d60b1a0b200620012802002207200310d40b1a2001200520036b3602042001200720036a3602002003ad22084220862008842108410421010c060b200241106a200110c10120022802100d472004280200220520022802142203490d472003417f4c0d3a0240024020030d00410121060c010b200310382206450d3c20064100200310d60b1a0b200620012802002207200310d40b1a2001200520036b3602042001200720036a3602002003ad22084220862008842108410521010c050b200241f0226a200110860520022802f02222064102460d4620022902f4222108410621010c040b200241286a200110c10120022802280d45200228022c2209200428020041186e2203200320094b1bad42187e2208422088a70d382008a72203417f4c0d380240024020030d00410421060c010b200310382206450d3a0b200241003602f822200220063602f0222002200341186e3602f42202402009450d004100210a0340200241206a200110c1010240024020022802200d002004280200220520022802242203490d002003417f4c0d3c0240024020030d004101210b0c010b20031038220b450d3e200b4100200310d60b1a200428020021050b024020052003490d00200b20012802002207200310d40b210c2001200520036b3602042001200720036a360200200241186a200110c101024020022802180d0020042802002207200228021c2205490d002005417f4c0d3e0240024020050d004101210d0c010b20051038220d450d40200d4100200510d60b1a200428020021070b200720054f0d03200d10390b2003450d010b200b10390b20022802f02221050240200a450d00200a41186c21032005210103400240200141046a280200450d00200128020010390b0240200141106a280200450d002001410c6a28020010390b200141186a2101200341686a22030d000b0b20022802f4222201450d48200141186c450d48200510390c480b2005ad22084220862008842108200d2001280200220b200510d40b210d2001200720056b3602042001200b20056a3602000240200a20022802f422470d00200241f0226a200a10ff0220022802f022210620022802f822210a0b2006200a41186c6a220520033602042005200c360200200541106a20083702002005410c6a200d360200200541086a2003360200200220022802f82241016a220a3602f8222009417f6a22090d000b20022802f02221060b2006450d4520022902f4222108410721010c030b200241f0226a200110870520022802f0222206450d4420022902f4222108410821010c020b200241306a200110c10120022802300d432004280200220320022802342205490d432005417f4c0d360240024020050d00410121060c010b200510382206450d3820064100200510d60b1a0b200620012802002204200510d40b210a2001200320056b22073602042001200420056a2204360200024020074104490d002004280000210320012007417c6a3602042001200441046a3602002005ad22084220862008842108410921010c030b2005450d43200a10390c430b200241386a200110c10120022802380d4220042802002205200228023c2203490d422003417f4c0d350240024020030d00410121060c010b200310382206450d3720064100200310d60b1a0b200620012802002207200310d40b1a2001200520036b3602042001200720036a3602002003ad22084220862008842108410a21010b0b20004100360200200041186a2003360200200041106a20083702002000410c6a2006360200200041086a20013602000c410b2007450d3e20052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000103430b200241f0226a2001108805200241fc226a2802002205450d42200241a8076a41086a2209200241f0226a41086a220b280200360200200220022903f0223703a807200241f0226a41106a220d280200210620024184236a2802002103200241a8096a20024188236a41e40010d40b1a200241f4236a2802002104200241f0226a4180016a2802002107200241ec236a280200210a200241901b6a200241f8236a41800110d40b1a200241f0226a2001108905024020022802f422450d00200241f0076a41106a200d280200360200200241f0076a41086a200b2903003703002002418c086a2009280200360200200220022903f0223703f007200220022903a80737028408200241c8176a200241a8096a41e40010d40b1a200241b8106a200241901b6a41800110d40b1a410121010c040b02402003450d00200341246c21032005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b02402006450d00200641246c450d00200510390b02402004450d00200441246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b2007450d42200741246c0d010c420b200241f0226a2001108805200241fc226a2802002205450d41200241a8076a41086a2209200241f0226a41086a220b280200360200200220022903f0223703a807200241f0226a41106a220d280200210620024184236a2802002103200241a8096a20024188236a41e40010d40b1a200241f4236a2802002104200241f0226a4180016a2802002107200241ec236a280200210a200241901b6a200241f8236a41800110d40b1a200241f0226a2001108905024020022802f422450d00200241f0076a41106a200d280200360200200241f0076a41086a200b2903003703002002418c086a2009280200360200200220022903f0223703f007200220022903a80737028408200241c8176a200241a8096a41e40010d40b1a200241b8106a200241901b6a41800110d40b1a410221010c030b02402003450d00200341246c21032005210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b02402006450d00200641246c450d00200510390b02402004450d00200441246c2103200a210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b2007450d41200741246c450d410b200a10390c400b200241901b6a2001108a054103210120022d00a01b4103460d3f200241fc226a200241901b6a41086a29030037020020024184236a200241901b6a41106a2903002208370200200241a8096a41106a2008370300200220022903901b3702f422200241f0076a41086a200241f0226a41086a290200370300200241f0076a41106a200241f0226a41106a290200370300200241f0076a41186a200241f0226a41186a280200360200200220022902f0223703f0070b2000410c6a20022903f007370200200041246a20024188086a2903003702002000411c6a20024180086a290300370200200041146a200241f0076a41086a290300370200200041386a200241c8176a41e40010d40b1a200041a8016a200241b8106a41800110d40b1a200041a4016a2004360200200041a0016a20073602002000419c016a200a360200200041346a2003360200200041306a20063602002000412c6a2005360200200041086a2001360200200041013602000c400b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241c0006a2001109a022002290340a70d002002290348210820004102360200200041086a20083703000c400b200041263602000c3f0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024020060e050001020304080b20074104490d072005280002210620012003417a6a3602042001200541066a3602004101210b0c040b200241f0226a200110860220022d00f0224101460d062004280200220a4104490d0620024180236a290300210e200241f8226a290300210820024190236a2d0000210320024188236a290300210f20022802f422210620022f01f222210520022d00f12221072001280200220928000021042001200a417c6a3602042001200941046a360200200e422088a7210a200ea721094102210b0c040b20074104490d052005280002210620012003417a6a3602042001200541066a3602004103210b0c020b200241f0226a200110860220022d00f0224101460d042004280200220b4104490d0420024190236a2d0000210320024188236a290300210f20024184236a280200210a20024180236a2802002109200241f8226a290300210820022802f422210620022f01f222210520022d00f12221072001280200220d28000021042001200b417c6a220c3602042001200d41046a360200200c450d04200d2d0004210c2001200b417b6a3602042001200d41056a3602004104210b410021010240200c0e020400050b410121010c030b20074104490d032005280002210620012003417a6a3602042001200541066a3602004105210b0b0b0b200020013a0025200020053b0006200020073a00052000200b3a000420004103360200200041286a2004360200200041246a20033a00002000411c6a200f370200200041186a200a360200200041146a20093602002000410c6a2008370200200041086a20063602000c3f0b200041263602000c3e0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020002400240024002400240024020060e0400010203060b200241f0226a2001108b0520022d00f02222034105460d05200241a8096a41026a220720022d00f3223a0000200241901b6a41086a220420024184236a290200370300200241901b6a41106a220a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a2902003703901b200241f0226a41086a280200210520022802f4222106200241d0006a2001108c0502402002290350a70d00200241d0006a41106a29030021082002290358210f200241c8176a41026a20072d00003a0000200241b8106a41086a2004290300370300200241b8106a41106a200a290300370300200220022f01a8093b01c817200220022903901b3703b810200f422088a7210a2008422088a72109200fa721072008a72104410121010c410b20034102470d0520050d040c050b200241f0226a2001108b0520022d00f02222034105460d04200241a8096a41026a20022d00f3223a0000200241901b6a41086a20024184236a290200370300200241901b6a41106a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a2902003703901b200241f0226a41086a280200210520022802f422210620024180016a2001108c05200229038001a70d0220024180016a41106a29030021082002290388012110200241e8006a2001108c052002290368a70d02200241e8006a41106a290300210e2002290370210f41022101200241c8176a41026a200241a8096a41026a2d00003a0000200241b8106a41086a200241901b6a41086a290300370300200241b8106a41106a200241901b6a41106a290300370300200220022f01a8093b01c817200220022903901b3703b8102010422088a7210a2008422088a721092010a721072008a721040c3f0b200241f0226a2001108b0520022d00f02222034105460d03200241aa096a20022d00f3223a0000200241901b6a41086a20024184236a290200370300200241901b6a41106a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a22072902003703901b200241f0226a41086a2204280200210520022802f4222106200241f0226a2001108b05024020022d00f0224105460d0020024188236a290300210e200241f0226a41106a290300210f20024190236a3502002108200728020021092004280200210420022802f422210a20022802f022210720024198016a2001108c050240200229039801a70d0020024198016a41106a290300211120022903a0012110200241c8176a41026a200241a8096a41026a2d00003a0000200241b8106a41086a200241901b6a41086a290300370300200241b8106a41106a200241901b6a41106a290300370300200220022f01a8093b01c817200220022903901b3703b810410321010c400b200741ff01714102470d002004450d00200a10390b20034102470d0320050d020c030b200241f0226a2001108b0520022d00f02222034105460d02200241a8096a41026a220720022d00f3223a0000200241901b6a41086a220420024184236a290200370300200241901b6a41106a220a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a2902003703901b200241f0226a41086a280200210520022802f4222106200241b0016a2001108c05024020022903b001a70d00200241b0016a41106a290300210820022903b801210f200241c8176a41026a20072d00003a0000200241b8106a41086a2004290300370300200241b8106a41106a200a290300370300200220022f01a8093b01c817200220022903901b3703b810200f422088a7210a2008422088a72109200fa721072008a72104410421010c3e0b20034102470d0220050d010c020b20034102470d012005450d010b200610390b200041263602000c3d0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241c8016a200110c10120022802c8010d0020022802cc012206200428020041f0006e2203200320064b1bad42f0007e2208422088a70d2f2008a72205417f4c0d2f0240024020050d00410421040c010b200510382204450d310b41002103200241003602b009200220043602a8092002200541f0006e3602ac09024002402006450d00200241f0226a41086a210a0340200241f0226a2001108d0520022802f422210520022802f0222107200241901b6a200a41e80010d40b1a2005450d02200241b8106a200241901b6a41e80010d40b1a0240200320022802ac09470d00200241a8096a200310f70420022802a809210420022802b00921030b2004200341f0006c6a2203200536020420032007360200200341086a200241b8106a41e80010d40b1a200220022802b00941016a22033602b0092006417f6a22060d000b20022802a80921040b2004450d0120022902ac0921082000200436020420004105360200200041086a20083702000c3e0b20022802a809210702402003450d002007200341f0006c6a2106200721010340024020012205410c6a2802002203450d0020052802042101200341246c210303400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012003415c6a22030d000b0b200541f0006a21010240200541086a2802002203450d00200341246c450d00200528020410390b20012006470d000b0b20022802ac092201450d00200141f0006c450d00200710390b200041263602000c3c0b02402007450d0020052d0001210620012003417e6a22123602042001200541026a36020041072113410021144100210a0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e170001020304054f060708090a0b0c0d0e0f101112131415170b200241f0226a2001108b0520022d00f0224105460d16200241901b6a41086a20024184236a290200370300200241901b6a41106a2002418c236a2902003703002002200241fc226a2902003703901b200241f0226a41086a280200210d20022802f422211520022802f022210b200241d0016a2001108c0520022903d001a70d1520042802002203450d15200241d0016a41106a290300211120022903d8012110200128020022052d0000210620012003417f6a360204410121132001200541016a36020042002108410021094200210e02400240024002400240024020060e0505000102031b0b42002108410121090c030b42002108410221090c020b200241f0226a200110860220022d00f0224101460d1820022900f7222216422088200241ff226a290000220f422086842108200f422088210e20024190236a2d0000210c2002418f236a2d0000211720024187236a290000210f20022800f322210720022f00f12221182016a7210a410321090c020b42002108410421090b4200210e0b200241b8106a41106a200241901b6a41106a290300370300200241b8106a41086a200241901b6a41086a290300370300200220022903901b3703b810200a41087621140c4e0b200241e8016a2001108c0520022903e801a70d1520022903f001220f422088200241f8016a290300220e422086842108200e422088210e200fa7220a4108762114410221130c4c0b20024180026a2001108c05200229038002a70d14200229038802220f42208820024190026a290300220e422086842108200e422088210e200fa7220a4108762114410321130c4b0b4104211320124104490d132005280002210720012003417a6a3602042001200541066a3602004100210a0c4a0b20024198026a200110c1012002280298020d12200228029c0221032002418094ebdc033602f422200220033602f02220042802002205450d12200241f0226a2003418094ebdc034b4102746a2802002107200128020022032d0000210620012005417f6a3602042001200341016a360200410521134100210a024020060e024b00130b4101210a0c490b200241f0226a2001108e0520022802f0222207450d1120022802f422220a4108762114200241f0226a41086a35020021084200210e410621130c480b2012450d1020052d0002210620012003417d6a3602042001200541036a36020042002108410021094200210e02400240024002400240024020060e050500010203160b42002108410121090c030b42002108410221090c020b200241f0226a200110860220022d00f0224101460d1320022900f7222210422088200241ff226a290000220f422086842108200f422088210e20024190236a2d0000210c2002418f236a2d0000211720024187236a290000210f20022800f322210720022f00f12221182010a7210a410321090c020b42002108410421090b4200210e0b41082113200a41087621140c480b200241f0226a2001108b0520022d00f0224105460d0f20022902f422220f422088200241fc226a290200220e422086842108200fa7220a4108762114200e422088210e20024190236a280200210b2002418e236a2f010021192002418d236a2d0000210c2002418c236a2d0000211720024184236a290200210f20022802f0222107410921130c460b200241a0026a200110c10120022802a0020d0e20022802a4022107410a21134100210a0c450b200241a8026a200110c10120022802a8020d0d20022802ac022107410b21134100210a0c440b2012450d0c20052d0002210920012003417d6a3602042001200541036a360200200941e5004f0d0c410c21134100210a0c440b410d21134100210a0c420b410e21134100210a0c410b200241b0026a200110c10120022802b0020d09200241f0226a200120022802b402109d0220022802f0222207450d0920022802f422220a4108762114200241f0226a41086a35020021084200210e410f21130c400b200241f0226a200110860220022d00f0224101460d08200428020022034104490d0841102113200241f0226a41106a290300210e200241f0226a41086a290300211020024190236a2d0000211720024188236a290300210f20022802f422210720022f01f222211820022d00f122210920012802002205280000210b20012003417c6a3602042001200541046a3602002010422088200e422086842108200e422088210e2010a7220a41087621140c400b411121134100210a0c3e0b20124104490d062005280002210720012003417a6a3602042001200541066a360200200241f0226a2001108f0520022802f022220a450d06200a410876211420022902f42221084200210e411221130c3d0b200241f0226a200110860220022d00f0224101460d05200428020022034104490d0520024180236a290300210e200241f0226a41086a290300211020024190236a2d0000211720024188236a290300210f20022802f422210720022f01f222211820022d00f122210920012802002205280000210b20012003417c6a3602042001200541046a3602002010422088200e422086842108200e422088210e2010a7220a4108762114411321130c3d0b200241b8026a2001108c0520022903b802a70d0420022903c002220f422088200241c8026a290300220e422086842108200e422088210e200fa7220a4108762114411421130c3b0b200241d8026a200110c10120022802d8020d0320022802dc022107200241d0026a200110c10120022802d0020d0320022802d402220a4108762114411521130c3a0b200241f0226a200110860220022d00f0224101460d02200428020022034104490d0220024190236a2d0000211720024188236a290300210f20024184236a280200210520024180236a2802002106200241f0226a41086a290300210e20022802f422210720022f01f222211820022d00f122210920012802002204280000210b20012003417c6a3602042001200441046a360200200e4220882005ad4220862006ad842210422086842108200ea7220a41087621142010422088210e411621130c3a0b200241f0226a2001108e0520022802f0222207450d0120022902f422220f4220882108200f420888a72114200fa7210a4200210e411721130c380b200b41ff01714102470d00200d450d00201510390b200041263602000c3b0b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c3a0b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200410021030240024020060e020001020b200241f0226a200110f20220022d00f0224101460d01200241901b6a200241f0226a41017241c00110d40b1a200241e0026a200110c10120022802e0020d012004280200220620022802e4022205490d012005417f4c0d2d0240024020050d00410121030c010b200510382203450d2f20034100200510d60b1a0b200320012802002207200510d40b1a2001200620056b3602042001200720056a360200200241b8106a200241901b6a41c00110d40b1a2005ad220842208620088421080b20002003360204200041086a2008370200200041106a200241b8106a41c00110d40b1a200041083602000c3a0b200041263602000c390b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b200241901b6a200110900520022903981b4202510d03200241b8106a200241901b6a41800210d40b1a200241901b6a200110890520022802941b2206450d03200241f8226a200241a01b6a280200360200200220022903981b3703f02220022802901b2107200241fc226a200241b8106a41800210d40b1a410121010c020b200241901b6a200110900520022903981b4202510d02200241b8106a200241901b6a41800210d40b1a200241901b6a200110890520022802941b2206450d02200241f8226a200241a01b6a280200360200200220022903981b3703f02220022802901b2107200241fc226a200241b8106a41800210d40b1a410221010c010b20074104490d012005280002210720012003417a6a22063602042001200541066a36020020064104490d01200528000621062001200341766a36020420012005410a6a360200410321010b200041146a200241f0226a418c0210d40b1a200041106a20063602002000410c6a2007360200200041086a2001360200200041093602000c390b200041263602000c380b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020020060d0020074104490d002005280002210a20012003417a6a3602042001200541066a360200200241f8026a200110c10120022802f8020d002004280200220320022802fc022205490d002005417f4c0d2a0240024020050d00410121060c010b200510382206450d2c20064100200510d60b1a0b200620012802002207200510d40b21172001200320056b3602042001200720056a360200200241f0026a200110c1010240024020022802f0020d0020022802f402220b2004280200410c6e22032003200b4b1bad420c7e2208422088a70d2c2008a72203417f4c0d2c0240024020030d004104210c0c010b20031038220c450d2e0b200241003602f8222002200c3602f02220022003410c6e22093602f42202400240200b0d00410021070c010b410021070340200241e8026a200110c1010240024020022802e8020d002004280200220620022802ec022203490d002003417f4c0d300240024020030d00410121090c010b200310382209450d3220094100200310d60b1a200428020021060b200620034f0d01200910390b20022802f022210602402007450d002007410c6c21032006210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b20022802f4222201450d032001410c6c450d03200610390c030b2003ad2208422086200884210820092001280200220d200310d40b21092001200620036b3602042001200d20036a3602000240200720022802f422470d00200241f0226a200710da0120022802f022210c20022802f82221070b200c2007410c6c6a2203200837020420032009360200200220022802f82241016a22073602f822200b417f6a220b0d000b20022802f422210920022802f022210c0b200c0d010b2005450d01201710390c010b0240024002402004280200220d4104490d002001280200221828000021192001200d417c6a22033602042001201841046a36020020034104490d00201828000421142001200d41786a22033602042001201841086a360200200341034b0d010b02402005450d00201710390b02402007450d002007410c6c2103200c210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b2009450d022009410c6c0d010c020b201828000821122001200d41746a221536020420012018410c6a360200200241f0226a410472211341002103417321060240034020152003460d01201820036a2204410c6a2d0000210b2001200d20066a36020420012004410d6a360200201320036a200b3a00002002200341016a22043602f0222006417f6a210620042103200441c000470d000b200241b8106a41026a2201200241fd226a2d00003a0000200220022f01f4223b01901b200220022d00f6223a00921b2002200241fb226a2f00003b01b810200241a8236a2802002103200241f0226a413c6a2902002108200241a1236a28000021062002419a236a280100210420024193236a280000210b200241f0226a411c6a280200210d20024185236a2800002118200241fe226a280100211520022800f7222113200241a8096a41026a221a200241f0226a41146a2d00003a0000200241c8176a41026a221b2002418b236a2d00003a0000200241f0076a41026a221c20024192236a2d00003a0000200241a8076a41026a221d20024199236a2d00003a0000200241b02b6a41026a221e200241a0236a2d00003a0000200220024182236a2f01003b01a809200220024189236a2f00003b01c8172002200241f0226a41206a2f01003b01f007200220024197236a2f00003b01a8072002200241f0226a412e6a2f01003b01b02b200241902b6a41026a221f200241a7236a2d00003a00002002200241f0226a41356a2f00003b01902b200041286a2012360200200041246a2014360200200041206a20193602002000411c6a2007360200200041186a2009360200200041146a200c360200200041106a20053602002000410c6a2005360200200041086a20173602002000200a3602042000412c6a20022f01901b3b01002000412e6a20022d00921b3a00002000412f6a2013360000200020022f01b8103b0033200041356a20012d00003a0000200020153600362000413c6a201a2d00003a0000200020022f01a8093b003a2000201836003d200041c3006a201b2d00003a0000200020022f01c8173b0041200041c4006a200d360000200041ca006a201c2d00003a0000200041c8006a20022f01f0073b00002000200b36004b200041d1006a201d2d00003a0000200020022f01a8073b004f20002004360052200041d8006a201e2d00003a0000200020022f01b02b3b005620002006360059200041df006a201f2d00003a0000200020022f01902b3b005d200041e4006a2008370000200041e0006a20033600002000410a3602000c3a0b02402005450d00201710390b02402007450d002007410c6c2103200c210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b2009450d012009410c6c450d010b200c10390b200041263602000c370b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c360b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024020060e03000102050b20024180036a200110c1012002280280030d04200241f0226a200120022802840310a10220022802f0222201450d0420022902f4222108410121030c020b20074102490d0320052f0002210620012003417c6a3602042001200541046a36020020011091052201450d03410221030c020b20024188036a200110c1012002280288030d02200241f0226a2001200228028c0310a10220022802f0222201450d0220022902f4222108410321030b0b200020033b01042000410c3602002000410c6a2008370200200041086a2001360200200041066a20063b01000c360b200041263602000c350b2007450d2e20052d0001210720012003417e6a22203602042001200541026a3602004104210b0240024020070e0f000126272524232221201f1e1d1c1b300b200241f0226a20011086024101210b20022d00f0224101460d2f20024180236a290300210f200241f8226a290300210e20024190236a2d0000210c20024188236a290300210820022802f422210620022f01f222212120022d00f12221220c260b20024190036a200110c1012002280290030d2e2002280294032207200428020041c8006e2203200320074b1bad42c8007e2208422088a70d262008a72205417f4c0d260240024020050d00410421060c010b200510382206450d280b41002103200241003602e82a200220063602e02a2002200541c8006e3602e42a02400240024002402007450d00200241901b6a410c6a2114200241901b6a41017221120340200241901b6a200110920502400240024020022d00901b22054106460d0020022802981b210a20022802941b2109200241f0226a200110920520022d00f0224106470d0120054101470d00200a450d00200910390b410621050c010b200241b8106a41206a200241f0226a41206a280200360200200241b8106a41186a200241f0226a41186a290300370300200241b8106a41106a200241f0226a41106a290300370300200241b8106a41086a200241f0226a41086a290300370300200241cc2b6a41026a201241026a2d00003a0000200241b02b6a41086a201441086a290000370300200241b02b6a41106a201441106a290000370300200220022903f0223703b810200220122f00003b01cc2b200220142900003703b02b20092113200a21190b200241ac2b6a41026a220a200241cc2b6a41026a2d00003a0000200241902b6a41086a2209200241b02b6a41086a290300370300200241902b6a41106a220b200241b02b6a41106a290300370300200241a8096a41086a220d200241b8106a41086a290300370300200241a8096a41106a220c200241b8106a41106a290300370300200241a8096a41186a2217200241b8106a41186a290300370300200241a8096a41206a2218200241b8106a41206a280200360200200220022f01cc2b3b01ac2b200220022903b02b3703902b200220022903b8103703a80920054106460d022002418c2b6a41026a2215200a2d00003a0000200241f02a6a41086a220a2009290300370300200241f02a6a41106a2209200b290300370300200241c8176a41086a220b200d290300370300200241c8176a41106a220d200c290300370300200241c8176a41186a220c2017290300370300200241c8176a41206a22172018280200360200200220022f01ac2b3b018c2b200220022903902b3703f02a200220022903a8093703c8170240200320022802e42a470d00200241e02a6a200310fd0420022802e02a210620022802e82a21030b2006200341c8006c6a220320053a0000200341086a2019360000200341046a2013360000200341036a20152d00003a0000200320022f018c2b3b0001200341146a200a2903003700002003411c6a20092903003700002003410c6a20022903f02a370000200341246a20022903c817370000200341346a200d2903003700002003412c6a200b2903003700002003413c6a200c290300370000200341c4006a2017280200360000200220022802e82a41016a22033602e82a2007417f6a22070d000b20022802e02a21060b2006450d3120022902e42a210e200241f0226a200110920520022d00f0224106460d3020024190236a2207350200210f20024188236a220a290300212320024184236a220b280200210920024182236a2f0100210d20024181236a2d0000211720024180236a2d0000210c200241f0226a41086a2218290300210820022802f422210520022802f0222103200241f0226a200110920520022d00f0224106460d2f200241b02b6a41086a20072802003602002002200a2903003703b02b200b2802002115200241fc226a220a29020021102018280200212220022802f422212120022802f0222107200241f0226a200110920520022d00f02222184106460d2e200241d82a6a41026a20022d00f3223a0000200241c8176a41086a20024184236a220b290200370300200241c8176a41106a2002418c236a2212290200370300200220022f00f1223b01d82a2002200a2902003703c817200241f0226a41086a220a280200211320022802f4222119200241f0226a200110920520022d00f02222144106460d2d200241dc2a6a41026a20022d00f3223a0000200241a8096a41086a200b290200370300200241a8096a41106a2012290200370300200220022f00f1223b01dc2a2002200241fc226a220b2902003703a809200a280200211220022802f422211a200241f0226a200110920520022d00f022221b4106460d2c2002418e2b6a20022d00f3223a0000200241b8106a41086a20024184236a290200370300200241c8106a2002418c236a290200370300200220022f00f1223b018c2b2002200b2902003703b810200241f0226a41086a280200211c20022802f422211d2004280200220b450d2b200128020022042d000021242001200b417f6a22253602042001200441016a3602004100211e20240e0202012b0b20022802e02a210502402003450d002005200341c8006c6a2103200521010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012003470d000b0b20022802e42a2201450d30200141c8006c450d30200510390c300b2025450d2920042d0001210a2001200b417e6a221e3602042001200441026a3602002002200a3a00f422200241013602f022201e450d2920042d0002210a2001200b417d6a221e3602042001200441036a3602002002200a3a00f522200241023602f022201e450d2920042d0003210a2001200b417c6a221e3602042001200441046a3602002002200a3a00f622200241033602f022201e450d2920042d0004210a2001200b417b6a221e3602042001200441056a360200200241043602f0222002200a3a00f722201e450d2920042d0005210a2001200b417a6a221e3602042001200441066a360200200241f8226a200a3a0000200241053602f022201e450d2920042d0006210a2001200b41796a221e3602042001200441076a360200200241f9226a200a3a0000200241063602f022201e450d2920042d0007210a2001200b41786a221e3602042001200441086a360200200241fa226a200a3a0000200241073602f022201e450d2920042d0008210a2001200b41776a221e3602042001200441096a360200200241fb226a200a3a0000200241083602f022201e450d2920042d0009210a2001200b41766a221e36020420012004410a6a360200200241fc226a200a3a0000200241093602f022201e450d2920042d000a210a2001200b41756a221e36020420012004410b6a360200200241fd226a200a3a00002002410a3602f022201e450d2920042d000b210a2001200b41746a221e36020420012004410c6a360200200241fe226a200a3a00002002410b3602f022201e450d2920042d000c210a2001200b41736a221e36020420012004410d6a360200200241ff226a200a3a00002002410c3602f022201e450d2920042d000d210a2001200b41726a221e36020420012004410e6a36020020024180236a200a3a00002002410d3602f022201e450d2920042d000e210a2001200b41716a221e36020420012004410f6a36020020024181236a200a3a00002002410e3602f022201e450d2920042d000f210a2001200b41706a221e3602042001200441106a36020020024182236a200a3a00002002410f3602f022201e450d2920042d0010210a2001200b416f6a221e3602042001200441116a36020020024183236a200a3a0000200241103602f022201e450d2920042d0011210a2001200b416e6a221e3602042001200441126a36020020024184236a200a3a0000200241113602f022201e450d2920042d0012210a2001200b416d6a221e3602042001200441136a36020020024185236a200a3a0000200241123602f022201e450d2920042d0013210a2001200b416c6a221e3602042001200441146a36020020024186236a200a3a0000200241133602f022201e450d2920042d0014210a2001200b416b6a3602042001200441156a360200200241902b6a41026a200241fd226a2d00003a0000200241f02a6a41026a200241f0226a41146a2d00003a0000200220022f01f4223b01901b200220022d00f6223a00921b2002200241fb226a2f00003b01902b200220024182236a2f01003b01f02a200241f0226a41156a2f0000200a41107472210a200241fe226a280100212620022800f722211f4101211e0b200241e02a6a41026a20022d00921b3a0000200241cc2b6a41026a200241902b6a41026a22042d00003a0000200241ac2b6a41026a200241f02a6a41026a2d00003a0000200220022f01901b3b01e02a200220022f01902b3b01cc2b200220022f01f02a3b01ac2b200241f0226a200110920520022d00f02222244106460d28200420022d00f3223a0000200241901b6a41086a220420024184236a290200370300200241901b6a41106a22202002418c236a290200370300200220022f00f1223b01902b2002200241fc226a2902003703901b200241f0226a41086a220b280200212520022802f4222127200241f0226a2001109205024020022d00f0224106470d0020244101470d292025450d29202710390c290b200241f0076a41206a200241f0226a41206a280200360200200241f0076a41186a200241f0226a41186a290300370300200241f0076a41106a200241f0226a41106a290300370300200241f0076a41086a200b29030037030020024198096a41086a200241b02b6a41086a2802003602004102210b20024194096a41026a200241d82a6a41026a2d00003a0000200220022903f0223703f007200220022903b02b37039809200220022f01d82a3b019409200241f8086a41106a200241c8176a41106a290300370300200241f8086a41086a200241c8176a41086a290300370300200220022903c8173703f808200241f4086a41026a200241dc2a6a41026a2d00003a0000200220022f01dc2a3b01f408200241d8086a41106a200241a8096a41106a290300370300200241d8086a41086a200241a8096a41086a290300370300200220022903a8093703d808200241d4086a41026a2002418c2b6a41026a2d00003a0000200220022f018c2b3b01d408200241b8086a41106a200241b8106a41106a290300370300200241b8086a41086a200241b8106a41086a290300370300200220022903b8103703b808200241ec076a41026a200241e02a6a41026a2d00003a0000200220022f01e02a3b01ec07200241e8076a41026a200241cc2b6a41026a2d00003a0000200220022f01cc2b3b01e807200241e4076a41026a200241ac2b6a41026a2d00003a0000200220022f01ac2b3b01e407200241b4086a41026a200241902b6a41026a2d00003a0000200220022f01902b3b01b40820024198086a41106a202029030037030020024198086a41086a2004290300370300200220022903901b37039808200241e0076a41026a200241d52a6a41026a2d00003a0000200220022f00d52a3b01e0072022ad4220862021ad8421112007ad422086200f8421162005ad4220862003ad84210f0c250b200041263602000c330b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024020060e0400010203070b200241f0226a200110990220022903f0224209510d06200241901b6a200241f0226a41c80310d40b1a200241f0226a200110820220022d00f022410b460d05200241b8106a41c0036a200241f0226a41d00310d40b1a200241f0076a41086a200241d0266a2903003703002002200241c8266a2903003703f007200241f0226a41d0036a290300210f20022903901b2108200241b8106a200241901b6a41086a41c00310d40b1a410121010c030b200241f0226a200110990220022903f0224209510d05200241c8176a200241f0226a41c80310d40b1a200241f0226a2001109902024020022903f0224209510d00200241901b6a200241f0226a41c80310d40b1a200241f0226a2001109802024020022802f0222203450d0020022902f42221080240200428020022054108490d0020012802002206290000210f2001200541786a3602042001200641086a360200200241b8106a200241c8176a41c80310d40b1a200241b8106a41c8036a200241901b6a41c80310d40b1a410221010c050b02402008422088a72201450d00200141f8036c21052003210103402001108b02200141f8036a2101200541887c6a22050d000b0b2008a72201450d00200141f8036c450d00200310390b200241901b6a108d020b200241c8176a108d020c050b200241f0226a200110990220022903f0224209510d04200241c8176a200241f0226a41c80310d40b1a200241f0226a2001109902024020022903f0224209510d00200241901b6a200241f0226a41c80310d40b1a200241f0226a2001109802024020022802f0222203450d0020022902f42221080240200428020022054108490d0020012802002206290000210f2001200541786a3602042001200641086a360200200241b8106a200241c8176a41c80310d40b1a200241b8106a41c8036a200241901b6a41c80310d40b1a410321010c040b02402008422088a72201450d00200141f8036c21052003210103402001108b02200141f8036a2101200541887c6a22050d000b0b2008a72201450d00200141f8036c450d00200310390b200241901b6a108d020b200241c8176a108d020c040b200241f0226a200110fe0120022d00f0222105200241901b6a200241f0226a41017241df0710d40b1a2005410b460d0341e00710382203450d29200320053a0000200341016a200241901b6a41df0710d40b1a200428020022054108490d012001280200220629000021082001200541786a3602042001200641086a360200410421010b200241a8096a200241b8106a41900710d40b1a200241a8076a41086a2205200241f0076a41086a290300370300200220022903f0073703a807200041106a20083702002000410c6a2003360200200041086a200136020020004125360200200041186a200241a8096a41900710d40b1a200041a8076a200f370200200041b0076a20022903a807370200200041b8076a20052903003702000c350b200310b703200310390c010b200241901b6a108d020b200041263602000c320b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024002400240024020060e0800010203040506070b0b20024198066a200110c1012002280298060d0a200228029c06210520024180066a2001108c05200229038006a70d0a20024190066a290300210e200229038806210f200241f8056a200110c10120022802f8050d0a20022802fc05210d200241f0056a200110c10120022802f0050d0a20022802f4052117200241e8056a200110c10120022802e8050d0a20022802ec052115200241f0226a200110930520022d00f02222074104460d0a20022900f72222104220882116200e422088a7210b20024190236a2f010021182002418f236a2d0000210420024187236a290000210820024183236a280000210a200241ff226a280000210320022800f322210620022f00f12221092010a7210c410121010c090b200241b8066a200110c10120022802b8060d0920022802bc06210b200241a0066a2001108c0520022903a006a70d092004280200220c450d09200241b0066a290300211120022903a8062110200128020022142d000021122001200c417f6a221a3602042001201441016a360200410321070240024020120e0201000b0b201a450d0a20142d000121032001200c417e6a22053602042001201441026a360200024002400240024020030e030001020e0b200241f0226a410472210a41002103417d2106034020052003460d0e201420036a220741026a2d000021042001200c20066a3602042001200741036a360200200a20036a20043a00002002200341016a22073602f0222006417f6a210620072103200741c000470d000b2002419b236a290000210f20024193236a280000211820024197236a2800002103200241a3236a29000021082002418b236a2d000021052002418c236a2f010021072002418e236a2d00002104200241f0226a411f6a280000210120024183236a2900002116200241fa226a2d0000210a200241fb226a290000210e20022f01f422210920022801f6222106200241a81b6a200241ab236a3300003d01002002200e3700b9102002200a3a00b810200220163700c110200220013600cd10200220043a00cc10200220073b01ca10200220053a00c910200220083702a01b200220033602941b200220183602901b2002200f3702981b200241ad1b6a200241b0236a2800003600002002200241ad236a2800003601aa1b2008421888a72119200241901b6a411f6a330000210e20022802c010210320022903c810210820022903b8102123200228009f1b211520022800971b210d20022800931b2105200228009b1b211720022900a71b210f410021070c020b200241f0226a410472210a41002103417d2106034020052003460d0d201420036a220741026a2d000021042001200c20066a3602042001200741036a360200200a20036a20043a00002002200341016a22073602f0222006417f6a210620072103200741c000470d000b2002419b236a290000210f20024193236a280000211820024197236a2800002103200241a3236a29000021082002418b236a2d000021052002418c236a2f010021072002418e236a2d00002104200241f0226a411f6a280000210120024183236a2900002116200241fa226a2d0000210a200241fb226a290000210e20022f01f422210920022801f6222106200241a81b6a200241ab236a3300003d01002002200e3700b9102002200a3a00b810200220163700c110200220013600cd10200220043a00cc10200220073b01ca10200220053a00c910200220083702a01b200220033602941b200220183602901b2002200f3702981b200241ad1b6a200241b0236a2800003600002002200241ad236a2800003601aa1b2008421888a72119200241901b6a411f6a330000210e20022802c010210320022903c810210820022903b8102123200228009f1b211520022800971b210d20022800931b2105200228009b1b211720022900a71b210f410121070c010b200241f0226a410472210a41002103417d2106034020052003460d0c201420036a220741026a2d000021042001200c20066a3602042001200741036a360200200a20036a20043a00002002200341016a22073602f0222006417f6a210620072103200741c100470d000b2002419b236a290000210f20024193236a280000211820024197236a2800002103200241a3236a29000021082002418b236a2d000021052002418c236a2f01002107200241f0226a411e6a2d00002104200241f0226a411f6a280000210120024183236a2900002116200241fa226a2d0000210a200241fb226a290000210e200241ab236a330000212320022f01f422210920022801f6222106200241aa1b6a200241ad236a3100003c0000200241a81b6a20233d01002002200e3700b9102002200a3a00b810200220163700c110200220013600cd10200220043a00cc10200220073b01ca10200220053a00c910200220083702a01b200220033602941b200220183602901b2002200f3702981b200241901b6a411e6a200241b1236a2800003600002002200241ae236a2801003600ab1b200241901b6a411f6a330000200241b11b6a31000042108684210e2008421888a7211920022802c010210320022903c810210820022903b8102123200228009f1b211520022800971b210d20022800931b2105200228009b1b211720022900a71b210f410221070b20184110762113200141187621042016421888a7210a0b20234220882116200e42ffffff0783210e2023a7210c410221010c080b200241f0226a200110860220022d00f0224101460d0820024190236a2d0000210420024188236a290300210820024184236a280200210a20024180236a2802002103200241f8226a290300210f20022802f422210620022f01f222210920022d00f1222107200241c0066a200110c10120022802c0060d0820022802c4062105200f4220882116200fa7210c410321010c070b200241c8066a200110c10120022802c8060d0720022802cc062106410421010c040b200241d0066a200110c10120022802d0060d0620022802d4062106410521010c030b20024188076a200110c1012002280288070d05200228028c072105200241f0066a2001108c0520022903f006a70d0520024180076a290300210e20022903f806210f200241e8066a200110c10120022802e8060d0520022802ec06210d200241e0066a200110c10120022802e0060d0520022802e4062117200241d8066a200110c10120022802d8060d0520022802dc062115200241f0226a200110930520022d00f02222074104460d0520022900f72222104220882116200e422088a7210b20024190236a2f010021182002418f236a2d0000210420024187236a290000210820024183236a280000210a200241ff226a280000210320022800f322210620022f00f12221092010a7210c410621010c040b20074104490d042005280002210620012003417a6a3602042001200541066a36020020024190076a200110c1012002280290070d04200428020022052002280294072203490d042003417f4c0d280240024020030d004101210c0c010b20031038220c450d2a200c4100200310d60b1a0b200c20012802002207200310d40b1a2001200520036b3602042001200720036a3602002003ad22084220862008842116410721010c020b20074104490d032005280002210620012003417a6a3602042001200541066a360200410821010b420021160b0b200020133a002b200020183b0029200020093b000a200020073a000920004124360200200041d8006a2011370200200041d0006a2010370200200041c0006a200f3702002000413c6a2019360200200041386a2015360200200041346a2017360200200041306a200d3602002000412c6a2005360200200041286a20043a0000200041206a20083702002000411c6a200a360200200041186a20033602002000410c6a2006360200200041086a20013a0000200041106a2016422086200cad84370200200041c8006a200bad422086200e42ffffffff0f83843702000c320b200041263602000c310b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004103210a02400240024020060e03000102030b200241a8056a200110c10120022802a8050d0220022802ac052103200241a0056a200110c10120022802a0050d0220022802a40521054101210a0c010b200241e0056a200110c10120022802e0050d0120022802e4052103200241d8056a200110c10120022802d8050d0120022802dc052105200241d0056a200110c10120022802d0050d0120022802d4052107200241c8056a200110c10120022802c8050d0120022802cc052104200241b0056a2001108c0520022903b005a70d01200241c0056a290300210f20022903b80521084102210a0b20004123360200200041286a200f370200200041206a2008370200200041186a2004360200200041146a2007360200200041106a20053602002000410c6a2003360200200041086a200a3602000c310b200041263602000c300b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024020060e06000102030405070b20074104490d062005280002210620012003417a6a3602042001200541066a36020020024198056a200110c1012002280298050d0620042802002203200228029c052207490d062007417f4c0d280240024020070d004101210a0c010b20071038220a450d2a200a4100200710d60b1a0b200a20012802002205200710d40b21092001200320076b3602042001200520076a36020020024190056a200110c1010240024002402002280290050d00200428020022042002280294052203490d002003417f4c0d2b0240024020030d00410121050c010b200310382205450d2d20054100200310d60b1a0b20052001280200220b200310d40b210d2001200420036b22043602042001200b20036a220b36020002402004450d00200b2d0000210c20012004417f6a360204410121042001200b41016a36020041002101200c0e020302000b2003450d00200d10390b2007450d08200910390c080b410121010b2003210b200721090c050b20074104490d052005280002210620012003417a6a3602042001200541066a360200410221040c040b20074104490d042005280002210620012003417a6a3602042001200541066a360200410321040c030b4104210420074104490d032005280002210620012003417a6a3602042001200541066a3602000c020b20074104490d022005280002210620012003417a6a22073602042001200541066a3602002007450d0220052d000621072001200341796a3602042001200541076a36020020070d02200241f0226a200110820220022d00f022410b460d02200241a8096a41026a22042002418b236a2d00003a0000200220024189236a2f00003b01a80920024188236a2d0000210120024184236a280200210320024180236a280200210b200241fc226a2802002105200241f8226a280200210720022802f422210920022802f022210a200241901b6a2002418c236a41cc0310d40b1a200a41ff0171410b460d02200241c8176a41026a20042d00003a0000200220022f01a8093b01c817200241b8106a200241901b6a41cc0310d40b1a410521040c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d012005280006210a2001200341766a220736020420012005410a6a36020020074104490d01200528000a21092001200341726a220736020420012005410e6a36020020074104490d01200528000e210720012003416e6a3602042001200541126a360200410621040b200241f0076a41026a220d200241c8176a41026a2d00003a0000200220022f01c8173b01f0072000412c6a200241b8106a41cc0310d40b1a200041286a20013a0000200041246a2003360200200041206a200b3602002000411c6a2005360200200041186a2007360200200041146a2009360200200041106a200a3602002000410c6a2006360200200041086a200436020020004122360200200020022f01f0073b00292000412b6a200d2d00003a00000c300b200041263602000c2f0b024002402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024020060e03000102030b20074104490d022005280002210620012003417a6a3602042001200541066a360200200241f0226a200110860220022d00f0224101460d022004280200220c4110490d0220024190236a2d0000210320024188236a290300210820024184236a2802002105200241f0226a41106a2802002107200241f0226a41086a290300210f20022802f422210420022f01f222210a20022d00f12221092001200c41706a220b36020420012001280200221741106a360200200b4104490d02201741086a290000210e201729000021102017280010210b2001200c416c6a220d3602042001201741146a360200200d4104490d022017280014210d2001200c41686a3602042001201741186a360200410121010c030b20074104490d012005280002210420012003417a6a3602042001200541066a360200410221010c020b20074104490d002005280002210420012003417a6a3602042001200541066a360200410321010c010b200041263602000c2f0b2000200a3b000a200020093a000920004121360200200020022f00901b3b0029200041c0006a200e370200200041386a2010370200200041286a20033a0000200041206a20083702002000411c6a2005360200200041186a2007360200200041106a200f3702002000410c6a2004360200200041086a20013a0000200041346a200d360200200041306a200b3602002000412c6a20063602002000412b6a200241921b6a2d00003a00000c2e0b02402007450d0020052d0001210620012003417e6a220b3602042001200541026a36020041062112024002400240024002400240024020060e06000102030406070b200b4104490d062005280002210920012003417a6a3602042001200541066a360200200241f8046a200110c10120022802f8040d062004280200220320022802fc04220a490d06200a417f4c0d2602400240200a0d00410121150c010b200a10382215450d2820154100200a10d60b1a0b201520012802002205200a10d40b210620012003200a6b36020420012005200a6a360200200241f0046a200110c101024020022802f0040d002004280200220520022802f4042203490d002003417f4c0d27410121124101210d02402003450d0020031038220d450d29200d4100200310d60b1a0b200d20012802002206200310d40b1a2001200520036b3602042001200620036a3602002003ad22084220862008842108200a211a0c060b200a450d06200610390c060b200241f0226a200110860220022d00f0224101460d05200428020022034110490d0520024190236a2d0000211820024188236a290300210820024184236a280200210d200241f0226a41106a280200210a200241f0226a41086a290300211020022802f422210920022f01f222210c20022d00f12221172001200341706a220636020420012001280200220541106a36020020064104490d05200541086a290000210e2005290000210f2005280010211320012003416c6a3602042001200541146a36020020024188056a200110c1012002280288050d0520042802002203200228028c052207490d052007417f4c0d250240024020070d00410121190c010b200710382219450d2720194100200710d60b1a0b201920012802002205200710d40b21062001200320076b3602042001200520076a36020020024180056a200110c10102402002280280050d00200428020022052002280284052203490d002003417f4c0d260240024020030d00410121140c010b200310382214450d2820144100200310d60b1a0b2010422088a7211a2010a72115201420012802002206200310d40b1a2001200520036b3602042001200620036a3602002003ad22104220862010842110410221120c050b2007450d05200610390c050b200b4104490d042005280002210920012003417a6a3602042001200541066a360200410321120c020b200b4104490d032005280002210920012003417a6a22063602042001200541066a36020020064104490d03200528000621152001200341766a36020420012005410a6a360200410421120c020b200b4104490d022005280002210920012003417a6a3602042001200541066a360200410521120b0b2000200c3b000a200020173a000920004120360200200041d0006a200e370200200041c8006a200f370200200041c0006a20103702002000413c6a2014360200200041386a2007360200200041346a2007360200200041306a20193602002000412c6a2013360200200041286a2018360200200041206a20083702002000411c6a200d360200200041186a200a360200200041146a201a360200200041106a20153602002000410c6a2009360200200041086a20123a00000c2e0b200041263602000c2d0b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c2c0b02402007450d0020052d0001210620012003417e6a220b3602042001200541026a3602004105210402400240024002400240024020060e06000102030504060b200b4104490d052005280002210720012003417a6a22063602042001200541066a36020020064104490d052005280006210a2001200341766a220636020420012005410a6a36020020064104490d05200528000a21092001200341726a36020420012005410e6a360200410121040c040b200b4104490d042005280002210720012003417a6a3602042001200541066a360200410221040c030b200b4104490d032005280002210720012003417a6a22063602042001200541066a36020020064104490d032005280006210a2001200341766a36020420012005410a6a360200410321040c020b41042104200b4104490d022005280002210720012003417a6a3602042001200541066a3602000c010b410621040b200020043602042000411e360200200041106a20093602002000410c6a200a360200200041086a20073602000c2c0b200041263602000c2b0b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c2a0b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c290b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020020060d0020074104490d002005280002210620012003417a6a3602042001200541066a360200200020063602042000411b3602000c290b200041263602000c280b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024020060e050001020304070b20074104490d062005280002210620012003417a6a3602042001200541066a360200200241d0046a200110c10120022802d0040d062004280200220420022802d4042207490d062007417f4c0d20410121054101210302402007450d00200710382203450d2220034100200710d60b1a0b20032001280200220a200710d40b1a2001200420076b3602042001200a20076a3602002007ad220842208620088421080c040b20074104490d052005280002210620012003417a6a3602042001200541066a360200200241d8046a200110c10120022802d8040d052004280200220720022802dc042205490d052005417f4c0d1f0240024020050d00410121030c010b200510382203450d2120034100200510d60b1a0b200320012802002204200510d40b1a2001200720056b3602042001200420056a3602002005ad22084220862008842108410221050c030b20074104490d042005280002210620012003417a6a3602042001200541066a360200200241e0046a200110c10120022802e0040d042004280200220720022802e4042205490d042005417f4c0d1e0240024020050d00410121030c010b200510382203450d2020034100200510d60b1a0b20032001280200220a200510d40b21092001200720056b22043602042001200a20056a220a360200024020044104490d00200a280000210720012004417c6a3602042001200a41046a3602002005ad22084220862008842108410321050c040b2005450d04200910390c040b20074104490d032005280002210620012003417a6a3602042001200541066a360200200241e8046a200110c10120022802e8040d032004280200220720022802ec042205490d032005417f4c0d1d0240024020050d00410121030c010b200510382203450d1f20034100200510d60b1a0b200320012802002204200510d40b1a2001200720056b3602042001200420056a3602002005ad22084220862008842108410421050c010b20074104490d022005280002210620012003417a6a3602042001200541066a360200410521050b0b200020053602042000411a360200200041186a2007360200200041106a20083702002000410c6a2003360200200041086a20063602000c280b200041263602000c270b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c260b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241f0226a200110940520022802f0222201450d00200241901b6a200241f0226a41047241900110d40b1a200041086a200241901b6a41900110d40b1a20002001360204200041183602000c260b200041263602000c250b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c240b02402007450d0020012003417e6a3602042001200541026a3602000b200041263602000c230b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e28000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272a0b20074104490d292005280002210620012003417a6a3602042001200541066a360200410121040c270b20074104490d282005280002210620012003417a6a3602042001200541066a360200410221040c260b20074104490d272005280002210620012003417a6a3602042001200541066a360200410321040c250b4104210420074104490d262005280002210620012003417a6a3602042001200541066a3602000c240b20074104490d252005280002210620012003417a6a3602042001200541066a360200410521040c230b20074104490d242005280002210620012003417a6a360204410621042001200541066a3602000c220b20074104490d232005280002210620012003417a6a3602042001200541066a360200410721040c210b20074104490d222005280002210620012003417a6a3602042001200541066a360200410821040c200b20074104490d212005280002210620012003417a6a3602042001200541066a360200410921040c1f0b20074104490d202005280002210620012003417a6a3602042001200541066a360200410a21040c1e0b20074104490d1f2005280002210620012003417a6a3602042001200541066a360200410b21040c1d0b20074104490d1e2005280002210620012003417a6a3602042001200541066a360200410c21040c1c0b2007450d1d20052d0002210720012003417d6a220a3602042001200541036a360200410021060240024020070e0201001f0b200a4104490d1e200528000321042001200341796a3602042001200541076a360200410121060b2004ad21084200210f410d21040c1c0b2007450d1c20052d0002210720012003417d6a220a3602042001200541036a360200410021060240024020070e0201001e0b200a4104490d1d200528000321042001200341796a3602042001200541076a360200410121060b2004ad21084200210f410e21040c1b0b20074104490d1b2005280002210620012003417a6a3602042001200541066a360200410f21040c190b20074104490d1a2005280002210620012003417a6a3602042001200541066a360200411021040c180b20074104490d192005280002210620012003417a6a3602042001200541066a360200411121040c170b20074104490d182005280002210620012003417a6a3602042001200541066a360200411221040c160b20074104490d172005280002210620012003417a6a3602042001200541066a360200411321040c150b20074104490d162005280002210620012003417a6a3602042001200541066a360200411421040c140b20074104490d152005280002210620012003417a6a3602042001200541066a360200411521040c130b20074104490d142005280002210620012003417a6a3602042001200541066a360200411621040c120b20074104490d132005280002210620012003417a6a3602042001200541066a360200411721040c110b20074104490d122005280002210620012003417a6a3602042001200541066a360200411821040c100b20074104490d112005280002210620012003417a6a3602042001200541066a360200411921040c0f0b20074104490d102005280002210620012003417a6a3602042001200541066a360200411a21040c0e0b20074108490d0f200529000221082001200341766a36020420012005410a6a3602004200210f411b21040c0e0b20074104490d0e2005280002210620012003417a6a3602042001200541066a360200411c21040c0c0b20074104490d0d2005280002210620012003417a6a3602042001200541066a360200411d21040c0b0b20074104490d0c2005280002210620012003417a6a3602042001200541066a360200411e21040c0a0b20074110490d0b20012003416e6a3602042001200541126a3602002005410a6a290000210f20052900022108411f21040c0a0b20074110490d0a20012003416e6a3602042001200541126a3602002005410a6a290000210f20052900022108412021040c090b20074104490d092005280002210620012003417a6a3602042001200541066a360200412121040c070b20074104490d082005280002210620012003417a6a3602042001200541066a360200412221040c060b20074104490d072005280002210620012003417a6a3602042001200541066a360200412321040c050b20074104490d062005280002210620012003417a6a3602042001200541066a360200412421040c040b20074104490d052005280002210620012003417a6a3602042001200541066a360200412521040c030b20074104490d042005280002210620012003417a6a3602042001200541066a360200412621040c020b20074104490d032005280002210620012003417a6a3602042001200541066a360200412721040c010b20074104490d022005280002210620012003417a6a3602042001200541066a360200412821040b0b20004115360200200041186a200f370200200041106a20083702002000410c6a2006360200200041086a20043602000c230b200041263602000c220b200241901b6a2001109505024020022802c01b450d00200241b8106a200241901b6a41800210d40b1a200241f0226a41046a200241b8106a41800210d40b1a20004114360200200041046a200241f0226a41840210d40b1a0c220b200041263602000c210b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024002400240024020060e04000102030a0b200241a8046a200110c10120022802a8040d09200241f0226a200120022802ac04109d0220022802f0222203450d0920022902f422210f02402001109105220a450d00410121010c040b200f42ffffff3f8350450d080c090b20074102490d0820052f0002210720012003417c6a3602042001200541046a360200200241b8046a200110c10120022802b8040d08200241f0226a200120022802bc04109d0220022802f0222203450d0820022902f422210f200241f0226a200110860520022802f022220a4102460d06200241f8226a350200210e20022802f422210d200241b0046a200110c10120022802b0040d062004280200220520022802b4042204490d062004417f4c0d1b0240024020040d00410121060c010b200410382206450d1d20064100200410d60b1a0b200620012802002209200410d40b210b2001200520046b22053602042001200920046a22093602002005450d0520092d0000210620012005417f6a22173602042001200941016a3602004100210c0240024020060e020100070b4101210c0b20174108490d052004411076210620044108762117200929000121082001200541776a3602042001200941096a360200200bad422086200e84211041022101200421050c020b20074102490d0720052f0002210620012003417c6a3602042001200541046a360200200241c0046a200110c10120022802c0040d07200241f0226a200120022802c404109d0220022802f0222205450d0720022902f4222108200241f0226a200110860520022802f02222094102460d03200241f0226a41086a2203350200210e20022802f422210b200241f0226a200110860220022d00f0224101460d03200428020022174108490d0320024190236a2d0000210420024188236a290300211020024184236a280200210d20024180236a280200210a2003290300210f20022802f422210320022f01f222210720022d00f122210c2001280200221829000021112001201741786a3602042001201841086a360200410321010c010b20074102490d0620052f0002210620012003417c6a3602042001200541046a360200200241c8046a200110c10120022802c8040d06200241f0226a200120022802cc04109d0220022802f0222205450d0620022902f4222108200428020022034104490d0120012802002207280000210920012003417c6a22043602042001200741046a36020020044104490d012007280004210b2001200341786a3602042001200741086a360200200241f0226a200110860220022d00f0224101460d0120024190236a2d0000210420024188236a290300211020024184236a280200210d20024180236a280200210a200241f0226a41086a290300210f20022802f422210320022f01f222210720022d00f122210c410421010b200020173a00292000200c3a000920004113360200200041c8006a2011370200200041c0006a200e3702002000413c6a200b360200200041386a2009360200200041306a20083702002000412c6a20053602002000412a6a20063b0100200041286a20043a0000200041206a20103702002000411c6a200d360200200041186a200a360200200041106a200f3702002000410c6a20033602002000410a6a20073b0100200041086a20013a00000c260b200842ffffff3f83500d04200510390c040b200842ffffff3f83500d03200510390c030b2004450d00200b10390b200f42ffffff3f83500d010b200310390b200041263602000c200b02402007450d0020052d0001210620012003417e6a221c3602042001200541026a3602004104210c024002400240024002400240024002400240024020060e0a000102090304050607080a0b200241f0226a200110860220022d00f0224101460d0920042802002203450d0920024180236a290300210f200241f8226a290300210820024190236a2d0000210920024188236a290300210e20022802f422210a20022f01f222210b20022d00f1222107200128020022052d0000210620012003417f6a22043602042001200541016a3602004106210d0240024020060e0201000b0b2004450d0a20052d0001210620012003417e6a3602042001200541026a3602004100210d0240024002400240024020060e060504000102030f0b4102210d0c040b4103210d0c030b4104210d0c020b4105210d0c010b4101210d0b20011091052218450d094101210c0c080b200241f0226a200110860220022d00f0224101460d0820042802002203450d0820024180236a290300210f200241f8226a290300210820024190236a2d0000210920024188236a290300210e20022802f422210a20022f01f222210b20022d00f1222107200128020022052d0000210620012003417f6a22043602042001200541016a3602004100210d02400240024002400240024020060e060504000102030e0b4102210d0c040b4103210d0c030b4104210d0c020b4105210d0c010b4101210d0b20044104490d082005280001211820012003417b6a3602042001200541056a3602004102210c0c070b200241f0226a200110860220022d00f0224101460d0720042802002203450d0720024180236a290300210f200241f8226a290300210820024190236a2d0000210920024188236a290300210e20022802f422210a20022f01f222210b20022d00f1222107200128020022052d0000210620012003417f6a22043602042001200541016a3602004100210d02400240024002400240024020060e060504000102030d0b4102210d0c040b4103210d0c030b4104210d0c020b4105210d0c010b4101210d0b20044104490d072005280001211820012003417b6a3602042001200541056a3602004103210c0c060b201c450d0620052d0002210620012003417d6a22043602042001200541036a3602004100210702400240024002400240024020060e060500010203040c0b410121070c040b410221070c030b410321070c020b410421070c010b410521070b20044104490d062005280003210a2001200341796a22063602042001200541076a36020020064102490d0620052f0007210b2001200341776a3602042001200541096a3602004105210c0c050b200241f0226a200110860220022d00f0224101460d0520042802002203450d0520024180236a290300210f200241f8226a290300210820024190236a2d0000210920024188236a290300210e20022802f422210a20022f01f222210b20022d00f1222107200128020022052d0000210620012003417f6a22043602042001200541016a3602004100210d02400240024002400240024020060e060504000102030b0b4102210d0c040b4103210d0c030b4104210d0c020b4105210d0c010b4101210d0b20044102490d0520052f0001211720012003417d6a3602042001200541036a360200200241a0046a200110c10120022802a0040d0520022802a404211820024198046a200110c1012002280298040d05200228029c04211b4106210c0c040b200241f0226a200110860220022d00f0224101460d0420024180236a2203290300210f200241f8226a2205290300210820024190236a22062d0000210920024188236a2204290300210e20022802f422210a20022f01f222210b20022d00f1222107200241f0226a200110860220022d00f0224101460d0420062d000021132004290300211020024184236a280200211920032802002114200241fc226a280200211a2005280200211b20022802f422211820022f01f222211720022d00f122210d4107210c0c030b200241f0226a200110860220022d00f0224101460d0320024180236a2203290300210f4108210c200241f0226a41086a2205290300210820024190236a22062d0000210920024188236a2204290300210e20022802f422210a20022f01f222210b20022d00f1222107200241f0226a200110860220022d00f0224101460d0320062d000021132004290300211020024184236a280200211920032802002114200241fc226a280200211a2005280200211b20022802f422211820022f01f222211720022d00f122210d0c020b200241f0226a200110860220022d00f0224101460d0220024180236a2203290300210f200241f8226a2205290300210820024190236a22062d0000210920024188236a2204290300210e20022802f422210a20022f01f222210b20022d00f1222107200241f0226a200110860220022d00f0224101460d0220062d000021132004290300211020024184236a280200211920032802002114200241fc226a280200211a2005280200211b20022802f422211820022f01f222211720022d00f122210d4109210c0c010b200241f0226a200110860220022d00f0224101460d0120024180236a2203290300210f200241f8226a2205290300210820024190236a22062d0000210920024188236a220d290300210e20022802f422210a20022f01f222210b20022d00f1222107200241f0226a200110860220022d00f0224101460d0120042802002204450d012005290300211120062d00002113200d290300211020024184236a28020021192003280200211420022802f422211820022f01f222211720022d00f122210d200128020022032d0000210520012004417f6a22063602042001200341016a360200410621150240024020050e020100030b2006450d0220032d0001210520012004417e6a3602042001200341026a360200410021150240024002400240024020050e06050400010203070b410221150c040b410321150c030b410421150c020b410521150c010b410121150b20011091052212450d012011422088a7211a2011a7211b410a210c0b200020153a00452000200d3a0025200020073a00052000200c3a000420004112360200200041146a200f3702002000410c6a2008370200200041c8006a2012360200200041c4006a20133a00002000413c6a2010370200200041386a2019360200200041346a2014360200200041306a201a3602002000412c6a201b360200200041286a2018360200200041266a20173b0100200041246a20093a00002000411c6a200e370200200041086a200a360200200041066a200b3b01000c200b200041263602000c1f0b02402007450d0020052d0001210620012003417e6a3602042001200541026a360200024002400240024002400240024020060e0400010203070b20011091052203450d06410121070c030b20011091052203450d05200428020022054108490d042001280200220629000021082001200541786a3602042001200641086a3602002008422088a721052008a72106410221070c020b200241f0226a2001108b0520022d00f0224105460d04200241c0106a20024184236a290200370300200241c8106a2002418c236a2902003703002002200241fc226a2902003703b81020022902f4222208422088a7210520022802f02221032008a72106410321070c010b200241f0226a2001108b0520022d00f0224105460d03200241901b6a41086a220720024184236a290200370300200241901b6a41106a22042002418c236a2902003703002002200241fc226a2902003703901b200241f0226a41086a280200210520022802f422210620022802f022210320011091052201450d01200241b8106a41106a2004290300370300200241b8106a41086a2007290300370300200220022903901b3703b810410421070b200241a8096a41106a200241b8106a41106a2903002208370300200241a8096a41086a200241b8106a41086a290300220f370300200220022903b810220e3703a809200041106a2005ad4220862006ad843702002000410c6a2003360200200041086a200736020020004111360200200041186a200e370200200041206a200f370200200041286a2008370200200041306a20013602000c210b200341ff01714102470d012005450d01200610390c010b2003108505200310390b200041263602000c1e0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e06000102030405090b20074104490d082005280002210720012003417a6a22063602042001200541066a3602002006450d0820052d0006210b2001200341796a22093602042001200541076a220d3602004100210a02400240200b0e0201000a0b20094104490d09200528000721062001200341756a220436020420012005410b6a36020020044104490d09200528000b21042001200341716a220936020420012005410f6a220d3602004101210a0b2009450d08200d2d0000210520012009417f6a360204410121092001200d41016a36020020011091052203450d080c060b20074104490d072005280002210720012003417a6a22063602042001200541066a36020020064104490d072005280006210a2001200341766a36020420012005410a6a360200410221090c050b20024180046a200110c1012002280280040d06200428020022032002280284042206490d062006417f4c0d160240024020060d00410121070c010b200610382207450d1820074100200610d60b1a0b200720012802002204200610d40b1a2001200320066b22053602042001200420066a220a36020020054104490d05200a280000210420012005417c6a22033602042001200a41046a3602002003450d05200a2d0004210b20012005417b6a22093602042001200a41056a220d3602004100210302400240200b0e020100070b20094104490d06200a35000521082001200541776a22033602042001200a41096a36020020034104490d06200a350009210f2001200541736a22093602042001200a410d6a220d360200200f4220862008842108410121030b2009450d05200d2d0000210520012009417f6a3602042001200d41016a36020020011091052201450d05410321090c030b20024188046a200110c1012002280288040d0520042802002203200228028c042206490d052006417f4c0d150240024020060d00410121070c010b200610382207450d1720074100200610d60b1a0b200720012802002205200610d40b1a2001200320066b3602042001200520066a360200410421092006210a0c030b20074104490d042005280002210720012003417a6a22063602042001200541066a3602002006450d0420052d0006210b2001200341796a22093602042001200541076a220d3602004100210a02400240200b0e020100060b20094104490d05200528000721062001200341756a220436020420012005410b6a36020020044104490d05200528000b21042001200341716a220936020420012005410f6a220d3602004101210a0b2009450d04200d2d0000210520012009417f6a3602042001200d41016a36020020011091052203450d04410521090c020b20024190046a200110c1012002280290040d03200428020022032002280294042206490d032006417f4c0d130240024020060d00410121070c010b200610382207450d1520074100200610d60b1a0b200720012802002204200610d40b1a2001200320066b22053602042001200420066a220a36020020054104490d02200a280000210420012005417c6a22033602042001200a41046a3602002003450d02200a2d0004210b20012005417b6a22093602042001200a41056a220d3602004100210302400240200b0e020100040b20094104490d03200a35000521082001200541776a22033602042001200a41096a36020020034104490d03200a350009210f2001200541736a22093602042001200a410d6a220d360200200f4220862008842108410121030b2009450d02200d2d0000210520012009417f6a3602042001200d41016a36020020011091052201450d02410621090b2006210a0b200020053a0005200020093a000420004110360200200041246a20013602002000411c6a2008370200200041186a2003360200200041146a2004360200200041106a20063602002000410c6a200a360200200041086a20073602000c1f0b2006450d00200710390b200041263602000c1d0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020041012117024002400240024002400240024020060e0403000102070b200241f0226a2001108b0520022d00f02222034105460d0641022117200241c8176a41026a20022d00f3223a0000200241b8106a41086a20024184236a290200370300200241c8106a2002418c236a290200370300200220022f00f1223b01c8172002200241fc226a2902003703b810200241f0226a41086a280200210520022802f42221070c020b200241f0226a2001108b0520022d00f02222034105460d05200241a8096a41026a20022d00f3223a0000200241901b6a41086a20024184236a290200370300200241901b6a41106a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a2902003703901b200241f0226a41086a280200210520022802f42221070240200428020022064110490d002001200641706a220a36020420012001280200220441106a360200200a4110490d00200441086a290000210e200429000021102001200641606a220a3602042001200441206a360200200a4104490d00200441186a290000210f200429001021082004280020210d20012006415c6a3602042001200441246a360200200241c8176a41026a200241a8096a41026a2d00003a0000200241b8106a41086a200241901b6a41086a290300370300200241b8106a41106a200241901b6a41106a290300370300200220022f01a8093b01c817200220022903901b3703b8102010422088a7210b200e422088a7210c2010a7210a200ea72109410321170c020b20034102470d0520050d040c050b200241f0226a2001108b0520022d00f02222034105460d04200241aa096a20022d00f3223a0000200241901b6a41086a20024184236a290200370300200241901b6a41106a2002418c236a290200370300200220022f00f1223b01a8092002200241fc226a220c2902003703901b200241f0226a41086a2206280200210520022802f4222107200241f0226a2001108b0520022d00f0224105460d022006280200210920022802f422210b20022802f022210a200428020022064110490d0120024188236a290300210f200241f0226a41106a290300210820024190236a280200210d200c280200210c2001200641706a221736020420012001280200220441106a36020020174110490d01200441086a29000021102004290000210e2001200641606a22183602042001200441206a3602004104211720184104490d01200441186a2900002116200429001021112004280020211820012006415c6a3602042001200441246a360200200241c8176a41026a200241a8096a41026a2d00003a0000200241b8106a41086a200241901b6a41086a290300370300200241b8106a41106a200241901b6a41106a290300370300200220022f01a8093b01c817200220022903901b3703b8100b200041186a20022903b810370200200241f0076a41026a200241c8176a41026a2d000022013a0000200041206a200241b8106a41086a290300370200200041286a200241b8106a41106a290300370200200220022f01c81722063b01f007200041f0006a2016370200200041e8006a2011370200200041e0006a2010370200200041d8006a200e370200200041c8006a200f370200200041c0006a2008370200200041386a200cad4220862009ad84370200200041306a200bad422086200aad843702002000410c6a20033a0000200041086a20173602002000410f360200200020063b000d2000410f6a20013a0000200041f8006a2018360200200041d0006a200d360200200041146a2005360200200041106a20073602000c200b200a41ff01714102470d002009450d00200b10390b20034102470d012005450d010b200710390b200041263602000c1c0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602004108210c024002400240024002400240024002400240024020060e090001020304050609070a0b200241f0226a200110860220022d00f0224101460d09200241f8226a290300210820024190236a2d0000210720024188236a290300210f20024180236a290300210e20022802f422210320022f01f222210520022d00f122210a200241f0226a200110a20220022802f0222101200241901b6a200241f0226a41047241bc0710d40b1a20014126460d0941c00710382209450d18200e422088a7210b200ea7210d20092001360200200941046a200241901b6a41bc0710d40b1a4101210c0c080b200241f0226a200110860220022d00f0224101460d08200241f0226a41106a2206290300210e200241f0226a41086a2204290300210820024190236a22092d00002107200241f0226a41186a220b290300210f20022802f422210320022f01f222210520022d00f122210a200241f0226a200110860220022d00f0224101460d084102210c200241a8096a41026a20022d00f3223a0000200241b8106a41086a2006290300370300200241b8106a41106a200b290300370300200241b8106a41186a20092d00003a0000200220022f00f1223b01a809200220042903003703b810200e422088a7210b20022802f4222109200ea7210d0c070b200241f8036a200110c10120022802f8030d07200241f0226a200120022802fc03109d0220022802f0222203450d0720022902f42221080240200428020022064102490d00200128020022072f0000210520012006417e6a22043602042001200741026a360200200441044f0d060b200842ffffff3f83500d07200310390c070b200241f0226a200110860220022d00f0224101460d0620024190236a2d0000210720024188236a290300210f20024184236a280200210b20024180236a280200210d200241f8226a290300210820022802f422210320022f01f222210520022d00f122210a4104210c0c050b200241f0226a200110860220022d00f0224101460d0520024190236a22062d00002107200241f0226a41186a2204290300210f20024184236a280200210b200241f0226a41106a2209280200210d200241f0226a41086a220c290300210820022802f422210320022f01f222210520022d00f122210a200241f0226a200110860220022d00f0224101460d05200241aa096a20022d00f3223a0000200241b8106a41086a2009290300370300200241b8106a41106a2004290300370300200241b8106a41186a20062d00003a0000200220022f00f1223b01a8092002200c2903003703b81020022802f42221094105210c0c040b200241f0226a200110860220022d00f0224101460d0420024190236a2d0000210720024188236a290300210f20024184236a280200210b20024180236a280200210d200241f8226a290300210820022802f422210320022f01f222210520022d00f122210a4106210c0c030b200241f0226a200110860220022d00f0224101460d0320024190236a2d0000210720024188236a290300210f20024184236a280200210b20024180236a280200210d200241f8226a290300210820022802f422210320022f01f222210520022d00f122210a4107210c0c020b200241f0226a200110860220022d00f0224101460d0220024190236a2d0000210720024188236a290300210f20024184236a280200210b20024180236a280200210d200241f8226a290300210820022802f422210320022f01f222210520022d00f122210a4109210c0c010b2007280002210d20012006417a6a3602042001200741066a3602004103210c0b2000200a3a00052000200c3a0004200020022f01a8093b0025200041246a20073a00002000411c6a200f370200200041186a200b360200200041146a200d3602002000410c6a2008370200200041086a2003360200200041066a20053b0100200041286a20093602002000412c6a20022903b810370200200041276a200241a8096a41026a2d00003a0000200041346a200241b8106a41086a2903003702002000413c6a200241c8106a290300370200200041c4006a200241b8106a41186a2802003602002000410e3602000c1c0b200041263602000c1b0b410f210b0c0b0b200241f0226a2001108b0520022d00f0224105460d13200241fc226a290200210f20024190236a28020021092002418e236a2f0100210d2002418d236a2d000021172002418c236a2d0000210c20024184236a290200210820022902f422210e20022802f0222106410e210b0c0a0b200241f0226a2001108b0520022d00f0224105460d1220024190236a220728020021092002418e236a2f0100210d2002418d236a2d000021172002418c236a2d0000210c20024184236a2902002108200241fc226a290200210f200241f8226a2204280200210320022802f422210520022802f0222106200241f0226a2001109205024020022d00f0224106460d002003ad4220862005ad84210e20024188236a290300211020024180236a2903002111200728020021152004290300211620022903f0222123410d210b0c0a0b200641ff01714102470d122003450d12200510390c120b200241f0226a2001108b0520022d00f0224105460d1120024190236a220728020021092002418e236a2f0100210d2002418d236a2d000021172002418c236a2d0000210c20024184236a2902002108410c210b200241f0226a410c6a290200210f200241f8226a2204280200210320022802f422210520022802f0222106200241f0226a2001109205024020022d00f0224106460d002003ad4220862005ad84210e20024188236a290300211020024180236a2903002111200728020021152004290300211620022903f02221230c090b200641ff01714102470d112003450d11200510390c110b200241f0226a2001108b0520022d00f0224105460d10200241fc226a290200210f20024190236a28020021092002418e236a2f0100210d2002418d236a2d000021172002418c236a2d0000210c20024184236a290200210820022902f422210e20022802f0222106410b210b0c070b200241f0036a200110c10120022802f0030d0f20022802f4032106200241f0226a2001108b0520022d00f0224105460d0f200241f8226a280200210520022802f422210720022802f02221030240024020042802002204450d0020024190236a35020021232002418c236a28020021092002418a236a2f0100210d20024189236a2d0000211720024188236a2d0000210c20024180236a2903002108200241fc226a350200210f2001280200220a2d0000210b20012004417f6a22183602042001200a41016a36020042002116024002400240024002400240200b0e0707000102030405060b20184110490d0520012004416f6a3602042001200a41116a360200200a41096a2900002110200a2900012111420121160c060b420221160c050b420321160c040b420421160c030b420521160c020b420621160c010b200341ff01714102470d102005450d10200710390c100b200f4220862005ad84210f2007ad4220862003ad84210e410a210b0c060b200241e8036a200110c10120022802e8030d0e200128020422034108490d0e20022802ec0321062001280200220529000021082001200341786a3602042001200541086a360200200842ff01560d0e200842ff0183210e4109210b0c050b200241e0036a200110c10120022802e0030d0d20022802e4032109200241f0226a200110860220022d00f0224101460d0d20024180236a290300210f4108210b200241f0226a41086a290300210e20024190236a2d0000210c20024188236a290300210820022802f422210620022f01f222212120022d00f12221220c040b200241d8036a200110c10120022802d8030d0c20022802dc032106200241c0036a2001108c0520022903c003a70d0c200241d0036a290300210f20022903c803210e4107210b0c030b20204104490d0b2005280002210620012003417a6a3602044106210b2001200541066a3602000c020b200241b8036a200110c10120022802b8030d0a20022802bc032106200241a0036a2001108c0520022903a003a70d0a200241b0036a290300210f20022903a803210e4105210b0c010b20024198036a200110c1012002280298030d09200228029c032207200428020041c4006e2203200320074b1bad42c4007e2208422088a70d012008a72205417f4c0d010240024020050d00410421060c010b200510382206450d030b41002103200241003602d017200220063602c8172002200541c4006e3602cc17024002402007450d00200241f0226a41017221050340200241f0226a200110860220022d00f0224101460d0220022d00902321042002290388232108200228028423210a200228028023210920022903f822210f20022802f422210b20022f01f222210d20022d00f122210c200241f0226a200110920520022d00f02222174106460d02200241901b6a411f6a22182005411f6a280000360000200241901b6a41186a2215200541186a290000370300200241b8106a41086a200541086a290000220e370300200241b8106a41106a200541106a2900002210370300200241b8106a41186a22132015290300370300200241b8106a411f6a221520182800003600002002200529000022113703b810200241a8096a411f6a22182015280000360000200241a8096a41186a22152013290300370300200241a8096a41106a22132010370300200241a8096a41086a2219200e370300200220113703a8090240200320022802cc17470d00200241c8176a200310890320022802c817210620022802d01721030b2006200341c4006c6a2203200f370007200320173a0020200320043a001f200320083700172003200b3600032003200d3b00012003200c3a00002003410f6a200aad4220862009ad84370000200320022903a809370021200341296a2019290300370000200341316a2013290300370000200341396a2015290300370000200341c0006a2018280000360000200220022802d01741016a22033602d0172007417f6a22070d000b20022802c81721060b2006450d0a20022902cc17210e4103210b0c010b200241b8106a411f6a200241901b6a411f6a280000360000200241b8106a41186a200241901b6a41186a29030037030020022802c817210502402003450d00200341c4006c2103200541286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010390b200141c4006a2101200341bc7f6a22030d000b0b20022802cc172201450d09200141c4006c450d09200510390c090b200041d4006a200229039809370200200041ec006a20022903f808370200200041dc006a20024198096a41086a280200360200200241dc076a41026a220120024194096a41026a2d00003a0000200041f4006a200241f8086a41086a290300370200200041fc006a200241f8086a41106a290300370200200241d8076a41026a2203200241f4086a41026a2d00003a0000200220022f0194093b01dc07200220022f01f4083b01d807200041a0016a200241d8086a41106a29030037020020004198016a200241d8086a41086a29030037020020004190016a20022903d808370200200241d4076a41026a2205200241d4086a41026a2d00003a0000200041b4016a20022903b808370200200041bc016a200241b8086a41086a290300370200200041c4016a200241b8086a41106a290300370200200241d0076a41026a2207200241b4086a41026a2d00003a0000200220022f01d4083b01d407200220022f01b4083b01d007200041e8016a20024198086a41106a290300370200200041e0016a20024198086a41086a290300370200200041d8016a200229039808370200200241a8076a41206a2204200241f0076a41206a280200360200200241a8076a41186a2220200241f0076a41186a290300370300200241a8076a41106a2228200241f0076a41106a290300370300200241a8076a41086a2229200241f0076a41086a290300370300200241a4076a41026a222a200241ec076a41026a2d00003a0000200220022903f0073703a807200220022f01ec073b01a4072000419e026a200241e8076a41026a2d00003a00002000419c026a20022f01e8073b0000200241a0076a41026a222b200241e4076a41026a2d00003a0000200220022f01e4073b01a0072002419c076a41026a222c200241e0076a41026a2d00003a0000200220022f01e0073b019c07200041c8006a2010370200200041c0006a2011370200200041186a200f370200200041106a200e370200200041e0006a20183a0000200041d0006a2015360200200041386a2016370200200041306a20233702002000412c6a20093602002000200d3b012a200020173a0029200041286a200c3a0000200041206a20083702002000410c6a2006360200200020213b000a200020223a0009200041086a200b3a00002000410d360200200041e4006a2019360200200041e8006a201336020020004184016a20143a0000200020022f01dc073b0061200041e3006a20012d00003a000020004188016a201a3602002000418c016a2012360200200041a8016a201b3a0000200020022f01d8073b00850120004187016a20032d00003a0000200020022f01d4073b00a901200041ab016a20052d00003a0000200041cc016a20243a0000200041b0016a201c360200200041ac016a201d360200200041cf016a20072d00003a0000200020022f01d0073b00cd01200041d4016a2025360200200041d0016a202736020020004190026a200428020036020020004188026a202029030037020020004180026a2028290300370200200041f8016a2029290300370200200041f0016a20022903a80737020020004194026a201e3a000020004197026a202a2d00003a0000200020022f01a4073b0095022000419f026a202636000020004198026a201f360000200041a5026a202b2d00003a0000200020022f01a0073b00a302200041a8026a200a4110763a0000200041a6026a200a3b0000200041ab026a202c2d00003a0000200020022f019c073b00a9020c0e0b1034000b1032000b201b4101470d00201c450d00201d10390b20144101470d002012450d00201a10390b20184101470d002013450d00201910390b200741ff01714101470d002022450d00202110390b200341ff01714101470d002008a7450d00200510390b0240200e422088a72201450d002006200141c8006c6a2103200621010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012003470d000b0b200ea72201450d00200141c8006c450d00200610390b200041263602000c050b0b200241a8096a41106a2201200241b8106a41106a290300370300200241a8096a41086a2203200241b8106a41086a290300370300200220022903b8103703a809200041186a200e422086200842208884370200200041106a20084220862014410874200a41ff017172ad84370200200041346a200d360200200041306a20153602002000412c6a200b360200200020193b002a2000200c3a0029200041286a20173a0000200041206a200f3702002000410c6a2007360200200020183b010a200020093a0009200041086a20133a000020004106360200200041386a20022903a809370200200041c0006a2003290300370200200041c8006a2001290300370200200041d8006a2011370200200041d0006a20103702000c030b200041186a20022903b810370200200241f0076a41026a200241c8176a41026a2d0000220b3a0000200041206a200241b8106a41086a290300370200200041286a200241b8106a41106a290300370200200220022f01c817220d3b01f007200041e0006a2011370200200041d8006a2010370200200041c8006a200e370200200041c0006a200f370200200041386a2009ad4220862004ad84370200200041306a200aad4220862007ad843702002000410c6a20033a0000200041086a2001360200200041043602002000200d3b000d2000410f6a200b3a0000200041d0006a2008370200200041146a2005360200200041106a20063602000c020b200041263602000c010b200041263602000b200241d02b6a24000bc71508027f017e0f7f017e017f037e017f027e230041d0176b22032400024002400240024002400240200220012802002802044198046e2204200420024b1bad4298047e2205422088a70d002005a72204417f4c0d0002400240024020040d00410821060c010b200410382206450d010b2001200128020441016a22073602042003410036024020032006360238200320044198046e36023c200720012802084b0d042002450d03200341d8136a410c6a2108200341d8136a41046a2109200341e00f6a410472210a200341b8136a210b200341e00f6a410c6a210c410021074100210d0240034020012802002204280204220e450d012004280200220f2d000021102004200e417f6a3602042004200f41016a3602004100210e0240024002400240024002400240024002400240024002400240024002400240024020100e080300010205060708120b200341d8136a200110890220032802d813220f450d0820032802e013210420032802dc132110200341d8136a2001108a02024020032903d81322054209510d0020032802e0132111200341cc086a200841bc0310d40b1a4101210e200f21122010211320042114200521150c030b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0e201041f8036c450d0e200f10390c0e0b200341e00f6a200110890220032802e00f220f450d0720032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341086a2001108c02024002402003280208450d00200341003602e00f0c010b200341e00f6a2001200328020c10880220032802e00f0d0b0b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d07201041f8036c450d07200f10390c070b200341d8136a200110890220032802d813220f450d0620032802e013210420032802dc132110200341d8136a200110890220032802d813450d0120032802e013211120032903d81321154103210e200f211220102113200421140b200341dc046a200341cc086a41cc0310d40b1a0c0c0b02402004450d00200441f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b4108210e410121042010450d0a201041f8036c450d0a200f10390c0a0b200341e00f6a200110890220032802e00f220f450d0320032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341106a2001108c02024002402003280210450d00200341003602e00f0c010b200341e00f6a2001200328021410880220032802e00f0d090b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d03201041f8036c450d03200f10390c030b200341e00f6a200110890220032802e00f220f450d0220032802e80f211620032802e40f2110200341e00f6a2001108a02024020032903e00f4209510d00200341980c6a200341e00f6a41c80310d40b1a200341186a2001108c02024002402003280218450d00200341003602e00f0c010b200341e00f6a2001200328021c10880220032802e00f0d070b200341980c6a108d020b02402016450d00201641f8036c210e200f210403402004108b02200441f8036a2104200e41887c6a220e0d000b0b2010450d02201041f8036c450d02200f10390c020b200341206a2001108e024108210e410121042003290320a70d0720032903282105200341d8136a2001108a0220032903d8134209510d07200341e00f6a200341d8136a41c80310d40b1a200341d8136a200110890220032802d813220f450d0220032802e013211420032802dc13211320032802e00f2111200341cc086a200a41c40310d40b1a4106210e41002104200f2112200521150c060b200341d8136a2001108f0220032802d813410c460d00200341e00f6a200341d8136a41f80310d40b1a024020012802002204280204220e4108490d002004280200220f29000021052004200e41786a3602042004200f41086a36020020012802002204280204220e4108490d002004280200220f29000021172004200e41786a3602042004200f41086a36020020012802002204280204220e450d002004280200220f2d000021102004200e417f6a3602042004200f41016a3602004100210f0240024020100e020100020b4101210f0b200341306a2001108c0220032802300d00200341d8136a2001200328023410a40220032802d8132210450d0020032802e013211420032802dc13211320032903e00f211520032802e80f2111200341cc086a200c41cc0310d40b1a200341a8086a41186a200b41186a290300370300200341a8086a41106a200b41106a290300370300200341a8086a41086a200b41086a2903003703002003200b2903003703a8084107210e41002104201021122017211820052119200f211a0c070b200341e00f6a108b020b4108210e410121040c050b200341e00f6a108d020c040b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4102210e41002104200f211220102113201621140c020b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4105210e41002104200f211220102113201621140c010b20032802e80f211120032903e00f21152009200341980c6a41c80310d40b1a200341cc086a200341d8136a41cc0310d40b1a4104210e41002104200f211220102113201621140b0b200341dc046a200341cc086a41cc0310d40b1a200341b8046a41186a200341a8086a41186a290300370300200341b8046a41106a200341a8086a41106a290300370300200341b8046a41086a200341a8086a41086a290300370300200320032903a8083703b80420040d020b200d41016a210d200341ec006a200341dc046a41cc0310d40b1a200341c8006a41186a220f200341b8046a41186a290300370300200341c8006a41106a2210200341b8046a41106a290300370300200341c8006a41086a2216200341b8046a41086a290300370300200320032903b80437034802402007200328023c470d00200341386a200710910220032802382106200328024021070b200620074198046c6a22042011360018200420153700102004201436000c20042013360008200420123600042004201a3a00012004200e3a00002004411c6a200341ec006a41cc0310d40b1a2016290300210520102903002117200f290300211b2003290348211c200420183700900420042019370088042004201c3700e80320044180046a201b370000200441f8036a2017370000200441f0036a20053700002003200328024041016a2207360240200d2002460d040c000b0b20004100360200200328023821062007450d0520074198046c2101200621040340200410a00220044198046a2104200141e87b6a22010d000c060b0b1032000b1034000b200128020421070b2000200329033837020020012007417f6a360204200041086a200341386a41086a2802003602000c020b200041003602000b200328023c2204450d0020044198046c450d00200610390b200341d0176a24000be00303027f017e037f230041b0176b22032400024002400240024002402002200128020028020441e0076e2204200420024b1bad42e0077e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b2001200128020441016a220736020420034100360208200320063602002003200441e0076e360204200720012802084b0d02024002402002450d00200341d00f6a4101722108410021040340200341d00f6a200110a60220032d00d00f2107200341f1076a200841df0710d40b1a2007410b460d02200341126a200341f1076a41df0710d40b1a024020042003280204470d002003200410ff0120032802002106200328020821040b2006200441e0076c6a220420073a0000200441016a200341126a41df0710d40b1a2003200328020841016a22043602082002417f6a22020d000b200128020421070b2000200329030037020020012007417f6a360204200041086a200341086a2802003602000c050b20004100360200200328020021062004450d03200441e0076c21072006210403402004108002200441e0076a2104200741a0786a22070d000c040b0b1034000b1032000b200041003602000b20032802042204450d00200441e0076c450d00200610390b200341b0176a24000bc71503057f027e017f230041900c6b22022400024002402001280200220328020422040d002000410b3a00000c010b200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e0b000102030405060708090b0a0b200241a8086a200110890220022802a8082204450d13200241b0086a280200210320022802ac08210520022001108c02024002402002280200450d00200241003602a8080c010b200241a8086a2001200228020410880220022802a8080d210b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d21200541f8036c450d21200410390c210b200241a8086a200110890220022802a8082204450d11200241b0086a280200210320022802ac082105200241086a2001108c02024002402002280208450d00200241003602a8080c010b200241a8086a2001200228020c10880220022802a8080d1f0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d20200541f8036c450d20200410390c200b200241a8086a200110890220022802a8082204450d0f200241b0086a280200210320022802ac082105200241106a2001108c02024002402002280210450d00200241003602a8080c010b200241a8086a2001200228021410880220022802a8080d1d0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d1f200541f8036c450d1f200410390c1f0b200241186a2001108e022002290318a70d110240200128020022032802042204450d0020022903202107200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241a8086a200110890220022802a8082201450d0020022902ac082108200041106a2007370300200041086a2008370000200041046a2001360000200041033a00000c1f0b2000410b3a00000c1e0b200241a8086a200110890220022802a8082204450d11200241a8086a41086a280200210320022802ac082105200241a8086a2001108a02024020022903a8084209510d00200041106a200241a8086a41c80310d40b1a2000410c6a2003360000200041086a2005360000200041046a2004360000200041043a00000c1e0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d1d200541f8036c450d1d200410390c1d0b200241c0046a200110890220022802c0042204450d11200241c8046a280200210320022802c4042105200241c0046a2001108a0220022903c0044209510d0a200241f8006a200241c0046a41c80310d40b1a200241286a2001108c02024002402002280228450d00200241003602c0040c010b200241c0046a2001200228022c10880220022802c0040d190b2000410b3a0000200241f8006a108d020c0b0b200128020022032802042204450d11200328020022052d0000210620032004417f6a3602042003200541016a36020041002104024002400240024020060e0403000102150b410121040c020b410221040c010b410321040b02402001280200220328020422054108490d002003280200220629000021072003200541786a3602042003200641086a360200200241306a2001108c020240024020022802300d0020012802002203280204220520022802342201490d002001417f4c0d150240024020010d00410121060c010b200110382206450d0920064100200110d60b1a200328020421050b200520014f0d01200610390b2000410b3a00000c1d0b200620032802002209200110d40b21062003200520016b3602042003200920016a360200200041186a2007370300200041106a41003a0000200041086a2001ad2207422086200784370100200041046a2006360100200020043a0001200041063a00000c1c0b2000410b3a00000c1b0b200241c8006a2001108c0220022802480d12200228024c2103200241c0006a2001108c0220022802400d1320022802442104200241386a2001108c02024020022802380d00200228023c2101200041073a00002000410c6a2001360200200041086a2004360200200041046a20033602000c1b0b2000410b3a00000c1a0b200241d0006a2001108c02024020022802500d0020022802542101200041083a0000200041046a20013602000c1a0b2000410b3a00000c190b200241e8006a2001108c0220022802680d12200228026c2103200241e0006a2001108c0220022802600d1320022802642104200241d8006a2001108c02024020022802580d00200228025c2101200041093a00002000410c6a2001360200200041086a2004360200200041046a20033602000c190b2000410b3a00000c180b2000410b3a00000c170b200241a8086a2001108a0220022903a8084209510d01200241f8006a200241a8086a41c80310d40b1a2001200128020441016a2203360204200320012802084b0d03200241a8086a200110a50220022d00a8082103200241c0046a200241a8086a41017241e70310d40b1a2003410b460d0341e803103822040d020b1032000b2000410b3a00000c140b200420033a0000200441016a200241c0046a41e70310d40b1a20012001280204417f6a360204200041086a200241f8006a41c80310d40b1a200041046a20043602002000410a3a00000c130b2000410b3a0000200241f8006a108d020c120b2000410b3a00000b02402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d10200541f8036c450d10200410390c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b2000410b3a00000c090b1034000b2000410b3a00000c070b2000410b3a00000c060b2000410b3a00000c050b2000410b3a00000c040b200041106a20022903c004370200200041186a200241c0046a41086a280200360200200241a8086a41046a200241f8006a41c80310d40b1a200041053a0000200020022f00753b0001200041036a200241f7006a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600002000411c6a200241a8086a41cc0310d40b1a0c030b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041023a0000200020022f00c0043b0001200041036a200241c0046a41026a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000c020b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041013a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000c010b200041106a20022903a808370200200041186a200241a8086a41086a280200360200200041003a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000b200241900c6a24000bc91503057f027e017f23004180146b22022400024002402001280200220328020422040d002000410b3a00000c010b200328020022052d0000210620032004417f6a3602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e0b000102030405060708090b0a0b200241a00c6a200110890220022802a00c2204450d13200241a80c6a280200210320022802a40c210520022001108c02024002402002280200450d00200241003602a00c0c010b200241a00c6a2001200228020410a30220022802a00c0d210b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d21200541f8036c450d21200410390c210b200241a00c6a200110890220022802a00c2204450d11200241a80c6a280200210320022802a40c2105200241086a2001108c02024002402002280208450d00200241003602a00c0c010b200241a00c6a2001200228020c10a30220022802a00c0d1f0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d20200541f8036c450d20200410390c200b200241a00c6a200110890220022802a00c2204450d0f200241a80c6a280200210320022802a40c2105200241106a2001108c02024002402002280210450d00200241003602a00c0c010b200241a00c6a2001200228021410a30220022802a00c0d1d0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d1f200541f8036c450d1f200410390c1f0b200241186a2001108e022002290318a70d110240200128020022032802042204450d0020022903202107200328020022052d0000210620032004417f6a3602042003200541016a36020020060d00200241a00c6a200110890220022802a00c2201450d0020022902a40c2108200041106a2007370300200041086a2008370000200041046a2001360000200041033a00000c1f0b2000410b3a00000c1e0b200241a00c6a200110890220022802a00c2204450d11200241a00c6a41086a280200210320022802a40c2105200241a00c6a2001108a02024020022903a00c4209510d00200041106a200241a00c6a41c80310d40b1a2000410c6a2003360000200041086a2005360000200041046a2004360000200041043a00000c1e0b2000410b3a000002402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d1d200541f8036c450d1d200410390c1d0b200241c0046a200110890220022802c0042204450d11200241c8046a280200210320022802c4042105200241c0046a2001108a0220022903c0044209510d0a200241f8006a200241c0046a41c80310d40b1a200241286a2001108c02024002402002280228450d00200241003602c0040c010b200241c0046a2001200228022c10880220022802c0040d190b2000410b3a0000200241f8006a108d020c0b0b200128020022032802042204450d11200328020022052d0000210620032004417f6a3602042003200541016a36020041002104024002400240024020060e0403000102150b410121040c020b410221040c010b410321040b02402001280200220328020422054108490d002003280200220629000021072003200541786a3602042003200641086a360200200241306a2001108c020240024020022802300d0020012802002203280204220520022802342201490d002001417f4c0d150240024020010d00410121060c010b200110382206450d0920064100200110d60b1a200328020421050b200520014f0d01200610390b2000410b3a00000c1d0b200620032802002209200110d40b21062003200520016b3602042003200920016a360200200041d4076a2001ad2208422086200884370200200041d0076a2006360200200041106a4126360200200041086a2007370300200020043a0001200041063a00000c1c0b2000410b3a00000c1b0b200241c8006a2001108c0220022802480d12200228024c2103200241c0006a2001108c0220022802400d1320022802442104200241386a2001108c02024020022802380d00200228023c2101200041073a00002000410c6a2001360200200041086a2004360200200041046a20033602000c1b0b2000410b3a00000c1a0b200241d0006a2001108c02024020022802500d0020022802542101200041083a0000200041046a20013602000c1a0b2000410b3a00000c190b200241e8006a2001108c0220022802680d12200228026c2103200241e0006a2001108c0220022802600d1320022802642104200241d8006a2001108c02024020022802580d00200228025c2101200041093a00002000410c6a2001360200200041086a2004360200200041046a20033602000c190b2000410b3a00000c180b2000410b3a00000c170b200241a00c6a2001108a0220022903a00c4209510d01200241f8006a200241a00c6a41c80310d40b1a2001200128020441016a2203360204200320012802084b0d03200241a00c6a200110a60220022d00a00c2103200241c0046a200241a00c6a41017241df0710d40b1a2003410b460d0341e007103822040d020b1032000b2000410b3a00000c140b200420033a0000200441016a200241c0046a41df0710d40b1a20012001280204417f6a360204200041086a200241f8006a41c80310d40b1a200041046a20043602002000410a3a00000c130b2000410b3a0000200241f8006a108d020c120b2000410b3a00000b02402003450d00200341f8036c21032004210103402001108b02200141f8036a2101200341887c6a22030d000b0b2005450d10200541f8036c450d10200410390c100b2000410b3a00000c0f0b2000410b3a00000c0e0b2000410b3a00000c0d0b2000410b3a00000c0c0b2000410b3a00000c0b0b2000410b3a00000c0a0b2000410b3a00000c090b1034000b2000410b3a00000c070b2000410b3a00000c060b2000410b3a00000c050b2000410b3a00000c040b200041106a20022903c004370200200041186a200241c0046a41086a280200360200200241a00c6a41046a200241f8006a41c80310d40b1a200041053a0000200020022f00753b0001200041036a200241f7006a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600002000411c6a200241a00c6a41cc0310d40b1a0c030b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041023a0000200020022f00c0043b0001200041036a200241c0046a41026a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000c020b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041013a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000c010b200041106a20022903a00c370200200041186a200241a00c6a41086a280200360200200041003a0000200020022f00c0043b0001200041036a200241c2046a2d00003a00002000410c6a2003360000200041086a2005360000200041046a20043600000b20024180146a24000bc50101077f02402001450d00200020014103746a2103200241086a22042802002101200241046a210503402000280200210602402005280200220720016b41034b0d00200220014104107720052802002107200428020021010b2002280200220820016a20063600002004200141046a2206360200200041046a28020021090240200720066b41034b0d00200220064104107720042802002106200228020021080b2004200641046a2201360200200820066a2009360000200041086a22002003470d000b0b0bf70102067f017e0240200141286c2201450d00200020016a2103200241086a22042802002101200241046a2105034002402005280200220620016b411f4b0d00200220014120107720052802002106200428020021010b2002280200220720016a22082000290000370000200841186a200041186a290000370000200841106a200041106a290000370000200841086a200041086a2900003700002004200141206a2208360200200041206a29030021090240200620086b41074b0d00200220084108107720042802002108200228020021070b2004200841086a2201360200200720086a2009370000200041286a22002003470d000b0b0b920302067f027e02402001450d00200141386c2103200241086a2101200241046a210403400240024020002903004201510d000240200428020020012802002205470d002002200541011077200128020021050b200228020020056a41003a0000200541016a21050c010b02402004280200220620012802002205470d00200220054101107720042802002106200128020021050b2002280200220720056a41013a00002001200541016a22053602000240200620056b411f4b0d0020022005412010772004280200210620012802002105200228020021070b200720056a220841186a200041206a290000370000200841106a200041186a290000370000200841086a200041106a2900003700002008200041086a2900003700002001200541206a2205360200200041306a2903002109200041286a290300210a0240200620056b410f4b0d00200220054110107720012802002105200228020021070b200720056a220820093700082008200a370000200541106a21050b200041386a210020012005360200200341486a22030d000b0b0ba50402077f027e02402001450d002000200141d8006c6a2103200241086a22042802002105200241046a21060340200041386a210102402006280200220720056b411f4b0d00200220054120107720062802002107200428020021050b2002280200220820056a22092001290000370000200941186a200141186a290000370000200941106a200141106a290000370000200941086a200141086a2900003700002004200541206a2201360200200041086a290300210a2000290300210b0240200720016b410f4b0d00200220014110107720042802002101200228020021080b200820016a2209200a3700082009200b3700002004200141106a360200200041206a200210ab02200028022c21012002200041346a280200220910ac020240024020090d00200428020021090c010b200941057421072004280200210903400240200628020020096b411f4b0d002002200941201077200428020021090b200228020020096a22052001290000370000200541186a200141186a290000370000200541106a200141106a290000370000200541086a200141086a2900003700002004200941206a2209360200200141206a2101200741606a22070d000b0b200041d8006a2101200041186a290300210a2000290310210b0240200628020020096b410f4b0d002002200941101077200428020021090b2004200941106a2205360200200228020020096a2209200a3700082009200b3700002001210020012003470d000b0b0b9d0202077f027e2000280200210220012000280208220010ac020240200041306c2200450d00200220006a2103200141086a22042802002100200141046a2105034002402005280200220620006b411f4b0d00200120004120107720052802002106200428020021000b2001280200220720006a22082002290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a2900003700002004200041206a2200360200200241286a2903002109200241206a290300210a0240200620006b410f4b0d00200120004110107720042802002100200128020021070b200720006a220820093700082008200a3700002004200041106a2200360200200241306a22022003470d000b0b0b990301047f024002400240200141c000490d00200141808001490d012001418080808004490d020240200041046a22022802002203200041086a22042802002205470d00200020054101107720022802002103200428020021050b2000280200220220056a41033a00002004200541016a22053602000240200320056b41034b0d002000200541041077200041086a2802002105200028020021020b200220056a2001360000200041086a200541046a3602000f0b200141027421030240200041046a280200200041086a22052802002201470d002000200141011077200528020021010b200028020020016a20033a00002005200141016a3602000f0b200141027441017221030240200041046a280200200041086a220528020022016b41014b0d002000200141021077200528020021010b200028020020016a20033b00002005200141026a3602000f0b200141027441027221030240200041046a280200200041086a220528020022016b41034b0d002000200141041077200528020021010b200028020020016a20033600002005200141046a3602000b8b0302057f027e02402001450d0020014105742103200241086a22042802002101200241046a2105034002402005280200220620016b41074b0d00200220014108107720052802002106200428020021010b2002280200220720016a200041106a2900003700002004200141086a2201360200200041086a2903002108200029030021090240200620016b410f4b0d00200220014110107720042802002101200228020021070b200720016a22062008370008200620093700002004200141106a220136020002400240024002400240200041186a2d00000e03000102040b024020052802002001470d00200220014101107720042802002101200228020021070b200720016a41003a00000c020b024020052802002001470d00200220014101107720042802002101200228020021070b200720016a41013a00000c010b024020052802002001470d00200220014101107720042802002101200228020021070b200720016a41023a00000b2004200141016a22013602000b200041206a2100200341606a22030d000b0b0bd50302067f027e02402001450d0020014106742103200241086a2101200241046a210403400240024020002903004201510d000240200428020020012802002205470d002002200541011077200128020021050b200228020020056a41003a0000200541016a21050c010b02402004280200220620012802002205470d00200220054101107720042802002106200128020021050b2002280200220720056a41013a00002001200541016a22053602000240200620056b411f4b0d0020022005412010772004280200210620012802002105200228020021070b200720056a220841186a200041386a290000370000200841106a200041306a290000370000200841086a200041286a2900003700002008200041206a2900003700002001200541206a2205360200200041106a2903002109200041086a290300210a0240200620056b410f4b0d00200220054110107720012802002105200228020021070b200720056a220820093700082008200a3700002001200541106a2205360200200041186a29030021090240200428020020056b41074b0d002002200541081077200128020021050b200228020020056a2009370000200541086a21050b200041c0006a210020012005360200200341406a22030d000b0b0be50301067f02402001450d0020002001411c6c6a2103200241086a2104200241046a210503402000280200210120022000280208220610ac0202402006450d002006410574210720042802002108034002400240200528020020086b411f4d0d00200821060c010b2002200841201077200428020021060b2004200641206a2208360200200228020020066a22062001290000370000200641086a200141086a290000370000200641106a200141106a290000370000200641186a200141186a290000370000200141206a2101200741606a22070d000b0b200028020c210120022000280214220610ac020240024020060d00200428020021080c010b2006410574210720042802002108034002400240200528020020086b411f4d0d00200821060c010b2002200841201077200428020021060b2004200641206a2208360200200228020020066a22062001290000370000200641086a200141086a290000370000200641106a200141106a290000370000200641186a200141186a290000370000200141206a2101200741606a22070d000b0b2000411c6a2101200028021821060240200528020020086b41034b0d002002200841041077200428020021080b2004200841046a360200200228020020086a20063600002001210020012003470d000b0b0bcd0401077f02402001450d002000200141346c6a2103200241086a22012802002104200241046a210503402000280200210602402005280200220720046b41034b0d00200220044104107720052802002107200128020021040b2002280200220820046a20063600002001200441046a2204360200200041046a28020021060240200720046b41034b0d00200220044104107720012802002104200228020021080b200820046a20063600002001200441046a220436020002400240200041086a2d00004101460d00024020052802002004470d00200220044101107720012802002104200228020021080b200820046a41003a0000200441016a21040c010b024020052802002004470d00200220044101107720012802002104200228020021080b200820046a41013a00002001200441016a2208360200200041096a210402402005280200220620086b411f4b0d00200220084120107720052802002106200128020021080b2002280200220920086a22072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a2900003700002001200841206a22043602002000412c6a28020021080240200620046b41034b0d00200220044104107720012802002104200228020021090b200920046a2008360000200441046a21040b20012004360200200041306a28020021080240200528020020046b41034b0d002002200441041077200128020021040b200228020020046a20083600002001200441046a2204360200200041346a22002003470d000b0b0bd00302097f027e200141086a2102200141046a210341002104034002400240200020046a22052903004201510d000240200328020020022802002205470d002001200541011077200228020021050b200128020020056a41003a0000200541016a21050c010b02402003280200220620022802002207470d00200120074101107720032802002106200228020021070b2001280200220820076a41013a00002002200741016a22093602002005410c6a21070240200620096b411f4b0d0020012009412010772003280200210620022802002109200128020021080b200820096a220a2007290000370000200a41186a200741186a290000370000200a41106a200741106a290000370000200a41086a200741086a2900003700002002200941206a2207360200200541086a28020021090240200620076b41034b0d00200120074104107720022802002107200128020021080b200820076a20093600002002200741046a2207360200200541386a290300210b200541306a290300210c0240200328020020076b410f4b0d002001200741101077200228020021070b200128020020076a2205200b3700082005200c370000200741106a21050b20022005360200200441c0006a2204418012470d000b0bc10101037f02402001410a742203450d00200241086a2101200241046a2104034002400240200041cc076a2802004102470d000240200428020020012802002205470d002002200541011077200128020021050b200228020020056a41003a00002001200541016a3602000c010b0240200428020020012802002205470d002002200541011077200128020021050b200228020020056a41013a00002001200541016a3602002000200210b3020b20004180086a210020034180786a22030d000b0b0bf20801047f200141046a2802002102200141086a28020021030240024020002802c0070d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c010b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a36020020002802c007200041c8076a280200200110b902200228020021030b20002d00fc0721020240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a20023a0000200141086a2202200341016a3602002000200110d90220042802002104200228020021030240024020002802cc074101460d00024020042003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200341016a21030c010b024020042003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200041d0076a28020021040240200141046a220528020020036b41034b0d002001200341041077200228020021030b200128020020036a20043600002002200341046a220336020020002802d40721020240200528020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200341046a21030b200141086a20033602000240024020002d00d8074101460d000240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a2203360200024002400240200041d9076a2d00000e03000102040b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041da076a2100200128020020036a41013a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41293a0000200141086a2202200341016a2203360200024020042802002003470d002001200341011077200228020021030b200128020020036a41003a00002002200341016a220336020020002802dc0721000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000b0b950401067f0240200141c4006c2203450d00200241086a2101200241046a210403400240024020002d00004101460d0002402004280200220520012802002206470d00200220064101107720042802002105200128020021060b2002280200220720066a41003a00002001200641016a2206360200200041046a28020021080240200520066b41034b0d00200220064104107720012802002106200228020021070b200720066a20083600002001200641046a3602000c010b200041016a21050240200428020020012802002206470d002002200641011077200128020021060b200228020020066a41013a00002001200641016a3602002005200210b5020240200041216a2d00004101460d000240200428020020012802002206470d002002200641011077200128020021060b200228020020066a41003a00002001200641016a3602000c010b02402004280200220720012802002205470d00200220054101107720042802002107200128020021050b200041226a21062002280200220820056a41013a00002001200541016a22053602000240200720056b411f4b0d00200220054120107720012802002105200228020021080b200820056a22072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a2900003700002001200541206a3602000b200041c4006a2100200341bc7f6a22030d000b0b0bc70101057f0240412010382202450d0020022000290000370000200241186a2203200041186a290000370000200241106a2204200041106a290000370000200241086a2205200041086a2900003700000240200141046a280200200141086a220628020022006b411f4b0d002001200041201077200628020021000b2006200041206a360200200128020020006a22002002290000370000200041086a2005290000370000200041106a2004290000370000200041186a2003290000370000200210390f0b1032000bbe0401067f02402001450d002001412c6c2103200241046a2104200241086a2105034020042802002106200528020021010240024020002802004102470d00024020062001470d002002200141011077200528020021010b200228020020016a41003a00002005200141016a3602000c010b024020062001470d002002200141011077200528020021010b2002280200220620016a41013a00002005200141016a220136020020042802002107024020002802004101460d00024020072001470d0020022001410110772004280200210720052802002101200228020021060b200620016a41003a00002005200141016a2201360200200041046a28020021080240200720016b41034b0d00200220014104107720052802002101200228020021060b200620016a20083600002005200141046a220136020002402004280200220720016b411f4b0d00200220014120107720042802002107200528020021010b2002280200220820016a2206200041086a290000370000200641186a200041206a290000370000200641106a200041186a290000370000200641086a200041106a2900003700002005200141206a2201360200200041286a28020021060240200720016b41034b0d00200220014104107720052802002101200228020021080b200820016a20063600002005200141046a3602000c010b024020072001470d00200220014101107720052802002101200228020021060b200620016a41013a00002005200141016a3602000b2000412c6a2100200341546a22030d000b0b0bff0101077f02402001450d00200020014104746a2103200241086a2104200241046a210503402000280200210602402005280200200428020022016b41034b0d002002200141041077200428020021010b200041106a2107200228020020016a20063600002004200141046a360200200028020421012002200028020c220010ac0202402000450d00200041027421082004280200210003402001280200210902400240200528020020006b41034d0d00200021060c010b2002200041041077200428020021060b200141046a21012004200641046a2200360200200228020020066a20093600002008417c6a22080d000b0b2007210020072003470d000b0b0bf60301057f230041306b2203240002400240200241046a2204417f4c0d000240024002400240024002402004450d00200410382205450d07200341003602102003200436020c20032005360208200241c000490d02200241808001490d032002418080808004490d04410021040c010b2003410036021020034201370308200341086a41004101107720032802082105200328021021040b200520046a41033a00002003200441016a22043602100240200328020c20046b41034b0d00200341086a200441041077200328021021040b2003280208220520046a2002360000200441046a21040c030b200520024102743a0000410121040c020b20024102744101722106410021070240200441014b0d00200341086a41004102107720032802082105200328021021070b200520076a20063b0000200741026a21040c010b20052002410274410272360000410421040b200320043602100240200328020c20046b20024f0d00200341086a20042002107720032802082105200328021021040b200520046a2001200210d40b1a2003200420026a220236021020032005200210cc013703182003412c6a200520026a360200200320053602282003200341206a3602242003200341186a3602202000200341206a1083010240200328020c450d00200510390b200341306a24000f0b1034000b1032000bdd0301037f0240024002400240200141c000490d00200141808001490d012001418080808004490d020240200241046a2203280200200241086a22042802002205470d002002200541011077200428020021050b200228020020056a41033a00002004200541016a22053602000240200328020020056b41034b0d002002200541041077200241086a28020021050b200228020020056a2001360000200241086a200541046a22053602000c030b200141027421030240200241046a280200200241086a22042802002205470d002002200541011077200428020021050b200228020020056a20033a00002004200541016a22053602000c020b200141027441017221030240200241046a280200200241086a220428020022056b41014b0d002002200541021077200428020021050b200228020020056a20033b00002004200541026a22053602000c010b200141027441027221030240200241046a280200200241086a220428020022056b41034b0d002002200541041077200428020021050b200228020020056a20033600002004200541046a22053602000b0240200241046a28020020056b20014f0d002002200520011077200241086a28020021050b200228020020056a2000200110d40b1a200241086a200520016a3602000ba90202047f017e230041106b22012400200142003703080240024020002802042202450d0020002002417f6a22033602042001410136020820002000280200220441016a360200200120042d00003a000c2003450d0020002002417e6a220336020420002000280200220441016a36020020014102360208200120042d00003a000d2003450d0020002002417d6a220336020420002000280200220441016a36020020014103360208200120042d00003a000e2003450d0020002002417c6a36020420002000280200220241016a360200200120022d00003a000f20014104360208024020012903082205a741044f0d0041958bcc00411b41b08bcc001035000b2005422088a72102410021000c010b41012100410021020b200141106a24002002ad4208862000ad840b9a0901057f230041206b21020240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204200241013602082001200441016a360200200220053a000c20060d01200041013a00000f0b200041013a00000f0b200128020022042d0000210520012003417e6a22063602042001200441016a360200200220053a000d20024102360208024002400240024002400240024002400240024002400240024002402006450d00200128020022042d0000210520012003417d6a22063602042001200441016a360200200220053a000e200241033602082006450d01200128020022042d0000210520012003417c6a22063602042001200441016a360200200220053a000f200241043602082006450d02200128020022042d0000210520012003417b6a22063602042001200441016a360200200241106a20053a0000200241053602082006450d03200128020022042d0000210520012003417a6a22063602042001200441016a360200200241116a20053a0000200241063602082006450d04200128020022042d000021052001200341796a22063602042001200441016a360200200241126a20053a0000200241073602082006450d05200128020022042d000021052001200341786a22063602042001200441016a360200200241136a20053a0000200241083602082006450d06200128020022042d000021052001200341776a22063602042001200441016a360200200241146a20053a0000200241093602082006450d07200128020022042d000021052001200341766a22063602042001200441016a360200200241156a20053a00002002410a3602082006450d08200128020022042d000021052001200341756a22063602042001200441016a360200200241166a20053a00002002410b3602082006450d09200128020022042d000021052001200341746a22063602042001200441016a360200200241176a20053a00002002410c3602082006450d0a200128020022042d000021052001200341736a22063602042001200441016a360200200241186a20053a00002002410d3602082006450d0b200128020022042d000021052001200341726a22063602042001200441016a360200200241196a20053a00002002410e3602082006450d0c200128020022042d000021052001200341716a22063602042001200441016a3602002002411a6a220420053a00002002410f3602082006450d0d2002411b6a200128020022052d00003a00002001200341706a3602042001200541016a360200200020022f010c3b0001200041036a20022d000e3a0000200041046a200228000f360000200041086a200241086a410b6a2f00003b00002000410a6a200241156a2d00003a00002000410b6a200241166a280100360000200241103602082000410f6a20042f01003b0000200041003a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000f0b200041013a00000bad0201057f230041c0006b210202400240200128020422034110490d002001200341706a220436020420012001280200220541106a360200200220052900003703082002200541086a290000370310200441104f0d01200042013703000f0b200042013703000f0b2001200341606a220436020420012001280200220541106a360200200241086a41186a2206200541086a29000037030020022005290000370318024020044110490d0020002002290308370308200042003703002001200341506a36020420012001280200220341106a360200200041106a200241086a41086a290300370300200041186a200241086a41106a290300370300200041206a2006290300370300200041286a2003290000370300200041306a200341086a2900003703000f0b200042013703000bc00101027f4100210341b8c0cd0021040240024002400240024002400240200241e6e485f3064a0d00200241f0c2c98b06460d03200241e2c289ab06460d01200241e1ea91cb06470d06200141a0016a21040c050b200241e9dabdf306460d01200241e1e69df306460d03200241e7e485f306470d0541202103200121040c050b41202103200141206a21040c040b200141c0006a21040c020b200141e0006a21040c010b20014180016a21040b412021030b20002003360204200020043602000bb80f07047f017e027f017e047f027e017f23004180016b22012400200141286a4200370300200141206a22024200370300200141186a420037030020014200370310200141106a41b69fc500410710cb01200241f4c9c800410a10cb01200141d0006a200141106a10bf020240024002400240200128025022030d00410221040c010b41022104024020012902542205422088a72202450d00200241057441606a41057641016a21064100210742002108200321020240034020022000412010d70b450d01200842017c2108200241206a21022006200741016a2207470d000c020b0b200141286a22024200370300200141206a22094200370300200141106a41086a2200420037030020014200370310200141d0006a41b69fc500410710cb012000200141d0006a41086a220629000037030020012001290050370310200141d0006a41e492c600411210cb012002200629000037030020092001290050370300200141d0006a200141106a10c002024002402001280250220a0d00200142003702444100210b200141002802d8974e220a3602404100210c0c010b2001290254210d2001200a3602402001200d370244200d422088a7210c200da7210b0b410021020240024002400240200c450d0041002102200c2106200c21000340024002402007200a200641017620026a22064102746a28020022044d0d00200641016a21020c010b2006210020042007460d030b200020026b2106200020024b0d000b0b200141286a4200370300200141206a4200370300200141106a41086a2200420037030020014200370310200141d0006a41b69fc500410710cb012000200141d0006a41086a220629000037030020012001290050370310200141d0006a41f4c9c800410a10cb01200941086a200629000037000020092001290050370000200141fc006a41003a000020014100360278200141086a200141106a4120200141f8006a4105410010e601024002402001280208450d002001200128020c2200410520004105491b3602542001200141f8006a3602502001200141d0006a10c10120012802000d00200128020421000c010b410021000b2000418094ebdc0370ad4280fd87d1007e220d428094ebdc0382210e200d428094ebdc0380210d2000418094ebdc036e2100200c2002490d0120004180fd87d1006c200da7200e4280cab5ee01566a6a21040240200c200b470d00200141c0006a200b410110ab012001280240210a0b200a20024102746a220041046a2000200c20026b41027410d50b1a20002007360200410121062001200c41016a220c360248200c20044b21042001280244210b2001280240210a0c020b41002106410021040c010b2002200c1041000b02400240200a0d00200141286a4200370300200141206a4200370300200141106a41086a2202420037030020014200370310200141d0006a41b69fc500410710cb012002200141d0006a41086a220029000037030020012001290050370310200141d0006a41e492c600411210cb01200941086a200029000037000020092001290050370000200141106a412010e0010c010b200141286a4200370300200141206a4200370300200141106a41086a2202420037030020014200370310200141d0006a41b69fc500410710cb012002200141d0006a41086a220029000037030020012001290050370310200141d0006a41e492c600411210cb01200941086a200029000037000020092001290050370000200c410274220041046a2202417f4c0d030240024020020d00410121090c010b200210382209450d050b4100210f2001410036025820012002360254200120093602500240024002400240200c41c000490d00200c41808001490d01200c418080808004490d024100210f024020020d00200141d0006a410041011077200128025021092001280258210f0b2009200f6a41033a00002001200f41016a22023602580240200128025420026b41034b0d00200141d0006a200241041077200128025821020b200128025020026a200c360000200241046a21020c030b200c410274210c024020020d00200141d0006a410041011077200128025021092001280258210f0b2009200f6a200c3a0000200f41016a21020c020b200c410274410172210f4100210c024020020d00200141d0006a410041021077200128025021092001280258210c0b2009200c6a200f3b0000200c41026a21020c010b2000410272210f4100210c024020020d00200141d0006a410041041077200128025021092001280258210c0b2009200c6a200f360000200c41046a21020b2001200236025802402001280254220920026b20004f0d00200141d0006a20022000107720012802542109200128025821020b2001280250220c20026a200a200010d40b1a200141106a4120200c200220006a10e90102402009450d00200c10390b200b41ffffffff0371450d00200a10390b2006450d00200141106a41086a200837030020014102360210200141106a10c1022001410136021020012007360214200141d0006a200141106a10c202200141cb006a200141d0006a41086a28020036000020012001290350370043200141dc006a200141c7006a290000370000200141c28289aa04360051200141023a005020012001290040370055200141d0006a10c3020b200542ffffff3f83500d00200310390b20014180016a240020040f0b1034000b1032000bd90201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a10c1010240024002402002280200450d00200241003602480c010b200241c8006a200241206a2002280204109d022002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2003450d00200110390b200241e0006a24000bb90201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a108f05024002402002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2003450d00200110390b200241e0006a24000b980702047f017e230041c0006b220124002001410036022020014201370318024002400240024002400240200028020022020e050001020304050b200141186a4100410110772001280218200128022022036a41013a00002001200341016a36022020002802042103200141186a2000410c6a280200220410ac0220032004200141186a10a802200041106a28020021040240200128021c200128022022036b41034b0d00200141186a200341041077200128022021030b200128021820036a20043600002001200341046a3602200c040b200141186a4100410110772001280218200128022022036a41023a00002001200341016a2203360220200028020421040240200128021c20036b41034b0d00200141186a200341041077200128022021030b200128021820036a20043600002001200341046a36022020002802082103200141186a200041106a280200220410ac0220032004200141186a10a802200041146a28020021040240200128021c200128022022036b41034b0d00200141186a200341041077200128022021030b200128021820036a20043600002001200341046a3602200c030b200141186a4100410110772001280218200128022022036a41033a00002001200341016a2203360220200041086a29030021050240200128021c20036b41074b0d00200141186a200341081077200128022021030b200128021820036a20053700002001200341086a3602200c020b200141186a4100410110772001280218200128022022036a41043a00002001200341016a2203360220200028020421040240200128021c20036b41034b0d00200141186a200341041077200128022021030b200128021820036a20043600002001200341046a3602200c010b200141186a4100410110772001280218200128022022036a41053a00002001200341016a2203360220200028020421040240200128021c20036b41034b0d00200141186a200341041077200128022021030b200128021820036a20043600002001200341046a3602200b200141146a200141186a41086a2802003600002001200129031837000c200141186a410c6a200141106a290000370000200141c6a4b9da04360019200141023a00182001200129000937001d200141186a10c30202400240024020020e020001020b200041086a2802002202450d01200241286c450d01200028020410390c010b2000410c6a2802002202450d00200241286c450d00200041086a28020010390b200141c0006a24000b9a0602047f017e20004201370200200041086a22024100360200024002400240024020012802000e03000102030b20004100410110772000280200200228020022036a41013a00002002200341016a3602002001280204210320002001410c6a280200220410ac0220032004200010a802200141106a21010240200041046a280200200228020022036b411f4b0d002000200341201077200041086a28020021030b200028020020036a22022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200041086a200341206a3602000f0b20004100410110772000280200200228020022036a41023a00002002200341016a2203360200200128020421010240200041046a28020020036b41034b0d002000200341041077200041086a28020021030b200028020020036a2001360000200041086a200341046a3602000f0b20004100410110772000280200200228020022036a41033a00002002200341016a22033602000240200041046a22052802002003470d002000200341011077200041086a28020021030b200028020020036a41013a0000200041086a2204200341016a2202360200200129030821060240200528020020026b41074b0d002000200241081077200428020021020b200028020020026a20063700002004200241086a2202360200200129031021060240200041046a28020020026b41074b0d002000200241081077200041086a28020021020b200028020020026a2006370000200041086a200241086a220236020002400240024020012d00180e03000102030b0240200041046a2802002002470d002000200241011077200041086a28020021020b200028020020026a41003a0000200041086a200241016a3602000f0b0240200041046a2802002002470d002000200241011077200041086a28020021020b200028020020026a41013a0000200041086a200241016a3602000f0b0240200041046a2802002002470d002000200241011077200041086a28020021020b200028020020026a41023a0000200041086a200241016a3602000b0be90201027f230041f0006b22012400200141086a41206a200041206a280200360200200141086a41186a200041186a290200370300200141086a41106a200041106a290200370300200141086a41086a2202200041086a29020037030020012000290200370308200141306a41186a4200370300200141306a41106a22004200370300200141306a41086a420037030020014200370330200141306a41c7e5c000410610cb01200041c481c400410610cb01200141d0006a200141086a10c007200141e0006a41086a200141d0006a41086a28020036020020012001290350370360200141306a4120200141e0006a10de010240024002400240024020012d00080e050400010204030b200141146a280200450d03200141106a28020010390c030b200141146a280200450d02200141106a28020010390c020b200141146a280200450d01200141106a28020010390c010b2002280200450d00200128020c10390b200141f0006a24000b88ee0108087f017e017f017e077f017e077f067e230041b0026b220424002004200336020c20044200370214200441002802d8974e36021020012802042105200128020021060240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802082203450d0020034103742107200441206a41026a2108200441e0006a41106a21092006210a03404102210b02402002280208200a290200220ca722034d220d0d0020082002280200200341386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a2900003703002009200341276a2d00003a0000200420032f00083b01202004200341176a2900003703602003410f6a290000210e2003410b6a280000210b0b200441c8016a41026a220f20082d00003a000020044188026a41086a2210200441e0006a41086a221129030037030020044188026a41106a221220092d00003a0000200420042f01203b01c8012004200429036037038802200d0d02412210382203450d064102210d0240200428020c22132802082214200c422088a741ffff037122154d0d00200441d8016a41026a201328020020154105746a220d41026a2d00003a00002011200d41176a2900003703002009200d411f6a2d00003a00002004200d2f00003b01d8012004200d29000f370360200d2900072116200d280003210d0b200441b0016a41026a2213200441d8016a41026a2d00003a0000200441206a41086a22172011290300370300200441206a41106a221120092d00003a0000200420042f01d8013b01b00120042004290360370320201420154d0d17200320042f01b0013b0000200320163700072003200d3600032003200429032037000f200341ffff033b0120200341026a20132d00003a0000200341176a20172903003700002003411f6a20112d00003a0000200420042f01c8013b01a0012004200f2d00003a00a201200441f0016a41106a221520122d00003a0000200441f0016a41086a220f201029030037030020042004290388023703f0010240200428021822112004280214470d00200441106a201110c502200428021821110b200a41086a210a20042802102011412c6c6a220d428180808010370204200d2003360200200d20042f01a0013b010c200d410e6a20042d00a2013a0000200d41136a200e370000200d410f6a200b360000200d411b6a20042903f001370000200d41236a200f290300370000200d412b6a20152d00003a00002004201141016a360218200741786a22070d000b0b0240200541ffffffff0171450d00200610390b200141106a2802002118200128020c2119200141146a2802002203450d032003410c6c2114200441206a41026a210f200441e0006a41106a210a20192109024003400240200941066a2f0100221041ffff03470d00200042013702000c050b200941086a2f01002107200941046a2f0100210b4102211202402002280208200928020022034d22110d00200f2002280200200341386c6a2203410a6a2d00003a0000200441e0006a41086a2003411f6a290000370300200a200341276a2d00003a0000200420032f00083b01202004200341176a2900003703602003410f6a290000210c2003410b6a28000021120b200441c4016a41026a2217200f2d00003a0000200441f0016a41086a2208200441e0006a41086a220d290300370300200441f0016a41106a2206200a2d00003a0000200420042f01203b01c401200420042903603703f00120110d0141c40010382203450d06200428020c2211280200211341022115024020112802082211200b4d0d00200f2013200b4105746a221541026a2d00003a0000200d201541176a290000370300200a2015411f6a2d00003a0000200420152f00003b01202004201529000f3703602015290007210e201528000321150b200441a0016a41026a2205200f2d00003a000020044188026a41086a221a200d29030037030020044188026a41106a221b200a2d00003a0000200420042f01203b01a00120042004290360370388022011200b4d0d034102210b0240201120074d0d00200441b0016a41026a201320074105746a220b41026a2d00003a0000200d200b41176a290000370300200a200b411f6a2d00003a00002004200b2f00003b01b0012004200b29000f370360200b2900072116200b280003210b0b200441c8016a41026a2213200441b0016a41026a2d00003a0000200441206a41086a221c200d290300370300200441206a41106a220d200a2d00003a0000200420042f01b0013b01c801200420042903603703200240201120074d0d00200320042f01c8013b0022200320163700292003200b36002520032004290320370031200320042f01a0013b00002003200e37000720032015360003200341246a20132d00003a0000200341396a201c290300370000200341c1006a200d2d00003a0000200341026a20052d00003a000020032010417f733b0142200320103b01202003411f6a201b2d00003a0000200341176a201a290300370000200320042903880237000f200441d8016a41086a220b2008290300370300200441d8016a41106a221520062d00003a0000200420042f01c4013b011c200420172d00003a001e200420042903f0013703d8010240200428021822112004280214470d00200441106a201110c502200428021821110b2009410c6a210920042802102011412c6c6a220d428280808020370204200d2003360200200d20042f011c3b010c200d410e6a20042d001e3a0000200d41136a200c370000200d410f6a2012360000200d411b6a20042903d801370000200d41236a200b290300370000200d412b6a20152d00003a00002004201141016a360218201441746a22140d010c060b0b2000200b36020420004101360200200041086a2016370200200310390c030b2000201236020420004101360200200041086a200c3702000c020b2000200b36020420004101360200200041086a200e3702000c150b2000201536020420004101360200200041086a200e370200200310390b410021024101211402402018450d002018410c6c450d00201910390b410121064101210541012113410121174101210841012110410121124101210b41012115410121074101210f4101210a410121110c140b02402018450d002018410c6c450d00201910390b200128021821182001411c6a280200211d0240200141206a2802002203450d00201820034104746a211c200441fc016a2106200441e0006a410272211141002802d895472119200441c8016a41086a211b201821100240024002400240034020102f010c211420102802002112200420102902043703c801200441003b01c401200441053602d8012004201b36028c022004200441d8016a3602980220042004410c6a360294022004200441c4016a360290022004200441c8016a36028802200441e0006a20044188026a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a220b2f01003b0100200a41186a201141186a2215290100370100200a41106a201141106a2207290100370100200a41086a201141086a220f29010037010020044281808080103702f4012004200a3602f001200441206a41106a20044188026a41106a280200360200200441206a41086a20044188026a41086a2903003703002004200429038802370320200441e0006a200441206a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441f0016a2003410110c70220042802f001210a0b200a20096a22032011290100370100200341206a200b2f01003b0100200341186a2015290100370100200341106a2007290100370100200341086a200f2901003701002004200d3602f801200441e0006a200441206a10c60220042f01604101470d01200941226a2109200d41016a210d20042802f40121030c000b0b20042902f401210c0c010b4200210c2019210a0b024020042802d80122034105460d0020042902dc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602b00120042f01c401210b2004200c3702b401200ca72108200b41ffff03460d01410221130240200428020c220328020820144d22150d00200441f0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01f0012004200329000f3703602003290007210e200328000321130b200441d8016a41026a2207200441f0016a41026a2d00003a0000200441206a41086a220d200441e0006a41086a2214290300370300200441206a41106a2209200441e0006a41106a22172d00003a0000200420042f01f0013b01d8012004200429036037032020150d02200b417f732105200441a0016a41026a220f20072d00003a000020044188026a41086a220b200d29030037030020044188026a41106a221520092d00003a0000200420042f01d8013b01a00120042004290320370388020240200c422088a722032008470d00200441b0016a2008410110c70220042802b001210a20042802b80121030b200a200341226c6a2203200e3700074102210a200441a0016a41026a2d0000210820042f01a001211a200320133600032003201a3b0100200341026a20083a0000200320042903880237000f20152d00002113200b290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802b80141016a3602b80102402002280208221320124d0d0020072002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01d8012004200341176a2900003703602003410f6a29000021162003410b6a280000210a0b200f20072d00003a0000200d2014290300370300200920172d00003a0000200420042f01d8013b01a001200420042903603703200240201320124d0d00201041106a2110200620042f01a0013b0000200641026a200f2d00003a0000200b200d290300370300201520092d00003a0000200441f0016a41086a200441b0016a41086a2802003602002004200429032037038802200420042903b0013703f00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903f001370200200341136a20163700002003410f6a200a3600002003411b6a200429038802370000200341076a20042900f701370000200341236a200b2903003700002003412b6a20152d00003a00002004200d41016a3602182010201c470d010c060b0b2000200a36020420004101360200200041086a201637020020042802b40121080c020b200042013702000c010b2000201336020420004101360200200041086a200e3702000b2008450d00200841226c450d0020042802b00110390b41002111410121140240201d41ffffffff0071450d00201810390b410121064101210541012113410121174101210841012110410121124101210b41012115410121074101210f4101210a410021020c140b0240201d41ffffffff0071450d00201810390b20012802242119200141286a280200211d02402001412c6a2802002203450d002019200341146c6a211c200441f0016a410c6a2106200441e0006a410272211141002802d895472118200441c8016a410c6a211b2019211002400240024002400340200441a0016a41086a2010410c6a280200220336020020042010290204220c3703a00120102f0110211420102802002112200441c8016a41086a20033602002004200c3703c801200441003b011c200441053602d8012004201b36028c022004200441d8016a3602980220042004410c6a3602940220042004411c6a360290022004200441c8016a36028802200441e0006a20044188026a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a220b2f01003b0100200a41186a201141186a2215290100370100200a41106a201141106a2207290100370100200a41086a201141086a220f29010037010020044281808080103702f4012004200a3602f001200441206a41106a20044188026a41106a280200360200200441206a41086a20044188026a41086a2903003703002004200429038802370320200441e0006a200441206a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441f0016a2003410110c70220042802f001210a0b200a20096a22032011290100370100200341206a200b2f01003b0100200341186a2015290100370100200341106a2007290100370100200341086a200f2901003701002004200d3602f801200441e0006a200441206a10c60220042f01604101470d01200941226a2109200d41016a210d20042802f40121030c000b0b20042902f401210c0c010b4200210c2018210a0b024020042802d80122034105460d0020042902dc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602b00120042f011c210b2004200c3702b401200ca72108200b41ffff03460d01410221130240200428020c220328020820144d22150d00200441f0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01f0012004200329000f3703602003290007210e200328000321130b200441d8016a41026a2207200441f0016a41026a2d00003a0000200441206a41086a220d200441e0006a41086a2214290300370300200441206a41106a2209200441e0006a41106a22172d00003a0000200420042f01f0013b01d8012004200429036037032020150d02200b417f732105200441c4016a41026a220f20072d00003a000020044188026a41086a220b200d29030037030020044188026a41106a221520092d00003a0000200420042f01d8013b01c40120042004290320370388020240200c422088a722032008470d00200441b0016a2008410110c70220042802b001210a20042802b80121030b200a200341226c6a2203200e3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903880237000f20152d00002113200b290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802b80141016a3602b80102402002280208221320124d0d0020072002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01d8012004200341176a2900003703602003410f6a29000021162003410b6a280000210a0b200f20072d00003a0000200d2014290300370300200920172d00003a0000200420042f01d8013b01c401200420042903603703200240201320124d0d00201041146a2110200620042f01c4013b0000200641026a200f2d00003a0000200b200d290300370300201520092d00003a0000200441f0016a41086a200441b0016a41086a2802003602002004200429032037038802200420042903b0013703f00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903f001370200200341136a20163700002003410f6a200a3600002003411b6a200429038802370000200341076a20042900f701370000200341236a200b2903003700002003412b6a20152d00003a00002004200d41016a3602182010201c470d010c060b0b2000200a36020420004101360200200041086a201637020020042802b40121080c020b200042013702000c010b2000201336020420004101360200200041086a200e3702000b2008450d00200841226c450d0020042802b00110390b4100210a410121140240201d450d00201d41146c450d00201910390b410121064101210541012113410121174101210841012110410121124101210b41012115410121074101210f0c100b0240201d450d00201d41146c450d00201910390b2001280230211d200141346a28020021190240200141386a2802002203450d00201d200341186c6a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472118200441f0016a41106a211b201d211002400240024002400340200441d8016a41086a2010410c6a290200220c37030020042010290204220e3703d80120102f0114211420102802002112200441f0016a41086a200c3703002004200e3703f001200441003b011c200441053602c8012004201b36028c022004200441c8016a3602980220042004410c6a3602940220042004411c6a360290022004200441f0016a36028802200441e0006a20044188026a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a220b2f01003b0100200a41186a201141186a2215290100370100200a41106a201141106a2207290100370100200a41086a201141086a220f29010037010020044281808080103702b4012004200a3602b001200441206a41106a20044188026a41106a280200360200200441206a41086a20044188026a41086a2903003703002004200429038802370320200441e0006a200441206a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a200b2f01003b0100200341186a2015290100370100200341106a2007290100370100200341086a200f2901003701002004200d3602b801200441e0006a200441206a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c210b2004200c3702a401200ca72108200b41ffff03460d01410221130240200428020c220328020820144d22150d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f37036020032900072116200328000321130b200441c8016a41026a2207200441b0016a41026a2d00003a0000200441206a41086a220d200441e0006a41086a2214290300370300200441206a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c8012004200429036037032020150d02200b417f732105200441c4016a41026a220f20072d00003a000020044188026a41086a220b200d29030037030020044188026a41106a221520092d00003a0000200420042f01c8013b01c40120042004290320370388020240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320163700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903880237000f20152d00002113200b290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d0020072002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a290000211e2003410b6a280000210a0b200f20072d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703200240201320124d0d00201041186a2110200620042f01c4013b0000200641026a200f2d00003a0000200b200d290300370300201520092d00003a0000200441b0016a41086a200441a0016a41086a2802003602002004200429032037038802200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a201e3700002003410f6a200a3600002003411b6a200429038802370000200341076a20042900b701370000200341236a200b2903003700002003412b6a20152d00003a00002004200d41016a3602182010201c470d010c060b0b2000200a36020420004101360200200041086a201e37020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20163702000b2008450d00200841226c450d0020042802a00110390b4100210f4101211402402019450d00201941186c450d00201d10390b410121064101210541012113410121174101210841012110410121124101210b41012115410121070c0f0b02402019450d00201941186c450d00201d10390b200128023c2119200141c0006a280200211d0240200141c4006a2802002203450d0020192003411c6c6a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472118200441f0016a41146a211b2019211002400240024002400340200441d8016a41086a2010410c6a290200220c370300200441d8016a41106a201041146a280200220336020020042010290204220e3703d80120102f0118211420102802002112200441f0016a41106a2003360200200441f0016a41086a200c3703002004200e3703f001200441003b011c200441053602c8012004201b36028c022004200441c8016a3602980220042004410c6a3602940220042004411c6a360290022004200441f0016a36028802200441e0006a20044188026a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a220b2f01003b0100200a41186a201141186a2215290100370100200a41106a201141106a2207290100370100200a41086a201141086a220f29010037010020044281808080103702b4012004200a3602b001200441206a41106a20044188026a41106a280200360200200441206a41086a20044188026a41086a2903003703002004200429038802370320200441e0006a200441206a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a200b2f01003b0100200341186a2015290100370100200341106a2007290100370100200341086a200f2901003701002004200d3602b801200441e0006a200441206a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c210b2004200c3702a401200ca72108200b41ffff03460d01410221130240200428020c220328020820144d22150d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f37036020032900072116200328000321130b200441c8016a41026a2207200441b0016a41026a2d00003a0000200441206a41086a220d200441e0006a41086a2214290300370300200441206a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c8012004200429036037032020150d02200b417f732105200441c4016a41026a220f20072d00003a000020044188026a41086a220b200d29030037030020044188026a41106a221520092d00003a0000200420042f01c8013b01c40120042004290320370388020240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320163700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903880237000f20152d00002113200b290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d0020072002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a290000211e2003410b6a280000210a0b200f20072d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703200240201320124d0d002010411c6a2110200620042f01c4013b0000200641026a200f2d00003a0000200b200d290300370300201520092d00003a0000200441b0016a41086a200441a0016a41086a2802003602002004200429032037038802200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a201e3700002003410f6a200a3600002003411b6a200429038802370000200341076a20042900b701370000200341236a200b2903003700002003412b6a20152d00003a00002004200d41016a3602182010201c470d010c060b0b2000200a36020420004101360200200041086a201e37020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20163702000b2008450d00200841226c450d0020042802a00110390b41002107410121140240201d450d00201d411c6c450d00201910390b410121064101210541012113410121174101210841012110410121124101210b410121150c0e0b0240201d450d00201d411c6c450d00201910390b20012802482118200141cc006a280200211d0240200141d0006a2802002203450d00201820034105746a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472119200441206a41186a211b201821100240024002400240034020044188026a41086a2010410c6a290200220c37030020044188026a41106a201041146a290200220e3703002004201029020422163703880220102f011c211420102802002112200441206a41106a200e370300200441206a41086a200c37030020042016370320200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441206a3602d801200441e0006a200441d8016a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a220b2f01003b0100200a41186a201141186a2215290100370100200a41106a201141106a2207290100370100200a41086a201141086a220f29010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f001200441e0006a200441f0016a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a200b2f01003b0100200341186a2015290100370100200341106a2007290100370100200341086a200f2901003701002004200d3602b801200441e0006a200441f0016a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2019210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c210b2004200c3702a401200ca72108200b41ffff03460d01410221130240200428020c220328020820144d22150d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703602003290007211e200328000321130b200441c8016a41026a2207200441b0016a41026a2d00003a0000200441f0016a41086a220d200441e0006a41086a2214290300370300200441f0016a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c801200420042903603703f00120150d02200b417f732105200441c4016a41026a220f20072d00003a0000200441d8016a41086a220b200d290300370300200441d8016a41106a221520092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a2203201e3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20152d00002113200b290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d0020072002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a290000211f2003410b6a280000210a0b200f20072d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703f0010240201320124d0d00201041206a2110200620042f01c4013b0000200641026a200f2d00003a0000200b200d290300370300201520092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a201f3700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a200b2903003700002003412b6a20152d00003a00002004200d41016a3602182010201c470d010c060b0b2000200a36020420004101360200200041086a201f37020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a201e3702000b2008450d00200841226c450d0020042802a00110390b41002115410121140240201d41ffffff3f71450d00201810390b410121064101210541012113410121174101210841012110410121124101210b0c0d0b0240201d41ffffff3f71450d00201810390b20012802542119200141d8006a280200211d0240200141dc006a2802002203450d002019200341246c6a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472118200441206a411c6a211b2019210b0240024002400240034020044188026a41086a200b410c6a290200220c37030020044188026a41106a200b41146a290200220e37030020044188026a41186a200b411c6a28020022033602002004200b290204221637038802200b2f01202114200b2802002112200441206a41186a2003360200200441206a41106a200e370300200441206a41086a200c37030020042016370320200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441206a3602d801200441e0006a200441d8016a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a22152f01003b0100200a41186a201141186a2207290100370100200a41106a201141106a220f290100370100200a41086a201141086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f001200441e0006a200441f0016a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b801200441e0006a200441f0016a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703602003290007211e200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d200441e0006a41086a2214290300370300200441f0016a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c801200420042903603703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a2203201e3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a290000211f2003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703f0010240201320124d0d00200b41246a210b200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a201f3700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a360218200b201c470d010c060b0b2000200a36020420004101360200200041086a201f37020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a201e3702000b2008450d00200841226c450d0020042802a00110390b4100210b410121140240201d450d00201d41246c450d00201910390b410121064101210541012113410121174101210841012110410121120c0c0b0240201d450d00201d41246c450d00201910390b20012802602119200141e4006a280200211d0240200141e8006a2802002203450d002019200341286c6a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472118200441206a41206a211b2019210b0240024002400240034020044188026a41086a200b410c6a290200220c37030020044188026a41106a200b41146a290200220e37030020044188026a41186a200b411c6a29020022163703002004200b290204221e37038802200b2f01242114200b2802002112200441206a41186a2016370300200441206a41106a200e370300200441206a41086a200c3703002004201e370320200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441206a3602d801200441e0006a200441d8016a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a22152f01003b0100200a41186a201141186a2207290100370100200a41106a201141106a220f290100370100200a41086a201141086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f001200441e0006a200441f0016a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b801200441e0006a200441f0016a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703602003290007211f200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d200441e0006a41086a2214290300370300200441f0016a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c801200420042903603703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a2203201f3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a29000021202003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703f0010240201320124d0d00200b41286a210b200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20203700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a360218200b201c470d010c060b0b2000200a36020420004101360200200041086a202037020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a201f3702000b2008450d00200841226c450d0020042802a00110390b41002112410121140240201d450d00201d41286c450d00201910390b4101210641012105410121134101211741012108410121100c0b0b0240201d450d00201d41286c450d00201910390b200128026c2119200141f0006a280200211d0240200141f4006a2802002203450d0020192003412c6c6a211c200441b0016a410c6a2106200441e0006a410272211141002802d895472118200441206a41246a211b2019210b0240024002400240034020044188026a41086a200b410c6a290200220c37030020044188026a41106a200b41146a290200220e37030020044188026a41186a200b411c6a290200221637030020044188026a41206a200b41246a28020022033602002004200b290204221e37038802200b2f01282114200b2802002112200441206a41206a2003360200200441206a41186a2016370300200441206a41106a200e370300200441206a41086a200c3703002004201e370320200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441206a3602d801200441e0006a200441d8016a10c6020240024020042f01604101470d0041221038220a450d08200a2011290100370100200a41206a201141206a22152f01003b0100200a41186a201141186a2207290100370100200a41106a201141106a220f290100370100200a41086a201141086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f001200441e0006a200441f0016a10c602024020042f01604101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b801200441e0006a200441f0016a10c60220042f01604101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a0000200441e0006a41086a200341176a290000370300200441e0006a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703602003290007211f200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d200441e0006a41086a2214290300370300200441f0016a41106a2209200441e0006a41106a22172d00003a0000200420042f01b0013b01c801200420042903603703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a2203201f3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a2900003703602003410f6a29000021202003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c401200420042903603703f0010240201320124d0d00200b412c6a210b200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20203700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a360218200b201c470d010c060b0b2000200a36020420004101360200200041086a202037020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a201f3702000b2008450d00200841226c450d0020042802a00110390b41002110410121140240201d450d00201d412c6c450d00201910390b41012106410121054101211341012117410121080c0a0b0240201d450d00201d412c6c450d00201910390b2001280278211d200141fc006a2802002119024020014180016a2802002203450d00201d200341306c6a211c200441b0016a410c6a210620044188026a410272211141002802d89547211820044188016a211b201d210b02400240024002400340200441206a41086a200b410c6a290200220c370300200441206a41106a200b41146a290200220e370300200441206a41186a200b411c6a2902002216370300200441206a41206a200b41246a290200221e3703002004200b290204221f370320200b2f012c2114200b2802002112200441e0006a41206a201e370300200441e0006a41186a2016370300200441e0006a41106a200e370300200441e0006a41086a200c3703002004201f370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d08200a2011290100370100200a41206a201141206a22152f01003b0100200a41186a201141186a2207290100370100200a41106a201141106a220f290100370100200a41086a201141086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a22032011290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703880220032900072120200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320203700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021212003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d00200b41306a210b200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20213700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a360218200b201c470d010c060b0b2000200a36020420004101360200200041086a202137020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20203702000b2008450d00200841226c450d0020042802a00110390b410021084101211402402019450d00201941306c450d00201d10390b410121064101210541012113410121170c090b02402019450d00201941306c450d00201d10390b200128028401211920014188016a280200211d02402001418c016a2802002203450d002019200341346c6a211c200441b0016a410c6a210620044188026a410272210b41002802d895472118200441e0006a412c6a211b2019211102400240024002400340200441206a41086a2011410c6a290200220c370300200441206a41106a201141146a290200220e370300200441206a41186a2011411c6a2902002216370300200441206a41206a201141246a290200221e370300200441206a41286a2011412c6a280200220336020020042011290204221f37032020112f0130211420112802002112200441e0006a41286a2003360200200441e0006a41206a201e370300200441e0006a41186a2016370300200441e0006a41106a200e370300200441e0006a41086a200c3703002004201f370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d08200a200b290100370100200a41206a200b41206a22152f01003b0100200a41186a200b41186a2207290100370100200a41106a200b41106a220f290100370100200a41086a200b41086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a2203200b290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703880220032900072120200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320203700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021212003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d00201141346a2111200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20213700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a3602182011201c470d010c060b0b2000200a36020420004101360200200041086a202137020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20203702000b2008450d00200841226c450d0020042802a00110390b41002117410121140240201d450d00201d41346c450d00201910390b4101210641012105410121130c080b0240201d450d00201d41346c450d00201910390b200128029001211920014194016a280200211d024020014198016a2802002203450d002019200341386c6a211c200441b0016a410c6a210620044188026a410272210b41002802d89547211820044190016a211b2019211102400240024002400340200441206a41086a2011410c6a290200220c370300200441206a41106a201141146a290200220e370300200441206a41186a2011411c6a2902002216370300200441206a41206a201141246a290200221e370300200441206a41286a2011412c6a290200221f37030020042011290204222037032020112f0134211420112802002112200441e0006a41286a201f370300200441e0006a41206a201e370300200441e0006a41186a2016370300200441e0006a41106a200e370300200441e0006a41086a200c37030020042020370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d08200a200b290100370100200a41206a200b41206a22152f01003b0100200a41186a200b41186a2207290100370100200a41106a200b41106a220f290100370100200a41086a200b41086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a2203200b290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703880220032900072121200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320213700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021222003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d00201141386a2111200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20223700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a3602182011201c470d010c060b0b2000200a36020420004101360200200041086a202237020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20213702000b2008450d00200841226c450d0020042802a00110390b41002113410121140240201d450d00201d41386c450d00201910390b41012106410121050c070b0240201d450d00201d41386c450d00201910390b200128029c012119200141a0016a280200211d0240200141a4016a2802002203450d0020192003413c6c6a211c200441b0016a410c6a210620044188026a410272210b41002802d895472118200441e0006a41346a211b2019211102400240024002400340200441206a41086a2011410c6a290200220c370300200441206a41106a201141146a290200220e370300200441206a41186a2011411c6a2902002216370300200441206a41206a201141246a290200221e370300200441206a41286a2011412c6a290200221f370300200441206a41306a201141346a280200220336020020042011290204222037032020112f0138211420112802002112200441e0006a41306a2003360200200441e0006a41286a201f370300200441e0006a41206a201e370300200441e0006a41186a2016370300200441e0006a41106a200e370300200441e0006a41086a200c37030020042020370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d08200a200b290100370100200a41206a200b41206a22152f01003b0100200a41186a200b41186a2207290100370100200a41106a200b41106a220f290100370100200a41086a200b41086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a2203200b290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703880220032900072121200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320213700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021222003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d002011413c6a2111200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20223700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a3602182011201c470d010c060b0b2000200a36020420004101360200200041086a202237020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20213702000b2008450d00200841226c450d0020042802a00110390b41002105410121140240201d450d00201d413c6c450d00201910390b410121060c060b0240201d450d00201d413c6c450d00201910390b20012802a8012118200141ac016a280200211d0240200141b0016a2802002203450d00201820034106746a211c200441b0016a410c6a210620044188026a410272210b41002802d895472119200441e0006a41386a211b2018211102400240024002400340200441206a41086a2011410c6a290200220c370300200441206a41106a201141146a290200220e370300200441206a41186a2011411c6a2902002216370300200441206a41206a201141246a290200221e370300200441206a41286a2011412c6a290200221f370300200441206a41306a201141346a290200222037030020042011290204222137032020112f013c211420112802002112200441e0006a41306a2020370300200441e0006a41286a201f370300200441e0006a41206a201e370300200441e0006a41186a2016370300200441e0006a41106a200e370300200441e0006a41086a200c37030020042021370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d08200a200b290100370100200a41206a200b41206a22152f01003b0100200a41186a200b41186a2207290100370100200a41106a200b41106a220f290100370100200a41086a200b41086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a2203200b290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2019210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c050b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d01410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f3703880220032900072122200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a220320223700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021232003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d00201141c0006a2111200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20233700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a3602182011201c470d010c060b0b2000200a36020420004101360200200041086a202337020020042802a40121080c020b200042013702000c010b2000201336020420004101360200200041086a20223702000b2008450d00200841226c450d0020042802a00110390b41002106410121140240201d41ffffff1f710d00410021050c070b20181039410021050c060b0240201d41ffffff1f71450d00201810390b20012802b4012119200141b8016a280200211d200141bc016a2802002203450d102019200341c4006c6a211c200441b0016a410c6a210620044188026a410272210b41002802d895472118200441e0006a413c6a211b201921110340200441206a41086a22032011410c6a290200370300200441206a41106a220d201141146a290200370300200441206a41186a22092011411c6a290200370300200441206a41206a220a201141246a290200370300200441206a41286a22152011412c6a290200370300200441206a41306a2207201141346a290200370300200441206a41386a220f2011413c6a2802003602002004201129020437032020112f0140211420112802002112200441e0006a41386a200f280200360200200441e0006a41306a2007290300370300200441e0006a41286a2015290300370300200441e0006a41206a200a290300370300200441e0006a41186a2009290300370300200441e0006a41106a200d290300370300200441e0006a41086a200329030037030020042004290320370360200441003b011c200441053602c8012004201b3602dc012004200441c8016a3602e80120042004410c6a3602e40120042004411c6a3602e0012004200441e0006a3602d80120044188026a200441d8016a10c6020240024020042f0188024101470d0041221038220a450d03200a200b290100370100200a41206a200b41206a22152f01003b0100200a41186a200b41186a2207290100370100200a41106a200b41106a220f290100370100200a41086a200b41086a221029010037010020044281808080103702b4012004200a3602b001200441f0016a41106a200441d8016a41106a280200360200200441f0016a41086a200441d8016a41086a290300370300200420042903d8013703f00120044188026a200441f0016a10c602024020042f0188024101470d00410121034102210d4122210903400240200d417f6a2003470d00200441b0016a2003410110c70220042802b001210a0b200a20096a2203200b290100370100200341206a20152f01003b0100200341186a2007290100370100200341106a200f290100370100200341086a20102901003701002004200d3602b80120044188026a200441f0016a10c60220042f0188024101470d01200941226a2109200d41016a210d20042802b40121030c000b0b20042902b401210c0c010b4200210c2018210a0b024020042802c80122034105460d0020042902cc01210e0240200ca7220d450d00200d41226c450d00200a10390b2000200336020420004101360200200041086a200e3702000c060b2004200a3602a00120042f011c21152004200c3702a401200ca72108201541ffff03460d03410221130240200428020c220328020820144d22070d00200441b0016a41026a200328020020144105746a220341026a2d00003a000020044188026a41086a200341176a29000037030020044188026a41106a2003411f6a2d00003a0000200420032f00003b01b0012004200329000f370388022003290007210e200328000321130b200441c8016a41026a220f200441b0016a41026a2d00003a0000200441f0016a41086a220d20044188026a41086a2214290300370300200441f0016a41106a220920044188026a41106a22172d00003a0000200420042f01b0013b01c80120042004290388023703f00120070d022015417f732105200441c4016a41026a2210200f2d00003a0000200441d8016a41086a2215200d290300370300200441d8016a41106a220720092d00003a0000200420042f01c8013b01c401200420042903f0013703d8010240200c422088a722032008470d00200441a0016a2008410110c70220042802a001210a20042802a80121030b200a200341226c6a2203200e3700074102210a200441c4016a41026a2d0000210820042f01c401211a200320133600032003201a3b0100200341026a20083a0000200320042903d80137000f20072d000021132015290300210c200320053b0120200341176a200c3700002003411f6a20133a0000200420042802a80141016a3602a80102402002280208221320124d0d00200f2002280200201241386c6a2203410a6a2d00003a000020142003411f6a2900003703002017200341276a2d00003a0000200420032f00083b01c8012004200341176a290000370388022003410f6a29000021162003410b6a280000210a0b2010200f2d00003a0000200d2014290300370300200920172d00003a0000200420042f01c8013b01c40120042004290388023703f0010240201320124d0d00201141c4006a2111200620042f01c4013b0000200641026a20102d00003a00002015200d290300370300200720092d00003a0000200441b0016a41086a200441a0016a41086a280200360200200420042903f0013703d801200420042903a0013703b00102402004280218220d2004280214470d00200441106a200d10c5022004280218210d0b2004280210200d412c6c6a220320042903b001370200200341136a20163700002003410f6a200a3600002003411b6a20042903d801370000200341076a20042900b701370000200341236a20152903003700002003412b6a20072d00003a00002004200d41016a3602182011201c470d010c120b0b2000200a36020420004101360200200041086a201637020020042802a40121080c030b1032000b2000201336020420004101360200200041086a200e3702000c010b200042013702000b2008450d00200841226c450d0020042802a00110390b410021140240201d450d00201d41c4006c450d002019103941002106410021050c010b41002106410021050b410021130b410021170b410021080b410021100b410021120b4100210b0b410021150b410021070b4100210f0b4100210a0b41002111410021020c030b0240201d450d00201d41c4006c450d00201910390b20002004290310370204200041003602002000410c6a200441186a2802003602000c030b2000200d36020420004101360200200041086a2016370200200310390b410121140240200541ffffffff0171450d00200610390b410121064101210541012113410121174101210841012110410121124101210b41012115410121074101210f4101210a41012111410121020b02402004280218220d450d0020042802102103200d412c6c210d03400240200341046a2802002209450d00200941226c450d00200328020010390b2003412c6a2103200d41546a220d0d000b0b024020042802142203450d002003412c6c450d00200428021010390b02402002450d00200141106a2802002203450d002003410c6c450d00200128020c10390b02402011450d002001411c6a28020041ffffffff0071450d00200128021810390b0240200a450d00200141286a2802002203450d00200341146c450d00200128022410390b0240200f450d00200141346a2802002203450d00200341186c450d00200128023010390b02402007450d00200141c0006a2802002203450d002003411c6c450d00200128023c10390b02402015450d00200141cc006a28020041ffffff3f71450d00200128024810390b0240200b450d00200141d8006a2802002203450d00200341246c450d00200128025410390b02402012450d00200141e4006a2802002203450d00200341286c450d00200128026010390b02402010450d00200141f0006a2802002203450d002003412c6c450d00200128026c10390b02402008450d00200141fc006a2802002203450d00200341306c450d00200128027810390b02402017450d0020014188016a2802002203450d00200341346c450d0020012802840110390b02402013450d0020014194016a2802002203450d00200341386c450d0020012802900110390b02402005450d00200141a0016a2802002203450d002003413c6c450d00200128029c0110390b02402006450d00200141ac016a28020041ffffff1f71450d0020012802a80110390b2014450d00200141b8016a2802002203450d00200341c4006c450d0020012802b40110390b200441b0026a24000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad422c7e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a410436020020022001412c6c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001412c6e360200200241206a24000f0b1034000bc20803067f027e057f23004190016b2202240002400240200128020022032001280204460d00200128021021042001200341046a36020020032f010021052001280208220620062f0100200341026a2f010022076a220341ffff03200341ffff03491b3b01004102210302402001410c6a2802002802002201280208220620054d0d002002418c016a41026a200128020020054105746a220141026a2d000022033a0000200241f0006a41086a2001410f6a2900002208370300200241f0006a41106a200141176a2900002209370300200241f0006a41186a2001411f6a2d0000220a3a0000200241ec006a41026a20033a0000200241d0006a41186a200a3a0000200241d0006a41086a2008370300200241d0006a41106a2009370300200220012f000022033b018c01200220012900072208370370200220033b016c20022008370350200128000321030b200241cc006a41026a200241ec006a41026a2d00003a0000200241306a41086a2201200241d0006a41086a220a290300370300200241306a41106a220b200241d0006a41106a220c290300370300200241306a41186a220d200241d0006a41186a220e2d00003a0000200220022f016c3b014c2002200229035037033002400240200620054b0d002002418c016a41026a20033a0000200241ec006a41026a20033a000020022003360270200220022d00303a0074200220022800313602502002200228003436005320042002280071360001200420033a0000200220022f018c013b016c20042002280250360005200441086a2002280053360000410021050c010b2002418c016a41026a200241cc006a41026a2d000022053a0000200a20012903002208370300200c200b2903002209370300200e200d2d000022013a00002002412c6a41026a20053a0000200241f0006a41186a20013a0000200241f0006a41106a2009370300200241f0006a41086a2008370300200220022f014c22013b018c01200220022903302208370350200220013b012c20022008370370410121050b200241286a41026a2002412c6a41026a2d000022013a0000200241086a41086a2204200241f0006a41086a290300370300200241086a41106a2206200241f0006a41106a290300370300200241086a41186a220a200241f0006a41186a2d00003a0000200241306a41026a220b20013a0000200220022f012c22013b012820022002290370370308200220013b0130200241d0006a41186a220c200a2d00003a0000200241d0006a41106a220a2006290300370300200241d0006a41086a2206200429030037030020022002290308370350410021012005450d01200020022f01303b010220002002290350370009200041056a2003360000200041226a20073b0100200041046a200b2d00003a0000200041116a2006290300370000200041196a200a290300370000200041216a200c2d00003a0000410121010c010b410021010b200020013b010020024190016a24000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42227e2205422088a74541017421022005a721040240024020010d00200341003602100c010b200341186a41023602002003200141226c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141226e360200200341206a24000f0b1034000b83880104087f017e027f067e23004180026b22022400200041046a2203420037020020004100280284ee4d360200024002402001280208220441ffffffff01712004470d0020044103742205417f4c0d00200128020021060240024020050d00410421070c010b200510382207450d020b410021082002410036020820022007360200200220054103762209360204024002400240200920044f0d0020024100200410c90220022802082108200228020021070c010b2004450d010b200620056a2105200720084103746a2107034020062802002104200741046a200641046a2f01003b010020072004360200200741086a2107200841016a2108200641086a22062005470d000b200228020021070b200041086a2106200220083602082000200810ac0202402008450d0020084103742105034002400240024002402007280200220841c000490d00200841808001490d012008418080808004490d020240200328020020062802002208470d002000200841011077200041086a28020021080b200028020020086a41033a0000200041086a2204200841016a2208360200200728020021090240200041046a28020020086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a22083602000c030b200841027421040240200328020020062802002208470d002000200841011077200041086a28020021080b200028020020086a20043a0000200041086a200841016a22083602000c020b2008410274410172210402402003280200200628020022086b41014b0d002000200841021077200041086a28020021080b200028020020086a20043b0000200041086a200841026a22083602000c010b2008410274410272210402402003280200200628020022086b41034b0d002000200841041077200041086a28020021080b200028020020086a2004360000200041086a200841046a22083602000b024002400240200741046a2f0100220441c000490d00200441808001490d01200441027441027221040240200328020020086b41034b0d002000200841041077200041086a28020021080b200028020020086a2004360000200041086a200841046a3602000c020b20044102742104024020032802002008470d002000200841011077200041086a28020021080b200028020020086a20043a0000200041086a200841016a3602000c010b200441027441017221040240200328020020086b41014b0d002000200841021077200041086a28020021080b200028020020086a20043b0000200041086a200841026a3602000b200741086a2107200541786a22050d000b0b200141146a2802002205ad420c7e220a422088a70d00200aa72209417f4c0d00200128020c21080240024020090d00410421070c010b200910382207450d020b41002104200241003602182002200736021020022009410c6e2209360214024002400240200920054f0d00200241106a4100200510ec0120022802182104200228021021070c010b2005450d010b20082005410c6c6a210520072004410c6c6a2107034020072008290200370200200741086a200841086a2f01003b01002007410c6a2107200441016a21042008410c6a22082005470d000b200228021021070b200220043602182000200410ac0202402004450d002004410c6c2105200041086a21040340200741046a210902400240024002402007280200220841c000490d00200841808001490d012008418080808004490d020240200328020020062802002208470d002000200841011077200428020021080b200028020020086a41033a00002004200841016a22083602002007280200210b0240200041046a28020020086b41034b0d002000200841041077200428020021080b200028020020086a200b3600002004200841046a3602000c030b2008410274210b0240200328020020062802002208470d002000200841011077200428020021080b200028020020086a200b3a00002004200841016a3602000c020b2008410274410172210b02402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a200b3b00002004200841026a3602000c010b2008410274410272210b02402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a200b3600002004200841046a3602000b2009200010ca02024002400240200741086a2f0100220841c000490d00200841808001490d012008410274410272210902402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000c020b200841027421090240200328020020062802002208470d002000200841011077200428020021080b200028020020086a20093a00002004200841016a3602000c010b2008410274410172210902402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a20093b00002004200841026a3602000b2007410c6a2107200541746a22050d000b0b200141206a280200220541ffffffff00712005470d0020054104742209417f4c0d00200128021821084104210702402009450d00200910382207450d020b41002104200241003602282002200736022020022009410476220b360224024002400240200b20054f0d00200241206a4100200510cb0220022802282104200228022021070c010b2005450d010b200820096a2105200720044104746a21070340200720082802003602002007410c6a2008410c6a2f01003b0100200741046a200841046a290200370200200741106a2107200441016a2104200841106a22082005470d000b200228022021070b200220043602282000200410ac0202402004450d0020044104742105200041086a2104034002400240024002402007280200220841c000490d00200841808001490d012008418080808004490d020240200328020020062802002208470d002000200841011077200428020021080b200028020020086a41033a00002004200841016a2208360200200728020021090240200041046a28020020086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000c030b200841027421090240200328020020062802002208470d002000200841011077200428020021080b200028020020086a20093a00002004200841016a3602000c020b2008410274410172210902402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a20093b00002004200841026a3602000c010b2008410274410272210902402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000b200741046a200010ca02200741086a200010ca020240024002402007410c6a2f0100220841c000490d00200841808001490d012008410274410272210902402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000c020b200841027421090240200328020020062802002208470d002000200841011077200428020021080b200028020020086a20093a00002004200841016a3602000c010b2008410274410172210902402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a20093b00002004200841026a3602000b200741106a2107200541706a22050d000b0b2001412c6a2802002205ad42147e220a422088a70d00200aa72209417f4c0d00200128022421080240024020090d00410421070c010b200910382207450d020b4100210420024100360238200220073602302002200941146e2209360234024002400240200920054f0d00200241306a4100200510cc0220022802382104200228023021070c010b2005450d010b2008200541146c6a21052007200441146c6a2107034020072008280200360200200741106a200841106a2f01003b01002007410c6a2008410c6a280200360200200741046a200841046a290200370200200741146a2107200441016a2104200841146a22082005470d000b200228023021070b200220043602382000200410ac0202402004450d00200441146c2105200041086a2104034002400240024002402007280200220841c000490d00200841808001490d012008418080808004490d020240200328020020062802002208470d002000200841011077200428020021080b200028020020086a41033a00002004200841016a2208360200200728020021090240200041046a28020020086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000c030b200841027421090240200328020020062802002208470d002000200841011077200428020021080b200028020020086a20093a00002004200841016a3602000c020b2008410274410172210902402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a20093b00002004200841026a3602000c010b2008410274410272210902402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02024002400240200741106a2f0100220841c000490d00200841808001490d012008410274410272210902402003280200200628020022086b41034b0d002000200841041077200428020021080b200028020020086a20093600002004200841046a3602000c020b200841027421090240200328020020062802002208470d002000200841011077200428020021080b200028020020086a20093a00002004200841016a3602000c010b2008410274410172210902402003280200200628020022086b41014b0d002000200841021077200428020021080b200028020020086a20093b00002004200841026a3602000b200741146a21072005416c6a22050d000b0b200141386a2802002208ad42187e220a422088a70d00200aa72205417f4c0d00200128023021070240024020050d00410421090c010b200510382209450d020b4100210420024100360248200220093602402002200541186e2205360244024002400240200520084f0d00200241c0006a4100200810cd0220022802482104200228024021090c010b2008450d010b2007200841186c6a21052009200441186c6a2108034020082007280200360200200841146a200741146a2f01003b01002008410c6a2007410c6a290200370200200841046a200741046a290200370200200841186a2108200441016a2104200741186a22072005470d000b200228024021090b200220043602482000200410ac0202402004450d00200441186c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02024002400240200741146a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841186a2208470d000b0b200141c4006a2802002208ad421c7e220a422088a70d00200aa72205417f4c0d00200128023c21070240024020050d00410421090c010b200510382209450d020b41002104200241003602582002200936025020022005411c6e2205360254024002400240200520084f0d00200241d0006a4100200810ce0220022802582104200228025021090c010b2008450d010b20072008411c6c6a210520092004411c6c6a2108034020082007280200360200200841186a200741186a2f01003b0100200841146a200741146a2802003602002008410c6a2007410c6a290200370200200841046a200741046a2902003702002008411c6a2108200441016a21042007411c6a22072005470d000b200228025021090b200220043602582000200410ac0202402004450d002004411c6c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02024002400240200741186a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b2008411c6a2208470d000b0b200141d0006a280200220841ffffff3f712008470d0020084105742205417f4c0d00200128024821070240024020050d00410421090c010b200510382209450d020b41002104200241003602682002200936026020022005410576220b360264024002400240200b20084f0d00200241e0006a4100200810cf0220022802682104200228026021090c010b2008450d010b200720056a2105200920044105746a21080340200820072802003602002008411c6a2007411c6a2f01003b0100200841146a200741146a2902003702002008410c6a2007410c6a290200370200200841046a200741046a290200370200200841206a2108200441016a2104200741206a22072005470d000b200228026021090b200220043602682000200410ac0202402004450d002004410574210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca020240024002402007411c6a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841206a2208470d000b0b200141dc006a2802002208ad42247e220a422088a70d00200aa72205417f4c0d00200128025421070240024020050d00410421090c010b200510382209450d020b4100210420024100360278200220093602702002200541246e2205360274024002400240200520084f0d00200241f0006a4100200810d00220022802782104200228027021090c010b2008450d010b2007200841246c6a21052009200441246c6a2108034020082007280200360200200841206a200741206a2f01003b01002008411c6a2007411c6a280200360200200841146a200741146a2902003702002008410c6a2007410c6a290200370200200841046a200741046a290200370200200841246a2108200441016a2104200741246a22072005470d000b200228027021090b200220043602782000200410ac0202402004450d00200441246c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02024002400240200741206a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841246a2208470d000b0b200141e8006a2802002208ad42287e220a422088a70d00200aa72205417f4c0d00200128026021070240024020050d00410421090c010b200510382209450d020b41002104200241003602880120022009360280012002200541286e220536028401024002400240200520084f0d0020024180016a4100200810d102200228028801210420022802800121090c010b2008450d010b2007200841286c6a21052009200441286c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f20082007280200360200200841246a200741246a2f01003b01002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a370200200841286a2108200441016a2104200741286a22072005470d000b20022802800121090b20022004360288012000200410ac0202402004450d00200441286c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02024002400240200741246a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841286a2208470d000b0b200141f4006a2802002208ad422c7e220a422088a70d00200aa72205417f4c0d00200128026c21070240024020050d00410421090c010b200510382209450d020b410021042002410036029801200220093602900120022005412c6e220536029401024002400240200520084f0d0020024190016a4100200810d202200228029801210420022802900121090c010b2008450d010b20072008412c6c6a210b20092004412c6c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a280200210520082007280200360200200841286a200741286a2f01003b0100200841246a20053602002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a3702002008412c6a2108200441016a21042007412c6a2207200b470d000b20022802900121090b20022004360298012000200410ac0202402004450d002004412c6c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02024002400240200741286a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b2008412c6a2208470d000b0b20014180016a2802002208ad42307e220a422088a70d00200aa72205417f4c0d00200128027821070240024020050d00410421090c010b200510382209450d020b41002104200241003602a801200220093602a0012002200541306e22053602a401024002400240200520084f0d00200241a0016a4100200810d30220022802a801210420022802a00121090c010b2008450d010b2007200841306c6a210b2009200441306c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a2902002110200728020021052008412c6a2007412c6a2f01003b0100200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a37020020082005360200200841306a2108200441016a2104200741306a2207200b470d000b20022802a00121090b200220043602a8012000200410ac0202402004450d00200441306c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca020240024002402007412c6a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841306a2208470d000b0b2001418c016a2802002208ad42347e220a422088a70d00200aa72205417f4c0d0020012802840121070240024020050d00410421090c010b200510382209450d020b41002104200241003602b801200220093602b0012002200541346e22053602b401024002400240200520084f0d00200241b0016a4100200810d40220022802b801210420022802b00121090c010b2008450d010b2007200841346c6a210b2009200441346c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a29020021102007412c6a280200210520072802002109200841306a200741306a2f01003b01002008412c6a2005360200200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a37020020082009360200200841346a2108200441016a2104200741346a2207200b470d000b20022802b00121090b200220043602b8012000200410ac0202402004450d00200441346c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca022007412c6a200010ca02024002400240200741306a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841346a2208470d000b0b20014198016a2802002208ad42387e220a422088a70d00200aa72205417f4c0d0020012802900121070240024020050d00410421090c010b200510382209450d020b41002104200241003602c801200220093602c0012002200541386e22053602c401024002400240200520084f0d00200241c0016a4100200810d50220022802c801210420022802c00121090c010b2008450d010b2007200841386c6a210b2009200441386c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a29020021102007412c6a290200211120072802002105200841346a200741346a2f01003b01002008412c6a2011370200200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a37020020082005360200200841386a2108200441016a2104200741386a2207200b470d000b20022802c00121090b200220043602c8012000200410ac0202402004450d00200441386c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca022007412c6a200010ca02200741306a200010ca02024002400240200741346a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841386a2208470d000b0b200141a4016a2802002208ad423c7e220a422088a70d00200aa72205417f4c0d00200128029c0121070240024020050d00410421090c010b200510382209450d020b41002104200241003602d801200220093602d00120022005413c6e22053602d401024002400240200520084f0d00200241d0016a4100200810d60220022802d801210420022802d00121090c010b2008450d010b20072008413c6c6a210b20092004413c6c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a29020021102007412c6a2902002111200741346a280200210520072802002109200841386a200741386a2f01003b0100200841346a20053602002008412c6a2011370200200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a370200200820093602002008413c6a2108200441016a21042007413c6a2207200b470d000b20022802d00121090b200220043602d8012000200410ac0202402004450d002004413c6c210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca022007412c6a200010ca02200741306a200010ca02200741346a200010ca02024002400240200741386a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b2008413c6a2208470d000b0b200141b0016a280200220841ffffff1f712008470d0020084106742205417f4c0d0020012802a80121070240024020050d00410421090c010b200510382209450d020b41002104200241003602e801200220093602e00120022005410676220b3602e401024002400240200b20084f0d00200241e0016a4100200810d70220022802e801210420022802e00121090c010b2008450d010b200720056a210b200920044106746a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a29020021102007412c6a2902002111200741346a2902002112200728020021052008413c6a2007413c6a2f01003b0100200841346a20123702002008412c6a2011370200200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a37020020082005360200200841c0006a2108200441016a2104200741c0006a2207200b470d000b20022802e00121090b200220043602e8012000200410ac0202402004450d002004410674210b41002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210c0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000c030b2004410274210c0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200c3a00002005200441016a3602000c020b2004410274410172210c02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200c3b00002005200441026a3602000c010b2004410274410272210c02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200c3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca022007412c6a200010ca02200741306a200010ca02200741346a200010ca02200741386a200010ca020240024002402007413c6a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b200b200841c0006a2208470d000b0b200141bc016a2802002208ad42c4007e220a422088a70d00200aa72205417f4c0d0020012802b40121070240024020050d00410421090c010b200510382209450d020b41002104200241003602f801200220093602f0012002200541c4006e22053602f401024002400240200520084f0d00200241f0016a4100200810d80220022802f801210420022802f00121090c010b2008450d010b2007200841c4006c6a21012009200441c4006c6a21080340200741046a290200210a2007410c6a290200210d200741146a290200210e2007411c6a290200210f200741246a29020021102007412c6a2902002111200741346a29020021122007413c6a280200210520072802002109200841c0006a200741c0006a2f01003b01002008413c6a2005360200200841346a20123702002008412c6a2011370200200841246a20103702002008411c6a200f370200200841146a200e3702002008410c6a200d370200200841046a200a37020020082009360200200841c4006a2108200441016a2104200741c4006a22072001470d000b20022802f00121090b200220043602f8012000200410ac0202402004450d00200441c4006c210141002108200041086a210503400240024002400240200920086a2207280200220441c000490d00200441808001490d012004418080808004490d020240200328020020062802002204470d002000200441011077200528020021040b200028020020046a41033a00002005200441016a22043602002007280200210b0240200041046a28020020046b41034b0d002000200441041077200528020021040b200028020020046a200b3600002005200441046a3602000c030b2004410274210b0240200328020020062802002204470d002000200441011077200528020021040b200028020020046a200b3a00002005200441016a3602000c020b2004410274410172210b02402003280200200628020022046b41014b0d002000200441021077200528020021040b200028020020046a200b3b00002005200441026a3602000c010b2004410274410272210b02402003280200200628020022046b41034b0d002000200441041077200528020021040b200028020020046a200b3600002005200441046a3602000b200741046a200010ca02200741086a200010ca022007410c6a200010ca02200741106a200010ca02200741146a200010ca02200741186a200010ca022007411c6a200010ca02200741206a200010ca02200741246a200010ca02200741286a200010ca022007412c6a200010ca02200741306a200010ca02200741346a200010ca02200741386a200010ca022007413c6a200010ca02024002400240200741c0006a2f0100220741c000490d00200741808001490d012007410274410272210402402003280200200628020022076b41034b0d002000200741041077200528020021070b200028020020076a20043600002005200741046a3602000c020b200741027421040240200328020020062802002207470d002000200741011077200528020021070b200028020020076a20043a00002005200741016a3602000c010b2007410274410172210402402003280200200628020022076b41014b0d002000200741021077200528020021070b200028020020076a20043b00002005200741026a3602000b2001200841c4006a2208470d000b0b024020022802f4012200450d00200041c4006c450d00200910390b024020022802e40141ffffff1f71450d0020022802e00110390b024020022802d4012200450d002000413c6c450d0020022802d00110390b024020022802c4012200450d00200041386c450d0020022802c00110390b024020022802b4012200450d00200041346c450d0020022802b00110390b024020022802a4012200450d00200041306c450d0020022802a00110390b02402002280294012200450d002000412c6c450d0020022802900110390b02402002280284012200450d00200041286c450d0020022802800110390b024020022802742200450d00200041246c450d00200228027010390b0240200228026441ffffff3f71450d00200228026010390b024020022802542200450d002000411c6c450d00200228025010390b024020022802442200450d00200041186c450d00200228024010390b024020022802342200450d00200041146c450d00200228023010390b0240200228022441ffffffff0071450d00200228022010390b024020022802142200450d002000410c6c450d00200228021010390b0240200228020441ffffffff0171450d00200228020010390b20024180026a24000f0b1034000b1032000bd50101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffffff01712001464102742102200141037421010240024020040d00200341003602100c010b200341186a410436020020032004410374360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410376360200200341206a24000f0b1034000b810401037f02400240024020002f0100220241c000490d00200241808001490d01200241027441027221030240200141046a280200200141086a220428020022026b41034b0d002001200241041077200428020021020b200128020020026a20033600002004200241046a22023602000c020b200241027421030240200141046a280200200141086a22042802002202470d002001200241011077200428020021020b200128020020026a20033a00002004200241016a22023602000c010b200241027441017221030240200141046a280200200141086a220428020022026b41014b0d002001200241021077200428020021020b200128020020026a20033b00002004200241026a22023602000b0240024020002f0102220041c000490d00200041808001490d01200041027441027221000240200141046a28020020026b41034b0d002001200241041077200141086a28020021020b200128020020026a2000360000200141086a200241046a3602000f0b200041027421000240200141046a2802002002470d002001200241011077200141086a28020021020b200128020020026a20003a0000200141086a200241016a3602000f0b200041027441017221000240200141046a28020020026b41014b0d002001200241021077200141086a28020021020b200128020020026a20003b0000200141086a200241026a3602000bd50101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffffff00712001464102742102200141047421010240024020040d00200341003602100c010b200341186a410436020020032004410474360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410476360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42147e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141146c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141146e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42187e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141186c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141186e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad421c7e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a410436020020032001411c6c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001411c6e360200200341206a24000f0b1034000bd40101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffff3f712001464102742102200141057421010240024020040d00200341003602100c010b200341186a410436020020032004410574360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410576360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42247e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141246c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141246e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42287e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141286c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141286e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad422c7e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a410436020020032001412c6c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001412c6e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42307e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141306c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141306e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42347e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141346c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141346e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42387e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141386c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141386e360200200341206a24000f0b1034000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad423c7e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a410436020020032001413c6c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001413c6e360200200341206a24000f0b1034000bd40101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffff1f712001464102742102200141067421010240024020040d00200341003602100c010b200341186a410436020020032004410674360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410676360200200341206a24000f0b1034000bd70102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42c4007e2205422088a74541027421022005a721040240024020010d00200341003602100c010b200341186a41043602002003200141c4006c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141c4006e360200200341206a24000f0b1034000bddea0205057f017e037f017e037f230041106b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e26000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425260b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41003a00002003200441016a220436020002400240024002400240024002400240024002402000280208417f6a0e0a000102030405060708092f0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c2e0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a360200200028020c200041146a280200200110b9020c2d0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200029031021070240200528020020046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a3602000c2c0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a360200200028020c200041146a280200200110b9020c2b0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a360200200028020c200041146a280200200110b9020c2a0b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a200441016a3602002003200110da020c290b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a200441016a360200200028020c21042001200041146a280200220310ac022003450d282004200341186c6a210303402004280200200441086a280200200110b9022004410c6a280200200441146a280200200110b902200441186a22042003470d000c290b0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a200441016a360200200028020c21042001200041146a280200220310ac022003450d2720042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000c280b0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41083a0000200141086a2203200441016a360200200028020c200041146a280200200110b9022000280218210602402005280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c260b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41093a0000200141086a200441016a360200200028020c200041146a280200200110b9020c250b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41013a00002003200441016a22043602000240024002402000280208417f6a0e03000102270b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a220336020020004188026a21040240200528020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a2204360200200029032021070240200141046a220528020020046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a2203200441086a360200200041386a200110b502200041286a200110db02200041d8006a200110b502200041f8006a200110b5022000412c6a200110dc02200041a8016a200110b50220004198016a200110db02200041c8016a200110b502200041e8016a200110b5022000419c016a200110dc02200028020c210602402005280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200041106a28020021042001200041186a280200220310ac0202402003450d0020042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000b0b2000411c6a28020021050240200141046a280200200141086a220328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c260b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2206200441016a220336020020004188026a21040240200528020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a2204360200200029032021070240200141046a220528020020046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a2203200441086a360200200041386a200110b502200041286a200110db02200041d8006a200110b502200041f8006a200110b5022000412c6a200110dc02200041a8016a200110b50220004198016a200110db02200041c8016a200110b502200041e8016a200110b5022000419c016a200110dc02200028020c210602402005280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200041106a28020021042001200041186a280200220310ac0202402003450d0020042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000b0b2000411c6a28020021050240200141046a280200200141086a220328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c250b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200024020052802002004470d002001200441011077200328020021040b200128020020046a41013a00002003200441016a2204360200200029031021070240200141046a220528020020046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a2203200441086a2204360200200029031821070240200528020020046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a220436020002400240024020002d00200e03000102270b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c260b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602000c250b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602000c240b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200041086a2106200128020020046a41023a00002003200441016a2204360200024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002006200110dd020c230b200041046a21030240200141046a280200200141086a22052802002204470d002001200441011077200528020021040b200128020020046a41033a00002005200441016a22043602000240024002400240024020032d0000417f6a0e050001020304270b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c260b0240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2206200441016a2205360200200341016a21040240200828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002006200541206a2204360200200028022821030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c250b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c240b0240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2208200441016a2205360200200341016a21040240200628020020056b411f4b0d002001200541201077200828020021050b200128020020056a22062004290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700002008200541206a2204360200200028022821050240200141046a220628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a2205200441046a220436020020032d00212103024020062802002004470d002001200441011077200528020021040b200128020020046a20033a00002005200441016a3602000c230b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c220b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41043a00002003200441016a220436020002400240024002402000280208417f6a0e0400010203250b200041306a21032000410c6a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002005200110de02200220033602002002200110df020c240b200041c0006a2103200041306a21052000410c6a21060240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602002006200110de02200220053602002002200110df02200220033602002002200110df020c230b200041d8006a2103200041306a21052000410c6a21060240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602002006200110de022005200110de02200220033602002002200110df020c220b200041306a21032000410c6a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a3602002005200110de02200220033602002002200110df020c210b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41053a00002003200441016a2204360200024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002000280204210420012000410c6a280200220310ac022003450d20200341f0006c21030340200441106a200110b5022004200110db02200441306a200110b502200441d0006a200110b502200441046a200110dc02200441f0006a2104200341907f6a22030d000c210b0b200041086a21030240200141046a2206280200200141086a22052802002204470d002001200441011077200528020021040b200128020020046a41063a00002005200441016a22043602000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020032d0000417f6a0e17000102030405060708090a0b0c0d0e0f10111213141516360b200041d0006a21052000412c6a2108024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a3602002008200110de02200220053602002002200110df020240024002400240024020032d00010e0500010203043a0b0240200141046a28020020062802002204470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c390b0240200141046a28020020062802002204470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602000c380b0240200141046a28020020062802002204470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602000c370b0240200141046a220828020020062802002205470d002001200541011077200141086a28020021050b200341026a2104200128020020056a41033a0000200141086a2206200541016a22033602000240200828020020036b411f4b0d002001200341201077200628020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002006200341206a3602000c360b0240200141046a28020020062802002204470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a3602000c350b200041106a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a360200200220033602002002200110df020c340b200041106a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a360200200220033602002002200110df020c330b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c320b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a22043602000240024002400240200028020c220341c000490d00200341808001490d012003418080808004490d02024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a22043602000c030b20034102742103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a20033a0000200141086a200441016a22043602000c020b200341027441017221030240200628020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20033b0000200141086a200441026a22043602000c010b200341027441027221030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a22043602000b200041106a2d00002103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a20033a0000200141086a200441016a3602000c310b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a200441016a360200200028020c21042001200041146a280200220310ac02200341246c2203450d3003402004200110de02200441246a21042003415c6a22030d000c310b0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a200441016a3602000c2f0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a200441016a22043602000240024002400240024020032d00010e050001020304330b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c320b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602000c310b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602000c300b024020062802002004470d002001200441011077200141086a28020021040b200341026a2103200128020020046a41033a0000200141086a2205200441016a22043602000240200141046a28020020046b411f4b0d002001200441201077200528020021040b200128020020046a22012003290000370000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a2900003700002005200441206a3602000c2f0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a3602000c2e0b2000410c6a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41083a0000200141086a200441016a3602002003200110de020c2d0b2000410c6a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41093a0000200141086a200441016a3602002003200110db020c2c0b2000410c6a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410a3a0000200141086a200441016a3602002003200110db020c2b0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410b3a0000200141086a2205200441016a220436020020032d000121030240200141046a2802002004470d002001200441011077200528020021040b200128020020046a20033a00002005200441016a3602000c2a0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410c3a0000200141086a200441016a3602000c290b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410d3a0000200141086a200441016a3602000c280b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410e3a0000200141086a2209200441016a360200200028020c21042001200041146a280200220310ac022003450d27200341057421082009280200210303400240200628020020036b411f4b0d002001200341201077200928020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002009200341206a2203360200200441206a2104200841606a22080d000c280b0b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a410f3a0000200141086a2206200441016a2205360200200341016a21040240200141046a220828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002006200541206a2204360200200028022c21030240200828020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c260b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41103a0000200141086a200441016a3602000c250b024020062802002004470d002001200441011077200141086a28020021040b200041106a2105200128020020046a41113a0000200141086a2203200441016a2204360200200028020c21060240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602002005200110e0020c240b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41123a0000200141086a2206200441016a2205360200200341016a21040240200141046a220828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002006200541206a2204360200200028022c21030240200828020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c230b200041106a2103024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41133a0000200141086a200441016a360200200220033602002002200110df020c220b200041106a21032000410c6a2105024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41143a0000200141086a200441016a3602002005200110db022003200110db020c210b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41153a0000200141086a2206200441016a2205360200200341016a21040240200141046a220828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002006200541206a2204360200200028022c21030240200828020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c200b024020062802002004470d002001200441011077200141086a28020021040b200128020020046a41163a0000200141086a200441016a360200200028020c21042001200041146a280200220310ac02200341246c2203450d1f03402004200110de02200441246a21042003415c6a22030d000c200b0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41073a00002003200441016a360200200110e1020c1e0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41083a00002003200441016a220436020002402000280204450d00200041106a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002003200110e20220002802042000410c6a280200200110b9020c1e0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602000c1d0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a410a3a00002003200441016a22043602000240024002402000280208417f6a0e030001021f0b200041206a21050240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a3602002005200110e302200028020c210502402006280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a360200200041106a28020021042001200041186a280200220310ac0202402003450d0020042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000b0b2000411c6a28020021050240200141046a280200200141086a220328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1e0b200041206a21050240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a3602002005200110e302200028020c210502402006280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a360200200041106a28020021042001200041186a280200220310ac0202402003450d0020042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000b0b2000411c6a28020021050240200141046a280200200141086a220328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1d0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028021021030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c1c0b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a410b3a00002003200441016a2204360200024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020421050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a360200200041086a280200200041106a280200200110b902200041146a280200210420012000411c6a280200220310ac0202402003450d0020042003410c6c6a210303402004280200200441086a280200200110b9022004410c6a22042003470d000b0b200041206a28020021050240200141046a2206280200200141086a220328020022046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200041246a28020021030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a2206200441046a2203360200200041286a28020021050240200141046a220828020020036b41034b0d002001200341041077200628020021030b2000412c6a2104200128020020036a20053600002006200341046a22053602000240200828020020056b413f4b0d002001200541c0001077200141086a28020021050b200128020020056a22032004290000370000200341386a200441386a290000370000200341306a200441306a290000370000200341286a200441286a290000370000200341206a200441206a290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200141086a200541c0006a3602000c1b0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a410c3a00002003200441016a360200200110e1020c1a0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41103a00002003200441016a220436020002400240024020002f0104417f6a0e030001021c0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a360200200028020821042001200041106a280200220310ac02200341c0076c2203450d1b03402004200110d902200441c0076a2104200341c0786a22030d000c1c0b0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a220436020020002f010621060240200528020020046b41014b0d002001200441021077200328020021040b200128020020046a20063b00002003200441026a3602002000280208200110d9020c1a0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a360200200028020821042001200041106a280200220310ac02200341c0076c2203450d1903402004200110d902200441c0076a2104200341c0786a22030d000c1a0b0b200041086a21030240200141046a280200200141086a22052802002204470d002001200441011077200528020021040b200128020020046a41113a00002005200441016a220436020002400240024002400240024002400240024002400240024002400240024020032d0000417f6a0e0f000102030405060708090a0b0c0d0e270b0240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a2205360200200341016a21040240200828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002006200541206a3602000c260b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602002003200110e4020c250b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2206200441016a360200200028020c21042001200041146a280200220310ac02200341c4006c2203450d24200420036a210020062802002103200141046a210a03400240200a280200220820036b411f4b0d002001200341201077200a2802002108200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a22033602002002200441206a2209109601200228020021050240200820036b200228020822044f0d002001200320041077200628020021030b200128020020036a2005200410d40b1a2006200320046a220336020002402002280204450d00200510390b200941246a22042000470d000c250b0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a3602000c230b200041106a21032000410c6a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a3602002005200110db02200220033602002002200110df020c220b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c210b200041106a21032000410c6a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a200441016a3602002005200110db02200220033602002002200110df020c200b2000412c6a21060240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a2205200441016a3602002006200110db02200341016a210402402008280200200528020022036b411f4b0d002001200341201077200528020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002005200341206a3602000c1f0b2000410c6a21050240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41083a0000200141086a2203200441016a3602002005200110db022000290310210702402006280200200328020022046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a3602000c1e0b200041386a2103200041106a21052000410c6a21060240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41093a0000200141086a200441016a3602002006200110db022005200110de022003200110e5020c1d0b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a410a3a0000200141086a200441016a3602002003200110de020c1c0b200041306a21052000410c6a21060240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a410b3a0000200141086a2203200441016a3602002006200110de02200220051096012002280200210602402008280200200328020022046b200228020822054f0d002001200420051077200328020021040b200128020020046a2006200510d40b1a2003200420056a3602002002280204450d1b200610390c1b0b200041306a21052000410c6a21060240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a410c3a0000200141086a2203200441016a3602002006200110de02200220051096012002280200210602402008280200200328020022046b200228020822054f0d002001200420051077200328020021040b200128020020046a2006200510d40b1a2003200420056a3602002002280204450d1a200610390c1a0b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a410d3a0000200141086a200441016a3602002003200110de020c190b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a410e3a0000200141086a200441016a3602000c180b200041046a21080240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41123a00002003200441016a220436020002400240024002400240024002400240024020082d0000417f6a0e09000102030405060708200b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a2203360200200841016a21040240200528020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a3602002000280228200110d9020c1f0b0240200141046a22032802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2209200441016a2205360200200841016a21040240200328020020056b411f4b0d002001200541201077200928020021050b200841216a2103200128020020056a22062004290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700002009200541206a22043602000240200141046a28020020046b411f4b0d002001200441201077200141086a28020021040b200128020020046a22052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200141086a200441206a3602000c1e0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2209200441016a360200200028020821042001200041106a280200220310ac020240024020030d00200928020021030c010b2003410574210620092802002103200141046a210a03400240200a28020020036b411f4b0d002001200341201077200928020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002009200341206a2203360200200441206a2104200641606a22060d000b0b20082f010221040240200141046a220628020020036b41014b0d002001200341021077200141086a28020021030b200128020020036a20043b0000200141086a2205200341026a2204360200200028021421030240200628020020046b41034b0d002001200441041077200528020021040b200128020020046a20033600002005200441046a3602000c1d0b0240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2205200441016a2203360200200841016a21040240200628020020036b411f4b0d002001200341201077200528020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002005200341206a3602000c1c0b0240200141046a22032802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2209200441016a2205360200200841016a21040240200328020020056b411f4b0d002001200541201077200928020021050b200841216a2103200128020020056a22062004290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700002009200541206a22043602000240200141046a28020020046b411f4b0d002001200441201077200141086a28020021040b200128020020046a22052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200141086a200441206a3602000c1b0b0240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a2205200441016a2203360200200841016a21040240200628020020036b411f4b0d002001200341201077200528020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002005200341206a3602000c1a0b0240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a2205200441016a2203360200200841016a21040240200628020020036b411f4b0d002001200341201077200528020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002005200341206a3602000c190b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a200441016a3602000c180b0240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41083a0000200141086a2205200441016a2203360200200841016a21040240200628020020036b411f4b0d002001200341201077200528020021030b200128020020036a22012004290000370000200141186a200441186a290000370000200141106a200441106a290000370000200141086a200441086a2900003700002005200341206a3602000c170b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41133a00002003200441016a220436020002400240024002402000280208417f6a0e04000102031a0b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c190b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a3602002003200110de020c180b2000410c6a21050240200141046a22062802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a3602002005200110de02200041386a29030021072000290330210b02402006280200200328020022046b410f4b0d002001200441101077200328020021040b200128020020046a220520073700082005200b3700002003200441106a2204360200200041c8006a2903002107200041c0006a290300210b0240200141046a220528020020046b410f4b0d002001200441101077200141086a28020021040b200128020020046a220320073700082003200b370000200141086a2203200441106a2204360200200041d0006a28020021060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c170b200041306a21052000410c6a21060240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a3602002006200110de022005200110de02200041e0006a29030021072000290358210b02402008280200200328020022046b410f4b0d002001200441101077200328020021040b200128020020046a220520073700082005200b3700002003200441106a2204360200200041f0006a2903002107200041e8006a290300210b0240200141046a220528020020046b410f4b0d002001200441101077200141086a28020021040b200128020020046a220320073700082003200b370000200141086a2203200441106a2204360200200041f8006a28020021060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c160b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41143a00002003200441016a220436020002400240024002400240024020002d0004417f6a0e060001020304051b0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a220436020002400240200028020c4101460d000240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021021050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200028021421030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a2203200436020020002d000521050240200141046a2802002004470d002001200441011077200328020021040b200128020020046a20053a00002003200441016a3602002000280218200110d9020c1a0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028020c21030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c190b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a3602002000280208200041106a280200200110b9022000280214210602402005280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a22043602000240024020002802184101460d000240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021c21050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200028022021030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a2203200436020020002d000521050240200141046a2802002004470d002001200441011077200328020021040b200128020020046a20053a00002003200441016a3602002000280224200110d9020c180b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a3602002000280208200041106a280200200110b9020c170b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a220436020002400240200028020c4101460d000240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021021050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200028021421030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a2203200436020020002d000521050240200141046a2802002004470d002001200441011077200328020021040b200128020020046a20053a00002003200441016a3602002000280218200110d9020c160b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a2203200441016a3602002000280208200041106a280200200110b9022000280214210602402005280200200328020022046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a22043602000240024020002802184101460d000240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021c21050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200028022021030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a2203200436020020002d000521050240200141046a2802002004470d002001200441011077200328020021040b200128020020046a20053a00002003200441016a3602002000280224200110d9020c150b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41153a00002003200441016a220436020002400240024002402000280208417f6a0e0400010203180b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a360200200028020c200110d9020c170b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a360200200028020c200110d9022000290310210702402005280200200328020022046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a3602000c160b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602002003200110de020c150b2000410c6a21030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a3602002003200110de022000280230200110d9020c140b200041046a21040240200141046a2205280200200141086a22062802002203470d002001200341011077200628020021030b200128020020036a41163a00002006200341016a2203360200024002400240024002400240024002400240024020042d0000417f6a0e0a000102030405060708091d0b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2209200341016a2206360200200441016a21030240200141046a220a28020020066b411f4b0d002001200641201077200928020021060b200128020020066a22082003290000370000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002009200641206a2203360200200a28020021060240024020042d00214106470d00024020062003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c010b024020062003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a220336020002400240024002400240024020042d00210e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a3602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a3602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a3602000b2000280228200110d9020c1c0b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2209200341016a2206360200200441016a21030240200141046a28020020066b411f4b0d002001200641201077200928020021060b200128020020066a22082003290000370000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002009200641206a2203360200024002400240024002400240024020042d00210e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000b200028022821040240200528020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2004360000200141086a200341046a3602000c1b0b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2209200341016a2206360200200441016a21030240200141046a28020020066b411f4b0d002001200641201077200928020021060b200128020020066a22082003290000370000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002009200641206a2203360200024002400240024002400240024020042d00210e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000b200028022821040240200528020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2004360000200141086a200341046a3602000c1a0b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a3602000c190b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a2203360200024002400240024002400240024020042d00010e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000b200028020821060240200528020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2006360000200141086a2205200341046a220336020020042f010221040240200141046a28020020036b41014b0d002001200341021077200528020021030b200128020020036a20043b00002005200341026a3602000c180b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a2209200341016a2206360200200441016a21030240200141046a28020020066b411f4b0d002001200641201077200928020021060b200128020020066a22082003290000370000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002009200641206a2203360200024002400240024002400240024020042d00210e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000b2000412c6a2106200041286a210820042f012221040240200528020020036b41014b0d002001200341021077200141086a28020021030b200128020020036a20043b0000200141086a200341026a3602002008200110db022006200110db020c170b024020052802002003470d002001200341011077200141086a28020021030b200441216a2108200128020020036a41063a0000200141086a2206200341016a2203360200200441016a21040240200141046a28020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a3602002008200110b5020c160b024020052802002003470d002001200341011077200141086a28020021030b200441216a2108200128020020036a41073a0000200141086a2206200341016a2203360200200441016a21040240200141046a28020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a3602002008200110b5020c150b024020052802002003470d002001200341011077200141086a28020021030b200441216a2108200128020020036a41083a0000200141086a2206200341016a2203360200200441016a21040240200141046a28020020036b411f4b0d002001200341201077200628020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002006200341206a3602002008200110b5020c140b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41093a0000200141086a220a200341016a2208360200200441016a21030240200141046a220c28020020086b411f4b0d002001200841201077200a28020021080b200441216a2106200128020020086a22092003290000370000200941186a200341186a290000370000200941106a200341106a290000370000200941086a200341086a290000370000200a200841206a22033602000240200c28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22082006290000370000200841186a200641186a290000370000200841106a200641106a290000370000200841086a200641086a290000370000200141086a200341206a2203360200200141046a28020021060240024020042d00414106470d00024020062003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c010b024020062003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a220336020002400240024002400240024020042d00410e06000102030405060b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c050b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000c040b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000c030b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a3602000c020b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a3602000c010b024020052802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a3602000b2000280248200110d9020c130b200041086a210a0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41173a00002003200441016a22043602000240024002400240200a2d0000417f6a0e0400010203160b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2208200441016a360200200028020c21042001200041146a280200220310ac0202402003450d002003410574210620082802002103200141046a210903400240200928020020036b411f4b0d002001200341201077200828020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002008200341206a2203360200200441206a2104200641606a22060d000b0b2000280218200110d9020c150b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200a2f010221060240200528020020046b41014b0d002001200441021077200328020021040b200128020020046a20063b00002003200441026a360200200028020c21042001200041146a280200220310ac0202402003450d0020034105742106200141086a22082802002103200141046a210903400240200928020020036b411f4b0d002001200341201077200828020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002008200341206a2203360200200441206a2104200641606a22060d000b0b200141046a2802002103200141086a28020021040240024020002802184101460d00024020032004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b024020032004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a22043602002000411c6a28020021050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200041206a28020021030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a2203200436020020002802242000412c6a280200200110b90220002d000921050240200141046a220628020020032802002204470d002001200441011077200328020021040b200128020020046a20053a00002003200441016a2204360200200029033021070240200628020020046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a200441086a3602000c140b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200a2f012221060240200528020020046b41014b0d002001200441021077200328020021040b200128020020046a20063b00002003200441026a360200200028022c21042001200041346a280200220310ac0202402003450d0020034105742106200141086a22082802002103200141046a210903400240200928020020036b411f4b0d002001200341201077200828020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002008200341206a2203360200200441206a2104200641606a22060d000b0b200141046a2802002103200141086a28020021040240024020002802384101460d00024020032004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b024020032004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a22043602002000413c6a28020021050240200141046a220628020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a2204360200200041c0006a28020021030240200628020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200441046a21040b200141086a22062004360200200a41016a21030240200141046a220828020020046b411f4b0d002001200441201077200628020021040b200128020020046a22052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a2900003700002006200441206a2204360200200029034821070240200828020020046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a200441086a3602000c130b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200a2f012221060240200528020020046b41014b0d002001200441021077200328020021040b200128020020046a20063b00002003200441026a360200200028022c21042001200041346a280200220310ac020240024020030d00200141086a28020021030c010b20034105742106200141086a22082802002103200141046a210903400240200928020020036b411f4b0d002001200341201077200828020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002008200341206a2203360200200441206a2104200641606a22060d000b0b200028023821040240200141046a220628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2004360000200141086a2205200341046a22043602002000413c6a28020021030240200628020020046b41034b0d002001200441041077200528020021040b200128020020046a20033600002005200441046a2203360200200a41016a21040240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a290000370000200141086a200341206a3602000c120b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200041086a2106200128020020046a41183a00002003200441016a220436020020004180026a2103024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002006200110e6022003200110db0220004184026a200110db020c110b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412a3a00002003200441016a220436020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402000280208417f6a0e28000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627380b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c370b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c360b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c350b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c340b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c330b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c320b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c310b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c300b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41083a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2f0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41093a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2e0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410a3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2d0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410b3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2c0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410c3a0000200141086a200441016a22043602000240200028020c4101460d00024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c2c0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021021050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2b0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410d3a0000200141086a200441016a22043602000240200028020c4101460d00024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c2b0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028021021050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c2a0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410e3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c290b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a410f3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c280b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41103a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c270b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41113a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c260b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41123a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c250b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41133a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c240b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41143a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c230b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41153a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c220b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41163a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c210b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41173a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c200b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41183a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1f0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41193a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1e0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411a3a0000200141086a2203200441016a2204360200200029031021070240200141046a28020020046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a3602000c1d0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411b3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1c0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411c3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1b0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411d3a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c1a0b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411e3a0000200141086a2203200441016a2204360200200041186a29030021072000290310210b0240200141046a28020020046b410f4b0d002001200441101077200328020021040b2003200441106a360200200128020020046a220420073700082004200b3700000c190b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a411f3a0000200141086a2203200441016a2204360200200041186a29030021072000290310210b0240200141046a28020020046b410f4b0d002001200441101077200328020021040b2003200441106a360200200128020020046a220420073700082004200b3700000c180b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41203a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c170b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41213a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c160b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41223a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c150b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41233a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c140b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41243a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c130b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41253a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c120b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41263a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c110b024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41273a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c100b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412b3a00002003200441016a360200200110e1020c0f0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412c3a00002003200441016a360200200110e1020c0e0b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412d3a00002003200441016a2204360200024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a3602002000280204210420012000410c6a280200220310ac020240200341d0006c2203450d00200420036a210903402004280200200441046a280200200110e7022004410c6a28020021050240200141046a2208280200200628020022036b41034b0d002001200341041077200628020021030b200128020020036a20053600002006200341046a22053602000240200828020020056b413f4b0d002001200541c0001077200628020021050b200128020020056a2203200441106a290000370000200341386a200441c8006a290000370000200341306a200441c0006a290000370000200341286a200441386a290000370000200341206a200441306a290000370000200341186a200441286a290000370000200341106a200441206a290000370000200341086a200441186a2900003700002006200541c0006a360200200441d0006a22042009470d000b0b200041106a280200210c2001200041186a280200220410ac0202402004450d00200c200441f4026c6a210d200141046a210a200141086a21080340200c200110e802200c2802dc0221052001200c2802e402220410ac02200c41f4026a210e02402004450d00200441c1006c21090340200541016a2104200a2802002106200828020021030240024020052d00004101460d00024020062003470d002001200341011077200828020021030b200128020020036a41013a00002008200341016a22033602000240200a28020020036b413f4b0d002001200341c0001077200828020021030b200128020020036a22062004290000370000200641386a200441386a290000370000200641306a200441306a290000370000200641286a200441286a290000370000200641206a200441206a290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700000c010b024020062003470d002001200341011077200828020021030b200128020020036a41023a00002008200341016a22033602000240200a28020020036b413f4b0d002001200341c0001077200828020021030b200128020020036a22062004290000370000200641386a200441386a290000370000200641306a200441306a290000370000200641286a200441286a290000370000200641206a200441206a290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700000b200541c1006a21052008200341c0006a360200200941bf7f6a22090d000b0b200c2802e802200c2802ec02200110e702200e210c200e200d470d000b0b2000411c6a28020021042001200041246a280200220310ac0202402003450d002004200341306c6a210d200141046a21090340412010382203450d1020032004290010370000200341186a220a200441286a290000370000200341106a220c200441206a290000370000200341086a220e200441186a29000037000002402009280200200141086a220528020022086b411f4b0d002001200841201077200528020021080b200128020020086a22062003290000370000200641186a200a290000370000200641106a200c290000370000200641086a200e2900003700002005200841206a360200200310392004280200210602402009280200200528020022036b41034b0d002001200341041077200528020021030b200441306a210c200128020020036a20063600002005200341046a360200200428020421062001200428020c220410ac0202402004450d00200441c8006c210a0340200928020021032005280200210402400240200641046a2d000022084104460d00024020032004470d002001200441011077200528020021040b200128020020046a41003a00002005200441016a2204360200024002400240024020080e0400010203000b024020092802002004470d002001200441011077200528020021040b200128020020046a41003a0000200441016a21040c040b024020092802002004470d002001200441011077200528020021040b200128020020046a41013a0000200441016a21040c030b024020092802002004470d002001200441011077200528020021040b200128020020046a41023a0000200441016a21040c020b024020092802002004470d002001200441011077200528020021040b200128020020046a41033a0000200441016a21040c010b024020032004470d002001200441011077200528020021040b200128020020046a41013a00002005200441016a2204360200024020092802002004470d002001200441011077200528020021040b200128020020046a41003a0000200441016a21040b20052004360200200628020021030240200928020020046b41034b0d002001200441041077200528020021040b200128020020046a20033600002005200441046a2208360200200641056a21040240200928020020086b413f4b0d002001200841c0001077200528020021080b200641c8006a2106200128020020086a22032004290000370000200341386a200441386a290000370000200341306a200441306a290000370000200341286a200441286a290000370000200341206a200441206a290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002005200841c0006a360200200a41b87f6a220a0d000b0b200c2104200c200d470d000b0b200041386a200110b502200041286a200110db02200041d8006a200110b502200041f8006a200110b5022000412c6a200110dc020c0d0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412e3a00002003200441016a360200200110e1020c0c0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a412f3a00002003200441016a2204360200024002400240024002402000280204417f6a0e050001020304100b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200028020c200041146a280200200110b9020c0f0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200028020c200041146a280200200110b9020c0e0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200028020c200041146a280200200110b902200028021821050240200141046a280200200328020022046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000c0d0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a360200200028020c200041146a280200200110b9020c0c0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c0b0b0240200141046a2205280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41303a00002003200441016a2204360200024020052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020421050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c0a0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41313a00002003200441016a360200200110e1020c090b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41323a00002003200441016a360200200110e1020c080b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41333a00002003200441016a22043602000240024002400240024002402000280204417f6a0e060001020304050d0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028020c21030240200141046a220528020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a2203200441046a2204360200200028021021060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c0c0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c0b0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a22043602002000410c6a28020021030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c0a0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020821060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c090b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a3602000c080b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a200441016a3602000c070b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41343a00002003200441016a360200200110e1020c060b200041086a21030240200141046a280200200141086a22052802002204470d002001200441011077200528020021040b200128020020046a413c3a00002005200441016a220436020002400240024002400240024020032d0000417f6a0e060001020304050b0b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602002000280210200041186a280200200110b902200028021c200041246a280200200110b9020c0a0b0240200141046a22082802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2206200441016a2205360200200341016a21040240200828020020056b411f4b0d002001200541201077200628020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002006200541206a2204360200200041d0006a29030021072000290348210b0240200141046a220528020020046b410f4b0d002001200441101077200141086a28020021040b200128020020046a220320073700082003200b370000200141086a2203200441106a2204360200200028022c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602002000280230200041386a280200200110b902200028023c200041c4006a280200200110b9020c090b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c080b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028021021030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c070b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c060b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a200441016a3602000c050b200041086a21030240200141046a280200200141086a22052802002204470d002001200441011077200528020021040b200128020020046a413d3a00002005200441016a220436020002400240024020032d0000417f6a0e03000102070b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2206200441016a2204360200200028022c21080240200528020020046b41034b0d002001200441041077200628020021040b200128020020046a20083600002006200441046a2205360200200341016a21040240200141046a220628020020056b411f4b0d002001200541201077200141086a28020021050b200128020020056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200141086a2203200541206a2204360200200041c0006a29030021072000290338210b0240200628020020046b410f4b0d002001200441101077200328020021040b200128020020046a220520073700082005200b3700002003200441106a2204360200200028023021030240200141046a220528020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a2203200441046a2204360200200028023421060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c060b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c050b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c040b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a413e3a00002003200441016a22043602000240024002400240024002402000280208417f6a0e06000102030405090b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602002000280210200041186a280200200110b9022000411c6a280200200041246a280200200110b902200041286a2d000021050240200141046a28020020032802002204470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c080b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c070b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c060b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a3602000c050b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200041106a2105200128020020046a20063600002003200441046a22043602000240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002005200110e9020c040b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41053a0000200141086a2203200441016a2204360200200028020c21060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028021021030240200141046a220528020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a2203200441046a2204360200200028021421060240200528020020046b41034b0d002001200441041077200328020021040b200128020020046a20063600002003200441046a2204360200200028021821030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000c030b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a413f3a00002003200441016a22043602000240024002402000280208417f6a0e03000102050b200041106a21032000410c6a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002005200110db022003200110db020c040b0240200141046a2802002004470d002001200441011077200141086a28020021040b200041206a2105200041186a2106200041146a2108200041106a2109200128020020046a41013a0000200141086a200441016a22043602000240024002400240200028020c220341c000490d00200341808001490d012003418080808004490d020240200141046a220a2802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21000240200a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20003600002003200441046a3602000c030b200341027421030240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a20033a0000200141086a200441016a3602000c020b200341027441017221030240200141046a28020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20033b0000200141086a200441026a3602000c010b200341027441027221030240200141046a28020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2003360000200141086a200441046a3602000b2009200110db022008200110db022006200110db02200220053602002002200110df020c030b0240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a200441016a3602000c020b200041086a21050240200141046a2203280200200141086a22062802002204470d002001200441011077200628020021040b200128020020046a41c0003a00002006200441016a22043602000240024002400240024002400240024020052d0000417f6a0e080001020304050607090b024020032802002004470d002001200441011077200141086a28020021040b200541016a2106200041386a2108200041346a2109200041306a210a200041c0006a210c200128020020046a41003a0000200141086a200441016a22043602000240024002400240200028022c220541c000490d00200541808001490d012005418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028022c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c030b20054102742105024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c020b200541027441017221050240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20053b0000200141086a200441026a3602000c010b200541027441027221050240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000b2002200c3602002002200110df02200a200110db022009200110db022008200110db022006200110ea020c080b024020032802002004470d002001200441011077200141086a28020021040b200041d0006a2108200128020020046a41013a0000200141086a200441016a22043602000240024002400240200028024c220641c000490d00200641808001490d012006418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2206200441016a2204360200200028024c21090240200141046a28020020046b41034b0d002001200441041077200628020021040b200128020020046a20093600002006200441046a3602000c030b20064102742106024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20063a0000200141086a200441016a3602000c020b200641027441017221060240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20063b0000200141086a200441026a3602000c010b200641027441027221060240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2006360000200141086a200441046a3602000b200220083602002002200110df02200141046a2802002106200141086a2802002104024020052d000122084103470d00024020062004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602000c080b024020062004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a200441016a220436020002400240024020080e030001020a0b024020032802002004470d002001200441011077200141086a28020021040b200541026a2103200128020020046a41003a0000200141086a2206200441016a22053602000240200141046a28020020056b413f4b0d002001200541c0001077200628020021050b200128020020056a22042003290000370000200441386a200341386a290000370000200441306a200341306a290000370000200441286a200341286a290000370000200441206a200341206a290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002006200541c0006a3602000c090b024020032802002004470d002001200441011077200141086a28020021040b200541026a2103200128020020046a41013a0000200141086a2206200441016a22053602000240200141046a28020020056b413f4b0d002001200541c0001077200628020021050b200128020020056a22042003290000370000200441386a200341386a290000370000200441306a200341306a290000370000200441286a200341286a290000370000200441206a200341206a290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002006200541c0006a3602000c080b024020032802002004470d002001200441011077200141086a28020021040b200541026a2105200128020020046a41023a0000200141086a2203200441016a22043602000240200141046a28020020046b41c0004b0d002001200441c1001077200328020021040b200128020020046a200541c10010d40b1a2003200441c1006a3602000c070b024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2208200441016a2206360200200541016a21040240200141046a28020020066b411f4b0d002001200641201077200828020021060b200128020020066a22052004290000370000200541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a2900003700002008200641206a2204360200024002400240200028022c220541c000490d00200541808001490d012005418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028022c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c090b20054102742105024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c080b200541027441017221050240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20053b0000200141086a200441026a3602000c070b200541027441027221050240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000c060b024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a200441016a2204360200024002400240200028020c220541c000490d00200541808001490d012005418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c080b20054102742105024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c070b200541027441017221050240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20053b0000200141086a200441026a3602000c060b200541027441027221050240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000c050b024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41043a0000200141086a200441016a2204360200024002400240200028020c220541c000490d00200541808001490d012005418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c070b20054102742105024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c060b200541027441017221050240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20053b0000200141086a200441026a3602000c050b200541027441027221050240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000c040b024020032802002004470d002001200441011077200141086a28020021040b200541016a2106200041386a2108200041346a2109200041306a210a200041c0006a210c200128020020046a41053a0000200141086a200441016a22043602000240024002400240200028022c220541c000490d00200541808001490d012005418080808004490d02024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a2204360200200028022c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c030b20054102742105024020032802002004470d002001200441011077200141086a28020021040b200128020020046a20053a0000200141086a200441016a3602000c020b200541027441017221050240200328020020046b41014b0d002001200441021077200141086a28020021040b200128020020046a20053b0000200141086a200441026a3602000c010b200541027441027221050240200328020020046b41034b0d002001200441041077200141086a28020021040b200128020020046a2005360000200141086a200441046a3602000b2002200c3602002002200110df02200a200110db022009200110db022008200110db022006200110ea020c030b024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41063a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602002000280210200041186a280200200110b9020c020b024020032802002004470d002001200441011077200141086a28020021040b200128020020046a41073a0000200141086a2203200441016a2204360200200028020c21050240200141046a28020020046b41034b0d002001200441041077200328020021040b200128020020046a20053600002003200441046a3602000c010b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41e3003a00002003200441016a220436020002400240024002402000280208417f6a0e0400010203040b200041d8036a2103200041106a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200141086a200441016a3602002005200110eb022003200110e9020c030b200041e0036a2103200041186a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2206200441016a3602002005200110eb022003200110eb02200028020c21042001200041146a280200220310ac020240200341f8036c2203450d0003402004200110ec02200441f8036a2104200341887c6a22030d000b0b20002903a80721070240200141046a280200200628020022046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a200441086a3602000c020b200041e0036a2103200041186a21050240200141046a2802002004470d002001200441011077200141086a28020021040b200128020020046a41023a0000200141086a2206200441016a3602002005200110eb022003200110eb02200028020c21042001200041146a280200220310ac020240200341f8036c2203450d0003402004200110ec02200441f8036a2104200341887c6a22030d000b0b20002903a80721070240200141046a280200200628020022046b41074b0d002001200441081077200141086a28020021040b200128020020046a2007370000200141086a200441086a3602000c010b0240200141046a22052802002004470d002001200441011077200141086a28020021040b200128020020046a41033a0000200141086a2203200441016a360200200028020c200110ed022000290310210702402005280200200328020022046b41074b0d002001200441081077200328020021040b200128020020046a20073700002003200441086a3602000b200241106a24000f0b1032000bb30201067f200141046a2802002102200141086a2802002103024020002802004101460d00024020022003470d002001200341011077200141086a28020021030b200141086a200341016a360200200128020020036a41003a00000f0b024020022003470d002001200341011077200141046a2802002102200141086a28020021030b200141086a2204200341016a22053602002001280200220620036a41013a0000200028020421070240200220056b41034b0d002001200541041077200141046a280200210220042802002105200128020021060b2004200541046a2203360200200620056a2007360000200041086a28020021000240200220036b41034b0d002001200341041077200141086a2802002103200128020021060b200620036a2000360000200141086a200341046a3602000ba50301047f0240024002402000280200220241c000490d00200241808001490d012002418080808004490d020240200141046a22032802002204200141086a22052802002202470d00200120024101107720032802002104200528020021020b2001280200220320026a41033a00002005200241016a2202360200200028020021000240200420026b41034b0d002001200241041077200141086a2802002102200128020021030b200320026a2000360000200141086a200241046a3602000f0b200241027421040240200141046a280200200141086a22002802002202470d002001200241011077200028020021020b200128020020026a20043a00002000200241016a3602000f0b200241027441017221040240200141046a280200200141086a220028020022026b41014b0d002001200241021077200028020021020b200128020020026a20043b00002000200241026a3602000f0b200241027441027221040240200141046a280200200141086a220028020022026b41034b0d002001200241041077200028020021020b200128020020026a20043600002000200241046a3602000bb70101077f230041106b220224002000280200210320012000280208220010ac020240200041246c2204450d00200141086a22052802002100200141046a210603402002200310c007200228020021070240200628020020006b200228020822084f0d002001200020081077200528020021000b200128020020006a2007200810d40b1a2005200020086a220036020002402002280204450d00200710390b200341246a21032004415c6a22040d000b0b200241106a24000bf00403017f017e067f230041206b220224000240024002400240024002402000290300220342c000540d00200342808001540d012003428080808004540d02200379a7220441274d0d0341a7d3ca00413641e0d3ca001035000b2003a741027421050240200141046a280200200141086a22002802002204470d002001200441011077200028020021040b200128020020046a20053a00002000200441016a3602000c030b2003a741027441017221050240200141046a280200200141086a220028020022046b41014b0d002001200441021077200028020021040b200128020020046a20053b00002000200441026a3602000c020b2003a741027441027221050240200141046a280200200141086a220028020022046b41034b0d002001200441041077200028020021040b200128020020046a20053600002000200441046a3602000c010b4108200441037622056b2106411320054102746b21070240200141046a280200200141086a22082802002204470d002001200441011077200828020021040b2001280200220920046a20073a00002008200441016a220436020020022000290300220337030002402006450d00200541786a2100200141046a2107200141086a210603402003a72105024020072802002004470d00200120044101107720062802002104200128020021090b200920046a20053a00002006200441016a220436020020034208882103200041016a22052000492108200521002008450d000b200220033703000b200350450d010b200241206a24000f0b2002411c6a4100360200200241186a41b8c0cd003602002002420137020c200241f0d3ca003602082002200241086a10cb0a000bdd0501037f02400240024002400240024020002d00000e050001020304050b0240200141046a2202280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41003a00002003200441016a2204360200200041016a21000240200228020020046b411f4b0d002001200441201077200141086a28020021040b200128020020046a22032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200141086a200441206a3602000f0b0240200141046a280200200141086a22042802002200470d002001200041011077200428020021000b200128020020006a41013a00002004200041016a3602000f0b0240200141046a280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41023a00002003200441016a36020020002802042000410c6a280200200110b9020f0b0240200141046a2202280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41033a00002003200441016a2204360200200041016a21000240200228020020046b411f4b0d002001200441201077200141086a28020021040b200128020020046a22032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200141086a200441206a3602000f0b0240200141046a2202280200200141086a22032802002204470d002001200441011077200328020021040b200128020020046a41043a00002003200441016a2204360200200041016a21000240200228020020046b41134b0d002001200441141077200141086a28020021040b200128020020046a22032000290000370000200341106a200041106a280000360000200341086a200041086a290000370000200141086a200441146a3602000b0bcc0503027f027e057f230041306b2202240002400240024002400240024020002802002203290300220442c000544100200341086a29030022055022001b0d0020044280800154410020001b0d01200442808080800454410020001b0d0220057920047942c0007c20054200521ba7220041e7004d0d0341a7d3ca00413641b0d5ca001035000b2004a741027421030240200141046a280200200141086a2802002200470d002001200041011077200141086a28020021000b200128020020006a20033a0000200141086a200041016a3602000c030b2004a741027441017221060240200141046a280200200141086a220328020022006b41014b0d002001200041021077200328020021000b200128020020006a20063b00002003200041026a3602000c020b2004a741027441027221060240200141046a280200200141086a220328020022006b41034b0d002001200041041077200328020021000b200128020020006a20063600002003200041046a3602000c010b4110200041037622066b2107413320064102746b21080240200141046a280200200141086a22092802002200470d002001200041011077200928020021000b2001280200220a20006a20083a00002009200041016a2200360200200329030021042002200341086a29030022053703102002200437030802402007450d00200641706a2103200141046a2108200141086a210703402004a72106024020082802002000470d002001200041011077200728020021002001280200210a0b200a20006a20063a00002007200041016a22003602002004420888200542388684210420054208882105200341016a22062003492109200621032009450d000b20022004370308200220053703100b200420058450450d010b200241306a24000f0b2002412c6a4100360200200241286a41b8c0cd003602002002420137021c200241f0d3ca00360218200241086a200241186a10cc0a000bee0301047f2000280200210202400240024002402000280208220341c000490d00200341808001490d012003418080808004490d020240200141046a2204280200200141086a22052802002200470d002001200041011077200528020021000b200128020020006a41033a00002005200041016a22003602000240200428020020006b41034b0d002001200041041077200141086a28020021000b200128020020006a2003360000200141086a200041046a22003602000c030b200341027421040240200141046a280200200141086a22052802002200470d002001200041011077200528020021000b200128020020006a20043a00002005200041016a22003602000c020b200341027441017221040240200141046a280200200141086a220528020022006b41014b0d002001200041021077200528020021000b200128020020006a20043b00002005200041026a22003602000c010b200341027441027221040240200141046a280200200141086a220528020022006b41034b0d002001200041041077200528020021000b200128020020006a20043600002005200041046a22003602000b0240200141046a28020020006b200341027422034f0d002001200020031077200141086a28020021000b200128020020006a2002200310d40b1a200141086a200020036a3602000b880101057f230041106b220124002001410036020820014201370300200110e102200128020021020240200041046a280200200041086a220328020022046b200128020822054f0d002000200420051077200328020021040b200028020020046a2002200510d40b1a2003200420056a36020002402001280204450d00200210390b200141106a24000b870601067f0240200141046a2202280200200141086a220328020022046b411f4b0d002001200441201077200328020021040b2001280200220520046a22062000290000370000200641186a200041186a290000370000200641106a200041106a290000370000200641086a200041086a2900003700002003200441206a2204360200200041206a210602402002280200220220046b411f4b0d002001200441201077200141046a2802002102200141086a2802002104200128020021050b200520046a22032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a290000370000200141086a2207200441206a2204360200200041c0006a21060240200220046b411f4b0d002001200441201077200141046a280200210220072802002104200128020021050b200520046a22032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002007200441206a2204360200200041e0006a21060240200220046b411f4b0d002001200441201077200141086a2802002104200128020021050b200520046a22052006290000370000200541186a200641186a290000370000200541106a200641106a290000370000200541086a200641086a290000370000200141086a2203200441206a220536020020004180016a21060240200141046a2204280200220220056b411f4b0d00200120054120107720042802002102200328020021050b2001280200220720056a22042006290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a2900003700002003200541206a22063602000240200220066b411f4b0d002001200641201077200141086a2802002106200128020021070b200720066a220520002900a001370000200541186a200041b8016a290000370000200541106a200041b0016a290000370000200541086a200041a8016a290000370000200141086a200641206a3602000b9a0d02017e057f200029030021020240200141046a2203280200200141086a220428020022056b41074b0d002001200541081077200428020021050b200128020020056a20023700002004200541086a2205360200200041106a2104200328020021030240024020002903084201510d00024020032005470d002001200541011077200141086a28020021050b200128020020056a41003a0000200141086a2206200541016a2205360200200429030021020240200141046a220728020020056b41074b0d002001200541081077200628020021050b200128020020056a20023700002006200541086a2203360200200041e0016a21050240200728020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22062005290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200141086a2206200341206a3602002004410c6a200110b502200041186a28020021030240200141046a2207280200200628020022056b41034b0d002001200541041077200628020021050b200128020020056a20033600002006200541046a22033602002004412c6a21050240200728020020036b413f4b0d002001200341c0001077200141086a28020021030b200128020020036a22042005290000370000200441386a200541386a290000370000200441306a200541306a290000370000200441286a200541286a290000370000200441206a200541206a290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a290000370000200141086a2204200341c0006a36020020004180016a200110b502200028027c21030240200141046a2206280200200428020022056b41034b0d002001200541041077200428020021050b200041a0016a2100200128020020056a20033600002004200541046a22053602000240200628020020056b413f4b0d002001200541c0001077200141086a28020021050b200128020020056a22042000290000370000200441386a200041386a290000370000200441306a200041306a290000370000200441286a200041286a290000370000200441206a200041206a290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700000c010b024020032005470d002001200541011077200141086a28020021050b200128020020056a41013a0000200141086a2206200541016a2205360200200429030021020240200141046a220728020020056b41074b0d002001200541081077200628020021050b200128020020056a20023700002006200541086a2203360200200041e0016a21050240200728020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22062005290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200141086a2206200341206a3602002004410c6a200110b502200041186a28020021030240200141046a2207280200200628020022056b41034b0d002001200541041077200628020021050b200128020020056a20033600002006200541046a22033602002004412c6a21050240200728020020036b413f4b0d002001200341c0001077200141086a28020021030b200128020020036a22042005290000370000200441386a200541386a290000370000200441306a200541306a290000370000200441286a200541286a290000370000200441206a200541206a290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a290000370000200141086a2204200341c0006a36020020004180016a200110b502200028027c21030240200141046a2206280200200428020022056b41034b0d002001200541041077200428020021050b200041a0016a2100200128020020056a20033600002004200541046a22053602000240200628020020056b413f4b0d002001200541c0001077200141086a28020021050b200128020020056a22042000290000370000200441386a200041386a290000370000200441306a200041306a290000370000200441286a200041286a290000370000200441206a200041206a290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700000b200141086a200541c0006a3602000b860a01087f230041106b220224002000280200210320012000280208220410ac0202402004450d002003200441c8006c6a2105200141086a22062802002104200141046a2107034020022003109601200228020021080240200728020020046b200228020822094f0d002001200420091077200628020021040b200128020020046a2008200910d40b1a2006200420096a220936020002402002280204450d00200810390b2002200341246a2208109601200228020021030240200728020020096b200228020822044f0d0020012009200410770b2001280200200628020022096a2003200410d40b1a2006200920046a220436020002402002280204450d00200310390b200841246a22032005470d000b0b20022000410c6a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b2002200041306a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b2002200041d4006a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b2002200041f8006a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b20022000419c016a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b200141046a2802002106200141086a28020021040240024020002d0088024101460d00024020062004470d002001200441011077200141086a28020021040b200128020020046a41003a0000200441016a21040c010b024020062004470d002001200441011077200141086a28020021040b200128020020046a41013a0000200141086a2203200441016a220436020020004189026a21060240200141046a28020020046b41134b0d002001200441141077200328020021040b200128020020046a22032006290000370000200341106a200641106a280000360000200341086a200641086a290000370000200441146a21040b200141086a220620043602002002200041c0016a109601200228020021090240200141046a280200200628020022046b200228020822034f0d002001200420031077200628020021040b200128020020046a2009200310d40b1a2006200420036a36020002402002280204450d00200910390b2002200041e4016a109601200228020021030240200141046a280200200141086a220928020022046b200228020822064f0d002001200420061077200928020021040b200128020020046a2003200610d40b1a2009200420066a36020002402002280204450d00200310390b200241106a24000bcd0402037f027e0240024002400240024002400240024020002802000e0700010203040506070b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41003a00002002200041016a3602000f0b0240200141046a2203280200200141086a22042802002202470d002001200241011077200428020021020b200128020020026a41013a00002004200241016a2202360200200041106a2903002105200029030821060240200328020020026b410f4b0d002001200241101077200141086a28020021020b200141086a200241106a360200200128020020026a22012005370008200120063700000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41023a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41033a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41043a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41053a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41063a00002002200041016a3602000b0be90201067f230041106b220224002002200041306a10c802200228020021030240200141046a280200200141086a220428020022056b200228020822064f0d002001200520061077200428020021050b2001280200220720056a2003200610d40b1a2004200520066a220636020002402002280204450d00200310390b0240200141046a2205280200220320066b412f4b0d00200120064130107720052802002103200141086a2802002106200128020021070b200720066a22052000290000370000200141086a2204200641306a2206360200200541286a200041286a290000370000200541206a200041206a290000370000200541186a200041186a290000370000200541106a200041106a290000370000200541086a200041086a29000037000020002802f00121000240200320066b41034b0d00200120064104107720042802002106200128020021070b200720066a20003600002004200641046a360200200241106a24000bf30201057f200141037621030240024002402001418004490d00200341027421042001418080084f0d01200441017221050240200241046a280200200241086a220628020022046b41014b0d002002200441021077200628020021040b2002280200220720046a20053b00002006200441026a22043602000c020b200341027421050240200241046a280200200241086a22062802002204470d002002200441011077200628020021040b2002280200220720046a20053a00002006200441016a22043602000c010b200441027221050240200241046a280200200241086a220628020022046b41034b0d002002200441041077200628020021040b2002280200220720046a20053600002006200441046a22043602000b0240200241046a28020020046b200320014107716a220141037620014107714100476a22014f0d002002200420011077200241086a2802002104200228020021070b200720046a2000200110d40b1a200241086a200420016a3602000b8e0801067f200028020021020240200141046a2203280200200141086a220428020022056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a360200200041046a200110b502200041246a210502402003280200200428020022026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042005290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a290000370000200141086a2203200241206a360200200041c4006a200110b502200041e4006a200110b50220004184016a200110b502200041a4016a21050240200141046a280200200328020022026b413f4b0d002001200241c0001077200328020021020b200128020020026a22042005290000370000200441386a200541386a290000370000200441306a200541306a290000370000200441286a200541286a290000370000200441206a200541206a290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a2900003700002003200241c0006a360200200041e4016a200110b50220004184026a200110b50220002802a40221052001200041ac026a280200220410ac0202402004450d0020052004410c6c6a210403402005280200200541086a280200200110b9022005410c6a22052004470d000b0b200041b0026a28020021052001200041b8026a280200220410ac0202402004450d00200520044104746a2106200141086a2102200141046a210703402005280200210302402007280200200228020022046b41034b0d002001200441041077200228020021040b200128020020046a20033600002002200441046a360200200541046a2802002005410c6a280200200110b902200541106a22052006470d000b0b200141046a2802002104200141086a280200210502400240200041bc026a28020022020d00024020042005470d002001200541011077200141086a28020021050b200128020020056a41003a0000200141086a200541016a3602000c010b024020042005470d002001200541011077200141086a28020021050b200128020020056a41013a0000200141086a200541016a3602002002200041c4026a280200200110b9020b200041c8026a280200200041d0026a280200200110b902200041d4026a28020021020240200141046a2203280200200141086a220428020022056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200041d8026a28020021040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a200541046a3602000be20f02047f017e200141046a21020340024020002d00002203410a460d000240024002400240024002400240024002400240024020030e0a000102030405060708090a0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41003a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0903402003200110840a20034198046a2103200041e87b6a22000d000c0a0b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41013a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0803402003200110840a20034198046a2103200041e87b6a22000d000c090b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41023a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0703402003200110840a20034198046a2103200041e87b6a22000d000c080b0b200041106a21050240200141046a2202280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41033a00002004200341016a3602002005200110dd020240200228020020042802002203470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602002000280204210320012000410c6a280200220010ac02200041f8036c2200450d0603402003200110ec02200341f8036a2103200041887c6a22000d000c070b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200041106a2105200128020020036a41043a00002004200341016a3602002000280204210320012000410c6a280200220010ac020240200041f8036c2200450d0003402003200110ec02200341f8036a2103200041887c6a22000d000b0b2005200110eb020f0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200041206a2105200128020020036a41053a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b2005200110eb02200028021021032001200041186a280200220010ac0220004198046c2200450d0403402003200110840a20034198046a2103200041e87b6a22000d000c050b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41063a00002004200341016a22033602000240024002400240024020002d00010e0400010203000b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000b200029031821060240200141046a28020020036b41074b0d002001200341081077200141086a28020021030b200128020020036a2006370000200141086a200341086a36020020002802042000410c6a280200200110b9020f0b2000410c6a2104200041086a2105200041046a21020240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41073a00002003200041016a3602002002200110db022005200110db022004200110db020f0b200041046a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41083a00002003200041016a3602002004200110db020f0b2000410c6a2104200041086a2105200041046a21020240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41093a00002003200041016a3602002002200110db022005200110db022004200110db020b0f0b200041086a210502402002280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a410a3a00002004200341016a3602002005200110eb02200028020421000c000b0bf80501057f200141046a2802002102200141086a2802002103024020002d000022044103470d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b2001280200220220036a41013a0000200141086a200341016a2203360200024002400240024020040e03000102030b0240200141046a220428020022052003470d00200120034101107720042802002105200141086a2802002103200128020021020b200220036a41003a0000200141086a2206200341016a2204360200200041016a21030240200520046b411f4b0d00200120044120107720062802002104200128020021020b200220046a22012003290000370000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a2900003700002006200441206a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a2802002103200128020021020b200220036a41013a0000200141086a2205200341016a2204360200200041016a21030240200628020020046b411f4b0d00200120044120107720052802002104200128020021020b200220046a22012003290000370000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a2900003700002005200441206a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a2802002103200128020021020b200220036a41023a0000200141086a2205200341016a2204360200200041016a21030240200628020020046b41204b0d00200120044121107720052802002104200128020021020b200220046a22012003290000370000200141206a200341206a2d00003a0000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a2900003700002005200441216a3602000b0b8f0901097f024002400240024002400240024002400240024020002802000e09000102030405060708090b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41003a00002002200041016a3602000f0b200041086a21030240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41013a00002002200041016a36020020032001109f080f0b200041c0006a2103200041086a21040240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41023a00002002200041016a36020020042001109f0820032001109f080f0b200041f8006a2103200041c0006a2104200041086a21050240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41033a00002002200041016a36020020052001109f0820042001109f0820032001109f080f0b200041b0016a2103200041f8006a2104200041c0006a2105200041086a21060240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41043a00002002200041016a36020020062001109f0820052001109f0820042001109f0820032001109f080f0b200041e8016a2103200041b0016a2104200041f8006a2105200041c0006a2106200041086a21070240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41053a00002002200041016a36020020072001109f0820062001109f0820052001109f0820042001109f0820032001109f080f0b200041a0026a2103200041e8016a2104200041b0016a2105200041f8006a2106200041c0006a2107200041086a21080240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41063a00002002200041016a36020020082001109f0820072001109f0820062001109f0820052001109f0820042001109f0820032001109f080f0b200041d8026a2103200041a0026a2104200041e8016a2105200041b0016a2106200041f8006a2107200041c0006a2108200041086a21090240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41073a00002002200041016a36020020092001109f0820082001109f0820072001109f0820062001109f0820052001109f0820042001109f0820032001109f080f0b20004190036a2103200041d8026a2104200041a0026a2105200041e8016a2106200041b0016a2107200041f8006a2108200041c0006a2109200041086a210a0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41083a00002002200041016a360200200a2001109f0820092001109f0820082001109f0820072001109f0820062001109f0820052001109f0820042001109f0820032001109f080b0bb30801047f230041106b22022400024002400240024002400240024002400240024002400240024020002802000e0c000102030405060708090a0b0c0b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41003a00002003200041016a3602000c0b0b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41013a00002003200041016a3602000c0a0b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41023a00002003200041016a3602000c090b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41033a00002003200041016a3602000c080b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41043a00002004200341016a36020020002802042000410c6a280200200110b9020c070b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41053a00002004200341016a36020020002802042000410c6a280200200110b9020c060b200041086a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41063a00002003200041016a3602002004200110eb020c050b200041086a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41073a00002003200041016a3602002004200110eb020c040b200041106a21050240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41083a00002004200341016a36020020002802042000410c6a280200200110b90220022005360208200241086a200110df020c030b200041106a21050240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41093a00002004200341016a36020020002802042000410c6a280200200110b9022005200110810b0c020b200041d0036a2104200041086a21050240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a410a3a00002003200041016a3602002005200110eb022002200436020c2002410c6a200110df020c010b200041d0036a2104200041086a21050240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a410b3a00002003200041016a3602002005200110eb022004200110810b0b200241106a24000be70f02047f017e200141046a21020340024020002d00002203410a460d000240024002400240024002400240024002400240024020030e0a000102030405060708090a0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41003a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0903402003200110830a20034198046a2103200041e87b6a22000d000c0a0b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41013a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0803402003200110830a20034198046a2103200041e87b6a22000d000c090b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41023a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b200028021021032001200041186a280200220010ac0220004198046c2200450d0703402003200110830a20034198046a2103200041e87b6a22000d000c080b0b200041106a21050240200141046a2202280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41033a00002004200341016a3602002005200110dd020240200228020020042802002203470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602002000280204210320012000410c6a280200220010ac02200041f8036c2200450d0603402003200110ec02200341f8036a2103200041887c6a22000d000c070b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200041106a2105200128020020036a41043a00002004200341016a3602002000280204210320012000410c6a280200220010ac020240200041f8036c2200450d0003402003200110ec02200341f8036a2103200041887c6a22000d000b0b2005200110eb020f0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200041206a2105200128020020036a41053a00002004200341016a3602002000280204210320012000410c6a280200220410ac020240200441f8036c2204450d0003402003200110ec02200341f8036a2103200441887c6a22040d000b0b2005200110eb02200028021021032001200041186a280200220010ac0220004198046c2200450d0403402003200110840a20034198046a2103200041e87b6a22000d000c050b0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41063a00002004200341016a22033602000240024002400240024020002d00010e0400010203000b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000b200029030821060240200141046a28020020036b41074b0d002001200341081077200141086a28020021030b200128020020036a2006370000200141086a200341086a360200200041d0076a280200200041d8076a280200200110b9020f0b2000410c6a2104200041086a2105200041046a21020240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41073a00002003200041016a3602002002200110db022005200110db022004200110db020f0b200041046a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41083a00002003200041016a3602002004200110db020f0b2000410c6a2104200041086a2105200041046a21020240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41093a00002003200041016a3602002002200110db022005200110db022004200110db020b0f0b200041086a210502402002280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a410a3a00002004200341016a3602002005200110eb02200028020421000c000b0b040041010b040041010b040041010bb40201017f410121020240024002400240024002400240200041ff01710e06050001020304050b41002102024002400240024020012802000e140303030008030303030303030303010203080303080b20012d0004220141054b0d074101200174412a710d020c070b20012d00042201417b6a4105490d0120014101460d010c060b200141086a280200417f6a41014b0d050b41010f0b4100210220012802002201410c4b0d03410120017441c02271450d0341010f0b4100210202400240200128020041746a0e06010404040400040b200141086a2802004101470d032001410c6a2802002802004104460f0b41010f0b4100210202400240200128020041746a0e020100030b200141086a2d0000410a470d020b41010f0b4100210220012802004112460d010b20020f0b20012d00044109460b8c0801077f23004190036b22022400200241e8026a200110860202400240024002400240024020022d00e8024101460d00200241c8016a41186a20024181036a2203290000370300200241c8016a41106a200241f9026a2204290000370300200241c8016a41086a200241f1026a2205290000370300200220022900e9023703c801200241e8026a200110860220022d00e8024101460d01200241e8016a41186a2003290000370300200241e8016a41106a2004290000370300200241e8016a41086a2005290000370300200220022900e9023703e801200241e8026a200110860220022d00e8024101460d0220024188026a41186a20024181036a220329000037030020024188026a41106a200241f9026a220429000037030020024188026a41086a200241f1026a2205290000370300200220022900e90237038802200241e8026a200110860220022d00e8024101460d03200241a8026a41186a2003290000370300200241a8026a41106a2004290000370300200241a8026a41086a2005290000370300200220022900e9023703a802200241e8026a200110860220022d00e8024101460d04200241c8026a41186a220320024181036a2204290000370300200241c8026a41106a2205200241f9026a2206290000370300200241c8026a41086a2207200241f1026a2208290000370300200220022900e9023703c802200241e8026a2001108602024020022d00e8024101460d00200241c0016a2004290000370300200241b8016a2006290000370300200241b0016a2008290000370300200241086a41086a200241c8016a41086a290300370300200241086a41106a200241c8016a41106a290300370300200241086a41186a200241c8016a41186a290300370300200220022900e9023703a801200220022903c801370308200241c0006a200241e8016a41186a290300370300200241386a200241e8016a41106a290300370300200241306a200241e8016a41086a290300370300200220022903e801370328200241e0006a20024188026a41186a290300370300200241d8006a20024188026a41106a290300370300200241d0006a20024188026a41086a290300370300200220022903880237034820024180016a200241a8026a41186a290300370300200241f8006a200241a8026a41106a290300370300200241f0006a200241a8026a41086a290300370300200220022903a802370368200241a0016a200329030037030020024198016a200529030037030020024190016a2007290300370300200220022903c80237038801200041016a200241086a41c00110d40b1a200041003a00000c060b200041013a00000c050b200041013a00000c040b200041013a00000c030b200041013a00000c020b200041013a00000c010b200041013a00000b20024190036a24000bd3990107077f027e247f017e2f7f017e087f230041d0126b22022400200241f8116a2001108c0202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802f8110d0020022802fc11220320012802002802044103762204200420034b1b22044103742205417f4c0d034104210602402004450d00200510382206450d030b2001200128020441016a22053602042002410036029812200220043602941220022006360290120240200520012802084b0d00200141046a2107024002402003450d00410021040340200241f0116a2001108c0220022802f0110d0220022802f4112105200241e8116a200110f40220022f01e8110d0220022f01ea11210802402004200228029412470d0020024190126a2004410110c902200228029012210620022802981221040b200620044103746a220420083b010420042005360200200220022802981241016a2204360298122003417f6a22030d000b2007280200210520022802901221060b20072005417f6a3602002006450d0202402002290294122209422088a74103742205450d002005417f2005417f4a1b2204410120044101481b410020056b22042005200420054a1b4103766c210320062104034020042004290200220a3e0200200441046a200a4220883d0100200441086a21042003417f6a22030d000b0b2009a72108200241e0116a2001108c0220022802e011450d030c2f0b20022802941221040b200441ffffffff0171450d0020022802901210390b200041003602000c2e0b20022802e41122032001280200280204410c6e2204200420034b1bad420c7e220a422088a70d01200aa72204417f4c0d010240024020040d004104210b0c010b20041038220b450d010b2001200128020441016a220c36020420024100360298122002200b3602901220022004410c6e22043602941202400240200c20012802084b0d00024002402003450d00410021040340200241d8116a2001108c0220022802d8110d0220022802dc11210c200241d0116a200110f40220022f01d0110d0220022f01d211210d200241c8116a200110f40220022f01c8110d0220022f01ca11210e200241c0116a200110f40220022f01c0110d0220022f01c211210f02402004200228029412470d0020024190126a2004410110ec01200228029012210b20022802981221040b200b2004410c6c6a2204200f3b01082004200d3b01042004200c360200200441066a200e3b0100200220022802981241016a2204360298122003417f6a22030d000b2007280200210c200228029012210b0b2007200c417f6a360200200b450d2e200229029412210a200241b8116a2001108c02200a422088a7410c6c410c6d2110200aa7210420022802b811450d020c2c0b20022802941221040b2004450d2c2004410c6c450d2c20022802901210390c2c0b4104210d20022802bc11220c200128020028020441047622032003200c4b1b2203410474220e417f4c0d0102402003450d00200e1038220d450d010b2001200128020441016a220e360204200241003602881220022003360284122002200d36028012200e20012802084b0d280240200c450d00410021032002419a126a211120024198126a21120340200241b0116a2001108c0220022802b0110d2a20022802b411210f200241a8116a200110f40220022f01a8110d2a20022f01aa11210e200241a0116a200110f40220022f01a0110d2a200220022f01a2113b0196122002200e3b01941220024198116a200110f40220022f0198110d2a20022f019a11210e20024190116a200110f40220022f0190110d2a201120022f0192113b01002012200e3b0100200229029412210a20024188116a200110f40220022f0188110d2a20022f018a11211302402003200228028412470d0020024180126a2003410110cb02200228028012210d20022802881221030b200d20034104746a220e20133b010c200e200a370204200e200f3602002002200341016a220336028812200c417f6a220c0d000b2007280200210e200228028012210d0b2007200e417f6a360200200d450d29200229028412210a20024180116a2001108c02200aa7210c2002280280110d26200228028411220e200128020028020441146e22032003200e4b1bad42147e2209422088a70d012009a72203417f4c0d010240024020030d00410421130c010b200310382213450d010b2001200128020441016a220f360204200241003602881220022013360280122002200341146e36028412200f20012802084b0d250240200e450d004100210f20024190126a410a6a211420024198126a21152002419e126a211620024190126a410c6a21110340200241f8106a2001108c0220022802f8100d2720022802fc102112200241f0106a200110f40220022f01f0100d2720022f01f2102103200241e8106a200110f40220022f01e8100d27200220022f01ea103b019612200220033b019412200241e0106a200110f40220022f01e0100d2720022f01e2102103200241d8106a200110f40220022f01d8100d27201420022f01da103b0100201520033b0100200241d0106a200110f40220022f01d0100d2720022f01d2102103200241c8106a200110f40220022f01c8100d27201620022f01ca103b0100201120033b01002011280200211720022f0194122118200228019612211920022f019a12211a200241c0106a200110f40220022f01c0100d2720022f01c210211b0240200f200228028412470d0020024180126a200f410110cc022002280280122113200228028812210f0b2013200f41146c6a2203201b3b0110200320183b0104200320123602002003410c6a20173601002003410a6a201a3b0100200341066a20193601002002200f41016a220f36028812200e417f6a220e0d000b2007280200210f20022802801221130b2007200f417f6a3602002013450d262002290284122109200241b8106a2001108c022009422088a741146c41146d21182009a7210320022802b8100d2320022802bc10220f200128020028020441186e220e200e200f4b1bad42187e2209422088a70d012009a7220e417f4c0d0102400240200e0d00410421120c010b200e10382212450d010b2001200128020441016a2211360204200241003602881220022012360280122002200e41186e36028412201120012802084b0d220240200f450d004100211120024190126a410a6a211c20024198126a211d2002419e126a211e20024190126a410c6a211f200241a2126a212020024190126a41106a21190340200241b0106a2001108c0220022802b0100d2420022802b410211a200241a8106a200110f40220022f01a8100d2420022f01aa10210e200241a0106a200110f40220022f01a0100d24200220022f01a2103b0196122002200e3b01941220024198106a200110f40220022f0198100d2420022f019a10210e20024190106a200110f40220022f0190100d24201c20022f0192103b0100201d200e3b010020024188106a200110f40220022f0188100d2420022f018a10210e20024180106a200110f40220022f0180100d24201e20022f0182103b0100201f200e3b0100200241f80f6a200110f40220022f01f80f0d2420022f01fa0f210e200241f00f6a200110f40220022f01f00f0d24202020022f01f20f3b01002019200e3b01002019280200211620022f0194122117200228019612211b20022f019a122114200228029c122115200241e80f6a200110f40220022f01e80f0d2420022f01ea0f212102402011200228028412470d0020024180126a2011410110cd02200228028012211220022802881221110b2012201141186c6a220e20213b0114200e20173b0104200e201a360200200e41106a2016360100200e410c6a2015360100200e410a6a20143b0100200e41066a201b3601002002201141016a221136028812200f417f6a220f0d000b2007280200211120022802801221120b20072011417f6a3602002012450d232002290284122109200241e00f6a2001108c022009422088a741186c41186d21172009a7210e20022802e00f0d2020022802e40f22112001280200280204411c6e220f200f20114b1bad421c7e2209422088a70d012009a7220f417f4c0d0102400240200f0d00410421190c010b200f10382219450d010b2001200128020441016a221a360204200241003602881220022019360280122002200f411c6e36028412201a20012802084b0d1f02402011450d004100211a20024190126a410a6a211d20024198126a211e2002419e126a211f20024190126a410c6a2120200241a2126a212220024190126a41106a2123200241a6126a2124200241a4126a21250340200241d80f6a2001108c0220022802d80f0d2120022802dc0f211b200241d00f6a200110f40220022f01d00f0d2120022f01d20f210f200241c80f6a200110f40220022f01c80f0d21200220022f01ca0f3b0196122002200f3b019412200241c00f6a200110f40220022f01c00f0d2120022f01c20f210f200241b80f6a200110f40220022f01b80f0d21201d20022f01ba0f3b0100201e200f3b0100200241b00f6a200110f40220022f01b00f0d2120022f01b20f210f200241a80f6a200110f40220022f01a80f0d21201f20022f01aa0f3b01002020200f3b0100200241a00f6a200110f40220022f01a00f0d2120022f01a20f210f200241980f6a200110f40220022f01980f0d21202220022f019a0f3b01002023200f3b0100200241900f6a200110f40220022f01900f0d2120022f01920f210f200241880f6a200110f40220022f01880f0d21202420022f018a0f3b01002025200f3b010020022f0194122114200228019612211520022f019a122116200228029c12212120022903a0122109200241800f6a200110f40220022f01800f0d2120022f01820f211c0240201a200228028412470d0020024180126a201a410110ce022002280280122119200228028812211a0b2019201a411c6c6a220f201c3b0118200f20143b0104200f201b360200200f41106a2009370100200f410c6a2021360100200f410a6a20163b0100200f41066a20153601002002201a41016a221a360288122011417f6a22110d000b2007280200211a20022802801221190b2007201a417f6a3602002019450d202002290284122109200241f80e6a2001108c022009422088a7411c6c411c6d21142009a7210f20022802f80e0d1d20022802fc0e221a200128020028020441057622112011201a4b1b2211410574221b417f4c0d010240024020110d004104211b0c010b201b1038221b450d010b2001200128020441016a2215360204200241003602881220022011360284122002201b36028012201520012802084b0d1c0240201a450d004100211520024190126a410a6a212620024198126a21272002419e126a212820024190126a410c6a212920024190126a41126a212a20024190126a41106a212b20024190126a41166a212c200241a4126a212d200241aa126a212e20024190126a41186a21160340200241f00e6a2001108c0220022802f00e0d1e20022802f40e2121200241e80e6a200110f40220022f01e80e0d1e20022f01ea0e2111200241e00e6a200110f40220022f01e00e0d1e200220022f01e20e3b019612200220113b019412200241d80e6a200110f40220022f01d80e0d1e20022f01da0e2111200241d00e6a200110f40220022f01d00e0d1e202620022f01d20e3b0100202720113b0100200241c80e6a200110f40220022f01c80e0d1e20022f01ca0e2111200241c00e6a200110f40220022f01c00e0d1e202820022f01c20e3b0100202920113b0100200241b80e6a200110f40220022f01b80e0d1e20022f01ba0e2111200241b00e6a200110f40220022f01b00e0d1e202a20022f01b20e3b0100202b20113b0100200241a80e6a200110f40220022f01a80e0d1e20022f01aa0e2111200241a00e6a200110f40220022f01a00e0d1e202c20022f01a20e3b0100202d20113b0100200241980e6a200110f40220022f01980e0d1e20022f019a0e2111200241900e6a200110f40220022f01900e0d1e202e20022f01920e3b0100201620113b01002016280200212420022f019412211c200228019612211d20022f019a12211e200228029c12211f20022f01a012212020022801a212212220022f01a6122123200241880e6a200110f40220022f01880e0d1e20022f018a0e212502402015200228028412470d0020024180126a2015410110cf02200228028012211b20022802881221150b201b20154105746a221120253b011c2011201c3b010420112021360200201141186a2024360100201141166a20233b0100201141126a2022360100201141106a20203b01002011410c6a201f3601002011410a6a201e3b0100201141066a201d3601002002201541016a221536028812201a417f6a221a0d000b20072802002115200228028012211b0b20072015417f6a360200201b450d1d2002290284122109200241800e6a2001108c022009a7211120022802800e0d1a20022802840e2215200128020028020441246e221a201a20154b1bad42247e222f422088a70d01202fa7221a417f4c0d0102400240201a0d00410421160c010b201a10382216450d010b2001200128020441016a2221360204200241003602881220022016360280122002201a41246e36028412202120012802084b0d1902402015450d004100212120024190126a410a6a211e20024198126a211f2002419e126a212a20024190126a410c6a212b20024190126a41126a212d20024190126a41106a212e20024190126a41166a2130200241a4126a2131200241aa126a213220024190126a41186a2133200241ae126a213420024190126a411c6a211c0340200241f80d6a2001108c0220022802f80d0d1b20022802fc0d211d200241f00d6a200110f40220022f01f00d0d1b20022f01f20d211a200241e80d6a200110f40220022f01e80d0d1b200220022f01ea0d3b0196122002201a3b019412200241e00d6a200110f40220022f01e00d0d1b20022f01e20d211a200241d80d6a200110f40220022f01d80d0d1b201e20022f01da0d3b0100201f201a3b0100200241d00d6a200110f40220022f01d00d0d1b20022f01d20d211a200241c80d6a200110f40220022f01c80d0d1b202a20022f01ca0d3b0100202b201a3b0100200241c00d6a200110f40220022f01c00d0d1b20022f01c20d211a200241b80d6a200110f40220022f01b80d0d1b202d20022f01ba0d3b0100202e201a3b0100200241b00d6a200110f40220022f01b00d0d1b20022f01b20d211a200241a80d6a200110f40220022f01a80d0d1b203020022f01aa0d3b01002031201a3b0100200241a00d6a200110f40220022f01a00d0d1b20022f01a20d211a200241980d6a200110f40220022f01980d0d1b203220022f019a0d3b01002033201a3b0100200241900d6a200110f40220022f01900d0d1b20022f01920d211a200241880d6a200110f40220022f01880d0d1b203420022f018a0d3b0100201c201a3b0100201c280200212920022f0194122120200228019612212220022f019a122123200228029c12212420022f01a012212520022801a212212620022f01a612212720022802a8122128200241800d6a200110f40220022f01800d0d1b20022f01820d212c02402021200228028412470d0020024180126a2021410110d002200228028012211620022802881221210b2016202141246c6a221a202c3b0120201a20203b0104201a201d360200201a411c6a2029360100201a41186a2028360100201a41166a20273b0100201a41126a2026360100201a41106a20253b0100201a410c6a2024360100201a410a6a20233b0100201a41066a20223601002002202141016a2221360288122015417f6a22150d000b2007280200212120022802801221160b20072021417f6a3602002016450d1a200229028412212f200241f80c6a2001108c02202f422088a741246c41246d211d202fa7211a20022802f80c0d1720022802fc0c2221200128020028020441286e2215201520214b1bad42287e222f422088a70d01202fa72215417f4c0d010240024020150d004104211c0c010b20151038221c450d010b2001200128020441016a221e36020420024100360288122002201c360280122002201541286e36028412201e20012802084b0d1602402021450d004100211e20024190126a410a6a212020024198126a21222002419e126a212320024190126a410c6a212420024190126a41126a212520024190126a41106a212620024190126a41166a2127200241a4126a2128200241aa126a213320024190126a41186a2134200241ae126a213520024190126a411c6a2136200241b2126a2137200241b0126a21380340200241f00c6a2001108c0220022802f00c0d1820022802f40c211f200241e80c6a200110f40220022f01e80c0d1820022f01ea0c2115200241e00c6a200110f40220022f01e00c0d18200220022f01e20c3b019612200220153b019412200241d80c6a200110f40220022f01d80c0d1820022f01da0c2115200241d00c6a200110f40220022f01d00c0d18202020022f01d20c3b0100202220153b0100200241c80c6a200110f40220022f01c80c0d1820022f01ca0c2115200241c00c6a200110f40220022f01c00c0d18202320022f01c20c3b0100202420153b0100200241b80c6a200110f40220022f01b80c0d1820022f01ba0c2115200241b00c6a200110f40220022f01b00c0d18202520022f01b20c3b0100202620153b0100200241a80c6a200110f40220022f01a80c0d1820022f01aa0c2115200241a00c6a200110f40220022f01a00c0d18202720022f01a20c3b0100202820153b0100200241980c6a200110f40220022f01980c0d1820022f019a0c2115200241900c6a200110f40220022f01900c0d18203320022f01920c3b0100203420153b0100200241880c6a200110f40220022f01880c0d1820022f018a0c2115200241800c6a200110f40220022f01800c0d18203520022f01820c3b0100203620153b0100200241f80b6a200110f40220022f01f80b0d1820022f01fa0b2115200241f00b6a200110f40220022f01f00b0d18203720022f01f20b3b0100203820153b010020022f0194122129200228019612212a20022f019a12212b200228029c12212c20022f01a012212d20022801a212212e20022f01a612213020022802a812213120022902ac12212f200241e80b6a200110f40220022f01e80b0d1820022f01ea0b21320240201e200228028412470d0020024180126a201e410110d102200228028012211c200228028812211e0b201c201e41286c6a221520323b0124201520293b01042015201f3602002015411c6a202f370100201541186a2031360100201541166a20303b0100201541126a202e360100201541106a202d3b01002015410c6a202c3601002015410a6a202b3b0100201541066a202a3601002002201e41016a221e360288122021417f6a22210d000b2007280200211e200228028012211c0b2007201e417f6a360200201c450d17200229028412212f200241e00b6a2001108c02202f422088a741286c41286d211f202fa7211520022802e00b0d1420022802e40b221e2001280200280204412c6e22212021201e4b1bad422c7e222f422088a70d01202fa72221417f4c0d010240024020210d00410421200c010b202110382220450d010b2001200128020441016a22223602042002410036028812200220203602801220022021412c6e36028412202220012802084b0d130240201e450d004100212220024190126a410a6a212520024198126a21262002419e126a212720024190126a410c6a212820024190126a41126a212920024190126a41106a212a20024190126a41166a212b200241a4126a212c200241aa126a212d20024190126a41186a212e20024190126a411e6a213020024190126a411c6a213120024190126a41226a2139200241b0126a213a200241b6126a213b20024190126a41246a21230340200241d80b6a2001108c0220022802d80b0d1520022802dc0b2124200241d00b6a200110f40220022f01d00b0d1520022f01d20b2121200241c80b6a200110f40220022f01c80b0d15200220022f01ca0b3b019612200220213b019412200241c00b6a200110f40220022f01c00b0d1520022f01c20b2121200241b80b6a200110f40220022f01b80b0d15202520022f01ba0b3b0100202620213b0100200241b00b6a200110f40220022f01b00b0d1520022f01b20b2121200241a80b6a200110f40220022f01a80b0d15202720022f01aa0b3b0100202820213b0100200241a00b6a200110f40220022f01a00b0d1520022f01a20b2121200241980b6a200110f40220022f01980b0d15202920022f019a0b3b0100202a20213b0100200241900b6a200110f40220022f01900b0d1520022f01920b2121200241880b6a200110f40220022f01880b0d15202b20022f018a0b3b0100202c20213b0100200241800b6a200110f40220022f01800b0d1520022f01820b2121200241f80a6a200110f40220022f01f80a0d15202d20022f01fa0a3b0100202e20213b0100200241f00a6a200110f40220022f01f00a0d1520022f01f20a2121200241e80a6a200110f40220022f01e80a0d15203020022f01ea0a3b0100203120213b0100200241e00a6a200110f40220022f01e00a0d1520022f01e20a2121200241d80a6a200110f40220022f01d80a0d15203920022f01da0a3b0100203a20213b0100200241d00a6a200110f40220022f01d00a0d1520022f01d20a2121200241c80a6a200110f40220022f01c80a0d15203b20022f01ca0a3b0100202320213b01002023280200213c20022f0194122132200228019612213320022f019a122134200228029c12213520022f01a012213620022801a212213720022f01a612213820022802a812213d20022f01ac12213e20022801ae12213f20022f01b2122140200241c00a6a200110f40220022f01c00a0d1520022f01c20a214102402022200228028412470d0020024180126a2022410110d202200228028012212020022802881221220b20202022412c6c6a222120413b0128202120323b010420212024360200202141246a203c360100202141226a20403b01002021411e6a203f3601002021411c6a203e3b0100202141186a203d360100202141166a20383b0100202141126a2037360100202141106a20363b01002021410c6a20353601002021410a6a20343b0100202141066a20333601002002202241016a222236028812201e417f6a221e0d000b2007280200212220022802801221200b20072022417f6a3602002020450d14200229028412212f200241b80a6a2001108c02202f422088a7412c6c412c6d2123202fa7212120022802b80a0d1120022802bc0a2222200128020028020441306e221e201e20224b1bad42307e222f422088a70d01202fa7221e417f4c0d0102400240201e0d00410421240c010b201e10382224450d010b2001200128020441016a2225360204200241003602881220022024360280122002201e41306e36028412202520012802084b0d1002402022450d004100212520024190126a410a6a212820024198126a21292002419e126a212a20024190126a410c6a212b20024190126a41126a212c20024190126a41106a212d20024190126a41166a212e200241a4126a2130200241aa126a213120024190126a41186a213220024190126a411e6a213320024190126a411c6a213420024190126a41226a2135200241b0126a2136200241b6126a213720024190126a41246a2138200241ba126a213d20024190126a41286a21260340200241b00a6a2001108c0220022802b00a0d1220022802b40a2127200241a80a6a200110f40220022f01a80a0d1220022f01aa0a211e200241a00a6a200110f40220022f01a00a0d12200220022f01a20a3b0196122002201e3b019412200241980a6a200110f40220022f01980a0d1220022f019a0a211e200241900a6a200110f40220022f01900a0d12202820022f01920a3b01002029201e3b0100200241880a6a200110f40220022f01880a0d1220022f018a0a211e200241800a6a200110f40220022f01800a0d12202a20022f01820a3b0100202b201e3b0100200241f8096a200110f40220022f01f8090d1220022f01fa09211e200241f0096a200110f40220022f01f0090d12202c20022f01f2093b0100202d201e3b0100200241e8096a200110f40220022f01e8090d1220022f01ea09211e200241e0096a200110f40220022f01e0090d12202e20022f01e2093b01002030201e3b0100200241d8096a200110f40220022f01d8090d1220022f01da09211e200241d0096a200110f40220022f01d0090d12203120022f01d2093b01002032201e3b0100200241c8096a200110f40220022f01c8090d1220022f01ca09211e200241c0096a200110f40220022f01c0090d12203320022f01c2093b01002034201e3b0100200241b8096a200110f40220022f01b8090d1220022f01ba09211e200241b0096a200110f40220022f01b0090d12203520022f01b2093b01002036201e3b0100200241a8096a200110f40220022f01a8090d1220022f01aa09211e200241a0096a200110f40220022f01a0090d12203720022f01a2093b01002038201e3b010020024198096a200110f40220022f0198090d1220022f019a09211e20024190096a200110f40220022f0190090d12203d20022f0192093b01002026201e3b01002026280200214220022f019412213e200228019612213f20022f019a122140200228029c12213c20022f01a012213920022801a212213a20022f01a612214120022802a812213b20022f01ac12214320022801ae12214420022f01b212214520022802b412214620024188096a200110f40220022f0188090d1220022f018a09214702402025200228028412470d0020024180126a2025410110d302200228028012212420022802881221250b2024202541306c6a221e20473b012c201e203e3b0104201e2027360200201e41286a2042360100201e41246a2046360100201e41226a20453b0100201e411e6a2044360100201e411c6a20433b0100201e41186a203b360100201e41166a20413b0100201e41126a203a360100201e41106a20393b0100201e410c6a203c360100201e410a6a20403b0100201e41066a203f3601002002202541016a2225360288122022417f6a22220d000b2007280200212520022802801221240b20072025417f6a3602002024450d11200229028412212f20024180096a2001108c02202f422088a741306c41306d2126202fa7211e2002280280090d0e2002280284092225200128020028020441346e2222202220254b1bad42347e222f422088a70d01202fa72222417f4c0d010240024020220d00410421270c010b202210382227450d010b2001200128020441016a2228360204200241003602881220022027360280122002202241346e36028412202820012802084b0d0d02402025450d004100212820024190126a410a6a212a20024198126a212b2002419e126a212c20024190126a410c6a212d20024190126a41126a212e20024190126a41106a213020024190126a41166a2131200241a4126a2132200241aa126a213320024190126a41186a213420024190126a411e6a213520024190126a411c6a213620024190126a41226a2137200241b0126a2138200241b6126a213d20024190126a41246a213e200241ba126a213f20024190126a41286a2140200241be126a213c200241bc126a21390340200241f8086a2001108c0220022802f8080d0f20022802fc082129200241f0086a200110f40220022f01f0080d0f20022f01f2082122200241e8086a200110f40220022f01e8080d0f200220022f01ea083b019612200220223b019412200241e0086a200110f40220022f01e0080d0f20022f01e2082122200241d8086a200110f40220022f01d8080d0f202a20022f01da083b0100202b20223b0100200241d0086a200110f40220022f01d0080d0f20022f01d2082122200241c8086a200110f40220022f01c8080d0f202c20022f01ca083b0100202d20223b0100200241c0086a200110f40220022f01c0080d0f20022f01c2082122200241b8086a200110f40220022f01b8080d0f202e20022f01ba083b0100203020223b0100200241b0086a200110f40220022f01b0080d0f20022f01b2082122200241a8086a200110f40220022f01a8080d0f203120022f01aa083b0100203220223b0100200241a0086a200110f40220022f01a0080d0f20022f01a208212220024198086a200110f40220022f0198080d0f203320022f019a083b0100203420223b010020024190086a200110f40220022f0190080d0f20022f019208212220024188086a200110f40220022f0188080d0f203520022f018a083b0100203620223b010020024180086a200110f40220022f0180080d0f20022f0182082122200241f8076a200110f40220022f01f8070d0f203720022f01fa073b0100203820223b0100200241f0076a200110f40220022f01f0070d0f20022f01f2072122200241e8076a200110f40220022f01e8070d0f203d20022f01ea073b0100203e20223b0100200241e0076a200110f40220022f01e0070d0f20022f01e2072122200241d8076a200110f40220022f01d8070d0f203f20022f01da073b0100204020223b0100200241d0076a200110f40220022f01d0070d0f20022f01d2072122200241c8076a200110f40220022f01c8070d0f203c20022f01ca073b0100203920223b010020022f019412213a200228019612214120022f019a12213b200228029c12214320022f01a012214420022801a212214520022f01a612214620022802a812214220022f01ac12214720022801ae12214820022f01b212214920022802b412214a20022903b812212f200241c0076a200110f40220022f01c0070d0f20022f01c207214b02402028200228028412470d0020024180126a2028410110d402200228028012212720022802881221280b2027202841346c6a2222204b3b01302022203a3b010420222029360200202241286a202f370100202241246a204a360100202241226a20493b01002022411e6a20483601002022411c6a20473b0100202241186a2042360100202241166a20463b0100202241126a2045360100202241106a20443b01002022410c6a20433601002022410a6a203b3b0100202241066a20413601002002202841016a2228360288122025417f6a22250d000b2007280200212820022802801221270b20072028417f6a3602002027450d0e200229028412212f200241b8076a2001108c02202f422088a741346c41346d2129202fa7212220022802b8070d0b20022802bc072228200128020028020441386e2225202520284b1bad42387e222f422088a70d01202fa72225417f4c0d010240024020250d004104212a0c010b20251038222a450d010b2001200128020441016a222b36020420024100360288122002202a360280122002202541386e36028412202b20012802084b0d0a02402028450d004100212b20024190126a410a6a212d20024198126a212e2002419e126a213120024190126a410c6a213220024190126a41126a213320024190126a41106a213420024190126a41166a2135200241a4126a2136200241aa126a213720024190126a41186a213820024190126a411e6a213d20024190126a411c6a213e20024190126a41226a213f200241b0126a2140200241b6126a213c20024190126a41246a213920024190126a412a6a213a20024190126a41286a214120024190126a412e6a213b200241bc126a2143200241c2126a214420024190126a41306a212c0340200241b0076a2001108c0220022802b0070d0c20022802b4072130200241a8076a200110f40220022f01a8070d0c20022f01aa072125200241a0076a200110f40220022f01a0070d0c200220022f01a2073b019612200220253b01941220024198076a200110f40220022f0198070d0c20022f019a07212520024190076a200110f40220022f0190070d0c202d20022f0192073b0100202e20253b010020024188076a200110f40220022f0188070d0c20022f018a07212520024180076a200110f40220022f0180070d0c203120022f0182073b0100203220253b0100200241f8066a200110f40220022f01f8060d0c20022f01fa062125200241f0066a200110f40220022f01f0060d0c203320022f01f2063b0100203420253b0100200241e8066a200110f40220022f01e8060d0c20022f01ea062125200241e0066a200110f40220022f01e0060d0c203520022f01e2063b0100203620253b0100200241d8066a200110f40220022f01d8060d0c20022f01da062125200241d0066a200110f40220022f01d0060d0c203720022f01d2063b0100203820253b0100200241c8066a200110f40220022f01c8060d0c20022f01ca062125200241c0066a200110f40220022f01c0060d0c203d20022f01c2063b0100203e20253b0100200241b8066a200110f40220022f01b8060d0c20022f01ba062125200241b0066a200110f40220022f01b0060d0c203f20022f01b2063b0100204020253b0100200241a8066a200110f40220022f01a8060d0c20022f01aa062125200241a0066a200110f40220022f01a0060d0c203c20022f01a2063b0100203920253b010020024198066a200110f40220022f0198060d0c20022f019a06212520024190066a200110f40220022f0190060d0c203a20022f0192063b0100204120253b010020024188066a200110f40220022f0188060d0c20022f018a06212520024180066a200110f40220022f0180060d0c203b20022f0182063b0100204320253b0100200241f8056a200110f40220022f01f8050d0c20022f01fa052125200241f0056a200110f40220022f01f0050d0c204420022f01f2053b0100202c20253b0100202c280200214c20022f0194122145200228019612214620022f019a122142200228029c12214720022f01a012214820022801a212214920022f01a612214a20022802a812214b20022f01ac12214d20022801ae12214e20022f01b212214f20022802b412215020022f01b812215120022801ba12215220022f01be122153200241e8056a200110f40220022f01e8050d0c20022f01ea0521540240202b200228028412470d0020024180126a202b410110d502200228028012212a200228028812212b0b202a202b41386c6a222520543b0134202520453b010420252030360200202541306a204c3601002025412e6a20533b01002025412a6a2052360100202541286a20513b0100202541246a2050360100202541226a204f3b01002025411e6a204e3601002025411c6a204d3b0100202541186a204b360100202541166a204a3b0100202541126a2049360100202541106a20483b01002025410c6a20473601002025410a6a20423b0100202541066a20463601002002202b41016a222b360288122028417f6a22280d000b2007280200212b200228028012212a0b2007202b417f6a360200202a450d0b200229028412212f200241e0056a2001108c02202f422088a741386c41386d212c202fa7212520022802e0050d0820022802e405222b2001280200280204413c6e22282028202b4b1bad423c7e222f422088a70d01202fa72228417f4c0d010240024020280d004104212d0c010b20281038222d450d010b2001200128020441016a222e36020420024100360288122002202d3602801220022028413c6e36028412202e20012802084b0d070240202b450d0020024190126a410a6a213020024198126a21312002419e126a213320024190126a410c6a213420024190126a41126a213520024190126a41106a213620024190126a41166a2138200241a4126a213d200241aa126a213e20024190126a41186a213f20024190126a411e6a214020024190126a411c6a213c20024190126a41226a2139200241b0126a213a200241b6126a214120024190126a41246a213b20024190126a412a6a214320024190126a41286a214420024190126a412e6a2145200241bc126a2146200241c2126a214220024190126a41306a2147200241c6126a214820024190126a41346a21324100212e0340200241d8056a2001108c0220022802d8050d0920022802dc0521372002410036029012200241d0056a200110f40220022f01d0050d0920022f01d2052128200241c8056a200110f40220022f01c8050d09200220022f01ca053b019612200220283b019412200241c0056a200110f40220022f01c0050d0920022f01c2052128200241b8056a200110f40220022f01b8050d09203020022f01ba053b0100203120283b0100200241b0056a200110f40220022f01b0050d0920022f01b2052128200241a8056a200110f40220022f01a8050d09203320022f01aa053b0100203420283b0100200241a0056a200110f40220022f01a0050d0920022f01a205212820024198056a200110f40220022f0198050d09203520022f019a053b0100203620283b010020024190056a200110f40220022f0190050d0920022f019205212820024188056a200110f40220022f0188050d09203820022f018a053b0100203d20283b010020024180056a200110f40220022f0180050d0920022f0182052128200241f8046a200110f40220022f01f8040d09203e20022f01fa043b0100203f20283b0100200241f0046a200110f40220022f01f0040d0920022f01f2042128200241e8046a200110f40220022f01e8040d09204020022f01ea043b0100203c20283b0100200241e0046a200110f40220022f01e0040d0920022f01e2042128200241d8046a200110f40220022f01d8040d09203920022f01da043b0100203a20283b0100200241d0046a200110f40220022f01d0040d0920022f01d2042128200241c8046a200110f40220022f01c8040d09204120022f01ca043b0100203b20283b0100200241c0046a200110f40220022f01c0040d0920022f01c2042128200241b8046a200110f40220022f01b8040d09204320022f01ba043b0100204420283b0100200241b0046a200110f40220022f01b0040d0920022f01b2042128200241a8046a200110f40220022f01a8040d09204520022f01aa043b0100204620283b0100200241a0046a200110f40220022f01a0040d0920022f01a204212820024198046a200110f40220022f0198040d09204220022f019a043b0100204720283b010020024190046a200110f40220022f0190040d0920022f019204212820024188046a200110f40220022f0188040d09204820022f018a043b0100203220283b01002032280200215520022f0194122149200228019612214a20022f019a12214b200228029c12214d20022f01a012214e20022801a212214f20022f01a612215020022802a812215120022f01ac12215220022801ae12215320022f01b212214c20022802b412215420022f01b812215620022801ba12215720022f01be12215820022802c012215920024180046a200110f40220022f0180040d0920022f018204215a0240202e200228028412470d0020024180126a202e410110d602200228028012212d200228028812212e0b202d202e413c6c6a2228205a3b0138202820493b010420282037360200202841346a2055360100202841306a20593601002028412e6a20583b01002028412a6a2057360100202841286a20563b0100202841246a2054360100202841226a204c3b01002028411e6a20533601002028411c6a20523b0100202841186a2051360100202841166a20503b0100202841126a204f360100202841106a204e3b01002028410c6a204d3601002028410a6a204b3b0100202841066a204a3601002002202e41016a222e36028812202b417f6a222b0d000b2007280200212e200228028012212d0b2007202e417f6a360200202d450d08200229028412212f200241f8036a2001108c02202f422088a7413c6c413c6d2130202fa7212b20022802f8030d0520022802fc03223120012802002802044106762228202820314b1b2228410674222e417f4c0d010240024020280d004104212e0c010b202e1038222e450d010b2001200128020441016a2232360204200241003602881220022028360284122002202e36028012203220012802084b0d0402402031450d0020024190126a410a6a213320024198126a21342002419e126a213520024190126a410c6a213620024190126a41126a213720024190126a41106a213820024190126a41166a213d200241a4126a213e200241aa126a213f20024190126a41186a214020024190126a411e6a213c20024190126a411c6a213920024190126a41226a213a200241b0126a2141200241b6126a213b20024190126a41246a214320024190126a412a6a214420024190126a41286a214520024190126a412e6a2146200241bc126a2142200241c2126a214720024190126a41306a2148200241c6126a214920024190126a41346a214a200241ca126a214b200241c8126a214d410021320340200241f0036a2001108c0220022802f0030d0620022802f403214e2002410036029012200241e8036a200110f40220022f01e8030d0620022f01ea032128200241e0036a200110f40220022f01e0030d06200220022f01e2033b019612200220283b019412200241d8036a200110f40220022f01d8030d0620022f01da032128200241d0036a200110f40220022f01d0030d06203320022f01d2033b0100203420283b0100200241c8036a200110f40220022f01c8030d0620022f01ca032128200241c0036a200110f40220022f01c0030d06203520022f01c2033b0100203620283b0100200241b8036a200110f40220022f01b8030d0620022f01ba032128200241b0036a200110f40220022f01b0030d06203720022f01b2033b0100203820283b0100200241a8036a200110f40220022f01a8030d0620022f01aa032128200241a0036a200110f40220022f01a0030d06203d20022f01a2033b0100203e20283b010020024198036a200110f40220022f0198030d0620022f019a03212820024190036a200110f40220022f0190030d06203f20022f0192033b0100204020283b010020024188036a200110f40220022f0188030d0620022f018a03212820024180036a200110f40220022f0180030d06203c20022f0182033b0100203920283b0100200241f8026a200110f40220022f01f8020d0620022f01fa022128200241f0026a200110f40220022f01f0020d06203a20022f01f2023b0100204120283b0100200241e8026a200110f40220022f01e8020d0620022f01ea022128200241e0026a200110f40220022f01e0020d06203b20022f01e2023b0100204320283b0100200241d8026a200110f40220022f01d8020d0620022f01da022128200241d0026a200110f40220022f01d0020d06204420022f01d2023b0100204520283b0100200241c8026a200110f40220022f01c8020d0620022f01ca022128200241c0026a200110f40220022f01c0020d06204620022f01c2023b0100204220283b0100200241b8026a200110f40220022f01b8020d0620022f01ba022128200241b0026a200110f40220022f01b0020d06204720022f01b2023b0100204820283b0100200241a8026a200110f40220022f01a8020d0620022f01aa022128200241a0026a200110f40220022f01a0020d06204920022f01a2023b0100204a20283b010020024198026a200110f40220022f0198020d0620022f019a02212820024190026a200110f40220022f0190020d06204b20022f0192023b0100204d20283b010020022f019412214f200228019612215020022f019a122151200228029c12215220022f01a012215320022801a212214c20022f01a612215420022802a812215620022f01ac12215720022801ae12215820022f01b212215920022802b412215520022f01b812215a20022801ba12215b20022f01be12215c20022802c012215d20022902c412212f20024188026a200110f40220022f0188020d0620022f018a02215e02402032200228028412470d0020024180126a2032410110d702200228028012212e20022802881221320b202e20324106746a2228205e3b013c2028204f3b01042028204e360200202841346a202f370100202841306a205d3601002028412e6a205c3b01002028412a6a205b360100202841286a205a3b0100202841246a2055360100202841226a20593b01002028411e6a20583601002028411c6a20573b0100202841186a2056360100202841166a20543b0100202841126a204c360100202841106a20533b01002028410c6a20523601002028410a6a20513b0100202841066a20503601002002203241016a2232360288122031417f6a22310d000b20072802002132200228028012212e0b20072032417f6a360200202e450d05200229028412212f20024180026a2001108c02202fa721342002280280020d032002280284022233200128020028020441c4006e2228202820334b1bad42c4007e225f422088a70d01205fa72228417f4c0d010240024020280d00410421310c010b202810382231450d010b2001200128020441016a2232360204200241003602881220022031360280122002202841c4006e36028412203220012802084b0d0202402033450d0020024190126a410a6a213620024198126a21372002419e126a213820024190126a410c6a213d20024190126a41126a213e20024190126a41106a213f20024190126a41166a2140200241a4126a213c200241aa126a213920024190126a41186a213a20024190126a411e6a214120024190126a411c6a213b20024190126a41226a2143200241b0126a2144200241b6126a214520024190126a41246a214620024190126a412a6a214220024190126a41286a214720024190126a412e6a2148200241bc126a2149200241c2126a214a20024190126a41306a214b20024190126a41366a214d20024190126a41346a214e20024190126a413a6a214f200241c8126a2150200241ce126a215120024190126a413c6a2135410021320340200241f8016a2001108c0220022802f8010d0420022802fc0121522002410036029012200241f0016a200110f40220022f01f0010d0420022f01f2012128200241e8016a200110f40220022f01e8010d04200220022f01ea013b019612200220283b019412200241e0016a200110f40220022f01e0010d0420022f01e2012128200241d8016a200110f40220022f01d8010d04203620022f01da013b0100203720283b0100200241d0016a200110f40220022f01d0010d0420022f01d2012128200241c8016a200110f40220022f01c8010d04203820022f01ca013b0100203d20283b0100200241c0016a200110f40220022f01c0010d0420022f01c2012128200241b8016a200110f40220022f01b8010d04203e20022f01ba013b0100203f20283b0100200241b0016a200110f40220022f01b0010d0420022f01b2012128200241a8016a200110f40220022f01a8010d04204020022f01aa013b0100203c20283b0100200241a0016a200110f40220022f01a0010d0420022f01a201212820024198016a200110f40220022f0198010d04203920022f019a013b0100203a20283b010020024190016a200110f40220022f0190010d0420022f019201212820024188016a200110f40220022f0188010d04204120022f018a013b0100203b20283b010020024180016a200110f40220022f0180010d0420022f0182012128200241f8006a200110f40220022f01780d04204320022f017a3b0100204420283b0100200241f0006a200110f40220022f01700d0420022f01722128200241e8006a200110f40220022f01680d04204520022f016a3b0100204620283b0100200241e0006a200110f40220022f01600d0420022f01622128200241d8006a200110f40220022f01580d04204220022f015a3b0100204720283b0100200241d0006a200110f40220022f01500d0420022f01522128200241c8006a200110f40220022f01480d04204820022f014a3b0100204920283b0100200241c0006a200110f40220022f01400d0420022f01422128200241386a200110f40220022f01380d04204a20022f013a3b0100204b20283b0100200241306a200110f40220022f01300d0420022f01322128200241286a200110f40220022f01280d04204d20022f012a3b0100204e20283b0100200241206a200110f40220022f01200d0420022f01222128200241186a200110f40220022f01180d04204f20022f011a3b0100205020283b0100200241106a200110f40220022f01100d0420022f01122128200241086a200110f40220022f01080d04205120022f010a3b0100203520283b01002035280200216020022f0194122153200228019612214c20022f019a122154200228029c12215620022f01a012215720022801a212215820022f01a612215920022802a812215520022f01ac12215a20022801ae12215b20022f01b212215c20022802b412215d20022f01b812215e20022801ba12216120022f01be12216220022802c012216320022f01c412216420022801c612216520022f01ca1221662002200110f40220022f01000d0420022f0102216702402032200228028412470d0020024180126a2032410110d802200228028012213120022802881221320b2031203241c4006c6a222820673b0140202820533b0104202820523602002028413c6a20603601002028413a6a20663b0100202841366a2065360100202841346a20643b0100202841306a20633601002028412e6a20623b01002028412a6a2061360100202841286a205e3b0100202841246a205d360100202841226a205c3b01002028411e6a205b3601002028411c6a205a3b0100202841186a2055360100202841166a20593b0100202841126a2058360100202841106a20573b01002028410c6a20563601002028410a6a20543b0100202841066a204c3601002002203241016a2232360288122033417f6a22330d000b2007280200213220022802801221310b20072032417f6a3602002031450d03200229028412215f2000200836020420002006360200200041b8016a205f3e0200200041b4016a2031360200200041b0016a202f422088a7410674410675360200200041ac016a2034360200200041a8016a202e360200200041a4016a2030360200200041a0016a202b3602002000419c016a202d36020020004198016a202c36020020004194016a202536020020004190016a202a3602002000418c016a202936020020004188016a202236020020004184016a202736020020004180016a2026360200200041fc006a201e360200200041f8006a2024360200200041f4006a2023360200200041f0006a2021360200200041ec006a2020360200200041e8006a201f360200200041e4006a2015360200200041e0006a201c360200200041dc006a201d360200200041d8006a201a360200200041d4006a2016360200200041d0006a2009422088a7410574410575360200200041cc006a2011360200200041c8006a201b360200200041c4006a2014360200200041c0006a200f3602002000413c6a2019360200200041386a2017360200200041346a200e360200200041306a20123602002000412c6a2018360200200041286a2003360200200041246a2013360200200041206a200a422088a74104744104753602002000411c6a200c360200200041186a200d360200200041146a2010360200200041106a20043602002000410c6a200b360200200041086a2005410375360200200041bc016a205f422088a741c4006c41c4006d3602000c2d0b1032000b1034000b2002280284122201450d00200141c4006c450d0020022802801210390b20004100360200203441ffffff1f71450d02202e10390c020b20022802841241ffffff1f71450d0020022802801210390b200041003602000b202b450d02202b413c6c450d02202d10390c020b2002280284122201450d002001413c6c450d0020022802801210390b200041003602000b2025450d02202541386c450d02202a10390c020b2002280284122201450d00200141386c450d0020022802801210390b200041003602000b2022450d02202241346c450d02202710390c020b2002280284122201450d00200141346c450d0020022802801210390b200041003602000b201e450d02201e41306c450d02202410390c020b2002280284122201450d00200141306c450d0020022802801210390b200041003602000b2021450d022021412c6c450d02202010390c020b2002280284122201450d002001412c6c450d0020022802801210390b200041003602000b2015450d02201541286c450d02201c10390c020b2002280284122201450d00200141286c450d0020022802801210390b200041003602000b201a450d02201a41246c450d02201610390c020b2002280284122201450d00200141246c450d0020022802801210390b200041003602000b201141ffffff3f71450d02201b10390c020b20022802841241ffffff3f71450d0020022802801210390b200041003602000b200f450d02200f411c6c450d02201910390c020b2002280284122201450d002001411c6c450d0020022802801210390b200041003602000b200e450d02200e41186c450d02201210390c020b2002280284122201450d00200141186c450d0020022802801210390b200041003602000b2003450d02200341146c450d02201310390c020b2002280284122201450d00200141146c450d0020022802801210390b200041003602000b200c41ffffffff0071450d02200d10390c020b20022802841241ffffffff0071450d0020022802801210390b200041003602000b2004450d012004410c6c450d01200b10390c010b200041003602000b200841ffffffff0171450d00200610390b200241d0126a24000b920201067f024002402001280200220128020422020d00410121030c010b200128020022042d0000210520012002417f6a2206360204410121032001200441016a3602000240200541037122074103470d000c010b024002400240024020070e03000102000b200541027621010c020b024020060d000c030b20042d0001210320012002417e6a3602042001200441026a360200200341087420057241ffff03712201418002492103200141027621010c020b0240200641034f0d000c020b20012002417c6a3602042001200441046a36020020042f0001200441036a2d00004110747241087420057222024180807c6a41ffff0b4b0d01200241027621010b410021030b200020013b0102200020033b01000bb2930107067f027e247f017e2f7f017e087f230041d0126b22022400200241f8116a200110c10102400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802f8110d0020022802fc11220320012802044103762204200420034b1b22054103742204417f4c0d030240024020050d00410421060c010b200410382206450d030b41002104200241003602981220022005360294122002200636029012024002402003450d000340200241f0116a200110c10120022802f0110d0220022802f4112105200241e8116a200110f60220022f01e8110d0220022f01ea11210702402004200228029412470d0020024190126a2004410110c902200228029012210620022802981221040b200620044103746a220420073b010420042005360200200220022802981241016a2204360298122003417f6a22030d000b20022802901221060b2006450d0102402002290294122208422088a74103742205450d002005417f2005417f4a1b2204410120044101481b410020056b22042005200420054a1b4103766c21032006210403402004200429020022093e0200200441046a20094220883d0100200441086a21042003417f6a22030d000b0b2008a7210a200241e0116a200110c10120022802e011450d020c2e0b20022802941241ffffffff0171450d00200610390b200041003602000c2e0b20022802e41122032001280204410c6e2204200420034b1bad420c7e2209422088a70d012009a72207417f4c0d010240024020070d004104210b0c010b20071038220b450d010b4100210420024100360298122002200b3602901220022007410c6e360294120240024002402003450d000340200241d8116a200110c10120022802d8110d0220022802dc112107200241d0116a200110f60220022f01d0110d0220022f01d211210c200241c8116a200110f60220022f01c8110d0220022f01ca11210d200241c0116a200110f60220022f01c0110d0220022f01c211210e02402004200228029412470d0020024190126a2004410110ec01200228029012210b20022802981221040b200b2004410c6c6a2204200e3b01082004200c3b010420042007360200200441066a200d3b0100200220022802981241016a2204360298122003417f6a22030d000b200228029012210b0b200b450d2d2002290294122109200241b8116a200110c1012009422088a7410c6c410c6d210f2009a7210c20022802b811450d010c2b0b2002280294122204450d2c2004410c6c450d2c200b10390c2c0b4104210d20022802bc11220320012802044104762204200420034b1b22074104742204417f4c0d0102402007450d0020041038220d450d010b41002104200241003602881220022007360284122002200d3602801202402003450d002002419a126a211020024198126a21110340200241b0116a200110c10120022802b0110d2a20022802b411210e200241a8116a200110f60220022f01a8110d2a20022f01aa112107200241a0116a200110f60220022f01a0110d2a200220022f01a2113b019612200220073b01941220024198116a200110f60220022f0198110d2a20022f019a11210720024190116a200110f60220022f0190110d2a201020022f0192113b0100201120073b0100200229029412210920024188116a200110f60220022f0188110d2a20022f018a11211202402004200228028412470d0020024180126a2004410110cb02200228028012210d20022802881221040b200d20044104746a220720123b010c200720093702042007200e3602002002200441016a2204360288122003417f6a22030d000b200228028012210d0b200d450d29200229028412210920024180116a200110c1012009a7210e2002280280110d262002280284112207200128020441146e2204200420074b1bad42147e2208422088a70d012008a72204417f4c0d010240024020040d00410421120c010b200410382212450d010b41002103200241003602881220022012360280122002200441146e3602841202402007450d0020024190126a410a6a211320024198126a21142002419e126a211520024190126a410c6a21100340200241f8106a200110c10120022802f8100d2720022802fc102111200241f0106a200110f60220022f01f0100d2720022f01f2102104200241e8106a200110f60220022f01e8100d27200220022f01ea103b019612200220043b019412200241e0106a200110f60220022f01e0100d2720022f01e2102104200241d8106a200110f60220022f01d8100d27201320022f01da103b0100201420043b0100200241d0106a200110f60220022f01d0100d2720022f01d2102104200241c8106a200110f60220022f01c8100d27201520022f01ca103b0100201020043b01002010280200211620022f0194122117200228019612211820022f019a122119200241c0106a200110f60220022f01c0100d2720022f01c210211a02402003200228028412470d0020024180126a2003410110cc02200228028012211220022802881221030b2012200341146c6a2204201a3b0110200420173b0104200420113602002004410c6a20163601002004410a6a20193b0100200441066a20183601002002200341016a2203360288122007417f6a22070d000b20022802801221120b2012450d262002290284122108200241b8106a200110c1012008422088a741146c41146d211b2008a7210720022802b8100d2320022802bc102210200128020441186e2204200420104b1bad42187e2208422088a70d012008a72204417f4c0d010240024020040d00410421110c010b200410382211450d010b41002103200241003602881220022011360280122002200441186e3602841202402010450d0020024190126a410a6a211c20024198126a211d2002419e126a211e20024190126a410c6a211f200241a2126a212020024190126a41106a21170340200241b0106a200110c10120022802b0100d2420022802b4102118200241a8106a200110f60220022f01a8100d2420022f01aa102104200241a0106a200110f60220022f01a0100d24200220022f01a2103b019612200220043b01941220024198106a200110f60220022f0198100d2420022f019a10210420024190106a200110f60220022f0190100d24201c20022f0192103b0100201d20043b010020024188106a200110f60220022f0188100d2420022f018a10210420024180106a200110f60220022f0180100d24201e20022f0182103b0100201f20043b0100200241f80f6a200110f60220022f01f80f0d2420022f01fa0f2104200241f00f6a200110f60220022f01f00f0d24202020022f01f20f3b0100201720043b01002017280200211420022f0194122119200228019612211620022f019a12211a200228029c122113200241e80f6a200110f60220022f01e80f0d2420022f01ea0f211502402003200228028412470d0020024180126a2003410110cd02200228028012211120022802881221030b2011200341186c6a220420153b0114200420193b010420042018360200200441106a20143601002004410c6a20133601002004410a6a201a3b0100200441066a20163601002002200341016a2203360288122010417f6a22100d000b20022802801221110b2011450d232002290284122108200241e00f6a200110c1012008422088a741186c41186d21162008a7210320022802e00f0d2020022802e40f22172001280204411c6e2204200420174b1bad421c7e2208422088a70d012008a72204417f4c0d010240024020040d00410421180c010b200410382218450d010b410021102002410036028812200220183602801220022004411c6e3602841202402017450d0020024190126a410a6a211d20024198126a211e2002419e126a211f20024190126a410c6a2120200241a2126a212120024190126a41106a2122200241a6126a2123200241a4126a21240340200241d80f6a200110c10120022802d80f0d2120022802dc0f2119200241d00f6a200110f60220022f01d00f0d2120022f01d20f2104200241c80f6a200110f60220022f01c80f0d21200220022f01ca0f3b019612200220043b019412200241c00f6a200110f60220022f01c00f0d2120022f01c20f2104200241b80f6a200110f60220022f01b80f0d21201d20022f01ba0f3b0100201e20043b0100200241b00f6a200110f60220022f01b00f0d2120022f01b20f2104200241a80f6a200110f60220022f01a80f0d21201f20022f01aa0f3b0100202020043b0100200241a00f6a200110f60220022f01a00f0d2120022f01a20f2104200241980f6a200110f60220022f01980f0d21202120022f019a0f3b0100202220043b0100200241900f6a200110f60220022f01900f0d2120022f01920f2104200241880f6a200110f60220022f01880f0d21202320022f018a0f3b0100202420043b010020022f019412211a200228019612211320022f019a122114200228029c12211520022903a0122108200241800f6a200110f60220022f01800f0d2120022f01820f211c02402010200228028412470d0020024180126a2010410110ce02200228028012211820022802881221100b20182010411c6c6a2204201c3b01182004201a3b010420042019360200200441106a20083701002004410c6a20153601002004410a6a20143b0100200441066a20133601002002201041016a2210360288122017417f6a22170d000b20022802801221180b2018450d202002290284122108200241f80e6a200110c1012008422088a7411c6c411c6d21142008a7211020022802f80e0d1d20022802fc0e221920012802044105762204200420194b1b22044105742217417f4c0d010240024020040d004104211a0c010b20171038221a450d010b41002117200241003602881220022004360284122002201a3602801202402019450d0020024190126a410a6a212520024198126a21262002419e126a212720024190126a410c6a212820024190126a41126a212920024190126a41106a212a20024190126a41166a212b200241a4126a212c200241aa126a212d20024190126a41186a21130340200241f00e6a200110c10120022802f00e0d1e20022802f40e2115200241e80e6a200110f60220022f01e80e0d1e20022f01ea0e2104200241e00e6a200110f60220022f01e00e0d1e200220022f01e20e3b019612200220043b019412200241d80e6a200110f60220022f01d80e0d1e20022f01da0e2104200241d00e6a200110f60220022f01d00e0d1e202520022f01d20e3b0100202620043b0100200241c80e6a200110f60220022f01c80e0d1e20022f01ca0e2104200241c00e6a200110f60220022f01c00e0d1e202720022f01c20e3b0100202820043b0100200241b80e6a200110f60220022f01b80e0d1e20022f01ba0e2104200241b00e6a200110f60220022f01b00e0d1e202920022f01b20e3b0100202a20043b0100200241a80e6a200110f60220022f01a80e0d1e20022f01aa0e2104200241a00e6a200110f60220022f01a00e0d1e202b20022f01a20e3b0100202c20043b0100200241980e6a200110f60220022f01980e0d1e20022f019a0e2104200241900e6a200110f60220022f01900e0d1e202d20022f01920e3b0100201320043b01002013280200212320022f019412211c200228019612211d20022f019a12211e200228029c12211f20022f01a012212020022801a212212120022f01a6122122200241880e6a200110f60220022f01880e0d1e20022f018a0e212402402017200228028412470d0020024180126a2017410110cf02200228028012211a20022802881221170b201a20174105746a220420243b011c2004201c3b010420042015360200200441186a2023360100200441166a20223b0100200441126a2021360100200441106a20203b01002004410c6a201f3601002004410a6a201e3b0100200441066a201d3601002002201741016a2217360288122019417f6a22190d000b200228028012211a0b201a450d1d2002290284122108200241800e6a200110c1012008a7211720022802800e0d1a20022802840e2219200128020441246e2204200420194b1bad42247e222e422088a70d01202ea72204417f4c0d010240024020040d00410421150c010b200410382215450d010b41002113200241003602881220022015360280122002200441246e3602841202402019450d0020024190126a410a6a211e20024198126a211f2002419e126a212920024190126a410c6a212a20024190126a41126a212c20024190126a41106a212d20024190126a41166a212f200241a4126a2130200241aa126a213120024190126a41186a2132200241ae126a213320024190126a411c6a211c0340200241f80d6a200110c10120022802f80d0d1b20022802fc0d211d200241f00d6a200110f60220022f01f00d0d1b20022f01f20d2104200241e80d6a200110f60220022f01e80d0d1b200220022f01ea0d3b019612200220043b019412200241e00d6a200110f60220022f01e00d0d1b20022f01e20d2104200241d80d6a200110f60220022f01d80d0d1b201e20022f01da0d3b0100201f20043b0100200241d00d6a200110f60220022f01d00d0d1b20022f01d20d2104200241c80d6a200110f60220022f01c80d0d1b202920022f01ca0d3b0100202a20043b0100200241c00d6a200110f60220022f01c00d0d1b20022f01c20d2104200241b80d6a200110f60220022f01b80d0d1b202c20022f01ba0d3b0100202d20043b0100200241b00d6a200110f60220022f01b00d0d1b20022f01b20d2104200241a80d6a200110f60220022f01a80d0d1b202f20022f01aa0d3b0100203020043b0100200241a00d6a200110f60220022f01a00d0d1b20022f01a20d2104200241980d6a200110f60220022f01980d0d1b203120022f019a0d3b0100203220043b0100200241900d6a200110f60220022f01900d0d1b20022f01920d2104200241880d6a200110f60220022f01880d0d1b203320022f018a0d3b0100201c20043b0100201c280200212820022f0194122120200228019612212120022f019a122122200228029c12212320022f01a012212420022801a212212520022f01a612212620022802a8122127200241800d6a200110f60220022f01800d0d1b20022f01820d212b02402013200228028412470d0020024180126a2013410110d002200228028012211520022802881221130b2015201341246c6a2204202b3b0120200420203b01042004201d3602002004411c6a2028360100200441186a2027360100200441166a20263b0100200441126a2025360100200441106a20243b01002004410c6a20233601002004410a6a20223b0100200441066a20213601002002201341016a2213360288122019417f6a22190d000b20022802801221150b2015450d1a200229028412212e200241f80c6a200110c101202e422088a741246c41246d211e202ea7211920022802f80c0d1720022802fc0c2213200128020441286e2204200420134b1bad42287e222e422088a70d01202ea72204417f4c0d010240024020040d004104211d0c010b20041038221d450d010b4100211c20024100360288122002201d360280122002200441286e3602841202402013450d0020024190126a410a6a212020024198126a21212002419e126a212220024190126a410c6a212320024190126a41126a212420024190126a41106a212520024190126a41166a2126200241a4126a2127200241aa126a213220024190126a41186a2133200241ae126a213420024190126a411c6a2135200241b2126a2136200241b0126a21370340200241f00c6a200110c10120022802f00c0d1820022802f40c211f200241e80c6a200110f60220022f01e80c0d1820022f01ea0c2104200241e00c6a200110f60220022f01e00c0d18200220022f01e20c3b019612200220043b019412200241d80c6a200110f60220022f01d80c0d1820022f01da0c2104200241d00c6a200110f60220022f01d00c0d18202020022f01d20c3b0100202120043b0100200241c80c6a200110f60220022f01c80c0d1820022f01ca0c2104200241c00c6a200110f60220022f01c00c0d18202220022f01c20c3b0100202320043b0100200241b80c6a200110f60220022f01b80c0d1820022f01ba0c2104200241b00c6a200110f60220022f01b00c0d18202420022f01b20c3b0100202520043b0100200241a80c6a200110f60220022f01a80c0d1820022f01aa0c2104200241a00c6a200110f60220022f01a00c0d18202620022f01a20c3b0100202720043b0100200241980c6a200110f60220022f01980c0d1820022f019a0c2104200241900c6a200110f60220022f01900c0d18203220022f01920c3b0100203320043b0100200241880c6a200110f60220022f01880c0d1820022f018a0c2104200241800c6a200110f60220022f01800c0d18203420022f01820c3b0100203520043b0100200241f80b6a200110f60220022f01f80b0d1820022f01fa0b2104200241f00b6a200110f60220022f01f00b0d18203620022f01f20b3b0100203720043b010020022f0194122128200228019612212920022f019a12212a200228029c12212b20022f01a012212c20022801a212212d20022f01a612212f20022802a812213020022902ac12212e200241e80b6a200110f60220022f01e80b0d1820022f01ea0b21310240201c200228028412470d0020024180126a201c410110d102200228028012211d200228028812211c0b201d201c41286c6a220420313b0124200420283b01042004201f3602002004411c6a202e370100200441186a2030360100200441166a202f3b0100200441126a202d360100200441106a202c3b01002004410c6a202b3601002004410a6a202a3b0100200441066a20293601002002201c41016a221c360288122013417f6a22130d000b200228028012211d0b201d450d17200229028412212e200241e00b6a200110c101202e422088a741286c41286d2121202ea7211320022802e00b0d1420022802e40b221c2001280204412c6e22042004201c4b1bad422c7e222e422088a70d01202ea72204417f4c0d010240024020040d00410421200c010b200410382220450d010b4100211f2002410036028812200220203602801220022004412c6e360284120240201c450d0020024190126a410a6a212420024198126a21252002419e126a212620024190126a410c6a212720024190126a41126a212820024190126a41106a212920024190126a41166a212a200241a4126a212b200241aa126a212c20024190126a41186a212d20024190126a411e6a212f20024190126a411c6a213020024190126a41226a2138200241b0126a2139200241b6126a213a20024190126a41246a21220340200241d80b6a200110c10120022802d80b0d1520022802dc0b2123200241d00b6a200110f60220022f01d00b0d1520022f01d20b2104200241c80b6a200110f60220022f01c80b0d15200220022f01ca0b3b019612200220043b019412200241c00b6a200110f60220022f01c00b0d1520022f01c20b2104200241b80b6a200110f60220022f01b80b0d15202420022f01ba0b3b0100202520043b0100200241b00b6a200110f60220022f01b00b0d1520022f01b20b2104200241a80b6a200110f60220022f01a80b0d15202620022f01aa0b3b0100202720043b0100200241a00b6a200110f60220022f01a00b0d1520022f01a20b2104200241980b6a200110f60220022f01980b0d15202820022f019a0b3b0100202920043b0100200241900b6a200110f60220022f01900b0d1520022f01920b2104200241880b6a200110f60220022f01880b0d15202a20022f018a0b3b0100202b20043b0100200241800b6a200110f60220022f01800b0d1520022f01820b2104200241f80a6a200110f60220022f01f80a0d15202c20022f01fa0a3b0100202d20043b0100200241f00a6a200110f60220022f01f00a0d1520022f01f20a2104200241e80a6a200110f60220022f01e80a0d15202f20022f01ea0a3b0100203020043b0100200241e00a6a200110f60220022f01e00a0d1520022f01e20a2104200241d80a6a200110f60220022f01d80a0d15203820022f01da0a3b0100203920043b0100200241d00a6a200110f60220022f01d00a0d1520022f01d20a2104200241c80a6a200110f60220022f01c80a0d15203a20022f01ca0a3b0100202220043b01002022280200213b20022f0194122131200228019612213220022f019a122133200228029c12213420022f01a012213520022801a212213620022f01a612213720022802a812213c20022f01ac12213d20022801ae12213e20022f01b212213f200241c00a6a200110f60220022f01c00a0d1520022f01c20a21400240201f200228028412470d0020024180126a201f410110d2022002280280122120200228028812211f0b2020201f412c6c6a220420403b0128200420313b010420042023360200200441246a203b360100200441226a203f3b01002004411e6a203e3601002004411c6a203d3b0100200441186a203c360100200441166a20373b0100200441126a2036360100200441106a20353b01002004410c6a20343601002004410a6a20333b0100200441066a20323601002002201f41016a221f36028812201c417f6a221c0d000b20022802801221200b2020450d14200229028412212e200241b80a6a200110c101202e422088a7412c6c412c6d2124202ea7211c20022802b80a0d1120022802bc0a221f200128020441306e22042004201f4b1bad42307e222e422088a70d01202ea72204417f4c0d010240024020040d00410421220c010b200410382222450d010b41002123200241003602881220022022360280122002200441306e360284120240201f450d0020024190126a410a6a212720024198126a21282002419e126a212920024190126a410c6a212a20024190126a41126a212b20024190126a41106a212c20024190126a41166a212d200241a4126a212f200241aa126a213020024190126a41186a213120024190126a411e6a213220024190126a411c6a213320024190126a41226a2134200241b0126a2135200241b6126a213620024190126a41246a2137200241ba126a213c20024190126a41286a21250340200241b00a6a200110c10120022802b00a0d1220022802b40a2126200241a80a6a200110f60220022f01a80a0d1220022f01aa0a2104200241a00a6a200110f60220022f01a00a0d12200220022f01a20a3b019612200220043b019412200241980a6a200110f60220022f01980a0d1220022f019a0a2104200241900a6a200110f60220022f01900a0d12202720022f01920a3b0100202820043b0100200241880a6a200110f60220022f01880a0d1220022f018a0a2104200241800a6a200110f60220022f01800a0d12202920022f01820a3b0100202a20043b0100200241f8096a200110f60220022f01f8090d1220022f01fa092104200241f0096a200110f60220022f01f0090d12202b20022f01f2093b0100202c20043b0100200241e8096a200110f60220022f01e8090d1220022f01ea092104200241e0096a200110f60220022f01e0090d12202d20022f01e2093b0100202f20043b0100200241d8096a200110f60220022f01d8090d1220022f01da092104200241d0096a200110f60220022f01d0090d12203020022f01d2093b0100203120043b0100200241c8096a200110f60220022f01c8090d1220022f01ca092104200241c0096a200110f60220022f01c0090d12203220022f01c2093b0100203320043b0100200241b8096a200110f60220022f01b8090d1220022f01ba092104200241b0096a200110f60220022f01b0090d12203420022f01b2093b0100203520043b0100200241a8096a200110f60220022f01a8090d1220022f01aa092104200241a0096a200110f60220022f01a0090d12203620022f01a2093b0100203720043b010020024198096a200110f60220022f0198090d1220022f019a09210420024190096a200110f60220022f0190090d12203c20022f0192093b0100202520043b01002025280200214120022f019412213d200228019612213e20022f019a12213f200228029c12213b20022f01a012213820022801a212213920022f01a612214020022802a812213a20022f01ac12214220022801ae12214320022f01b212214420022802b412214520024188096a200110f60220022f0188090d1220022f018a09214602402023200228028412470d0020024180126a2023410110d302200228028012212220022802881221230b2022202341306c6a220420463b012c2004203d3b010420042026360200200441286a2041360100200441246a2045360100200441226a20443b01002004411e6a20433601002004411c6a20423b0100200441186a203a360100200441166a20403b0100200441126a2039360100200441106a20383b01002004410c6a203b3601002004410a6a203f3b0100200441066a203e3601002002202341016a222336028812201f417f6a221f0d000b20022802801221220b2022450d11200229028412212e20024180096a200110c101202e422088a741306c41306d2127202ea7211f2002280280090d0e2002280284092223200128020441346e2204200420234b1bad42347e222e422088a70d01202ea72204417f4c0d010240024020040d00410421250c010b200410382225450d010b41002126200241003602881220022025360280122002200441346e3602841202402023450d0020024190126a410a6a212920024198126a212a2002419e126a212b20024190126a410c6a212c20024190126a41126a212d20024190126a41106a212f20024190126a41166a2130200241a4126a2131200241aa126a213220024190126a41186a213320024190126a411e6a213420024190126a411c6a213520024190126a41226a2136200241b0126a2137200241b6126a213c20024190126a41246a213d200241ba126a213e20024190126a41286a213f200241be126a213b200241bc126a21380340200241f8086a200110c10120022802f8080d0f20022802fc082128200241f0086a200110f60220022f01f0080d0f20022f01f2082104200241e8086a200110f60220022f01e8080d0f200220022f01ea083b019612200220043b019412200241e0086a200110f60220022f01e0080d0f20022f01e2082104200241d8086a200110f60220022f01d8080d0f202920022f01da083b0100202a20043b0100200241d0086a200110f60220022f01d0080d0f20022f01d2082104200241c8086a200110f60220022f01c8080d0f202b20022f01ca083b0100202c20043b0100200241c0086a200110f60220022f01c0080d0f20022f01c2082104200241b8086a200110f60220022f01b8080d0f202d20022f01ba083b0100202f20043b0100200241b0086a200110f60220022f01b0080d0f20022f01b2082104200241a8086a200110f60220022f01a8080d0f203020022f01aa083b0100203120043b0100200241a0086a200110f60220022f01a0080d0f20022f01a208210420024198086a200110f60220022f0198080d0f203220022f019a083b0100203320043b010020024190086a200110f60220022f0190080d0f20022f019208210420024188086a200110f60220022f0188080d0f203420022f018a083b0100203520043b010020024180086a200110f60220022f0180080d0f20022f0182082104200241f8076a200110f60220022f01f8070d0f203620022f01fa073b0100203720043b0100200241f0076a200110f60220022f01f0070d0f20022f01f2072104200241e8076a200110f60220022f01e8070d0f203c20022f01ea073b0100203d20043b0100200241e0076a200110f60220022f01e0070d0f20022f01e2072104200241d8076a200110f60220022f01d8070d0f203e20022f01da073b0100203f20043b0100200241d0076a200110f60220022f01d0070d0f20022f01d2072104200241c8076a200110f60220022f01c8070d0f203b20022f01ca073b0100203820043b010020022f0194122139200228019612214020022f019a12213a200228029c12214220022f01a012214320022801a212214420022f01a612214520022802a812214120022f01ac12214620022801ae12214720022f01b212214820022802b412214920022903b812212e200241c0076a200110f60220022f01c0070d0f20022f01c207214a02402026200228028412470d0020024180126a2026410110d402200228028012212520022802881221260b2025202641346c6a2204204a3b0130200420393b010420042028360200200441286a202e370100200441246a2049360100200441226a20483b01002004411e6a20473601002004411c6a20463b0100200441186a2041360100200441166a20453b0100200441126a2044360100200441106a20433b01002004410c6a20423601002004410a6a203a3b0100200441066a20403601002002202641016a2226360288122023417f6a22230d000b20022802801221250b2025450d0e200229028412212e200241b8076a200110c101202e422088a741346c41346d212a202ea7212320022802b8070d0b20022802bc072226200128020441386e2204200420264b1bad42387e222e422088a70d01202ea72204417f4c0d010240024020040d00410421280c010b200410382228450d010b41002129200241003602881220022028360280122002200441386e3602841202402026450d0020024190126a410a6a212c20024198126a212d2002419e126a213020024190126a410c6a213120024190126a41126a213220024190126a41106a213320024190126a41166a2134200241a4126a2135200241aa126a213620024190126a41186a213720024190126a411e6a213c20024190126a411c6a213d20024190126a41226a213e200241b0126a213f200241b6126a213b20024190126a41246a213820024190126a412a6a213920024190126a41286a214020024190126a412e6a213a200241bc126a2142200241c2126a214320024190126a41306a212b0340200241b0076a200110c10120022802b0070d0c20022802b407212f200241a8076a200110f60220022f01a8070d0c20022f01aa072104200241a0076a200110f60220022f01a0070d0c200220022f01a2073b019612200220043b01941220024198076a200110f60220022f0198070d0c20022f019a07210420024190076a200110f60220022f0190070d0c202c20022f0192073b0100202d20043b010020024188076a200110f60220022f0188070d0c20022f018a07210420024180076a200110f60220022f0180070d0c203020022f0182073b0100203120043b0100200241f8066a200110f60220022f01f8060d0c20022f01fa062104200241f0066a200110f60220022f01f0060d0c203220022f01f2063b0100203320043b0100200241e8066a200110f60220022f01e8060d0c20022f01ea062104200241e0066a200110f60220022f01e0060d0c203420022f01e2063b0100203520043b0100200241d8066a200110f60220022f01d8060d0c20022f01da062104200241d0066a200110f60220022f01d0060d0c203620022f01d2063b0100203720043b0100200241c8066a200110f60220022f01c8060d0c20022f01ca062104200241c0066a200110f60220022f01c0060d0c203c20022f01c2063b0100203d20043b0100200241b8066a200110f60220022f01b8060d0c20022f01ba062104200241b0066a200110f60220022f01b0060d0c203e20022f01b2063b0100203f20043b0100200241a8066a200110f60220022f01a8060d0c20022f01aa062104200241a0066a200110f60220022f01a0060d0c203b20022f01a2063b0100203820043b010020024198066a200110f60220022f0198060d0c20022f019a06210420024190066a200110f60220022f0190060d0c203920022f0192063b0100204020043b010020024188066a200110f60220022f0188060d0c20022f018a06210420024180066a200110f60220022f0180060d0c203a20022f0182063b0100204220043b0100200241f8056a200110f60220022f01f8050d0c20022f01fa052104200241f0056a200110f60220022f01f0050d0c204320022f01f2053b0100202b20043b0100202b280200214b20022f0194122144200228019612214520022f019a122141200228029c12214620022f01a012214720022801a212214820022f01a612214920022802a812214a20022f01ac12214c20022801ae12214d20022f01b212214e20022802b412214f20022f01b812215020022801ba12215120022f01be122152200241e8056a200110f60220022f01e8050d0c20022f01ea05215302402029200228028412470d0020024180126a2029410110d502200228028012212820022802881221290b2028202941386c6a220420533b0134200420443b01042004202f360200200441306a204b3601002004412e6a20523b01002004412a6a2051360100200441286a20503b0100200441246a204f360100200441226a204e3b01002004411e6a204d3601002004411c6a204c3b0100200441186a204a360100200441166a20493b0100200441126a2048360100200441106a20473b01002004410c6a20463601002004410a6a20413b0100200441066a20453601002002202941016a2229360288122026417f6a22260d000b20022802801221280b2028450d0b200229028412212e200241e0056a200110c101202e422088a741386c41386d212c202ea7212620022802e0050d0820022802e40522292001280204413c6e2204200420294b1bad423c7e222e422088a70d01202ea72204417f4c0d010240024020040d004104212b0c010b20041038222b450d010b20024100360288122002202b3602801220022004413c6e3602841202402029450d0020024190126a410a6a212f20024198126a21302002419e126a213220024190126a410c6a213320024190126a41126a213520024190126a41106a213620024190126a41166a2137200241a4126a213c200241aa126a213d20024190126a41186a213e20024190126a411e6a213f20024190126a411c6a213b20024190126a41226a2138200241b0126a2139200241b6126a214020024190126a41246a213a20024190126a412a6a214220024190126a41286a214320024190126a412e6a2144200241bc126a2145200241c2126a214120024190126a41306a2146200241c6126a214720024190126a41346a21314100212d0340200241d8056a200110c10120022802d8050d0920022802dc0521342002410036029012200241d0056a200110f60220022f01d0050d0920022f01d2052104200241c8056a200110f60220022f01c8050d09200220022f01ca053b019612200220043b019412200241c0056a200110f60220022f01c0050d0920022f01c2052104200241b8056a200110f60220022f01b8050d09202f20022f01ba053b0100203020043b0100200241b0056a200110f60220022f01b0050d0920022f01b2052104200241a8056a200110f60220022f01a8050d09203220022f01aa053b0100203320043b0100200241a0056a200110f60220022f01a0050d0920022f01a205210420024198056a200110f60220022f0198050d09203520022f019a053b0100203620043b010020024190056a200110f60220022f0190050d0920022f019205210420024188056a200110f60220022f0188050d09203720022f018a053b0100203c20043b010020024180056a200110f60220022f0180050d0920022f0182052104200241f8046a200110f60220022f01f8040d09203d20022f01fa043b0100203e20043b0100200241f0046a200110f60220022f01f0040d0920022f01f2042104200241e8046a200110f60220022f01e8040d09203f20022f01ea043b0100203b20043b0100200241e0046a200110f60220022f01e0040d0920022f01e2042104200241d8046a200110f60220022f01d8040d09203820022f01da043b0100203920043b0100200241d0046a200110f60220022f01d0040d0920022f01d2042104200241c8046a200110f60220022f01c8040d09204020022f01ca043b0100203a20043b0100200241c0046a200110f60220022f01c0040d0920022f01c2042104200241b8046a200110f60220022f01b8040d09204220022f01ba043b0100204320043b0100200241b0046a200110f60220022f01b0040d0920022f01b2042104200241a8046a200110f60220022f01a8040d09204420022f01aa043b0100204520043b0100200241a0046a200110f60220022f01a0040d0920022f01a204210420024198046a200110f60220022f0198040d09204120022f019a043b0100204620043b010020024190046a200110f60220022f0190040d0920022f019204210420024188046a200110f60220022f0188040d09204720022f018a043b0100203120043b01002031280200215420022f0194122148200228019612214920022f019a12214a200228029c12214c20022f01a012214d20022801a212214e20022f01a612214f20022802a812215020022f01ac12215120022801ae12215220022f01b212214b20022802b412215320022f01b812215520022801ba12215620022f01be12215720022802c012215820024180046a200110f60220022f0180040d0920022f01820421590240202d200228028412470d0020024180126a202d410110d602200228028012212b200228028812212d0b202b202d413c6c6a220420593b0138200420483b010420042034360200200441346a2054360100200441306a20583601002004412e6a20573b01002004412a6a2056360100200441286a20553b0100200441246a2053360100200441226a204b3b01002004411e6a20523601002004411c6a20513b0100200441186a2050360100200441166a204f3b0100200441126a204e360100200441106a204d3b01002004410c6a204c3601002004410a6a204a3b0100200441066a20493601002002202d41016a222d360288122029417f6a22290d000b200228028012212b0b202b450d08200229028412212e200241f8036a200110c101202e422088a7413c6c413c6d2130202ea7210420022802f8030d0520022802fc03222d200128020441067622292029202d4b1b2229410674222f417f4c0d010240024020290d004104212f0c010b202f1038222f450d010b200241003602881220022029360284122002202f360280120240202d450d0020024190126a410a6a213220024198126a21332002419e126a213420024190126a410c6a213520024190126a41126a213620024190126a41106a213720024190126a41166a213d200241a4126a213e200241aa126a213f20024190126a41186a213b20024190126a411e6a213820024190126a411c6a213920024190126a41226a2140200241b0126a213a200241b6126a214220024190126a41246a214320024190126a412a6a214420024190126a41286a214520024190126a412e6a2141200241bc126a2146200241c2126a214720024190126a41306a2148200241c6126a214920024190126a41346a214a200241ca126a214c200241c8126a214d410021310340200241f0036a200110c10120022802f0030d0620022802f403213c2002410036029012200241e8036a200110f60220022f01e8030d0620022f01ea032129200241e0036a200110f60220022f01e0030d06200220022f01e2033b019612200220293b019412200241d8036a200110f60220022f01d8030d0620022f01da032129200241d0036a200110f60220022f01d0030d06203220022f01d2033b0100203320293b0100200241c8036a200110f60220022f01c8030d0620022f01ca032129200241c0036a200110f60220022f01c0030d06203420022f01c2033b0100203520293b0100200241b8036a200110f60220022f01b8030d0620022f01ba032129200241b0036a200110f60220022f01b0030d06203620022f01b2033b0100203720293b0100200241a8036a200110f60220022f01a8030d0620022f01aa032129200241a0036a200110f60220022f01a0030d06203d20022f01a2033b0100203e20293b010020024198036a200110f60220022f0198030d0620022f019a03212920024190036a200110f60220022f0190030d06203f20022f0192033b0100203b20293b010020024188036a200110f60220022f0188030d0620022f018a03212920024180036a200110f60220022f0180030d06203820022f0182033b0100203920293b0100200241f8026a200110f60220022f01f8020d0620022f01fa022129200241f0026a200110f60220022f01f0020d06204020022f01f2023b0100203a20293b0100200241e8026a200110f60220022f01e8020d0620022f01ea022129200241e0026a200110f60220022f01e0020d06204220022f01e2023b0100204320293b0100200241d8026a200110f60220022f01d8020d0620022f01da022129200241d0026a200110f60220022f01d0020d06204420022f01d2023b0100204520293b0100200241c8026a200110f60220022f01c8020d0620022f01ca022129200241c0026a200110f60220022f01c0020d06204120022f01c2023b0100204620293b0100200241b8026a200110f60220022f01b8020d0620022f01ba022129200241b0026a200110f60220022f01b0020d06204720022f01b2023b0100204820293b0100200241a8026a200110f60220022f01a8020d0620022f01aa022129200241a0026a200110f60220022f01a0020d06204920022f01a2023b0100204a20293b010020024198026a200110f60220022f0198020d0620022f019a02212920024190026a200110f60220022f0190020d06204c20022f0192023b0100204d20293b010020022f019412214e200228019612214f20022f019a122150200228029c12215120022f01a012215220022801a212214b20022f01a612215320022802a812215520022f01ac12215620022801ae12215720022f01b212215820022802b412215420022f01b812215920022801ba12215a20022f01be12215b20022802c012215c20022902c412212e20024188026a200110f60220022f0188020d0620022f018a02215d02402031200228028412470d0020024180126a2031410110d702200228028012212f20022802881221310b202f20314106746a2229205d3b013c2029204e3b01042029203c360200202941346a202e370100202941306a205c3601002029412e6a205b3b01002029412a6a205a360100202941286a20593b0100202941246a2054360100202941226a20583b01002029411e6a20573601002029411c6a20563b0100202941186a2055360100202941166a20533b0100202941126a204b360100202941106a20523b01002029410c6a20513601002029410a6a20503b0100202941066a204f3601002002203141016a223136028812202d417f6a222d0d000b200228028012212f0b202f450d05200229028412212e20024180026a200110c101202ea7212d2002280280020d032002280284022231200128020441c4006e2229202920314b1bad42c4007e225e422088a70d01205ea72229417f4c0d010240024020290d00410421320c010b202910382232450d010b200241003602881220022032360280122002202941c4006e3602841202402031450d0020024190126a410a6a213420024198126a21352002419e126a213620024190126a410c6a213720024190126a41126a213c20024190126a41106a213d20024190126a41166a213f200241a4126a213b200241aa126a213920024190126a41186a214020024190126a411e6a213a20024190126a411c6a214220024190126a41226a2143200241b0126a2144200241b6126a214520024190126a41246a214120024190126a412a6a214620024190126a41286a214720024190126a412e6a2148200241bc126a2149200241c2126a214a20024190126a41306a214c20024190126a41366a214d20024190126a41346a214e20024190126a413a6a214f200241c8126a2150200241ce126a215120024190126a413c6a213e410021330340200241f8016a200110c10120022802f8010d0420022802fc0121382002410036029012200241f0016a200110f60220022f01f0010d0420022f01f2012129200241e8016a200110f60220022f01e8010d04200220022f01ea013b019612200220293b019412200241e0016a200110f60220022f01e0010d0420022f01e2012129200241d8016a200110f60220022f01d8010d04203420022f01da013b0100203520293b0100200241d0016a200110f60220022f01d0010d0420022f01d2012129200241c8016a200110f60220022f01c8010d04203620022f01ca013b0100203720293b0100200241c0016a200110f60220022f01c0010d0420022f01c2012129200241b8016a200110f60220022f01b8010d04203c20022f01ba013b0100203d20293b0100200241b0016a200110f60220022f01b0010d0420022f01b2012129200241a8016a200110f60220022f01a8010d04203f20022f01aa013b0100203b20293b0100200241a0016a200110f60220022f01a0010d0420022f01a201212920024198016a200110f60220022f0198010d04203920022f019a013b0100204020293b010020024190016a200110f60220022f0190010d0420022f019201212920024188016a200110f60220022f0188010d04203a20022f018a013b0100204220293b010020024180016a200110f60220022f0180010d0420022f0182012129200241f8006a200110f60220022f01780d04204320022f017a3b0100204420293b0100200241f0006a200110f60220022f01700d0420022f01722129200241e8006a200110f60220022f01680d04204520022f016a3b0100204120293b0100200241e0006a200110f60220022f01600d0420022f01622129200241d8006a200110f60220022f01580d04204620022f015a3b0100204720293b0100200241d0006a200110f60220022f01500d0420022f01522129200241c8006a200110f60220022f01480d04204820022f014a3b0100204920293b0100200241c0006a200110f60220022f01400d0420022f01422129200241386a200110f60220022f01380d04204a20022f013a3b0100204c20293b0100200241306a200110f60220022f01300d0420022f01322129200241286a200110f60220022f01280d04204d20022f012a3b0100204e20293b0100200241206a200110f60220022f01200d0420022f01222129200241186a200110f60220022f01180d04204f20022f011a3b0100205020293b0100200241106a200110f60220022f01100d0420022f01122129200241086a200110f60220022f01080d04205120022f010a3b0100203e20293b0100203e280200215f20022f0194122152200228019612214b20022f019a122153200228029c12215520022f01a012215620022801a212215720022f01a612215820022802a812215420022f01ac12215920022801ae12215a20022f01b212215b20022802b412215c20022f01b812215d20022801ba12216020022f01be12216120022802c012216220022f01c412216320022801c612216420022f01ca1221652002200110f60220022f01000d0420022f0102216602402033200228028412470d0020024180126a2033410110d802200228028012213220022802881221330b2032203341c4006c6a222920663b0140202920523b0104202920383602002029413c6a205f3601002029413a6a20653b0100202941366a2064360100202941346a20633b0100202941306a20623601002029412e6a20613b01002029412a6a2060360100202941286a205d3b0100202941246a205c360100202941226a205b3b01002029411e6a205a3601002029411c6a20593b0100202941186a2054360100202941166a20583b0100202941126a2057360100202941106a20563b01002029410c6a20553601002029410a6a20533b0100202941066a204b3601002002203341016a2233360288122031417f6a22310d000b20022802801221320b2032450d03200229028412215e2000200a36020420002006360200200041b8016a205e3e0200200041b4016a2032360200200041b0016a202e422088a7410674410675360200200041ac016a202d360200200041a8016a202f360200200041a4016a2030360200200041a0016a20043602002000419c016a202b36020020004198016a202c36020020004194016a202636020020004190016a20283602002000418c016a202a36020020004188016a202336020020004184016a202536020020004180016a2027360200200041fc006a201f360200200041f8006a2022360200200041f4006a2024360200200041f0006a201c360200200041ec006a2020360200200041e8006a2021360200200041e4006a2013360200200041e0006a201d360200200041dc006a201e360200200041d8006a2019360200200041d4006a2015360200200041d0006a2008422088a7410574410575360200200041cc006a2017360200200041c8006a201a360200200041c4006a2014360200200041c0006a20103602002000413c6a2018360200200041386a2016360200200041346a2003360200200041306a20113602002000412c6a201b360200200041286a2007360200200041246a2012360200200041206a2009422088a74104744104753602002000411c6a200e360200200041186a200d360200200041146a200f360200200041106a200c3602002000410c6a200b360200200041086a2005410375360200200041bc016a205e422088a741c4006c41c4006d3602000c2d0b1032000b1034000b2002280284122201450d00200141c4006c450d00203210390b20004100360200202d41ffffff1f71450d02202f10390c020b20022802841241ffffff1f71450d00202f10390b200041003602000b2004450d022004413c6c450d02202b10390c020b2002280284122204450d002004413c6c450d00202b10390b200041003602000b2026450d02202641386c450d02202810390c020b2002280284122204450d00200441386c450d00202810390b200041003602000b2023450d02202341346c450d02202510390c020b2002280284122204450d00200441346c450d00202510390b200041003602000b201f450d02201f41306c450d02202210390c020b2002280284122204450d00200441306c450d00202210390b200041003602000b201c450d02201c412c6c450d02202010390c020b2002280284122204450d002004412c6c450d00202010390b200041003602000b2013450d02201341286c450d02201d10390c020b2002280284122204450d00200441286c450d00201d10390b200041003602000b2019450d02201941246c450d02201510390c020b2002280284122204450d00200441246c450d00201510390b200041003602000b201741ffffff3f71450d02201a10390c020b20022802841241ffffff3f71450d00201a10390b200041003602000b2010450d022010411c6c450d02201810390c020b2002280284122204450d002004411c6c450d00201810390b200041003602000b2003450d02200341186c450d02201110390c020b2002280284122204450d00200441186c450d00201110390b200041003602000b2007450d02200741146c450d02201210390c020b2002280284122204450d00200441146c450d00201210390b200041003602000b200e41ffffffff0071450d02200d10390c020b20022802841241ffffffff0071450d00200d10390b200041003602000b200c450d01200c410c6c450d01200b10390c010b200041003602000b200a41ffffffff0171450d00200610390b200241d0126a24000b870201067f02400240200128020422020d00410121030c010b20012002417f6a22043602044101210320012001280200220541016a360200024020052d0000220641037122074103470d000c010b024002400240024020070e03000102000b200641027621010c020b024020040d000c030b20012002417e6a3602042001200541026a36020020052d000141087420067241ffff03712201418002492103200141027621010c020b0240200441034f0d000c020b20012002417c6a3602042001200541046a36020020052f0001200541036a2d00004110747241087420067222024180807c6a41ffff0b4b0d01200241027621010b410021030b200020013b0102200020033b01000bff1e01097f230041e0006b2202240020024200370204024020012802082203450d0020034103742104200128020041046a21030340200220032f010010f802200341086a2103200441786a22040d000b0b0240200141146a2802002203450d002003410c6c2104200128020c41086a2103034020032f0100210520022003417c6a2f010010f8022002200510f8022003410c6a2103200441746a22040d000b0b0240200141206a2802002203450d00200341047421042001280218410c6a210303402002200341786a2f010010f80220022003417c6a2f010010f802200220032f010010f802200341106a2103200441706a22040d000b0b02402001412c6a2802002203450d00200341146c2104200128022441106a210303402002200341746a2f010010f8022002200341786a2f010010f80220022003417c6a2f010010f802200220032f010010f802200341146a21032004416c6a22040d000b0b0240200141386a2802002203450d00200341186c2104200128023041146a210303402002200341706a2f010010f8022002200341746a2f010010f8022002200341786a2f010010f80220022003417c6a2f010010f802200220032f010010f802200341186a2103200441686a22040d000b0b0240200141c4006a2802002203450d00200128023c21052003411c6c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220062004411c6a2204470d000b0b0240200141d0006a2802002203450d0020012802482105200341057421064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022006200441206a2204470d000b0b0240200141dc006a2802002203450d0020012802542105200341246c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022006200441246a2204470d000b0b0240200141e8006a2802002203450d0020012802602105200341286c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022006200441286a2204470d000b0b0240200141f4006a2802002203450d00200128026c21052003412c6c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220062004412c6a2204470d000b0b024020014180016a2802002203450d0020012802782105200341306c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022006200441306a2204470d000b0b02402001418c016a2802002203450d002001280284012105200341346c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022002200341306a2f010010f8022006200441346a2204470d000b0b024020014198016a2802002203450d002001280290012105200341386c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022002200341306a2f010010f8022002200341346a2f010010f8022006200441386a2204470d000b0b0240200141a4016a2802002203450d00200128029c0121052003413c6c21064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022002200341306a2f010010f8022002200341346a2f010010f8022002200341386a2f010010f80220062004413c6a2204470d000b0b0240200141b0016a2802002203450d0020012802a8012105200341067421064100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022002200341306a2f010010f8022002200341346a2f010010f8022002200341386a2f010010f80220022003413c6a2f010010f8022006200441c0006a2204470d000b0b0240200141bc016a2802002203450d0020012802b4012105200341c4006c21014100210403402002200520046a220341046a2f010010f8022002200341086a2f010010f80220022003410c6a2f010010f8022002200341106a2f010010f8022002200341146a2f010010f8022002200341186a2f010010f80220022003411c6a2f010010f8022002200341206a2f010010f8022002200341246a2f010010f8022002200341286a2f010010f80220022003412c6a2f010010f8022002200341306a2f010010f8022002200341346a2f010010f8022002200341386a2f010010f80220022003413c6a2f010010f8022002200341c0006a2f010010f8022001200441c4006a2204470d000b0b02400240200228020422030d004100210341002105410021060c010b200228020821062002280200210420032105034020032f010621012004450d012004417f6a2104200320014102746a41206a2802002103200528022021050c000b0b200241246a2001360200200241206a200336020020022006360228200242003703182002200536021420024100360210024002400240024002402006450d0020022006417f6a22073602282005450d0120052f01060d0241002104034041002103024020052802002208450d00200441016a210620052f01042101200821030b024041d000412020041b450d00200510390b024020030d00410021050c050b2006210420032105200120032f01064f0d000b200141016a2104200320014101746a41086a2f01002101024020060d00200321050c040b200320044102746a41206a280200210502402006417f6a2203450d000340200528022021052003417f6a22030d000b0b410021040c030b20004200370204200041002802d89547360200200241106a10f9020c030b41a5cbc800412b41d0cbc8001035000b20052f01082101410121040b200220043602182002200536021420024100360210024002400240024002400240417f200741016a220320032007491b220420046a22032004490d002003417f4c0d00200310382209450d01200920013b01002002200936023020024101360238200220034101762203360234200241c0006a41186a200241106a41186a2802002204360200200241c0006a41106a200241106a41106a290300370300200241c0006a41086a200241106a41086a290300370300200220022903103703402004450d0520022004417f6a220a36025820022802442204450d02200228024021012002280248220620042f0106490d03034002400240200428020022050d00410021050c010b200141016a210820042f010421060b024041d000412020011b450d00200410390b024020050d00410021040c060b2008210120052104200620052f01064f0d000b20052104200821010c030b1034000b1032000b41a5cbc800412b41d0cbc8001035000b200641016a2105200420064101746a41086a210602402001450d00200420054102746a41206a280200210402402001417f6a2205450d000340200428022021042005417f6a22050d000b0b410021050b20062f010021010b200220053602482002200436024420024100360240410121070340024020072003470d00200241306a2003417f200a41016a22042004200a491b10fa02200228023021090b200920074101746a20013b01002002200741016a2207360238024002400240024020022802582203450d0020022003417f6a220a36025820022802442204450d01200520042f0106490d0241002105034041002103024020042802002208450d00200541016a210620042f01042101200821030b024041d000412020051b450d00200410390b024020030d00410021040c050b2006210520032104200120032f01064f0d000b200141016a2105200320014101746a41086a2f01002101024020060d00200321040c040b200320054102746a41206a280200210402402006417f6a2203450d000340200428022021042003417f6a22030d000b0b410021050c030b20022005360248200241003602400c040b41a5cbc800412b41d0cbc8001035000b200420054101746a41086a2f01002101200541016a21050b20022004360244200228023421030c000b0b200241c0006a10f90220002002290330370200200041086a200241306a41086a2802003602000b200241e0006a24000bb30d010c7f02400240024002400240024002400240024002400240024020002802042202450d00200028020021030c010b412010382202450d0141002103200241003b01062002410036020020002002360204200041003602000b200141ffff0371210402400340200241086a210520022f010622064101742107410021084100210902400340024020072008470d00200621090c020b200220086a41086a2f0100220a20044b0d01200841026a2108200941016a2109200a2004470d000c030b0b02402003450d002003417f6a2103200220094102746a41206a28020021020c010b0b024002402006410a4b0d000240200920064f0d00200520094101746a220841026a2008200620096b41017410d50b1a0b2002200641016a3b0106200520094101746a20013b01000c010b410521084100210702400240200941054f0d00410421082009210a0c010b4105210a024002402009417b6a0e020201000b200941796a210a41012107410621080c010b4100210a410121070b412010382204450d02200441003b010620044100360200200420022f010622032008417f736a22093b01062009410c4f0d032003200841016a22066b2009470d04200520084101746a2f0100210b200441086a200520064101746a200941017410d40b1a200220083b01062004200220071b220841086a21090240200a41016a220320082f010622074b0d00200920034101746a2009200a4101746a2007200a6b41017410d50b1a0b2009200a4101746a20013b01002008200741016a3b0106024002400240200228020022080d00410021050c010b4100210520042101200b210c034020022f01042102200822032f01062206410b490d024100210741042108024020024105490d0020022108024002402002417b6a0e020201000b200241796a210241012107410621080c010b4100210241012107410521080b41d00010382204450d05200441003b010620044100360200200420032f0106220b2008417f736a22093b01062009410c4f0d08200b200841016a220a6b2009470d09200341086a220d20084101746a2f0100210b200441086a200d200a4101746a200941017410d40b1a200320083b010620042f0106220941016a210d2009410c4f0d0a200620086b2208200d470d0b200541016a2105200441206a2003200a4102746a41206a200841027410d40b1a4100210802400340200420084102746a41206a280200220a20083b0104200a2004360200200820094f0d01200820082009496a220820094d0d000b0b2004200320071b220a41086a21060240200241016a2208200a2f010622094b0d00200620084101746a200620024101746a200920026b41017410d50b1a0b200941016a2107200620024101746a200c3b0100200a41206a21060240200241026a220d200941026a220c4f0d002006200d4102746a200620084102746a200920026b41027410d50b1a0b200620084102746a2001360200200a20073b010602402008200c4f0d00200a20024102746a41246a2108034020082802002209200241016a22023b01042009200a360200200841046a210820072002470d000b0b2003210220042101200b210c200328020022080d000b0b20002802042209450d0a2000280200210a41d00010382208450d0320082009360220200841003b01062008410036020020002008360204200941003b0104200920083602002000200a41016a360200200a2005470d0b20082f01062209410b4f0d0c2008200941016a220a3b0106200820094101746a41086a200b3b0100200841206a200a4102746a20043602002000200028020841016a3602082004200a3b0104200420083602000f0b200341086a220a20024101746a2109200241016a2108200641016a210402400240200620024b0d002009200c3b0100200341206a2109200641026a210a0c010b200a20084101746a2009200620026b220a41017410d50b1a2009200c3b01002002410274200341206a22096a41086a200920084102746a200a41027410d50b1a200641026a210a0b2009200841027422026a2001360200200320043b01062008200a4f0d00200220036a41206a210903402009280200220420083b010420042003360200200941046a2109200a200841016a2208470d000b0b2000200028020841016a3602080b0f0b1032000b2009410b41a485c700104b000b41b485c700412841dc85c7001035000b2009410b41a485c700104b000b41b485c700412841dc85c7001035000b200d410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000bae0201057f200028020421012000410036020402402001450d0020002802002102024020002802182203450d002000280208210403402003417f6a2103024002400240200420012f01064f0d0020012100200221050c010b034002400240200128020022000d00410021000c010b200241016a210520012f010421040b024041d000412020021b450d00200110390b024020000d00410021010c030b2005210220002101200420002f01064f0d000b0b200441016a2104024020050d00200021010c010b200020044102746a41206a280200210102402005417f6a2200450d000340200128022021012000417f6a22000d000b0b410021040b4100210220030d000b0b034020012802002100024041d000412020021b450d00200110390b200241016a21022000210120000d000b0b0bc90101037f230041206b220324000240200120026a22022001490d00200041046a280200220441017422052002200520024b1b22014104200141044b1b220120016a220220014f41017421010240024020040d00200341003602100c010b200341186a410236020020032005360214200320002802003602100b200320022001200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410176360200200341206a24000f0b1034000bc43201307f230041c0016b22032400200341b8016a4200370300200341ac016a4200370200200341a0016a420037030020034194016a420037020020034188016a4200370300200341fc006a4200370200200341f0006a4200370300200341e4006a4200370200200341d8006a4200370300200341cc006a4200370200200341c0006a4200370300200341346a4200370200200341286a42003703002003411c6a4200370200200341106a420037030020034200370204200341002802d8974e22043602b401200320043602a8012003200436029c0120032004360290012003200436028401200320043602782003200436026c2003200436026020032004360254200320043602482003200436023c2003200436023020032004360224200320043602182003200436020c20032004360200024002402002450d0020024104742104200341186a2105200341246a2106200341306a21072003413c6a2108200341c8006a2109200341d4006a210a200341e0006a210b200341ec006a210c200341f8006a210d20034184016a210e20034190016a210f2003419c016a2110200341a8016a2111200341b4016a211203400240024002400240024002400240024002400240024002400240024002400240024002402001410c6a2802000e11110102030405060708090a0b0c0d0e0f10000b2000428180808010370200200310fc020c130b200141046a2802002f01002113200128020021140240200328020822022003280204470d002003200210b101200328020821020b200328020020024103746a220220133b0104200220143602002003200328020841016a3602080c0f0b200141046a28020022022f0104211320022f0102211420022f01002115200128020021160240200328021422022003280210470d002003410c6a200210da01200328021421020b200328020c2002410c6c6a220220133b0108200220153b010420022016360200200241066a20143b01002003200328021441016a3602140c0e0b200141046a28020022022f0108211320022f0104211420022f0102211520022f01002116200241066a2f0100211720012802002118024020032802202202200328021c470d002005200210fd02200328022021020b200328021820024104746a220220133b010c200220163b0104200220183602002002410a6a20173b0100200241086a20143b0100200241066a20153b01002003200328022041016a3602200c0d0b200141046a28020022022f010c211320022f0108211420022f0104211520022f0102211620022f010021172002410a6a2f01002118200241066a2f010021192001280200211a0240200328022c22022003280228470d002006200210fe02200328022c21020b2003280224200241146c6a220220133b0110200220173b01042002201a3602002002410e6a20183b01002002410c6a20143b01002002410a6a20193b0100200241086a20153b0100200241066a20163b01002003200328022c41016a36022c0c0c0b200141046a28020022022f0110211320022f010c211420022f0108211520022f0104211620022f0102211720022f010021182002410e6a2f010021192002410a6a2f0100211a200241066a2f0100211b2001280200211c0240200328023822022003280234470d002007200210ff02200328023821020b2003280230200241186c6a220220133b0114200220183b01042002201c360200200241126a20193b0100200241106a20143b01002002410e6a201a3b01002002410c6a20153b01002002410a6a201b3b0100200241086a20163b0100200241066a20173b01002003200328023841016a3602380c0b0b200141046a28020022022f0114211320022f0110211420022f010c211520022f0108211620022f0104211720022f0102211820022f01002119200241126a2f0100211a2002410e6a2f0100211b2002410a6a2f0100211c200241066a2f0100211d2001280200211e0240200328024422022003280240470d0020082002108003200328024421020b200328023c2002411c6c6a220220133b0118200220193b01042002201e360200200241166a201a3b0100200241146a20143b0100200241126a201b3b0100200241106a20153b01002002410e6a201c3b01002002410c6a20163b01002002410a6a201d3b0100200241086a20173b0100200241066a20183b01002003200328024441016a3602440c0a0b200141046a28020022022f0118211320022f0114211420022f0110211520022f010c211620022f0108211720022f0104211820022f0102211920022f0100211a200241166a2f0100211b200241126a2f0100211c2002410e6a2f0100211d2002410a6a2f0100211e200241066a2f0100211f20012802002120024020032802502202200328024c470d0020092002108103200328025021020b200328024820024105746a220220133b011c2002201a3b0104200220203602002002411a6a201b3b0100200241186a20143b0100200241166a201c3b0100200241146a20153b0100200241126a201d3b0100200241106a20163b01002002410e6a201e3b01002002410c6a20173b01002002410a6a201f3b0100200241086a20183b0100200241066a20193b01002003200328025041016a3602500c090b200141046a28020022022f011c211320022f0118211420022f0114211520022f0110211620022f010c211720022f0108211820022f0104211920022f0102211a20022f0100211b2002411a6a2f0100211c200241166a2f0100211d200241126a2f0100211e2002410e6a2f0100211f2002410a6a2f01002120200241066a2f01002121200128020021220240200328025c22022003280258470d00200a2002108203200328025c21020b2003280254200241246c6a220220133b01202002201b3b0104200220223602002002411e6a201c3b01002002411c6a20143b01002002411a6a201d3b0100200241186a20153b0100200241166a201e3b0100200241146a20163b0100200241126a201f3b0100200241106a20173b01002002410e6a20203b01002002410c6a20183b01002002410a6a20213b0100200241086a20193b0100200241066a201a3b01002003200328025c41016a36025c0c080b200141046a28020022022f0120211320022f011c211420022f0118211520022f0114211620022f0110211720022f010c211820022f0108211920022f0104211a20022f0102211b20022f0100211c2002411e6a2f0100211d2002411a6a2f0100211e200241166a2f0100211f200241126a2f010021202002410e6a2f010021212002410a6a2f01002122200241066a2f01002123200128020021240240200328026822022003280264470d00200b2002108303200328026821020b2003280260200241286c6a220220133b01242002201c3b010420022024360200200241226a201d3b0100200241206a20143b01002002411e6a201e3b01002002411c6a20153b01002002411a6a201f3b0100200241186a20163b0100200241166a20203b0100200241146a20173b0100200241126a20213b0100200241106a20183b01002002410e6a20223b01002002410c6a20193b01002002410a6a20233b0100200241086a201a3b0100200241066a201b3b01002003200328026841016a3602680c070b200141046a28020022022f0124211320022f0120211420022f011c211520022f0118211620022f0114211720022f0110211820022f010c211920022f0108211a20022f0104211b20022f0102211c20022f0100211d200241226a2f0100211e2002411e6a2f0100211f2002411a6a2f01002120200241166a2f01002121200241126a2f010021222002410e6a2f010021232002410a6a2f01002124200241066a2f01002125200128020021260240200328027422022003280270470d00200c200210c502200328027421020b200328026c2002412c6c6a220220133b01282002201d3b010420022026360200200241266a201e3b0100200241246a20143b0100200241226a201f3b0100200241206a20153b01002002411e6a20203b01002002411c6a20163b01002002411a6a20213b0100200241186a20173b0100200241166a20223b0100200241146a20183b0100200241126a20233b0100200241106a20193b01002002410e6a20243b01002002410c6a201a3b01002002410a6a20253b0100200241086a201b3b0100200241066a201c3b01002003200328027441016a3602740c060b200141046a28020022022f0128211320022f0124211420022f0120211520022f011c211620022f0118211720022f0114211820022f0110211920022f010c211a20022f0108211b20022f0104211c20022f0102211d20022f0100211e200241266a2f0100211f200241226a2f010021202002411e6a2f010021212002411a6a2f01002122200241166a2f01002123200241126a2f010021242002410e6a2f010021252002410a6a2f01002126200241066a2f010021272001280200212802402003280280012202200328027c470d00200d200210840320032802800121020b2003280278200241306c6a220220133b012c2002201e3b0104200220283602002002412a6a201f3b0100200241286a20143b0100200241266a20203b0100200241246a20153b0100200241226a20213b0100200241206a20163b01002002411e6a20223b01002002411c6a20173b01002002411a6a20233b0100200241186a20183b0100200241166a20243b0100200241146a20193b0100200241126a20253b0100200241106a201a3b01002002410e6a20263b01002002410c6a201b3b01002002410a6a20273b0100200241086a201c3b0100200241066a201d3b0100200320032802800141016a360280010c050b200141046a28020022022f012c211320022f0128211420022f0124211520022f0120211620022f011c211720022f0118211820022f0114211920022f0110211a20022f010c211b20022f0108211c20022f0104211d20022f0102211e20022f0100211f2002412a6a2f01002120200241266a2f01002121200241226a2f010021222002411e6a2f010021232002411a6a2f01002124200241166a2f01002125200241126a2f010021262002410e6a2f010021272002410a6a2f01002128200241066a2f010021292001280200212a0240200328028c012202200328028801470d00200e2002108503200328028c0121020b200328028401200241346c6a220220133b01302002201f3b01042002202a3602002002412e6a20203b01002002412c6a20143b01002002412a6a20213b0100200241286a20153b0100200241266a20223b0100200241246a20163b0100200241226a20233b0100200241206a20173b01002002411e6a20243b01002002411c6a20183b01002002411a6a20253b0100200241186a20193b0100200241166a20263b0100200241146a201a3b0100200241126a20273b0100200241106a201b3b01002002410e6a20283b01002002410c6a201c3b01002002410a6a20293b0100200241086a201d3b0100200241066a201e3b01002003200328028c0141016a36028c010c040b200141046a28020022022f0130211320022f012c211420022f0128211520022f0124211620022f0120211720022f011c211820022f0118211920022f0114211a20022f0110211b20022f010c211c20022f0108211d20022f0104211e20022f0102211f20022f010021202002412e6a2f010021212002412a6a2f01002122200241266a2f01002123200241226a2f010021242002411e6a2f010021252002411a6a2f01002126200241166a2f01002127200241126a2f010021282002410e6a2f010021292002410a6a2f0100212a200241066a2f0100212b2001280200212c02402003280298012202200328029401470d00200f200210860320032802980121020b200328029001200241386c6a220220133b0134200220203b01042002202c360200200241326a20213b0100200241306a20143b01002002412e6a20223b01002002412c6a20153b01002002412a6a20233b0100200241286a20163b0100200241266a20243b0100200241246a20173b0100200241226a20253b0100200241206a20183b01002002411e6a20263b01002002411c6a20193b01002002411a6a20273b0100200241186a201a3b0100200241166a20283b0100200241146a201b3b0100200241126a20293b0100200241106a201c3b01002002410e6a202a3b01002002410c6a201d3b01002002410a6a202b3b0100200241086a201e3b0100200241066a201f3b0100200320032802980141016a360298010c030b200141046a28020022022f0134211320022f0130211420022f012c211520022f0128211620022f0124211720022f0120211820022f011c211920022f0118211a20022f0114211b20022f0110211c20022f010c211d20022f0108211e20022f0104211f20022f0102212020022f01002121200241326a2f010021222002412e6a2f010021232002412a6a2f01002124200241266a2f01002125200241226a2f010021262002411e6a2f010021272002411a6a2f01002128200241166a2f01002129200241126a2f0100212a2002410e6a2f0100212b2002410a6a2f0100212c200241066a2f0100212d2001280200212e024020032802a401220220032802a001470d002010200210870320032802a40121020b200328029c012002413c6c6a220220133b0138200220213b01042002202e360200200241366a20223b0100200241346a20143b0100200241326a20233b0100200241306a20153b01002002412e6a20243b01002002412c6a20163b01002002412a6a20253b0100200241286a20173b0100200241266a20263b0100200241246a20183b0100200241226a20273b0100200241206a20193b01002002411e6a20283b01002002411c6a201a3b01002002411a6a20293b0100200241186a201b3b0100200241166a202a3b0100200241146a201c3b0100200241126a202b3b0100200241106a201d3b01002002410e6a202c3b01002002410c6a201e3b01002002410a6a202d3b0100200241086a201f3b0100200241066a20203b0100200320032802a40141016a3602a4010c020b200141046a28020022022f0138211320022f0134211420022f0130211520022f012c211620022f0128211720022f0124211820022f0120211920022f011c211a20022f0118211b20022f0114211c20022f0110211d20022f010c211e20022f0108211f20022f0104212020022f0102212120022f01002122200241366a2f01002123200241326a2f010021242002412e6a2f010021252002412a6a2f01002126200241266a2f01002127200241226a2f010021282002411e6a2f010021292002411a6a2f0100212a200241166a2f0100212b200241126a2f0100212c2002410e6a2f0100212d2002410a6a2f0100212e200241066a2f0100212f20012802002130024020032802b001220220032802ac01470d002011200210880320032802b00121020b20032802a80120024106746a220220133b013c200220223b0104200220303602002002413a6a20233b0100200241386a20143b0100200241366a20243b0100200241346a20153b0100200241326a20253b0100200241306a20163b01002002412e6a20263b01002002412c6a20173b01002002412a6a20273b0100200241286a20183b0100200241266a20283b0100200241246a20193b0100200241226a20293b0100200241206a201a3b01002002411e6a202a3b01002002411c6a201b3b01002002411a6a202b3b0100200241186a201c3b0100200241166a202c3b0100200241146a201d3b0100200241126a202d3b0100200241106a201e3b01002002410e6a202e3b01002002410c6a201f3b01002002410a6a202f3b0100200241086a20203b0100200241066a20213b0100200320032802b00141016a3602b0010c010b200141046a28020022022f013c211320022f0138211420022f0134211520022f0130211620022f012c211720022f0128211820022f0124211920022f0120211a20022f011c211b20022f0118211c20022f0114211d20022f0110211e20022f010c211f20022f0108212020022f0104212120022f0102212220022f010021232002413a6a2f01002124200241366a2f01002125200241326a2f010021262002412e6a2f010021272002412a6a2f01002128200241266a2f01002129200241226a2f0100212a2002411e6a2f0100212b2002411a6a2f0100212c200241166a2f0100212d200241126a2f0100212e2002410e6a2f0100212f2002410a6a2f01002130200241066a2f0100213120012802002132024020032802bc01220220032802b801470d002012200210890320032802bc0121020b20032802b401200241c4006c6a220220133b0140200220233b0104200220323602002002413e6a20243b01002002413c6a20143b01002002413a6a20253b0100200241386a20153b0100200241366a20263b0100200241346a20163b0100200241326a20273b0100200241306a20173b01002002412e6a20283b01002002412c6a20183b01002002412a6a20293b0100200241286a20193b0100200241266a202a3b0100200241246a201a3b0100200241226a202b3b0100200241206a201b3b01002002411e6a202c3b01002002411c6a201c3b01002002411a6a202d3b0100200241186a201d3b0100200241166a202e3b0100200241146a201e3b0100200241126a202f3b0100200241106a201f3b01002002410e6a20303b01002002410c6a20203b01002002410a6a20313b0100200241086a20213b0100200241066a20223b0100200320032802bc0141016a3602bc010b200141106a2101200441706a22040d000b0b200041046a200341c00110d40b1a200041003602000b200341c0016a24000bf70301017f0240200041046a28020041ffffffff0171450d00200028020010390b0240200041106a2802002201450d002001410c6c450d00200028020c10390b02402000411c6a28020041ffffffff0071450d00200028021810390b0240200041286a2802002201450d00200141146c450d00200028022410390b0240200041346a2802002201450d00200141186c450d00200028023010390b0240200041c0006a2802002201450d002001411c6c450d00200028023c10390b0240200041cc006a28020041ffffff3f71450d00200028024810390b0240200041d8006a2802002201450d00200141246c450d00200028025410390b0240200041e4006a2802002201450d00200141286c450d00200028026010390b0240200041f0006a2802002201450d002001412c6c450d00200028026c10390b0240200041fc006a2802002201450d00200141306c450d00200028027810390b024020004188016a2802002201450d00200141346c450d0020002802840110390b024020004194016a2802002201450d00200141386c450d0020002802900110390b0240200041a0016a2802002201450d002001413c6c450d00200028029c0110390b0240200041ac016a28020041ffffff1f71450d0020002802a80110390b0240200041b8016a2802002201450d00200141c4006c450d0020002802b40110390b0bd50101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffffff00712001464102742103200141047421010240024020040d00200241003602100c010b200241186a410436020020022004410474360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410476360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42147e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141146c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141146e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42187e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141186c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141186e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad421c7e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a410436020020022001411c6c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001411c6e360200200241206a24000f0b1034000bd40101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff3f712001464102742103200141057421010240024020040d00200241003602100c010b200241186a410436020020022004410574360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410576360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42247e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141246c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141246e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42287e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141286c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141286e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42307e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141306c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141306e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42347e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141346c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141346e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42387e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141386c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141386e360200200241206a24000f0b1034000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad423c7e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a410436020020022001413c6c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001413c6e360200200241206a24000f0b1034000bd40101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff1f712001464102742103200141067421010240024020040d00200241003602100c010b200241186a410436020020022004410674360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410676360200200241206a24000f0b1034000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42c4007e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141c4006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141c4006e360200200241206a24000f0b1034000bc8010002400240024002400240024020002d00000e09050500010205050305040b200041246a2802004101470d042000412c6a280200450d04200041286a28020010390f0b200041046a2802004101470d032000410c6a280200450d03200041086a28020010390f0b200041186a2802004101470d02200041206a280200450d022000411c6a28020010390f0b200041086a280200450d01200041046a28020010390c010b200041046a2802004101470d002000410c6a280200450d00200041086a28020010390f0b0b820801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041086a280200450d00200041046a28020010390b0f0b200041086a108d02200041046a2202280200108b03200228020010390b978f0205037f017e017f017e027f0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00000e19000102030405060708090a0b0c0d0e0f101112131415161718190b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41003a00002002200341016a220336020002400240024002400240024020002d00080e060001020304051e0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200029031021050240200428020020036b41074b0d002001200341081077200228020021030b200128020020036a20053700002002200341086a22033602000240024002400240200041186a2d00000e03000102030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000b200141046a28020021020240200041196a2d00004101460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a36020020002d000c2000410d6a2d00002000410e6a2d00002001108d032000290318210502402004280200200228020022036b41074b0d002001200341081077200228020021030b200128020020036a20053700002002200341086a22033602000240024002400240200041206a2d00000e03000102030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000b200141046a28020021020240200041216a2d00004101460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2100200128020020036a41033a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2100200128020020036a41043a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22022802002003470d002001200341011077200141086a28020021030b200041296a2106200041096a2100200128020020036a41053a0000200141086a2204200341016a22033602000240200228020020036b411f4b0d002001200341201077200428020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002004200341206a3602002006200110b5020f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41033a00002002200341016a220336020002400240024020002d00040e030001021a0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41003a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022821000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028022821060240200428020020036b41034b0d002001200341041077200228020021030b200041056a2100200128020020036a20063600002002200341046a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41043a00002002200341016a22033602000240024002400240024002400240024020002d00080e080001020304050607000b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41003a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41023a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041296a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041d8006a2903002105200029035021070240200628020020036b410f4b0d002001200341101077200428020021030b2004200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41033a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a220428020020036b410f4b0d002001200341101077200141086a28020021030b200128020020036a2202200537000820022007370000200141086a2202200341106a2203360200200041c8006a2903002105200029034021070240200428020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41043a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41053a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41063a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41073a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041296a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041d8006a2903002105200029035021070240200628020020036b410f4b0d002001200341101077200428020021030b200128020020036a22022005370008200220073700002004200341106a2203360200200141046a2802002102024020002d00494101460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41063a00002002200341016a220336020002400240024002400240024002400240024020002d00080e090001020304050607081e0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020c21060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200041186a2903002105200029031021070240200141046a220428020020036b410f4b0d002001200341101077200141086a28020021030b200128020020036a2202200537000820022007370000200141086a2202200341106a2203360200200041286a2903002105200029032021070240200428020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41023a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41053a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41063a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41073a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41083a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200041296a2100200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a2204280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41073a00002002200341016a2203360200024020042802002003470d002001200341011077200141086a28020021030b200041106a2102200128020020036a41003a0000200141086a2204200341016a22033602000240200141046a28020020036b410f4b0d002001200341101077200428020021030b200128020020036a22062002290000370000200641086a200241086a2900003700002004200341106a36020020002802042000410c6a280200200110b9020f0b0240200141046a2204280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41083a00002002200341016a2203360200024020042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020421000240200141046a28020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a410a3a00002002200341016a220336020002400240024020002802040e03000102150b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a360200200028020821032001200041106a280200220010ac0220032000200110a8020f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a410b3a00002002200341016a220336020002400240024020002d00040e03000102140b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2100200128020020036a41003a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a360200200028020821032001200041106a280200220010ac02200041d0006c2200450d11034020032001108e03200341d0006a2103200041b07f6a22000d000c120b0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41103a00002002200341016a22033602000240200041086a2d00004108460d000240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020421060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a36020020002d0008200041096a2d00002000410a6a2d00002001108d030f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41113a00002002200341016a2203360200024002400240024002400240024002400240024020002d00080e0a00010203040506070809190b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2100200128020020036a41003a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41023a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41033a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41043a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41053a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41063a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41073a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041296a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041d8006a2903002105200029035021070240200628020020036b410f4b0d002001200341101077200428020021030b2004200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41083a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041296a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041d8006a2903002105200029035021070240200628020020036b410f4b0d002001200341101077200428020021030b2004200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41093a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041296a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041d8006a2903002105200029035021070240200628020020036b410f4b0d002001200341101077200428020021030b2004200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41123a00002002200341016a220336020002400240024002400240024020002d00010e06000102030405140b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041026a2100200128020020036a41003a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041026a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200041226a2100200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041026a2102200128020020036a41023a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041226a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200041c2006a2100200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a22033602000240200628020020036b411f4b0d002001200341201077200428020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002004200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041026a2102200128020020036a41033a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200041226a2100200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041026a2102200128020020036a41043a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200041226a2100200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041026a2100200128020020036a41053a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41133a00002004200341016a2202360200200041096a2103024020002d00084101460d000240200141046a22042802002002470d002001200241011077200141086a28020021020b200128020020026a41003a0000200141086a2206200241016a220236020002402004280200220820026b411f4b0d002001200241201077200141046a2802002108200628020021020b2001280200220920026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002006200241206a2203360200200041386a2903002105200029033021070240200820036b410f4b0d002001200341101077200141086a2802002103200128020021090b200920036a2200200537000820002007370000200141086a200341106a3602000f0b0240200141046a22062802002002470d002001200241011077200141086a28020021020b200128020020026a41013a0000200141086a2204200241016a22003602000240200628020020006b411f4b0d002001200041201077200428020021000b200128020020006a22012003290000370000200141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a2900003700002004200041206a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41143a00002002200341016a220336020002400240024020002802040e030001020f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a200341046a2203360200200428020021020240024020002802100d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c010b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602002000280210200041186a280200200110b9020b200141046a2802002102200141086a2802002103024020002d001c4108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d001c2000411d6a2d00002000411e6a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41153a00002002200341016a220336020002400240024020002d00040e030001020e0b0240200141046a22022802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a220336020020022802002102024020002d00084108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d0008200041096a2d00002000410a6a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2100200128020020036a41013a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22022802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a220336020020022802002102024020002d00084108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d0008200041096a2d00002000410a6a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41163a00002002200341016a220336020002400240024020002d00040e030001020d0b0240200141046a22022802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a220336020020022802002102024020002d00084108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d0008200041096a2d00002000410a6a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41013a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041256a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a28020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a200241206a2203360200024002400240024002400240024020002d00450e06000102030405060b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c050b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c040b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000b20002f014621000240200141046a28020020036b41014b0d002001200341021077200141086a28020021030b200128020020036a20003b0000200141086a200341026a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41023a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200041c5006a2108200041256a2100200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602002008200110b5020f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41173a00002002200341016a2203360200024002400240024020002d00040e0400010203000b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41003a0000200141086a2208200341016a22043602000240200628020020046b411f4b0d002001200441201077200828020021040b200041256a2103200128020020046a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002008200441206a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200041c5006a2100200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a22033602000240200628020020036b411f4b0d002001200341201077200428020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002004200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028026821020240200141046a220628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2204200341046a2202360200200041ec006a28020021080240200628020020026b41034b0d002001200241041077200428020021020b200041256a2103200128020020026a20083600002004200241046a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200041c5006a2100200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a22033602000240200628020020036b411f4b0d002001200341201077200428020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002004200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41023a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028026821020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2206200341046a2202360200200041ec006a28020021080240200428020020026b41034b0d002001200241041077200628020021020b200041256a2103200128020020026a20083600002006200241046a22043602000240200141046a220828020020046b411f4b0d002001200441201077200141086a28020021040b200041c5006a2102200128020020046a22062003290000370000200641186a200341186a290000370000200641106a200341106a290000370000200641086a200341086a290000370000200141086a2206200441206a22033602000240200828020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200141046a2802002102024020002d00704108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d0070200041f1006a2d0000200041f2006a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2102200128020020036a41033a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028026821020240200141046a220628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2204200341046a2202360200200041ec006a28020021080240200628020020026b41034b0d002001200241041077200428020021020b200041256a2103200128020020026a20083600002004200241046a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200041c5006a2100200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a22033602000240200628020020036b411f4b0d002001200341201077200428020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002004200341206a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41183a00002002200341016a220336020002400240024002400240024020002d00040e060001020304050e0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a220336020002400240024020002d00050e03000102100b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000f0b0240200141046a22022802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a220336020020022802002102024020002d00054103470d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a220336020002400240024020002d00050e030001020f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602000f0b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2100200128020020036a41023a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041056a2100200128020020036a41033a0000200141086a2202200341016a22033602000240200428020020036b411f4b0d002001200341201077200228020021030b200128020020036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a412c3a00002002200341016a220336020002400240024020002802040e030001020a0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a3602002000410c6a200110b5022000412c6a21030240200141046a2208280200200228020022066b411f4b0d002001200641201077200141086a28020021060b200128020020066a22022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200141086a2204200641206a360200200041cc006a200110b502200041ec006a200110b5022000418c016a200110b502200041ac016a210302402008280200200428020022066b413f4b0d002001200641c0001077200428020021060b200128020020066a22022003290000370000200241386a200341386a290000370000200241306a200341306a290000370000200241286a200341286a290000370000200241206a200341206a290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a2900003700002004200641c0006a360200200041ec016a200110b5022000418c026a200110b502200041ac026a200110b50220002802cc02200041d4026a280200200110b90220002802d80221020240200141046a2206280200200428020022036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a220336020020002802dc0221000240200628020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a3602002000410c6a200110b5022000412c6a21030240200141046a2208280200200228020022066b411f4b0d002001200641201077200141086a28020021060b200128020020066a22022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200141086a2204200641206a360200200041cc006a200110b502200041ec006a200110b5022000418c016a200110b502200041ac016a210302402008280200200428020022066b413f4b0d002001200641c0001077200428020021060b200128020020066a22022003290000370000200241386a200341386a290000370000200241306a200341306a290000370000200241286a200341286a290000370000200241206a200341206a290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a2900003700002004200641c0006a360200200041ec016a200110b5022000418c026a200110b502200041ac026a200110b50220002802cc02200041d4026a280200200110b90220002802d80221020240200141046a2206280200200428020022036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a220336020020002802dc0221000240200628020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a3602002000410c6a200110b5022000412c6a21030240200141046a2208280200200228020022066b411f4b0d002001200641201077200141086a28020021060b200128020020066a22022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200141086a2204200641206a360200200041cc006a200110b502200041ec006a200110b5022000418c016a200110b502200041ac016a210302402008280200200428020022066b413f4b0d002001200641c0001077200428020021060b200128020020066a22022003290000370000200241386a200341386a290000370000200241306a200341306a290000370000200241286a200341286a290000370000200241206a200341206a290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a2900003700002004200641c0006a360200200041ec016a200110b5022000418c026a200110b502200041ac026a200110b50220002802cc02200041d4026a280200200110b90220002802d80221030240200141046a280200200428020022006b41034b0d002001200041041077200141086a28020021000b200128020020006a2003360000200141086a200041046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a412f3a00002002200341016a22033602000240024002400240024020002802040e0500010203040b0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41333a00002002200341016a220336020002400240024020002802040e03000102080b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200028021021060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028021421000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028020821060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028020c21020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200041106a28020021000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a413c3a00002002200341016a220336020002400240024020002d00040e03000102070b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028022821060240200428020020036b41034b0d002001200341041077200228020021030b200041056a2100200128020020036a20063600002002200341046a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020821000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a2202200341016a2203360200200028022821060240200428020020036b41034b0d002001200341041077200228020021030b200041056a2100200128020020036a20063600002002200341046a22033602000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200141086a200341206a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a413d3a00002002200341016a2203360200024020002d00084101460d000240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22062802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2204200341016a2202360200200028022c21080240200628020020026b41034b0d002001200241041077200428020021020b200041096a2103200128020020026a20083600002004200241046a22023602000240200141046a220628020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200028023021020240200628020020036b41034b0d002001200341041077200428020021030b200128020020036a20023600002004200341046a2203360200200028023421020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200041c0006a2903002105200029033821070240200428020020036b410f4b0d002001200341101077200228020021030b200128020020036a22042005370008200420073700002002200341106a2203360200200041d0006a2903002105200029034821070240200141046a28020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a2202280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a413f3a00002004200341016a220336020002400240024002400240024002400240024020002d00080e090001020304050607080b0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020c21040240200141046a220628020020036b41034b0d002001200341041077200228020021030b200128020020036a20043600002002200341046a2203360200200028021021020240200628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200028021421000240200141046a28020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2202200341016a2203360200200028020c21000240200141046a28020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b024020022802002003470d002001200341011077200141086a28020021030b200041096a2104200128020020036a41023a0000200141086a2208200341016a22033602000240200141046a28020020036b411f4b0d002001200341201077200828020021030b200128020020036a22062004290000370000200641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a2900003700002008200341206a2203360200024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00290e24000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223240b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c230b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a22033602000c220b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c210b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000c200b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a22033602000c1f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a22033602000c1e0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41063a0000200141086a200341016a22033602000c1d0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41073a0000200141086a200341016a22033602000c1c0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41083a0000200141086a200341016a22033602000c1b0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41093a0000200141086a200341016a22033602000c1a0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410a3a0000200141086a200341016a22033602000c190b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410b3a0000200141086a200341016a22033602000c180b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410c3a0000200141086a200341016a22033602000c170b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410d3a0000200141086a200341016a22033602000c160b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410e3a0000200141086a200341016a22033602000c150b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a410f3a0000200141086a200341016a22033602000c140b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41103a0000200141086a200341016a22033602000c130b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41113a0000200141086a200341016a22033602000c120b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41123a0000200141086a200341016a22033602000c110b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41133a0000200141086a200341016a22033602000c100b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41143a0000200141086a200341016a22033602000c0f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41153a0000200141086a200341016a22033602000c0e0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41163a0000200141086a200341016a22033602000c0d0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41173a0000200141086a200341016a22033602000c0c0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41183a0000200141086a200341016a22033602000c0b0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41193a0000200141086a200341016a22033602000c0a0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411a3a0000200141086a200341016a22033602000c090b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411b3a0000200141086a200341016a22033602000c080b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411c3a0000200141086a200341016a22033602000c070b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411d3a0000200141086a200341016a22033602000c060b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411e3a0000200141086a200341016a22033602000c050b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a411f3a0000200141086a200341016a22033602000c040b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41203a0000200141086a200341016a22033602000c030b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41213a0000200141086a200341016a22033602000c020b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41223a0000200141086a200341016a22033602000c010b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41233a0000200141086a200341016a22033602000b200028022c21040240200228020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2004360000200141086a2202200341046a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a2202200341016a2203360200200028020c21040240200141046a220628020020036b41034b0d002001200341041077200228020021030b200128020020036a20043600002002200341046a2203360200200028021021020240200628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200028021421040240200141046a220628020020036b41034b0d002001200341041077200228020021030b200128020020036a20043600002002200341046a2203360200200041206a2903002105200029031821070240200628020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b024020022802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41043a0000200141086a2206200341016a22033602000240200141046a220828020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200828020020036b410f4b0d002001200341101077200141086a28020021030b200128020020036a2202200537000820022007370000200141086a2202200341106a2203360200200041c8006a2903002105200029034021070240200141046a28020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b024020022802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41053a0000200141086a2206200341016a22033602000240200141046a220828020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200041386a2903002105200029033021070240200828020020036b410f4b0d002001200341101077200141086a28020021030b200141086a200341106a360200200128020020036a22012005370008200120073700000f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41063a0000200141086a2204200341016a2202360200200028022c21060240200141046a220828020020026b41034b0d002001200241041077200428020021020b200041096a2103200128020020026a20063600002004200241046a22023602000240200828020020026b411f4b0d002001200241201077200141086a28020021020b200128020020026a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200141086a2204200241206a2203360200200041386a2903002105200029033021070240200141046a28020020036b410f4b0d002001200341101077200428020021030b2004200341106a360200200128020020036a22012005370008200120073700000f0b024020022802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41073a0000200141086a2206200341016a22033602000240200141046a220828020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21020240200828020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200041c0006a2903002105200029033821070240200141046a220428020020036b410f4b0d002001200341101077200228020021030b200128020020036a22062005370008200620073700002002200341106a2203360200200028023021020240200428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200028023421000240200141046a28020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b024020022802002003470d002001200341011077200141086a28020021030b200128020020036a41083a0000200141086a2202200341016a2203360200200028020c21040240200141046a220628020020036b41034b0d002001200341041077200228020021030b200128020020036a20043600002002200341046a2203360200200028021021000240200628020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41c0003a00002002200341016a220336020002400240024002400240024002400240024002400240024020002d00080e0c000102030405060708090a0b0d0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41013a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200041386a2903002105200029033021070240200428020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a41023a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21020240200141046a220428020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a2202200341046a2203360200200041386a2903002105200029033021070240200428020020036b410f4b0d002001200341101077200228020021030b2002200341106a360200200128020020036a22012005370008200120073700000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41063a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41073a0000200141086a2202200341016a2203360200200028020c21060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200028021021000240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000360000200141086a200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41083a0000200141086a2202200341016a2203360200200028020c21060240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20063600002002200341046a2203360200200141046a2802002102024020002d00104108460d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a36020020002d0010200041116a2d0000200041126a2d00002001108d030f0b024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41093a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041096a2102200128020020036a410a3a0000200141086a2206200341016a22033602000240200428020020036b411f4b0d002001200341201077200628020021030b200128020020036a22042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002006200341206a2203360200200028022c21020240200141046a28020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2002360000200141086a200341046a3602002000280230200041386a280200200110b9020f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a410b3a0000200141086a2202200341016a2203360200200028020c21000240200428020020036b41034b0d002001200341041077200228020021030b200128020020036a20003600002002200341046a3602000f0b0240200141046a280200200141086a22022802002203470d002001200341011077200228020021030b200128020020036a41e3003a00002002200341016a2203360200200041106a2102024020002903084201510d000240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a220336020002400240024020022802000e03000102040b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a2202200341016a2203360200200029031821050240200428020020036b41074b0d002001200341081077200228020021030b200128020020036a20053700002002200341086a3602000f0b0240200141046a22042802002003470d002001200341011077200141086a28020021030b200041206a2106200128020020036a41013a0000200141086a2202200341016a2203360200200029031821050240200428020020036b41074b0d002001200341081077200228020021030b200128020020036a20053700002002200341086a36020020062001108f030f0b200041186a21000240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a36020020002001108f030f0b200041a0076a2104200041d8036a21000240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602002002200110eb022000200110eb022004200110e9020b0b8b0a01027f024002400240024002400240024002400240200041ff01710e080001020304050607000b0240200341046a280200200341086a22012802002200470d002003200041011077200128020021000b200328020020006a41003a00002001200041016a3602000f0b0240200341046a280200200341086a22012802002200470d002003200041011077200128020021000b200328020020006a41013a00002001200041016a3602000f0b0240200341046a280200200341086a22012802002200470d002003200041011077200128020021000b200328020020006a41023a00002001200041016a3602000f0b0240200341046a2204280200200341086a22052802002200470d002003200041011077200528020021000b200328020020006a41033a00002005200041016a2200360200024020042802002000470d002003200041011077200341086a28020021000b200328020020006a20013a0000200341086a2201200041016a22003602000240200341046a2802002000470d002003200041011077200128020021000b200328020020006a20023a00002001200041016a3602000f0b0240200341046a280200200341086a22012802002200470d002003200041011077200128020021000b200328020020006a41043a00002001200041016a3602000f0b0240200341046a280200200341086a22012802002200470d002003200041011077200128020021000b200328020020006a41053a00002001200041016a3602000f0b0240200341046a280200200341086a22022802002200470d002003200041011077200228020021000b200328020020006a41063a00002002200041016a2200360200024002400240024002400240200141ff01710e06000102030405070b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41003a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41013a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41023a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41033a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41043a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41053a0000200341086a200041016a3602000f0b0240200341046a280200200341086a22022802002200470d002003200041011077200228020021000b200328020020006a41073a00002002200041016a2200360200024002400240200141ff01710e03000102030b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41003a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41013a0000200341086a200041016a3602000f0b0240200341046a2802002000470d002003200041011077200341086a28020021000b200328020020006a41023a0000200341086a200041016a3602000b0b830301057f230041106b220224000240200141046a280200200141086a220328020022046b411f4b0d002001200441201077200328020021040b2003200441206a360200200128020020046a22042000290000370000200441086a200041086a290000370000200441106a200041106a290000370000200441186a200041186a2900003700002002200041206a360204200241046a200110df022002200041306a360208200241086a200110df02200041c0006a28020021042001200041c8006a280200220010ac0202402000450d00200041306c2105200141086a2103200141046a2106034002402006280200200328020022006b411f4b0d002001200041201077200328020021000b2003200041206a360200200128020020006a2200200441106a290000370000200041086a200441186a290000370000200041106a200441206a290000370000200041186a200441286a2900003700002002200436020c2002410c6a200110df02200441306a2104200541506a22050d000b0b200241106a24000bbb0f02037f017e024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e1b000102030405060708090a0b0c0d0e0f101112131415161718191a1b0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41003a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41013a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41023a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41033a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41043a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41053a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41063a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41073a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41083a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41093a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410a3a00002002200041016a3602000f0b200041d0036a2103200041086a21040240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410b3a00002002200041016a3602002004200110eb022003200110e9020f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410c3a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410d3a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410e3a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a410f3a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41103a00002002200041016a3602000f0b0240200141046a2204280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41113a00002003200241016a2202360200200029030821050240200428020020026b41074b0d002001200241081077200141086a28020021020b200128020020026a2005370000200141086a200241086a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41123a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41133a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41143a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41153a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41163a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41173a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41183a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41193a00002002200041016a3602000f0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a411a3a00002002200041016a3602000b0b8bfe0109087f017e027f017e027f017e017f087e047f230041b02c6b2202240002400240200128020422030d00200041193a00000c010b200141046a2104200128020022052d0000210620012003417f6a22073602042001200541016a36020002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020060e640019190102190304051906071919191908090a0b0c0d0e0f10191919191919191919191919191919191919191119191219191913191919191919191914151916171919191919191919191919191919191919191919191919191919191919191919191918190b02402007450d0020052d0001210620012003417e6a22083602042001200541026a36020041022109024002400240024002400240024020060e06000106020304070b20084108490d062005290002210a2001200341766a220636020420012005410a6a3602002006450d0620052d000a21062001200341756a220736020420012005410b6a3602004100210b02400240024020060e03020001090b4101210b0c010b4102210b0b2007450d0620052d000b21062001200341746a36020420012005410c6a360200410021094100210c20060e020504060b200241c80b6a200110910320022d00c80b4108460d05200428020022054108490d0520022902cc0b210a20022802c80b210720012802002203290000210d2001200541786a22063602042001200341086a3602002006450d0520032d000821062001200541776a22043602042001200341096a3602004100210e02400240024020060e03020001080b4101210e0c010b4102210e0b2004450d0520032d000921062001200541766a36020420012003410a6a3602004100210f0240024020060e020100070b4101210f0b200d4210882110200d420888a7210c200da7210b410121090c040b200241c80b6a200110860220022d00c80b4101460d042002418a2a6a20022d00cb0b3a0000200241ec1d6a200241e60b6a2f01003b0100200220022f00c90b3b01882a2002200241e20b6a2801003602e81d200241da0b6a350100200241de0b6a330100422086842110200241d00b6a290300210a200241d80b6a2d0000210b200241d90b6a2d0000210c200241e00b6a2d0000210e200241e10b6a2d0000210f200241e80b6a2d0000211120022802cc0b2107410321090c030b200241c80b6a200110860220022d00c80b4101460d032002418a2a6a20022d00cb0b3a000041042109200241e81d6a41046a200241e60b6a2f01003b0100200220022f00c90b3b01882a2002200241e20b6a2801003602e81d200241da0b6a350100200241de0b6a330100422086842110200241d00b6a290300210a200241d80b6a2d0000210b200241d90b6a2d0000210c200241e00b6a2d0000210e200241e10b6a2d0000210f200241e80b6a2d0000211120022802cc0b21070c020b200241c80b6a200110860220022d00c80b4101460d022002418c296a41026a220520022d00cb0b3a0000200241f0286a41086a200241c80b6a41106a290300370300200241f0286a41106a200241c80b6a41186a290300370300200241f0286a41186a200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f02820022802cc0b2107200241c80b6a200110860220022d00c80b4101460d02200241e0006a41186a200241e10b6a290000370300200241e0006a41106a200241d90b6a290000370300200241e0006a41086a200241d10b6a290000370300200241882a6a41026a20052d00003a0000200220022900c90b370360200220022f018c293b01882a200241fe286a330100211020022903f028210a20022d00f828210b20022d00f928210c20022d008029210e20022d008129210f20023501fa28210d200241ec1d6a20024186296a2f01003b010020022002280182293602e81d200d201042208684211020022d0088292111410521090c010b4101210c0b200041096a20022f01882a3b0000200041226a20022802e81d360000200041296a20022903603700002000410b6a200241882a6a41026a2d00003a0000200041266a200241e81d6a41046a2f01003b0000200041316a200241e0006a41086a290300370000200041396a200241e0006a41106a290300370000200041c1006a200241e0006a41186a290300370000200041003a00002000411e6a20104220883d00002000411a6a20103e0000200041286a20113a0000200041216a200f3a0000200041206a200e3a0000200041196a200c3a0000200041186a200b3a0000200041106a200a3700002000410c6a2007360000200041086a20093a0000200020022800b021360001200041046a200241b0216a41036a280000360000200041c9006a20022800b016360000200041cc006a200241b0166a41036a2800003600000c1e0b200041193a00000c1d0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b200241c80b6a200110860220022d00c80b4101460d032002418c296a41026a220520022d00cb0b3a0000200241f0286a41086a2203200241c80b6a41106a290300370300200241f0286a41106a220b200241c80b6a41186a290300370300200241f0286a41186a220e200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f028200428020022044104490d0320022802cc0b21072001280200220f280000210620012004417c6a3602042001200f41046a360200200241b0166a41026a20052d00003a0000200241e0006a41086a2003290300370300200241e0006a41106a200b290300370300200241e0006a41186a200e2d00003a0000200220022f018c293b01b016200220022903f028370360410021010c020b20074104490d022005280002210720012003417a6a3602042001200541066a360200410121010c010b20074104490d012005280002210620012003417a6a3602042001200541066a360200200241c80b6a200110860220022d00c80b4101460d0141022101200241b0166a41026a20022d00cb0b3a0000200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a0000200220022f00c90b3b01b0162002200241c80b6a41086a29030037036020022802cc0b21070b200041056a20022f01b0163b0000200041076a200241b0166a41026a2d00003a0000200241b0216a41086a2205200241e0006a41086a290300370300200241b0216a41106a2203200241e0006a41106a290300370300200241b0216a41186a2204200241e0006a41186a280200360200200220022903603703b021200041013a0000200020022f00e81d3b0001200041036a200241e81d6a41026a2d00003a0000200041086a2007360000200041046a20013a0000200041286a20063600002000410c6a20022903b021370000200041146a20052903003700002000411c6a2003290300370000200041246a20042802003600000c1d0b200041193a00000c1c0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020002400240024002400240024002400240024020060e080001020304050607090b200241c80b6a200110860220022d00c80b4101460d08200241b0166a41026a220320022d00cb0b3a0000200220022f00c90b3b01b016200428020022064110490d08200241c80b6a41106a2903002110200241c80b6a41086a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21052001200641706a36020420012001280200220641106a360200200241b0216a41026a20032d00003a0000200220022f01b0163b01b021200641086a290000211320062900002114410021060c070b200241c80b6a200110860220022d00c80b4101460d07200241e81d6a41026a220320022d00cb0b3a0000200220022f00c90b3b01e81d200428020022064110490d07200241c80b6a41106a2903002110200241c80b6a41086a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21052001200641706a36020420012001280200220641106a360200200241b0216a41026a20032d00003a0000200220022f01e81d3b01b021200641086a290000211320062900002114410121060c060b200241c80b6a200110860220022d00c80b4101460d06200241b0166a41026a20022d00cb0b3a0000200220022f00c90b3b01b016200241c80b6a41106a22032903002110200241d00b6a2206290300210a200241e80b6a2207310000210d200241e00b6a220b290300211220022802cc0b2105200241c80b6a200110860220022d00c80b4101460d06200241e81d6a41026a20022d00cb0b3a0000200220022f00c90b3b01e81d200428020022044110490d06200329030021132006290300211420073100002115200b290300211620022802cc0b21032001200441706a36020420012001280200220741106a36020041022106200241b0216a41026a200241b0166a41026a2d00003a0000200241b0296a41026a200241e81d6a41026a2d00003a0000200220022f01b0163b01b021200220022f01e81d3b01b029200741086a2900002117200729000021180c050b200241c80b6a200110860220022d00c80b4101460d05200241b2166a20022d00cb0b3a0000200220022f00c90b3b01b016200428020022034110490d05200241c80b6a41106a2903002110200241c80b6a41086a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21052001200341706a220736020420012001280200220641106a36020020074110490d05200641086a2900002113200629000021142001200341606a3602042001200641206a360200200241b0216a41026a200241b0166a41026a2d00003a0000200220022f01b0163b01b021200641186a290000221542108821192015420888a7210120062900102116410321060c040b200241c80b6a200110860220022d00c80b4101460d04200241f0296a41026a220320022d00cb0b3a0000200241882a6a41086a2206200241c80b6a41106a290300370300200241882a6a41106a200241c80b6a41186a290300370300200241882a6a41186a2207200241e80b6a2d00003a0000200220022f00c90b3b01f0292002200241c80b6a41086a2903003703882a200428020022044110490d0420022802cc0b21052001200441706a36020420012001280200220441106a360200200241b0216a41026a20032d00003a0000200220022f01f0293b01b021200441086a290000211320042900002114200629030021102007310000210d20022903882a210a20022903982a2112410421060c030b200241c80b6a200110860220022d00c80b4101460d03200241c8006a41026a220320022d00cb0b3a0000200241e81d6a41086a2206200241c80b6a41106a290300370300200241e81d6a41106a200241c80b6a41186a290300370300200241e81d6a41186a2207200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703e81d200428020022044110490d0320022802cc0b21052001200441706a36020420012001280200220441106a360200200241b0216a41026a20032d00003a0000200220022f01483b01b021200441086a290000211320042900002114200629030021102007310000210d20022903e81d210a20022903f81d2112410521060c020b200241c80b6a200110860220022d00c80b4101460d02200241f0286a41026a220320022d00cb0b3a0000200241b0166a41086a2206200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a2207200241e80b6a2d00003a0000200220022f00c90b3b01f0282002200241c80b6a41086a2903003703b016200428020022044110490d0220022802cc0b21052001200441706a36020420012001280200220441106a360200200241b0216a41026a20032d00003a0000200220022f01f0283b01b021200441086a290000211320042900002114200629030021102007310000210d20022903b016210a20022903c0162112410621060c010b200241c80b6a200110860220022d00c80b4101460d01200241c8006a41026a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a2203290300370300200241b0166a41106a200241c80b6a41186a2206290300370300200241b0166a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a220b2903003703b01620022802cc0b2105200241c80b6a200110860220022d00c80b4101460d012002418c296a41026a20022d00cb0b3a0000200241f0286a41086a2003290300370300200241f0286a41106a2006290300370300200241f0286a41186a20072d00003a0000200220022f00c90b3b018c292002200b2903003703f028200428020022064110490d0120022802cc0b21032001200641706a220436020420012001280200220741106a3602002004450d01200741086a29000021172007290000211820072d0010210420012006416f6a3602042001200741116a360200410021010240024020040e020100030b410121010b200241b0216a41026a200241c8006a41026a2d00003a0000200241b0296a41026a2002418c296a41026a2d00003a0000200220022f01483b01b021200220022f018c293b01b029200241b0166a41086a2903002110200241b0166a41186a310000210d200241f0286a41086a2903002113200241f0286a41186a310000211520022903b016210a20022903c016211220022903f02821142002290380292116410721060b200041096a20022f01b0213b0000200041296a20022f01b0293b00002000410b6a200241b0216a41026a2d00003a00002000412b6a200241b0296a41026a2d00003a0000200041d8006a2017370000200041d0006a2018370000200041c8006a20194210862001ad42ff018342088684201542ff018384370000200041c0006a2016370000200041386a2013370000200041306a2014370000200041286a200d3c0000200041206a2012370000200041186a2010370000200041106a200a370000200041023a000020002002280060360001200041046a200241e3006a2800003600002000412c6a20033600002000410c6a2005360000200041086a20063a00000c1c0b200041193a00000c1b0b02402007450d0020052d0001210620012003417e6a220e3602042001200541026a3602004104210b02400240024002400240024002400240024020060e09000102030804050607090b200e4104490d082005280002210720012003417a6a22063602042001200541066a36020020064110490d0820012003416a6a22063602042001200541166a36020020064110490d082005410e6a29000021182005290006211520012003415a6a3602042001200541266a3602002005411e6a290000210a200529001621104100210b0c070b200241c80b6a200110860220022d00c80b4101460d07200241b0166a41026a220520022d00cb0b3a0000200220022f00c90b3b01b016200428020022034110490d07200241c80b6a41106a2903002118200241c80b6a41086a2903002115200241e80b6a310000210a200241e00b6a290300211020022802cc0b21072001200341706a36020420012001280200220341106a360200200241d8296a41026a20052d00003a0000200220022f01b0163b01d829200a42ff0183210a200341086a29000021122003290000210d4101210b0c060b200241c80b6a200110860220022d00c80b4101460d064102210b200241f0296a41026a220520022d00cb0b3a0000200241882a6a41086a2203200241c80b6a41106a290300370300200241882a6a41106a200241c80b6a41186a290300370300200241882a6a41186a2206200241e80b6a2d00003a0000200220022f00c90b3b01f0292002200241c80b6a41086a2903003703882a200428020022044110490d0620022802cc0b21072001200441706a36020420012001280200220441106a360200200241d8296a41026a20052d00003a0000200220022f01f0293b01d829200441086a29000021122004290000210d200329030021182006310000210a20022903882a211520022903982a21100c050b200e4104490d052005280002210720012003417a6a3602042001200541066a3602004103210b0c040b200241c80b6a200110860220022d00c80b4101460d04200241c8006a41026a220520022d00cb0b3a0000200241e81d6a41086a2203200241c80b6a41106a290300370300200241e81d6a41106a200241c80b6a41186a290300370300200241e81d6a41186a2206200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703e81d200428020022044110490d0420022802cc0b21072001200441706a36020420012001280200220441106a360200200241d8296a41026a20052d00003a0000200220022f01483b01d829200441086a29000021122004290000210d200329030021182006310000210a20022903e81d211520022903f81d21104105210b0c030b200241c80b6a200110860220022d00c80b4101460d03200241f0286a41026a220520022d00cb0b3a0000200241b0166a41086a2203200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a2206200241e80b6a2d00003a0000200220022f00c90b3b01f0282002200241c80b6a41086a2903003703b016200428020022044110490d0320022802cc0b21072001200441706a36020420012001280200220441106a360200200241d8296a41026a20052d00003a0000200220022f01f0283b01d829200441086a29000021122004290000210d200329030021182006310000210a20022903b016211520022903c01621104106210b0c020b200241c80b6a200110860220022d00c80b4101460d02200241c8006a41026a220520022d00cb0b3a0000200241b0166a41086a2203200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a2206200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703b016200428020022044110490d0220022802cc0b21072001200441706a36020420012001280200220441106a360200200241d8296a41026a20052d00003a0000200220022f01483b01d829200441086a29000021122004290000210d200329030021182006310000210a20022903b016211520022903c01621104107210b0c010b200241c80b6a200110860220022d00c80b4101460d012002418c296a41026a220520022d00cb0b3a00004108210b200241f0286a41086a2203200241c80b6a41106a2206290300370300200241f0286a41106a200241c80b6a41186a2204290300370300200241f0286a41186a220e200241e80b6a220f2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a22112903003703f02820022802cc0b2107200241c80b6a200110860220022d00c80b4101460d01200241e0006a41086a200f2d00003a0000200241d8296a41026a20052d00003a000020022004290300370360200220022f018c293b01d82920023500c90b20023300cd0b20023100cf0b4210868442208684420886200e31000084210a200629030021122011290300210d2003290300211820022903f028211520022903802921100b200041096a20022f01d8293b00002000410b6a200241d8296a41026a2d00003a0000200241b0216a41086a2201200241e0006a41086a290300370300200220022903603703b021200041386a2012370000200041306a200d370000200041286a200a370000200041206a2010370000200041186a2018370000200041106a2015370000200041033a0000200020022800b029360001200041046a200241b0296a41036a2800003600002000410c6a2007360000200041086a200b3a0000200041c0006a20022903b021370000200041c8006a20012903003700000c1b0b200041193a00000c1a0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020020060d00200241c80b6a200110bb0220022d00c80b4101460d00200241e8006a200241d10b6a290000370300200220022900c90b3703602002200110c10120022802000d002004280200220320022802042205490d002005417f4c0d160240024020050d00410121060c010b200510382206450d1820064100200510d60b1a0b200620012802002207200510d40b21062001200320056b3602042001200720056a360200200241b0216a41086a200241e0006a41086a290300221037030020022002290360220a3703b021200041086a2005ad220d422086200d84370000200041046a2006360000200041043a0000200041106a200a370000200041186a20103700000c1a0b200041193a00000c190b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020020060d0020074104490d002005280002210620012003417a6a3602042001200541066a360200200041046a2006360200200041053a00000c190b200041193a00000c180b2007450d1620052d0001210620012003417e6a3602042001200541026a3602004101210502400240024020060e03000201190b200241086a200110c10102402002280208450d00200241003602c80b0c190b200241c80b6a2001200228020c10850220022802c80b450d18200241e0006a41086a200241c80b6a41086a280200360200200220022903c80b370360410021050c010b410221050b200241b0216a41086a200241e0006a41086a28020022013602002002200229036022103703b021200041063a0000200020022f00b0163b0001200041036a200241b0166a41026a2d00003a0000200041046a2005360000200041086a2010370000200041106a20013600000c170b02402007450d0020052d0001210720012003417e6a3602042001200541026a36020041012105024002400240024020070e03000201040b200241c80b6a200110860220022d00c80b4101460d03200241de006a20022d00cb0b3a0000200241c8006a41086a200241e00b6a290300370300200241c8006a41106a200241e80b6a2d00003a0000200220022f00c90b3b015c2002200241c80b6a41106a290300370348200241c80b6a41086a290300211020022802cc0b2106410021050c010b200241106a200110c10120022802100d022002280214220b200428020041d0006e22052005200b4b1bad42d0007e2210422088a70d152010a72203417f4c0d150240024020030d00410821060c010b200310382206450d170b41002105200241003602982920022006360290292002200341d0006e360294290240200b450d00200241ec0b6a211a200241c80b6a41086a2107200241c80b6a410172211b0340200241c80b6a20011086020240024020022d00c80b4101470d00410021030c010b2002418c296a41026a2204201b41026a2d00003a0000200241f0286a41086a220e200741086a290000370300200241f0286a41106a220f200741106a290000370300200241f0286a41186a2211200741186a2d00003a00002002201b2f00003b018c29200220072900003703f02820022802cc0b210c200241c80b6a2001109203024020022802e80b22030d00410021030c010b200241e0006a41186a200241c80b6a41186a290300370300200241e0006a41106a200241c80b6a41106a290300370300200241e0006a41086a2007290300370300200241f0296a41086a201a41086a280200360200200241e81d6a41186a20112d00003a0000200241e81d6a41106a200f290300370300200241e81d6a41086a200e290300370300200220022903c80b370360200220022f018c293b01802a200220022903f0283703e81d2002201a2902003703f029200220042d00003a00822a200c211c0b200241882a6a41086a2204200241e81d6a41086a290300370300200241882a6a41106a220e200241e81d6a41106a290300370300200241882a6a41186a220f200241e81d6a41186a2d00003a0000200241b0216a41086a2211200241e0006a41086a290300370300200241b0216a41106a220c200241e0006a41106a290300370300200241b0216a41186a2209200241e0006a41186a290300370300200220022d00822a3a00ea29200220022f01802a3b01e829200220022903e81d3703882a200220022903603703b021200241d8296a41086a2208200241f0296a41086a280200360200200220022903f0293703d8292003450d03200241b0296a41086a221d2004290300370300200241b0296a41106a2204200e290300370300200241b0296a41186a220e200f2d00003a0000200241b0166a41086a220f2011290300370300200241b0166a41106a2211200c290300370300200241b0166a41186a220c2009290300370300200220022d00ea293a00d229200220022f01e8293b01d029200220022903882a3703b029200220022903b0213703b016200241a0296a41086a22092008280200360200200220022903d8293703a02902402005200228029429470d0020024190296a20054101109303200228029029210620022802982921050b2006200541d0006c6a220520022f01d0293b010020022d00d22921082005201c360003200541026a20083a00002005411f6a200e2d00003a0000200520022903b0293700072005410f6a201d290300370000200541176a2004290300370000200541286a200f290300370300200520022903b01637032020112903002110200c290300210a20052003360240200541cc006a2009280200360200200520022903a029370244200541386a200a370300200541306a2010370300200220022802982941016a220536029829200b417f6a220b0d000b20022802902921060b2006450d02200229029429211041022105200241dc006a41026a200241ed286a41026a2d00003a0000200220022f00ed283b015c0b200041056a20022f015c3b0000200041146a2002290348370000200041256a20022f00453b0000200041076a200241dc006a41026a2d00003a00002000411c6a200241c8006a41086a290300370000200041246a200241d8006a2d00003a0000200041276a200241c5006a41026a2d00003a0000200041073a00002000410c6a2010370000200041086a2006360000200041046a20053a0000200020022f00423b0001200041036a200241c2006a41026a2d00003a00000c180b200228029029210602402005450d00200541d0006c2105200641c4006a21010340024020012802002203450d00200341306c450d002001417c6a28020010390b200141d0006a2101200541b07f6a22050d000b0b2002280294292201450d00200141d0006c450d00200610390b200041193a00000c160b02402007450d0020052d0001210620012003417e6a220b3602042001200541026a360200410821040240024020060e020001020b200b4104490d012005280002210720012003417a6a3602042001200541066a360200200241c80b6a200110910320022d00c80b22044108460d01200220022900c90b3703602002200241c80b6a41086a2800003600670b200041106a2002280067360000200041096a2002290360370000200041083a0000200020022f00b0213b0001200041036a200241b0216a41026a2d00003a0000200041086a20043a0000200041046a20073600000c160b200041193a00000c150b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024002400240024002400240024020060e0a000102030405060708090b0b200241c80b6a200110860220022d00c80b4101460d0a200241da296a20022d00cb0b3a0000200220022f00c90b3b01d829200241d80b6a2903002110200241d00b6a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b2106410021030c090b200241c80b6a200110860220022d00c80b4101460d09200241b0166a41026a220520022d00cb0b3a0000200220022f00c90b3b01b016200428020022034110490d09200241c80b6a41106a2903002110200241c80b6a41086a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21062001200341706a36020420012001280200220341106a360200200241d8296a41026a20052d00003a0000200220022f01b0163b01d829200341086a290000211320032900002117410121030c080b200241c80b6a200110860220022d00c80b4101460d0841022103200241b0166a41026a220520022d00cb0b3a0000200220022f00c90b3b01b016200428020022074110490d08200241c80b6a41106a2903002110200241c80b6a41086a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21062001200741706a36020420012001280200220741106a360200200241d8296a41026a20052d00003a0000200220022f01b0163b01d829200741086a2900002113200729000021170c070b200241c80b6a200110860220022d00c80b4101460d07200241e81d6a41026a220320022d00cb0b3a0000200220022f00c90b3b01e81d200428020022074104490d07200241d80b6a2903002110200241d00b6a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b210620012802002204280000210520012007417c6a3602042001200441046a360200200241d8296a41026a20032d00003a0000200220022f01e81d3b01d829410321030c060b200241c80b6a200110860220022d00c80b4101460d06200241b0166a41026a220720022d00cb0b3a0000200220022f00c90b3b01b01641042103200428020022044104490d06200241d80b6a2903002110200241d00b6a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b21062001280200220b280000210520012004417c6a3602042001200b41046a360200200241d8296a41026a20072d00003a0000200220022f01b0163b01d8290c050b200241c80b6a200110860220022d00c80b4101460d05200241e81d6a41026a220320022d00cb0b3a0000200220022f00c90b3b01e81d200428020022074104490d05200241d80b6a2903002110200241d00b6a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b210620012802002204280000210520012007417c6a3602042001200441046a360200200241d8296a41026a20032d00003a0000200220022f01e81d3b01d829410521030c040b20074104490d042005280002210620012003417a6a360204410621032001200541066a3602000c030b200241c80b6a200110860220022d00c80b4101460d03200241b0166a41026a20022d00cb0b3a0000200220022f00c90b3b01b016200241c80b6a41106a22052903002110200241c80b6a41086a2203290300210a200241e80b6a2207310000210d200241c80b6a41186a220b290300211220022802cc0b2106200241c80b6a200110860220022d00c80b4101460d03200241f0296a41026a20022d00cb0b3a0000200241882a6a41086a2005290300370300200241882a6a41106a200b290300370300200241882a6a41186a20072d00003a0000200220022f00c90b3b01f029200220032903003703882a200428020022034110490d0320022802cc0b21052001200341706a36020420012001280200220341106a360200200241d8296a41026a200241b0166a41026a2d00003a0000200241a0296a41026a200241f0296a41026a2d00003a0000200241e0006a41086a200241a02a6a2d00003a0000200220022f01b0163b01d829200220022f01f0293b01a029200220022903982a370360200341086a290000211820032900002115200241882a6a41086a290300211320022903882a2117410721030c020b200241c80b6a200110860220022d00c80b4101460d02200241c8006a41026a20022d00cb0b3a0000200241e81d6a41086a200241c80b6a41106a2205290300370300200241e81d6a41106a200241c80b6a41186a2203290300370300200241e81d6a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a220b2903003703e81d20022802cc0b2106200241c80b6a200110860220022d00c80b4101460d02200241f0286a41026a20022d00cb0b3a0000200241b0166a41086a2005290300370300200241b0166a41106a2003290300370300200241b0166a41186a20072d00003a0000200220022f00c90b3b01f0282002200b2903003703b016200428020022034110490d0220022802cc0b21052001200341706a36020420012001280200220741106a360200200241d8296a41026a200241c8006a41026a2d00003a0000200241a0296a41026a200241f0286a41026a2d00003a000041082103200241e0006a41086a200241b0166a41186a2d00003a0000200220022f01483b01d829200220022f01f0283b01a029200220022903c016370360200741086a290000211820072900002115200241e81d6a41086a2903002110200241e81d6a41186a310000210d200241b0166a41086a290300211320022903e81d210a20022903f81d211220022903b01621170c010b200241c80b6a200110860220022d00c80b4101460d01200241c8006a41026a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a2205290300370300200241b0166a41106a200241c80b6a41186a2203290300370300200241b0166a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a220b2903003703b01620022802cc0b2106200241c80b6a200110860220022d00c80b4101460d012002418c296a41026a20022d00cb0b3a0000200241f0286a41086a2005290300370300200241f0286a41106a2003290300370300200241f0286a41186a20072d00003a0000200220022f00c90b3b018c292002200b2903003703f028200428020022034110490d0120022802cc0b21052001200341706a36020420012001280200220341106a360200200241d8296a41026a200241c8006a41026a2d00003a0000200241a0296a41026a2002418c296a41026a2d00003a0000200241e0006a41086a200241f0286a41186a2d00003a0000200220022f01483b01d829200220022f018c293b01a0292002200229038029370360200341086a290000211820032900002115200241b0166a41086a2903002110200241b0166a41186a310000210d200241f0286a41086a290300211320022903b016210a20022903c016211220022903f0282117410921030b200041096a20022f01d8293b0000200041296a20022f01a0293b00002000410b6a200241d8296a41026a2d00003a00002000412b6a200241a0296a41026a2d00003a0000200241b0216a41086a2201200241e0006a41086a290300370300200220022903603703b021200041093a0000200041386a2013370000200041306a2017370000200041286a200d3c0000200041206a2012370000200041186a2010370000200041106a200a370000200020022800b029360001200041046a200241b3296a2800003600002000412c6a20053600002000410c6a2006360000200041086a20033a0000200041d8006a2018370000200041d0006a2015370000200041c0006a20022903b021370000200041c8006a20012903003700000c150b200041193a00000c140b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602000240024002400240024002400240024020060e06000102030405080b200241c80b6a200110860220022d00c80b4101460d07200241da296a20022d00cb0b3a0000200241b0216a41086a200241c80b6a41106a290300370300200241b0216a41106a200241c80b6a41186a290300370300200241b0216a41186a200241e80b6a2d00003a0000200220022f00c90b3b01d8292002200241c80b6a41086a2903003703b02120022802cc0b2105410021010c050b200241c80b6a200110860220022d00c80b4101460d06200241f0296a41026a220320022d00cb0b3a0000200241882a6a41086a2206200241c80b6a41106a2207290300370300200241882a6a41106a2204200241c80b6a41186a220b290300370300200241882a6a41186a220e200241e80b6a220f2d00003a0000200220022f00c90b3b01f0292002200241c80b6a41086a22112903003703882a20022802cc0b2105200241c80b6a200110860220022d00c80b4101460d06200241a0296a41026a20022d00cb0b3a0000200241b0296a41086a2007290300370300200241b0296a41106a200b290300370300200241b0296a41186a200f2d00003a0000200241d8296a41026a20032d00003a0000200220022f00c90b3b01a029200220112903003703b029200220022f01f0293b01d82920022802cc0b2103200241b0216a41186a200e2d00003a0000200241b0216a41106a2004290300370300200241b0216a41086a2006290300370300200220022903882a3703b021410121010c050b200241c80b6a200110860220022d00c80b4101460d05200241c8006a41026a20022d00cb0b3a0000200241e81d6a41086a200241c80b6a41106a2203290300370300200241e81d6a41106a200241c80b6a41186a2206290300370300200241e81d6a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a22042903003703e81d20022802cc0b2105200241c80b6a200110860220022d00c80b4101460d05200241f0286a41026a20022d00cb0b3a0000200241b0166a41086a2003290300370300200241b0166a41106a2006290300370300200241b0166a41186a20072d00003a0000200220022f00c90b3b01f028200220042903003703b01620022802cc0b2103200241c80b6a200110860220022d00c80b4101460d05200241e0006a41186a200241e10b6a290000370300200241e0006a41106a200241d90b6a290000370300200241e0006a41086a200241d10b6a29000037030041022101200241d8296a41026a200241c8006a41026a2d00003a0000200241b0216a41086a200241e81d6a41086a290300370300200241b0216a41106a200241e81d6a41106a290300370300200241b0216a41186a200241e81d6a41186a2d00003a0000200220022900c90b370360200220022f01483b01d829200220022903e81d3703b021200241a0296a41026a200241f0286a41026a2d00003a0000200220022f01f0283b01a029200241b0296a41186a200241b0166a41186a2d00003a0000200241b0296a41106a200241b0166a41106a290300370300200241b0296a41086a200241b0166a41086a290300370300200220022903b0163703b0290c040b200241c80b6a200110860220022d00c80b4101460d04200241c8006a41026a220320022d00cb0b3a0000200241b0166a41086a2206200241c80b6a41106a2207290300370300200241b0166a41106a2204200241c80b6a41186a220b290300370300200241b0166a41186a220e200241e80b6a220f2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a22112903003703b01620022802cc0b2105200241c80b6a200110860220022d00c80b4101460d04200241a0296a41026a20022d00cb0b3a0000200241b0296a41086a2007290300370300200241b0296a41106a200b290300370300200241b0296a41186a200f2d00003a0000200241d8296a41026a20032d00003a0000200220022f00c90b3b01a029200220112903003703b029200220022f01483b01d82920022802cc0b2103200241b0216a41186a200e2d00003a0000200241b0216a41106a2004290300370300200241b0216a41086a2006290300370300200220022903b0163703b021410321010c030b200241c80b6a200110860220022d00c80b4101460d032002418c296a41026a220320022d00cb0b3a0000200241f0286a41086a2206200241c80b6a41106a2207290300370300200241f0286a41106a2204200241c80b6a41186a220b290300370300200241f0286a41186a220e200241e80b6a220f2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a22112903003703f02820022802cc0b2105200241c80b6a200110860220022d00c80b4101460d03200241a0296a41026a20022d00cb0b3a0000200241b0296a41086a2007290300370300200241b0296a41106a200b290300370300200241b0296a41186a200f2d00003a0000200241d8296a41026a20032d00003a0000200220022f00c90b3b01a029200220112903003703b029200220022f018c293b01d82920022802cc0b2103200241b0216a41186a200e2d00003a0000200241b0216a41106a2004290300370300200241b0216a41086a2006290300370300200220022903f0283703b021410421010c020b200241c80b6a200110860220022d00c80b4101460d02200241da296a20022d00cb0b3a0000200241b0216a41086a200241c80b6a41106a290300370300200241b0216a41106a200241c80b6a41186a290300370300200241b0216a41186a200241e80b6a2d00003a0000200220022f00c90b3b01d8292002200241c80b6a41086a2903003703b02120022802cc0b2105410521010b0b200020013a0001200041026a20022f01d8293b0000200041056a2005360000200041096a20022903b021370000200041226a20022f01a0293b0000200041046a200241d8296a41026a2d00003a0000200041116a200241b0216a41086a290300370000200041196a200241b0216a41106a290300370000200041216a200241b0216a41186a2d00003a0000200041246a200241a0296a41026a2d00003a0000200041256a2003360000200041296a20022903b029370000200041316a200241b0296a41086a290300370000200041396a200241b0296a41106a290300370000200041c1006a200241b0296a41186a2d00003a0000200041c2006a2002290360370000200041ca006a200241e0006a41086a290300370000200041d2006a200241e0006a41106a290300370000200041da006a200241e0006a41186a2903003700002000410a3a00000c140b200041193a00000c130b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020002400240024020060e020001030b200241c80b6a200110860220022d00c80b4101460d022002418c296a41026a220320022d00cb0b3a0000200241f0286a41086a2206200241c80b6a41106a290300370300200241f0286a41106a2207200241c80b6a41186a290300370300200241f0286a41186a220b200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f028200428020022044110490d0220022802cc0b21052001200441706a36020420012001280200220441106a360200200241e81d6a41026a20032d00003a0000200241e0006a41086a2006290300370300200241e0006a41106a2007290300370300200241e0006a41186a200b2d00003a0000200220022f018c293b01e81d200220022903f028370360200441086a29000021102004290000210a410021010c010b200241c80b6a20011086024101210120022d00c80b4101460d01200241ea1d6a20022d00cb0b3a0000200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a0000200220022f00c90b3b01e81d2002200241c80b6a41086a29030037036020022802cc0b21050b200041096a20022f01e81d3b0000200041106a20022903603700002000410b6a200241ea1d6a2d00003a0000200041186a200241e0006a41086a290300370000200041206a200241e0006a41106a290300370000200041286a200241e0006a41186a2d00003a00002000410b3a0000200020022800b021360001200041046a200241b0216a41036a2800003600002000410c6a2005360000200041086a20013a0000200041386a2010370000200041306a200a370000200041296a20022800b0163600002000412c6a200241b0166a41036a2800003600000c130b200041193a00000c120b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024020060e03000102050b20074104490d042005280002210620012003417a6a22073602042001200541066a36020020074104490d04200528000621072001200341766a36020420012005410a6a360200410021010c020b20074104490d032005280002210620012003417a6a22073602042001200541066a36020020074104490d03200528000621072001200341766a36020420012005410a6a360200410121010c010b20074104490d022005280002210620012003417a6a22073602042001200541066a36020020074104490d02200528000621072001200341766a220b36020420012005410a6a360200200b450d0220052d000a210b2001200341756a220e36020420012005410b6a220f3602004100210502400240200b0e020100040b200241186a200110c10120022802180d0320042802002204200228021c2203490d032003417f4c0d110240024020030d00410121050c010b200310382205450d1320054100200310d60b1a0b20052001280200220b200310d40b1a2001200420036b220e3602042001200b20036a220f3602002003ad221042208620108421100b2010a72103200e450d01200f2d0000210b2001200e417f6a3602042001200f41016a3602004108210402400240200b0e020100030b200241c80b6a200110910320022d00c80b22044108460d02200220022900c90b3703602002200241c80b6a41086a2800003600670b2010422088a7210b200220022800673600b721200220022903603703b021410221010b200041246a20022800b7213600002000411d6a20022903b0213700002000410c3a0000200020022f00b0163b0001200041036a200241b2166a2d00003a00002000411c6a20043a0000200041186a200b360000200041146a2003360000200041106a20053600002000410c6a2007360000200041086a2006360000200041046a20013600000c130b2005450d002003450d00200510390b200041193a00000c110b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b2007450d0320052d0002210620012003417d6a3602042001200541036a3602004100210541082103410021070240024020060e020100050b200241c80b6a200110910320022d00c80b22034108460d0420022f00c90b20022d00cb0b41107472410874210720022902cc0b21100b200720037221010c020b200241c80b6a20011086024101210520022d00c80b4101460d02200241b2216a20022d00cb0b3a0000200241e0006a41086a200241e00b6a290300370300200241e0006a41106a200241e80b6a2d00003a0000200220022f00c90b3b01b0212002200241c80b6a41106a290300370360200241c80b6a41086a290300211020022802cc0b21010c010b2007450d0120052d0002210620012003417d6a3602042001200541036a36020041002103410821050240024020060e020100030b200241c80b6a200110910320022d00c80b22054108460d0220022f00c90b20022d00cb0b41107472410874210320022902cc0b21100b20032005722101410221050b200041056a20022f01b0213b0000200041146a2002290360370000200041076a200241b0216a41026a2d00003a00002000411c6a200241e0006a41086a290300370000200041246a200241f0006a2d00003a00002000410d3a0000200020022f00b0163b0001200041036a200241b0166a41026a2d00003a00002000410c6a2010370000200041086a2001360000200041046a20053a0000200041256a20022f00e81d3b0000200041276a200241e81d6a41026a2d00003a00000c110b200041193a00000c100b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b2007450d0320052d0002210620012003417d6a3602042001200541036a3602004100210341082105410021070240024020060e020100050b200241c80b6a200110910320022d00c80b22054108460d0420022f00c90b20022d00cb0b41107472410874210720022902cc0b21100b200720057221050c020b200241c80b6a200110860220022d00c80b4101460d02200241c8006a41026a20022d00cb0b3a0000200241e81d6a41086a200241c80b6a41106a2203290300370300200241e81d6a41106a200241c80b6a41186a2206290300370300200241e81d6a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a220b2903003703e81d20022802cc0b2105200241c80b6a200110860220022d00c80b4101460d02200241f0286a41026a20022d00cb0b3a0000200241b0166a41086a2003290300370300200241b0166a41106a2006290300370300200241b0166a41186a20072d00003a0000200220022f00c90b3b01f0282002200b2903003703b01620042802002203450d0220022802cc0b21062001280200220b2d0000210420012003417f6a220e3602042001200b41016a3602004100210702400240024002400240024020040e06050400010203080b410221070c040b410321070c030b410421070c020b410521070c010b410121070b200e4102490d02200b2f0001210420012003417d6a3602042001200b41036a360200200241f0296a41026a200241c8006a41026a2d00003a0000200241b0296a41086a200241e81d6a41106a290300370300200241b0296a41106a200241e81d6a41186a2d00003a0000200241d8296a41026a200241f0286a41026a2d00003a0000200220022f01483b01f029200220022903f01d3703b029200220022f01f0283b01d82920022903e81d2110200241882a6a41186a200241b0166a41186a2d00003a0000200241882a6a41106a200241b0166a41106a290300370300200241882a6a41086a200241b0166a41086a290300370300200220022903b0163703882a410121030c010b200241c80b6a200110860220022d00c80b4101460d01200241c8006a41026a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a2203290300370300200241b0166a41106a200241c80b6a41186a2206290300370300200241b0166a41186a200241e80b6a22072d00003a0000200220022f00c90b3b01482002200241c80b6a41086a22042903003703b01620022802cc0b2105200241c80b6a200110860220022d00c80b4101460d012002418c296a41026a20022d00cb0b3a0000200241f0286a41086a2003290300370300200241f0286a41106a2006290300370300200241f0286a41186a20072d00003a0000200220022f00c90b3b018c29200220042903003703f02820022802cc0b2106200241c80b6a200110860220022d00c80b4101460d01200241e0006a41086a200241d40b6a290200370300200241e0006a41106a200241dc0b6a290200370300200241f5006a200241e10b6a29000037000041022103200241f0296a41026a200241c8006a41026a2d00003a0000200241b0296a41106a200241b0166a41186a2d00003a0000200241b0296a41086a200241b0166a41106a290300370300200220022902cc0b370360200220022f01483b01f029200220022903b8163703b02920022f01ca0b210420022d00c90b210720022903b0162110200241d8296a41026a2002418c296a41026a2d00003a0000200220022f018c293b01d829200241882a6a41186a200241f0286a41186a2d00003a0000200241882a6a41106a200241f0286a41106a290300370300200241882a6a41086a200241f0286a41086a290300370300200220022903f0283703882a0b200041056a20022f01f0293b0000200041146a20022903b029370000200041256a20022f01d8293b00002000412c6a20022903882a370000200041076a200241f0296a41026a2d00003a00002000411c6a200241b0296a41086a290300370000200041246a200241b0296a41106a2d00003a0000200041276a200241d8296a41026a2d00003a0000200041346a200241882a6a41086a2903003700002000413c6a200241882a6a41106a290300370000200041c4006a200241882a6a41186a2d00003a0000200241b0216a41186a2201200241e0006a41186a290300370300200241b0216a41106a220b200241e0006a41106a290300370300200241b0216a41086a220e200241e0006a41086a290300370300200220022903603703b0212000410e3a0000200020022f00a0293b0001200041036a200241a0296a41026a2d00003a0000200041c6006a20043b0000200041c5006a20073a0000200041286a20063600002000410c6a2010370000200041086a2005360000200041046a20033a0000200041c8006a20022903b021370000200041d0006a200e290300370000200041d8006a200b290300370000200041e0006a20012903003700000c100b200041193a00000c0f0b02402007450d0020052d0001210620012003417e6a3602042001200541026a36020002400240024002400240024020060e0400010203060b200241c80b6a200110860220022d00c80b4101460d05200241e81d6a41026a20022d00cb0b3a0000200220022f00c90b3b01e81d200241d80b6a22032903002110200241d00b6a2206290300210a200241e80b6a2207310000210d200241e00b6a2204290300211220022802cc0b2105200241c80b6a200110860220022d00c80b4101460d05200241b0166a41026a20022d00cb0b3a0000200220022f00c90b3b01b0162003290300211520062903002118200731000021172004290300211320022802cc0b2106200241c80b6a200110860220022d00c80b4101460d0520024190296a41026a20022d00cb0b3a0000200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a0000200241d8296a41026a200241e81d6a41026a2d00003a0000200220022f00c90b3b0190292002200241c80b6a41086a290300370360200220022f01e81d3b01d82920022802cc0b2104200241a0296a41026a200241b0166a41026a2d00003a0000200220022f01b0163b01a029410021010c040b200241c80b6a200110860220022d00c80b4101460d04200241ea1d6a20022d00cb0b3a0000200220022f00c90b3b01e81d200428020022064104490d04200241d80b6a2903002110200241d00b6a290300210a200241e80b6a310000210d200241e00b6a290300211220022802cc0b210520012802002207280000210320012006417c6a22043602042001200741046a36020020044104490d042007280004210b2001200641786a3602042001200741086a360200200241c80b6a200110860220022d00c80b4101460d04200241b0166a41026a220720022d00cb0b3a0000200220022f00c90b3b01b016200241c80b6a41106a22042903002115200241c80b6a41086a2903002118200241e80b6a220e3100002117200241c80b6a41186a220f290300211320022802cc0b2106200241c80b6a200110860220022d00c80b4101460d0420024190296a41026a20022d00cb0b3a0000200241e0006a41086a2004290300370300200241e0006a41106a200f290300370300200241e0006a41186a200e2d00003a0000200241d8296a41026a200241e81d6a41026a2d00003a0000200220022f00c90b3b0190292002200241c80b6a41086a290300370360200220022f01e81d3b01d82920022802cc0b2104200241a0296a41026a20072d00003a0000200220022f01b0163b01a029410121010c020b200241c80b6a200110860220022d00c80b4101460d03200241f2296a20022d00cb0b3a0000200241882a6a41086a200241c80b6a41106a290300370300200241882a6a41106a200241c80b6a41186a290300370300200241882a6a41186a200241e80b6a2d00003a0000200220022f00c90b3b01f0292002200241c80b6a41086a2903003703882a200428020022064104490d0320022802cc0b210520012802002207280000210320012006417c6a220b3602042001200741046a360200200b4104490d032007280004210b2001200641786a3602042001200741086a360200200241c80b6a200110860220022d00c80b4101460d03200241c8006a41026a20022d00cb0b3a0000200241e81d6a41086a200241c80b6a41106a220e290300370300200241e81d6a41106a200241c80b6a41186a220f290300370300200241e81d6a41186a200241e80b6a22112d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703e81d20022802cc0b2106200241c80b6a200110860220022d00c80b4101460d03200241f0286a41026a20022d00cb0b3a000041082107200241b0166a41086a200e290300370300200241b0166a41106a200f290300370300200241b0166a41186a20112d00003a0000200220022f00c90b3b01f0282002200241c80b6a41086a2903003703b0162004280200220e450d0320022802cc0b21042001280200220f2d000021112001200e417f6a3602042001200f41016a3602000240024020110e020100050b200241c80b6a200110910320022d00c80b22074108460d04200220022900c90b3703b0212002200241c80b6a41086a2800003600b7210b41022101200241d8296a41026a200241f0296a41026a2d00003a0000200241a0296a41026a200241c8006a41026a2d00003a0000200220022800b7213600b729200220022903b0213703b029200220022f01f0293b01d829200220022f01483b01a029200241882a6a41086a2903002110200241882a6a41186a310000210d200241e81d6a41186a3100002117200241e81d6a41086a290300211520022903882a210a20022903982a211220022903f81d211320022903e81d211820024190296a41026a200241f0286a41026a2d00003a0000200241e0006a41086a200241b0166a41086a290300370300200241e0006a41106a200241b0166a41106a290300370300200241e0006a41186a200241b0166a41186a2d00003a0000200220022f01f0283b019029200220022903b0163703600c020b200241c80b6a200110860220022d00c80b4101460d02200241ca006a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703b016200428020022064104490d0220022802cc0b210520012802002207280000210320012006417c6a22043602042001200741046a36020020044104490d022007280004210b2001200641786a3602042001200741086a360200200241c80b6a200110860220022d00c80b4101460d022002418c296a41026a220720022d00cb0b3a0000200241f0286a41086a200241c80b6a41106a2204290300370300200241f0286a41106a200241c80b6a41186a220e290300370300200241f0286a41186a220f200241e80b6a22112d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f02820022802cc0b2106200241c80b6a200110860220022d00c80b4101460d0220024190296a41026a20022d00cb0b3a0000200241e0006a41086a2004290300370300200241e0006a41106a200e290300370300200241e0006a41186a20112d00003a0000200241d8296a41026a200241c8006a41026a2d00003a0000200220022f00c90b3b0190292002200241c80b6a41086a290300370360200220022f01483b01d82920022802cc0b2104200241b0166a41186a310000210d200241b0166a41086a290300211020022903c016211220022903b016210a200241a0296a41026a20072d00003a0000200220022f018c293b01a029200f3100002117200241f0286a41086a2903002115200229038029211320022903f0282118410321010b0b200041056a20022f01d8293b0000200041256a20022f01a0293b0000200041c5006a20022f0190293b0000200041cc006a2002290360370000200041076a200241d8296a41026a2d00003a0000200041276a200241a0296a41026a2d00003a0000200041c7006a20024190296a41026a2d00003a0000200041d4006a200241e0006a41086a290300370000200041dc006a200241f0006a290300370000200041e4006a200241f8006a2d00003a0000200041e7006a200241802a6a41026a2d00003a0000200041e5006a20022f00802a3b0000200041f1006a20022903b029370000200041f8006a20022800b7293600002000410f3a0000200041c4006a20173c00002000413c6a2013370000200041346a20153700002000412c6a2018370000200041246a200d3c00002000411c6a2012370000200041146a20103700002000410c6a200a370000200020022f00e8293b0001200041036a200241e8296a41026a2d00003a0000200041f0006a20073a0000200041ec006a200b360000200041e8006a2003360000200041c8006a2004360000200041286a2006360000200041086a2005360000200041046a20013a00000c0f0b200041193a00000c0e0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024020060e06000103040506090b2007450d0820052d0002210e20012003417d6a3602042001200541036a3602004100210b410021040240200e0e03080002090b410121040c070b2007450d0720052d0002210e20012003417d6a220f360204410321042001200541036a3602004101210b0240200e0e020700080b200f450d0720052d0003210e20012003417c6a3602042001200541046a360200410021040240200e0e03070001080b410121044101210b0c060b410221040c050b200241c80b6a200110860220022d00c80b4101460d05200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a00002002200241c80b6a41086a29030037036020022802cc0b210720022f01ca0b210620022d00c90b21044102210b0c040b200241c80b6a200110860220022d00c80b4101460d04200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a00002002200241c80b6a41086a29030037036020022802cc0b210720022f01ca0b210620022d00c90b21044103210b0c030b4104210b20074104490d032005280002210720012003417a6a3602042001200541066a3602000c010b20074104490d022005280002210720012003417a6a3602042001200541066a3602004105210b0b0b200241b0216a41186a2201200241e0006a41186a280200360200200241b0216a41106a2205200241e0006a41106a290300370300200241b0216a41086a2203200241e0006a41086a290300370300200220022903603703b021200041103a0000200020022f00b0163b0001200041036a200241b2166a2d00003a0000200041086a2007360000200041066a20063b0000200041056a20043a0000200041046a200b3a00002000410c6a20022903b021370000200041146a20032903003700002000411c6a2005290300370000200041246a20012802003600000c0e0b200041193a00000c0d0b02402007450d0020052d0001210620012003417e6a3602042001200541026a3602000240024002400240024020060e03000102050b200241e81d6a200110940320022802e81d4101460d04200241882a6a200241e81d6a41047241a40210d40b1a200241e81d6a200110860220022d00e81d4101460d04200241840e6a200241811e6a290000370200200241fc0d6a200241f91d6a290000370200200241f40d6a200241f11d6a290000370200200220022900e91d3702ec0d200241c80b6a200241882a6a41a40210d40b1a200241e0006a200241c80b6a41c40210d40b1a200241206a200110c10120022802200d042004280200220620022802242205490d042005417f4c0d0d0240024020050d00410121030c010b200510382203450d0f20034100200510d60b1a0b200320012802002207200510d40b1a2001200620056b22063602042001200720056a220436020020064104490d032004280000210720012006417c6a220b3602042001200441046a360200200b4104490d032004280004210b2001200641786a3602042001200441086a360200200241b0216a200241e0006a41c40210d40b1a410021010c020b200241e81d6a200110940320022802e81d4101460d03200241882a6a200241e81d6a41047241a40210d40b1a200241e81d6a200110860220022d00e81d4101460d03200241840e6a200241811e6a290000370200200241fc0d6a200241f91d6a290000370200200241f40d6a200241f11d6a290000370200200220022900e91d3702ec0d200241c80b6a200241882a6a41a40210d40b1a200241e0006a200241c80b6a41c40210d40b1a200241286a200110c10120022802280d0320042802002206200228022c2205490d032005417f4c0d0c0240024020050d00410121030c010b200510382203450d0e20034100200510d60b1a0b200320012802002207200510d40b1a2001200620056b22063602042001200720056a220436020020064104490d022004280000210720012006417c6a220b3602042001200441046a360200200b4104490d022004280004210b2001200641786a3602042001200441086a360200200241b0216a200241e0006a41c40210d40b1a410121010c010b200241e81d6a200110940320022802e81d4101460d02200241882a6a200241e81d6a41047241a40210d40b1a200241e81d6a200110860220022d00e81d4101460d02200241840e6a200241811e6a290000370200200241fc0d6a200241f91d6a290000370200200241f40d6a200241f11d6a290000370200200220022900e91d3702ec0d200241c80b6a200241882a6a41a40210d40b1a200241e0006a200241c80b6a41c40210d40b1a200241306a200110c10120022802300d022004280200220620022802342205490d022005417f4c0d0b0240024020050d00410121030c010b200510382203450d0d20034100200510d60b1a0b200320012802002207200510d40b1a2001200620056b22063602042001200720056a220436020020064104490d012004280000210720012006417c6a3602042001200441046a360200200241b0216a200241e0006a41c40210d40b1a410221010b200241b0166a200241b0216a41c40210d40b1a200041113a0000200020022f00b0293b0001200041036a200241b2296a2d00003a0000200041046a2001360000200041086a200241b0166a41c40210d40b1a200041dc026a200b360000200041d8026a2007360000200041d4026a2005360000200041d0026a2005360000200041cc026a20033600000c0e0b2005450d00200310390b200041193a00000c0c0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024020060e050001020304060b20074104490d052005280002210620012003417a6a3602042001200541066a360200410021010c040b20074104490d042005280002210620012003417a6a3602042001200541066a360200410121010c030b20074104490d032005280002210620012003417a6a3602042001200541066a360200410221010c020b20074104490d022005280002210620012003417a6a3602042001200541066a360200410321010c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d01200528000621072001200341766a36020420012005410a6a360200410421010b200041123a00002000410c6a2007360000200041086a2006360000200041046a20013600000c0c0b200041193a00000c0b0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b20074104490d032005280002210620012003417a6a22073602042001200541066a36020020074104490d03200528000621072001200341766a220436020420012005410a6a36020020044104490d03200528000a21042001200341726a220b36020420012005410e6a360200200b4104490d03200528000e210b20012003416e6a3602042001200541126a360200410021010c020b20074104490d022005280002210620012003417a6a22073602042001200541066a36020020074104490d02200528000621072001200341766a36020420012005410a6a360200410121010c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d01200528000621072001200341766a220436020420012005410a6a36020020044104490d01200528000a21042001200341726a36020420012005410e6a360200410221010b200041133a0000200041146a200b360000200041106a20043600002000410c6a2007360000200041086a2006360000200041046a20013600000c0b0b200041193a00000c0a0b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024020060e03000102040b20074104490d032005280002210620012003417a6a3602042001200541066a360200200241c80b6a200110860220022d00c80b4101460d03200241b2166a20022d00cb0b3a0000200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a0000200220022f00c90b3b01b0162002200241c80b6a41086a29030037036020022802cc0b2107410021010c020b20074104490d022005280002210720012003417a6a3602042001200541066a360200410121010c010b20074104490d012005280002210620012003417a6a3602042001200541066a360200200241c80b6a200110860220022d00c80b4101460d0141022101200241b0166a41026a20022d00cb0b3a0000200241e0006a41086a200241c80b6a41106a290300370300200241e0006a41106a200241c80b6a41186a290300370300200241e0006a41186a200241e80b6a2d00003a0000200220022f00c90b3b01b0162002200241c80b6a41086a29030037036020022802cc0b21070b200041056a20022f01b0163b0000200041076a200241b0166a41026a2d00003a0000200241b0216a41086a2205200241e0006a41086a290300370300200241b0216a41106a2203200241e0006a41106a290300370300200241b0216a41186a2204200241e0006a41186a280200360200200220022903603703b021200041143a0000200020022f00e81d3b0001200041036a200241e81d6a41026a2d00003a0000200041086a2007360000200041046a20013a0000200041286a20063600002000410c6a20022903b021370000200041146a20052903003700002000411c6a2003290300370000200041246a20042802003600000c0a0b200041193a00000c090b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024020060e020001030b20074104490d022005280002210720012003417a6a3602042001200541066a360200410021010c010b20074104490d012005280002210620012003417a6a3602042001200541066a360200200241c80b6a200110860220022d00c80b4101460d012002418e296a20022d00cb0b3a0000200241f0286a41086a200241c80b6a41106a290300370300200241f0286a41106a200241c80b6a41186a290300370300200241f0286a41186a200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f028200428020022044104490d0120022802cc0b21072001280200220b280000210520012004417c6a22033602042001200b41046a36020020034104490d01200b28000421032001200441786a220e3602042001200b41086a360200200e4110490d012001200441686a220e3602042001200b41186a360200200e410f4d0d01200b41106a2900002112200b290008210d2001200441586a3602042001200b41286a360200200241e81d6a41026a2002418c296a41026a2d00003a0000200241e0006a41086a200241f0286a41086a290300370300200241e0006a41106a200241f0286a41106a290300370300200241e0006a41186a200241f0286a41186a2d00003a0000200220022f018c293b01e81d200220022903f028370360200b41206a290000210a200b2900182110410121010b200041096a20022f01e81d3b00002000410b6a200241ea1d6a2d00003a0000200241b0216a41086a2204200241e0006a41086a290300370300200241b0216a41106a220b200241e0006a41106a290300370300200241b0216a41186a220e200241e0006a41186a280200360200200220022903603703b021200041153a0000200020022800b016360001200041046a200241b3166a2800003600002000410c6a2007360000200041086a20013a0000200041d0006a200a370000200041c8006a2010370000200041c0006a2012370000200041386a200d370000200041346a2003360000200041306a20053600002000412c6a2006360000200041106a20022903b021370000200041186a2004290300370000200041206a200b290300370000200041286a200e2802003600000c090b200041193a00000c080b02402007450d0020052d0001210620012003417e6a22073602042001200541026a360200024002400240024002400240024002400240024020060e090001020304050607080a0b20074104490d092005280002210620012003417a6a22073602042001200541066a36020020074104490d09200528000621042001200341766a220736020420012005410a6a36020020074104490d09200528000a210b2001200341726a36020420012005410e6a3602004100210f0c080b20074104490d082005280002210620012003417a6a3602042001200541066a3602004101210f0c070b200241c80b6a200110860220022d00c80b4101460d07200241f2296a20022d00cb0b3a0000200241882a6a41086a200241c80b6a41106a290300370300200241882a6a41106a200241c80b6a41186a290300370300200241882a6a41186a200241e80b6a2d00003a0000200220022f00c90b3b01f0292002200241c80b6a41086a2903003703882a20042802002204450d0720022802cc0b2106200128020022032d0000210720012004417f6a220b3602042001200341016a3602004100210502400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020070e242322000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212b0b410221050c220b410321050c210b410421050c200b410521050c1f0b410621050c1e0b410721050c1d0b410821050c1c0b410921050c1b0b410a21050c1a0b410b21050c190b410c21050c180b410d21050c170b410e21050c160b410f21050c150b411021050c140b411121050c130b411221050c120b411321050c110b411421050c100b411521050c0f0b411621050c0e0b411721050c0d0b411821050c0c0b411921050c0b0b411a21050c0a0b411b21050c090b411c21050c080b411d21050c070b411e21050c060b411f21050c050b412021050c040b412121050c030b412221050c020b412321050c010b410121050b200b4104490d072003280001210720012004417b6a220b3602042001200341056a360200200b4110490d0720012004416b6a3602042001200341156a3602004102210f200241d8296a41026a200241f0296a41026a2d00003a0000200220022f01f0293b01d8292002200329000537036020022003410d6a290000370368200241882a6a41106a290300210a20022903902a211020022802882a2104200228028c2a210b20022d00a02a21110c060b20074104490d062005280002210620012003417a6a22073602042001200541066a36020020074104490d06200528000621042001200341766a220736020420012005410a6a36020020074104490d06200528000a210b2001200341726a220736020420012005410e6a36020020074110490d062001200341626a36020420012005411e6a360200200541166a290000210a200529000e21104103210f0c050b200241c80b6a200110860220022d00c80b4101460d05200241ca006a20022d00cb0b3a0000200241e81d6a41086a200241c80b6a41106a290300370300200241e81d6a41106a200241c80b6a41186a290300370300200241e81d6a41186a200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703e81d200428020022054110490d0520022802cc0b21062001200541706a220736020420012001280200220341106a36020020074110490d05200341086a29000021102003290000210a2001200541606a3602042001200341206a360200200241d8296a41026a200241c8006a41026a2d00003a0000200241e0006a41186a200341186a290000370300200220022f01483b01d8292002200a3703602002200329001037037020022010370368200241f81d6a290300210a20022903f01d211020022802e81d210420022802ec1d210b20022d00801e21114104210f0c040b200241c80b6a200110860220022d00c80b4101460d04200241f0286a41026a220520022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a290300370300200241b0166a41106a2203200241c80b6a41186a290300370300200241b0166a41186a200241e80b6a2d00003a0000200220022f00c90b3b01f0282002200241c80b6a41086a2903003703b016200428020022074110490d0420022802cc0b21062001200741706a36020420012001280200220741106a360200200241d8296a41026a20052d00003a0000200220022f01f0283b01d829200220072900003703602002200741086a2900003703682003290300210a20022903b816211020022802b016210420022802b416210b20022d00c81621114105210f0c030b20074104490d032005280002210720012003417a6a3602042001200541066a360200200241c80b6a200110860220022d00c80b4101460d03200241c8006a41026a220520022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a290300370300200241b0166a41106a2203200241c80b6a41186a290300370300200241b0166a41186a200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703b016200428020022044110490d0320022802cc0b21062001200441706a36020420012001280200220441106a360200200241d8296a41026a20052d00003a0000200220022f01483b01d829200220042900003703602002200441086a2900003703682003290300210a20022903b816211020022802b016210420022802b416210b20022d00c81621114106210f0c020b200241c80b6a200110860220022d00c80b4101460d022002418e296a20022d00cb0b3a0000200241f0286a41086a200241c80b6a41106a290300370300200241f0286a41106a200241c80b6a41186a290300370300200241f0286a41186a200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f028200428020022054104490d0220022802cc0b210620012802002203280000210720012005417c6a22043602042001200341046a36020020044110490d0220012005416c6a22043602042001200341146a36020020044104490d022003410c6a29000021102003290004210a2003280014210b2001200541686a22043602042001200341186a36020020044104490d02200328001821042001200541646a36020420012003411c6a360200200241d8296a41026a2002418c296a41026a2d00003a0000200241e0006a41106a2010370300200220022f018c293b01d8292002200a3703682002200b36026020022004360264200241f0286a41106a290300210a20022903f828211020022802f028210420022802f428210b20022d00882921114107210f0c010b20074104490d012005280002210620012003417a6a22073602042001200541066a36020020074104490d01200528000621042001200341766a36020420012005410a6a3602004108210f0b200041096a20022f01d8293b00002000410b6a200241da296a2d00003a0000200241b0216a41086a2201200241e0006a41086a290300370300200241b0216a41106a2203200241e0006a41106a290300370300200241b0216a41186a220e200241e0006a41186a290300370300200220022903603703b021200041206a200a370000200041186a2010370000200041163a0000200020022800b029360001200041046a200241b3296a2800003600002000412c6a2007360000200041296a20053a0000200041286a20113a0000200041146a200b360000200041106a20043600002000410c6a2006360000200041086a200f3a0000200041306a20022903b021370000200041386a2001290300370000200041c0006a2003290300370000200041c8006a200e2903003700000c080b200041193a00000c070b02402007450d0020052d0001210620012003417e6a22073602042001200541026a36020002400240024002400240024002400240024002400240024020060e0c000102030405060708090a0b0c0b20074104490d0b2005280002210620012003417a6a3602042001200541066a360200410021040c100b200241c80b6a200110860220022d00c80b4101460d0a200241f2286a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a200241e80b6a2d00003a0000200220022f00c90b3b01f0282002200241c80b6a41086a2903003703b016200428020022034104490d0a20022802cc0b210620012802002207280000210520012003417c6a22043602042001200741046a36020020044110490d0a20012003416c6a3602042001200741146a360200200241882a6a41026a200241f0286a41026a2d00003a0000200220022f01f0283b01882a200220022902bc163703602002200241c1166a2900003700652007410c6a290000210d2007290004210a20022802b016210720022902b4162110410121040c0f0b200241c80b6a200110860220022d00c80b4101460d09200241ca006a20022d00cb0b3a0000200241b0166a41086a200241c80b6a41106a290300370300200241b0166a41106a200241c80b6a41186a290300370300200241b0166a41186a200241e80b6a2d00003a0000200220022f00c90b3b01482002200241c80b6a41086a2903003703b016200428020022034104490d0920022802cc0b210620012802002207280000210520012003417c6a22043602042001200741046a36020020044110490d0920012003416c6a3602042001200741146a36020041022104200241882a6a41026a200241c8006a41026a2d00003a0000200220022f01483b01882a200220022902bc163703602002200241c1166a2900003700652007410c6a290000210d2007290004210a20022802b016210720022902b41621100c0e0b20074104490d082005280002210620012003417a6a3602042001200541066a360200410321040c0d0b4104210420074104490d072005280002210620012003417a6a3602042001200541066a3602000c0c0b20074104490d062005280002210620012003417a6a3602042001200541066a360200410521040c0b0b20074104490d052005280002210620012003417a6a360204410621042001200541066a3602000c0a0b20074104490d042005280002210620012003417a6a22073602042001200541066a36020020074104490d04200528000621072001200341766a36020420012005410a6a360200410721040c090b20074104490d032005280002210620012003417a6a22073602042001200541066a3602002007450d0320052d000621072001200341796a3602042001200541076a3602004100210341082104410821050240024020070e020100050b200241c80b6a200110910320022d00c80b22054108460d0420022f00c90b20022d00cb0b41107472410874210320022902cc0b21100b200320057221070c080b20074104490d022005280002210620012003417a6a3602042001200541066a360200410921040c070b200241c80b6a200110860220022d00c80b4101460d012002418e296a20022d00cb0b3a0000200241f0286a41086a200241c80b6a41106a290300370300200241f0286a41106a200241c80b6a41186a290300370300200241f0286a41186a200241e80b6a2d00003a0000200220022f00c90b3b018c292002200241c80b6a41086a2903003703f028200428020022034104490d0120022802cc0b210620012802002207280000210520012003417c6a3602042001200741046a360200200241386a200110c10120022802380d0120042802002207200228023c2203490d012003417f4c0d040240024020030d00410121040c010b200310382204450d0620044100200310d60b1a0b20042001280200220b200310d40b21042001200720036b3602042001200b20036a360200200241882a6a41026a2002418c296a41026a2d00003a0000200220022f018c293b01882a200220022902fc28370360200220024181296a2900003700652003ad22104220862010842210422088210d20104220862004ad84210a20022802f028210720022902f4282110410a21040c060b20074104490d002005280002210620012003417a6a3602042001200541066a360200410b21040c050b200041193a00000c060b02402007450d0020052d0001210620012003417e6a22073602042001200541026a3602000240024002400240024020060e020001050b2007450d0420052d0002210620012003417d6a22073602042001200541036a360200024002400240024020060e03000102080b20074108490d07200529000321102001200341756a36020420012005410b6a3602004200210d0c020b20074108490d06200529000321102001200341756a36020420012005410b6a360200200241b0216a200110950320022802b021411b460d06200241b0166a200241b0216a41b80710d40b1a4201210d0c010b200241b0216a200110950320022802b021411b460d0520022903b0212110200241b0166a200241b8216a41b00710d40b1a4202210d0b200241c80b6a200241b0166a41b80710d40b1a4200210a0c010b200241b0216a200110990220022903b0214209510d03200241e81d6a200241b0216a41c80310d40b1a200241b0216a200110990220022903b0214209510d02200241b0166a200241b0216a41c80310d40b1a200241b0216a200110820220022d00b021410b460d01200241c8126a200241b0216a41e80310d40b1a20022903e81d210d20022903f01d2110200241c80b6a200241f81d6a41b80310d40b1a200241c80b6a41b8036a200241b0166a41c80310d40b1a4201210a0b200241e0006a200241c80b6a41e80a10d40b1a200041183a0000200020022800882a360001200041046a2002418b2a6a280000360000200041186a2010370000200041106a200d370000200041086a200a370000200041206a200241e0006a41e80a10d40b1a0c080b200241b0166a108d020b200241e81d6a108d020b200041193a00000c050b200041193a00000c040b1034000b1032000b200041096a20022f01882a3b00002000410b6a2002418a2a6a2d00003a0000200241b0216a41086a2201200241e0006a41086a290300370300200220022903603703b021200041173a0000200020022800e81d360001200041046a200241eb1d6a280000360000200041146a2010370000200041106a20073600002000410c6a2006360000200041086a20043a0000200041386a200d370000200041306a200a3700002000412c6a20053600002000411c6a20022903b021370000200041246a20012903003700000c010b200041193a00000b200241b02c6a24000be70301037f0240200128020422020d00200041083a00000f0b20012002417f6a220336020420012001280200220441016a360200024002400240024002400240024002400240024002400240024020042d00000e080001020304050607080b200041003a0000200041086a4100360200200041046a41b8c0cd003602000f0b200041013a00000f0b200041023a00000f0b2003450d0820012002417e6a22033602042001200441026a36020002402003450d0020042d0001210320012002417d6a3602042001200441036a36020020042d00022101200041046a4100360200200041026a20013a0000200020033a0001200041033a00000f0b200041083a00000f0b200041043a00000f0b200041053a00000f0b02402003450d0020012002417e6a3602042001200441026a3602004100210102400240024002400240024020042d00010e06050001020304060b410121010c040b410221010c030b410321010c020b410421010c010b410521010b200020013a0001200041063a00000f0b200041083a00000f0b2003450d0320012002417e6a3602042001200441026a36020041002101024020042d00010e03030200040b410221010c020b200041083a00000f0b410121010b200020013a0001200041073a00000f0b200041083a00000f0b200041083a00000bcf0507017f047e027f017e057f017e027f230041d0016b22022400200241c0006a2001108c0502400240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a2001108c0502402002290328a70d00200241286a41106a290300210520022903302106200241206a200110c101024020022802200d0020022802242207200128020441306e2208200820074b1bad42307e2209422088a70d032009a72208417f4c0d030240024020080d004108210a0c010b20081038220a450d050b4100210b200241003602602002200a3602582002200841306e36025c024002402007450d00200241a8016a410172210c0340200241a8016a200110860220022d00a8014101460d0220024188016a41186a2208200c41186a29000037030020024188016a41106a220d200c41106a29000037030020024188016a41086a220e200c41086a2900003703002002200c29000037038801200241086a2001108c052002290308a70d02200241086a41106a29030021092002290310210f200241e8006a41186a22102008290300370300200241e8006a41106a2211200d290300370300200241e8006a41086a220d200e29030037030020022002290388013703680240200b200228025c470d00200241d8006a200b10b7092002280258210a2002280260210b0b200a200b41306c6a220820093703082008200f37030020082002290368370310200841186a200d290300370300200841206a2011290300370300200841286a20102903003703002002200b41016a220b3602602007417f6a22070d000b0b200a450d01200229025c210920002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c060b200228025c2201450d00200141306c450d00200a10390b200041003602200c040b200041003602200c030b200041003602200c020b1034000b1032000b200241d0016a24000bda0102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42d0007e2205422088a74541037421022005a721040240024020010d00200341003602100c010b200341106a41086a41083602002003200141d0006c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141d0006e360200200341206a24000f0b1034000bc012030f7f017e047f230041d0026b22022400024002400240024002400240200128020422034104490d0020012003417c6a36020420012001280200220341046a3602002003280000210420024188026a200110860220022d0088024101460d01200241086a41186a200241a1026a2203290000370300200241086a41106a20024199026a2205290000370300200241086a41086a20024191026a2206290000370300200220022900890237030820024188026a200110860220022d0088024101460d02200241286a41186a2003290000370300200241286a41106a2005290000370300200241286a41086a2006290000370300200220022900890237032820024188026a200110860220022d0088024101460d03200241c8006a41186a200241a1026a2203290000370300200241c8006a41106a20024199026a2205290000370300200241c8006a41086a20024191026a2206290000370300200220022900890237034820024188026a200110860220022d0088024101460d04200241e8006a41186a2003290000370300200241e8006a41106a2005290000370300200241e8006a41086a2006290000370300200220022900890237036820024188026a200110860202400240024020022d0088024101460d00200241a0016a200241a1026a29000037030020024198016a20024199026a29000037030020024190016a20024191026a29000037030020022002290089023703880120024188026a41047221072001280204210841002103417f21050240034020082003460d012001200820056a36020420012001280200220641016a360200200720036a20062d00003a00002002200341016a2206360288022005417f6a210520062103200641c000470d000b2002200241bd026a22032900003703c8012002200241c4026a2900003700cf01200220022f018c023b018402200220022d008e023a00860220024196026a28010021092002419d026a280000210a200241a4026a280200210b200241ab026a280000210c200241b2026a280100210d200241b9026a280000210e200228008f02210f20022800cb01211020022900cf01211120024180026a41026a220520024195026a2d00003a0000200220024193026a2f00003b018002200241fc016a41026a22062002419c026a2d00003a000020022002419a026a2f01003b01fc01200241f8016a41026a2208200241a3026a2d00003a00002002200241a1026a22122f00003b01f801200241f4016a41026a2207200241aa026a2d00003a00002002200241a8026a2f01003b01f401200241f0016a41026a2213200241b1026a2d00003a00002002200241af026a2f00003b01f001200241ec016a41026a2214200241b8026a2d00003a00002002200241b6026a2f01003b01ec01200241e8016a41026a2215200241bf026a2d00003a0000200220032f00003b01e801200241c4016a41026a20022d0086023a0000200220022f0184023b01c401200241c0016a41026a20052d00003a0000200220022f0180023b01c001200241bc016a41026a20062d00003a0000200220022f01fc013b01bc01200241b8016a41026a20082d00003a0000200220022f01f8013b01b801200241b4016a41026a20072d00003a0000200220022f01f4013b01b401200241b0016a41026a20132d00003a0000200220022f01f0013b01b001200241ac016a41026a20142d00003a0000200220022f01ec013b01ac01200241a8016a41026a20152d00003a0000200220022f01e8013b01a80120024188026a200110860220022d0088024101460d02200241c8016a41186a22032012290000370300200241c8016a41106a220520024199026a2206290000370300200241c8016a41086a220820024191026a220729000037030020022002290089023703c80120024188026a200110860220022d0088024101460d0320004188026a200229008902370000200041a0026a200241a1026a29000037000020004198026a200629000037000020004190026a2007290000370000200041206a200241086a41186a290300370000200041186a200241086a41106a290300370000200041106a200241086a41086a290300370000200041086a2002290308370000200041286a2002290328370000200041306a200241286a41086a290300370000200041386a200241286a41106a290300370000200041c0006a200241286a41186a290300370000200041c8006a2002290348370000200041d0006a200241c8006a41086a290300370000200041d8006a200241c8006a41106a290300370000200041e0006a200241c8006a41186a29030037000020004180016a200241e8006a41186a290300370000200041f8006a200241e8006a41106a290300370000200041f0006a200241e8006a41086a290300370000200041e8006a2002290368370000200041a0016a20024188016a41186a29030037000020004198016a20024188016a41106a29030037000020004190016a20024188016a41086a29030037000020004188016a200229038801370000200041aa016a200241c4016a41026a2d00003a0000200041a8016a20022f01c4013b0000200041ab016a200f360000200041b1016a200241c0016a41026a2d00003a0000200020022f01c0013b00af01200020093600b201200041b8016a200241bc016a41026a2d00003a0000200020022f01bc013b00b6012000200a3600b901200041bf016a200241b8016a41026a2d00003a0000200020022f01b8013b00bd01200041c0016a200b360000200041c6016a200241b4016a41026a2d00003a0000200041c4016a20022f01b4013b00002000200c3600c701200041cd016a200241b0016a41026a2d00003a0000200020022f01b0013b00cb012000200d3600ce01200041d4016a200241ac016a41026a2d00003a0000200020022f01ac013b00d2012000200e3600d501200041db016a200241a8016a41026a2d00003a0000200020022f01a8013b00d901200041e0016a2011370000200041dc016a201036000020004180026a2003290300370000200041f8016a2005290300370000200041f0016a2008290300370000200041e8016a20022903c80137000020004100360200200020043602040c090b200041013602000c080b200041013602000c070b200041013602000c060b200041013602000c050b200041013602000c040b200041013602000c030b200041013602000c020b200041013602000c010b200041013602000b200241d0026a24000bb90502057f017e230041800b6b2202240002400240200128020422030d002000411b3602000c010b200128020022042d0000210520012003417f6a22063602042001200441016a3602000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e1b000102030405060708090a0b0c0d0e0f101112131415161718191a1b0b200041003602000c1c0b200041013602000c1b0b200041023602000c1a0b200041033602000c190b200041043602000c180b200041053602000c170b200041063602000c160b200041073602000c150b200041083602000c140b200041093602000c130b200041b8c0cd003602042000410a360200200041086a41003602000c120b20024198076a20011099022002290398074209510d10200241d0036a20024198076a41c80310d40b1a20024198076a2001108202024020022d009807410b460d00200041d0036a20024198076a41e80310d40b1a200241046a41046a200241d0036a41c80310d40b1a2000410b360200200041046a200241046a41cc0310d40b1a0c120b2000411b360200200241d0036a108d020c110b2000410c3602000c100b2000410d3602000c0f0b2000410e3602000c0e0b2000410f3602000c0d0b200041b8c0cd0036020420004110360200200041086a41003602000c0c0b024020064108490d00200429000121072001200341776a3602042001200441096a360200200041086a2007370300200041113602000c0c0b2000411b3602000c0b0b200041123602000c0a0b200041133602000c090b200041143602000c080b200041153602000c070b200041163602000c060b200041173602000c050b200041183602000c040b200041193602000c030b2000411a3602000c020b2000411b3602000c010b2000411b3602000b200241800b6a24000b13002000410636020420004194d5c3003602000b130020004103360204200041a4d9ca003602000b130020004108360204200041f08dcb003602000b130020004109360204200041b493ca003602000b130020004101360204200041a8aec0003602000b130020004101360204200041bcb0c0003602000b130020004103360204200041c0abc0003602000b130020004103360204200041b8efcd003602000b1300200041023602042000418cb2c0003602000b13002000410a360204200041cca9c1003602000b130020004106360204200041bcbbcb003602000b130020004102360204200041f4f6ca003602000b130020004103360204200041d0c1cc003602000b130020004103360204200041f8c2cd003602000b130020004103360204200041f8bbc5003602000b130020004104360204200041d0c5c6003602000b130020004106360204200041f49fc8003602000b130020004103360204200041a89bc8003602000b1300200041053602042000419cbfc0003602000b130020004103360204200041f4b8c0003602000b130020004103360204200041b886cd003602000b13002000410236020420004188e4c6003602000b130020004109360204200041f487cd003602000b13002000410c360204200041989bc4003602000b130020004102360204200041f0a3c5003602000b6001017f200028020022002000280200417f6a2201360200024020010d002000280208200028020c2802001102000240200028020c280204450d00200028020810390b200041046a22012001280200417f6a220136020020010d00200010390b0bce0101027f02400240200028020022022802082001200228020c28020c110100450d0020012802004112470d01024002400240024020012d0004417e6a0e050001020503050b200041286a2d00002202450d04200220012d0025220341ff0171460d0420024101470d03200341ff01710d040c030b200041286a2d00002202450d03200220012d0025220341ff0171460d0320024101470d02200341ff01710d030c020b200041286a2d0000450d020c010b200041286a2d0000450d010b41000f0b200041286a2d0000200110f1020bae0201037f410021020240200028020022032802082001200328020c28020c110100450d00024020012802004112470d00024002400240024020012d0004417e6a0e050001020403040b200041286a2d00002203450d03200320012d0025220441ff0171460d0320034101470d04200441ff01710d030c040b200041286a2d00002203450d02200320012d0025220441ff0171460d0220034101470d03200441ff01710d020c030b200041286a2d0000450d010c020b200041286a2d00000d010b200041286a2d0000200110f10221020b200028020022002000280200417f6a2201360200024020010d002000280208200028020c2802001102000240200028020c280204450d00200028020810390b200041046a22012001280200417f6a220136020020010d00200010390b20020bdb3e05037f027e037f037e0b7f230041800c6b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242500010b0240024002400240200141086a280200417f6a0e0400010203000b200041003b010820004280c2d72f3703000c280b200241c0006a2001410c6a10b30341980410382203450d2841f80310382204450d2820044101360200200241a0046a200141186a10b403200241d4006a200241a0046a41c80310d40b1a20034200370214200341002802e8c848360210200342818080801037000820032004360004200341053a00002003411c6a200241d0006a41cc0310d40b1a200241b4046a428180808010370200200241b0046a2003360200200241ac046a200241c8006a280200360200200241003a00a004200220022903403702a404200241106a200241a0046a10b503427f2105024020022802100d00200229031821062002200241a0046a10b6032002290300a70d00427f200620022903087c22054280c2d72f7c20052006541b21050b200241a0046a10b703200041003b0108200020053703000c270b200241d0006a2001410c6a10b303200241c0046a200141186a10b403200241b4046a4200370200200241b0046a41002802e8c848360200200241a0046a410c6a200241d0006a41086a280200360200200241053a00a004200220022903503702a404200241306a200241a0046a10b503427f2105024020022802300d0020022903382106200241206a200241a0046a10b6032002290320a70d00427f200620022903287c22054280c2d72f7c20052006541b21050b200241a0046a10b703200041003b0108200020053703000c260b200041003b01082000427f200141106a29030022054280c2d72f7c220620062005541b3703000c250b0240024002400240024002400240024002400240200141086a280200417f6a0e0a00010203040506070809000b2001410c6a3502002105200241a0046a10b80320022903a8042106200041003b0108200020052006428094ebdc03807e42ffffffffffbfb2cd3b20052006428094ebdc03827e2205428094ebdc0380200542ffffffffffbfb2cd3b561b2005428094ebdc03824280cab5ee0156ad7c42ffffffff0f837c3703000c2d0b200041003b010820004288bdcc003703000c2c0b200041013b0108200042808dbc303703000c2b0b200241a0046a10b80320022903a8042105200041013b0108200020053703000c2a0b200241a0046a10b80320022903a8042105200041013b0108200020053703000c290b200041013b0108200042f0fbbaef003703000c280b200041013b01082000200141146a35020042e8ddfa2f7e3703000c270b200041013b01082000200141146a35020042e8fbf02f7e3703000c260b200041013b01082000417f200141186a280200220141016a220320032001491bad4280a38b307e3703000c250b200041003b01082000200141146a35020042e8077e3703000c240b024002400240200141086a280200417f6a0e03000102000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c250b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e4280a9f3bbb0027c3703000c240b200041003b010820004280c2d72f3703000c230b200041023b0108200042c8f4edd7003703000c220b0240024002400240024020012d0004417f6a0e050001020304000b200041003b010820004288839cce003703000c250b200041003b010820004280eca68e013703000c240b200041003b0108200042f0efa4ce003703000c230b200041003b0108200042f0c7a48a013703000c220b200041003b010820004280c7a5cd003703000c210b0240024002400240200141086a280200417f6a0e0400010203000b200041003b010820004298ccc1de003703000c230b200041003b010820004280f8eecb003703000c220b200041003b0108200042f0a2ad99013703000c210b200041003b0108200042a8f6e8d5003703000c200b200041023b0108200042003703000c1f0b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d0000417f6a0e17000102030405060708090a0b0c0d0e0f10111213141516000b200041003b0108200042f8a8a69c023703000c340b200041003b010820004290bafa9c013703000c330b200041003b010820004290f78bd6013703000c320b200041003b010820002001410c6a350200220542f0e694017e20054280c2d72f7e7c4290fe8beb037c3703000c310b200041003b0108200042a0e48af2003703000c300b200041003b01082000200141146a350200220542d8bcf5027e200542c0f0f50b7e7c42b0cb828e017c3703000c2f0b200041003b0108200042b898f7f1003703000c2e0b200041003b010820004280bfa2c1003703000c2d0b200041003b0108200042f882a6bf013703000c2c0b200041003b010820004298c9cf303703000c2b0b200041003b010820004298c9cf303703000c2a0b200041003b010820004298c9cf303703000c290b200041003b0108200042b8ace3303703000c280b200041003b01082000429893e1303703000c270b200041003b01082000200141146a35020042b891027e4298cbf8307c3703000c260b200041003b010820002001412c6a35020022054298b094017e20054280c2d72f7e7c42f8d288c8037c3703000c250b200041003b0108200042d0b3de303703000c240b200041003b01082000200141186a3502004280b0bd107e4280a69dbb167c3703000c230b200041003b010820004288ebd4a9f6003703000c220b200041003b0108200042c0b1d6c3013703000c210b200041003b01082000200141106a350200220542c0fe910f7e20054280cee4cd027e7c4280e9c9d6017c3703000c200b200041003b010820002001412c6a350200220542c8a094017e20054280c2d72f7e7c42e8accbc9037c3703000c1f0b200041003b01082000200141146a35020022054298c6cb087e200542c0f0f50b7e7c20054280c2d72f7e7c42e0f7f10f7c3703000c1e0b10b903000b200041003b0108200042e0e4c0d00342e0c0d7f90220012802041b3703000c1c0b024002400240200141086a280200417f6a0e03000102000b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c1d0b200041003b010820002001411c6a280200220141e400200141e4004b1bad4298d70a7e42c0c6cbccb0027c3703000c1c0b200041003b0108200042c0cf8e313703000c1b0b200041003b01082000200141286a3502004288fd0d7e2001411c6a35020042e092197e7c42e0c18c8a017c3703000c1a0b10ba03000b02400240024020012f0104417f6a0e03000102000b200141106a280200220741ffffffff00712007470d1c41082108200141086a2802002103024020074104742201450d00200110382208450d1c0b2003200741c0076c6a21094100210420024100360258200220083602502002200141047622013602540240200120074f0d00200241d0006a200710b201200228025821040b0240024020032009470d00200228025021090c010b200741c0076c21082002280250220920044104746a21010340200241a0046a200310b203200141086a200241a0046a41086a290300370300200120022903a004370300200441016a2104200141106a2101200341c0076a2103200841c0786a22080d000b0b200921030240024020040d00420021050c010b2004410474210842002105200321010340427f200520012903007c220620062005541b2105200141106a2101200841706a22080d000b0b427f2007ad42b8d73e7e20057c4280e1a1067c220620062005541b2105200441047421010240034020012204450d01200441706a2101200341086a2108200341106a210320082d00004101460d000b0b20044521010240200228025441ffffffff0071450d00200910390b200041003a0009200020013a0008200020053703000c1a0b200241a0046a200141086a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f20054288f2aa3d7c220620062005541b3703000c190b200141106a280200220741ffffffff00712007470d1a41082108200141086a2802002103024020074104742201450d00200110382208450d1a0b2003200741c0076c6a21094100210420024100360258200220083602502002200141047622013602540240200120074f0d00200241d0006a200710b201200228025821040b0240024020032009470d00200228025021090c010b200741c0076c21082002280250220920044104746a21010340200241a0046a200310b203200141086a200241a0046a41086a290300370300200120022903a004370300200441016a2104200141106a2101200341c0076a2103200841c0786a22080d000b0b200921030240024020040d00420021050c010b2004410474210842002105200321010340427f200520012903007c220620062005541b2105200141106a2101200841706a22080d000b0b427f2007ad42d0cf3e7e20057c4290f8dd067c220620062005541b2105200441047421010240034020012204450d01200441706a2101200341086a2108200341106a210320082d00004101460d000b0b20044521010240200228025441ffffffff0071450d00200910390b200041003a0009200020013a0008200020053703000c180b024002400240024002400240024002400240024002400240024002400240200141086a2d0000417f6a0e0f000102030405060708090a0b0c0d0e000b200041003b0108200042f0a4cfc8003703000c250b200041003b01082000429887d18a013703000c240b200041003b01082000200141146a35020022054288df8e037e200542c0f0f50b7e7c20054280c2d72f7e7c42908298c0277c3703000c230b200041003b0108200042c8f383bd273703000c220b200041003b010820004280b597a7013703000c210b200041003b010820004280a6cf96013703000c200b200041003b0108200042e084a8c2003703000c1f0b200041003b0108200042f8c2e4c2003703000c1e0b200041003b0108200042a0cca5c2003703000c1d0b200041003b010820004288e1dd9d013703000c1c0b200041003b0108200042a089c4d5273703000c1b0b200041003b0108200042d8f9bca7013703000c1a0b200041003b0108200042b0efb3d0003703000c190b200041003b010820004290a5e3a6013703000c180b200041003b010820004288e9ae90013703000c170b02400240024002400240024002400240024020012d0004417f6a0e09000102030405060708000b200241a0046a200141286a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f200542d080ce3b7c220620062005541b3703000c1e0b200041003b01082000428087a70e3703000c1d0b200041003b010820004280c2d72f3703000c1c0b200041003b010820004280c2d72f3703000c1b0b200041003b010820004280c2d72f3703000c1a0b200041003b010820004280c2d72f3703000c190b200041003b01082000428087a70e3703000c180b200041003b01082000428087a70e3703000c170b200041003b01082000428087a70e3703000c160b0240024002400240200141086a280200417f6a0e0400010203000b200041003b010820004290eee390013703000c180b200041003b0108200042e8e8c0cc013703000c170b200041003b010820004288eaf9e6013703000c160b200041003b0108200042d8ee9ca2023703000c150b02400240024002400240024020012d0004417f6a0e06000102030405000b200041003b0108200042a8d4cac7003703000c190b200041003b0108200042d880e4b5013703000c180b200041003b0108200042b0f3e086013703000c170b200041003b0108200042f8e4a3c3013703000c160b200041003b0108200042a8d4cac7003703000c150b200041003b0108200042b0f3e086013703000c140b0240024002400240200141086a280200417f6a0e0400010203000b200241a0046a2001410c6a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f20054290ce007c220620062005541b3703000c160b200141106a2903002105200241a0046a2001410c6a28020010b20320022d00a8042101200041003a0009200020013a0008200020053703000c150b200041003b0108200042003703000c140b200241a0046a200141306a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f200542d080ce3b7c220620062005541b3703000c130b024002400240024002400240024002400240024020012d0004417f6a0e0a00010203040506070809000b200241a0046a200141286a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f200542e8f0d8d4007c220620062005541b3703000c1b0b200041003b0108200042b8e2f1cf003703000c1a0b200041003b0108200042e0c293d0003703000c190b200041003b0108200042809ab1ce003703000c180b200041003b0108200042989aa8de003703000c170b200041003b0108200042a8e6accf003703000c160b200041003b0108200042a0a3d4a6013703000c150b200041003b010820004290de8f92013703000c140b200041003b0108200042988b8e92013703000c130b200241a0046a200141c8006a28020010b20320022903a004210520022d00a8042101200041003a0009200020013a00082000427f200542a0fbd0e3017c220620062005541b3703000c120b0240024002400240200141086a2d0000417f6a0e0400010203000b200241a0046a200141186a280200220110b20320024100360258200242013703502001200241d0006a10d9022002350258210502402002280254450d00200228025010390b20022903a004210620022d00a8042101200041003a0009200020013a00082000427f427f2006200542e8077e4290d7eb057c22057c220620062005541b220542c0b2cd3b7c220620062005541b3703000c140b200041003b01082000427f200141146a350200220542c0a9077e2001412c6a350200220642e8077e220a7c42a8b5b6df007c220b200542d8a1077e200642b8177e7c42b0948e9e017c220c200b200c561b220b200542f8bd087e200a7c42f0f5b1c9007c220a200b200a561b220a200542a0ec107e20064288277e7c42c8f7efd3017c2205200a2005561b2205200141306a2903007c220620062005541b3703000c130b200041003b01082000427f200141346a350200220542a8b1077e42d0cc9cdf007c2206200542e0c5087e42e8ab93c9007c220a2006200a561b2206200542909b117e42d08de0f6017c220520062005561b2205200141c8006a2903007c220620062005541b3703000c120b200041003b01082000200141346a35020042a8b1077e42a0a284a5017c3703000c110b20014180026a3502002105200141f4016a2802002104200141e8016a2802002108200141dc016a2802002107200141d0016a2802002109200141c4016a280200210d200141b8016a280200210e200141ac016a280200210f200141a0016a280200211020014194016a280200211120014188016a2802002112200141fc006a2802002113200141f0006a2802002114200141e4006a2802002115200141d8006a2802002116200141cc006a2802002117200141c0006a2802002103200241a0046a200141386a10f702417f2004417f2008417f2007417f2009417f200d417f200e417f200f417f2010417f2011417f2012417f2013417f2014417f2015417f2016417f200320176a220120012003491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491b22016a220320032001491bad42c8c3a3067e200542d89585027e7c20023502a80442c08db7017e7c4280e59af7007c2105024020022802a40441808080807872418080808078460d0020022802a00410390b200041003b0108200020053703000c100b0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a280200417f6a0e28000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627000b200041013b0108200042e8073703000c360b200041013b0108200042e8073703000c350b200041013b0108200042e8073703000c340b200041013b0108200042e8073703000c330b200041013b0108200042e8073703000c320b200041013b0108200042e8073703000c310b200041013b0108200042e8073703000c300b200041013b0108200042e8073703000c2f0b200041013b0108200042e8073703000c2e0b200041013b0108200042e8073703000c2d0b200041013b0108200042e8073703000c2c0b200041013b0108200042e8073703000c2b0b200041013b0108200042e8073703000c2a0b200041013b0108200042e8073703000c290b200041013b0108200042e8073703000c280b200041013b0108200042e8073703000c270b200041013b0108200042e8073703000c260b200041013b0108200042e8073703000c250b200041013b0108200042e8073703000c240b200041013b0108200042e8073703000c230b200041013b0108200042e8073703000c220b200041013b0108200042e8073703000c210b200041013b0108200042e8073703000c200b200041013b0108200042e8073703000c1f0b200041013b0108200042e8073703000c1e0b200041013b0108200042e8073703000c1d0b200041013b0108200042e8073703000c1c0b200041013b0108200042e8073703000c1b0b200041013b0108200042e8073703000c1a0b200041013b0108200042e8073703000c190b200041013b0108200042e8073703000c180b200041013b0108200042e8073703000c170b200041013b0108200042e8073703000c160b200041013b0108200042e8073703000c150b200041013b0108200042e8073703000c140b200041013b0108200042e8073703000c130b200041013b0108200042e8073703000c120b200041013b0108200042e8073703000c110b200041013b0108200042e8073703000c100b200041013b0108200042e8073703000c0f0b10bb03000b10bc03000b200041023b01082000200141186a35020042a08d067e4280e59af7007c3703000c0c0b10bd03000b024002400240024002402001280204417f6a0e050001020304000b200041003b0108200042003703000c0e0b200041003b0108200042003703000c0d0b200041003b0108200042003703000c0c0b200041003b0108200042003703000c0b0b200041003b0108200042003703000c0a0b200041013b0108200042003703000c090b10be03000b10bf03000b0240024002400240024002402001280204417f6a0e06000102030405000b200041003b0108200042003703000c0b0b200041003b0108200042003703000c0a0b200041003b0108200042003703000c090b200041003b0108200042003703000c080b200041003b0108200042003703000c070b200041003b0108200042003703000c060b10c003000b024002400240024002400240200141086a2d0000417f6a0e06000102030405000b200041003b0108200042a8f9d6ce203703000c090b200041003b0108200042f8ccedcd203703000c080b200041003b010820004280a9bf98023703000c070b200041003b0108200042a083be9d033703000c060b200041003b0108200042c0b2cd3b3703000c050b200041003b0108200042808f9e9b013703000c040b024002400240200141086a2d0000417f6a0e03000102000b200041003b0108200042988ced8e013703000c050b200041003b010820004280b8f6fb043703000c040b200041003b010820004280969de0013703000c030b024002400240024002400240200141086a280200417f6a0e06000102030405000b200041013b0108200042e8073703000c070b200041013b0108200042e8073703000c060b200041013b0108200042e8073703000c050b200041013b0108200042e8073703000c040b200041013b0108200042e8073703000c030b200041013b0108200042e8073703000c020b024002400240200141086a280200417f6a0e03000102000b200041013b0108200042d0d4d782013703000c030b200041003b0108200042d8efa9e3023703000c020b200041003b0108200042b8ff9a97f10a3703000c010b02400240024002400240024002400240200141086a2d0000417f6a0e080001020304050607000b200041003b0108200042e8f193da013703000c070b200041003b0108200042c897b2ec033703000c060b200041003b0108200042c8b4b3a6023703000c050b200041003b0108200042808bc8a9a8043703000c040b200041003b0108200042b0ecd698013703000c030b200041003b0108200042a8ddacd0003703000c020b200041003b0108200042b0a0bbe4003703000c010b200041003b0108200042f8a2f1dd003703000b200241800c6a24000f0b1032000b1034000ba41405027f017e107f017e037f230041c0076b2202240002400240024020012802082203ad42f8037e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821070c010b200510382207450d020b410021082000410036020820002007360200200041046a200541f8036e22093602000240200541f803490d00200241e8036a41306a210a200241e8036a41206a210b200241e8036a41086a210c2009210d034020052008460d01200d450d044100210e024002400240024002400240024002400240024002400240200620086a22012802000e0c0b0102030405060708090a000b0b200241e8036a200141086a10cc094100210f41002110410021110240024002400240024002400240200141d0036a2d00000e0706010203040500060b200141dc036a2802002212417f4c0d13200141d4036a28020021010240024020120d00410121130c010b201210382213450d150b201241807e71211120132001201210d40b41807e71210f41062110201221140c050b200141d8036a2903002215a7221441807e712111200141e0036a29030021042015422088a72112410121100c040b200141d1036a2f0000200141d3036a2d000041107472210e200141d4036a2d0000211341022110410021110c030b200141d1036a2f0000200141d3036a2d000041107472210e200141d4036a280200221341807e71210f200141d8036a2d0000211441032110410021110c020b200141d1036a2f0000200141d3036a2d000041107472210e200141d8036a280200221441807e712111200141d4036a280200221341807e71210f200141e0036a3100002104200141dc036a2802002112410421100c010b200241b0076a41086a200141f0036a2d00003a00002002200141e8036a2903003703b007200141d1036a2f0000200141d3036a2d000041107472210e200141d4036a280200221341807e71210f200141d8036a2903002215a7221441807e712111200141e0036a29030021042015422088a72112410521100b200241d0036a41086a200c41086a290300370300200241d0036a41106a200c41106a290300370300200241c0036a41086a200b41086a2903003703002002200c2903003703d0032002200b2903003703c00320022802ec03211620022802e8032117200241286a200a41980310d40b1a200241106a41106a2004370300200241086a200241b0076a41086a29030037030020022012ad4220862011201441ff017172ad843703182002200f201341ff017172360214200220103a0010200220022903b0073703002002200e3b00112002200e4110763a0013410b210e0c0a0b4101210e0c090b4102210e0c080b4103210e0c070b2001410c6a2802002217417f4c0d09200141046a28020021010240024020170d00410121180c010b201710382218450d0b0b20182001201710d40b1a4104210e201721160c060b2001410c6a2802002217417f4c0d08200141046a28020021010240024020170d00410121180c010b201710382218450d0a0b20182001201710d40b1a4105210e201721160c050b200241e8036a200141086a10cc09200241d0036a41086a200c41086a290300370300200241d0036a41106a200c41106a290300370300200241c0036a41086a200b41086a2903003703002002200c2903003703d0032002200b2903003703c00320022802ec03211620022802e8032117200241286a200a41980310d40b1a4106210e0c040b200241e8036a200141086a10cc09200241d0036a41086a200c41086a290300370300200241d0036a41106a200c41106a290300370300200241c0036a41086a200b41086a2903003703002002200c2903003703d0032002200b2903003703c00320022802ec03211620022802e8032117200241286a200a41980310d40b1a4107210e0c030b2001410c6a2802002217417f4c0d05200141046a280200210e0240024020170d00410121180c010b201710382218450d070b2018200e201710d40b1a2002200141186a2903003703d8032002200141106a2903003703d0034108210e201721160c020b2001410c6a2802002217417f4c0d04200141046a280200210e0240024020170d00410121180c010b201710382218450d060b2018200e201710d40b1a4100211141002113410021140240024002400240024002400240200141106a2d00000e0706010203040500060b2001411c6a2802002216417f4c0d0a200141146a28020021010240024020160d00410121120c010b201610382212450d0c0b201641807e71211420122001201610d40b41807e71211141062113201621100c050b200141186a2903002215a7221041807e712114200141206a29030021042015422088a72116410121130c040b200141116a2f0000200141136a2d000041107472210e200141146a2d0000211241022113410021140c030b200141116a2f0000200141136a2d000041107472210e200141146a280200221241807e712111200141186a2d0000211041032113410021140c020b200141116a2f0000200141136a2d000041107472210e200141186a280200221041807e712114200141146a280200221241807e712111200141206a31000021042001411c6a2802002116410421130c010b200c200141306a2d00003a00002002200141286a2903003703e803200141116a2f0000200141136a2d000041107472210e200141146a280200221241807e712111200141186a2903002215a7221041807e712114200141206a29030021042015422088a72116410521130b200241d0036a41106a2004370300200241c0036a41086a200c290300370300200220133a00d003200220022903e8033703c0032002200e3b00d1032002200e4110763a00d30320022011201241ff0171723602d40320022016ad4220862014201041ff017172ad843703d8034109210e201721160c010b200241e8036a200141086a10cc09200241d0036a41086a200c41086a290300370300200241d0036a41106a200c41106a290300370300200241c0036a41086a200b41086a2903003703002002200c2903003703d0032002200b2903003703c003200141d0036a2903002104200141d8036a290300211520022802ec03211620022802e8032117200241286a200a41980310d40b1a2002201537031820022004370310410a210e0b200720086a2201200e3602002001410c6a2016360200200141086a2017360200200141046a2018360200200141106a20022903d003370300200141186a200241d0036a41086a290300370300200141206a200241d0036a41106a290300370300200141286a20022903c003370300200141306a200241c0036a41086a290300370300200141386a200241286a41980310d40b1a200141e0036a200241106a41106a290300370300200141d8036a200241106a41086a290300370300200141d0036a2002290310370300200141e8036a2002290300370300200141f0036a200241086a290300370300200841f8036a2108200d417f6a220d0d000b0b20002003360208200241c0076a24000f0b1034000b1032000b200920094198b4ca00103c000bfc2b01017f230041c0036b22022400024002400240024002400240024002400240024020012802000e09010203040506070800010b2002200141086a108e0b200241386a200141c0006a108e0b200241f0006a200141f8006a108e0b200241a8016a200141b0016a108e0b200241e0016a200141e8016a108e0b20024198026a200141a0026a108e0b200241d0026a200141d8026a108e0b20024188036a20014190036a108e0b200041386a200241306a290300370300200041306a200241286a290300370300200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a29030037030020002002290300370308200041c0006a2002290338370300200041c8006a200241386a41086a290300370300200041d0006a200241386a41106a290300370300200041d8006a200241386a41186a290300370300200041e0006a200241386a41206a290300370300200041e8006a200241386a41286a290300370300200041f0006a200241386a41306a290300370300200041a8016a200241f0006a41306a290300370300200041a0016a200241f0006a41286a29030037030020004198016a200241f0006a41206a29030037030020004190016a200241f0006a41186a29030037030020004188016a200241f0006a41106a29030037030020004180016a200241f0006a41086a290300370300200041f8006a2002290370370300200041e0016a200241a8016a41306a290300370300200041d8016a200241a8016a41286a290300370300200041d0016a200241a8016a41206a290300370300200041c8016a200241a8016a41186a290300370300200041c0016a200241a8016a41106a290300370300200041b8016a200241a8016a41086a290300370300200041b0016a20022903a80137030020004198026a200241e0016a41306a29030037030020004190026a200241e0016a41286a29030037030020004188026a200241e0016a41206a29030037030020004180026a200241e0016a41186a290300370300200041f8016a200241e0016a41106a290300370300200041f0016a200241e0016a41086a290300370300200041e8016a20022903e001370300200041d0026a20024198026a41306a290300370300200041c8026a20024198026a41286a290300370300200041c0026a20024198026a41206a290300370300200041b8026a20024198026a41186a290300370300200041b0026a20024198026a41106a290300370300200041a8026a20024198026a41086a290300370300200041a0026a20022903980237030020004188036a200241d0026a41306a29030037030020004180036a200241d0026a41286a290300370300200041f8026a200241d0026a41206a290300370300200041f0026a200241d0026a41186a290300370300200041e8026a200241d0026a41106a290300370300200041e0026a200241d0026a41086a290300370300200041d8026a20022903d002370300200041c0036a20024188036a41306a290300370300200041b8036a20024188036a41286a290300370300200041b0036a20024188036a41206a290300370300200041a8036a20024188036a41186a290300370300200041a0036a20024188036a41106a29030037030020004198036a20024188036a41086a29030037030020004190036a200229038803370300200042083703000c080b200042003703000c070b20024188036a200141086a108e0b20004201370300200041386a20024188036a41306a290300370300200041306a20024188036a41286a290300370300200041286a20024188036a41206a290300370300200041206a20024188036a41186a290300370300200041186a20024188036a41106a290300370300200041106a20024188036a41086a29030037030020002002290388033703080c060b200241d0026a200141086a108e0b20024188036a200141c0006a108e0b200041386a200241d0026a41306a290300370300200041306a200241d0026a41286a290300370300200041286a200241d0026a41206a290300370300200041206a200241d0026a41186a290300370300200041186a200241d0026a41106a290300370300200041106a200241d0026a41086a290300370300200020022903d002370308200041c0006a200229038803370300200041c8006a20024188036a41086a290300370300200041d0006a20024188036a41106a290300370300200041d8006a20024188036a41186a290300370300200041e0006a20024188036a41206a290300370300200041e8006a20024188036a41286a290300370300200041f0006a20024188036a41306a290300370300200042023703000c050b20024198026a200141086a108e0b200241d0026a200141c0006a108e0b20024188036a200141f8006a108e0b200041386a20024198026a41306a290300370300200041306a20024198026a41286a290300370300200041286a20024198026a41206a290300370300200041206a20024198026a41186a290300370300200041186a20024198026a41106a290300370300200041106a20024198026a41086a2903003703002000200229039802370308200041c0006a20022903d002370300200041c8006a200241d0026a41086a290300370300200041d0006a200241d0026a41106a290300370300200041d8006a200241d0026a41186a290300370300200041e0006a200241d0026a41206a290300370300200041e8006a200241d0026a41286a290300370300200041f0006a200241d0026a41306a29030037030020004203370300200041a8016a20024188036a41306a290300370300200041a0016a20024188036a41286a29030037030020004198016a20024188036a41206a29030037030020004190016a20024188036a41186a29030037030020004188016a20024188036a41106a29030037030020004180016a20024188036a41086a290300370300200041f8006a2002290388033703000c040b200241e0016a200141086a108e0b20024198026a200141c0006a108e0b200241d0026a200141f8006a108e0b20024188036a200141b0016a108e0b200041386a200241e0016a41306a290300370300200041306a200241e0016a41286a290300370300200041286a200241e0016a41206a290300370300200041206a200241e0016a41186a290300370300200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200020022903e001370308200041c0006a200229039802370300200041c8006a20024198026a41086a290300370300200041d0006a20024198026a41106a290300370300200041d8006a20024198026a41186a290300370300200041e0006a20024198026a41206a290300370300200041e8006a20024198026a41286a290300370300200041f0006a20024198026a41306a290300370300200041a8016a200241d0026a41306a290300370300200041a0016a200241d0026a41286a29030037030020004198016a200241d0026a41206a29030037030020004190016a200241d0026a41186a29030037030020004188016a200241d0026a41106a29030037030020004180016a200241d0026a41086a290300370300200041f8006a20022903d002370300200041e0016a20024188036a41306a290300370300200041d8016a20024188036a41286a290300370300200041d0016a20024188036a41206a290300370300200041c8016a20024188036a41186a290300370300200041c0016a20024188036a41106a290300370300200041b8016a20024188036a41086a290300370300200041b0016a200229038803370300200042043703000c030b200241a8016a200141086a108e0b200241e0016a200141c0006a108e0b20024198026a200141f8006a108e0b200241d0026a200141b0016a108e0b20024188036a200141e8016a108e0b200041386a200241a8016a41306a290300370300200041306a200241a8016a41286a290300370300200041286a200241a8016a41206a290300370300200041206a200241a8016a41186a290300370300200041186a200241a8016a41106a290300370300200041106a200241a8016a41086a290300370300200020022903a801370308200041c0006a20022903e001370300200041c8006a200241e0016a41086a290300370300200041d0006a200241e0016a41106a290300370300200041d8006a200241e0016a41186a290300370300200041e0006a200241e0016a41206a290300370300200041e8006a200241e0016a41286a290300370300200041f0006a200241e0016a41306a290300370300200041a8016a20024198026a41306a290300370300200041a0016a20024198026a41286a29030037030020004198016a20024198026a41206a29030037030020004190016a20024198026a41186a29030037030020004188016a20024198026a41106a29030037030020004180016a20024198026a41086a290300370300200041f8006a200229039802370300200041e0016a200241d0026a41306a290300370300200041d8016a200241d0026a41286a290300370300200041d0016a200241d0026a41206a290300370300200041c8016a200241d0026a41186a290300370300200041c0016a200241d0026a41106a290300370300200041b8016a200241d0026a41086a290300370300200041b0016a20022903d00237030020004198026a20024188036a41306a29030037030020004190026a20024188036a41286a29030037030020004188026a20024188036a41206a29030037030020004180026a20024188036a41186a290300370300200041f8016a20024188036a41106a290300370300200041f0016a20024188036a41086a290300370300200041e8016a200229038803370300200042053703000c020b200241f0006a200141086a108e0b200241a8016a200141c0006a108e0b200241e0016a200141f8006a108e0b20024198026a200141b0016a108e0b200241d0026a200141e8016a108e0b20024188036a200141a0026a108e0b200041386a200241f0006a41306a290300370300200041306a200241f0006a41286a290300370300200041286a200241f0006a41206a290300370300200041206a200241f0006a41186a290300370300200041186a200241f0006a41106a290300370300200041106a200241f0006a41086a29030037030020002002290370370308200041c0006a20022903a801370300200041c8006a200241a8016a41086a290300370300200041d0006a200241a8016a41106a290300370300200041d8006a200241a8016a41186a290300370300200041e0006a200241a8016a41206a290300370300200041e8006a200241a8016a41286a290300370300200041f0006a200241a8016a41306a290300370300200041a8016a200241e0016a41306a290300370300200041a0016a200241e0016a41286a29030037030020004198016a200241e0016a41206a29030037030020004190016a200241e0016a41186a29030037030020004188016a200241e0016a41106a29030037030020004180016a200241e0016a41086a290300370300200041f8006a20022903e001370300200041e0016a20024198026a41306a290300370300200041d8016a20024198026a41286a290300370300200041d0016a20024198026a41206a290300370300200041c8016a20024198026a41186a290300370300200041c0016a20024198026a41106a290300370300200041b8016a20024198026a41086a290300370300200041b0016a20022903980237030020004198026a200241d0026a41306a29030037030020004190026a200241d0026a41286a29030037030020004188026a200241d0026a41206a29030037030020004180026a200241d0026a41186a290300370300200041f8016a200241d0026a41106a290300370300200041f0016a200241d0026a41086a290300370300200041e8016a20022903d002370300200041d0026a20024188036a41306a290300370300200041c8026a20024188036a41286a290300370300200041c0026a20024188036a41206a290300370300200041b8026a20024188036a41186a290300370300200041b0026a20024188036a41106a290300370300200041a8026a20024188036a41086a290300370300200041a0026a200229038803370300200042063703000c010b200241386a200141086a108e0b200241f0006a200141c0006a108e0b200241a8016a200141f8006a108e0b200241e0016a200141b0016a108e0b20024198026a200141e8016a108e0b200241d0026a200141a0026a108e0b20024188036a200141d8026a108e0b200041386a200241386a41306a290300370300200041306a200241386a41286a290300370300200041286a200241386a41206a290300370300200041206a200241386a41186a290300370300200041186a200241386a41106a290300370300200041106a200241386a41086a29030037030020002002290338370308200041c0006a2002290370370300200041c8006a200241f0006a41086a290300370300200041d0006a200241f0006a41106a290300370300200041d8006a200241f0006a41186a290300370300200041e0006a200241f0006a41206a290300370300200041e8006a200241f0006a41286a290300370300200041f0006a200241f0006a41306a290300370300200041a8016a200241a8016a41306a290300370300200041a0016a200241a8016a41286a29030037030020004198016a200241a8016a41206a29030037030020004190016a200241a8016a41186a29030037030020004188016a200241a8016a41106a29030037030020004180016a200241a8016a41086a290300370300200041f8006a20022903a801370300200041e0016a200241e0016a41306a290300370300200041d8016a200241e0016a41286a290300370300200041d0016a200241e0016a41206a290300370300200041c8016a200241e0016a41186a290300370300200041c0016a200241e0016a41106a290300370300200041b8016a200241e0016a41086a290300370300200041b0016a20022903e00137030020004198026a20024198026a41306a29030037030020004190026a20024198026a41286a29030037030020004188026a20024198026a41206a29030037030020004180026a20024198026a41186a290300370300200041f8016a20024198026a41106a290300370300200041f0016a20024198026a41086a290300370300200041e8016a200229039802370300200041d0026a200241d0026a41306a290300370300200041c8026a200241d0026a41286a290300370300200041c0026a200241d0026a41206a290300370300200041b8026a200241d0026a41186a290300370300200041b0026a200241d0026a41106a290300370300200041a8026a200241d0026a41086a290300370300200041a0026a20022903d00237030020004188036a20024188036a41306a29030037030020004180036a20024188036a41286a290300370300200041f8026a20024188036a41206a290300370300200041f0026a20024188036a41186a290300370300200041e8026a20024188036a41106a290300370300200041e0026a20024188036a41086a290300370300200041d8026a200229038803370300200042073703000b200241c0036a24000bcf0102017f027e230041206b22022400420021034280ade204210402400240024002400240024020012d00000e0b0404040505050005050501050b200141106a10b5072201450d01200241106a200110b20320022903104280ade2047c21040c040b2002200141046a28020010b5032002290300a7450d010b420121030c020b20022903084280ade2047c21040c010b200141186a2802004198046c2201450d00200141e87b6a4198046ead4280ade2047e4280dac4097c21040b2000200437030820002003370300200241206a24000ba40204017f027e037f017e230041306b22022400420021034200210402400240024020012d00000e0b0101010202020202020200020b200241206a200141046a28020010b6032002280220410047ad2104200229032821030c010b42002104200141186a2802004198046c2205450d00200141106a280200220620056a2107420021030340024020062d00004107470d002006410c6a28020041e0076c2205450d00200628020421010340200241106a200110b5034201210402402002280210450d000c040b200229031821082002200110b6032002290300a70d03200141e0076a2101200820037c20022903087c2103200541a0786a22050d000b0b20064198046a22062007470d000b420021040b2000200337030820002004370300200241306a24000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210b1080b0f0b200041086a108d02200041046a220228020010b703200228020010390b940501047f230041a0036b22012400200141106a4200370300200141186a4200370300200141206a4200370300200141286a4200370300200142c0b2cd3b37039803200142c0b2cd3b37039003200142c0b2cd3b37038803200120012903c8013703084100210241012103034020014188036a2104024002400240200241ff01710e03010002010b20014190036a21040c010b20014198036a21040b200442c0b2cd3b370300024020034103460d00200341d49fc0006a2104200341016a210320042d000022024103470d010b0b200141d0026a4200370300200141c8026a200129038803370300200141c8016a41f8006a4200370300200141c8016a41f0006a4201370300200141c8016a41e8006a4200370300200141c8016a41e0006a420137030020014198026a420037030020014190026a20012903900337030020014188026a420037030020014180026a4201370300200141f8016a22034200370300200141f0016a22044201370300200141c8016a41186a420037030020012001290398033703d801200142003703d00120014280e497d0123703c801200141f8026a200141286a290300370300200141f0026a200141086a41186a290300370300200141e8026a200141186a290300370300200141e0026a200141106a290300370300200141d8026a20012903083703002004420137030020034280b0def7d32b3703002001410036028003200141086a200141c8016a41c00110d40b1a200141086a41f8006a428090cad2c60e370300200141086a41f0006a4201370300200141086a41e8006a4280c0a8ca9a3a370300200141086a41e0006a4201370300200141c8016a200141086a41b80110d40b1a2001428180808080d0a5cc00370380032000200141c8016a108501200141a0036a24000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041a8c1cd003602182000200041186a360210200041d497c5001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041a8c1cd003602182000200041186a360210200041b0c1cd001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a360210200041acefc2001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a360210200041e4b4c7001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a36021020004188a1c1001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a360210200041d8a0c7001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a360210200041c8c0cd001043000b4d01017f230041206b22002400200041146a410136020020004201370204200041c0c0cd003602002000410436021c200041b8c0cd003602182000200041186a360210200041f0d8ca001043000b8d2e01057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010c103200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010c103200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010c103200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c103200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010c103200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c103200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010c103200228020010390f0b2000410c6a220228020010c103200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010c103200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010c103200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010c103200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b200041386a10fc020f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010c303200228020010390f0b200041286a220228020010c103200228020010390f0b0be30201027f0240200041ac026a2802002201450d0020002802a40221022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b0240200041a8026a2802002202450d002002410c6c450d0020002802a40210390b0240200041b8026a2802002202450d0020024104742101200041b0026a28020041086a2102034002402002280200450d002002417c6a28020010390b200241106a2102200141706a22010d000b0b0240200041b4026a28020041ffffffff0071450d0020002802b00210390b0240200041bc026a2802002202450d00200041c0026a280200450d00200210390b0240200041cc026a280200450d00200041c8026a28020010390b0240200041e0026a2802002202450d00200241c1006c450d0020002802dc0210390b20002802e80221020240200041f0026a2802002201450d00200210390b200020013602f002200020023602e8020b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210c1030b0f0b200041086a108d02200041046a220228020010c303200228020010390b90bb060b017f017e037f017e017f017e107f067e057f037e0c7f230041b0cb006b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e26022a292827201f011e1d1c01161514131211100f0e0d01010c010b0a01010901080706050400020b200141106a29030021042001410c6a2802002105200141086a280200210620034190056a200141186a220741900710d40b1a200141a8076a290300210802400240024002402006417f6a0e0400010203000b200320043703e00c200341e00c6a41086a200741c00310d40b1a200341c8316a20034190056a41c0036a41d00310d40b1a200341c8316a41d0036a2008370300200341a0356a200141b0076a290300370300200341a8356a200141b8076a29030037030020034190396a41206a200241206a29020037030020034190396a41186a200241186a29020037030020034190396a41106a200241106a29020037030020034190396a41086a200241086a2902003703002003200229020037039039200341a0266a20034190396a10c50320032903a0262104200341a8c0006a200341a0266a41086a41c00310d40b1a20044209510d05200341a8106a41086a200341a8c0006a41c00310d40b1a200320043703a810200341a81b6a200341a8106a10b403200341f01e6a200341e00c6a10b403200341a8c0006a200341c8316a10c6030240024020032903a81b2204500d0041e80310382201450d252001200341a8c0006a41e80310d40b1a200341d0226a200341a81b6a41c80310d40b1a410a21050c010b2003419e266a20032d00ab403a0000200320032f00a9403b019c2620032d00a840210520032802ac402101200341d0226a200341a8c0006a41086a41c80310d40b1a200341c8226a20034188c4006a290300370300200341b8226a41086a20034180c4006a2903003703002003200341f8c3006a2903003703b8220b200341e03c6a200341f01e6a41c80310d40b1a0240024020032903e03c4201520d0020032d00e83c4101470d0020032802ec3c210220034188056a22064200370300200341f0046a41106a22074200370300200341f0046a41086a22094200370300200342003703f004200341d0046a41f1d5c400410d10cb012009200341d0046a41086a290000370300200320032900d0043703f004200341e0046a418bd6c400410c10cb012006200341e0046a41086a290000370300200720032900e004370300200341a0266a200341f0046a412010c70320032802f026210620032802b027210720032003419c266a41026a2d00003a00a326200320032f019c263b00a126200341a0266a41086a200341d0226a41c80310d40b1a200341802a6a200341b8226a41106a290300370300200341f8296a200341b8226a41086a290300370300200341f0296a20032903b822370300200320013602a426200320053a00a026200341003602f804200342013703f004200341003a00e004200341f0046a41004101107720032802f00420032802f80422096a20032d00e0043a00002003200941016a3602f804200341a0266a200341f0046a10e902410f411b4100200620074102461b2002200341f0046a10c8031b2102200341a0266a108b03200341e03c6a108d020c010b200341d4176a41026a2003419c266a41026a2d00003a0000200320032f019c263b01d41720034188146a200341d0226a41c80310d40b1a200341f0136a41106a200341b8226a41106a290300370300200341f0136a41086a200341b8226a41086a290300370300200320032903b8223703f013200341a0266a41046a200341f01e6a41c80310d40b210220034190396a200341a0266a41cc0310d40b1a200341e03c6a20034190396a41046a41c80310d40b1a2002200341e03c6a41c80310d40b1a200341d8176a200341a0266a41cc0310d40b1a410b21020b024020044200520d00200341a81b6a108d020b02402002411b460d00200320023602a026200341a0266a410472200341d8176a41cc0310d40b1a200341f0296a220620053a0000200341f4296a2001360200200341f3296a200341d6176a2d00003a0000200320032f01d4173b00f129200341f8296a20034188146a41c80310d40b1a200341d02d6a20034180146a290300370300200341c82d6a200341f0136a41086a290300370300200341c02d6a20032903f01337030041cba3c500210102402002410b4722020d00200341a0266a41086a108d022006108b0341c0a3c50021010b2001ad4280808080b001842104200341a8106a108d02410321010c3b0b200341b0266a200341a8106a41c80310d40b1a200341f8296a200341e00c6a41c80310d40b1a200341c02d6a200341c8316a41e80310d40b1a200341a8266a4201370300200341183a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800d90c3600192000411c6a200341dc0c6a280000360000200042003703000c3b0b200341d0226a200741c80310d40b1a200341e03c6a20034190056a41c8036a41c80310d40b1a200341c8316a41206a200241206a290200370300200341c8316a41186a200241186a290200370300200341c8316a41106a200241106a290200370300200341c8316a41086a200241086a290200370300200320022902003703c831200341a0266a200341c8316a10c50320032903a026210a200341a8c0006a200341a0266a41086a41c00310d40b1a024002400240200a4209510d00200341f01e6a200341a8c0006a41c00310d40b1a2003200a3703d817200341e0176a200341f01e6a41c00310d40b1a41980410382201450d2541f80310382206450d2520064101360200200341c8316a200341d0226a41c80310d40b1a41b00810382202450d2541f80310382207450d2520074101360200200241a8046a200341e03c6a41c80310d40b1a20024281808080103700a0042002200736009c04200241013a009804200220083703900420024200370388042002410136021020024200370108200241002802e8c848360104200241073b0100200142828080802037021420012002360210200341a4266a200341c8316a41c80310d40b1a200142818080801037000820012006360004200141053a00002001411c6a200341a0266a41cc0310d40b1a200341bcc0006a428180808010370200200341b8c0006a2001360200200341b0c0006a2004370300200320053602ac40200341003a00a840200341a0046a200341a8c0006a10b503024020032802a0040d0020032903a804210420034190046a200341a8c0006a10b603200329039004a70d0020042003290398047c220820045a0d030b200341a8c0006a10b703200341d8176a108d02410321020c010b02402004422088a72202450d00200241f8036c21012005210203402002108b02200241f8036a2102200141887c6a22010d000b0b02402004a72202450d00200241f8036c450d00200510390b200341e03c6a108d02200341d0226a108d02410221020b200041e3063b0021200041206a20023a0000200041186a41003a000020004200370308200041d6a3c500ad4280808080a00284370024200042013703000c3b0b20034190396a200341d8176a41c80310d40b1a200341a0266a200341a8c0006a41e00710d40b1a200341c8316a20034190396a200341a0266a2008200810ca03200341b0266a200341c8316a41c80710d40b1a200341a8266a4200370300200341183a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800a81b3600192000411c6a200341ab1b6a280000360000200042003703000c3a0b200341d0226a200741c80310d40b1a200341e03c6a20034190056a41c8036a41c80310d40b1a200341c8316a41206a200241206a290200370300200341c8316a41186a200241186a290200370300200341c8316a41106a200241106a290200370300200341c8316a41086a200241086a290200370300200320022902003703c831200341a0266a200341c8316a10c50320032903a026210a200341a8c0006a200341a0266a41086a41c00310d40b1a024002400240200a4209510d00200341f01e6a200341a8c0006a41c00310d40b1a2003200a3703d817200341e0176a200341f01e6a41c00310d40b1a200341a0266a200341d0226a41c80310d40b1a41b00810382202450d2441f80310382201450d2420014101360200200241a8046a200341e03c6a41c80310d40b1a20024200370108200241002802e8c848360104200241073b01002002410136021020024281808080103700a0042002200136009c04200241013a00980420022008370390042002420037038804200341b0c0006a2004370300200341b8c0006a2002360200200341bcc0006a428280808020370200200320053602ac40200341c8c0006a200341a0266a41c80310d40b1a200341053a00a840200341c0046a200341a8c0006a10b503024020032802c0040d0020032903c8042104200341b0046a200341a8c0006a10b60320032903b004a70d00200420032903b8047c220820045a0d030b200341a8c0006a10b703200341d8176a108d02410321020c010b02402004422088a72202450d00200241f8036c21012005210203402002108b02200241f8036a2102200141887c6a22010d000b0b02402004a72202450d00200241f8036c450d00200510390b200341e03c6a108d02200341d0226a108d02410221020b200041e3063b0021200041206a20023a0000200041186a41003a000020004200370308200041d6a3c500ad4280808080a00284370024200042013703000c3a0b20034190396a200341d8176a41c80310d40b1a200341a0266a200341a8c0006a41e00710d40b1a200341c8316a20034190396a200341a0266a2008200810ca03200341b0266a200341c8316a41c80710d40b1a200341a8266a4200370300200341183a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c390b200341c8316a41206a200241206a290200370300200341c8316a41186a200241186a290200370300200341c8316a41106a200241106a290200370300200341c8316a41086a200241086a290200370300200320022902003703c831200341a0266a200341c8316a10c50320032903a0262108200341a8c0006a200341a0266a41086a41c00310d40b1a02400240024020084209510d00200341f01e6a200341a8c0006a41c00310d40b1a200341a0266a41086a200341f01e6a41c00310d40b1a200341a0266a41c8036a200541e00710d40b2102200320083703a026024002402008a70e020400010b20032d00a8264102470d0020032d00e82941ff01710d00200341f4296a2802004101470d00200341ec296a2802002201280200410a470d00200141086a29030050450d00200341802a6a2802004102470d0020032802f82922012d00004107470d0020012d0098044105470d00200141b8046a2903004201520d00200141c0046a2d00004101470d00200141a4046a2802004101470d002001419c046a2802002802004101470d00200141b0046a2802004102470d0020012802a80422012d00004107470d0020012d0098044101470d00200141a8046a2903004201520d00200141b0046a2d00004102470d00200141a4046a2802004101470d002001419c046a2802002802004101460d030b200341a0266a108d02200210b703410321020c010b200510b703410221020b20051039200041e3043b0021200041206a20023a0000200041186a41003a000020004200370308200041e8a3c500ad4280808080800184370024200042013703000c390b20034190396a200341a0266a41c80310d40b1a200341a8c0006a200241e00710d40b1a200341c8316a20034190396a200341a8c0006a2004420010ca03200341b8c0006a200341c8316a41c80710d40b1a200341a8c0006a41086a4200370300200341183a00a840200341a8c0006a10c90320051039200041186a41003a000020004200370308200042003703000c380b000b2001410c6a2802002105200141106a2903002204a721062004422088a721070240024002400240200141086a280200417f6a0e0a0001020331302f2e2d2c000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041206a41023a0000200041186a41003a0000200042013703000c3a0b20004200370308200041186a41003a0000200042003703000c390b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03024020032d00a8404101460d0002402006450d00200510390b20004200370308200020032800c831360019200041186a41003a00002000411c6a200341cb316a280000360000200042003703000c390b02402006450d00200510390b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c380b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d00410810382202450d20200220043700004181c0c300410a2002410810e90120021039200041186a41003a000020004200370308200020032800a8403600192000411c6a200341abc0006a280000360000200042003703000c380b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c370b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d00410221020c350b200341c8316a2005200710d20120032802c8312202450d3220032802cc3121012003200341d0316a280200360294052003200236029005200341106a20034190056a10c10120032802100d31200328029405220b20032802142209490d312009417f4c0d1f0240024020090d004101210c0c010b20091038220c450d1f200c4100200910d60b1a0b200c200328029005220d200910d40b210c2003200b20096b360294052003200d20096a36029005200341086a20034190056a10c10120032802080d30200328029405220d200328020c220b490d30200b417f4c0d1f02400240200b0d004101210e0c010b200b1038220e450d1f200e4100200b10d60b1a0b200e200328029005220f200b10d40b210e200d200b6b220d4104490d2f200d417c714104460d2f200d417c714108460d2f200f200b6a220f28000421102003200d41746a360294052003200f410c6a36029005200320034190056a10c10120032802000d2f20032802042211200328029405220d410c6e220f200f20114b1bad420c7e2204422088a70d1f2004a7220f417f4c0d1f02400240200f0d00410421120c010b200f10382212450d1f0b200341003602b040200320123602a8402003200f410c6e3602ac4002402011450d00200341a0266a41086a2113200341a9266a2114200341aa266a2115200341ab266a2116410021170340200341003a00e004200d450d30200328029005220f2d000021182003200f41016a36029005200320183a00a426200341003a00e004200d4101460d30200328029005220f2d000021182003200f41016a36029005200320183a00a526200341003a00e004200d4102460d30200328029005220f2d000021182003200f41016a36029005200320183a00a626200341003a00e004200d4103460d30200328029005220f2d000021182003200f41016a36029005200320183a00a726200341003a00e004200d4104460d302013200328029005220f2d00003a00002003200f41016a36029005200341003a00e004200d4105460d302014200328029005220f2d00003a00002003200f41016a36029005200341003a00e004200d4106460d302015200328029005220f2d00003a00002003200f41016a36029005200341003a00e004200d4107460d302016200328029005220f2d00003a00002003200f41016a36029005200d417c714108460d3020032902a4262204a72118200f28000121192003200d41746a220d360294052003200f41056a360290052004422088a7211a0240201720032802ac40470d00200341a8c0006a201710da0120032802a840211220032802b04021170b20122017410c6c6a220f2019360208200f201a360204200f2018360200200320032802b04041016a22173602b0402011417f6a22110d000b20032802a84021120b2012450d2f20032902ac40a7210d024020032802940541034b0d00200d450d30200d410c6c450d30201210390c300b02402001450d00200210390b02400240024020094107470d000240200c41c0e1c000410710d70b450d004100210141f6d4c30021024280808080f00121040c020b0240201041bdc6004f0d004101210141dcd4c30021024280808080a00321040c020b200c10390240200b450d00200e10390b0240200d450d00200d410c6c450d00201210390b41d0a2c00041052005200710e90102402006450d00200510390b200341a8266a41023a0000200341003a00a026200341a0266a10c90320032003280090393602d817200320034193396a2800003600db17200041186a41003a000020004200370308200020032802d8173600192000411c6a20032800db17360000200042003703000c390b4100210141f6d4c30021024280808080f00121042009450d010b200c10390b0240200b450d00200e10390b200d450d33200d410c6c450d33201210390c330b4280808080b0012104410221010c340b2001411c6a2105200141c0006a2903002108200141386a2802002117200141346a2802002111200141306a280200210d2001412c6a280200210c200141186a280200210b200141146a2802002107200141106a28020021092001410c6a2802002106200141c8006a290300210420012f010a210f20012d0009210e0240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a2d0000417f6a0e080001020304050607000b2003200541076a290000370097392003200529000037039039200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341a81b6a41086a200341b1c0006a290000370300200341a81b6a41106a200341b9c0006a290000370300200341a81b6a41186a200341c1c0006a290000370300200320032900a9403703a81b20032d00a8404101460d07200341c8316a41186a200341a81b6a41186a290300370300200341c8316a41106a200341a81b6a41106a290300370300200341c8316a41086a200341a81b6a41086a290300370300200320032903a81b3703c8310240200d20114d0d00200341e03c6a410310cd030c280b200d41076a2202200d490d080240200220114f0d00200341e03c6a410410cd030c280b200341881f6a22014200370300200341801f6a22024200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41c7e5c000410610cb012005200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a419081c400410610cb012001200341e0046a41086a290000370300200220032900e004370300200341a8036a200341f01e6a412010ce03024020032802ac03410020032802a8031b2017490d00200341e03c6a410510cd030c280b0240417f417f200d41016a22012001200d491bad4280ce187e220aa7200a422088a71b20174f0d00200341e03c6a410610cd030c280b200341881f6a4200370300200341801f6a4200370300200341f01e6a41086a22014200370300200342003703f01e200341d0046a41c7e5c000410610cb012001200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a419081c400410610cb01200241086a200341e0046a41086a290000370000200220032900e004370000200341a0036a200341f01e6a412010ce03024020032802a4034180ce186e410020032802a0031b200d4d0d00200341e03c6a410110cd030c280b200341a0266a200c10cf0320032802a026220520032802a82610e3012101024020032802a426450d00200510390b02402001450d00200341e03c6a411110cd030c280b200341d8176a200c10d003200341a0266a20032802d817220120032802e01710d1030240024020032d00d0264102460d0020034198056a2205200341b9266a290000370300200341a0056a2218200341c1266a290000370300200341a7056a2212200341c8266a290000370000200320032900b1263703900520032d00b0262119024020032802dc17450d00200110390b200341b1c0006a2005290300370000200341b9c0006a2018290300370000200341c0c0006a201229000037000020032003290390053700a940200320193a00a840200341c8316a200341a8c0006a412010d70b450d01200341e03c6a410c10cd030c290b024020032802dc17450d00200110390b200341e03c6a410910cd030c280b200341a0266a200c10d20320032802a026220520032802a82610d30341ff01712101024020032802a426450d00200510390b0240024020014107460d00200141054b0d004101200174412a710d010b200341a0266a200c10d20320032802a026220520032802a82610d30341ff01712101024020032802a426450d00200510390b024020014107460d00200141064b0d00410120017441d400710d010b200341e03c6a410910cd030c280b200341881f6a4200370300200341801f6a4200370300200341f01e6a41086a22014200370300200342003703f01e200341d0046a41fde7c000410910cb012001200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a4190c2c400410d10cb01200241086a200341e0046a41086a290000370000200220032900e00437000020034198036a200341f01e6a412010ce03200328029c0341002003280298031b220141016a22052001490d09200341a0266a200341c8316a428080e983b1de16420010d403024020032d00a02622184108470d00200341c8266a2004370300200341a0266a41186a420037030020034197276a200b36000020034193276a20073600002003418f276a20093600002003418b276a200636000020034189276a200f3b0000200341f0266a200341d0316a290300370300200341f8266a200341d8316a29030037030020034180276a200341c8316a41186a290300370300200320083703c026200342003703b026200342003703a8262003428080e983b1de163703a026200320013602e426200320113602e0262003200d3602dc26200341003602d426200320173602d026200320032903c8313703e8262003200e3a008827200341a2276a2003290097393700002003419b276a200329039039370000200341d8176a200c10cf0320032802e017210620032802d817210120034100360298052003420137039005200341a0266a20034190056a10d50320012006200328029005220720032802980510e9010240200328029405450d00200710390b024020032802dc17450d00200110390b200341881f6a4200370300200341801f6a4200370300200341f01e6a41086a22014200370300200342003703f01e200341d0046a41fde7c000410910cb012001200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a4190c2c400410d10cb01200241086a200341e0046a41086a290000370000200220032900e004370000200320053602a026200341f01e6a4120200341a0266a410410e901200c10d603200341ac266a200c360200200341a0266a41086a41003a0000200341173a00a026200341a0266a10c9030c2a0b20032d00a326210220032d00a226210120032d00a1262105200320032902a4263702e43c200320023a00e33c200320013a00e23c200320053a00e13c200320183a00e03c0c270b200141d8006a290300210a200141d0006a290300211b2001413c6a280200210120034188146a41086a200541086a2900003703002003200529000037038814200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341a81b6a41086a200341b1c0006a290000370300200341a81b6a41106a200341b9c0006a290000370300200341a81b6a41186a200341c1c0006a290000370300200320032900a9403703a81b20032d00a8404101460d09200341d8176a41186a200341a81b6a41186a290300370300200341d8176a41106a200341a81b6a41106a290300370300200341d8176a41086a200341a81b6a41086a290300370300200320032903a81b3703d8170240201b4280a094a58d1d544100200a501b450d00200341a8106a410810cd030c210b200341c8316a2004422088a7220210d70320032802fc314103460d0a200341a0266a41066a200341c8316a41900110d40b1a200341a8c0006a200341a0266a41960110d40b1a20034190056a200341a8c0006a41066a41900110d40b1a20032903a005221c201b7c221d201c542205200341a8056a2218290300221e200a7c2005ad7c221c201e54201c201e511b0d0b2003201d3703a0052018201c3703000240201d20032903b00556201c200341b8056a290300221e56201c201e511b450d00200341a8106a410a10cd030c210b200341881f6a22124200370300200341801f6a22054200370300200341f01e6a41086a22184200370300200342003703f01e200341d0046a41c7e5c000410610cb012018200341d0046a41086a2219290000370300200320032900d0043703f01e200341e0046a419081c400410610cb012012200341e0046a41086a221a290000370300200520032900e004370300200341d0036a200341f01e6a412010ce03024020032802d403410020032802d0031b221020032802c005490d00200341a8106a410b10cd030c210b201242003703002005420037030020184200370300200342003703f01e200341d0046a41c7e5c000410610cb0120182019290000370300200320032900d0043703f01e200341e0046a419081c400410610cb01200541086a201a290000370000200520032900e004370000200341c8036a200341f01e6a412010ce03024020032802cc034180ce186e410020032802c8031b20032802cc054d0d00200341a8106a410b10cd030c210b200342f0f2bd99e6ac9db7e4003703a02620034190396a200341a0266a200210d803200341b8036a200220034190396a10d903024020032903b803200341b8036a41086a29030084500d00200341a8106a410f10cd030c210b200341a0266a200341d8176a20032802d40510da03200341a0266a41086a290300211c200341b8266a2802002119200341b4266a280200211820032903a026211e20032802b02621120240024020032d00f8054103460d00200e41ff01714103460d01200341df266a20043d0000200341e1266a20044210883c0000200341bb266a20034188146a41086a290300370000200320083700d7262003200b3600af26200320073600ab26200320093600a726200320063600a3262003200f3b00a12620032003290388143700b326200320013600d326200320173600cf26200320113600cb262003200d3600c7262003200c3600c3262003200e3a00a026412010382201450d4720012002360000200320013602a81b200342a0808080c0003702ac1b200341a81b6a41044120107720032802a81b220120032802b01b22076a220620032903d817370000200641086a200341d8176a41086a290300370000200641106a200341d8176a41106a290300370000200641186a200341d8176a41186a2903003700002003200741206a22063602b01b024020032802ac1b220720066b410f4b0d00200341a81b6a20064110107720032802ac1b210720032802a81b210120032802b01b21060b200120066a2209201c3700082009201e3700002003200641106a22063602b01b0240200720066b410f4b0d00200341a81b6a20064110107720032802a81b210120032802b01b21060b200120066a2207200a3700082007201b3700002003200641106a22063602b01b024002400240024020032d00f8050e03010200010b200341c8c0006a20034199066a2d00003a0000200341a8c0006a41186a20034191066a290000370300200341a8c0006a41106a20034189066a290000370300200341a8c0006a41086a20034181066a2900003703002003200341f9056a2900003703a840200341f0046a200341a8c0006a4121109f01200341c8316a41086a200341f0046a41086a290300370300200341c8316a41106a200341f0046a41106a290300370300200341c8316a41186a200341f0046a41186a290300370300200320032903f0043703c8310c020b200341d0316a20034181066a290000370300200341c8316a41106a20034189066a290000370300200341e0316a20034191066a2900003703002003200341f9056a2900003703c8310c010b200341d0316a20034181066a290000370300200341c8316a41106a20034189066a290000370300200341e0316a20034191066a2900003703002003200341f9056a2900003703c8310b200341a0266a20012006200341c8316a10db032106024020032802ac1b450d00200110390b20060d00200341a8106a411510cd030c210b200341a0266a200341d8176a20034190396a201b200a410110dc0320032d00a02622014108470d0d2003427f201c200a7c201e201b7c2208201e542201ad7c220420012004201c542004201c511b22011b3703b0402003427f200820011b3703a84020032802d4052101200320193602cc31200320123602c831200320013602d0222003200341a8c0006a3602e03c2003200341c8316a3602a8262003200341e03c6a3602a4262003200341d0226a3602a026200341d8176a200341a0266a10dd03200341881f6a22064200370300200341801f6a22074200370300200341f01e6a41086a22014200370300200342003703f01e200341d0046a41f5e7c000410810cb012001200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a41f0a9cd00410b10cb01200541086a200341e0046a41086a290000370000200520032900e004370000200341a0266a200341f01e6a412010de03024020032802a0264101470d002010200341a0266a41086a2802006b220120104b0d00200141bfb2044b0d0020032802c4054102470d25200341c8056a2802002010470d250c260b2006420037030020074200370300200341f01e6a41086a22014200370300200342003703f01e200341d0046a41fde7c000410910cb012001200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a41fcc1c400410c10cb01200541086a200341e0046a41086a290000370000200520032900e004370000200341b0036a200341f01e6a412010ce0320032802b403410020032802b0031b210120032802c4054101470d23200341c8056a2802002001470d230c250b200341a8106a411510cd030c1f0b20034190396a41186a200541056a2900003700002003200b36009f392003200736009b39200320093600973920032006360093392003200f3b0091392003200e3a009039200320052900003700a339200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc0320032d00a8404101460d0c200341c8316a200c10d70320032802fc314103460d0d200341a0266a41066a200341c8316a41900110d40b1a200341a8c0006a200341a0266a41960110d40b1a20034190056a200341a8c0006a41066a41900110d40b1a200341f01e6a41186a22024200370300200341f01e6a41106a22014200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41c7e5c000410610cb012005200341d0046a41086a2206290000370300200320032900d0043703f01e200341e0046a419081c400410610cb012002200341e0046a41086a2207290000370300200120032900e004370300200341e0036a200341f01e6a412010ce0320032802e403210920032802e003210b200342f0f2bd99e6ac9db7e4003703a026200341a8c0006a200341a0266a200c10d80320034190056a41186a290300210420032903a005210a20032802cc05210e20032802c005210d200242003703002001420037030020054200370300200342003703f01e200341d0046a41c7e5c000410610cb0120052006290000370300200320032900d0043703f01e200341e0046a419081c400410610cb0120022007290000370300200120032900e004370300200341d8036a200341f01e6a412010ce0320032802dc034180ce186e210202400240024020094100200b1b200d4f0d002002410020032802d8031b200e4b0d00200341d8176a411110cd030c010b200341c8316a200341a8c0006a10df03200341a0266a20032802c831220120032802d03110e003200341a0266a41106a290300420020032903a02642015122021b210820032903a826420020021b211b024020032802cc31450d00200110390b201b200a5a200820045a20082004511b0d01200341d8176a410f10cd030b20032d00d81722024108470d0f0b200341a0266a20034190396a20032802d405220210da03200341a8266a290300211b20032903a02621080240200341b4266a280200450d0020032802b02610390b02402008201b8450450d00200341e03c6a411210cd030c1c0b200341a0266a200341a8c0006a20034190396a2008201b410110dc03024020032d00a02622014108470d0020034190396a200210e103200341a8056a42002004201b7d200a200854ad7d221c200a20087d221e200a56201c200456201c2004511b22021b37030020034200201e20021b3703a005200341c8316a200c10cf0320032802d031210120032802c8312102200341003602a826200342013703a02620034190056a200341a0266a10d5032002200120032802a026220520032802a82610e901024020032802a426450d00200510390b024020032802cc31450d00200210390b200341d8266a201b370300200341d0266a2008370300200341a9266a200329039039370000200341cc266a200c360200200341a0266a41086a41023a0000200341c1266a200341a8396a290300370000200341b9266a200341a0396a290300370000200341b1266a20034190396a41086a290300370000200341173a00a026200341a0266a10c9030c1e0b20032d00a326210220032d00a226210520032d00a1262106200320032902a4263702e43c200320023a00e33c200320053a00e23c200320063a00e13c200320013a00e03c0c1b0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03024020032d00a8404101460d00200341c8316a200610d70320032802fc314103460d0f200341a0266a41066a200341c8316a41900110d40b1a200341a8c0006a200341a0266a41960110d40b1a20034190056a200341a8c0006a41066a41900110d40b1a200341f01e6a41186a22024200370300200341f01e6a41106a22014200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41c7e5c000410610cb012005200341d0046a41086a2207290000370300200320032900d0043703f01e200341e0046a419081c400410610cb012002200341e0046a41086a2209290000370300200120032900e004370300200341f0036a200341f01e6a412010ce0320032802f403210b20032802f003210c200342f0f2bd99e6ac9db7e4003703a026200341e03c6a200341a0266a200610d80320034190056a41186a290300210420032903a005210820032802cc05210e20032802c005210d200242003703002001420037030020054200370300200342003703f01e200341d0046a41c7e5c000410610cb0120052007290000370300200320032900d0043703f01e200341e0046a419081c400410610cb0120022009290000370300200120032900e004370300200341e8036a200341f01e6a412010ce0320032802ec034180ce186e2102024002400240024002400240024002400240200b4100200c1b200d4f0d002002410020032802e8031b200e4b0d00200341c8316a411110cd030c010b200341a8c0006a200341e03c6a10df03200341a0266a20032802a840220120032802b04010e003200341a0266a41106a290300420020032903a02642015122021b210a20032903a826420020021b211b024020032802ac40450d00200110390b201b20085a200a20045a200a2004511b0d01200341c8316a410f10cd030b20032d00c83122024108470d010b200341a0266a20032802d405220d10e20320032802a8262202417f4c0d4b20032802a02621010240024020020d00410121050c010b200210382205450d4b0b20052001200210d40b2105024020032802a426450d00200110390b200341c8c0006a4100360200200341bcc0006a2002360200200341a8c0006a41106a200236020020034180023b01d0402003410e3602cc40200342013703c040200320053602b440200341003602b040200342013703a840200341a0266a200341a8c0006a10e403200341d0266a280200220b0d014200211c0c020b20032902cc31210420032d00cb31210120032d00ca31210520032d00c9312106200341b0396a20023a0000200341a8396a41003a0000200320043702b439200320013a00b339200320053a00b239200320063a00b13920034200370398390c1f0b41f4032102200341c8266a210c4200211c0340200341c8316a41186a200341a0266a41186a2201290300221e370300200341c8316a41106a200341a0266a41106a2205290300221d370300200341c8316a41086a200341a0266a41086a2207290300221f370300200320032903a02622203703c831200c290300211b20032903c026210a20032802d42621092001201e3703002005201d3703002007201f370300200320203703a0262002450d03200341d0226a200341e03c6a200341a0266a200a201b410110dc0320032d00d02222014108470d02200341a0266a200d10e1032008200a7d221e2008562004201b7d2008200a54ad7d220820045620082004511b210102402009450d00200b10390b4200200820011b21044200201e20011b2108201c42017c211c2002417f6a2102200341a0266a200341a8c0006a10e40320032802d026220b0d000b200341a8056a2004370300200320083703a0050b024020032802ac40450d0020032802a84010390b024020032802b840450d0020032802b44010390b024020032802c440450d0020032802c04010390b200341a8c0006a200610cf0320032802b040210120032802a8402102200341003602a826200342013703a02620034190056a200341a0266a10d5032002200120032802a026220520032802a82610e901024020032802a426450d00200510390b024020032802ac40450d00200210390b200341ac266a2006360200200341a8266a41043a0000200341173a00a026200341a0266a10c903200341a8396a41003a0000200341a0396a201c42d082ec157e201c4280e1eb177e7c201c428084afdf007e7c42c0a6fbaa017c37030020034201370398390c020b20032902d422210a20032d00d322210220032d00d222210520032d00d122210620034190056a41186a2004370300200341b0396a20013a000020034190396a41186a41003a0000200320083703a0052003200a3702b439200320023a00b339200320053a00b239200320063a00b1392003420037039839200342013703903902402009450d00200b10390b024020032802ac40450d0020032802a84010390b024020032802b840450d0020032802b44010390b20032802c440450d1c20032802c04010390c1c0b200341a8056a2004370300200320083703a00502402009450d00200b10390b024020032802ac40450d0020032802a84010390b024020032802b840450d0020032802b44010390b024020032802c440450d0020032802c04010390b200341a8c0006a200610cf0320032802b040210120032802a8402102200341003602a826200342013703a02620034190056a200341a0266a10d5032002200120032802a026220520032802a82610e901024020032802a426450d00200510390b024020032802ac40450d00200210390b200341ac266a2006360200200341a8266a41033a0000200341173a00a026200341a0266a10c903200341a8396a41003a000020034200370398390b200341d8176a41106a20034190396a41106a2903002204370300200341d8176a41186a20034190396a41186a29030022083703002003200329039839220a3703e017200041186a2008370300200041106a20043703002000200a370308200042003703000c5c0b200341a8396a41003a000020034190396a41206a41023a000020034200370398390c190b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341a81b6a41086a200341b1c0006a290000370300200341a81b6a41106a200341b9c0006a290000370300200341a81b6a41186a200341c1c0006a290000370300200320032900a9403703a81b0240024002400240024020032d00a8404101460d0020034190396a41186a200341a81b6a41186a29030037030020034190396a41106a200341a81b6a41106a29030037030020034190396a41086a200341a81b6a41086a290300370300200320032903a81b37039039200341c8316a200610d70320032802fc314103460d02200341a0266a41066a200341c8316a41900110d40b1a200341a8c0006a200341a0266a41960110d40b1a20034190056a200341a8c0006a41066a41900110d40b1a200341f01e6a41186a22024200370300200341f01e6a41106a22014200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41c7e5c000410610cb012005200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a419081c400410610cb012002200341e0046a41086a290000370300200120032900e00437030020034188046a200341f01e6a412010ce03200328028c04210220032802880421010240024020034190396a200341d8056a2205412010d70b450d002002410020011b20032802c005490d010b20032903a005200341a8056a29030084500d020b200341d8176a411410cd030c030b200341023a00d8170c030b200341f8036a200520032903900520034190056a41086a29030010e503200341a0266a200610cf0320032802a026220220032802a82610e001024020032802a426450d00200210390b200341ac266a2006360200200341a0266a41086a41053a0000200341173a00a026200341a0266a10c9030c1a0b200341d8176a410910cd030b20032d00d8174108460d1820032902dc1721040b20032802d8172102200041246a2004370200200041206a2002360200200041186a41003a000020004200370308200042013703000c5a0b2003200541076a2900003700af40200320052900003703a840200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a0266a10cb030d0d200341a0266a200c10d703024020032802d42622024103460d00200341a81b6a41086a2201200341f0266a2205290300370300200341b81b6a2218200341f8266a2212290300370300200341a81b6a41186a221920034180276a221a2903003703002003200341e8266a2903003703a81b200341e4266a2802002110200341a0266a41086a290300210a200341a0266a41186a2213290300211b20032903a026211c20032903b026211e20032802d8262114200341c8266a20043703002013201b370300200341d8266a201436020020034197276a200b36000020034193276a20073600002003418f276a20093600002003418b276a200636000020034189276a200f3b0000200320083703c0262003201e3703b0262003200a3703a8262003201c3703a026200320103602e426200320113602e0262003200d3602dc26200320023602d426200320173602d0262005200129030037030020122018290300370300201a20192903003703002003200e3a008827200320032903a81b3703e826200341a2276a20032900af403700002003419b276a20032903a84037000020034190056a200c10cf0320032802980521012003280290052102200341003602d031200342013703c831200341a0266a200341c8316a10d5032002200120032802c831220520032802d03110e901024020032802cc31450d00200510390b0240200328029405450d00200210390b200341ac266a200c360200200341a0266a41086a41093a0000200341173a00a026200341a0266a10c903200341083a0090390c160b20034190396a410910cd0320032d0090394108460d150c140b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341a81b6a41086a200341b1c0006a290000370300200341a81b6a41106a200341b9c0006a290000370300200341a81b6a41186a200341c1c0006a290000370300200320032900a9403703a81b0240024020032d00a8404101460d00200341c8316a41186a200341a81b6a41186a290300370300200341c8316a41106a200341a81b6a41106a290300370300200341c8316a41086a200341a81b6a41086a290300370300200320032903a81b3703c8310240200b41204d0d0020034190056a411610cd030c140b200341a0266a200610d70320032802d4264103460d0f200341a0266a200341c8316a200341e4266a280200220210da032003200341a8266a29030022043703b040200320032903a02622083703a8400240200341b4266a280200450d0020032802b02610390b200820048450450d0120034190056a411210cd030c130b200341023a0090050c120b2003200b360294392003200936029039200320023602d0222003200341a8c0006a3602e03c200320034190396a3602a8262003200341e03c6a3602a4262003200341d0226a3602a026200341c8316a200341a0266a10dd03200341c1266a200341e0316a290300370000200341b9266a200341d8316a290300370000200341b1266a200341c8316a41086a290300370000200341a9266a20032903c831370000200341d8266a200b360200200341d4266a2007360200200341d0266a2009360200200341cc266a2006360200200341a0266a41086a410a3a0000200341173a00a026200341a0266a10c903200341083a0090050c120b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc0320032d00a8404101460d0d200341a0266a200610d703024002400240024020032802d4264103460d00024020032903b026200341b8266a2903008450450d00200341c8316a411210cd030c020b200341881f6a22024200370300200341801f6a22014200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41fde7c000410910cb012005200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a41d4c1c400410810cb012002200341e0046a41086a290000370300200120032900e004370300200341a0266a200341f01e6a412010e60320032902a426420020032802a02622021b2204422088a74102742101200241002802d8974e20021b220921020240034020012205450d012005417c6a210120022802002107200241046a210220062007470d000b0b0240200442ffffffff0383500d00200910390b2005450d02200341c8316a411710cd030c010b200341c8316a410910cd030b20032d00c8314108460d0120032902cc3121040c100b200610e703200341ac266a2006360200200341a8266a410b3a0000200341173a00a026200341a0266a10c9030b4200210420004200370308200020032800a026360019200041186a41003a00002000411c6a200341a3266a2800003600000c0f0b200341023a00e03c0c200b200341e03c6a410210cd030c1e0b200341e03c6a410710cd030c1d0b200341023a00a8100c170b200341a8106a410910cd030c150b200341a8106a410710cd030c140b20032d00a326210220032d00a226210520032d00a1262106200320032902a4263702ac10200320023a00ab10200320053a00aa10200320063a00a910200320013a00a8100c120b200341023a00e03c0c0f0b200341e03c6a410910cd030c0d0b20032d00db17210120032d00da17210520032d00d9172106200320032902dc173702e43c200320013a00e33c200320053a00e23c200320063a00e13c200320023a00e03c0c0c0b200341b0396a410910cd03200341a8396a41003a000020034200370398390c0a0b200341023a0090390c060b20034190056a410910cd030c030b200341023a00c8310b20032802c8312102200041246a2004370200200041206a2002360200200041186a41003a000020004200370308420121040b200020043703000c470b02402007450d00200910390b20032d0090054108460d002003280290052102200041246a200329029405370200200041206a2002360200200041186a41003a000020004200370308200042013703000c460b20004200370308200020032800d817360019200041186a41003a00002000411c6a200341db176a280000360000200042003703000c450b2003280290392102200041246a200329029439370200200041206a2002360200200041186a41003a000020004200370308200042013703000c440b20004200370308200020032800d817360019200041186a41003a00002000411c6a200341db176a280000360000200042003703000c430b20004200370308200020032800e03c360019200041186a41003a00002000411c6a200341e33c6a280000360000200042003703000c420b200341d8176a41286a20034190396a41286a2903002204370300200341d8176a41206a20034190396a41206a2903002208370300200341d8176a41186a20034190396a41186a290300220a370300200341d8176a41106a20034190396a41106a290300221b3703002003200329039839221c3703e017200041286a2004370300200041206a2008370300200041186a200a370300200041106a201b3703002000201c370308200042013703000c410b20032d00e03c4108460d0120032902e43c21040b20032802e03c2102200041246a2004370200200041206a2002360200200041186a41003a000020004200370308200042013703000c3f0b20004200370308200020032800d022360019200041186a41003a00002000411c6a200341d3226a280000360000200042003703000c3e0b2018450d00201210390b20032d00a8104108460d040b20032802a8102102200041246a20032902ac10370200200041206a2002360200200041186a41003a000020004200370308200042013703000c3b0b200210e703200341c8056a2001360200200341013602c4050c010b200210e703200341c8056a2010360200200341023602c4050b200341c8316a200210cf0320032802d031210520032802c8312101200341003602a826200342013703a02620034190056a200341a0266a10d5032001200520032802a026220620032802a82610e901024020032802a426450d00200610390b024020032802cc31450d00200110390b200341d8266a200a370300200341d0266a201b370300200341a9266a20032903d817370000200341cc266a2002360200200341a0266a41086a41013a0000200341c1266a200341f0176a290300370000200341b9266a200341e8176a290300370000200341b1266a200341d8176a41086a290300370000200341173a00a026200341a0266a10c9032018450d00201210390b20004200370308200020032800e00c360019200041186a41003a00002000411c6a200341e30c6a280000360000200042003703000c370b20032d00e03c4108460d010b20032802e03c2102200041246a20032902e43c370200200041206a2002360200200041186a41003a000020004200370308200042013703000c350b20004200370308200020032800d022360019200041186a41003a00002000411c6a200341d3226a280000360000200042003703000c340b200241226a2f010021072002411a6a2901002104200241196a2d00002109200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002111200241106a2d000021172002410e6a2f010021182002410d6a2d000021122002410c6a2d000021192002410a6a2f0100211a200241096a2d00002110200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f01002121200141106a28020021222001410c6a28020021232002280224210520022d0001210620022d000021020240024002400240024002400240200141086a280200417f6a0e03000102000b02400240024020020e03000102010b20052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200641ff0171450d01411010382202450d23200241cce0c00036020c200241013602082002428180808010370200411010382205450d23200541e4e0c00036020c20054101360208200542818080801037020020022002280200417f6a220136020020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b20052005280200417f6a2202360200410221064200210420020d052005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0520051039420021080c060b20034188056a2205420037030020034180056a22024200370300200341f0046a41086a22014200370300200342003703f004200341d0046a41f5e7c000410810cb012001200341d0046a41086a2209290000370300200320032900d0043703f004200341e0046a41f0a9cd00410b10cb012005200341e0046a41086a220b290000370300200220032900e004370300200341a0266a200341f0046a412010de03024020032802a0264101470d00200341a0266a41086a280200210c200542003703002002420037030020014200370300200342003703f004200341d0046a41c7e5c000410610cb0120012009290000370300200320032900d0043703f004200341e0046a419081c400410610cb01200241086a200b290000370000200220032900e00437000020034190036a200341f0046a412010ce034188b6cc00ad21084103210641002107428080808090022104200328029003450d06200328029403417f200c41c0b2046a220d200d200c491b490d060b200542003703002002420037030020014200370300200342003703f004200341d0046a41c7e5c000410610cb0120012009290000370300200320032900d0043703f004200341e0046a419081c400410610cb01200241086a200b290000370000200220032900e00437000020034188036a200341f0046a412010ce03200328028c034180ce186e41002003280288031b20224d0d0241a4b6cc00ad210841032106428080808090022104410121070c050b200141286a2903002108200141206a290300210a200141186a2802002124200141146a2802002101200341a0266a41226a20073b0100200341a0266a411a6a2004370100200341a0266a41196a20093a0000200341a0266a41186a200b3a0000200341a0266a41166a200c3b0100200341a0266a41156a200d3a0000200341a0266a41146a200e3a0000200341a0266a41126a200f3b0100200341a0266a41116a20113a0000200341a0266a41106a20173a0000200341a0266a410e6a20183b0100200341a0266a410d6a20123a0000200341a0266a410c6a20193a0000200341a0266a410a6a201a3b0100200341a0266a41096a20103a0000200341a0266a41086a20133a0000200320053602c426200320143b01a626200320153a00a526200320163a00a426200320213b01a226200320063a00a126200320023a00a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341a8c0006a41096a290000370300200341e03c6a41106a200341a8c0006a41116a290000370300200341e03c6a41186a200341a8c0006a41196a290000370300200320032900a9403703e03c02400240024020032d00a8404101460d00200341d0226a41186a200341e03c6a41186a2903002204370300200341d0226a41106a200341e03c6a41106a290300221b370300200341d0226a41086a200341e03c6a41086a290300221c370300200320032903e03c221e3703d022200341a0266a41186a2004370300200341a0266a41106a201b370300200341a0266a41086a201c3703002003201e3703a026200341a8c0006a200341a0266a2023202220012024200a200810e80320032d00a84022024108460d0220032d00a940210120032d00aa40210520032d00ab40210620032902ac4021040c010b410221020b200020063a0023200020053a0022200020013a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c390b20004200370308200041186a41003a0000200042003703000c380b200341a0266a41226a20073b0100200341a0266a411a6a2004370100200341a0266a41196a20093a0000200341a0266a41186a200b3a0000200341a0266a41166a200c3b0100200341a0266a41156a200d3a0000200341a0266a41146a200e3a0000200341a0266a41126a200f3b0100200341a0266a41116a20113a0000200341a0266a41106a20173a0000200341a0266a410e6a20183b0100200341a0266a410d6a20123a0000200341a0266a410c6a20193a0000200341a0266a410a6a201a3b0100200341a0266a41096a20103a0000200341a0266a41086a20133a0000200320053602c426200320143b01a626200320153a00a526200320163a00a426200320213b01a226200320063a00a126200320023a00a026200341a0266a10cb030d0120034190056a10e903200341c8316a41186a20034190056a41186a290300370300200341c8316a41106a20034190056a41106a290300370300200341c8316a41086a20034190056a41086a29030037030020032003290390053703c831200341a0266a200341c8316a10ea03024020032903a0264201520d00200341a0266a41086a2102200341d8266a21010340200341a8c0006a41086a200241086a2903002204370300200341a8c0006a41106a200241106a2903002208370300200341a8c0006a41186a200241186a290300220a370300200341a8c0006a41206a200241206a29030037030020032002290300221b3703a8402001290300211c20032903d026211e200341a0266a41186a200a370300200341a0266a41106a2008370300200220043703002003201b3703a026200341e8026a200341a0266a201e201c10e503200341a0266a200341c8316a10ea0320032903a0264201510d000b0b024020032802cc31450d0020032802c83110390b0240200341c8316a41106a280200450d0020032802d43110390b200341f0046a41186a22024200370300200341f0046a41106a22014200370300200341f0046a41086a22054200370300200342003703f004200341d0046a41f5e7c000410810cb012005200341d0046a41086a2206290000370300200320032900d0043703f004200341e0046a4190abcd00410710cb012002200341e0046a41086a2207290000370300200120032900e004370300200341f0046a412010e101200242003703002001420037030020054200370300200342003703f004200341d0046a41f5e7c000410810cb0120052006290000370300200320032900d0043703f004200341e0046a41f0a9cd00410b10cb0120022007290000370300200120032900e004370300200341f0046a412010e001200041186a41003a000020004200370308200042003703000c370b200341f0046a41186a22054200370300200341f0046a41106a22064200370300200341f0046a41086a22014200370300200342003703f004200341d0046a41f5e7c000410810cb012001200341d0046a41086a2207290000370300200320032900d0043703f004200341e0046a41c8a9cd00410e10cb01200241086a2209200341e0046a41086a220b290000370000200220032900e00437000020034180036a200341f0046a412010ce03200328028003210c200328028403210d200542003703002006420037030020014200370300200342003703f004200341d0046a41f5e7c000410810cb0120012007290000370300200320032900d0043703f004200341e0046a41c8a9cd00410e10cb012009200b290000370000200220032900e0043700002003200d41016a4101200c1b220c3602a026200341f0046a4120200341a0266a410410e901200542003703002006420037030020014200370300200342003703f004200341d0046a41c7e5c000410610cb0120012007290000370300200320032900d0043703f004200341e0046a419081c400410610cb012009200b290000370000200220032900e004370000200341f8026a200341f0046a412010ce0320032802fc02210d20032802f802210e200542003703002006420037030020014200370300200342003703f004200341d0046a41f5e7c000410810cb0120012007290000370300200320032900d0043703f004200341e0046a41f0a9cd00410b10cb012009200b290000370000200220032900e004370000200341f0046a41202022417f200d4100200e1b220220236a220120012002491b220210eb03200341b4266a2002360200200341a0266a41106a2022360200200341ac266a200c360200200341a0266a41086a41003a0000200341163a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800a8403600192000411c6a200341abc0006a280000360000200042003703000c360b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c350b420021080b200020073a00222000413f3a002120004200370308200041246a2004200884370200200041206a20063a0000200041186a41003a0000200042013703000c330b200141246a2902002104200141206a28020021092001411c6a280200210c200141186a280200210b200141146a2802002107200141106a28020021062001410c6a280200210502400240024002400240024002400240200141086a280200417f6a0e06000102030405000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb030d00200341b4266a2004370200200341b0266a20093602002003200c3602ac262003200b3602a826200320073602a426200320063602a0262005200341a0266a10ec03450d0241a4cfc800ad2104410321024280808080900221080c010b02402007450d00200610390b410221024200210802402009450d00200c10390b420021040b200041be023b002120004200370308200041246a2008200484370200200041206a20023a0000200041186a41003a0000200042013703000c3a0b20004200370308200041186a41003a0000200042003703000c390b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a02641022102420021044200210802400240200341a0266a10cb030d00200510ed03450d0141e8cfc800ad2108410321024280808080e00121040b200041be063b002120004200370308200041246a2004200884370200200041206a20023a0000200041186a41003a0000200042013703000c390b20004200370308200041186a41003a0000200042003703000c380b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb03450d004102210242002104420021080c010b200341a0266a200510d20320032802a026220220032802a82610d30341ff01712101024020032802a426450d00200210390b410321024280808080d0012104024020014101460d0041c0adcc00ad2108410421010c010b200510ee03450d014188aecc00ad2108410621010b200020013a00222000413e3a002120004200370308200041246a2004200884370200200041206a20023a0000200041186a41003a0000200042013703000c380b20004200370308200041186a41003a0000200042003703000c370b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb03450d004102210242002104420021080c010b200341a0266a200510d20320032802a026220220032802a82610d30341ff01712101024020032802a426450d00200210390b41032102024020014102460d0041acadcc00ad2108410521014280808080c00121040c010b200510ef03450d0141f0adcc00ad2108410721014280808080f00121040b200020013a00222000413e3a002120004200370308200041246a2004200884370200200041206a20023a0000200041186a41003a0000200042013703000c370b20004200370308200041186a41003a0000200042003703000c360b200341a0266a41146a2004370200200341a0266a41106a2009360200200341a0266a410c6a200c360200200341a0266a41086a200b360200200320073602a426200320063602a026200341a0266a411c6a2001412c6a41cc0310d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8400240200341a8c0006a10cb03450d0041022101420021040c020b200341a8c0006a200510d20320032802a840220120032802b04010d3032102024020032802ac40450d00200110390b200241ff01712106410321014280808080f0012104024041000d0020060e080200000000000002020b410221022006417b6a4102490d01200341f0046a41186a2201420037030020034180056a22064200370300200341f0046a41086a22074200370300200342003703f004200341d0046a41f1d5c400410d10cb012007200341d0046a41086a290000370300200320032900d0043703f004200341e0046a418bd6c400410c10cb012001200341e0046a41086a290000370300200620032900e004370300200341a8c0006a200341f0046a412010c70320032802f840210120032802b8412106200341003602b040200342013703a840200341003a00e004200341a8c0006a41004101107720032802a84020032802b04022076a20032d00e0043a00002003200741016a3602b040200341a0266a200341a8c0006a10e9024100200120064102461b2005200341a8c0006a10c8032105200341a0266a108b0302402005450d004103410820051b21014280808080d002420020051b210441c0cfc800ad21080c030b20004200370308200041186a41003a0000200042003703000c350b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb03450d00410221020c010b200341a0266a200520062007200b10f003024020032d00a02622024108470d00200341a0266a2006200510f10320032d00a02622024108460d020b20032902a426210420032d00a326210120032d00a226210520032d00a12621060b200020013a0023200020053a0022200020063a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c350b20004200370308200041186a41003a0000200042003703000c340b200341a0266a108b03418ccfc800ad2108410021020b200020023a00222000413e3a002120004200370308200041206a20013a0000200041186a41003a0000200041246a20044280808080f00383200884370200200042013703000c320b2001410c6a28020021130240024002400240024002400240024002400240200141086a2d0000417f6a0e03000102000b200141c0006a2903002104200141386a2903002108200141346a2802002105200141306a28020021062001412c6a2802002107200341b7c0006a200141186a290000370000200341bfc0006a200141206a290000370000200341c7c0006a200141286a2d00003a0000200320133600ab40200320012f00093b01a84020032001410b6a2d00003a00aa402003200141106a2900003700af40200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0264102210202400240200341a0266a10cb030d00410321022007200341a8c0006a200820042006200510f20341ff01714103460d010b200041bd023b002120004200370308200041206a20023a0000200041186a41003a00002000418099c500ad4280808080a00184370024200042013703000c3b0b20004200370308200041186a41003a0000200042003703000c3a0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a0266a10cb030d01200342003702e43c200341a0266a201310f303200341a8c0006a20032802a026220520032802a82610f40320032902ac40420020032802a84022021b210441002802e8c8482101024020032802a426450d00200510390b2002200120021b21192004a7211202402004422088a72202450d002019200241386c6a210f2019210b0340200341d8176a41086a200b41106a290300370300200341d8176a41106a200b41186a290300370300200341d8176a41186a200b41206a2903003703002003200b2903083703d8170240200b290300427f7c22044201560d0002402004a70e020003000b200b41306a2903002104200b41286a2903002108200341a8c0006a41186a200b41086a220c41186a2211290000370300200341a8c0006a41106a200c41106a2217290000370300200341a8c0006a41086a200c41086a22182900003703002003200c2900003703a8400240024020032802e43c2207450d0020032802e03c210d034020072f01b601220e410574210941002105417f21014100210202400340024020092002470d00200e21010c020b200341a8c0006a200720026a41b8016a412010d70b2206450d04200141016a2101200541106a2105200241206a21022006417f4a0d000b0b200d450d01200d417f6a210d200720014102746a4198046a28020021070c000b0b200341a0266a41186a2011290000370300200341a0266a41106a2017290000370300200341a0266a41086a20182900003703002003200c2900003703a026200341e03c6a200341a0266a2008200410f5030c010b2008200720056a2202290300582004200241086a290300220a582004200a511b0d00200341a0266a41186a2011290000370300200341a0266a41106a2017290000370300200341a0266a41086a20182900003703002003200c2900003703a026200341e03c6a200341a0266a2008200410f5030b200b41386a220b200f470d000b0b02402012450d00201241386c450d00201910390b0240024020032802e43c22010d004100210641002802e8c84821100c010b20032802e83c212320032802e03c210520012102024003402005450d012005417f6a2105200120012f01b6014102746a4198046a280200210120022802980421020c000b0b02402023450d002023417f6a210b024020022f01b601450d0041002106410021090c080b41002105034041002101024020022802b0012207450d00200541016a210920022f01b4012106200721010b024041c80441980420051b450d00200210390b024020010d00410021020c0a0b2009210520012102200620012f01b6014f0d000b200121020c070b4100210141002802e8c8482110034020022802b0012105024041c80441980420011b450d00200210390b2001417f6a21012005210220050d000b410021060b410021050c070b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03024020032d00a8404101470d004102210542002104420021080c040b200341a0266a201310f303200341a8c0006a20032802a026220620032802a82610f40320032902ac40420020032802a84022011b210a4100210241002802e8c8482105024020032802a426450d00200610390b2001200520011b210641f4b6cc00ad2108413d2101428080808090022104200a428080808010540d0220062903004201520d02200341a0266a201310d20320032802a026220120032802a82610d30341ff01712102024020032802a426450d00200110390b024020024101460d004106210241c0adcc0021010c020b0240201310ee03450d00410921024188aecc0021010c020b201310d6030240200aa72202450d00200241386c450d00200610390b20004200370308200020032800c831360019200041186a41003a00002000411c6a200341cb316a280000360000200042003703000c380b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c370b4280808080d00121042001ad4280808080d001842108413c21010b41032105200aa72207450d00200741386c450d00200610390b200020023a0022200020013a002120004200370308200041206a20053a0000200041186a41003a0000200020044280808080f00383200842ffffffff0f8384370024200042013703000c340b200641016a2107200220064105746a41b8016a2105200220064104746a220641086a210c02402009450d00200220074102746a4198046a280200210202402009417f6a2201450d00034020022802980421022001417f6a22010d000b0b410021070b20062903002108200c290300210a200341ac266a200541086a290000370200200341b4266a200541106a290000370200200341bc266a200541186a290000370200200320052900003702a426200341a8c0006a41086a200341a0266a41086a290200370300200341a8c0006a41106a200341a0266a41106a290200370300200341a8c0006a41186a200341a0266a41186a290200370300200341a8c0006a41206a200341a0266a41206a280200360200200320032902a0263703a8400b200341a0266a41106a200341a8c0006a41106a290300370300200341a0266a41086a200341a8c0006a41086a290300370300200341a0266a41186a200341a8c0006a41186a290300370300200341a0266a41206a200341a8c0006a41206a280200360200200341c8316a41086a200341ac266a290200370300200341c8316a41106a200341b4266a290200370300200341c8316a41186a200341bc266a290200370300200320032903a8403703a026200320032902a4263703c831417f200b41016a22012001200b491bad42307e2204422088a70d1b2004a72201417f4c0d1b200110382210450d1a20102008370320201020032903c831370300201041286a200a370300201041186a200341c8316a41186a290300370300201041106a200341c8316a41106a290300370300201041086a200341c8316a41086a29030037030041012106200341013602983920032010360290392003200141306e2201360294390240200b450d00024002400240200720022f01b6014f0d00410021090c010b41002106034041002105024020022802b001220b450d00200641016a210920022f01b4012107200b21050b024041c80441980420061b450d00200210390b024020050d00410021020c030b2009210620052102200720052f01b6014f0d000b200521020b200741016a2106200220074105746a41b8016a210b200220074104746a220741086a210c02402009450d00200220064102746a4198046a280200210202402009417f6a2205450d00034020022802980421022005417f6a22050d000b0b410021060b20072903002104200c2903002108200341ac266a200b41086a290000370200200341b4266a200b41106a290000370200200341bc266a200b41186a2900003702002003200b2900003702a426200341a8c0006a41086a200341a0266a41086a290200370300200341a8c0006a41106a200341a0266a41106a290200370300200341a8c0006a41186a200341a0266a41186a290200370300200341a8c0006a41206a200341a0266a41206a280200360200200320032902a0263703a8400b2023417e6a210d200341a0266a41106a2215200341a8c0006a41106a2218290300370300200341a0266a41086a2216200341a8c0006a41086a2212290300370300200341a0266a41186a2221200341a8c0006a41186a2219290300370300200341a0266a41206a2222200341a8c0006a41206a221a28020036020020034190056a41086a220f200341ac266a29020037030020034190056a41106a2211200341b4266a29020037030020034190056a41186a2217200341bc266a290200370300200320032903a8403703a026200320032902a42637039005200341c8316a41046a210c200341a0266a41046a210e4101210b03400240200b2001470d0020034190396a2001417f200d41016a22052005200d491b10f60320032802903921100b2010200b41306c6a2201200329039005370300200f290300210a2011290300211b2017290300211c20012004370320200141286a2008370300200141186a201c370300200141106a201b370300200141086a200a3703002003200b41016a220b360298390240200d0d00202321060c020b024002400240200620022f01b6014f0d00410021070c010b41002105034041002101024020022802b0012209450d00200541016a210720022f01b4012106200921010b024041c80441980420051b450d00200210390b024020010d00410021020c030b2007210520012102200620012f01b6014f0d000b200121020b200641016a2101200220064105746a41b8016a2105200220064104746a220941086a21140240024020070d00200121060c010b200220014102746a4198046a280200210202402007417f6a2201450d00034020022802980421022001417f6a22010d000b0b410021060b2009290300210420142903002108200e2005290000370000200e41186a200541186a290000370000200e41106a200541106a290000370000200e41086a200541086a290000370000201220162902003703002018201529020037030020192021290200370300201a2022280200360200200320032902a0263703a8400b200d417f6a210d200341c8316a41206a201a280200360200200341c8316a41186a2019290300370300200341c8316a41106a2018290300370300200341c8316a41086a2012290300370300200320032903a8403703c831200f200c41086a2902003703002011200c41106a2902003703002017200c41186a2902003703002003200c2902003703900520032802943921010c000b0b41002101034020022802b0012105024041c80441980420011b450d00200210390b2001417f6a21012005210220050d000b20032802943921050b02402006450d00200641306c2101201021020340200241286a2903002104200241206a2903002108200341f0046a41186a200241186a290300220a370300200341f0046a41106a200241106a290300221b370300200341f0046a41086a200241086a290300221c37030020032002290300221e3703f004200341a0266a41186a200a370300200341a0266a41106a201b370300200341a0266a41086a201c3703002003201e3703a026200341d8026a200341a0266a2008200410e503200241306a2102200141506a22010d000b0b02402005450d00200541306c450d00201010390b200341a0266a201310f30320032802a026220220032802a82610e001024020032802a426450d00200210390b20004200370308200020032800d022360019200041186a41003a00002000411c6a200341d3226a280000360000200042003703000c310b200341aa1b6a2001410b6a2d00003a0000200320012f00093b01a81b200141246a280200210c200141206a28020021072001411c6a280200210b200141186a280200210d200141146a2802002109200141106a28020021062001410c6a280200210502400240024002400240024002400240200141086a2d0000417f6a0e06000102030405000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341d0226a41086a200341b1c0006a290000370300200341d0226a41106a200341b9c0006a290000370300200341d0226a41186a200341c1c0006a290000370300200320032900a9403703d02202400240024020032d00a8404101460d00200341f01e6a41186a200341d0226a41186a2903002204370300200341f01e6a41106a200341d0226a41106a2903002208370300200341f01e6a41086a200341d0226a41086a290300220a370300200320032903d022221b3703f01e200341a0266a41186a2004370300200341a0266a41106a2008370300200341a0266a41086a200a3703002003201b3703a0262003200d3602d031200320093602cc31200320063602c8312003200c3602b040200320073602ac402003200b3602a84020034190056a200341a0266a4200200420042005200341c8316a200341a8c0006a410110f70320032d00900522024108460d0220032d009105210120032d009205210520032d009305210620032902940521040c010b02402007450d00200b10390b4102210202402009450d00200610390b0b200020063a0023200020053a0022200020013a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c380b20004200370308200041186a41003a0000200042003703000c370b200141d0006a2903002104200141c8006a2903002108200141c4006a2802002118200141c0006a280200210e2001413c6a2802002111200141386a2802002112200141346a280200210f200141306a28020021172001412c6a2802002119200141286a2802002101200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a02602400240200341a0266a10cb030d00200320032f01a81b3b01a026200320013a00bf262003200c3600bb26200320073600b7262003200b3600b3262003200d3600af26200320093600ab26200320063600a726200320053600a3262003200341aa1b6a2d00003a00a226200320123602d0312003200f3602cc31200320173602c831200320183602b0402003200e3602ac40200320113602a84020034190056a200341a0266a4201200820042019200341c8316a200341a8c0006a410010f70320032d0090054108470d01200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c380b200341023a0090050240200e450d00201110390b200f450d00201710390b2003280290052102200041246a200329029405370200200041206a2002360200200041186a41003a000020004200370308200042013703000c360b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a200510f80320032d00ab4021060240024020032d00a84022024108470d00200341a0266a200510d20320032802a026220220032802a82610d30341ff01712109024020032802a426450d00200210390b4106210141c0adcc00ad210441032102413c21074280808080d001210802402009417f6a0e0700020202020200020b0240200510ed03450d0041d8adcc00ad2104410721014280808080800221080c020b200341d0046a41e3c0cc00410910cb01200341e0046a41ecc0cc00410510cb01200320053602e03c2003200341e03c6a410410cc0137039005200341ac266a200341e03c6a41046a360200200320034198056a3602a4262003200341e03c6a3602a826200320034190056a3602a026200341a8c0006a200341a0266a10830120032802b040220741206a2202417f4c0d200240024020020d00410121010c010b200210382201450d200b41002106200341003602d031200320013602c831200320023602cc3102402002410f4b0d00200341c8316a41004110107720032802cc31210220032802c831210120032802d03121060b200120066a220920032900d004370000200941086a200341d0046a41086a2900003700002003200641106a22063602d0310240200220066b410f4b0d00200341c8316a20064110107720032802cc31210220032802c831210120032802d03121060b200120066a220920032900e004370000200941086a200341e0046a41086a2900003700002003200641106a22063602d03120032802a84021090240200220066b20074f0d00200341c8316a20062007107720032802c831210120032802d03121060b200120066a2009200710d40b1a2003200620076a22023602d031024020032802ac40450d0020032802a84010390b200341a0266a20032802c8312201200210d1030240024020032d00d02622064102460d002001200210e001200341a8c0006a41286a2207200341a0266a41286a2209290300370300200341a8c0006a41206a220b200341a0266a41206a220c290300370300200341a8c0006a41186a220d200341a0266a41186a220e290300370300200341a8c0006a41106a220f200341a0266a41106a2202290300370300200341a8c0006a41086a2211200341a0266a41086a2217290300370300200320032903a0263703a840200320032800d126360290392003200341d4266a221828000036009339024020032802cc31450d00200110390b201820032800933936000020172011290300220437030020092007290300370300200c200b290300370300200e200d2903003703002002200f290300370300200320032903a84022083703a026200320063a00d02620032003280290393600d126200341c0026a20022008200410e5030c010b20032802cc31450d00200110390b200341a0266a200510f90320032802a026220220032802a82610e001024020032802a426450d00200210390b200341a8266a2005360200200341013a00a426200341143a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800d8173600192000411c6a200341db176a280000360000200042003703000c370b20032d00a940210720032d00aa40210120032902ac4022044280808080708321080b200020063a0023200020013a0022200020073a002120004200370308200041206a20023a0000200041186a41003a0000200041246a2008200442ffffffff0f8384370200200042013703000c350b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a200510f80320032d00a84022024108470d02200341a0266a200610f903200341d0026a20032802a026220720032802a82610ce0320032802d402210120032802d0022102024020032802a426450d00200710390b02400240024002400240024020024101470d0020012005470d00200341a0266a200610d20320032802a026220120032802a82610d30341ff01712102024020032802a426450d00200110390b20024107460d05200341a0266a200510d20320032802a026220720032802a82610d30341ff01712101024020032802a426450d00200710390b20014107460d05200141064b0d0441012001742207412a710d02200741d40071450d04200241054b0d014101200274412a71450d01200510ef031a200610ee031a0c030b200341a0266a200510f90320032802a826210120032802a0262102200320063602a84020022001200341a8c0006a410410e90120032802a426450d04200210390c040b200141054b0d024101200174412a71450d020b200241064b0d01410120027441d40071450d01200610ef031a200510ee031a0b2005200610fa030b200341a0266a200610f90320032802a026220220032802a82610e00120032802a426450d00200210390b20004200370308200020032800c831360019200041186a41003a00002000411c6a200341cb316a280000360000200042003703000c340b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a0266a10cb030d02200341a8c0006a200510d003200341a0266a20032802a840220220032802b040220510d10341022101024020032d00d02622064102460d00200341d0226a41286a200341a0266a41286a290300370300200341d0226a41206a200341a0266a41206a290300370300200341d0226a41186a200341a0266a41186a290300370300200341d0226a41106a200341a0266a41106a290300370300200341d0226a41086a200341a0266a41086a290300370300200320032903a0263703d022200320032800d126360290392003200341d4266a28000036009339410021010b200341d4266a200328009339360000200341a0266a41286a200341d0226a41286a290300370300200341a0266a41206a200341d0226a41206a290300370300200341a0266a41186a200341d0226a41186a290300370300200341a0266a41106a200341d0226a41106a290300370300200341a0266a41086a200341d0226a41086a290300370300200320032903d0223703a02620032003280290393600d126200320013a00d0260240024020064102470d002002200510e0010c010b20022005200341a0266a10fb030b024020032802ac40450d00200210390b20004200370308200020032800c831360019200041186a41003a00002000411c6a200341cb316a280000360000200042003703000c330b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341a8c0006a41096a290000370300200341f0046a41106a200341b9c0006a290000370300200341f0046a41186a200341c1c0006a290000370300200320032900a9403703f004024002400240024020032d00a8404101460d00200341e03c6a41186a2202200341f0046a41186a290300370300200341e03c6a41106a2201200341f0046a41106a290300370300200341e03c6a41086a2205200341f0046a41086a290300370300200320032903f0043703e03c200341d0226a41186a22064200370300200341d0226a41106a22074200370300200341d0226a41086a22094200370300200342003703d022200341d0046a41e3c0cc00410910cb012009200341d0046a41086a290000370300200320032900d0043703d022200341e0046a419481cd00410e10cb012006200341e0046a41086a290000370300200720032900e004370300200341b8026a200341d0226a412010ce0320032802bc02210620032802b8022107200341a8c0006a41186a2002290300370300200341a8c0006a41106a2001290300370300200341a8c0006a41086a2005290300370300200320032903e03c3703a840200341a0266a2006410020071b220241d00f200241d00f4b1b220710d00320032802a026220220032802a82610e3012106024020032802a426450d00200210390b4103210242808080809002210441012101413c210502402006450d0041d4accc00ad21080c030b200341a0266a200710d20320032802a026220920032802a82610d30341ff01712106024020032802a426450d00200910390b024020064107460d0041d4accc00ad21080c030b200341a0266a200341a8c0006a42808095e789c604420010d40320032d00a02622024108470d01200341a0266a41186a200341a8c0006a41086a290300370300200341a0266a41206a200341a8c0006a41106a2202290300370300200341c8266a2201200341a8c0006a41186a2205290300370300200342003703a826200342808095e789c6043703a026200320032903a8403703b026200341003a00d026200341c8316a200710d00320032802c831220620032802d031200341a0266a10fc03024020032802cc31450d00200610390b200341bd266a2005290300370000200341b5266a2002290300370000200341ad266a200341a8c0006a41086a29030037000020012007360200200320032903a8403700a526200341023a00a426200341143a00a026200341a0266a10c903200341f01e6a41186a22024200370300200341f01e6a41106a22014200370300200341f01e6a41086a22054200370300200342003703f01e200341d0046a41e3c0cc00410910cb012005200341d0046a41086a290000370300200320032900d0043703f01e200341e0046a419481cd00410e10cb012002200341e0046a41086a290000370300200120032900e0043703002003200741016a3602a026200341f01e6a4120200341a0266a410410e901200041186a41003a00002000420037030820002003280090053600192000411c6a20034193056a280000360000200042003703000c360b410221020c020b20032d00a326210620032d00a226210120032d00a126210520032902a42622084280808080708321040b2004200842ffffffff0f838421040b200020063a0023200020013a0022200020053a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c320b20032d00a940210120032d00aa40210520032902ac402104200020032d00ab403a0023200020053a0022200020013a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c310b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c300b200241086a2106200241046a28020021072001410c6a280200210b200141086a2802002109200228022421052002280200210202400240024002400240024002400240024002400240024002402001280204417f6a0e06000102030405000b200141106a280200210620052005280200417f6a220136020002400240200241ff0171450d00024020010d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200341a0266a20072009200b200610f00320032d00a02622024108460d0120032902a426210420032d00a326210120032d00a226210520032d00a12621060c0d0b4102210220010d0b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22012001280200417f6a220136020020010d0b200510390c0b0b200341b4266a2006360200200341b0266a200b360200200341ac266a2009360200200341a0266a41086a2007360200200341003602a426200341133a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c3b0b20052005280200417f6a220136020002400240200241ff0171450d00024020010d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200341a0266a2007200910f10320032d00a02622024108460d0120032902a426210420032d00a326210120032d00a226210520032d00a12621060c0a0b4102210220010d082005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22012001280200417f6a220136020020010d08200510390c080b200341ac266a2007360200200341a0266a41086a2009360200200341013602a426200341133a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c3a0b20052005280200417f6a220136020002400240200241ff0171450d00024020010d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200720094622020d012007200b460d01419499c10021014280808080c0032104410c21020c060b420021084102210620010d042005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0420051039420021040c060b200341a8c0006a2009200b10fd03200341a0266a20032802a840220520032802b04010fe0320032d00d4262101024020032802ac40450d00200510390b0240200141ff01714102470d0041b899c10021014280808080b0032104410d21020c050b200341a8c0006a2009200b10ff03200341a0266a20032802a840220520032802b04010e401024020032802a0262201450d0020032802a426450d00200110390b024020032802ac40450d00200510390b02402001450d0041dc99c10021014280808080f0032104410e21020c050b200341a0266a2009200b10ff0320032802a026220120032802a82641b8c0cd00410010e901024020032802a426450d00200110390b200341e03c6a41186a22054200370300200341e03c6a41106a22064200370300200341e03c6a41086a220c4200370300200342003703e03c200341a0266a418ca3c100410410cb01200c200341a0266a41086a2201290000370300200320032900a0263703e03c200341a0266a41bcaec200411c10cb0120052001290000370300200620032900a026370300200341003602b040200342013703a840200341a8c0006a41004104107720032802a840220c20032802b04022056a20093600002003200541046a22063602b040024020032802ac4020066b41034b0d00200341a8c0006a20064104107720032802a840210c20032802b04021060b200341a8c0006a41086a2205200641046a220d360200200c20066a200b3600002001200d360200200320032903a8403703a026200341e03c6a4120200341a0266a10de01200341f0046a41186a22064200370300200341f0046a41106a220c4200370300200341f0046a41086a220d4200370300200342003703f004200341d0046a41f1d5c400410d10cb01200d200341d0046a41086a290000370300200320032900d0043703f004200341e0046a418bd6c400410c10cb012006200341e0046a41086a290000370300200c20032900e004370300200341a0266a200341f0046a412010c70320032802f026210620032802b027210c20054100360200200341a0266a410c6a220d200b36020020012009360200200342013703a840200320073602a426200341093a00a026200341003a00e004200341a8c0006a41004101107720032802a8402005280200220e6a20032d00e0043a00002005200e41016a360200200341a0266a200341a8c0006a10e902200341a0266a108b0320012005280200360200200320032903a8403703a02641002006200c4102461b200b200920021b200341a0266a10c8031a200341a0266a41106a200b360200200d200936020020012007360200200341023602a426200341133a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800c8313600192000411c6a200341c8316a41036a280000360000200042003703000c390b200320093602a840200341a0266a41086a2006290200370300200341a0266a41106a200641086a290200370300200341a0266a41186a200641106a290200370300200341a0266a41206a200641186a280200360200200320073602a426200320023602a026200320053602c4260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c390b200341a8c0006a108004200041186a41003a000020004200370308200042003703000c380b200341a0266a41086a2006290200370300200341a0266a41106a200641086a290200370300200341a0266a41186a200641106a290200370300200341a0266a41206a2201200641186a280200360200200320073602a426200320023602a026200320053602c4260240200341a0266a10cb030d00200341f0046a41186a2202420037030020034180056a22054200370300200341f0046a41086a22064200370300200342003703f004200341d0046a41f1d5c400410d10cb012006200341d0046a41086a290000370300200320032900d0043703f004200341e0046a418bd6c400410c10cb012002200341e0046a41086a290000370300200520032900e004370300200341a0266a200341f0046a412010c703420020032903b82620032802b02741024622021b4200200129030020021b410020032802fc2620021b108104200041186a41003a000020004200370308200042003703000c380b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c370b200341a0266a41086a2006290200370300200341a0266a41106a200641086a290200370300200341a0266a41186a200641106a290200370300200341a0266a41206a200641186a280200360200200320073602a426200320023602a026200320053602c4260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c370b10820420004200370308200041186a41003a0000200042003703000c360b420021040c010b2001ad2108410321060b200020023a0022200041333a002120004200370308200041206a20063a0000200041186a41003a0000200041246a20044280808080f00383200884370200200042013703000c330b0b200020013a0023200020053a0022200020063a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c310b0b200020013a0023200020053a0022200020063a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c2f0b200228022421052001280204210102400240024020022d00000e03000102010b20022d0001210220052005280200417f6a2206360200024020060d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22062006280200417f6a220636020020060d00200510390b200241ff0171450d01411010382202450d18200241cce0c00036020c200241013602082002428180808010370200411010382205450d18200541e4e0c00036020c20054101360208200542818080801037020020022002280200417f6a220136020020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b20052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c2f0b200341023a00a026200320013602a426200341a8c0006a200341a0266a108304200341a0266a41206a200341a8c0006a41206a280200360200200341a0266a41186a200341a8c0006a41186a290300370300200341a0266a41106a200341a8c0006a41106a290300370300200341a0266a41086a200341a8c0006a41086a290300370300200320032903a8403703a026200341a0266a10c302200041186a41003a000020004200370308200042003703000c2e0b200141146a2802002109200141106a28020021062001410c6a2802002107200141086a2802002105024002400240024002402001280204417f6a0e050001020304000b200320093602980520032006360294052003200736029005200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d00200341c8316a2005108404200341a0266a20032802c831220120032802d031108504024020032d00a02622024101470d00200341c0c0006a200341b9266a290000370300200341b8c0006a200341b1266a290000370300200341b0c0006a200341a9266a290000370300200320032900a1263703a8400b024020032802cc31450d00200110390b0240024020024101460d00200341f83c6a4200370300200341f03c6a4200370300200341e83c6a4200370300200342003703e03c0c010b200341e03c6a41186a200341a8c0006a41186a290300370300200341e03c6a41106a200341a8c0006a41106a290300370300200341e03c6a41086a200341a8c0006a41086a290300370300200320032903a8403703e03c0b200341f0046a20072009109f01200341a8c0006a41186a220b200341f0046a41186a2202290300370300200341a8c0006a41106a220c200341f0046a41106a2201290300370300200341a8c0006a41086a220d200341f0046a41086a2209290300370300200320032903f0043703a840200341a8c0006a20034190056a1086041a200341a0266a41186a220e200b290300370300200341a0266a41106a220f200c290300370300200341a0266a41086a220b200d290300370300200320032903a8403703a026200341c8316a200510840420032802c831220c20032802d031200341a0266a108704024020032802cc31450d00200c10390b200242003703002001420037030020094200370300200342003703f004200341d0046a41c7e5c000410610cb012009200341d0046a41086a290000370300200320032900d0043703f004200341e0046a419081c400410610cb012002200341e0046a41086a290000370300200120032900e004370300200341a8026a200341f0046a412010ce0320032802ac02210220032802a8022101200e200341e03c6a41186a290300370300200f200341e03c6a41106a290300370300200b200341e03c6a41086a290300370300200320032903e03c3703a02620052002410020011b22022002200341a0266a1088041a200b2005360200200341003602a426200341123a00a026200341a0266a10c90302402006450d00200710390b200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c320b02402006450d00200710390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c310b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d00200320093602b040200320063602ac40200320073602a840200341a0266a200510890420032802a026220220032802a826200341a8c0006a108a04024020032802a426450d00200210390b02402006450d00200710390b200341a8266a2005360200200341013602a426200341123a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c310b02402006450d00200710390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c300b200141186a2802002101200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0002402006450d00200710390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c300b200320093602a826200320063602a426200320073602a0262005200341a0266a2001108b04200341a8266a2005360200200341023602a426200341123a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c2f0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d00200341f0046a41186a2202420037030020034180056a22014200370300200341f0046a41086a220b4200370300200342003703f004200341d0046a41c7e5c000410610cb01200b200341d0046a41086a290000370300200320032900d0043703f004200341e0046a419081c400410610cb012002200341e0046a41086a290000370300200120032900e004370300200341b0026a200341f0046a412010ce0320032802b402210220032802b0022101200320093602a826200320063602a426200320073602a0262005200341a0266a2002410020011b108c04200341a0266a41086a2005360200200341033602a426200341123a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c2f0b02402006450d00200710390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c2e0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a02602400240200341a0266a10cb030d00200341f83c6a22024200370300200341f03c6a22014200370300200341e03c6a41086a22064200370300200342003703e03c200341a0266a41d8adc300410b10cb012006200341a0266a41086a2207290000370300200320032900a0263703e03c200341a0266a4184b0c300411310cb0120022007290000370300200120032900a026370300200341a0026a200341e03c6a412010ce034100210c200341c8316a417f20032802a402410020032802a0021b220241016a220120012002491b220d108d04200341a0266a20032802c83120032802d03110e6030240024020032802a02622090d00200342003702ac40200341002802d8974e22093602a8404100210b0c010b20032902a4262104200320093602a840200320043702ac402004422088a7210b2004a7210c0b4100210202400240200b450d00200b2106200b210103400240024020052009200641017620026a22064102746a28020022074d0d00200641016a21020c010b2006210120052007460d030b200120026b2106200120024b0d000b200b2002490d030b0240200b200c470d00200341a8c0006a200c10990120032802a84021090b200920024102746a220141046a2001200b20026b41027410d50b1a200120053602002003200b41016a3602b0400b200341a0266a41086a200341a8c0006a41086a280200360200200320032903a84022043703a02620032802d031210120032802c8312102024002402004a722060d002002200110e0010c010b20022001200341a0266a108e0420032802a42641ffffffff0371450d00200610390b024020032802cc31450d00200210390b200341ac266a200d360200200341a8266a2005360200200341043602a426200341123a00a026200341a0266a10c903200041186a41003a00002000420037030820002003280090053600192000411c6a20034193056a280000360000200042003703000c2f0b200341d8176a41026a20034190396a41026a2d000022023a0000200320032f00903922013b01d817200041206a41023a0000200020013b0021200041236a20023a0000200041186a41003a000020004200370308200042013703000c2e0b2002200b1041000b20034190056a41206a200241206a29020037030020034190056a41186a200241186a29020037030020034190056a41106a200241106a29020037030020034190056a41086a200241086a2902003703002003200229020037039005200341a0266a200141046a41940110d40b1a200341a8c0006a20034190056a200341a0266a108f04200341c8316a41086a2102200341a8c0006a41086a2101024020032903a8404201520d0020022001290300370300200241206a2205200141206a290300370300200241186a2206200141186a290300370300200241106a2207200141106a290300370300200241086a2209200141086a290300370300200041286a2005290300370300200041206a2006290300370300200041186a2007290300370300200041106a200929030037030020002002290300370308200042013703000c2d0b20022001290300370300200241106a2205200141106a290300370300200241086a2206200141086a290300370300200041186a2005290300370300200041106a200629030037030020002002290300370308200042003703000c2c0b200141186a2903002108200141106a29030021042001410c6a28020021050240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141086a280200417f6a0e28000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c530b2005109004200041186a41003a000020004200370308200042003703000c520b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c520b2005109104200041186a41003a000020004200370308200042003703000c510b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c510b2005109204200041186a41003a000020004200370308200042003703000c500b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c500b2005109304200041186a41003a000020004200370308200042003703000c4f0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c4f0b2005109404200041186a41003a000020004200370308200042003703000c4e0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c4e0b2005109504200041186a41003a000020004200370308200042003703000c4d0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c4d0b2005109604200041186a41003a000020004200370308200042003703000c4c0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c4c0b2005109704200041186a41003a000020004200370308200042003703000c4b0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0264102210202400240200341a0266a10cb030d0020050d01410321020b2000412a3b002120004200370308200041206a20023a0000200041186a41003a0000200041246a419cd5c400ad4280808080f00184370200200042013703000c4b0b2005109804200041186a41003a000020004200370308200042003703000c4a0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0264102210202400240200341a0266a10cb030d0020050d01410321020b2000412a3b002120004200370308200041206a20023a0000200041186a41003a0000200041246a419cd5c400ad4280808080f00184370200200042013703000c4a0b2005109904200041186a41003a000020004200370308200042003703000c490b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0264102210202400240200341a0266a10cb030d0020050d01410321020b2000412a3b002120004200370308200041206a20023a0000200041186a41003a0000200041246a419cd5c400ad4280808080f00184370200200042013703000c490b2005109a04200041186a41003a000020004200370308200042003703000c480b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c480b2005109b04200041186a41003a000020004200370308200042003703000c470b200320043e02ac40200320053602a840200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c470b200341a8c0006a109c04200041186a41003a000020004200370308200042003703000c460b200320043e02ac40200320053602a840200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c460b200341a8c0006a109d04200041186a41003a000020004200370308200042003703000c450b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c450b2005109e04200041186a41003a000020004200370308200042003703000c440b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c440b2005109f04200041186a41003a000020004200370308200042003703000c430b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c430b200510a004200041186a41003a000020004200370308200042003703000c420b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c420b200510a104200041186a41003a000020004200370308200042003703000c410b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0264102210202400240200341a0266a10cb030d0020050d01410321020b2000412a3b002120004200370308200041206a20023a0000200041186a41003a0000200041246a419cd5c400ad4280808080f00184370200200042013703000c410b200510a204200041186a41003a000020004200370308200042003703000c400b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c400b200510a304200041186a41003a000020004200370308200042003703000c3f0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3f0b200510a404200041186a41003a000020004200370308200042003703000c3e0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3e0b200510a504200041186a41003a000020004200370308200042003703000c3d0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3d0b200510a604200041186a41003a000020004200370308200042003703000c3c0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3c0b200510a704200041186a41003a000020004200370308200042003703000c3b0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3b0b200510a804200041186a41003a000020004200370308200042003703000c3a0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c3a0b200510a904200041186a41003a000020004200370308200042003703000c390b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c390b200410aa04200041186a41003a000020004200370308200042003703000c380b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c380b200510ab04200041186a41003a000020004200370308200042003703000c370b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c370b200510ac04200041186a41003a000020004200370308200042003703000c360b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c360b200510ad04200041186a41003a000020004200370308200042003703000c350b200320043703a840200320083703b040200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c350b200341a8c0006a10ae04200041186a41003a000020004200370308200042003703000c340b200320043703a840200320083703b040200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c340b200341a8c0006a10af04200041186a41003a000020004200370308200042003703000c330b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c330b200510b004200041186a41003a000020004200370308200042003703000c320b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c320b200510b104200041186a41003a000020004200370308200042003703000c310b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c310b200510b204200041186a41003a000020004200370308200042003703000c300b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c300b200510b304200041186a41003a000020004200370308200042003703000c2f0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2f0b200510b404200041186a41003a000020004200370308200042003703000c2e0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2e0b200510b504200041186a41003a000020004200370308200042003703000c2d0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2d0b200510b604200041186a41003a000020004200370308200042003703000c2c0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2c0b200510b704200041186a41003a000020004200370308200042003703000c2b0b20014184026a280200210920014180026a280200210720022d0001210620022d0000210520022802242102200341a8c0006a200141086a41f80110d40b1a20022002280200417f6a220136020002400240024002400240024002400240024020050d00024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200641ff01714102470d01200341e9003602f41e2003418bfdc7003602f01e200341c8316a200341a8c0006a10b80420032d00c8314108470d0420034188056a22014200370300200341f0046a41106a22024200370300200341f0046a41086a22054200370300200342003703f004200341d0046a41c2e6c000411a10cb012005200341d0046a41086a290000370300200320032900d0043703f004200341e0046a419cb6c800411010cb012001200341e0046a41086a290000370300200220032900e004370300200341203602d4222003200341f0046a3602d02220034190056a200341f0046a412010e40120032802900522050d02410021060c030b20010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200341d8c0006a10fc0220032003280088143602a81020032003418b146a2800003600ab1020032003290090393703d817200320034197396a2900003700df17200041186a41003a000020004200370308200020032802a8103600192000411c6a20032800ab10360000200041206a41023a0000200020032903d817370021200041286a20032900df17370000200042013703000c310b200328029405210c200320034198056a2802003602e43c200320053602e03c20034198026a200341e03c6a10c1010240024002402003280298020d00200328029c02210120034190026a200341e03c6a10c101200328029002450d010b200342003702cc314100210620034100280284ee4d3602c8312003410d3602ac1b2003200341d0226a3602a81b2003200341c8316a3602e00c200341b4266a4101360200200342013702a426200341949fc5003602a0262003200341a81b6a3602b026200341e00c6a41b4dfc400200341a0266a103b1a20032802c83120032802d03110d101024020032802cc31450d0020032802c83110390b0c010b200328029402210b410121060b200c450d00200510390b2006450d0120012007470d02200b2009470d03200341a0266a200341a8c0006a41f80110d40b1a200341c8316a200341a0266a10ba0420032802c8314101460d0420034190056a41386a220120034188326a29030037030020034190056a41306a2205200341c8316a41386a29030037030020034190056a41286a2206200341c8316a41306a29030037030020034190056a41206a2207200341c8316a41286a29030037030020034190056a41186a2209200341c8316a41206a29030037030020034190056a41106a220b200341c8316a41186a29030037030020034190056a41086a220c200341c8316a41106a2903003703002003200341c8316a41086a29030037039005024041002802d0a94e4103490d00200341f0046a41186a4200370300200341f0046a41106a4200370300200341f0046a41086a220d4200370300200342003703f004200341d0046a41c7e5c000410610cb01200d200341d0046a41086a290000370300200320032900d0043703f004200341e0046a419081c400410610cb01200241086a200341e0046a41086a290000370000200220032900e00437000020034188026a200341f0046a412010ce03200341d4316a410f360200200341103602cc312003200328028c0241002003280288021b3602e03c200320034190056a3602d0312003200341e03c6a3602c83141002802cca94e210d41002802c8a94e210e41002802d4a94e210f200341a0266a41106a4202370300200341d4266a41d79dc700ad4280808080800e84370200200341a0266a41286a41ab9dc700ad4280808080c00584370300200341a0266a41206a4202370300200341a0266a41086a411a360200200341bc266a200341c8316a360200200341ecfec7003602ac2620034281808080a0e0003702dc26200341003602d026200341d0b9c7003602a426200341033602a026200e41b8c0cd00200f410246220f1b200341a0266a200d41c0a4c000200f1b2802101103000b200341a0266a41386a2001290300370300200341a0266a41306a22012005290300370300200341a0266a41286a2006290300370300200341a0266a41206a2007290300370300200341a0266a41186a2009290300370300200341a0266a41106a200b290300370300200341a0266a41086a200c29030037030020032003290390053703a026200341f0046a41186a4200370300200341f0046a41106a4200370300200341f0046a41086a22054200370300200342003703f004200341d0046a41c2e6c000411a10cb012005200341d0046a41086a290000370300200320032900d0043703f004200341e0046a41d4b4c800410e10cb01200241086a200341e0046a41086a290000370000200220032900e004370000200341003602d031200342013703c8312001200341c8316a10bd04024020032802cc3120032802d03122056b412f4b0d00200341c8316a20054130107720032802d03121050b20032802c831220120056a220220032903a026370000200241086a200341a0266a41086a290300370000200241106a200341a0266a41106a290300370000200241186a200341a0266a41186a290300370000200241206a200341a0266a41206a290300370000200241286a200341a0266a41286a2903003700002003200541306a22023602d031024002400240024020032d00dc260e03000102030b41002105200341003a00e004024020032802cc312002470d00200341c8316a20024101107720032802c831210120032d00e004210520032802d03121020b200120026a20053a0000200241016a21020c020b200341013a00e0040240024020032802cc312002460d00410121050c010b200341c8316a20024101107720032802c831210120032d00e004210520032802d03121020b200120026a20053a0000200241016a21020c010b41022105200341023a00e004024020032802cc312002470d00200341c8316a20024101107720032802c831210120032d00e004210520032802d03121020b200120026a20053a0000200241016a21020b200341f0046a41202001200210e901024020032802cc31450d00200110390b20032802d02621060240200341d8266a2802002202450d0020024106742101200641346a21020340024020022802002205450d00200541306c450d002002417c6a28020010390b200241c0006a2102200141406a22010d000b0b0240200341d4266a28020041ffffff1f71450d00200610390b20034180043b01a426200341103a00a026200341a0266a10c90320032003280088143602a81020032003418b146a2800003600ab10200041186a41003a000020004200370308200020032802a8103600192000411c6a20032800ab10360000200042003703000c2f0b200341a0266a41086a200341c8316a41086a280200360200200320032903c8313703a026418bfdc70041e900200341a0266a41f4fdc7004184fec700103d000b418bfdc70041e9004194fec700105b000b200341b4266a4101360200200342013702a426200341a4fec7003602a026200341043602cc312003200341c8316a3602b0262003200341f01e6a3602c831200341a0266a41acfec7001043000b200341b4266a4101360200200342013702a426200341a4fec7003602a026200341043602cc312003200341c8316a3602b0262003200341f01e6a3602c831200341a0266a41bcfec7001043000b20032802f41e210220032802f01e2101200341a8266a200341d4316a280200360200200320032902cc313703a02620012002200341a0266a41ccfec70041dcfec700103d000b200341a0266a200141086a41c80010d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10be040c290b200341a0266a200141046a41c80010d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10bf040c280b200341a0266a41286a200141306a290300370300200341a0266a41206a200141286a290300370300200341a0266a41186a200141206a290300370300200341a0266a41106a200141186a290300370300200341a0266a41086a200141106a2903003703002003200141086a2903003703a026200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10c0040c270b200241206a2f010021112002411c6a2802002117200241186a2802002118200241146a2802002112200241106a28020021192002410c6a280200211a200241086a2802002110200241046a2802002113200241026a2f01002114200141246a28020021092001411c6a2902002104200141186a2802002107200141146a280200210e200141106a280200210d2001410c6a280200210b200141086a280200210c2002280224210520022d0001210620022d0000210220012d0005210f02400240024002400240024002400240024002400240024002400240024002400240024020012d0004417f6a0e06000102030405000b2005280200221541016a220941014d0d152005200936020020052101024002400240200241ff01714101460d00200520153602002006450d01411010382202450d22200241cce0c00036020c200241013602082002428180808010370200411010382201450d22200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021090b20012009417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200710c1042007103920052005280200417f6a220236020041022101420021042002450d010c110b4102210202400240024020060e03000102000b410021020c010b200320113b018e052003201736018a0520032018360186052003201236018205200320193601fe042003201a3601fa04200320103601f604200320133601f204200320143b01f004410121020b200341b2c0006a200341f0046a41086a290300370100200341bac0006a20034180056a290300370100200341c2c0006a20034188056a290300370100200320023a00a940200320032903f0043701aa40200341003a00a840200341a0266a200741c00710d40b1a200341c8316a4100200c200b200d200e200f200341a8c0006a200341a0266a10c204024020032802c8314101460d0020052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200710390c100b200341c8316a41086a2802002106200341d4316a350200210420032802cc31210120052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20071039200141ff01714108460d0f20014108762102200442208621042006ad21080c110b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0f20051039420021080c100b2005280200220941016a220741014d0d142005200736020020052101024002400240200241ff01714101460d00200520093602002006450d01411010382202450d21200241cce0c00036020c200241013602082002428180808010370200411010382201450d21200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021070b20012007417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b20052005280200417f6a220236020042002104410221072002450d010c0d0b4100210d4102210902400240024020060e03000102000b4100210d410021090c010b4101210d410121090b200341f01e6a200c10c304200341a0266a20032802f01e221620032802f81e220610c40420032902a426210420032802a0262102200341f42d6a4102360200200341003602a026200241002802e8c84820021b21150240024002400240200b2004420020021b2204422088a72201490d00200341ac266a280200210920032802a826211720032d00a726210f20032d00a626210e20032d00a526210d20032d00a4262107200341a8c0006a200341a0266a41106a41c40710d40b1a200341b8396a200341a02e6a290300370300200341b0396a200341982e6a290300370300200341a8396a200341902e6a29030037030020034190396a41106a200341882e6a29030037030020034190396a41086a200341802e6a2903003703002003200341f82d6a29030037039039410221110c010b200341d8176a41206a20113b0100200341f4176a2017360200200341d8176a41186a2018360200200341ec176a2012360200200341d8176a41106a2019360200200341e4176a201a360200200341d8176a41086a2010360200200320133602dc17200320143b01da17200320093a00d917200341003a00d817410221074102211102402015200b410a746a22022802cc07220e4102460d00200241d8076a220f2d00000d022009200f2d0001470d020240200d0d00200e21110c010b200e2111200341d8176a410272200f41026a412010d70b0d020b2002280204210920022802002117200341a8c0006a200241086a41c40710d40b1a200241023602cc07200341b8396a200241f8076a29030037030020034190396a41206a200241f0076a29030037030020034190396a41186a200241e8076a29030037030020034190396a41106a200241e0076a29030037030020034190396a41086a200241d8076a290300370300200320022903d00737039039024020032802a0260d0020032802f42d4102460d00200341a0266a41086a21020240200341e82d6a2802002207450d00200341ec2d6a280200450d00200710390b200210c504410221070b0b200320043702a426200320153602a02620162006200341a0266a10c60402402001450d002001410a7421012015210203400240200241cc076a2802004102460d000240200241c0076a2802002206450d00200241c4076a280200450d00200610390b20021096020b20024180086a210220014180786a22010d000b0b0240200442ffffff0183500d00201510390b200341a0266a200341a8c0006a41c40710d40b1a200341d8176a41286a20034190396a41286a290300370300200341d8176a41206a20034190396a41206a290300370300200341d8176a41186a20034190396a41186a290300370300200341d8176a41106a20034190396a41106a290300370300200341d8176a41086a20034190396a41086a29030037030020032003290390393703d817410021020c010b200341a0266a200341a8c0006a41c40710d40b1a200341d8176a41286a20034190396a41286a290300370300200341d8176a41206a20034190396a41206a290300370300200341d8176a41186a20034190396a41186a290300370300200341d8176a41106a20034190396a41106a290300370300200341d8176a41086a20034190396a41086a29030037030020032003290390393703d8172001410a7421012015210203400240200241cc076a2802004102460d000240200241c0076a2802002206450d00200241c4076a280200450d00200610390b20021096020b20024180086a210220014180786a22010d000b41022107410121020240200442ffffff0183500d00201510390b0b024020032802f41e450d00201610390b200341c8316a200341a0266a41c40710d40b1a200341d0226a41286a2201200341d8176a41286a290300370300200341d0226a41206a2206200341d8176a41206a290300370300200341d0226a41186a2218200341d8176a41186a290300370300200341d0226a41106a2212200341d8176a41106a290300370300200341d0226a41086a2219200341d8176a41086a290300370300200320032903d8173703d0220240024020020d0020034190056a200341c8316a41c40710d40b1a200341e03c6a41286a2001290300370300200341e03c6a41206a2006290300370300200341e03c6a41186a2018290300370300200341e03c6a41106a2012290300370300200341e03c6a41086a2019290300370300200320032903d0223703e03c024020114102470d00410321074114210d4101210e41a4c1cc002117410821090c0e0b200320093602ac40200320173602a840200341a8c0006a41086a20034190056a41c40710d40b1a200341f8c7006a20032903e03c37030020034180c8006a200341e03c6a41086a29030037030020034188c8006a200341f03c6a29030037030020034190c8006a200341f83c6a29030037030020034198c8006a200341803d6a290300370300200341a0c8006a200341883d6a290300370300200320113602f447024020032802e847450d00200341a0266a41086a200341e8c7006a220241086a280200360200200320022902003703a026200341c8316a200341a0266a10c70420032802c831220220032802d03110e00120032802cc31450d00200210390b200341a0266a41086a200c3602002003410c3a00a026200341a0266a410c6a200b360200200341013602a426200341a0266a10c903200341a8c0006a10c1040c010b200741ff01714108470d0c0b20052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20004200370308200020032800a81b360019200041186a41003a00002000411c6a200341ab1b6a280000360000200042003703000c370b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0b200510390c0c0b2005280200221641016a221541014d0d132005201536020020052101024002400240200241ff01714101460d00200520163602002006450d01411010382202450d20200241cce0c00036020c200241013602082002428180808010370200411010382201450d20200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021150b20012015417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200910c104200910390240200b450d00200c10390b20052005280200417f6a220236020041022101420021042002450d010c090b2003200d360298052003200b360294052003200c360290054102210202400240024020060e03000102000b410021020c010b200320113b018e052003201736018a0520032018360186052003201236018205200320193601fe042003201a3601fa04200320103601f604200320133601f204200320143b01f004410121020b200341b2c0006a200341f0046a41086a290300370100200341bac0006a20034180056a290300370100200341c2c0006a20034188056a290300370100200320023a00a940200320032903f0043701aa40200341003a00a840200341a0266a200941c00710d40b1a200341c8316a20034190056a4100200e20072004a72004422088a7200f200341a8c0006a200341a0266a10c804024020032802c8314101460d0020052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200910390c080b200341c8316a41086a2802002106200341d4316a350200210420032802cc31210120052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20091039200141ff01714108460d0720014108762102200442208621042006ad21080c090b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0720051039420021080c080b2005280200220941016a220741014d0d12200520073602002005210102400240024002400240200241ff01714101460d00200520093602002006450d01411010382202450d21200241cce0c00036020c200241013602082002428180808010370200411010382201450d21200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021070b20012007417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b0240200b450d00200c10390b20052005280200417f6a220136020042002104410221022001450d010c030b410221014100210e02400240024020060e03000102000b4100210e410021010c010b4101210e410121010b2003200d3602a8262003200b3602a4262003200c3602a02620034190396a200341a0266a10c70420034190056a2003280290392209200328029839220c10de03200328029005210220034100360290050240024020024101460d004103210241a4c1cc0021014280808080800121040c010b20034198056a280200210b200341c8316a200328029405220f10c304200341a0266a20032802c831220d20032802d031220610c40420032802a026220241002802e8c84820021b2107024002400240200b20032902a426420020021b2204422088a722024f0d00200341c0266a20113b0100200341bc266a2017360200200341b8266a2018360200200341b4266a2012360200200341b0266a2019360200200341ac266a201a360200200341a8266a2010360200200320133602a426200320143b01a226200320013a00a126200341003a00a0264102211702402007200b410a746a22112802cc0722184102460d00201141d8076a22122d00000d02200120122d0001470d020240200e0d00201821170c010b20182117200341a0266a410272201241026a412010d70b0d020b201141cc076a2101024020174102460d0002402007200b410a746a220e2802c0072217450d00200e41c4076a280200450d00201710390b201110c5040b2011200341a0266a41cc0710d40b1a200141023602002007200b410a746a220120032903a8403703d007200141d8076a200341b0c0006a290300370300200141e0076a200341b8c0006a290300370300200141e8076a200341c0c0006a290300370300200141f0076a200341c8c0006a290300370300200141f8076a200341d0c0006a2903003703000b200320043702a426200320073602a026200d2006200341a0266a10c60402402002450d002002410a7421012007210203400240200241cc076a2802004102460d000240200241c0076a2802002206450d00200241c4076a280200450d00200610390b20021096020b20024180086a210220014180786a22010d000b0b0240200442ffffff0183500d00200710390b41082102410121060c010b2002410a7421012007210203400240200241cc076a2802004102460d000240200241c0076a2802002206450d00200241c4076a280200450d00200610390b20021096020b20024180086a210220014180786a22010d000b4102210241002106200442ffffff0183500d00200710390b024020032802cc31450d00200d10390b41002101420021042006450d0041082102200341a0266a41086a200f3602002003410c3a00a026200341a0266a410c6a200b360200200341013602a426200341a0266a10c9032009200c10e0010b0240200328029439450d00200910390b20052005280200417f6a220636020020024108470d01024020060d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20004200370308200020032800d817360019200041186a41003a00002000411c6a200341db176a280000360000200042003703000c370b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22012001280200417f6a220136020002402001450d000c020b200510390c010b20060d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22062006280200417f6a220636020020060d00200510390b20004194023b002120004200370308200041206a20023a0000200041186a41003a0000200041246a20044280808080f001832001ad84370200200042013703000c340b2005280200221541016a220941014d0d112005200936020020052101024002400240200241ff01714101460d00200520153602002006450d01411010382202450d1e200241cce0c00036020c200241013602082002428180808010370200411010382201450d1e200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021090b20012009417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200710c1042007103920052005280200417f6a220236020041022101420021042002450d010c040b4102210202400240024020060e03000102000b410021020c010b200320113b018e052003201736018a0520032018360186052003201236018205200320193601fe042003201a3601fa04200320103601f604200320133601f204200320143b01f004410121020b200341b2c0006a200341f0046a41086a290300370100200341bac0006a20034180056a290300370100200341c2c0006a20034188056a290300370100200320023a00a940200320032903f0043701aa40200341003a00a840200341a0266a200741c00710d40b1a200341c8316a4101200c200b200d200e200f200341a8c0006a200341a0266a10c204024020032802c8314101460d0020052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200710390c030b200341c8316a41086a2802002106200341d4316a350200210420032802cc31210120052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20071039200141ff01714108460d0220014108762102200442208621042006ad21080c040b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0220051039420021080c030b2005280200221641016a221541014d0d102005201536020020052101024002400240024002400240200241ff01714101460d00200520163602002006450d01411010382202450d20200241cce0c00036020c200241013602082002428180808010370200411010382201450d20200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b200128020021150b20012015417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200910c104200910390240200b450d00200c10390b20052005280200417f6a220236020041022101420021042002450d010c030b2003200d360298052003200b360294052003200c360290054102210202400240024020060e03000102000b410021020c010b200320113b018e052003201736018a0520032018360186052003201236018205200320193601fe042003201a3601fa04200320103601f604200320133601f204200320143b01f004410121020b200341b2c0006a200341f0046a41086a290300370100200341bac0006a20034180056a290300370100200341c2c0006a20034188056a290300370100200320023a00a940200320032903f0043701aa40200341003a00a840200341a0266a200941c00710d40b1a200341c8316a20034190056a4101200e20072004a72004422088a7200f200341a8c0006a200341a0266a10c804024020032802c8314101460d0020052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200910390c020b200341c8316a41086a2802002106200341d4316a350200210420032802cc31210120052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b20091039200141ff01714108460d0120014108762102200442208621042006ad21080c030b2005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d0120051039420021080c020b200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c340b420021080b20004200370308200041236a20024110763a0000200041216a20023b0000200041246a2004200884370200200041206a20013a0000200041186a41003a0000200042013703000c320b200042003703082000200328009005360019200041186a41003a00002000411c6a20034193056a280000360000200042003703000c310b420021080b20004200370308200041236a20024110763a0000200041216a20023b0000200041246a2004200884370200200041206a20013a0000200041186a41003a0000200042013703000c2f0b200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c2e0b420021080b20004200370308200041236a20024110763a0000200041216a20023b0000200041246a2004200884370200200041206a20013a0000200041186a41003a0000200042013703000c2c0b20052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b2017ad21040c010b0b2000200f3a00232000200e3a00222000200d3a002120004200370308200041206a20073a0000200041186a41003a0000200041246a2009ad422086200484370200200042013703000c290b200042003703082000200328009005360019200041186a41003a00002000411c6a20034193056a280000360000200042003703000c280b420021080b20004200370308200041236a20024110763a0000200041216a20023b0000200041246a2004200884370200200041206a20013a0000200041186a41003a0000200042013703000c260b200141186a21052001410d6a2106200141c8006a290300210a200141c0006a290300211b200141d0006a280200210c200141146a2802002109200141106a280200210b2001410c6a2d00002107200141386a2903002108200141306a29030021040240024002400240200141086a280200417f6a0e0400010203000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a200341b9c0006a290000370300200341f0046a41186a200341c1c0006a290000370300200320032900a9403703f00402400240024020032d00a8404101470d00200341023a00c8310c010b200341e03c6a41186a200341f0046a41186a2903002204370300200341e03c6a41106a200341f0046a41106a2903002208370300200341e03c6a41086a200341f0046a41086a290300220a370300200320032903f004221b3703e03c200341a0266a41186a2004370300200341a0266a41106a2008370300200341a0266a41086a200a3703002003201b3703a026200341c8316a200341a0266a10c90420032d00c8314108460d010b20032802c8312102200041246a20032902cc31370200200041206a2002360200200041186a41003a000020004200370308200042013703000c290b20004200370308200041186a41003a0000200042003703000c280b200341e03c6a41026a200641026a2d00003a0000200341c8316a41086a200541086a290200370300200341c8316a41106a200541106a290200370300200320062f00003b01e03c200320052902003703c831200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc034101210202400240024020032d00a8404101460d0002400240024020070e03000201020b200341d8176a41026a200341e03c6a41026a2d00003a0000200341a8c0006a41086a200341c8316a41086a290300370300200341a8c0006a410d6a200341c8316a410d6a290000370000200320032f01e03c3b01d817200320032903c8313703a840410021020c010b2009450d00200b10390b20034183056a200341a8c0006a41086a290300370000200341f0046a41186a2201200341b5c0006a290000370000200320032f01d8173b01f004200320093600f7042003200b3600f304200320032903a8403700fb042003200341da176a2d00003a00f20420020d01200341a0266a41186a2001290300370300200341a0266a41106a200341f0046a41106a290300370300200341a0266a41086a200341f0046a41086a290300370300200320032903f0043703a02620034190056a200341a0266a10c90420032d0090054108470d02200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c2a0b200341023a00900520074102470d012009450d01200b10390c010b200341013a0090050b2003280290052102200041246a200329029405370200200041206a2002360200200041186a41003a000020004200370308200042013703000c270b41022101200341d0226a41026a200641026a2d00003a000020034190056a41086a200541086a29020037030020034190056a41106a200541106a290200370300200320062f00003b01d0222003200529020037039005200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341b1c0006a290000370300200341e03c6a41106a200341b9c0006a290000370300200341e03c6a41186a200341c1c0006a290000370300200320032900a9403703e03c024002400240024020032d00a8404101460d00200341c8316a41186a200341e03c6a41186a290300370300200341c8316a41106a200341e03c6a41106a290300370300200341c8316a41086a200341e03c6a41086a290300370300200320032903e03c3703c83120044280a094a58d1d5441002008501b450d01410321010b4102210241e9f6ca00ad210442808080809001210841132105024020074102470d002009450d00200b103941e9f6ca00ad21040b0c010b4101210202400240024020070e03000201020b20034190396a41026a200341d0226a41026a2d00003a0000200341a0266a41086a20034190056a41086a290300370300200341a0266a410d6a20034190056a410d6a290000370000200320032f01d0223b01903920032003290390053703a026410021020c010b2009450d00200b10390b20034183056a200341a0266a41086a290300370000200341f0046a41186a2201200341ad266a290000370000200320032f0190393b01f004200320093600f7042003200b3600f304200320032903a0263700fb04200320034192396a2d00003a00f2040240024020020d00200341a8c0006a41186a2001290300370300200341a8c0006a41106a200341f0046a41106a290300370300200341a8c0006a41086a200341f0046a41086a290300370300200320032903f0043703a840200341a0266a200341a8c0006a10ca0420032802a026220120032802a82610e3012102024020032802a426450d00200110390b2002450d014184caca00ad21044280808080f00221084101210241132105410321010c020b4200210441012101420021080c010b200341a0266a200341c8316a200341a8c0006a20042008410110dc03024020032d00a02622014108470d00200341a0266a200341a8c0006a10ca0420032802a026220120032802a82610e3012102024020032802a426450d00200110390b2002450d02200341a8266a411736020020034184caca003602a426200341013a00a22620034183263b01a02641fed5ca004137200341a0266a41b8d6ca0041c8d6ca00103d000b20032d00a326210620032d00a226210220032d00a126210520032902a42622044280808080708321080b200020063a0023200020023a0022200020053a0021200041206a20013a0000200041186a41003a000020004200370308200041246a200842808080807083200442ffffffff0f8384370200200042013703000c270b200341a0266a41186a2202200a3703002003201b3703b026200320043703a0262003200c3602c026200320083703a826200341a8c0006a200341a0266a10cb042002200341a8c0006a41186a290300370300200341a0266a41106a200341a8c0006a41106a290300370300200341a0266a41086a200341a8c0006a41086a290300370300200320032903a8403703a02620034190396a200341a0266a10c904200041186a41003a000020004200370308200020032800d8173600192000411c6a200341db176a280000360000200042003703000c260b200141f0006a290300211d200141e8006a290300211f200141e0006a290300211c200141d8006a290300211e200141f8006a280200210f2008a7210d2004422088a7210e200341d0226a41026a200641026a2d00003a000020034190056a41086a200541086a29020037030020034190056a41106a200541106a290200370300200320062f00003b01d0222003200529020037039005200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0262004a7210141022102024002400240024002400240200341a0266a10cb030d0041032102201e4280a094a58d1d544100201c501b0d002008422088a721062004420888a7210241012105024002400240200141ff01710e03000201020b410021050c010b0240200d450d00200e10390b0b200341f73c6a200a3700002003201b3700ef3c2003200c3a00ff3c200320063600eb3c2003200d3600e73c2003200e3600e33c200320023b01e03c200320024110763a00e23c20050d02200341c8316a41186a200341e03c6a41186a290300370300200341c8316a41106a200341e03c6a41106a290300370300200341c8316a41086a200341e03c6a41086a290300370300200320032903e03c3703c8314101210202400240024020070e03000201020b20034190396a41026a200341d0226a41026a2d00003a0000200341a0266a41086a20034190056a41086a290300370300200341a0266a410d6a20034190056a410d6a290000370000200320032f01d0223b01903920032003290390053703a026410021020c010b2009450d00200b10390b20034183056a200341a0266a41086a290300370000200341f0046a41186a200341ad266a290000370000200320032f0190393b01f004200320093600f7042003200b3600f304200320032903a0263700fb04200320034192396a2d00003a00f2040240024020020d00200341a8c0006a41186a200341f0046a41186a290300370300200341a8c0006a41106a200341f0046a41106a290300370300200341a8c0006a41086a200341f0046a41086a290300370300200320032903f0043703a840200341a0266a200341c8316a10ca0420032802a026220120032802a82610e3012102024020032802a426450d00200110390b2002450d014184caca00ad21044280808080f00221084101210141132105410321020c060b4200210441012102420021080c060b200341a0266a200341a8c0006a200341c8316a201e201c410110dc03024020032d00a02622024108470d00200341a0266a200341c8316a10ca0420032802a026220120032802a82610e3012102024020032802a426450d00200110390b2002450d02200341a8266a411736020020034184caca003602a426200341013a00a22620034183263b01a02641fed5ca004137200341a0266a41b8d6ca0041d8d6ca00103d000b20032d00a326210620032d00a226210120032d00a126210520032902a42622044280808080708321080c050b200141ff01714102470d02200d450d02200e10390c020b200341a0266a41186a2202201d3703002003201f3703b0262003201e3703a0262003200f3602c0262003201c3703a826200341c8316a200341a0266a10cb042002200341c8316a41186a290300370300200341a0266a41106a200341c8316a41106a290300370300200341a0266a41086a200341c8316a41086a290300370300200320032903c8313703a02620034190396a200341a0266a10c904200041186a41003a000020004200370308200020032800d8173600192000411c6a200341db176a280000360000200042003703000c290b410121020b4102210141e9f6ca00ad21044280808080900121084113210520074102470d002009450d00200b103941e9f6ca00ad21040b0b200020063a0023200020013a0022200020053a0021200041206a20023a0000200041186a41003a000020004200370308200041246a200842808080807083200442ffffffff0f8384370200200042013703000c250b200341a0266a200141046a41c40010d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10cc040c240b200341a0266a200141086a41a80210d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10cd040c230b200241206a2f0100210b2002411c6a280200210c200241186a280200210d200241146a280200210e200241106a280200210f2002410c6a2802002111200241086a2802002117200241046a2802002118200241026a2f01002112200141106a28020021162001410c6a2802002122200141086a280200211a2002280224210520022d0001211020022d0000210702400240024020012f0104417f6a0e03000102000b410121010240200741ff01714101460d0041002101410221020240024020100e03000102000b41002102410021010c010b410121020b2005280200220641016a41014d0d02200341c0266a200b3b0100200341bc266a200c360200200341b8266a200d360200200341b4266a200e360200200341b0266a200f360200200341ac266a2011360200200341a8266a20173602002005200641016a360200200320053602c426200320183602a426200320123b01a226200320023a00a126200320013a00a026201a201641c0076c22026a2106200341a0266a10cb032113024020160d0042002104201a21020c040b200241c0786a2101200341c8316a410472211442c8c79f792108200741ff0171211541002107201a21024200210403400240200228020022094126470d00200241c0076a21020c050b20034190056a200241046a41bc0710d40b1a200320093602c831201420034190056a41bc0710d40b1a200341e03c6a200341c8316a10b2030240024020130d00200341a0266a200341c8316a41c00710d40b1a41012119024020154101460d0041002119410221090240024020100e03000102000b41002109410021190c010b410121090b200528020041016a222141014d0d0520052021360200200320053602cc402003200b3b01c8402003200c3602c4402003200d3602c0402003200e3602bc402003200f3602b840200320113602b440200320173602b040200320183602ac40200320123b01aa40200320093a00a940200320193a00a84020034190396a200341a0266a200341a8c0006a10c4030c010b200341a8c0006a200341c8316a41c00710d40b1a41012119024020154101460d0041002119410221090240024020100e03000102000b41002109410021190c010b410121090b200528020041016a222141014d0d042005202136020002402005280208200341a8c0006a200528020c28020c1101000d0020052005280200417f6a2209360200200341003a00a8392003420037039839200341023a00b0392003420137039039024020090d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22092009280200417f6a220936020020090d00200510390b200341a8c0006a10c1030c010b200341a0266a200341a8c0006a41c00710d40b1a200320053602fc172003200b3b01f8172003200c3602f4172003200d3602f0172003200e3602ec172003200f3602e817200320113602e417200320173602e017200320183602dc17200320123b01da17200320093a00d917200320193a00d81720034190396a200341a0266a200341d8176a10c4030b024002402003290398394201510d0020032903e03c210a0c010b20032903e03c220a20032903a039221b201b200a561b210a0b02402003290390394201510d00200741016a2107427f2004200a7c220a200a2004541b2104200842c8a8417c2108200141c0786a2101200241c0076a22022006470d010c060b0b200341a8c0006a41206a200341b8396a290300221b370300200341a8c0006a41186a20034190396a41206a290300221c370300200341a8c0006a41106a20034190396a41186a290300370300200341a8c0006a41086a20034190396a41106a29030037030020032003290398393703a840200341a0266a41106a201b3e0200200341a0266a41086a201c370300200320073602a426200341083a00a0262004200a427f85221b2004201b541b2104200341a0266a10c90302402001450d00200241c0076a21020340200210ce04200241c0076a2102200141c0786a22010d000b0b200a20047c210402402022450d00202241c0076c450d00201a10390b200420087d210420052005280200417f6a220236020020020d062005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d060c050b410121060240200741ff01714101460d0041002106410221020240024020100e03000102000b41002102410021060c010b410121020b2005280200220741016a41014d0d01200141066a2f01002119200341c0266a200b3b0100200341bc266a200c360200200341a0266a41186a2201200d360200200341b4266a200e360200200341a0266a41106a2209200f360200200341ac266a2011360200200341a0266a41086a220b20173602002005200741016a360200200320053602c426200320183602a426200320123b01a226200320023a00a126200320063a00a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a2202200341b1c0006a290000370300200341e03c6a41106a2206200341b9c0006a290000370300200341e03c6a41186a2207200341c1c0006a290000370300200320032900a9403703e03c0240024020032d00a8404101460d00200341d0226a41186a20072903002204370300200341d0226a41106a20062903002208370300200341d0226a41086a2002290300220a370300200320032903e03c221b3703d0222001200437030020092008370300200b200a3703002003201b3703a026411210382202450d0d200241002900baa145370000200241086a41002900c2a1453700002003429280808080023702ac40200320023602a840200341a8c0006a41104120107720032802a840220120032802b04022066a220220032903a026370000200241086a200341a0266a41086a290300370000200241106a200341a0266a41106a290300370000200241186a200341a0266a41186a2903003700002003200641206a22023602b040024020032802ac4020026b41014b0d00200341a8c0006a20024102107720032802a840210120032802b04021020b200120026a20193b0000200341f0046a20032802a8402201200241026a109f01024020032802ac40450d00200110390b200341a8266a20032902f404370300200341a0266a41106a20032902fc04370300200341b8266a200328028405360200200341bc266a20032d0088053a0000200341bd266a20032d00890522023a0000200341be266a220120032f018a053b0100200341c0266a20032d008c053a0000200320032802f0043602a426200341c1266a20032d008d053a0000200341c2266a220620032d008e053a0000200341c3266a20032d008f053a00002001280100210920062f0100210b200341bb266a2f00002101200341b3266a290000210420032f01a426210c20032d00a626210620032800a72621072003200341ab266a2900003700ad40200320073600a940200320043700b540200320023a00bf40200320013b00bd40200320063a00a84020032802ac40210720032802b440210d20032802b040210e20032802bc40210f20032802b840211120032802a8402117411010382202450d0d200241cce0c00036020c200241013602082002428180808010370200411010382201450d0d200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2206360200024020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b20012001280200417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b20034190396a201a10b203200341a8c0006a201a41c00710d40b1a024002402005280208200341a8c0006a200528020c28020c1101000d00200341e0316a41003a0000200341e8316a41023a000020052005280200417f6a2202360200200342003703d031200342013703c831024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200341a8c0006a10c10320032903903921040c010b200341a0266a200341a8c0006a41c00710d40b1a200341b0056a200b3b0100200341ac056a2009360200200341a8056a200f360200200341a4056a201136020020034190056a41106a200d3602002003419c056a200e36020020034198056a2007360200200320053602b40520032017360294052003200c3b01920520034180023b019005200341c8316a200341a0266a20034190056a10c403024020032903d0314201510d0020032903903921040c010b2003290390392204200341c8316a41106a290300220820082004561b21040b20044288f2aa3d7c220a200454210142012108024020032903c83142015222050d00200320032800e1313602a81b200320032900e9313703d8172003200341e4316a2800003600ab1b2003200341f0316a2900003700df17200341e8316a2d000021020b427f200a20011b2104201a10392005450d01200320032800ab1b36008b14200320032802a81b36028814200041186a41003a0000200041106a20043703002000420137030820002003280288143600192000411c6a200328008b14360000200042003703000c250b20052005280200417f6a2202360200024020020d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b201a10cf04201a103941022102420021080b200320032800ab1b36008b14200320032802a81b36028814200320032903d8173703f01e200320032900df173700f71e200041186a41003a0000200041106a20043703002000200837030820002003280288143600192000411c6a200328008b14360000200041206a20023a0000200020032903f01e370021200041286a20032900f71e370000200042013703000c230b200341a8c0006a41226a200241226a2f01003b0100200341a8c0006a41206a200b3b0100200341a8c0006a411c6a200c360200200341a8c0006a41186a200d360200200341a8c0006a41146a200e360200200341a8c0006a41106a200f360200200341a8c0006a410c6a2011360200200341a8c0006a41086a2017360200200320053602cc40200320183602ac40200320123b01aa40200320103a00a940200320073a00a84020034190056a410c6a201636020020034190056a41086a20223602002003201a360294052003200341a8c0006a36029005200341a0266a20034190056a10d00420032802cc4022022002280200417f6a2201360200024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200341a0266a41086a2102024020032903a0264201520d00200341c8316a41206a200241206a2903002204370300200341c8316a41186a200241186a2903002208370300200341c8316a41106a200241106a290300220a370300200341c8316a41086a200241086a290300221b37030020032002290300221c3703c831200041286a2004370300200041206a2008370300200041186a200a370300200041106a201b3703002000201c370308200042013703000c230b200341c8316a41106a200241106a2903002204370300200341c8316a41086a200241086a290300220837030020032002290300220a3703c831200041186a2004370300200041106a20083703002000200a370308200042003703000c220b00000b20062002460d000340200210ce042006200241c0076a2202470d000b0b02402022450d00202241c0076c450d00201a10390b200341a0266a41086a41083a0000200341083a00a026200341a0266a10c90320052005280200417f6a22023602002016ad42b8d73e7e20047c4280e1a1067c210420020d012005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d010b200510390b200320032800a0263602a8402003200341a3266a2800003600ab40200041186a41003a0000200041106a200437030020004201370308200020032802a8403600192000411c6a20032800ab40360000200042003703000c1d0b200141246a280200210e2001411c6a2802002105200141186a2802002106200141146a2802002109200141106a28020021112001410c6a280200210c200141086a280200210d20022d0001210f20022d00002101200228022422022002280200417f6a2207360200024002400240024020010d00024020070d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b4102210b200f41ff01714102460d0142002104420021080c030b420021044102210b20070d012002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d0120021039420021080c020b20034188056a2202420037030020034180056a22014200370300200341f0046a41086a22074200370300200342003703f004200341d0046a41b69fc500410710cb012007200341d0046a41086a290000370300200320032900d0043703f004200341e0046a41d091c600410c10cb012002200341e0046a41086a290000370300200120032900e00437030020034180026a200341f0046a412010ce03200341a0266a20032802840241002003280280021b220b200e10d10420032802a026220220032802a82610e3012107024020032802a426450d00200210390b20034190056a10d20402402007417f732003280290052201200e4105746a4100200328029805200e4b1b2202410047710d0041abefcd00ad21044198efcd00ad210a024020032802940541ffffff3f71450d00200110390b4280808080b0024280808080a00120071b2108200a200420071b21044103210b0c020b200241086a2900002104200241106a29000021082002290000210a200341e03c6a41186a200241186a290000221b370300200341e03c6a41106a2008370300200341e03c6a41086a20043703002003200a3703e03c200341bd266a201b370000200341b5266a2008370000200341ad266a20043700002003200a3700a526200341003a00a426200341073a00a026200341a0266a10c903200341003602d031200342013703c831200d2011200341c8316a10b902200341c8316a200510ac0202402005450d0020092005410c6c6a21012009210203402002280200200241086a280200200341c8316a10b9022002410c6a22022001470d000b0b200341a8c0006a200b200e10d10420032802d031220241046a2201417f4c0d0720032802c831210b20032802b040210e20032802a840210f0240024002400240024002402001450d00200110382207450d0c200341003602a826200320013602a426200320073602a026200241c000490d02200241808001490d032002418080808004490d04410021010c010b200341003602a826200342013703a026200341a0266a41004101107720032802a026210720032802a82621010b200720016a41033a00002003200141016a22013602a826024020032802a42620016b41034b0d00200341a0266a20014104107720032802a82621010b20032802a02620016a2002360000200141046a21010c030b2003200241027422013a00e004200720013a0000410121010c020b20024102744101722117410021110240200141014b0d00200341a0266a41004102107720032802a026210720032802a82621110b200720116a20173b0000201141026a21010c010b20072002410274410272360000410421010b200320013602a826024020032802a42620016b20024f0d00200341a0266a20012002107720032802a82621010b20032802a026220720016a200b200210d40b1a2003200120026a22023602a826200f200e2007200210e901024020032802a426450d0020032802a02610390b024020032802ac40450d0020032802a84010390b024020032802cc31450d0020032802c83110390b024020032802940541ffffff3f71450d0020032802900510390b0240200c450d00200d10390b02402005450d002005410c6c21012009210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b02402006450d002006410c6c450d00200910390b200042003703082000200328009039360019200041186a41003a00002000411c6a20034193396a280000360000200042003703000c1e0b420021080b0240200c450d00200d10390b02402005450d002005410c6c21012009210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b02402006450d002006410c6c450d00200910390b200020073a00222000410b3a002120004200370308200041246a2008200484370200200041206a200b3a0000200041186a41003a0000200042013703000c1c0b2001411c6a280200210e200141186a2802002106200141146a2802002105200141106a280200210b2001410c6a280200210d200141086a2802002107200341a8c0006a200141206a41800210d40b1a2002280224210120022d0001210c20022d000021090240024002402007417f6a0e03000102000b2002411a6a2901002104200241196a2d00002107200241186a2d0000210f200241166a2f01002111200241156a2d00002117200241146a2d00002118200241126a2f01002112200241116a2d00002119200241106a2d0000211a2002410e6a2f010021102002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002121200241066a2f01002122200241056a2d00002123200241046a2d00002124200241026a2f0100212520012001280200417f6a2202360200024002400240200941ff01710d00024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200c41ff01714101470d01200341f0046a41086a220220153b0100200341f0046a41106a220120123b0100200341f0046a41186a2004370300200320163a00f704200320213a00f604200320223b01f404200320233a00f304200320243a00f204200320253b01f004200320193a00ff042003201a3a00fe04200320103b01fc04200320133a00fb04200320143a00fa04200320073a0087052003200f3a008605200320113b018405200320173a008305200320183a008205200341a9396a2004370000200341a1396a200129030037000020034199396a2002290300370000200320032903f00437009139200341013a009039200341a0266a200341a8c0006a41800210d40b1a200341e4176a2006360200200341d8176a41086a20053602002003200e3602e8172003200b3602dc172003200d3602d817200341c8316a20034190396a200341a0266a200341d8176a10d30420032903c8314201510d0220034190056a41186a200341c8316a41186a290300220437030020034190056a41106a200341c8316a41106a2903002208370300200320032903d031220a37039805200041186a2004370300200041106a20083703002000200a370308200042003703000c200b20020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200341e0316a41003a0000200341e8316a41023a0000200342003703d03102402006450d002006410c6c2101200b210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b2005450d002005410c6c450d00200b10390b20034190056a41286a200341c8316a41286a290300220437030020034190056a41206a200341c8316a41206a290300220837030020034190056a41186a200341c8316a41186a290300220a37030020034190056a41106a200341c8316a41106a290300221b370300200320032903d031221c37039805200041286a2004370300200041206a2008370300200041186a200a370300200041106a201b3703002000201c370308200042013703000c1d0b20012001280200417f6a2202360200024002400240200941ff01710d00024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200c41ff01714102470d0120034190396a41017210d404200341013a009039200341a0266a200341a8c0006a41800210d40b1a200341e4176a2006360200200341e0176a20053602002003200e3602e8172003200b3602dc172003200d3602d817200341c8316a20034190396a200341a0266a200341d8176a10d30420032903c8314201510d0220034190056a41186a200341c8316a41186a290300220437030020034190056a41106a200341c8316a41106a2903002208370300200320032903d031220a37039805200041186a2004370300200041106a20083703002000200a370308200042003703000c1f0b20020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200341e0316a41003a0000200341e8316a41023a0000200342003703d03102402006450d002006410c6c2101200b210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b2005450d002005410c6c450d00200b10390b20034190056a41286a200341c8316a41286a290300220437030020034190056a41206a200341c8316a41206a290300220837030020034190056a41186a200341c8316a41186a290300220a37030020034190056a41106a200341c8316a41106a290300221b370300200320032903d031221c37039805200041286a2004370300200041206a2008370300200041186a200a370300200041106a201b3703002000201c370308200042013703000c1c0b20012001280200417f6a2205360200024002400240200941ff01710d004100210220050d022001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22052005280200417f6a22053602002005450d010c020b4101210220050d012001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22052005280200417f6a220536020020050d010b200110390b0240200c20027241ff0171450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c1c0b200341f0046a41186a2202420037030020034180056a22014200370300200341f0046a41086a22054200370300200342003703f004200341d0046a41a2c0cd00410f10cb012005200341d0046a41086a290000370300200320032900d0043703f004200341e0046a41b1c0cd00410710cb012002200341e0046a41086a290000370300200120032900e004370300200341f0046a4120200d200b10eb03200041186a41003a000020004200370308200042003703000c1b0b02400240024002400240024002400240024020012802042207450d00200141086a280200210920034190056a200141106a41c00110d40b1a200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341b1c0006a290000370300200341e03c6a41106a2202200341b9c0006a290000370300200341e03c6a41186a2201200341c1c0006a290000370300200320032900a9403703e03c20032d00a8404101460d01200341d8176a41186a20012903002204370300200341d8176a41106a20022903002208370300200341d8176a41086a200341e03c6a41086a290300220a370300200320032903e03c221b3703d817200341a8c0006a41186a2004370300200341a8c0006a41106a2008370300200341a8c0006a41086a200a3703002003201b3703a840200341a0266a200341a8c0006a10d504024020032d00a0264101470d0020034199396a200341aa266a290100370000200341a1396a200341b2266a290100370000200341a8396a200341b9266a290000370000200320032901a22637009139200320032d00a1263a009039200341a8c0006a200341d8176a10df03200341a0266a20032802a840220220032802b04010e003200341f0266a280200210520032903a0262108024020032802ac40450d00200210390b42808080809001210441829fc50021014104210220084201520d082005450d08200341c8316a20034190056a41c00110d40b1a200341e03c6a20034190396a10d604200341a0266a20032802e03c220120032802e83c10d70441002102024020032d00a0264101470d00200341a8c0006a410172200341a0266a41017241c00110d40b1a410121020b200320023a00a840024020032802e43c450d00200110390b200341f8016a200341c8316a41e7e485f30610bd02200320032903f8013702e43c200341e7e485f3063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220120032802d822108504200341a0266a4101722102024020032d00a0264101470d00200341f0046a41186a2205200241186a290000370300200341f0046a41106a2206200241106a290000370300200341f0046a41086a220b200241086a290000370300200320022900003703f004024020032802d422450d00200110390b200341a0266a41186a2005290300370300200341a0266a41106a2006290300370300200341a0266a41086a200b290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d080c070b20032802d422450d06200110390c060b4280808080f002210441eb9ec5002101410121020c070b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a2202200341b9c0006a290000370300200341f0046a41186a2201200341c1c0006a290000370300200320032900a9403703f0040240024020032d00a8404101460d0020034190396a41186a2001290300220437030020034190396a41106a2002290300220837030020034190396a41086a200341f0046a41086a290300220a370300200320032903f004221b37039039200341a8c0006a41186a2004370300200341a8c0006a41106a2008370300200341a8c0006a41086a200a3703002003201b3703a840200341a0266a200341a8c0006a10d50420032d00a0264101470d0120034199056a200341aa266a290100370000200341a1056a200341b2266a290100370000200341a8056a200341b9266a290000370000200320032901a22637009105200320032d00a1263a009005200341d8176a20034190056a10d604200341a0266a20032802d817220120032802e017220510d704410021020240024020032d00a02622060d000c010b2001200510e00120064101470d0020032d00a1262105200341c8316a200341a0266a41027241bf0110d40b1a410121020b024020032802dc17450d00200110390b2002450d03200341a8c0006a410172200341c8316a41bf0110d40b1a200320053a00a840200341b8016a200341a8c0006a41e7e485f30610bd02200320032903b8013702a426200341e7e485f3063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b200341b0016a200341a8c0006a41e2c289ab0610bd02200320032903b0013702a426200341e2c289ab063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b200341a8016a200341a8c0006a41e9dabdf30610bd02200320032903a8013702a426200341e9dabdf3063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b200341a0016a200341a8c0006a41f0c2c98b0610bd02200320032903a0013702a426200341f0c2c98b063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b20034198016a200341a8c0006a41e1e69df30610bd0220032003290398013702a426200341e1e69df3063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b20034190016a200341a8c0006a41e1ea91cb0610bd0220032003290390013702a426200341e1ea91cb063602a026200341c8316a200341a0266a10d80420032802c831220220032802d03110e001024020032802cc31450d00200210390b20034190396a10d904200041186a41003a000020004200370308200020032800e03c3600192000411c6a200341e33c6a280000360000200042003703000c240b4200210441022102420021080c040b4280808080f002210841eb9ec5002102410121010c020b4200210841022101420021040c060b4280808080e0002108418b9fc5002102410321010b2002ad2104410321020b200020013a0022200041083a002120004200370308200041206a20023a0000200041186a41003a0000200020084280808080f00383200484370024200042013703000c1e0b200341f0016a200341c8316a41e2c289ab0610bd02200320032903f0013702e43c200341e2c289ab063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220120032802d8221085040240024020032d00a0264101460d0020032802d422450d01200110390c010b200341f0046a41186a2205200241186a290000370300200341f0046a41106a2206200241106a290000370300200341f0046a41086a220b200241086a290000370300200320022900003703f004024020032802d422450d00200110390b200341a0266a41186a2005290300370300200341a0266a41106a2006290300370300200341a0266a41086a200b290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d010b200341e8016a200341c8316a41e9dabdf30610bd02200320032903e8013702e43c200341e9dabdf3063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220120032802d8221085040240024020032d00a0264101460d0020032802d422450d01200110390c010b200341f0046a41186a2205200241186a290000370300200341f0046a41106a2206200241106a290000370300200341f0046a41086a220b200241086a290000370300200320022900003703f004024020032802d422450d00200110390b200341a0266a41186a2005290300370300200341a0266a41106a2006290300370300200341a0266a41086a200b290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d010b200341e0016a200341c8316a41f0c2c98b0610bd02200320032903e0013702e43c200341f0c2c98b063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220120032802d8221085040240024020032d00a0264101460d0020032802d422450d01200110390c010b200341f0046a41186a2205200241186a290000370300200341f0046a41106a2206200241106a290000370300200341f0046a41086a220b200241086a290000370300200320022900003703f004024020032802d422450d00200110390b200341a0266a41186a2005290300370300200341a0266a41106a2006290300370300200341a0266a41086a200b290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d010b200341d8016a200341c8316a41e1e69df30610bd02200320032903d8013702e43c200341e1e69df3063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220120032802d8221085040240024020032d00a0264101460d0020032802d422450d01200110390c010b200341f0046a41186a2205200241186a290000370300200341f0046a41106a2206200241106a290000370300200341f0046a41086a220b200241086a290000370300200320022900003703f004024020032802d422450d00200110390b200341a0266a41186a2005290300370300200341a0266a41106a2006290300370300200341a0266a41086a200b290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d010b200341d0016a200341c8316a41e1ea91cb0610bd02200320032903d0013702e43c200341e1ea91cb063602e03c200341d0226a200341e03c6a10d804200341a0266a20032802d022220b20032802d8221085040240024020032d00a0264101460d0020032802d422450d01200b10390c010b200341f0046a41186a2201200241186a290000370300200341f0046a41106a2205200241106a290000370300200341f0046a41086a2206200241086a290000370300200320022900003703f004024020032802d422450d00200b10390b200341a0266a41186a2001290300370300200341a0266a41106a2005290300370300200341a0266a41086a2006290300370300200320032903f0043703a026200341a0266a20034190396a412010d70b0d010b200341a8c0006a410172210d416821020340200341c8016a200341c8316a20024198e3c0006a280000220110bd0220032802cc01210520032802c80121060240024020032d00a8404101470d00200341c0016a200d200110bd0220032802c001210b0240200520032802c401220c470d002006200b200510d70b450d020b2003200c3602a8262003200b3602a426200320013602a026200341e03c6a200341a0266a10d80420032802e03c220b20032802e83c10e00120032802e43c450d00200b10390b200320053602a826200320063602a426200320013602a026200341e03c6a200341a0266a10d80420032802e03c2101200320032802e83c3602a426200320013602a02620034190396a200341a0266a10da0420032802e43c450d00200110390b200241046a22020d000b200341e03c6a20034190396a10d60420032802e83c210d20032802e03c210c200341003602a826200342013703a026200341a0266a41004120107720032802a426210120032802a026220220032802a82622066a220520032903c831370000200541086a200341c8316a41086a290300370000200541106a200341c8316a41106a290300370000200541186a200341c8316a41186a2903003700002003200641206a22063602a826200341c8316a41206a21050240200120066b411f4b0d00200341a0266a20064120107720032802a426210120032802a026210220032802a82621060b200220066a220b2005290000370000200b41186a200541186a290000370000200b41106a200541106a290000370000200b41086a200541086a2900003700002003200641206a22063602a82620034188326a21050240200120066b411f4b0d00200341a0266a20064120107720032802a426210120032802a026210220032802a82621060b200220066a220b2005290000370000200b41186a200541186a290000370000200b41106a200541106a290000370000200b41086a200541086a2900003700002003200641206a22063602a826200341a8326a21050240200120066b411f4b0d00200341a0266a20064120107720032802a426210120032802a026210220032802a82621060b200220066a220b2005290000370000200b41186a200541186a290000370000200b41106a200541106a290000370000200b41086a200541086a2900003700002003200641206a22063602a826200341c8326a21050240200120066b411f4b0d00200341a0266a20064120107720032802a426210120032802a026210220032802a82621060b200220066a220b2005290000370000200b41186a200541186a290000370000200b41106a200541106a290000370000200b41086a200541086a2900003700002003200641206a22063602a826200341e8326a21050240200120066b411f4b0d00200341a0266a20064120107720032802a426210120032802a026210220032802a82621060b200220066a220b2005290000370000200b41186a200541186a290000370000200b41106a200541106a290000370000200b41086a200541086a290000370000200c200d2002200641206a10e90102402001450d00200210390b024020032802e43c450d00200c10390b024020032d00a8400d00200341d8176a10db041a0b02402009450d00200710390b20004200370308200020032800f01e360019200041186a41003a00002000411c6a200341f31e6a280000360000200042003703000c1d0b4280808080d001210441de9ec5002101410221020b2001ad2108410321010b02402009450d00200710390b200020023a0022200041083a002120004200370308200041206a20013a0000200041186a41003a0000200020044280808080f00383200884370024200042013703000c1a0b200341a0266a200141086a41d80010d40b1a200341a8c0006a41206a200241206a290200370300200341a8c0006a41186a200241186a290200370300200341a8c0006a41106a200241106a290200370300200341a8c0006a41086a200241086a290200370300200320022902003703a8402000200341a0266a200341a8c0006a10dc040c190b2001410c6a2802002105200141086a280200210920022d0001210c20022d0000210620012802042107200228022422022002280200417f6a22013602000240024020060d00024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b4102210b200c41ff01714102470d042005410b490d014103210b4102210d41c684c800210e410d210c0c050b4102210b20010d032002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d03200210390c030b20034188056a2201420037030020034180056a220d4200370300200341f0046a41086a22024200370300200342003703f004200341d0046a41e9e5c000410a10cb012002200341d0046a41086a2206290000370300200320032900d0043703f004200341e0046a419889c800410c10cb012001200341e0046a41086a220c290000370300200d20032900e0043703000240200341f0046a10dd04220e41ff01714102460d004103210b200e4101710d030b20014200370300200d420037030020024200370300200342003703f004200341d0046a41e9e5c000410a10cb0120022006290000370300200320032900d0043703f004200341e0046a419889c800410c10cb01200d41086a220b200c290000370000200d20032900e004370000200341013a00e004200341f0046a4120200341e0046a410110e90120014200370300200d420037030020024200370300200342003703f004200341d0046a41c7e5c000410610cb0120022006290000370300200320032900d0043703f004200341e0046a419081c400410610cb01200b200c290000370000200d20032900e00437000020034188016a200341f0046a412010ce03200328028c0141002003280288011b210620034188146a10de0402402003280290142201200328028c14470d0020034188146a200110890320032802901421010b2003280288142215200141c4006c6a220241003a0000200220032f019c263b000120022006360204200220032902a026370208200241036a2003419c266a41026a2d00003a0000200241106a200341a0266a41086a2216290200370200200241186a200341a0266a41106a2221290200370200200241206a200341a0266a41186a290200370200200241286a200341a0266a41206a290200370200200241306a200341a0266a41286a290200370200200241386a200341a0266a41306a290200370200200241c0006a200341a0266a41386a2802003602002003200141016a220e360290142007200541f0006c6a210f02400240024020050d00200721050c010b200341fe1e6a2118200341a8c0006a4101722111200341f0046a41186a21192007210503402005220241f0006a210520022802042212450d012002280200210b200320123602a4262003200b3602a0262016200241086a41e80010d40b1a20194200370300200341f0046a41106a221a4200370300200341f0046a41086a22174200370300200342003703f004200341d0046a41c7e5c000410610cb012017200341d0046a41086a2210290000370300200320032900d0043703f004200341e0046a419081c400410610cb01200d41086a2213200341e0046a41086a2214290000370000200d20032900e00437000020034180016a200341f0046a412010ce032003280280012102200328028401210120034190056a200341a0266a10df04410c210c02400240200b0d0041ba84c800210e4103210d0c010b0240200b2001410020021b22024d0d0041ae84c800210e4104210d0c010b200341d8176a200b417f6a10e004200341a8c0006a20032802d817220120032802e0171085040240024020032d00a8404101460d00200341c8316a41186a4200370300200341c8316a41106a4200370300200341c8316a41086a4200370300200342003703c8310c010b200341c8316a41186a201141186a290000370300200341c8316a41106a201141106a290000370300200341c8316a41086a201141086a290000370300200320112900003703c8310b024020032802dc17450d00200110390b0240200341c8316a2021412010d70b450d004112210c41e384c800210e4100210d0c010b0240200b20024f0d004108210c41f584c800210e4106210d0c010b02400240200e450d00200e41c4006c2101201521020340024020022d00004101470d0041012106200241016a20034190056a412010d70b450d030b200241c4006a2102200141bc7f6a22010d000b0b410021060b200341d8176a200b10e004200341a8c0006a20032802d817220220032802e0171085040240024020032d00a8404101460d00200341c8316a41186a4200370300200341c8316a41106a4200370300200341c8316a41086a4200370300200342003703c8310c010b200341c8316a41186a201141186a290000370300200341c8316a41106a201141106a290000370300200341c8316a41086a201141086a290000370300200320112900003703c8310b024020032802dc17450d00200210390b02402006200341c8316a20034190056a412010d70b4572450d004114210c419a84c800210e4105210d0c010b2018200329029039370100201841086a20034190396a41086a290200370100201841106a20034190396a41106a2f01003b0100200341a81b6a41086a2201200341f01e6a41086a290300370300200341a81b6a41106a2206200341f01e6a41106a290300370300200341a81b6a41186a220b200341f01e6a41186a290300370300200320032903f01e3703a81b200341c8316a200341a0266a10df0441c80010382202450d04200210d4042002413c6a4200370000200241346a42003700002002412c6a420037000020024200370024200241013602442002410236022020034282808080203702ac40200320023602a840200341a8c0006a10e10420194200370300201a420037030020174200370300200342003703f004200341d0046a41b69fc500410710cb0120172010290000370300200320032900d0043703f004200341e0046a41d091c600410c10cb0120132014290000370000200d20032900e004370000200341f8006a200341f0046a412010ce03200328027c21022003280278210c200341a8c0006a41186a4200370300200341a8c0006a41106a4200370300200341a8c0006a41086a4200370300200342003703a84020024100200c1b200341a8c0006a10e204200341e03c6a41086a220c200341c8316a41086a290300370300200341e03c6a41106a2217200341c8316a41106a290300370300200341e03c6a41186a2212200341c8316a41186a290300370300200341d0226a41086a221a2001290300370300200341d0226a41106a22012006290300370300200341d0226a41186a2206200b290300370300200320032903c8313703e03c200320032903a81b3703d0220240200e200328028c14470d0020034188146a200e1089032003280288142115200328029014210e0b2015200e41c4006c6a220241013a0000200220032903e03c370001200241096a200c290300370000200241116a2017290300370000200241196a2012290300370000200241003a0021200220032903d0223700222002413a6a2006290300370000200241326a20012903003700002002412a6a201a290300370000200320032802901441016a220e3602901420032802a4262106024020032802ac262202450d00200241246c21012006210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b024020032802a8262202450d00200241246c450d00200610390b2005200f470d010c030b0b20032d00f51e2106024020032802ac262202450d00200241246c21012012210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b024020032802a8262202450d00200241246c450d00201210390b0240200f2005460d00034002402005220b410c6a2802002201450d00200b2802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200b41f0006a21050240200b41086a2802002202450d00200241246c450d00200b28020410390b2005200f470d000b0b02402009450d00200941f0006c450d00200710390b0240200328028c142202450d00200241c4006c450d0020032802881410390b4103210b0c070b200f2005460d000340024020052206410c6a2802002201450d0020062802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200641f0006a21050240200641086a2802002202450d00200241246c450d00200628020410390b2005200f470d000b0b02402009450d00200941f0006c450d00200710390b20034188056a420037030020034180056a4200370300200341f0046a41086a22024200370300200342003703f004200341d0046a41e9e5c000410a10cb012002200341d0046a41086a290000370300200320032900d0043703f004200341e0046a41a088c800410610cb01200d41086a200341e0046a41086a290000370000200d20032900e004370000200e41c4006c41046a2202417f4c0d0120032802881421010240024020020d00410121050c010b200210382205450d010b200341003602a826200320023602a426200320053602a026200341a0266a200e10ac022001200e200341a0266a10b402200341f0046a412020032802a02620032802a82610e901024020032802a426450d0020032802a02610390b0240200328028c142202450d00200241c4006c450d00200110390b20004200370308200020032800a810360019200041186a41003a00002000411c6a200341ab106a280000360000200042003703000c180b1032000b1034000b4101210d41d384c800210e4110210c2005450d010b2007200541f0006c6a2106200721020340024020022205410c6a2802002201450d0020052802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200541f0006a21020240200541086a2802002201450d00200141246c450d00200528020410390b20022006470d000b0b02402009450d00200941f0006c450d00200710390b0b200020063a00232000200d3a0022200041053a002120004200370308200041206a200b3a0000200041186a41003a0000200041246a200cad422086200ead84370200200042013703000c120b200141186a21052001410d6a2106200141c8006a290300211b200141c0006a290300210a200141146a2802002107200141106a280200210b2001410c6a2d00002109200141386a2903002108200141306a29030021040240024002400240024002400240024002400240200141086a280200417f6a0e0400010203000b41022101200341d0226a41026a200641026a2d00003a000020034190056a41086a200541086a29020037030020034190056a41106a200541106a290200370300200320062f00003b01d0222003200529020037039005200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341b1c0006a290000370300200341e03c6a41106a200341b9c0006a290000370300200341e03c6a41186a200341c1c0006a290000370300200320032900a9403703e03c41012102024002400240024020032d00a8404101460d00200341c8316a41186a200341e03c6a41186a290300370300200341c8316a41106a200341e03c6a41106a290300370300200341c8316a41086a200341e03c6a41086a290300370300200320032903e03c3703c83102400240024020090e03000201020b200341d8176a41026a200341d0226a41026a2d00003a0000200341a8c0006a41086a20034190056a41086a290300370300200341a8c0006a410d6a20034190056a410d6a290000370000200320032f01d0223b01d81720032003290390053703a840410021020c010b2007450d00200b10390b20034183056a200341a8c0006a41086a290300370000200341f0046a41186a200341b5c0006a290000370000200320032f01d8173b01f004200320073600f7042003200b3600f304200320032903a8403700fb042003200341da176a2d00003a00f204024020020d00200341a0266a41186a200341f0046a41186a290300370300200341a0266a41106a200341f0046a41106a290300370300200341a0266a41086a200341f0046a41086a290300370300200320032903f0043703a026200341a8c0006a200341c8316a200341a0266a20042008410110dc0320032d00a84022014108460d0420032902ac40210420032d00ab40210220032d00aa40210520032d00a94021060c030b410121010c010b20094102470d002007450d00200b10390b0b200041186a41003a0000200042003703082000200328009039360019200041246a2004370200200020023a0023200020053a0022200020063a0021200041206a20013a00002000411c6a20034193396a280000360000200042013703000c1b0b200041186a41003a000020004200370308200042003703000c1a0b41022101200341b8226a41026a200641026a2d00003a0000200341d0226a41086a200541086a290200370300200341d0226a41106a200541106a290200370300200320062f00003b01b822200320052902003703d022200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a02602400240200341a0266a10cb030d004101210202400240024020090e03000201020b200341a8c0006a41026a200341b8226a41026a2d00003a0000200341a0266a41086a200341d0226a41086a290300370300200341a0266a410d6a200341d0226a410d6a290000370000200320032f01b8223b01a840200320032903d0223703a026410021020c010b2007450d00200b10390b200341f33c6a200341a0266a41086a290300370000200341e03c6a41186a2201200341ad266a290000370000200320032f01a8403b01e03c200320073600e73c2003200b3600e33c200320032903a0263700eb3c2003200341aac0006a2d00003a00e23c20020d0120034190396a41186a200129030037030020034190396a41106a200341e03c6a41106a29030037030020034190396a41086a200341e03c6a41086a290300370300200320032903e03c37039039200341a8c0006a20034190396a10df03200341a0266a20032802a840220520032802b04010e003201b20087c200a20047c221c200a54ad7c502102201c4280c8afa025542101420021264200212742002120420021284200211d4200211c4200211f4200211e024020032903a0264201520d00200341a0266a41106a290300211e200341c0266a290300211c200341b8266a290300211d200341d0266a2903002128200341c8266a2903002120200341e0266a2903002127200341d8266a290300212620032903a826211f0b2001410020021b2101024020032802ac40450d00200510390b4200200820011b21084200200420011b21040240201f2020201d8484201e2028201c848484500d00200341d8176a21020c080b200341d8176a210220262027844200520d07200341e0316a4200370300200341d8316a4200370300200341d0316a4200370300200342003703c8314100210641012105200341d8176a21024200211f4200211e4200211d4200211c0c080b20094102470d082007450d08200b10390c080b410121010c070b200141e0006a290300211c200141d8006a290300211e200141d0006a290300211d2008a7210c2004422088a7210d200341d0226a41026a200641026a2d00003a0000200341c8316a41086a200541086a290200370300200341c8316a41106a200541106a290200370300200320062f00003b01d022200320052902003703c831200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0262004a721014102210202400240200341a0266a10cb0322050d004101210202400240024020090e03000201020b20034190056a41026a200341d0226a41026a2d00003a0000200341a0266a41086a200341c8316a41086a290300370300200341a0266a410d6a200341c8316a410d6a290000370000200320032f01d0223b019005200320032903c8313703a026410021020c010b2007450d00200b10390b200341f33c6a200341a0266a41086a290300370000200341e03c6a41186a2206200341ad266a290000370000200320032f0190053b01e03c200320073600e73c2003200b3600e33c200320032903a0263700eb3c200320034192056a2d00003a00e23c024020020d002008422088a72107200341a8c0006a41186a2006290300370300200341a8c0006a41106a200341e03c6a41106a290300370300200341a8c0006a41086a200341e03c6a41086a290300370300200320032903e03c3703a8402004420888a7210241012106024002400240200141ff01710e03000201020b201da72105410021060c010b0240200c450d00200d10390b0b20034187056a201b3700002003200a3700ff04200320053a008f05200320073600fb042003200c3600f7042003200d3600f304200320023b01f004200320024110763a00f204024020060d00200341a0266a41186a200341f0046a41186a290300370300200341a0266a41106a200341f0046a41106a290300370300200341a0266a41086a200341f0046a41086a290300370300200320032903f0043703a02620034190056a200341a8c0006a200341a0266a201e201c410110dc0320032d00900522024108460d03200329029405210420032d009305210120032d009205210520032d00910521060c070b410121020c050b410121020b200141ff01714102470d02200c450d02200d10390c020b20032003280090393602d817200320034193396a2800003600db17200041186a41003a000020004200370308200020032802d8173600192000411c6a20032800db17360000200042003703000c180b41022101200341d0226a41026a200641026a2d00003a000020034190056a41086a200541086a29020037030020034190056a41106a200541106a290200370300200320062f00003b01d0222003200529020037039005200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341b1c0006a290000370300200341e03c6a41106a200341b9c0006a290000370300200341e03c6a41186a200341c1c0006a290000370300200320032900a9403703e03c41012102024002400240024020032d00a8404101460d00200341c8316a41186a200341e03c6a41186a290300370300200341c8316a41106a200341e03c6a41106a290300370300200341c8316a41086a200341e03c6a41086a290300370300200320032903e03c3703c83102400240024020090e03000201020b200341d8176a41026a200341d0226a41026a2d00003a0000200341a8c0006a41086a20034190056a41086a290300370300200341a8c0006a410d6a20034190056a410d6a290000370000200320032f01d0223b01d81720032003290390053703a840410021020c010b2007450d00200b10390b20034183056a200341a8c0006a41086a290300370000200341f0046a41186a200341b5c0006a290000370000200320032f01d8173b01f004200320073600f7042003200b3600f304200320032903a8403700fb042003200341da176a2d00003a00f204024020020d00200341a0266a41186a200341f0046a41186a290300370300200341a0266a41106a200341f0046a41106a290300370300200341a0266a41086a200341f0046a41086a290300370300200320032903f0043703a026200341a8c0006a200341c8316a200341a0266a20042008410010dc0320032d00a84022014108460d0420032902ac40210420032d00ab40210220032d00aa40210520032d00a94021060c030b410121010c010b20094102470d002007450d00200b10390b0b200041186a41003a0000200042003703082000200328009039360019200041246a2004370200200020023a0023200020053a0022200020063a0021200041206a20013a00002000411c6a20034193396a280000360000200042013703000c180b200041186a41003a000020004200370308200042003703000c170b20054101732009410247720d002007450d00200b10390b0b200041186a41003a000020004200370308200020032802d8173600192000411c6a20032800db17360000200041246a2004370200200020013a0023200020053a0022200020063a0021200041206a20023a0000200042013703000c140b200341d8176a41186a2027370300200320263703e817200320203703d817200320283703e017200341c8316a41186a200241186a290300370300200341c8316a41106a200241106a290300370300200341c8316a41086a200241086a290300370300200320022903003703c83141012106410021050b4200201b20011b211b4200200a20011b210a024002402004201f582008201e582008201e5122011b0d002004201f7d2008201e7d2004201f54ad7d10e3040c010b2004201f5a2008201e5a20011b0d002003201f20047d3703a0262003201e20087d201f200454ad7d3703a8262003200341a0266a3602900520034190056a10e4040b02400240200a201d58201b201c58201b201c5122011b0d00200a201d7d201b201c7d200a201d54ad7d10e3040c010b200a201d5a201b201c5a20011b0d002003201d200a7d3703a0262003201c201b7d201d200a54ad7d3703a8262003200341a0266a3602900520034190056a10e4040b4200211d2005ad211f02400240427f2004200a7c221c201c20045422012008201b7c2001ad7c221c200854201c2008511b22011b221e42ffc7afa02556427f201c20011b221c420052201c5022011b0d002004200a842008201b8484221d502109201d420052ad211d0c010b200341a0266a41186a200341c8316a41186a290300370300200341a0266a41106a200341c8316a41106a290300370300200341a0266a41086a200341c8316a41086a290300370300200320032903c8313703a026410121090b200220032903a026370300200241186a200341a0266a41186a290300370300200241106a200341a0266a41106a290300370300200241086a200341a0266a41086a290300370300200341f0c0006a201b370300200341e8c0006a200a370300200341e0c0006a2008370300200341d0c0006a201c370300200341c8c0006a220b201e370300200341a8c0006a41106a2008370300200320043703d840200320043703b0402003201d3703c0402003201f3703a8400240024002400240024002402005201e42ffc7afa02556201c42005220011b2207714101470d00200320034190396a3602a02620034190396a200341a0266a10e5040c010b024020064101732007720d00200320034190396a3602a02620034190396a200341a0266a10e60441ff017122054103460d0120050e03030102030b20062007724101470d020b20034190056a41186a200241186a29030037030020034190056a41106a200241106a29030037030020034190056a41086a200241086a290300370300200320022903003703900520034188146a20034190396a10df03200341a0266a2003280288142202200328029014220510e0030240024020032903a0264201510d00200341e03c6a41086a4200370300200342003703e03c0c010b200341e03c6a41086a200341f0266a2903003703002003200341e8266a2903003703e03c0b4200211d02400240201e42ffc7afa02556201c42005220011b0d00200341b8266a4200370300200341b0266a4200370300200341a8266a4200370300200342003703a0264200211b42002104420021080c010b200341a0266a41186a20034190056a41186a290300370300200341a0266a41106a20034190056a41106a290300370300200341a0266a41086a20034190056a41086a29030037030020032003290390053703a026200a211d0b200341c8316a41186a200341a0266a41186a2201290300220a370300200341c8316a41106a200341a0266a41106a2206290300221c370300200341c8316a41086a200341a0266a41086a2207290300221e370300200320032903a026221f3703c831200341c0266a201b3703002001201d37030020062008370300200341e0266a200a370300200341a0266a41386a201c370300200341d0266a201e370300200341a0266a41286a201f370300200341a0266a41c8006a20032903e03c370300200341f0266a200341e03c6a41086a290300370300200320043703a826200342013703a02620022005200710e7040240200328028c14450d00200210390b200341a8c0006a41106a2903002120200341a8c0006a41286a290300211c200341a8c0006a41386a2903002108200341a8c0006a41c8006a290300211b20032903b040212820032903c840211e20032903d840210420032903e840210a20032903a840211f20032903c040211d0c020b20090d022003200b3602a026200341a0266a10e404410421010c030b20042128200821200b0240201f4201520d00200341d8266a2020370300200341d0266a2028370300200341a9266a200329039039370000200341a0266a41086a41003a0000200341c1266a200341a8396a290300370000200341b9266a200341a0396a290300370000200341b1266a20034190396a41086a290300370000200341023a00a026200341a0266a10c9030b02400240201d50450d004200211d0c010b200341a0266a41186a20034190396a41186a290300370300200341a0266a41106a20034190396a41106a290300370300200341a0266a41086a20034190396a41086a29030037030020032003290390393703a0264201211d0b200341f0046a41186a200341a0266a41186a2202290300221f370300200341f0046a41106a200341a0266a41106a22012903002220370300200341f0046a41086a200341a0266a41086a22052903002228370300200320032903a02622263703f004200341d0266a2206201c370300200341c8266a2207201e3703002001202837030020022020370300200341c0266a201f3703002003201d3703a026200320263703a826200341a0266a10e804024020032903a026500d00200320073602a840200341a8c0006a10e4040b200341e8266a201b370300200341e0266a200a370300200341d8266a200837030020062004370300200341c1266a20034190396a41186a290300370000200341b9266a20034190396a41106a290300370000200341b1266a20034190396a41086a290300370000200341a9266a200329039039370000200541033a0000200341023a00a026200341a0266a10c903200320032800a8103602e00c2003200341a8106a41036a2800003600e30c200041186a41003a000020004200370308200020032802e00c3600192000411c6a20032800e30c360000200042003703000c130b410421010b200320032800a8103602e00c200320032900f01e3703a81b2003200341ab106a2800003600e30c2003200341f71e6a2900003700af1b200041186a41003a000020004200370308200020032802e00c3600192000411c6a20032800e30c360000200041206a20013a0000200020032903a81b370021200041286a20032900af1b370000200042013703000c110b2001410c6a2105200141056a2107200141286a2802002109200141086a2802002106024002400240024002400240024002400240024020012d0004417f6a0e050001020304000b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a2202200341b9c0006a290000370300200341f0046a41186a2201200341c1c0006a290000370300200320032900a9403703f0040240024020032d00a8404101460d00200341c8316a41186a2001290300370300200341c8316a41106a2002290300370300200341c8316a41086a2202200341f0046a41086a290300370300200320032903f0043703c83120034190396a200610e904200341a0266a2003280290392209200328029839220110ea04200320032800d1263602d8172003200341d4266a2800003600db170240024020032d00d0264102460d0020034190056a41086a41053602002003418bd9ca003602940520034183043b009105410321020c010b200341a8c0006a41186a2205200341c8316a41186a290300370300200341a8c0006a41106a2207200341c8316a41106a290300370300200341a8c0006a41086a2002290300370300200320032903c8313703a84020034190056a200341c8316a4280a094a58d1d420010d40320032d00900522024108470d00200341d4266a20032800db17360000200341c8266a2005290300370300200341c0266a200729030037030041082102200341a0266a41186a200341a8c0006a41086a290300370300200342003703a82620034280a094a58d1d3703a026200320032903a8403703b026200320032802d8173600d126200341003a00d02620092001200341a0266a10eb040b200329029405210420032d009305210120032d009205210520032d00910521070240200328029439450d00200910390b20024108470d01200341c8266a2006360200200341bd266a200341c8316a41186a290300370000200341b5266a200341d8316a290300370000200341ad266a200341c8316a41086a290300370000200320032903c8313700a526200341003a00a426200341013a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800e03c3600192000411c6a200341e33c6a280000360000200042003703000c1b0b410221020b200020013a0023200020053a0022200020073a002120004200370308200041246a2004370200200041206a20023a0000200041186a41003a0000200042013703000c190b2003419f056a200541086a290000370000200341a7056a200541106a290000370000200341af056a200541186a2d00003a00002003200636009305410221012003200741026a2d00003a009205200320072f00003b0190052003200529000037009705200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a2202200341b9c0006a290000370300200341f0046a41186a2205200341c1c0006a290000370300200320032900a9403703f004024002400240024020032d00a8404101460d00200341c8316a41186a2005290300370300200341c8316a41106a2002290300370300200341c8316a41086a200341f0046a41086a290300370300200320032903f0043703c831200341c8316a20034190056a412010d70b0d01420b21044180d9ca0021074103210541032102410321010c020b420021040c010b200341d8176a200910e904200341a0266a20032802d817220b20032802e017220c10ea04200341a8c0006a41086a200341a0266a41186a2202290300370300200341a8c0006a41106a2205200341c0266a290300370300200341a8c0006a41186a2206200341c8266a290300370300200320032903b0263703a840200320032800d1263602e03c2003200341d4266a2800003600e33c410321010240024020032d00d02622074102470d00420b21044190d9ca00210741002102410321050c010b200341a0266a41086a290300210820032903a026210a20022006290300370300200341a0266a41106a2005290300370300200341a0266a41086a200341a8c0006a41086a290300370300200320032903a8403703a0264101210202402007410171450d0042092104419bd9ca00210741042102410321050c010b0240200341a0266a200341c8316a412010d70b450d004208210441f0accc002107410321050c010b20034190396a200341c8316a20034190056a200a2008410110ec0420034190396a41086a290300211b02400240200328029039220d4101460d0020034190396a41106a290300211c200341a8c0006a41186a20034190056a41186a290300370300200341a8c0006a41106a20034190056a41106a290300370300200341a8c0006a41086a20034190056a41086a29030037030020032003290390053703a8404200210442002008201c7d200a201b54ad7d221c200a201b7d221b200a56201c200856201c2008511b22021b21084200201b20021b210a4100210e0c010b201b4220882104200328029439220141187621062001411076210220014108762105201ba721074102210e200141ff01714108470d010b200341d4266a20032800e33c360000200341c8266a200341a8c0006a41186a290300370300200341c0266a200341b8c0006a290300370300200341a0266a41186a200341b0c0006a2903003703002003200a3703a026200320032903a8403703b026200320032802e03c3600d1262003200e3a00d026200320083703a82602400240200d4101470d00200b200c10e0010c010b200b200c200341a0266a10eb040b410821010b024020032802dc17450d00200b10390b200141ff01714108460d010b200020063a0023200020023a0022200020053a0021200041206a20013a0000200041186a41003a000020004200370308200041246a20044220862007ad84370200200042013703000c190b200341c8266a2009360200200341bd266a20034190056a41186a290300370000200341b5266a200341a0056a290300370000200341ad266a20034190056a41086a29030037000020032003290390053700a526200341003a00a426200341013a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800d0223600192000411c6a200341d3226a280000360000200042003703000c180b200341a0266a41206a2201200241206a290200370300200341a0266a41186a2205200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a2202200341b9c0006a290000370300200341f0046a41186a2207200341c1c0006a290000370300200320032900a9403703f00420032d00a8404101460d02200341c8316a41186a2007290300370300200341c8316a41106a2002290300370300200341c8316a41086a200341f0046a41086a290300370300200320032903f0043703c83120034190056a200610e904200341a0266a2003280290052207200328029805220910ea04200341a8c0006a41086a22022005290300370300200341a8c0006a41106a2001290300370300200341a8c0006a41186a200341c8266a290300370300200320032903b0263703a840410321010240024020032d00d02622054102470d004280808080b00121044190d9ca00210941002105410021020c010b200341a0266a41086a220b290300210420032903a0262108200341a0266a41186a200341a8c0006a41186a290300370300200341a0266a41106a200341a8c0006a41106a290300370300200b2002290300370300200320032903a8403703a0264101210202402005410171450d00428080808090012104419bd9ca00210941042102410021050c010b0240200341a0266a200341c8316a412010d70b450d0042808080808001210441f0accc002109410021050c010b200341d8006a200341c8316a2008200410e5032007200910e0014200210441082101410121050b0240200328029405450d00200710390b02402005450d00200341a8266a2006360200200341013a00a426200341013a00a026200341a0266a10c903200041186a41003a00002000420037030820002003280090393600192000411c6a20034193396a280000360000200042003703000c180b20044280808080f001832009ad8421040c060b20012d00252101200341d0226a41026a200741026a2d00003a0000200341c8316a41086a200541086a290000370300200341c8316a41106a200541106a290000370300200341c8316a41186a200541186a2d00003a0000200320072f00003b01d022200320052900003703c831200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a0266a10cb030d0220034190056a200910e904200341a0266a2003280290052202200328029805220710ea04200341a8c0006a41086a220f200341bf266a2205290000370300200341a8c0006a41106a200341c7266a220b290000370300200341a8c0006a41186a200341cf266a220c2d00003a0000200320032f01b0263b01e03c2003200341b2266a220d2d00003a00e23c200320032900b7263703a840200320032800d126360290392003200341d4266a220e28000036009339024020032d00d0264102460d00200341a0266a41086a290300210420032903a026210820032800b3262111200341af266a200f290300370000200341b7266a200341b8c0006a2903003700002005200341c0c0006a2d00003a0000200320032d00e23c3a00a226200320032f01e03c3b01a026200320113600a326200320032903a8403700a726200341e8006a200341a0266a2008200410e5030b200341b7266a20032903c831370000200e200328009339360000200341b3266a2006360000200d200341d0226a41026a2d00003a00002005200341c8316a41086a290300370000200b200341d8316a290300370000200c200341e0316a2d00003a0000200342003703a826200342003703a026200320032f01d0223b01b02620032003280290393600d126200320013a00d02602400240200141ff01714102470d002002200710e0010c010b20022007200341a0266a10eb040b0240200328029405450d00200210390b200341ac266a20032903c831370200200341c8266a2009360200200341a0266a41086a2006360200200341b4266a200341c8316a41086a290300370200200341a0266a411c6a200341d8316a290300370200200341c4266a200341c8316a41186a2d00003a0000200320032f01d0223b00a526200341003a00a426200341013a00a0262003200341d2226a2d00003a00a726200341a0266a10c903200041186a41003a000020004200370308200020032800d8173600192000411c6a200341db176a280000360000200042003703000c160b200341a0266a41206a2201200241206a290200370300200341a0266a41186a2205200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341f0046a41086a200341b1c0006a290000370300200341f0046a41106a2202200341b9c0006a290000370300200341f0046a41186a2207200341c1c0006a290000370300200320032900a9403703f00420032d00a8404101460d0220034190056a41186a200729030037030020034190056a41106a200229030037030020034190056a41086a200341f0046a41086a290300370300200320032903f0043703900520034190396a200610e904200341a0266a2003280290392207200328029839220910ea04200341c8316a41086a22022005290300370300200341c8316a41106a2001290300370300200341c8316a41186a200341c8266a290300370300200320032903b0263703c831200320032800d1263602d8172003200341d4266a2800003600db17410321010240024020032d00d02622054102470d004280808080b00121044190d9ca00210941002105410021020c010b200341a0266a41086a290300210420032903a0262108200341a8c0006a41186a200341c8316a41186a290300370300200341a8c0006a41106a200341c8316a41106a290300370300200341a8c0006a41086a2002290300370300200320032903c8313703a8404101210202402005410171450d00428080808090012104419bd9ca00210941042102410021050c010b0240200341a8c0006a20034190056a412010d70b450d0042808080808001210441f0accc002109410021050c010b200341386a20034190056a2008200410ed04200341a0266a41186a2202200341386a41186a290300370300200320032903483703b026410821012003200341386a41086a2903003703a826200320032903383703a0262003200341a0266a3602d022200341d0226a10e404200341c8266a200341c8316a41186a290300370300200341a0266a41206a200341d8316a2903003703002002200341c8316a41086a290300370300200341d4266a20032800db1736000042002104200342003703a826200342003703a026200320032903c8313703b026200320032802d8173600d12641012105200341013a00d02620072009200341a0266a10eb040b0240200328029439450d00200710390b02402005450d00200341c8266a2006360200200341bd266a20034190056a41186a290300370000200341b5266a200341a0056a290300370000200341ad266a20034198056a29030037000020032003290390053700a526200341023a00a426200341013a00a026200341a0266a10c903200041186a41003a000020004200370308200020032800e03c3600192000411c6a200341e33c6a280000360000200042003703000c160b20044280808080f001832009ad8421040c030b410221010c030b200041186a41003a000020004200370308200041206a41023a0000200042013703000c130b410221010b200020023a0022200041033a002120004200370308200041246a2004370200200041206a20013a0000200041186a41003a0000200042013703000c110b200020023a0022200041033a002120004200370308200041246a2004370200200041206a20013a0000200041186a41003a0000200042013703000c100b200141086a290300210420022d0001210620022d00002101200228022422022002280200417f6a22053602000240024002400240024020010d00024020050d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200641ff01714102470d0120034188056a2205420037030020034180056a22024200370300200341f0046a41086a22014200370300200342003703f004200341d0046a41d1e5c000410910cb012001200341d0046a41086a2206290000370300200320032900d0043703f004200341e0046a41cdb8c300410910cb012005200341e0046a41086a2207290000370300200220032900e004370300200341f0046a412010e3010d03200542003703002002420037030020014200370300200342003703f004200341d0046a41d1e5c000410910cb0120012006290000370300200320032900d0043703f004200341e0046a41cab8c300410310cb01200241086a2007290000370000200220032900e004370000200341286a200341f0046a10ee0402402003280228450d0020032903302208500d00200842b8177c2004560d050b200341f0046a41186a2205420037030020034180056a22064200370300200341f0046a41086a22014200370300200342003703f004200341d0046a41d1e5c000410910cb012001200341d0046a41086a2207290000370300200320032900d0043703f004200341e0046a41cab8c300410310cb01200241086a2209200341e0046a41086a220b290000370000200220032900e004370000200320043703a026200341f0046a4120200341a0266a410810e901200542003703002006420037030020014200370300200342003703f004200341d0046a41d1e5c000410910cb0120012007290000370300200320032900d0043703f004200341e0046a41cdb8c300410910cb012009200b290000370000200220032900e004370000200341013a00e004200341f0046a4120200341e0046a410110e901200542003703002006420037030020014200370300200342003703f004200341d0046a41cde5c000410410cb0120012007290000370300200320032900d0043703f004200341e0046a41a4d4c700410b10cb012009200b290000370000200220032900e004370000200341186a200341f0046a10ee042003290320420020032802181b200442f02e80510d0241ecbcc70041274194bdc7001035000b20050d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c120b20004200370308200041186a41003a0000200042003703000c110b41afa1c100413041e0a1c1001035000b41f0a1c10041ce0041c0a2c1001035000b200141a8016a2112200141386a2119200141216a2106200241226a2f0100211a2002411a6a2901002104200241196a2d00002110200241186a2d00002113200241166a2f01002114200241156a2d00002115200241146a2d00002116200241126a2f01002121200241116a2d00002122200241106a2d000021232002410e6a2f010021242002410d6a2d000021252002410c6a2d000021292002410a6a2f0100212a200241096a2d0000212b200241086a2d0000212c200241066a2f0100212d200241056a2d0000212e200241046a2d0000212f200241026a2f01002130200141a4016a280200210d200141a0016a28020021092001419c016a2802002117200141346a280200210e200141306a280200210b2001412c6a2802002118200141286a2802002131200141206a2d000021322001411c6a2802002133200141186a280200210c200141146a2802002107200141106a28020021112001410c6a28020021342002280224210520022d0001210f20022d00002102024002400240200141086a280200417f6a0e03000102000b200320062800003602f01e2003200641036a2800003600f31e200341c8316a201941e40010d40b1a200341a8c0006a201241800110d40b1a200341a0266a41226a201a3b0100200341a0266a411a6a2004370100200341a0266a41196a20103a0000200341a0266a41186a20133a0000200341a0266a41166a20143b0100200341a0266a41156a20153a0000200341a0266a41146a20163a0000200341a0266a41126a20213b0100200341a0266a41116a20223a0000200341a0266a41106a20233a0000200341a0266a410e6a20243b0100200341a0266a410d6a20253a0000200341a0266a410c6a20293a0000200341a0266a410a6a202a3b0100200341a0266a41096a202b3a0000200341a0266a41086a202c3a0000200320053602c4262003202d3b01a6262003202e3a00a5262003202f3a00a426200320303b01a2262003200f3a00a126200320023a00a026200341d8176a200341a0266a10cc03200341e03c6a41086a200341d8176a41096a290000370300200341e03c6a41106a200341d8176a41116a290000370300200341e03c6a41186a200341d8176a41196a290000370300200320032900d9173703e03c0240024020032d00d8174101460d00200341d0226a41186a200341e03c6a41186a2903002204370300200341d0226a41106a200341e03c6a41106a2903002208370300200341d0226a41086a200341e03c6a41086a2202290300220a370300200320032903e03c221b3703d022200341f1176a2004370000200341e9176a2008370000200341e1176a200a3700002003201b3700d917200341013a00d817200341b4266a200e360200200341a0266a41106a200b360200200341a0266a410c6a2018360200200320323a00a026200320313602a826200320032802f01e3600a126200320032800f31e3600a426200341a0266a41186a200341c8316a41e40010d40b1a200341a4276a200d360200200341a0266a4180016a20093602002003419c276a2017360200200341a8276a200341a8c0006a41800110d40b1a200341e03c6a410c6a200c36020020022007360200200320333602f03c200320113602e43c200320343602e03c20034190056a200341d8176a200341a0266a200341e03c6a10ef0420032903900542015121050c010b200341a8056a41003a0000200341b0056a41023a0000200342003703980520034201370390050240200c450d00200c410c6c21012011210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d00201110390b0240200e450d00200e41246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200b450d00200b41246c450d00201810390b0240200d450d00200d41246c21012017210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b410121052009450d00200941246c450d00201710390b20034190396a41086a210220034190056a41086a210102402005450d0020022001290300370300200241206a2205200141206a290300370300200241186a2206200141186a290300370300200241106a2207200141106a290300370300200241086a2209200141086a290300370300200041286a2005290300370300200041206a2006290300370300200041186a2007290300370300200041106a200929030037030020002002290300370308200042013703000c110b20022001290300370300200241106a2205200141106a290300370300200241086a2206200141086a290300370300200041186a2005290300370300200041106a200629030037030020002002290300370308200042003703000c100b200320062800003602d0222003200641036a2800003600d322200341c8316a201941e40010d40b1a200341a8c0006a201241800110d40b1a20052005280200417f6a2201360200024002400240200241ff01710d00024020010d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200f41ff01714102470d01200341d8176a41017210d404200341013a00d817200341b4266a200e360200200341b0266a200b360200200341a0266a410c6a2018360200200320323a00a026200320032802d0223600a126200320032800d3223600a426200320313602a826200341b8266a200341c8316a41e40010d40b1a200341a4276a200d360200200341a0266a4180016a20093602002003419c276a2017360200200341a8276a200341a8c0006a41800110d40b1a200341e03c6a410c6a200c360200200341e83c6a2007360200200320333602f03c200320113602e43c200320343602e03c20034190056a200341d8176a200341a0266a200341e03c6a10ef0420032903900542015121050c020b20010d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22022002280200417f6a220236020020020d00200510390b200341a8056a41003a0000200341b0056a41023a0000200342003703980520034201370390050240200c450d00200c410c6c21012011210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b02402007450d002007410c6c450d00201110390b0240200e450d00200e41246c21012018210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200b450d00200b41246c450d00201810390b0240200d450d00200d41246c21012017210203400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b410121052009450d00200941246c450d00201710390b20034190396a41086a210220034190056a41086a210102402005450d0020022001290300370300200241206a2205200141206a290300370300200241186a2206200141186a290300370300200241106a2207200141106a290300370300200241086a2209200141086a290300370300200041286a2005290300370300200041206a2006290300370300200041186a2007290300370300200041106a200929030037030020002002290300370308200042013703000c100b20022001290300370300200241106a2205200141106a290300370300200241086a2206200141086a290300370300200041186a2005290300370300200041106a200629030037030020002002290300370308200042003703000c0f0b200341a0266a41226a201a3b0100200341a0266a411a6a2004370100200341a0266a41196a20103a0000200341a0266a41186a20133a0000200341a0266a41166a20143b0100200341a0266a41156a20153a0000200341a0266a41146a20163a0000200341a0266a41126a20213b0100200341a0266a41116a20223a0000200341a0266a41106a20233a0000200341a0266a410e6a20243b0100200341a0266a410d6a20253a0000200341a0266a410c6a20293a0000200341a0266a410a6a202a3b0100200341a0266a41096a202b3a0000200341a0266a41086a202c3a0000200320053602c4262003202d3b01a6262003202e3a00a5262003202f3a00a426200320303b01a2262003200f3a00a126200320023a00a0260240200341a0266a10cb030d00200341f0046a41186a2202420037030020034180056a22014200370300200341f0046a41086a22054200370300200342003703f004200341d0046a41cde5c000410410cb012005200341d0046a41086a290000370300200320032900d0043703f004200341e0046a41b8d5c700411810cb012002200341e0046a41086a290000370300200120032900e004370300200341003602a826200342013703a026200341a0266a41004101107720032802a026220220032802a82622016a41013a00002003200141016a22013602a826024020032802a42620016b41074b0d00200341a0266a20014108107720032802a026210220032802a82621010b200220016a2007ad4220862011ad843700002003200141086a22013602a8262033ad422086200cad842104024020032802a42620016b41074b0d00200341a0266a20014108107720032802a026210220032802a82621010b200220016a20043700002003200141086a22013602a826024002400240024020320e03000102030b024020032802a4262001470d00200341a0266a20014101107720032802a026210220032802a82621010b200220016a41003a0000200141016a21010c020b200341013a00e0040240024020032802a4262001460d00410121050c010b200341a0266a20014101107720032802a026210220032d00e004210520032802a82621010b200220016a20053a0000200141016a21010c010b024020032802a4262001470d00200341a0266a20014101107720032802a026210220032802a82621010b200220016a41023a0000200141016a21010b200341f0046a41202002200110e901024020032802a426450d00200210390b200041186a41003a000020004200370308200020032800a8403600192000411c6a200341abc0006a280000360000200042003703000c0f0b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c0e0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026200341a8c0006a200341a0266a10cc03200341e03c6a41086a200341a8c0006a41096a290000370300200341e03c6a41106a200341a8c0006a41116a290000370300200341e03c6a41186a2202200341a8c0006a41196a290000370300200320032900a9403703e03c024020032d00a8404101460d00200341d0226a41186a22012002290300370300200341d0226a41106a2202200341e03c6a41106a290300370300200341d0226a41086a2209200341e03c6a41086a290300370300200320032903e03c3703d022200341f0046a20052007109f01200341a8c0006a41186a200341f0046a41186a2903002204370300200341a8c0006a41106a200341f0046a41106a2903002208370300200341a8c0006a41086a200341f0046a41086a290300220a370300200320032903f004221b3703a840200341c1266a2001290300370000200341a0266a41196a2002290300370000200341a0266a41116a2009290300370000200341a0266a41096a20032903d022370000200341c9266a201b370000200341d1266a200a370000200341d9266a2008370000200341e1266a2004370000200341a0266a41086a41053a0000200341003a00a026200341a0266a10c90302402006450d00200510390b20004200370308200020032800c831360019200041186a41003a00002000411c6a200341cb316a280000360000200042003703000c0e0b02402006450d00200510390b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c0d0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d002005200710e10102402006450d00200510390b20004200370308200020032800a840360019200041186a41003a00002000411c6a200341abc0006a280000360000200042003703000c0d0b02402006450d00200510390b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c0c0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb0322090d0002402007450d0020052007410c6c6a21012005210203402002280200200241086a28020010e0012002410c6a22022001470d000b2007450d002007410c6c21012005210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b2006450d022006410c6c0d010c020b02402007450d002007410c6c21012005210203400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b2006450d012006410c6c450d010b200510390b02402009450d0020004200370308200041206a41023a0000200041186a41003a0000200042013703000c0c0b20004200370308200020032800a840360019200041186a41003a00002000411c6a200341abc0006a280000360000200042003703000c0b0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a026024002400240200341a0266a10cb0322090d0002402007450d002005200741186c6a21012005210203402002280200200241086a2802002002410c6a280200200241146a28020010e901200241186a22022001470d000b2007450d00200741186c21012005210203400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b2006450d02200641186c0d010c020b02402007450d00200741186c21012005210203400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b2006450d01200641186c450d010b200510390b02402009450d0020004200370308200041206a41023a0000200041186a41003a0000200042013703000c0b0b20004200370308200020032800a840360019200041186a41003a00002000411c6a200341abc0006a280000360000200042003703000c0a0b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d000240024020054101460d00418bc0c300410d10e0010c010b200341003602a826200342013703a026200341a0266a41004104107720032802a026220120032802a82622026a20063600002003200241046a22023602a826024020032802a426220920026b41034b0d00200341a0266a20024104107720032802a426210920032802a026210120032802a82621020b200120026a2007360000418bc0c300410d2001200241046a10e9012009450d00200110390b200341ac266a2007360200200341a8266a2006360200200320053602a426200341043a00a026200341a0266a10c302200041186a41003a000020004200370308200042003703000c0a0b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c090b200341a0266a41206a200241206a290200370300200341a0266a41186a200241186a290200370300200341a0266a41106a200241106a290200370300200341a0266a41086a200241086a290200370300200320022902003703a0260240200341a0266a10cb030d0041d0a2c00041052005200710e90102402006450d00200510390b200341a8266a41023a0000200341003a00a026200341a0266a10c903200041186a41003a000020004200370308200042003703000c090b02402006450d00200510390b20004200370308200041206a41023a0000200041186a41003a0000200042013703000c080b20032802ac402207450d002007410c6c450d0020032802a84010390b200b450d00200e10390b2009450d00200c10390b2001450d00200210390b4280808080d003210441bfd4c3002102410221010b20044280808080f003832002ad842104410321020b02402006450d00200510390b20032003280090393602d817200320034193396a2800003600db17200041186a41003a000020004200370308200020032802d8173600192000411c6a20032800db17360000200041246a2004370200200020013a0022200041003a0021200041206a20023a0000200042013703000c010b200341c8316a108b03200341e00c6a108d0220002004370024200020023a0022200041e3003a0021200041206a20013a0000200041186a41003a000020004200370308200042013703000b200341b0cb006a24000bb70a03067f037e067f230041a0036b22022400200141226a2f01002103200141196a2800002104200141156a2800002105200141116a2800002106200141106a2d000021072001411d6a3500002108200141216a3100002109200141046a290200210a2001280224210b2001280200210c20022001410c6a280200220d360298032002200a3703900320082009422086842108200c410876210e02400240024002400240200c41ff01710d00200c411076210d200aa7210c20022902940321090240200e41ff01714101460d002002200c36029003200d410874200e41ff017172210e200220093702940320074118742009422888a77221072009422088a7210d200842808080f8ff1f83421888a72101200229039003210a2008a721034100210c0c020b410710382201450d04200141036a41002800c3e540360000200141002800c0e540360000200220073a008a03200220094230883d0188032002200636008b03200228028803210e200b200b280200417f6a220f3602002009a7411074200c4110767221072005411076210320064108762110200a420888210a2009421088a721060240200f0d00200b280208200b28020c2802001102000240200b28020c280204450d00200b28020810390b200b41046a220f200f280200417f6a220f360200200f0d00200b10390b200842ffffffffff1f832109200aa7210b200c411874200d41087472410272210c2005ad4218862010ad8421084201210a0c020b200220083c008c0320022008a74108763b008d0320022004ad3e0288032007411874200d4108767221072003411074200842808080f8ff1f83421888a772210120022f018c0320022d008e034110747221030b200241226a20014110763b0100200241196a2004360000200241156a2005360000200241116a2006360000200241106a20074118763a0000200241216a2001410876ad3c00002002410c6a2007410874200d41ff0171723602002002411d6a2001411874ad2003ad42ffffff0783843e00002002200b3602242002200a3702042002200e410874200c41ff0171220c72360200411010382201450d02200141cce0c00036020c2001410136020820014281808080103702000240024002400240200c0d0020014100360200200128020c280204210c20022d0001450d030240200c450d00200128020810390b200141046a220c200c280200417f6a220c360200200c450d010c020b200141003602000240200128020c280204450d00200128020810390b200141046a220c200c280200417f6a220c360200200c0d010b200110390b200b200b280200417f6a22013602004209210a20010d02200b280208200b28020c2802001102000240200b28020c280204450d00200b28020810390b200b41046a22012001280200417f6a220136020020010d02200b10390c020b0240200c450d00200128020810390b200141046a220c200c280200417f6a220c3602000240200c0d00200110390b200b200b280200417f6a2201360200024020010d00200b280208200b28020c2802001102000240200b28020c280204450d00200b28020810390b200b41046a22012001280200417f6a220136020020010d00200b10390b4200210a0b20004287808080f0003702342000410136022c20002009370224200020033b011e2000200b3a000c2000200c3602082000411d6a20084220883c0000200041196a20083e0000200041306a2001360200200041206a2004360200200041156a200e360000200041116a20063600002000410d6a2007360000200041c0006a200241880310d40b1a0b2000200a370300200241a0036a24000f0b1032000bff0703027f017e027f230041c0076b220224000240024002400240024002400240024002400240024002400240024020012d00000e0b0102030405060708090a00010b200241106a200141086a10b40341e80310382203450d0b200241d8036a200141046a28020010c6032003200241d8036a41e80310d40b2101200041086a200241106a41c80310d40b1a2000410a3a0000200041046a20013602000c0a0b200241106a200141046a10b303200241d8036a200141106a10c909200041003a00002000410c6a200241106a41086a280200360200200041046a2002290310370200200041106a20022903d803370200200041186a200241d8036a41086a2802003602000c090b200241106a200141046a10b303200241d8036a200141106a10c909200041013a00002000410c6a200241106a41086a280200360200200041046a2002290310370200200041106a20022903d803370200200041186a200241d8036a41086a2802003602000c080b200241106a200141046a10b303200241d8036a200141106a10c909200041023a00002000410c6a200241106a41086a280200360200200041046a2002290310370200200041106a20022903d803370200200041186a200241d8036a41086a2802003602000c070b200141106a2903002104200241d8036a200141046a10b303200041106a2004370300200041033a0000200041046a20022903d8033702002000410c6a200241e0036a2802003602000c060b200241106a200141046a10b303200241d8036a200141106a10b4032000410c6a200241186a280200360200200041046a2002290310370200200041106a200241d8036a41c80310d40b1a200041043a00000c050b2002200141046a10b303200241d8036a200141206a10b403200241106a200141106a10c9092000410c6a200241086a280200360200200041046a2002290300370200200041206a200241d8036a41c80310d40b1a200041053a0000200041186a200241106a41086a280200360200200041106a20022903103702000c040b2001410c6a2802002203417f4c0d05200141046a2802002105200141186a290300210420012d000121010240024020030d00410121060c010b200310382206450d050b20062005200310d40b2105200041186a2004370300200020013a0001200041106a41003a00002000410c6a2003360200200041086a2003360200200041046a2005360200200041063a00000c030b200041073a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000c020b200041083a0000200041046a200141046a2802003602000c010b200041093a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000b200241c0076a24000f0b1032000b1034000bbe0a060f7f017e037f047e157f017e230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d0020004102360290010c010b200328020c2102024002400240200341106a28020022044104490d002004417c7122054104460d0020054108460d002005410c460d0020054110460d0020054114460d0020054118460d002005411c460d0020054120460d0020054124460d0020054128460d00200441546a4108490d0020054134460d0020054138460d002005413c460d002004417071220641c000460d00200641d000460d00200541e000460d00200541e400460d00200541e800460d00200541ec00460d00200541f000460d00200541f400460d00200541f800460d00200541fc00460d002005418001460d002005418401460d002005418801460d002005418c01460d002004419001460d00200128000021072001280004210820012800082109200128000c210a2001280010210b2001280014210c2001280018210d200128001c210e2001280020210f2001280024211020012800282111200129002c21122001280034211320012800382114200128003c2115200141c8006a290000211620012900402117200141d8006a2900002118200129005021192001280060211a2001280064211b2001280068211c200128006c211d2001280070211e2001280074211f20012800782120200128007c2121200128008001212220012800840121232001280088012124200128008c012125200441ef7e6a210620014191016a2126410021050240024020012d0090010e020100020b20064104490d01200441eb7e6a210620014195016a21262001280091012127410121050b2006450d002006417f6a2104202641016a2128410021290240024020262d00000e020100020b20044104490d012006417b6a2104202641056a21282026280001212a410121290b20044104490d002004417c7122044104460d0020044108460d002004410c460d0020044110460d0020044114460d0020282800002106202828000421262028280008212b202828000c212c2028280010212d2028280014212e200441686a220441084b0d01410120047441910271450d010b2003420037021c20034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d1010240200328021c450d00200328021810390b410221050c010b2028290018212f20282800202104200041106a201637030020002017370308200041206a201837030020002019370318200020073602282000200836022c200020093602302000200a3602342000200b3602382000200c36023c2000200d3602402000200e3602442000200f3602482000201036024c2000201136025020002013360254200020143602582000201536025c2000201a3602602000201b3602642000201c3602682000201d36026c2000201e3602702000201f360274200020203602782000202136027c2000202236028001200020233602840120002024360288012000202536028c01200020273602940120004198016a20293602002000419c016a202a360200200041a0016a2006360200200041a4016a2026360200200041a8016a202b360200200041ac016a202c360200200041b0016a202d360200200041b4016a202e360200200041c0016a2004360200200041b8016a202f370200200020123703000b20002005360290012002450d00200110390b200341d0006a24000bb90b02077f017e230041b0016b220324000240024002400240200241086a2204280200220520004d0d00200241046a280200450d01200228020010390c010b200341086a410c6a20042802003602002003200229020037020c20034180016a22024200370300200341f8006a22044200370300200341e8006a41086a2206420037030020034200370368200341286a41c7e5c000410610cb012006200341286a41086a220729000037030020032003290028370368200341286a419081c400410610cb0120022007290000370300200420032900283703002003200341e8006a412010ce0320032003280204410020032802001b2208360208200341c8006a418b8ac800410310cb01200341286a41a88cc800411910cb01200320013602ac012003200341ac016a410410cc01370318200341e8006a410c6a200341ac016a41046a3602002003200341186a41086a36026c2003200341ac016a3602702003200341186a360268200341d8006a200341e8006a1083012003280260220741206a2202417f4c0d010240024020020d00410121040c010b200210382204450d030b4100210620034100360220200320043602182003200236021c02402002410f4b0d00200341186a410041101077200328021c210220032802182104200328022021060b200420066a22092003290048370000200941086a200341c8006a41086a2900003700002003200641106a22063602200240200220066b410f4b0d00200341186a200641101077200328021c210220032802182104200328022021060b200420066a22092003290028370000200941086a200341286a41086a2900003700002003200641106a2206360220200328025821090240200220066b20074f0d00200341186a20062007107720032802182104200328022021060b200420066a2009200710d40b1a2003200620076a22023602200240200328025c450d00200328025810390b200341e8006a2003280218220420021085040240024020032d00684101460d00200341c0006a4200370300200341386a4200370300200341306a4200370300200342003703280c010b200341c0006a20034181016a290000370300200341386a200341f9006a290000370300200341306a200341f1006a290000370300200320032900693703280b2003418c016a200341086a41047210eb0920034184016a200341c0006a2206290300370200200341fc006a200341386a2207290300370200200341f4006a200341306a2209290300370200200320083602682003200329032837026c200341286a200341e8006a10ec0920034181016a2006290300370000200341f9006a2007290300370000200341f1006a200929030037000020032003290328370069200341013a00682003200341e8006a41017236024820042002200341c8006a10a6060240200328021c450d00200410390b200341c8006a200110ff07200341e8006a200328024822072003280250220810f20802400240200328026822040d002003420037022c41002101200341002802d8974e2204360228410021020c010b200329026c210a200320043602282003200a37022c200a422088a72102200aa721010b200341e8006a41086a2206200341086a41086a29030037030020032003290308370368024020022001470d00200341286a200110fd0220032802282104200328023021020b200420024104746a22042003290368370200200441086a2006290300370200200341286a41086a200241016a22023602002006200236020020032003290328220a37036802400240200aa722060d002007200810e0010c010b20072008200341e8006a1084090240200341e8006a41086a2802002202450d0020024104742104200641086a2102034002402002280200450d002002417c6a28020010390b200241106a2102200441706a22040d000b0b200328026c41ffffffff0071450d00200610390b200328024c450d00200710390b200341b0016a2400200520004b0f0b1034000b1032000b9d0c010c7f230041900c6b22012400200141d00b6a22024200370300200141c80b6a22034200370300200141b80b6a41086a22044200370300200142003703b80b200141d80b6a41c7e5c000410610cb012004200141d80b6a41086a2205290000370300200120012900d80b3703b80b200141d80b6a419081c400410610cb0120022005290000370300200320012900d80b370300200141106a200141b80b6a412010ce03024002402001280210450d002001280214450d00200141d00b6a22064200370300200141c80b6a22074200370300200141b80b6a41086a22024200370300200142003703b80b200141d80b6a41c7e5c000410610cb012002200141d80b6a41086a2204290000370300200120012900d80b3703b80b200141d80b6a41f484c400410e10cb01200341086a22082004290000370000200320012900d80b370000200141203602ec0b2001200141b80b6a3602e80b200141800c6a200141b80b6a412010e4010240024020012802800c22090d00410321050c010b20012802840c210a024002400240200141800c6a41086a280200220b450d00410121050240024020092d00000e03000401020b200b417f6a4104490d012009280001210c410021050c030b410221050c010b200142003702dc0b20014100280284ee4d3602d80b2001410d3602f40b2001200141e80b6a3602f00b2001200141d80b6a3602fc0b2001412c6a41013602002001420137021c200141949fc5003602182001200141f00b6a360228200141fc0b6a41b4dfc400200141186a103b1a20012802d80b20012802e00b10d101024020012802dc0b450d0020012802d80b10390b410321050b0b200a450d00200910390b200141186a200041880b10d40b1a200141ac0b6a4200370200200141a40b6a200c36020020014102200520054103461b3602a00b200141013602a80b200642003703002007420037030020024200370300200142003703b80b200141d80b6a41c7e5c000410610cb0120022004290000370300200120012900d80b3703b80b200141d80b6a41b482c400410a10cb0120082004290000370000200320012900d80b370000200141086a200141b80b6a412010ce030240200128020c410020012802081b220041016a22042000490d00200141d00b6a22054200370300200141c80b6a220c4200370300200141b80b6a41086a22004200370300200142003703b80b200141d80b6a41c7e5c000410610cb012000200141d80b6a41086a2202290000370300200120012900d80b3703b80b200141d80b6a41b482c400410a10cb01200341086a22062002290000370000200320012900d80b370000200120043602d80b200141b80b6a4120200141d80b6a410410e90120054200370300200c420037030020004200370300200142003703b80b200141d80b6a41c7e5c000410610cb0120002002290000370300200120012900d80b3703b80b200141d80b6a41f081c400410610cb0120062002290000370000200320012900d80b370000200141003602880c200142013703800c024002400240024020012802a00b0e03000102030b200141800c6a41004101107720012802800c20012802880c22036a41003a00002001200341016a22033602880c20012802a40b2100024020012802840c20036b41034b0d00200141800c6a20034104107720012802880c21030b20012802800c20036a20003600002001200341046a3602880c0c020b200141800c6a41004101107720012802800c20012802880c22036a41013a00002001200341016a3602880c0c010b200141800c6a41004101107720012802800c20012802880c22036a41023a00002001200341016a3602880c0b200141186a200141800c6a108c0320012802a80b2103200141800c6a20012802b00b220010ac0202402000450d002000410574210003402003200141800c6a10b502200341206a2103200041606a22000d000b0b200141d80b6a41086a200141800c6a41086a280200360200200120012903800c3703d80b200141b80b6a4120200141d80b6a10de01200141186a10f60620012802ac0b41ffffff3f71450d0220012802a80b10390c020b200141186a10f60620012802ac0b41ffffff3f71450d0120012802a80b10390c010b200010f6060b200141900c6a24000bf40502017f067e23004190176b22052400200541880c6a200241e00710d40b1a200541c0006a200541880c6a10c409200541306a200541c0006a10b5030240024002402005280230450d0020004202370300200041153602080c010b20052903382106200541206a200541c0006a10b60302402005290320a7450d0020004202370300200041153602080c010b0240200620052903287c220720065a0d0020004202370300200041013602080c010b024020072003580d002000411136020820004202370300200041106a20073703000c010b200541a0086a200141c80310d40b1a200541880c6a200541c0006a41e00710d40b1a200541880c6a10eb0a200541a0086a108d02200541106a4200420010d408200529031021032005200541106a41086a29030022063703900c200520033703880c0240024020032006844200520d002005200541880c6a3602a008200541a0086a10e4040c010b200541a0086a10d404200541880c6a10d4042005200541880c6a2003200610e20602400240200320052903002208582006200541086a290300220958200620095122011b0d00200541f80b6a200620097d2003200854ad7d370300200542013703e80b2005200320087d3703f00b2005200541f00b6a3602840c200541840c6a10e4040c010b200541f80b6a200920067d2008200354ad7d220a3703002005200820037d220b3703f00b20052008200356200920065620011bad4201863703e80b2008200358200920065820011b0d00200b200a10e3040b200541c00c6a2006370300200541b80c6a2003370300200541a90c6a200541b8086a290300370000200541a10c6a200541b0086a290300370000200541990c6a200541a0086a41086a290300370000200541910c6a20052903a008370000200541880c6a41086a41043a0000200541023a00880c200541880c6a10c9030b200041106a4216370300200041186a200541880c6a41b00710d40b1a20004201370300200020073703080c010b200541c0006a10eb0a2001108d020b20054190176a24000bc60101037f200028022422012001280200417f6a220236020020002d0001210302400240024020002d000022000d0020020d022001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a22023602002002450d010c020b20020d012001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d010b200110390b200320007241ff01714100470bee0403017f017e137f200128022421020240024020012d00000d002001411a6a2901002103200141196a2d00002104200141186a2d00002105200141166a2f01002106200141156a2d00002107200141146a2d00002108200141126a2f01002109200141116a2d0000210a200141106a2d0000210b2001410e6a2f0100210c2001410d6a2d0000210d2001410c6a2d0000210e2001410a6a2f0100210f200141096a2d00002110200141086a2d00002111200141066a2f01002112200141056a2d00002113200141046a2d00002114200141026a2f0100211520012d0001210120022002280200417f6a2216360200024020160d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22162016280200417f6a221636020020160d00200210390b0240200141ff01714101460d00200041013a00000f0b200020153b0001200041196a2003370000200041186a20043a0000200041176a20053a0000200041156a20063b0000200041146a20073a0000200041136a20083a0000200041116a20093b0000200041106a200a3a00002000410f6a200b3a00002000410d6a200c3b00002000410c6a200d3a00002000410b6a200e3a0000200041096a200f3b0000200041086a20103a0000200041076a20113a0000200041056a20123b0000200041046a20133a0000200041036a20143a0000200041003a00000c010b200041013a000020022002280200417f6a220136020020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390f0b0b8e0401037f41112102419cc5c30021034100210402400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff0171417f6a0e17160102030405060708090a0b0c0d0e0f10111213141500160b41a0c9c3002103411621040c150b4119210241b8c5c3002103410121040c140b411b210241dcc5c3002103410221040c130b411821024180c6c3002103410321040c120b410f210241a0c6c3002103410421040c110b41b8c6c3002103410521040c100b4108210241d4c6c3002103410621040c0f0b4114210241e4c6c3002103410721040c0e0b410d210241b4aecc002103410821040c0d0b410b21024188c7c3002103410921040c0c0b41162102419cc7c3002103410a21040c0b0b410d21024190b7cc002103410b21040c0a0b410c210441acadcc002103410c21020c090b410b210241ccc7c3002103410d21040c080b4110210241e0c7c3002103410e21040c070b4110210241f8c7c3002103410f21040c060b410c21024190c8c3002103411021040c050b410f210241a4c8c3002103411121040c040b4112210441bcc8c3002103411221020c030b4112210241d8c8c3002103411321040c020b4110210241f4c8c3002103411421040c010b410c2102418cc9c3002103411521040b2000418380013b0100200041086a2002360200200041046a2003360200200041026a20043a00000b890201037f230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b2003420037021c4100210120034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d1010240200328021c450d00200328021810390b0b2005450d00200410390b2000200236020420002001360200200341d0006a24000be60301067f230041d0006b22022400200241086a41fde7c000410910cb01200241186a41f0c0c400410510cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41e3c0cc00410910cb01200241186a41ecc0cc00410510cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bfb0c03077f027e037f230041f0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041023a00300c010b200328020c210402400240200341106a2802002202450d00200320012d00003a004c2003410136024820024101460d00200320012d00013a004d2003410236024820024102460d00200320012d00023a004e2003410336024820024103460d00200320012d00033a004f2003410436024820024104460d00200341d0006a20012d00043a00002003410536024820024105460d00200341d1006a20012d00053a00002003410636024820024106460d00200341d2006a20012d00063a00002003410736024820024107460d00200341d3006a20012d00073a00002003410836024820024108460d00200341d4006a20012d00083a00002003410936024820024109460d00200341d5006a20012d00093a00002003410a3602482002410a460d00200341d6006a20012d000a3a00002003410b3602482002410b460d00200341d7006a20012d000b3a00002003410c3602482002410c460d00200341d8006a20012d000c3a00002003410d3602482002410d460d00200341d9006a20012d000d3a00002003410e3602482002410e460d00200341da006a20012d000e3a00002003410f3602482002410f460d00200341db006a20012d000f3a00002003411036024820024110460d00200341dc006a20012d00103a00002003411136024820024111460d00200341dd006a20012d00113a00002003411236024820024112460d00200341de006a20012d00123a00002003411336024820024113460d00200341df006a20012d00133a00002003411436024820024114460d00200341e0006a20012d00143a00002003411536024820024115460d00200341e1006a20012d00153a00002003411636024820024116460d00200341e2006a20012d00163a00002003411736024820024117460d00200341e3006a20012d00173a00002003411836024820024118460d00200341e4006a20012d00183a00002003411936024820024119460d00200341e5006a20012d00193a00002003411a3602482002411a460d00200341e6006a20012d001a3a00002003411b3602482002411b460d00200341e7006a20012d001b3a00002003411c3602482002411c460d00200341e8006a20012d001c3a00002003411d3602482002411d460d00200341e9006a20012d001d3a00002003411e3602482002411e460d00200341ea006a20012d001e3a00002003411f3602482002411f460d00200341eb006a20012d001f3a0000200341386a41026a200341d5006a2d00003a0000200341ec006a41026a200341dc006a2d00003a0000200320032f014c3b0128200320032d004e3a002a2003200341d3006a2f00003b01382003200341da006a2f01003b016c200341d6006a2801002105200341dd006a2800002106200341e4006a280200210720034120360248200341c8006a41206a2802002108200328004f2109200341c4006a41026a200341e3006a2d00003a00002003200341e1006a2f00003b0144200241606a22024110490d0020024110460d00200141286a290000210a2001290020210b410021020240024020012d00300e020100020b410121020b2003411c6a41026a220c200341386a41026a2d00003a0000200341186a41026a220d200341ec006a41026a2d00003a0000200341146a41026a220e200341c4006a41026a2d00003a0000200320032d002a3a0022200320032f01283b0120200320032f01383b011c200320032f016c3b0118200320032f01443b01142000200a3703082000200b37030020002009360013200020032f01203b0110200041126a20032d00223a00002000200536001a200020032f011c3b0017200041196a200c2d00003a000020002006360021200020032f01183b001e200041206a200d2d00003a0000200020032f01143b0025200041276a200e2d00003a00002000200836002c20002007360028200041346a200341cb006a280000360000200020032800483600310c010b2003420037022c20034100280284ee4d3602282003410d36023c200320033602382003200341286a36026c200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341ec006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b410221020b200020023a00302004450d00200110390b200341f0006a24000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41e89ac300410e10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bb70201027f230041d0006b220224002002200136020420022000360200200241086a2000200110e40102400240200228020822010d00410721000c010b200228020c210302400240200241106a280200450d004100210002400240024002400240024020012d00000e0707000102030405060b410121000c060b410221000c050b410321000c040b410421000c030b410521000c020b410621000c010b2002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b410721000b2003450d00200110390b200241d0006a240020000ba31305017f017e017f077e067f230041e00c6b22042400420021050240024020022003844200520d00200041083a00000c010b200441c8006a200110df03200441d8016a20042802482206200428025010e0034200210742002108420021094200210a4200210b4200210c4200210d024020042903d8014201520d00200441e8016a290300210d200441f8016a290300210b200441f0016a290300210a20044188026a290300210920044180026a290300210820044198026a290300210720044190026a290300210520042903e001210c0b0240200428024c450d00200610390b024002400240200c2008200a8484200d2009200b848484500d00200441286a21060c010b200441286a210620052007844200520d00200441d0016a4200370300200441c8016a4200370300200441c0016a4200370300200442003703b8014100210e4101210f200441286a21064200210c4200210d4200210a4200210b0c010b200441286a41186a2007370300200420053703382004200837032820042009370330200441b8016a41186a200641186a290300370300200441b8016a41106a200641106a290300370300200441b8016a41086a200641086a290300370300200420062903003703b8014101210e4100210f0b4104211041032111024002400240200c20027d2208200c56200d20037d200c200254ad7d220c200d56200c200d511b450d0041b8c9ca00ad210241800421064280808080b002210c0c010b0240200a20027c2209200a542212200b20037c2012ad7c220d200b54200d200b511b450d00410021064101211041072111420021024200210c0c010b200441f8006a200110df03200441d8016a2004280278221320042802800110e00320044188026a290300420020042903d80142015122121b210b20044180026a290300420020121b210a0240200428027c450d00201310390b0240200a200856200b200c56200b200c511b450d004198c9ca00ad210241800221064280808080d002210c0c010b42002105200fad210702400240427f200820097c220b200b2008542211200c200d7c2011ad7c220b200c54200b200c511b22111b220a42ffc7afa02556427f200b20111b220b420052200b5022111b0d002008200984200c200d848422055021122005420052ad21050c010b200441d8016a41186a200441b8016a41186a290300370300200441d8016a41106a200441b8016a41106a290300370300200441d8016a41086a200441b8016a41086a290300370300200420042903b8013703d801410121120b200620042903d801370300200641186a200441d8016a41186a290300370300200641106a200441d8016a41106a290300370300200641086a200441d8016a41086a290300370300200441f0006a200b370300200441e8006a2213200a370300200441c8006a41106a200c370300200420083703502004200537036020042007370348024002400240024002400240200f200a42ffc7afa02556200b42005220111b221071450d00200420013602d8012001200441d8016a10e5040c010b0240200e4101732010720d00200420013602d8012001200441d8016a10e60441ff017122104103460d0120100e03020103020b200e2010724101470d010b200441f8006a41186a200641186a290300370300200441f8006a41106a200641106a290300370300200441f8006a41086a200641086a2903003703002004200629030037037820044198016a200110df03200441d8016a200428029801220620042802a001221010e0030240024020042903d8014201510d00200441a8016a41086a4200370300200442003703a8010c010b200441a8016a41086a200441a8026a2903003703002004200441a0026a2903003703a8010b4200210502400240200a42ffc7afa02556200b42005220111b0d00200441f0016a4200370300200441e8016a4200370300200441e0016a4200370300200442003703d8014200210d420021084200210c0c010b200441d8016a41186a200441f8006a41186a290300370300200441d8016a41106a200441f8006a41106a290300370300200441d8016a41086a200441f8006a41086a290300370300200420042903783703d801200921050b200441b8016a41186a200441d8016a41186a2211290300220b370300200441b8016a41106a200441d8016a41106a220f290300220a370300200441b8016a41086a200441d8016a41086a220e2903002209370300200420042903d80122073703b801200441f8016a200d37030020112005370300200f200c37030020044198026a200b37030020044190026a200a37030020044188026a2009370300200441d8016a41286a2007370300200441a0026a20042903a801370300200441a8026a200441a8016a41086a290300370300200420083703e001200442013703d80120062010200e10e7040240200428029c01450d00200610390b200441c8006a41106a290300210c200441c8006a41286a290300210b200429035021082004290368210a20042903482107200429036021050b024020074201520d0020044190026a200c37030020044188026a2008370300200441e1016a2001290000370000200441d8016a41086a41003a0000200441f9016a200141186a290000370000200441f1016a200141106a290000370000200441e9016a200141086a290000370000200441023a00d801200441d8016a10c9030b200550450d014200210c0c020b4104211141002106024020120d00200420133602d801200441d8016a10e4040b0c030b200441d8016a41186a200141186a290000370300200441d8016a41106a200141106a290000370300200441d8016a41086a200141086a290000370300200420012900003703d8014201210c0b200441086a41186a200441d8016a41186a2206290300220d370300200441086a41106a200441d8016a41106a22112903002208370300200441086a41086a200441d8016a41086a22102903002209370300200420042903d801220537030820044188026a220f200b37030020044180026a220e200a3703002011200937030020062008370300200441f8016a200d3703002004200c3703d801200420053703e001200441d8016a10e804024020042903d801500d002004200e360248200441c8006a10e4040b20044190026a2003370300200f2002370300201041053a0000200441f9016a200141186a290000370000200441f1016a200141106a290000370000200441e9016a200141086a290000370000200441e1016a2001290000370000200441023a00d801200441d8016a10c903200041083a00000c020b200c2002842102200620107221060b200041036a41003a0000200020063b0001200041046a2002370200200020113a00000b200441e00c6a24000b910802057f027e200041c8006a21020240200141046a2203280200200141086a220428020022056b411f4b0d002001200541201077200428020021050b200128020020056a22062002290000370000200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a2900003700002004200541206a360200200041e8006a200110ea02200041086a29030021072000290300210802402003280200200428020022026b410f4b0d002001200241101077200141086a28020021020b200128020020026a2206200737000820062008370000200141086a2206200241106a2202360200200041186a2903002107200029031021080240200141046a220528020020026b410f4b0d002001200241101077200628020021020b200128020020026a22042007370008200420083700002006200241106a2202360200200028023021060240200528020020026b41034b0d002001200241041077200141086a28020021020b200128020020026a2006360000200141086a2205200241046a2206360200200041286a2903002107200029032021080240200141046a28020020066b410f4b0d002001200641101077200528020021060b2005200641106a2202360200200128020020066a2206200737000820062008370000024002400240024020002802340e03000102030b0240200141046a2802002002470d002001200241011077200141086a28020021020b200128020020026a41003a0000200141086a200241016a22023602000c020b0240200141046a22052802002002470d002001200241011077200141086a28020021020b200128020020026a41013a0000200141086a2206200241016a2202360200200028023821040240200528020020026b41034b0d002001200241041077200628020021020b200128020020026a20043600002006200241046a22023602000c010b0240200141046a22052802002002470d002001200241011077200141086a28020021020b200128020020026a41023a0000200141086a2206200241016a2202360200200028023821040240200528020020026b41034b0d002001200241041077200628020021020b200128020020026a20043600002006200241046a22023602000b200028023c21060240200141046a220528020020026b41034b0d002001200241041077200141086a28020021020b200128020020026a2006360000200141086a2206200241046a2202360200200028024021040240200528020020026b41034b0d002001200241041077200628020021020b200128020020026a20043600002006200241046a2202360200200028024421000240200141046a28020020026b41034b0d002001200241041077200141086a28020021020b200128020020026a2000360000200141086a200241046a3602000bae0301047f23004180016b220124002001200010d003200141c8006a200128020022002001280208220210d10341022103024020012d007822044102460d00200141186a41286a200141c8006a41286a290300370300200141186a41206a200141c8006a41206a290300370300200141186a41186a200141c8006a41186a290300370300200141186a41106a200141c8006a41106a290300370300200141186a41086a200141c8006a41086a29030037030020012001290348370318200120012800793602102001200141fc006a280000360013410121030b200141fc006a2001280013360000200141c8006a41286a200141186a41286a290300370300200141c8006a41206a200141186a41206a290300370300200141c8006a41186a200141186a41186a290300370300200141c8006a41106a200141186a41106a290300370300200141c8006a41086a200141186a41086a2903003703002001200129031837034820012001280210360079200120033a00780240024020044102470d002000200210e0010c010b20002002200141c8006a10fb030b02402001280204450d00200010390b20014180016a24000bb00e070b7f027e017f027e017f027e0d7f230041c0016b22022400200241186a200110cf032002280218210320022002280220220136022c20022003360228200241306a2003200110e40102400240200228023022040d00410321050c010b200241386a28020021062002280234210720024198016a410472210541002101417f2108024002400240034020062001460d01200520016a200420016a22092d00003a00002002200141016a220a360298012002200620086a3602542002200941016a3602502008417f6a2108200a2101200a4120470d000b200241086a41026a200241a5016a2d00003a0000200241e8006a41026a200241ac016a2d00003a0000200220022f019c013b0158200220022d009e013a005a2002200241a3016a2f00003b01082002200241aa016a2f01003b016820024198016a41206a22052802002109200241b4016a2802002106200241ad016a280000210a200241a6016a2801002108200228009f012101200241e4006a41026a200241b3016a2d00003a00002002200241b1016a2f00003b016420024198016a200241d0006a10930520022d0098014104460d00200241f0006a41206a20052f01003b0100200241f0006a41186a20024198016a41186a290300370300200241f0006a41106a20024198016a41106a290300370300200241f0006a41086a20024198016a41086a29030037030020022002290398013703702002280254220b4110490d00200b4170714110460d002002280250220c41086a290000210d200c290000210e2002200c41206a220f3602502002200b41606a220536025420054104490d00200b415c6a4110490d00200b4134460d00200c41186a2900002110200c2900102111200f2800002112200c412c6a2900002113200c2900242114200b414b6a2115200c41356a211641002105024002400240200c2d00340e03020001030b20154104490d022002200b41476a22153602542002200c41396a2216360250200c280035210f410121050c010b20154104490d012002200b41476a22153602542002200c41396a2216360250200c280035210f410221050b20154104490d002015417c71220b4104460d00200b4108470d010b2002420037027420024100280284ee4d3602702002410d36025c2002200241286a3602582002200241f0006a360208200241ac016a41013602002002420137029c01200241949fc500360298012002200241d8006a3602a801200241086a41b4dfc40020024198016a103b1a2002280270200228027810d10102402002280274450d00200228027010390b410321050c010b200241c4006a41026a2217200241086a41026a2d00003a0000200241c0006a41026a2218200241e8006a41026a2d00003a0000200220022f01583b0148200220022d005a3a004a200220022f01083b0144200220022f01683b01402002201541746a36025420022016410c6a3602502016280008210b2016280004210c201628000021152002413c6a41026a2216200241e4006a41026a22192d00003a000020024198016a41206a221a200241f0006a41206a221b2f01003b010020024198016a41186a221c200241f0006a41186a221d29030037030020024198016a41106a221e200241f0006a41106a221f29030037030020024198016a41086a2220200241f0006a41086a2221290300370300200220022f01643b013c2002200229037037039801200220022d004a3a006a200220022f01483b0168201920172d00003a0000200220022f01443b0164200241146a41026a20182d00003a0000200220022f01403b0114200241106a41026a20162d00003a0000200220022f013c3b0110201b201a2f01003b0100201d201c290300370300201f201e290300370300202120202903003703002002200229039801370370200241086a41046a200241d8006a41046a2f01003b0100200220022801583602080b2007450d00200410390b200041286a201337030020002014370320200041186a2010370300200020113703102000200d3703082000200e370300200041ca006a20022d006a3a0000200041c8006a20022f01683b0100200041e8006a2002290370370300200041cb006a2001360000200041c4006a200b360200200041c0006a200c3602002000413c6a20153602002000200f3602382000200536023420002012360230200041f0006a200241f8006a290300370300200041f8006a20024180016a29030037030020004180016a200241f0006a41186a29030037030020004188016a20024190016a2f01003b0100200020083600522000200a360059200041e0006a2006360000200041e4006a2009360000200041d1006a200241e4006a41026a2d00003a0000200020022f01643b004f200020022f01143b0056200041d8006a200241146a41026a2d00003a0000200020022f01103b005d200041df006a200241106a41026a2d00003a00002000200228020836018a012000418e016a2002410c6a2f01003b01000240200228021c450d00200310390b200241c0016a24000bc70201037f230041c0006b220324000240410410382204450d00200441edde91e3063600002003200436022820034284808080c00037022c200341286a41044108107720032802282205200328023022046a20012900003700002003200441086a22043602300240200328022c20046b41034b0d00200341286a20044104107720032802282105200328023021040b200520046a2002360000200328022821052003200441046a36023c200320053602382003200341386a10ee070240200328022c450d00200510390b0240024020032d00004101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700000b200341c0006a24000f0b1032000b900507027f017e037f037e017f017e027f230041c0006b22032400200341206a200110f303200320032802202204200328022810f40320032902044200200328020022011b210541002802e8c848210602402003280224450d00200410390b2001200620011b21072005a72108024002402005422088a741386c2201450d00024002402007290300427f7c22054201580d00420021094200210a0c010b02402005a70e020002000b200741306a29030021052007290328210b200341206a41186a200741206a290000370300200341206a41106a200741186a290000370300200341286a200741106a2900003703002003200729000837032042002005200341206a2002412010d70b22061b210a4200200b20061b21090b0240200720016a220c200741386a460d00200741e0006a21060340200641586a2201290300210d200341186a2204200141206a290300370300200341106a220e200141186a290300370300200341086a220f200141106a2903003703002003200141086a2903003703004200210b420021050240200d427f7c220d4201560d000240200da70e020003000b200641086a29030021052006290300210b200341206a41186a2004290300370300200341206a41106a200e290300370300200341206a41086a200f2903003703002003200329030037032042002005200341206a2002412010d70b22041b21054200200b20041b210b0b200a2005200b2009542005200a542005200a511b22041b210a2009200b20041b2109200641386a2106200141386a200c470d000b0b2008450d01200841386c450d01200710390c010b4200210902402008450d004200210a200841386c450d0120071039420021090b4200210a0b200020093703002000200a370308200341c0006a24000b840504047f027e027f017e23004180016b2203240002400240412010382204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000200341086a200210e2032003412036021c20032004360218200320032802102201360224200320032802082202360220200341286a200220012004412010c70102400240200328022822050d00410021010c010b200328022c210602400240200341286a41086a28020022014110490d002003200141706a36023c2003200541106a360238200541086a2900002107200529000021082003200341386a10c10120032802000d00200328023c20032802042209490d002009417f4c0d040240024020090d00410121010c010b200910382201450d0420014100200910d60b1a0b20012003280238220a200910d40b1a2003200a20096a3602382009ad220b422086200b84210b0c010b200342003702444100210120034100280284ee4d360240200341dc006a410d3602002003410d3602542003200341186a3602582003200341206a3602502003200341c0006a360264200341fc006a41023602002003420237026c200341a4dfc4003602682003200341d0006a360278200341e4006a41b4dfc400200341e8006a103b1a2003280240200328024810d10102402003280244450d00200328024010390b0b2006450d00200510390b0240024020010d002000420037030820004200370300200041146a420037020020004100280284ee4d3602100c010b200020083703002000200136021020002007370308200041146a200b3702000b0240200328020c450d00200210390b2004103920034180016a24000f0b1032000b1034000bf70201017f23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10bc0121000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a20012002200441206a10c40121000c010b200420012002109f01200441206a200041016a200410be014100210020042d00200d00200441c8006a41206a200441206a41216a2d00003a0000200441e0006a200441396a290000370300200441d8006a200441316a290000370300200441d0006a200441296a29000037030020042004290021370348200441f0006a200441c8006a4121109f01200441f0006a2003412010d70b4521000b20044190016a240020000bd93406027f087e087f027e027f027e230041f0106b220624000240024002402003200484500d0020012002412010d70b0d010b200041083a00000c010b20064188026a200210df03200641e8056a200628028802220720062802900210e00342002108420021094200210a4200210b4200210c4200210d4200210e4200210f024020062903e8054201520d00200641f8056a290300210920064188066a290300210b20064180066a290300210a20064198066a290300210d20064190066a290300210c200641a8066a290300210f200641a0066a290300210e20062903f00521080b0240200628028c02450d00200710390b0240024002402008200c200a84842009200d200b848484500d00200641c8016a21070c010b200641c8016a2107200e200f8450450d00410021100c010b20064180026a200f370300200641f0016a200d370300200641e0016a200b3703002006200e3703f8012006200c3703e8012006200a3703d801200620083703c801200620093703d001410121100b0240024020100d00200641c8036a4200370300200641c0036a4200370300200641b8036a4200370300200641b0036a4200370300200641a8036a4200370300200641a0036a420037030020064198036a420037030020064200370390030c010b20064190036a41386a200741386a29030037030020064190036a41306a200741306a29030037030020064190036a41286a200741286a29030037030020064190036a41206a200741206a29030037030020064190036a41186a200741186a29030037030020064190036a41106a200741106a29030037030020064190036a41086a200741086a29030037030020062007290300370390030b200620064190036a3602d40320064198056a200110df03200641e8056a200628029805221120062802a00510e0034200210e4200210f4200210c4200210d4200210a4200210b4200210842002109024020062903e8054201520d00200641f8056a290300210920064188066a290300210b20064180066a290300210a20064198066a290300210d20064190066a290300210c200641a8066a290300210f200641a0066a290300210e20062903f00521080b0240200628029c05450d00201110390b02400240024002402008200c200a84842009200d200b848484500d00200641f8036a2111200641d8036a21120c010b200e200f844200510d01200641f8036a2111200641d8036a21120b20064190046a200f37030020064180046a200d370300200641d8036a41186a200b3703002006200e370388042006200c3703f8032006200a3703e803200620083703d803200620093703e00320064198056a41186a201141186a29030037030020064198056a41106a201141106a29030037030020064198056a41086a201141086a290300370300200620112903003703980541012113410021140c010b200641b0056a4200370300200641a8056a4200370300200641a0056a420037030020064200370398054100211341012114200641d8036a21124200210a4200210b42002108420021090b418008211541032111024002400240024002400240200820037d220d200856200920047d2008200354ad7d220820095620082009511b450d0041b8c9ca00ad21084180800821054280808080b00221090c010b024020062802d4032216290300220920037c220e2009542217201641086a290300220c20047c2017ad7c2209200c542009200c511b450d004100210541800221154107211142002108420021090c010b2016200e370300201620093703080240427f200e20162903107c220c200c200e5422172009201641186a2903007c2017ad7c220c200954200c2009511b22161b4280c8afa025544100427f200c20161b501b450d0041d4c9ca00ad21084180800c21054280808080a00221090c010b200641c8046a200110df03200641e8056a20062802c804221720062802d00410e00320064198066a290300420020062903e80542015122161b210920064190066a290300420020161b210c024020062802cc04450d00201710390b0240200c200d56200920085620092008511b450d004198c9ca00ad21084180800421054280808080d00221090c010b024002400240024002402005450d00200641c8046a200110df03200641e8056a20062802c804221620062802d00410e00320062802b406210520062903e8052109024020062802cc04450d00201610390b20094201520d012005450d010b427f200d200a7c22092009200d5422052008200b7c2005ad7c220920085420092008511b22051b22184280c8afa025544100427f200920051b2219501b2216450d0141f0c9ca00ad21084180801021054280808080900121090c040b427f200d200a7c22092009200d5422112008200b7c2011ad7c220920085420092008511b22111b22184280c8afa025544100427f200920111b22195022111b21162014ad210c0240201842ffc7afa02556201942005220111b450d0020064198056a2105200641e8056a21110c020b200d200a842008200b8484220950211a2009420052ad2109200641e8056a21110c020b2014ad210c20064198056a2105200641e8056a21110b20112005290300370300201141186a200541186a290300370300201141106a200541106a290300370300201141086a200541086a290300370300420021094101211a0b2012200a3703102012200d370300201241186a200b3703002012200837030820122011290300370320201241286a201141086a290300370300201241306a201141106a290300370300201241386a201141186a29030037030020064198046a41106a200837030020064198046a41286a2019370300200641b8046a221b20183703002006200d3703a004200620093703b0042006200c37039804024002400240024020142016410173221771450d00200620013602e8052001200641e8056a10e5040c010b024020132016714101470d00200620013602e8052001200641e8056a10e60441ff017122114103460d0120110e03020103020b41002115410021114100210520132017724101470d050b200641c8046a41386a201241386a290300370300200641c8046a41306a201241306a290300370300200641c8046a41286a201241286a290300370300200641c8046a41206a201241206a290300370300200641c8046a41186a201241186a290300370300200641c8046a41106a201241106a290300370300200641c8046a41086a201241086a290300370300200620122903003703c80420064188056a200110df03200641e8056a2006280288052211200628029005220510e0030240024020062903e8054201510d00200641e0056a4200370300200642003703d8050c010b20064198056a200641e8056a41086a41d00010d40b1a0b024002402016450d00200641a0066a420037030020064198066a420037030020064190066a420037030020064188066a420037030020064180066a4200370300200641f8056a4200370300200641f0056a4200370300200642003703e8050c010b200641e8056a41386a200641c8046a41386a290300370300200641e8056a41306a200641c8046a41306a290300370300200641e8056a41286a200641c8046a41286a290300370300200641e8056a41206a200641c8046a41206a290300370300200641e8056a41186a200641c8046a41186a290300370300200641e8056a41106a200641c8046a41106a290300370300200641e8056a41086a200641c8046a41086a290300370300200620062903c8043703e8050b20064198056a41386a200641e8056a41386a29030037030020064198056a41306a200641e8056a41306a29030037030020064198056a41286a200641e8056a41286a29030037030020064198056a41206a200641e8056a41206a29030037030020064198056a41186a200641e8056a41186a29030037030020064198056a41106a200641e8056a41106a29030037030020064198056a41086a200641e8056a41086a2215290300370300200620062903e80537039805201520064198056a41d00010d40b2115200642013703e80520112005201510e7040240200628028c05450d00201110390b20064198046a41106a290300210820064198046a41286a290300211920062903a004210d20062903b8042118200629039804210c20062903b004210941002116410021120c050b200641c0046a2903002119200641a8046a290300210820062903b804211820062903a004210d4100211520062903b0042109200629039804210c41002111410021050c030b4100210541042111410121150240201a0d002006201b3602e805200641e8056a10e4040b0c010b2009200884210c20052015722105410121150b0b20054180fe1f71221220117221164101211120150d010b0240200c4201520d00200641a0066a200837030020064198066a200d370300200641f1056a2001290000370000200641e8056a41086a41003a000020064189066a200141186a29000037000020064181066a200141106a290000370000200641f9056a200141086a290000370000200641023a00e805200641e8056a10c9030b02400240200950450d004200210c0c010b200641e8056a41186a200141186a290000370300200641e8056a41106a200141106a290000370300200641e8056a41086a200141086a290000370300200620012900003703e8054201210c0b20064198056a41186a200641e8056a41186a29030037030020064198056a41106a200641e8056a41106a29030037030020064198056a41086a200641e8056a41086a290300370300200620062903e80537039805410021110b2010410173210520064190036a41086a29030021082006290390032109024002402011450d004200210f200c210a0c010b200641c8046a41186a20064198056a41186a290300370300200641c8046a41106a20064198056a41106a290300370300200641c8046a41086a20064198056a41086a29030037030020062006290398053703c8044200210d02400240427f200920062903a003221c7c220a200a2009542215200820064190036a41186a290300221d7c2015ad7c220a200854200a2008511b22151b220e42ffc7afa02556427f200a20151b220b420052200b501b0d004200210f2009201c842008201d8484420052ad210d0c010b200641e8056a41186a200641c8036a290300370300200641e8056a41106a200641c0036a290300370300200641f0056a200641b8036a290300370300200620062903b0033703e8054201210f0b2005ad210a20072009370300200720083703082007201c370310200741186a201d370300200720062903e805370320200741286a200641f0056a290300370300200741306a200641f8056a290300370300200741386a200641e8056a41186a2903003703000b200641f0026a41086a200641c8046a41086a290300370300200641f0026a41106a2215200641c8046a41106a290300370300200641f0026a41186a2214200641c8046a41186a290300370300200620062903c8043703f00202400240024002400240024020110d00200641e8026a2019370300200641e0026a22132018370300200641b0026a200b370300200641a8026a2216200e37030020064188026a41106a2008370300200641c0026a221120062903f002370300200641d8026a2014290300370300200641d0026a2015290300370300200641c8026a200641f8026a29030037030020062009370390022006200c3703b8022006200d3703a0022006200a370388020240200f420052200571450d00200620023602e8052002200641e8056a10e5040c040b0240024002402010200f50714101470d00200620023602e8052002200641e8056a10e60441ff017122104103460d0620100e03010602010b2010200f420052720d0520064198056a41286a201141286a29030037030020064198056a41206a201141206a29030037030020064198056a41186a201141186a29030037030020064198056a41106a201141106a29030037030020064198056a41086a201141086a29030037030020062011290300370398050c030b20064198056a41286a201141286a29030037030020064198056a41206a201141206a29030037030020064198056a41186a201141186a29030037030020064198056a41106a201141106a29030037030020064198056a41086a201141086a29030037030020062011290300370398050c020b0240200d500d00200620163602e805200641e8056a10e4040b200641b8026a10e80441012107410421164100211220062903b802500d02200620133602e805200641e8056a10e4040c020b410121070c010b4100211241002116410021070b20124180fe1f71201641ff0171722117024020070d00200a210f200c210a0c020b410121070c020b200641c8046a41386a200741386a290300370300200641c8046a41306a200741306a290300370300200641c8046a41286a200741286a290300370300200641c8046a41206a200741206a290300370300200641c8046a41186a200741186a290300370300200641c8046a41106a200741106a290300370300200641c8046a41086a200741086a290300370300200620072903003703c804200641d8036a200210df03200641e8056a20062802d803220720062802e003221010e0030240024020062903e8054201510d00200641e0056a4200370300200642003703d8050c010b20064198056a200641e8056a41086a41d00010d40b1a0b02400240200f4200520d00200641a0066a420037030020064198066a420037030020064190066a420037030020064188066a420037030020064180066a4200370300200641f8056a4200370300200641f0056a4200370300200642003703e8050c010b200641e8056a41386a200641c8046a41386a290300370300200641e8056a41306a200641c8046a41306a290300370300200641e8056a41286a200641c8046a41286a290300370300200641e8056a41206a200641c8046a41206a290300370300200641e8056a41186a200641c8046a41186a290300370300200641e8056a41106a200641c8046a41106a290300370300200641e8056a41086a200641c8046a41086a290300370300200620062903c8043703e8050b20064198056a41386a200641e8056a41386a29030037030020064198056a41306a200641e8056a41306a29030037030020064198056a41286a2205200641e8056a41286a29030037030020064198056a41206a2215200641e8056a41206a29030037030020064198056a41186a2216200641e8056a41186a29030037030020064198056a41106a2212200641e8056a41106a29030037030020064198056a41086a2214200641e8056a41086a2213290300370300200620062903e80537039805201320064198056a41d00010d40b2113200642013703e80520072010201310e704024020062802dc03450d00200710390b2014201141086a2903003703002012201141106a2903003703002016201141186a2903003703002015201141206a2903003703002005201141286a290300370300200620112903003703980520064188026a41106a290300210820064188026a41286a290300210b200629039002210920062903a802210e200629038802210f20062903a002210d20062903b802210a410021170b0240200f4201520d00200641a0066a200837030020064198066a2009370300200641f1056a2002290000370000200641e8056a41086a41003a000020064189066a200241186a29000037000020064181066a200241106a290000370000200641f9056a200241086a290000370000200641023a00e805200641e8056a10c9030b02400240200d50450d00420021080c010b20064188026a41186a200241186a29000037030020064188026a41106a200241106a29000037030020064188026a41086a200241086a2900003703002006200229000037038802420121080b200641c8046a41186a20064188026a41186a290300370300200641c8046a41106a20064188026a41106a290300370300200641c8046a41086a20064188026a41086a290300370300200641e8056a41086a20064198056a41086a290300370300200641e8056a41106a20064198056a41106a290300370300200641e8056a41186a20064198056a41186a290300370300200641e8056a41206a20064198056a41206a290300370300200641e8056a41286a20064198056a41286a29030037030020062006290388023703c80420062006290398053703e805410021070b20064198016a41086a2211200641e8056a41086a29030037030020064198016a41106a2210200641e8056a41106a29030037030020064198016a41186a2205200641e8056a41186a29030037030020064198016a41206a2215200641e8056a41206a29030037030020064198016a41286a2216200641e8056a41286a290300370300200641f8006a41086a2212200641c8046a41086a290300370300200641f8006a41106a2214200641c8046a41106a290300370300200641f8006a41186a2213200641c8046a41186a290300370300200620062903e80537039801200620062903c804370378024020070d00200641c8006a2006290378370300200641386a2016290300370300200641086a41286a2015290300370300200641086a41206a2005290300370300200641086a41186a2010290300370300200641086a41106a2011290300370300200641d0006a2012290300370300200641d8006a2014290300370300200641e0006a20132903003703002006200629039801370310200641f0006a200b370300200641e8006a2207200e370300200620083703402006200a370308200641086a10e80402402006290308500d002006200641306a3602e805200641e8056a10e4040b200641c0006a10e80402402006290340500d00200620073602e805200641e8056a10e4040b200641c0066a2004370300200641b8066a2003370300200641e8056a41086a41023a000020064189066a200141186a29000037000020064181066a200141106a290000370000200641f9056a200141086a290000370000200641f1056a200129000037000020064191066a200229000037000020064199066a200241086a290000370000200641a1066a200241106a290000370000200641a9066a200241186a290000370000200641023a00e805200641e8056a10c903200041083a00000c010b20002017360200200041046a200a3702000b200641f0106a24000b8c0602067f027e230041206b2202240020012802082103200128020421042001280200210502400240412010382201450d0020012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200528020010e2032003280204220041146a2205417f4c0d0120032802002106200428020021070240024020050d00410121030c010b200510382203450d010b41002104200241003602182002200336021020022005360214200741086a29030021082007290300210902402005410f4b0d00200241106a41004110107720022802102103200228021821040b200320046a22052008370008200520093700002002200441106a22053602180240024002400240200041c000490d00200041808001490d012000418080808004490d02024020022802142005470d00200241106a20054101107720022802102103200228021821050b200320056a41033a00002002200541016a22053602180240200228021420056b41034b0d00200241106a200541041077200228021821050b200228021020056a2000360000200541046a21050c030b20004102742104024020022802142005470d00200241106a20054101107720022802102103200228021821050b200320056a20043a0000200541016a21050c020b200041027441017221040240200228021420056b41014b0d00200241106a20054102107720022802102103200228021821050b200320056a20043b0000200541026a21050c010b200041027441027221040240200228021420056b41034b0d00200241106a20054104107720022802102103200228021821050b200320056a2004360000200541046a21050b2002200536021802402002280214220420056b20004f0d00200241106a20052000107720022802142104200228021821050b2002280210220320056a2006200010d40b1a200228020022072002280208200141202003200520006a10c90102402004450d00200310390b02402002280204450d00200710390b20011039200241206a24000f0b1032000b1034000b940201027f230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041003602000c010b200328020c2102024002400240200341106a28020022044104490d002004417c714104470d010b2003420037021c4100210420034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d101200328021c450d01200328021810390c010b20002001290000370204410121040b200020043602002002450d00200110390b200341d0006a24000b990401067f230041d0006b22022400200241c7e5c000410610cb01200241106a4194b5cb00410710cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000b8e0402067f027e230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d002004417c7122054104460d0020054108460d002005410c460d00200441707122044110460d00200128000021052001280004210620012800082107200128000c2108200141186a29000021092001290010210a0240200441506a0e110102020202020202020202020202020201000b20044120470d010b420021092003420037021c20034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d101200328021c450d01200328021810390c010b2000200a370308200041386a2001290040370300200041286a2001290030370300200041186a2001290020370300200041106a2009370300200041d4006a2008360200200041d0006a2007360200200041cc006a2006360200200041c8006a2005360200200041c0006a200141c8006a290000370300200041306a200141386a290000370300200041206a200141286a290000370300420121090b200020093703002002450d00200110390b200341d0006a24000b8b0101027f230041106b220224000240412010382203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002002200110e2032002280200220020022802082003412010c60102402002280204450d00200010390b20031039200241106a24000f0b1032000bb90201047f230041306b220224002002420037020420024100280284ee4d360200200241004109107720022802002203200228020822046a220541002900c69944370000200541086a41002d00ce99443a00002002200441096a22043602080240410410382205450d00200520013600000240200228020420046b41034b0d00200220044104107720022802002103200228020821040b200320046a20052800003600002002200441046a220436020820051039200241106a20032004109f01412010382204450d0020042002290010370000200042a0808080800437020420002004360200200441186a200241106a41186a290000370000200441106a200241106a41106a290000370000200441086a200241106a41086a29000037000002402002280204450d00200310390b200241306a24000f0b1032000b9e0d02097f037e230041e0006b22052400024002402002450d00200520012d00003a003c2005410136023820024101460d00200520012d00013a003d2005410236023820024102460d00200520012d00023a003e2005410336023820024103460d00200520012d00033a003f2005410436023820024104460d00200541c0006a20012d00043a00002005410536023820024105460d00200541c1006a20012d00053a00002005410636023820024106460d00200541c2006a20012d00063a00002005410736023820024107460d00200541c3006a20012d00073a00002005410836023820024108460d00200541c4006a20012d00083a00002005410936023820024109460d00200541c5006a20012d00093a00002005410a3602382002410a460d00200541c6006a20012d000a3a00002005410b3602382002410b460d00200541c7006a20012d000b3a00002005410c3602382002410c460d00200541c8006a20012d000c3a00002005410d3602382002410d460d00200541c9006a20012d000d3a00002005410e3602382002410e460d00200541ca006a20012d000e3a00002005410f3602382002410f460d00200541cb006a20012d000f3a00002005411036023820024110460d00200541cc006a20012d00103a00002005411136023820024111460d00200541cd006a20012d00113a00002005411236023820024112460d00200541ce006a20012d00123a00002005411336023820024113460d00200541cf006a20012d00133a00002005411436023820024114460d00200541d0006a20012d00143a00002005411536023820024115460d00200541d1006a20012d00153a00002005411636023820024116460d00200541d2006a20012d00163a00002005411736023820024117460d00200541d3006a20012d00173a00002005411836023820024118460d00200541d4006a20012d00183a00002005411936023820024119460d00200541d5006a20012d00193a00002005411a3602382002411a460d00200541d6006a20012d001a3a00002005411b3602382002411b460d00200541d7006a20012d001b3a00002005411c3602382002411c460d00200541d8006a20012d001c3a00002005411d3602382002411d460d00200541d9006a20012d001d3a00002005411e3602382002411e460d00200541da006a20012d001e3a00002005411f3602382002411f460d00200541db006a20012d001f3a0000200541306a41026a200541c5006a2d00003a00002005412c6a41026a200541cc006a2d00003a0000200520052f013c3b0134200520052d003e3a00362005200541c3006a2f00003b01302005200541ca006a2f01003b012c200541d4006a2802002106200541cd006a2800002107200541c6006a280100210820054120360238200541386a41206a2802002109200528003f210a200541286a41026a200541d3006a2d00003a00002005200541d1006a2f00003b0128410021020c010b410121020b200541246a41026a220120052d00363a0000200541206a41026a220b200541306a41026a2d00003a00002005411c6a41026a220c2005412c6a41026a2d00003a0000200541186a41026a220d200541286a41026a2d00003a0000200520052f01343b0124200520052f01303b0120200520052f012c3b011c200520052f01283b01180240024002400240024020020d00200541146a41026a20012d00003a0000200541106a41026a200b2d00003a00002005410c6a41026a200c2d00003a0000200541086a41026a200d2d00003a0000200520052f01243b0114200520052f01203b0110200520052f011c3b010c200520052f01183b010820044110490d012005200441706a36023c2005200341106a360238200341086a290000210e2003290000210f2005200541386a10c10120052802000d01200528023c20052802042202490d012002417f4c0d030240024020020d00410121010c010b200210382201450d0520014100200210d60b1a0b20012005280238200210d40b210120002002ad2210422086201084370234200041026a200541146a41026a2d00003a0000200020052f01143b00002000200a360003200020052f01103b0007200041096a200541106a41026a2d00003a00002000200836010a200020052f010c3b000e200041106a2005410c6a41026a2d00003a000020002007360011200020052f01083b0015200041176a200541086a41026a2d00003a0000200041286a200e3703002000200f370320200020013602302000200936021c200020063602180c020b200041003602300c010b200041003602300b200541e0006a24000f0b1034000b1032000b980803077f027e027f230041a0016b22022400200141186a2103200141086a21042001411c6a210502400240024003400240024020012d0029450d00200141003a002920012802202206417f4c0d03200128021821070240024020060d00410121080c010b200610382208450d050b20082007200610d40b1a2006ad220942208620098421090c010b200241d0006a200128020c20012802142001280218200128022010c8014100210820022802502206450d000240200428020022072002290254220a422088a74b0d0020012802002006200710d70b0d0020062108200a21090c010b200aa7450d00200610390b024002400240024020080d00200041003602300c010b02402005280200450d00200328020010390b20012008360218200520093702002002200128020c200128021420082009422088a710c70120022802002208450d012002280208210b2002280204210c024020012d0028450d00200128020c20012802142001280218200128022010c6010b2001280220220720042802002206490d062002200128021820066a200720066b2008200b20012802241105002002280230450d0220002002290300370300200041386a200241386a290300370300200041306a200241306a290300370300200041286a200241286a290300370300200041206a200241206a290300370300200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a290300370300200c450d00200810390b200241a0016a24000f0b41002802d0a94e450d01200241113602442002200336024041002802cca94e210841002802c8a94e210641002802d4a94e210720024201370360200241d09fc50036025c20024281808080d0e70037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242013703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200841c0a4c000200741024622071b28021021082002200241c0006a36026c200641b8c0cd0020071b200241d0006a20081103000c010b024041002802d0a94e450d002002411236024c2002411136024420022003360240200220024198016a36024841002802cca94e210641002802c8a94e210741002802d4a94e210b20024202370360200241e89fc50036025c20024281808080b0e90037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242023703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200641c0a4c000200b410246220b1b28021021062002200241c0006a36026c200741b8c0cd00200b1b200241d0006a20061103000b200c450d00200810390c000b0b1034000b1032000b2006200741a0b7c5001054000bf51205027f087e057f027e017f230041f00c6b2204240002400240200220038450450d0042002102420021030c010b200441c8006a200110df03200441e8016a20042802482205200428025010e003200441f8016a290300210620044188026a290300210720044180026a290300210820042903f001210920042903e801210a0240200428024c450d00200510390b200a4201520d002009200884200620078484500d00200441c8006a200110df03200441e8016a20042802482205200428025010e0034200210b4200210c4200210a4200210d42002107420021084200210942002106024020042903e8014201520d00200441f8016a290300210620044188026a290300210820044180026a290300210720044198026a290300210d20044190026a290300210a200441a8026a290300210c200441a0026a290300210b20042903f00121090b0240200428024c450d00200510390b0240024002402009200a200784842006200d2008848484500d00200441286a21050c010b200441286a2105200b200c844200520d00200441e0016a4200370300200441d8016a4200370300200441d0016a4200370300200442003703c8014100210e4101210f200441c8016a2110200441286a2105420021094200210642002107420021080c010b200441286a41186a200c3703002004200b3703382004200a3703282004200d370330200441c8016a41186a200541186a290300370300200441c8016a41106a200541106a290300370300200441c8016a41086a200541086a290300370300200420052903003703c8014101210e4100210f200441c8016a21100b4200210b200fad210c02400240427f427f2009200220072007200256200820035620082003511b22111b220a7c220d200d200954221220062003200820111b220d7c2012ad7c221320065420132006511b22111b22092007200a7d22147c220620062009542212427f201320111b22062008200d7d2007200a54ad7d22137c2012ad7c220720065420072006511b22111b220842ffc7afa02556427f200720111b220742005220075022111b0d002009201484200620138484220b502112200b420052ad210b0c010b200441e8016a41186a201041186a290300370300200441e8016a41106a201041106a290300370300200441e8016a41086a201041086a290300370300200420102903003703e801410121120b200520042903e801370300200541186a200441e8016a41186a290300370300200541106a200441e8016a41106a290300370300200541086a200441e8016a41086a29030037030020044180016a200d370300200441f0006a2007370300200441e8006a22152008370300200441c8006a41106a20063703002004200a370378200420093703502004200b3703602004200c370348024002400240024002400240200f200842ffc7afa02556200742005220111b2210714101470d00200420013602e8012001200441e8016a10e5040c010b0240200e4101732010720d00200420013602e8012001200441e8016a10e60441ff017122104103460d0120100e03020103020b200e2010724101470d010b20044188016a41186a200541186a29030037030020044188016a41106a200541106a29030037030020044188016a41086a200541086a2903003703002004200529030037038801200441a8016a200110df03200441e8016a20042802a801220520042802b001221010e0030240024020042903e8014201510d00200441b8016a41086a4200370300200442003703b8010c010b200441b8016a41086a200441b8026a2903003703002004200441b0026a2903003703b8010b4200210a02400240200842ffc7afa02556200742005220111b0d0020044180026a4200370300200441f8016a4200370300200441f0016a4200370300200442003703e8014200211342002109420021060c010b200441e8016a41186a20044188016a41186a290300370300200441e8016a41106a20044188016a41106a290300370300200441e8016a41086a20044188016a41086a29030037030020042004290388013703e8012014210a0b200441c8016a41186a200441e8016a41186a220f2903002207370300200441c8016a41106a200441e8016a41106a22112903002208370300200441c8016a41086a200441e8016a41086a2212290300220d370300200420042903e801220b3703c80120044188026a2013370300200f200a37030020112006370300200441a8026a2007370300200441e8016a41386a200837030020044198026a200d370300200441e8016a41286a200b370300200441b0026a20042903b801370300200441b8026a200441b8016a41086a290300370300200420093703f001200442013703e80120052010201210e704024020042802ac01450d00200510390b200441c8006a41106a2903002106200441c8006a41286a2903002107200441c8006a41386a290300210d20042903502109200429036821082004290378210a2004290348210c2004290360210b0b0240200c4201520d00200441a0026a200637030020044198026a2009370300200441f1016a2001290000370000200441e8016a41086a41003a000020044189026a200141186a29000037000020044181026a200141106a290000370000200441f9016a200141086a290000370000200441023a00e801200441e8016a10c9030b200b50450d01420021060c020b20120d02200420153602e801200441e8016a10e4040c020b200441e8016a41186a200141186a290000370300200441e8016a41106a200141106a290000370300200441e8016a41086a200141086a290000370300200420012900003703e801420121060b200441086a41186a200441e8016a41186a22052903002209370300200441086a41106a200441e8016a41106a2210290300220b370300200441086a41086a200441e8016a41086a220f290300220c370300200420042903e801221337030820044198026a2211200737030020044190026a221220083703002010200c3703002005200b37030020044188026a2009370300200420063703e801200420133703f001200441e8016a10e804024020042903e801500d0020042012360248200441c8006a10e4040b200441a0026a200d3703002011200a370300200f41063a000020044189026a200141186a29000037000020044181026a200141106a290000370000200441f9016a200141086a290000370000200441f1016a2001290000370000200441023a00e8012003200d7d2002200a54ad7d21032002200a7d2102200441e8016a10c9030b2000200237030020002003370308200441f00c6a24000bd90201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10c1010240024002402003280200450d00200341003602480c010b200341c8006a200341206a2003280204109c022003280248450d0020002003290348370200200041086a200341c8006a41086a2802003602000c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602000b2002450d00200110390b200341e0006a24000b870101027f230041306b22012400200141186a4200370300200141106a22024200370300200141086a420037030020014200370300200141fde7c000410910cb01200241d4c1c400410810cb0102404104103822020d001032000b2002200036000020014284808080c0003702242001200236022020014120200141206a10de01200141306a24000bb81a020a7f097e23002208210920084180386b41607122082400200841f8246a200210d20320082802f824220a20082802802510d30341ff0171210b024020082802fc24450d00200a10390b02400240200b4107460d00200b41054b0d004101200b74412a710d010b200841f8246a200210d20320082802f824220a20082802802510d30341ff0171210b024020082802fc24450d00200a10390b0240200b4107460d00200b41064b0d004101200b7441d400710d010b20004183fe003b0100200041086a4111360200200041046a41d8b6cc00360200200041026a41033a0000200924000f0b20084190256a220c420037030020084188256a220b4200370300200841f8246a41086a220d4200370300200842003703f824200841f8126a41f5e7c000410810cb01200d200841f8126a41086a220a290000370300200820082900f8123703f824200841f8126a41c8a9cd00410e10cb01200c200a290000370300200b20082900f812370300200841f0006a200841f8246a412010ce0302402008280274410020082802701b2003460d0020004183fe003b0100200041086a4111360200200041046a41dcb7cc00360200200041026a41093a0000200924000f0b200c4200370300200b4200370300200d4200370300200842003703f824200841f8126a41f5e7c000410810cb01200d200a290000370300200820082900f8123703f824200841f8126a41f0a9cd00410b10cb01200b41086a200a290000370000200b20082900f812370000200841f8126a200841f8246a412010de030240024002400240024020082802f8124101470d00200a280200210d20082802fc12210c20084190256a420037030020084188256a4200370300200841f8246a41086a220a4200370300200842003703f824200841f8126a41c7e5c000410610cb01200a200841f8126a41086a2203290000370300200820082900f8123703f824200841f8126a419081c400410610cb01200b41086a2003290000370000200b20082900f812370000200841e8006a200841f8246a412010ce0302402008280268450d00200828026c417f200d41c0b2046a22032003200d491b490d0020004183fe003b0100200041086a410c360200200041046a419cb8cc00360200200041026a410d3a0000200924000f0b200841f8246a200c2004200510e20a02400240024020082d00f8244101460d0020082d00f924210320084190256a220c420037030020084188256a220e4200370300200841f8246a41086a220d4200370300200842003703f824200841f8126a41c7e5c000410610cb01200d200841f8126a41086a220a290000370300200820082900f8123703f824200841f8126a419081c400410610cb01200b41086a220f200a290000370000200b20082900f812370000200841e0006a200841f8246a412010ce032008280264211020082802602111200c4200370300200e4200370300200d4200370300200842003703f824200841f8126a41f5e7c000410810cb01200d200a290000370300200820082900f8123703f824200841f8126a41f0a9cd00410b10cb01200f200a290000370000200b20082900f812370000200841f8126a200841f8246a412010de034100210c4100210d024020082802f8124101470d004100210c02402010410020111b220d200a2802006b220b200d4d0d004100210d0c010b4100210d200b41bfb2044b0d00200b41146e210d4101210c0b200841f8246a200d10bb050240024020082903f8244202520d000240200d417f6a220b200d4d0d00200842023703f8120c020b200841f8126a200b10bb050c010b200841f8126a200841f8246a41801210d40b1a0b20082903f8124202520d01200841f8006a410041801210d60b1a0c020b200a280200210b20082802fc242108200041003a0000200041086a200b360200200041046a2008360200200924000f0b200841f8006a200841f8126a41801210d40b1a0b200841f8006a20034106746a220b2903004201520d01200b41306a290300200654200b41386a290300221220075420122007511b0d010c020b20004183fe003b0100200041086a410a360200200041046a41f8b7cc00360200200041026a410a3a0000200924000f0b200841d0006a2002200110d903200841d0006a41086a290300211320082903502112200841f8366a41186a200141186a290000370300200841f8366a41106a200141106a290000370300200841f8366a41086a200141086a2900003703002008200236029837200820012900003703f836200841f8246a200841f8366a10c005200841386a20082802f824220e20082802802510c1074200200720137d2006201254ad7d2213200620127d2214200656201320075620132007511b220a1b211242002014200a1b2113200841386a41106a29030021142008290340211520082903382116024020082802fc24450d00200e10390b02402013201542002016a7220a1b22157d2216201356201220144200200a1b7d2013201554ad7d221420125620142012511b0d00200841f8246a20012016201410d403200820082900f9243703f8122008200841f8246a41086a2800003600ff1220082d00f824220a4108470d02200841f8126a200841f8366a10c005200828028013210e20082802f812210a2008201237038025200820133703f824200a200e200841f8246a411010e901024020082802fc12450d00200a10390b200841c0256a2012370300200841b8256a2013370300200841b0256a2014370300200841a8256a2016370300200841f8246a41086a41043a000020084199256a200141186a29000037000020084191256a200141106a29000037000020084189256a200141086a29000037000020084181256a2001290000370000200841163a00f824200841f8246a10c9030b200841f8246a41186a200141186a290000370300200841f8246a41106a200141106a220a290000370300200841f8246a41086a200141086a2900002212370300200820023602c8372008200129000022133703f824200820133702cc37200820123702d4372008200a2800003602dc372008200829028c253703a0372008200841f8246a411c6a2802003602a837200820073703b837200820063703b037200842013703c037200b41186a220a2903002114200a20082903d837370300200b2903102115200b20082903d037370310200b2903082113200b20082903c837370308200b2903002112200b4201370300200820143703d837200820153703d037200820123703c037200820133703c837200841f8006a20034106746a220b41206a220a2903002114200b41286a22032903002115200b41306a220e2903002116200b41386a220b290300211720082903a037211820082903a837211920082903b037211a200b20082903b837370300200e201a37030020032019370300200a2018370300200820173703b837200820163703b037200820153703a837200820143703a037024020124201520d00200841e0376a411c6a20082802a837360200200841e0376a41106a200841c0376a410c72220b41106a280000360200200841e0376a41086a200b41086a290000370300200820082903a0373702f4372008200b2900003703e037200c0d002013a721034100210b03400240200841f8006a200b6a220a2903004201520d00200a410c6a200841e0376a412010d70b0d00200a41086a2802002003460d020b200b41c0006a220b418012470d000b200841f8126a41186a200841e0376a41186a290300370300200841f8126a41106a200841e0376a41106a290300370300200841f8126a41086a200841e0376a41086a290300370300200820082903e0373703f8122008200336029813200841f8246a200841f8126a10c005200841206a20082802f824220b200828028025220a10c107200841206a41106a2903002112200829032821130240200829032022144201520d00200b200a10e0010b024020082802fc24450d00200b10390b2014a74101470d00200841106a200841e0376a2013201210e503200841b0256a2012370300200841a8256a201337030020084199256a200841f8376a29030037000020084191256a200841f0376a29030037000020084189256a200841e0376a41086a29030037000020084181256a20082903e037370000200841f8246a41086a41053a0000200841163a00f824200841f8246a10c9030b200841f8126a200d10bc05200828028013210a20082802f812210b4180121038220d450d0220084280123702fc242008200d3602f824200841f8006a200841f8246a10b102200b200a20082802f824220d20082802802510e901024020082802fc24450d00200d10390b024020082802fc12450d00200b10390b200841b8256a2007370300200841b0256a2006370300200841ac256a2005360200200841a8256a2004360200200841a4256a2002360200200841f8246a41086a41073a000020084199256a200141186a29000037000020084191256a200141106a29000037000020084189256a200141086a29000037000020084181256a2001290000370000200841163a00f824200841f8246a10c9030b200041083a0000200924000f0b200020082903f8123700012000200a3a0000200041086a20082800ff12360000200924000f0b1032000b8c0201047f230041306b22012400200141106a41f5e7c000410810cb01200141206a41c8aacd00410f10cb010240412010382202450d002002200129001037000020022001290020370010200241086a200141106a41086a290000370000200241186a2203200141206a41086a29000037000020012002360200200142a08080808004370204412010382204450d0020002004360200200042a080808080043702042000200129030037020c2000411336021820042002290000370000200441086a200241086a290000370000200441106a200241106a290000370000200441186a2003290000370000200041146a200141086a280200360200200041013a001c200141306a24000f0b1032000ba00703067f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010e5010240024020022802502203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902542208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c2006200837020020022003200910e401024002400240024020022802002203450d002002280208210a2002280204210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d032002200128020c20076a200920076b2003200a200128021811050020022903004201510d0120002002290308370308200041386a200241386a290300370300200041306a200241306a290300370300200041286a200241286a290300370300200041206a200241206a290300370300200041186a200241186a290300370300200041106a200241106a29030037030020004201370300200b450d06200310390c060b41002802d0a94e450d01200241113602442002200436024041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370360200241d09fc50036025c20024281808080e0d70037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242013703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200341c0a4c000200941024622091b28021021032002200241c0006a36026c200741b8c0cd0020091b200241d0006a20031103000c010b024041002802d0a94e450d002002411236024c2002411136024420022004360240200220024198016a36024841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370360200241e89fc50036025c20024281808080c0d90037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242023703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200741c0a4c000200a410246220a1b28021021072002200241c0006a36026c200941b8c0cd00200a1b200241d0006a20071103000b200b450d00200310390b200241d0006a200128020c200128021410e501200228025022030d010c020b0b2007200941d89fc5001054000b200042003703000b200241a0016a24000b5f01027f230041106b220424000240410810382205450d00200520023600002005200336000420044288808080c00037020420042005360200200020012005410810e90102402004280204450d00200510390b200441106a24000f0b1032000bdd0703017f017e0c7f230041d0006b22022400200141146a2902002103200141106a2802002104200128020c2105200128020821062001280204210720012802002101200241286a4200370300200241106a41106a22084200370300200241186a420037030020024200370310200241106a41d8adc300410b10cb0120084184b0c300411310cb01200241086a200241106a412010ce03200228020c21092002280208210a200241106a200010d20320022802102208200228021810d30341ff0171210b02402002280214450d00200810390b024002400240200b4107460d0002402007450d00200110390b2004450d01200510390c010b200241c0006a200010d2032002280248210c2002280240210820024100360218200242013703104100200241106a10762008200c2002280210220d200228021810e90102402002280214450d00200d10390b02402002280244450d00200810390b200241c0006a2000109b072002280248210e2002280240210c200241003602182002420137031020012006200241106a10b90220052003a7200241106a10b9022003422088a7210f02402002280214220d20022802182208470d00200241106a2008410110772002280214210d200228021821080b20094100200a1b21062002280210220920086a200f3a0000200c200e2009200841016a10e9010240200d450d00200910390b200641026a210802402002280244450d00200c10390b2008200649210602402007450d00200110390b417f200820061b210102402004450d00200510390b200241306a2001108d04200241106a2002280230200228023810e60302400240200228021022080d002002420037024441002109200241002802d8974e2208360240410021060c010b2002290214210320022008360240200220033702442003422088a721062003a721090b41002101024002402006450d0020062104200621050340024002402008200441017620016a22044102746a280200220720004f0d00200441016a21010c010b2004210520072000460d030b200520016b2104200520014b0d000b20062001490d030b024020062009470d00200241c0006a2009109901200228024021080b200820014102746a220541046a2005200620016b41027410d50b1a200520003602002002200641016a3602480b200241106a41086a200241c0006a41086a2802003602002002200229034022033703102002280238210520022802302101024002402003a722040d002001200510e0010c010b20012005200241106a108e04200228021441ffffffff0371450d00200410390b2002280234450d00200110390b200241d0006a2400200b4107470f0b200120061041000bb30603077f017e017f230041d0006b22012400200141106a200010d20320012802102202200128021810d30341ff0171210302402001280214450d00200210390b410021020240024020034107460d00410121020240024002402003417f6a0e020001030b200141c0006a200010d203200128024821032001280240210220014100360218200142013703104105200141106a10762002200320012802102204200128021810e90102402001280214450d00200410390b2001280244450d01200210390c010b200141c0006a200010d203200128024821032001280240210220014100360218200142013703104106200141106a10762002200320012802102204200128021810e90102402001280214450d00200410390b2001280244450d00200210390b200141286a4200370300200141206a22024200370300200141186a420037030020014200370310200141106a41d8adc300410b10cb0120024184b0c300411310cb01200141086a200141106a412010ce0341002105200141306a417f200128020c410020012802081b220241026a220320032002491b108d04200141106a2001280230200128023810e60302400240200128021022060d0020014200370244200141002802d8974e2206360240410021070c010b2001290214210820012006360240200120083702442008422088a721072008a721050b41002102024002402007450d0020072104200721030340024002402006200441017620026a22044102746a280200220920004f0d00200441016a21020c010b2004210320092000460d030b200320026b2104200320024b0d000b20072002490d030b024020072005470d00200141c0006a2005109901200128024021060b200620024102746a220341046a2003200720026b41027410d50b1a200320003602002001200741016a3602480b200141106a41086a200141c0006a41086a2802003602002001200129034022083703102001280238210320012802302102024002402008a722040d002002200310e0010c010b20022003200141106a108e04200128021441ffffffff0371450d00200410390b02402001280234450d00200210390b410021020b200141d0006a240020020f0b200220071041000bc40502097f017e230041d0006b22012400200141286a4200370300200141206a22024200370300200141186a420037030020014200370310200141106a41d8adc300410b10cb0120024184b0c300411310cb01200141086a200141106a412010ce03200128020c210320012802082104200141106a200010d20320012802102205200128021810d30341ff0171210202402001280214450d00200510390b02400240200241014722060d002003410020041b220241026a22052002492103200141c0006a200010d203200128024821042001280240210220014100360218200142013703104103200141106a10762002200420012802102207200128021810e90102402001280214450d00200710390b417f200520031b210502402001280244450d00200210390b200141306a2005108d04200141106a2001280230200128023810e60302400240200128021022070d002001420037024441002108200141002802d8974e2207360240410021090c010b2001290214210a200120073602402001200a370244200a422088a72109200aa721080b41002102024002402009450d0020092103200921050340024002402007200341017620026a22034102746a280200220420004f0d00200341016a21020c010b2003210520042000460d030b200520026b2103200520024b0d000b20092002490d030b024020092008470d00200141c0006a2008109901200128024021070b200720024102746a220541046a2005200920026b41027410d50b1a200520003602002001200941016a3602480b200141106a41086a200141c0006a41086a28020036020020012001290340220a370310200128023821052001280230210202400240200aa722030d002002200510e0010c010b20022005200141106a108e04200128021441ffffffff0371450d00200310390b2001280234450d00200210390b200141d0006a240020060f0b200220091041000bc50502097f017e230041d0006b22012400200141286a4200370300200141206a22024200370300200141186a420037030020014200370310200141106a41d8adc300410b10cb0120024184b0c300411310cb01200141086a200141106a412010ce03200128020c210320012802082104200141106a200010d20320012802102202200128021810d30341ff0171210502402001280214450d00200210390b0240024020054102470d002003410020041b220241026a22032002492104200141c0006a200010d203200128024821062001280240210220014100360218200142013703104104200141106a10762002200620012802102207200128021810e90102402001280214450d00200710390b417f200320041b210302402001280244450d00200210390b200141306a2003108d04200141106a2001280230200128023810e60302400240200128021022070d002001420037024441002108200141002802d8974e2207360240410021090c010b2001290214210a200120073602402001200a370244200a422088a72109200aa721080b41002102024002402009450d0020092104200921030340024002402007200441017620026a22044102746a280200220620004f0d00200441016a21020c010b2004210320062000460d030b200320026b2104200320024b0d000b20092002490d030b024020092008470d00200141c0006a2008109901200128024021070b200720024102746a220341046a2003200920026b41027410d50b1a200320003602002001200941016a3602480b200141106a41086a200141c0006a41086a28020036020020012001290340220a370310200128023821032001280230210202400240200aa722040d002002200310e0010c010b20022003200141106a108e04200128021441ffffffff0371450d00200410390b2001280234450d00200210390b200141d0006a240020054102470f0b200220091041000baf0f05037f017e047f017e047f230041b0046b220524000240024020012002470d0020004183e6003b0100200041086a4115360200200041046a41bc95c100360200200041026a41003a00000c010b200541186a200210d20320052802182206200528022010d30321070240200528021c450d00200610390b200741ff0171210702400240024041000d0020070e080100000000000001010b2007417b6a41014b0d010b20004183e6003b0100200041086a411f360200200041046a41dc95c100360200200041026a41013a00000c010b42002108200541a8046a2207420037030020054190046a41106a2206420037030020054190046a41086a220942003703002005420037039004200541186a41f1d5c400410d10cb012009200541186a41086a220a2900003703002005200529001837039004200541186a418bd6c400410c10cb012007200a29000037030020062005290018370300200541186a20054190046a412010c7030240024020052802a8014102470d00410021074100210b410021064100210a410021094100210c4200210d0c010b200541186a41106a290300210d200529032021082005280288012106200528027c210b200528027821072005280270210a200528026c21092005280268210c0b024020030d0020004183e6003b0100200041086a411b360200200041046a418496c100360200200041026a41023a00000c010b0240200720034f0d0020004183e6003b0100200041086a4123360200200041046a41a896c100360200200041026a41033a00000c010b024020040d0020004183e6003b0100200041086a411e360200200041046a41d496c100360200200041026a41043a00000c010b0240200620044f0d0020004183e6003b0100200041086a4126360200200041046a41fc96c100360200200041026a41053a00000c010b20054190046a2001200210a605200541186a200528029004220620052802980410a70520052d003821070240200528029404450d00200610390b0240200741ff01714102460d0020004183e6003b0100200041086a411c360200200041046a41ac97c100360200200041026a41063a00000c010b20054190046a2001200210fd03200541186a200528029004220620052802980410fe0320052d004c21070240200528029404450d00200610390b0240200741ff01714102460d0020004183e6003b0100200041086a411f360200200041046a41d097c100360200200041026a41073a00000c010b200541186a200110a8052005280220210e200528021821074100210620054184046a41003a00002005410036028004200541106a2007200e20054180046a4105410010e601024002402005280210450d00200520052802142206410520064105491b36029404200520054180046a36029004200541086a20054190046a10c101200528020c210e20052802084521060c010b0b0240200528021c450d00200710390b200541186a200110a905200520052802182207200528022010ce032005280200210f200528020421100240200528021c450d00200710390b200541186a200110d20320052802182211200528022010d30341ff017121070240200528021c450d00201110390b200e410020061b210e20104100200f1b2106024020074107460d00200741054b0d004101200774412a71450d00200a21090b02402006200e6a2009490d0020004183e6003b0100200041086a411c360200200041046a41f897c100360200200041026a41083a00000c010b200541186a200110aa0520054190046a200541186a2008200d10d403200520052900910437038004200520054190046a41086a28000036008704024020052d00900422074108460d002000200529038004370001200020073a0000200041086a2005280087043600000c010b200541186a200110a90520052802202109200528021821072005200641016a360290042007200920054190046a410410e9010240200528021c450d00200710390b2005200d3703202005200837031820054100360228200541003a00382005200b360234200520033602302005200436022c20054190046a2001200210a6052005280290042207200528029804200541186a10ab050240200528029404450d00200710390b200541306a4200370300200541286a22074200370300200541186a41086a2206420037030020054200370318200541186a418ca3c100410410cb0120074190acc200411b10cb012005410036028804200542013703800420054180046a410041041077200528028004220920052802880422076a20013600002005200741046a220736028804024020052802840420076b41034b0d0020054180046a200741041077200528028004210920052802880421070b20054180046a41086a200741046a220a360200200920076a200236000020054190046a41086a2207200a360200200520052903800437039004200541186a412020054190046a10de0120074100360200200541246a20033602002006200436020020054201370390042005200136021c200541073a001820054190046a410041011077200528029004200728020022016a41003a00002007200141016a360200200541186a20054190046a10e902200541186a108b03200620072802003602002005200529039004370318200c2002200541186a10c8031a200041083a00000b200541b0046a24000bcf0c04037f017e047f017e230041b0056b22032400200341a0056a2002200110a605200341b8016a20032802a005220420032802a80510a705024020032d00d80122054102460d0020034198016a41186a200341b8016a41186a29030037030020034198016a41106a200341b8016a41106a29030037030020034198016a41086a200341b8016a41086a290300370300200320032903b80137039801200320032800d901360290012003200341dc016a280000360093010b024020032802a405450d00200410390b0240024020054102460d00200341e8006a410e6a20034198016a41086a290300370100200341e8006a41166a20034198016a41106a290300370100200341e8006a411e6a20034198016a41186a2903002206370100200341c0006a411e6a22042006370100200320032903980137016e200341c0006a41086a200341e8006a41086a2207290100370300200341c0006a41106a200341e8006a41106a2208290100370300200341c0006a41186a200341e8006a41186a22092901003703002003200328029001360218200320032800930136001b20032003290168370340200341206a41186a2004290100370300200341206a41106a200341c0006a41166a290100370300200341206a41086a200341c0006a410e6a2901003703002003200329014637032002402005450d0020004183e6003b0100200041086a4121360200200041046a41c098c100360200200041026a410a3a00000c020b4200210620094200370300200842003703002007420037030020034200370368200341e8006a41f1d5c400410d10cb012008418bd6c400410c10cb01200341b8016a200341e8006a412010c7030240024020032802c8024102470d0041002107410021084100210a4200210b0c010b200341b8016a41206a290300210b20032903d001210620032802a402210720032802a0022108200328028802210a0b200341b8016a200110d20320032802b801220420032802c00110d30341ff01712105024020032802bc01450d00200410390b024020054107460d00200541054b0d004101200574412a71450d00200721080b200341b8016a200110ac0520032802c001210720032802b801210541002104200341c4006a41003a000020034100360240200341106a20052007200341c0006a4105410010e601024002402003280210450d00200320032802142204410520044105491b36026c2003200341c0006a360268200341086a200341e8006a10c101200328020c210720032802084521040c010b0b024020032802bc01450d00200510390b200341b8016a200110ad05200320032802b801220920032802c00110ce032007410020041b21042003280204410020032802001b2105024020032802bc01450d00200910390b0240200520046a2008490d0020004183e6003b0100200041086a411e360200200041046a41ec98c100360200200041026a410b3a00000c020b200341b8016a200110aa05200341e8006a200341b8016a2006200b10d403200320032900693703402003200341e8006a41086a280000360047024020032d006822044108460d0020002003290340370001200020043a0000200041086a20032800473600000c020b200341b8016a41186a200341206a41186a290300370300200341b8016a41106a200341206a41106a290300370300200341b8016a41086a200341206a41086a290300370300200341dc016a200328001b360000200320032903203703b801200341013a00d801200320032802183600d901200341e8006a2002200110a605200328026822042003280270200341b8016a10ab050240200328026c450d00200410390b200341b8016a200110ad0520032802c001210820032802b80121042003200541016a36026820042008200341e8006a410410e901024020032802bc01450d00200410390b200341e8006a41086a2205410036020020034201370368200320013602bc01200341083a00b801200341e8006a4100410110772003280268200528020022016a41003a00002005200141016a360200200341b8016a200341e8006a10e902200341b8016a108b03200341b8016a41086a2005280200360200200320032903683703b801200a2002200341b8016a10c8031a200041083a00000c010b200041086a411c360200200041046a419c98c100360200200041026a41093a000020004183e6003b01000b200341b0056a24000bd00b04077f017e037f017e230041d00b6b22062400200641e0006a4200370300200641d8006a22074200370300200641d0006a420037030020064200370348200641c8006a41c7e5c000410610cb012007419081c400410610cb01200641186a200641c8006a412010ce034102210802402004200628021c4180ce186e410020062802181b22096b220720044b0d00200641206a200010f303200641c8006a2006280220200628022810f403024002402006280248220a0d00200642003702344100210b200641002802e8c848220a3602304100210c0c010b200629024c210d2006200a3602302006200d370234200d422088a7210c200da7210b0b024002402007200c4b0d00200c21080c010b200c21080240200b200c6b2007200c6b220e4f0d00200641306a200c200e10bd08200628023821082006280230210a0b200a200841386c6a210a0240200e4102490d002009200c6a20046b41016a210c0340200a4200370300200a41386a210a200c41016a220b200c49210f200b210c200f450d000b200e20086a417f6a21080b0240200e450d00200a4200370300200841016a21080b200620083602380b024002400240024002402007200720056a4f0d00200441386c200941386c6b210c2005210b0340024002400240200820074d0d00200820074d0d052006280230200c6a220a290300500d01410121080c070b20072008470d01200641c8006a41186a220f200141186a290000370300200641c8006a41106a220e200141106a290000370300200641c8006a41086a2210200141086a29000037030020062001290000370348024020082006280234470d0020082008470d00200641306a2008410110bd08200628023821080b2006280230200841386c6a220a4201370300200a2006290348370308200a41306a2003370300200a41286a2002370300200a41106a2010290300370300200a41186a200e290300370300200a41206a200f2903003703002006200841016a22083602380c010b200641c8006a41186a220f200141186a290000370300200641c8006a41106a220e200141106a290000370300200641c8006a41086a2210200141086a29000037030020062001290000370348200820074d0d04200a4201370300200a41306a2003370300200a41286a2002370300200a41086a2006290348370300200a41106a2010290300370300200a41186a200e290300370300200a41206a200f2903003703000b200741016a2107200c41386a210c200b417f6a220b0d000b0b200641086a2000200110d903024020022006290308220d7d22112002562003200641086a41086a2903007d2002200d54ad7d220d200356200d2003511b22070d00200641c8006a20012011200d10d4034100210820062d00484108470d030b4200200d20071b210d4200201120071b2111024020092004470d00200641c8006a200010d20320062802482208200628025010d30341ff017121070240200628024c450d00200810390b20074101470d00200010ee030d00200010d6030b20064198016a200337030020064190016a200237030020064188016a200d370300200641c8006a41386a2011370300200641d1006a2001290000370000200641fc006a2005360200200641f8006a2004360200200641f4006a2000360200200641c8006a41086a220741013a0000200641e9006a200141186a290000370000200641e1006a200141106a290000370000200641d9006a200141086a290000370000200641153a0048200641c8006a10c9032007200641306a41086a2802003602002006200629033022023703482006280228210720062802202108024002402002a7220a0d002008200710e0010c010b2006200736024420062008360240200641c8006a200641c0006a10be08200628024c2207450d00200741386c450d00200a10390b410321080c030b2007200841a0a3c500103c000b2007200841b0a3c500103c000b20062802342207450d00200741386c450d00200628023010390b2006280224450d00200628022010390b200641d00b6a240020080be60301067f230041d0006b22022400200241086a4192a3c500410510cb01200241186a4197a3c500410610cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bb90201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10bc08024002402003280248450d0020002003290348370200200041086a200341c8006a41086a2802003602000c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602000b2002450d00200110390b200341e0006a24000b8719050d7f027e067f017e057f230041a0016b22042400200441206a41186a200141186a290000370300200441206a41106a200141106a290000370300200441206a41086a200141086a290000370300200420012900003703200240024002400240024002400240024002400240024002400240024020002802042205450d00200028020021060c010b41980410382205450d0141002106200541003b01b601200541003602b00120002005360204200041003602000b02400340200541b8016a210720052f01b601220841057421094100210a417f210b4100210102400340024020092001470d002008210b0c020b200441206a200520016a41b8016a412010d70b220c450d03200b41016a210b200a41106a210a200141206a2101200c417f4a0d000b0b02402006450d002006417f6a21062005200b4102746a4198046a28020021050c010b0b200441086a41086a2201200441206a41106a220a290300370300200441086a41106a220c200441386a29030037030020042004290328370308200428022421092004280220210602402008410a4b0d00200a200c290300370300200441206a41086a200129030037030020042004290308370320200b41016a210c0240200b20084f220a0d002007200c4105746a2007200b4105746a2008200b6b41057410d50b1a0b2007200b4105746a220120093600042001200636000020012004290320370008200141106a200441286a290300370000200141186a200441206a41106a2903003700000240200a0d002005200c4104746a2005200b4104746a2008200b6b41047410d50b1a0b2005200b4104746a22012003370308200120023703002005200841016a3b01b6010c0c0b410521014100210d02400240200b41054f0d0041042101200b210a0c010b4105210a02400240200b417b6a0e020201000b200b41796a210a4101210d410621010c010b4100210a4101210d0b41980410382208450d01200841003b01b601200841003602b001200820052f01b601220e2001417f736a220c3b01b601200720014105746a220b280004210f200b2800002110200441206a41106a200b41186a290000370300200441206a41086a200b41106a2900003703002004200b290008370320200c410c4f0d02200e200141016a220b6b200c470d03200520014104746a220e41086a2903002111200e2903002112200841b8016a2007200b4105746a200c41057410d40b1a20082005200b4104746a200c41047410d40b2113200520013b01b601200441f0006a41086a200441206a41086a2207290300370300200441f0006a41106a200441206a41106a220e2903003703002004200429032037037020132005200d1b22012f01b601210c200e200441086a41106a2903003703002007200441086a41086a29030037030020042004290308370320200141b8016a210b0240200a41016a220d200c4b22140d00200b200d4105746a200b200a4105746a200c200a6b41057410d50b1a0b200b200a4105746a220b2009360004200b2006360000200b2004290320370008200b41106a2007290300370000200b41186a200e290300370000024020140d002001200d4104746a2001200a4104746a200c200a6b41047410d50b1a0b2001200a4104746a220b2003370308200b20023703002001200c41016a3b01b60120044188016a41086a2215200441f0006a41086a2216290300220237030020044188016a41106a2217200441f0006a41106a2218290300220337030020042004290370221937038801200441d8006a41106a220d2003370300200441d8006a41086a221420023703002004201937035802400240024020052802b00122010d004100211a0c010b20122102201121034100211a2013211b200f211c2010211d034020052f01b4012105200122062f01b6012213410b490d024100210741042101024020054105490d0020052101024002402005417b6a0e020201000b200541796a210541012107410621010c010b4100210541012107410521010b41c80410382208450d04200841003b01b601200841003602b001200820062f01b601220f2001417f736a220b3b01b601200441206a41086a2209200641b8016a221e20014105746a220a41106a290000370300200441206a41106a220e200a41186a2900003703002004200a290008370320200b410c4f0d07200f200141016a220c6b200b470d08200a280004210f200a2800002110200620014104746a220a41086a2903002111200a2903002112200841b8016a201e200c4105746a200b41057410d40b1a20082006200c4104746a200b41047410d40b210a200620013b01b601201620092903003703002018200e29030037030020042004290320370370200a2f01b601220b41016a211e200b410c4f0d09201320016b2201201e470d0a201a41016a211a200a4198046a2006200c4102746a4198046a200141027410d40b1a4100210102400340200a20014102746a4198046a280200220c20013b01b401200c200a3602b0012001200b4f0d0120012001200b496a2201200b4d0d000b0b20172018290300370300201520162903003703002004200429037037038801200a200620071b220c2f01b6012101200e200d2903003703002009201429030037030020042004290358370320200c41b8016a210b0240200541016a220720014b22130d00200b20074105746a200b20054105746a200120056b41057410d50b1a0b200b20054105746a220b201c360004200b201d360000200b2004290320370008200b41106a2009290300370000200b41186a200e290300370000024020130d00200c20074104746a200c20054104746a200120056b41047410d50b1a0b200141016a2109200c20054104746a220b2003370308200b2002370300200c4198046a210b0240200541026a2213200141026a220e4f0d00200b20134102746a200b20074102746a200120056b41027410d50b1a0b200b20074102746a201b360200200c20093b01b60102402007200e4f0d00200c20054102746a419c046a210103402001280200220b200541016a22053b01b401200b200c3602b001200141046a210120092005470d000b0b200d2017290300370300201420152903003703002004200429038801370358201221022011210320062105200a211b200f211c2010211d20062802b00122010d000b0b200441c0006a41106a200d290300370300200441c0006a41086a2014290300370300200420042903583703402000280204220b450d092000280200210a41c80410382201450d022001200b36029804200141003b01b601200141003602b00120002001360204200b41003b01b401200b20013602b0012000200a41016a360200200a201a470d0a20012f01b601220b410b4f0d0b2001200b41016a220a3b01b6012001200b4104746a220c2011370308200c20123703002001200b4105746a220b41c8016a200441c8006a290300370000200b41d0016a200441d0006a290300370000200b41bc016a200f360000200b41b8016a2010360000200b41c0016a200429034037000020014198046a200a4102746a20083602002000200028020841016a3602082008200a3b01b401200820013602b0010c0d0b200441206a41106a220b200441d8006a41106a290300370300200441206a41086a220a200441d8006a41086a29030037030020042004290358370320200641b8016a21010240201320054d0d00200120054105746a220c41206a200c201320056b41057410d50b1a0b201341016a2109200120054105746a2201201c3600042001201d36000020012004290320370008200141106a200a290300370000200141186a200b290300370000200541016a2101200620054104746a210b02400240201320054b0d00200b2002370300200b200337030820064198046a210b201341026a210c0c010b200620014104746a200b201320056b220a41047410d50b1a200b2003370308200b2002370300200541027420064198046a220b6a41086a200b20014102746a200a41027410d50b1a201341026a210c0b200b2001410274220a6a201b360200200620093b01b6012001200c4f0d0b200a20066a4198046a210b0340200b280200220a20013b01b401200a20063602b001200b41046a210b200c200141016a2201470d000c0c0b0b2005200a6a22012003370308200120023703000c0b0b1032000b200c410b41a485c700104b000b41b485c700412841dc85c7001035000b200b410b41a485c700104b000b41b485c700412841dc85c7001035000b201e410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b2000200028020841016a3602080b200441a0016a24000bd70102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42307e2205422088a74541037421022005a721040240024020010d00200341003602100c010b200341106a41086a41083602002003200141306c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141306e360200200341206a24000f0b1034000b860b020c7f077e230041800c6b22092400200941e8006a200510d003200941f8006a2009280268220a200928027010d10302400240024002400240024020092d00a801220b4102460d00200941386a41286a220c200941f8006a41286a220d290300370300200941386a41206a220e200941f8006a41206a220f290300370300200941386a41186a2210200941f8006a41186a2211290300370300200941386a41106a2212200941f8006a41106a2208290300370300200941386a41086a2213200941f8006a41086a2214290300370300200920092903783703380240200928026c450d00200a10390b200d200c290300370300200f200e2903003703002011201029030037030020082012290300370300201420132903003703002009200929033837037820082001412010d70b450d0120004183f8003b0100200041086a4108360200200041046a41f0accc00360200200041026a41023a00000c030b0240200928026c450d00200a10390b42002115420021162008450d0120004183f8003b0100200041086a410b360200200041046a41ccaecc00360200200041026a410c3a00000c020b0240200b450d0020004183f8003b0100200041086a410a360200200041046a41a0aecc00360200200041026a410a3a00000c020b20094180016a2903002116200929037821150b200941f8006a200510d2032009280278220820092802800110d30341ff0171210a0240200928027c450d00200810390b200a4107460d0120004183f8003b0100200041086a4111360200200041046a41d4accc00360200200041026a41013a00000b0240200741046a280200450d00200728020010390b200641046a280200450d01200628020010390c010b2007280204210a2007280200210b200628020421082006280200210c02400240024020072802082207418080c0024d0d004183f80c2107410c21064180adcc0021050c010b200628020822064181a001490d014183f8102107411021064194adcc0021050b0240200a450d00200b10390b02402008450d00200c10390b20002007360200200041086a2006360200200041046a20053602000c010b200941286a2006ad42004280e1eb17420010d30b200941186a2007ad221742004280e1eb17420010d30b0240024020032009290328221820092903187c221942808095e789c6047c221a2002a722071b220220157d221b2002562004200941286a41086a290300200941186a41086a2903007c2019201854ad7c201a201954ad7c20071b220320167d2002201554ad7d220420035620042003511b0d00200941f8006a2001201b200410d403200920092900793703382009200941f8006a41086a28000036003f20092d007822074108460d0120002009290338370001200020073a0000200041086a200928003f36000002402008450d00200c10390b200a450d02200b10390c020b201520027d2219201556201620037d2015200254ad7d220420165620042016511b0d00200941086a20012019200410e5030b200941f8006a41186a200141086a220729000037030020094198016a200141106a220d290000370300200941a0016a220e200141186a220f29000037030020092002370378200941003a00a80120092003370380012009200129000037038801200941386a200510d003200928023822102009280240200941f8006a10fc030240200928023c450d00201010390b200941f8006a41146a2017370200200941f8006a41106a200a3602002009200b3602840120092006360280012009200836027c2009200c3602782005200941f8006a10ec031a200e200536020020094195016a200f2900003700002009418d016a200d29000037000020094185016a2007290000370000200941003a007c200941143a00782009200129000037007d200941f8006a10c903200041083a00000b200941800c6a24000bd00f03087f017e027f230041e0026b22032400410121040240024020012d000022054101460d004102210602400240024020012d00010e03000102000b410021060c010b20034198026a41086a200141106a29000037030020034198026a41106a200141186a29000037030020034198026a41186a200141206a2f00003b01002003200141086a29000037039802200141046a2802002107200141026a2f01002108410121060b200341b0016a41186a20034198026a41186a2f01003b0100200341b0016a41106a20034198026a41106a290300370300200341b0016a41086a20034198026a41086a29030037030020032003290398023703b001410021040c010b200141046a28020021070b02402001280224220928020041016a220a41014d0d002009200a36020020034198026a41086a20032903b00137030020034198026a41106a200341b0016a41086a29030037030020034198026a41186a200341b0016a41106a29030037030020034198026a41206a200341b0016a41186a2802003602002003200736029c02200320083b019a02200320063a009902200320043a009802200320093602bc02200341c0006a20034198026a10cc030240024020032d00404101470d00410221040c010b200341086a41086a2204200341c0006a41186a290300370300200341086a41106a2206200341c0006a41206a2d00003a0000200320032d004322083a001f200320032f004122073b001d2003200341c0006a41106a290300370308200341c0006a41086a290300210b2003280244210a200320083a0022200320073b01202003200b3700272003200a360023200341376a20042903003700002003413f6a20062d00003a00002003200329030837002f200341d0026a200210d00320034198026a20032802d002220420032802d80210d1030240024020032d00c80222064102460d00200341e8016a41286a220820034198026a41286a290300370300200341e8016a41206a220720034198026a41206a290300370300200341e8016a41186a220a20034198026a41186a290300370300200341e8016a41106a220c20034198026a41106a290300370300200341e8016a41086a220d20034198026a41086a29030037030020032003290398023703e801024020032802d402450d00200410390b200341b0016a410e6a200d290300370100200341b0016a41166a200c290300370100200341b0016a411e6a200a290300370100200341b0016a41266a2007290300370100200341b0016a412e6a2008290300220b370100200341f8006a412e6a2204200b370100200320032903e8013701b601200341f8006a41086a200341b0016a41086a290100370300200341f8006a41106a200341b0016a41106a290100370300200341f8006a41186a200341b0016a41186a290100370300200341f8006a41206a200341b0016a41206a290100370300200341f8006a41286a200341b0016a41286a290100370300200320032901b001370378200341c0006a41286a2004290100370300200341c0006a41206a200341f8006a41266a290100370300200341c0006a41186a200341f8006a411e6a290100370300200341c0006a41106a200341f8006a41166a290100370300200341c0006a41086a200341f8006a410e6a2901003703002003200329017e37034020060d01200341d0006a200341206a412010d70b0d01410821040c020b024020032802d402450d00200410390b200341f8006a41086a200341b0016a41086a290100370300200341f8006a41106a200341b0016a41106a290100370300200341f8006a41186a200341b0016a41186a290100370300200341f8006a41206a200341b0016a41206a290100370300200341f8006a41286a200341b0016a41286a2901003703000b410321040b0240024020044108460d000240024020054101460d0020012d00014101470d010b200128020421080b2009280200220441016a220641014d0d022009200636020020092004360200024020054101470d0020082002460d010b410121040240024020054101460d004102210702400240024020012d00010e03000102000b410021070c010b200341a0026a200141106a29000037030020034198026a41106a200141186a29000037030020034198026a41186a200141206a2f00003b01002003200129000837039802200141026a2f0100210620012802042108410121070b200341b0016a41186a20034198026a41186a2f01003b0100200341b0016a41106a20034198026a41106a290300370300200341b0016a41086a20034198026a41086a29030037030020032003290398023703b001410021040c010b200128020421080b200928020041016a220141014d0d022009200136020020034198026a41086a20032903b00137030020034198026a41106a200341b0016a41086a29030037030020034198026a41186a200341b0016a41106a290300370300200341b8026a200341b0016a41186a2802003602002003200836029c02200320063b019a02200320073a009902200320043a009802200320093602bc02024020034198026a10cb03450d00200041023a00000c020b200041083a00000c010b200041083a00000b20092009280200417f6a2201360200024020010d002009280208200928020c2802001102000240200928020c280204450d00200928020810390b200941046a22012001280200417f6a220136020020010d00200910390b200341e0026a24000f0b00000be60301067f230041d0006b22022400200241086a41e3c0cc00410910cb01200241186a419c80cd00410b10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bbf0205037f017e027f017e027f230041c0006b22022400200241086a200010f303200241286a200228020822032002280210220410f403200229022c210520022802282100200241186a200110f303200241286a200228021822062002280220220710f403200229022c2108200228022821012002200041002802e8c848220920001b220a36022820022005420020001b220537022c2002200736023c20022006360238200241286a200241386a10be0802402005a72200450d00200041386c450d00200a10390b2008420020011b21052001200920011b21000240200228021c450d00200610390b200220003602282002200537022c2002200436021c20022003360218200241286a200241186a10be0802402005a72201450d00200141386c450d00200010390b0240200228020c450d00200310390b200241c0006a24000bb30203047f027e017f230041106b220324002003410036020820034201370300200341004120107720032802002204200328020822056a22062002290010370000200641186a200241286a290000370000200641106a200241206a290000370000200641086a200241186a2900003700002003200541206a2206360208200241086a29030021072002290300210802402003280204220520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a220636020820022d00302102024020052006470d00200320054101107720032802002104200328020821060b200420066a20023a0000200020012004200641016a10e90102402003280204450d00200328020010390b200341106a24000bb30203047f027e017f230041106b220324002003410036020820034201370300200341004120107720032802002204200328020822056a22062002290010370000200641086a200241186a290000370000200641106a200241206a290000370000200641186a200241286a2900003700002003200541206a2206360208200241086a29030021072002290300210802402003280204220520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a220636020820022d00302102024020052006470d00200320054101107720032802002104200328020821060b200420066a20023a0000200020012004200641016a10e90102402003280204450d00200328020010390b200341106a24000be00401057f230041e0006b22032400200341086a418ca3c100410410cb01200341186a4190afc200410c10cb012003410036024020034201370338200341386a41004104107720032802382204200328024022056a20013600002003200541046a22013602400240200328023c220520016b41034b0d00200341386a200141041077200328023c210520032802382104200328024021010b200420016a200236000020032004200141046a220110cc01370348200341d0006a410c6a200420016a360200200320043602582003200341d0006a3602542003200341c8006a360250200341286a200341d0006a10830102402005450d00200410390b024002402003280230220541206a2204417f4c0d000240024020040d00410121010c010b200410382201450d020b2000200136020041002102200041086a22064100360200200041046a2207200436020002402004410f4b0d00200041004110107720062802002102200028020021010b200120026a22042003290008370000200441086a200341086a41086a2900003700002006200241106a220436020002402007280200220220046b410f4b0d002000200441101077200041046a2802002102200041086a28020021040b200041086a2206200441106a22013602002000280200220720046a22042003290018370000200441086a200341186a41086a290000370000200328022821040240200220016b20054f0d00200020012005107720062802002101200028020021070b200720016a2004200510d40b1a2006200120056a3602000240200328022c450d00200410390b200341e0006a24000f0b1034000b1032000bdc0f02117f037e230041f0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041023a00340c010b200328020c2104024002400240200341106a28020022054104490d002005417c7122024104460d0020024108460d002002410c460d0020024110460d0020054114460d00200128000021062001280004210720012800082108200128000c21092001280010210a2005416b6a210b200141156a210c410021020240024020012d00140e020100020b200b450d01200341013602482003200c2d00003a004c20054116460d0120034102360248200320012d00163a004d20054117460d0120034103360248200320012d00173a004e20054118460d0120034104360248200320012d00183a004f20054119460d01200341d0006a20012d00193a0000200341053602482005411a460d01200341d1006a20012d001a3a0000200341063602482005411b460d01200341d2006a20012d001b3a0000200341073602482005411c460d01200341d3006a20012d001c3a0000200341083602482005411d460d01200341d4006a20012d001d3a0000200341093602482005411e460d01200341d5006a20012d001e3a00002003410a3602482005411f460d01200341d6006a20012d001f3a00002003410b36024820054120460d01200341d7006a20012d00203a00002003410c36024820054121460d01200341d8006a20012d00213a00002003410d36024820054122460d01200341d9006a20012d00223a00002003410e36024820054123460d01200341da006a20012d00233a00002003410f36024820054124460d01200341db006a20012d00243a00002003411036024820054125460d01200341dc006a20012d00253a00002003411136024820054126460d01200341dd006a20012d00263a00002003411236024820054127460d01200341de006a20012d00273a00002003411336024820054128460d01200341df006a20012d00283a00002003411436024820054129460d01200341e0006a20012d00293a0000200341153602482005412a460d01200341e1006a20012d002a3a0000200341163602482005412b460d01200341e2006a20012d002b3a0000200341173602482005412c460d01200341e3006a20012d002c3a0000200341183602482005412d460d01200341e4006a20012d002d3a0000200341193602482005412e460d01200341e5006a20012d002e3a00002003411a3602482005412f460d01200341e6006a20012d002f3a00002003411b36024820054130460d01200341e7006a20012d00303a00002003411c36024820054131460d01200341e8006a20012d00313a00002003411d36024820054132460d01200341e9006a20012d00323a00002003411e36024820054133460d01200341ea006a20012d00333a00002003411f36024820054134460d01200341eb006a20012d00343a0000200341286a41026a200341d5006a2d00003a0000200341ec006a41026a200341dc006a2d00003a0000200320032f014c3b0118200320032d004e3a001a2003200341d3006a2f00003b01282003200341da006a2f01003b016c200341e4006a280200210d200341dd006a280000210e200341d6006a280100210f20034120360248200341c8006a41206a2802002110200328004f2111200341c4006a41026a200341e3006a2d00003a00002003200341e1006a2f00003b01442005414b6a210b200141356a210c410121020b200341c0006a41026a20032d001a3a00002003413c6a41026a200341286a41026a2d00003a0000200341386a41026a200341ec006a41026a2d00003a0000200341346a41026a200341c4006a41026a2d00003a0000200320032f01183b0140200320032f01283b013c200320032f016c3b0138200320032f01443b0134200b4110490d00200b4170714110470d010b2003420037021c20034100280284ee4d3602182003410d36022c200320033602282003200341186a36026c200341dc006a41013602002003420137024c200341949fc5003602482003200341286a360258200341ec006a41b4dfc400200341c8006a103b1a2003280218200328022010d1010240200328021c450d00200328021810390b410221020c010b200341c8006a41026a2205200341c0006a41026a2d00003a0000200341186a41026a220b2003413c6a41026a2d00003a0000200341286a41026a2212200341386a41026a2d00003a0000200341ec006a41026a2213200341346a41026a2d00003a0000200320032f01403b0148200320032f013c3b0118200320032f01383b0128200320032f01343b016c200c41086a2900002114200c2900002115200c2900102116200041186a200c41186a2900003703002000201637031020002014370308200020153703002000200a3602302000200936022c200020083602282000200736022420002006360220200020032f01483b0035200041376a20052d00003a0000200041386a20113600002000413c6a20032f01183b00002000413e6a200b2d00003a00002000413f6a200f360000200041c6006a200e360000200041d1006a2010360000200041cd006a200d360000200041c3006a20032f01283b0000200041c5006a20122d00003a0000200041cc006a20132d00003a0000200041ca006a20032f016c3b0000200041d5006a20032f00443b0000200041d7006a200341c4006a41026a2d00003a00000b200020023a00342004450d00200110390b200341f0006a24000bdd0401057f230041e0006b22032400200341086a418ca3c100410410cb01200341186a41dcadc200411810cb012003410036024020034201370338200341386a41004104107720032802382204200328024022056a20013600002003200541046a22013602400240200328023c220520016b41034b0d00200341386a200141041077200328023c210520032802382104200328024021010b200420016a200236000020032004200141046a220110cc01370348200341dc006a200420016a360200200320043602582003200341d0006a3602542003200341c8006a360250200341286a200341d0006a10830102402005450d00200410390b024002402003280230220541206a2204417f4c0d000240024020040d00410121010c010b200410382201450d020b2000200136020041002102200041086a22064100360200200041046a2207200436020002402004410f4b0d00200041004110107720062802002102200028020021010b200120026a22042003290008370000200441086a200341086a41086a2900003700002006200241106a220436020002402007280200220220046b410f4b0d002000200441101077200041046a2802002102200041086a28020021040b200041086a2206200441106a22013602002000280200220720046a22042003290018370000200441086a200341186a41086a290000370000200328022821040240200220016b20054f0d00200020012005107720062802002101200028020021070b200720016a2004200510d40b1a2006200120056a3602000240200328022c450d00200410390b200341e0006a24000f0b1034000b1032000b9b1505057f027e017f017e157f230041206b22012400200141106a2000280200220210a90520012802102203200128021810e00102402001280214450d00200310390b200141106a200210ad0520012802102203200128021810e00102402001280214450d00200310390b2001200210ac05200141106a200128020022032001280208220410e6030240024020012802102205450d002003200410e001200129021421060c010b41002802d8974e2105420021060b02402001280204450d00200310390b2001200210a805200141106a200128020022032001280208220410e603200642208821070240024020012802102208450d002003200410e001200129021421090c010b41002802d8974e2108420021090b2007a7210402402001280204450d00200310390b02400240024002402004410274220a410275220b2009422088a7220c410274220d4102756a2203200b490d000240200341ffffffff01712003470d002003410374220b417f4c0d00024002400240200b0d004104210e0c010b200b1038220e450d010b4100210f200141003602082001200e3602002001200b410376220b3602040240200b20034f0d0020014100200310c9022001280208210f2001280200210e0b200e200f4103746a210302402004450d002003200528020036020020032002360204200f41016a210f200341086a210320044101460d00200a417c6a210b200541046a210403402004280200210e200341046a20023602002003200e360200200341086a2103200f41016a210f200441046a2104200b417c6a220b0d000b0b0240200642ffffffff0383500d00200510390b0240200c450d002008210403402000280200210b200341046a20042802003602002003200b360200200341086a2103200f41016a210f200441046a2104200d417c6a220d0d000b0b2001200f3602080240200942ffffffff0383500d00200810390b200128020021100240200f41144b0d00200f41014d0d06200f41037420106a41706a21034101210403402003200441016a220410ae05200341786a2103200f2004470d000c070b0b200f410176220341ffffffff01712003470d0120034103742211417f4c0d01201110382212450d00200142003702144100210a200141002802d8974e2213360210201041786a2114201041686a2115200f211603402016210c41002116410121040240200c417f6a220b450d00024002400240024002400240417f2010200b4103746a2204280200220d200c410374221720106a41706a2200280200220347200d2003491b220d417f200441046a280200220e200041046a280200220447200e2004491b200d1b417f460d00200c417e6a2118201520176a210d410021164100210b034002402018200b470d00200c21040c080b2003200d280200220049210e200320004721022004200d41046a280200220349210520042003472108200d41786a210d200b41016a210b2003210420002103417f2002200e1b2200417f200820051b20001b417f470d000b200b41016a2104200b417f73200c6a210b0c010b201520176a210d024003400240200b4101470d004100210b0c020b2003200d280200220049210e200320004721022004200d41046a280200220349210520042003472108200d41786a210d200b417f6a210b2003210420002103417f2002200e1b2200417f200820051b20001b417f460d000b0b200c200b490d01200c200f4b0d02200c200b6b22044101762200450d002010200b4103746a2103201420176a210d0340200329020021062003200d290200370200200d2006370200200341086a2103200d41786a210d2000417f6a22000d000b0b0240200b0d00200b21160c050b0240200441094d0d00200b21160c050b200c200f4b0d02200c200b6b2104200b417f6a21032014200b4103746a210d0340200c2003490d0a200d200441016a220410ae052003417f6a220b20034f0d04200d41786a210d200b21032004410a490d000c040b0b200b200c41c4bac3001055000b200c200f41c4bac300104b000b200c200b417f6a2203490d06200c200f41d4bac300104b000b200b41016a21160b0240200a2001280214470d00200141106a200a10b101200128021021132001280218210a0b2013200a4103746a22032004360204200320163602002001200128021841016a221936021802400240201941024f0d002019210a0c010b2001280210211303400240024002400240024020132019220a417f6a22194103746a2203280200450d00200a41037420136a220b41746a280200220d200328020422044b0d010b200a4103490d02200328020421042013200a417d6a22174103746a28020421030c010b200a41024d0d042013200a417d6a22174103746a28020422032004200d6a4d0d00200a41034d0d04200b41646a2802002003200d6a4b0d040b20032004490d010b200a417e6a21170b0240024002400240024002400240200a201741016a22034d0d00200a20174d0d01201320174103746a221a280204221b201a2802006a2204201320034103746a221c280200221d490d022004200f4b0d03201a41046a211e2010201d4103746a220b201c2802042218410374220d6a21032004410374210002402004201d6b220e20186b22042018490d002012200b200d10d40b2204200d6a210d0240201841014e0d00200421040c080b200e20184a0d05200421040c070b201220032004410374220d10d40b220c200d6a210d20184101480d0520044101480d05201420006a210e0340200e200341786a2204200d41786a2200417f20002802002202200428020022054720022005491b2202417f200041046a2802002205200441046a28020022084720052008491b20021b417f4622021b290200370200200d200020021b210d200b2004200320021b22034f0d06200e41786a210e200d200c4b0d000c060b0b2003200a41e4bac300103c000b2017200a41f4bac300103c000b201d20044184bbc3001055000b2004200f4184bbc300104b000b201020006a2105200421040340200b20032004417f200328020022002004280200220e472000200e491b2200417f200341046a280200220e200441046a280200220247200e2002491b20001b417f4622001b2902003702002004200441086a20001b2104200b41086a210b200341086a200320001b220320054f0d022004200d4f0d020c000b0b200c21042003210b0b200b2004200d20046b41787110d40b1a201e201b20186a360200201a201d360200201c201c41086a200a20176b41037441706a10d50b1a200120193602184101210a201941014b0d000b0b2016450d050c000b0b1032000b1034000b41f8d2cd00411141c496c7001035000b2003200c41d4bac3001055000b0240200128021441ffffffff0171450d00200128021010390b2011450d00201210390b200128020021020240200128020822044102490d002002410c6a21032004417f6a210d410121040340024002402003417c6a2200280200200441037420026a220e41786a220b280200470d002003280200200b41046a280200460d010b200e2000290200370200200441016a21040b200341086a2103200d417f6a220d0d000b200120043602080b2001280204210d02402004450d002004410374210420022103034020032902002206a72006422088a710af05200341086a2103200441786a22040d000b0b0240200d41ffffffff0171450d00200210390b200141206a24000ba11706067f027e097f027e0a7f047e230041b0016b22032400200341d0006a22044200370300200341c8006a22054200370300200341386a41086a220642003703002003420037033820034190016a418ca3c100410410cb01200620034190016a41086a2207290000370300200320032900900137033820034190016a4190acc200411b10cb01200420072900003703002005200329009001370300200341a0016a200341386a10b00502400240024020032802a0012208450d000240024020032902a401220942ffffffff0f560d00200942ffffffff018350450d010c020b02402009422088220aa72206450d0041002802d8974e210b200341d9006a210c200341e4006a210d200341386a41086a210e200341d0006a210f024003400240024002400240024002402006417f6a22062009422088a722104f0d0020034190016a200820064103746a22112802002204201141046a280200220710a605200341386a200328029001221220032802980110a705024020032d005822134102460d002003200c2800003602a0012003200c41036a2800003600a301200e2903002114200329033821152003280254211620032802502117200328024c2118200328024821190b0240200328029401450d00201210390b20134102460d01200320032800a301360033200320032802a00136023002402013450d00200341386a200410d20320032802382212200328024010d30321130240200328023c450d00201210390b201341ff017121130240024041000d0020130e080100000000000001010b2013417b6a41014d0d00200341386a200710d20320032802382212200328024010d30321130240200328023c450d00201210390b201341ff01712113024041000d0020130e080100000000000001010b2013417b6a4102490d00200d4200370200200f2001370300200d41086a41003a00002003200037034820032015370338200320183602602003201636025c200320173602582003201437034020034190016a2004200710fd032003280290012213200328029801200341386a10b1050240200328029401450d00201310390b200341a0016a200710ac05200341386a20032802a00120032802a80110e603024002402003280238221a0d0020034200370294012003200b360290014100211b200b211a4100211c0c010b200329023c210a2003201a360290012003200a37029401200a422088a7211c200aa7211b0b4100211302400240201c450d00201c211d201c21120340024002402004201a201d41017620136a221d4102746a280200221e4d0d00201d41016a21130c010b201d21122004201e460d030b201220136b211d201220134b0d000b201c2013490d060b0240201c201b470d0020034190016a201b109901200328029001211a0b201a20134102746a221241046a2012201c20136b41027410d50b1a201220043602002003201c41016a360298010b200e20034190016a41086a221b2802003602002003200329039001220a37033820032802a801211220032802a001211302400240200aa7221d0d002013201210e0010c010b20132012200341386a108e04200328023c41ffffffff0371450d00201d10390b024020032802a401450d00201310390b200341a0016a200410a805200341386a20032802a00120032802a80110e603024002402003280238221a0d0020034200370294012003200b360290014100211f200b211a4100211c0c010b200329023c210a2003201a360290012003200a37029401200a422088a7211c200aa7211f0b4100211302400240201c450d00201c211d201c21120340024002402007201a201d41017620136a221d4102746a280200221e4d0d00201d41016a21130c010b201d21122007201e460d030b201220136b211d201220134b0d000b201c2013490d070b0240201c201f470d0020034190016a201f109901200328029001211a0b201a20134102746a221241046a2012201c20136b41027410d50b1a201220073602002003201c41016a360298010b200e201b2802003602002003200329039001220a37033820032802a801211220032802a001211302400240200aa7221d0d002013201210e0010c010b20132012200341386a108e04200328023c41ffffffff0371450d00201d10390b20032802a401450d00201310390b200341386a200410a905200341286a20032802382212200328024010ce03200328022c410020032802281b21130240200328023c450d00201210390b0240024020134102490d00200341386a200410a9052003280240211d2003280238211220032013417f6a360290012012201d20034190016a410410e901200328023c450d01201210390c010b200341386a200410a90520032802382213200328024010e001200328023c450d00201310390b200341386a200710ad05200341206a20032802382212200328024010ce032003280224410020032802201b21130240200328023c450d00201210390b0240024020134102490d00200341386a200710ad052003280240211d2003280238211220032013417f6a360290012012201d20034190016a410410e901200328023c450d01201210390c010b200341386a200710ad0520032802382213200328024010e001200328023c450d00201310390b201120082010417f6a22134103746a290200370200200341386a2004200710a60520032802382204200328024010e001200942ffffffff0f8321092013ad422086210a0240200328023c450d00200410390b2009200a8421092006450d080c070b201941016a22132002460d04200c2003280230360000200c41036a200328003336000020032015370338200341003a005820032016360254200320173602502003201836024c200320133602482003201437034020034190016a2004200710a6052003280290012204200328029801200341386a10ab05200328029401450d05200410390c050b2006201041a4a3c100103c000b41b4a3c10041da004190a4c100105b000b2013201c1041000b2013201c1041000b200341386a200410a905200341186a200328023822132003280240221210ce032003200328021c417f6a417f20032802181b360290012013201220034190016a410410e9010240200328023c450d00201310390b201120082010417f6a22104103746a29020037020020034190016a2004200710a605200341386a2003280290012213200328029801221110a7052010ad210a024020032d005841024622070d002013201110e0010b200942ffffffff0f832109200a422086210a20032903382120200e29030021210240200328029401450d00201310390b2009200a8421092022202020071b21222023202120071b212320070d00200341386a200410aa05200341086a200341386a2022202310e5032006450d020c010b20060d000b0b2009422088210a0b200341d0006a4200370300200341c8006a4200370300200341386a41086a220442003703002003420037033820034190016a418ca3c100410410cb01200420034190016a41086a2206290000370300200320032900900137033820034190016a4190acc200411b10cb01200541086a20062900003700002005200329009001370000200aa722044103744104722206417f4c0d02200610382207450d0320034100360298012003200636029401200320073602900120034190016a200410ac020240024020040d00200328029001210720032802980121040c010b200820044103746a21102003280298012104200821060340200628020021110240200328029401221320046b41034b0d0020034190016a200441041077200328029401211320032802980121040b200328029001220720046a20113600002003200441046a220436029801200641046a28020021110240201320046b41034b0d0020034190016a200441041077200328029001210720032802980121040b200720046a20113600002003200441046a220436029801200641086a22062010470d000b0b200341386a41202007200410e9010240200328029401450d00200710390b200942ffffffff0183500d010b200810390b200341b0016a24000f0b1034000b1032000b8d0205017f017e037f017e037f230041306b2200240042002101200041186a4200370300200041106a22024200370300200041086a4200370300200042003703002000418ca3c100410410cb01200241bcaec200411c10cb01200041206a200010b0050240024020002802202203450d002000412010e001200029022421010c010b41002802d8974e21030b02402001422088a72202450d0020024103742104200321020340200020022902002205a722062005422088a7220710ff0320002802002208200028020810e00102402000280204450d00200810390b200241086a21022006200710af05200441786a22040d000b0b0240200142ffffffff0183500d00200310390b200041306a24000b910503037f017e047f230041306b22022400200041106a22034100360200200041086a22044201370200200241286a200141286a280200360200200241206a200141206a290200370300200241186a200141186a290200370300200241106a200141106a290200370300200241086a200141086a29020037030020022001290200220537030002400240024002402005a741ff01710e03000102030b20044100410110772000410c6a280200210620002802082207200328020022016a41013a00002003200141016a220136020020024101722103200241246a28020021080240200620016b41034b0d00200041086a200141041077200041106a2802002101200028020821070b200720016a2008360000200041106a200141046a3602002003200410b5020c020b20044100410110772000410c6a2206280200210820002802082207200328020022016a41023a00002003200141016a220136020020024101722109200241246a28020021030240200820016b41034b0d00200041086a200141041077200041106a2802002101200028020821070b200720016a2003360000200041106a2203200141046a3602002009200410b5022002280228210402402006280200200328020022016b41034b0d00200041086a200141041077200328020021010b200028020820016a20043600002003200141046a3602000c010b20044100410110772000410c6a280200210720002802082204200328020022016a41033a00002003200141016a2201360200200228020421030240200720016b41034b0d00200041086a200141041077200041106a2802002101200028020821040b200420016a2003360000200041106a200141046a3602000b200041023a0000200041d09eb18a03360001200241306a24000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41bc9bc300410f10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bd30a03037f017e017f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003a00000c010b2003280214210402400240200341186a2802002202450d00200320012d00003a003c2003410136023820024101460d00200320012d00013a003d2003410236023820024102460d00200320012d00023a003e2003410336023820024103460d00200320012d00033a003f2003410436023820024104460d00200341c0006a20012d00043a00002003410536023820024105460d00200341c1006a20012d00053a00002003410636023820024106460d00200341c2006a20012d00063a00002003410736023820024107460d00200341c3006a20012d00073a00002003410836023820024108460d00200341c4006a20012d00083a00002003410936023820024109460d00200341c5006a20012d00093a00002003410a3602382002410a460d00200341c6006a20012d000a3a00002003410b3602382002410b460d00200341c7006a20012d000b3a00002003410c3602382002410c460d00200341c8006a20012d000c3a00002003410d3602382002410d460d00200341c9006a20012d000d3a00002003410e3602382002410e460d00200341ca006a20012d000e3a00002003410f3602382002410f460d00200341cb006a20012d000f3a00002003411036023820024110460d00200341cc006a20012d00103a00002003411136023820024111460d00200341cd006a20012d00113a00002003411236023820024112460d00200341ce006a20012d00123a00002003411336023820024113460d00200341cf006a20012d00133a00002003411436023820024114460d00200341d0006a20012d00143a00002003411536023820024115460d00200341d1006a20012d00153a00002003411636023820024116460d00200341d2006a20012d00163a00002003411736023820024117460d00200341d3006a20012d00173a00002003411836023820024118460d00200341d4006a20012d00183a00002003411936023820024119460d00200341d5006a20012d00193a00002003411a3602382002411a460d00200341d6006a20012d001a3a00002003411b3602382002411b460d00200341d7006a20012d001b3a00002003411c3602382002411c460d00200341d8006a20012d001c3a00002003411d3602382002411d460d00200341d9006a20012d001d3a00002003411e3602382002411e460d00200341da006a20012d001e3a00002003411f3602382002411f460d00200341db006a20012d001f3a0000200041086a200341386a410b6a2f00003b00002000410a6a200341c5006a2d00003a0000200041116a200341cc006a2d00003a00002000410f6a200341386a41126a2f01003b000020034120360238200320032f013c3b0120200320032d003e3a0022200341c6006a2801002102200341cd006a2800002105200341d4006a2902002106200328003f2107200041186a200341d3006a2d00003a0000200041166a200341386a41196a2f00003b0000200041036a20032d00223a0000200020032f01203b0001200041196a2006370000200041126a20053600002000410b6a2002360000200041046a2007360000410121020c010b200342003702244100210220034100280284ee4d3602202003410d3602342003200341086a3602302003200341206a36025c200341cc006a41013602002003420137023c200341949fc5003602382003200341306a360248200341dc006a41b4dfc400200341386a103b1a2003280220200328022810d1012003280224450d00200328022010390b200020023a00002004450d00200110390b200341e0006a24000bef0403037f017e057f230041c0006b22022400200241106a2000109c06200241086a200228021022032002280218220410ce0342012105024002400240200228020c410020022802081b22060d00200241206a2000109d062001280208220341046a2204417f4c0d012001280200210720022802282108200228022021090240024002400240024002402004450d00200410382200450d08200241003602382002200436023420022000360230200341c000490d02200341808001490d032003418080808004490d04410021040c010b2002410036023820024201370330200241306a41004101107720022802302100200228023821040b200020046a41033a00002002200441016a22043602380240200228023420046b41034b0d00200241306a200441041077200228023821040b2002280230220020046a2003360000200441046a21040c030b200020034102743a0000410121040c020b2003410274410172210a410021010240200441014b0d00200241306a41004102107720022802302100200228023821010b200020016a200a3b0000200141026a21040c010b20002003410274410272360000410421040b2002200436023802402002280234220120046b20034f0d00200241306a2004200310772002280230210020022802342101200228023821040b200020046a2007200310d40b1a200920082000200420036a10e90102402001450d00200010390b02402002280224450d00200228022010390b4202210520022802182104200228021021030b2002200641016a36023020032004200241306a410410e90102402002280214450d00200310390b200241c0006a240020050f0b1034000b1032000b5b01017f02404120103822030d001032000b20032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200020012003412010e901200310390ba20802067f017e230041e0006b22042400200441306a2000109e06200441c0006a2004280230220520042802382206109f06024002400240200428024c22074102470d0041002107200441003602142004420037020c200441002802d8974e3602080c010b200441186a2004280250360200200441086a41086a200441c0006a41086a280200220836020020042004290340370308200420073602142008200428020c2207470d010b200441086a200710b101200428021021080b200441086a41086a2207200841016a360200200428020820084103746a2208200236020420082001360200200441c0006a41086a2007290300370300200441c0006a41106a200441086a41106a2802003602002004200429030837034002400240200428024c4102470d002005200610e0010c010b20052006200441c0006a10a006200428024441ffffffff0171450d00200428024010390b02402004280234450d00200510390b200441c0006a41186a200341186a290000370300200441c0006a41106a200341106a290000370300200441c0006a41086a200341086a29000037030020042003290000370340200441086a2000200110a106200428020822032004280210200441c0006a1087040240200428020c450d00200310390b200441206a10a20620042802202107024002400240200428022822090d00410021080c010b41002103200921062009210502400340024002402007200641017620036a22084103746a41046a280200220620014f0d00200841016a21030c010b2008210520062001460d020b200520036b210620032108200520034b0d000b0b20092008490d010b024020092004280224470d00200441206a200910b101200428022021070b200720084103746a220341086a2003200920086b41037410d50b1a2003200236020420032000360200200441206a41086a200941016a2203360200200441306a41086a200336020020042004290320220a37033002400240200aa722030d00200441d8006a22034200370300200441d0006a22084200370300200441c0006a41086a2205420037030020044200370340200441086a41ecc0cc00410510cb012005200441086a41086a220629000037030020042004290008370340200441086a41baf0c200410f10cb012003200629000037030020082004290008370300200441c0006a412010e0010c010b200441d8006a22084200370300200441d0006a22054200370300200441c0006a41086a2206420037030020044200370340200441086a41ecc0cc00410510cb012006200441086a41086a220129000037030020042004290008370340200441086a41baf0c200410f10cb012008200129000037030020052004290008370300200441c0006a200441306a10a306200428023441ffffffff0171450d00200310390b200441e0006a24004280a7f2a6010f0b200820091041000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a419c9bc300410510cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bc00301067f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021060240024002400240024002402005450d00200510382202450d07200341003602082003200536020420032002360200200441c000490d02200441808001490d032004418080808004490d04410021050c010b2003410036020820034201370300200341004101107720032802002102200328020821050b200220056a41033a00002003200541016a22053602080240200328020420056b41034b0d002003200541041077200328020821050b2003280200220220056a2004360000200541046a21050c030b200220044102743a0000410121050c020b20044102744101722107410021080240200541014b0d00200341004102107720032802002102200328020821080b200220086a20073b0000200841026a21050c010b20022004410274410272360000410421050b2003200536020802402003280204220820056b20044f0d0020032005200410772003280200210220032802042108200328020821050b200220056a2006200410d40b1a200020012002200520046a10e90102402008450d00200210390b200341106a24000f0b1034000b1032000be20301097f23004190016b22032400200341086a200010a4062003200328020822042003280210220510ce030240024020032802004101470d00200328020421020c010b200341186a20012802002001280208109f01200341e9006a200341186a41086a2206290300370000200341f1006a200341186a41106a2207290300370000200341f9006a200341186a41186a220829030037000020034188016a200236020020034184016a2000360200200341013a006020032003290318370061200341386a200341e0006a108304200341e0006a41206a200341386a41206a280200360200200341e0006a41186a2209200341386a41186a290300370300200341e0006a41106a220a200341386a41106a290300370300200341e0006a41086a220b200341386a41086a29030037030020032003290338370360200341e0006a10c302200341186a20011086041a20092008290300370300200a2007290300370300200b200629030037030020032003290318370360200341386a200010a506200328023822002003280240200341e0006a108704200328023c450d00200010390b2003200236026020042005200341e0006a410410e9010240200328020c450d00200410390b0240200141046a280200450d00200128020010390b20034190016a24000bde0901057f230041b0016b22032400200341d8006a41086a200141086a2802003602002003200129020037035820034180016a20001089042003280280012201200328028801200341d8006a108a040240200328028401450d00200110390b0240200328025c450d00200328025810390b20034180016a200010a406200341106a200328028001220420032802880110ce0320032802142101200328021021050240200328028401450d00200410390b024020054101470d00200120024b0d0020034180016a200010a406200328028001220520032802880110e0010240200328028401450d00200510390b200341386a200010a50620034180016a20032802382202200328024022041085040240024020032d00800122050d00200541014621040c010b2002200410e0012005410146210420054101470d00200341f0006a20034199016a290000370300200341e8006a20034191016a290000370300200341e0006a20034189016a29000037030020032003290081013703580b0240200328023c450d00200210390b0240024020040d00200341306a4200370300200341286a4200370300200341206a4200370300200342003703180c010b200341186a41186a200341d8006a41186a290300370300200341186a41106a200341d8006a41106a290300370300200341186a41086a200341d8006a41086a290300370300200320032903583703180b200341386a200010840420034180016a200328023822022003280240108504024020032d00800122054101470d00200341f0006a20034199016a290000370300200341e8006a20034191016a290000370300200341e0006a20034189016a29000037030020032003290081013703580b0240200328023c450d00200210390b0240024020054101460d00200341d0006a4200370300200341c8006a4200370300200341c0006a4200370300200342003703380c010b200341386a41186a200341d8006a41186a290300370300200341386a41106a200341d8006a41106a290300370300200341386a41086a200341d8006a41086a290300370300200320032903583703380b2003200341186a36025820034180016a20001084042003280280012205200328028801200341d8006a10a6060240200328028401450d00200510390b20034189016a200341186a41086a29030037000020034191016a200341186a41106a29030037000020034199016a200341186a41186a290300370000200341a4016a20003602002003200329031837008101200341003a008001200341d8006a20034180016a10830420034180016a41206a200341d8006a41206a28020036020020034180016a41186a2202200341d8006a41186a29030037030020034180016a41106a2205200341d8006a41106a29030037030020034180016a41086a2204200341d8006a41086a290300370300200320032903583703800120034180016a10c302200242003703002005420037030020044200370300200342003703800120034180016a41c7e5c000410610cb012005419081c400410610cb01200341086a20034180016a412010ce03200328020c2106200328020821072002200341386a41186a2903003703002005200341386a41106a2903003703002004200341386a41086a2903003703002003200329033837038001200020012006410020071b20034180016a1088041a0b200341b0016a24000be90301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41c49ec300410c10cb01200220013602342002200241346a410410cc01370338200241c0006a410c6a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b870201057f230041106b22032400024002402002280208220441027441046a2205417f4c0d00200228020021020240024020050d00410121060c010b200510382206450d020b2003410036020820032005360204200320063602002003200410ac020240024020040d0020032802002107200328020821050c010b20044102742104200328020821050340200228020021060240200328020420056b41034b0d002003200541041077200328020821050b200241046a21022003280200220720056a20063600002003200541046a22053602082004417c6a22040d000b0b200020012007200510e90102402003280204450d00200710390b200341106a24000f0b1034000b1032000bf19501040c7f017e217f087e230041f01f6b22032400200241146a2802002104200241106a2802002105200228020c2106200228020821072002280204210820022802002109200341386a200241246a41f00010d40b1a2001280224220a200a280200417f6a220b36020002400240024002400240024020012d00000d0020012d000121010240200b0d00200a280208200a28020c2802001102000240200a28020c280204450d00200a28020810390b200a41046a220b200b280200417f6a220b360200200b0d00200a10390b200141ff01714102470d01200341e8016a41186a22014200370300200341e8016a41106a220b4200370300200341e8016a41086a220c4200370300200342003703e801200341800d6a41dee8c600410c10cb01200c200341800d6a41086a220a290000370300200320032900800d3703e801200341800d6a41cce9c600410810cb012001200a290000370300200b20032900800d370300200341e8016a412010e301450d03200041003a00222000420037030820004201370300200041286a4119360200200041246a41e8b7c500360200200041206a4183da003b0100200041186a41003a00000c020b200b0d00200a280208200a28020c2802001102000240200a28020c280204450d00200a28020810390b200a41046a22012001280200417f6a220136020020010d00200a10390b2000420037030820004201370300200041206a41023a0000200041186a41003a00000b4101210b4101210c0c010b200341800d6a41186a22014200370300200341800d6a41106a220d4200370300200a4200370300200342003703800d200341a81c6a41c7e5c000410610cb01200a200341a81c6a41086a290000370300200320032900a81c3703800d200341e0146a41b081c400410a10cb012001200341e0146a41086a290000370300200d20032900e014370300200341e8016a200341800d6a41201085040240024020032d00e8014101460d00200341c0016a4200370300200341b8016a4200370300200341b0016a4200370300200342003703a8010c010b200341c0016a20034181026a290000370300200341b8016a200341f9016a290000370300200341b0016a200341f1016a290000370300200320032900e9013703a8010b200341e8016a200341386a10df0402400240200341e8016a200341a8016a412010d70b220e450d004101210b200041013a00222000420037030820004201370300200041286a4113360200200041246a418cb8c500360200200041206a4183da003b0100200041186a41003a00000c010b200341980d6a4200370300200341900d6a4200370300200341800d6a41086a220a4200370300200342003703800d200341a81c6a41b9c3c200410d10cb01200a200341a81c6a41086a290000370300200320032900a81c3703800d200341e0146a41c4c9c200411110cb01200d41086a200341e0146a41086a290000370000200d20032900e014370000200341e8016a200341800d6a10e5050240024020032802e80122010d004100210a0c010b20032902ec01220f422088a7210a200fa7220b450d00200b412c6c450d00200110390b200320073602880d200320083602840d200320093602800d200341e8016a200a200341800d6a10dd084101210b200341e8016a41086a2802002110200341e8016a410c6a280200211120032802ec01210c024002400240024020032802e8014101460d00200341980d6a22014200370300200341900d6a220b4200370300200341800d6a41086a220a4200370300200342003703800d41062112200341a81c6a41c7e5c000410610cb01200a200341a81c6a41086a2213290000370300200320032900a81c3703800d200341e0146a419081c400410610cb01200d41086a2214200341e0146a41086a2215290000370000200d20032900e014370000200341306a200341800d6a412010ce03200328023421162003280230211720014200370300200b4200370300200a4200370300200342003703800d200341a81c6a41f1d5c400410d10cb01200a2013290000370300200320032900a81c3703800d200341e0146a418bd6c400410c10cb0120142015290000370000200d20032900e014370000200341e8016a200341800d6a412010c703410221180240024020032802f80222194102470d00200341800d6a410041800110d60b1a200341e8146a4200370300200342003703e01441e400211a41c801211b4101211c4100211d4100211e41012113410121144101210b410021190c010b200341800d6a200341e8016a41800110d40b1a200341e8146a200341a4036a29020037030020032003419c036a2902003703e014200341ac036a280200211f20034198036a280200211c20034194036a280200211b20034190036a28020021182003418c036a280200211a20034188036a280200211220034184036a280200212020034180036a280200211d20032802fc02212120032802f402211e20032802f002211320032802ec02211420032802e802210b0b20034180026a22154200370300200341f8016a22224200370300200341e8016a41086a220a4200370300200342003703e801200341d8016a41b9c3c200410d10cb01200a200341d8016a41086a2201290000370300200320032900d8013703e801200341d8016a4184cbc200411110cb0120152001290000370300202220032900d801370300200341286a200341e8016a412010ce030240200b450d00200328022c2123200328022821242015420037030020224200370300200a4200370300200342003703e801200341d8016a41b9c3c200410d10cb01200a2001290000370300200320032900d8013703e801200341d8016a41c4c9c200411110cb01202241086a2001290000370000202220032900d80137000041002125200341a81c6a200341e8016a10e50520032902ac1c420020032802a81c220a1b210f200a41002802d8974e200a1b21150240024041002016410020171b22012023410020241b6b220a200a20014b1b200b70221620142013201420134b1b4f0d0041e00110382225450d062025200341800d6a41800110d40b220a201c3602b001200a201b3602ac01200a20183602a801200a201a3602a401200a20123602a001200a202036029c01200a201d36029801200a202136029401200a201936029001200a201e36028c01200a201336028801200a201436028401200a200b36028001200a20013602d801200a20163602d401200a200f3702cc01200a20153602c801200a201f3602c401200a20032903e0143702b401200a41bc016a200341e8146a2903003702000c010b200fa7220a450d00200a412c6c450d00201510390b024020250d00200342003702cc0141002124200341002802d8974e22213602c80141002126202121270c040b200342003702f40c200342003702cc01200341002802d8974e22213602f00c200320213602c801200341a81c6a419399c700410d10cb01200341e0146a41a099c700411310cb0141201038220a450d04200a20032900a81c370000200a41086a220b200341a81c6a41086a290000370000200a20032900e014370010200a41186a2213200341e0146a41086a22142900003700002003200a3602e801200342a080808080043702ec01412010382201450d042001200a290000370000200141186a2013290000370000200141106a200a41106a290000370000200141086a200b2900003700002014200341e8016a41086a280200220a360200200320032903e801220f3703e014200341940d6a200a360200200342a080808080043702840d200320013602800d2003200f37028c0d41002124200341003a009c0d200341143602980d200341e8016a200341800d6a10f707200328029404220b450d0241002124202121192021211841002114034020032802a804210a20032802a0042113200328029c04210120032802e80121150240202520032802ec01221220032802b00410ec05450d000240201420032802f40c470d00200341f00c6a201410990120032802f00c211820032802f80c21140b201820144102746a2015360200200320032802f80c41016a22143602f80c02400240202420032802cc01460d00202421150c010b202420032802d0012215470d00200341c8016a2024410110ab0120032802c801211920032802d00121150b201920154102746a20123602002003201541016a22243602d0010b02402001450d00200b10390b0240200a450d00201310390b200341e8016a200341800d6a10f707200328029404220b0d000c030b0b41c0dcc2004139419cbecc001035000b200020103600242000420037030820004201370300200041286a2011360000200041206a200c360000200041186a41003a00000c030b024020032802840d450d0020032802800d10390b0240200341900d6a280200450d00200328028c0d10390b20032802f00c212720032802f40c2126024020032802f80c220a450d002027200a4102746a2128200341b4046a2129200341e8016a41086a212a200341a81c6a412c6a212b200341cc1c6a212c200341e8016a412c6a2120200341e8016a410472212d200341800d6a41a4026a212e202721130340200341800d6a2013280200220110de08200341e8016a20032802800d220a20032802880d220b10df0802402003280290042214450d00200a200b10e00120032802e801212f200341e0146a202d41a40210d40b1a20032802a404211b200328029c04211d200328029804211a0b024020032802840d450d00200a10390b200341800d6a200110e008200341e8016a20032802800d220a20032802880d220110e1080240024020032802e801220b0d004100210b0c010b200a200110e001200341d8016a41086a202041086a280200360200200320202902003703d80120032802ec01211520032802f001211220032802f401211620032802f801211720032802fc01211820032802800221192003280284022123200328028802211e200328028c02211f200328029002211c0b024020032802840d450d00200a10390b02402014450d00200b450d00202b20032903d801370200202b41086a200341d8016a41086a2802003602002003201c3602d01c2003201f3602cc1c2003201e3602c81c200320233602c41c200320193602c01c200320183602bc1c200320173602b81c200320163602b41c200320123602b01c200320153602ac1c2003200b3602a81c200341800d6a200341e0146a41a40210d40b1a202e200341a81c6a109e01202a200341800d6a41c40210d40b1a202941086a202c41086a2802003602002029202c2902003702002003202f3602c004200341023602ec01200341113a00e801200341e8016a10c90302402012450d002012410c6c2101200b210a03400240200a41046a280200450d00200a28020010390b200a410c6a210a200141746a22010d000b0b02402015450d002015410c6c450d00200b10390b02402018450d0020184104742101201641086a210a03400240200a280200450d00200a417c6a28020010390b200a41106a210a200141706a22010d000b0b0240201741ffffffff0071450d00201610390b02402019450d002023450d00201910390b0240201a450d00201410390b201b450d00201d10390b201341046a2113024002400240200b0d0020140d010b20140d01200b450d0102402012450d002012410c6c2101200b210a03400240200a41046a280200450d00200a28020010390b200a410c6a210a200141746a22010d000b0b02402015450d002015410c6c450d00200b10390b02402018450d0020184104742101201641086a210a03400240200a280200450d00200a417c6a28020010390b200a41106a210a200141706a22010d000b0b0240201741ffffffff0071450d00201610390b02402019450d002023450d00201910390b201c450d01201f10390c010b0240201a450d00201410390b201b450d00201d10390b20132028470d000b0b0240202641ffffffff0371450d00202710390b202510eb052025103920032802cc01212620032802c80121270b10ed05200341800d6a41186a221b4200370300200341800d6a41106a221c4200370300200341800d6a41086a221a4200370300200342003703800d200341a81c6a41c7e5c000410610cb01201a200341a81c6a41086a2228290000370300200320032900a81c3703800d200341e0146a419081c400410610cb01200d41086a2201200341e0146a41086a222b290000370000200d20032900e014370000200341206a200341800d6a412010ce032003280224210b20032802202113200341e8016a41186a22204200370300200341e8016a41106a221d4200370300200341e8016a41086a22174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017200341d8016a41086a221f290000370300200320032900d8013703e801200341d8016a41c4c9c200411110cb01202241086a221e201f290000370000202220032900d801370000200341800d6a200341e8016a10e50520032802800d210a20032902840d210f201b4200370300201c4200370300201a4200370300200342003703800d200341a81c6a41f1d5c400410d10cb01201a2028290000370300200320032900a81c3703800d200341e0146a418bd6c400410c10cb012001202b290000370000200d20032900e014370000200341e8016a200341800d6a412010c703200b410020131b2130200f4200200a1b2231422088a72118201041ffffffff0371212f202720244102746a2124200c20114102746a2123200a2021200a1b212520032802f80241024620032802e002222e4572212a200341a81c6a410472212c200341e0146a410472212d200c21012027210a034002400240200c450d00024020012023460d0041012112200a21132001210b200141046a221421010c020b202f450d00200c10390b0240200a2024460d004100210c20012114200a210b41002112200a41046a2213210a0c010b0240202641ffffffff0371450d00202710390b200341800d6a41186a4200370300200341800d6a41106a4200370300200341800d6a41086a220a4200370300200342003703800d200341a81c6a41ecc0cc00410510cb01200a200341a81c6a41086a290000370300200320032900a81c3703800d200341e0146a41c49ac300410a10cb01200d41086a200341e0146a41086a290000370000200d20032900e014370000200341e8016a200341800d6a412010e60320032802e801210b20032902ec012132200341e8016a41186a4200370300200341e8016a41106a4200370300200341e8016a41086a220a4200370300200342003703e801200341d8016a41b9c3c200410d10cb01200a200341d8016a41086a2201290000370300200320032900d8013703e801200341d8016a41d4c2cc00410910cb01202241086a2001290000370000202220032900d801370000200341800d6a200341e8016a10ee050240024020032802800d22140d00200342003702f40c200320213602f00c41002112202121144100211e0c010b20032902840d210f200320143602f00c2003200f3702f40c200f422088a7211e200fa721120b20034180026a220c4200370300200341f8016a22134200370300200341e8016a41086a220a4200370300200342003703e801200341d8016a41b9c3c200410d10cb01200a200341d8016a41086a2201290000370300200320032900d8013703e801200341d8016a41f0c8c200410f10cb01202241086a22152001290000370000202220032900d801370000200341800d6a200341e8016a10e4050240024020032802800d221a0d004100211f2021211a4100211d410021280c010b200341800d6a41086a280200211d2003418c0d6a280200212820032802840d211f0b200c420037030020134200370300200a4200370300200342003703e801200341d8016a41b9c3c200410d10cb01200a2001290000370300200320032900d8013703e801200341d8016a4188c8c200410f10cb0120152001290000370000202220032900d801370000200341800d6a200341e8016a10e80520032802800d220a2021200a1b2113024020032902840d4200200a1b220f422088a7220c450d00200c410c6c21012013210a03400240200a41046a28020041ffffffff0371450d00200a28020010390b200a410c6a210a200141746a22010d000b0b0240200fa7220a450d00200a410c6c450d00201310390b20324200200b1b2132200b2021200b1b212002400240200c0d000240201f450d00201f412c6c450d00201a10390b02402012450d00201241346c450d00201410390b0240203242ffffffff0383500d00202010390b2031a7220a450d01200a412c6c450d01202510390c010b200342003702ac1c200320213602a81c2020417c6a212f20252018412c6c6a21152014201e41346c6a21192032422088a7211b202121294100211c4100211241002116410021242025210a024003402024417f6a2101202f20244102746a210b03402015200a460d02200141016a2101200b41046a210b200a280200210c200a412c6a2218210a200c4102470d000b200141016a21242012210c2016210a0240034002400240200a450d00200c2112200a21160c010b410020142014201946220a1b2113200c20142019476a2112410121162019201441346a200a1b2114200c21230b024020130d00201e212b0c020b4100210a2012210c201328020022172001490d000b2018210a20172001460d012023212b0b200141016a21240240024002402001201b4f0d00200b280200210b200341106a2001203010e70502402003280210450d004100210c2003280214212c0c020b419cddc20041de0041fcddc200105b000b02400240201d450d00201d410274417c6a41027641016a21174100210a4100210b0340201b201a200a6a220c41286a2802006a2001460d02200a412c6a210a2017200b41016a220b470d000b0b2018210a0c030b200c280200210b200341e8016a41186a221c200c411c6a290200370300200341e8016a41106a2229200c41146a290200370300200341e8016a41086a222c200c410c6a2902003703002003200c41046a2902003703e801200c41246a2802002117200c200c412c6a201d412c6c200a6b41546a10d50b1a200341e0146a41186a220a201c290300370300200341e0146a41106a220c2029290300370300200341e0146a41086a221c202c290300370300200320032903e8013703e014200341186a2001203010e7052003280218450d01200328021c212c200341800d6a41186a200a290300370300200341800d6a41106a200c290300370300200341800d6a41086a201c290300370300200320032903e0143703800d201d417f6a211d4101210c20032802b01c211c0b200341e8016a411f6a222d200341800d6a411f6a280000360000200341e8016a41186a222a200341800d6a41186a290300370300200341e8016a41106a222e200341800d6a41106a290300370300200341e8016a41086a2210200341800d6a41086a290300370300200320032903800d3703e8010240201c20032802ac1c470d00200341a81c6a201c10860320032802b01c211c0b20032802a81c2229201c41386c6a220a2001360204200a202b360200200a410c6a200c3a0000200a41086a200b360200200a410d6a20032903e801370000200a41156a2010290300370000200a411d6a202e290300370000200a41256a202a290300370000200a412c6a202d280000360000200a41346a202c360200200a41306a20173602002003201c41016a221c3602b01c2018210a0c010b0b419cddc20041de00418cdec200105b000b20032802ac1c21240240201c450d00201c41386c2117410021132003418f026a211520034188026a211220034180026a2118200341f8016a2119200341f0016a21164100210c2029210a0340200a410c6a2d000022234102460d01200a41046a290200210f200a28020021142015200a41346a2800003600002012200a412d6a2900003703002018200a41256a2900003703002019200a411d6a2900003703002016200a41156a2900003703002003200a410d6a2900003703e801024020032802f80c220b200c20146a2201490d000240200b20032802f40c470d00200341f00c6a200b1085030b200a41386a210a200c41016a210c20032802f00c200141346c6a220141346a20012013200b20146b6a41346c10d50b1a200120233a00082001200f370200200141096a20032903e801370000200141116a2016290300370000200141196a2019290300370000200141216a2018290300370000200141296a2012290300370000200141306a20152800003600002003200b41016a3602f80c2013417f6a2113201741486a22170d010c020b0b2001200b1041000b02402024450d00202441386c450d00202910390b200341e8016a41086a200341f00c6a41086a280200360200200320032903f00c3703e801200341e8016a10f105200320283602f4012003201d3602f0012003201f3602ec012003201a3602e801200341e8016a10ea05200320313702ec01200320253602e801200341e8016a10f005203242ffffffff0383500d00202010390b0240024020040d00410021140c010b410021154100210b410021144100210102400340024002402014450d002006200141f4026c6a210a2006200120156a41f4026c6a210c034002400240200a41bc026a2802000d00200b21130c010b41012113200b0d030b200c200a41f40210d40b210b200a41f4026a210a200b41f4026a210c2013210b2004200141016a22014b0d000c040b0b2006200141f4026c6a210a034002400240200a41bc026a2802000d00200b210c0c010b4101210c200b0d020b200a41f4026a210a200c210b2004200141016a22014b0d000b410021140c030b200a10c2032015417f6a2115201441016a21142004200141016a22014b0d000b0b024020140d00410021140c010b2006200120146b41f4026c6a2006200141f4026c6a200420016b41f4026c10d50b1a0b200341800d6a41186a220c4200370300200341800d6a41106a22134200370300200341800d6a41086a220b4200370300200342003703800d200341a81c6a41c7e5c000410610cb01200b200341a81c6a41086a2215290000370300200320032900a81c3703800d200341e0146a41f4ffc300410b10cb01200d41086a2212200341e0146a41086a2218290000370000200d20032900e014370000200341e8016a200341800d6a10df0620032903e801210f200341e8016a41106a2219290300213220032903f0012131200341e8016a41186a22162903002133200341e8016a10b803200420146b212302400240427f427f20314200200f420151220a1b220f20324200200a1b7c22322032200f541b220f20334200200a1b7c22322032200f541b20032903f001560d002006210a200521010c010b02402023450d00200441f4026c201441f4026c6b21012006210a0340200a10c203200a41f4026a210a2001418c7d6a22010d000b0b4100210102402005450d00200541f4026c450d00200610390b2021210a410021230b201620034180016a2903003703002019200341f8006a290300370300200341e8016a41086a200341f0006a290300370300200320032903683703e801200320233602e001200320013602dc012003200a3602d801200c420037030020134200370300200b4200370300200342003703800d200341a81c6a41b9c3c200410d10cb01200b2015290000370300200320032900a81c3703800d200341e0146a41d4c2cc00410910cb0120122018290000370000200d20032900e014370000200341e0146a200341800d6a10ee050240024020032802e014220a0d00200342003702ac1c200320213602a81c0c010b200320032902e4143702ac1c2003200a3602a81c0b200341800d6a200341e8016a200341d8016a200341a81c6a10e208200341880d6a280200211b2003418c0d6a280200210a20032802840d211a0240024002400240024002400240024020032802800d4101460d00200a450d0342002132200341980d6a220b4200370300200341900d6a220c4200370300200341800d6a41086a22014200370300200342003703800d200341a81c6a41b9c3c200410d10cb012001200341a81c6a41086a2208290000370300200320032900a81c3703800d200341e0146a41c4c9c200411110cb01200d41086a2205200341e0146a41086a2207290000370000200d20032900e014370000200341e8016a200341800d6a10e50520032802e801210420032902ec01210f200b4200370300200c420037030020014200370300200342003703800d200341a81c6a41b9c3c200410d10cb0120012008290000370300200320032900a81c3703800d200341e0146a41d4c2cc00410910cb0120052007290000370000200d20032900e014370000200f420020041b21312004202120041b2113200341e8016a200341800d6a10ee05024020032802e80122060d004100210820212106410021090c030b024020032902ec012232422088a722080d0041002108410021090c030b201a200a4102746a21052031422088a7211741002114200341e8016a41086a2115200341e8016a41106a2112200341e8016a41186a2118201a210c4202210f41002109410021040340024002402009450d002006200441346c6a210a2006200420146a41346c6a210103400240200fa7220b4102470d0002400240200c2005470d004100210b2005210c0c010b200c28020021074101210b200c41046a210c0b2007ad422086200bad84210f0b0240200b4101470d00200a280200200f422088a7220b460d030b2001200a290200370200200141306a200a41306a280200360200200141286a200a41286a290200370200200141206a200a41206a290200370200200141186a200a41186a290200370200200141106a200a41106a290200370200200141086a200a41086a290200370200200a41346a210a200141346a2101200441016a22042008490d000c050b0b2006200441346c6a210a200fa721010340024020014102470d0002400240200c2005470d00410021012005210c0c010b200c280200210b41012101200c41046a210c0b200bad4220862001ad84210f0b024020014101470d00200a280200200f422088a7220b460d020b200a41346a210a200441016a22042008490d000b410021090c040b0240200fa74102470d002005200c41046a200c2005461b210c0b410121010240200a2d00084101470d002015200a41116a2900003703002012200a41196a2900003703002018200a41216a2900003703002003200a41096a2900003703e801200a412c6a2802002116200a2802042119410021010b0240200b20174f0d00200f42808080807083420284210f2013200b412c6c6a220a2019360204200a2001360200200a41086a20032903e801370200200a41106a2015290300370200200a41186a2012290300370200200a41206a2018290300370200200a41286a20163602002014417f6a2114200941016a2109200441016a22042008490d010c030b0b200b201741ec8cc700103c000b2000201b3600242000420037030820004201370300200041286a200a360000200041206a201a3600004100210b200041186a41003a00000c0a0b024020090d00410021090c010b2006200420096b41346c6a2006200441346c6a200820046b41346c10d50b1a0b200341980d6a4200370300200341900d6a4200370300200341800d6a41086a220a4200370300200342003703800d200341a81c6a41b9c3c200410d10cb01200a200341a81c6a41086a290000370300200320032900a81c3703800d200341e0146a41d4c2cc00410910cb01200d41086a200341e0146a41086a290000370000200d20032900e014370000200820096b220141346c41046a220a417f4c0d0102400240200a0d00410121040c010b200a10382204450d080b200341003602f0012003200a3602ec01200320043602e801200341e8016a200110ac0220062001200341e8016a10b002200341800d6a412020032802e801220a20032802f00110e901024020032802ec01450d00200a10390b02402032a7220a450d00200a41346c450d00200610390b200320313702ec01200320133602e801200341e8016a10f0050b200341800d6a41186a4200370300200341800d6a41106a4200370300200341800d6a41086a220a4200370300200342003703800d200341a81c6a41f1d5c400410d10cb01200a200341a81c6a41086a290000370300200320032900a81c3703800d200341e0146a418bd6c400410c10cb01200d41086a200341e0146a41086a290000370000200d20032900e014370000200341e8016a200341800d6a412010c70320032903e801213220032802f802210c200341e8016a41186a220a4200370300200341e8016a41106a22244200370300200341e8016a41086a22014200370300200342003703e801200341d8016a41d584ce00410310cb012001200341d8016a41086a2204290000370300200320032900d8013703e801200341d8016a41d089ce00410d10cb01200a2004290000370300202420032900d801370300200341800d6a200341e8016a412010e60320032802800d210b20032902840d210f200a42003703002024420037030020014200370300200342003703e801200341d8016a41d584ce00410310cb0120012004290000370300200320032900d8013703e801200341d8016a41a08ace00411a10cb01200a2004290000370300202420032900d801370300200341086a200341e8016a412010ce03200f4200200b1b2134200b2021200b1b211202400240024020032802080d002034422088a721150c010b2034422088a72215450d00200328020c210b4100210a2015210420152101034002400240200b20122004410176200a6a22094102746a28020022044d0d00200941016a210a0c010b20092101200b2004460d030b2001200a6b21042001200a4b0d000b0b410021090b0240024020092015490d0041002128410021050c010b42002032200c4102461b223242e4007e42e400802135200341c0186a2129200341e0146a41186a212b200341b8186a212c200341f0146a210e41002128410021054200210f03402032200f580d01201220094102746a2217280200210c024020050d0041bc0210382205450d0941002106200541003b01ba02200541003602000b20352032200f7d200f501b213320052107200621130240034020072f01ba02221441186c21084168210a417f210b200741046a221821010240034002402008200a6a4168470d002014210b0c020b20012802002104200b41016a210b200a41686a210a200141046a2101417f2004200c472004200c4b1b22044101460d000b0240200441016a0e020100010b2007200a6b21130c020b02402013450d002013417f6a21132007200b4102746a41bc026a28020021070c010b0b200341800d6a200c108108200341e8016a20032802800d220a20032802880d10e3080240024020032802f00122080d0041e00010382208450d0b4200213641082114420021370c010b20032903e801223642808080807083213720032802f40121140b024020032802840d450d00200a10390b200341e8016a200c108008200341800d6a20032802e801221320032802f00110de0320032802800d410146210a20032802840d210120032802880d2104024020032802ec01450d00201310390b20014100200a1b211f20044100200a1b21202037203642ffffffff0f8384213802400240024002400240024002400240024002400240024002400240024020072f01ba02220a410a4b0d002018200b4102746a2101200b200a490d012001200c360200200741306a21010c020b410021214104210a02400240200b41054f0d00200b21010c010b4105210a4105210102400240200b417b6a0e020201000b200b41796a2101410121214106210a0c010b41002101410121210b41bc0210382204450d17200441003b01ba0220044100360200200420072f01ba022213200a417f736a220b3b01ba02200b410c4f0d052013200a41016a221d6b200b470d06200741306a221e200a41186c6a22132902102136201328020c21252013280208210d201329020021372018200a4102746a280200211c200441046a2018201d4102746a200b41027410d40b1a200441306a201e201d41186c6a200b41186c10d40b1a2007200a3b01ba022004200720211b220a41046a221d20014102746a210b02400240200141016a2213200a2f01ba0222184d0d00200b200c360200200a41306a210b0c010b201d20134102746a200b201820016b221d41027410d50b1a200b200c360200200a41306a220b201341186c6a200b200141186c6a201d41186c10d50b1a0b200b200141186c6a221320203602142013201f3602102013201436020c2013200836020820132038370200200a201841016a3b01ba022007280200220a0d02410021200c030b2018200b41016a22044102746a2001200a200b6b221341027410d50b1a2001200c360200200741306a2201200441186c6a2001200b41186c6a201341186c10d50b1a0b2001200b41186c6a221320203602142013201f3602102013201436020c20132008360208201320383702002007200a41016a3b01ba020c0b0b4100212020362138201c211d20042121034020072f01b8022108200a22142f01ba02221f410b490d02410021184104210a024020084105490d002008210a024002402008417b6a0e020201000b200841796a2108410121184106210a0c010b41002108410121184105210a0b41ec0210382204450d15200441003b01ba0220044100360200200420142f01ba02220b200a417f736a22013b01ba022001410c4f0d05200b200a41016a22076b2001470d06201441306a221e200a41186c6a220b2902102136200b28020c2119200b2802082116200b2902002131201441046a220b200a4102746a280200211c200441046a200b2007410274222f6a200141027410d40b1a200441306a201e200741186c6a200141186c10d40b1a2014200a3b01ba0220042f01ba02220141016a210b2001410c4f0d07201f200a6b220a200b470d08202041016a2120200441bc026a2014202f6a41bc026a200a41027410d40b1a4100210a024003402004200a4102746a41bc026a280200220b200a3b01b802200b2004360200200a20014f0d01200a200a2001496a220a20014d0d000b0b2004201420181b220b41046a22182008410274221f6a210702400240200841016a220a200b2f01ba0222014d0d002007201d360200200b41306a21180c010b2018200a4102746a2007200120086b221e41027410d50b1a2007201d360200200b41306a2218200a41186c6a2018200841186c6a201e41186c10d50b1a0b200141016a21072018200841186c6a221820383702102018202536020c2018200d36020820182037370200200b41bc026a21180240200841026a220d200141026a22254f0d002018200d4102746a2018200a4102746a200120086b41027410d50b1a0b2018200a4102746a2021360200200b20073b01ba020240200a20254f0d00200b201f6a41c0026a210a0340200a2802002201200841016a22083b01b8022001200b360200200a41046a210a20072008470d000b0b203121372016210d201921252036213820142107201c211d200421212014280200220a0d000b0b41ec021038220a450d13200a20053602bc02200a41003b01ba02200a4100360200200541003b01b8022005200a36020020062020470d07200a2f01ba022201410b4f0d08200641016a2106200a200141016a22083b01ba02200a200141186c6a220b413c6a2025360200200b41386a200d360200200b41306a2037370200200a20014102746a41046a201c360200200b41c0006a2036370200200a41bc026a20084102746a2004360200200420083b01b8022004200a360200202841016a2128200a21050c0a0b201441046a210102400240201f20084b0d00200120084102746a201d360200200841016a210a201441306a21010c010b2001200841016a220a4102746a200120084102746a2201201f20086b220441027410d50b1a2001201d360200201441306a2201200841186c6a220b41186a200b200441186c10d50b1a0b201f41016a21042001200841186c6a220120383702102001202536020c2001200d36020820012037370200201441bc026a2101201f41026a210b0240201f20084d0d00200841027420016a41086a2001200a4102746a201f20086b41027410d50b1a0b2001200a41027422086a2021360200201420043b01ba02200a200b4f0d08201420086a41bc026a2101034020012802002204200a3b01b80220042014360200200141046a2101200b200a41016a220a470d000c090b0b200b410b41a485c700104b000b41b485c700412841dc85c7001035000b2001410b41a485c700104b000b41b485c700412841dc85c7001035000b200b410c41b486c700104b000b41b485c700412841dc85c7001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b202841016a21280b02400240024002400240024002402013280200220a201341046a2802002201460d0020132013410c6a280200417f6a200a41016a7122083602002013280208200a410c6c6a220b280200220a0d012008210a0b200a2001470d040c010b200b2802082104200b280204210b20132013280210417f6a3602102013201328021420046b360214200320043602dc012003200a3602d8010240024002400240024020040d002003410b3a00800d0c010b200a2d0000210720032004417f6a3602dc012003200a41016a3602d801024020070d00200341e8016a200341d8016a10fe01024020032d00e801410b470d002003410b3a00800d0c020b200341800d6a200341e8016a41e00710d40b1a20032d00800d410b460d012003200c3602b41c200341013a00b01c200342013703a81c200341e8016a200341800d6a41e00710d40b1a200341e0146a200341a81c6a200341e8016a2033420010ca030240024020032802e0140e03040001040b20032903e814213320032802f014410b470d05202b108d022029108b030c050b20032802e8142204410b470d03200e108d02202c108b03420021330c040b2003410b3a00800d0b41002802d0a94e450d0741002802cca94e210141002802c8a94e210441002802d4a94e210c20034184026a41b8c0cd00360200200341f8016a42013703002003419c026a418ebdcd00ad4280808080f0048437020020034190026a41eebccd00ad428080808080048437030020034188026a4200370300200341f0016a41113602002003418c95ce003602f40120034281808080a00a3702a40220034100360298022003419495ce003602ec01200341013602e801200441b8c0cd00200c410246220c1b200341e8016a200141c0a4c000200c1b28021011030020032d00800d410b470d040c070b20032903e81421330c010b4200213320044111460d050b2033200f7c210f0240200b450d00200a103920082001460d010c040b20082001470d030b201520094d0d012017201741046a20152009417f736a41027410d50b1a2015417f6a221520094100201520094b1b22094b0d040c050b200341800d6a10e4080c020b200920151044000b200941016a20157021090c010b0b200b450d00200a10390b2034a7210a02400240201520094b0d0020034180026a4200370300200341f8016a4200370300200341e8016a41086a22014200370300200342003703e801200341d8016a41d584ce00410310cb012001200341d8016a41086a2204290000370300200320032900d8013703e801200341d8016a41a08ace00411a10cb01202441086a2004290000370000202420032900d801370000200341e8016a412010e0010c010b201220094102746a280200210120034180026a4200370300200341f8016a4200370300200341e8016a41086a22044200370300200342003703e801200341d8016a41d584ce00410310cb012004200341d8016a41086a220b290000370300200320032900d8013703e801200341d8016a41a08ace00411a10cb01202241086a200b290000370000202220032900d801370000200320013602800d200341e8016a4120200341800d6a410410e9010b200320153602880d200320123602800d2003200a3602840d20034180026a4200370300200341f8016a4200370300200341e8016a41086a22014200370300200342003703e801200341d8016a41d584ce00410310cb012001200341d8016a41086a2204290000370300200320032900d8013703e801200341d8016a41d089ce00410d10cb01202441086a2004290000370000202420032900d801370000200341e8016a200341800d6a10f3070240200a41ffffffff0371450d00201210390b2005450d032005210a024003402006450d012006417f6a2106200520052f01ba024102746a41bc026a2802002105200a2802bc02210a0c000b0b2028450d010240024002400240200a2f01ba020d00410021040340410021010240200a2802002208450d00200441016a210c200a2f01b802210b200821010b024041ec0241bc0220041b450d00200a10390b2001450d04200c21042001210a200b20012f01ba024f0d000b2001200b41186c6a41306a21082001200b4102746a220a41046a28020021130240200c0d002001210a0c020b200a41c0026a280200210a0240200c417f6a2204450d000340200a2802bc02210a2004417f6a22040d000b0b410021050c020b200a41306a2108200a28020421134100210b200a21010b200b41016a21050b2028417f6a21070240024002402001200b41186c6a220141386a280200220c450d002001413c6a2802002106200141c0006a2802002115200141c4006a28020021122008290200210f03400240024002400240200f422088a7220b200fa72209460d00200341800d6a20131081082006417f6a2208200b20096b712204410c6c41046a2201417f4c0d0920032802880d211820032802800d21140240024020010d00410121170c010b200110382217450d100b200341003602f001200320013602ec01200320173602e801200341e8016a200410ac02200921010340200c2001410c6c6a22042802002004280208200341e8016a10b902200141016a2008712201200b470d000b2014201820032802e801220120032802f00110e901024020032802ec01450d00200110390b024020032802840d450d00201410390b02400240200b2009490d0002402006200b490d00200b21014100210b0c020b200b200641f08bc700104b000b2006210120062009490d020b024020012009460d002001410c6c2009410c6c22016b2104200c20016a210103400240200141046a280200450d00200128020010390b2001410c6a2101200441746a22040d000b0b0240200b450d00200b410c6c2104200c210103400240200141046a280200450d00200128020010390b2001410c6a2101200441746a22040d000b0b02402006450d002006410c6c450d00200c10390b200341e8016a201310800820032802e801220120032802f0012015201210eb0320032802ec01450d03200110390c030b200341e8016a201310810820032802e801220120032802f00110e001024020032802ec01450d00200110390b200341e8016a201310800820032802e801220120032802f00110e001024020032802ec01450d00200110390b20062009490d012006450d022006410c6c450d02200c10390c020b41e78ac700412341808cc7001035000b2009200641f08bc700104b000b2007450d06200a450d0202400240024002402005200a2f01ba02490d00410021040340410021010240200a2802002205450d00200441016a2108200a2f01b802210b200521010b024041ec0241bc0220041b450d00200a10390b024020010d004100210a0c050b200821042001210a200b20012f01ba024f0d000b2001200b41186c6a41306a21092001200b4102746a220a41046a2802002113024020080d002001210a0c020b200a41c0026a280200210a02402008417f6a2204450d000340200a2802bc02210a2004417f6a22040d000b0b410021050c020b200a200541186c6a41306a2109200a20054102746a41046a2802002113200a21012005210b0b200b41016a21050b2001200b41186c6a220141c4006a2802002112200141c0006a28020021152001413c6a2802002106200141386a280200210c2009290200210f0b2007417f6a2107200c0d000b0b2007450d05034002400240024002402005200a2f01ba02490d00410021040340410021010240200a2802002208450d00200441016a210c200a2f01b802210b200821010b024041ec0241bc0220041b450d00200a10390b024020010d004100210a0c050b200c21042001210a200b20012f01ba024f0d000b2001200b41186c6a41306a21080240200c0d002001210a0c020b200b41027420016a41c0026a280200210a0240200c417f6a2204450d000340200a2802bc02210a2004417f6a22040d000b0b410021050c020b200a200541186c6a41306a21082005210b200a21010b200b41016a21050b2001200b41186c6a2201413c6a2802002119200141386a2802002116200829020021310b2016450d07024002402031422088a7220b2031a72201490d0002402019200b490d00200b21044100210b0c020b200b201941f08bc700104b000b2019210420192001490d030b024020042001460d002004410c6c2001410c6c22016b2104201620016a210103400240200141046a280200450d00200128020010390b2001410c6a2101200441746a22040d000b0b0240200b450d00200b410c6c21042016210103400240200141046a280200450d00200128020010390b2001410c6a2101200441746a22040d000b0b2007417f6a210702402019450d002019410c6c450d00201610390b20070d000c060b0b41a5cbc800412b41d0cbc8001035000b41e78ac700412341808cc7001035000b00000b1034000b200a450d010b410021010340200a2802002104024041ec0241bc0220011b450d00200a10390b2001417f6a21012004210a20040d000b0b200341e8016a41186a220a4200370300200341e8016a41106a22014200370300200341e8016a41086a22044200370300200342003703e801200341800d6a41dee8c600410c10cb012004200341800d6a41086a220b290000370300200320032900800d3703e801200341800d6a41cce9c600410810cb01200a200b290000370300200120032900800d370300200341e8016a412041b8c0cd00410010e901200041186a41003a0000200041106a2023ad42a08d067e4280e59af7007c37030020004201370308200042003703000240201b41ffffffff0371450d00201a10390b200328023c21010240200341386a410c6a280200220a450d00200a41246c21002001210a034002400240024002400240200a2d00000e050400010204030b200a410c6a280200450d03200a41086a28020010390c030b200a410c6a280200450d02200a41086a28020010390c020b200a410c6a280200450d01200a41086a28020010390c010b200a41086a280200450d00200a41046a28020010390b200a41246a210a2000415c6a22000d000b0b0240200341c0006a280200220a450d00200a41246c450d00200110390b200228021821040240200241206a280200220a450d00200a41306c2100200441086a210a03400240200a2802002201450d00200141c8006c450d00200a417c6a28020010390b200a41306a210a200041506a22000d000b0b2002411c6a280200220a450d05200a41306c450d05200410390c050b200b280200220b20184f0d002025200b412c6c6a220a2802002101200a4102360200201a200a41106a290200370300201c200a41186a290200370300201b200a41206a290200370300200341800d6a41206a220b200a41286a2802003602002003200a41086a2902003703800d0240024002402001417f6a0e020101000b200a2802042115024020120d0020204200370300201d420037030020174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017201f290000370300200320032900d8013703e801200341d8016a41f0c8c200410f10cb01201e201f290000370000202220032900d801370000200341e0146a200341e8016a10e4050240024020032802e014220a0d00200342003702ac1c200320213602a81c410021122021210a0c010b202c41086a202d41086a280200360200202c202d2902003702002003200a3602a81c20032802b41c21120b202a0d022003201241016a202e703602b41c200341e8016a41206a2219200b2802003602002020201b290300370300201d201c2903003703002017201a290300370300200320032903800d3703e801024020032802b01c220120032802ac1c470d00200341a81c6a200110c50220032802a81c210a20032802b01c21010b200a2001412c6c6a220a2015360200200a410c6a2017290300370200200a20032903e801370204200a41146a201d290300370200200a411c6a2020290300370200200a41246a2019280200360200200a20123602282028200141016a360200202b2028290300370300200320032903a81c220f3703e0140240200fa7220a0d0020204200370300201d420037030020174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017201f290000370300200320032900d8013703e801200341d8016a41f0c8c200410f10cb01201e201f290000370000202220032900d801370000200341e8016a412010e0010c020b20204200370300201d420037030020174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017201f290000370300200320032900d8013703e801200341d8016a41f0c8c200410f10cb01201e201f290000370000202220032900d801370000200341e8016a200341e0146a10ef0520032802e4142201450d012001412c6c450d01200a10390c010b20204200370300201d420037030020174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017201f290000370300200320032900d8013703e801200341d8016a41c0cac200411410cb01201e201f290000370000202220032900d801370000200341e0146a200341e8016a412010e60320032802e014220a2021200a1b2119024020032902e4144200200a1b220f422088a72229450d004100210a2029210b20292101024003400240024020152019200b410176200a6a220b4102746a221628020022124d0d00200b41016a210a0c010b20152012460d02200b21010b2001200a6b210b2001200a4b0d000c020b0b2016201641046a2029200b417f736a41027410d50b1a200f4280808080707c210f0b200320193602e0142003200f3702e41420204200370300201d420037030020174200370300200342003703e801200341d8016a41b9c3c200410d10cb012017201f290000370300200320032900d8013703e801200341d8016a41c0cac200411410cb01201e201f290000370000202220032900d801370000200341e8016a4120200341e0146a108e04200f42ffffffff0383500d00201910390b201421012013210a0c010b0b41a0c4c000413941dcc4c0001035000b1032000b200e410047210c0b200328023c21010240200341386a410c6a280200220a450d00200a41246c21002001210a034002400240024002400240200a2d00000e050400010204030b200a410c6a280200450d03200a41086a28020010390c030b200a410c6a280200450d02200a41086a28020010390c020b200a410c6a280200450d01200a41086a28020010390c010b200a41086a280200450d00200a41046a28020010390b200a41246a210a2000415c6a22000d000b0b0240200341c0006a280200220a450d00200a41246c450d00200110390b0240200b450d0002402004450d00200441f4026c21002006210a0340200a10c203200a41f4026a210a2000418c7d6a22000d000b0b2005450d00200541f4026c450d00200610390b0240200c450d0002402007450d00200741d0006c21012009210a0340200a28020021000240200a41086a2204280200220b450d00200010390b200a20003602002004200b360200200a41d0006a210a200141b07f6a22010d000b0b2008450d00200841d0006c450d00200910390b200228021821040240200241206a280200220a450d00200a41306c2100200441086a210a03400240200a2802002201450d00200141c8006c450d00200a417c6a28020010390b200a41306a210a200041506a22000d000b0b2002411c6a280200220a450d00200a41306c450d00200410390b200341f01f6a24000bd70e01137f23004190046b22012400200141e0016a41186a22024200370300200141e0016a41106a22034200370300200141e0016a41086a22044200370300200142003703e001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703e001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141e0016a412010ce03200141e0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802e001220720012802e80110c703024020012802c80322024102460d00200141d0006a200141b8026a41c40010d40b1a200141186a41086a20014188036a290300370300200141186a41106a20014190036a290300370300200141186a41186a20014198036a290300370300200141186a41206a200141a0036a290300370300200141c0006a200141a8036a290300370300200141c8006a200141b0036a2903003703002001200129038003370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802fc02210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802e401450d00200710390b0240024020024102470d00200141e0016a41186a4200370300200141e0016a41106a4200370300200141e0016a41086a22024200370300200142003703e001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703e001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141e0016a412010c703024020012802c80322024102470d0041002104200141e0016a410041c40010d60b1a200141d8016a4200370300200141d0016a4200370300200141a8016a41206a4200370300200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141e0016a200141b8026a41c40010d40b1a200520014188036a290300370300200141a8016a41106a20014190036a290300370300200141a8016a41186a20014198036a290300370300200141a8016a41206a200141a0036a290300370300200141d0016a200141a8036a290300370300200141d8016a200141b0036a29030037030020012001290380033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802fc02210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141e0016a200141d0006a41c40010d40b1a200141a8016a41306a200141186a41306a290300370300200141a8016a41286a200141186a41286a290300370300200141a8016a41206a200141186a41206a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141e0016a41c40010d40b1a200141d4036a2009360200200141cc036a201236020020014188036a200141a8016a41086a29030037030020014190036a200141b8016a29030037030020014198036a200141c0016a290300370300200141a0036a200141c8016a290300370300200141a8036a200141d0016a290300370300200141b0036a200141d8016a290300370300200120003602fc022001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137038003200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bd70e01137f23004190046b22012400200141e0016a41186a22024200370300200141e0016a41106a22034200370300200141e0016a41086a22044200370300200142003703e001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703e001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141e0016a412010ce03200141e0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802e001220720012802e80110c703024020012802c80322024102460d00200141d0006a200141b8026a41c80010d40b1a200141186a41086a2001418c036a290200370300200141186a41106a20014194036a290200370300200141186a41186a2001419c036a290200370300200141186a41206a200141a4036a290200370300200141c0006a200141ac036a290200370300200141c8006a200141b4036a2802003602002001200129028403370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802e401450d00200710390b0240024020024102470d00200141e0016a41186a4200370300200141e0016a41106a4200370300200141e0016a41086a22024200370300200142003703e001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703e001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141e0016a412010c703024020012802c80322024102470d0041002104200141e0016a410041c80010d60b1a200141d8016a4100360200200141d0016a4200370300200141a8016a41206a4200370300200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141e0016a200141b8026a41c80010d40b1a20052001418c036a290200370300200141a8016a41106a20014194036a290200370300200141a8016a41186a2001419c036a290200370300200141a8016a41206a200141a4036a290200370300200141d0016a200141ac036a290200370300200141d8016a200141b4036a28020036020020012001290284033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141e0016a200141d0006a41c80010d40b1a200141a8016a41306a200141186a41306a280200360200200141a8016a41286a200141186a41286a290300370300200141a8016a41206a200141186a41206a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141e0016a41c80010d40b1a200141d4036a2009360200200141cc036a20123602002001418c036a200141a8016a41086a29030037020020014194036a200141b8016a2903003702002001419c036a200141c0016a290300370200200141a4036a200141c8016a290300370200200141ac036a200141d0016a290300370200200141b4036a200141d8016a28020036020020012000360280032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137028403200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000b820a03127f017e017f23004180046b22012400200141a8016a22024200370300200141a0016a2203420037030020014190016a41086a22044200370300200142003703900120014198026a41d8adc300410b10cb01200420014198026a41086a220529000037030020012001290098023703900120014198026a4184b0c300411310cb01200220052900003703002003200129009802370300200120014190016a412010ce0320014190016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141a8026a200128029001220720012802980110c7030240024020012802b80322024102470d000c010b200141186a200141a8026a41f40010d40b1a200141086a41086a200141e4036a2902003703002001200141dc036a290200370308200141d8036a2802002108200141d4036a2802002109200141d0036a280200210a200141cc036a280200210b200141c8036a280200210c200141c4036a280200210d200141c0036a280200210e20012802bc03210f20012802b403210520012802b003211020012802ac03211120012802a803211220012903a0032113200128029c032104200141ec036a28020021140b0240200128029401450d00200710390b0240024020024102470d0042002113200141a8016a4200370300200141a0016a420037030020014190016a41086a22024200370300200142003703900120014198026a41f1d5c400410d10cb01200220014198026a41086a220529000037030020012001290098023703900120014198026a418bd6c400410c10cb01200341086a20052900003700002003200129009802370000200141a8026a20014190016a412010c703024020012802b80322024102470d004100210420014190016a410041f40010d60b1a2005420037030020014200370398024106210c41e400210b4102210a41c8012109410121084100210e41002102410021054101211041012111410121120c020b20014190016a200141a8026a41f40010d40b1a2005200141e4036a2902003703002001200141dc036a29020037039802200141d8036a2802002108200141d4036a2802002109200141d0036a280200210a200141cc036a280200210b200141c8036a280200210c200141c4036a280200210d200141c0036a280200210e20012802bc03210f20012802b403210520012802b003211020012802ac03211120012802a803211220012903a0032113200128029c032104200141ec036a28020021140c010b20014190016a200141186a41f40010d40b1a20014198026a41086a200141086a41086a29030037030020012001290308370398020b024020042000460d00200141a8026a20014190016a41f40010d40b1a200141c4036a200d360200200141bc036a200f360200200141e4036a200141a0026a290300370200200120083602d803200120093602d4032001200a3602d0032001200b3602cc032001200c3602c8032001200e3602c003200120023602b803200120053602b403200120103602b003200120113602ac03200120123602a803200120133703a0032001200036029c0320012001290398023702dc03200120143602ec0320014188026a200610890820012802900221032001280288022102200141003602f803200142013703f003200141a8026a200141f0036a10f1072002200320012802f00320012802f80310e901024020012802f403450d0020012802f00310390b200128028c02450d00200210390b20014180046a24000bda0d01137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a80120014180026a41d8adc300410b10cb01200420014180026a41086a220529000037030020012001290080023703a80120014180026a4184b0c300411310cb012002200529000037030020032001290080023703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141f0006a41206a200141b8026a41206a290300370300200141f0006a41186a200141b8026a41186a290300370300200141f0006a41106a200141b8026a41106a290300370300200141f0006a41086a200141b8026a41086a290300370300200120012903b80237037020012802e00221042001411c6a200141e4026a41d40010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a4200370300200141a8016a41106a4200370300200141a8016a41086a22024200370300200142003703a80120014180026a41f1d5c400410d10cb01200220014180026a41086a220429000037030020012001290080023703a80120014180026a418bd6c400410c10cb01200341086a20042900003700002003200129008002370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0020014180026a41206a420037030020014180026a41186a420037030020014180026a41106a420037030020044200370300200142003703800241002104200141a8016a410041d40010d60b1a20014198016a41086a420037030020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b20014180026a41206a200141b8026a41206a29030037030020014180026a41186a200141b8026a41186a29030037030020014180026a41106a200141b8026a41106a2903003703002004200141b8026a41086a290300370300200120012903b8023703800220012802e0022104200141a8016a200141e4026a41d40010d40b1a20014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b20014180026a41206a200141f0006a41206a29030037030020014180026a41186a200141f0006a41186a29030037030020014180026a41106a200141f0006a41106a29030037030020014180026a41086a200141f0006a41086a2903003703002001200129037037038002200141a8016a2001411c6a41d40010d40b1a20014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41206a20014180026a41206a290300370300200141b8026a41186a20014180026a41186a290300370300200141b8026a41106a20014180026a41106a290300370300200141b8026a41086a20014180026a41086a29030037030020012001290380023703b802200120003602e002200141e4026a200141a8016a41d40010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a20014198016a41086a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bff0d01137f23004190046b22012400200141d8016a41186a22024200370300200141d8016a41106a22034200370300200141d8016a41086a22044200370300200142003703d801200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703d801200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141d8016a412010ce03200141d8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802d801220720012802e00110c703024020012802c80322024102460d00200141c8006a200141b8026a41cc0010d40b1a200141186a41086a20014190036a290300370300200141186a41106a20014198036a290300370300200141186a41186a200141a0036a290300370300200141186a41206a200141a8036a290300370300200141c0006a200141b0036a2903003703002001200129038803370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802dc01450d00200710390b0240024020024102470d00200141d8016a41186a4200370300200141d8016a41106a4200370300200141d8016a41086a22024200370300200142003703d801200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703d801200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141d8016a412010c703024020012802c80322024102470d0041002104200141d8016a410041cc0010d60b1a200141d0016a4200370300200141a8016a41206a4200370300200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141d8016a200141b8026a41cc0010d40b1a200520014190036a290300370300200141a8016a41106a20014198036a290300370300200141a8016a41186a200141a0036a290300370300200141a8016a41206a200141a8036a290300370300200141d0016a200141b0036a29030037030020012001290388033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141d8016a200141c8006a41cc0010d40b1a200141a8016a41286a200141186a41286a290300370300200141a8016a41206a200141186a41206a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141d8016a41cc0010d40b1a200141d4036a2009360200200141cc036a201236020020014190036a200141a8016a41086a29030037030020014198036a200141b8016a290300370300200141a0036a200141c0016a290300370300200141a8036a200141c8016a290300370300200141b0036a200141d0016a29030037030020012000360284032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137038803200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bc50e01137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a801200141f8016a41d8adc300410b10cb012004200141f8016a41086a2205290000370300200120012900f8013703a801200141f8016a4184b0c300411310cb0120022005290000370300200320012900f8013703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141e8006a41286a200141b8026a41286a280200360200200141e8006a41206a200141b8026a41206a290300370300200141e8006a41186a200141b8026a41186a290300370300200141e8006a41106a200141b8026a41106a290300370300200141e8006a41086a200141b8026a41086a290300370300200120012903b80237036820012802e4022104200141186a200141e8026a41d00010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a4200370300200141a8016a41106a4200370300200141a8016a41086a22024200370300200142003703a801200141f8016a41f1d5c400410d10cb012002200141f8016a41086a2205290000370300200120012900f8013703a801200141f8016a418bd6c400410c10cb01200341086a2005290000370000200320012900f801370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0041002104200141a0026a4100360200200141f8016a41206a4200370300200141f8016a41186a4200370300200141f8016a41106a420037030020054200370300200142003703f801200141a8016a410041d00010d60b1a20014198016a41086a420037030020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141f8016a41286a200141b8026a41286a280200360200200141f8016a41206a200141b8026a41206a290300370300200141f8016a41186a200141b8026a41186a290300370300200141f8016a41106a200141b8026a41106a2903003703002005200141b8026a41086a290300370300200120012903b8023703f80120012802e4022104200141a8016a200141e8026a41d00010d40b1a20014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141f8016a41286a200141e8006a41286a280200360200200141f8016a41206a200141e8006a41206a290300370300200141f8016a41186a200141e8006a41186a290300370300200141f8016a41106a200141e8006a41106a290300370300200141f8016a41086a200141e8006a41086a290300370300200120012903683703f801200141a8016a200141186a41d00010d40b1a20014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41286a200141f8016a41286a280200360200200141b8026a41206a200141f8016a41206a290300370300200141b8026a41186a200141f8016a41186a290300370300200141b8026a41106a200141f8016a41106a290300370300200141b8026a41086a200141f8016a41086a290300370300200120012903f8013703b802200120003602e402200141e8026a200141a8016a41d00010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a20014198016a41086a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bf90901147f23004180046b22012400200141a8016a22024200370300200141a0016a2203420037030020014190016a41086a22044200370300200142003703900120014198026a41d8adc300410b10cb01200420014198026a41086a220529000037030020012001290098023703900120014198026a4184b0c300411310cb01200220052900003703002003200129009802370300200120014190016a412010ce0320014190016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141a8026a200128029001220720012802980110c703024020012802b80322024102460d00200141186a200141a8026a41f80010d40b1a200141086a41086a200141e4036a2902003703002001200141dc036a290200370308200141d8036a2802002108200141d4036a2802002109200141d0036a280200210a200141cc036a280200210b200141c8036a280200210c200141c4036a280200210d200141c0036a280200210e20012802bc03210f20012802b403210520012802b003211020012802ac03211120012802a803211220012802a403211320012802a0032104200141ec036a28020021140b0240200128029401450d00200710390b0240024020024102470d00200141a8016a4200370300200141a0016a420037030020014190016a41086a22024200370300200142003703900120014198026a41f1d5c400410d10cb01200220014198026a41086a220529000037030020012001290098023703900120014198026a418bd6c400410c10cb01200341086a20052900003700002003200129009802370000200141a8026a20014190016a412010c703024020012802b80322024102470d004100210420014190016a410041f80010d60b1a2005420037030020014200370398024106210c41e400210b4102210a41c801210941012108410021134100210e41002102410021054101211041012111410121120c020b20014190016a200141a8026a41f80010d40b1a2005200141e4036a2902003703002001200141dc036a29020037039802200141d8036a2802002108200141d4036a2802002109200141d0036a280200210a200141cc036a280200210b200141c8036a280200210c200141c4036a280200210d200141c0036a280200210e20012802bc03210f20012802b403210520012802b003211020012802ac03211120012802a803211220012802a403211320012802a0032104200141ec036a28020021140c010b20014190016a200141186a41f80010d40b1a20014198026a41086a200141086a41086a29030037030020012001290308370398020b024020042000460d00200141a8026a20014190016a41f80010d40b1a200141c4036a200d360200200141bc036a200f360200200141e4036a200141a0026a290300370200200120083602d803200120093602d4032001200a3602d0032001200b3602cc032001200c3602c8032001200e3602c003200120023602b803200120053602b403200120103602b003200120113602ac03200120123602a803200120133602a403200120003602a00320012001290398023702dc03200120143602ec0320014188026a200610890820012802900221042001280288022102200141003602f803200142013703f003200141a8026a200141f0036a10f1072002200420012802f00320012802f80310e901024020012802f403450d0020012802f00310390b200128028c02450d00200210390b20014180046a24000bdd0901137f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41fc0010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b803211320012802b40321040b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2005290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210420014198016a410041fc0010d60b1a20054200370300200142003703a8024106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b20014198016a200141b8026a41fc0010d40b1a2005200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b803211320012802b40321040c010b20014198016a200141186a41fc0010d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41fc0010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120003602b403200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321040b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210f20014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a4101210941002102410021054101211141012112410121040c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321040c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120003602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03210420012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210f20014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a4101210941002102410021054101211141012104410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03210420012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120003602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003210420012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210f20014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a4101210941002102410021054101210441012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003210420012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120003602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210420012802c003210520012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210f20014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a4101210941002102410021044101210541012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210420012802c003210520012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120003602c403200120053602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bde0901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210420012802c003210520012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210220014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a410121094100210f410021044101210541012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210420012802c003210520012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b200041046a280200210302400240200028020022002002470d0020024101470d0120032010460d010b200141b8026a20014198016a41800110d40b1a200141d4036a200e360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120043602c403200120053602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320012003ad4220862000ad843703c80320014198026a200610890820012802a0022100200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200020012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bee09040d7f017e037f017e23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c7030240024020012802c80322024102470d000c010b200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d0036a290300210e20012802cc03210f20012802c403210420012802c003210520012802bc03211020012802b80321110b0240200128029c01450d00200710390b0240024020024102470d0042002112200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210220014198016a410041800110d60b1a20044200370300200142003703a8024106210d41e400210c4102210b41c801210a410121094200210e410021044101210541012110410121110c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141d0036a290300220e428080808070832112200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d20012802cc03210f20012802c403210420012802c003210520012802bc03211020012802b80321110c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a802200e4280808080708321120b200041046a28020021030240024020002802002200200ea7470d002000450d0120032012422088a7460d010b200141b8026a20014198016a41800110d40b1a200141cc036a200f360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d803200120023602c803200120043602c403200120053602c003200120103602bc03200120113602b803200120083602fc03200120012903a8023702ec0320012003ad4220862000ad843703d00320014198026a200610890820012802a0022100200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200020012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a2802002104200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210e20014198016a410041800110d60b1a20044200370300200142003703a8024106210441e400210c4102210b41c801210a4101210941002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a2802002104200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc03200120003602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a2802002104200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210e20014198016a410041800110d60b1a20044200370300200142003703a8024106210c41e40021044102210b41c801210a4101210941002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a2802002104200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e4032001200b3602e003200120003602dc032001200c3602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a2802002104200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210e20014198016a410041800110d60b1a20044200370300200142003703a8024106210c41e400210b4102210441c801210a4101210941002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a2802002104200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f4036a200141b0026a290300370200200120093602e8032001200a3602e403200120003602e0032001200b3602dc032001200c3602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a2802002104200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210e20014198016a410041800110d60b1a20044200370300200142003703a8024106210c41e400210b4102210a41c80121044101210941002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002109200141e4036a2802002104200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f4036a200141b0026a290300370200200120093602e803200120003602e4032001200a3602e0032001200b3602dc032001200c3602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc10901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002104200141e4036a2802002109200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2204290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2004290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210e20014198016a410041800110d60b1a20044200370300200142003703a8024106210c41e400210b4102210a41c80121094101210441002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2004200141f4036a2902003703002001200141ec036a2902003703a802200141fc036a2802002108200141e8036a2802002104200141e4036a2802002109200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f4036a200141b0026a290300370200200120003602e803200120093602e4032001200a3602e0032001200b3602dc032001200c3602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120083602fc03200120012903a8023702ec0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bc50901127f23004190046b22012400200141b0016a22024200370300200141a8016a2203420037030020014198016a41086a220442003703002001420037039801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a802370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a200128029801220720012802a00110c703024020012802c80322024102460d00200141186a200141b8026a41800110d40b1a200141086a41086a200141f8036a2903003703002001200141f0036a290300370308200141ec036a2802002104200141e8036a2802002108200141e4036a2802002109200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120b0240200128029c01450d00200710390b0240024020024102470d00200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2205290000370300200120012900a80237039801200141a8026a418bd6c400410c10cb01200341086a2005290000370000200320012900a802370000200141b8026a20014198016a412010c703024020012802c80322024102470d004100210420014198016a410041800110d60b1a20054100360200200142003703a8024106210c41e400210b4102210a41c8012109410121084100210e41002102410021054101211041012111410121120c020b20014198016a200141b8026a41800110d40b1a2005200141f8036a2903003703002001200141f0036a2903003703a802200141ec036a2802002104200141e8036a2802002108200141e4036a2802002109200141e0036a280200210a200141dc036a280200210b200141d8036a280200210c200141d4036a280200210d200141d0036a280200210e20012802cc03210f20012802c403210520012802c003211020012802bc03211120012802b80321120c010b20014198016a200141186a41800110d40b1a200141a8026a41086a200141086a41086a290300370300200120012903083703a8020b024020042000460d00200141b8026a20014198016a41800110d40b1a200141d4036a200d360200200141cc036a200f360200200141f8036a200141b0026a290300370300200120003602ec03200120083602e803200120093602e4032001200a3602e0032001200b3602dc032001200c3602d8032001200e3602d003200120023602c803200120053602c403200120103602c003200120113602bc03200120123602b803200120012903a8023703f00320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000ba20903077f017e0d7f230041f0036b22012400200141a0016a2202420037030020014198016a2203420037030020014188016a41086a22044200370300200142003703880120014198026a41d8adc300410b10cb01200420014198026a41086a220529000037030020012001290098023703880120014198026a4184b0c300411310cb01200220052900003703002003200129009802370300200120014188016a412010ce0320014188016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141a8026a200128028801220720012802900110c7030240024020012802b80322024102470d000c010b200141086a200141a8026a41800110d40b1a200141ec036a2802002105200141e4036a2902002108200141e0036a2802002104200141dc036a2802002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403211220012802b003211320012802ac03211420012802a80321150b0240200128028c01450d00200710390b0240024020024102470d0042002108200141a0016a420037030020014198016a420037030020014188016a41086a22024200370300200142003703880120014198026a41f1d5c400410d10cb01200220014198026a41086a220429000037030020012001290098023703880120014198026a418bd6c400410c10cb01200341086a20042900003700002003200129009802370000200141a8026a20014188016a412010c703024020012802b80322024102470d004100210920014188016a410041800110d60b1a4106210e41e400210d4102210c41c801210b4101210a410021044100211041002102410021124101211341012114410121150c020b20014188016a200141a8026a41800110d40b1a200141ec036a2802002105200141e4036a2902002108200141e0036a2802002104200141dc036a2802002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403211220012802b003211320012802ac03211420012802a80321150c010b20014188016a200141086a41800110d40b1a0b024020042000460d00200141a8026a20014188016a41800110d40b1a200141c4036a200f360200200141bc036a2011360200200120053602ec03200120083702e403200120003602e003200120093602dc032001200a3602d8032001200b3602d4032001200c3602d0032001200d3602cc032001200e3602c803200120103602c003200120023602b803200120123602b403200120133602b003200120143602ac03200120153602a80320014188026a200610890820012802900221032001280288022102200141003602a0022001420137039802200141a8026a20014198026a10f1072002200320012802980220012802a00210e9010240200128029c02450d0020012802980210390b200128028c02450d00200210390b200141f0036a24000b840903077f027e0b7f230041f0036b22012400200141a0016a2202420037030020014198016a2203420037030020014188016a41086a22044200370300200142003703880120014198026a41d8adc300410b10cb01200420014198026a41086a220529000037030020012001290098023703880120014198026a4184b0c300411310cb01200220052900003703002003200129009802370300200120014188016a412010ce0320014188016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141a8026a200128028801220720012802900110c7030240024020012802b80322024102470d000c010b200141086a200141a8026a41800110d40b1a200141e8036a2903002108200141e4036a2802002104200141dc036a2902002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403210520012802b003211220012802ac03211320012802a80321140b0240200128028c01450d00200710390b0240024020024102470d00200141a0016a420037030020014198016a420037030020014188016a41086a22024200370300200142003703880120014198026a41f1d5c400410d10cb01200220014198026a41086a220429000037030020012001290098023703880120014198026a418bd6c400410c10cb01200341086a20042900003700002003200129009802370000200141a8026a20014188016a412010c703024020012802b80322024102470d004100210420014188016a410041800110d60b1a4106210e41e400210d4102210c41c801210b4101210a42002109420021084100211041002102410021054101211241012113410121140c020b20014188016a200141a8026a41800110d40b1a200141e8036a2903002108200141e4036a2802002104200141dc036a2902002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403210520012802b003211220012802ac03211320012802a80321140c010b20014188016a200141086a41800110d40b1a0b024020042000460d00200141a8026a20014188016a41800110d40b1a200141c4036a200f360200200141bc036a2011360200200120083703e803200120003602e403200120093702dc032001200a3602d8032001200b3602d4032001200c3602d0032001200d3602cc032001200e3602c803200120103602c003200120023602b803200120053602b403200120123602b003200120133602ac03200120143602a80320014188026a200610890820012802900221032001280288022102200141003602a0022001420137039802200141a8026a20014198026a10f1072002200320012802980220012802a00210e9010240200128029c02450d0020012802980210390b200128028c02450d00200210390b200141f0036a24000bf10901137f23004190046b22012400200141c0016a22024200370300200141b8016a22034200370300200141a8016a41086a22044200370300200142003703a801200141b8026a41d8adc300410b10cb012004200141b8026a41086a2205290000370300200120012900b8023703a801200141b8026a4184b0c300411310cb0120022005290000370300200320012900b8023703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141c8026a20012802a801220720012802b00110c703024020012802d80322024102460d00200141186a200141c8026a41800110d40b1a200141086a41086a20014184046a2802003602002001200141fc036a2902003703082001418c046a280200210820014188046a2802002104200141f8036a2802002109200141f4036a280200210a200141f0036a280200210b200141ec036a280200210c200141e8036a280200210d200141e4036a280200210e200141e0036a280200210f20012802dc03211020012802d403210520012802d003211120012802cc03211220012802c80321130b024020012802ac01450d00200710390b0240024020024102470d00200141c0016a4200370300200141b8016a4200370300200141a8016a41086a22024200370300200142003703a801200141b8026a41f1d5c400410d10cb012002200141b8026a41086a2204290000370300200120012900b8023703a801200141b8026a418bd6c400410c10cb01200341086a2004290000370000200320012900b802370000200141c8026a200141a8016a412010c703024020012802d80322024102470d0041002104200141a8016a410041800110d60b1a20014198016a41086a410036020020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141a8016a200141c8026a41800110d40b1a20014198016a41086a20014184046a2802003602002001200141fc036a290200370398012001418c046a280200210820014188046a2802002104200141f8036a2802002109200141f4036a280200210a200141f0036a280200210b200141ec036a280200210c200141e8036a280200210d200141e4036a280200210e200141e0036a280200210f20012802dc03211020012802d403210520012802d003211120012802cc03211220012802c80321130c010b200141a8016a200141186a41800110d40b1a20014198016a41086a200141086a41086a28020036020020012001290308370398010b024020042000460d00200141c8026a200141a8016a41800110d40b1a200141e4036a200e360200200141dc036a201036020020014184046a200141a0016a280200360200200120093602f8032001200a3602f4032001200b3602f0032001200c3602ec032001200d3602e8032001200f3602e003200120023602d803200120053602d403200120113602d003200120123602cc03200120133602c8032001200836028c04200120003602880420012001290398013702fc03200141a8026a200610890820012802b002210420012802a8022102200141003602c002200142013703b802200141c8026a200141b8026a10f1072002200420012802b80220012802c00210e901024020012802bc02450d0020012802b80210390b20012802ac02450d00200210390b20014190046a24000bc50e01137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a801200141f8016a41d8adc300410b10cb012004200141f8016a41086a2205290000370300200120012900f8013703a801200141f8016a4184b0c300411310cb0120022005290000370300200320012900f8013703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141e8006a41286a200141b8026a41286a290300370300200141e8006a41206a200141b8026a41206a290300370300200141e8006a41186a200141b8026a41186a290300370300200141e8006a41106a200141b8026a41106a290300370300200141e8006a41086a200141b8026a41086a290300370300200120012903b80237036820012802e80221042001411c6a200141ec026a41cc0010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a4200370300200141a8016a41106a4200370300200141a8016a41086a22024200370300200142003703a801200141f8016a41f1d5c400410d10cb012002200141f8016a41086a2204290000370300200120012900f8013703a801200141f8016a418bd6c400410c10cb01200341086a2004290000370000200320012900f801370000200141b8026a200141a8016a412010c703024020012802c80322024102470d00200141a0026a4200370300200141f8016a41206a4200370300200141f8016a41186a4200370300200141f8016a41106a420037030020044200370300200142003703f80141002104200141a8016a410041cc0010d60b1a20014198016a41086a420037030020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141f8016a41286a200141b8026a41286a290300370300200141f8016a41206a200141b8026a41206a290300370300200141f8016a41186a200141b8026a41186a290300370300200141f8016a41106a200141b8026a41106a2903003703002004200141b8026a41086a290300370300200120012903b8023703f80120012802e8022104200141a8016a200141ec026a41cc0010d40b1a20014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141f8016a41286a200141e8006a41286a290300370300200141f8016a41206a200141e8006a41206a290300370300200141f8016a41186a200141e8006a41186a290300370300200141f8016a41106a200141e8006a41106a290300370300200141f8016a41086a200141e8006a41086a290300370300200120012903683703f801200141a8016a2001411c6a41cc0010d40b1a20014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41286a200141f8016a41286a290300370300200141b8026a41206a200141f8016a41206a290300370300200141b8026a41186a200141f8016a41186a290300370300200141b8026a41106a200141f8016a41106a290300370300200141b8026a41086a200141f8016a41086a290300370300200120012903f8013703b802200120003602e802200141ec026a200141a8016a41cc0010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a20014198016a41086a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bb00f01137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a801200141f0016a41d8adc300410b10cb012004200141f0016a41086a2205290000370300200120012900f0013703a801200141f0016a4184b0c300411310cb0120022005290000370300200320012900f0013703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141e0006a41306a200141b8026a41306a280200360200200141e0006a41286a200141b8026a41286a290300370300200141e0006a41206a200141b8026a41206a290300370300200141e0006a41186a200141b8026a41186a290300370300200141e0006a41106a200141b8026a41106a290300370300200141e0006a41086a200141b8026a41086a290300370300200120012903b80237036020012802ec022104200141186a200141f0026a41c80010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a4200370300200141a8016a41106a4200370300200141a8016a41086a22024200370300200142003703a801200141f0016a41f1d5c400410d10cb012002200141f0016a41086a2205290000370300200120012900f0013703a801200141f0016a418bd6c400410c10cb01200341086a2005290000370000200320012900f001370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0041002104200141a0026a410036020020014198026a4200370300200141f0016a41206a4200370300200141f0016a41186a4200370300200141f0016a41106a420037030020054200370300200142003703f001200141a8016a410041c80010d60b1a20014198016a41086a420037030020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141f0016a41306a200141b8026a41306a280200360200200141f0016a41286a200141b8026a41286a290300370300200141f0016a41206a200141b8026a41206a290300370300200141f0016a41186a200141b8026a41186a290300370300200141f0016a41106a200141b8026a41106a2903003703002005200141b8026a41086a290300370300200120012903b8023703f00120012802ec022104200141a8016a200141f0026a41c80010d40b1a20014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141f0016a41306a200141e0006a41306a280200360200200141f0016a41286a200141e0006a41286a290300370300200141f0016a41206a200141e0006a41206a290300370300200141f0016a41186a200141e0006a41186a290300370300200141f0016a41106a200141e0006a41106a290300370300200141f0016a41086a200141e0006a41086a290300370300200120012903603703f001200141a8016a200141186a41c80010d40b1a20014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41306a200141f0016a41306a280200360200200141b8026a41286a200141f0016a41286a290300370300200141b8026a41206a200141f0016a41206a290300370300200141b8026a41186a200141f0016a41186a290300370300200141b8026a41106a200141f0016a41106a290300370300200141b8026a41086a200141f0016a41086a290300370300200120012903f0013703b802200120003602ec02200141f0026a200141a8016a41c80010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a20014198016a41086a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bff0d01137f23004190046b22012400200141d8016a41186a22024200370300200141d8016a41106a22034200370300200141d8016a41086a22044200370300200142003703d801200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703d801200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141d8016a412010ce03200141d8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802d801220720012802e00110c703024020012802c80322024102460d00200141c8006a200141b8026a41d00010d40b1a200141186a41086a20014194036a290200370300200141186a41106a2001419c036a290200370300200141186a41186a200141a4036a290200370300200141186a41206a200141ac036a290200370300200141c0006a200141b4036a2802003602002001200129028c03370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802dc01450d00200710390b0240024020024102470d00200141d8016a41186a4200370300200141d8016a41106a4200370300200141d8016a41086a22024200370300200142003703d801200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703d801200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141d8016a412010c703024020012802c80322024102470d0041002104200141d8016a410041d00010d60b1a200141d0016a4100360200200141a8016a41206a4200370300200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141d8016a200141b8026a41d00010d40b1a200520014194036a290200370300200141a8016a41106a2001419c036a290200370300200141a8016a41186a200141a4036a290200370300200141a8016a41206a200141ac036a290200370300200141d0016a200141b4036a2802003602002001200129028c033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141d8016a200141c8006a41d00010d40b1a200141a8016a41286a200141186a41286a280200360200200141a8016a41206a200141186a41206a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141d8016a41d00010d40b1a200141d4036a2009360200200141cc036a201236020020014194036a200141a8016a41086a2903003702002001419c036a200141b8016a290300370200200141a4036a200141c0016a290300370200200141ac036a200141c8016a290300370200200141b4036a200141d0016a28020036020020012000360288032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137028c03200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bf20903077f017e0b7f23004180046b22012400200141a8016a22024200370300200141a0016a2203420037030020014190016a41086a22044200370300200142003703900120014198026a41d8adc300410b10cb01200420014198026a41086a220529000037030020012001290098023703900120014198026a4184b0c300411310cb01200220052900003703002003200129009802370300200120014190016a412010ce0320014190016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141a8026a200128029001220720012802980110c7030240024020012802b80322024102470d000c010b20012903a8022108200141186a200141a8026a41086a41f80010d40b1a200141086a41086a200141e4036a2902003703002001200141dc036a290200370308200141ec036a2802002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403210420012802b003210520012802ac03211220012802a80321130b0240200128029401450d00200710390b0240024020024102470d0042002108200141a8016a4200370300200141a0016a420037030020014190016a41086a22024200370300200142003703900120014198026a41f1d5c400410d10cb01200220014198026a41086a220429000037030020012001290098023703900120014198026a418bd6c400410c10cb01200341086a20042900003700002003200129009802370000200141a8026a20014190016a412010c703024020012802b80322024102470d004100211020014190016a410041f80010d60b1a2004420037030020014200370398024106210e41e400210d4102210c41c801210b4101210a41002102410021044101210541012112410121130c020b20012903a802210820014190016a200141a8026a41086a41f80010d40b1a2004200141e4036a2902003703002001200141dc036a29020037039802200141ec036a2802002109200141d8036a280200210a200141d4036a280200210b200141d0036a280200210c200141cc036a280200210d200141c8036a280200210e200141c4036a280200210f200141c0036a280200211020012802bc03211120012802b403210420012802b003210520012802ac03211220012802a80321130c010b20014190016a200141186a41f80010d40b1a20014198026a41086a200141086a41086a29030037030020012001290308370398020b024020082000510d00200120003703a802200141a8026a41086a20014190016a41f80010d40b1a200141c4036a200f360200200141bc036a2011360200200141e4036a20014198026a41086a2903003702002001200a3602d8032001200b3602d4032001200c3602d0032001200d3602cc032001200e3602c803200120103602c003200120023602b803200120043602b403200120053602b003200120123602ac03200120133602a803200120093602ec0320012001290398023702dc0320014188026a200610890820012802900221032001280288022102200141003602f803200142013703f003200141a8026a200141f0036a10f1072002200320012802f00320012802f80310e901024020012802f403450d0020012802f00310390b200128028c02450d00200210390b20014180046a24000bb00f01137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a801200141f0016a41d8adc300410b10cb012004200141f0016a41086a2205290000370300200120012900f0013703a801200141f0016a4184b0c300411310cb0120022005290000370300200320012900f0013703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141e0006a41306a200141b8026a41306a290300370300200141e0006a41286a200141b8026a41286a290300370300200141e0006a41206a200141b8026a41206a290300370300200141e0006a41186a200141b8026a41186a290300370300200141e0006a41106a200141b8026a41106a290300370300200141e0006a41086a200141b8026a41086a290300370300200120012903b80237036020012802f00221042001411c6a200141f4026a41c40010d40b1a200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a4200370300200141a8016a41106a4200370300200141a8016a41086a22024200370300200142003703a801200141f0016a41f1d5c400410d10cb012002200141f0016a41086a2204290000370300200120012900f0013703a801200141f0016a418bd6c400410c10cb01200341086a2004290000370000200320012900f001370000200141b8026a200141a8016a412010c703024020012802c80322024102470d00200141a0026a420037030020014198026a4200370300200141f0016a41206a4200370300200141f0016a41186a4200370300200141f0016a41106a420037030020044200370300200142003703f00141002104200141a8016a410041c40010d60b1a20014198016a41086a420037030020014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141f0016a41306a200141b8026a41306a290300370300200141f0016a41286a200141b8026a41286a290300370300200141f0016a41206a200141b8026a41206a290300370300200141f0016a41186a200141b8026a41186a290300370300200141f0016a41106a200141b8026a41106a2903003703002004200141b8026a41086a290300370300200120012903b8023703f00120012802f0022104200141a8016a200141f4026a41c40010d40b1a20014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141f0016a41306a200141e0006a41306a290300370300200141f0016a41286a200141e0006a41286a290300370300200141f0016a41206a200141e0006a41206a290300370300200141f0016a41186a200141e0006a41186a290300370300200141f0016a41106a200141e0006a41106a290300370300200141f0016a41086a200141e0006a41086a290300370300200120012903603703f001200141a8016a2001411c6a41c40010d40b1a20014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41306a200141f0016a41306a290300370300200141b8026a41286a200141f0016a41286a290300370300200141b8026a41206a200141f0016a41206a290300370300200141b8026a41186a200141f0016a41186a290300370300200141b8026a41106a200141f0016a41106a290300370300200141b8026a41086a200141f0016a41086a290300370300200120012903f0013703b802200120003602f002200141f4026a200141a8016a41c40010d40b1a200141d4036a200e360200200141cc036a2010360200200141f4036a20014198016a41086a290300370200200120093602e8032001200a3602e4032001200b3602e0032001200c3602dc032001200d3602d8032001200f3602d003200120023602c803200120053602c403200120113602c003200120123602bc03200120133602b803200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000b901501137f23004190046b22012400200141a8016a41186a22024200370300200141a8016a41106a22034200370300200141a8016a41086a22044200370300200142003703a801200141e8016a41d8adc300410b10cb012004200141e8016a41086a2205290000370300200120012900e8013703a801200141e8016a4184b0c300411310cb0120022005290000370300200320012900e8013703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141d8006a41386a200141b8026a41386a280200360200200141d8006a41306a200141b8026a41306a290300370300200141d8006a41286a200141b8026a41286a290300370300200141d8006a41206a200141b8026a41206a290300370300200141d8006a41186a200141b8026a41186a290300370300200141d8006a41106a200141b8026a41106a290300370300200141d8006a41086a200141b8026a41086a290300370300200141186a41086a20014180036a290300370300200141186a41106a20014188036a290300370300200141186a41186a20014190036a290300370300200141186a41206a20014198036a290300370300200141186a41286a200141a0036a290300370300200141186a41306a200141a8036a290300370300200141186a41386a200141b0036a290300370300200120012903b802370358200120012903f80237031820012802f4022104200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ac01450d00200710390b0240024020024102470d00200141a8016a41186a22124200370300200141a8016a41106a22134200370300200141a8016a41086a22054200370300200142003703a801200141e8016a41f1d5c400410d10cb012005200141e8016a41086a2211290000370300200120012900e8013703a801200141e8016a418bd6c400410c10cb01200341086a2011290000370000200320012900e801370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0041002104200141e8016a41386a4100360200200141e8016a41306a4200370300200141e8016a41286a4200370300200141e8016a41206a4200370300200141e8016a41186a4200370300200141e8016a41106a420037030020114200370300200542003703002013420037030020124200370300200141a8016a41206a4200370300200141a8016a41286a4200370300200141a8016a41306a4200370300200141a8016a41386a420037030020014198016a41086a4200370300200142003703e801200142003703a80120014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141e8016a41386a200141b8026a41386a280200360200200141e8016a41306a200141b8026a41306a290300370300200141e8016a41286a200141b8026a41286a290300370300200141e8016a41206a200141b8026a41206a290300370300200141e8016a41186a200141b8026a41186a290300370300200141e8016a41106a200141b8026a41106a2903003703002011200141b8026a41086a290300370300200520014180036a290300370300201320014188036a290300370300201220014190036a290300370300200141a8016a41206a20014198036a290300370300200141a8016a41286a200141a0036a290300370300200141a8016a41306a200141a8036a290300370300200141a8016a41386a200141b0036a290300370300200120012903b8023703e801200120012903f8023703a80120012802f402210420014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141e8016a41386a200141d8006a41386a280200360200200141e8016a41306a200141d8006a41306a290300370300200141e8016a41286a200141d8006a41286a290300370300200141e8016a41206a200141d8006a41206a290300370300200141e8016a41186a200141d8006a41186a290300370300200141e8016a41106a200141d8006a41106a290300370300200141e8016a41086a200141d8006a41086a290300370300200141a8016a41086a200141186a41086a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41206a200141186a41206a290300370300200141a8016a41286a200141186a41286a290300370300200141a8016a41306a200141186a41306a290300370300200141a8016a41386a200141186a41386a290300370300200120012903583703e801200120012903183703a80120014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41386a200141e8016a41386a280200360200200141b8026a41306a200141e8016a41306a290300370300200141b8026a41286a200141e8016a41286a290300370300200141b8026a41206a200141e8016a41206a290300370300200141b8026a41186a200141e8016a41186a290300370300200141b8026a41106a200141e8016a41106a290300370300200141b8026a41086a200141e8016a41086a290300370300200120012903e8013703b802200120003602f402200141cc036a2010360200200141d4036a200e36020020014180036a200141a8016a41086a29030037030020014188036a200141a8016a41106a29030037030020014190036a200141a8016a41186a29030037030020014198036a200141a8016a41206a290300370300200141a0036a200141a8016a41286a290300370300200141a8036a200141a8016a41306a290300370300200141b0036a200141a8016a41386a290300370300200120133602b803200120123602bc03200120113602c003200120053602c403200120023602c8032001200f3602d0032001200d3602d8032001200c3602dc032001200b3602e0032001200a3602e403200120093602e803200120012903a8013703f802200141f4036a20014198016a41086a290300370200200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bc50c01137f23004190046b22012400200141c8016a41186a22024200370300200141c8016a41106a22034200370300200141c8016a41086a22044200370300200142003703c801200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703c801200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141c8016a412010ce03200141c8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802c801220720012802d00110c703024020012802c80322024102460d00200141386a200141b8026a41dc0010d40b1a200141186a41086a200141a0036a290300370300200141186a41106a200141a8036a290300370300200141186a41186a200141b0036a2903003703002001200129039803370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802cc01450d00200710390b0240024020024102470d00200141c8016a41186a4200370300200141c8016a41106a4200370300200141c8016a41086a22024200370300200142003703c801200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703c801200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141c8016a412010c703024020012802c80322024102470d0041002104200141c8016a410041dc0010d60b1a200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141c8016a200141b8026a41dc0010d40b1a2005200141a0036a290300370300200141a8016a41106a200141a8036a290300370300200141a8016a41186a200141b0036a29030037030020012001290398033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141c8016a200141386a41dc0010d40b1a200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141c8016a41dc0010d40b1a200141d4036a2009360200200141cc036a2012360200200141a0036a200141a8016a41086a290300370300200141a8036a200141b8016a290300370300200141b0036a200141c0016a29030037030020012000360294032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137039803200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bd80a04077f037e0b7f017e230041e0036b2201240020014180016a41186a2202420037030020014180016a41106a2203420037030020014180016a41086a220442003703002001420037038001200141f8016a41d8adc300410b10cb012004200141f8016a41086a2205290000370300200120012900f80137038001200141f8016a4184b0c300411310cb0120022005290000370300200320012900f801370300200120014180016a412010ce0320014180016a417f2001280204410020012802001b220241026a220420042002491b220610890820014188026a200128028001220720012802880110c7030240024020012802980322024102470d000c010b20014188026a41106a29030021082001290390022109200129038802210a200141186a20014188026a41186a41e80010d40b1a200141086a41086a200141c4036a2902003703002001200141bc036a290200370308200141cc036a280200210b200141b8036a280200210c200141b4036a280200210d200141b0036a280200210e200141ac036a280200210f200141a8036a2802002110200141a4036a2802002111200141a0036a2802002112200128029c03211320012802940321042001280290032105200128028c03211420012802880321150b0240200128028401450d00200710390b0240024020024102470d004200210a20014180016a41186a420037030020014180016a41106a420037030020014180016a41086a220242003703002001420037038001200141f8016a41f1d5c400410d10cb012002200141f8016a41086a2204290000370300200120012900f80137038001200141f8016a418bd6c400410c10cb01200341086a2004290000370000200320012900f80137000020014188026a20014180016a412010c703024020012802980322024102470d004100211220014180016a410041e80010d60b1a20044200370300200142003703f8014106211041e400210f4102210e41c801210d4101210c420021094200210841002102410021044101210541012114410121150c020b20014188026a41106a29030021082001290390022109200129038802210a20014180016a20014188026a41186a41e80010d40b1a2004200141c4036a2902003703002001200141bc036a2902003703f801200141cc036a280200210b200141b8036a280200210c200141b4036a280200210d200141b0036a280200210e200141ac036a280200210f200141a8036a2802002110200141a4036a2802002111200141a0036a2802002112200128029c03211320012802940321042001280290032105200128028c03211420012802880321150c010b20014180016a200141186a41e80010d40b1a200141f8016a41086a200141086a41086a290300370300200120012903083703f8010b0240200920002903002216852008200041086a29030022098584500d0020014198026a200937030020012016370390022001200a37038802200141a0026a20014180016a41e80010d40b1a200141a4036a20113602002001419c036a2013360200200141c4036a200141f8016a41086a2903003702002001200c3602b8032001200d3602b4032001200e3602b0032001200f3602ac03200120103602a803200120123602a0032001200236029803200120043602940320012005360290032001201436028c0320012015360288032001200b3602cc03200120012903f8013702bc03200141e8016a200610890820012802f001210020012802e8012102200141003602d803200142013703d00320014188026a200141d0036a10f1072002200020012802d00320012802d80310e901024020012802d403450d0020012802d00310390b20012802ec01450d00200210390b200141e0036a24000bc20c04077f027e0b7f017e230041f0036b22012400200141b0016a2202420037030020014198016a41106a2203420037030020014198016a41086a220442003703002001420037039801200141f0016a41d8adc300410b10cb012004200141f0016a41086a2205290000370300200120012900f00137039801200141f0016a4184b0c300411310cb0120022005290000370300200320012900f001370300200120014198016a412010ce0320014198016a417f2001280204410020012802001b220241026a220420042002491b220610890820014198026a200128029801220720012802a00110c7030240024020012802a80322024102470d000c010b200141f0006a41106a20014198026a41106a290300370300200141f0006a41086a20014198026a41086a290300370300200120012903980237037020014198026a41206a290300210820012903b0022109200141186a200141c0026a41d80010d40b1a200141086a41086a200141d4036a2902003703002001200141cc036a290200370308200141dc036a280200210a200141c8036a280200210b200141c4036a280200210c200141c0036a280200210d200141bc036a280200210e200141b8036a280200210f200141b4036a2802002110200141b0036a280200211120012802ac03211220012802a403210420012802a0032105200128029c03211320012802980321140b0240200128029c01450d00200710390b0240024020024102470d0042002109200141b0016a420037030020014198016a41106a420037030020014198016a41086a220242003703002001420037039801200141f0016a41f1d5c400410d10cb012002200141f0016a41086a2204290000370300200120012900f00137039801200141f0016a418bd6c400410c10cb01200341086a2004290000370000200320012900f00137000020014198026a20014198016a412010c703024020012802a80322024102470d00200141f0016a41106a420037030020044200370300200142003703f0014100211120014198016a410041d80010d60b1a20014188016a41086a420037030020014200370388014106210f41e400210e4102210d41c801210c4101210b4200210841002102410021044101210541012113410121140c020b200141f0016a41106a20014198026a41106a290300370300200420014198026a41086a29030037030020012001290398023703f00120014198026a41206a290300210820012903b002210920014198016a200141c0026a41d80010d40b1a20014188016a41086a200141d4036a2902003703002001200141cc036a29020037038801200141dc036a280200210a200141c8036a280200210b200141c4036a280200210c200141c0036a280200210d200141bc036a280200210e200141b8036a280200210f200141b4036a2802002110200141b0036a280200211120012802ac03211220012802a403210420012802a0032105200128029c03211320012802980321140c010b200141f0016a41106a200141f0006a41106a290300370300200141f0016a41086a200141f0006a41086a290300370300200120012903703703f00120014198016a200141186a41d80010d40b1a20014188016a41086a200141086a41086a29030037030020012001290308370388010b0240200920002903002215852008200041086a29030022098584500d00200141b8026a200937030020014198026a41106a200141f0016a41106a29030037030020014198026a41086a200141f0016a41086a290300370300200120153703b002200120012903f00137039802200141c0026a20014198016a41d80010d40b1a200141b4036a2010360200200141ac036a2012360200200141d4036a20014188016a41086a2903003702002001200b3602c8032001200c3602c4032001200d3602c0032001200e3602bc032001200f3602b803200120113602b003200120023602a803200120043602a403200120053602a0032001201336029c0320012014360298032001200a3602dc0320012001290388013702cc0320014188026a200610890820012802900221002001280288022102200141003602e803200142013703e00320014198026a200141e0036a10f1072002200020012802e00320012802e80310e901024020012802e403450d0020012802e00310390b200128028c02450d00200210390b200141f0036a24000bc50c01137f23004190046b22012400200141c8016a41186a22024200370300200141c8016a41106a22034200370300200141c8016a41086a22044200370300200142003703c801200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703c801200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141c8016a412010ce03200141c8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802c801220720012802d00110c703024020012802c80322024102460d00200141386a200141b8026a41e00010d40b1a200141186a41086a200141a4036a290200370300200141186a41106a200141ac036a290200370300200141186a41186a200141b4036a2802003602002001200129029c03370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802cc01450d00200710390b0240024020024102470d00200141c8016a41186a4200370300200141c8016a41106a4200370300200141c8016a41086a22024200370300200142003703c801200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703c801200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141c8016a412010c703024020012802c80322024102470d0041002104200141c8016a410041e00010d60b1a200141a8016a41186a4100360200200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141c8016a200141b8026a41e00010d40b1a2005200141a4036a290200370300200141a8016a41106a200141ac036a290200370300200141a8016a41186a200141b4036a2802003602002001200129029c033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141c8016a200141386a41e00010d40b1a200141a8016a41186a200141186a41186a280200360200200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141c8016a41e00010d40b1a200141d4036a2009360200200141cc036a2012360200200141a4036a200141a8016a41086a290300370200200141ac036a200141b8016a290300370200200141b4036a200141c0016a28020036020020012000360298032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137029c03200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bdf0b01137f23004190046b22012400200141d8016a22024200370300200141c0016a41106a22034200370300200141c0016a41086a22044200370300200142003703c001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703c001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141c0016a412010ce03200141c0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802c001220720012802c80110c703024020012802c80322024102460d00200141306a200141b8026a41e40010d40b1a200141186a41086a200141a8036a290300370300200141186a41106a200141b0036a290300370300200120012903a003370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029c03210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802c401450d00200710390b0240024020024102470d00200141d8016a4200370300200141c0016a41106a4200370300200141c0016a41086a22024200370300200142003703c001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703c001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141c0016a412010c703024020012802c80322024102470d0041e400210b41002104200141c0016a410041e40010d60b1a200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141c0016a200141b8026a41e40010d40b1a2005200141a8036a290300370300200141a8016a41106a200141b0036a290300370300200120012903a0033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029c03210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141c0016a200141306a41e40010d40b1a200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141c0016a41e40010d40b1a200141d4036a2009360200200141cc036a2012360200200141a8036a200141a8016a41086a290300370300200141b0036a200141b8016a2903003703002001200036029c032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a8013703a003200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bdf0b01137f23004190046b22012400200141d8016a22024200370300200141c0016a41106a22034200370300200141c0016a41086a22044200370300200142003703c001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703c001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141c0016a412010ce03200141c0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802c001220720012802c80110c703024020012802c80322024102460d00200141306a200141b8026a41e80010d40b1a200141186a41086a200141ac036a290200370300200141186a41106a200141b4036a280200360200200120012902a403370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802c401450d00200710390b0240024020024102470d00200141d8016a4200370300200141c0016a41106a4200370300200141c0016a41086a22024200370300200142003703c001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703c001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141c0016a412010c703024020012802c80322024102470d0041002104200141c0016a410041e80010d60b1a200141a8016a41106a41003602002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141c0016a200141b8026a41e80010d40b1a2005200141ac036a290200370300200141a8016a41106a200141b4036a280200360200200120012902a4033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141c0016a200141306a41e80010d40b1a200141a8016a41106a200141186a41106a280200360200200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141c0016a41e80010d40b1a200141d4036a2009360200200141cc036a2012360200200141ac036a200141a8016a41086a290300370200200141b4036a200141b8016a280200360200200120003602a0032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a8013702a403200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bf90a01137f23004190046b22012400200141c0016a22024200370300200141b8016a22034200370300200141a8016a41086a22044200370300200142003703a801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a8023703a801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a8023703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141286a200141b8026a41ec0010d40b1a200141186a41086a200141b0036a290300370300200141086a41086a200141f4036a290200370300200120012903a8033703182001200141ec036a290200370308200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141fc036a28020021130b024020012802ac01450d00200710390b0240024020024102470d00200141c0016a4200370300200141b8016a4200370300200141a8016a41086a22024200370300200142003703a801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2205290000370300200120012900a8023703a801200141a8026a418bd6c400410c10cb01200341086a2005290000370000200320012900a802370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0041002104200141a8016a410041ec0010d60b1a2005420037030020014198016a41086a4200370300200142003703a80220014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141a8016a200141b8026a41ec0010d40b1a2005200141b0036a29030037030020014198016a41086a200141f4036a290200370300200120012903a8033703a8022001200141ec036a29020037039801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a403210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141fc036a28020021130c010b200141a8016a200141286a41ec0010d40b1a200141a8026a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80220012001290308370398010b024020042000460d00200141b8026a200141a8016a41ec0010d40b1a200141d4036a2009360200200141cc036a2012360200200141b0036a200141a8026a41086a290300370300200141f4036a20014198016a41086a290300370200200120003602a4032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a8023703a80320012001290398013702ec03200120133602fc0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000bf90a01137f23004190046b22012400200141c0016a22024200370300200141b8016a22034200370300200141a8016a41086a22044200370300200142003703a801200141a8026a41d8adc300410b10cb012004200141a8026a41086a2205290000370300200120012900a8023703a801200141a8026a4184b0c300411310cb0120022005290000370300200320012900a8023703002001200141a8016a412010ce03200141a8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802a801220720012802b00110c703024020012802c80322024102460d00200141286a200141b8026a41f00010d40b1a200141186a41086a200141b4036a280200360200200141086a41086a200141f4036a290200370300200120012902ac033703182001200141ec036a290200370308200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141fc036a28020021130b024020012802ac01450d00200710390b0240024020024102470d00200141c0016a4200370300200141b8016a4200370300200141a8016a41086a22024200370300200142003703a801200141a8026a41f1d5c400410d10cb012002200141a8026a41086a2205290000370300200120012900a8023703a801200141a8026a418bd6c400410c10cb01200341086a2005290000370000200320012900a802370000200141b8026a200141a8016a412010c703024020012802c80322024102470d0041002104200141a8016a410041f00010d60b1a20014198016a41086a4100360200200542003703002001420037039801200142003703a8024106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141a8016a200141b8026a41f00010d40b1a20014198016a41086a200141b4036a2802003602002005200141f4036a290200370300200120012902ac03370398012001200141ec036a2902003703a802200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e20012802a803210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141fc036a28020021130c010b200141a8016a200141286a41f00010d40b1a20014198016a41086a200141186a41086a280200360200200141a8026a41086a200141086a41086a2903003703002001200129031837039801200120012903083703a8020b024020042000460d00200141b8026a200141a8016a41f00010d40b1a200141d4036a2009360200200141cc036a2012360200200141b4036a20014198016a41086a280200360200200141f4036a200141a8026a41086a290300370200200120003602a8032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b80320012001290398013702ac03200120012903a8023702ec03200120133602fc0320014198026a200610890820012802a0022104200128029802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b200128029c02450d00200210390b20014190046a24000ba70d01137f23004190046b22012400200141d0016a41186a22024200370300200141d0016a41106a22034200370300200141d0016a41086a22044200370300200142003703d001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703d001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141d0016a412010ce03200141d0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802d001220720012802d80110c703024020012802c80322024102460d00200141c0006a200141b8026a41d40010d40b1a200141186a41086a20014198036a290300370300200141186a41106a200141a0036a290300370300200141186a41186a200141a8036a290300370300200141186a41206a200141b0036a2903003703002001200129039003370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028c03210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802d401450d00200710390b0240024020024102470d00200141d0016a41186a4200370300200141d0016a41106a4200370300200141d0016a41086a22024200370300200142003703d001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703d001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141d0016a412010c703024020012802c80322024102470d0041002104200141d0016a410041d40010d60b1a200141a8016a41206a4200370300200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141d0016a200141b8026a41d40010d40b1a200520014198036a290300370300200141a8016a41106a200141a0036a290300370300200141a8016a41186a200141a8036a290300370300200141a8016a41206a200141b0036a29030037030020012001290390033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128028c03210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141d0016a200141c0006a41d40010d40b1a200141a8016a41206a200141186a41206a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141d0016a41d40010d40b1a200141d4036a2009360200200141cc036a201236020020014198036a200141a8016a41086a290300370300200141a0036a200141b8016a290300370300200141a8036a200141c0016a290300370300200141b0036a200141c8016a2903003703002001200036028c032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137039003200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000ba70d01137f23004190046b22012400200141d0016a41186a22024200370300200141d0016a41106a22034200370300200141d0016a41086a22044200370300200142003703d001200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703d001200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141d0016a412010ce03200141d0016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802d001220720012802d80110c703024020012802c80322024102460d00200141c0006a200141b8026a41d80010d40b1a200141186a41086a2001419c036a290200370300200141186a41106a200141a4036a290200370300200141186a41186a200141ac036a290200370300200141186a41206a200141b4036a2802003602002001200129029403370318200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc032112200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a28020021130b024020012802d401450d00200710390b0240024020024102470d00200141d0016a41186a4200370300200141d0016a41106a4200370300200141d0016a41086a22024200370300200142003703d001200141a8016a41f1d5c400410d10cb012002200141a8016a41086a2205290000370300200120012900a8013703d001200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141d0016a412010c703024020012802c80322024102470d0041002104200141d0016a410041d80010d60b1a200141a8016a41206a4100360200200141a8016a41186a4200370300200141a8016a41106a42003703002005420037030020014198016a41086a4200370300200142003703a80120014200370398014106210a41e400210b4102210c41c801210d4101210e41002108410021024100210541012111410121104101210f0c020b200141d0016a200141b8026a41d80010d40b1a20052001419c036a290200370300200141a8016a41106a200141a4036a290200370300200141a8016a41186a200141ac036a290200370300200141a8016a41206a200141b4036a28020036020020012001290294033703a801200141d0036a2802002108200141d4036a2802002109200141d8036a280200210a200141dc036a280200210b200141e0036a280200210c200141e4036a280200210d200141e8036a280200210e200128029003210420012802b803210f20012802bc03211020012802c003211120012802c403210520012802cc03211220014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a28020021130c010b200141d0016a200141c0006a41d80010d40b1a200141a8016a41206a200141186a41206a280200360200200141a8016a41186a200141186a41186a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41086a200141186a41086a29030037030020014198016a41086a200141086a41086a290300370300200120012903183703a80120012001290308370398010b024020042000460d00200141b8026a200141d0016a41d80010d40b1a200141d4036a2009360200200141cc036a20123602002001419c036a200141a8016a41086a290300370200200141a4036a200141b8016a290300370200200141ac036a200141c0016a290300370200200141b4036a200141c8016a28020036020020012000360290032001200e3602e8032001200d3602e4032001200c3602e0032001200b3602dc032001200a3602d803200120083602d003200120023602c803200120053602c403200120113602c003200120103602bc032001200f3602b803200120012903a80137029403200141f4036a20014198016a41086a290300370200200120133602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000b901501137f23004190046b22012400200141e8016a41186a22024200370300200141e8016a41106a22034200370300200141e8016a41086a22044200370300200142003703e801200141a8016a41d8adc300410b10cb012004200141a8016a41086a2205290000370300200120012900a8013703e801200141a8016a4184b0c300411310cb0120022005290000370300200320012900a8013703002001200141e8016a412010ce03200141e8016a417f2001280204410020012802001b220241026a220420042002491b2206108908200141b8026a20012802e801220720012802f00110c703024020012802c80322024102460d00200141d8006a41386a200141b8026a41386a290300370300200141d8006a41306a200141b8026a41306a290300370300200141d8006a41286a200141b8026a41286a290300370300200141d8006a41206a200141b8026a41206a290300370300200141d8006a41186a200141b8026a41186a290300370300200141d8006a41106a200141b8026a41106a290300370300200141d8006a41086a200141b8026a41086a290300370300200141186a41086a20014184036a290200370300200141186a41106a2001418c036a290200370300200141186a41186a20014194036a290200370300200141186a41206a2001419c036a290200370300200141186a41286a200141a4036a290200370300200141186a41306a200141ac036a290200370300200141186a41386a200141b4036a280200360200200120012903b802370358200120012902fc0237031820012802f8022104200141086a41086a200141f4036a2902003703002001200141ec036a290200370308200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130b024020012802ec01450d00200710390b0240024020024102470d00200141e8016a41186a22114200370300200141e8016a41106a22124200370300200141e8016a41086a22044200370300200142003703e801200141a8016a41f1d5c400410d10cb012004200141a8016a41086a2205290000370300200120012900a8013703e801200141a8016a418bd6c400410c10cb01200341086a2005290000370000200320012900a801370000200141b8026a200141e8016a412010c703024020012802c80322024102470d00200141e8016a41386a4200370300200141e8016a41306a4200370300200141e8016a41286a4200370300200141e8016a41206a420037030020114200370300201242003703002004420037030020054200370300200141a8016a41106a4200370300200141a8016a41186a4200370300200141a8016a41206a4200370300200141a8016a41286a4200370300200141a8016a41306a420037030041002104200141a8016a41386a410036020020014198016a41086a4200370300200142003703e801200142003703a80120014200370398014106210d41e400210c4102210b41c801210a410121094100210f41002102410021054101211141012112410121130c020b200141e8016a41386a200141b8026a41386a290300370300200141e8016a41306a200141b8026a41306a290300370300200141e8016a41286a200141b8026a41286a290300370300200141e8016a41206a200141b8026a41206a2903003703002011200141b8026a41186a2903003703002012200141b8026a41106a2903003703002004200141b8026a41086a290300370300200520014184036a290200370300200141a8016a41106a2001418c036a290200370300200141a8016a41186a20014194036a290200370300200141a8016a41206a2001419c036a290200370300200141a8016a41286a200141a4036a290200370300200141a8016a41306a200141ac036a290200370300200141a8016a41386a200141b4036a280200360200200120012903b8023703e801200120012902fc023703a80120012802f802210420014198016a41086a200141f4036a2902003703002001200141ec036a29020037039801200141fc036a2802002108200141e8036a2802002109200141e4036a280200210a200141e0036a280200210b200141dc036a280200210c200141d8036a280200210d200141d4036a280200210e200141d0036a280200210f20012802cc03211020012802c403210520012802c003211120012802bc03211220012802b80321130c010b200141e8016a41386a200141d8006a41386a290300370300200141e8016a41306a200141d8006a41306a290300370300200141e8016a41286a200141d8006a41286a290300370300200141e8016a41206a200141d8006a41206a290300370300200141e8016a41186a200141d8006a41186a290300370300200141e8016a41106a200141d8006a41106a290300370300200141e8016a41086a200141d8006a41086a290300370300200141a8016a41086a200141186a41086a290300370300200141a8016a41106a200141186a41106a290300370300200141a8016a41186a200141186a41186a290300370300200141a8016a41206a200141186a41206a290300370300200141a8016a41286a200141186a41286a290300370300200141a8016a41306a200141186a41306a290300370300200141a8016a41386a200141186a41386a280200360200200120012903583703e801200120012903183703a80120014198016a41086a200141086a41086a29030037030020012001290308370398010b024020042000460d00200141b8026a41386a200141e8016a41386a290300370300200141b8026a41306a200141e8016a41306a290300370300200141b8026a41286a200141e8016a41286a290300370300200141b8026a41206a200141e8016a41206a290300370300200141b8026a41186a200141e8016a41186a290300370300200141b8026a41106a200141e8016a41106a290300370300200141b8026a41086a200141e8016a41086a290300370300200120012903e8013703b802200120003602f802200141cc036a2010360200200141d4036a200e36020020014184036a200141a8016a41086a2903003702002001418c036a200141a8016a41106a29030037020020014194036a200141a8016a41186a2903003702002001419c036a200141a8016a41206a290300370200200141a4036a200141a8016a41286a290300370200200141ac036a200141a8016a41306a290300370200200141b4036a200141a8016a41386a280200360200200120133602b803200120123602bc03200120113602c003200120053602c403200120023602c8032001200f3602d0032001200d3602d8032001200c3602dc032001200b3602e0032001200a3602e403200120093602e803200120012903a8013702fc02200141f4036a20014198016a41086a290300370200200120083602fc0320012001290398013702ec03200141a8026a200610890820012802b002210420012802a802210220014100360288042001420137038004200141b8026a20014180046a10f1072002200420012802800420012802880410e9010240200128028404450d0020012802800410390b20012802ac02450d00200210390b20014190046a24000bf81502117f097e230041d0026b22022400200241a8016a10ed060240024020022d00a8014101460d0020004183303b0100200041086a411a360200200041046a41a0b7c700360200200041026a41003a00000c010b200241f8016a22034200370300200241f0016a22044200370300200241e0016a41086a22054200370300200242003703e00120024190026a41c2e6c000411a10cb01200520024190026a41086a220629000037030020022002290090023703e00120024190026a41d0b3c800410510cb01200320062900003703002004200229009002370300200241a0016a200241e0016a412010ce03024020022802a401410120022802a0011b20012802f001460d0020004183303b0100200041086a410f360200200041046a418cb8c700360200200041026a41033a00000c010b200342003703002004420037030020054200370300200242003703e00120024190026a41c2e6c000411a10cb012005200629000037030020022002290090023703e00120024190026a41e4b5c800410e10cb01200441086a2006290000370000200420022900900237000020024198016a200241e0016a412010ce03200228029c012105200228029801210620024190026a200141306a10f7022005410020061b21052002280298022106024020022802940241808080807872418080808078460d0020022802900210390b024020052006460d0020004183303b0100200041086a411b360200200041046a41c4b7c700360200200041026a41013a00000c010b200241e0016a41186a22034200370300200241e0016a41106a22074200370300200241e0016a41086a22064200370300200242003703e00120024190026a41c2e6c000411a10cb01200620024190026a41086a220529000037030020022002290090023703e00120024190026a41d4b4c800410e10cb01200441086a2005290000370000200420022900900237000020024190026a200241e0016a10fc08200241b0016a41086a22042005290300370300200241b0016a41106a220820024190026a41106a2209290300370300200241b0016a41186a220a20024190026a41186a220b290300370300200241b0016a41206a220c20024190026a41206a220d290300370300200241b0016a41286a220e20024190026a41286a220f29030037030020022002290390023703b001024020022d00cc024103460d0020022802c002211020022802c402211120022802c8022112200241e0016a41286a200141286a290300370300200241e0016a41206a200141206a2903003703002003200141186a2903003703002007200141106a2903003703002006200141086a290300370300200220012903003703e001200f200e290300370300200d200c290300370300200b200a2903003703002009200829030037030020052004290300370300200220022903b001370390020240024002400240410610382201450d0020024188016a200229039002221320024190026a41086a2903002214428094ebdc03420010d20b200241f8006a20132014428094ebdc03420010da0b200241e8006a2002290378200241f8006a41086a29030042a0c21e420010d30b200241e0016a41086a290300211520022903e00121160240024020022903682217200229038801221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241e8006a41086a2903002018201754ad7c2217844200520d0041ff0121042016201354201520145420152014511b0d01201620138520152014858442005221040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22051b221b56427f201920041b22174200201820051b22185620172018511b0d0041ff0121042016201354201520145420152014511b0d01201620138520152014858442005221040c010b4100210402400240417f201b201685201820158584420052201b201656201820155620182015511b1b41016a0e03000201020b417f4100201a201656201720155620172015511b1b21040c010b201a201654201720155420172015511b21040b200120043a00012001201620135a201520145a20152014511b3a0000200241386a20022903a002221320024190026a41186a2903002214428094ebdc03420010d20b200241d8006a20132014428094ebdc03420010da0b200241c8006a2002290358200241d8006a41086a29030042a0c21e420010d30b200241e0016a41186a290300211520022903f001211602400240200229034822172002290338221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241c8006a41086a2903002018201754ad7c22178450450d0041ff0121042016201354201520145420152014511b0d01201620138520152014858442005221040c010b0240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22051b221b56427f201920041b22174200201820051b22185620172018511b0d0041ff0121042016201354201520145420152014511b0d01201620138520152014858442005221040c010b4100210402400240417f201b201685201820158584420052201b201656201820155620182015511b1b41016a0e03010200020b201a201654201720155420172015511b21040c010b417f4100201a201656201720155620172015511b1b21040b200120043a00032001201620135a201520145a20152014511b3a0002200241086a20022903b002221320024190026a41286a2903002214428094ebdc03420010d20b200241286a20132014428094ebdc03420010da0b200241186a2002290328200241286a41086a29030042a0c21e420010d30b200241e0016a41286a2903002115200229038002211602400240200229031822172002290308221842d00f80a7201842a0c21e7e428094ebdc03824200526aad7c2218200241186a41086a2903002018201754ad7c221784500d000240427f201320187c221920192013542204201420177c2004ad7c221920145420192014511b22041b221a4200201320187d221b201b201356201420177d2013201854ad7d221820145620182014511b22051b221b56427f201920041b22174200201820051b22185620172018511b0d0041ff0121042016201354201520145420152014511b0d02201620138520152014858442005221040c020b4100210402400240417f201b201685201820158584420052201b201656201820155620182015511b1b41016a0e03010300030b201a201654201720155420172015511b21040c020b417f4100201a201656201720155620172015511b1b21040c010b41ff0121042016201354201520145420152014511b0d00201620138520152014858442005221040b200120043a00052001201620135a201520145a20152014511b3a00044100210620012c00010e020102030b1032000b20012d0000450d01024020012c00030e020001020b20012d0002450d0120012d000541ff014621060c010b410121060b2001103902402012450d0020124106742104201041346a21010340024020012802002205450d00200541306c450d002001417c6a28020010390b200141c0006a2101200441406a22040d000b0b0240201141ffffff1f71450d00201010390b20060d0020004183303b0100200041086a4119360200200041046a41e8b7c700360200200041026a41023a00000c010b200041083a00000b200241d0026a24000bc90102037f017e230041106b2202240020002802042103200028020021004101210420024280808080104200200128021841e0b5ca0041012001411c6a28020028020c1100001b22052001ad843703000240024020030d002005422088a721000c010b03402002200036020c200041016a210020022002410c6a4190b5c300106621012003417f6a22030d000b20012d000421000b0240200041ff01710d002002280200220028021841c49ec00041012000411c6a28020028020c11000021040b200241106a240020040bf92008067f027e037f017e037f017e137f077e23004180056b22022400200241306a200141306a41c00110d40b1a200241f0016a41286a200141286a290300370300200241f0016a41206a200141206a290300370300200241f0016a41186a200141186a290300370300200241f0016a41106a200141106a290300370300200241f0016a41086a200141086a290300370300200220012903003703f00120012802f0012103200241a0046a41186a22044200370300200241a0046a41106a22014200370300200241a0046a41086a22054200370300200242003703a004200241e0026a41c2e6c000411a10cb012005200241e0026a41086a2206290000370300200220022900e0023703a004200241e0026a41d0b3c800410510cb0120042006290000370300200120022900e002370300200241286a200241a0046a412010ce030240024002402003200228022c410120022802281b460d0020004281808080c0013703000c010b200241a0026a200241306a10f702200442003703002001420037030020054200370300200242003703a004200241e0026a41c2e6c000411a10cb0120052006290000370300200220022900e0023703a004200241e0026a41e4b5c800410e10cb01200141086a2006290000370000200120022900e002370000200241206a200241a0046a412010ce030240024002400240024002402002280220450d00024020022802a80220022802242203460d0020004281808080d0003703000c030b200241e0026a10c20720022802e0022207450d01200241a0046a41086a200241f4026a28020022013602002002200241ec026a29020022083703a004200220022902e40222093702b402200220073602b002200241c0026a41086a2001360200200220083703c002200242003702d40202402009422088a7220a450d00200a41386c2106200741086a2101410021050340200241e0026a41186a200141186a290000370300200241e0026a41106a200141106a290000370300200241e0026a41086a200141086a290000370300200220012900003703e002200141386a2101200241d0026a200241e0026a2005109607200541016a2105200641486a22060d000b0b20022802a402210b20022802a002210c024020030d00410d21040c050b0240024020022802c802200c2f010022014d2205450d00410a2104410a21010c010b200241fc046a41026a20022802c00220014105746a220141026a2d00003a0000200241f0046a200141176a290000370300200241f8046a2001411f6a2d00003a0000200220012f00003b01fc042002200129000f3703e8042001290007210820012800032101410d21040b200241b7046a200241e8046a41086a290300370000200241bf046a200241e8046a41106a2d00003a0000200220022903e804220d3703d004200220022f01fc043b01a0042002200d3700af042002200241fe046a2d00003a00a204200220083700a704200220013600a30420050d04200241e0026a41186a2201200241a0046a41186a290300370300200241e0026a41106a200241a0046a41106a290300370300200241e0026a41086a200241a0046a41086a290300370300200220022903a0043703e002024041201038220e450d00200e20022903e002370000200e41186a2001290300370000200e41106a200241e0026a41106a290300370000200e41086a200241e0026a41086a29030037000020024281808080103702c4042002200e3602c00420034101460d04200241af046a210f0240024020022802c8022206200c2f010222054b0d00410a2104410a21100c010b200241fc046a41026a20022802c00220054105746a220141026a2d00003a0000200241f0046a200141176a290000370300200241f8046a2001411f6a2d00003a0000200220012f00003b01fc042002200129000f3703e80420012900072111200128000321100b200241e4046a41026a2212200241fc046a41026a22132d000022013a0000200241d0046a41086a2214200241e8046a41086a22152903002208370300200241d0046a41106a2216200241e8046a41106a22172d000022183a0000200220022f01fc0422193b01e404200220022903e804220d3703d004200f200d370000200f41086a221a2008370000200f41106a221b20183a0000200220193b01a004200220013a00a204200220113700a704200220103600a304200620054d0d04200c41046a2118200241e0026a41186a221c200241a0046a41186a221d290300370300200241e0026a41106a221e200241a0046a41106a221f290300370300200241e0026a41086a2220200241a0046a41086a2221290300370300200220022903a0043703e0022003410174417c6a2106412021034102210541012119034002402005417f6a2019470d00200241c0046a20194101109e0220022802c004210e0b200e20036a220120022903e002370000200141186a201c290300370000200141106a201e290300370000200141086a2020290300370000200220053602c8042006450d05410a2101410a2119024020022802c802222220182f010022104d0d00201320022802c00220104105746a220141026a2d00003a00002015200141176a29000037030020172001411f6a2d00003a0000200220012f00003b01fc042002200129000f3703e8042001290007210820012800032119200421010b201220132d000022043a000020142015290300220d370300201620172d000022233a0000200220022f01fc0422243b01e404200220022903e80422113703d004200f2011370000201a200d370000201b20233a0000200220243b01a004200220043a00a204200220083700a704200220193600a3040240202220104b0d00200121040c060b201841026a2118201c201d290300370300201e201f29030037030020202021290300370300200220022903a0043703e002200341206a2103200541016a21052006417e6a210620022802c4042119200121040c000b0b1032000b20004281808080e0003703000c010b20004281808080e0003703000b20022802a40241808080807872418080808078460d0320022802a00210390c030b0240200b41808080807872418080808078460d00200c10390b20022902c40421080c010b4100280284ee4d210e42002108200b41808080807872418080808078460d00200c10390b2009a721182008a72119024002402004410d460d000240201941ffffff3f71450d00200e10390b20002004360204200041013602002000410c6a41003602000c010b200241e0026a200241306a41c00110d40b1a200241a0046a200241e0026a200241b0026a200241c0026a10c402200241a0046a41086a280200211e200241a0046a410c6a280200211020022802a404211c02400240024020022802a0044101460d0002402010412c6c2201450d00201c20016a2113201c2101034041092105200241d0026a2001410c6a10b8072206450d0320062802002206200a4f0d032001412c6a210c2007200641386c6a220541306a212220012802002203200128020841226c6a2120200541286a21230240034020032020460d01200341226a212420222802004105742101202328020021050340024020010d00410821050c070b200141606a210120052003412010d70b2106200541206a210520060d000b202421030c000b0b200c2101200c2013470d000b0b200220103602a8042002201e3602a4042002201c3602a004200241e0026a200241a0046a200241d0026a200241b0026a10e009200241e0026a41086a2201280200211c200241e0026a410c6a2205280200210320022802e4022110024020022802e0024101460d00200241e0026a200e2008422088a7201020031090072005280200211e2001280200212220022802e40221200240024020022802e0024101460d0002400240201e0d00427f2125420021264200210d4200212742002111427f21280c010b201e4106742105202041206a2101427f2125427f21284200212742002111420021264200210d03402002200141086a2903002208420020012903002209420010d30b200241106a200942002009420010d30b427f200d427f200241106a41086a29030022292002290300222a202a7c7c222a20082002290308222b84202b84420052202a2029547222061b7c2026427f200229031020061b7c22292026542206ad7c222620062026200d542026200d511b22061b210d427f202920061b2126200820282009202554200820285420082028511b22061b21282009202520061b2125427f201120087c202720097c22092027542206ad7c22082006200820115420082011511b22061b2111427f200920061b2127200141c0006a2101200541406a22050d000b0b200241e0026a41286a200d370300200241e0026a41186a20113703002002202637038003200220273703f002200220253703e002200220283703e8020240200241e0026a200241f0016a413010d70b450d0020004281808080b0013703000240201e450d00201e4106742105202041346a21010340024020012802002206450d00200641306c450d002001417c6a28020010390b200141c0006a2101200541406a22050d000b0b202241ffffff1f71450d02202010390c020b20004100360200200041086a20022903f001370300200041c4006a41023a0000200041c0006a201e3602002000413c6a2022360200200041386a2020360200200041306a200241f0016a41286a290300370300200041286a200241f0016a41206a290300370300200041206a200241f0016a41186a290300370300200041186a200241f0016a41106a290300370300200041106a200241f0016a41086a29030037030002402003450d002003412c6c21052010210103400240200141046a2802002206450d00200641306c450d00200128020010390b2001412c6a2101200541546a22050d000b0b0240201c450d00201c412c6c450d00201010390b0240201941ffffff3f71450d00200e10390b200241d0026a109907024020022802c40241ffffff3f71450d0020022802c00210390b0240200a450d00200a41386c21052007412c6a210103400240200128020041ffffff3f71450d002001417c6a28020010390b200141386a2101200541486a22050d000b0b2018450d08201841386c450d08200710390c080b20002020360204200041013602002000410c6a201e360200200041086a20223602000b02402003450d002003412c6c21052010210103400240200141046a2802002206450d00200641306c450d00200128020010390b2001412c6a2101200541546a22050d000b0b201c450d03201c412c6c450d03201010390c030b20002010360204200041013602002000410c6a2003360200200041086a201c3602000c020b2000201c360204200041013602002000410c6a2010360200200041086a201e3602000c010b200041013602002000200536020402402010450d002010412c6c2105201c210103400240200141046a2802002206450d00200641226c450d00200128020010390b2001412c6a2101200541546a22050d000b0b201e450d00201e412c6c450d00201c10390b201941ffffff3f71450d00200e10390b200241d0026a109907024020022802c40241ffffff3f71450d0020022802c00210390b0240200a450d00200a41386c21052007412c6a210103400240200128020041ffffff3f71450d002001417c6a28020010390b200141386a2101200541486a22050d000b0b02402018450d00201841386c450d00200710390b2004410d460d010b200241306a10fc020b20024180056a24000bb80101027f230041106b220224004101210320024280808080104200200128021841e0b5ca0041012001411c6a28020028020c1100001b2001ad843703002002200036020c20022002410c6a41a0b5c300106621012002200041106a36020c20012002410c6a41a0b5c300106621012002200041206a36020c024020012002410c6a41a0b5c30010662d00040d002002280200220028021841c49ec00041012000411c6a28020028020c11000021030b200241106a240020030bb70201037f23004180016b22022400024002400240024020012802002203411071450d0020002802002103410021000340200220006a41ff006a2003410f712204413072200441d7006a2004410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d02200141f1c5c0004102200220006a4180016a410020006b104921000c010b02402003412071450d0020002802002103410021000340200220006a41ff006a2003410f712204413072200441376a2004410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d03200141f1c5c0004102200220006a4180016a410020006b104921000c010b20003502002001104621000b20024180016a240020000f0b200341800141e087c0001054000b200341800141e087c0001054000ba60202077f027e2000280200210220012000280208220010ac02024020004106742200450d00200220006a2103200141086a2104200141046a21050340024020052802002206200428020022076b411f4b0d00200120074120107720052802002106200428020021070b2001280200220820076a22002002290000370000200041186a200241186a290000370000200041106a200241106a290000370000200041086a200241086a2900003700002004200741206a2200360200200241286a2903002109200241206a290300210a0240200620006b410f4b0d00200120004110107720042802002100200128020021080b200820006a220720093700082007200a3700002004200041106a360200200241306a200110ab02200241c0006a22022003470d000b0b0b843e030d7f057e017f230041b0156b22032400024002400240024002400240024002400240024002400240024020012d0000417f6a0e0400010203000b200141106a28020021042001410c6a2802002105200141086a2802002106200141046a2802002107200341a80a6a41206a200241206a290200370300200341a80a6a41186a200241186a290200370300200341a80a6a41106a200241106a290200370300200341a80a6a41086a200241086a290200370300200320022902003703a80a200341e0006a200341a80a6a10cc03200341306a41086a2201200341e9006a290000370300200341306a41106a2202200341f1006a290000370300200341306a41186a2208200341f9006a2900003703002003200329006137033002400240024020032d00604101460d00200341e8086a41186a2008290300370300200341e8086a41106a2002290300370300200341e8086a41086a2001290300370300200320032903303703e808024020050d00200410b108200410394103210141caa1c500210941112102410321050c020b0240200541e400490d00200410b10820041039410321054104210141dba1c5002109411221020c020b200320053602d809200320063602d409200320073602d009200341a80a6a41186a220a200341e8086a41186a290300370300200341a80a6a41106a2207200341e8086a41106a290300370300200341a80a6a41086a220b200341e8086a41086a290300370300200320032903e8083703a80a200341e0006a200341d0096a200341a80a6a10b208200341e0006a41086a2802002109200341e0006a410c6a280200210220032d0064210520032d0065210820032d0066210120032d00672106024020032802604101460d00200b2002360200200341013b01b40a20032008410874200572200141107472200641187472220c3602ac0a200341baa1c5003602a80a200341a8086a200341a80a6a10b308200341a80a6a410f6a20032d00b3083a00002003410a3602a80a200341a80a6a410a6a20032f01ae083b01002003410b3602a80a2003410c3602a80a200341a80a6a410c6a20032d00b0083a00002003410d3602a80a200341a80a6a410d6a220120032f00b1083b0000200320032f01a8083b01ac0a200320032801aa083601ae0a200720032d00b4083a0000200341a80a6a41116a20032d00b5083a00002003410e3602a80a200341a80a6a41126a220220032d00b6083a00002003410f3602a80a200341a80a6a41136a20032d00b7083a0000200341103602a80a200341a80a6a41146a220520032d00b8083a0000200341113602a80a200341a80a6a41156a220820032d00b9083a0000200341123602a80a200341a80a6a41166a20032d00ba083a0000200341133602a80a200341a80a6a41176a20032d00bb083a0000200341143602a80a200a20032d00bc083a0000200341153602a80a200341a80a6a41196a220620032d00bd083a0000200341163602a80a200341a80a6a411a6a20032d00be083a0000200341173602a80a200341a80a6a411b6a220a20032d00bf083a0000200341183602a80a200341a80a6a411c6a220720032d00c0083a0000200341193602a80a200341a80a6a411d6a20032d00c1083a00002003411a3602a80a200341a80a6a411e6a20032d00c2083a00002003411b3602a80a200341a80a6a411f6a20032d00c3083a00002003411c3602a80a200341a80a6a41206a220b20032d00c4083a00002003411d3602a80a200341c90a6a20032d00c5083a00002003411e3602a80a200341ca0a6a20032d00c6083a00002003411f3602a80a200341cb0a6a20032d00c7083a0000200341203602a80a20072802002107200b280200210b200341a80a6a410e6a280100210d2008280000210e20032800af0a210f200320032d00ae0a3a005e200320032f01ac0a3b015c200341d8006a41026a220820012d00003a00002003200341a80a6a410b6a2f00003b0158200341d4006a41026a220120052d00003a0000200320022f01003b0154200341d0006a41026a2202200a2d00003a0000200320062f00003b0150200341003602b00a200342013703a80a2004200341a80a6a10d90220032802b00a2106024020032802ac0a450d0020032802a80a10390b200341e0006a200441c00710d40b1a200341a8086a41026a20032d005e3a0000200341306a41026a20082d00003a0000200341980a6a41026a20012d00003a0000200341a4086a41026a20022d00003a0000200320032f015c3b01a808200320032f01583b0130200320032f01543b01980a200320032f01503b01a408411010382202450d07200241cce0c00036020c200241013602082002428180808010370200411010382201450d07200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a2205360200024020050d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22052005280200417f6a220536020020050d00200210390b024002402001280208200341e0006a200128020c28020c1101000d00200341e8096a41003a0000200341f0096a41023a000020012001280200417f6a2202360200200342003703d809200342013703d009024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b200341e0006a10c1034101210b0c010b200341a80a6a200341e0006a41c00710d40b1a20034191096a20032f01303b000020034193096a200341306a41026a2d00003a000020034194096a200d36020020034198096a20032f01980a3b01002003419a096a200341980a6a41026a2d00003a00002003419b096a200e3600002003419f096a20032f01a4083b0000200341a1096a200341a4086a41026a2d00003a000020034180023b018809200320032f01a8083b018a092003200341a8086a41026a2d00003a008c092003200f36008d09200341a6096a200b360100200341a2096a2007360100200320013602ac09200341d0096a200341a80a6a20034188096a10c40320032903d009420151210b0b200341e0096a290300211020032903d809211102400240200b0d004100210a02402011a70d00420021110c020b427f2006ad42e8077e4290d7eb057c221120107c221020102011541b2110420121110c010b200341fc096a21010240024020114201510d00200320032800e9093602a80a2003200341ec096a2800003600ab0a200341f8096a2102200341f0096a210520032d00e809210a0c010b427f2006ad42e8077e4290d7eb057c221120107c221020102011541b2110200341f0096a2105200341f8096a21024100210a420121110b20012802002107200320032802a80a3602c808200320032800ab0a3600cb0820052d000021052002280200210220032d00f109210820032d00f209210120032d00f309210620032802f409210d0b0240200941ffffff3f71450d00200c10390b20041039200b450d03200d21090c0e0b200410b108200410394100210a420021110c0d0b200410b10820041039410221050b411721084100210a420021110240200641ffffff3f710d000c0c0b200710390c0b0b200320032800cb08360013200320032802c808360210200041186a200a3a0000200041106a201037030020002011370308200020032802103600192000411c6a2003280013360000200042003703000c0b0b200141286a2903002111200141026a2f0100210920012d0001210a200141246a2802002107200141206a28020021042001411c6a28020021082001410c6a280200210b200141086a2802002105200141046a2802002106200341d0096a41206a200241206a290200370300200341d0096a41186a200241186a290200370300200341d0096a41106a200241106a290200370300200341d0096a41086a220c200241086a290200370300200320022902003703d00920034188096a200341d0096a10cc03200341a8086a41086a220220034191096a290000370300200341a8086a41106a220d20034199096a290000370300200341a8086a41186a220e200341a1096a29000037030020032003290089093703a8080240024020032d0088094101460d00200341306a41186a200e2903002210370300200341306a41106a200d2903002212370300200341306a41086a20022903002213370300200320032903a808221437033020034188096a41186a201037030020034188096a41106a201237030020034188096a41086a201337030020032014370388092003200b3602f008200320053602ec08200320063602e808200141106a2802002102200141146a2802002105200141186a2802002101200341d0096a410c6a2007360200200c2004360200200320083602d4092003200a3a00d109200341003a00d009200341a80a6a20034188096a2009200341e8086a200220052001200341d0096a201110b40820032903a80a4201510d01200341e0006a41186a200341a80a6a41186a2903002211370300200341e0006a41106a200341a80a6a41106a2903002210370300200320032903b00a2212370368200041186a2011370300200041106a201037030020002012370308200042003703000c0c0b200341a80a6a41206a41023a0000200341a80a6a41186a41003a0000200342003703b00a02402004450d00200810390b200541ffffff3f71450d00200610390b200341e0006a41286a200341a80a6a41286a2903002211370300200341e0006a41206a200341a80a6a41206a2903002210370300200341e0006a41186a200341a80a6a41186a2903002212370300200341e0006a41106a200341a80a6a41106a2903002213370300200320032903b00a2214370368200041286a2011370300200041206a2010370300200041186a2012370300200041106a201337030020002014370308200042013703000c0a0b200141c0006a2903002111200141226a2f010021082001412c6a2802002106200141286a2802002104200141246a2802002105200341d0096a41206a200241206a290200370300200341d0096a41186a200241186a290200370300200341d0096a41106a200241106a290200370300200341d0096a41086a200241086a290200370300200320022902003703d00920034188096a200341d0096a10cc03200341a8086a41086a220220034188096a41096a290000370300200341a8086a41106a220920034188096a41116a290000370300200341a8086a41186a220a20034188096a41196a29000037030020032003290089093703a8080240024020032d0088094101460d00200341306a41186a200a2903002210370300200341306a41106a20092903002212370300200341306a41086a20022903002213370300200320032903a808221437033020034188096a41186a201037030020034188096a41106a201237030020034188096a41086a20133703002003201437038809200320063602f008200320043602ec08200320053602e808200141306a2802002102200141346a2802002104200141386a2802002105200341d0096a41196a200141196a290000370000200341d0096a41116a200141116a290000370000200341d0096a41096a200141096a290000370000200341013a00d009200320012900013700d109200341a80a6a20034188096a2008200341e8086a200220042005200341d0096a201110b40820032903a80a4201510d01200341e0006a41186a200341a80a6a41186a2903002211370300200341e0006a41106a200341a80a6a41106a2903002210370300200320032903b00a2212370368200041186a2011370300200041106a201037030020002012370308200042003703000c0b0b200341a80a6a41206a41023a0000200341a80a6a41186a41003a0000200342003703b00a200441ffffff3f71450d00200510390b200341e0006a41286a200341a80a6a41286a2903002211370300200341e0006a41206a200341a80a6a41206a2903002210370300200341e0006a41186a200341a80a6a41186a2903002212370300200341e0006a41106a200341a80a6a41106a2903002213370300200320032903b00a2214370368200041286a2011370300200041206a2010370300200041186a2012370300200041106a201337030020002014370308200042013703000c090b200141346a2802002107200141306a280200210a200141226a2f010021062001412c6a2802002109200141286a2802002105200141246a2802002108200341106a41186a200141196a290000370300200341106a41106a200141116a290000370300200341106a41086a200141096a29000037030020032001290001370310200341a80a6a41206a200241206a290200370300200341a80a6a41186a200241186a290200370300200341a80a6a41106a200241106a290200370300200341a80a6a41086a200241086a290200370300200320022902003703a80a200341e0006a200341a80a6a10cc03200341e8086a41086a2201200341e0006a41096a290000370300200341e8086a41106a2202200341e0006a41116a290000370300200341e8086a41186a2204200341e0006a41196a290000370300200320032900613703e80802400240024020032d00604101460d00200341c8086a41186a2004290300370300200341c8086a41106a2002290300370300200341c8086a41086a2001290300370300200320032903e8083703c8080240200641ffff037141024f0d004103210141002102418ca2c5002106411021040c020b024020090d004103210241caa1c500210641112104410321010c020b0240200941e400490d00410321014104210241dba1c5002106411221040c020b200320093602d809200320053602d409200320083602d009200341a80a6a41186a220b200341c8086a41186a290300370300200341a80a6a41106a220c200341c8086a41106a290300370300200341a80a6a41086a220d200341c8086a41086a290300370300200320032903c8083703a80a200341e0006a200341d0096a200341a80a6a10b208200341e0006a41086a2802002109200341e0006a410c6a280200210420032d0064210120032d0065210520032d0066210220032d0067210820032802604101460d02200d2004360200200320063b01b40a200341baa1c5003602a80a2003200541087420017220024110747220084118747222153602ac0a200341a8086a200341a80a6a10b308200341a80a6a410f6a20032d00b3083a0000410a21022003410a3602a80a200341a80a6a410a6a20032f01ae083b01002003410b3602a80a2003410c3602a80a200341a80a6a410c6a20032d00b0083a00002003410d3602a80a200341a80a6a410d6a220120032f00b1083b0000200320032f01a8083b01ac0a200320032801aa083601ae0a200c20032d00b4083a0000200341a80a6a41116a20032d00b5083a0000410e21042003410e3602a80a200341a80a6a41126a220520032d00b6083a00002003410f3602a80a200341a80a6a41136a20032d00b7083a0000200341103602a80a200341a80a6a41146a220620032d00b8083a0000200341113602a80a200341a80a6a41156a220c20032d00b9083a0000200341123602a80a200341a80a6a41166a20032d00ba083a0000200341133602a80a200341a80a6a41176a20032d00bb083a0000200341143602a80a200b20032d00bc083a0000200341153602a80a200341a80a6a41196a220b20032d00bd083a0000200341163602a80a200341a80a6a411a6a20032d00be083a0000200341173602a80a200341a80a6a411b6a220d20032d00bf083a0000200341183602a80a200341a80a6a411c6a220e20032d00c0083a0000200341193602a80a200341a80a6a411d6a20032d00c1083a00002003411a3602a80a200341a80a6a411e6a20032d00c2083a00002003411b3602a80a200341a80a6a411f6a20032d00c3083a00002003411c3602a80a200341a80a6a41206a20032d00c4083a00002003411d3602a80a200341c90a6a20032d00c5083a00002003411e3602a80a200341ca0a6a20032d00c6083a00002003411f3602a80a200341cb0a6a20032d00c7083a0000200341203602a80a200341a80a6a410e6a280100210f200c280000210c200e290200211120032800af0a210e200320032d00ae0a3a00ea08200320032f01ac0a3b01e808200341f1086a20012d00003a00002003200341a80a6a410b6a2f00003b00ef08200341e8086a41106a20062d00003a0000200320052f01003b01f608200341e8086a41176a200d2d00003a00002003200b2f00003b00fd0820032011370380092003200c3600f9082003200f3601f2082003200e3600eb08200341306a41186a200341106a41186a290300370300200341306a41106a200341106a41106a290300370300200341306a41086a200341106a41086a29030037030020032003290310370330200341d0096a200341e8086a200341306a10b50820032802e809450d04200341a80a6a41066a200341d0096a41c80010d40b1a200341e0006a200341a80a6a41ce0010d40b1a20034188096a200341e0006a41066a41c80010d40b1a41fea1c500210602400240200328029809200a470d0020034188096a41146a2802002007470d00200341ac096a2201200341c8086a412010d70b450d014108210441f0accc002106410821020b200341a4096a28020041ffffff3f71450d0820032802a00910390c080b2003200120032903880920034188096a41086a29030010e503200341a8086a41eda1c500410810cb01200341d0096a41f5a1c500410910cb01412010382201450d03200120032903e808370000200141186a200341e8086a41186a290300370000200141106a200341e8086a41106a290300370000200141086a200341e8086a41086a29030037000020032001412010cc01370360200341b40a6a2202200141206a360200200320013602b00a2003200341e0006a41086a3602ac0a2003200341e0006a3602a80a200341980a6a200341a80a6a10830120011039412010382201450d0320012003290310370000200141186a200341106a41186a290300370000200141106a200341106a41106a290300370000200141086a200341106a41086a290300370000200341e0006a2001412010ca012002200141206a360200200320013602b00a2003200341e0006a41106a3602ac0a2003200341e0006a3602a80a200341306a200341a80a6a1083012001103920032802a00a220520032802386a41206a2201417f4c0d050240024020010d00410121020c010b200110382202450d040b41002104200341003602b00a200320023602a80a200320013602ac0a02402001410f4b0d00200341a80a6a41004110107720032802ac0a210120032802a80a210220032802b00a21040b200220046a220820032900a808370000200841086a200341a8086a41086a2900003700002003200441106a22043602b00a0240200120046b410f4b0d00200341a80a6a20044110107720032802ac0a210120032802a80a210220032802b00a21040b200220046a220820032900d009370000200841086a200341d0096a41086a2900003700002003200441106a22043602b00a20032802980a21080240200120046b20054f0d00200341a80a6a20042005107720032802a80a210220032802b00a21040b200220046a2008200510d40b1a2003200420056a22013602b00a20032802302104024020032802ac0a20016b200328023822024f0d00200341a80a6a20012002107720032802b00a21010b20032802a80a220520016a2004200210d40b1a02402003280234450d00200410390b200120026a21010240200328029c0a450d0020032802980a10390b2005200110e001024020032802ac0a450d00200510390b200341106a10b608200341c50a6a200341c8086a41186a290300370000200341bd0a6a200341c8086a41106a290300370000200341b50a6a200341c8086a41086a290300370000200341cd0a6a20032903e808370000200341d50a6a200341e8086a41086a290300370000200341dd0a6a200341e8086a41106a290300370000200341e50a6a200341e8086a41186a290300370000200341ed0a6a2003290310370000200341f50a6a200341106a41086a290300370000200341fd0a6a200341106a41106a290300370000200341850b6a200341106a41186a290300370000200320032903c8083700ad0a200341940b6a2007360200200341900b6a200a360200200341033a00ac0a2003410f3a00a80a200341a80a6a10c9030240200341a4096a28020041ffffff3f71450d0020032802a00910390b200941ffffff3f71450d06201510390c060b410221010b0240200541ffffff3f71450d00200810390b411721050c060b2009210620014108460d030c050b1032000b4107210241a4c1cc002106410821040c020b1034000b4200211120004200370308200020032800a80a360019200041186a41003a00002000411c6a200341ab0a6a2800003600000c020b0240200941ffffff3f71450d00201510390b41172105410321010b20002006360224200020083a0023200020023a0022200020053a002120004200370308200041286a2004360200200041206a20013a0000200041186a41003a0000420121110b200020113703000c010b200320032800cb08360013200320032802c808360210200041186a200a3a0000200041106a201037030020002011370308200020032802103600192000411c6a20032800133600002000412c6a2007360200200041286a2002360200200041246a2009360200200020063a0023200020013a0022200020083a0021200041206a20053a0000200042013703000b200341b0156a24000bf4830107087f017e017f037e087f027e017f230041900f6b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e0a00010203040506070e0d000b200141246a2802002104200141216a2d00002105200341f0026a41186a200141196a290000370300200341f0026a41106a200141116a290000370300200341f0026a41086a200141096a290000370300200320012900013703f00220034188046a41206a2201200241206a29020037030020034188046a41186a2206200241186a29020037030020034188046a41106a2207200241106a29020037030020034188046a41086a2208200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2202200341b0036a41096a290000370300200341d0026a41106a2209200341b0036a41116a290000370300200341d0026a41186a220a200341b0036a41196a290000370300200320032900b1033703d00220032d00b0034101460d0b20034190036a41186a200a29030037030020034190036a41106a200929030037030020034190036a41086a2002290300370300200320032903d0023703900320034188046a200341f0026a20034190036a200510c208200341b0036a41086a2006290300370300200341b0036a41106a2001290300370300200341b0036a41186a200341b0046a280200360200200320072903003703b003200328028c04210102402003280288044101460d002008290300210b200341d0026a41186a2202200341b0036a41186a280200360200200341d0026a41106a2205200341b0036a41106a290300370300200341d0026a41086a2206200341b0036a41086a290300370300200320032903b0033703d00202402001450d0041dcb6c5002102410b21054103210141802c2106418080182107410021080c2a0b200341bc036a20032903d002370200200341c4036a2006290300370200200341cc036a2005290300370200200341d4036a20022802003602002003200b3702b403200341003602b003200341e8036a41186a200341f0026a41186a290300370300200341e8036a41106a200341f0026a41106a290300370300200341e8036a41086a200341f0026a41086a290300370300200320032903f0023703e80320034188046a200441c00710d40b1a200341b0036a200341e8036a20034188046a10c30820041039200041186a41003a000020004200370308200042003703000c2a0b20034194046a2802002105200828020021022001418080807871210820014180807c712107200141807e7121060c280b200141246a2802002109200141216a2d0000210c200341b0026a41186a2204200141196a290000370300200341b0026a41106a2205200141116a290000370300200341b0026a41086a2206200141096a290000370300200320012900013703b00220034188046a41206a200241206a29020037030020034188046a41186a200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2201200341b0036a41096a290000370300200341d0026a41106a2202200341b0036a41116a290000370300200341d0026a41186a2207200341b0036a41196a290000370300200320032900b1033703d00220032d00b0034101460d08200341f0026a41186a2007290300370300200341f0026a41106a2002290300370300200341f0026a41086a2001290300370300200320032903d0023703f00220034190036a41186a200429030037030020034190036a41106a200529030037030020034190036a41086a2006290300370300200320032903b002370390030240200341f0026a20034190036a412010d70b0d004201210b41032101411621024107210441e7b6c5002105410b21060c250b200341d0026a200341f0026a10b40520034188046a20032802d00220032802d80210c4080240024020032802880422070d0020034180046a4200370300200342003703f803200342003702ec034100210a200341002802d8974e22073602e8030c010b200341e8036a410c6a20034188046a410c6a290200370200200341e8036a41146a20034188046a41146a290200370200200341e8036a411c6a20034188046a411c6a2802003602002003200329028c043702ec03200320073602e80320032802f003210a0b0240200a411f4d0d004107210641eebbc5002105410021040c220b200341cc036a200341b0026a41186a290300370200200341c4036a200341b0026a41106a290300370200200341bc036a200341b0026a41086a290300370200200320032903b0023702b4032003200c3a00d403200320093602b003024002400240200a0d00410021010c010b200341b0036a4104722108200c41ff0171210c200a210441002101200a2102034002400240024002402007200441017620016a220441286c6a220641046a2008412010d70b2205450d0020054100480d01200421020c030b024020062d00242205200c460d002005200c490d01200421020c030b2006280200220520094f0d010b200441016a21010c010b2004210220052009460d030b200220016b2104200220014b0d000b0b20034188046a41206a200341b0036a41206a29030037030020034188046a41186a200341b0036a41186a29030037030020034188046a41106a200341b0036a41106a29030037030020034188046a41086a200341b0036a41086a290300370300200320032903b00337038804200a2001490d0a0240200a20032802ec03470d00200341e8036a200a10830320032802e80321070b2007200141286c6a220241286a2002200a20016b41286c10d50b1a200241186a20034188046a41186a290300370200200241106a20034188046a41106a290300370200200241086a20034188046a41086a2903003702002002200329038804370200200241206a20034188046a41206a2903003702002003200a41016a22013602f00302402001200a4f0d00200341e8036a41186a290300210d4200210e20032903f803210f4200210b0c210b200341386a2001ad4200428081e49206420010d30b2003290338220b4280a8f2e38e1d7c220e20032903f803220f56200341386a41086a290300200e200b54ad7c220b200341e8036a41186a290300220d56200b200d511b450d2020034188046a200341f0026a200e200f7d200b200d7d200e200f54ad7d10d40320032d00880422014108460d2120034188046a41086a2802002106200328028c04210520032d008b04210720032d008a04210420032d00890421020c230b410921064182b7c5002105410421040c210b200141246a280200210a200141216a2d0000210520034190036a41186a200141196a29000037030020034190036a41106a200141116a2900003703004108210c20034190036a41086a200141096a290000370300200320012900013703900320034188046a41206a200241206a29020037030020034188046a41186a200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2201200341b0036a41096a290000370300200341d0026a41106a2202200341b0036a41116a290000370300200341d0026a41186a2204200341b0036a41196a290000370300200320032900b1033703d00241012110024020032d00b0034101460d00200341e8036a41186a2004290300370300200341e8036a41106a2002290300370300200341e8036a41086a2001290300370300200320032903d0023703e803200341d0026a200341e8036a10b405200341b0036a20032802d002221120032802d802221210c40820032802b0032107200341003602b003024020070d0041a4c1cc0021134116211441032115410121010c1d0b200341b0036a41186a290300210e20032902b403220ba7211620032903c003210d200341a4046a200341a8036a2903003702002003419c046a200341a0036a2903003702004108210c20034194046a20034190036a41086a290300370200200320032903900337028c0441032115411621144101211041a4c1cc00211302400240200b422088a722170d00410121010c010b20034188046a4104722108200541ff0171210920172104410021012017210202400340024002400240024002402007200441017620016a220441286c6a220641046a2008412010d70b2205450d0020054100480d010c030b024020062d002422052009460d0020052009490d010c030b20062802002205200a4f0d010b200441016a21010c020b2005200a460d030b200421020b200220016b2104200220014b0d000b410121010c010b2007200441286c6a2201200141286a20172004417f736a41286c10d50b1a2017417f6a2201ad2118024020010d00420021194200210f0c1b0b200341d8006a20184200428081e49206420010d30b2003290358220f4280a8f2e38e1d7c2219200d58200341d8006a41086a2903002019200f54ad7c220f200e58200f200e511b0d1a200341f0026a200341e8036a2019200d7d200f200e7d2019200d54ad7d10d40320032d00f00222154108460d1b200341f0026a41086a280200210c20032802f402211320032d00f302210220032d00f202210120032d00f10221140b2016450d1d201641286c450d1d200710390c1d0b410221150c1d0b20034188046a41206a200241206a29020037030020034188046a41186a200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2201200341b9036a290000370300200341d0026a41106a2202200341c1036a290000370300200341d0026a41186a2204200341c9036a290000370300200320032900b1033703d00220032d00b0034101460d05200341e8036a41186a2004290300370300200341e8036a41106a2002290300370300200341e8036a41086a2001290300370300200320032903d0023703e803200341b0036a200341e8036a10b40520034188046a20032802b003220220032802b803220110c408024002402003280288042204450d002002200110e001200341a0046a290300210b20034198046a290300210e200328028c0421010c010b4100210141002802d8974e21044200210e4200210b0b024020032802b403450d00200210390b02402001450d00200141286c450d00200410390b200341e8006a200341e8036a200e200b10e503200041186a41003a000020004200370308200042003703000c260b41022105200141026a2f01002107200141046a2802002110200320012d00013a00880220034188046a41206a2208200241206a29020037030020034188046a41186a2201200241186a29020037030020034188046a41106a2204200241106a29020037030020034188046a41086a2206200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341f0026a41086a2202200341b9036a2209290000370300200341f0026a41106a220a200341b0036a41116a290000370300200341f0026a41186a220c200341b0036a41196a290000370300200320032900b1033703f0020240024020032d00b0034101460d00200341e8036a41186a200c290300370300200341e8036a41106a200a290300370300200341e8036a41086a2002290300370300200320032903f0023703e8032001420037030020044200370300200642003703002003420037038804200341d8036a41c7e5c000410610cb012006200341d8036a41086a2202290000370300200320032900d80337038804200341d8036a419081c400410610cb0120012002290000370300200420032900d80337030020034180016a20034188046a412010ce0320032802840121022003280280012105200341f8006a4188d3c300411010ce03200328027c21062003280278210a200320073b019c04200320064100200a1b3602940420032002410020051b36029004200341f2b6c50036028804200320034188026a360298042003200341e8036a36028c04200341d0026a20034188046a10c50820034188046a410f6a20032d00db023a00002003410a3602880420034188046a410a6a20032f01d6023b01002003410b360288042003410c3602880420034188046a410c6a20032d00d8023a00002003410d3602880420034188046a410d6a220520032f00d9023b0000200320032f01d0023b018c04200320032801d20236018e04200420032d00dc023a000020034188046a41116a20032d00dd023a00002003410e3602880420034188046a41126a220420032d00de023a00002003410f3602880420034188046a41136a20032d00df023a0000200341103602880420034188046a41146a220620032d00e0023a0000200341113602880420034188046a41156a220a20032d00e1023a000020034112360288044116210220034188046a41166a20032d00e2023a0000200341133602880420034188046a41176a20032d00e3023a00002003411436028804200120032d00e4023a0000200341153602880420034188046a41196a220120032d00e5023a0000200341163602880420034188046a411a6a20032d00e6023a0000200341173602880420034188046a411b6a220c20032d00e7023a0000200341183602880420034188046a411c6a221520032d00e8023a0000200341193602880420034188046a411d6a20032d00e9023a00002003411a3602880420034188046a411e6a20032d00ea023a00002003411b3602880420034188046a411f6a20032d00eb023a00002003411c36028804200820032d00ec023a00002003411d36028804200341a9046a20032d00ed023a00002003411e36028804200341aa046a20032d00ee023a00002003411f36028804200341ab046a20032d00ef023a0000200341203602880420034188046a410e6a2801002108200a280000210a2015290200210b200328008f042115200320032d008e043a00b203200320032f018c043b01b003200920052d00003a0000200320034188046a410b6a2f00003b00b703200341b0036a41106a20062d00003a0000200320042f01003b01be03200341b0036a41176a200c2d00003a0000200320012f00003b00c5032003200b3703c8032003200a3600c103200320083601ba03200320153600b30320034188046a200341b0036a10b405200328028804220420032802900410e30121010240200328028c04450d00200410390b2001450d0141032105410421014182b7c5002104410921060c170b0c160b20034188046a200341e8036a4280a9d6f6941d420010d403024020032d00880422054108460d0020034188046a41086a2802002106200328028c04210420032d008b04210720032d008a04210120032d00890421020c160b20032d0088022102412810382201450d03200120032903e803370004200120023a00242001411c6a20034180046a290300370000200141146a200341f8036a2903003700002001410c6a200341f0036a2903003700002001201036020020034190036a200341b0036a10b40520032802980321082003280290032104413c10382202450d032003423c37028c0420032002360288042001410120034188046a1096060240200328028c04220620032802900422026b410f4b0d0020034188046a200241101077200328028c04210620032802900421020b200328028804220520026a2209420037000820094280a9d6f6941d370000200420082005200241106a10e90102402006450d00200510390b0240200328029403450d00200410390b2001103920032d0088022101200341a5046a200341b0036a41186a2903003700002003419d046a200341b0036a41106a29030037000020034195046a200341b0036a41086a290300370000200341ad046a20032903e803370000200341b5046a200341e8036a41086a290300370000200341bd046a200341e8036a41106a290300370000200341c5046a200341e8036a41186a290300370000200341ce046a20073b0100200341cd046a20013a0000200320032903b00337008d04200341013a008c042003410e3a00880420034188046a10c903200320032800b002360290022003200341b3026a28000036009302200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200042003703000c250b200141286a2802002105200141246a2802002106200141226a2f01002107200141216a2d0000210420034190036a41186a200141196a29000037030020034190036a41106a200141116a29000037030020034190036a41086a200141096a2900003703002003200129000137039003200320043a00d80320034188046a41206a2201200241206a29020037030020034188046a41186a2204200241186a29020037030020034188046a41106a2208200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341f0026a41086a2202200341b0036a41096a2209290000370300200341f0026a41106a220a200341b0036a41116a290000370300200341f0026a41186a220c200341b0036a41196a290000370300200320032900b1033703f0020240024020032d00b0034101460d00200341e8036a41186a200c290300370300200341e8036a41106a200a290300370300200341e8036a41086a2002290300370300200320032903f0023703e803200320073b019c0420032005360294042003200636029004200341f2b6c500360288042003200341d8036a36029804200320034190036a36028c04200341d0026a20034188046a10c50820034188046a410f6a20032d00db023a00002003410a3602880420034188046a410a6a20032f01d6023b01002003410b360288042003410c3602880420034188046a410c6a20032d00d8023a00002003410d3602880420034188046a410d6a220220032f00d9023b0000200320032f01d0023b018c04200320032801d20236018e04200820032d00dc023a000020034188046a41116a20032d00dd023a00002003410e3602880420034188046a41126a220520032d00de023a00002003410f3602880420034188046a41136a20032d00df023a0000200341103602880420034188046a41146a220620032d00e0023a0000200341113602880420034188046a41156a220720032d00e1023a0000200341123602880420034188046a41166a20032d00e2023a0000200341133602880420034188046a41176a20032d00e3023a00002003411436028804200420032d00e4023a0000200341153602880420034188046a41196a220420032d00e5023a0000200341163602880420034188046a411a6a20032d00e6023a0000200341173602880420034188046a411b6a220820032d00e7023a0000200341183602880420034188046a411c6a220a20032d00e8023a0000200341193602880420034188046a411d6a20032d00e9023a00002003411a3602880420034188046a411e6a20032d00ea023a00002003411b3602880420034188046a411f6a20032d00eb023a00002003411c36028804200120032d00ec023a00002003411d3602880420034188046a41216a20032d00ed023a00002003411e3602880420034188046a41226a20032d00ee023a00002003411f36028804200341ab046a20032d00ef023a0000200341203602880420034188046a410e6a280100210120072800002107200a290200210b200328008f04210a200320032d008e043a00b203200320032f018c043b01b003200920022d00003a0000200320034188046a410b6a2f00003b00b703200341b0036a41106a20062d00003a0000200320052f01003b01be03200341b0036a41176a20082d00003a0000200320042f00003b00c5032003200b3703c803200320073600c103200320013601ba032003200a3600b3030240200341b0036a200341e8036a412010d70b450d00410321010c020b200341f0026a200341e8036a10b40520034188046a20032802f002220220032802f802220110c408024002402003280288042204450d002002200110e001200341a0046a290300210b20034198046a290300210e200328028c0421010c010b4100210141002802d8974e21044200210e4200210b0b024020032802f402450d00200210390b02402001450d00200141286c450d00200410390b20034188016a20034190036a200e200b10e503200320032800b002360290022003200341b3026a28000036009302200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200042003703000c260b410221010b200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200041286a410c360200200041246a418bb7c500360200200041960a3b0021200041206a20013a0000200042013703000c240b20034190026a41186a200141196a29000037030020034190026a41106a200141116a29000037030020034190026a41086a200141096a2900003703002003200129000137039002200341b0026a41186a200141396a290000370300200341b0026a41106a200141316a290000370300200341b0026a41086a200141296a2900003703002003200141216a2900003703b00220034188046a41206a200241206a29020037030020034188046a41186a200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a2201200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341e8036a41086a2202200341b0036a41096a290000370300200341e8036a41106a2204200341b0036a41116a290000370300200341e8036a41186a2205200341b0036a41196a290000370300200320032900b1033703e8030240024020032d00b0034101460d0020034190036a41186a200529030037030020034190036a41106a200429030037030020034190036a41086a2002290300370300200320032903e80337039003200341b0036a20034190026a10b40520034188046a20032802b003220620032802b80310c4082001280200410020032802880422011b2102200328028c04210441002802d8974e2105024020032802b403450d00200610390b2004410020011b21072001200520011b210802402002450d00200241286c210220034188046a4104722104200821010340200141246a2d00004106460d0120034188046a41206a200141206a28020036020020034188046a41186a200141186a29020037030020034188046a41106a200141106a29020037030020034188046a41086a200141086a2902003703002003200129020037038804200420034190036a412010d70b450d03200141286a2101200241586a22020d000b0b4103210141162104410221024197b7c50021054108210602402007450d00200741286c450d00200810390b0c140b410221010c130b02402007450d00200741286c450d00200810390b200341d0026a41086a20034190026a41086a290300370300200341d0026a41106a20034190026a41106a290300370300200341d0026a41186a20034190026a41186a290300370300200341f0026a41086a200341b0026a41086a290300370300200341f0026a41106a200341b0026a41106a290300370300200341f0026a41186a200341b0026a41186a29030037030020032003290390023703d002200320032903b0023703f00220034188046a41186a2201420037030020034188046a41106a2202420037030020034188046a41086a220442003703002003420037038804200341d8036a41c7e5c000410610cb012004200341d8036a41086a2205290000370300200320032900d80337038804200341d8036a419081c400410610cb0120012005290000370300200220032900d803370300200341b8016a20034188046a412010ce0320032802bc01210520032802b8012106200341d8036a20034190036a10b30520034188046a20032802d80320032802e00310c60841002102024020032802880422010d00200341e8036a41186a4200370300200342003703f803200342003702ec0341002104200341002802d8974e22013602e8030c0f0b200341e8036a410c6a20034188046a410c6a290200370200200341e8036a41146a20034188046a41146a290200370200200341e8036a411c6a20034188046a411c6a2802003602002003200329028c043702ec03200320013602e80320032802f0032204411f4d0d0e41162104410321014107210641eebbc50021050c0f0b200341f0026a41186a200141196a290000370300200341f0026a41106a200141116a29000037030041082104200341f0026a41086a200141096a290000370300200320012900013703f00220034190036a41186a200141396a29000037030020034190036a41106a200141316a29000037030020034190036a41086a200141296a2900003703002003200141216a2900003703900320034188046a41206a200241206a29020037030020034188046a41186a2207200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2202200341b0036a41096a290000370300200341d0026a41106a2205200341b0036a41116a290000370300200341d0026a41186a2206200341b0036a41196a290000370300200320032900b1033703d0024101210120032d00b0034101460d07200341e8036a41186a2006290300370300200341e8036a41106a2005290300370300200341e8036a41086a2002290300370300200320032903d0023703e803200341d0026a200341e8036a10b30520034188046a20032802d002220920032802d802220c10c608024020032802880422080d0041a4c1cc00210541162106410321020c0c0b2007290300210b200329039804210d02400240200329028c04220e422088a722050d00410021060c010b200841246a210a41002107410021064100210202400340024002402006450d002008200241c4006c6a21012008200220076a41c4006c6a210403400240200141046a200341f0026a412010d70b0d00200141246a20034190036a412010d70b450d030b2004200141c40010d40b41c4006a2104200141c4006a2101200241016a22022005490d000c040b0b200a200241c4006c6a210103400240200141606a200341f0026a412010d70b0d00200120034190036a412010d70b450d020b200141c4006a2101200241016a22022005490d000b410021060c030b2007417f6a2107200641016a2106200241016a22022005490d000b0b024020060d00410021060c010b2008200220066b41c4006c6a2008200241c4006c6a200520026b41c4006c10d50b1a0b200ea7210a02400240200520066b22012005490d004108210441a4c1cc0021054101210141162106410321020c010b200e42ffffffff0f832001ad220e422086842119024020010d004200210f4200210e0c0a0b200341d0016a200e4200428082c8a50c420010d30b20032903d001220e4280a8f2e38e1d7c220f200d58200341d0016a41086a290300200f200e54ad7c220e200b58200e200b511b0d09200341b0036a200341e8036a200f200d7d200e200b7d200f200d54ad7d10d40320032d00b00322024108460d0a200341b0036a41086a280200210420032802b403210520032d00b303210720032d00b203210120032d00b10321060b200a450d0b200a41c4006c450d0b200810390c0b0b1032000b200041206a41023a0000200041186a41003a000020004200370308200042013703000c200b410221010c1c0b2001200a1041000b410221014100210841002107410021060c1c0b200141c4006a2802002106200141c1006a2d00002104200341d0026a41186a200141196a290000370300200341d0026a41106a200141116a290000370300200341d0026a41086a200141096a290000370300200320012900013703d002200341f0026a41186a200141396a290000370300200341f0026a41106a200141316a290000370300200341f0026a41086a200141296a2900003703002003200141216a2900003703f00220034188046a41206a2201200241206a29020037030020034188046a41186a2205200241186a29020037030020034188046a41106a2207200241106a29020037030020034188046a41086a2208200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc0302400240024020032d00b0034101470d00410221070c010b20034188046a200341f0026a200341d0026a200410c208200341b0036a41086a2005290300370300200341b0036a41106a2001290300370300200341b0036a41186a200341b0046a280200360200200320072903003703b00320034194046a280200210a2008280200210c20032d008f04211020032d008e04210820032d008d04210920032d008c0421072003280288044101460d00200341b0026a41186a200341b0036a41186a280200360200200341b0026a41106a200341b0036a41106a290300370300200341b0026a41086a200341b0036a41086a290300370300200320032903b0033703b002200341003602b803200342013703b0032006200341b0036a10d90220034188046a20032802b00320032802b803109f0120034190036a41186a20034188046a41186a220129030037030020034190036a41106a20034188046a41106a220229030037030020034190036a41086a20034188046a41086a2204290300370300200320032903880437039003024020032802b403450d0020032802b00310390b2001420037030020024200370300200442003703002003420037038804200341d8036a41c7e5c000410610cb012004200341d8036a41086a2205290000370300200320032900d80337038804200341d8036a419081c400410610cb0120012005290000370300200220032900d803370300200341206a20034188046a412010ce032003280224210220032802202104200341e8036a200341d0026a10b30520034188046a20032802e803221720032802f003221210c6080240024020032802880422140d00410321010c010b2001290300210b200329039804210d02400240200329028c04220e422088a722050d00410021130c010b2002410020041b2115201041187420084110747220094108747220077221114100211a410021134100210202400340024002402013450d002014200241c4006c6a210120142002201a6a41c4006c6a210403400240200141046a200341f0026a412010d70b0d00200141246a20034190036a412010d70b0d004100201520012802006b2216201620154b1b20114f0d030b2004200141c40010d40b41c4006a2104200141c4006a2101200241016a22022005490d000c040b0b2014200241c4006c6a210103400240200141046a200341f0026a412010d70b0d00200141246a20034190036a412010d70b0d004100201520012802006b2204200420154b1b20114f0d020b200141c4006a2101200241016a22022005490d000b410021130c030b201a417f6a211a201341016a2113200241016a22022005490d000b0b024020130d00410021130c010b2014200220136b41c4006c6a2014200241c4006c6a200520026b41c4006c10d50b1a0b200ea72102410321010240024002400240200520136b220420054f0d00200e42ffffffff0f832004ad220e422086842119024020040d004200210f4200210e0c020b200341106a200e4200428082c8a50c420010d30b2003290310220e4280a8f2e38e1d7c220f200d58200341106a41086a290300200f200e54ad7c220e200b58200e200b511b0d01200341b0036a200341d0026a200f200d7d200e200b7d200f200d54ad7d10d40320032d00b00322014108460d020b2002450d03200241c4006c0d020c030b0240200d200f58200b200e58200b200e511b0d002003200341d0026a200d200f7d200b200e7d200d200f54ad7d10e5030b20040d0002402002450d00200241c4006c450d00201410390b2003201937028c0420034100360288042017201210e001410821010c020b200341a0046a200e3703002003200f370398042003201937028c042017201220034188046a10c7084108210141000d012002450d01200241c4006c450d010b201410390b024020032802ec03450d00201710390b024020014108470d00200341b0036a41086a200a360200200341bc036a20032903b002370200200341c4036a200341b0026a41086a290300370200200341b0036a411c6a200341b0026a41106a290300370200200341d4036a200341b0026a41186a2802003602002003200c3602b403200320104118742008411074722009410874722007723602b003200341e8036a41186a200341f0026a41186a290300370300200341e8036a41106a200341f0026a41106a290300370300200341e8036a41086a200341f0026a41086a290300370300200320032903f0023703e80320034188046a200641c00710d40b1a200341b0036a200341e8036a20034188046a10c30820061039200320032800900236028804200320034193026a28000036008b04200041186a41003a00004200210b2000420037030820002003280288043600192000411c6a200328008b043600000c020b41032107411621094106210841dcb6c500210c410b210a0b200610b10820061039200041186a41003a00002000420037030820002003280288043600192000411c6a200328008b04360000200041286a200a360200200041246a200c360200200020103a0023200020083a0022200020093a0021200041206a20073a00004201210b0b2000200b3703000c1c0b200341f0026a41186a200141196a290000370300200341f0026a41106a200141116a29000037030041082104200341f0026a41086a200141096a290000370300200320012900013703f00220034190036a41186a200141396a29000037030020034190036a41106a200141316a29000037030020034190036a41086a200141296a2900003703002003200141216a2900003703900320034188046a41206a200241206a29020037030020034188046a41186a2207200241186a29020037030020034188046a41106a200241106a29020037030020034188046a41086a200241086a2902003703002003200229020037038804200341b0036a20034188046a10cc03200341d0026a41086a2202200341b0036a41096a290000370300200341d0026a41106a2205200341b0036a41116a290000370300200341d0026a41186a2206200341b0036a41196a290000370300200320032900b1033703d0024101210102400240024002400240024020032d00b0034101460d00200341e8036a41186a2006290300370300200341e8036a41106a2005290300370300200341e8036a41086a2002290300370300200320032903d0023703e803200341d0026a200341f0026a10b30520034188046a20032802d002220920032802d802220c10c608024020032802880422080d0041a4c1cc00210541162106410321020c050b2007290300210b200329039804210d02400240200329028c04220e422088a722050d00410021060c010b200841246a210a41002107410021064100210202400340024002402006450d002008200241c4006c6a21012008200220076a41c4006c6a210403400240200141046a200341e8036a412010d70b0d00200141246a20034190036a412010d70b450d030b2004200141c40010d40b41c4006a2104200141c4006a2101200241016a22022005490d000c040b0b200a200241c4006c6a210103400240200141606a200341e8036a412010d70b0d00200120034190036a412010d70b450d020b200141c4006a2101200241016a22022005490d000b410021060c030b2007417f6a2107200641016a2106200241016a22022005490d000b0b024020060d00410021060c010b2008200220066b41c4006c6a2008200241c4006c6a200520026b41c4006c10d50b1a0b200ea7210a02400240200520066b22012005490d004108210441a4c1cc0021054101210141162106410321020c010b200e42ffffffff0f832001ad220e422086842119024020010d004200210f4200210e0c030b200341f0016a200e4200428082c8a50c420010d30b20032903f001220e4280a8f2e38e1d7c220f200d58200341f0016a41086a290300200f200e54ad7c220e200b58200e200b511b0d02200341b0036a200341f0026a200f200d7d200e200b7d200f200d54ad7d10d40320032d00b00322024108460d03200341b0036a41086a280200210420032802b403210520032d00b303210720032d00b203210120032d00b10321060b200a450d04200a41c4006c450d04200810390c040b410221020c040b0240200d200f58200b200e58200b200e511b0d00200341e0016a200341f0026a200d200f7d200b200e7d200d200f54ad7d10e5030b20010d000240200a450d00200a41c4006c450d00200810390b2003201937028c0420034100360288042009200c10e001410821020c010b200341a0046a200e3703002003200f370398042003201937028c042009200c20034188046a10c7084108210241000d00200a450d00200a41c4006c450d00200810390b0b024020032802d402450d00200910390b20024108470d00200041186a41003a000020004200370308200020032800b0023600192000411c6a200341b3026a280000360000200042003703000c1c0b200041186a41003a000020004200370308200020032800b0023600192000411c6a200341b3026a280000360000200041286a200436000020002005360024200020073a0023200020013a0022200020063a0021200041206a20023a0000200042013703000c1b0b410221020c040b0240200d200f58200b200e58200b200e511b0d00200341c0016a200341e8036a200d200f7d200b200e7d200d200f54ad7d10e5030b20010d000240200a450d00200a41c4006c450d00200810390b2003201937028c0420034100360288042009200c10e001410821020c010b200341a0046a200e3703002003200f370398042003201937028c042009200c20034188046a10c7084108210241000d00200a450d00200a41c4006c450d00200810390b0b024020032802d402450d00200910390b20024108470d00200041186a41003a000020004200370308200020032800b0023600192000411c6a200341b3026a280000360000200042003703000c160b200041186a41003a000020004200370308200020032800b0023600192000411c6a200341b3026a280000360000200041286a200436000020002005360024200020073a0023200020013a0022200020063a0021200041206a20023a0000200042013703000c150b2005410020061b210220034188046a41086a220520034190026a41086a29030037030020034188046a41106a220620034190026a41106a29030037030020034188046a41186a220720034190026a41186a290300370300200341b0036a41086a2208200341b0026a41086a290300370300200341b0036a41106a2209200341b0026a41106a290300370300200341b0036a41186a220a200341b0026a41186a290300370300200320032903900237038804200320032903b0023703b0030240200420032802ec03470d00200341e8036a200410890320032802e803210120032802f00321040b2001200441c4006c6a220120023602002001411c6a2007290300370200200141146a20062903003702002001410c6a20052903003702002001200329038804370204200120032903b0033702242001412c6a2008290300370200200141346a20092903003702002001413c6a200a2903003702002003200441016a22023602f003200341e8036a41186a290300210d4200210e20032903f803210f4200210b024002400240024020022004490d00200341a8016a2002ad4200428082c8a50c420010d30b20032903a801220b4280a8f2e38e1d7c220e200f58200341a8016a41086a290300200e200b54ad7c220b200d58200b200d511b450d010b0240200f200e58200d200b58200d200b511b0d0020034198016a20034190036a200f200e7d200d200b7d200f200e54ad7d10e5030b2002450d05200241004721050c010b20034188046a20034190036a200e200f7d200b200d7d200e200f54ad7d10d40320032d00880422014108470d01200241004721050b200341e8036a41186a200b370300200341e8036a41106a200e37030020034188046a41186a200b37030020034188046a41106a200e37030020034188046a41086a200341e8036a41086a290300370300200320032903e803220b3703880420032802e003210120032802d803210202400240200ba722040d002002200110e0010c010b2002200120034188046a10c708200328028c042201450d00200141c4006c450d00200410390b41002106410821010c020b20034188046a41086a2802002106200328028c04210520032d008b04210720032d008a04210220032d00890421040b20032802ec032208450d00200841c4006c450d0020032802e80310390b024020032802dc03450d0020032802d80310390b20014108470d01200341ad046a200329039003370000200341cd046a20032903b002370000200341a5046a20034190026a41186a2903003700002003419d046a20034190026a41106a29030037000020034195046a20034190026a41086a290300370000200341b5046a20034190036a41086a290300370000200341bd046a20034190036a41106a290300370000200341c5046a20034190036a41186a290300370000200341d5046a200341b0026a41086a290300370000200341dd046a200341b0026a41106a290300370000200341e5046a200341b0026a41186a290300370000200320032903900237008d04200341023a008c042003410e3a00880420034188046a10c90320032003280088023602800220032003418b026a28000036008302200041186a41003a00002000420037030820002003280280023600192000411c6a200328008302360000200042003703000c120b41a0a4c100413f41e0a4c100105b000b20032003280088023602800220032003418b026a28000036008302200041186a41003a00002000420037030820002003280280023600192000411c6a200328008302360000200041286a2006360200200041246a2005360200200020073a0023200020023a0022200020043a0021200041206a20013a0000200042013703000c100b200320032800b002360290022003200341b3026a28000036009302200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200041286a2006360200200041246a2004360200200020073a0023200020013a0022200020023a0021200041206a20053a0000200042013703000c0f0b0240200d201958200e200f58200e200f511b0d00200341c8006a200341e8036a200d20197d200e200f7d200d201954ad7d10e5030b20010d0002402016450d00201641286c450d00200710390b2011201210e001410021100c010b200341c8036a200f370300200320193703c0032003200b42ffffffff0f832018422086843702b403200320073602b00320112012200341b0036a10c808410021102007450d00200ba72201450d00200141286c450d00200710390b0b0b024020032802d402450d00201110390b20100d00200320032800b002360290022003200341b3026a28000036009302200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200042003703000c0a0b200320032800b002360290022003200341b3026a28000036009302200041186a41003a00002000420037030820002003280290023600192000411c6a200328009302360000200041286a200c360200200041246a2013360200200020023a0023200020013a0022200020143a0021200041206a20153a0000200042013703000c090b200f200e58200d200b58200d200b511b0d00200341286a200341f0026a200f200e7d200d200b7d200f200e54ad7d10e5030b200341e8036a41186a200b370300200341e8036a41106a200e37030020034188046a41186a200b37030020034188046a41106a200e37030020034188046a41086a200341e8036a41086a290300370300200320032903e803220b3703880420032802d802210120032802d002210202400240200ba722040d002002200110e0010c010b2002200120034188046a10c808200328028c042201450d00200141286c450d00200410390b20032003280090023602d803200320034193026a2800003600db034200210b0c020b41162102410321010b20032003280090023602d803200320034193026a2800003600db034201210b20032802ec032208450d00200841286c450d0020032802e80310390b20032802d402450d0020032802d00210390b200b500d010b200320032800db0336008b02200320032802d80336028802200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200041286a2006360200200041246a2005360200200020073a0023200020043a0022200020023a0021200041206a20013a0000200042013703000c020b200320032800db0336008b02200320032802d80336028802200041186a41003a00002000420037030820002003280288023600192000411c6a200328008b02360000200042003703000c010b200410b10820041039200041286a2005360200200041246a2002360200200041186a41003a000020004200370308200041206a20084180808078712007418080fc07717220064180fe037172200141ff017172360200200042013703000b200341900f6a24000bb53403017f017e187f230041800d6b2203240002400240024002400240024002402001280200417f6a0e0400010203000b200128020421012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d0000211541022116200241026a2f0100211720022d0001211820022d00002119200228022422022002280200417f6a221a36020002400240024020190d000240201a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a221a201a280200417f6a221a360200201a0d00200210390b201841ff01714101470d012003200437039801200320053a009701200320063a009601200320073b019401200320083a009301200320093a0092012003200a3b0190012003200b3a008f012003200c3a008e012003200d3b018c012003200e3a008b012003200f3a008a01200320103b018801200320113a008701200320123a008601200320133b018401200320143a008301200320153a008201200320173b018001200341b8016a22024200370300200341b0016a22164200370300200341a0016a41086a221a4200370300200342003703a001200341f8016a41bee6c000410410cb01201a200341f8016a41086a2219290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb0120022019290000370300201620032900f801370300200341f8016a200341a0016a41201085040240024020032d00f8014101460d002002420037030020164200370300201a4200370300200342003703a0010c010b200220034191026a290000370300201620034189026a290000370300201a20034181026a290000370300200320032900f9013703a0010b4103211620034180016a200341a0016a412010d70b0d01200341f8016a200141c00710d40b1a200341003b01d0014110103822020d020c080b201a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a221a201a280200417f6a221a360200201a0d00200210390b2001108505200110392003200341236a28000036006320032003280020360260200041186a41003a000020004200370308200020032802603600192000411c6a2003280063360000200041286a410b360200200041246a41ebc2cd00360200200041153b0021200041206a20163a0000200042013703000c050b200241cce0c00036020c200241013602082002428180808010370200200320023602f401200341a0016a200341f8016a200341d0016a10c40341082102024020032903a0014201520d004108210220032903a8014202510d00200341c0016a2d000021022003200341c1016a22162900003703f8012003201641076a2800003600ff010b200320032800ff013600d701200320032903f8013703d00120034188026a20032800d70136000020034181026a20032903d00137000020034180026a20023a0000200341003a00fc012003410d3a00f801200341f8016a10c903200110392003200341236a28000036006320032003280020360260200041186a41013a000020004200370308200020032802603600192000411c6a2003280063360000200042003703000c040b200128020421012002411a6a2901002104200241196a2d00002105200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d0000211541022116200241026a2f0100211720022d0001211820022d00002119200228022422022002280200417f6a221a3602000240024020190d000240201a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a221a201a280200417f6a221a360200201a0d00200210390b201841ff01714101470d012003200437039801200320053a009701200320063a009601200320073b019401200320083a009301200320093a0092012003200a3b0190012003200b3a008f012003200c3a008e012003200d3b018c012003200e3a008b012003200f3a008a01200320103b018801200320113a008701200320123a008601200320133b018401200320143a008301200320153a008201200320173b018001200341b8016a22024200370300200341b0016a22164200370300200341a0016a41086a221a4200370300200342003703a001200341f8016a41bee6c000410410cb01201a200341f8016a41086a2219290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb0120022019290000370300201620032900f801370300200341f8016a200341a0016a41201085040240024020032d00f8014101460d002002420037030020164200370300201a4200370300200342003703a0010c010b200220034191026a290000370300201620034189026a290000370300201a20034181026a290000370300200320032900f9013703a0010b4103211620034180016a200341a0016a412010d70b0d01200341f8016a200141c00710d40b1a200341003b01d001411010382202450d06200241cce0c00036020c200241013602082002428180808010370200200320023602f401200341a0016a200341f8016a200341d0016a10c40341082102024020032903a0014201520d004108210220032903a8014202510d00200341c0016a2d000021022003200341c1016a22162900003703f8012003201641076a2800003600ff010b200320032800ff013600d701200320032903f8013703d00120034188026a20032800d70136000020034181026a20032903d00137000020034180026a20023a0000200341003a00fc012003410d3a00f801200341f8016a10c903200110392003200341236a28000036006320032003280020360260200041186a41013a000020004200370308200020032802603600192000411c6a2003280063360000200042003703000c050b201a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a221a201a280200417f6a221a360200201a0d00200210390b2001108505200110392003200341236a28000036006320032003280020360260200041186a41003a000020004200370308200020032802603600192000411c6a2003280063360000200041286a410b360200200041246a41ebc2cd00360200200041153b0021200041206a20163a0000200042013703000c030b200341166a41026a200141076a2d00003a000020034180016a41086a200141186a29020037030020034180016a41106a200141206a290200370300200320012f00053b01162003200141106a29020037038001200141086a28020021182001410c6a280200211920012d000421162002411a6a2901002104200241196a2d00002106200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002117200241026a2f0100211b20022d0001210520022d0000211a200228022422022002280200417f6a22013602000240024002400240201a0d00024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200541ff01714101470d01200320043703e801200320063a00e701200320073a00e601200320083b01e401200320093a00e3012003200a3a00e2012003200b3b01e0012003200c3a00df012003200d3a00de012003200e3b01dc012003200f3a00db01200320103a00da01200320113b01d801200320123a00d701200320133a00d601200320143b01d401200320153a00d301200320173a00d2012003201b3b01d001200341b8016a22014200370300200341b0016a22024200370300200341a0016a41086a221a4200370300200342003703a001200341f8016a41bee6c000410410cb01201a200341f8016a41086a2205290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb0120012005290000370300200220032900f801370300200341f8016a200341a0016a41201085040240024020032d00f8014101460d002001420037030020024200370300201a4200370300200342003703a0010c010b200120034191026a290000370300200220034189026a290000370300201a20034181026a290000370300200320032900f9013703a0010b200341d0016a200341a0016a412010d70b450d03410321020c020b20010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b410221020b20164102470d022019450d02201810390c020b02400240024020160e03020100010b2019450d00201810390b200341dc006a41026a200341a0016a41026a2d00003a0000200341c0006a41086a200341f8016a41086a290300370300410121020c020b200341f8016a41086a220120034180016a41086a290300370300200341f8016a410d6a221620034180016a410d6a290000370000200341dc006a41026a200341166a41026a2d0000221a3a0000200341c0006a41086a22052001290300370300200341c0006a410d6a220620162900003700002003413c6a41026a201a3a0000200320032f011622163b015c2003200329038001370340200320163b013c200341206a410d6a2006290000370000200341206a41086a200529030037030020032003290340370320200341b8016a4200370300200341b0016a4200370300200341a0016a41086a22164200370300200342003703a001200341f8016a41bee6c000410410cb0120162001290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb01200241086a2001290000370000200220032900f801370000200341f8016a200341a0016a41201085040240024020032d00f8014101460d0041002101200341fc006a41026a41003a0000200341e0006a41086a4200370300200341e0006a410d6a4200370000200341003b017c20034200370360410021160c010b200341fc006a41026a20032d00fb013a0000200341e0006a41086a2003418c026a290200370300200341e0006a410d6a20034191026a290000370000200320032f00f9013b017c200320034184026a2902003703602001280200210120032802fc0121160b200341f8016a41106a200329036037030020034184026a2001360200200341f8016a41086a22012016360200200341f8016a41186a200341e0006a41086a2903003703002003410d3a00f80120034195026a200341e0006a410d6a290000370000200320032f017c3b00fd01200341013a00fc012003200341fc006a41026a2d00003a00ff01200341f8016a10c903200341a0016a41186a4200370300200341a0016a41106a4200370300200341a0016a41086a22164200370300200342003703a001200341f8016a41bee6c000410410cb0120162001290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb01200241086a2001290000370000200220032900f801370000412010382202450d03200220032f013c3b000020022019360007200220183600032002200329032037000b200241026a2003413c6a41026a2d00003a0000200241136a200341206a41086a290300370000200241186a200341206a410d6a290000370000200341a0016a41202002412010e901200210392003200328001936020c2003200341196a41036a28000036000f200041186a41013a0000200042003703082000200328020c3600192000411c6a200328000f360000200042003703000c020b200141286a28020021162003410c6a41026a200141076a2d00003a0000200341206a41086a200141186a290200370300200341206a41106a200141206a290200370300200320012f00053b010c2003200141106a290200370320200141086a28020021052001410c6a280200211820012d0004211a2002411a6a2901002104200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002117200241046a2d0000211b200241026a2f0100211c20022d0001210620022d00002119200228022422022002280200417f6a220136020002400240024002400240024020190d00024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200641ff01714101470d012003200437039801200320073a009701200320083a009601200320093b0194012003200a3a0093012003200b3a0092012003200c3b0190012003200d3a008f012003200e3a008e012003200f3b018c01200320103a008b01200320113a008a01200320123b018801200320133a008701200320143a008601200320153b018401200320173a0083012003201b3a0082012003201c3b018001200341b8016a22024200370300200341b0016a22014200370300200341a0016a41086a22194200370300200342003703a001200341f8016a41bee6c000410410cb012019200341f8016a41086a2206290000370300200320032900f8013703a001200341f8016a4198d1cd00410310cb0120022006290000370300200120032900f801370300200341f8016a200341a0016a41201085040240024020032d00f8014101460d00200242003703002001420037030020194200370300200342003703a0010c010b200220034191026a290000370300200120034189026a290000370300201920034181026a290000370300200320032900f9013703a0010b20034180016a200341a0016a412010d70b450d03201610850520161039410321020c020b20010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b201610850520161039410221020b201a4102470d012018450d01200510390c010b024002400240201a0e03020100010b2018450d00200510390b200341fc006a41026a200341a0016a41026a2d00003a0000200341e0006a41086a200341f8016a41086a290300370300201610850520161039410121020c010b200341f8016a41086a2202200341206a41086a290300370300200341f8016a410d6a2201200341206a410d6a290000370000200341fc006a41026a2003410c6a41026a2d0000221a3a0000200341e0006a41086a22192002290300370300200341e0006a410d6a22022001290000370000200341dc006a41026a2201201a3a0000200320032f010c221a3b017c200320032903203703602003201a3b015c200341c0006a410d6a221a2002290000370000200341c0006a41086a2202201929030037030020032003290360370340200341f8016a201641c00710d40b1a200341d0016a410d6a2003290340370000200341e5016a2002290300370000200341ea016a201a290000370000200341d9016a2018360000200320012d00003a00d401200320032f015c3b01d201200320053600d50120034180023b01d001411010382202450d04200241cce0c00036020c200241013602082002428180808010370200200320023602f401411010382201450d04200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a221a3602000240201a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a221a201a280200417f6a221a360200201a0d00200210390b200320013602f401200341a0016a200341f8016a200341d0016a10c40341082102024020032903a0014201520d004108210220032903a8014202510d00200341c0016a2d000021022003200341c1016a22012900003703f8012003200141076a2800003600ff010b200320032800ff013600d701200320032903f8013703d00120034188026a20032800d70136000020034181026a20032903d00137000020034180026a20023a0000200341023a00fc012003410d3a00f801200341f8016a10c90320161039200320032800193602f80120032003411c6a2800003600fb01200041186a41013a00004200210420004200370308200020032802f8013600192000411c6a20032800fb013600000c010b200320032800193602f80120032003411c6a2800003600fb01200041186a41003a000020004200370308200020032802f8013600192000411c6a20032800fb01360000200041286a410b360200200041246a41ebc2cd00360200200041153b0021200041206a20023a0000420121040b200020043703000c010b2003200328001936020c20032003411c6a28000036000f200041186a41003a0000200042003703082000200328020c3600192000411c6a200328000f360000200041286a410b360200200041246a41ebc2cd00360200200041153b0021200041206a20023a0000200042013703000b200341800d6a24000f0b1032000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010c104200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010c104200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010c104200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c104200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010c104200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c104200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010c104200228020010390f0b2000410c6a220228020010c104200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010c104200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010c104200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010c104200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010eb0a200228020010390f0b200041286a220228020010c104200228020010390f0b0bdb0601027f230041b00b6b22092400200941c0006a4200370300200941386a220a4200370300200941306a420037030020094200370328200941286a41c7e5c000410610cb01200a419081c400410610cb01200941106a200941286a412010ce032009280214410020092802101b210a02402001450d00417f417f200a20026a22022002200a491b220241016a220120012002491b21020b024002402002200a4d0d0041002101024020034101470d002004410047200541014b7121012005417f6a210a0b200941286a200841c00710d40b1a200941fc076a200a360200200941a4086a20063a000020094180086a200729020037030020094188086a200741086a29020037030020094190086a200741106a29020037030020094198086a200741186a290200370300200941a0086a200741206a280200360200200920043602f807200920013602f407200941003602e8072002200941286a10c405200941286a200210c3042009280230210a200928022821072009411c6a41003a000020094100360218200941086a2007200a200941186a4105410010e601024002402009280208450d002009200928020c220a4105200a4105491b3602242009200941186a3602202009200941206a10c1012009280204417f6a210a20092802004521010c010b410021010b0240200928022c450d00200710390b0240200a410020011b220741324d0d0041002802d0a94e4102490d0041002802cca94e210a41002802c8a94e210141002802d4a94e2108200941c4006a41b8c0cd00360200200941386a4201370300200941dc006a41a8a8cc00ad4280808080c00b84370200200941d0006a41c6bccc00ad4280808080800284370300200941c8006a4200370300200941306a4112360200200941acbccc0036023420094281808080c0c80037026420094100360258200941b4bccc0036022c20094102360228200141b8c0cd00200841024622081b200941286a200a41c0a4c00020081b2802101103000b200941286a41086a20023602002009410c3a0028200941286a410c6a20073602002009410036022c200941286a10c903200041086a200736020020002002360204200041003602000c010b20004281808080b08085013702002000410c6a4117360200200041086a418dc1cc00360200200810c1040b200941b00b6a24000be60301067f230041d0006b22022400200241086a41b5e6c000410910cb01200241186a4180d7cc00410610cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b9c16072e7f037e147f017e0f7f017e0b7f230041a0266b220324002003200236021c20032001360218200341206a2001200210e40102400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10c1010240024020032802100d00024002400240200328021422062003280234410a762201200120064b1b2201410a742202417f4c0d0002400240024020010d00410821070c010b200210382207450d010b200341003602402003200136023c200320073602382006450d02200341d81e6a41047221084100210903400240024020032802342201450d002003280230220a2d0000210b20032001417f6a22073602342003200a41016a3602304103210202400240200b0e020001030b410221020c020b4101210c02400240024020070d0041022102200d2107200f210e20112110201321120c010b200a2d0001211420032001417e6a22153602342003200a41026a221636023041002117200d2107200f210e20112110201321124102210220192118201b211a201d211c201f211e2021212020232122202521242027212620292128202b212a202d212c202e210a202f21012030210b02400240024020140e020100040b200341086a200341306a10c10120032802080d0120032802342202200328020c2201490d012001417f4c0d080240024020010d00410121170c010b200110382217450d0820174100200110d60b1a200328023421020b0240200220014f0d00201710394101210c0c020b20172003280230220a200110d40b1a2003200220016b22153602342003200a20016a22163602302001ad223142208620318421310b201721012031a7210a024002402015450d0020162d0000210b20032015417f6a3602342003201641016a360230200341d81e6a200341306a10a20220032802d81e4126460d0020034198176a200341d81e6a41c00710d40b1a024020032802342207450d002003280230220e2d0000211020032007417f6a22143602342003200e41016a2215360230410021020240024020100e020100020b20144104490d01200e35000121322003200e41056a36023020032007417b6a220236023420024104490d01200e35000521332003200741776a22143602342003200e41096a221536023020334220862032842133410121020b2014450d0020152d0000210720032014417f6a220e3602342003201541016a36023002400240024020070e03010302000b20074129470d02200e450d0220152d0001210720032014417e6a220e3602342003201541026a36023020070d02200e4104490d022015280002212a20032014417a6a3602342003201541066a3602304101212c203421072035210e20362110203721122029212820272126202521242023212220212120201f211e201d211c201b211a201921180c040b200e450d0120152d0001211620032014417e6a22173602342003201541026a3602304100212c203821072039210e203a2110203b2112203c212841002126203d212a203e2124203f2122204021202041211e2042211c2043211a2044211802400240024020160e03060001040b41002107200341003602d81e417d210e034020172007460d04200820076a201520076a221241026a2d00003a00002003200741016a22103602d81e20032014200e6a3602342003201241036a360230200e417f6a210e2010210720104120470d000b20032d00f71e214320032802f81e214420032f01dc1e211220032d00e21e213c20032f00e31e211020032d00e91e213f20032f01ea1e210e20032d00f01e214120032802ec1e214020032800e51e213e20032801de1e213d20032800f11e2107200320032f00f51e3b019c262003200736029826200328019a2621424100212c4101212620072138200e21392010213a2012213b0c010b41022126203821072039210e203a2110203b21120b203c2128203d212a203e2124203f2122204021202041211e2042211c2043211a204421180c030b200e450d0020032014417e6a3602342003201541026a3602300b20034198176a10c5040b2001450d01200a450d01200110390c010b2031422088a72145200341d81e6a20034198176a41c00710d40b1a20034198176a200341d81e6a41c00710d40b1a4100210c20072134200e21352010213620122137202821462026214720332148202421492022214a2020214b201e214c201c214d201a214e2018214f0c020b200d2107200f210e2011211020132112410221020b20192118201b211a201d211c201f211e2021212020232122202521242027212620292128202b212a202d212c202e210a202f21012030210b0b200341d80f6a20034198176a41c00710d40b1a200341d40f6a41026a2229200341d81e6a41026a2d00003a0000200320032f00d81e3b01d40f0240200c0d00200341d81e6a200341d80f6a41c00710d40b1a20034198176a41026a20292d00003a0000200320032f01d40f3b0198172007210d200e210f20102111201221132012215020102151200e21522007215320282129204621542047215520262127202a2156202c2157202a212b202c212d20482158202421252022212320202121201e211f201c211d201a211b20452159200a215a2001215b20182119200a212e2001212f200b215c200b21302049215d204a215e204b215f204c2160204d2161204e2162204f21630c020b2007210d200e210f20102111201221132028212920262127202a212b202c212d202421252022212320202121201e211f201c211d201a211b20182119200a212e2001212f200b21300b410321020b20034190086a200341d81e6a41c00710d40b1a2003418c086a41026a220120034198176a41026a2d00003a0000200320032f0198173b018c08024020024103460d00200941016a2109200341c8006a20034190086a41c00710d40b1a200341c4006a41026a220b20012d00003a0000200320032f018c083b014402402003280240220a200328023c470d00200341386a200a10fe082003280240210a0b20032802382207200a410a746a200341c8006a41c00710d40b220141fc076a205c3a0000200141f6076a2063360000200141f5076a20623a0000200141f1076a2061360000200141ef076a20533b0000200141ee076a20603a0000200141ea076a205f360000200141e8076a20523b0000200141e7076a205e3a0000200141e3076a205d360000200141e1076a20513b0000200141e0076a20543a0000200141dc076a2056360200200141da076a20503b0000200141d9076a20553a0000200141d8076a20573a0000200120583703d007200120023602cc07200120593602c8072001205a3602c4072001205b3602c007200141ff076a200b2d00003a0000200141fd076a20032f01443b00002003200a41016a36024020092006470d010c050b0b20032802382109024020032802402201450d002001410a7421022009210103400240200141cc076a2802004102460d000240200141c0076a280200220a450d00200141c4076a280200450d00200a10390b20011096020b20014180086a210120024180786a22020d000b0b200328023c41ffffff0171450d04200910390c040b1032000b1034000b2007450d010b2000200329023c370204200020073602000c010b2003420037029c1720034100280284ee4d360298172003410d3602dc0f2003200341186a3602d80f200320034198176a36029008200341ec1e6a4101360200200342013702dc1e200341949fc5003602d81e2003200341d80f6a3602e81e20034190086a41b4dfc400200341d81e6a103b1a20032802981720032802a01710d1010240200328029c17450d0020032802981710390b200041003602000b2005450d00200410390b200341a0266a24000b902f01057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010c504200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b2000410c6a109d050f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010c504200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010c504200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c504200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010c504200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010c504200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010c504200228020010390f0b2000410c6a220228020010c504200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010c504200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010c504200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010c504200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010b505200228020010390f0b200041286a220228020010c504200228020010390f0b0b8d0101047f230041106b220324000240024020022802082204410a744104722205417f4c0d0020022802002102200510382206450d012003410036020820032005360204200320063602002003200410ac0220022004200310b202200020012003280200200328020810e90102402003280204450d00200328020010390b200341106a24000f0b1034000b1032000bb10301077f230041306b22022400200241b5e6c000410910cb01200241106a41fcd7cc00410610cb01200241206a2001280200200128020810b802024002402002280228220341206a2204417f4c0d000240024020040d00410121050c010b200410382205450d020b2000200536020041002106200041086a22074100360200200041046a2208200436020002402004410f4b0d00200041004110107720072802002106200028020021050b200520066a22042002290000370000200441086a200241086a2900003700002007200641106a220436020002402008280200220620046b410f4b0d002000200441101077200041046a2802002106200041086a28020021040b200041086a2207200441106a22053602002000280200220820046a22042002290010370000200441086a200241106a41086a290000370000200228022021040240200620056b20034f0d00200020052003107720072802002105200028020021080b200820056a2004200310d40b1a2007200520036a36020002402002280224450d00200410390b0240200141046a280200450d00200128020010390b200241306a24000f0b1034000b1032000bfb0801037f230041b00b6b220a2400200a41286a200110ba05200a280228220b200a28023010e301210c0240200a28022c450d00200b10390b024002400240024002400240200c0d00200a41c0006a4200370300200a41386a220c4200370300200a41306a4200370300200a4200370328200a41286a41c7e5c000410610cb01200c419081c400410610cb01200a41106a200a41286a412010ce03200a2802144100200a2802101b210c02402002450d00417f417f200c20036a22032003200c491b220341016a220b200b2003491b21030b2003200c4d0d030240024020044101460d004100210b0c010b2005410047200641014b71210b2006417f6a21020b2001280208220c417f4c0d012001280200210402400240200c0d00410121060c010b200c10382206450d030b20062004200c10d40b2104200a41286a200941c00710d40b1a200a41f0076a200c360200200a41ec076a200c360200200a41fc076a2002360200200a41f8076a2005360200200a4188086a200841086a290200370300200a4190086a200841106a290200370300200a4198086a200841186a290200370300200a41a0086a200841206a280200360200200a20043602e807200a20073a00a408200a200b3602f407200a2008290200370380082003200a41286a10c405200a41286a200310c304200a2802302109200a28022821084100210c200a411c6a41003a0000200a4100360218200a41086a20082009200a41186a4105410010e60102400240200a280208450d00200a200a28020c220c4105200c4105491b360224200a200a41186a360220200a200a41206a10c101200a280204417f6a2109200a28020045210c0c010b0b0240200a28022c450d00200810390b024020094100200c1b220841324d0d0041002802d0a94e4102490d0041002802cca94e210c41002802c8a94e210941002802d4a94e210b200a41c4006a41b8c0cd00360200200a41386a4201370300200a41dc006a41a8a8cc00ad4280808080c00b84370200200a41d0006a41c6bccc00ad4280808080800284370300200a41c8006a4200370300200a41306a4112360200200a41acbccc00360234200a4281808080b0d400370264200a4100360258200a41b4bccc0036022c200a4102360228200941b8c0cd00200b410246220b1b200a41286a200c41c0a4c000200b1b2802101103000b200a2008360224200a2003360220200a41286a200110ba05200a280228220c200a280230200a41206a10d7080240200a28022c450d00200c10390b200a41286a41086a2003360200200a410c3a0028200a41286a410c6a2008360200200a410036022c200a41286a10c903200041086a20083602002000200336020420004100360200200141046a280200450d05200128020010390c050b20004183283b0104200041013602002000410c6a4110360200200041086a41acc1cc00360200200041066a41003a00000c030b1034000b1032000b20004281808080b08085013702002000410c6a4117360200200041086a418dc1cc003602000b200910c104200141046a280200450d00200128020010390b200a41b00b6a24000bc10a05037f017e027f047e057f230041800c6b22022400200241306a200110ca042002280230210320022002280238220436024420022003360240200241c8006a2003200410e40102400240200228024822040d00420021050c010b200228024c2106024002400240200241d0006a28020022074110490d0020074170714110460d002007417c714120470d010b420021052002420037025c20024100280284ee4d3602582002410d36026c2002200241c0006a3602682002200241d8006a3602742002418c016a41013602002002420137027c200241949fc5003602782002200241e8006a36028801200241f4006a41b4dfc400200241f8006a103b1a2002280258200228026010d1010240200228025c450d00200228025810390b0c010b200441186a2900002108200441086a29000021092004290010210a2004290000210b20042800202107420121050b2006450d00200410390b02402002280234450d00200310390b02400240024002402005500d0020024190016a420037030020024188016a22034200370300200241f8006a41086a420037030020024200370378200241f8006a41c7e5c000410610cb012003419081c400410610cb01200241286a200241f8006a412010ce03200241086a200842004100200228022c410020022802281b220320076b2204200420034b1bad2205420010d30b200241186a20054200200a420010d30b02402002290310420052200241186a41086a290300220a20022903087c2205200a54720d00200b2002290318220a56200920055620092005511b0d020b200242f6cacda397cddbb320370358200241f8006a200110c70502400240200228028001220c0d004100210d2002280278210e0c010b2002280278220e41106a210f410021104100210d410021070240034002400240200d450d00200e20074105746a2103200e200720106a4105746a21040340200341106a22062900002002290358510d0220042003290300370300200441186a200341186a290300370300200441106a2006290300370300200441086a200341086a290300370300200441206a2104200341206a2103200c200741016a22074b0d000c040b0b200f20074105746a2103034020032900002002290358510d01200341206a2103200c200741016a22074b0d000b4100210d0c030b2010417f6a2110200d41016a210d200c200741016a22074b0d000b0b0240200d0d004100210d0c010b200e2007200d6b4105746a200e20074105746a200c20076b41057410d50b1a0b2001200e200c200d6b10ce0a0240200228027c41ffffff3f71450d00200e10390b200241f8006a200110ca042002280278220320022802800110e0010240200228027c450d00200310390b200241f8006a41086a41013a000020024199016a200141186a29000037000020024191016a200141106a29000037000020024189016a200141086a29000037000020024181016a20012900003700002002410b3a0078200241f8006a10c9030c020b20004183263b0100200041086a410a360200200041046a41dff6ca00360200200041026a41003a00000c020b42f6cacda397cddbb32020014200200b200a7d22082008200b56200920057d200b200a54ad7d220520095620052009511b22031b22094200200520031b22054106109108200241b0016a2005370300200241a8016a2009370300200241f8006a41086a41003a000020024199016a200141186a29000037000020024191016a200141106a29000037000020024189016a200141086a29000037000020024181016a20012900003700002002410b3a0078200241f8006a10c9030b200041083a00000b200241800c6a24000b990401067f230041d0006b22022400200241f88bcb00410710cb01200241106a41f88bcb00410710cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000bd10205017f037e017f017e047f230041206b22022400200141186a2903002103200141086a29030021042001290310210520012802202106200129030021072002200010ca0420022802082108200228020021092002410036021820024201370310200241106a41004110107720022802102200200228021822016a220a2004370008200a20073700002002200141106a220136021802402002280214220a20016b410f4b0d00200241106a2001411010772002280214210a20022802102100200228021821010b200020016a220b2003370008200b20053700002002200141106a22013602180240200a20016b41034b0d00200241106a20014104107720022802102100200228021821010b200020016a20063600002009200820022802102200200141046a10e90102402002280214450d00200010390b02402002280204450d00200228020010390b200241206a24000bb75b020d7f037e230041e0146b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e09000102030405060708000b200141246a2802002104200341386a41186a200141196a290000370300200341386a41106a200141116a290000370300200341386a41086a200141096a29000037030020032001290001370338200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc0320034198016a41086a2202200341c8016a41096a29000037030020034198016a41106a2205200341c8016a41116a29000037030020034198016a41186a2206200341c8016a41196a290000370300200320032900c9013703980120032d00c8014101460d08200341d8006a41186a2006290300370300200341d8006a41106a2005290300370300200341d8006a41086a2002290300370300200320032903980137035820034198016a200341d8006a10b605200341b0096a200328029801220520032802a001108504200341c8016a41086a200341ba096a290100370300200341c8016a41106a200341c2096a290100370300200341df016a200341b0096a41196a290000370000200320032901b2093703c80120032d00b109210620032d00b00921020240200328029c01450d00200510390b024002400240200241ff01714101470d00200341f8006a41186a200341df016a29000037000020034189016a200341c8016a41106a29030037000020034181016a200341c8016a41086a290300370000200320032903c801370079200320063a0078200341f8006a200341386a412010d70b0d00200341c8016a200441c00710d40b1a20034188096a41186a200141016a220141186a29000037030020034188096a41106a200141106a29000037030020034188096a41086a200141086a2900003703002003200129000037038809411010382201450d0c200141cce0c00036020c200141013602082001428180808010370200411010382202450d0c200241e4e0c00036020c20024101360208200242818080801037020020012001280200417f6a2205360200024020050d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22052005280200417f6a220536020020050d00200110390b0240024002402002280208200341c8016a200228020c28020c1101000d00200341b0016a41003a0000200341b8016a41023a000020022002280200417f6a2201360200200342003703a001024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b200341c8016a10c1030c010b200341b0096a200341c8016a41c00710d40b1a41082101200341c2146a20034188096a41086a290300370100200341ca146a20034198096a290300370100200341d2146a200341a0096a290300370100200341da146a200341a8096a2f01003b010020034180023b01b81420032003290388093701ba14200320023602dc1420034198016a200341b0096a200341b8146a10c4032003290398014201520d010b20032903a0014202520d02410821010b0c020b410321010c1e0b200341c0016a2802002102200341bc016a2802002105200341b8016a2d0000210120032d00bb01210620032d00ba01210720032d00b90121080b20041039200141ff01714108470d1d2000420037030820002003280031360019200041186a41003a00002000411c6a200341346a280000360000200042003703000c1e0b20034198016a41186a200141196a29000037030020034198016a41106a200141116a29000037030020034198016a41086a200141096a2900003703002003200129000137039801200341c8016a41186a200141396a290000370300200341c8016a41106a200141316a290000370300200341c8016a41086a200141296a2900003703002003200141216a22042900003703c801200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341b0096a10cb030d09200141016a2101200341b0096a200341c8016a10b60520032802b0092102200320032802b8093602bc14200320023602b81420034198016a200341b8146a10da04024020032802b409450d00200210390b200341ca096a200141186a290000370100200341c2096a200141106a290000370100200341ba096a200141086a290000370100200341d2096a2004290000370100200341da096a200441086a290000370100200341e2096a200441106a290000370100200341ea096a200441186a2900003701002003418a083b01b009200320012900003701b209200341b0096a10c903200041186a41003a000020004200370308200042003703000c1d0b200141106a280200210941022104200141026a2f0100210a2001410c6a280200210b200141086a2802002107200141046a280200210c200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2201200341d1016a290000370300200320032900c9013703780240024020032d00c8014101460d00200341d9016a2d00002102200341da016a2d00002104200341db016a2d00002105200341dc016a2d00002106200341dd016a2800002108200341e1016a280000210d200341e5016a280000210e20034198016a41086a200129030037030020032003290378370398012003200e3602b4012003200d3602b001200320083602ac01200320063a00ab01200320053a00aa01200320043a00a901200320023a00a801200341b0096a20034198016a10b80520032802b009220220032802b80910e3012101024020032802b409450d00200210390b410321044112210602402001450d004106210141d7bacb002102411221050c020b0240200a0d0041012101419abbcb002102410d21050c020b0240200b200a4f0d0041022101418abbcb002102411021050c020b410321040240200b41094d0d004180bbcb002102410a2105410321010c020b200b41016a210d200c210802400340200d417f6a220d4102490d012008200841206a220e412010d70b210f4104210141f7bacb00210241092105200e2108200f4100480d000b0c020b2003200bad4200428090cad2c60e420010d30b200341b0096a20034198016a200329030022104280a0e5b9c291017c2211200341086a2903002011201054ad7c221010d403024020032d00b00922044108460d00200341b0096a41086a280200210520032802b409210220032d00b309210820032d00b209210120032d00b10921060c020b200341c8016a20034198016a10b80520032802d001210e20032802c801210d41002105200341003602b809200342013703b009200341b0096a41004104107720032802b009220220032802b80922016a20093600002003200141046a22013602b809024020032802b40920016b410f4b0d00200341b0096a20014110107720032802b009210220032802b80921010b200220016a22022010370008200220113700002003200141106a3602b809200341b0096a200b10ac02200b410574210820032802b80921020340200c20056a2101024020032802b40920026b411f4b0d00200341b0096a20024120107720032802b80921020b20032802b009220620026a22042001290000370000200441086a200141086a290000370000200441106a200141106a290000370000200441186a200141186a2900003700002003200241206a22023602b8092008200541206a2205470d000b024020032802b409220120026b41014b0d00200341b0096a20024102107720032802b409210120032802b009210620032802b80921020b200620026a200a3b0000200d200e2006200241026a10e90102402001450d00200610390b024020032802cc01450d00200d10390b0240200741ffffff3f71450d00200c10390b200341ca096a20034198016a41186a290300370100200341c2096a200341a8016a290300370100200341a0016a29030021112003410a3b01b009200341b0096a410a6a201137010020032003290398013701b209200341b0096a10c903200041186a41003a000020004200370308200020032800b8143600192000411c6a200341bb146a280000360000200042003703000c1e0b0b0240200741ffffff3f71450d00200c10390b200020083a0023200020013a0022200020063a002120004200370308200041206a20043a0000200041186a41003a0000200041246a2005ad4220862002ad84370200200042013703000c1c0b200341b8146a41186a200141196a290000370300200341b8146a41106a200141116a290000370300200341b8146a41086a200141096a290000370300200320012900013703b814200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2202200341c8016a41096a290000370300200320032900c9013703780240024020032d00c8014101460d00200341c8016a41116a2d00002104200341da016a2d00002105200341db016a2d00002106200341dc016a2d00002107200341dd016a2800002108200341c8016a41196a280000210c200341e5016a280000210a20034198016a41086a200229030037030020032003290378370398012003200a3602b4012003200c3602b001200320083602ac01200320073a00ab01200320063a00aa01200320053a00a901200320043a00a801200341b0096a200341b8146a10b80520032802b009220220032802b80910e3012106024020032802b409450d00200210390b4103210241122104410e2105024020060d004105210141e9bacb0021060c020b200341b0096a200341b8146a20034198016a10e40920032802b009220720032802b80910e3012106024020032802b409450d00200710390b02402006450d004107210141c9bacb0021060c020b200341b0096a20034198016a4280a0e5b9c29101420010d403200341b0096a41086a2104024020032d00b00922024108460d002004280200210520032802b409210620032d00b309210720032d00b209210120032d00b10921040c020b200341b0096a41186a22024200370300200341b0096a41106a2205420037030020044200370300200342003703b00920034188096a41c7e5c000410610cb01200420034188096a41086a29000037030020032003290088093703b009200341c8016a419081c400410610cb012002200341c8016a41086a290000370300200520032900c801370300200341106a200341b0096a412010ce03200328021421042003280210210520024200370300200342003703b80920034280a0e5b9c291013703b00920034100280284ee4d3602c40920032004410020051b3602c009200341b8146a20034198016a200341b0096a10e609200341d2096a200329039801370100200341da096a20034198016a41086a290300370100200341e2096a20034198016a41106a290300370100200341ea096a20034198016a41186a290300370100200341ca096a200141016a220141186a290000370100200341c2096a200141106a290000370100200341ba096a200141086a2900003701002003418a023b01b009200320012900003701b209200341b0096a10c903200041186a41003a000020004200370308200020032800583600192000411c6a200341db006a280000360000200042003703000c1d0b410221020b200020073a0023200020013a0022200020043a0021200041206a20023a0000200041186a41003a000020004200370308200041246a2005ad4220862006ad84370200200042013703000c1b0b20034188096a41186a200141196a29000037030020034188096a41106a200141116a29000037030020034188096a41086a200141096a2900003703002003200129000137038809200341b8146a41186a200141396a290000370300200341b8146a41106a200141316a290000370300200341b8146a41086a200141296a2900003703002003200141216a22082900003703b814200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2202200341c8016a41096a290000370300200320032900c9013703780240024020032d00c8014101460d00200341c8016a41116a2d00002104200341da016a2d00002105200341db016a2d00002106200341dc016a2d00002107200341dd016a280000210c200341c8016a41196a280000210a200341e5016a280000210d20034198016a41086a200229030037030020032003290378370398012003200d3602b4012003200a3602b0012003200c3602ac01200320073a00ab01200320063a00aa01200320053a00a901200320043a00a801200341c8016a20034188096a10b805200341b0096a20032802c801220220032802d001108109200341cc096a280200210420032802c809210a20032802c4092106024020032802cc01450d00200210390b024020060d004105210241e9bacb00210c410e21010c190b200341f8006a20034188096a200341b8146a10e409200341b0096a2003280278220520032802800110ff0841082102200341b0096a41086a290300211020032903b009211220032903c809211120032802c409210720032802c009210c0240200328027c450d00200510390b20070d0141bfbacb00210c410a21010c170b41022104420021110c180b200341e0016a2011370300200320123703c801200320073602dc012003200c3602d801200320103703d0012011a7210b41b6bacb00210c2004450d13200141016a210e2011422088a7210d4100210120042102024003402006200441017620016a22044105746a20034198016a412010d70b2205450d0120022004200541004822051b2202200441016a200120051b22016b2104200220014d0d150c000b0b024002400240200d450d00200d210441002101200d210203402007200441017620016a22044105746a20034198016a412010d70b2205450d0320022004200541004822051b2202200441016a200120051b22016b2104200220014b0d000b2001200d4d0d012001200d1041000b410021010b0240200d200b470d00200341dc016a200d4101109e0220032802dc0121070b200720014105746a220241206a2002200d20016b41057410d50b1a200241186a20034198016a41186a2201290300370000200241106a20034198016a41106a2204290300370000200241086a20034198016a41086a220529030037000020022003290398013700002003200d41016a3602e401200341b0096a41186a200341c8016a41186a290300370300200341b0096a41106a200341c8016a41106a290300370300200341b0096a41086a200341c8016a41086a290300370300200320032903c8013703b00920034188096a200341b8146a200341b0096a10e609200341f2096a200329039801370100200341fa096a2005290300370100200341820a6a20042903003701002003418a0a6a2001290300370100200341ca096a200e41186a290000370100200341c2096a200e41106a290000370100200341ba096a200e41086a290000370100200341d2096a2008290000370100200341da096a200841086a290000370100200341e2096a200841106a290000370100200341ea096a200841186a2900003701002003200e2900003701b2092003418a043b01b009200341b0096a10c9030240200a41ffffff3f71450d00200610390b200041186a41003a000020004200370308200020032800583600192000411c6a200341db006a280000360000200042003703000c1b0b410b2102419dbacb00210c410e21010c140b200341b8146a41186a200141196a290000370300200341b8146a41106a200141116a290000370300200341b8146a41086a200141096a290000370300200320012900013703b814200341b0096a41206a2201200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2202200341c8016a41096a290000370300200320032900c9013703780240024020032d00c8014101460d00200341c8016a41116a2d00002104200341da016a2d00002105200341db016a2d00002106200341dc016a2d00002107200341dd016a2800002108200341c8016a41196a280000210c200341e5016a280000210a20034198016a41086a200229030037030020032003290378370398012003200a3602b4012003200c3602b001200320083602ac01200320073a00ab01200320063a00aa01200320053a00a901200320043a00a801200341c8016a200341b8146a10b805200341b0096a20032802c801220220032802d0011081092001290300211020032802c809210820032802c409210720032802c0092104024020032802cc01450d00200210390b024020070d0041032101411221024105210441e9bacb002105410e21060c140b200341c8016a200341b8146a20034198016a10e409200341b0096a20032802c801220120032802d00110ff0820032903c809211120032802c409210c20032802c0092105024020032802cc01450d00200110390b200c0d0141032101411221024108210441bfbacb002105410a21060c120b410221010c120b200341b0096a20034198016a10b60520032802b009220120032802b80910e3012106024020032802b409450d00200110390b410321014112210202402006450d00410e210441fdb9cb002105410c21060c100b200341c8096a22064200370300200341c0096a220a4200370300200341b0096a41086a220d4200370300200342003703b00920034188096a41c7e5c000410610cb01200d20034188096a41086a29000037030020032003290088093703b009200341c8016a419081c400410610cb012006200341c8016a41086a290000370300200a20032900c801370300200341186a200341b0096a412010ce030240200520046a220420054f0d0041072101410121020c100b02402004200328021c410020032802181b4d0d00410a210441abbacb002105410b21060c100b02402010a741ffff03712011422088a74d0d00410c21044194bacb002105410921060c100b024020034198016a10db04450d00410f210441b1bbcb002105410821060c100b200341b0096a20034198016a10b60520032802b0092101200320032802b8093602cc01200320013602c801200341b8146a200341c8016a10da04024020032802b409450d00200110390b200341d2096a200329039801370100200341ca096a200341b8146a41186a290300370100200341c2096a200341b8146a41106a290300370100200341ba096a200341b8146a41086a290300370100200341da096a20034198016a41086a290300370100200341e2096a20034198016a41106a290300370100200341ea096a20034198016a41186a290300370100200320032903b8143701b2092003418a083b01b009200341b0096a10c9030240201142ffffff3f83500d00200c10390b0240200841ffffff3f71450d00200710390b200041186a41003a000020004200370308200020032800583600192000411c6a200341db006a280000360000200042003703000c190b200341b8146a41186a200141196a290000370300200341b8146a41106a200141116a290000370300200341b8146a41086a200141096a290000370300200320012900013703b814200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2201200341c8016a41096a290000370300200320032900c9013703780240024020032d00c8014101460d00200341c8016a41116a2d00002102200341da016a2d00002104200341db016a2d00002105200341dc016a2d00002106200341dd016a2800002107200341c8016a41196a2800002108200341e5016a280000210c20034198016a41086a200129030037030020032003290378370398012003200c3602b401200320083602b001200320073602ac01200320063a00ab01200320053a00aa01200320043a00a901200320023a00a801200341c8016a20034198016a200341b8146a10e409200341b0096a20032802c801220220032802d001220410ff08024020032802c4092201450d002002200410e0010b200341b8096a290300211120032903b009211020032903c8092112024020032802cc01450d00200210390b024020010d0041bfbacb00ad2111410321014280808080a00121100c020b200341c8016a200341b8146a20034198016a20102011410010ec04200341ca096a20034198016a41186a290300370100200341c2096a20034198016a41106a290300370100200341ba096a20034198016a41086a290300370100200341d2096a20032903b814370100200341da096a200341b8146a41086a290300370100200341e2096a200341b8146a41106a290300370100200341ea096a200341b8146a41186a29030037010020032003290398013701b2092003418a063b01b009200341b0096a10c9030240201242ffffff3f83500d00200110390b200041186a41003a00002000420037030820002003280088093600192000411c6a2003418b096a280000360000200042003703000c1a0b4102210142002111420021100b200041246a201020118437020020004192103b0021200041206a20013a0000200041186a41003a000020004200370308200042013703000c180b200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2201200341d1016a290000370300200320032900c901370378024020032d00c8014101460d00200341d9016a2d00002102200341da016a2d00002104200341db016a2d00002105200341dc016a2d00002106200341dd016a2800002107200341e1016a2800002108200341e5016a280000210c200341b8146a41086a2001290300370300200320032903783703b8142003200c3602d414200320083602d014200320073602cc14200320063a00cb14200320053a00ca14200320043a00c914200320023a00c81420034188096a41ade6c000410810cb01200341c8016a41b0fdcb00411010cb01412010382201450d03200120032903b814370000200141186a200341b8146a41186a290300370000200141106a200341b8146a41106a290300370000200141086a200341b8146a41086a29030037000020032001412010cc01370358200341bc096a200141206a360200200320013602b8092003200341d8006a41086a3602b4092003200341d8006a3602b009200341f8006a200341b0096a10830120011039200328028001220541206a2201417f4c0d050240024020010d00410121020c010b200110382202450d040b41002104200341003602b809200320023602b009200320013602b40902402001410f4b0d00200341b0096a41004110107720032802b409210120032802b009210220032802b80921040b200220046a2206200329008809370000200641086a20034188096a41086a2900003700002003200441106a22043602b8090240200120046b410f4b0d00200341b0096a20044110107720032802b409210120032802b009210220032802b80921040b200220046a220620032900c801370000200641086a200341c8016a41086a2900003700002003200441106a22043602b809200328027821060240200120046b20054f0d00200341b0096a20042005107720032802b009210220032802b80921040b200220046a2006200510d40b1a2003200420056a22013602b8090240200328027c450d00200328027810390b2001417f4c0d0520032802b00921040240024020010d00410121020c010b200110382202450d040b2003200136029c01200320023602980120022004200110d40b1a200341ac016a200341b8096a2802002202360200200320013602a001200320032903b00922113702a401200341003a00b401200341153602b001200341b0096a2011a7200210e50120032802b0092202450d0a200341a4016a2107034002400240200120032902b4092211422088a722044b0d002003280298012002200110d70b450d010b2011a7450d0c200210390c0c0b024020032802a801450d0020032802a40110390b200320113703a801200320023602a401200341c8016a2002200410e40102400240024020032802c8012201450d0020032802d001210520032802cc012106024020032d00b401450d0020032802a40120032802ac0110e0010b20032802ac01220420032802a0012202490d0a200341c8016a20032802a40120026a200420026b2001200520032802b00111050020032802dc012202450d01200341e0016a280200210502402006450d00200110390b4280808080b00121114189bacb002104410d2101200541ffffff3f71450d0f200210390c0f0b41002802d0a94e450d012003411136028c09200320073602880941002802cca94e210141002802c8a94e210241002802d4a94e2104200342013703c009200341d09fc5003602bc0920034281808080e0d7003702ec092003418ea0c500ad4280808080a00c843702e409200341003602e009200342013703d009200341163602b809200341013602b009200341f89fc5003602b409200341f89fc500ad4280808080e002843703d809200141c0a4c000200441024622041b2802102101200320034188096a3602cc09200241b8c0cd0020041b200341b0096a20011103000c010b024041002802d0a94e450d0020034112360294092003411136028c0920032007360288092003200341f8006a3602900941002802cca94e210241002802c8a94e210441002802d4a94e2105200342023703c009200341e89fc5003602bc0920034281808080c0d9003702ec092003418ea0c500ad4280808080a00c843702e409200341003602e009200342023703d009200341163602b809200341013602b009200341f89fc5003602b409200341f89fc500ad4280808080e002843703d809200241c0a4c000200541024622051b2802102102200320034188096a3602cc09200441b8c0cd0020051b200341b0096a20021103000b2006450d00200110390b200341b0096a20032802a40120032802ac0110e50120032802b0092202450d0b20032802a00121010c000b0b4200211041022102420021110c0b0b200341b0096a41206a200241206a290200370300200341b0096a41186a200241186a290200370300200341b0096a41106a200241106a290200370300200341b0096a41086a200241086a290200370300200320022902003703b009200341c8016a200341b0096a10cc03200341f8006a41086a2202200341d1016a290000370300200320032900c901370378024020032d00c8014101460d00200341d9016a2d00002104200341da016a2d00002105200341db016a2d00002106200341dc016a2d00002107200341dd016a2800002108200341e1016a280000210c200341e5016a280000210a20034198016a41086a200229030037030020032003290378370398012003200a3602b4012003200c3602b001200320083602ac01200320073a00ab01200320063a00aa01200320053a00a901200320043a00a801200341b0096a20034198016a10b605200341c8016a20032802b009220220032802b809108504200141016a2101024020032802b409450d00200210390b200341c9096a200141186a290000370000200341c1096a200141106a290000370000200341b9096a200141086a290000370000200320012900003700b109024020032d00c8014101460d0041a7bbcb00ad21110c070b0240200341c8016a410172200341b0096a410172412010d70b450d0041a7bbcb00ad21110c070b200341b0096a20034198016a10b60520032802b009220120032802b80910e001024020032802b409450d00200110390b20034198016a10d904200041186a41003a000042002111200042003703080c080b4200211141022101420021100c060b410221010c130b1032000b200041186a41003a000020004200370308200041206a41023a0000200042013703000c130b1034000b2002200441d89fc5001054000b4280808080a0012110410321010b200041123b002120004200370308200041246a2010201184370200200041206a20013a0000200041186a41003a0000420121110b200020113703000c0e0b200341c8016a200341b8146a10b805200341b0096a20032802c801220220032802d0012204108109024020032802c4092201450d002002200410e0010b200341b8096a290300211120032903b009211020032802c8092104024020032802cc01450d00200210390b20010d024280808080e001211141e9bacb002104410521010b0240200328029c01450d0020032802980110390b0240200341a8016a280200450d0020032802a40110390b2004ad2110410321020b200020013a0022200041123a002120004200370308200041206a20023a0000200041186a41003a0000200041246a20114280808080f00183201084370200200042013703000c0b0b200341206a200341b8146a2010201110e503200341ca096a200341d0146a290300370100200341c2096a200341c8146a290300370100200341ba096a200341c0146a290300370100200320032903b8143701b2092003418a0a3b01b009200341b0096a10c9030240200441ffffff3f71450d00200110390b0240200328029c01450d0020032802980110390b0240200341a8016a280200450d0020032802a40110390b200041186a41003a000020004200370308200020032800383600192000411c6a2003413b6a280000360000200042003703000c0a0b201142ffffff3f83500d00200c10390b200841ffffff3f71450d00200710390b200020043a0022200020023a0021200041206a20013a0000200041186a41003a000020004200370308200041246a2006ad4220862005ad84370200200042013703000c070b41092101410921020b200b41ffffff3f71450d00200710390b200a41ffffff3f71450d00200610390b200cad2111410321040b200020023a0022200041123a0021200041206a20043a0000200041186a41003a000020004200370308200041246a2001ad422086201184370200200042013703000c020b200410cf0a20041039410a210241a7bbcb00210541002107411221080b200020063a0023200020073a0022200020083a002120004200370308200041206a20013a0000200041186a41003a0000200041246a2002ad4220862005ad84370200200042013703000b200341e0146a24000bf2e20105037f017e027f057e137f230041c0176b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e0f00010e0d0c0b0a0908070605040302000b200341b0076a41186a200141196a290000370300200341b0076a41106a200141116a290000370300200341b0076a41086a200141096a290000370300200320012900013703b00720022802242101024002400240024020022d00000e03000102010b20022d0001210220012001280200417f6a2204360200024020040d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22042004280200417f6a220436020020040d00200110390b200241ff0171450d01411010382202450d11200241cce0c00036020c200241013602082002428180808010370200411010382201450d11200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a220436020020040d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22042004280200417f6a220436020020040d00200210390b20012001280200417f6a22043602004102210220040d012001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22042004280200417f6a220436020020040d01200110390c010b200341b80c6a41186a22014200370300200341b80c6a41106a22024200370300200341b80c6a41086a22044200370300200342003703b80c200341f0096a41a5e6c000410810cb012004200341f0096a41086a2205290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb0120012005290000370300200220032900f009370300200341b0046a200341b80c6a109805024002400240024020032802b00422010d00200342003702e40141002105200341002802e8c8483602e001200341b80c6a41186a200341b0076a41186a290300370300200341b80c6a41106a200341b0076a41106a290300370300200341b80c6a41086a200341b0076a41086a290300370300200320032903b0073703b80c200341b80c6a21040c010b20032902b4042106200320013602e001200320063702e4012006a721052006422088a7220741134b0d02200341b80c6a41186a200341b0076a41186a290300370300200341b80c6a41106a200341b0076a41106a290300370300200341b80c6a41086a200341b0076a41086a290300370300200320032903b0073703b80c200341b80c6a210420072005470d010b200341e0016a200510990520032802e001210120032802e80121070b200120074106746a2201420037030820014201370300200141106a4200370300200141186a420037030020042903002106200341e0016a41086a22052005280200220741016a2205360200200141206a2006370300200141286a200441086a290300370300200141306a200441106a290300370300200141386a200441186a290300370300200341b0046a41086a2005360200200320032903e00122063703b004024002402006a722010d00200341b80c6a41186a4200370300200341b80c6a41106a4200370300200341b80c6a41086a22014200370300200342003703b80c200341f0096a41a5e6c000410810cb012001200341f0096a41086a2204290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb01200241086a2004290000370000200220032900f009370000200341b80c6a412010e0010c010b200341b80c6a41186a4200370300200341b80c6a41106a4200370300200341b80c6a41086a22044200370300200342003703b80c200341f0096a41a5e6c000410810cb012004200341f0096a41086a2208290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb01200241086a2008290000370000200220032900f009370000200341b80c6a200341b0046a109a0520032802b40441ffffff1f71450d00200110390b200341c40c6a2007360200200341c00c6a41063a0000200341093a00b80c200341b80c6a10c903200320032800980c3602800720032003419b0c6a28000036008307200041186a41003a0000200041106a2005ad4288e5157e42d0bf9bc5007c3703002000420137030820002003280280073600192000411c6a200328008307360000200042003703000c180b0240200541ffffff1f71450d00200110390b410321020b200320032800980c3602800720032003419b0c6a28000036008307200041236a41003a0000200041216a4191183b0000200041186a41003a00002000420037030820002003280280073600192000411c6a200328008307360000200041286a4111360200200041246a41a8a8c100360200200041206a20023a0000200042013703000c160b200341e0016a200141046a41a00210d40b1a200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2201200341c4076a290200370300200341cd016a2202200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c00120032d00b0074101460d12200341b0076a41086a280200210420032802b4072105200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d00be013a00f209200320032f01bc013b01f009200320043600f709200320053600f309200320032903c0013700fb09024020032802e801220141e4004d0d00410321010c140b200341106a2001ad220942004280d0f29ce1c800420010d30b20034180076a200341f0096a109b05200341b80c6a2003280280072202200328028807109c05200341b0046a200341b80c6a41a40210d40b1a200341980c6a41086a200341e50e6a290000370300200341a80c6a200341ed0e6a290000370300200341af0c6a200341f40e6a280000360000200320032900dd0e3703980c20032d00dc0e2101200341106a41086a290300210a2003290310210b0240200328028407450d00200210390b024002400240200141ff01714102470d00200341cc076a200341e0016a41a00210d40b1a4200210c200341c4076a4200370200200341002802e8c8483602c0072003200b4280c0caf384a3027c22063703b0072003200a2006200b54ad7c220b3703b8074200210d0c010b200341b80c6a200341b0046a41a40210d40b1a200341b80c6a41a4026a20013a0000200341dd0e6a20032903980c370000200341e50e6a200341980c6a41086a290300370000200341ed0e6a200341980c6a41106a290300370000200341f40e6a200341af0c6a28000036000002400240200341b80c6a41186a28020022070d00410021080c010b20032802c80c220e41086a210f41002110410021084100210402400340024002402008450d00200e20044105746a2101200e200420106a4105746a210203400240200141086a2205280200417f6a0e06000303030300030b20022001290300370300200241186a200141186a290300370300200241106a200141106a290300370300200241086a2005290300370300200241206a2102200141206a21012007200441016a22044b0d000c040b0b200f20044105746a2101034002402001280200417f6a0e06000202020200020b200141206a21012007200441016a22044b0d000b410021080c030b2010417f6a2110200841016a21082007200441016a22044b0d000b0b024020080d00410021080c010b200e200420086b4105746a200e20044105746a200720046b41057410d50b1a0b2003200720086b3602d00c200341d40c6a2201109d052001200341e0016a41a00210d40b1a200341b0076a200341b80c6a41c00210d40b1a200341b0076a41086a2201290300210d2001200a200b4280c0caf384a3027c2206200b54ad7c220b37030020032903b007210c200320063703b0072006200c58200b200d58200b200d511b0d010b200341b80c6a200341f0096a2006200c7d200b200d7d2006200c54ad7d10d40320032d00b80c22014108460d00200341b80c6a41086a280200210220032802bc0c210420032d00bb0c210520032d00ba0c210720032d00b90c21080240200341c4076a28020041ffffff3f71450d0020032802c00710390b200341cc076a109d050c150b0240200c200658200d200b58200d200b511b0d002003200341f0096a200c20067d200d200b7d200c200654ad7d10e5030b200341c8076a3502002106200341b80c6a200341b0076a41c00210d40b1a200341b0046a200341f0096a109b0520032802b004220120032802b804200341b80c6a109e05024020032802b404450d00200110390b0240200341cc0c6a28020041ffffff3f71450d0020032802c80c10390b200341b80c6a411c6a109d05200341d90c6a200341f0096a41186a290300370000200341d10c6a200341f0096a41106a290300370000200341c90c6a200341f0096a41086a290300370000200341b80c6a41086a41003a0000200341093a00b80c200341b80c6a41096a20032903f009370000200341b80c6a10c903200320032800e006360290042003200341e3066a28000036009304200041186a41003a0000200041106a200642f0fb107e2009429085c2007e7c4298d9b1d4007c3703002000420137030820002003280290043600192000411c6a200328009304360000200042003703000c150b200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc0320034180076a41086a2201200341b9076a29000037030020034180076a41106a2202200341c1076a29000037030020034180076a41186a2204200341c9076a290000370300200320032900b10737038007024002400240024020032d00b0074101460d00200341f0096a41186a2004290300370300200341f0096a41106a2002290300370300200341f0096a41086a200129030037030020032003290380073703f009200341980c6a200341f0096a109f05200341b80c6a20032802980c220220032802a00c220410a005024020032d00d80c22014106460d002002200410e0010b200341e0016a41186a200341b80c6a41186a290300370300200341e0016a41106a200341b80c6a41106a290300370300200341e0016a41086a200341b80c6a41086a290300370300200320032903b80c3703e001200341dc0c6a2802002105200341e00c6a28020021040240200328029c0c450d00200210390b20014106460d01200341b0076a410a6a200341e0016a41086a2202290300370100200341b0076a41126a200341e0016a41106a2207290300370100200341b0076a411a6a200341e0016a41186a2208290300370100200320032903e0013701b207200341b0046a41086a200341b0076a41086a290100370300200341b0046a41106a200341b0076a41106a290100370300200341b0046a41186a200341b0076a41186a290100370300200341b0046a41206a200341b0076a41206a2f01003b0100200320032901b0073703b0042008200341b0046a411a6a2901003703002007200341b0046a41126a2901003703002002200341b0046a410a6a290100370300200320032901b2043703e001024020014101470d002004450d00200510390b200341c0016a41086a200341830a6a290000370300200341cd016a200341f0096a41186a290000370000200320032f01f0093b01bc01200320032d00f2093a00be01200320032900fb093703c00120032800f309210220032800f7092104200341b0046a200341e0016a10a105200341b80c6a20032802b00420032802b80410a205200341fb096a2101200341d40c6a21050240024020032802c80c220e0d00410021104100280284ee4d210e420021064200210b410021070c010b200341c00c6a290300210b200341d00c6a280200210720032903b80c210620032802cc0c21100b20052802002111200341bb076a2004360000200341bf076a2001290000370000200341c7076a200141086a290000370000200341cc076a2001410d6a290000370000200320032f01f0093b01b407200320032d00f2093a00b607200320023600b7072003200341e0016a3602b007200341b0076a41047221054100210802402007450d004100210f410021084100210402400340024002402008450d00200e20044105746a2101200e2004200f6a4105746a2102034020012005412010d70b450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012007200441016a22044b0d000c040b0b200e20044105746a2101034020012005412010d70b450d01200141206a21012007200441016a22044b0d000b410021080c030b200f417f6a210f200841016a21082007200441016a22044b0d000b0b024020080d00410021080c010b200e200420086b4105746a200e20044105746a200720046b41057410d50b1a0b200341b80c6a20032802b007200520064280c0a8ca9a3a20064280c0a8ca9a3a544100200b501b22011b220d200b420020011b220c410010ec0420032802b0072101200341900d6a200c370300200341880d6a200d370300200341b80c6a41086a41093a0000200341d90c6a200541186a290000370000200341d10c6a200541106a290000370000200341c90c6a200541086a290000370000200341b80c6a41096a2005290000370000200341e10c6a2001290000370000200341e90c6a200141086a290000370000200341f10c6a200141106a290000370000200341f90c6a200141186a290000370000200341093a00b80c200341b80c6a10c903200341b80c6a41186a200720086b360200200341cc0c6a20103602002003200b200c7d2006200d54ad7d3703c00c20032006200d7d3703b80c200320113602d40c2003200e3602c80c20032802b004220120032802b804200341b80c6a10a3050240201041ffffff3f71450d00200e10390b024020032802b404450d00200110390b200041186a41003a00004200210620004200370308200020032800b80c3600192000411c6a200341bb0c6a2800003600000c030b410221014200210b420021060c010b41a2a8c100ad2106410321014280808080e000210b0b200041911c3b002120004200370308200041246a200b200684370200200041206a20013a0000200041186a41003a0000420121060b200020063703000c140b4102210420034198016a41026a200141076a2d00003a0000200341e0066a41086a200141186a290200370300200341e0066a41106a200141206a2902003703002003200141056a2f00003b0198012003200141106a2902003703e006200141046a2d00002105200141086a28020021082001410c6a2802002107200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc0320034180076a41086a2201200341b9076a29000037030020034180076a41106a2202200341c1076a29000037030020034180076a41186a220e200341c9076a290000370300200320032900b1073703800702400240024020032d00b0074101460d00200341980c6a41186a200e290300370300200341980c6a41106a2002290300370300200341980c6a41086a200129030037030020032003290380073703980c200341b80c6a200341980c6a109b0520032802b80c220220032802c00c10e3012101024020032802bc0c450d00200210390b20010d01410321040b418ca9c100ad2106410521014280808080a001210b20054102470d012007450d0120081039418ca9c100ad21060c010b02400240024020050e03020100010b2007450d00200810390b200341c0016a41086a200341b80c6a41086a2903003703002003200341b2076a2d00003a00be01410121044200210b420021060c010b200341b80c6a41086a2201200341e0066a41086a290300370300200341b80c6a410d6a2202200341e0066a410d6a290000370000200341c0016a41086a22042001290300370300200341c0016a410d6a22052002290000370000200320032f01980122023b01bc01200320032903e0063703c00120032003419a016a2d0000220e3a00be01200320023b01f0092003200e3a00f209200320073600f709200320083600f309200341f0096a41186a2005290000370000200341830a6a2004290300370000200320032903c0013700fb0920034180076a200341f0096a109f05200341b80c6a200328028007220220032802880710a005200341e0016a41186a200341b80c6a41186a290300370300200341e0016a41106a200341b80c6a41106a290300370300200341e0016a41086a2001290300370300200320032903b80c3703e001200341dc0c6a2802002105200341e00c6a280200210420032d00d80c21010240200328028407450d00200210390b0240200141ff017122014106460d00200341b0076a410a6a200341e0016a41086a2202290300370100200341b0076a41126a200341e0016a41106a2207290300370100200341b0076a411a6a200341e0016a41186a2208290300370100200320032903e0013701b207200341b0046a41086a200341b0076a41086a290100370300200341b0046a41106a200341b0076a41106a290100370300200341b0046a41186a200341b0076a41186a290100370300200341b0046a41206a200341b0076a41206a2f01003b0100200320032901b0073703b0042008200341b0046a411a6a2901003703002007200341b0046a41126a2901003703002002200341b0046a410a6a290100370300200320032901b2043703e001024020014101470d002004450d00200510390b0240200341e0016a200341980c6a412010d70b450d0041c4a9c100ad210641032104410f210142808080808001210b0c020b200341b80c6a200341f0096a109f0520032802b80c220120032802c00c10e001024020032802bc0c450d00200110390b200341b0046a41186a200341f0096a41186a290300370300200341b0046a41106a200341f0096a41106a290300370300200341b0046a41086a200341f0096a41086a290300370300200341d8046a200341980c6a41086a290300370300200341e0046a200341980c6a41106a290300370300200341e8046a200341980c6a41186a290300370300200320032903f0093703b004200320032903980c3703d00420034180076a200341e0016a10a105200341b80c6a20032802800720032802880710a205200341d40c6a21010240024020032802c80c22080d004100210e4100280284ee4d2108420021064200210b410021050c010b200341b80c6a41086a290300210b200341b80c6a41186a280200210520032903b80c210620032802cc0c210e0b2001280200210f200341b0076a41386a2211200341b0046a41386a290300370300200341b0076a41306a2212200341b0046a41306a290300370300200341b0076a41286a2213200341b0046a41286a290300370300200341b0076a41206a2214200341b0046a41206a290300370300200341b0076a41186a2215200341b0046a41186a290300370300200341b0076a41106a2216200341b0046a41106a290300370300200341b0076a41086a2217200341b0046a41086a290300370300200320032903b0043703b0074100210702402005450d0041002110410021074100210402400340024002402007450d00200820044105746a21012008200420106a4105746a210203402001200341b0076a412010d70b450d0220022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a290000370000200241206a2102200141206a21012005200441016a22044b0d000c040b0b200820044105746a210103402001200341b0076a412010d70b450d01200141206a21012005200441016a22044b0d000b410021070c030b2010417f6a2110200741016a21072005200441016a22044b0d000b0b024020070d00410021070c010b2008200420076b4105746a200820044105746a200520046b41057410d50b1a0b20034180016a201420064280c0a8ca9a3a20064280c0a8ca9a3a544100200b501b22011b220d200b420020011b220c10e503200341900d6a200c370300200341880d6a200d370300200341d90c6a2015290300370000200341d10c6a2016290300370000200341c90c6a2017290300370000200341e10c6a20032903d007370000200341e90c6a2013290300370000200341f10c6a2012290300370000200341f90c6a2011290300370000200341b80c6a41086a41083a0000200341093a00b80c200341b80c6a41096a20032903b007370000200341b80c6a10c903200341b80c6a41186a200520076b360200200341cc0c6a200e3602002003200b200c7d2006200d54ad7d3703c00c20032006200d7d3703b80c2003200f3602d40c200320083602c80c2003280280072201200328028807200341b80c6a10a3050240200e41ffffff3f71450d00200810390b0240200328028407450d00200110390b200041186a41003a00002000420037030820002003280090043600192000411c6a20034193046a280000360000200042003703000c150b41a2a8c100ad210641032104410e21014280808080e000210b0b200020013a0022200041113a0021200041206a20043a0000200041186a41003a000020004200370308200041246a200b4280808080f00183200642ffffffff0f8384370200200042013703000c130b41022107200341a0076a41026a200141076a2d00003a0000200341e0066a41086a200141186a290200370300200341e0066a41106a200141206a2902003703002003200141056a2f00003b01a0072003200141106a2902003703e006200141046a2d00002104200141086a280200210e2001410c6a280200210520034198016a41026a2001412b6a2d00003a0000200341980c6a41086a2001413c6a290200370300200341980c6a41106a200141c4006a2902003703002003200141296a2f00003b0198012003200141346a2902003703980c200141286a2d000021082001412c6a2802002110200141306a2802002101200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc0320034180076a41086a220f200341b9076a29000037030020034180076a41106a2211200341c1076a29000037030020034180076a41186a2212200341c9076a290000370300200320032900b10737038007024002400240024020032d00b00722024101460d00200341f0096a41186a2012290300370300200341f0096a41106a2011290300370300200341f0096a41086a200f29030037030020032003290380073703f0090240024020040e03030100010b2005450d00200e10390b200341c0016a41086a200341b80c6a41086a2903003703002003200341b2076a2d00003a00be01410121070b420021060c010b200341b80c6a41086a2207200341e0066a41086a290300370300200341b80c6a410d6a220f200341e0066a410d6a290000370000200341c0016a41086a22112007290300370300200341c0016a410d6a2207200f290000370000200320032f01a007220f3b01bc01200320032903e0063703c0012003200341a2076a2d000022123a00be012003200f3b01e001200320123a00e201200320053600e7012003200e3600e301200341f8016a2007290000370000200341f3016a2011290300370000200320032903c0013700eb01200341b80c6a200341f0096a109b0520032802b80c220720032802c00c10e301210f024020032802bc0c450d00200710390b410321070240200f0d0041052111418ca9c100210f4280808080a00121060c010b20034180076a200341e0016a109f05200341b80c6a200328028007221120032802880710a005200341b0046a41186a200341b80c6a41186a290300370300200341b0046a41106a200341b80c6a41106a290300370300200341b0046a41086a200341b80c6a41086a290300370300200341b0076a41086a200341e10c6a290000370300200341b0076a41106a200341e90c6a290000370300200341b0076a41186a200341f10c6a290000370300200341cf076a200341f80c6a280000360000200320032903b80c3703b004200320032900d90c3703b00720032d00d80c210f0240200328028407450d00201110390b0240200f41ff017122114106460d00200341d90c6a20032903b007370000200341b80c6a41186a200341b0046a41186a290300370300200341b80c6a41106a200341b0046a41106a290300370300200341b80c6a41086a200341b0046a41086a290300370300200341e10c6a200341b0076a41086a290300370000200341e90c6a200341b0076a41106a290300370000200341f10c6a200341b0076a41186a290300370000200341f80c6a200341cf076a280000360000200320032903b0043703b80c2003200f3a00d80c200341b80c6a200341f0096a412010d70b210f024020114101470d00200341e00c6a280200450d00200341dc0c6a28020010390b200f0d00200341d90c6a20032f0198013b0000200341e00c6a2001360200200341dc0c6a2010360200200341e40c6a20032903980c370200200341b80c6a41186a200341f0096a41186a290300370300200341b80c6a41106a200341f0096a41106a290300370300200341b80c6a41086a200341f0096a41086a290300370300200341db0c6a2003419a016a2d00003a0000200341ec0c6a200341980c6a41086a290300370200200341f40c6a200341980c6a41106a290300370200200320032903f0093703b80c200320083a00d80c200341b0076a200341e0016a109f0520032802b007220120032802b807200341b80c6a10a405024020032802b407450d00200110390b41012101024020032d00d80c4101470d0020032802e00c450d0020032802dc0c10390b41082107420021060c020b410f211141c4a9c100210f4280808080800121060b0240200841ff01714101470d002001450d00201010390b4100210120024101470d0020044102470d002005450d00200e10390b024020010d00200020113a0022200041113a002120004200370308200041206a20073a0000200041186a41003a0000200041246a20064280808080f00183200fad84370200200042013703000c130b200042003703082000200328009004360019200041186a41003a00002000411c6a20034193046a280000360000200042003703000c120b4102210420034190016a41026a200141076a2d00003a000020034190046a41086a200141186a29020037030020034190046a41106a200141206a2902003703002003200141056a2f00003b0190012003200141106a29020037039004200141046a2d00002105200141086a280200210e2001410c6a2802002107200341b4016a41026a2001412b6a2d00003a0000200341e0066a41086a2001413c6a290200370300200341e0066a41106a200141c4006a2902003703002003200141296a2f00003b01b4012003200141346a2902003703e006200141286a2d000021082001412c6a280200210f200141306a2802002110200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341b0046a41086a2202200341b9076a290000370300200341b0046a41106a2211200341c1076a290000370300200341b0046a41186a2212200341c9076a290000370300200320032900b1073703b004024002400240024020032d00b00722014101460d00200341980c6a41186a2012290300370300200341980c6a41106a2011290300370300200341980c6a41086a2002290300370300200320032903b0043703980c0240024020050e03030100010b2007450d00200e10390b200341e0016a41026a200341b0046a41026a2d00003a0000200341b0076a41086a200341b80c6a41086a290300370300410121040b0c010b200341b80c6a41086a220220034190046a41086a290300370300200341b80c6a410d6a220420034190046a410d6a290000370000200341e0016a41026a20034190016a41026a2d000022113a0000200341b0076a41086a22122002290300370300200341b0076a410d6a22022004290000370000200320032f01900122043b01e00120032003290390043703b007200320043b01f009200320113a00f209200320073600f7092003200e3600f309200341880a6a2002290000370000200341830a6a2012290300370000200320032903b0073700fb09200341b80c6a200341980c6a109b0520032802b80c220420032802c00c10e3012102024020032802bc0c450d00200410390b41032104024020020d0041052112418ca9c1002111410a21020c010b200341b80c6a200341f0096a109f0520032802b80c221120032802c00c10e3012102024020032802bc0c450d00201110390b02402002450d00410d21124193d5c8002111410e21020c010b20034180076a41186a200341f0096a41186a29030037030020034180076a41106a200341f0096a41106a29030037030020034180076a41086a200341f0096a41086a290300370300200320032903f0093703800720034198016a200341980c6a10a105200341b80c6a200328029801220720032802a00110a2050240024020032802c80c22050d00200341f4016a4200370200200342003703e801200342003703e0014100210120034100280284ee4d22053602f0010c010b200341f4016a20032902cc0c370200200341e0016a41086a200341b80c6a41086a290300370300200341e0016a411c6a200341b80c6a411c6a280200360200200320032903b80c3703e001200320053602f001200341e0016a41186a28020021010b200341bc076a2010360200200341b0076a41086a200f360200200341b0076a41106a20032903e006370300200341b0076a41186a200341e0066a41086a290300370300200341d0076a200341e0066a41106a290300370300200341e0076a200341f0096a41086a290300370300200341e8076a200341f0096a41106a290300370300200341f0076a200341f0096a41186a290300370300200320083a00b407200320032f01b4013b00b507200320032903f0093703d8072003200341b6016a2d00003a00b7072003200341980c6a3602b00702400240024002400240200141e3004d0d004112210241b2a9c10021114100211241112113410321040c010b200341b80c6a200341980c6a4280c0a8ca9a3a420010d403024020032d00b80c22044108470d00200341b0046a41186a200341980c6a41186a290300370300200341b0046a41106a200341980c6a41106a290300370300200341b0046a41086a200341980c6a41086a290300370300200341b0046a41286a200341b0076a410472220241086a290200370300200341e0046a200241106a290200370300200341e8046a200241186a290200370300200341f0046a200241206a280200360200200320032903980c3703b004200320022902003703d004200341b80c6a200341b0046a41c40010d40b1a200341c0016a200341b0076a41286a109f0520032802c001220220032802c801200341b80c6a10a405024020032802c401450d00200210390b024020032d00d80c4101470d00200341e00c6a280200450d00200341dc0c6a28020010390b200341d8076a2102200341c0016a41086a2204200341eb076a290000370300200341cd016a2207200341f0076a290000370000200320032f01f0093b01bc01200320032d00f2093a00be012003200341e3076a2900003703c001200341df076a2800002108200341db076a280000210e02402001200341f4016a280200470d00200341f0016a20014101109e0220032802f001210520032802f80121010b20032d00be01211020032f01bc01210f200520014105746a220120083600072001200e3600032001200f3b0000200141026a20103a0000200120032903c00137000b200141136a2004290300370000200141186a2007290000370000200341e0016a41186a2204200428020041016a360200200341e0016a41086a2205427f2005290300220d20032903e00122064280c0a8ca9a3a7c220b2006542201ad7c220c2001200c200d54200b20065a1b22011b3703002003427f200b20011b3703e00120032802b0072101200341900d6a4200370300200341880d6a4280c0a8ca9a3a370300200341b80c6a41086a220741073a0000200341d90c6a200241186a290000370000200341d10c6a200241106a290000370000200341c90c6a200241086a290000370000200341e10c6a2001290000370000200341e90c6a200141086a290000370000200341f10c6a200141106a290000370000200341f90c6a200141186a29000037000020022900002106200341093a00b80c200341b80c6a41096a2006370000200341b80c6a10c903200341b80c6a41186a2004290300370300200341b80c6a41106a200341e0016a41106a290300220637030020072005290300370300200320032903e0013703b80c20032802a001210120032802980121072006a722020d022007200110e0010c030b200341b80c6a41086a280200210220032802bc0c211120032d00bb0c210120032d00ba0c211220032d00b90c21130b0240200841ff01714101470d002010450d00200f10390b200341f4016a28020041ffffff3f71450d02200510390c020b20072001200341b80c6a10a305200341cc0c6a28020041ffffff3f71450d00200210390b410821040b200328029c01450d01200710390c010b0240200841ff01714101470d002010450d00200f10390b41112113024020014101470d0020054102470d002007450d00200e10390b0b024020044108460d00200020013a0023200020123a0022200020133a002120004200370308200041206a20043a0000200041186a41003a0000200041246a2002ad4220862011ad84370200200042013703000c120b20004200370308200020032800a007360019200041186a41003a00002000411c6a200341a3076a280000360000200042003703000c110b20034192016a200141076a2d00003a0000200341e0066a41086a200141186a290200370300200341e0066a41106a200141206a2902003703002003200141056a2f00003b0190012003200141106a2902003703e0062001410c6a2802002105200141086a2802002107200141046a2d0000210420022802242101024002400240024020022d00000e03000102010b20022d0001210220012001280200417f6a2208360200024020080d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22082008280200417f6a220836020020080d00200110390b200241ff0171450d01411010382202450d0b200241cce0c00036020c200241013602082002428180808010370200411010382201450d0b200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a220836020020080d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22082008280200417f6a220836020020080d00200210390b20012001280200417f6a2202360200024020020d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d00200110390b4102210120044102470d012005450d01200710390c010b02400240024020040e03020100010b2005450d00200710390b200341c0016a41086a200341b80c6a41086a2903003703002003200341b2076a2d00003a00be01410121010c010b200341b80c6a41086a2201200341e0066a41086a290300370300200341b80c6a410d6a2202200341e0066a410d6a290000370000200341c0016a41086a22042001290300370300200341c0016a410d6a22082002290000370000200320032f01900122023b01bc01200320032903e0063703c001200320034192016a2d0000220e3a00be01200320023b01980c2003200e3a009a0c2003200536009f0c2003200736009b0c200341980c6a41186a2008290000370000200341ab0c6a2004290300370000200320032903c0013700a30c200341b0076a200341980c6a10a105200341b80c6a20032802b007220220032802b807220410a2050240024020032802c80c2205450d002002200410e00120032802cc0c41ffffff3f7121082001290300210d200341b80c6a41186a280200210720032903b80c210c0c010b410021084100280284ee4d21054200210c4200210d410021070b024020032802b407450d00200210390b20034198016a200341980c6a109b05200341b80c6a200328029801220220032802a0012204109c05024020032d00dc0e22014102460d002002200410e0010b200341f0096a200341b80c6a41a40210d40b1a20034197076a200341f40e6a28000036000020034190076a200341ed0e6a29000037030020034188076a200341e50e6a290000370300200320032900dd0e370380070240200328029c01450d00200210390b02400240024020014102460d00200341b0046a41066a200341f0096a41a40210d40b1a20034190046a41176a220220034180076a41176a28000036000020034190046a41106a220420034180076a41106a29030037030020034190046a41086a220e20034180076a41086a290300370300200320032903800737039004200341e0016a200341b0046a41aa0210d40b1a200341c0016a41176a22102002280000360000200341c0016a41106a22022004290300370300200341c0016a41086a2204200e29030037030020032003290390043703c001200341b0076a200341e0016a41066a41a40210d40b1a200341b0076a41a4026a20013a0000200341d5096a20032903c001370000200341dd096a2004290300370000200341e5096a2002290300370000200341ec096a2010280000360000200341b0076a41086a290300210a20032903b007210902400240200341c8076a28020041057422020d00420021064200210b0c010b20032802c00741106a2101420021064200210b0340200141086a2903004200200141786a29030042015122041b200b7c2001290300420020041b220b20067c2206200b54ad7c210b200141206a2101200241606a22020d000b0b200b200a7c200620097c220b200654ad7c200d7c200b200c7c220d200b54ad7c210b02402007450d0020074105742102200521010340200341b80c6a2001109f0520032802b80c220420032802c00c10e001024020032802bc0c450d00200410390b200141206a2101200241606a22020d000b0b200341e0006a200341980c6a200d200b10ed04200329036021062003200341e8006a290300220c3703c00c200320063703b80c2006200c844200520d012003200341b80c6a3602b004200341b0046a10e4040c020b410321012008450d02200510390c020b2003200c3703c00c200320063703b80c2003200341b80c6a3602b004200341b0046a10e4040b200341f00c6a200b370300200341e80c6a200d370300200341b80c6a41086a41023a0000200341d90c6a200341b00c6a290300370000200341d10c6a200341a80c6a290300370000200341c90c6a200341980c6a41086a290300370000200341093a00b80c200341b80c6a41096a20032903980c370000200341b80c6a10c90320033502c80742a8b7057e2007ad220642f8ba86017e7c200341d4076a3502004288277e7c20064280c2d72f7e7c2106200341cc076a21010240200341c4076a28020041ffffff3f71450d0020032802c00710390b20064280a783cb017c21062001109d0502402008450d00200510390b200320032800a0073602b4012003200341a3076a2800003600b701200041186a41003a0000200041106a200637030020004201370308200020032802b4013600192000411c6a20032800b701360000200042003703000c110b200320032800a0073602b4012003200341a3076a2800003600b701200041186a41003a000020004200370308200020032802b4013600192000411c6a20032800b701360000200041286a4108360200200041246a41aaa9c10036020020004191043b0021200041206a20013a0000200042013703000c100b200141c0006a290300210b200141386a290300210d200141306a2903002106200141046a280200211041022104200341b0016a41026a2001410b6a2d00003a000020034198016a41086a2001411c6a29020037030020034198016a41106a200141246a2902003703002003200141096a2f00003b01b0012003200141146a29020037039801200141086a2d000021052001410c6a2802002108200141106a2802002107200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc0320034180076a41086a2201200341b0076a41096a29000037030020034180076a41106a2202200341c1076a29000037030020034180076a41186a220e200341c9076a290000370300200320032900b107370380070240024002400240024020032d00b0074101460d00200341e0066a41186a200e290300370300200341e0066a41106a2002290300370300200341e0066a41086a200129030037030020032003290380073703e006024002400240024020050e03000201020b41082101200341b80c6a41086a220220034198016a41086a290300370300200341b80c6a410d6a220420034198016a410d6a290000370000200341c0016a41086a22052002290300370300200341c0016a410d6a22022004290000370000200320032f01b00122043b01bc0120032003290398013703c0012003200341b2016a2d0000220e3a00be01200320043b01980c2003200e3a009a0c2003200736009f0c2003200836009b0c200341980c6a41186a2002290000370000200341ab0c6a2005290300370000200320032903c0013700a30c4103210420064201520d0241dfa8c1002102411021050c070b2007450d00200810390b200341c0016a41086a200341b80c6a41086a2903003703002003200341b2076a2d00003a00be01410121040c020b200341b80c6a41186a22014200370300200341c80c6a22024200370300200341b80c6a41086a22054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2207290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb0120012007290000370300200220032900f009370300200341b0076a200341b80c6a10980520032802b007220141002802e8c84820011b2107201020032902b407420020011b220c422088a74f0d03200720104106746a22012903004201520d03200141206a200341e0066a412010d70b0d030240200c42ffffff1f83500d00200710390b200341a0076a200341980c6a109b05200341b80c6a20032802a007220220032802a807109c05200341f0096a200341b80c6a41a40210d40b1a20034188076a200341e50e6a29000037030020034190076a200341ed0e6a29000037030020034197076a200341f40e6a280000360000200320032900dd0e3703800720032d00dc0e2101024020032802a407450d00200210390b0240200141ff01714102460d00200341b0046a41066a200341f0096a41a40210d40b1a20034190046a41176a220220034180076a41176a28000036000020034190046a41106a220420034180076a41106a29030037030020034190046a41086a220520034180076a41086a290300370300200320032903800737039004200341e0016a200341b0046a41aa0210d40b1a200341c0016a41176a22072002280000360000200341c0016a41106a22022004290300370300200341c0016a41086a2204200529030037030020032003290390043703c001200341b0076a200341e0016a41066a41a40210d40b1a200341b0076a41a4026a20013a0000200341d5096a20032903c001370000200341dd096a2004290300370000200341e5096a2002290300370000200341ec096a200728000036000020032802c007210741002101024002400240200341c8076a280200220e450d00200e2104200e21020340024002402007200441017620016a22044105746a2208280200220520104f0d00200441016a21010c010b20052010460d03200421020b200220016b2104200220014b0d000b200e2001490d060b0240200e200341c4076a280200470d00200341c0076a200e10a50520032802c00721070b200720014105746a220241206a2002200e20016b41057410d50b1a200241186a200b370300200241106a200d37030020022006370308200220103602002003200e41016a220e3602c8070c010b200720044105746a220141086a2102024020012903084201520d00200341b80c6a200341980c6a200341e0066a200141106a290300200141186a290300410010ec040b2002200637030020082010360200200141186a200b370300200141106a200d3703000b200341d4076a3502002106200341b80c6a200341b0076a41c00210d40b1a200341b0046a200341980c6a109b0520032802b004220120032802b804200341b80c6a109e05024020032802b404450d00200110390b0240200341cc0c6a28020041ffffff3f71450d0020032802c80c10390b200341b80c6a411c6a109d05200341d90c6a200341980c6a41186a290300370000200341d10c6a200341980c6a41106a290300370000200341c90c6a200341980c6a41086a290300370000200341e40c6a2010360200200341b80c6a41086a41053a0000200341093a00b80c200341b80c6a41096a20032903980c370000200341b80c6a10c903200320032800b401360290012003200341b7016a28000036009301200041186a41003a0000200041106a200ead42a890127e200642c8e0d5007e7c42c8e2f3d7007c3703002000420137030820002003280290013600192000411c6a200328009301360000200042003703000c150b410a210141c6a8c1002102410d21050c040b20054102470d002007450d00200810390b0c020b2001200e1041000b4109210141d3a8c1002102410c2105200c42ffffff1f83500d00200710390b200320032800b401360290012003200341b7016a28000036009301200041186a41003a00002000420037030820002003280290013600192000411c6a200328009301360000200041286a2005360200200041246a2002360200200020013a0022200041113a0021200041206a20043a0000200042013703000c0f0b200141086a290300210b200141046a2802002107200341b80c6a41206a200241206a290200370300200341b80c6a41186a2204200241186a290200370300200341b80c6a41106a2201200241106a290200370300200341b80c6a41086a2205200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2202200341c4076a290200370300200341cd016a220e200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c001410121080240024020032d00b0074101460d00200341b0076a41086a280200211020032802b407210f200341c3046a2002290300370000200341b0046a41186a200e290000370000200320032d00be013a00b204200320032f01bc013b01b004200320103600b7042003200f3600b304200320032903c0013700bb04200442003703002001420037030020054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2202290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb0120042002290000370300200120032900f009370300200341b0076a200341b80c6a10980520032802b007220541002802e8c84820051b210441d3a8c100ad210d4280808080c001210c4183a22421020240200720032902b407420020051b2206422088a722054f0d00200420074106746a220e2903004201520d000240200e41206a200341b0046a412010d70b450d0041d3a8c100ad210d0c010b200420074106746a200b370318410021084200210d200521024200210c0b200320043602b007200320063702b407200341d00c6a4200370300200341c80c6a4200370300200341b80c6a41086a22054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2207290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb01200141086a2007290000370000200120032900f009370000200341b80c6a200341b0076a109a050240200642ffffff1f83500d00200410390b02402008450d00200c200d842106200241087621010c020b200320032800e0013602980c2003200341e3016a28000036009b0c200041186a41003a0000200041106a2002ad42e0a4137e42a0eda33f7c37030020004201370308200020032802980c3600192000411c6a200328009b0c360000200042003703000c100b410221020b200041236a20014110763a0000200041216a20013b0000200041186a41003a000020004200370308200020032802980c3600192000411c6a200328009b0c360000200041246a2006370200200041206a20023a0000200042013703000c0e0b200141246a2802002107200341e0016a41186a200141196a290000370300200341e0016a41106a200141116a290000370300200341e0016a41086a200141096a290000370300200320012900013703e001200341b80c6a41206a200241206a290200370300200341b80c6a41186a2204200241186a290200370300200341b80c6a41106a2201200241106a290200370300200341b80c6a41086a2205200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2202200341c4076a290200370300200341cd016a220e200341b0076a41196a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c001410121080240024020032d00b0074101460d00200341b0076a41086a280200211020032802b407210f200341c3046a2002290300370000200341b0046a41186a200e290000370000200320032d00be013a00b204200320032f01bc013b01b004200320103600b7042003200f3600b304200320032903c0013700bb04200442003703002001420037030020054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2202290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb0120042002290000370300200120032900f009370300200341b0076a200341b80c6a10980520032802b007220541002802e8c84820051b210441d3a8c100ad210b4280808080c001210d4183a22421020240200720032902b407420020051b2206422088a722054f0d00200420074106746a22072903004201520d000240200741206a2207200341b0046a412010d70b450d0041d3a8c100ad210b0c010b200720032903e001370000200741186a200341e0016a41186a290300370000200741106a200341e0016a41106a290300370000200741086a200341e0016a41086a290300370000410021084200210b200521024200210d0b200320043602b007200320063702b407200341d00c6a4200370300200341c80c6a4200370300200341b80c6a41086a22054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2207290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb01200141086a2007290000370000200120032900f009370000200341b80c6a200341b0076a109a050240200642ffffff1f83500d00200410390b02402008450d00200d200b842106200241087621010c020b200320032800980c3602800720032003419b0c6a28000036008307200041186a41003a0000200041106a2002ad42d8fa137e4298add53f7c3703002000420137030820002003280280073600192000411c6a200328008307360000200042003703000c0f0b410221020b200041236a20014110763a0000200041216a20013b0000200041186a41003a00002000420037030820002003280280073600192000411c6a200328008307360000200041246a2006370200200041206a20023a0000200042013703000c0d0b200141106a290300210b200141086a290300210d200141046a2802002107200341b80c6a41206a200241206a290200370300200341b80c6a41186a2204200241186a290200370300200341b80c6a41106a2201200241106a290200370300200341b80c6a41086a2205200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2202200341c4076a290200370300200341cd016a220e200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c001410121080240024020032d00b0074101460d00200341b0076a41086a280200211020032802b407210f200341c3046a2002290300370000200341b0046a41186a200e290000370000200320032d00be013a00b204200320032f01bc013b01b004200320103600b7042003200f3600b304200320032903c0013700bb04200442003703002001420037030020054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2202290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb0120042002290000370300200120032900f009370300200341b0076a200341b80c6a10980520032802b007220541002802e8c84820051b210441d3a8c100ad210c4280808080c001210a4183a22421020240200720032902b407420020051b2206422088a722054f0d00200420074106746a220e2903004201520d000240200e41206a200341b0046a412010d70b450d0041d3a8c100ad210c0c010b200420074106746a2202200d370308200241106a200b370300410021084200210c200521024200210a0b200320043602b007200320063702b407200341d00c6a4200370300200341c80c6a4200370300200341b80c6a41086a22054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2207290000370300200320032900f0093703b80c200341f0096a41c0b8c300410a10cb01200141086a2007290000370000200120032900f009370000200341b80c6a200341b0076a109a050240200642ffffff1f83500d00200410390b02402008450d00200a200c842106200241087621010c020b200320032800e0013602980c2003200341e3016a28000036009b0c200041186a41003a0000200041106a2002ad42e0a4137e42e0a5a63f7c37030020004201370308200020032802980c3600192000411c6a200328009b0c360000200042003703000c0e0b410221020b200041236a20014110763a0000200041216a20013b0000200041186a41003a000020004200370308200020032802980c3600192000411c6a200328009b0c360000200041246a2006370200200041206a20023a0000200042013703000c0c0b200141046a2802002105200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2201200341c4076a290200370300200341cd016a2202200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c0010240024002400240024002400240024020032d00b0074101460d00200341b0076a41086a280200210420032802b4072107200341ab0c6a2001290300370000200341980c6a41186a2002290000370000200320032d00be013a009a0c200320032f01bc013b01980c2003200436009f0c2003200736009b0c200320032903c0013700a30c200341e0066a200341980c6a109b05200341b80c6a20032802e006220220032802e806109c05200341f0096a200341b80c6a41a40210d40b1a20034180076a41086a200341e50e6a29000037030020034180076a41106a200341ed0e6a29000037030020034197076a200341f40e6a280000360000200320032900dd0e3703800720032d00dc0e2101024020032802e406450d00200210390b200141ff01714102460d02200341b0046a41066a200341f0096a41a40210d40b1a20034190046a41176a220220034180076a41176a28000036000020034190046a41106a220420034180076a41106a2903003703004108210e20034190046a41086a220720034180076a41086a290300370300200320032903800737039004200341e0016a200341b0046a41aa0210d40b1a200341c0016a41176a22082002280000360000200341c0016a41106a22022004290300370300200341c0016a41086a2204200729030037030020032003290390043703c001200341b0076a200341e0016a41066a41a40210d40b1a200341b0076a41a4026a20013a0000200341d5096a20032903c001370000200341dd096a2004290300370000200341e5096a2002290300370000200341ec096a200828000036000041a4c1cc00211020032802c0072108200341c8076a280200220f0d01410121010c040b410221020c050b41002101200f2104200f21020340024002402008200441017620016a22044105746a280200220720054f0d00200441016a21010c010b20072005460d03200421020b200220016b2104200220014b0d000b410121010c020b41052101418ca9c1002110410a210e0c020b200820044105746a220141186a290300210b200141106a290300210d200129030821062001200141206a200f2004417f736a41057410d50b1a2003200f417f6a22013602c80720064201510d034107210141efa8c1002110410e210e0b0240200341c4076a28020041ffffff3f71450d00200810390b200341cc076a109d050b410321020b200041186a41003a000020004200370308200020032802a0073600192000411c6a20032800a307360000200041286a200e360200200041246a2010360200200020013a0022200041113a0021200041206a20023a0000200042013703000c0c0b200341d0006a200341980c6a200d200b10e503200341d4076a3502002106200341b80c6a200341b0076a41c00210d40b1a200341b0046a200341980c6a109b0520032802b004220220032802b804200341b80c6a109e05024020032802b404450d00200210390b0240200341cc0c6a28020041ffffff3f71450d0020032802c80c10390b200341b80c6a411c6a109d05200341d90c6a200341980c6a41186a290300370000200341d10c6a200341980c6a41106a290300370000200341c90c6a200341980c6a41086a290300370000200341e40c6a2005360200200341b80c6a41086a41043a0000200341093a00b80c200341b80c6a41096a20032903980c370000200341b80c6a10c90320032003280098013602a00720032003419b016a2800003600a307200041186a41003a0000200041106a2001ad42f8b10c7e200642e885d4007e7c4280fa82d3007c37030020004201370308200020032802a0073600192000411c6a20032800a307360000200042003703000c0b0b200141106a2903002106200141086a290300210b200141046a2802002101200341b80c6a41206a200241206a290200370300200341b80c6a41186a2204200241186a290200370300200341b80c6a41106a2207200241106a290200370300200341b80c6a41086a2205200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2202200341c4076a290200370300200341cd016a2208200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c00102400240024002400240024020032d00b0074101460d00200341b0076a41086a280200210e20032802b4072110200341ab0c6a2002290300370000200341980c6a41186a2008290000370000200320032d00be013a009a0c200320032f01bc013b01980c2003200e36009f0c2003201036009b0c200320032903c0013700a30c200442003703002007420037030020054200370300200342003703b80c200341f0096a41a5e6c000410810cb012005200341f0096a41086a2202290000370300200320032900f0093703b80c410a2105200341f0096a41c0b8c300410a10cb0120042002290000370300200720032900f009370300200341b0076a200341b80c6a10980520032802b007220841002802e8c84820081b2110411121074103210441a0a9c1002102200120032902b407420020081b220d422088a74f0d03201020014106746a22082903004201520d0302402008290308200b56200841106a290300220b200656200b2006511b450d004104210e4196a9c10021020c050b200341e0066a200341980c6a109b05200341b80c6a20032802e006220420032802e806109c05200341f0096a200341b80c6a41a40210d40b1a20034180076a41086a200341e50e6a29000037030020034180076a41106a200341ed0e6a29000037030020034197076a200341f40e6a280000360000200320032900dd0e3703800720032d00dc0e2102024020032802e406450d00200410390b200241ff01714102460d01200341b0046a41066a200341f0096a41a40210d40b1a20034190046a41176a220420034180076a41176a28000036000020034190046a41106a220520034180076a41106a29030037030020034190046a41086a220720034180076a41086a290300370300200320032903800737039004200341e0016a200341b0046a41aa0210d40b1a200341c0016a41176a220e2004280000360000200341c0016a41106a22042005290300370300200341c0016a41086a2205200729030037030020032003290390043703c001200341b0076a200341e0016a41066a41a40210d40b1a200341b0076a41a4026a20023a0000200341d5096a20032903c001370000200341dd096a2005290300370000200341e5096a2004290300370000200341ec096a200e280000360000200841086a221441086a29030021062014290300210b20032802c00721114100210202400240024002400240200341c8076a2802002213450d0020132105201321040340024002402011200541017620026a220f4105746a2212280200220520014f0d00200f41016a21020c010b20052001460d03200f21040b200420026b2105200420024b0d000b20132002490d070b02402013200341c4076a280200470d00200341c0076a201310a50520032802c00721110b201120024105746a220441206a2004201320026b41057410d50b1a200441186a2006370300200441106a200b37030020044201370308200420013602002003201341016a22133602c8070c010b41032104411121074106210e41fda8c1002102410f210502402011200f4105746a220f280208417f6a0e06020000000002000b200f41086a420137030020122001360200200f41186a2006370300200f41106a200b3703000b200341b80c6a200341980c6a2014290300201441086a29030010d40320032d00b80c22044108460d01200341b80c6a41086a280200210520032802bc0c210220032d00bb0c210820032d00ba0c210e20032d00b90c21070b0240200341c4076a28020041ffffff3f71450d00201110390b200341cc076a109d050c050b200341d4076a3502002106200341b80c6a200341b0076a41c00210d40b1a200341b0046a200341980c6a109b0520032802b004220220032802b804200341b80c6a109e05024020032802b404450d00200210390b0240200341cc0c6a28020041ffffff3f71450d0020032802c80c10390b200341b80c6a411c6a109d05200341d90c6a200341980c6a41186a290300370000200341d10c6a200341980c6a41106a290300370000200341c90c6a200341980c6a41086a290300370000200341e40c6a2001360200200341b80c6a41086a41033a0000200341093a00b80c200341b80c6a41096a20032903980c3700002013ad42f896157e200642e0d8d5007e7c42a0bff6e0007c2106200341b80c6a10c9030240200d42ffffff1f83500d00201010390b20032003280098013602a007200320034198016a41036a2800003600a307200041186a41003a0000200041106a200637030020004201370308200020032802a0073600192000411c6a20032800a307360000200042003703000c100b410221040c040b41032104411121074105210e418ca9c1002102410a21050c020b200220131041000b4103210e0b200d42ffffff1f83500d00201010390b20032003280098013602a00720032003419b016a2800003600a307200041186a41003a000020004200370308200020032802a0073600192000411c6a20032800a307360000200041286a2005360200200041246a2002360200200020083a00232000200e3a0022200020073a0021200041206a20043a0000200042013703000c0a0b200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2201200341c4076a290200370300200341cd016a2202200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341bc076a2902003703c0010240024020032d00b0074101460d00200341b0076a41086a280200210420032802b4072105200341ab0c6a2001290300370000200341980c6a41186a2002290000370000200320032d00be013a009a0c200320032f01bc013b01980c2003200436009f0c2003200536009b0c200320032903c0013700a30c200341b0076a200341980c6a10a105200341b80c6a20032802b007220120032802b807220210a2050240024020032802c80c2205450d002001200210e00120032802cc0c41ffffff3f712108200341c00c6a290300210d200341d00c6a280200210720032903b80c210c0c010b410021084100280284ee4d21054200210c4200210d410021070b024020032802b407450d00200110390b200341e0066a200341980c6a109b05200341b80c6a20032802e006220220032802e8062204109c05024020032d00dc0e22014102460d002002200410e0010b200341f0096a200341b80c6a41a40210d40b1a20034197076a200341f40e6a28000036000020034190076a200341ed0e6a29000037030020034188076a200341e50e6a290000370300200320032900dd0e37038007024020032802e406450d00200210390b024020014102460d00200341b0046a41066a200341f0096a41a40210d40b1a20034190046a41176a220220034180076a41176a28000036000020034190046a41106a220420034180076a41106a29030037030020034190046a41086a220e20034180076a41086a290300370300200320032903800737039004200341e0016a200341b0046a41aa0210d40b1a200341c0016a41176a22102002280000360000200341c0016a41106a22022004290300370300200341c0016a41086a2204200e29030037030020032003290390043703c001200341b0076a200341e0016a41066a41a40210d40b1a200341b0076a41a4026a20013a0000200341d5096a20032903c001370000200341dd096a2004290300370000200341e5096a2002290300370000200341ec096a2010280000360000200341b0076a41086a290300210a20032903b007210902400240200341c8076a28020041057422020d00420021064200210b0c010b20032802c00741106a2101420021064200210b0340200141086a2903004200200141786a29030042015122041b200b7c2001290300420020041b220b20067c2206200b54ad7c210b200141206a2101200241606a22020d000b0b200b200a7c200620097c220b200654ad7c200d7c200b200c7c2206200b54ad7c210b02402007450d0020074105742102200521010340200341b80c6a2001109f0520032802b80c220420032802c00c10e001024020032802bc0c450d00200410390b200141206a2101200241606a22020d000b0b200341c0006a200341980c6a2006200b10e503200341f00c6a200b370300200341e80c6a2006370300200341d90c6a200341b00c6a290300370000200341d10c6a200341a80c6a290300370000200341c90c6a200341980c6a41086a290300370000200341b80c6a41086a41013a0000200341093a00b80c200341b80c6a41096a20032903980c370000200341b80c6a10c90320033502c80742f08a0c7e2007ad22064280df87017e7c200341d4076a35020042b0e92b7e7c20064280c2d72f7e7c2106200341cc076a21010240200341c4076a28020041ffffff3f71450d0020032802c00710390b200642c88cbe8e017c21062001109d0502402008450d00200510390b20032003280098013602a00720032003419b016a2800003600a307200041186a41003a0000200041106a200637030020004201370308200020032802a0073600192000411c6a20032800a307360000200042003703000c0c0b410321012008450d01200510390c010b410221010b200041186a41003a000020004200370308200020032802a0073600192000411c6a20032800a307360000200041286a4108360200200041246a41aaa9c10036020020004191043b0021200041206a20013a0000200042013703000c090b2001410c6a2802002107200141086a2802002108200141046a2802002118200341b80c6a41206a200241206a290200370300200341b80c6a41186a200241186a290200370300200341b80c6a41106a200241106a290200370300200341b80c6a41086a200241086a290200370300200320022902003703b80c200341b0076a200341b80c6a10cc03200341c0016a41086a2201200341c4076a290200370300200341cd016a2202200341c9076a290000370000200320032f00b1073b01bc01200320032d00b3073a00be012003200341b0076a410c6a2902003703c0010240024020032d00b0074101460d00200341b0076a41086a280200210420032802b4072105200341830a6a2001290300370000200341f0096a41186a2002290000370000200320032d00be013a00f209200320032f01bc013b01f009200320043600f709200320053600f309200320032903c0013700fb09200341b80c6a200341f0096a109b0520032802b80c220220032802c00c10e3012101024020032802bc0c450d00200210390b410321044111210520010d014101210e41a4c1cc0021104108210f0c060b410221040c050b0240200741e4004d0d004100210e41b2a9c10021104112210f0c050b200341b0076a200341f0096a10a105200341b80c6a20032802b007220120032802b80710a2050240024020032802c80c22190d004100211a4100280284ee4d21194200210c4200210d4100211b0c010b20032802cc0c41ffffff3f71211a200341c00c6a290300210d200341d00c6a280200211b20032903b80c210c0b024020032802b407450d00200110390b200341306a2007ad42004280c0a8ca9a3a420010d30b200341306a41086a29030021062003290330210b0240200741c4006c2205450d00200341d90c6a2101201821020340200341e0016a2002109f05200341b80c6a20032802e001220e20032802e80110a005200341b0046a41186a2210200341b80c6a41186a220f290300370300200341b0046a41106a2211200341b80c6a41106a2212290300370300200341b0046a41086a2213200341b80c6a41086a2214290300370300200341b0076a41086a2215200141086a2216290000370300200341b0076a41106a2217200141106a221c290000370300200341b0076a41186a221d200141186a221e290000370300200341b0076a411f6a221f2001411f6a2220280000360000200320032903b80c3703b004200320012900003703b00720032d00d80c2104024020032802e401450d00200e10390b0240200441ff0171220e4106460d00200120032903b007370000200f2010290300370300201220112903003703002014201329030037030020162015290300370000201c2017290300370000201e201d2903003700002020201f280000360000200320032903b0043703b80c200320043a00d80c200341b80c6a200341f0096a412010d70b21040240200e4101470d0020032802e00c450d0020032802dc0c10390b2004450d004103210441112105410d210e4193d5c8002110410e210f0c060b200241c4006a2102200541bc7f6a22050d000b0b02400240200c200b5a200d20065a200d20065122011b0d00200341b80c6a200341f0096a200b200c7d2006200d7d200b200c54ad7d10d40320032d00b80c22044108460d01200341b80c6a41086a280200210f20032802bc0c211020032d00bb0c211120032d00ba0c210e20032d00b90c21050c050b200c200b58200d20065820011b0d00200341206a200341f0096a200c200b7d200d20067d200c200b54ad7d10e5030b0240201b450d00201b4105742102201921010340200341b80c6a2001109f0520032802b80c220420032802c00c10e001024020032802bc0c450d00200410390b200141206a2101200241606a22020d000b0b200741c4006c220441c4006d220141ffffff3f712001470d0120014105742202417f4c0d010240024020020d00410121050c010b200210382205450d010b201820046a21144100210e20034100360288072003200536028007200320024105762202360284070240200220014f0d0020034180076a41002001109e02200328028807210e0b02400240024020142018470d00201821010c010b200341b0046a41206a2104200341b0076a41206a2105200741c4006c2110200328028007200e4105746a21022018210102400340200141206a2d00004106460d01200341b0046a200141c40010d40b1a200341e0016a41186a220f200141186a290000370300200341e0016a41106a2211200141106a290000370300200341e0016a41086a2212200141086a290000370300200320012900003703e001200341b0076a41186a200341f0096a41186a290300370300200341b0076a41106a200341f0096a41106a290300370300200341b0076a41086a200341f0096a41086a29030037030020052004290200370200200541086a200441086a290200370200200541106a200441106a290200370200200541186a200441186a290200370200200541206a200441206a280200360200200320032903f0093703b007200341b80c6a200341b0076a41c40010d40b1a200341980c6a200341e0016a109f0520032802980c221320032802a00c200341b80c6a10a4050240200328029c0c450d00201310390b024020032d00d80c4101470d0020032802e00c450d0020032802dc0c10390b200141c4006a2101200241186a200f290300370000200241106a2011290300370000200241086a2012290300370000200220032903e001370000200e41016a210e200241206a2102201041bc7f6a22100d000b2003200e360288070c020b200141c4006a21010b2003200e3602880720142001460d002018200741c4006c6a210403402001220241c4006a21010240200241206a2d00004101470d00200241286a280200450d00200241246a28020010390b20042001470d000b0b02402008450d00200841c4006c450d00201810390b02400240200e0d00200341b80c6a200341f0096a10a10520032802b80c220120032802c00c10e00120032802bc0c450d01200110390c010b20032802840721112003280280072107200341b0076a200341f0096a10a105200e4105744114722202417f4c0d0220032802b807211220032802b007210f200210382201450d012001200b37000020012006370008200341103602c00c200320023602bc0c200320013602b80c200341b80c6a200e10ac02200e41057421104100210520032802c00c21020340200720056a2101024020032802bc0c20026b411f4b0d00200341b80c6a20024120107720032802c00c21020b20032802b80c220820026a22042001290000370000200441086a200141086a290000370000200441106a200141106a290000370000200441186a200141186a2900003700002003200241206a22023602c00c2010200541206a2205470d000b200f20122008200210e901024020032802bc0c450d00200810390b024020032802b407450d00200f10390b201141ffffff3f71450d00200710390b201bad220642f08d88017e20064280c2d72f7e7c200ead22064288df8e037e200642c0f0f50b7e7c20064280c2d72f7e7c7c2106200e0d0220032802840741ffffff3f71450d0220032802800710390c020b1032000b1034000b200642d0cebdb5017c21060240201a450d00201910390b200320032800e006360290042003200341e3066a28000036009304200041186a41003a0000200041106a20063703002000420137030820002003280290043600192000411c6a200328009304360000200042003703000c050b201a450d00201910390b02402007450d00200741c4006c2102201841286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010390b200141c4006a2101200241bc7f6a22020d000b0b02402008450d00200841c4006c450d00201810390b200042003703082000200328029004360019200020113a00232000200e3a0022200020053a0021200041186a41003a00002000411c6a200328009304360000200041286a200f360200200041246a2010360200200041206a20043a0000200042013703000c030b410221010b200341e0016a109d0541112108410b210741b9a8c1002104410d21020b200041186a41003a00002000420037030820002003280290043600192000411c6a200328009304360000200041286a2002360200200041246a2004360200200020053a0023200020073a0022200020083a0021200041206a20013a0000200042013703000b200341c0176a24000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010ce04200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010ce04200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010ce04200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010ce04200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010ce04200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010ce04200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010ce04200228020010390f0b2000410c6a220228020010ce04200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010ce04200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010ce04200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010ce04200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010e907200228020010390f0b200041286a220228020010ce04200228020010390f0b0bea2a01057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010cf04200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b2000410c6a109d050f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010cf04200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010cf04200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010cf04200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010cf04200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010cf04200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010cf04200228020010390f0b2000410c6a220228020010cf04200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010cf04200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010cf04200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010cf04200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b200041386a10fc020f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010fa05200228020010390f0b200041286a220228020010cf04200228020010390f0b0be411060e7f017e027f017e067f027e230041f0226b2202240010ea014101210302400240200128020022042d00004101460d004102210502400240024020042d00010e03000102000b410021050c010b200241a0176a41086a200441106a290000370300200241a0176a41106a200441186a290000370300200241a0176a41186a200441206a2f00003b01002002200441086a2900003703a017200441046a2802002106200441026a2f01002107410121050b200241c8226a41186a200241a0176a41186a2f01003b0100200241c8226a41106a200241a0176a41106a290300370300200241c8226a41086a200241a0176a41086a290300370300200220022903a0173703c822410021030c010b200441046a28020021060b02402004280224220828020041016a220941014d0d002001410c6a280200210a200141086a280200210b2001280204210c20082009360200200241c0176a41086a20022903c822370300200241c0176a41106a200241c8226a41086a2209290300370300200241c0176a41186a200241c8226a41106a220d290300370300200241e0176a200241c8226a41186a220e280200360200200220063602c417200220073b01c217200220053a00c117200220033a00c017200220083602e417200c200a41c0076c22016a2105200241c0176a10cb03210f0240024002400240200a0d0042002110200c21010c010b200441086a2111200141c0786a2108200241e00f6a41086a2107200241e0076a410472211242a0b8e3782113200c21014200211002400340200128020022034126460d01200241246a200141046a41bc0710d40b1a200220033602e0072012200241246a41bc0710d40b1a200241a00f6a200241e0076a10b20302400240200f0d00200241c0176a200241e0076a41c00710d40b1a0240024020042d00004101460d004102210602400240024020042d00010e03000102000b410021060c010b200241a0176a41086a201141086a290000370300200241a0176a41106a201141106a290000370300200241a0176a41186a201141186a2f00003b0100200220112900003703a0172004280204211420042f01022115410121060b200e200241a0176a41186a2f01003b0100200d200241a0176a41106a2903003703002009200241a0176a41086a290300370300200220022903a0173703c822410021160c010b20042802042114410121160b2004280224220328020041016a221741014d0d07200720022903c82237020020032017360200200741086a2009290300370200200741106a200d290300370200200741186a200e280200360200200220143602e40f200220153b01e20f200220063a00e10f200220163a00e00f2002200336028410200241b00f6a200241c0176a200241e00f6a10c4030c010b200241e00f6a200241e0076a41c00710d40b1a0240024020042d00004101460d004102211502400240024020042d00010e03000102000b410021150c010b200241a0176a41086a201141086a290000370300200241a0176a41106a201141106a290000370300200241a0176a41186a201141186a2f00003b0100200220112900003703a0172004280204211720042f01022114410121150b200e200241a0176a41186a2f01003b0100200d200241a0176a41106a2903003703002009200241a0176a41086a290300370300200220022903a0173703c822410021160c010b20042802042117410121160b2004280224220328020041016a220641014d0d0620032006360200200241a0176a41086a22062009290300370300200241a0176a41106a2218200d290300370300200241a0176a41186a2219200e280200360200200220022903c8223703a01702402003280208200241e00f6a200328020c28020c1101000d0020032003280200417f6a2206360200200241003a00c80f200242003703b80f200241023a00d00f200242013703b00f024020060d002003280208200328020c2802001102000240200328020c280204450d00200328020810390b200341046a22062006280200417f6a220636020020060d00200310390b200241e00f6a10c1030c010b200241c0176a200241e00f6a41c00710d40b1a200920022903a017370200200941086a2006290300370200200941106a2018290300370200200941186a2019280200360200200220173602cc22200220143b01ca22200220153a00c922200220163a00c822200220033602ec22200241b00f6a200241c0176a200241c8226a10c4030b0240024020022903b80f4201510d0020022903a00f211a0c010b20022903a00f221a20022903c00f221b201b201a561b211a0b024020022903b00f4201510d00427f2010201a7c221a201a2010541b2110201342b0b0417c2113200841c0786a2108200141c0076a22012005470d010c040b0b200241176a200241d80f6a290000370000200241106a200241d10f6a290000370300200220022900c90f370308201a2010201a427f85221b2010201b541b7c211002402008450d00200141c0076a21010340200110ce04200141c0076a2101200841c0786a22080d000b0b201020137d21100240200b450d00200b41c0076c450d00200c10390b200241e00f6a410f6a2201200241086a410f6a290000370000200241e00f6a41086a2204200241086a41086a2903003703002002200229030822133703e00f200041186a41003a0000200041106a2010370300200042013703082000420137030020002013370019200041216a2004290300370000200041286a200129000037000010e7010c030b200141c0076a21010b20052001460d000340200110ce042005200141c0076a2201470d000b0b0240200b450d00200b41c0076c450d00200c10390b200241c0176a41086a41083a0000200241083a00c017200241c0176a10c903200241e00f6a410f6a2201200241086a410f6a290000370000200241e00f6a41086a2204200241086a41086a2903003703002002200229030822133703e00f200041186a41003a0000200041106a200aad42d0cf3e7e20107c4290f8dd067c370300200042013703082000420037030020002013370019200041216a2004290300370000200041286a200129000037000010e2010b200241f0226a24000f0b00000bb40501067f230041e0006b22032400200341086a41e0c1cd00410810cb01200341186a41f8fbcd00411210cb01200320013602482003200341c8006a410410cc01370338200341dc006a2201200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a108301200320023602442003200341c4006a410410cc013703482001200341c4006a41046a3602002003200341c8006a41086a3602542003200341c4006a3602582003200341c8006a360250200341386a200341d0006a1083010240024020032802302201200328024022046a41206a2202417f4c0d000240024020020d00410121050c010b200210382205450d020b2000200536020041002106200041086a22074100360200200041046a2208200236020002402002410f4b0d00200041004110107720072802002106200028020021050b200520066a22022003290008370000200241086a200341086a41086a2900003700002007200641106a220236020002402008280200220520026b410f4b0d002000200241101077200041046a2802002105200041086a28020021020b2000280200220620026a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200241106a2202360200200328022821080240200520026b20014f0d002000200220011077200041046a280200210520072802002102200028020021060b200620026a2008200110d40b1a2007200220016a2202360200200328023821010240200520026b20044f0d002000200220041077200041086a2802002102200028020021060b200620026a2001200410d40b1a200041086a200220046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1034000b1032000b850802167f017e23004190016b22012400200141206a4200370300200141186a22024200370300200141086a41086a420037030020014200370308200141086a41e0c1cd00410810cb01200241c8fbcd00410410cb012001412036022c2001200141086a360228200141306a200141086a412010e4010240024002400240200128023022030d00410021040c010b200128023421052001200141306a41086a280200360244200120033602402001200141c0006a10c1010240024020012802000d0020012802042206200128024422074105762202200220064b1b22024105742208417f4c0d030240024020020d00410121040c010b200810382204450d050b41002109200141003602582001200236025420012004360250024002402006450d00200141e8006a410472210a20014181016a210b200141fa006a210c200141f3006a210d4100210e0340200e41016a210e41002102034020072002460d03200a20026a2001280240220f2d00003a00002001200241016a22083602682001200f41016a3602402008210220084120470d000b2001418c016a41026a220f200d41026a2d00003a0000200141e4006a41026a2210200c41026a2d00003a00002001200a2f01003b01482001200d2f00003b018c012001200c2f00003b01642001200a41026a2d00003a004a20012802880121112001280284012112200128007d211320012801762114200128006f2115200141e0006a41026a2216200b41026a2d00003a00002001200b2f00003b0160024020092001280254470d00200141d0006a20094101109e0220012802502104200128025821090b200720086b2107200420094105746a220220012f01483b0000200241026a20012d004a3a0000200241096a200f2d00003a0000200220012f018c013b0007200241106a20102d00003a0000200220012f01643b000e200220153600032002201436000a20022013360011200241176a20162d00003a0000200220012f01603b00152002201136001c200220123600182001200941016a2209360258200e2006470d000b200128025021040b200129025421172004450d010c020b200141003602440240200128025441ffffff3f71450d00200128025010390b0b200142003702544100210420014100280284ee4d3602502001410d36024c2001200141286a3602482001200141d0006a36028c01200141fc006a41013602002001420137026c200141949fc5003602682001200141c8006a3602782001418c016a41b4dfc400200141e8006a103b1a2001280250200128025810d1012001280254450d00200128025010390b2005450d00200310390b0240024020040d002000420037020420004100280284ee4d3602000c010b20002017370204200020043602000b20014190016a24000f0b1034000b1032000ba84108047f017e017f027e057f037e0a7f017e230041e00e6b22042400200341106a22052802002106200241106a22072903002108200328020021092002290300210a200441bc026a200241f8016a290000370200200441b4026a200241f0016a290000370200200441ac026a200241e8016a290000370200200441e7e485f3063602a0022004200241e0016a2900003702a402200441e8016a41106a2005280200360200200441e8016a41086a200341086a290200370300200420032902003703e801200441d8036a200441a0026a200441e8016a10fa06024002400240024002400240024002400240024002402004280298042205450d00200441f0006a413e6a200441d8036a41386a290300370100200441f0006a41366a200441d8036a41306a290300370100200441f0006a412e6a200441d8036a41286a290300370100200441f0006a41266a200441d8036a41206a290300370100200441f0006a411e6a200441d8036a41186a290300370100200441f0006a41166a200441d8036a41106a290300370100200441f0006a410e6a200441d8036a41086a290300370100200420042903d803370176200441a0046a290300210b200428029c042103200441e0026a200441f0006a41c60010d40b1a200441206a41086a200441e0026a410e6a290100370300200441206a41106a200441e0026a41166a290100370300200441206a41186a200441e0026a411e6a290100370300200441206a41206a200441e0026a41266a290100370300200441206a41286a200441e0026a412e6a290100370300200441206a41306a200441e0026a41366a290100370300200441206a41386a200441e0026a413e6a290100370300200420042901e6023703200240024020022903084201520d00200441d8036a200741f00110d40b1a0240200441d8036a410c6a200441c8046a412010d70b0d0020042802e00320042802c404460d020b20044194016a2207200441d8036a41086a220241206a2802003602002004418c016a220c200241186a29020037020020044184016a220d200241106a290200370200200441f0006a410c6a220e200241086a2902003702002004410136027020042002290200370274200441f0006a200441a8056a220f20044184046a20042903d803200a10f10a21102007200441c4046a220241206a280200360200200c200241186a290200370200200d200241106a290200370200200e200241086a2902003702002004410136027020042002290200370274200441f0006a200f200441e8046a20042903d803200a10f10a21022010450d012002450d010c030b200441d8036a200741f00110d40b1a0240200441d8036a410c6a200441c8046a412010d70b0d0020042802e00320042802c404460d010b20044194016a2207200441d8036a41086a220241206a2802003602002004418c016a220c200241186a29020037020020044184016a220d200241106a290200370200200441f0006a410c6a220e200241086a2902003702002004410036027020042002290200370274200441f0006a200441a8056a220f20044184046a20042903d803200a10f10a21102007200441c4046a220241206a280200360200200c200241186a290200370200200d200241106a290200370200200e200241086a2902003702002004410036027020042002290200370274200441f0006a200f200441e8046a20042903d803200a10f10a21022010450d0020020d020b2000420037030820004201370300200041286a4118360200200041246a419ad6cd00360200200041226a41053a0000200041206a4183143b0100200041186a41003a00000c020b200041286a4118360200200041246a41b2d6cd00360200200041226a41043a0000200041206a4183143b0100200041186a41003a000020004200370308200042013703000c060b0240024002400240200a4200520d00200441d8036a420010880b200441086a20042802d803220c20042802e00310ce03200428020c210720042802082102024020042802dc03450d00200c10390b0c010b200441d8036a200a427f7c10880b200441186a20042802d803220720042802e00310ce03200428021c210c20042802182102024020042802dc03450d00200710390b2002450d01200441d8036a200a10880b200441106a20042802d803220d20042802e00310ce03200428021421072004280210210220042802dc03450d00200d10390b2002450d0102400240200920074b0d0041022009200c4d200a501b22024102460d012002410171450d010b2000420037030820004201370300200041286a4118360200200041246a419ad6cd00360200200041226a41053a0000200041206a4183143b0100200041186a41003a00000c030b20012d0000220c410146220e41057421074101210d0240200c4101470d0020071038220d450d090b41002102200441003602682004200d36026020042007410576220d360264200441d8036a41186a200141016a220741186a290000370300200441d8036a41106a200741106a290000370300200441d8036a41086a200741086a290000370300200420072900003703d8030240200d200e4f0d00200441e0006a4100200e109e02200428026821020b0240200c450d00200428026020024105746a220720042903d803370000200741086a200441d8036a41086a290300370000200741106a200441d8036a41106a290300370000200741186a200441d8036a41186a290300370000200241016a21020b20042002360268200441f0006a41186a200441206a41086a2202290300370300200441f0006a41206a200441206a41106a2207290300370300200441f0006a41286a200441206a41186a2201290300370300200441f0006a41306a220c200441206a41206a290300370300200441f0006a41386a220d200441206a41286a290300370300200441f0006a41c0006a220e200441206a41306a290300370300200441b8016a220f200441206a41386a290300370300200441c8016a200b370300200441c4016a2003360200200441f0006a41d0006a22032005360200200420083703782004200a3703702004200429032037038001200420063602d401200420093602d00141d00010382205450d08200441d8036a41186a2001290300370300200441d8036a41106a2007290300370300200441d8036a41086a2002290300370300200420042903203703d803200c290300210b200d2903002111200e2903002112200f2903002113200441d8036a41c0006a200310ca09200441d8036a41386a2013370300200441d8036a41306a2012370300200441d8036a41286a20113703002004200b3703f8032005200441d8036a41d00010d40b210c200441d8016a41086a200441e0006a41086a280200360200200420042903603703d801200441003602a802200442013703a002200441a0026a41004108107720042802a002220320042802a80222026a200a3700002004200241086a22023602a802024020042802a40220026b41074b0d00200441a0026a20024108107720042802a002210320042802a80221020b200320026a20083700002004200241086a3602a802200441d8036a41dccbc60010bf05200441e0026a20042802d803220320042802e003109d0720042902e402420020042802e00222021b210b20024100280284ee4d20021b210f024020042802dc03450d00200310390b2004200b4220883e02ec012004200f3602e8012004200441e8016a10c10120042802000d052004280204221020042802ec01220341306e2202200220104b1bad42307e2211422088a70d092011a72202417f4c0d090240024020020d004108210e0c010b20021038220e450d090b4100210d200441003602e8022004200e3602e0022004200241306e22023602e402024020100d004100210d200e450d060c070b200441d8036a4104722101200441d8036a41196a2114200441d8036a41126a2115200441e3036a211641002117024003400240200341084f0d00200321020c060b200420042802e801220741086a3602e801200341786a22024108490d05201741016a2117200729000021112004200741106a3602e801200341706a21092007290008211241002102034020092002460d02200120026a200720026a220541106a2d00003a00002004200241016a22033602d8032004200541116a3602e8012003210220034120470d000b20044190026a41026a2205201641026a2d00003a0000200441d4036a41026a2207201541026a2d00003a0000200420012f01003b01b003200420162f00003b019002200420152f00003b01d4032004200141026a2d00003a00b20320042802f803211820042802f403211920042800ed03211a20042801e603211b20042800df03211c200441d0036a41026a221d201441026a2d00003a0000200420142f00003b01d0030240200d20042802e402470d00200441e0026a200d10b70920042802e002210e20042802e802210d0b200920036b2103200e200d41306c6a2202201237030820022011370300200241126a20042d00b2033a0000200220042f01b0033b0110200241196a20052d00003a0000200241176a20042f0190023b0000200241206a20072d00003a00002002411e6a20042f01d4033b0000200241136a201c3600002002411a6a201b360000200241216a201a360000200241276a201d2d00003a0000200241256a20042f01d0033b00002002412c6a2018360000200241286a20193600002004200d41016a220d3602e80220172010470d000b20042802e402210220042802e002220e450d060c070b200441003602ec010c040b2000420037030820004201370300200041286a4118360200200041246a419ad6cd00360200200041226a41053a0000200041206a4183143b0100200041186a41003a00000c010b2000420037030820004201370300200041286a4118360200200041246a419ad6cd00360200200041226a41053a0000200041206a4183143b0100200041186a41003a00000b2003450d04200341306c450d04200510390c040b200420023602ec010b20042802e4022202450d00200241306c450d0020042802e00210390b4100210241002802e8c848210e4100210d0b200441d8036a41dccbc600200441a0026a10ce08200441e0026a20042802d803220320042802e00310cf080240024020042802e00222070d00200441f8016a42003703004100210120044100280284ee4d22073602f4010c010b200441f8016a20042902e4022211370300200420073602f4012011422088a721010b024020042802dc03450d00200310390b20044188026a200d36020020044184026a2002360200200441e8016a41086a200441a0026a41086a280200360200200420042903a0023703e8012004200e360280020240200ba7450d00200f10390b410021090240200c2802402202450d00200441e4036a2103200441a0026a41386a2205200c41386a290300370300200441a0026a41306a2209200c41306a290300370300200441a0026a41286a220d200c41286a290300370300200441a0026a41206a220e200c41206a290300370300200441a0026a41186a220f200c41186a290300370300200441a0026a41106a2210200c41106a290300370300200441a0026a41086a2217200c41086a29030037030020044190026a41086a2214200c41cc006a2802003602002004200c2903003703a0022004200c29024437039002200441e0026a41386a2005290300370300200441e0026a41306a2009290300370300200441e0026a41286a200d290300370300200441e0026a41206a200e290300370300200441e0026a41186a200f290300370300200441e0026a41106a2010290300370300200441e0026a41086a2017290300370300200420042903a0023703e002200420023602a003200441a4036a2202200429039002370200200241086a2014280200360200200441003602e003200442013703d803200441d8036a41004108107720042802d803220520042802e00322026a200a3700002004200241086a22023602e003024020042802dc03220920026b41074b0d00200441d8036a20024108107720042802dc03210920042802d803210520042802e00321020b200520026a2008370000200341002900dccb46370000200341086a41002900e4cb463700002004200241086a3602e0032004200441e0026a3602f403200441b0036a200441d8036a10d00802402009450d00200510390b200441d8036a200441b0036a10b90520042802d803220320042802e00310e3012102024020042802dc03450d00200310390b024020020d00200441d8036a200441e0026a41d00010d40b1a200441d8036a41d0006a200441d8016a10b506200441b0036a200441d8036a10c605200428028002210902400240200428028802220d450d0041002102200d2107200d2105024003400240024002402009200741017620026a220341306c6a2207290300220b200a540d000240200b200a510d00200321050c030b2007290308220b20085a0d010b200341016a21020c010b20032105200b2008510d020b200520026b210720022103200520024b0d000b0b200d20034f0d012003200d1041000b410021030b0240200d200428028402470d0020044180026a200d10b70920042802fc01210120042802800221090b2009200341306c6a220241306a2002200d20036b41306c10d50b1a200220042903b003220b370010200241186a200441b0036a41086a2903002211370000200241206a200441b0036a41106a2903002212370000200241286a200441b0036a41186a2903002213370000200220083703082002200a370300410121092004200d41016a36028802200441d8036a41186a22032013370300200441d8036a41106a22052012370300200441d8036a41086a220d20113703002004200b3703d8030240200120042802f801470d00200441f4016a20014101109e0220042802fc0121010b20042802f401220720014105746a220220042903d803370000200241186a2003290300370000200241106a2005290300370000200241086a200d2903003700002004200141016a22013602fc010c010b4100210920042802a4032202450d00200241306c450d0020042802a00310390b200c41d0006a220220026b220341d0006d210502402003450d00200541d0006c2103200241c4006a21020340024020022802002205450d00200541306c450d002002417c6a28020010390b200241d0006a2102200341b07f6a22030d000b0b200c1039024002402009450d000240024002402001450d0020014105742103200721020340200441d8036a200210bd0520042802980422050d02200241206a2102200341606a22030d000b0b41002802e8c848210e420021110c010b200441e0026a41386a220c200441d8036a41386a290300370300200441e0026a41306a220d200441d8036a41306a290300370300200441e0026a41286a220e200441d8036a41286a290300370300200441e0026a41206a220f200441d8036a41206a290300370300200441e0026a41186a2210200441d8036a41186a290300370300200441e0026a41106a2217200441d8036a41106a290300370300200441e0026a41086a2214200441d8036a41086a290300370300200441a0026a41086a2215200441d8036a41cc006a290200370300200441a0026a41106a2216200441d8036a41d4006a290200370300200441a0026a41186a2218200441d8036a41dc006a280200360200200420042903d8033703e00220042004419c046a2902003703a00241e00010382209450d04200920042903e00237030020092005360240200920042903a002370244200941386a200c290300370300200941306a200d290300370300200941286a200e290300370300200941206a200f290300370300200941186a2010290300370300200941106a2017290300370300200941086a2014290300370300200941cc006a2015290300370200200941d4006a2016290300370200200941dc006a201828020036020020044281808080103702b403200420093602b003024020034120460d00200241206a210d200720014105746a220541606a210e200441d8036a41c4006a210c410121010340200d210202400340200441d8036a200210bd0520042802980422030d012005200241206a2202470d000c030b0b200441e0026a41386a220f200441d8036a41386a290300370300200441e0026a41306a2210200441d8036a41306a290300370300200441e0026a41286a2217200441d8036a41286a290300370300200441e0026a41206a2214200441d8036a41206a290300370300200441e0026a41186a2215200441d8036a41186a290300370300200441e0026a41106a2216200441d8036a41106a290300370300200441e0026a41086a2218200441d8036a41086a290300370300200441a0026a41086a2219200c41086a290200370300200441a0026a41106a221a200c41106a290200370300200441a0026a41186a221b200c41186a280200360200200420042903d8033703e0022004200c2902003703a0020240200120042802b403470d00200441b0036a200110980720042802b00321090b200241206a210d2009200141e0006c6a220720042903e002370300200741106a2016290300370300200741086a20182903003703002010290300210b200f290300211120172903002112201429030021132015290300211e200741c0006a2003360200200741186a201e370300200741206a2013370300200741286a2012370300200741c4006a20042903a002370200200741386a2011370300200741306a200b370300200741cc006a2019290300370200200741d4006a201a290300370200200741dc006a201b2802003602002004200141016a22013602b803200e2002470d000b0b20042802b003210e20042902b40321110b200441d8036a41206a200441e8016a41206a2802002203360200200441d8036a41186a200441e8016a41186a290300220b370300200441d8036a41106a200441e8016a41106a290300370300200441d8036a41086a200441e8016a41086a290300370300200420042903e8013703d803200341306c4104722202417f4c0d04200210382205450d03200441003602b803200420023602b403200420053602b003200441b0036a200310ac0202402003450d00200ba72202200341306c6a210d20042802b803210503402002290300210b024020042802b403220920056b41074b0d00200441b0036a20054108107720042802b403210920042802b80321050b20042802b003220720056a200b3700002004200541086a22033602b803200241086a290300210b0240200920036b41074b0d00200441b0036a20034108107720042802b003210720042802b80321030b200720036a200b3700002004200341086a22053602b803412010382203450d052003200241106a290000370000200341186a2209200241286a290000370000200341106a2201200241206a290000370000200341086a220c200241186a290000370000024020042802b40320056b411f4b0d00200441b0036a20054120107720042802b003210720042802b80321050b200720056a22072003290000370000200741186a2009290000370000200741106a2001290000370000200741086a200c2900003700002004200541206a22053602b80320031039200241306a2202200d470d000b0b200441a0026a41086a200441b0036a41086a280200360200200420042903b0033703a002200441e0026a41dccbc60010bf0520042802e002220220042802e802200441a0026a10d606024020042802e402450d00200210390b024020042802a402450d0020042802a00210390b41dccbc600200441d8036a200441e4036a10d108024020042802dc03450d0020042802d80310390b0240200441e8036a28020041ffffff3f71450d0020042802e40310390b200441f4036a2802002202450d01200241306c450d0120042802f00310390c010b024020042802ec01450d0020042802e80110390b024020042802f80141ffffff3f71450d00200710390b4100210e02402004280284022202450d00200241306c450d0020042802800210390b0b024020042802dc0141ffffff3f71450d0020042802d80110390b0240200e0d00024020042802c4012202450d00200241306c450d0020042802c00110390b200041286a4116360200200041246a41f5d6cd00360200200041226a41063a0000200041206a4183143b0100200041186a41003a000020004200370308200042013703000c010b20064101200641014b1b2202418094ebdc036e2002418094ebdc03704100476a22034101200341014b1b220320024b0d0320022011422088a7220741036c220520022005491b20036ead428094ebdc037e200220036ead80a710af012105200741ffffffff03712007470d0220074102742203417f4c0d024104210202402003450d00200310382202450d020b41002109200441003602f001200420023602e8012004200341027622033602ec01024002400240200320074f0d00200441e8016a4100200710ab0120042802e801210220042802f00121090c010b2007450d010b200220094102746a210220072103034020022005360200200241046a21022003417f6a22030d000b200920076a210920042802e80121020b200420093602f001200e20072002200920042802d00110ac081a200441003602a802200442013703a002200441a0026a41004108107720042802a002220520042802a80222036a200a3700002004200341086a22033602a802024020042802a40220036b41074b0d00200441a0026a20034108107720042802a002210520042802a80221030b200520036a2008370000200441a0026a41086a2205200341086a360200200441b4026a41002900e4cb46370200200441002900dccb463702ac02200441fb026a200441a0026a41186a280200360000200441f3026a200441a0026a41106a290300370000200441eb026a2005290300370000200420042903a0023700e302200441d8036a41186a200441f7026a290000370000200441e9036a200441e0026a41106a290000370000200441e1036a200441e0026a41086a290000370000200420042900e0023700d903200441043a00d803200441d8036a10c903024020042802ec0141ffffffff0371450d00200210390b02402007450d00200741e0006c2103200e41d4006a210203400240200241706a2802002205450d00200541306c450d002002416c6a28020010390b0240200228020041ffffff3f71450d002002417c6a28020010390b200241e0006a2102200341a07f6a22030d000b0b02402011a72202450d00200241e0006c450d00200e10390b024020042802c4012202450d00200241306c450d0020042802c00110390b200041186a41013a000020004200370308200042003703000b200441e00e6a24000f0b1032000b1034000b41f0f0c20041194188f2c2001035000ba70b04087f017e017f017e230041d0016b22012400200141286a41186a22024200370300200141286a41106a22034200370300200141286a41086a2204420037030020014200370328200141c8006a41e9e5c000410a10cb012004200141c8006a41086a220529000037030020012001290048370328200141c8006a41f888c800410610cb012002200529000037030020032001290048370300200141d8006a200141286a4120108504200141086a41086a2206200141e1006a290000370300200141086a41106a2207200141e9006a290000370300200141086a41186a2208200141f1006a290000370300200120012900593703080240024020012d0058450d0020002001290308370000200041186a2008290300370000200041106a2007290300370000200041086a20062903003700000c010b20024200370300200342003703002004420037030020014200370328200141c8006a41c7e5c000410610cb012004200529000037030020012001290048370328200141c8006a41c481c400410610cb01200341086a200529000037000020032001290048370000200141d8006a200141286a10d2072001280258220441002802d8974e20041b210202400240200129025c420020041b2209422088a7220641246c2204450d00200220046a2205415c6a210a200221040340024020042d00004101460d002005200441246a2204470d010c020b200441016a2800002107200441086a28020021082001200441106a28020036022c200120083602280240200741c28289aa04470d00200141d8006a200141286a10990920012903584203510d02200141d8006a41106a2802002104200141286a41186a4200370300200141286a41106a4200370300200141286a41086a2205420037030020014200370328200141c8006a41b69fc500410710cb012005200141c8006a41086a220729000037030020012001290048370328200141c8006a41f4c9c800410a10cb01200341086a200729000037000020032001290048370000200141d8006a200141286a10bf02200128025822054100280284ee4d20051b210702402004200129025c420020051b220b422088a722084f0d00200141086a41186a200720044105746a220541186a290000370300200141086a41106a200541106a290000370300200141086a41086a200541086a290000370300200120052900003703080b0240200b42ffffff3f83500d00200710390b200420084f0d02200141d8006a41186a200141086a41186a2204290300370300200141d8006a41106a200141086a41106a2205290300370300200141d8006a41086a200141086a41086a220729030037030020012001290308370358200141286a41186a4200370300200141286a41106a4200370300200141286a41086a2208420037030020014200370328200141c8006a41e9e5c000410a10cb012008200141c8006a41086a220a29000037030020012001290048370328200141c8006a41f888c800410610cb01200341086a200a290000370000200320012900483700002001412036024c2001200141286a360248200141d8006a200141c8006a10da04200041186a2004290300370000200041106a2005290300370000200041086a2007290300370000200020012903083700000c030b200a2004462107200441246a21042007450d000b0b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402006450d00200641246c21052002210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a28020010390c030b2004410c6a280200450d02200441086a28020010390c020b2004410c6a280200450d01200441086a28020010390c010b200441086a280200450d00200441046a28020010390b200441246a21042005415c6a22050d000b0b2009a72204450d00200441246c450d00200210390b200141d0016a24000b9b0301097f23004190016b2202240020024180016a2001108f08200241286a20022802800122032002280288011090080240024020022802482204450d00200241086a2205200241e4006a290200370300200241106a2206200241ec006a290200370300200241186a2207200241f4006a290200370300200241206a2208200241fc006a2802003602002002200241dc006a290200370300200241d8006a2802002109200241d4006a280200210a200228024c21010240200228028401450d00200310390b200241286a41086a2005290300370300200241286a41106a2006290300370300200241286a41186a2007290300370300200241286a41206a2008280200360200200220022903003703282000200229022c370001200041096a200241346a290200370000200041116a2002413c6a290200370000200041196a200241c4006a29020037000002402001450d00200141186c450d00200410390b0240200941ffffffff0371450d00200a10390b410121010c010b0240200228028401450d00200310390b410021010b200020013a000020024190016a24000b9f0401067f230041d0006b22022400200241086a41b69fc500410710cb01200241186a41c59fc500410810cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000bbe0201027f23004190026b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ec01200320013602e801200341206a200341e8016a10f202410121020240024020032d00204101470d00200342003702f4014100210220034100280284ee4d3602f0012003410d360284022003200341086a360280022003200341f0016a36028c02200341346a410136020020034201370224200341949fc500360220200320034180026a3602302003418c026a41b4dfc400200341206a103b1a20032802f00120032802f80110d10120032802f401450d0120032802f00110390c010b200041016a200341206a41017241c00110d40b1a0b200020023a00002004450d00200110390b20034190026a24000baf0801067f230041e0006b22022400200241086a41b69fc500410710cb01200241186a41bd9fc500410810cb0102400240200141086a280200220341046a2204417f4c0d0002400240024020040d00200241003602402002200436023c200241013602380c010b200410382205450d0341002106200241003602402002200436023c200220053602382003417c490d010b200241386a41004104107720022802382105200228024021060b200520066a20012800003600002002200641046a22063602402001280204210302400240024002402001280208220441c000490d00200441808001490d012004418080808004490d020240200228023c2006470d00200241386a200641011077200228024021060b2002280238220120066a41033a00002002200641016a22063602400240200228023c20066b41034b0d00200241386a20064104107720022802382101200228024021060b200120066a2004360000200641046a21060c030b200441027421050240200228023c2006470d00200241386a200641011077200228024021060b2002280238220120066a20053a0000200641016a21060c020b200441027441017221050240200228023c20066b41014b0d00200241386a200641021077200228024021060b2002280238220120066a20053b0000200641026a21060c010b200441027441027221050240200228023c20066b41034b0d00200241386a200641041077200228024021060b2002280238220120066a2005360000200641046a21060b200220063602400240200228023c220520066b20044f0d00200241386a200620041077200228023c210520022802382101200228024021060b200120066a2003200410d40b1a20022001200620046a220410cc01370348200241dc006a200120046a360200200220013602582002200241d0006a3602542002200241c8006a360250200241286a200241d0006a10830102402005450d00200110390b2002280230220641206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22034100360200200041046a2207200136020002402001410f4b0d00200041004110107720032802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002003200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2203200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20064f0d00200020042006107720032802002104200028020021070b200720046a2001200610d40b1a2003200420066a3602000240200228022c450d00200110390b200241e0006a24000f0b1034000b1032000bc80303027f017e027f230041b0016b220124002001200010df03200141d8006a200128020022002001280208220210e00302400240024020012903584201510d00200141106a410041c40010d60b1a420021030c010b200141a8016a290300210320012802a4012104200141106a200141e0006a41c40010d40b1a2004450d002004417f6a21040c010b4100210441002802d0a94e450d004100210441002802cca94e210041002802c8a94e210241002802d4a94e2105200141f4006a41b8c0cd00360200200141e8006a42013703002001418c016a4185bec300ad4280808080900b8437020020014180016a41a8d3c300ad4280808080c00184370300200141f8006a4200370300200141e0006a410f360200200141f0a5c10036026420014281808080909701370294012001410036028801200141fcb4c70036025c20014101360258200241b8c0cd00200541024622051b200141d8006a200041c0a4c00020051b28021011030020012802082102200128020021000b200141e0006a200141106a41c40010d40b2105200141a8016a2003370300200141a4016a20043602002001420137035820002002200510e70402402001280204450d00200010390b200141b0016a24000b6101017f02404120103822020d001032000b20022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200128020020012802042002412010e901200210390bf60101067f230041b0016b220124002001200010df03200141d8006a200128020022022001280208220010e0030240024020012903584201510d00200141106a410041c40010d60b1a410121000c010b200141a8016a280200210320012802ac01210420012802a4012105200141106a200141e0006a220641c40010d40b1a024020030d00410121000c010b2006200141106a41c40010d40b2106200141ac016a2004360200200141a8016a2003360200200141a4016a417f200541016a220320032005491b3602002001420137035820022000200610e704410021000b02402001280204450d00200210390b200141b0016a240020000bc6ff010a017f027e057f027e027f057e017f017e117f027e230041b0106b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e17000102030405060708090a0b0c0d0e0f10111225242318000b200141d0006a2903002104200141c8006a290300210541022106200341f0036a41026a200141276a2d00003a0000200341e0026a41086a200141386a290200370300200341e0026a41106a200141c0006a2902003703002003200141256a2f00003b01f0032003200141306a2902003703e002200141246a2d00002107200141286a28020021082001412c6a280200210920034180046a41206a200141216a2d00003a000020034180046a41186a200141196a29000037030020034180046a41106a200141116a29000037030020034180046a41086a200141096a2900003703002003200129000137038004200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc0320034180036a41086a2202200341c8046a41096a29000037030020034180036a41106a2201200341c8046a41116a29000037030020034180036a41186a220a200341c8046a41196a290000370300200320032900c904370380030240024020032d00c8044101460d00200341a8046a41186a200a290300370300200341a8046a41106a2001290300370300200341a8046a41086a200229030037030020032003290380033703a804200341a0056a200341a8046a108e0820032802a005220120032802a80510e3012102024020032802a405450d00200110390b4103210620020d00410121064200210b4200210c02400240024020074107710e03000401040b200341db046a200341e8026a290300370000200341e0046a200341ed026a290000370000200320032f01f0033b01c804200320093600cf04200320083600cb04200320032903e0023700d3042003200341f2036a2d00003a00ca04200341a0056a200341c8046a108f0820032802a005220120032802a80510e3012102024020032802a405450d00200110390b410321062002450d0141c0d6c800ad210c4280808080d001210b410321020c030b024020090d004200210c0c030b200810394200210c0c020b024020054280c8afa0255441002004501b450d004184d6c800ad210c4107210242808080809002210b0c020b0240200341a8046a10db04450d0041b1bbcb00ad210c4111210242808080808001210b0c020b200341a0056a200341a8046a108e0820032802a0052102200320032802a8053602ac03200320023602a803200341c8046a200341a8036a10da04024020032802a405450d00200210390b200341a0056a41206a20034180046a41206a2d00003a0000200341a0056a41186a20034180046a41186a290300370300200341a0056a41106a20034180046a41106a290300370300200341a0056a41086a20034180046a41086a29030037030020032003290380043703a00520034180036a200341a8046a108a0a20032802880321012003280280032102200341a8036a200341a0056a108b0a2002200120032802a803220620032802b00310e901024020032802ac03450d00200610390b0240200328028403450d00200210390b200341a8036a41f0c8c800410710cb01200341a8036a41186a22024200370300200342003703b803200341a8036a41106a22014180e3c900410a10cb01200341106a200341a8036a412010ce032003280214210620032802102107200341a8036a41f0c8c800410710cb0120024200370300200342003703b803200141ecdfc900410c10cb01200341086a200341a8036a412010ce03200328020c21082003280208210a200341a8036a200341a8046a10df03200341a0056a20032802a803220d20032802b00310e00341002006410020071b2209200841d400200a1b220e6b2206200620094b1b2106200341a0056a41106a290300420020032903a00542015122071b210c20032903a805420020071b210b024020032802ac03450d00200d10390b200341a9056a20032903a804370000200341a0056a41086a41053a0000200341c1056a200341a8046a41186a2207290300370000200341b9056a200341a8046a41106a2208290300370000200341b1056a200341a8046a41086a220a290300370000200341d8056a200c2004200b200554200c200454200c2004511b220d1b220c370300200341d0056a200b2005200d1b220b370300200341033a00a005200341a0056a10c9032002200729030037030020012008290300370300200341a8036a41086a200a290300370300200320032903a8043703a8034100200920066b220a200a20094b1b220241ffffffff03712002470d1420024102742201417f4c0d140240024020010d00410421070c010b200110382207450d1b0b41002108200341d4056a4100360200200341d0056a20014102762201360200200320073602cc050240200120024f0d00200341cc056a4100200210ab0120032802d40521080b41002802e8c848210d0240200920064d0d0020032802cc0520084102746a21014100200e2009200e2009491b6b210203402001200920026a360200200141046a2101200241016a220620024f21072006210220070d000b200a20086a21080b200341a0056a41186a200c370300200341c4056a4200370200200341e0056a200341b0036a290300370300200341e8056a200341b8036a290300370300200341f0056a200341a8036a41186a2903003703002003200b3703b0052003200b3703a005200320083602d405200320032903a8033703d8052003200d3602c0052003200c3703a80542f3e885db96cddbb320200341d8056a200b200c411f109108200341a8036a200341c8046a108f0820032802a803220220032802b003200341a0056a109208024020032802ac03450d00200210390b024020032802c4052202450d00200241186c450d0020032802c00510390b024020032802d00541ffffffff0371450d0020032802cc0510390b200041186a41003a000020004200370308200020032800d0033600192000411c6a200341d3036a280000360000200042003703000c3c0b4102210241cdd6c800ad210c4280808080d001210b200741ff01714102470d002009450d002008103941cdd6c800ad210c0b200041246a200b4280808080f00383200c42ffffffff0f8384370200200020023a0022200041063a0021200041206a20063a0000200041186a41003a000020004200370308200042013703000c3a0b200141106a290300210c200141086a290300210b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2206200341e1046a290000370300200320032900c9043703a80320032d00c8044101460d15200341a8046a41186a2006290300370300200341a8046a41106a2001290300370300200341a8046a41086a2002290300370300200320032903a8033703a804200341a8036a200341a8046a108e08200341a0056a20032802a803220220032802b003108504024020032d00a00522064101470d00200341d0046a200341aa056a290100370300200341d8046a200341b2056a290100370300200341df046a200341b9056a290000370000200320032901a2053703c80420032d00a10521010b024020032802ac03450d00200210390b410121020240024020064101470d0020034180046a41186a200341df046a29000037000020034191046a200341c8046a41106a29030037000020034189046a200341c8046a41086a290300370000200320032903c80437008104200320013a008004200341e0026a20034180046a108f08200341a0056a20032802e002220220032802e80210900802400240024020032802c0052201450d00200341a8036a41086a200341a0056a413c6a290200370300200341a8036a41106a200341a0056a41c4006a290200370300200341a8036a41186a200341a0056a41cc006a290200370300200341a8036a41206a2206200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210f200341a0056a41086a2903002105200341a0056a41306a2802002107200341cc056a2802002109200341a0056a41286a280200210820032903b005211020032903a005210420032802c405210a024020032802e402450d00200210390b20034180036a41086a200341a8036a41086a290300221137030020034180036a41106a200341a8036a41106a290300221237030020034180036a41186a200341a8036a41186a290300221337030020034180036a41206a22022006280200360200200341c8046a41186a200f370300200341c8046a41306a2007360200200341c8046a41286a2008360200200341ec046a200a360200200320032903a803220f37038003200320103703d804200320043703c804200320093602f404200320053703d004200341c8046a41cc006a2013370200200341c8046a41c4006a2012370200200341c8046a413c6a2011370200200341c8046a41346a200f370200200341c8046a41d4006a2002280200360200200320013602e804200341a8036a200341a8046a10df03200341a0056a20032802a803220120032802b00310e003200341a0056a41106a290300420020032903a00542015122021b210f20032903a805420020021b2110024020032802ac03450d0020011039200341c8046a41086a290300210520032903c80421040b201020047d2211201056200f20057d2010200454ad7d2210200f562010200f511b0d02200341c8046a41186a22022903002112200320032903d8042213200b20112011200b562010200c562010200c511b22011b220b7c220f3703d80420022012200c201020011b22107c200f201354ad7c220c3703002003200b20047c22043703c8042003201020057c2004200b54ad7c22053703d004200f42ffc7afa02556200c420052200c501b0d01024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b41032101410721024184d6c800210642808080809002210c0c3d0b024020032802e402450d00200210390b4100210241e2d6c80021064280808080d001210c0c030b200341a0056a41386a2010370300200341d0056a200b370300200341a9056a20032903a804370000200341a0056a41086a41053a0000200341c1056a200341a8046a41186a290300370000200341b9056a200341b8046a290300370000200341b1056a200341a8046a41086a290300370000200341033a00a005200341a0056a10c90342f3e885db96cddbb320200341c8046a41386a20042005411f109108200341a0056a20034180046a108f0820032802a005220220032802a805200341c8046a10920820032802a405450d00200210390b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200041186a41003a000020004200370308200020032800d0033600192000411c6a200341d3036a280000360000200042003703000c3b0b41dad6c800210642808080808001210c0b410321010c380b200141106a290300210c200141086a290300210b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2206200341e1046a290000370300200320032900c9043703a8030240024020032d00c8044101460d0020034180046a41186a200629030037030020034180046a41106a200129030037030020034180046a41086a2002290300370300200320032903a80337038004200341a8046a20034180046a108f08200341a0056a20032802a804220920032802b004109008024020032802c0052201450d00200341a8036a41086a2208200341a0056a413c6a290200370300200341a8036a41106a220a200341a0056a41c4006a290200370300200341a8036a41186a220d200341a0056a41cc006a290200370300200341a8036a41206a220e200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a2903002104200341a0056a41086a290300210f200341a0056a41306a2802002107200341cc056a2802002114200341a0056a41286a280200210620032903b005210520032903a005211020032802c4052102024020032802ac04450d00200910390b20034180036a41086a2008290300221137030020034180036a41106a200a290300221237030020034180036a41186a200d290300221337030020034180036a41206a2209200e280200360200200341c8046a41186a2004370300200341c8046a41306a2007360200200341c8046a41286a2006360200200341ec046a2002360200200320032903a803221537038003200320053703d804200320103703c804200320143602f4042003200f3703d004200341c8046a41cc006a2013370200200341c8046a41c4006a2012370200200341c8046a413c6a2011370200200341c8046a41346a2015370200200341c8046a41d4006a2009280200360200200320013602e8042006411f4d0d0202402002450d00200241186c450d002001103920032802f80421070b4108210241f8d5c80021014280808080c001210c200741ffffffff0371450d3820032802f40410390c380b024020032802ac04450d00200910390b4100210241e2d6c80021014280808080d001210c0c370b410221014200210c4200210b0c370b02402005200b2005200b542004200c542004200c511b22061b220b2004200c20061b220c84500d00200341c8046a41186a42002004200c7d2005200b54ad7d220f2005200b7d22104280c8afa025544100200f501b22021b37030020034200201020021b3703d804200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341b8036a4180e3c900410a10cb01200341186a200341a8036a412010ce032004200c20021b210c2005200b20021b210b200328021c411c6a411c20032802181b2106024020032802f004220220032802ec04470d00200341c8046a41206a200210820920032802e804210120032802f00421020b2001200241186c6a2202200c3703082002200b37030020022006360210200320032802f00441016a3602f00442f3e885db96cddbb320200341c8046a41386a20032903c804200341c8046a41086a290300411f109108200341a0056a20034180046a108f0820032802a005220220032802a805200341c8046a109208024020032802a405450d00200210390b200341a0056a41386a200c370300200341d0056a200b370300200341a9056a200329038005370000200341a0056a41086a41063a0000200341c1056a20034198056a290300370000200341b9056a20034190056a290300370000200341b1056a20034188056a290300370000200341033a00a005200341a0056a10c90320032802ec0421020b02402002450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200041186a41003a000020004200370308200020032800e0023600192000411c6a200341e3026a280000360000200042003703000c380b200141046a280200210a200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc0320034180036a41086a2202200341d1046a29000037030020034180036a41106a2201200341d9046a29000037030020034180036a41186a2206200341e1046a290000370300200320032900c90437038003024002400240024020032d00c8044101460d00200341a8046a41186a2006290300370300200341a8046a41106a2001290300370300200341a8046a41086a200229030037030020032003290380033703a80420034180046a200341a8046a108f08200341a0056a2003280280042207200328028804109008024020032802c0052208450d00200341a8036a41086a2209200341a0056a413c6a290200370300200341a8036a41106a2201200341a0056a41c4006a290200370300200341a8036a41186a2206200341a0056a41cc006a290200370300200341a8036a41206a220e200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a2903002111200341a0056a41086a290300210f200341a0056a41306a2802002114200341a0056a412c6a2802002116200341a0056a41286a280200210220032903b005211220032903a005211020032802c405210d0240200328028404450d00200710390b20034180036a41086a2009290300220c37030020034180036a41106a2001290300220b37030020034180036a41186a2006290300220437030020034180036a41206a2207200e280200360200200341c8046a41186a2011370300200341c8046a41306a2014360200200341c8046a41286a2002360200200341ec046a200d360200200320032903a803220537038003200320123703d804200320103703c804200320163602f4042003200f3703d004200341c8046a41cc006a2004370200200341c8046a41c4006a200b370200200341c8046a413c6a200c370200200341c8046a41346a2005370200200341c8046a41d4006a2007280200360200200320083602e80420034180046a41186a20034198056a29030037030020034180046a41106a20034190056a29030037030020034180046a41086a20034188056a290300370300200320032903800537038004200341a8036a41f0c8c800410710cb0120064200370300200342003703b80320014180e3c900410a10cb01200341206a200341a8036a412010ce0320032802204101460d022010210b200f21040c030b0240200328028404450d00200710390b41032102410621014100210641e2d6c8002107410d21090c030b410221020c020b20032802242107200341a0056a41086a2216200341c8046a412c6a221441086a2217280200360200200341a8036a41086a221820034180056a220e41086a2219290300370300200341a8036a41106a221a200e41106a221b290300370300200341a8036a41186a221c200e41186a221d290300370300200320142902003703a0052003200e2903003703a8030240024020020d002010210b200f2104200821010c010b2008200241186c6a21092010210b200f210420082102200821010340200241086a29030021052002290300210c024002402007200241106a28020022064f0d002001200c3703002001200636021020012005370308200141186a21010c010b4200200420057d200b200c54ad7d2205200b200c7d220c200b56200520045620052004511b22061b21044200200c20061b210b0b200241186a22022009470d000b0b200e20032903a803370300201d201c290300370300201b201a2903003703002019201829030037030020034180036a41086a22062016280200360200200341c8046a41186a2011370300200320032903a00537038003200320123703d8042003200b3703c8042003200d3602ec04200320043703d004200320083602e8042003200120086b41186d22023602f0042014200329038003370200201720062802003602000b02400240024020020d00201242ffc7afa0255620114200522011501b0d00200341a0056a20034180046a200a108c0a20032d00a00522024108470d0220034180046a108d0a4200210b0c010b42f3e885db96cddbb32020034180056a200b2004411f109108200341a0056a200341a8046a108f0820032802a005220220032802a805200341c8046a109208024020032802a405450d00200210390b200aad42d089027e42d8d8b7d6017c21044201210b0b0240201020032903c804220558200f200341c8046a41086a290300220c58200f200c511b0d00200341d0056a201020057d370300200341a9056a200329038004370000200341a0056a41086a41073a0000200341c1056a20034198046a290300370000200341b9056a20034190046a290300370000200341b1056a20034180046a41086a290300370000200341d8056a200f200c7d2010200554ad7d370300200341033a00a005200341a0056a10c9030b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200320032800e0023602d0032003200341e3026a2800003600d303200041186a41003a0000200041106a20043703002000200b370308200020032802d0033600192000411c6a20032800d303360000200042003703000c390b200341a0056a41086a280200210920032802a405210720032d00a305210820032d00a205210620032d00a1052101024020032802ec04220a450d00200a41186c450d0020032802e80410390b20032802f80441ffffffff0371450d0020032802f40410390b200320032800e0023602d0032003200341e3026a2800003600d303200041186a41003a000020004200370308200020032802d0033600192000411c6a20032800d303360000200041286a2009360200200041246a2007360200200020083a0023200020063a0022200020013a0021200041206a20023a0000200042013703000c370b200141086a2d00002109200141046a2802002107200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2206200341e1046a290000370300200320032900c9043703a8030240024002400240024020032d00c8044101460d0020034180046a41186a200629030037030020034180046a41106a200129030037030020034180046a41086a2002290300370300200320032903a80337038004200341a8046a20034180046a108f08200341a0056a20032802a804220220032802b004109008024020032802c0052201450d00200341a8036a41086a2206200341a0056a413c6a290200370300200341a8036a41106a2208200341a0056a41c4006a290200370300200341a8036a41186a220a200341a0056a41cc006a290200370300200341a8036a41206a220d200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210c200341a0056a41086a290300210b200341a0056a41306a280200210e200341cc056a2802002114200341a0056a41286a280200211620032903b005210420032903a005210520032802c4052117024020032802ac04450d00200210390b20034180036a41086a2006290300220f37030020034180036a41106a2008290300221037030020034180036a41186a200a290300221137030020034180036a41206a2202200d280200360200200341c8046a41186a200c370300200341c8046a41306a200e360200200341c8046a41286a2016360200200341ec046a2017360200200320032903a803220c37038003200320043703d804200320053703c804200320143602f4042003200b3703d004200341c8046a41cc006a2011370200200341c8046a41c4006a2010370200200341c8046a413c6a200f370200200341c8046a41346a200c370200200341c8046a41d4006a2002280200360200200320013602e804200341a0056a20034180056a2202108e0a20032802a005220120032802a80510e001024020032802a405450d00200110390b200341a8036a2002108f0a20032802b003210620032802a8032108200341003602a805200342013703a005200741c000490d02200741808001490d032007418080808004490d04200341a0056a41004101107720032802a005220120032802a80522026a41033a00002003200241016a22023602a805024020032802a40520026b41034b0d00200341a0056a20024104107720032802a005210120032802a80521020b200120026a2007360000200241046a21020c050b024020032802ac04450d00200210390b41e2d6c800ad210c410321024280808080d001210b0c370b410221024200210b4200210c0c360b200341a0056a41004101107720032802a005220120032802a80522026a20074102743a0000200241016a21020c020b200341a0056a41004102107720032802a005220120032802a80522026a20074102744101723b0000200241026a21020c010b200341a0056a41004104107720032802a005220120032802a80522026a2007410274410272360000200241046a21020b200320023602a805024020032802a4052002470d00200341a0056a20024101107720032802a005210120032802a80521020b200120026a20093a00002008200620032802a0052201200241016a10e901024020032802a405450d00200110390b024020032802ac03450d0020032802a80310390b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200041186a41003a000020004200370308200020032800e0023600192000411c6a200341e3026a280000360000200042003703000c360b2001410c6a2802002106200141086a2802002107200141046a2802002109200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2208200341e1046a290000370300200320032900c9043703a803024002400240024020032d00c8044101460d0020034180046a41186a200829030037030020034180046a41106a200129030037030020034180046a41086a2002290300370300200320032903a80337038004200341a8046a20034180046a108f08200341a0056a20032802a804220a20032802b0041090080240024020032802c0052201450d00200341a8036a41086a220e200341a0056a413c6a290200370300200341a8036a41106a2214200341a0056a41c4006a290200370300200341a8036a41186a2216200341a0056a41cc006a290200370300200341a8036a41206a2217200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210c200341a0056a41086a290300210b200341a0056a41306a2802002108200341cc056a280200210d200341a0056a41286a280200211820032903b005210420032903a005210520032802c4052102024020032802ac04450d00200a10390b20034180036a41086a200e290300220f37030020034180036a41106a2014290300221037030020034180036a41186a2016290300221137030020034180036a41206a220a2017280200360200200341c8046a41186a200c370300200341c8046a41306a2008360200200341c8046a41286a2018360200200341ec046a2002360200200320032903a803220c37038003200320043703d804200320053703c8042003200d3602f4042003200b3703d004200341c8046a41cc006a2011370200200341c8046a41c4006a2010370200200341c8046a413c6a200f370200200341c8046a41346a200c370200200341c8046a41d4006a200a280200360200200320013602e80420060d0102402002450d00200241186c450d00200110390b0240200841ffffffff0371450d00200d10390b410c210a41b4d6c800210d4104210e410321080c050b024020032802ac04450d00200a10390b410321080c020b024020064111490d0002402002450d00200241186c450d00200110390b0240200841ffffffff0371450d00200d10390b410e210a41dad4c800210d4112210e410321080c030b200341a8036a20034180056a220a108e0a200341a0056a20032802a803220220032802b00310fb080240024020032d00b0054102460d0020034180036a41086a2201200341a0056a41086a290300370300200320032903a00537038003024020032802ac03450d00200210390b200341d0036a41086a200128020036020020032003290380033703d0030c010b024020032802ac03450d00200210390b200342003702d40320034100280284ee4d3602d0030b200341083a00e00220032009200641246c6a36028c032003200936028803200320073602840320032009360280032003200341e0026a360294032003200341d0036a36029003200341a0056a20034180036a10900a024020032d00a0054101470d00412010382209450d18200920032900a105370000200941186a200341b9056a290000370000200941106a200341b1056a290000370000200941086a200341a9056a29000037000020034281808080103702ac04200320093602a804200341a8036a41106a20034180036a41106a290300370300200341a8036a41086a20034180036a41086a29030037030020032003290380033703a803200341a0056a200341a8036a10900a024020032d00a0050d00410121020c340b200341a0056a4101722101410221024120210741012106034002402002417f6a2006470d00200341a8046a20064101109e0220032802a80421090b200920076a22062001290000370000200641186a200141186a290000370000200641106a200141106a290000370000200641086a200141086a290000370000200320023602b004200341a0056a200341a8036a10900a20032d00a005450d34200741206a2107200241016a210220032802ac0421060c000b0b200328028c0320032802880322026b220141246d21074100210602402001450d00200741246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b4100280284ee4d210902402003280284032202450d00200241246c450d0020032802800310390b410021020c330b410221080b410d210a41e2d6c800210d4100210e2006450d010b200641246c2101200921020340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b4106210102402007450d00200741246c450d00200910390b0c300b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2206200341e1046a290000370300200320032900c9043703a8030240024020032d00c8044101460d0020034180046a41186a200629030037030020034180046a41106a200129030037030020034180046a41086a2002290300370300200320032903a80337038004200341a8046a20034180046a108f08200341a0056a20032802a804220920032802b004109008024020032802c0052201450d00200341a8036a41086a2208200341a0056a413c6a290200370300200341a8036a41106a220a200341a0056a41c4006a290200370300200341a8036a41186a220d200341a0056a41cc006a290200370300200341a8036a41206a220e200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210c200341a0056a41086a290300210b200341a0056a41306a2802002106200341cc056a2802002107200341a0056a41286a280200211420032903b005210420032903a005210520032802c4052102024020032802ac04450d00200910390b20034180036a41086a2008290300220f37030020034180036a41106a200a290300221037030020034180036a41186a200d290300221137030020034180036a41206a2209200e280200360200200341c8046a41186a200c370300200341c8046a41306a2006360200200341c8046a41286a2014360200200341ec046a2002360200200320032903a803220c37038003200320043703d804200320053703c804200320073602f4042003200b3703d004200341c8046a41cc006a2011370200200341c8046a41c4006a2010370200200341c8046a413c6a200f370200200341c8046a41346a200c370200200341c8046a41d4006a2009280200360200200320013602e804200341a0056a20034180056a2209108f0a20032802a005220820032802a80510e001024020032802a405450d00200810390b200341a0056a2009108e0a20032802a005220920032802a80510e001024020032802a405450d00200910390b02402002450d00200241186c450d00200110390b0240200641ffffffff0371450d00200710390b200041186a41003a000020004200370308200020032800e0023600192000411c6a200341e3026a280000360000200042003703000c370b024020032802ac04450d00200910390b41e2d6c800ad210c410321024280808080d001210b0c010b410221024200210b4200210c0b200041063b002120004200370308200041246a200b200c84370200200041206a20023a0000200041186a41003a0000200042013703000c340b20034180046a41206a200141216a2d00003a000020034180046a41186a200141196a29000037030020034180046a41106a200141116a29000037030020034180046a41086a200141096a2900003703002003200129000137038004200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341c8046a41096a290000370300200341a8036a41106a2201200341c8046a41116a290000370300200341a8036a41186a2206200341c8046a41196a290000370300200320032900c9043703a8030240024020032d00c8044101460d00200341a8046a41186a2006290300370300200341a8046a41106a2001290300370300200341a8046a41086a2002290300370300200320032903a8033703a804200341e0026a200341a8046a108f08200341a0056a20032802e002220920032802e802109008024020032802c0052201450d00200341a8036a41086a2208200341a0056a413c6a290200370300200341a8036a41106a220a200341a0056a41c4006a290200370300200341a8036a41186a220d200341a0056a41cc006a290200370300200341a8036a41206a220e200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a2214290300210c200341a0056a41086a2216290300210b200341a0056a41306a2802002106200341cc056a2802002107200341a0056a41286a280200211720032903b005210420032903a005210520032802c4052102024020032802e402450d00200910390b20034180036a41086a2008290300220f37030020034180036a41106a200a290300221037030020034180036a41186a200d290300221137030020034180036a41206a2209200e280200360200200341c8046a41186a200c370300200341c8046a41306a2006360200200341c8046a41286a2017360200200341ec046a2002360200200320032903a803220c37038003200320043703d804200320053703c804200320073602f4042003200b3703d004200341c8046a41cc006a2011370200200341c8046a41c4006a2010370200200341c8046a413c6a200f370200200341c8046a41346a200c370200200341c8046a41d4006a2009280200360200200320013602e804200341a0056a41206a20034180046a41206a2d00003a0000201420034180046a41186a290300370300200341a0056a41106a20034180046a41106a290300370300201620034180046a41086a29030037030020032003290380043703a00520034180036a20034180056a108a0a20032802880321082003280280032109200341a8036a200341a0056a108b0a2009200820032802a803220a20032802b00310e901024020032802ac03450d00200a10390b0240200328028403450d00200910390b02402002450d00200241186c450d00200110390b0240200641ffffffff0371450d00200710390b200041186a41003a000020004200370308200020032800d0033600192000411c6a200341d3036a280000360000200042003703000c360b024020032802e402450d00200910390b41e2d6c800ad210c410321024280808080d001210b0c010b410221024200210b4200210c0b200041246a200b200c84370200200041063b0021200041206a20023a0000200041186a41003a000020004200370308200042013703000c330b41022106200341d0026a41026a200141076a2d00003a0000200341e0026a41086a200141186a290200370300200341e0026a41106a200141206a2902003703002003200141056a2f00003b01d0022003200141106a2902003703e002200141046a2d00002107200141086a28020021092001410c6a2802002101200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2208200341d9046a290000370300200341a8036a41186a220a200341e1046a290000370300200320032900c9043703a8030240024020032d00c8044101460d00200341a8046a41186a200a290300370300200341a8046a41106a2008290300370300200341a8046a41086a2002290300370300200320032903a8033703a80420034180046a200341a8046a108e08200341a0056a2003280280042206200328028804108504024020032d00a00522084101470d00200341d0046a200341aa056a290100370300200341d8046a200341b2056a290100370300200341df046a200341b9056a290000370000200320032901a2053703c80420032d00a10521020b0240200328028404450d00200610390b41012106024020084101470d0020034180036a41186a200341df046a29000037000020034191036a200341d8046a29030037000020034189036a200341c8046a41086a290300370000200320032903c80437008103200320023a008003024002400240024020074107710e03000201020b200341bb036a200341e0026a41086a290300370000200341a8036a41186a200341ed026a290000370000200320032f01d0023b01a803200320013600af03200320093600ab03200320032903e0023700b3032003200341d2026a2d00003a00aa03200341a0056a200341a8036a108f0820032802a005220120032802a80510e3012102024020032802a405450d00200110390b4103210620020d01200341a8036a20034180036a412010d70b450d30200341a0056a200341a8046a108e0820032802a0052102200320032802a8053602cc04200320023602c804200341a8036a200341c8046a10da04024020032802a405450d00200210390b200341d0036a20034180036a108f08200341a0056a20032802d003220220032802d803220110900820032802c0052206450d022002200110e00120034180046a41186a2207200341a0056a41186a220929030037030020034180046a41106a2208200341a0056a41106a220129030037030020034180046a41086a220a200341a0056a41086a220d290300370300200341c8046a41086a220e200341cc056a2214290200370300200341c8046a41106a2216200341d4056a2217290200370300200341c8046a41186a2218200341dc056a2219290200370300200341c8046a41206a221a200341e4056a221b290200370300200341c8046a41286a221c200341ec056a221d290200370300200341f8046a221e200341f4056a221f280200360200200320032903a00537038004200320032902c4053703c804024020032802d403450d00200210390b200341c4056a20032903c8043702002009200729030037030020012008290300370300200d200a2903003703002014200e2903003702002017201629030037020020192018290300370200201b201a290300370200201d201c290300370200201f201e28020036020020032003290380043703a005200320063602c005200341f0036a200341a8036a108f0820032802f803210720032802f0032106200341003602d803200342013703d003200341d0036a41004120107720032802d00320032802d80322096a220220032903d805370000200241086a200341e0056a290300370000200241106a200341e8056a290300370000200241186a200341f0056a2903003700002003200941206a3602d8032003200341a0056a3602d802200341d8026a200341d0036a10df02200320013602d802200341d8026a200341d0036a10df0220032802c0052102200341d0036a200341a0056a41286a280200220110ac020240200141186c2201450d00200220016a21010340200320023602d802200341d8026a200341d0036a10df02200241106a200341d0036a10db02200241186a22022001470d000b0b200341cc056a200341d0036a10e0022006200720032802d003220220032802d80310e901024020032802d403450d00200210390b024020032802f403450d00200610390b024020032802c4052202450d00200241186c450d0020032802c00510390b200341d0056a28020041ffffffff0371450d3020032802cc0510390c300b2001450d00200910390b41c0d6c800ad210c410321024280808080d001210b0c030b20032802d403450d2d200210390c2d0b410321060b41dad6c800ad210c4101210242808080808001210b200741ff01714102470d002001450d002009103941dad6c800ad210c0b200041246a200b200c84370200200020023a0022200041063a0021200041206a20063a0000200041186a41003a000020004200370308200042013703000c320b200141046a2802002101200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c320b200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a41c0e0c900410e10cb01200320013602a005200341a8036a4120200341a0056a410410e901200041186a41003a000020004200370308200042003703000c310b200141046a2802002101200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c310b200341a8036a41f0c8c800410710cb01200341a8036a41186a22024200370300200342003703b803200341a8036a41106a220641c0e0c900410e10cb01200341306a200341a8036a412010ce032003280234210720032802302109200341a8036a41f0c8c800410710cb0120024200370300200342003703b803200641c0e0c900410e10cb0120032007410020091b20016a3602a005200341a8036a4120200341a0056a410410e901200041186a41003a000020004200370308200042003703000c300b20012d00012101200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb030d00200341a8036a41f0c8c800410710cb01200341a8036a41186a22024200370300200342003703b803200341a8036a41106a220641c0e0c900410e10cb01200341386a200341a8036a412010ce03200328023c210720032802382109200341a8036a41f0c8c800410710cb0120024200370300200342003703b803200641c0e0c900410e10cb0120032007410020091b220241e4006e20016c41ffc701200241e4007020016c220141e4006e200141ffc7014b1b200141e4007041324b6a41ff01716a20026a3602a005200341a8036a4120200341a0056a410410e901200041186a41003a000020004200370308200042003703000c300b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c2f0b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2f0b200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a41d8e7c900410810cb01200341a8036a4102108709200041186a41003a000020004200370308200042003703000c2e0b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2e0b200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a41d8e7c900410810cb01200341a8036a4101108709200041186a41003a000020004200370308200042003703000c2d0b2001410c6a2802002106200141086a2802002108200141046a280200210a200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb030d00200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a41f7c8c800410d10cb0120064105744104722202417f4c0d05200210382201450d0b200341003602a805200320023602a405200320013602a005200341a0056a200610ac020240024020060d0020032802a005210920032802a80521010c010b2006410574210720032802a8052101200a21020340024020032802a40520016b411f4b0d00200341a0056a20014120107720032802a80521010b20032802a005220920016a22062002290000370000200641086a200241086a290000370000200641106a200241106a290000370000200641186a200241186a2900003700002003200141206a22013602a805200241206a2102200741606a22070d000b0b200341a8036a41202009200110e901024020032802a405450d00200910390b0240200841ffffff3f71450d00200a10390b20004200370308200020032800c804360019200041186a41003a00002000411c6a200341cb046a280000360000200042003703000c2d0b0240200841ffffff3f71450d00200a10390b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c2c0b200141246a2802002106200341c8046a41186a200141196a290000370300200341c8046a41106a200141116a290000370300200341c8046a41086a200141096a290000370300200320012900013703c804200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a2209200241086a290200370300200320022902003703a005024002400240200341a0056a10cb03450d00410221024200210c4200210b0c010b200341a0056a200341c8046a2006108c0a20032d00a00522024108460d0120032d00a305210720032d00a205210620032d00a10521012009350200422086210b20032802a405ad210c0b200020073a0023200020063a0022200020013a002120004200370308200041246a200b200c84370200200041206a20023a0000200041186a41003a0000200042013703000c2c0b200341c8046a108d0a200041186a41003a000020004200370308200042003703000c2b0b200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb03450d0020004200370308200041186a41003a0000200041206a41023a0000200042013703000c2b0b200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a41d8e7c900410810cb01200341a8036a4103108709200041186a41003a000020004200370308200042003703000c2a0b41042106200141046a280200211c200141106a28020021092001410c6a280200211b200141086a280200211a2002280224210102400240024020022d00000e03000102010b20022d0001210220012001280200417f6a2207360200024020070d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22072007280200417f6a220736020020070d00200110390b200241ff0171450d01411010382202450d09200241cce0c00036020c200241013602082002428180808010370200411010382201450d09200141e4e0c00036020c20014101360208200142818080801037020020022002280200417f6a220636020020060d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22062006280200417f6a220636020020060d00200210390b20012001280200417f6a2202360200410221084200210c20020d202001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22022002280200417f6a220236020020020d20200110394200210b0c210b41032108024020090d0041b4d6c800ad210b4280808080c001210c0c210b200941016a2101201a2102024003402001417f6a22014102490d01200241046a210620022802002107200241046a210220072006280200490d000b41a1d5c800ad210b410d21064280808080a002210c0c210b200341a0056a201c10910a200341c8046a20032802a005220220032802a80510f6080240024020032802c80422190d004100211d2003410036028404200341002802e8c848221936028004410021180c010b20032902cc04210c20032019360280042003200c37028404200c422088a72118200ca7211d0b024020032802a405450d00200210390b02402009410274220a201a6a417c6a2802002018490d0002402018450d00201841d8006c2101201941306a210203400240200241746a2802002206450d00200641306c450d00200241706a28020010390b0240200228020041ffffff3f71450d002002417c6a28020010390b200241d8006a2102200141a87f6a22010d000b0b0240201d450d00201d41d8006c450d00201910390b4195d6c800ad210b4106210642808080809002210c0c210b201841d8006c210641002101417f2109201a21070340201820016a220d20012007280200220e6a22024d0d052019200241d8006c6a220228022c211620022802202117200241306a2802002114200241246a28020021082002200241d8006a200d2009200e6b6a41d8006c10d50b1a02402008450d00200841306c450d00201710390b0240201441ffffff3f71450d00201610390b200741046a2107200941016a21092001417f6a2101200641a87f6a2106200a417c6a220a450d1f0c000b0b200141246a2802002106200341e0026a41186a2207200141196a290000370300200341e0026a41106a2209200141116a290000370300200341e0026a41086a2208200141096a290000370300200320012900013703e002200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc0320032d00c8044101460d15200341a8046a41186a2007290300370300200341a8046a41106a2009290300370300200341a8046a41086a2008290300370300200320032903e0023703a804200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a22024180e3c900410a10cb01200341b8026a200341a8036a412010ce0320032802b802450d1420032802bc022101200341a8036a41f0c8c800410710cb01200241086a420037000020024200370000200241ecdfc900410c10cb01200341b0026a200341a8036a412010ce03200620014b0d1420064100200120032802b40241d40020032802b0021b6b2202200220014b1b2208490d14200341a0056a200610d30820034198026a20032802a005220120032802a80510c107200341a8026a290300210420032903a00221102003280298022102024020032802a405450d00200110390b2002450d14200341c8046a200341a8046a108e08200341a0056a20032802c804220920032802d0041085040240024020032d00a00522074101460d000c010b200320032800a4053600ab03200320032800a1053602a8032003200341b9056a280000360280032003200341bc056a28000036008303200341c0056a2d00002101200341b8056a2d00002102200341b0056a290300210b200341a8056a290300210c0b024020032802cc04450d00200910390b0240024020074101472207450d00410321014100210242889bffce02210b4201210c0c010b200320032800ab033600a305200320032802a8033602a00520032003280280033602c80420032003280083033600cb040b200320032802a0053602d003200320032800a3053600d303200320032802c8043602f003200320032800cb043600f30320070d132003419b046a20032800f303360000200320032800d30336008304200320032802d00336028004200320023a0097042003200b37008f042003200c37008704200320032802f00336029804200320013a009f04200341d0036a20034180046a108f08200341a0056a20032802d003220220032802d80310900820032802c0052201450d18200341a8036a41086a2207200341a0056a413c6a290200370300200341a8036a41106a2209200341a0056a41c4006a290200370300200341a8036a41186a220a200341a0056a41cc006a290200370300200341a8036a41206a220d200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210c200341a0056a41086a290300210b200341a0056a41306a280200210e200341cc056a2802002114200341a0056a41286a280200211620032903b005210520032903a005210f20032802c4052117024020032802d403450d00200210390b20034180036a41086a2007290300221137030020034180036a41106a2009290300221237030020034180036a41186a200a290300221337030020034180036a41206a2202200d280200360200200341c8046a41186a200c370300200341c8046a41306a200e360200200341c8046a41286a2016360200200341ec046a2017360200200320032903a803220c37038003200320053703d8042003200f3703c804200320143602f4042003200b3703d004200341c8046a41cc006a2013370200200341c8046a41c4006a2012370200200341c8046a413c6a2011370200200341c8046a41346a2207200c370200200341c8046a41d4006a2002280200360200200320013602e804410021024100210e02402007280200220d450d00410021164100210e410021010240034002400240200e450d00201420014102746a21072014200120166a4102746a2109034020082007280200220a4b0d022009200a360200200741046a2107200941046a2109200d200141016a22014b0d000c040b0b201420014102746a21070340200820072802004b0d01200741046a2107200d200141016a22014b0d000b4100210e0c030b2016417f6a2116200e41016a210e200d200141016a22014b0d000b0b0240200e0d004100210e0c010b20142001200e6b4102746a201420014102746a200d20016b41027410d50b1a0b2003200d200e6b220a3602fc0420032802f40421080240024002400240200a450d0041002102200a2107200a210103400240024020062008200741017620026a22074102746a28020022094d0d00200741016a21020c010b2007210120062009460d030b200120026b2107200120024b0d000b200a2002490d050b0240200a20032802f804470d00200341f4046a200a410110ab0120032802f40421080b200820024102746a220141046a2001200a20026b41027410d50b1a200120063602002003200a41016a3602fc04200341a8036a200620034180056a220d10920a200341a0056a20032802a803220220032802b00310db080240024020032802c00522160d004100211441002802e8c84821164200210b4100211a42002111420021054200210f0c010b200341b8056a2903002111200341a8056a290300210f200341c8056a280200211a20032903b005210b20032903a005210520032802c40521140b024020032802ac03450d00200210390b200341a0056a20034180046a108f0820032802a005220220032802a805200341c8046a109208024020032802a405450d00200210390b200341a8036a41f0c8c800410710cb0120034180036a4184c9c800411010cb01200320063602ac102003200341ac106a410410cc013703e003200341ac056a200341ac106a41046a3602002003200341e8036a3602a4052003200341ac106a3602a8052003200341e0036a3602a005200341f0036a200341a0056a10830120032802f803220941206a2202417f4c0d030240024020020d00410121010c010b200210382201450d0a0b41002107200341003602e803200320013602e003200320023602e40302402002410f4b0d00200341e0036a41004110107720032802e403210220032802e003210120032802e80321070b200120076a220820032900a803370000200841086a200341a8036a41086a2900003700002003200741106a22073602e8030240200220076b410f4b0d00200341e0036a20074110107720032802e403210220032802e003210120032802e80321070b200120076a2208200329028003370000200841086a20034180036a41086a2902003700002003200741106a22073602e80320032802f00321080240200220076b20094f0d00200341e0036a20072009107720032802e003210120032802e80321070b200120076a2008200910d40b1a2003200720096a22023602e803024020032802f403450d0020032802f00310390b200341a0056a20032802e0032201200210ef08410121020240024020032802a0054101460d00200341d8036a420037030041002108200341003602d003410021190c010b200341d8036a200341ac056a290200220c370300200320032902a40522123703d0032012a72119200ca722084521020b024020032802e403450d00200110390b200341d0036a41047221170240024020020d0020032802d403210e034020082f01322218410574210a4100210241042107417f21010240024003400240200a2002470d00201821010c020b200d200820026a41346a412010d70b2209450d02200141016a2101200741046a2107200241206a21022009417f4a0d000b0b200e450d02200e417f6a210e200820014102746a4194036a28020021080c010b0b200820076a28020022010d010b2017109907420021042014450d02201441306c450d02201610390c020b20194101201941014b1b2202418094ebdc036e2002418094ebdc03704100476a22074101200741014b1b220720024b0d0520034180026a20102004428094ebdc03420010d20b200341f0016a20102004428094ebdc03420010da0b200341e0016a20032903f001200341f0016a41086a2903002002200120022001491b20076ead428094ebdc037e200220076ead8042ffffffff0f83220c420010d30b200341a0056a2006200341a8046a10930a20034190026a20032802a005220120032802a80510f008200341e0016a41086a29030020032903e0012204200c2003290380027e220c428094ebdc0380a7200c428094ebdc03824280cab5ee01566aad7c220c200454ad7c2104410020032802900220032d0094024102461b2102024020032802a405450d00200110390b200341b8016a200c2004428094ebdc03420010d20b200341a8016a200c2004428094ebdc03420010da0b20034198016a20032903a801200341a8016a41086a2903002002ad2210420010d30b20034188016a200c2003290398012212417f20032903b80120107e2210428094ebdc0380a7201042ffffffffffbfb2cd3b561b2010428094ebdc03824280cab5ee01566aad7c22137d2210200420034198016a41086a2903002013201254ad7c22157d200c201354ad7d220c428094ebdc03420010d20b200341f8006a2010200c428094ebdc03420010da0b200b20112005200f10a7062102200341e8006a20032903782210200341f8006a41086a29030022112002ad220c420010d30b200341c8016a200d2003290368220b417f2003290388012212200c7e220c428094ebdc0380a7200c42ffffffffffbfb2cd3b561b200c428094ebdc03824280cab5ee01566aad7c220c20137c2204200341e8006a41086a290300200c200b54ad7c20157c2004200c54ad7c10940a200341d8016a290300210c20032903d001210b20032903c8012204a74101470d02200341d8056a200c370300200341d0056a200b370300200341a9056a200329038005370000200341a8056a41013a0000200341c1056a20034198056a290300370000200341b9056a20034190056a290300370000200341b1056a20034188056a290300370000200341033a00a005200341a0056a10c9030c190b420121040b024020032802ec042202450d00200241186c450d0020032802e80410390b4201210c4193d5c8002107024020032802f80441ffffffff0371450d0020032802f40410390b410e2109410e21060c1a0b20044201510d160c170b1034000b2002200a1041000b41f0f0c20041194188f2c2001035000b2002200d1044000b410221014200210c0c220b2001410c6a2802002106200141086a2802002109200141046a2802002107200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2208200341e1046a290000370300200320032900c9043703a80320032d00c8044101460d01200341a8046a41186a2008290300370300200341a8046a41106a2001290300370300200341a8046a41086a2002290300370300200320032903a8033703a80420034180046a200341a8046a108f08200341a0056a20032802800422022003280288041090080240024020032802c0052201450d00200341a8036a41086a2208200341a0056a413c6a290200370300200341a8036a41106a220a200341a0056a41c4006a290200370300200341a8036a41186a220d200341a0056a41cc006a290200370300200341a8036a41206a220e200341a0056a41d4006a2802003602002003200341a0056a41346a2902003703a803200341a0056a41186a290300210c200341a0056a41086a290300210b200341a0056a41306a2802002114200341cc056a2802002116200341a0056a41286a280200211720032903b005210420032903a005210520032802c40521180240200328028404450d00200210390b20034180036a41086a2008290300220f37030020034180036a41106a200a290300221037030020034180036a41186a200d290300221137030020034180036a41206a2202200e280200360200200341c8046a41186a200c370300200341c8046a41306a2014360200200341c8046a41286a2017360200200341c8046a41246a2018360200200320032903a803220c37038003200320043703d804200320053703c804200320163602f4042003200b3703d004200341c8046a41cc006a2011370200200341c8046a41c4006a2010370200200341c8046a413c6a200f370200200341c8046a41346a200c370200200341c8046a41d4006a2002280200360200200320013602e8042007200641246c22026a210120020d0141002108200721020c070b0240200328028404450d00200210390b410321080c030b200741246a2102024020072d0000220a4105470d00410021080c060b200728020821142007280204211602400240200a450d0041012108200a4102470d012014450d01201610390c010b200341d2036a200741036a2d00003a0000200341a8056a200741146a290000370300200341ad056a200741196a290000370000200320072f00013b01d0032003200729000c3703a005410021080b20034180046a410d6a220d200341a0056a410d6a29000037000020034180046a41086a220e200341a0056a41086a290300370300200341e0036a41026a2217200341d0036a41026a2d00003a0000200341a8036a41086a2218200e290300370300200341a8036a410d6a220e200d290000370000200320032f01d0033b01e003200320032903a0053703a803200a0d05200341d8026a41026a20172d00003a000020034180036a41086a201829030037030020034180036a410d6a200e290000370000200320032f01e0033b01d802200320032903a8033703800341201038220a450d00200a20032f01d8023b0000200a2014360007200a2016360003200a20032903800337000b200a41026a200341d8026a41026a2d00003a0000200a41136a20034188036a290300370000200a41186a2003418d036a29000037000020034281808080103702e4022003200a3602e002024020012002470d00200121020c050b200741c8006a210e20072d0024220d4105460d03200728022c21172007280228211802400240200d450d0041012108200d4102470d012017450d01201810390c010b200341d2036a200241036a2d00003a0000200341a8056a200741386a290000370300200341ad056a2007413d6a290000370000200320022f00013b01d003200320072900303703a00520182116201721140b20034180046a410d6a221a200341a0056a410d6a222029000037000020034180046a41086a221b200341a0056a41086a2221290300370300200341e0036a41026a221c200341d0036a41026a22222d00003a0000200341a8036a41086a221d201b290300370300200341a8036a410d6a221e201a290000370000200320032f01d0033b01e003200320032903a0053703a803200d0d03200341d8026a41026a221f201c2d00003a000020034180036a41086a2223201d29030037030020034180036a410d6a2224201e290000370000200320032f01e0033b01d802200320032903a80337038003200741ec006a2102200641246c41b87f6a2118412b2119410221174101210d034002402017417f6a200d470d00200341e0026a200d4101109e0220032802e002210a0b200a20196a220d417c6a2014360000200d41786a2016360000200d41756a222520032f01d8023b0000202541026a201f2d00003a0000200d200329038003370000200d41086a2023290300370000200d410d6a2024290000370000200320173602e802024020180d00200121020c060b200e2d0000220d4105460d05200e41086a2802002125200e41046a280200212602400240200d450d0041012108200d4102470d012025450d01202610390c010b20222002415d6a221641026a2d00003a00002021200241686a221441086a29000037030020202014410d6a290000370000200320162f00003b01d003200320142900003703a00520262116202521140b200e41246a210e201a2020290000370000201b2021290300370300201c20222d00003a0000201d201b290300370300201e201a290000370000200320032f01d0033b01e003200320032903a0053703a803200d0d04201f201c2d00003a00002023201d2903003703002024201e290000370000200320032f01e0033b01d802200320032903a80337038003201741016a2117201941206a21192018415c6a2118200241246a210220032802e402210d0c000b0b1032000b410221080b02402006450d00200641246c2101200721020340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b2009450d04200941246c450d04200710390c040b200e21020b024020012002460d002007200641246c6a210603402002220141246a2102024020012d00004102470d00200141086a280200450d00200141046a28020010390b20062002470d000b0b02402009450d00200941246c450d00200710390b20032902e402210c20032802e00221230c010b024020012002460d002007200641246c6a210603402002220141246a2102024020012d00004102470d00200141086a280200450d00200141046a28020010390b20062002470d000b0b4100280284ee4d21234200210c2009450d00200941246c450d00200710390b02400240200841ff0171450d00200c42ffffff3f83500d01202310390c010b20230d020b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b410121080b200041063b002120004200370308200041206a20083a0000200041186a41003a0000200041246a41e2d6c800ad4280808080d001843702004201210c0c010b0240200c422088a74105742202450d00202320026a211d200341b1056a210e200341c9056a211e200341a9056a211f20034180056a2109202321060340200341a8036a41186a200641186a2202290000370300200341a8036a41106a200641106a2201290000370300200341a8036a41086a200641086a2208290000370300200320062900003703a80320034180046a41186a221a200229000037030020034180046a41106a221b200129000037030020034180046a41086a221c2008290000370300200320062900003703800420034180036a20034180046a108e0a200341a0056a2003280280032214200328028803221710fb080240024020032d00b005220d4102460d00200341e0026a41026a200e41026a2d00003a00002003200e2f00003b01e00220032802ac05211920032802a405211820032802a0052107024020032802a80522160d00410021160c020b201641057441606a41057641016a210a410021024100210102400340200720026a22082009412010d70b450d01200241206a2102200a200141016a2201470d000c030b0b20072016417f6a22164105746a2202290000210b2002290008210420022900102105200841186a200241186a29000037000020082005370010200820043700082008200b370000201f41186a201a290300370000201f41106a201b290300370000201f200329038004370000201e2009290000370000201e41106a200941106a290000370000201e41186a200941186a290000370000200341083a00a805201f41086a201c290300370000201e41086a200941086a290000370000200341033a00a005200341a0056a10c9030c010b4102210d0b200e20032f01e0023b0000200e41026a200341e0026a41026a2d00003a0000200320193602ac05200320163602a805200320183602a405200320073602a0052003200d3a00b00502400240200d4102470d002014201710e0010c010b20142017200341a0056a108609200d4102460d00201841ffffff3f71450d00200710390b200641206a21060240200328028403450d00201410390b2006201d470d000b0b0240200c42ffffff3f83500d00202310390b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200041186a41003a00004200210c20004200370308200020032800a0053600192000411c6a200341a3056a2800003600000b2000200c3703000c180b200141246a280200210720022802242102200341c8046a41186a200141196a290000370300200341c8046a41106a200141116a290000370300200341d0046a200141096a290000370300200320012900013703c80420034180046a200341c8046a10df03200341a0056a200328028004220620032802880410e003200341a0056a41106a290300420020032903a00542015122011b210c20032903a805420020011b210b200341c0056a290300420020011b2104200341a0056a41186a290300420020011b21050240200328028404450d00200610390b02400240427f200b20057c22052005200b542201200c20047c2001ad7c220b200c54200b200c511b22011b4280c8afa02585427f200b20011b844200510d004280808080c001210c41dfd5c8002106410a210741062109410321010c010b200341a0056a200341c8046a2007108c0a024020032d00a00522014108470d00200341c8046a108d0a20022002280200417f6a2201360200024020010d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a22012001280200417f6a220136020020010d00200210390b20004200370308200020032800a803360019200041186a41003a00002000411c6a200341ab036a280000360000200042003703000c190b20032802a405210620032d00a305210820032d00a205210720032d00a1052109200341a0056a41086a350200422086210c0b20022002280200417f6a220a3602000240200a0d002002280208200228020c2802001102000240200228020c280204450d00200228020810390b200241046a220a200a280200417f6a220a360200200a0d00200210390b200020083a0023200020073a0022200020093a002120004200370308200041206a20013a0000200041186a41003a0000200041246a200c2006ad84370200200042013703000c170b200141046a2802002106200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a0050240200341a0056a10cb030d00200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370000200342003700b803200341a8036a41106a22074180e3c900410a10cb01200341c8026a200341a8036a412010ce03024020032802c8024101470d0020032802cc022101200341a8036a41f0c8c800410710cb01200741086a2209420037000020074200370000200741ecdfc900410c10cb01200341c0026a200341a8036a412010ce0302404100200120032802c40241d40020032802c0021b22086b2202200220014b1b22024100200120066b220a200a20014b1b4f0d002001200820012008491b2001200620012006491b6b21010340200210950a200241016a21022001417f6a22010d000b0b200341a8036a41f0c8c800410710cb012009420037000020074200370000200741ecdfc900410c10cb01200320063602a005200341a8036a4120200341a0056a410410e9010b20004200370308200020032800c804360019200041186a41003a00002000411c6a200341cb046a280000360000200042003703000c170b20004200370308200041186a41003a0000200041206a41023a0000200042013703000c160b200141106a2903002104200141086a2903002110200341a0056a41206a200241206a290200370300200341a0056a41186a200241186a290200370300200341a0056a41106a200241106a290200370300200341a0056a41086a200241086a290200370300200320022902003703a005200341c8046a200341a0056a10cc03200341a8036a41086a2202200341d1046a290000370300200341a8036a41106a2201200341d9046a290000370300200341a8036a41186a2206200341e1046a290000370300200320032900c9043703a803024002400240024020032d00c8044101460d00200341a8046a41186a2006290300370300200341a8046a41106a2001290300370300200341a8046a41086a2002290300370300200320032903a8033703a804200341c8046a200341a8046a108f08200341a0056a20032802c804220220032802d00410900820032802c0052207450d02200341a8036a41086a2206200341dc056a290200370300200341a8036a41106a220a200341e4056a290200370300200341a8036a41186a220d200341ec056a290200370300200341a8036a41206a220e200341f4056a2802003602002003200341d4056a2902003703a803200341a0056a41186a2903002111200341a0056a41086a2903002127200341d0056a2802002108200341cc056a2802002114200341c8056a280200210120032903b005210520032903a005212820032802c4052109024020032802cc04450d00200210390b20034180036a41106a200a290300220c37030020034180046a41086a200629030037030020034180046a41106a200c37030020034180046a41186a200d29030037030020034180046a41206a200e280200360200200320032903a8033703800402402001450d00200341c8046a41206a20034180046a41206a280200360200200341c8046a41186a20034180046a41186a290300370300200341c8046a41106a20034180046a41106a290300370300200341c8046a41086a20034180046a41086a29030037030020032003290380043703c804200141186c20076a41686a2102420021124200211302400340024020010d002005210f410021010c020b02402002290300220f20127c220c201058200241086a290300221520137c200c200f54ad7c220b200458200b20045122061b0d002002200f201020127d220c7d37030020022015200420137d2010201254ad7d220b7d200f200c54ad7d3703082011200b7c2005200c7c220f200554ad7c21110c020b2001417f6a2101201120157c2005200f7c220f200554ad7c2111200241686a2102200f2105200c2112200b2113200c201054200b20045420061b0d000b0b200341d0056a2008360200200341c8056a2001360200200341c4056a2009360200200341d4056a20032903c8043702002003200f3703b005200341a0056a41186a2011370300200341dc056a200341d0046a290300370200200341e4056a200341d8046a290300370200200341ec056a200341c8046a41186a290300370200200341f4056a200341e8046a280200360200200320283703a005200320143602cc05200320073602c005200320273703a805200f4280c8afa0255441002011501b450d0202402009450d00200941186c450d002007103920032802d00521080b0240200841ffffffff0371450d0020032802cc0510390b411121024184d6c800210141072106410321070c040b02402009450d00200941186c450d00200710390b410d210241ebd5c8002101410921060240200841ffffffff0371450d00201410390b410321070c030b410221070c020b42f3e885db96cddbb320200341d8056a20282027411f109108200341c8046a200341a8046a108f0820032802c804220220032802d004200341a0056a109208024020032802cc04450d00200210390b20033502c80542d086037e210c024020032802c4052202450d00200241186c450d0020032802c00510390b200c4280f3e893017c210c024020032802d00541ffffffff0371450d0020032802cc0510390b200041186a41003a0000200041106a200c37030020004201370308200020032800d0033600192000411c6a200341d3036a280000360000200042003703000c170b024020032802cc04450d00200210390b410d210241e2d6c800210141002106410321070b200320032800e0023602d0032003200341e3026a2800003600d303200041186a41003a000020004200370308200020032802d0033600192000411c6a20032800d303360000200041286a2002360200200041246a2001360200200020063a0022200041063a0021200041206a20073a0000200042013703000c150b200320032800f3033600db02200320032802f0033602d802420121044101210641dad6c8002107410821090c060b4201210c42889bffce02210b4100210241032101410b210641cdd5c8002107411221090c060b4200210c41002102410221010c050b200b200c10e3040b02400240201a0d00410021070c010b2016201a41306c6a2109200341a9056a210641002107200341d8056a210d201621020340200341c0006a201020112002290300200241086a2903002005200f10a706ad220c420010d30b200341d0006a200241106a22012003290340220b417f2012200c7e220c428094ebdc0380a7200c42ffffffffffbfb2cd3b561b200c428094ebdc03824280cab5ee01566aad7c220c200341c0006a41086a290300200c200b54ad7c10940a200341d0006a41106a290300210b2003290358210c0240024020032903502204a74101460d0020044201520d01200c200b10e3040c010b200341a8036a41186a200241286a2208290000370300200341a8036a41106a200241206a220a290000370300200341a8036a41086a200241186a2202290000370300200320012900003703a8032001290000210420022900002113200a290000211520034180036a41186a2202200829000037030020034180036a41106a2208201537030020034180036a41086a220a20133703002003200437038003200d200b370300200641186a2002290300370000200641106a2008290300370000200641086a200a29030037000020062003290380033700002003200c3703d005200341033a00a005200341013a00a805200341a0056a10c903200c200b10e304200741016a21070b200141206a22022009470d000b0b20171099072007ad220c42c0b2cd3b7e210b200c42e0b2e11c7e210402402014450d00201441306c450d00201610390b2004200b7c210b200c4280c6868f017e210c024020032802ec042202450d00200241186c450d0020032802e80410390b200b200c7c210c024020032802f80441ffffffff0371450d0020032802f40410390b200c42889bffce027c210b410021024201210c0c040b024020032802d403450d00200210390b420121044200210c4100210641e2d6c8002107410d21090b42889bffce02210b41002102410321010b2004500d010b200320032800db023600d302200320032802d8023602d002200041186a20023a0000200041106a200b3703002000200c370308200020032802d0023600192000411c6a20032800d302360000200041286a2009360200200041246a2007360200200020063a0022200041063a0021200041206a20013a0000200042013703000c0c0b200320032800db023600d302200320032802d8023602d002200041186a20023a0000200041106a200b3703002000200c370308200020032802d0023600192000411c6a20032800d302360000200042003703000c0b0b2003201820016a2202360288040240201b41ffffffff0371450d00201a10390b200341a0056a201c10910a20032802a005220120032802a80520034180046a108809024020032802a405450d00200110390b02402002450d00201941306a210203400240200241746a2802002201450d00200141306c450d00200241706a28020010390b0240200228020041ffffff3f71450d002002417c6a28020010390b200241d8006a2102200641a87f6a22060d000b0b0240201d450d00201d41d8006c450d00201910390b20004200370308200020032800a803360019200041186a41003a00002000411c6a200341ab036a280000360000200042003703000c0a0b4200210b0b0240201b41ffffffff0371450d00201a10390b200020063a0022200041063a002120004200370308200041246a200c200b84370200200041206a20083a0000200041186a41003a0000200042013703000c080b200041186a41003a000020004200370308200020032800e0033600192000411c6a200341e3036a280000360000200042003703000c070b20032802b40320032802b00322016b220641246d210702402006450d00200741246c21060340024020012d00004102470d00200141086a280200450d00200141046a28020010390b200141246a21012006415c6a22060d000b0b024020032802ac032201450d00200141246c450d0020032802a80310390b20032802ac0421060b024020032d00e00222084108460d00200341e0026a41086a280200210a20032802e402210d20032d00e302210220032d00e202210e20032d00e10221010240200641ffffff3f71450d00200910390b024020032802d40341ffffff3f71450d0020032802d00310390b024020032802ec042206450d00200641186c450d0020032802e80410390b20032802f80441ffffffff0371450d0120032802f40410390c010b200341a8036a41f0c8c800410710cb01200341a8036a41186a4200370300200342003703b803200341a8036a41106a4180e3c900410a10cb01200341286a200341a8036a412010ce03200320023602a805200320063602a405200341003a00b0052003200328022c410020032802281b3602ac05200320093a00a005200320094118763a00a305200320094110763a00a205200320094108763a00a105200341a8036a200a108f0a20032802a803220220032802b00310e001024020032802ac03450d00200210390b200341a8036a200a108e0a20032802a803220220032802b003200341a0056a108609024020032802ac03450d00200210390b0240200641ffffff3f71450d0020032802a00510390b024020032802d40341ffffff3f71450d0020032802d00310390b024020032802ec042202450d00200241186c450d0020032802e80410390b024020032802f80441ffffffff0371450d0020032802f40410390b200041186a41003a000020004200370308200020032800f0033600192000411c6a200341f3036a280000360000200042003703000c050b200020023a00232000200e3a0022200020013a002120004200370308200041206a20083a0000200041186a41003a0000200041246a200aad422086200dad84370200200042013703000c040b200041063b002120004200370308200041246a200b200c84370200200041206a20023a0000200041186a41003a0000200042013703000c030b2001ad210b410321010b200020023a0022200041063a002120004200370308200041206a20013a0000200041186a41003a0000200041246a200c4280808080f00183200b84370200200042013703000c010b200020023a0022200041063a002120004200370308200041206a20013a0000200041186a41003a0000200041246a200c4280808080f003832006ad84370200200042013703000b200341b0106a24000b850201037f230041d0006b220124002001412036020420012000360200200141086a2000412010e40102400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0041002100024020022d00000e020200010b410121000c010b2001420037021c20014100280284ee4d3602182001410d36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141949fc5003602382001200141286a360248200141346a41b4dfc400200141386a103b1a2001280218200128022010d1010240200128021c450d00200128021810390b410221000b2003450d00200210390b200141d0006a240020000b9f1503067f017e1c7f23004190026b22012400200141206a4200370300200141186a22024200370300200141086a41086a420037030020014200370308200141086a41e9e5c000410a10cb01200241a088c800410610cb012001412036022c2001200141086a360228200141306a200141086a412010e4010240024002400240200128023022030d00410021040c010b200128023421052001200141306a41086a280200360244200120033602402001200141c0006a10c1010240024020012802000d0020012802042206200128024441c4006e2202200220064b1bad42c4007e2207422088a70d032007a72202417f4c0d030240024020020d00410421040c010b200210382204450d050b4100210820014100360258200120043602502001200241c4006e36025402402006450d00200141e8016a4104722109200141e8016a41196a210a200141fa016a210b200141f3016a210c200141c8006a41046a210d20014185026a210e2001280244210f02400240024002400340200f450d042001200f417f6a2210360244024002400240200128024022112d00000e020001070b20104104490d062001200f417b6a220f3602442001201141056a36024020112800012112410021110c010b41002102034020102002460d04200920026a201120026a221341016a2d00003a00002001200241016a22043602e8012001201341026a3602402004210220044120470d000b20012004417f73200f6a360244200d41026a200e41026a2d00003a0000200d200e2f00003b0000200141d4016a41026a2214200c41026a22152d00003a000020012001280081022202360248200120092f01003b01d8012001200941026a22162d00003a00da012001200c2f00003b01d40120012800ef01211220012801f601211720012800fd0121182001280288022119200141d0016a41026a221a200b41026a221b2d00003a0000200120023602c8012001200b2f00003b01d0012001200128004b3600cb0120102004460d042001200f20046b417e6a22023602442001201120046a221c41026a360240024002400240201c41016a2d00000e020100070b41002102200141003602e801200f417e6a21112004200f6b41026a210f0340200f20026a450d05200920026a201c20026a221041026a2d00003a00002001200241016a22133602e8012001201041036a3602402011417f6a21112013210220134120470d000b200141e4016a41026a20152d00003a0000200141e0016a41026a201b2d00003a00002001201120046b220f360244200120092f01003b01482001200c2f00003b01e4012001200b2f00003b01e001200120162d00003a004a20012800ef01211d20012801f601211e20012800fd01211f20012802840221202001280288022121200141dc016a41026a200a41026a2d00003a00002001200a2f00003b01dc01410121220c010b410021222002210f0b200141b0016a41026a20012d004a3a0000200141ac016a41026a200141e4016a41026a2d00003a0000200141a8016a41026a200141e0016a41026a2d00003a0000200141a4016a41026a200141dc016a41026a2d00003a0000200120012f01483b01b001200120012f01e4013b01ac01200120012f01e0013b01a801200120012f01dc013b01a401200141c4016a41026a20012d00da013a0000200120012f01d8013b01c401200120142d00003a00c201200120012f01d4013b01c001200141bc016a41026a201a2d00003a0000200120012f01d0013b01bc01200120012800cb013600b701200120012802c8013602b401410121110b200841016a21082001419c016a41026a220220012d00c2013a0000200141a0016a41026a2204200141c4016a41026a2d00003a000020014198016a41026a2213200141bc016a41026a2d00003a00002001418c016a41026a2210200141b0016a41026a2d00003a0000200120012f01c4013b01a001200120012f01c0013b019c01200120012f01bc013b019801200120012802b40136029001200120012800b70136009301200120012f01b0013b018c0120014188016a41026a221c200141ac016a41026a2d00003a000020014184016a41026a2214200141a8016a41026a2d00003a000020014180016a41026a221a200141a4016a41026a2d00003a0000200120012f01ac013b018801200120012f01a8013b018401200120012f01a4013b018001200141fc006a41026a221520042d00003a0000200120012f01a0013b017c200141f8006a41026a221620022d00003a0000200120012f019c013b0178200141f4006a41026a221b20132d00003a0000200120012f0198013b0174200120012800930136006f200120012802900136026c200141e8006a41026a222320102d00003a0000200120012f018c013b0168200141e4006a41026a2210201c2d00003a0000200120012f0188013b0164200141e0006a41026a221c20142d00003a0000200120012f0184013b0160200141dc006a41026a2214201a2d00003a0000200120012f0180013b015c0240200128025822132001280254470d00200141d0006a2013108903200128025821130b20012802502204201341c4006c6a220220113a0000200220012f017c3b000120022012360004200220012f01783b00082002201736000b200220012f01743b000f200220183600122002200128026c360016200241036a20152d00003a00002002410a6a20162d00003a0000200241116a201b2d00003a0000200241196a200128006f360000200220223a00212002201936001d2002201d3600252002201e36002c2002201f360033200220012f01683b0022200241246a20232d00003a0000200220012f01643b00292002412b6a20102d00003a0000200220012f01603b0030200241326a201c2d00003a0000200220012f015c3b0037200241396a20142d00003a00002002202136003e2002202036003a2001201341016a36025820082006470d000b200129025421070c060b200141003602440c010b200141003602440b2001419c016a41026a20012d00c2013a0000200141a0016a41026a200141c4016a41026a2d00003a000020014198016a41026a200141bc016a41026a2d00003a0000200120012f01c4013b01a001200120012f01c0013b019c01200120012f01bc013b019801200120012800b70136009301200120012802b401360290012001418c016a41026a200141b0016a41026a2d00003a000020014188016a41026a200141ac016a41026a2d00003a000020014184016a41026a200141a8016a41026a2d00003a000020014180016a41026a200141a4016a41026a2d00003a0000200120012f01b0013b018c01200120012f01ac013b018801200120012f01a8013b018401200120012f01a4013b0180010b024020012802542202450d00200241c4006c450d00200128025010390b0c010b2001290254210720040d010b200142003702544100210420014100280284ee4d3602502001410d36024c2001200141286a3602482001200141d0006a3602c801200141fc016a4101360200200142013702ec01200141949fc5003602e8012001200141c8006a3602f801200141c8016a41b4dfc400200141e8016a103b1a2001280250200128025810d1012001280254450d00200128025010390b2005450d00200310390b0240024020040d0020004200370204200041002802d8974e3602000c010b20002007370204200020043602000b20014190026a24000f0b1034000b1032000b7201017f230041106b220224002002410036020820024201370300200141106a200210b5022001200210db02200141306a200210b502200141d0006a200210b502200141046a200210dc022000200228020022012002280208109f0102402002280204450d00200110390b200241106a24000be60301067f230041d0006b22022400200241086a41c7e5c000410610cb01200241186a41c080c400410910cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be40702117f047e23004190016b22012400200141206a41f0c8c800410710cb01200141386a420037000020014200370030200141206a41106a41bce3c900410910cb01200141e0006a200141206a10e80602400240024020012903604202510d002000280208210220002802042103200028020021042001200141e0006a41106a28020010ef09200141e0006a2001280200200128020810ef080240024020012802604101460d00200141186a4200370300200141003602100c010b200141186a200141ec006a290200370300200120012902643703100b02402002450d002004200241246c6a2105200141e0006a41106a2106200141106a410472210720042108034020082802202109200141206a41186a200841186a2200290000370300200141206a41106a200841106a2202290000370300200141206a41086a200841086a220a29000037030020012008290000370320200141e0006a41186a220b200029000037030020062002290000370300200141e0006a41086a220c200a29000037030020012008290000370360024002402001280218220d450d002001280214210e0c010b4194031038220d450d044100210e200d4100360200200d41003b01322001200d360218200141003602140b200841246a2108024002400340200d2f0132220f410574211041002100417c210a417f210202400340024020102000470d00200f21020c020b200141e0006a200d20006a41346a412010d70b2211450d03200241016a2102200a417c6a210a200041206a21002011417f4a0d000b0b0240200e450d00200e417f6a210e200d20024102746a4194036a280200210d0c010b0b200141c0006a41186a200b2903002212370300200141c0006a41106a20062903002213370300200141c0006a41086a200c290300221437030020012001290360221537034020062015370200200641086a2014370200200641106a2013370200200641186a20123702002001200736026c200120023602682001200d36026420014100360260200141e0006a410010ba0721000c010b200d200a6b21000b2000200028020020096a3602002001200128021020096a36021020082005470d000b0b02402003450d00200341246c450d00200410390b200141ec006a200141106a41086a29030037020020012001290310370264200141013602602001280200210020012802082102200141c0006a200141e0006a41047210f009200020022001280240220a200128024810e90102402001280244450d00200a10390b200141e0006a41086a1099072001280204450d02200010390c020b200041046a2802002202450d01200241246c450d01200028020010390c010b1032000b20014190016a24000b950601047f230041e0006b22022400200241086a41e0c1cd00410810cb01200241186a41bcfccd00410e10cb01200220003602482002200241c8006a410410cc01370338200241dc006a2203200241c8006a41046a3602002002200241386a41086a3602542002200241c8006a3602582002200241386a360250200241286a200241d0006a10830102400240412010382200450d0020002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a29000037000020022000412010cc013703482003200041206a360200200220003602582002200241c8006a41086a3602542002200241c8006a360250200241386a200241d0006a108301200010392002280230220420022802406a41206a2200417f4c0d010240024020000d00410121010c010b200010382201450d010b4100210320024100360258200220013602502002200036025402402000410f4b0d00200241d0006a4100411010772002280254210020022802502101200228025821030b200120036a22052002290008370000200541086a200241086a41086a2900003700002002200341106a22033602580240200020036b410f4b0d00200241d0006a2003411010772002280254210020022802502101200228025821030b200120036a22052002290018370000200541086a200241186a41086a2900003700002002200341106a2203360258200228022821050240200020036b20044f0d00200241d0006a20032004107720022802502101200228025821030b200120036a2005200410d40b1a2002200320046a2200360258200228023821040240200228025420006b200228024022034f0d00200241d0006a200020031077200228025821000b2002280250220120006a2004200310d40b1a2002200020036a22003602580240200228023c450d00200410390b0240200228022c450d00200228022810390b20022001200010ce032002200228020441016a410120022802001b36021820012000200241186a410410e90102402002280254450d00200110390b200241e0006a24000f0b1032000b1034000b820303057f027e017f230041d0006b22022400200241386a22034200370300200241206a41106a22044200370300200241206a41086a2205420037030020024200370320200241c0006a41e1e5c000410810cb012005200241c0006a41086a220629000037030020022002290040370320200241c0006a41e4b4cb00410d10cb012003200629000037030020042002290040370300200241086a200241206a412010c107200241086a41106a2903002107200229031021082002280208210920034200370300200442003703002005420037030020024200370320200241c0006a41e1e5c000410810cb012005200629000037030020022002290040370320200241c0006a41e4b4cb00410d10cb0120032006290000370300200420022900403703002002427f2007420020091b220720017c2008420020091b220120007c22002001542203ad7c22012003200120075420012007511b22031b3703482002427f200020031b370340200241206a4120200241c0006a411010e901200241d0006a24000b9b0304057f027e017f027e230041d0006b22012400200141386a22024200370300200141206a41106a22034200370300200141206a41086a2204420037030020014200370320200141c0006a41e1e5c000410810cb012004200141c0006a41086a220529000037030020012001290040370320200141c0006a41e4b4cb00410d10cb012002200529000037030020032001290040370300200141086a200141206a412010c107200141086a41106a290300210620012903102107200128020821082000280200220041086a29030021092000290300210a20024200370300200342003703002004420037030020014200370320200141c0006a41e1e5c000410810cb012004200529000037030020012001290040370320200141c0006a41e4b4cb00410d10cb012002200529000037030020032001290040370300200142002006420020081b220620097d2007420020081b2207200a54ad7d22092007200a7d220a200756200920065620092006511b22021b37034820014200200a20021b370340200141206a4120200141c0006a411010e901200141d0006a24000bd30201047f230041e00b6b220224002002200010df03200241d8006a200228020022032002280208220410e0030240024020022903584201510d0041002100200241106a410041c80010d60b1a410021050c010b200241a8016a280200210020022802ac012105200241106a200241e0006a41c80010d40b1a0b0240024020052000720d0020012802002100200241d8006a41086a41033a0000200241f9006a200041186a290000370000200241f1006a200041106a290000370000200241e9006a200041086a290000370000200241e1006a2000290000370000200241003a0058200241d8006a10c903410121000c010b417f200041016a220120012000491b21000b200241e0006a200241106a41c80010d40b2101200241ac016a2005360200200241a8016a20003602002002420137035820032004200110e70402402002280204450d00200310390b200241e00b6a24000bce0603017f017e057f230041c00c6b22022400200241086a200010df03200241186a2002280208200228021010e0032002290318210320024200370318200241206a2104024002400240024020034201520d00200241e8006a2802002105200228026c210620022802642100200241f0006a200441c40010d40b1a02400240024020050e020001020b41002802d0a94e450d0041002802cca94e210541002802c8a94e210741002802d4a94e2108200241d4016a41b8c0cd00360200200241c8016a4201370300200241ec016a4185bec300ad4280808080900b84370200200241e0016a41a8d3c300ad4280808080c00184370300200241d8016a4200370300200241c0016a410f360200200241f0a4c1003602c40120024281808080d088013702f401200241003602e801200241fcb4c7003602bc01200241013602b801200741b8c0cd00200841024622081b200241b8016a200541c0a4c00020081b2802101103000b024020062000720d0020012802002100200241b8016a41086a41043a0000200241d9016a200041186a290000370000200241d1016a200041106a290000370000200241c9016a200041086a290000370000200241c1016a200029000037000041002100200241003a00b801200241b8016a10c9030c030b20000d03410121050b2004200241f0006a41c40010d40b1a2002200636026c20022005417f6a3602682002200036026420024201370318410121000c010b4100210041002802d0a94e450d004100210041002802cca94e210541002802c8a94e210141002802d4a94e2106200241d4016a41b8c0cd00360200200241c8016a4201370300200241ec016a4185bec300ad4280808080900b84370200200241e0016a41a8d3c300ad4280808080c00184370300200241d8016a4200370300200241c0016a410f360200200241f8a4c1003602c40120024281808080f08b013702f401200241003602e801200241fcb4c7003602bc01200241013602b801200141b8c0cd00200641024622061b200241b8016a200541c0a4c00020061b2802101103000b2002280210210520022802082101024020022903184201510d002001200510e0010c020b20012005200410e7040c010b410221000b0240200228020c450d00200228020810390b200241c00c6a240020000b970503047f027e017f230041106b22032400200341003602082003420137030020022802402104200341004104107720032802002205200328020822066a20043600002003200641046a2204360208200228024421060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a2205360208200228024821060240200328020420056b41034b0d002003200541041077200328020821050b2003280200220420056a20063600002003200541046a2205360208200228024c21060240200328020420056b41034b0d00200320054104107720032802002104200328020821050b200420056a20063600002003200541046a2206360208200241086a29030021072002290300210802402003280204220520066b410f4b0d0020032006411010772003280200210420032802042105200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241186a2903002107200229031021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241286a2903002107200229032021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241386a2903002107200229033021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a2202200737000820022008370000200020012004200641106a10e90102402005450d00200410390b200341106a24000bff0102017f027e230041900b6b220124002000290300210220004200370300024020024201520d00200041286a2903002102200141c0006a200041306a2903002203370300200141086a41306a2002370300200141116a2000290008370000200141106a41013a0000200141296a200041206a290000370000200141216a200041186a290000370000200141196a200041106a290000370000200141023a0008200141086a10c9032001200337031020012002370308024020022003844200520d002001200141086a360204200141046a10e4040c010b20012003370310200120023703082001200141086a360204200141046a10e4040b200141900b6a24000be00301067f230041d0006b22022400200241dae5c000410710cb01200241106a41f4f4ca00410810cb012002200136022c200241306a2002412c6a410410ca01200241cc006a2002412c6a41046a3602002002200241c0006a36024420022002412c6a3602482002200241306a360240200241206a200241c0006a108301024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290000370000200141086a200241086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290010370000200141086a200241106a41086a290000370000200228022021010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a36020002402002280224450d00200110390b200241d0006a24000f0b1034000b1032000bfb0c03077f027e037f230041f0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041023a00300c010b200328020c210402400240200341106a2802002202450d00200320012d00003a004c2003410136024820024101460d00200320012d00013a004d2003410236024820024102460d00200320012d00023a004e2003410336024820024103460d00200320012d00033a004f2003410436024820024104460d00200341d0006a20012d00043a00002003410536024820024105460d00200341d1006a20012d00053a00002003410636024820024106460d00200341d2006a20012d00063a00002003410736024820024107460d00200341d3006a20012d00073a00002003410836024820024108460d00200341d4006a20012d00083a00002003410936024820024109460d00200341d5006a20012d00093a00002003410a3602482002410a460d00200341d6006a20012d000a3a00002003410b3602482002410b460d00200341d7006a20012d000b3a00002003410c3602482002410c460d00200341d8006a20012d000c3a00002003410d3602482002410d460d00200341d9006a20012d000d3a00002003410e3602482002410e460d00200341da006a20012d000e3a00002003410f3602482002410f460d00200341db006a20012d000f3a00002003411036024820024110460d00200341dc006a20012d00103a00002003411136024820024111460d00200341dd006a20012d00113a00002003411236024820024112460d00200341de006a20012d00123a00002003411336024820024113460d00200341df006a20012d00133a00002003411436024820024114460d00200341e0006a20012d00143a00002003411536024820024115460d00200341e1006a20012d00153a00002003411636024820024116460d00200341e2006a20012d00163a00002003411736024820024117460d00200341e3006a20012d00173a00002003411836024820024118460d00200341e4006a20012d00183a00002003411936024820024119460d00200341e5006a20012d00193a00002003411a3602482002411a460d00200341e6006a20012d001a3a00002003411b3602482002411b460d00200341e7006a20012d001b3a00002003411c3602482002411c460d00200341e8006a20012d001c3a00002003411d3602482002411d460d00200341e9006a20012d001d3a00002003411e3602482002411e460d00200341ea006a20012d001e3a00002003411f3602482002411f460d00200341eb006a20012d001f3a0000200341386a41026a200341d5006a2d00003a0000200341ec006a41026a200341dc006a2d00003a0000200320032f014c3b0128200320032d004e3a002a2003200341d3006a2f00003b01382003200341da006a2f01003b016c200341d6006a2801002105200341dd006a2800002106200341e4006a280200210720034120360248200341c8006a41206a2802002108200328004f2109200341c4006a41026a200341e3006a2d00003a00002003200341e1006a2f00003b0144200241606a22024110490d0020024110460d00200141286a290000210a2001290020210b410021020240024020012d00300e020100020b410121020b2003411c6a41026a220c200341386a41026a2d00003a0000200341186a41026a220d200341ec006a41026a2d00003a0000200341146a41026a220e200341c4006a41026a2d00003a0000200320032d002a3a0022200320032f01283b0120200320032f01383b011c200320032f016c3b0118200320032f01443b01142000200a3703082000200b37030020002009360013200020032f01203b0110200041126a20032d00223a00002000200536001a200020032f011c3b0017200041196a200c2d00003a000020002006360021200020032f01183b001e200041206a200d2d00003a0000200020032f01143b0025200041276a200e2d00003a00002000200836002c20002007360028200041346a200341cb006a280000360000200020032800483600310c010b2003420037022c20034100280284ee4d3602282003410d36023c200320033602382003200341286a36026c200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341ec006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b410221020b200020023a00302004450d00200110390b200341f0006a24000bc30203047f027e017f230041106b220324000240411110382204450d002003421137020420032004360200200341004120107720032802002204200328020822056a22062002290010370000200641186a200241286a290000370000200641106a200241206a290000370000200641086a200241186a2900003700002003200541206a2206360208200241086a29030021072002290300210802402003280204220520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a220636020820022d00302102024020052006470d00200320054101107720032802002104200328020821060b200420066a20023a0000200020012004200641016a10e90102402003280204450d00200328020010390b200341106a24000f0b1032000bb13309017f027e017f067e067f017e027f017e037f230041d0106b220624000240024002400240200320048450450d0042002107420021080c010b024002400240024020012002412010d70b0d002005450d01200641b0016a200110df03200641c8056a20062802b001220920062802b80110e003200641e8056a290300420020062903c80542015122021b2108200641e0056a290300420020021b2107024020062802b401450d00200910390b4200200420087d2003200754ad7d2208200320077d2207200356200820045620082004511b22021b21084200200720021b21070c040b200641b0016a200210df03200641c8056a20062802b001220920062802b80110e0034200210a4200210b42002107420021084200210c4200210d4200210e4200210f024020062903c8054201520d00200641d8056a290300210f200641e8056a290300210d200641e0056a290300210c200641f8056a2903002108200641f0056a290300210720064188066a290300210b20064180066a290300210a20062903d005210e0b024020062802b401450d00200910390b0240200e2007200c8484200f2008200d848484500d00200641f0006a21090c020b200641f0006a2109200a200b8450450d01410021100c020b200641086a20012003200410e503200641106a2903002108200629030821070c020b200641a8016a200b37030020064198016a200837030020064188016a200d3703002006200a3703a00120062007370390012006200c370380012006200e3703702006200f370378410121100b4101211120104101732112024002400240024020100d004200210d200641a8036a4200370300200641a0036a420037030020064198036a420037030020064190036a420037030020064188036a420037030020064180036a4200370300200641f0026a41086a4200370300200642003703f00220064184056a410b360200200641f8046a41086a41a4caca00360200200641063a00fe0420064183083b01fc044200210c0c010b200641f0026a41386a200941386a290300370300200641f0026a41306a200941306a290300370300200641f0026a41286a200941286a290300370300200641f0026a41206a200941206a290300370300200641f0026a41186a200941186a290300370300200641f0026a41106a200941106a290300370300200641f0026a41086a200941086a290300370300200620092903003703f0022006200641f0026a3602b403200641d8036a200110df03200641c8056a20062802d803221120062802e00310e0034200210a4200210b4200210e4200210f4200210d4200210c4200210842002107024020062903c8054201520d00200641c8056a41106a2903002107200641c8056a41206a290300210c200641c8056a41186a290300210d200641c8056a41306a290300210f200641c8056a41286a290300210e20064188066a290300210b200641c8056a41386a290300210a20062903d00521080b024020062802dc03450d00201110390b0240024002402008200e200d84842007200f200c848484500d00200641b8036a21110c010b200641b8036a2111200a200b844200520d00200641f0046a4200370300200641e8046a4200370300200641e0046a4200370300200642003703d8044100211341012114200641b8036a211142002108420021074200210d4200210c0c010b200641b8036a41186a200b3703002006200a3703c8032006200e3703b8032006200f3703c003200641d8046a41186a201141186a290300370300200641d8046a41106a201141106a290300370300200641d8046a41086a201141086a290300370300200620112903003703d80441012113410021140b2004200c200d200356200c200456200c2004511b22151b210f2003200d20151b210e0240024002400240024002400240024002402005450d00200629038003220a200e7c2216200a54221520064188036a2217290300220a200f7c2015ad7c220b200a54200b200a511b0d022017200b37030020062016370380030c010b20062903f002220a200e7c2216200a542215200641f8026a290300220a200f7c2015ad7c220b200a54200b200a511b0d01200620163703f0022006200b3703f8020b4200210b200e422088a721172014ad210a200ea7211802400240427f2008200d200e7d22197c2216201620085422152007200c200f7d200d200e54ad7d220e7c2015ad7c220c200754200c2007511b22151b220d42ffc7afa02556427f200c20151b220c420052200c5022151b0d0020082019842007200e8484220b50211a200b420052ad210b0c010b200641c8056a41186a200641d8046a41186a290300370300200641c8056a41106a200641d8046a41106a290300370300200641c8056a41086a200641d8046a41086a290300370300200620062903d8043703c8054101211a0b201120062903c805370300201141186a200641c8056a41186a290300370300201141106a200641c8056a41106a290300370300201141086a200641c8056a41086a29030037030020064180046a200c370300200641f8036a221b200d370300200641d8036a41106a2007370300200620083703e0032006200f370390042006201736028c0420062018360288042006200b3703f0032006200a3703d80302402014200d42ffc7afa02556200c42005220151b221771450d00200620013602c8052001200641c8056a10e5040c050b02400240024020134101732017720d00200620013602c8052001200641c8056a10e60441ff017122144103460d0720140e03010702010b20132017720d0620064190046a290300210e200629038804210f410021140c040b20064190046a290300210e20064180046a290300210c200641e8036a2903002107200629038804210f20062903f803210d20062903e00321084100211420062903f003210b20062903d803210a0c030b4100211341042115410121140240201a0d002006201b3602c805200641c8056a10e4040b0c010b4180820821134187820821154200210a410121140b0c010b41002115410021130b201441004721112014450d0120064180056a200a370300200641013602f804200620134180fe0f71201541ff0171723602fc040c020b20064198046a41186a201141186a29030037030020064198046a41106a201141106a29030037030020064198046a41086a201141086a2903003703002006201129030037039804200641b8046a200110df03200641c8056a20062802b804221120062802c004221410e0030240024020062903c8054201510d00200641c8046a41086a4200370300200642003703c8040c010b200641c8046a41086a20064198066a290300370300200620064190066a2903003703c8040b4200210f02400240200d42ffc7afa02556200c42005220151b0d00200641e0056a4200370300200641d8056a4200370300200641d0056a4200370300200642003703c8054200210e42002108420021070c010b200641c8056a41186a20064198046a41186a290300370300200641c8056a41106a20064198046a41106a290300370300200641c8056a41086a20064198046a41086a29030037030020062006290398043703c8052019210f0b200641d8046a41186a200641c8056a41186a2215290300220c370300200641d8046a41106a200641c8056a41106a2213290300220d370300200641d8046a41086a200641c8056a41086a2217290300220a370300200620062903c805220b3703d804200641e8056a200e3703002015200f3703002013200737030020064188066a200c370300200641c8056a41386a200d370300200641f8056a200a370300200641c8056a41286a200b37030020064190066a20062903c80437030020064198066a200641c8046a41086a290300370300200620083703d005200642013703c80520112014201710e704024020062802bc04450d00201110390b200641d8036a41106a2903002107200641d8036a41286a290300210c200641d8036a41386a290300210e20062903e003210820062903f803210d200629038804210f20062903d803210a20062903f003210b410021110b0240200a4201520d0020064180066a2007370300200641f8056a2008370300200641d1056a2001290000370000200641c8056a41086a41003a0000200641e9056a200141186a290000370000200641e1056a200141106a290000370000200641d9056a200141086a290000370000200641023a00c805200641c8056a10c9030b02400240200b50450d00420021070c010b200641c8056a41186a200141186a290000370300200641c8056a41106a200141106a290000370300200641c8056a41086a200141086a290000370300200620012900003703c805420121070b20064198056a20062903c805370300200641b0056a200641c8056a41186a290300370300200641a8056a200641c8056a41106a290300370300200641a0056a200641c8056a41086a290300370300200641c0056a200c370300200641b8056a200d370300200641f8046a41106a200e370300200641f8046a41086a200f370300200641f8046a41186a2007370300200641003602f8040b200641f0026a41086a290300210c20062903f002210d2011450d010b20064180056a29030021074200210820062802fc0421140c010b200641c8056a200641f8046a41086a41c80010d40b1a4200210f02400240427f200d200629038003220b7c22072007200d542214200c200641f0026a41186a29030022167c2014ad7c2207200c542007200c511b22141b220a42ffc7afa02556427f200720141b220e420052200e501b0d0042002108200d200b84200c20168484420052ad210f0c010b200641d8036a41186a200641a8036a290300370300200641e8036a200641a0036a290300370300200641e0036a20064198036a29030037030020062006290390033703d803420121080b2012ad21072009200d3703002009200c3703082009200b370310200941186a2016370300200920062903d803370320200941286a200641e0036a290300370300200941306a200641e8036a290300370300200941386a200641d8036a41186a2903003703000b200641a8026a200641c8056a41c80010d40b1a0240024002400240024020110d00200641e0016a200641a8026a41c80010d40b1a200641d8016a200e370300200641d0016a2211200a370300200641c0016a200c3703002006200d3703b8012006200f3703c801200620073703b00102402008420052201271450d00200620023602c8052002200641c8056a10e5040c030b02400240024002402010200850714101470d00200620023602c8052002200641c8056a10e60441ff017122104103460d0620100e03020601020b20102008420052720d0520064180056a200641f8016a29030037030020064188056a20064180026a29030037030020064190056a20064188026a29030037030020064198056a20064190026a290300370300200641a0056a20064198026a290300370300200641a8056a200641a0026a2903003703002006200641f0016a2903003703f804200641e8016a29030021080c020b0240200f500d00200620113602c805200641c8056a10e4040b200641f0016a221110e80441042114410021092011290300500d03200620064198026a3602c805200641c8056a10e4040c030b20064180056a200641f8016a29030037030020064188056a20064180026a29030037030020064190056a20064188026a29030037030020064198056a20064190026a290300370300200641a0056a20064198026a290300370300200641a8056a200641a0026a2903003703002006200641f0016a2903003703f804200641e8016a29030021080b20062903e001210b0c030b201441807e7121090b2009201441ff017172211142002108410121090c020b200641a8026a41386a200941386a290300370300200641a8026a41306a200941306a290300370300200641a8026a41286a200941286a290300370300200641a8026a41206a200941206a290300370300200641a8026a41186a200941186a290300370300200641a8026a41106a200941106a290300370300200641a8026a41086a200941086a290300370300200620092903003703a802200641d8036a200210df03200641c8056a20062802d803220920062802e003221110e0030240024020062903c8054201510d00200641c0056a4200370300200642003703b8050c010b200641f8046a200641c8056a41086a41d00010d40b1a0b0240024020084200520d0020064180066a4200370300200641f8056a4200370300200641f0056a4200370300200641e8056a4200370300200641e0056a4200370300200641d8056a4200370300200641d0056a4200370300200642003703c8050c010b200641c8056a41386a200641a8026a41386a290300370300200641c8056a41306a200641a8026a41306a290300370300200641c8056a41286a200641a8026a41286a290300370300200641c8056a41206a200641a8026a41206a290300370300200641c8056a41186a200641a8026a41186a290300370300200641c8056a41106a200641a8026a41106a290300370300200641c8056a41086a200641a8026a41086a290300370300200620062903a8023703c8050b200641f8046a41386a200641c8056a41386a290300370300200641f8046a41306a2210200641c8056a41306a290300370300200641f8046a41286a2214200641c8056a41286a290300370300200641f8046a41206a2212200641c8056a41206a290300370300200641f8046a41186a2215200641c8056a41186a290300370300200641f8046a41106a2213200641c8056a41106a290300370300200641f8046a41086a2217200641c8056a41086a2218290300370300200620062903c8053703f8042018200641f8046a41d00010d40b2118200642013703c80520092011201810e704024020062802dc03450d00200910390b2017200641f8016a2903003703002013200641b0016a41d0006a290300370300201520064188026a290300370300201220064190026a290300370300201420064198026a2903003703002010200641a0026a2903003703002006200641f0016a2903003703f804200641b0016a41106a290300210c200641b0016a41286a290300210e200641b0016a41386a290300210820062903b801210d20062903d001210a20062903e001210b20062903b001210720062903c801210f0b41002111024020074201520d0020064180066a200c370300200641f8056a200d370300200641d1056a2002290000370000200641c8056a41086a41003a0000200641e9056a200241186a290000370000200641e1056a200241106a290000370000200641d9056a200241086a290000370000200641023a00c805200641c8056a10c9030b02400240200f50450d004200210c0c010b200641b0016a41186a200241186a290000370300200641b0016a41106a200241106a290000370300200641b0016a41086a200241086a290000370300200620022900003703b0014201210c0b200641a8026a41186a200641b0016a41186a290300370300200641a8026a41106a200641b0016a41106a290300370300200641a8026a41086a200641b0016a41086a290300370300200641c8056a41086a200641f8046a41086a290300370300200641c8056a41106a200641f8046a41106a290300370300200641c8056a41186a200641f8046a41186a290300370300200641c8056a41206a200641f8046a41206a290300370300200641c8056a41286a200641f8046a41286a290300370300200641c8056a41306a200641f8046a41306a290300370300200620062903b0013703a802200620062903f8043703c80541002109200b21070b200641386a41086a2210200641c8056a41086a2214290300370300200641386a41106a2212200641c8056a41106a290300370300200641386a41186a2215200641c8056a41186a290300370300200641386a41206a2213200641c8056a41206a290300370300200641386a41286a2217200641c8056a41286a290300370300200641386a41306a2218200641c8056a41306a290300370300200641186a41086a221a200641a8026a41086a290300370300200641186a41106a221b200641a8026a41106a290300370300200641186a41186a221c200641a8026a41186a290300370300200620062903c805370338200620062903a80237031820090d01200641f8046a41306a2018290300370300200641f8046a41286a2017290300370300200641f8046a41206a2013290300370300200641f8046a41186a2015290300370300200641f8046a41106a2012290300370300200641f8046a41086a2010290300370300200620062903383703f804200641b0016a41306a200e370300200641b0016a41286a2209200a370300200641b0016a41106a201a290300370300200641b0016a41186a201b290300370300200641b0016a41206a201c2903003703002006200c3703b001200620062903183703b801200641a0066a200837030020064198066a200737030020064191066a20053a0000201441073a0000200641e9056a200141186a290000370000200641e1056a200141106a290000370000200641d9056a200141086a290000370000200641d1056a2001290000370000200641f1056a2002290000370000200641f9056a200241086a29000037000020064181066a200241106a29000037000020064189066a200241186a290000370000200641023a00c805200641c8056a10c903200641b0016a10e804024020062903b001500d00200620093602c805200641c8056a10e4040b200641f8046a10e80420062903f804500d002006200641a0056a3602c805200641c8056a10e4040b200041106a4200200420087d2003200754ad7d2208200320077d2207200356200820045620082004511b22021b370300200041086a4200200720021b370300410021020c010b200041086a200737020020002011360204410121020b20002002360200200641d0106a24000bd91b0a017f047e017f047e017f017e017f037e047f067e230041e00c6b2204240002400240200220038450450d00420021054200210642002107420021080c010b200441c8006a200110df03200441d8016a20042802482209200428025010e003200441e8016a2903002106200441f8016a290300210a200441f0016a290300210720042903e001210820042903d801210b0240200428024c450d00200910390b420021050240200b4201520d0020082007842006200a8484500d00200441c8006a200110df03200441d8016a20042802482209200428025010e003420021074200210842002105420021064200210c4200210d4200210a4200210b024020042903d8014201520d00200441e8016a290300210b200441d8016a41206a290300210d200441d8016a41306a290300210620044198026a290300210820042903e001210a20042903f001210c200429038002210520042903900221070b0240200428024c450d00200910390b02400240200a2005200c8484200b2006200d84848450450d0020072008844200520d00200441d0016a4200370300200441c8016a4200370300200441c0016a4200370300200442003703b8014100210e410121094200210a4200210b4200210c4200210d0c010b200441286a41086a2006370300200441286a41186a2008370300200441286a41106a200737030020042005370328200441b8016a41186a2008370300200441b8016a41106a2007370300200441b8016a41086a2006370300200420053703b8014101210e410021090b4200210f20032003200d200c200256200d200356200d2003511b22101b22067d20022002200c20101b220554ad7d2108200220057d21072009ad211102400240427f200a200c20057d22127c22132013200a542210200b200d20067d200c200554ad7d22137c2010ad7c220c200b54200c200b511b22101b220d42ffc7afa02556427f200c20101b220c420052200c5022141b0d00200a201284200b20138484220f502115200f420052ad210f0c010b200441d8016a41186a200441b8016a41186a290300370300200441d8016a41106a200441b8016a41106a290300370300200441d8016a41086a200441b8016a41086a290300370300200420042903b8013703d801410121150b200441286a41186a200441d8016a41186a290300370300200441286a41106a200441d8016a41106a290300370300200441286a41086a200441d8016a41086a29030037030020044190016a200837030020044180016a2006370300200441c8006a41106a200b3703002004200d370368200441f0006a200c370300200420042903d8013703282004200737038801200420053703782004200a3703502004200f370360200420113703480240024002402009200d42ffc7afa025562216200c420052221720141b2210714101460d0002400240024002400240200e4101732016201720141b720d00200420013602d8012001200441d8016a10e60441ff017122094103460d0620090e03020601020b200e2010724101470d060c050b200441c8006a41306a2114200441c8006a41206a2117024020150d00200420173602d801200441d8016a10e4040b200420143602d801200441d8016a10e404200441c8006a200110df03200441d8016a20042802482209200428025010e0034200210742002108420021054200210642002118420021194200211a4200211b024020042903d8014201520d00200441e8016a290300211b200441f8016a290300211920044188026a290300210620044198026a290300210820042903e001211a20042903f0012118200429038002210520042903900221070b0240200428024c450d00200910390b201a200520188484201b2006201984848450450d0120072008844200520d01200441d0016a4200370300200441c8016a4200370300200441c0016a4200370300200442003703b80141002116410121094200211a4200211b42002118420021190c020b20044190016a290300210820044180016a2903002106200441f0006a290300210c200441d8006a290300210b2004290388012107200429037821052004290368210d2004290350210a2004290360210f200429034821110c040b200441286a41086a2006370300200441286a41186a2008370300200441286a41106a200737030020042005370328200441b8016a41186a2008370300200441b8016a41106a2007370300200441b8016a41086a2006370300200420053703b80141012116410021090b4200210f41002110200342002019201b7c2018201a7c2205201854ad7c220620054280c8afa02554ad7d220720054280b8d0df5a7c22082005562007200656200542ffc7afa025561b220e1b2205200342002008200e1b2206200254200520035420052003511b220e1b22052019201820062002200e1b220756201920055620192005511b220e1b22067d200220072018200e1b220554ad7d2108200220057d21072009ad211102400240427f201a201820057d221c7c221d201d201a54220e201b201920067d2018200554ad7d22197c200ead7c2218201b542018201b511b220e1b221d4280c8afa025544100427f2018200e1b2218501b0d00200441d8016a41186a200441b8016a41186a290300370300200441d8016a41106a200441b8016a41106a290300370300200441d8016a41086a200441b8016a41086a290300370300200420042903b8013703d80141012110201a210a201b210b201c2112201921134101210e0c010b0240201a201c84201b2019848450450d004101210e0c010b4201210f410021104100210e201d210d2018210c0b200441286a41186a200441d8016a41186a290300370300200441286a41106a200441d8016a41106a290300370300200441286a41086a200441d8016a41086a29030037030020044190016a200837030020044180016a2006370300200441f0006a200c370300200441c8006a41106a201b370300200420042903d8013703282004200737038801200420053703782004200d3703682004201a3703502004200f3703602004201137034820102009710d000240024020162010410173710d0020162010720d030c010b200420013602d8012001200441d8016a10e60441ff017122094103460d020240024020090e03010400010b0240200e0d00200420173602d801200441d8016a10e4040b200420143602d801200441d8016a10e404420021050c050b20044190016a290300210820044180016a2903002106200441f0006a290300210c200441d8006a290300211b2004290388012107200429037821052004290368210d2004290350211a2004290360210f200429034821110b201a210a201b210b0c020b200420013602d8012001200441d8016a10e504410121100b20044198016a200110df03200441d8016a200428029801220920042802a001221410e0030240024020042903d8014201510d00200441b0016a4200370300200442003703a8010c010b200441b0016a200441a8026a2903003703002004200441a0026a2903003703a8010b0240024020100d0042002112200441f0016a4200370300200441e8016a4200370300200441e0016a4200370300200442003703d801420021134200210a4200210b0c010b200441d8016a41186a200441286a41186a290300370300200441d8016a41106a200441286a41106a290300370300200441d8016a41086a200441286a41086a290300370300200420042903283703d8010b200441b8016a41186a200441d8016a41186a22102903002205370300200441b8016a41106a200441d8016a41106a220e2903002202370300200441b8016a41086a200441d8016a41086a22162903002203370300200420042903d80122063703b801200441f8016a201337030020102012370300200e200b37030020044198026a2005370300200441d8016a41386a200237030020044188026a2003370300200441d8016a41286a2006370300200441d8016a41c8006a20042903a801370300200441a8026a200441a8016a41086a2903003703002004200a3703e001200442013703d80120092014201610e7040240200428029c01450d00200910390b200441c8006a41106a290300210b200441c8006a41286a290300210c200441c8006a41386a2903002106200441c8006a41c8006a29030021082004290350210a2004290368210d200429037821052004290388012107200429034821112004290360210f0b024020114201520d0020044190026a200b37030020044188026a200a370300200441e1016a2001290000370000200441d8016a41086a41003a0000200441f9016a200141186a290000370000200441f1016a200141106a290000370000200441e9016a200141086a290000370000200441023a00d801200441d8016a10c9030b02400240200f50450d00420021020c010b200441d8016a41186a200141186a290000370300200441d8016a41106a200141106a290000370300200441d8016a41086a200141086a290000370300200420012900003703d801420121020b200441086a41186a200441d8016a41186a22012903002203370300200441086a41106a200441d8016a41106a2209290300220b370300200441086a41086a200441d8016a41086a290300220a370300200420042903d801220f37030820044188026a200c37030020044180026a2210200d3703002009200a3703002001200b370300200441f8016a2003370300200420023703d8012004200f3703e001200441d8016a10e80420042903d801500d0120042010360248200441c8006a10e4040c010b4200210620022107200321080b2000200737031020002005370300200041186a200837030020002006370308200441e00c6a24000b920204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001412010e40102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b420021032002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b0b2004450d00200110390b2000200537030820002003370300200241d0006a24000ba13708017f017e057f017e017f037e0d7f017e230041f00e6b2204240020022903002105200441e8036a200241880210d40b1a2004200441206a3602f4052004200441206a3602f005200441f0026a200441f0036a220610df04200441f0006a200441e0046a220710df0402400240024002400240200441f0026a200441f0006a412010d70b450d00200441fc036a2802002208450d00200241e8016a2109200441f4036a2802002102200841246c21080340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602f4022004200241086a2802003602f002200441f0006a200441f0026a10990920042903704203510d00200441ec046a2802002208450d02200428028001210a2004290378210b200441e4046a2802002102200841246c210802400240024002400340024020022d00004101470d00200241016a28000041c28289aa04470d002004200241106a2802003602f4022004200241086a2802003602f002200441f0006a200441f0026a10990920042903704203510d0020042903e803200b520d08200b2004290378520d08200a200428028001470d08200441f0006a200641f00010d40b1a2004200441d0056a22023602e001200441f0006a200210d309450d09200441f0006a200741f00010d40b1a200420023602e001200441f0006a200210d309450d0a2003280210210c20032802002102200441e8036a41186a22084200370300200441e8036a41106a22064200370300200441e8036a41086a22074200370300200442003703e803200441f0006a41cde5c000410410cb012007200441f0006a41086a220a290000370300200420042900703703e803200441f0006a41f4d3c700410b10cb012008200a29000037030020062004290070370300200441106a200441e8036a10ee0402402002417f420020052004290318420020042802101b7d220b200b2005561b220b42d80480a7200b42ffffffffffca00561b460d002000420037030820004201370300200041286a4118360200200041246a41b2d6cd00360200200041226a41013a0000200041206a4183023b0100200041186a41003a00000c0c0b200441bc026a200941086a290000370200200441c4026a200941106a290000370200200441cc026a200941186a290000370200200441e2c289ab063602b002200420092900003702b402200441f8016a41106a200341106a280200360200200441f8016a41086a200341086a290200370300200420032902003703f801200441f0026a200441b0026a200441f8016a10fa06024020042802b003450d00200441e8036a41066a200441f0026a41d00010d40b1a200441f0006a200441e8036a41d60010d40b1a200441206a200441f0006a41066a41d00010d40b1a0240024020012d00004101460d00410021034100280284ee4d21080c010b412010382208450d0520082001290001370000200841186a200141196a290000370000200841106a200141116a290000370000200841086a200141096a290000370000410121030b20042005370370200441f0006a41086a200441206a41d00010d40b1a2004200c3602cc01200420023602c80141d00010382202450d04200441e8036a41186a200441206a41186a290300370300200441e8036a41106a200441206a41106a290300370300200441e8036a41086a200441206a41086a290300370300200420042903203703e803200441f0006a41286a290300210b200441f0006a41306a290300210d200441f0006a41386a290300210e200441f0006a41c0006a290300210f200441e8036a41c0006a200441b8016a10ca09200441e8036a41386a200f370300200441e8036a41306a200e370300200441e8036a41286a200d3703002004200b370388042002200441e8036a41d00010d40b2106200420033602f001200420033602ec01200420083602e801410810382202450d0420022005370000200420023602b0022004428880808080013702b402200441e8036a41bccbc60010bf05200441f0026a20042802e803220820042802f003109d0720042902f402420020042802f00222021b210b20024100280284ee4d20021b2110024020042802ec03450d00200810390b2004200b4220883e02fc01200420103602f801200441086a200441f8016a10c1010240024020042802080d00200428020c221120042802fc01220841286e2202200220114b1bad42287e220d422088a70d07200da72202417f4c0d070240024020020d00410821120c010b200210382212450d070b4100210a200441003602f802200420123602f0022004200241286e22023602f402024020110d004100210a2012450d010c020b200441e8036a4104722109200441e8036a41196a2113200441e8036a41126a2114200441e8036a410b6a211541002116024002400240034020084108490d02201641016a2116200420042802f801220741086a3602f801200841786a21012007290000210d41002102034020012002460d02200920026a200720026a220341086a2d00003a00002004200241016a22083602e8032004200341096a3602f8012008210220084120470d000b200441a0026a41026a2203201541026a2d00003a0000200441e4036a41026a2207201441026a2d00003a0000200420092f01003b01c003200420152f00003b01a002200420142f00003b01e4032004200941026a2d00003a00c2032004280288042117200428028404211820042800fd03211920042801f603211a20042800ef03211b200441e0036a41026a221c201341026a2d00003a0000200420132f00003b01e0030240200a20042802f402470d00200441f0026a200a10bd0920042802f002211220042802f802210a0b200120086b21082012200a41286c6a2202200d3703002002410a6a20042d00c2033a0000200220042f01c0033b0108200241116a20032d00003a00002002410f6a20042f01a0023b0000200241186a20072d00003a0000200241166a20042f01e4033b00002002410b6a201b360000200241126a201a360000200241196a20193600002002411f6a201c2d00003a00002002411d6a20042f01e0033b0000200241246a2017360000200241206a20183600002004200a41016a220a3602f80220162011470d000b20042802f402210220042802f0022212450d030c040b200441003602fc010c010b200420083602fc010b20042802f4022202450d00200241286c450d0020042802f00210390b4100210241002802e8c84821124100210a0b200441e8036a41bccbc600200441b0026a10ce08200441f0026a20042802e803220820042802f00310cf080240024020042802f00222070d0020044188026a42003703004100210920044100280284ee4d2207360284020c010b20044188026a20042902f402220d3703002004200736028402200d422088a721090b024020042802ec03450d00200810390b20044198026a200a36020020044194026a2002360200200441f8016a41086a200441b0026a41086a280200360200200420042903b0023703f80120042012360290020240200ba7450d00201010390b0240200628024022020d00410021010c040b200441b0026a41386a2208200641386a290300370300200441b0026a41306a2203200641306a290300370300200441b0026a41286a2201200641286a290300370300200441b0026a41206a220a200641206a290300370300200441b0026a41186a2212200641186a290300370300200441b0026a41106a2210200641106a290300370300200441b0026a41086a2211200641086a290300370300200441a0026a41086a2216200641cc006a280200360200200420062903003703b002200420062902443703a002200441f0026a41386a2008290300370300200441f0026a41306a2003290300370300200441f0026a41286a2001290300370300200441f0026a41206a200a290300370300200441f0026a41186a2012290300370300200441f0026a41106a2010290300370300200441f0026a41086a2011290300370300200420042903b0023703f002200420023602b003200441b4036a220220042903a002370200200241086a2016280200360200410810382202450d0420022005370000200441f4036a220841002900bccb46370000200841086a41002900c4cb463700002004428880808080013702ec03200420023602e8032004200441f0026a36028404200441c0036a200441e8036a10d00820021039200441e8036a200441c0036a10b90520042802e803220820042802f00310e3012102024020042802ec03450d00200810390b024020020d00200441e8036a200441f0026a41d00010d40b1a200441e8036a41d0006a200441e8016a10b506200441c0036a200441e8036a10c605200428029002210102400240200428029802220a450d0041002102200a2107200a210302400340024002402001200741017620026a220841286c6a290300220b20055a0d00200841016a21020c010b20082103200b2005510d020b200320026b210720022108200320024b0d000b0b200a20084f0d012008200a1041000b410021080b0240200a200428029402470d0020044190026a200a10bd09200428028c02210920042802900221010b2001200841286c6a220241286a2002200a20086b41286c10d50b1a200220042903c003220b370008200241106a200441c0036a41086a290300220d370000200241186a200441c0036a41106a290300220e370000200241206a200441c0036a41186a290300220f37000020022005370300410121012004200a41016a36029802200441e8036a41186a2208200f370300200441e8036a41106a2203200e370300200441e8036a41086a220a200d3703002004200b3703e80302402009200428028802470d0020044184026a20094101109e02200428028c0221090b200428028402220720094105746a220220042903e803370000200241186a2008290300370000200241106a2003290300370000200241086a200a2903003700002004200941016a220936028c020c040b4100210120042802b4032202450d03200241306c450d0320042802b00310390c030b200041286a4118360200200041246a41b2d6cd00360200200041226a41013a0000200041206a4183023b0100200041186a41003a000020004200370308200042013703000c0c0b200241246a21022008415c6a22080d000c070b0b200641d0006a220220026b220841d0006d210302402008450d00200341d0006c2108200241c4006a21020340024020022802002203450d00200341306c450d002002417c6a28020010390b200241d0006a2102200841b07f6a22080d000b0b20061039024002402001450d000240024002402009450d0020094105742108200721020340200441e8036a200210bd0520042802a80422030d02200241206a2102200841606a22080d000b0b41002802e8c84821074200210d0c010b200441f0026a41386a2201200441e8036a41386a290300370300200441f0026a41306a220a200441e8036a41306a290300370300200441f0026a41286a2212200441e8036a41286a290300370300200441f0026a41206a2210200441e8036a41206a290300370300200441f0026a41186a2211200441e8036a41186a290300370300200441f0026a41106a2216200441e8036a41106a290300370300200441f0026a41086a2213200441e8036a41086a290300370300200441b0026a41086a2214200441e8036a41cc006a290200370300200441b0026a41106a2215200441e8036a41d4006a290200370300200441b0026a41186a2217200441e8036a41dc006a280200360200200420042903e8033703f0022004200441ac046a2902003703b00241e00010382206450d03200620042903f00237030020062003360240200620042903b002370244200641386a2001290300370300200641306a200a290300370300200641286a2012290300370300200641206a2010290300370300200641186a2011290300370300200641106a2016290300370300200641086a2013290300370300200641cc006a2014290300370200200641d4006a2015290300370200200641dc006a201728020036020020044281808080103702c403200420063602c003024020084120460d00200241206a210a200720094105746a220341606a2112200441e8036a41c4006a2109410121010340200a210202400340200441e8036a200210bd0520042802a80422080d012003200241206a2202470d000c030b0b200441f0026a41386a2210200441e8036a41386a290300370300200441f0026a41306a2211200441e8036a41306a290300370300200441f0026a41286a2216200441e8036a41286a290300370300200441f0026a41206a2213200441e8036a41206a290300370300200441f0026a41186a2214200441e8036a41186a290300370300200441f0026a41106a2215200441e8036a41106a290300370300200441f0026a41086a2217200441e8036a41086a290300370300200441b0026a41086a2218200941086a290200370300200441b0026a41106a2219200941106a290200370300200441b0026a41186a221a200941186a280200360200200420042903e8033703f002200420092902003703b0020240200120042802c403470d00200441c0036a200110980720042802c00321060b200241206a210a2006200141e0006c6a220720042903f002370300200741106a2015290300370300200741086a20172903003703002011290300210b2010290300210d2016290300210e2013290300210f2014290300211d200741c0006a2008360200200741186a201d370300200741206a200f370300200741286a200e370300200741c4006a20042903b002370200200741386a200d370300200741306a200b370300200741cc006a2018290300370200200741d4006a2019290300370200200741dc006a201a2802003602002004200141016a22013602c80320122002470d000b0b20042802c003210720042902c403210d0b200441e8036a41206a200441f8016a41206a2802002202360200200441e8036a41186a200441f8016a41186a290300220b370300200441e8036a41106a200441f8016a41106a290300370300200441e8036a41086a200441f8016a41086a290300370300200420042903f8013703e803200241286c4104722208417f4c0d03200810382203450d02200ba72106200441003602c803200420083602c403200420033602c003200441c0036a200210ac0202402002450d002006200241286c6a21032006210203402002290300210b024020042802c40320042802c80322086b41074b0d00200441c0036a20084108107720042802c80321080b20042802c00320086a200b3700002004200841086a3602c803200241086a200441c0036a10b502200241286a22022003470d000b0b200441b0026a41086a200441c0036a41086a280200360200200420042903c0033703b002200441f0026a41bccbc60010bf0520042802f002220220042802f802200441b0026a10d606024020042802f402450d00200210390b024020042802b402450d0020042802b00210390b41bccbc600200441e8036a200441f4036a10d108024020042802ec03450d0020042802e80310390b0240200441f8036a28020041ffffff3f71450d0020042802f40310390b20044184046a2802002202450d01200241286c450d01200610390c010b024020042802fc01450d0020042802f80110390b024020042802880241ffffff3f71450d00200710390b4100210702402004280294022202450d00200241286c450d0020042802900210390b0b024020042802ec0141ffffff3f71450d0020042802e80110390b024020070d000240200441bc016a2802002202450d00200241306c450d0020042802b80110390b2000420037030820004201370300200041286a4116360200200041246a41f5d6cd00360200200041226a41023a0000200041206a4183023b0100200041186a41003a00000c0a0b200c4101200c41014b1b2202418094ebdc036e2002418094ebdc03704100476a22084101200841014b1b220820024b0d022002200d422088a7220641036c220320022003491b20086ead428094ebdc037e200220086ead80a710af012103200641ffffffff03712006470d0120064102742208417f4c0d010240024020080d00410421020c010b200810382202450d010b41002101200441003602f802200420023602f0022004200841027622083602f402024002400240200820064f0d00200441f0026a4100200610ab0120042802f002210220042802f80221010c010b2006450d010b200220014102746a210220062108034020022003360200200241046a21022008417f6a22080d000b200120066a210120042802f00221020b200420013602f802200720062002200120042802c80110ac081a410810382208450d002008200537000020044180046a41002900c4cb46370300200441f8036a41002900bccb46370300200441e8036a41086a42888080808001370300200420083602ec03200441043a00e803200441e8036a10c903024020042802f40241ffffffff0371450d00200210390b02402006450d00200641e0006c2108200741d4006a210203400240200241706a2802002203450d00200341306c450d002002416c6a28020010390b0240200228020041ffffff3f71450d002002417c6a28020010390b200241e0006a2102200841a07f6a22080d000b0b0240200da72202450d00200241e0006c450d00200710390b0240200441bc016a2802002202450d00200241306c450d0020042802b80110390b2000420037030820004200370300200041186a41013a0000200441f00e6a24000f0b1032000b1034000b41f0f0c20041194188f2c2001035000b200241246a21022008415c6a22080d000b0b0240200441fc036a2802002208450d00200441e8036a410c6a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022008415c6a22080d000b0b200441f8036a2802002202450d00200241246c450d0020042802f40310390b0240200441ec046a2802002208450d00200441e4046a2802002102200841246c210803400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022008415c6a22080d000b0b200441e8046a2802002202450d00200241246c450d0020042802e40410390b200041286a4118360200200041246a419ad6cd00360200200041226a41003a0000200041206a4183023b0100200041186a41003a000020004200370308200042013703000b2003280204210002402003410c6a2802002202450d002002410c6c21082000210203400240200241046a280200450d00200228020010390b2002410c6a2102200841746a22080d000b0b200341086a2802002202450d002002410c6c450d00200010390b200441f00e6a24000bcb0101047f02402001280200220128020422020d00200041023602000f0b200128020022032d0000210420012002417f6a22053602042001200341016a36020002400240024020040e020102000b200041023602000f0b200041003602000f0b0240024020054104490d002003280001210520012002417b6a22043602042001200341056a360200200441034b0d010b200041023602000f0b2000200536020420004101360200200328000521042001200241776a3602042001200341096a360200200041086a20043602000bda0403047f017e057f230041206b22022400200241086a2001108c02024002402002280208450d00200041003602000c010b0240024002400240024002400240200228020c220320012802002204280204410c6e2205200520034b1bad420c7e2206422088a70d002006a72205417f4c0d000240024020050d00410421070c010b200510382207450d020b2001200128020441016a2208360204200241003602182002200736021020022005410c6e360214200820012802084b0d042003450d0341002109034020022001108c0220022802000d062004280204220820022802042205490d062005417f4c0d010240024020050d004101210a0c010b20051038220a450d03200a4100200510d60b1a200428020421080b0240200820054f0d00200a10390c070b2005ad22064220862006842106200a2004280200220b200510d40b210a2004200820056b3602042004200b20056a360200024020092002280214470d00200241106a2009410110ec0120022802102107200228021821090b20072009410c6c6a220520063702042005200a3602002002200228021841016a22093602182003417f6a2203450d030c000b0b1034000b1032000b200128020421080b2000200229031037020020012008417f6a360204200041086a200241106a41086a2802003602000c030b200041003602000c010b20004100360200200228021021072009450d002009410c6c21012007210503400240200541046a280200450d00200528020010390b2005410c6a2105200141746a22010d000b0b20022802142205450d002005410c6c450d00200710390b200241206a24000b8a0703097f017e017f230041e0016b22022400200241f0006a410472210320012802002204280204210541002106417f210702400340024020052006470d002000410036020c0c020b200428020022082d000021092004200520076a3602042004200841016a360200200320066a20093a00002002200641016a22083602702007417f6a21072008210620084120470d000b200241086a41026a200241fd006a2d00003a0000200241046a41026a20024184016a2d00003a0000200220022f01743b010c200220022d00763a000e2002200241fb006a2f00003b0108200220024182016a2f01003b010420024190016a28020021072002418c016a280200210820024185016a2800002105200241fe006a280100210920022800772103200241026a2002418b016a2d00003a0000200220024189016a2f00003b0100024002402001280200220628020422044108490d002006280200220a290000210b2006200441786a3602042006200a41086a360200200241f0006a200110f6042002280274220a450d01200241fc006a28020021062002280278210c20022802702104200241106a20024180016a41e00010d40b1a200241f0006a200110f60402402002280274450d00200041f8006a200241f0006a41f00010d40b1a200041ea016a20022d000e3a0000200041e8016a20022f010c3b0100200041eb016a2003360000200020022f01083b00ef01200041f1016a200241086a41026a2d00003a0000200020093600f201200020022f01043b00f601200041f8016a200241046a41026a2d00003a0000200020053600f901200020022f01003b00fd01200041ff016a200241026a2d00003a000020004184026a200736000020004180026a2008360000200020043602082000200a36020c2000200c360210200041146a2006360200200041186a200241106a41e00010d40b1a2000200b3703000c030b2000410036020c02402006450d00200641246c2104200a210603400240024002400240024020062d00000e050400010204030b2006410c6a280200450d03200641086a28020010390c030b2006410c6a280200450d02200641086a28020010390c020b2006410c6a280200450d01200641086a28020010390c010b200641086a280200450d00200641046a28020010390b200641246a21062004415c6a22040d000b0b200c450d02200c41246c450d02200a10390c020b2000410036020c0c010b2000410036020c0b200241e0016a24000bb40201067f230041106b220224000240024002402001280200220328020422044104490d0020032802002205280000210620032004417c6a3602042003200541046a3602002002200110f10420022802002203450d01200241086a28020021052002280204210402402001280200220128020422074104490d002000200436020820002003360204200020063602002000410c6a200536020020012802002203280000210420012007417c6a3602042001200341046a360200200041106a20043602000c030b2000410036020402402005450d002005410c6c21002003210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2004450d022004410c6c450d02200310390c020b200041003602040c010b200041003602040b200241106a24000bb01102097f017e230041c0006b22022400024002402001280200220328020422040d00200041053a00000c010b200328020022052d0000210620032004417f6a22073602042003200541016a3602000240024002400240024002400240024002400240024020060e050001020304050b200241186a410472210841002101417e21060340024020072001470d00200041053a00000c0c0b200520016a220941016a2d0000210a2003200420066a3602042003200941026a360200200820016a200a3a00002002200141016a22093602182006417f6a21062009210120094120470d000b200041086a200241186a410b6a2f00003b00002000410a6a200241256a2d00003a00002000410f6a200241186a41126a2f01003b0000200041116a2002412c6a2d00003a0000200041186a200241336a2d00003a0000200041166a200241186a41196a2f00003b0000200220022f011c3b0114200220022d001e3a0016200241266a28010021032002412d6a2800002101200241346a290200210b200228001f2104200041036a20022d00163a0000200020022f01143b0001200041196a200b370000200041126a20013600002000410b6a2003360000200041046a2004360000200041003a00000c0a0b200041013a00000c090b200241086a2001108c02024020022802080d0020032802042204200228020c2201490d002001417f4c0d050240024020010d00410121060c010b200110382206450d0720064100200110d60b1a200328020421040b200420014f0d07200610390b200041053a00000c080b200241186a410472210841002101417e21060340024020072001470d00200041053a00000c090b200520016a220941016a2d0000210a2003200420066a3602042003200941026a360200200820016a200a3a00002002200141016a22093602182006417f6a21062009210120094120470d000b200041086a200241186a410b6a2f00003b00002000410a6a200241256a2d00003a00002000410f6a200241186a41126a2f01003b0000200041116a2002412c6a2d00003a0000200041186a200241336a2d00003a0000200041166a200241186a41196a2f00003b0000200220022f011c3b0114200220022d001e3a0016200241266a28010021032002412d6a2800002101200241346a290200210b200228001f2104200041036a20022d00163a0000200020022f01143b0001200041196a200b370000200041126a20013600002000410b6a2003360000200041046a2004360000200041033a00000c070b20070d010c050b200041053a00000c050b20052d000121012003200541026a36020020032004417e6a220636020420024101360218200220013a001c2006450d0320052d000221012003200541036a36020020032004417d6a220636020420024102360218200220013a001d2006450d0320052d000321012003200541046a36020020032004417c6a220636020420024103360218200220013a001e2006450d0320052d000421012003200541056a36020020032004417b6a220636020420024104360218200220013a001f2006450d0320052d0005210120032004417a6a22063602042003200541066a360200200241206a20013a0000200241053602182006450d0320052d000621012003200441796a22063602042003200541076a360200200241216a20013a0000200241063602182006450d0320052d000721012003200441786a22063602042003200541086a360200200241226a20013a0000200241073602182006450d0320052d000821012003200441776a22063602042003200541096a360200200241236a20013a0000200241083602182006450d0320052d000921012003200441766a220636020420032005410a6a360200200241246a20013a0000200241093602182006450d0320052d000a21012003200441756a220636020420032005410b6a360200200241256a20013a00002002410a3602182006450d0320052d000b21012003200441746a220636020420032005410c6a360200200241266a20013a00002002410b3602182006450d0320052d000c21012003200441736a220636020420032005410d6a360200200241276a20013a00002002410c3602182006450d0320052d000d21012003200441726a220636020420032005410e6a360200200241286a20013a00002002410d3602182006450d0320052d000e21012003200441716a220636020420032005410f6a360200200241296a20013a00002002410e3602182006450d0320052d000f21012003200441706a22063602042003200541106a3602002002412a6a20013a00002002410f3602182006450d0320052d0010210120032004416f6a22063602042003200541116a3602002002412b6a20013a0000200241103602182006450d0320052d0011210120032004416e6a22063602042003200541126a3602002002412c6a20013a0000200241113602182006450d0320052d0012210120032004416d6a22063602042003200541136a3602002002412d6a20013a0000200241123602182006450d0320052d0013210120032004416c6a22063602042003200541146a3602002002412e6a20013a0000200241133602182006450d0320052d0014210120032004416b6a3602042003200541156a360200200041086a200241186a410b6a2f00003b00002000410a6a200241256a2d00003a00002000410f6a200241186a41126a2f01003b0000200041116a200241186a41146a2d00003a0000200220022f011c3b0114200220022d001e3a0016200241266a2801002103200241186a41156a2f00002104200228001f2106200041146a20013a0000200041126a20043b00002000410b6a2003360000200041046a2006360000200041036a20022d00163a0000200020022f01143b0001200041043a00000c040b1034000b1032000b200620032802002209200110d40b21062003200420016b3602042003200920016a360200200041086a2001ad220b422086200b84370000200041046a2006360000200041023a00000c010b200041053a00000b200241c0006a24000bd80506067f017e017f017e017f017e230041206b2202240002400240200128020022012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d0120012003417c6a3602042001200441046a36020020042f0001200441036a2d000041107472410874200572220141808004490d012001410276ad21080c020b0240024002400240200541027622090e0d00030303010303030303030302030b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210a0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210a0c050b20064110490d0320012003416f6a3602042001200441116a360200200441096a290000220a42808080808080808001542107200429000121080c040b200541334b0d02200941046a21062003417e6a2103200441026a21044100210541012107200241186a210b420021084200210a03402003417f460d012004417f6a310000210c2001200336020420012004360200200241106a200c4200200541037441f8007110d10b2003417f6a2103200441016a2104200b290300200a84210a20022903102008842108200541016a220541ff01712006490d000b2002427f427f41e80020094103746b41f8007110d80b2008200229030058200a200241086a290300220c58200a200c511b21070c030b0c020b4200210a410021070c010b410121070b20002008370308200041106a200a37030020002007ad370300200241206a24000bc92405187f017e0a7f017e027f230041b0026b22022400200241c0016a410472210320012802002204280204210541002106417f2107024003400240200520062208470d000c020b200428020022062d000021092004200520076a3602042004200641016a360200200320086a20093a00002002200841016a22063602c0012007417f6a210720064120470d000b20024190016a41026a200241cd016a2d00003a000020024180016a41026a200241d4016a2d00003a0000200220022f01c4013b019c02200220022d00c6013a009e022002200241cb016a2f00003b0190012002200241d2016a2f01003b018001200241ce016a280100210a200241d5016a280000210b200241dc016a280200210c200241e0016a280200210d20022800c701210e200241f0006a41026a200241db016a2d00003a00002002200241d9016a2f00003b01700b2002413c6a41026a20022d009e023a0000200241386a41026a20024190016a41026a2d00003a0000200241346a41026a20024180016a41026a2d00003a0000200241306a41026a200241f0006a41026a2d00003a0000200220022f019c023b013c200220022f0190013b0138200220022f0180013b0134200220022f01703b01300240024002400240024002400240024002400240024020052008460d00200241286a2001108c0220022802280d01200228022c210f200241c0016a41047221032004280204210541002106417f2107024003400240200520062208470d00410021090c020b200428020022062d000021092004200520076a3602042004200641016a360200200320086a20093a00002002200841016a22063602c0012007417f6a210720064120470d000b20024190016a41026a200241cd016a2d00003a000020024180016a41026a200241d4016a2d00003a0000200220022f01c4013b019c02200220022d00c6013a009e022002200241cb016a2f00003b0190012002200241d2016a2f01003b018001200241ce016a2801002110200241d5016a2800002111200241dc016a2802002112200241e0016a280200211320022800c7012114200241f0006a41026a200241db016a2d00003a00002002200241d9016a2f00003b0170200520066b21090b200241cc006a41026a20022d009e023a0000200241c8006a41026a20024190016a41026a2d00003a0000200241c4006a41026a20024180016a41026a2d00003a0000200241c0006a41026a200241f0006a41026a2d00003a0000200220022f019c023b014c200220022f0190013b0148200220022f0180013b0144200220022f01703b014020052008460d02200241c0016a410472210341002106417f2107024003400240200920062208470d000c020b200428020022062d000021052004200920076a3602042004200641016a360200200320086a20053a00002002200841016a22063602c0012007417f6a210720064120470d000b20024190016a41026a200241cd016a2d00003a000020024180016a41026a200241d4016a2d00003a0000200220022f01c4013b019c02200220022d00c6013a009e022002200241cb016a2f00003b0190012002200241d2016a2f01003b018001200241ce016a2801002115200241d5016a2800002116200241dc016a2802002117200241e0016a280200210320022800c7012118200241f0006a41026a200241db016a2d00003a00002002200241d9016a2f00003b01700b200241dc006a41026a20022d009e023a0000200241d8006a41026a20024190016a41026a2d00003a0000200241d4006a41026a20024180016a41026a2d00003a0000200241d0006a41026a200241f0006a41026a2d00003a0000200220022f019c023b015c200220022f0190013b0158200220022f0180013b0154200220022f01703b015020092008460d05200241206a2001108c0220022802200d0920022802242219200428020441246e2206200620194b1bad42247e221a422088a70d03201aa72206417f4c0d030240024020060d00410421080c010b200610382208450d050b2001200128020441016a220736020420024100360268200220083602602002200641246e360264200720012802084b0d08024002400240024002402019450d00200241c0016a410472211b20024192026a211c200241ff016a211d200241a8026a211e200241dd016a211f200241c0016a41106a212041002121034020042802042206450d0d200428020022082d0000210720042006417f6a3602042004200841016a3602000240024002400240024002400240024020070e080015011503040205150b20022001108c0220022802000d1420012802002204280204220620022802042207490d142007417f4c0d100240024020070d00410121080c010b200710382208450d1220084100200710d60b1a200428020421060b0240200620074f0d00200810390c150b200820042802002205200710d40b21222004200620076b3602042004200520076a3602002022410876212341052124200721060c050b20012802002204280204210541002106417f2108034020052006460d14200428020022072d000021092004200520086a3602042004200741016a360200201b20066a20093a00002002200641016a22073602c0012008417f6a21082007210620074120470d000b200220202902003703f8012002202041056a2900003700fd0120022802c401210920022903c8012125201e41036a202041036a280000360000201e20202802003602002002418c026a41046a201d41046a2f00003b0100201c41036a201f41036a280000360000201c201f280000360000200220253702a0022002200936029c022002201d28000036028c0220022900a702211a200228009f02212220022002418c026a41056a2900003700ed012002200229028c023703e801200220022900ed013700b501200220022903e8013703b001200220022900b5013700a501200220022903b0013703a001200220022900a50137009501200220022903a0013703900120024180016a41086a20024190016a41086a290300370300200220022903900137038001202241087621232025421888a72107201a422088a72126410021240c050b200242003703c001200128020022042802042206450d12200428020022082d0000210720042006417f6a2205360204200241013602c0012004200841016a360200200220073a00c4012005450d12200428020022082d0000210720042006417e6a22053602042004200841016a360200200241023602c001200220073a00c5012005450d12200428020022082d0000210720042006417d6a22053602042004200841016a360200200241033602c001200220073a00c6012005450d12200428020022082d0000210720042006417c6a3602042004200841016a360200200220073a00c701200241043602c00120022903c001221aa74104490d08200241186a2001108c0220022802180d1220042802042208200228021c2206490d122006417f4c0d0e0240024020060d00410121070c010b200610382207450d1020074100200610d60b1a200428020421080b20082006490d11200720042802002205200610d40b1a2004200820066b3602042004200520066a360200201a423888a72108201a422088a7210941012124200621260c030b200242003703c001200128020022042802042206450d11200428020022082d0000210720042006417f6a2205360204200241013602c0012004200841016a360200200220073a00c4012005450d11200428020022082d0000210720042006417e6a22053602042004200841016a360200200241023602c001200220073a00c5012005450d11200428020022082d0000210720042006417d6a22053602042004200841016a360200200241033602c001200220073a00c6012005450d11200428020022082d0000210720042006417c6a3602042004200841016a360200200220073a00c701200241043602c00120022903c001221aa74104490d09200241086a2001108c0220022802080d1120042802042208200228020c2206490d112006417f4c0d0d0240024020060d00410121070c010b200610382207450d0f20074100200610d60b1a200428020421080b20082006490d10200720042802002205200610d40b1a2004200820066b3602042004200520066a360200201a423888a72108201a422088a7210941022124200621260c020b200242003703c001200128020022042802042206450d10200428020022082d0000210720042006417f6a2205360204200241013602c0012004200841016a360200200220073a00c4012005450d10200428020022082d0000210720042006417e6a22053602042004200841016a360200200241023602c001200220073a00c5012005450d10200428020022082d0000210720042006417d6a22053602042004200841016a360200200241033602c001200220073a00c6012005450d10200428020022082d0000210720042006417c6a3602042004200841016a360200200220073a00c701200241043602c00120022903c001221aa74104490d07200241106a2001108c0220022802100d102004280204220820022802142206490d102006417f4c0d0c0240024020060d00410121070c010b200610382207450d0e20074100200610d60b1a200428020421080b20082006490d0f200720042802002205200610d40b1a2004200820066b3602042004200520066a360200201a423888a72108201a422088a7210941032124200621260c010b200128020022042802042206450d0f200428020022082d0000210720042006417f6a3602042004200841016a36020020070d0f200241c0016a200110f00420022802c00122084102460d0f20022802c801210620022802c401210741002123410421240b20024180016a41086a20024190016a41086a2903003703002002200229039001370380012023410874200841ff01717221222026ad4220862006ad84211a0b202141016a2121200241f0006a41086a222720024180016a41086a29030037030020022002290380013703700240200228026822052002280264470d00200241e0006a2005108203200228026821050b20022802602208200541246c6a220620093b00012006201a37000c2006200736000820062022360004200620243a000020062002290370370014200641036a20094110763a00002006411c6a20272903003700002002200541016a36026820212019470d000b20012001280204417f6a3602040c010b20012007417f6a3602042008450d0d0b2002290264211a200020022f01383b00172000200a36001a200020022f01343b001e2000200b360021200020022f01303b0025200041106a20022f013c3b0000200041136a200e360000200041126a2002413c6a41026a2d00003a0000200041196a200241386a41026a2d00003a0000200041206a200241346a41026a2d00003a0000200041276a200241306a41026a2d00003a00002000412c6a200d360000200041286a200c360000200041336a20143600002000201036003a20002011360041200041306a20022f014c3b0000200041326a200241cc006a41026a2d00003a0000200041396a200241c8006a41026a2d00003a0000200020022f01483b0037200041c0006a200241c4006a41026a2d00003a0000200020022f01443b003e200020022f01403b0045200041c7006a200241c0006a41026a2d00003a0000200041cc006a2013360000200041c8006a2012360000200041d2006a200241dc006a41026a2d00003a0000200041d0006a20022f015c3b0000200041d3006a2018360000200041d9006a200241d8006a41026a2d00003a0000200020022f01583b00572000201536005a200041e0006a200241d4006a41026a2d00003a0000200020022f01543b005e20002016360061200041e7006a200241d0006a41026a2d00003a0000200020022f01503b0065200041ec006a2003360000200041e8006a20173600002000201a370208200020083602042000200f3602000c0d0b41958bcc00411b41b08bcc001035000b41958bcc00411b41b08bcc001035000b41958bcc00411b41b08bcc001035000b200041003602040c090b200041003602040c080b200041003602040c070b1034000b1032000b200041003602040c040b200710390b2002280260210820022802682204450d00200441246c21062008210403400240024002400240024020042d00000e050400010204030b2004410c6a280200450d03200441086a28020010390c030b2004410c6a280200450d02200441086a28020010390c020b2004410c6a280200450d01200441086a28020010390c010b200441086a280200450d00200441046a28020010390b200441246a21042006415c6a22060d000b0b20022802642204450d00200441246c450d00200810390b200041003602040b200241b0026a24000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42f0007e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141f0006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141f0006e360200200241206a24000f0b1034000bd80503037f017e087f23004190016b2202240020022001108c02024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020028020441246e2204200420034b1bad42247e2205422088a70d002005a72204417f4c0d000240024020040d00410421060c010b200410382206450d020b2001200128020441016a220736020420024100360210200220063602082002200441246e36020c200720012802084b0d02024002402003450d00200241e8006a4101722107410021040340200241e8006a200110f404200241c0006a41086a2208200741086a290000370300200241c0006a41106a2209200741106a290000370300200241c0006a41186a220a200741186a290000370300200241c0006a411f6a220b2007411f6a2800003600002002200729000037034020022d0068220c4105460d02200241186a411f6a220d200b280000360000200241186a41186a220b200a290300370300200241186a41106a220a2009290300370300200241186a41086a220920082903003703002002200229034037031802402004200228020c470d00200241086a200410820320022802082106200228021021040b2006200441246c6a2204200c3a000020042002290318370001200441096a2009290300370000200441116a200a290300370000200441196a200b290300370000200441206a200d2800003600002002200228021041016a22043602102003417f6a22030d000b200128020421070b2000200229030837020020012007417f6a360204200041086a200241086a41086a2802003602000c050b20004100360200200228020821062004450d03200441246c2107200621040340024020042d00004102470d00200441086a280200450d00200441046a28020010390b200441246a21042007415c6a22070d000c040b0b1034000b1032000b200041003602000b200228020c2204450d00200441246c450d00200610390b20024190016a24000bfd0501147f230041d0006b2202240020022001108c02024002402002280200450d00200041003602000c010b02400240024020022802042203200128020022042802044105762205200520034b1b22054105742206417f4c0d0041012107024002402005450d00200610382207450d010b20012001280204220841016a2206360204200241003602102002200536020c20022007360208200620012802084b0d0202402003450d00200241286a4104722109200241c1006a210a2002413a6a210b200241336a210c4100210d4100210e0340200e41016a210e2004280204210f417f210641002105024002400340200f2005460d01200428020022102d000021112004200f20066a3602042004201041016a360200200920056a20113a00002002200541016a22103602282006417f6a21062010210520104120460d020c000b0b20004100360200200228020c21050c060b200241206a41026a2206200c41026a2d00003a00002002411c6a41026a2210200b41026a2d00003a0000200220092f01003b01242002200c2f00003b01202002200b2f00003b011c2002200941026a2d00003a00262002280248210f20022802442111200228003d211220022801362113200228002f2114200241186a41026a2215200a41026a2d00003a00002002200a2f00003b01180240200d200228020c470d00200241086a200d4101109e02200228020821072002280210210d0b2007200d4105746a220520022f01243b0000200541026a20022d00263a0000200541096a20062d00003a0000200520022f01203b0007200541106a20102d00003a0000200520022f011c3b000e200520143600032005201336000a20052012360011200541176a20152d00003a0000200520022f01183b00152005200f36001c200520113600182002200d41016a220d360210200e2003470d000b0b2001200836020420002002290308370200200041086a200241086a41086a2802003602000c040b1032000b1034000b200041003602000b200541ffffff3f71450d00200228020810390b200241d0006a24000be63a06047f017e027f017e157f017e230041c0046b22022400024002402001280200220328020422044108490d002003280200220529000021062003200441786a22073602042003200541086a36020002402007450d0020052d000821072003200441776a22083602042003200541096a36020002400240024020070e020001030b20084108490d022005290009210920032004416f6a3602042003200541116a360200411120046b210a200241e0036a410472210b41002107200421080340200a20076a450d03200520076a220c41116a2d0000210d20032008416e6a3602042003200c41126a360200200b20076a200d3a00002002200741016a220c3602e0032008417f6a2108200c2107200c4120470d000b200241b4046a41026a2207200241ed036a2d00003a00002002200241f9036a220d2800003602f0022002200241fc036a2800003600f302200220022f01e4033b01b804200220022d00e6033a00ba042002200241eb036a2f00003b01b404200241ee036a280100210e200241f5036a280000210f200241e0036a41206a280200211020022800e703211120022800f3022112200241b0046a41026a220a200241f4036a2d00003a00002002200241e0036a41126a2f01003b01b004200241ac046a41026a220b200241fb036a2d00003a00002002200d2f00003b01ac04200241ec026a41026a20022d00ba043a0000200220022f01b8043b01ec02200241e8026a41026a20072d00003a0000200220022f01b4043b01e802200241e4026a41026a200a2d00003a0000200220022f01b0043b01e402200241e0026a41026a200b2d00003a0000200220022f01ac043b01e00241002107200241003602e0032005200c6a210b2008416e6a2105200c20046b41116a210a200241e0036a41047221130340200a20076a450d03200b20076a220c41116a2d0000210d200320053602042003200c41126a360200201320076a200d3a00002002200741016a220c3602e0032005417f6a21052004417f6a2104200c2107200c4120470d000b20024180046a280200210a200241e0036a41156a2800002113200241ee036a2801002114200241f9036a280000210720022800e7032115200241be046a200241ff036a2d00003a0000200220073602b804200241b4046a41026a220420022d00ba043a00002002200241fd036a2f00003b01bc04200220022f01e4033b01b004200220022d00e6033a00b204200220073b01b40420022800bb042116200241ac046a41026a2207200241ed036a2d00003a00002002200241eb036a2f00003b01ac04200241a8046a41026a2205200241f4036a2d00003a00002002200241f2036a2f01003b01a804200241a4046a41026a220d20042d00003a0000200220022f01b4043b01a404200241dc036a41026a220420022d00b2043a0000200220022f01b0043b01dc03200241d8036a41026a221720072d00003a0000200220022f01ac043b01d803200241d4036a41026a220720052d00003a0000200220022f01a8043b01d403200241d0036a41026a2205200d2d00003a0000200220022f01a4043b01d0032008200c6b2208416f6a4104490d02200241c8036a41026a20172d00003a0000200241c4036a41026a20072d00003a0000200241c0036a41026a20052d00003a0000200b200c6a220741116a280000210b20032008416b6a3602042003200741156a360200200220022f01dc033b01cc03200220022f01d8033b01c803200220022f01d4033b01c403200220022f01d0033b01c003200220042d00003a00ce03200241e0036a200110f00a20022d00e0034101460d02200241a8036a20024199046a290000370300200241a0036a20024191046a29000037030020024198036a20024189046a290000370300200241f0026a41206a20024181046a29000037030020024188036a200241f9036a29000037030020024180036a200241e0036a41116a290000370300200241f8026a200241e9036a290000370300200220022900e1033703f002200220022f01cc033b01bc03200220022d00ce033a00be03200241b8036a41026a200241c8036a41026a2d00003a0000200241b4036a41026a200241c4036a41026a2d00003a0000200241b0036a41026a200241c0036a41026a2d00003a0000200220022f01c8033b01b803200220022f01c4033b01b403200220022f01c0033b01b003200241e0036a410472210d2003280204210841002107417f2104034020082007460d03200328020022052d0000210c2003200820046a3602042003200541016a360200200d20076a200c3a00002002200741016a22053602e0032004417f6a21042005210720054120470d000b20024180046a2802002104200241f5036a280000210c200241ee036a280100210d200241f9036a280000210720022800e7032117200241be046a200241ff036a2d00003a0000200220073602b804200241b4046a41026a221820022d00ba043a00002002200241fd036a2f00003b01bc04200220022f01e4033b01b004200220022d00e6033a00b204200220073b01b40420022800bb042107200241ac046a41026a2219200241ed036a2d00003a00002002200241eb036a2f00003b01ac04200241a8046a41026a221a200241f4036a2d00003a00002002200241f2036a2f01003b01a804200241a4046a41026a221b20182d00003a0000200220022f01b4043b01a404200241dc036a41026a221820022d00b2043a0000200220022f01b0043b01dc03200241d8036a41026a221c20192d00003a0000200220022f01ac043b01d803200241d4036a41026a2219201a2d00003a0000200220022f01a8043b01d403200241d0036a41026a221a201b2d00003a0000200220022f01a4043b01d003200820056b22054104490d022003280200221b280000210820032005417c6a3602042003201b41046a360200200241c8036a41026a201c2d00003a0000200241c4036a41026a20192d00003a0000200241c0036a41026a201a2d00003a0000200220022f01dc033b01cc03200220022f01d8033b01c803200220022f01d4033b01c403200220022f01d0033b01c003200220182d00003a00ce03200241e0036a200110f00a20022d00e0034101460d02200241e8006a41386a20024199046a290000370300200241e8006a41306a20024191046a290000370300200241e8006a41286a20024189046a290000370300200241e8006a41206a20024181046a290000370300200241e8006a41186a200241f9036a290000370300200241e8006a41106a200241f1036a290000370300200241e8006a41086a200241e9036a290000370300200220022900e103370368200220022f01cc033b01b801200220022d00ce033a00ba01200241b4016a41026a200241c8036a41026a2d00003a0000200241b0016a41026a200241c4036a41026a2d00003a0000200241ac016a41026a200241c0036a41026a2d00003a0000200220022f01c8033b01b401200220022f01c4033b01b001200220022f01c0033b01ac012002200241ec026a41026a2d00003a0062200220022f01ec023b0160200241dc006a41026a200241e8026a41026a2d00003a0000200220022f01e8023b015c200241d8006a41026a200241e4026a41026a2d00003a0000200220022f01e4023b0158200241d4006a41026a200241e0026a41026a2d00003a0000200220022f01e0023b0154200220022d00be033a00de02200220022f01bc033b01dc02200241d8026a41026a2203200241b8036a41026a2d00003a0000200220022f01b8033b01d802200241d4026a41026a2205200241b4036a41026a2d00003a0000200220022f01b4033b01d402200241d0026a41026a2201200241b0036a41026a2d00003a0000200220022f01b0033b01d00220024190026a41386a2218200241f0026a41386a29030037030020024190026a41306a2219200241f0026a41306a29030037030020024190026a41286a221a200241f0026a41286a29030037030020024190026a41206a221b200241f0026a41206a29030037030020024190026a41186a221c200241f0026a41186a29030037030020024190026a41106a221d200241f0026a41106a29030037030020024190026a41086a221e200241f0026a41086a290300370300200220022903f00237039002200220022d00de023a008e02200220022f01dc023b018c0220024188026a41026a20032d00003a0000200220022f01d8023b01880220024184026a41026a20052d00003a0000200220022f01d4023b01840220024180026a41026a20012d00003a0000200220022f01d0023b018002200241c0016a41386a2018290300370300200241c0016a41306a2019290300370300200241c0016a41286a201a290300370300200241c0016a41206a201b290300370300200241c0016a41186a201c290300370300200241c0016a41106a201d290300370300200241c0016a41086a201e29030037030020022002290390023703c0014200211f0c010b20084108490d012005290009210920032004416f6a3602042003200541116a360200411120046b210a200241e0036a410472210b41002107200421080340200a20076a450d02200520076a220c41116a2d0000210d20032008416e6a3602042003200c41126a360200200b20076a200d3a00002002200741016a220c3602e0032008417f6a2108200c2107200c4120470d000b200241e0036a41206a2802002110200241f5036a280000210f200241ee036a280100210e200241f9036a280000210720022800e7032111200241f6026a200241ff036a2d00003a0000200220073602f002200241b8046a41026a220d20022d00f2023a00002002200241fd036a2f00003b01f402200220022f01e4033b01b404200220022d00e6033a00b604200220073b01b80420022800f3022112200241b0046a41026a2207200241ed036a2d00003a00002002200241eb036a2f00003b01b004200241ac046a41026a220a200241f4036a2d00003a00002002200241e0036a41126a2f01003b01ac04200241a8046a41026a220b200d2d00003a0000200220022f01b8043b01a804200241ec026a41026a20022d00b6043a0000200220022f01b4043b01ec02200241e8026a41026a20072d00003a0000200220022f01b0043b01e802200241e4026a41026a200a2d00003a0000200220022f01ac043b01e402200241e0026a41026a200b2d00003a0000200220022f01a8043b01e00241002107200241003602e0032005200c6a210b2008416e6a2105200c20046b41116a210a200241e0036a41047221130340200a20076a450d02200b20076a220c41116a2d0000210d200320053602042003200c41126a360200201320076a200d3a00002002200741016a220c3602e0032005417f6a21052004417f6a2104200c2107200c4120470d000b20024180046a280200210a200241e0036a41156a2800002113200241ee036a2801002114200241f9036a280000210720022800e7032115200241be046a200241ff036a2d00003a0000200220073602b804200241b4046a41026a220420022d00ba043a00002002200241fd036a2f00003b01bc04200220022f01e4033b01b004200220022d00e6033a00b204200220073b01b40420022800bb042116200241ac046a41026a2207200241ed036a2d00003a00002002200241eb036a2f00003b01ac04200241a8046a41026a2205200241f4036a2d00003a00002002200241f2036a2f01003b01a804200241a4046a41026a220d20042d00003a0000200220022f01b4043b01a404200241dc036a41026a220420022d00b2043a0000200220022f01b0043b01dc03200241d8036a41026a221720072d00003a0000200220022f01ac043b01d803200241d4036a41026a220720052d00003a0000200220022f01a8043b01d403200241d0036a41026a2205200d2d00003a0000200220022f01a4043b01d0032008200c6b2208416f6a4104490d01200241c8036a41026a20172d00003a0000200241c4036a41026a20072d00003a0000200241c0036a41026a20052d00003a0000200b200c6a220741116a280000210b20032008416b6a3602042003200741156a360200200220022f01dc033b01cc03200220022f01d8033b01c803200220022f01d4033b01c403200220022f01d0033b01c003200220042d00003a00ce03200241e0036a200110f00a20022d00e0034101460d01200241a8036a20024199046a290000370300200241a0036a20024191046a29000037030020024198036a20024189046a290000370300200241f0026a41206a20024181046a29000037030020024188036a200241f9036a29000037030020024180036a200241e0036a41116a290000370300200241f8026a200241e9036a290000370300200220022900e1033703f002200220022f01cc033b01bc03200220022d00ce033a00be03200241b8036a41026a200241c8036a41026a2d00003a0000200241b4036a41026a200241c4036a41026a2d00003a0000200241b0036a41026a200241c0036a41026a2d00003a0000200220022f01c8033b01b803200220022f01c4033b01b403200220022f01c0033b01b003200241e0036a410472210d2003280204210841002107417f2104034020082007460d02200328020022052d0000210c2003200820046a3602042003200541016a360200200d20076a200c3a00002002200741016a22053602e0032004417f6a21042005210720054120470d000b200241b0046a41026a2218200241ed036a2d00003a00002002200241f9036a22192800003602b8042002200241fc036a2800003600bb04200220022f01e4033b01b404200220022d00e6033a00b6042002200241eb036a2f00003b01b004200241ee036a280100210d200241f5036a280000210c20024180046a280200210420022800e703211720022800bb042107200241ac046a41026a221a200241f4036a2d00003a00002002200241f2036a2f01003b01ac04200241a8046a41026a221b200241fb036a2d00003a0000200220192f00003b01a804200241dc036a41026a221920022d00b6043a0000200220022f01b4043b01dc03200241d8036a41026a221c20182d00003a0000200220022f01b0043b01d803200241d4036a41026a2218201a2d00003a0000200220022f01ac043b01d403200241d0036a41026a221a201b2d00003a0000200220022f01a8043b01d003200820056b22054104490d012003280200221b280000210820032005417c6a3602042003201b41046a360200200241c8036a41026a201c2d00003a0000200241c4036a41026a20182d00003a0000200241c0036a41026a201a2d00003a0000200220022f01dc033b01cc03200220022f01d8033b01c803200220022f01d4033b01c403200220022f01d0033b01c003200220192d00003a00ce03200241e0036a200110f00a20022d00e0034101460d01200241e8006a41386a20024199046a290000370300200241e8006a41306a20024191046a290000370300200241e8006a41286a20024189046a290000370300200241e8006a41206a20024181046a290000370300200241e8006a41186a200241f9036a290000370300200241e8006a41106a200241f1036a290000370300200241e8006a41086a200241e9036a290000370300200220022900e103370368200220022f01cc033b01b801200220022d00ce033a00ba01200241b4016a41026a200241c8036a41026a2d00003a0000200241b0016a41026a200241c4036a41026a2d00003a0000200241ac016a41026a200241c0036a41026a2d00003a0000200220022f01c8033b01b401200220022f01c4033b01b001200220022f01c0033b01ac012002200241ec026a41026a2d00003a0062200220022f01ec023b0160200241dc006a41026a200241e8026a41026a2d00003a0000200220022f01e8023b015c200241d8006a41026a200241e4026a41026a2d00003a0000200220022f01e4023b0158200241d4006a41026a200241e0026a41026a2d00003a0000200220022f01e0023b0154200220022d00be033a00de02200220022f01bc033b01dc02200241d8026a41026a2203200241b8036a41026a2d00003a0000200220022f01b8033b01d802200241d4026a41026a2205200241b4036a41026a2d00003a0000200220022f01b4033b01d402200241d0026a41026a2201200241b0036a41026a2d00003a0000200220022f01b0033b01d00220024190026a41386a2218200241f0026a41386a29030037030020024190026a41306a2219200241f0026a41306a29030037030020024190026a41286a221a200241f0026a41286a29030037030020024190026a41206a221b200241f0026a41206a29030037030020024190026a41186a221c200241f0026a41186a29030037030020024190026a41106a221d200241f0026a41106a29030037030020024190026a41086a221e200241f0026a41086a290300370300200220022903f00237039002200220022d00de023a008e02200220022f01dc023b018c0220024188026a41026a20032d00003a0000200220022f01d8023b01880220024184026a41026a20052d00003a0000200220022f01d4023b01840220024180026a41026a20012d00003a0000200220022f01d0023b018002200241c0016a41386a2018290300370300200241c0016a41306a2019290300370300200241c0016a41286a201a290300370300200241c0016a41206a201b290300370300200241c0016a41186a201c290300370300200241c0016a41106a201d290300370300200241c0016a41086a201e29030037030020022002290390023703c0014201211f0b200241cc006a41026a220320024188026a41026a2d00003a0000200241c8006a41026a220520024184026a41026a2d00003a0000200241c4006a41026a220120024180026a41026a2d00003a0000200241386a2218200241c0016a41386a290300370300200241306a2219200241c0016a41306a290300370300200241286a221a200241c0016a41286a290300370300200241206a221b200241c0016a41206a290300370300200241186a221c200241c0016a41186a290300370300200241106a221d200241c0016a41106a290300370300200241086a221e200241c0016a41086a290300370300200220022d008e023a0052200220022f018c023b0150200220022f0188023b014c200220022f0184023b0148200220022f0180023b0144200220022903c00137030020004183016a20173600002000200d36008a012000200c3600910120004182016a20022d00ba013a000020004180016a20022f01b8013b010020004189016a200241b4016a41026a2d00003a0000200020022f01b4013b00870120004190016a200241b0016a41026a2d00003a0000200020022f01b0013b008e0120004197016a200241ac016a41026a2d00003a0000200020022f01ac013b0095012000200436009c0120004198016a2007360000200041d8016a200241e8006a41386a290300370300200041d0016a200241e8006a41306a290300370300200041c8016a200241e8006a41286a290300370300200041c0016a200241e8006a41206a290300370300200041b8016a200241e8006a41186a290300370300200041b0016a200241e8006a41106a290300370300200041a8016a200241e8006a41086a290300370300200041a0016a2002290368370300200041e2016a20022d00623a0000200041e0016a20022f01603b0100200041e3016a2011360000200041e9016a200241dc006a41026a2d00003a0000200020022f015c3b00e7012000200e3600ea01200041f0016a200241d8006a41026a2d00003a0000200020022f01583b00ee012000200f3600f101200041f7016a200241d4006a41026a2d00003a0000200020022f01543b00f501200020103600fc01200041f8016a2012360000200041186a200b360200200020093703102000201f370308200020063703002000201536001f200020022f01503b011c2000411e6a20022d00523a000020002014360026200020022f014c3b0023200041256a20032d00003a0000200020022f01483b002a2000412c6a20052d00003a00002000201336002d200041336a20012d00003a0000200020022f01443b0031200041386a200a36000020002016360034200041f4006a2018290300370200200041ec006a2019290300370200200041e4006a201a290300370200200041dc006a201b290300370200200041d4006a201c290300370200200041cc006a201d290300370200200041c4006a201e2903003702002000200229030037023c200041fc006a20083602000c020b200042023703080c010b200042023703080b200241c0046a24000b9d0101037f230041800f6b220124002000200028020441016a22023602044100210302400240200220002802084b0d00200141c0076a200010940220012802c0072102200141046a200141c0076a41047241bc0710d40b1a20024126460d0041c00710382203450d0120032002360200200341046a200141046a41bc0710d40b1a20002000280204417f6a3602040b200141800f6a240020030f0b1032000b8d0c010f7f230041306b22022400024002400240024002400240024002400240200128020022012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602004100210720050e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c060b02402005417f6a41ff01714121490d00200041063a00000c060b024002402005417f6a22080d00410121090c010b200810382209450d0720094100200810d60b1a200128020421060b024020062008490d00200920012802002203200810d40b1a2001200620086b3602042001200320086a360200410121072008210a0c050b200041063a0000200910390c050b2003417f6a2108200241086a41047221054100210b417e210c034002402008200b470d00200041063a00000c060b2004200b6a220d41016a2d0000210e20012003200c6a3602042001200d41026a3602002005200b6a200e3a0000200c417f6a210c200b41016a220d210b200d4120470d000b200241086a41086a2802002201410874200228020c220e411876722109200241146a2f0100200241166a2d000041107472410874200141187672210a2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d000041107472210b200241176a28000021082002411e6a280100210f200241256a2800002110410221070c030b2003417f6a2108200241086a41047221054100210b417e210c034002402008200b470d00200041063a00000c050b2004200b6a220d41016a2d0000210e20012003200c6a3602042001200d41026a3602002005200b6a200e3a0000200c417f6a210c200b41016a220d210b200d4120470d000b200241086a41086a2802002201410874200228020c220e411876722109200241146a2f0100200241166a2d000041107472410874200141187672210a2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d000041107472210b200241176a28000021082002411e6a280100210f200241256a2800002110410321070c020b2003417f6a2108200241086a41047221054100210b417e210c034002402008200b470d00200041063a00000c040b2004200b6a220d41016a2d0000210e20012003200c6a3602042001200d41026a3602002005200b6a200e3a0000200c417f6a210c200b41016a220d210b200d4120470d000b200241086a41086a2802002201410874200228020c220e411876722109200241146a2f0100200241166a2d000041107472410874200141187672210a2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d000041107472210b200241176a28000021082002411e6a280100210f200241256a2800002110410421070c010b2003417f6a2108200241086a41047221054100210b417e210c034002402008200b470d00200041063a00000c030b2004200b6a220d41016a2d0000210e20012003200c6a3602042001200d41026a3602002005200b6a200e3a0000200c417f6a210c200b41016a220d210b200d4120470d000b200241086a41086a2802002201410874200228020c220e411876722109200241146a2f0100200241166a2d000041107472410874200141187672210a2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d000041107472210b200241176a28000021082002411e6a280100210f200241256a2800002110410521070b2000200e3b0001200020073a0000200041206a200b4110763a00002000411e6a200b3b0000200041196a200c4110763a0000200041176a200c3b0000200041126a200d4110763a0000200041106a200d3b0000200041036a200e4110763a00002000411a6a2010360000200041136a200f3600002000410c6a2008360000200041086a200a360000200041046a20093600000b200241306a24000f0b1032000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42c8007e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141c8006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141c8006e360200200241206a24000f0b1034000ba610010b7f230041f0006b210202402001280200220128020422030d00200041043a00000f0b200128020022042d0000210520012003417f6a22063602042001200441016a36020002400240024020050e020102000b200041043a00000f0b200041033a00000f0b0240024020060d00410321050c010b20042d0001210720012003417e6a22063602042001200441026a360200410321050240024002400240024020070e03000102050b200241306a410472210841002105417d2109034020062005460d04200420056a220a41026a2d0000210b2001200320096a3602042001200a41036a360200200820056a200b3a00002002200541016a220a3602302009417f6a2109200a2105200a4120470d000b200241e8006a41026a22012002413d6a2d00003a0000200241e4006a41026a2203200241c4006a2d00003a0000200220022f01343b016c200220022d00363a006e20022002413b6a2f00003b01682002200241c2006a2f01003b01642002413e6a2801002109200241c5006a280000210a200241cc006a280200210b200241d3006a2d000021082002280037210c200241e0006a41026a2204200241cb006a2d00003a0000200241dc006a41026a2205200241d2006a2d00003a00002002412c6a41026a20022d006e3a0000200241286a41026a20012d00003a0000200241246a41026a20032d00003a00002002200241c9006a2f00003b01602002200241d0006a2f01003b015c200220022f016c3b012c200220022f01683b0128200220022f01643b0124200241306a41026a20042d00003a0000200220022f01603b0130200241206a41026a20052d00003a0000200220022f015c3b0120410021050c020b200241306a410472210841002105417d2109034020062005460d03200420056a220a41026a2d0000210b2001200320096a3602042001200a41036a360200200820056a200b3a00002002200541016a220a3602302009417f6a2109200a2105200a4120470d000b200241e8006a41026a22012002413d6a2d00003a0000200241e4006a41026a2203200241c4006a2d00003a0000200220022f01343b016c200220022d00363a006e20022002413b6a2f00003b01682002200241c2006a2f01003b01642002413e6a2801002109200241c5006a280000210a200241cc006a280200210b200241d3006a2d000021082002280037210c200241e0006a41026a2204200241cb006a2d00003a0000200241dc006a41026a2205200241d2006a2d00003a00002002412c6a41026a20022d006e3a0000200241286a41026a20012d00003a0000200241246a41026a20032d00003a00002002200241c9006a2f00003b01602002200241d0006a2f01003b015c200220022f016c3b012c200220022f01683b0128200220022f01643b0124200241306a41026a20042d00003a0000200220022f01603b0130200241206a41026a20052d00003a0000200220022f015c3b0120410121050c010b200241306a410472210841002105417d2109034020062005460d02200420056a220a41026a2d0000210b2001200320096a3602042001200a41036a360200200820056a200b3a00002002200541016a220a3602302009417f6a2109200a2105200a4121470d000b41022105200241e8006a41026a22012002413d6a2d00003a0000200241e4006a41026a2203200241c4006a2d00003a0000200220022f01343b016c200220022d00363a006e20022002413b6a2f00003b01682002200241c2006a2f01003b01642002413e6a2801002109200241c5006a280000210a200241cc006a280200210b200241d3006a2f000021082002280037210c200241e0006a41026a2204200241cb006a2d00003a0000200241dc006a41026a2206200241d2006a2d00003a00002002412c6a41026a20022d006e3a0000200241286a41026a20012d00003a0000200241246a41026a20032d00003a00002002200241c9006a2f00003b01602002200241d0006a2f01003b015c200220022f016c3b012c200220022f01683b0128200220022f01643b0124200241306a41026a20042d00003a0000200220022f01603b0130200241206a41026a20062d00003a0000200220022f015c3b01200b200241ec006a41026a2002412c6a41026a2d00003a0000200241e8006a41026a200241286a41026a2d00003a0000200241e4006a41026a200241246a41026a2d00003a0000200241e0006a41026a200241306a41026a2d00003a0000200241dc006a41026a200241206a41026a2d00003a0000200220022f012c3b016c200220022f01283b0168200220022f01243b0164200220022f01303b0160200220022f01203b015c0c010b410321050b2002411c6a41026a2201200241ec006a41026a2d00003a0000200241186a41026a2203200241e8006a41026a2d00003a0000200241146a41026a2204200241e4006a41026a2d00003a0000200241106a41026a2206200241e0006a41026a2d00003a0000200220022f016c3b011c200220022f01683b0118200220022f01643b0114200220022f01603b01102002410c6a41026a2207200241dc006a41026a2d00003a0000200220022f015c3b010c024020054103460d00200020022f011c3b0001200041046a200c360000200041086a20022f01183b00002000410b6a20093600002000410f6a20022f01143b0000200041126a200a360000200041166a20022f01103b0000200041036a20012d00003a00002000410a6a20032d00003a0000200041116a20042d00003a0000200041186a20062d00003a0000200041196a200b360000200041206a20083b0000200020053a00002000411f6a20072d00003a00002000411d6a20022f010c3b00000f0b200041043a00000bb21503097f017e087f23004190016b2202240002400240024002402001280200220128020422030d00200041033a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240024020050e03000102030b2003417f6a2107200241106a410472210841002106417e21050340024020072006470d00200041033a00000c050b200420066a220941016a2d0000210a2001200320056a3602042001200941026a360200200820066a200a3a00002002200641016a22093602102005417f6a210520092106200941c000470d000b2002200241106a41356a2201290000370380012002200241cc006a29000037008701200220022f01143b017c200220022d00163a007e200241c1006a28000021062002413a6a2801002105200241336a28000021092002412c6a2802002103200241256a28000021042002411e6a280100210a2002280083012107200229008701210b20022800172108200241f8006a41026a220c2002411d6a2d00003a00002002200241106a410b6a2f00003b0178200241f4006a41026a220d200241246a2d00003a00002002200241106a41126a2f01003b0174200241f0006a41026a220e2002412b6a2d00003a00002002200241106a41196a2f00003b0170200241ec006a41026a220f200241326a2d00003a00002002200241106a41206a2f01003b016c200241e8006a41026a2210200241396a2d00003a00002002200241106a41276a2f00003b0168200241e4006a41026a2211200241c0006a2d00003a00002002200241106a412e6a2f01003b0164200241e0006a41026a2212200241c7006a2d00003a0000200220012f00003b0160200041046a2008360000200041036a20022d007e3a0000200020022f017c3b00012000410b6a200a360000200041086a20022f01783b00002000410a6a200c2d00003a0000200041126a20043600002000410f6a20022f01743b0000200041116a200d2d00003a0000200041166a20022f01703b0000200041186a200e2d00003a0000200041196a20033600002000411f6a200f2d00003a00002000411d6a20022f016c3b0000200041206a2009360000200041266a20102d00003a0000200041246a20022f01683b0000200041276a20053600002000412d6a20112d00003a00002000412b6a20022f01643b00002000412e6a2006360000200041346a20122d00003a0000200041326a20022f01603b0000200041396a200b370000200041356a2007360000200041003a00000c030b2003417f6a2107200241106a410472210841002106417e21050340024020072006470d00200041033a00000c040b200420066a220941016a2d0000210a2001200320056a3602042001200941026a360200200820066a200a3a00002002200641016a22093602102005417f6a210520092106200941c000470d000b2002200241106a41356a2201290000370380012002200241cc006a29000037008701200220022f01143b017c200220022d00163a007e2002411e6a2801002106200241256a28000021052002412c6a2802002109200241336a28000021032002413a6a2801002104200241c1006a280000210a200228001721072002280083012108200229008701210b200241f8006a41026a220c2002411d6a2d00003a00002002200241106a410b6a2f00003b0178200241f4006a41026a220d200241246a2d00003a00002002200241106a41126a2f01003b0174200241f0006a41026a220e2002412b6a2d00003a00002002200241106a41196a2f00003b0170200241ec006a41026a220f200241326a2d00003a00002002200241106a41206a2f01003b016c200241e8006a41026a2210200241396a2d00003a00002002200241106a41276a2f00003b0168200241e4006a41026a2211200241c0006a2d00003a00002002200241106a412e6a2f01003b0164200241e0006a41026a2212200241c7006a2d00003a0000200220012f00003b0160200041036a20022d007e3a0000200020022f017c3b0001200041086a20022f01783b00002000410a6a200c2d00003a00002000410f6a20022f01743b0000200041116a200d2d00003a0000200041166a20022f01703b0000200041186a200e2d00003a00002000411f6a200f2d00003a00002000411d6a20022f016c3b0000200041266a20102d00003a0000200041246a20022f01683b00002000412d6a20112d00003a00002000412b6a20022f01643b0000200041346a20122d00003a0000200041326a20022f01603b0000200041396a200b370000200041356a20083600002000412e6a200a360000200041276a2004360000200041206a2003360000200041196a2009360000200041126a20053600002000410b6a2006360000200041046a2007360000200041013a00000c020b2002410036021041c00021050340024020060d00200041033a00000c030b200128020022092d000021032001200941016a36020020012006417f6a3602042002280210220641c1004f0d03200241106a20066a41046a20033a00002002200641016a36021002402005450d002005417f6a2105200128020421060c010b0b200641c000490d03200241fc006a41026a22012002411d6a2d00003a0000200220022f01143b018001200220022d00163a0082012002200241106a410b6a2f00003b017c2002411e6a2801002106200241256a28000021052002412c6a2802002109200241336a28000021032002413a6a2801002104200241c1006a280000210a200241c8006a2802002107200241cf006a28000021082002280017210c200241f8006a41026a220d200241246a2d00003a0000200241f4006a41026a220e2002412b6a2d00003a0000200241f0006a41026a220f200241326a2d00003a0000200241ec006a41026a2210200241396a2d00003a0000200241e8006a41026a2211200241c0006a2d00003a00002002200241106a41126a2f01003b01782002200241106a41196a2f00003b01742002200241106a41206a2f01003b01702002200241106a41276a2f00003b016c2002200241106a412e6a2f01003b0168200241e4006a41026a2212200241c7006a2d00003a0000200241e0006a41026a2213200241ce006a2d00003a00002002200241106a41356a2f00003b01642002200241106a413c6a2f01003b01602002200241d3006a2f00003b010e200041036a20022d0082013a0000200020022f0180013b0001200041086a20022f017c3b00002000410a6a20012d00003a00002000410f6a20022f01783b0000200041116a200d2d00003a0000200041166a20022f01743b0000200041186a200e2d00003a00002000411f6a200f2d00003a00002000411d6a20022f01703b0000200041266a20102d00003a0000200041246a20022f016c3b00002000412d6a20112d00003a00002000412b6a20022f01683b0000200041346a20122d00003a0000200041326a20022f01643b00002000413b6a20132d00003a0000200041396a20022f01603b0000200041c0006a20022f010e3b00002000413c6a2008360000200041356a20073600002000412e6a200a360000200041276a2004360000200041206a2003360000200041196a2009360000200041126a20053600002000410b6a2006360000200041046a200c360000200041023a00000c010b200041033a00000b20024190016a24000f0b200220033a005f41ffc5ca00412b200241df006a419cc7ca0041acc6ca00103d000b41958bcc00411b41b08bcc001035000b850301077f230041106b22022400200241086a2001108c02024002400240024002402002280208450d00200041003602000c010b0240200228020c2203418080808002490d00200041003602000c010b02400240200341086a22042003490d0002402001280200220528020422062004417f6a22044103762201490d000240024020010d00410121070c010b200110382207450d0520074100200110d60b1a200528020421060b200620014f0d02200710390b200041003602000c020b200041003602000c010b200720052802002208200110d40b21072005200620016b3602042005200820016a36020002400240200441ffffffff014b0d00200720044103756a2205450d04200520074f0d010b02402001450d00200710390b200041003602000c010b200441f8ffffff017122042003490d032000200736020020002001ad42208620034103742001410674200420034b1bad843702040b200241106a24000f0b1032000b418495c500412f41b495c500105b000b41b5e2cc00412f41e4e2cc001035000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42d0007e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141d0006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141d0006e360200200241206a24000f0b1034000bb50b030c7f017e037f230041306b22022400200241206a200110f10402400240024002400240024002400240024020022802202203450d00200241286a280200210420022802242105200241186a2001108c0220022802180d064104210602400240200228021c2207200128020022082802044104762209200920074b1b2209410474220a417f4c0d0002402009450d00200a10382206450d020b2001200128020441016a220b3602044100210a2002410036022820022009360224200220063602200240200b20012802084d0d00200228022021090c080b02402007450d004100210a034002400240200828020422094104490d002008280200220b280000210c20082009417c6a3602042008200b41046a360200200241106a2001108c0220022802100d002008280204220b20022802142209490d002009417f4c0d040240024020090d004101210d0c010b20091038220d450d06200d4100200910d60b1a2008280204210b0b200b20094f0d01200d10390b20022802202109200a450d0a200a4104742101200941086a2108034002402008280200450d002008417c6a28020010390b200841106a2108200141706a2201450d0b0c000b0b2009ad220e422086200e84210e200d2008280200220f200910d40b210d2008200b20096b3602042008200f20096a3602000240200a2002280224470d00200241206a200a10fd02200228022021062002280228210a0b2006200a4104746a2209200d3602042009200c360200200941086a200e3702002002200228022841016a220a3602282007417f6a22070d000b2001280204210b20022802242109200228022021060b2001200b417f6a3602042006450d0802400240024020012802002208280204220b450d00200828020022072d0000210d2008200b417f6a3602042008200741016a3602004100210b0240200d0e020300010b200241086a2001108c0220022802080d002008280204220d200228020c2207490d002007417f4c0d030240024020070d004101210b0c010b20071038220b450d05200b4100200710d60b1a2008280204210d0b200d20074f0d01200b10390b200041003602000c080b200b2008280200220c200710d40b1a2008200d20076b3602042008200c20076a3602002007ad220e422086200e84210e0b20022001108c02200ea721010240024020022802000d002008280204220d20022802042207490d002007417f4c0d020240024020070d004101210c0c010b20071038220c450d04200c4100200710d60b1a2008280204210d0b200d20074f0d01200c10390b200041003602000c060b200c2008280200220f200710d40b21102008200d20076b220d3602042008200f20076a220c360200200d4104490d03200c28000021112008200d417c6a220f3602042008200c41046a3602000240200f4104490d002000200536020420002003360200200c28000421052008200d41786a3602042008200c41086a360200200041346a2005360200200041306a20113602002000412c6a2007360200200041286a2007360200200041246a2010360200200041206a200e422088a73602002000411c6a2001360200200041186a200b360200200041146a200a360200200041106a20093602002000410c6a2006360200200041086a20043602000c0b0b200041003602000c040b1034000b1032000b200041003602000c070b200041003602000b2007450d00201010390b200b450d002001450d00200b10390b0240200a450d00200a4104742101200641086a2108034002402008280200450d002008417c6a28020010390b200841106a2108200141706a22010d000b0b200941ffffffff0071450d02200610390c020b200228022441ffffffff0071450d00200910390b200041003602000b02402004450d002004410c6c21012003210803400240200841046a280200450d00200828020010390b2008410c6a2108200141746a22010d000b0b2005450d002005410c6c450d00200310390b200241306a24000bd40102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42c1007e2205a721032005422088a74521040240024020010d00200241003602100c010b200241186a41013602002002200141c1006c360214200220002802003602100b200220032004200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141c1006e360200200241206a24000f0b1034000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42f4027e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141f4026c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141f4026e360200200241206a24000f0b1034000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a2202280200108505200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a2202280200108505200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a2202280200108505200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a2202280200108505200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a2202280200108505200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a2202280200108505200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2202280200108505200228020010390f0b2000410c6a2202280200108505200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2202280200108505200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a2202280200108505200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a2202280200108505200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010e408200228020010390f0b200041286a2202280200108505200228020010390f0b0bb70101037f0240200128020422020d00200041023602000f0b20012002417f6a220336020420012001280200220441016a36020002400240024020042d00000e020102000b200041023602000f0b200041003602000f0b024020034104490d0020012002417b6a22033602042001200441056a36020020034104490d0020002004280001360204200041013602002001200241776a3602042001200441096a360200200041086a20042800053602000f0b200041023602000b830403037f017e057f230041206b22022400200241086a200110c10102400240024002402002280208450d00200041003602000c010b200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d012005a72204417f4c0d010240024020040d00410421060c010b200410382206450d030b200241003602182002200636021020022004410c6e360214024002402003450d004100210703402002200110c10120022802000d022001280204220820022802042204490d022004417f4c0d040240024020040d00410121090c010b200410382209450d0620094100200410d60b1a0b20092001280200220a200410d40b21092001200820046b3602042001200a20046a3602002004ad22054220862005842105024020072002280214470d00200241106a2007410110ec0120022802102106200228021821070b20062007410c6c6a22042005370204200420093602002002200228021841016a22073602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b200041003602002002280210210902402007450d002007410c6c21012009210403400240200441046a280200450d00200428020010390b2004410c6a2104200141746a22010d000b0b20022802142204450d002004410c6c450d00200910390b200241206a24000f0b1034000b1032000bdf0403037f017e027f230041f0016b2202240020024180016a2001108602024002400240024020022d0080014101460d00200241186a20024199016a290000370300200241106a20024191016a290000370300200241086a20024189016a2900003703002002200229008101370300200128020422034108490d012001280200220429000021052001200341786a3602042001200441086a36020020024180016a2001108d052002280284012203450d022002418c016a280200210620022802880121042002280280012107200241206a20024180016a41106a41e00010d40b1a20024180016a2001108d050240200228028401450d00200041f8006a20024180016a41f00010d40b1a20004180026a200241186a290300370000200041f8016a200241106a290300370000200041f0016a200241086a290300370000200041e8016a2002290300370000200041146a2006360200200020043602102000200336020c20002007360208200041186a200241206a41e00010d40b1a200020053703000c040b2000410036020c02402006450d00200641246c21002003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012000415c6a22000d000b0b2004450d03200441246c450d03200310390c030b2000410036020c0c020b2000410036020c0c010b2000410036020c0b200241f0016a24000ba60201067f230041106b22022400024002400240200128020422034104490d0020012003417c6a36020420012001280200220341046a360200200328000021042002200110870520022802002203450d01200241086a2802002105200228020421060240200128020422074104490d0020002006360208200020033602042000200436020020012007417c6a3602042000410c6a200536020020012001280200220341046a360200200041106a20032800003602000c030b2000410036020402402005450d002005410c6c21002003210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2006450d022006410c6c450d02200310390c020b200041003602040c010b200041003602040b200241106a24000bfa0102037f027e0240200128020422020d00200041033a00100f0b20012002417f6a220336020420012001280200220441016a360200024020042d00004101470d00024002400240024020034108490d002001200241776a22033602042001200441096a36020020034108490d002004290001210520012002416f6a22023602042001200441116a22033602002002450d032004290009210620012002417f6a3602042001200341016a36020041002101024020032d00000e03030200040b410221010c020b200041033a00100f0b410121010b200020013a001020002006370308200020053703000f0b200041033a00100f0b200041033a00100bbc0d02057f017e230041c0006b2202240002400240200128020422030d00200041053a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240024002400240024002400240024020050e050001020304050b200241186a2001108602024020022d00184101460d0020002002290019370001200041196a200241186a41196a290000370000200041116a200241186a41116a290000370000200041096a200241186a41096a290000370000200041003a00000c0a0b200041053a00000c090b200041013a00000c080b200241086a200110c101024020022802080d0020012802042204200228020c2203490d002003417f4c0d050240024020030d00410121050c010b200310382205450d0720054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041046a2005360000200041023a0000200041086a2003ad22074220862007843700000c080b200041053a00000c070b200241186a2001108602024020022d00184101460d0020002002290019370001200041196a200241186a41196a290000370000200041116a200241186a41116a290000370000200041096a200241186a41096a290000370000200041033a00000c070b200041053a00000c060b2006450d0420042d0001210520012003417e6a22063602042001200441026a360200200220053a001c2002410136021820060d010c040b200041053a00000c040b20042d0002210520012003417d6a22063602042001200441036a360200200220053a001d200241023602182006450d0220042d0003210520012003417c6a22063602042001200441046a360200200220053a001e200241033602182006450d0220042d0004210520012003417b6a22063602042001200441056a36020020024104360218200220053a001f2006450d0220042d0005210520012003417a6a22063602042001200441066a360200200241206a20053a0000200241053602182006450d0220042d000621052001200341796a22063602042001200441076a360200200241216a20053a0000200241063602182006450d0220042d000721052001200341786a22063602042001200441086a360200200241226a20053a0000200241073602182006450d0220042d000821052001200341776a22063602042001200441096a360200200241236a20053a0000200241083602182006450d0220042d000921052001200341766a220636020420012004410a6a360200200241246a20053a0000200241093602182006450d0220042d000a21052001200341756a220636020420012004410b6a360200200241256a20053a00002002410a3602182006450d0220042d000b21052001200341746a220636020420012004410c6a360200200241266a20053a00002002410b3602182006450d0220042d000c21052001200341736a220636020420012004410d6a360200200241276a20053a00002002410c3602182006450d0220042d000d21052001200341726a220636020420012004410e6a360200200241286a20053a00002002410d3602182006450d0220042d000e21052001200341716a220636020420012004410f6a360200200241296a20053a00002002410e3602182006450d0220042d000f21052001200341706a22063602042001200441106a3602002002412a6a20053a00002002410f3602182006450d0220042d0010210520012003416f6a22063602042001200441116a3602002002412b6a20053a0000200241103602182006450d0220042d0011210520012003416e6a22063602042001200441126a3602002002412c6a20053a0000200241113602182006450d0220042d0012210520012003416d6a22063602042001200441136a3602002002412d6a20053a0000200241123602182006450d0220042d0013210520012003416c6a22063602042001200441146a3602002002412e6a20053a0000200241133602182006450d022002412f6a20042d001422053a000020012003416b6a3602042001200441156a360200200041086a200241186a410b6a2f00003b00002000410a6a200241256a2d00003a00002000410f6a200241186a41126a2f01003b0000200041116a200241186a41146a2d00003a0000200220022f011c3b0114200220022d001e3a0016200241266a2801002101200241186a41156a2f00002103200228001f2104200041146a20053a0000200041126a20033b0000200041036a20022d00163a0000200020022f01143b00012000410b6a2001360000200041046a2004360000200041043a00000c030b1034000b1032000b200041053a00000b200241c0006a24000bc50506067f017e017f017e017f017e230041206b220224000240024020012802042203450d0020012003417f6a220436020420012001280200220541016a36020002400240024020052d0000220641037122074103460d0002400240024020070e03000102000b2006410276ad21080c040b410121072004450d0220012003417e6a3602042001200541026a36020020052d0001410874200672220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720044103490d0120012003417c6a3602042001200541046a36020020052f0001200541036a2d000041107472410874200672220141808004490d012001410276ad21080c020b0240024002400240200641027622090e0d00030303010303030303030302030b20044104490d0520012003417b6a3602042001200541056a360200200535000122084280808080045421074200210a0c060b20044108490d042001200341776a3602042001200541096a36020020052900012208428080808080808080015421074200210a0c050b20044110490d0320012003416f6a3602042001200541116a360200200541096a290000220a42808080808080808001542107200529000121080c040b200641334b0d02200941046a21042003417e6a2103200541026a21054100210641012107200241186a210b420021084200210a03402003417f460d012001200336020420012005360200200241106a2005417f6a3100004200200641037441f8007110d10b2003417f6a2103200541016a2105200b290300200a84210a20022903102008842108200641016a220641ff01712004490d000b2002427f427f41e80020094103746b41f8007110d80b2008200229030058200a200241086a290300220c58200a200c511b21070c030b0c020b4200210a410021070c010b410121070b20002008370308200041106a200a37030020002007ad370300200241206a24000bf50602057f017e230041b0016b2202240020024188016a200110860202400240024020022d0088014101460d00200241106a20024191016a290000370300200241186a20024199016a290000370300200241206a200241a1016a29000037030020022002290089013703082002200110c10120022802000d012002280204210320024188016a200110860202400240024020022d0088014101460d00200241286a41086a20024191016a2204290000370300200241286a41106a20024199016a2205290000370300200241286a41186a200241a1016a2206290000370300200220022900890137032820024188016a200110860220022d0088014101460d01200241c8006a41086a2004290000370300200241c8006a41106a2005290000370300200241c8006a41186a2006290000370300200220022900890137034820024188016a20011097052002280288012201450d02200229028c012107200041106a2002290308370000200041306a2002290328370000200041d0006a2002290348370000200041286a200241086a41186a290300370000200041206a200241086a41106a290300370000200041186a200241086a41086a290300370000200041386a200241286a41086a290300370000200041c0006a200241286a41106a290300370000200041c8006a200241286a41186a290300370000200041d8006a200241c8006a41086a290300370000200041e0006a200241c8006a41106a290300370000200041e8006a200241c8006a41186a2903003700002000200737020820002001360204200020033602000c050b200241286a41086a200241e8006a41086a290300370300200241286a41106a200241e8006a41106a290300370300200241286a41186a200241e8006a41186a29030037030020022002290368370328200041003602040c040b200241c8006a41086a200241e8006a41086a290300370300200241c8006a41106a200241e8006a41106a290300370300200241c8006a41186a200241e8006a41186a29030037030020022002290368370348200041003602040c030b200041003602040c020b200241086a41086a200241e8006a41086a290300370300200241086a41106a200241e8006a41106a290300370300200241086a41186a200241e8006a41186a29030037030020022002290368370308200041003602040c010b200041003602040b200241b0016a24000ba00503037f017e087f23004190016b220224002002200110c10102400240024002402002280200450d00200041003602000c010b20022802042203200128020441246e2204200420034b1bad42247e2205422088a70d012005a72206417f4c0d010240024020060d00410421070c010b200610382207450d030b4100210420024100360210200220073602082002200641246e36020c024002402003450d00200241e8006a41017221060340200241e8006a2001108b05200241c0006a41086a2208200641086a290000370300200241c0006a41106a2209200641106a290000370300200241c0006a41186a220a200641186a290000370300200241c0006a411f6a220b2006411f6a2800003600002002200629000037034020022d0068220c4105460d02200241186a411f6a220d200b280000360000200241186a41186a220b200a290300370300200241186a41106a220a2009290300370300200241186a41086a220920082903003703002002200229034037031802402004200228020c470d00200241086a200410820320022802082107200228021021040b2007200441246c6a2204200c3a000020042002290318370001200441096a2009290300370000200441116a200a290300370000200441196a200b290300370000200441206a200d2800003600002002200228021041016a22043602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b200041003602002002280208210302402004450d00200441246c2106200321040340024020042d00004102470d00200441086a280200450d00200441046a28020010390b200441246a21042006415c6a22060d000b0b200228020c2204450d00200441246c450d00200310390b20024190016a24000f0b1034000b1032000bf60101077f230041106b22022400200241086a200110c101024002402002280208450d00200041003602000c010b0240024002400240200228020c220341ffffffff03712003470d0020034102742204200128020422054b0d002004417f4c0d0102402004450d00200410382206450d0320064100200410d60b21072005200341027422084f0d04200710390c010b410421062005200341027422084f0d030b200041003602000c030b1034000b1032000b200620012802002207200810d40b21062001200520086b3602042001200720086a3602002000200636020020002003ad4220862004410276ad843702040b200241106a24000bea2006037f017e027f017e077f017e230041b0056b2202240002400240200128020422034108490d002001280200220429000021052001200341786a22063602042001200441086a36020002402006450d0020042d000821062001200341776a22073602042001200441096a36020002400240024020060e020001030b20074108490d022004290009210820012003416f6a3602042001200441116a360200200241e8046a200110860220022d00e8044101460d02200241a8036a41186a20024181056a2203290000370300200241a8036a41106a200241e8046a41116a290000370300200241a8036a41086a200241f1046a2204290000370300200220022900e9043703a803200241e8046a200110860220022d00e8044101460d02200241c8046a41186a2003290000370300200241c8046a41106a200241f9046a290000370300200241c8046a41086a2004290000370300200220022900e9043703c804200128020422034104490d0220012802002206280000210420012003417c6a3602042001200641046a360200200241a8046a41086a2203200241c8046a41086a290300370300200241a8046a41106a2206200241c8046a41106a290300370300200241a8046a41186a2207200241c8046a41186a290300370300200220022903c8043703a804200241e8046a200110ef0a20022d00e8044101460d0220024180046a200241a1056a290000370300200241f8036a20024199056a290000370300200241f0036a20024191056a290000370300200241e8036a20024189056a290000370300200241c8036a41186a20024181056a2209290000370300200241c8036a41106a200241f9046a220a290000370300200241c8036a41086a200241f1046a220b29000037030020024188046a41086a200329030037030020024188046a41106a200629030037030020024188046a41186a2007290300370300200220022900e9043703c803200220022903a80437038804200241e8046a200110860220022d00e8044101460d02200241c8046a41186a22032009290000370300200241c8046a41106a2206200a290000370300200241c8046a41086a2207200b290000370300200220022900e9043703c804200128020422094104490d022001280200220b280000210a20012009417c6a3602042001200b41046a360200200241a8046a41086a2007290300370300200241a8046a41106a2006290300370300200241a8046a41186a2003290300370300200220022903c8043703a804200241e8046a200110ef0a20022d00e8044101460d0220024188016a41386a200241a1056a29000037030020024188016a41306a20024199056a29000037030020024188016a41286a20024191056a29000037030020024188016a41206a20024189056a29000037030020024188016a41186a20024181056a29000037030020024188016a41106a200241f9046a29000037030020024188016a41086a200241f1046a290000370300200241c8016a41086a200241a8046a41086a290300370300200241c8016a41106a200241a8046a41106a290300370300200241c8016a41186a200241a8046a41186a290300370300200220022900e90437038801200220022903a8043703c801200241e8006a41186a200241a8036a41186a290300370300200241e8006a41106a200241a8036a41106a290300370300200241e8006a41086a200241a8036a41086a29030037030020024188036a41186a220120024188046a41186a29030037030020024188036a41106a220320024188046a41106a29030037030020024188036a41086a220620024188046a41086a290300370300200241c8026a41386a2207200241c8036a41386a290300370300200241c8026a41306a2209200241c8036a41306a290300370300200241c8026a41286a220b200241c8036a41286a290300370300200241c8026a41206a220c200241c8036a41206a290300370300200241c8026a41186a220d200241c8036a41186a290300370300200241c8026a41106a220e200241c8036a41106a290300370300200241c8026a41086a220f200241c8036a41086a290300370300200220022903a803370368200220022903880437038803200220022903c8033703c802200241a8026a41186a2001290300370300200241a8026a41106a2003290300370300200241a8026a41086a200629030037030020022002290388033703a802200241e8016a41386a2007290300370300200241e8016a41306a2009290300370300200241e8016a41286a200b290300370300200241e8016a41206a200c290300370300200241e8016a41186a200d290300370300200241e8016a41106a200e290300370300200241e8016a41086a200f290300370300200220022903c8023703e801420021100c010b20074108490d012004290009210820012003416f6a3602042001200441116a360200200241e8046a200110860220022d00e8044101460d01200241a8036a41186a20024181056a2203290000370300200241a8036a41106a200241e8046a41116a290000370300200241a8036a41086a200241f1046a2204290000370300200220022900e9043703a803200241e8046a200110860220022d00e8044101460d01200241c8046a41186a2003290000370300200241c8046a41106a200241f9046a290000370300200241c8046a41086a2004290000370300200220022900e9043703c804200128020422034104490d0120012802002206280000210420012003417c6a3602042001200641046a360200200241a8046a41086a2203200241c8046a41086a290300370300200241a8046a41106a2206200241c8046a41106a290300370300200241a8046a41186a2207200241c8046a41186a290300370300200220022903c8043703a804200241e8046a200110ef0a20022d00e8044101460d0120024180046a200241a1056a290000370300200241f8036a20024199056a290000370300200241f0036a20024191056a290000370300200241e8036a20024189056a290000370300200241c8036a41186a20024181056a2209290000370300200241c8036a41106a200241f9046a220a290000370300200241c8036a41086a200241f1046a220b29000037030020024188046a41086a200329030037030020024188046a41106a200629030037030020024188046a41186a2007290300370300200220022900e9043703c803200220022903a80437038804200241e8046a200110860220022d00e8044101460d01200241c8046a41186a22032009290000370300200241c8046a41106a2206200a290000370300200241c8046a41086a2207200b290000370300200220022900e9043703c804200128020422094104490d012001280200220b280000210a20012009417c6a3602042001200b41046a360200200241a8046a41086a2007290300370300200241a8046a41106a2006290300370300200241a8046a41186a2003290300370300200220022903c8043703a804200241e8046a200110ef0a20022d00e8044101460d0120024188016a41386a200241a1056a29000037030020024188016a41306a20024199056a29000037030020024188016a41286a20024191056a29000037030020024188016a41206a20024189056a29000037030020024188016a41186a20024181056a29000037030020024188016a41106a200241f9046a29000037030020024188016a41086a200241f1046a290000370300200241c8016a41086a200241a8046a41086a290300370300200241c8016a41106a200241a8046a41106a290300370300200241c8016a41186a200241a8046a41186a290300370300200220022900e90437038801200220022903a8043703c801200241e8006a41186a200241a8036a41186a290300370300200241e8006a41106a200241a8036a41106a290300370300200241e8006a41086a200241a8036a41086a29030037030020024188036a41186a220120024188046a41186a29030037030020024188036a41106a220320024188046a41106a29030037030020024188036a41086a220620024188046a41086a290300370300200241c8026a41386a2207200241c8036a41386a290300370300200241c8026a41306a2209200241c8036a41306a290300370300200241c8026a41286a220b200241c8036a41286a290300370300200241c8026a41206a220c200241c8036a41206a290300370300200241c8026a41186a220d200241c8036a41186a290300370300200241c8026a41106a220e200241c8036a41106a290300370300200241c8026a41086a220f200241c8036a41086a290300370300200220022903a803370368200220022903880437038803200220022903c8033703c802200241a8026a41186a2001290300370300200241a8026a41106a2003290300370300200241a8026a41086a200629030037030020022002290388033703a802200241e8016a41386a2007290300370300200241e8016a41306a2009290300370300200241e8016a41286a200b290300370300200241e8016a41206a200c290300370300200241e8016a41186a200d290300370300200241e8016a41106a200e290300370300200241e8016a41086a200f290300370300200220022903c8023703e801420121100b200241c8006a41186a2201200241a8026a41186a290300370300200241c8006a41106a2203200241a8026a41106a290300370300200241c8006a41086a2206200241a8026a41086a290300370300200241086a41086a2207200241e8016a41086a290300370300200241086a41106a2209200241e8016a41106a290300370300200241086a41186a220b200241e8016a41186a290300370300200241086a41206a220c200241e8016a41206a290300370300200241086a41286a220d200241e8016a41286a290300370300200241086a41306a220e200241e8016a41306a290300370300200241086a41386a220f200241e8016a41386a290300370300200220022903a802370348200220022903e80137030820004198016a200241c8016a41186a29030037030020004190016a200241c8016a41106a29030037030020004188016a200241c8016a41086a29030037030020004180016a20022903c801370300200041d8016a20024188016a41386a290300370300200041d0016a20024188016a41306a290300370300200041c8016a20024188016a41286a290300370300200041c0016a20024188016a41206a290300370300200041b8016a20024188016a41186a290300370300200041b0016a20024188016a41106a290300370300200041a8016a20024188016a41086a290300370300200041a0016a200229038801370300200041f8016a200241e8006a41186a290300370300200041f0016a200241e8006a41106a290300370300200041e8016a200241e8006a41086a290300370300200041e0016a2002290368370300200041186a20043602002000200837031020002010370308200020053703002000200229034837021c200041246a20062903003702002000412c6a2003290300370200200041346a20012903003702002000200229030837023c200041c4006a2007290300370200200041cc006a2009290300370200200041d4006a200b290300370200200041dc006a200c290300370200200041e4006a200d290300370200200041ec006a200e290300370200200041f4006a200f290300370200200041fc006a200a3602000c020b200042023703080c010b200042023703080b200241b0056a24000b7c01027f230041800f6b22012400200141c0076a200010a20220012802c0072102200141046a200141c0076a41047241bc0710d40b1a02400240024020024126460d0041c00710382200450d0220002002360200200041046a200141046a41bc0710d40b1a0c010b410021000b200141800f6a240020000f0b1032000b8d0a01097f230041e0006b220224000240024002400240024002400240024002400240024020012802042203450d0020012003417f6a220436020420012001280200220541016a22063602004100210720052d000022080e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c090b02402008417f6a41ff01714121490d00200041063a00000c090b024002402008417f6a22030d00410121090c010b200310382209450d0720094100200310d60b1a0b20042003490d0520092006200310d40b1a2001200420036b3602042001200520086a360200410121072003210a0c040b200241386a200110860241022107200241346a41026a220120022d003b3a0000200241206a41086a2205200241d0006a290300370300200241206a41106a2208200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002103200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2005290300370300200241086a41106a20082d00003a0000200220022f01343b011c200220022903203703080c040b200041063a00000c070b200241386a2001108602200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2205200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002103200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410321070c030b200041063a00000c060b200241386a2001108602200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2205200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a290300370320024020022d00384101460d00200241386a41086a2802002103200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410421070c020b200041063a00000c050b200241386a2001108602200241346a41026a220120022d003b3a0000200241206a41086a2207200241d0006a290300370300200241206a41106a2205200241d8006a2d00003a0000200220022f00393b01342002200241386a41106a29030037032020022d00384101460d03200241386a41086a2802002103200241c4006a280200210a200228023c21092002411c6a41026a20012d00003a0000200241086a41086a2007290300370300200241086a41106a20052d00003a0000200220022f01343b011c20022002290320370308410521070b200020073a0000200020022f011c3b00012000410c6a200a360000200041086a2003360000200041046a2009360000200041106a2002290308370000200041036a2002411e6a2d00003a0000200041186a200241086a41086a290300370000200041206a200241086a41106a2d00003a00000c030b200041063a0000200910390c020b1032000b200041063a00000b200241e0006a24000bf60c010b7f230041f0006b2202240002400240200128020422030d00200041043a00000c010b20012003417f6a220436020420012001280200220541016a36020002400240024020052d00000e020102000b200041043a00000c020b200041033a00000c010b024002402004450d0020012003417e6a22063602042001200541026a360200410321040240024002400240024020052d00010e03000102060b200241c8006a200110860220022d00484101460d04200241306a41026a20022d004b3a00002002412c6a41026a200241d2006a2d00003a0000200241286a41026a200241d9006a2d00003a0000200241246a41026a200241e0006a2d00003a0000200220022f00493b01302002200241d0006a2f01003b012c2002200241d7006a2f00003b01282002200241de006a2f01003b0124200241d3006a2800002107200241da006a2801002108200228024c2109200241206a41026a200241e7006a2d00003a00002002200241e5006a2f00003b0120200241e1006a280000210a200241e8006a2d0000210b410021040c020b200241c8006a20011086024101210420022d00484101460d03200241306a41026a20022d004b3a00002002412c6a41026a200241d2006a2d00003a0000200241286a41026a200241d9006a2d00003a0000200241246a41026a200241e0006a2d00003a0000200220022f00493b01302002200241d0006a2f01003b012c2002200241d7006a2f00003b01282002200241de006a2f01003b0124200241d3006a2800002107200241da006a2801002108200228024c2109200241206a41026a200241e7006a2d00003a00002002200241e5006a2f00003b0120200241e1006a280000210a200241e8006a2d0000210b0c010b200241c8006a410472210841002104417d2107034020062004460d022001200320076a3602042001200520046a220941036a360200200820046a200941026a2d00003a00002002200441016a22093602482007417f6a21072009210420094121470d000b41022104200241c0006a41026a2201200241d5006a2d00003a00002002413c6a41026a2203200241dc006a2d00003a0000200220022f014c3b0144200220022d004e3a00462002200241d3006a2f00003b01402002200241da006a2f01003b013c200241d6006a2801002107200241dd006a2800002108200241e4006a280200210a200241eb006a2f0000210b200228004f2109200241386a41026a2205200241e3006a2d00003a0000200241346a41026a2206200241ea006a2d00003a0000200241306a41026a20022d00463a00002002412c6a41026a20012d00003a0000200241286a41026a20032d00003a00002002200241e1006a2f00003b01382002200241e8006a2f01003b0134200220022f01443b0130200220022f01403b012c200220022f013c3b0128200241246a41026a20052d00003a0000200220022f01383b0124200241206a41026a20062d00003a0000200220022f01343b01200b200241c8006a41026a200241306a41026a2d00003a0000200241c4006a41026a2002412c6a41026a2d00003a0000200241c0006a41026a200241286a41026a2d00003a00002002413c6a41026a200241246a41026a2d00003a0000200241386a41026a200241206a41026a2d00003a0000200220022f01303b0148200220022f012c3b0144200220022f01283b0140200220022f01243b013c200220022f01203b01380c020b410321040c010b410321040b2002411c6a41026a2201200241c8006a41026a2d00003a0000200241186a41026a2203200241c4006a41026a2d00003a0000200241146a41026a2205200241c0006a41026a2d00003a0000200241106a41026a22062002413c6a41026a2d00003a0000200220022f01483b011c200220022f01443b0118200220022f01403b0114200220022f013c3b01102002410c6a41026a220c200241386a41026a2d00003a0000200220022f01383b010c024020044103460d00200020022f011c3b0001200041046a2009360000200041086a20022f01183b00002000410b6a20073600002000410f6a20022f01143b0000200041126a2008360000200041166a20022f01103b0000200041036a20012d00003a00002000410a6a20032d00003a0000200041116a20052d00003a0000200041186a20062d00003a0000200041196a200a360000200041206a200b3b0000200020043a00002000411f6a200c2d00003a00002000411d6a20022f010c3b00000c010b200041043a00000b200241f0006a24000bae3208037f017e157f017e177f017e0c7f017e230041d00f6b22022400200241206a200110c101024002400240024002400240024002400240024020022802200d0020022802242203200128020441d0006e2204200420034b1bad42d0007e2205422088a70d022005a72204417f4c0d020240024020040d00410421060c010b200410382206450d040b41002107200241003602e00a200220063602d80a2002200441d0006e22083602dc0a024002400240024020030d00410021070c010b200241800d6a4104722109200241b70d6a210a200241b00d6a210b200241a90d6a210c200241a20d6a210d2002419b0d6a210e200241940d6a210f2002418d0d6a2110410021080340200241800d6a200110f10920022802800d2211450d0320022902840d2105200128020422124104490d02200841016a210820012802002204280000211320012012417c6a3602042001200441046a360200200441056a2104417b2114200921150340201220146a2216417f460d032004417f6a2d000021172001201636020420012004360200201520173a0000200441016a2104201541016a21152014417f6a221441bb7f470d000b20022f01840d20022d00860d41107472211420022f00b50d200a2d000041107472211520022f01ae0d200b2d000041107472211620022f00a70d200c2d000041107472211720022f01a00d200d2d000041107472211220022f00990d200e2d000041107472211820022f01920d200f2d000041107472211920022f008b0d20102d000041107472211a20022902bc0d211b20022802b80d211c20022800b10d211d20022801aa0d211e20022800a30d211f200228029c0d212020022800950d2121200228018e0d212220022800870d21230240200720022802dc0a470d00200241d80a6a200710810520022802d80a210620022802e00a21070b2006200741d0006c6a220420153b0041200420163b003a200420173b0033200420123b002c200420183b0025200420193b001e2004201a3b0017200420143b01102004201b3700482004201c3600442004201d36003d2004201e3600362004201f36002f20042020360028200420213600212004202236001a200420233600132004201336020c2004200537020420042011360200200441c3006a20154110763a00002004413c6a20164110763a0000200441356a20174110763a00002004412e6a20124110763a0000200441276a20184110763a0000200441206a20194110763a0000200441196a201a4110763a0000200441126a20144110763a0000200220022802e00a41016a22073602e00a20082003470d000b20022802dc0a210820022802d80a21060b2006450d02200241186a200110c1012002280218450d030c090b2005428080808010540d00201110390b20022802d80a211702402007450d00200741d0006c2115201721040340200428020021140240200441086a22012802002216450d00201410390b2004201436020020012016360200200441d0006a2104201541b07f6a22150d000b0b20022802dc0a2204450d00200441d0006c450d00201710390b200041003602000c080b200228021c2209200128020441f4026e2204200420094b1bad42f4027e2205422088a70d002005a72204417f4c0d000240024020040d00410421140c010b200410382214450d020b4100210a200241003602a00120022014360298012002200441f4026e220336029c01024002402009450d00200241800d6a4104722112200241d80a6a41086a211c200241bd0d6a211d200241a80f6a4104722123200241a30d6a211e200241ae0d6a211f200241b50d6a2120200241b00d6a2124200241a90d6a2125200241a20d6a21262002419b0d6a2127200241940d6a21282002418d0d6a21290340200241800d6a20011094030240024020022802800d4101460d00200241d80a6a201241a40210d40b1a200241800d6a200110fd0820022802800d220f450d00201e2d0000212a201f2d0000212b20202d0000212c20022f01b60d212d20022800af0d212e20022802a80d211020022802a40d210e20022d00a00d212f20022802980d211920022903900d2105200228028c0d210d20022902840d211b20022f00a10d213020022f01ac0d213120022f00b30d2132200228029c0d210b200241a0086a200241d80a6a41a40210d40b1a200241106a200110c101024020022802100d0020022802142218200128020441c1006e2204200420184b1bad42c1007e2233422088a70d062033a72204417f4c0d060240024020040d00410121130c010b200410382213450d080b41002115200241003602b00f200220133602a80f2002200441c1006e3602ac0f024002402018450d004100211a4100210c034020012802042216450d02200128020022172d0000210420012016417f6a22033602042001201741016a3602000240024002402004417f6a0e020001050b41002104417e2114034020032004460d05201720046a221541016a2d000021112001201620146a3602042001201541026a360200201220046a20113a00002002200441016a22153602800d2014417f6a211420152104201541c000470d000b20242d0000210420252d0000211120262d0000210320272d0000211720282d0000211620292d0000211520022800b10d213420022801aa0d213520022800a30d2136200228029c0d213720022800950d2138200228018e0d213920022800870d213a20022f01ae0d212120022f00a70d212220022f01a00d213b20022f00990d213c20022f01920d213d20022f008b0d213e20022f01840d211420022d00860d213f20022900b50d2133201c201d280000360000201c41036a201d41036a280000360000200220333703d80a2014203f411074722114203e2015411074722115203d2016411074722116203c2017411074722117203b2003411074722103202220114110747221112021200441107472212120022900df0a21404100213b0c010b41002104417e2114034020032004460d04201720046a221541016a2d000021112001201620146a3602042001201541026a360200201220046a20113a00002002200441016a22153602800d2014417f6a211420152104201541c000470d000b20242d0000210420252d0000211120262d0000210320272d0000211720282d0000211620292d0000211520022800b10d213420022801aa0d213520022800a30d2136200228029c0d213720022800950d2138200228018e0d213920022800870d213a20022f01ae0d212120022f00a70d212220022f01a00d213b20022f00990d213c20022f01920d213d20022f008b0d213e20022f01840d211420022d00860d213f20022900b50d2133201c201d280000360000201c41036a201d41036a280000360000200220333703d80a2014203f411074722114203e2015411074722115203d2016411074722116203c2017411074722117203b2003411074722103202220114110747221112021200441107472212120022900df0a21404101213b0b200c41016a210c2033421888a7213c2033a721220240201a20022802ac0f470d00200241a80f6a201a10830520022802a80f211320022802b00f211a0b2013201a41c1006c6a220420223b0032200420213b002b200420113b0024200420033b001d200420173b0016200420163b000f200420153b0008200420143b0001200420403700392004203c3600352004203436002e200420353600272004203636002020042037360019200420383600122004203936000b2004203a3600042004203b3a0000200441346a20224110763a00002004412d6a20214110763a0000200441266a20114110763a00002004411f6a20034110763a0000200441186a20174110763a0000200441116a20164110763a00002004410a6a20154110763a0000200441036a20144110763a0000200220022802b00f41016a221a3602b00f200c2018470d000b201a410876211520022802a80f21130b200241d00a6a41046a2204202341046a2d00003a0000200220232802003602d00a2013450d01200241c80a6a41046a20042d00003a0000200220022802d00a3602c80a200241800d6a200110f10920022802800d220c0d0320022802c80a2204450d01200441c1006c450d01201310390c010b20022802ac0f2204450d00200441c1006c450d0020022802a80f10390b201ba721150240201b422088a72204450d002004410c6c2114200f210403400240200441046a280200450d00200428020010390b2004410c6a2104201441746a22140d000b0b02402015450d002015410c6c450d00200f10390b02402005422088a72204450d0020044104742114200d41086a2104034002402004280200450d002004417c6a28020010390b200441106a2104201441706a22140d000b0b0240200542ffffffff0083500d00200d10390b02402019450d00200b450d00201910390b2010450d00200e10390b2002280298012115024020022802a0012204450d00200441f4026c2114201521040340200410c203200441f4026a21042014418c7d6a22140d000b0b200228029c012204450d09200441f4026c450d09201510390c090b200a41016a210a2032202c4110747221172031202b41107472210320022902840d2133200241f8056a200241a0086a41a40210d40b1a20022800c90a212120022d00c80a2104200241d0036a200241f8056a41a40210d40b1a200241a8016a200241d0036a41a40210d40b1a200e4118742030202a4110747241ffffff0771722122200b411074201941107672212a20194108742005423888a772211120044110742013411076722118200e4108762119202f411074200b41107672211a2013411074202d72210b2005421888a7210e2005a72113024020022802a0012216200228029c01470d0020024198016a201610840520022802a00121160b2002280298012214201641f4026c6a200241a8016a41a40210d40b220441e7026a20154110763a0000200441e5026a20153b0000200441e0026a20184110763a0000200441de026a20183b0000200441d9026a20174110763a0000200441d7026a20173b0000200441d2026a20034110763a0000200441d0026a20033b0000200441cb026a20194110763a0000200441c9026a20193b0000200441c4026a201a4110763a0000200441c2026a201a3b0000200441bd026a20114110763a0000200441bb026a20113b0000200441b6026a20134110763a0000200441b4026a20133b0100200441ec026a2033370000200441e8026a200c360000200441e1026a2021360000200441da026a200b360000200441d3026a202e360000200441cc026a2010360000200441c5026a2022360000200441be026a202a360000200441b7026a200e360000200441b0026a200d360200200441a8026a201b3702002004200f3602a4022002201641016a22183602a001200a2009470d000b200228029c0121030c010b2014450d06410021180b200241086a200110c10120022802080d03200228020c221a200128020441306e22042004201a4b1bad42307e2205422088a70d002005a72204417f4c0d000240024020040d00410421150c010b200410382215450d020b200241003602b00f200220153602a80f2002200441306e22123602ac0f02400240201a450d00200241800d6a4104722109200241b50d6a210f200241ae0d6a2110200241a70d6a211c200241800d6a41206a211d200241990d6a211e200241920d6a211f2002418b0d6a2120200241800d6a41017221194100210d0340200241800d6a200110860220022d00800d4101460d05200241d80a6a41186a2221201941186a290000370300200241d80a6a41106a2222201941106a290000370300200241d80a6a41086a2223201941086a290000370300200220192900003703d80a200128020422044104490d0520012802002215280000212a20012004417c6a3602042001201541046a3602002002200110c10120022802000d052002280204220b200128020441c8006e22042004200b4b1bad42c8007e2205422088a70d032005a72204417f4c0d030240024020040d004104210a0c010b20041038220a450d050b200241003602b0012002200a3602a8012002200441c8006e3602ac0102400240200b450d004100210c0240034020012802042204450d01200128020022122d0000211520012004417f6a22163602042001201241016a36020002400240024020150e020001040b2016450d0320122d0001211520012004417e6a22113602042001201241026a22043602004100210e02400240024020150e0404000102060b4101210e0c030b4102210e0c020b4103210e0c010b2016450d0220122d0001211520012004417e6a22113602042001201241026a22043602004104210e20150d020b20114104490d01200c41016a210c2004280000212b20012011417c6a22133602042001201241066a36020041002104200241003602800d417b2115034020132004460d02201220046a221641066a2d000021172001201120156a3602042001201641076a360200200920046a20173a00002002200441016a22163602800d2015417f6a211520162104201641c000470d000b200241d00a6a41026a2216202041026a2d00003a0000200220092f01003b019801200220202f00003b01d00a2002200941026a2d00003a009a0120022902bc0d210520022802b80d211720022800b10d211220022801aa0d211120022800a30d2113200228029c0d212c20022800950d212d200228018e0d212e20022800870d212f200241c80a6a41026a2230201f41026a2d00003a0000200241cc0f6a41026a2231201e41026a2d00003a0000200241c80f6a41026a2232201d41026a2d00003a0000200241c40f6a41026a2224201c41026a2d00003a0000200241c00f6a41026a2225201041026a2d00003a00002002201f2f00003b01c80a2002201e2f00003b01cc0f2002201d2f00003b01c80f2002201c2f00003b01c40f200220102f00003b01c00f200241bc0f6a41026a2226200f41026a2d00003a00002002200f2f00003b01bc0f024020022802b001221520022802ac01470d00200241a8016a201510fd0420022802b00121150b20022802a801220a201541c8006c6a2204200e3a00042004202b360200200420022f0198013b0005200441076a20022d009a013a0000200441086a202f3600002004410c6a20022f01d00a3b00002004410e6a20162d00003a00002004410f6a202e360000200441136a20022f01c80a3b0000200441156a20302d00003a0000200441166a202d3600002004411d6a202c360000200441246a20133600002004412b6a20113600002004411c6a20312d00003a00002004411a6a20022f01cc0f3b0000200441216a20022f01c80f3b0000200441236a20322d00003a0000200441286a20022f01c40f3b00002004412a6a20242d00003a00002004412f6a20022f01c00f3b0000200441316a20252d00003a0000200441326a20123600002004413d6a2005370000200441396a2017360000200441386a20262d00003a0000200441366a20022f01bc0f3b0000200441c5006a20022f01b80f3b0000200441c7006a20022d00ba0f3a00002002201541016a3602b001200c200b470d000c030b0b20022802ac012204450d07200441c8006c450d07200a10390c070b200a450d060b20022902ac012105200d41016a210d200241f8056a41086a2023290300221b370300200241f8056a41106a20222903002233370300200241f8056a41186a20212903002240370300200241d0036a41086a2217201b370300200241d0036a41106a22122033370300200241d0036a41186a22112040370300200220022903d80a221b3703f8052002201b3703d003024020022802b00f221620022802ac0f470d00200241a80f6a201610840320022802b00f21160b20022802a80f2215201641306c6a2204200a3602042004202a360200200441086a2005370200200441106a20022903d003370200200441186a2017290300370200200441206a2012290300370200200441286a20112903003702002002201641016a22163602b00f200d201a470d000b20022802ac0f21120c010b2015450d04410021160b200241800d6a2001108d05024020022802840d450d00200241286a200241800d6a41f00010d40b1a200041206a20163602002000411c6a2012360200200041186a2015360200200041146a2018360200200041106a20033602002000410c6a2014360200200041086a20073602002000200836020420002006360200200041246a200241286a41f00010d40b1a0c080b410021042000410036020002402016450d00201641306c211703400240201520046a221641086a2802002201450d00200141c8006c450d00201641046a28020010390b2017200441306a2204470d000b0b2012450d04201241306c450d04201510390c040b1034000b1032000b20022802a80f2116024020022802b00f2204450d00200441306c2115201641086a21040340024020042802002201450d00200141c8006c450d002004417c6a28020010390b200441306a2104201541506a22150d000b0b20022802ac0f2204450d00200441306c450d00201610390b200041003602000b02402018450d00201841f4026c2115410021040340201420046a10c2032015200441f4026a2204470d000b0b2003450d01200341f4026c450d01201410390c010b200041003602000b02402007450d00200741d0006c2115200621040340200428020021140240200441086a22012802002216450d00201410390b2004201436020020012016360200200441d0006a2104201541b07f6a22150d000b0b2008450d00200841d0006c450d00200610390b200241d00f6a24000bfd0501097f230041b0076b2202240002400240200128020422030d00200041003602300c010b200128020022042d0000210520012003417f6a3602042001200441016a360200024002400240024020050d00200241c0056a200110f50220022802c005450d0220024180046a200241c0056a41c00110d40b1a200241c0056a200110bc02024020022903c0054201510d0020024180076a41286a2203200241f0056a29030037030020024180076a41206a2204200241c0056a41286a29030037030020024180076a41186a2205200241c0056a41206a29030037030020024180076a41106a2206200241c0056a41186a29030037030020024180076a41086a2207200241c0056a41106a290300370300200220022903c805370380072001280204220841044f0d020b20024180046a10fc020c020b200041003602300c030b20012802002209280000210a20012008417c6a3602042001200941046a360200200228028004210820024194026a20024180046a41047241bc0110d40b1a200241d0036a41286a2003290300370300200241d0036a41206a2004290300370300200241d0036a41186a2005290300370300200241d0036a41106a2006290300370300200241d0036a41086a200729030037030020022002290380073703d00320080d010b200041003602300c010b200241186a41286a200241d0036a41286a290300370300200241186a41206a200241d0036a41206a290300370300200241186a41186a200241d0036a41186a290300370300200241186a41106a200241d0036a41106a290300370300200241186a41086a200241d0036a41086a290300370300200220022903d00337031820022008360248200241cc006a20024194026a41bc0110d40b1a2002200a36028802200241106a200110c101024020022802100d0020022802142103200241086a200110c10120022802080d00200228020c21012000200241186a41f80110d40b220041fc016a2001360200200041f8016a20033602000c010b20004100360230200241c8006a10fc020b200241b0076a24000b13002000410f3602042000419892c1003602000b8f0c03047f017e0a7f230041a0016b22022400200241206a200110c1010240024020022802200d0002400240200228022422032001280204220441246e2205200520034b1bad42247e2206422088a70d002006a72205417f4c0d000240024020050d00410421070c010b200510382207450d020b20024100360230200220073602282002200541246e36022c02402003450d002003417f6a21082002418c016a220941056a210a410021050240024003402004450d012001280200220b2d0000210c20012004417f6a220d3602042001200b41016a36020002400240024002400240024002400240200c0e080009010903040205090b2002200110c10120022802000d082001280204220b20022802042204490d082004417f4c0d0b0240024020040d004101210c0c010b20041038220c450d0d200c4100200410d60b1a0b200c2001280200220d200410d40b210e2001200b20046b3602042001200d20046a360200200e410876210f4105210e2004210b0c050b200241f8006a200110860220022d00784101460d07200220092900003703682002200a29000037006d2002200229006d37005d20022002290368370358200220022903583703482002200229005d37004d200228027c220c410876210f20022f007920022d007b4110747221102002290284012206422088a72103200228028001210b4100210e0c050b200110ba022206a74101710d06200241186a200110c10120022802180d0620012802042204200228021c2203490d062003417f4c0d094101210e4101210b02402003450d0020031038220b450d0b200b4100200310d60b1a0b200b20012802002210200310d40b1a2001200420036b3602042001201020036a36020020064280808080f01f83422088a7210c20064280feffffff1f83420888a72110200321040c030b200110ba022206a74101710d05200241086a200110c10120022802080d0520012802042204200228020c2203490d052003417f4c0d080240024020030d004101210b0c010b20031038220b450d0a200b4100200310d60b1a0b200b20012802002210200310d40b1a2001200420036b3602042001201020036a36020020064280808080f01f83422088a7210c20064280feffffff1f83420888a721104102210e200321040c020b200110ba022206a74101710d04200241106a200110c10120022802100d042001280204220420022802142203490d042003417f4c0d070240024020030d004101210b0c010b20031038220b450d09200b4100200310d60b1a0b200b20012802002210200310d40b1a2001200420036b3602042001201020036a36020020064280808080f01f83422088a7210c20064280feffffff1f83420888a721104103210e200321040c010b200d450d03200b2d0001210c20012004417e6a3602042001200b41026a360200200c0d03200241f8006a20011086052002280278220c4102460d032002280280012104200228027c210b4104210e4100210f0b200f410874200c41ff017172210c2003ad4220862004ad8421060b200241386a41086a220d200241c8006a41086a2903003703002002200229034837033802402005200228022c470d00200241286a200510820320022802282107200228023021050b2007200541246c6a2204200637000c2004200b3600082004200c360004200420103b00012004200e3a0000200441036a20104110763a0000200420022903383700142004411c6a200d2903003700002002200228023041016a22053602302008450d022008417f6a2108200128020421040c000b0b2002280228210302402005450d00200541246c21042003210103400240024002400240024020012d00000e050400010204030b2001410c6a280200450d03200141086a28020010390c030b2001410c6a280200450d02200141086a28020010390c020b2001410c6a280200450d01200141086a28020010390c010b200141086a280200450d00200141046a28020010390b200141246a21012004415c6a22040d000b0b200228022c2201450d04200141246c450d04200310390c040b200228022821070b2007450d022000200229022c370204200020073602000c030b1034000b1032000b200041003602000b200241a0016a24000b8b0c040e7f017e097f037e230041a0016b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024020022802000d000240024002400240024020022802042205200228022422064106762201200120054b1b22014106742207417f4c0d000240024020010d00410821080c010b200710382208450d020b4100210920024100360238200220013602342002200836023002402005450d00200241f8006a410472210a200241f8006a41196a210b2002418a016a210c20024183016a210d4100210e0340024020060d00410021070c060b20022002280220220f41016a3602202006417f6a21074200211002400240200f2d00000e020100070b2006417f6a211141002101034020112001460d06200a20016a200f20016a221241016a2d00003a00002002200141016a22073602782002201241026a3602202007210120074120470d000b2002419c016a41026a2211200d41026a2d00003a0000200241f4006a41026a2213200c41026a2d00003a00002002200a2f01003b01282002200d2f00003b019c012002200c2f00003b01742002200a41026a2d00003a002a20022802980121142002280294012115200228008d0121162002280186012117200228007f2118200241f0006a41026a2219200b41026a2d00003a00002002200b2f00003b0170024002402007417f7320066a4110490d000240200620076b2212416f6a41074b0d0020022012416f6a3602240c0a0b200f20076a220141096a290000211a200141016a290000211b2002200141196a360220200141116a2900002210428002540d012002201241676a3602240c090b20022007417f7320066a3602240c080b201241676a2107200241e4006a41026a20112d00003a0000200241e0006a41026a20132d00003a0000200241dc006a41026a20192d00003a0000200220022d002a3a006a200220022f01283b0168200220022f019c013b0164200220022f01743b0160200220022f01703b015c201042ff0183211c420121100b200e41016a210e200241d4006a41026a2201200241e4006a41026a2d00003a0000200241d0006a41026a2212200241e0006a41026a2d00003a0000200241cc006a41026a220f200241dc006a41026a2d00003a0000200220022d006a3a005a200220022f01683b0158200220022f01643b0154200220022f01603b0150200220022f015c3b014c200220022d005a3a004a200220022f01583b0148200241c4006a41026a221120012d00003a0000200220022f01543b0144200241c0006a41026a220620122d00003a0000200220022f01503b01402002413c6a41026a2212200f2d00003a0000200220022f014c3b013c024020092002280234470d00200241306a200910990520022802302108200228023821090b200820094106746a22012010370300200141186a201c370300200141226a20022d004a3a0000200141206a20022f01483b0100200141296a20112d00003a0000200141276a20022f01443b00002001201b370308200141106a201a370300200141236a20183600002001412e6a20022f01403b0000200141306a20062d00003a00002001412a6a2017360000200141316a2016360000200141356a20022f013c3b0000200141376a20122d00003a00002001413c6a2014360000200141386a20153600002002200228023841016a220936023820072106200e2005470d000b200228023021080b2008450d0520002002290234370204200020083602000c060b1034000b1032000b200241003602240c010b200220073602240b200228023441ffffff1f71450d00200228023010390b2002420037023420024100280284ee4d3602302002410d36022c2002200241086a3602282002200241306a36029c012002418c016a41013602002002420137027c200241949fc5003602782002200241286a360288012002419c016a41b4dfc400200241f8006a103b1a2002280230200228023810d10102402002280234450d00200228023010390b200041003602000b2004450d00200310390b200241a0016a24000bd70101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff1f712001464103742103200141067421010240024020040d00200241003602100c010b200241106a41086a410836020020022004410674360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410676360200200241206a24000f0b1034000b8c0101047f230041106b2202240002400240200128020822034106744104722204417f4c0d0020012802002101200410382205450d012002410036020820022004360204200220053602002002200310ac0220012003200210ae022000412020022802002201200228020810e90102402002280204450d00200110390b200241106a24000f0b1034000b1032000b9f0401067f230041d0006b22022400200241086a41a5e6c000410810cb01200241186a41a5a1c100410a10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000be837030b7f047e2c7f23004190066b220324002003200236021c20032001360218200341206a2001200210e40102400240200328022022040d00200041023a00a4020c010b200328022421052003200341206a41086a280200360234200320043602302003200341306a3602d403200341106a200341d4036a10f9080240024020032802100d004108210602400240200328021422074180012007418001491b2208450d00200841057410382206450d010b200341003602c805200320083602c405200320063602c005024002400240024002400240024020070d00410021090c010b200341e8056a41106a210a200341e8056a41046a210b200341f0056a210c410021090340200341003602e805200341e8056a2003280230220820032802342201410420014104491b220210d40b1a2003200120026b22013602342003200820026a22083602300240200341e8056a20026a220d200b460d00200d4100410420026b10d60b1a0b20033502e805210e200341003a009803200120014100472202490d0220034198036a2008200210d40b1a2003200120026b220d3602342003200820026a220236023002400240024020010d004200210f0c010b4200210f02400240024002400240024020032d0098030e07070001020304050a0b200c4200370300200342003703e805200341e8056a2002200d4110200d4110491b220110d40b1a2003200d20016b3602342003200220016a3602300240200341e8056a20016a2202200a460d0020024100411020016b10d60b1a0b200c290300211020032903e80521114201210f0c060b4202210f0c040b4203210f0c030b4204210f0c020b4205210f0c010b4206210f0b0b0240200920032802c405470d00200341c0056a200910a50520032802c005210620032802c80521090b200620094105746a2201200f3703082001200e370300200141186a2010370300200141106a2011370300200320032802c80541016a22093602c8052007417f6a22070d000b20032802c405210820032802c00521060b2006450d06200341f0056a22074200370300200342003703e805200341e8056a2003280230220d20032802342202411020024110491b220110d40b1a2003200220016b3602342003200d20016a360230024020014110460d00200341e8056a20016a4100411020016b10d60b1a0b2007290300211120032903e805210f200341086a200341d4036a10f90820032802080d03200328020c220b4138200b4138491b220a0d014104210d0c020b20032802c40541ffffff3f71450d0520032802c0051039410221010c060b200a41c8006c1038220d450d030b41002102200341003602c0032003200a3602bc032003200d3602b80302400240024002400240024002400240024002400240200b0d00410021020c010b200341c0056a410c6a2112200341c0056a41017221130340200341c0056a200341d4036a10fa0802400240024020032d00c00522074106460d0020032802c805210120032802c405210c200341e8056a200341d4036a10fa0820032d00e8054106470d0120074101470d002001450d00200c10390b410621070c010b20034180056a41206a200341e8056a41206a28020036020020034180056a41186a200341e8056a41186a29030037030020034180056a41106a200341e8056a41106a29030037030020034180056a41086a200341e8056a41086a29030037030020034198036a41026a201341026a2d00003a0000200341a8056a41086a201241086a290000370300200341a8056a41106a201241106a290000370300200320032903e80537038005200320132f00003b019803200320122900003703a805200c2114200121150b200341f8026a41026a220120034198036a41026a2d00003a0000200341e8046a41086a220c200341a8056a41086a290300370300200341e8046a41106a220a200341a8056a41106a290300370300200341c0046a41086a221620034180056a41086a290300370300200341c0046a41106a221720034180056a41106a290300370300200341c0046a41186a221820034180056a41186a290300370300200341c0046a41206a221920034180056a41206a280200360200200320032f0198033b01f802200320032903a8053703e80420032003290380053703c00420074106460d02200341d8026a41026a221a20012d00003a0000200341a8046a41086a221b200c290300370300200341a8046a41106a220c200a29030037030020034180046a41086a220a201629030037030020034180046a41106a2216201729030037030020034180046a41186a2217201829030037030020034180046a41206a22182019280200360200200320032f01f8023b01d802200320032903e8043703a804200320032903c004370380040240200220032802bc03470d00200341b8036a200210fd0420032802b803210d20032802c00321020b200d200241c8006c6a220120073a0000200141086a2015360000200141046a2014360000200141036a201a2d00003a0000200120032f01d8023b0001200141146a201b2903003700002001411c6a200c2903003700002001410c6a20032903a804370000200141246a200329038004370000200141346a20162903003700002001412c6a200a2903003700002001413c6a2017290300370000200141c4006a2018280200360000200320032802c00341016a22023602c003200b417f6a220b0d000b20032802bc03210a20032802b803210d0b200d450d09200341e8056a200341d4036a10fa0820032d00e80522164106460d08200341dc036a41026a20032d00eb053a0000200341a8046a41086a200341fc056a2201290200370300200341a8046a41106a20034184066a2207290200370300200320032f00e9053b01dc032003200341f4056a220b2902003703a804200341e8056a41086a220c280200211720032802ec052118200341e8056a200341d4036a10fa0820032d00e80522194106460d07200341e0036a41026a20032d00eb053a0000200341e8046a41086a2001290200370300200341e8046a41106a2007290200370300200320032f00e9053b01e0032003200b2902003703e804200c280200211a20032802ec05211b200341e8056a200341d4036a10fa0820032d00e80522144106460d06200341e4036a41026a20032d00eb053a0000200341a8056a41086a200341fc056a2201290200370300200341a8056a41106a20034184066a2207290200370300200320032f00e9053b01e4032003200341f4056a220b2902003703a805200341e8056a41086a220c280200211520032802ec052112200341e8056a200341d4036a10fa0820032d00e80522134106460d05200341e8036a41026a20032d00eb053a000020034180046a41086a200129020037030020034180046a41106a2007290200370300200320032f00e9053b01e8032003200b29020037038004200c280200211c20032802ec05211d200341e8056a200341d4036a10fa0820032d00e805221e4106460d04200341ee036a20032d00eb053a0000200341c0046a41086a200341fc056a290200370300200341d0046a20034184066a290200370300200320032f00e9053b01ec032003200341f4056a2902003703c004200341e8056a41086a280200211f20032802ec052120200341003a00980320032802d403220c280204220120014100472207490d0320034198036a200c2802002221200710d40b1a200c200120076b220b360204200c202120076a222236020020010d01410021010c020b20032802b803210902402002450d002009200241c8006c6a2102200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012002470d000b0b20032802bc032201450d08200141c8006c450d08200910390c080b41002101024020032d0098030e020100020b410421010340200341003a009803200b200b4100472207490d022001417d6a212120034198036a2022200710d40b1a200c200b20076b2223360204200c202220076a22223602000240200b0d00200341003a0098030b200341e8056a20016a20032d0098033a0000200320213602e8052023210b200141016a22014118470d000b20034180056a41026a200341f5056a2d00003a0000200341b8036a41026a200341fc056a2d00003a0000200320032f01ec053b01c005200320032d00ee053a00c2052003200341f3056a2f00003b0180052003200341fa056a2f01003b01b803200341fd056a2f0000200341ff056a2d0000411074722107200341f6056a280100212320032800ef052121410121010b200341f8036a41026a20032d00c2053a0000200341f4036a41026a20034180056a41026a2d00003a0000200341f0036a41026a200341b8036a41026a2d00003a0000200320032f01c0053b01f803200320032f0180053b01f403200320032f01b8033b01f003200341e8056a200341d4036a10fa0820032d00e80522224106460d00200341fc036a41026a20032d00eb053a000020034180056a41086a220c200341fc056a29020037030020034180056a41106a222420034184066a290200370300200320032f00e9053b01fc032003200341f4056a29020037038005200341e8056a41086a220b280200212520032802ec052126200341e8056a200341d4036a10fa0820032d00e8054106470d0720224101470d002025450d00202610390b201e4101470d00201f450d00202010390b20134101470d00201c450d00201d10390b20144101470d002015450d00201210390b20194101470d00201a450d00201b10390b20164101470d002017450d00201810390b02402002450d00200d200241c8006c6a2102200d21010340024020012d00004101470d00200141086a280200450d00200141046a28020010390b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010390b200141c8006a22012002470d000b0b200a450d00200a41c8006c450d00200d10390b200841ffffff3f71450d0220061039410221010c030b200341c0056a41206a200341e8056a41206a280200360200200341c0056a41186a200341e8056a41186a290300370300200341c0056a41106a200341e8056a41106a2227290300370300200341c0056a41086a200b290300370300200341d0036a41026a200341dc036a41026a2d00003a0000200341b8036a41086a200341a8046a41086a290300370300200341b8036a41106a200341a8046a41106a290300370300200320032903e8053703c005200320032f01dc033b01d003200320032903a8043703b803200341b4036a41026a200341e0036a41026a2d00003a0000200320032f01e0033b01b4032027200341e8046a41106a290300370300200b200341e8046a41086a290300370300200320032903e8043703e805200341b0036a41026a200341e4036a41026a2d00003a0000200320032f01e4033b01b00320034198036a41106a200341a8056a41106a29030037030020034198036a41086a200341a8056a41086a290300370300200320032903a8053703980320034194036a41026a200341e8036a41026a2d00003a0000200320032f01e8033b019403200341f8026a41106a20034180046a41106a290300370300200341f8026a41086a20034180046a41086a29030037030020032003290380043703f802200341f4026a41026a200341ec036a41026a2d00003a0000200320032f01ec033b01f402200341d8026a41106a200341c0046a41106a290300370300200341d8026a41086a200341c0046a41086a290300370300200320032903c0043703d802200341b4026a41026a200341f8036a41026a2d00003a0000200320032f01f8033b01b402200341b0026a41026a200341f4036a41026a2d00003a0000200320032f01f4033b01b002200341ac026a41026a200341f0036a41026a2d00003a0000200320032f01f0033b01ac02200341d4026a41026a200341fc036a41026a2d00003a0000200320032f01fc033b01d402200341b8026a41106a2024290300370300200341b8026a41086a200c29030037030020032003290380053703b80220034180056a41026a200341d9036a41026a2d00003a0000200320032f00d9033b0180050c020b1032000b410221010b200341a8026a41026a200341d0036a41026a2d00003a000020034190026a41086a200341b8036a41086a29030037030020034190026a41106a2224200341b8036a41106a2903003703002003418c026a41026a200341b4036a41026a2d00003a0000200341f0016a41086a200341e8056a41086a290300370300200341f0016a41106a2227200341e8056a41106a220b290300370300200320032f01d0033b01a802200320032903b80337039002200320032f01b4033b018c02200320032903e8053703f001200341ec016a41026a200341b0036a41026a2d00003a0000200341d0016a41086a20034198036a41086a290300370300200341d0016a41106a222820034198036a41106a290300370300200341cc016a41026a20034194036a41026a2d00003a0000200341b0016a41086a200341f8026a41086a290300370300200341b0016a41106a2229200341f8026a41106a290300370300200320032f01b0033b01ec0120032003290398033703d001200320032f0194033b01cc01200320032903f8023703b001200341ac016a41026a200341f4026a41026a2d00003a000020034190016a41106a222a200341d8026a41106a29030037030020034190016a41086a200341d8026a41086a2903003703002003418c016a41026a200341d4026a41026a2d00003a0000200341f0006a41106a222b200341b8026a41106a290300370300200341f0006a41086a200341b8026a41086a290300370300200320032f01f4023b01ac01200320032903d80237039001200320032f01d4023b018c01200320032903b802370370200341c8006a41206a222c200341c0056a41206a280200360200200341c8006a41186a222d200341c0056a41186a290300370300200341c8006a41106a222e200341c0056a41106a220c290300370300200341c8006a41086a200341c0056a41086a290300370300200320032903c005370348200341c4006a41026a200341b4026a41026a2d00003a0000200320032f01b4023b0144200341c0006a41026a200341b0026a41026a2d00003a0000200320032f01b0023b01402003413c6a41026a200341ac026a41026a2d00003a0000200320032f01ac023b013c200341386a41026a20034180056a41026a2d00003a0000200320032f0180053b01380240024020014102470d00200342003702c40520034100280284ee4d3602c0052003410d360284052003200341186a360280052003200341c0056a3602c004200341fc056a4101360200200342013702ec05200341949fc5003602e805200320034180056a3602f805200341c0046a41b4dfc400200341e8056a103b1a20032802c00520032802c80510d101024020032802c405450d0020032802c00510390b410221010c010b200341a8046a41026a222f200341a8026a41026a2d00003a0000200341c0056a41086a223020034190026a41086a290300370300200c2024290300370300200341b8036a41026a22242003418c026a41026a2d00003a000020034180056a41086a2231200341f0016a41086a29030037030020034180056a41106a22322027290300370300200320032f01a8023b01a80420032003290390023703c005200320032f018c023b01b803200320032903f0013703800520034198036a41026a2227200341ec016a41026a2d00003a0000200341c0046a41086a2233200341d0016a41086a290300370300200341c0046a41106a22342028290300370300200341f8026a41026a2228200341cc016a41026a2d00003a000020034180046a41086a2235200341b0016a41086a29030037030020034180046a41106a22362029290300370300200320032f01ec013b019803200320032903d0013703c004200320032f01cc013b01f802200320032903b00137038004200341d8026a41026a2229200341ac016a41026a2d00003a0000200341a8056a41106a2237202a290300370300200341a8056a41086a222a20034190016a41086a290300370300200341b8026a41026a22382003418c016a41026a2d00003a0000200341e8046a41106a2239202b290300370300200341e8046a41086a222b200341f0006a41086a290300370300200320032f01ac013b01d80220032003290390013703a805200320032f018c013b01b802200320032903703703e804200341e8056a41206a223a202c280200360200200341e8056a41186a222c202d290300370300200b202e290300370300200341e8056a41086a222d200341c8006a41086a290300370300200320032903483703e805200341fc036a41026a222e200341c4006a41026a2d00003a0000200320032f01443b01fc03200341f8036a41026a223b200341c0006a41026a2d00003a0000200320032f01403b01f803200341f4036a41026a223c2003413c6a41026a2d00003a0000200320032f013c3b01f403200341f0036a41026a223d200341386a41026a2d00003a0000200320032f01383b01f003200020113703082000200f370300200020163a0028200020023602242000200a3602202000200d36021c200020093602182000200836021420002006360210200020173602302000201836022c200020032f01a8043b00292000412b6a202f2d00003a0000200020032903c0053702342000413c6a2030290300370200200041c4006a200c290300370200200020193a004c200041cf006a20242d00003a0000200020032f01b8033b004d2000201a3602542000201b360250200041e8006a2032290300370200200041e0006a20312903003702002000200329038005370258200020143a0070200041f3006a20272d00003a0000200020032f0198033b007120002015360278200020123602742000418c016a203429030037020020004184016a2033290300370200200020032903c00437027c200020133a00940120004197016a20282d00003a0000200020032f01f8023b0095012000201c36029c012000201d36029801200041b0016a2036290300370200200041a8016a203529030037020020002003290380043702a0012000201e3a00b801200041bb016a20292d00003a0000200020032f01d8023b00b9012000201f3602c001200020203602bc01200041d4016a2037290300370200200041cc016a202a290300370200200020032903a8053702c401200020223a00dc01200041df016a20382d00003a0000200020032f01b8023b00dd01200020253602e401200020263602e001200041f8016a2039290300370200200041f0016a202b290300370200200020032903e8043702e801200041a0026a203a28020036020020004198026a202c29030037020020004190026a200b29030037020020004188026a202d290300370200200020032903e80537028002200041a7026a202e2d00003a0000200020032f01fc033b00a502200041a8026a2021360000200041ae026a203b2d00003a0000200041ac026a20032f01f8033b0000200041af026a2023360000200041b5026a203c2d00003a0000200041b3026a20032f01f4033b0000200041b8026a20074110763a0000200041b6026a20073b0000200041bb026a203d2d00003a0000200041b9026a20032f01f0033b00000b200020013a00a4022005450d00200410390b20034190066a24000b930301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041046a2802002202450d00200241c8006c450d00200028020010390b024020002d000c4101470d00200041146a280200450d00200041106a28020010390b024020002d00304101470d00200041386a280200450d00200041346a28020010390b024020002d00544101470d00200041dc006a280200450d00200041d8006a28020010390b024020002d00784101470d0020004180016a280200450d00200041fc006a28020010390b024020002d009c014101470d00200041a4016a280200450d00200041a0016a28020010390b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a28020010390b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a28020010390b0baa0202057f027e230041106b220324002003410036020820034201370300200228021021042003200241186a280200220510ac02024020054105742205450d00200420056a210603402004280200210702402003280204200328020822056b41034b0d002003200541041077200328020821050b200328020020056a20073600002003200541046a360208200441086a200310e502200441206a22042006470d000b0b200241086a29030021082002290300210902402003280204200328020822046b410f4b0d002003200441101077200328020821040b200328020020046a22052008370008200520093700002003200441106a3602082002411c6a200310e4022000200120032802002204200328020810e90102402003280204450d00200410390b200341106a24000b990401067f230041d0006b22022400200241a5e6c000410810cb01200241106a4198a1c100410710cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000bab09010f7f230041b0016b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022040d00200041063a00200c010b200328021421052003200341186a280200220636026420034188016a410472210741002101024002400240034020062001460d01200720016a200420016a22082d00003a00002003200141016a2202360288012003200841016a3602602002210120024120470d000b200341f8006a41026a220920034195016a2d00003a0000200341ac016a41026a220a2003419c016a2d00003a0000200320032f018c013b0168200320032d008e013a006a2003200620026b360264200320034193016a2f00003b017820032003419a016a2f01003b01ac0120034196016a28010021022003419d016a2800002108200341a4016a2802002106200341a8016a220b2802002107200328008f01210c20034184016a41026a220d200341a3016a2d00003a00002003200341a1016a220e2f00003b01840120034188016a200341e0006a10920520032d00880122014106460d01200341286a411f6a220f200b280000360000200341286a41186a220b200e290000370300200341286a41106a220e20034199016a290000370300200341286a41086a221020034191016a290000370300200341d8006a41026a221120092d00003a00002003200329008901370328200320032f01683b015c200320032d006a3a005e200320032f01783b0158200341d4006a41026a2209200a2d00003a0000200341d0006a41026a220a200d2d00003a0000200320032f01ac013b0154200320032f0184013b0150200320032d005e3a0026200320032f015c3b0124200d20112d00003a0000200320032f01583b018401200341206a41026a20092d00003a0000200320032f01543b01202003411c6a41026a200a2d00003a0000200320032f01503b011c20034188016a411f6a200f28000036000020034188016a41186a200b29030037030020034188016a41106a200e29030037030020034188016a41086a201029030037030020032003290328370388010c020b200341003602640b410721010b0240024020014107470d002003420037026c20034100280284ee4d3602682003410d36027c2003200341086a3602782003200341e8006a3602ac012003413c6a41013602002003420137022c200341949fc5003602282003200341f8006a360238200341ac016a41b4dfc400200341286a103b1a2003280268200328027010d1010240200328026c450d00200328026810390b410621010c010b200020032f01243b01002000200c360003200020032f0184013b00072000200236000a200020032f01203b000e20002008360011200020032f011c3b0015200041026a20032d00263a0000200041096a20034184016a41026a2d00003a0000200041106a200341206a41026a2d00003a0000200041176a2003411c6a41026a2d00003a00002000200736001c200020063600182000200329038801370021200041296a20034190016a290300370000200041316a20034188016a41106a290300370000200041396a200341a0016a290300370000200041c0006a200341a7016a2800003600000b200020013a00202005450d00200410390b200341b0016a24000b9f0401067f230041d0006b22022400200241086a41a5e6c000410810cb01200241186a419fa1c100410610cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000bf80202027f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602100c010b2003280214210202400240200341106a41086a28020022044110490d002003200441706a3602242003200141106a360220200141086a2900002105200129000021062003200341206a10c10120032802000d00200341c8006a200341206a2003280204109d0220032802482204450d00200329024c2107200020053703082000200637030020002007370214200020043602100c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602100b2002450d00200110390b200341e0006a24000bc20201057f230041106b2203240002400240200241186a2802004105744114722204417f4c0d00200410382205450d01200520022903003700002005200241086a2903003700082003411036020820032004360204200320053602002002280210210520032002280218220210ac020240024020020d0020032802002106200328020821020c010b200241057421072003280208210203400240200328020420026b411f4b0d002003200241201077200328020821020b2003280200220620026a22042005290000370000200441086a200541086a290000370000200441106a200541106a290000370000200441186a200541186a2900003700002003200241206a2202360208200541206a2105200741606a22070d000b0b200020012006200210e90102402003280204450d00200610390b200341106a24000f0b1034000b1032000bff0101057f230041206b220324002003410036020820034201370300200341004120107720032802002204200328020822056a22062002290000370000200641086a200241086a290000370000200641106a200241106a290000370000200641186a200241186a2900003700002003200541206a220636020820032802042107200341106a200241206a109601200328021021050240200720066b200328021822024f0d00200320062002107720032802002104200328020821060b200420066a2005200210d40b1a200620026a210202402003280214450d00200510390b200020012004200210e90102402003280204450d00200410390b200341206a24000bd70101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff3f712001464103742103200141057421010240024020040d00200241003602100c010b200241106a41086a410836020020022004410574360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410576360200200241206a24000f0b1034000bdd0401057f230041e0006b22032400200341086a418ca3c100410410cb01200341186a41a0abc200411710cb012003410036024020034201370338200341386a41004104107720032802382204200328024022056a20013600002003200541046a22013602400240200328023c220520016b41034b0d00200341386a200141041077200328023c210520032802382104200328024021010b200420016a200236000020032004200141046a220110cc01370348200341dc006a200420016a360200200320043602582003200341d0006a3602542003200341c8006a360250200341286a200341d0006a10830102402005450d00200410390b024002402003280230220541206a2204417f4c0d000240024020040d00410121010c010b200410382201450d020b2000200136020041002102200041086a22064100360200200041046a2207200436020002402004410f4b0d00200041004110107720062802002102200028020021010b200120026a22042003290008370000200441086a200341086a41086a2900003700002006200241106a220436020002402007280200220220046b410f4b0d002000200441101077200041046a2802002102200041086a28020021040b200041086a2206200441106a22013602002000280200220720046a22042003290018370000200441086a200341186a41086a290000370000200328022821040240200220016b20054f0d00200020012005107720062802002101200028020021070b200720016a2004200510d40b1a2006200120056a3602000240200328022c450d00200410390b200341e0006a24000f0b1034000b1032000bf20202037f017e230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041023a00200c010b200328020c2104024002400240200341106a2802002205450d00410021020240024020012d00000e020100020b410121020b2005417f6a4104490d002005417b6a4110490d002005416b6a410b4b0d010b2003420037021c20034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d1010240200328021c450d00200328021810390b410221020c010b200128000121052001410d6a29000021062000200129000537030020002005360210200020063703082000200128001d36021c200020012900153702140b200020023a00202004450d00200110390b200341d0006a24000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a41e0b0c200411710cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a41d0acc200411b10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b820201037f230041c0006b220224000240410410382203450d00200341f0c2c98b063600002002200336022820024284808080c00037022c200241286a41044104107720022802282203200228023022046a2001360000200228022c21012002200441046a36023c200220033602382002200241386a10ee0702402001450d00200310390b0240024020022d00004101470d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290001370000200041186a200241196a290000370000200041106a200241116a290000370000200041086a200241096a2900003700000b200241c0006a24000f0b1032000bd40303047f027e017f230041106b22032400200341003602082003420137030020022d00202104200341004101107720032802002205200328020822066a20043a00002003200641016a2204360208200228021021060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a2204360208200241086a29030021072002290300210802402003280204220520046b410f4b0d00200320044110107720032802042105200328020821040b2003280200220620046a22092007370008200920083700002003200441106a2204360208200228021421090240200520046b41034b0d0020032004410410772003280204210520032802002106200328020821040b200620046a20093600002003200441046a2204360208200228021821090240200520046b41034b0d00200320044104107720032802002106200328020821040b200620046a20093600002003200441046a2204360208200228021c210602402003280204220520046b41034b0d00200320044104107720032802042105200328020821040b2003280200220220046a2006360000200020012002200441046a10e90102402005450d00200210390b200341106a24000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a41d0afc200411810cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a4194adc200411f10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b8f0203047f017e027f0240024020014102490d00417f200041086a22022802002203200028020022044720032004491b2203417f2000410c6a2802002204200041046a28020022054720042005491b20031b417f470d002000290200210620002000290208370200024020014103490d002006422088a721052006a72107200041106a210320002001417f6a22044103746a210202400340417f2003280200220020074720002007491b2200417f200341046a280200220820054720082005491b20001b417f470d012004450d04200341786a2003290200370200200341086a21032004417f6a22044101470d000c020b0b200341786a21020b200220063702000b0f0b2001200141a4bbc300103c000bfa0503047f047e067f23004190016b2202240020024180016a2000200110fd03200241286a2002280280012203200228028801220410fe03024020022d005c22054102460d002003200410e0010b200241c0006a2903002106200241306a290300210720022903382108200229032821090240200228028401450d00200310390b024020054102460d00200241286a200010aa05200241186a200241286a2009200710e503200241286a200110aa05200241086a200241286a2008200610e5030b200241286a2000200110b20520022802282203200228023010e0010240200228022c450d00200310390b20024180016a200010a805200241286a200228028001220a200228028801220b10e603410021032002280228220541002802d8974e20051b210c0240200229022c420020051b2206422088a7220d450d00200d2104200d21050240034002400240200c200441017620036a22044102746a220e280200220f20014f0d00200441016a21030c010b200f2001460d02200421050b200520036b2104200520034b0d000c020b0b200e200e41046a200d2004417f736a41027410d50b1a20064280808080707c21060b2002200c3602282002200637022c200a200b200241286a108e040240200642ffffffff0383500d00200c10390b0240200228028401450d00200a10390b20024180016a200110ac05200241286a200228028001220e200228028801220d10e603410021032002280228220541002802d8974e20051b210f0240200229022c420020051b2206422088a7220a450d00200a2104200a21050240034002400240200f200441017620036a22044102746a220c280200220120004f0d00200441016a21030c010b20012000460d02200421050b200520036b2104200520034b0d000c020b0b200c200c41046a200a2004417f736a41027410d50b1a20064280808080707c21060b2002200f3602282002200637022c200e200d200241286a108e040240200642ffffffff0383500d00200f10390b0240200228028401450d00200e10390b20024190016a24000bd40401087f230041e0006b220224002002412036020c20022001360208200241106a2001412010e4010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024020022802000d0020022802042205200228022422014103762206200620054b1b22074103742206417f4c0d030240024020070d00410421080c010b200610382208450d050b41002106200241003602502002200736024c200220083602480240024002402005450d00034020014104490d032001417c6a4104490d022002280220220728000021092002200741086a3602202007280004210702402006200228024c470d00200241c8006a2006410110c90220022802482108200228025021060b200141786a2101200820064103746a22062007360204200620093602002002200228025041016a22063602502005417f6a22050d000b200228024821080b2008450d022000200229024c370204200020083602000c030b2001417c6a21010b20022001360224200228024c41ffffffff0171450d00200228024810390b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2004450d00200310390b200241e0006a24000f0b1034000b1032000bb30503047f027e017f230041106b22032400200341003602082003420137030020022802202104200341004104107720032802002205200328020822066a20043600002003200641046a2204360208200228022421060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a2204360208200228022821060240200328020420046b41034b0d002003200441041077200328020821040b2003280200220520046a20063600002003200441046a2204360208200228022c21060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a2204360208200228023021060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a22043602080240024020022d00344101460d00024020032802042004470d002003200441011077200328020821040b200328020020046a41003a00002003200441016a22043602080c010b200241356a2105024020032802042004470d002003200441011077200328020821040b200328020020046a41013a00002003200441016a3602082005200310b502200328020821040b200241086a29030021072002290300210802402003280204220620046b410f4b0d00200320044110107720032802042106200328020821040b2003280200220520046a22092007370008200920083700002003200441106a2204360208200241186a2903002107200229031021080240200620046b410f4b0d0020032004411010772003280204210620032802002105200328020821040b200520046a2202200737000820022008370000200020012005200441106a10e90102402006450d00200510390b200341106a24000bdd0401057f230041e0006b22032400200341086a418ca3c100410410cb01200341186a4190a3c100411310cb012003410036024020034201370338200341386a41004104107720032802382204200328024022056a20013600002003200541046a22013602400240200328023c220520016b41034b0d00200341386a200141041077200328023c210520032802382104200328024021010b200420016a200236000020032004200141046a220110cc01370348200341dc006a200420016a360200200320043602582003200341d0006a3602542003200341c8006a360250200341286a200341d0006a10830102402005450d00200410390b024002402003280230220541206a2204417f4c0d000240024020040d00410121010c010b200410382201450d020b2000200136020041002102200041086a22064100360200200041046a2207200436020002402004410f4b0d00200041004110107720062802002102200028020021010b200120026a22042003290008370000200441086a200341086a41086a2900003700002006200241106a220436020002402007280200220220046b410f4b0d002000200441101077200041046a2802002102200041086a28020021040b200041086a2206200441106a22013602002000280200220720046a22042003290018370000200441086a200341186a41086a290000370000200328022821040240200220016b20054f0d00200020012005107720062802002101200028020021070b200720016a2004200510d40b1a2006200120056a3602000240200328022c450d00200410390b200341e0006a24000f0b1034000b1032000b9f0401067f230041d0006b22022400200241086a41acfecb00410510cb01200241186a419cf4c500410d10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9f0401067f230041d0006b22022400200241086a41acfecb00410510cb01200241186a41a4f3c500410710cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210c5040b0f0b200041086a108d02200041046a220228020010b505200228020010390b990401067f230041d0006b22022400200241ade6c000410810cb01200241106a41acfecb00410510cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000b990401067f230041d0006b22022400200241e1e5c000410810cb01200241106a41dcb5cb00410510cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000b9f0401067f230041d0006b22022400200241086a41ade6c000410810cb01200241186a41d0fccb00410b10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9f0401067f230041d0006b22022400200241086a41f3e5c000410810cb01200241186a418ccec600410710cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9c0301067f230041306b22022400200241b5e6c000410910cb01200241106a41fcd7cc00410610cb01200241206a2001280200200128020810b802024002402002280228220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290000370000200141086a200241086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290010370000200141086a200241106a41086a290000370000200228022021010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a36020002402002280224450d00200110390b200241306a24000f0b1034000b1032000bc81105037f017e1d7f027e027f230041f0246b22022400200241086a200110bc052002280208210320022002280210220136021c20022003360218200241206a2003200110e40102400240200228022022040d00420221050c010b200241206a41086a280200210120022802242106200241003602a824200241306a41196a2107200241306a41126a2108200241306a410b6a2109200241306a410472210a200241306a41096a210b200241306a410a6a210c200241306a410d6a210d200241306a41106a210e200241306a41116a210f200241306a41146a2110200241306a41176a2111200241306a41186a2112200241306a411b6a2113200241306a411e6a2114200241306a411f6a2115200241306a41206a2116200241d2006a211741012118410021192004211a0240024003402001450d012001417f6a211b201a41016a211c4200210502400240201a2d00000e020100030b20024100360230201b450d02201c2d0000211b200241013602302002201b3a003420014102460d02201a2d0002211b200241023602302002201b3a003520014103460d02201a2d0003211b200241033602302002201b3a003620014104460d02200241043602302002201a2d00043a003720014105460d02200241306a41086a201a2d00053a00002002410536023020014106460d02200b201a2d00063a00002002410636023020014107460d02200c201a2d00073a00002002410736023020014108460d022009201a2d00083a00002002410836023020014109460d02200241306a410c6a201a2d00093a0000200241093602302001410a460d02200d201a2d000a3a00002002410a3602302001410b460d02200241306a410e6a201a2d000b3a00002002410b3602302001410c460d02200241306a410f6a201a2d000c3a00002002410c3602302001410d460d02200e201a2d000d3a00002002410d3602302001410e460d02200f201a2d000e3a00002002410e3602302001410f460d022008201a2d000f3a00002002410f36023020014110460d02200241306a41136a201a2d00103a00002002411036023020014111460d022010201a2d00113a00002002411136023020014112460d02200241306a41156a201a2d00123a00002002411236023020014113460d02200241306a41166a201a2d00133a00002002411336023020014114460d022011201a2d00143a00002002411436023020014115460d022012201a2d00153a00002002411536023020014116460d022007201a2d00163a00002002411636023020014117460d02200241306a411a6a201a2d00173a00002002411736023020014118460d022013201a2d00183a00002002411836023020014119460d02200241306a411c6a201a2d00193a0000200241193602302001411a460d02200241306a411d6a201a2d001a3a00002002411a3602302001411b460d022014201a2d001b3a00002002411b3602302001411c460d022015201a2d001c3a00002002411c3602302001411d460d022016201a2d001d3a00002002411d3602302001411e460d02200241306a41216a201a2d001e3a00002002411e3602302001411f460d022017201a2d001f3a00002002411f36023020014120460d02200241306a41236a201a2d00203a0000200241e0246a41026a221b200941026a2d00003a0000200241e8246a41026a221c200841026a2d00003a0000200241203602302002200a2f01003b01d024200220092f00003b01e024200220082f00003b01e8242002200a41026a2d00003a00d2242002280037211d200228013e211e2002280045211f200228024c212020022802502121200241ec246a41026a2222200741026a2d00003a0000200220072f00003b01ec242001415f6a4104490d022001415b6a410f4d0d02200241c8246a41026a201b2d00003a0000200241c4246a41026a201c2d00003a0000200241c0246a41026a20222d00003a0000200220022f01d0243b01cc24200220022d00d2243a00ce24200220022f01e0243b01c824200220022f01e8243b01c424200220022f01ec243b01c0242001414b6a211b201a41356a211c201a412d6a2900002123201a2900252124201a2800212125420121050b200241b8246a41026a221a200241c8246a41026a2d00003a0000200241b4246a41026a2222200241c4246a41026a2d00003a0000200241b0246a41026a2226200241c0246a41026a2d00003a0000200220022d00ce243a00be24200220022f01cc243b01bc24200220022f01c8243b01b824200220022f01c4243b01b424200220022f01c0243b01b024200241a8126a20196a220141086a2025360200200120053703002001410e6a20022d00be243a00002001410c6a20022f01bc243b01002001410f6a201d360000200141156a201a2d00003a0000200141136a20022f01b8243b0000200141166a201e3601002001411c6a20222d00003a00002001411a6a20022f01b4243b00002001411d6a201f360000200141236a20262d00003a0000200141216a20022f01b0243b0000200141386a2023370300200141306a2024370300200141286a2021360200200141246a2020360200200220183602a824201841016a2118201b2101201c211a201941c0006a2219418012470d000b024020022802a8244124490d0020022903a8122124200241306a200241b0126a41f81110d40b1a4203210520244202510d02200241a8126a200241306a41f81110d40b1a202421050c020b41958bcc00411b41b08bcc001035000b420321050b0240024020054203520d00200242003702d42420024100280284ee4d3602d0242002410d3602e4242002200241186a3602e0242002200241d0246a3602e824200241c4006a410136020020024201370234200241949fc5003602302002200241e0246a360240200241e8246a41b4dfc400200241306a103b1a20022802d02420022802d82410d101024020022802d424450d0020022802d02410390b420221050c010b200241306a200241a8126a41f81110d40b1a0b2006450d00200410390b200041086a200241306a41f81110d40b1a200020053703000240200228020c450d00200310390b200241f0246a24000be80301067f230041d0006b22022400200241086a41f5e7c000410810cb01200241186a4190abcd00410710cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b960601047f23004180026b22022400200241e8006a200110b9052002280268210120022002280270220336027c2002200136027820024180016a2001200310e4010240024020022802800122040d00410021030c010b2002280284012105200220024180016a41086a2802003602f401200220043602f00120024190016a200241f0016a10be050240024020022802d0012203450d00200241286a41386a20024190016a41386a290300370300200241286a41306a20024190016a41306a290300370300200241286a41286a20024190016a41286a290300370300200241286a41206a20024190016a41206a290300370300200241286a41186a20024190016a41186a290300370300200241286a41106a20024190016a41106a290300370300200241286a41086a20024190016a41086a290300370300200241086a41086a200241dc016a290200370300200241086a41106a200241e4016a290200370300200241086a41186a200241ec016a2802003602002002200229039001370328200220022902d4013703080c010b2002420037022c4100210320024100280284ee4d3602282002410d36020c2002200241f8006a3602082002200241286a3602fc01200241a4016a41013602002002420137029401200241949fc500360290012002200241086a3602a001200241fc016a41b4dfc40020024190016a103b1a2002280228200228023010d101200228022c450d00200228022810390b2005450d00200410390b20002002290328370300200041386a200241286a41386a290300370300200041306a200241286a41306a290300370300200041286a200241286a41286a290300370300200041206a200241286a41206a290300370300200041186a200241286a41186a290300370300200041106a200241286a41106a290300370300200041086a200241286a41086a29030037030020002002290308370244200041cc006a200241086a41086a290300370200200041d4006a200241086a41106a290300370200200041dc006a200241086a41186a280200360200200020033602400240200228026c450d00200110390b20024180026a24000b9307030a7f017e017f230041a0026b22022400200241f0016a20011086020240024002400240024020022d00f0014101460d00200241d0016a41186a220320024189026a290000370300200241d0016a41106a220420024181026a290000370300200241d0016a41086a2205200241f9016a290000370300200220022900f1013703d001200241f0016a20011092032002280290022206450d0020024190016a41206a220720022903f00137030020024190016a41386a2208200241f0016a41186a29030037030020024190016a41306a2209200241f0016a41106a29030037030020024190016a41286a220a200241f0016a41086a29030037030020024190016a41086a220b200529030037030020024190016a41106a2205200429030037030020024190016a41186a22042003290300370300200220022903d0013703900120024194026a2802002103200241f0016a41286a290300210c200241d0006a41386a220d2008290300370300200241d0006a41306a22082009290300370300200241d0006a41286a2209200a290300370300200241d0006a41206a220a2007290300370300200241d0006a41186a22072004290300370300200241d0006a41106a22042005290300370300200241d0006a41086a2205200b2903003703002002200229039001370350200241106a41086a2005290300370300200241106a41106a2004290300370300200241106a41186a2007290300370300200241106a41206a200a290300370300200241106a41286a2009290300370300200241106a41306a2008290300370300200241106a41386a200d29030037030020022002290350370310200241086a200110c1012002280208450d0120024100360290010c020b200041003602400c030b20024190016a2001200228020c109d022002280290010d010b200041003602402003450d01200341306c450d01200610390c010b200041d0006a200229039001370200200041d8006a20024190016a41086a280200360200200041386a200241106a41386a290300370300200041306a200241106a41306a290300370300200041286a200241106a41286a290300370300200041206a200241106a41206a290300370300200041186a200241106a41186a290300370300200041106a200241106a41106a290300370300200041086a200241106a41086a29030037030020002002290310370300200041c8006a200c37030020002003360244200020063602400b200241a0026a24000bff0301067f230041d0006b22022400200241086a41f3e5c000410810cb01200241186a41a8cfc600411210cb0102400240411010382203450d0020032001290000370000200341086a200141086a29000037000020022003411010cc01370338200241cc006a200341106a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9b0501067f230041e0006b22022400200241086a41f5e7c000410810cb01200241186a41c8aacd00410f10cb012002410036024020024201370338200241386a41004120107720022802382203200228024022046a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002002200441206a2205360240200128022021010240200228023c20056b41034b0d00200241386a20054104107720022802382103200228024021050b200320056a2001360000200220022802382201200541046a220510cc01370348200241dc006a200120056a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a1083010240200228023c450d00200110390b024002402002280230220341206a2201417f4c0d000240024020010d00410121050c010b200110382205450d020b2000200536020041002104200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002104200028020021050b200520046a22012002290008370000200141086a200241086a41086a2900003700002006200441106a220136020002402007280200220420016b410f4b0d002000200141101077200041046a2802002104200041086a28020021010b200041086a2206200141106a22053602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200420056b20034f0d00200020052003107720062802002105200028020021070b200720056a2001200310d40b1a2006200520036a3602000240200228022c450d00200110390b200241e0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41cde5c000410410cb01200241186a41fcd6c700411110cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41c7e5c000410610cb01200241186a41e880c400410d10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b8f0f020c7f017e23004180016b220524000240024020024108490d00200141086a2101200241786a21020c010b41002102024041002802d0a94e0d0041b8c0cd0021010c010b4100210241002802cca94e210641002802c8a94e210741002802d4a94e210841b8c0cd0021012005412c6a41b8c0cd00360200200541206a4201370300200541c4006a41f39fc000ad4280808080b00b84370200200541306a4200370300200541186a4113360200200541e09fc000360214200541386a41e09fc000ad4280808080b00284370300200541d89fc00036021c20054281808080b00e37024c2005410036024020054101360210200741b8c0cd00200841024622081b200541106a200641c0a4c00020081b2802101103000b20054100360210024002402002450d00200520012d00003a00142005410136021020024101460d00200520012d00013a00152005410236021020024102460d00200520012d00023a00162005410336021020024103460d00200520012d00033a00172005410436021020024104460d00200541186a20012d00043a00002005410536021020024105460d00200541196a20012d00053a00002005410636021020024106460d002005411a6a20012d00063a00002005410736021020024107460d002005411b6a20012d00073a00002005410836021020024108460d002005411c6a20012d00083a00002005410936021020024109460d002005411d6a20012d00093a00002005410a3602102002410a460d002005411e6a20012d000a3a00002005410b3602102002410b460d002005411f6a20012d000b3a00002005410c3602102002410c460d00200541206a20012d000c3a00002005410d3602102002410d460d00200541216a20012d000d3a00002005410e3602102002410e460d00200541226a20012d000e3a00002005410f3602102002410f460d00200541236a20012d000f3a00002005411036021020024110460d00200541246a20012d00103a00002005411136021020024111460d00200541256a20012d00113a00002005411236021020024112460d00200541266a20012d00123a00002005411336021020024113460d00200541276a20012d00133a00002005411436021020024114460d00200541286a20012d00143a00002005411536021020024115460d00200541296a20012d00153a00002005411636021020024116460d002005412a6a20012d00163a00002005411736021020024117460d002005412b6a20012d00173a00002005411836021020024118460d002005412c6a20012d00183a00002005411936021020024119460d002005412d6a20012d00193a00002005411a3602102002411a460d002005412e6a20012d001a3a00002005411b3602102002411b460d002005412f6a20012d001b3a00002005411c3602102002411c460d00200541306a20012d001c3a00002005411d3602102002411d460d00200541316a20012d001d3a00002005411e3602102002411e460d00200541326a20012d001e3a00002005411f3602102002411f460d00200541336a20012d001f3a0000200541203602102005200541296a220928000036027820052005412c6a28000036007b200520052f01143b0174200520052d00163a00762005411e6a2801002107200541256a2800002108200541106a41206a280200210a20052800172106200528007b210b200541f0006a41026a220c2005411d6a2d00003a000020052005411b6a2f00003b0170200541ec006a41026a220d200541246a2d00003a00002005200541226a2f01003b016c200541e8006a41026a220e2005412b6a2d00003a0000200520092f00003b0168200541e4006a41026a220920052d00763a0000200520052f01743b0164200541e0006a41026a220f200c2d00003a0000200520052f01703b0160200541dc006a41026a2210200d2d00003a0000200520052f016c3b015c200541d8006a41026a220d200e2d00003a0000200520052f01683b01582002417c714120460d00200541f8006a41026a200f2d00003a0000200541f4006a41026a20102d00003a0000200c200d2d00003a0000200520052f01643b0110200520052f01603b0178200520052f015c3b0174200520052f01583b0170200520092d00003a001220012800202101410021020c010b410121020b200541086a41026a200541f8006a41026a2d00003a0000200541046a41026a200541f4006a41026a2d00003a0000200541026a200541f0006a41026a2d00003a0000200520052d00123a000e200520052f01103b010c200520052f01783b0108200520052f01743b0104200520052f01703b01000240024020020d00024020044110490d00200020052f010c3b0108200020052f01083b000f20002007360112200020052f01043b001620002008360019200020052f01003b001d2000410a6a20052d000e3a00002000410b6a2006360000200041116a200541086a41026a2d00003a0000200041186a200541046a41026a2d00003a00002000411f6a200541026a2d00003a000020032900002111200041386a200341086a290000370300200041306a2011370300200041286a20013602002000200a360224200041206a200b360200200042003703000c020b200042013703000c010b200042013703000b20054180016a24000b860201027f230041b0086b220224002002200141800810d40b22014180086a200010c304200128028808210320012802800821020240410110382200450d00200142013702940820012000360290080240024020012802cc074102470d00200041003a000020014101360298080c010b200041013a00002001410136029808200120014190086a10b3020b200141a0086a41086a20014190086a41086a28020036020020012001290390083703a00820022003200141a0086a10de010240200128028408450d00200210390b024020012802cc074102460d00024020012802c0072200450d0020012802c407450d00200010390b200110c5040b200141b0086a24000f0b1032000bf80301077f230041206b220224002002200010c10502400240200128020822034105744104722200417f4c0d00200128020021012002280208210420022802002105200010382206450d01200241003602182002200036021420022006360210024002400240200341c000490d00024002400240200341808001490d002003418080808004490d01200641033a0000410121002002410136021802402002280214417f6a41034b0d00200241106a41014104107720022802102106200228021821000b200620006a2003360000200041046a21000c020b41022100200620034102744101723b00000c010b20062003410274410272360000410421000b20022000360218200120034105746a21070c010b200620034102743a000041012100200241013602182003450d01200120034105746a21070b0340200141206a21080240200228021420006b411f4b0d00200241106a20004120107720022802102106200228021821000b200620006a22032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002002200041206a22003602182008210120072008470d000b0b200520042006200010e90102402002280214450d00200610390b02402002280204450d00200510390b200241206a24000f0b1034000b1032000b840301067f23004180016b220224002002200141e00010d40b220341e0006a200010b905200328026821042003280260210520034100360278200342013703702003200341f0006a108e0320032802502100200341f0006a200341d8006a280200220110ac020240024020010d0020032802702106200328027821010c010b200141057421072003280278210103400240200328027420016b411f4b0d00200341f0006a200141201077200328027821010b2003280270220620016a22022000290000370000200241086a200041086a290000370000200241106a200041106a290000370000200241186a200041186a2900003700002003200141206a2201360278200041206a2100200741606a22070d000b0b200520042006200110e90102402003280274450d00200610390b02402003280264450d00200510390b0240200341c4006a2802002200450d00200041306c450d00200341c0006a28020010390b0240200341d4006a28020041ffffff3f71450d00200328025010390b20034180016a24000bb708030c7f037e017f230041f0006b22022400200241106a200110b7052002280210210120022002280218220336022420022001360220200241286a2001200310e40102400240200228022822040d00410021030c010b200228022c21052002200241306a28020036023c20022004360238200241086a200241386a10c1010240024020022802080d00024002400240200228020c2206200228023c22074105762201200120064b1b22014105742203417f4c0d0002400240024020010d00410821030c010b200310382203450d010b41002108200241003602502002200136024c2002200336024802402006450d00200741676a2101200241e0006a2109200241d8006a41096a210a200241e2006a210b200241e3006a210c200241c3006a210d034020014167460d042002200228023822072d00003a005c2002200741016a36023820014168460d042002200228023822072d00003a005d2002200741016a36023820014169460d042002200228023822072d00003a005e2002200741016a3602382001416a460d042002200228023822072d00003a005f2002200741016a3602382001416b460d042009200228023822072d00003a00002002200741016a3602382001416c460d04200a200228023822072d00003a00002002200741016a3602382001416d460d04200b200228023822072d00003a00002002200741016a3602382001416e460d04200c200228023822072d00003a00002002200741016a3602380240200141116a41104f0d00200141116a21010c060b200229025c210e2002200741116a36023802402001417f470d00410021010c060b200741096a290000210f200729000121102002200741126a3602384100211102400240024020072d00110e03020001080b410121110c010b410221110b02402008200228024c470d00200241c8006a200810a50520022802482103200228025021080b200320084105746a220720113a00182007200e370310200720022800403600192007411c6a200d2800003600002007200f370308200720103703002002200228025041016a2208360250200141676a21012006417f6a22060d000b200228024821030b200229024c210e20030d050c040b1032000b1034000b410021010b2002200136023c0240200228024c41ffffff3f71450d00200228024810390b0b2002420037024c4100210320024100280284ee4d3602482002410d3602442002200241206a3602402002200241c8006a360254200241ec006a41013602002002420137025c200241949fc5003602582002200241c0006a360268200241d4006a41b4dfc400200241d8006a103b1a2002280248200228025010d101200228024c450d00200228024810390b2005450d00200410390b0240024020030d0020004200370204200041002802e8c8483602000c010b2000200e370204200020033602000b02402002280214450d00200228021010390b200241f0006a24000b13002000410f3602042000419cb5c1003602000b3400200041a5e6c00036020420004100360200200041146a4104360200200041106a41ccf2c100360200200041086a42083702000b130020004106360204200041e8fcc1003602000b2c01017f02404104103822020d001032000b200020023602002002411436000020004284808080c0003702040b2d01017f02404104103822020d001032000b20002002360200200241e40036000020004284808080c0003702040b3801017f02404110103822020d001032000b2002420037000820024280c0a8ca9a3a370000200020023602002000429080808080023702040b3901017f02404110103822020d001032000b2002420037000820024280d0f29ce1c800370000200020023602002000429080808080023702040b3901017f02404110103822020d001032000b2002420037000820024280c0caf384a302370000200020023602002000429080808080023702040b9b6604027f017e247f027e230041a0026b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e0f0102030405060708090a0b0c0d0e00010b2000410f3a00000c0e0b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0d0b2001410c6a2802002203ad42c8007e2204422088a70d0d2004a72205417f4c0d0d410021060240024020050d0041042107410021080c010b200141046a2802002109200510382207450d0f200541c8006e2108200541c800490d004100210a2009210b2008210c03402005200a460d01200c450d114100210d4100210e024002400240024002400240200b2d00000e06050102030400050b200241c8016a41026a2009200a6a220f41036a2d00003a0000200241e8016a41086a200f41186a290000370300200241e8016a41106a200f41206a2d00003a00002002200f41016a2f00003b01c8012002200f41106a2900003703e801200f410c6a2800002110200f41086a2800002111200f41046a28000021124105210e0c040b2009200a6a220f410c6a2802002210417f4c0d13200f41046a280200210f4101210e4101211202402010450d00201010382212450d150b2012200f201010d40b1a201021110c030b4102210e200241c8016a41026a2009200a6a220f41036a2d00003a0000200241e8016a41086a200f41186a290000370300200241e8016a41106a200f41206a2d00003a00002002200f41016a2f00003b01c8012002200f41106a2900003703e801200f410c6a2800002110200f41086a2800002111200f41046a28000021120c020b4103210e200241c8016a41026a2009200a6a220f41036a2d00003a0000200241e8016a41086a200f41186a290000370300200241e8016a41106a200f41206a2d00003a00002002200f41016a2f00003b01c8012002200f41106a2900003703e801200f410c6a2800002110200f41086a2800002111200f41046a28000021120c010b200241c8016a41026a2009200a6a220f41036a2d00003a0000200241e8016a41086a200f41186a290000370300200241e8016a41106a200f41206a2d00003a00002002200f41016a2f00003b01c8012002200f41106a2900003703e801200f410c6a2800002110200f41086a28000021114104210e200f41046a28000021120b024002400240024002400240200b2d00240e06050102030400050b200241b0016a41026a2009200a6a220f41276a2d00003a000020024180026a41086a200f413c6a29000037030020024180026a41106a200f41c4006a2d00003a00002002200f41256a2f00003b01b0012002200f41346a29000037038002200f41306a2800002113200f412c6a2800002114200f41286a28000021154105210d0c040b2009200a6a220f41306a2802002214417f4c0d13200f41286a280200210f4101210d4101211502402014450d00201410382215450d150b2015200f201410d40b1a201421130c030b4102210d200241b0016a41026a2009200a6a220f41276a2d00003a000020024180026a41086a200f413c6a29000037030020024180026a41106a200f41c4006a2d00003a00002002200f41256a2f00003b01b0012002200f41346a29000037038002200f41306a2800002113200f412c6a2800002114200f41286a28000021150c020b200241b0016a41026a2009200a6a220f41276a2d00003a000020024180026a41086a200f413c6a29000037030020024180026a41106a200f41c4006a2d00003a00002002200f41256a2f00003b01b0012002200f41346a29000037038002200f41306a2800002113200f412c6a2800002114200f41286a28000021154103210d0c010b200241b0016a41026a2009200a6a220f41276a2d00003a000020024180026a41086a200f413c6a29000037030020024180026a41106a200f41c4006a2d00003a00002002200f41256a2f00003b01b0012002200f41346a29000037038002200f41306a2800002113200f412c6a2800002114200f41286a28000021154104210d0b200b41c8006a210b2007200a6a220f200e3a0000200f41016a20022f01c8013b0000200f41036a200241c8016a41026a2d00003a0000200f410c6a2010360200200f41086a2011360200200f41046a2012360200200f41106a20022903e801370200200f41186a200241e8016a41086a290300370200200f41206a200241e8016a41106a280200360200200f41246a200d3a0000200f41256a20022f01b0013b0000200f41276a200241b0016a41026a2d00003a0000200f41306a2013360200200f412c6a2014360200200f41286a2015360200200f41346a200229038002370200200f413c6a20024180026a41086a290300370200200f41c4006a20024180026a41106a280200360200200a41c8006a210a200c417f6a220c0d000b0b024002400240024002400240200141106a2d00000e06050102030400050b200241e6006a200141136a2d00003a0000200241d8006a200141286a290200370300200241d0006a41106a200141306a2d00003a00002002200141116a2f00003b01642002200141206a2902003703502001411c6a280200210f200141186a2802002116200141146a2802002114410521060c040b2001411c6a280200220f417f4c0d11200141146a280200210a41012106410121140240200f450d00200f10382214450d130b2014200a200f10d40b1a200f21160c030b41022106200241e4006a41026a200141136a2d00003a0000200241d8006a200141286a290200370300200241d0006a41106a200141306a2d00003a00002002200141116a2f00003b01642002200141206a2902003703502001411c6a280200210f200141186a2802002116200141146a28020021140c020b200241e6006a200141136a2d00003a0000200241d8006a200141286a290200370300200241d0006a41106a200141306a2d00003a00002002200141116a2f00003b01642002200141206a2902003703502001411c6a280200210f200141186a2802002116200141146a2802002114410321060c010b200241e6006a200141136a2d00003a0000200241d8006a200141286a290200370300200241d0006a41106a200141306a2d00003a00002002200141116a2f00003b01642002200141206a2902003703502001411c6a280200210f200141186a2802002116200141146a2802002114410421060b4100211741002118024002400240024002400240200141346a2d00000e06050102030400050b200241fe006a200141376a2d00003a0000200241f0006a200141cc006a290200370300200241f8006a200141d4006a2d00003a00002002200141356a2f00003b017c2002200141c4006a290200370368200141c0006a280200210a2001413c6a2802002119200141386a2802002112410521180c040b200141c0006a280200220a417f4c0d11200141386a280200210b41012118410121120240200a450d00200a10382212450d130b2012200b200a10d40b1a200a21190c030b41022118200241fc006a41026a200141376a2d00003a0000200241f0006a200141cc006a290200370300200241f8006a200141d4006a2d00003a00002002200141356a2f00003b017c2002200141c4006a290200370368200141c0006a280200210a2001413c6a2802002119200141386a28020021120c020b200241fe006a200141376a2d00003a0000200241f0006a200141cc006a290200370300200241f8006a200141d4006a2d00003a00002002200141356a2f00003b017c2002200141c4006a290200370368200141c0006a280200210a2001413c6a2802002119200141386a2802002112410321180c010b200241fe006a200141376a2d00003a0000200241f0006a200141cc006a290200370300200241f8006a200141d4006a2d00003a00002002200141356a2f00003b017c2002200141c4006a290200370368200141c0006a280200210a2001413c6a2802002119200141386a2802002112410421180b024002400240024002400240200141d8006a2d00000e06050102030400050b20024196016a200141db006a2d00003a000020024188016a200141f0006a29020037030020024190016a200141f8006a2d00003a00002002200141d9006a2f00003b0194012002200141e8006a29020037038001200141e4006a280200210b200141e0006a280200211a200141dc006a2802002115410521170c040b200141e4006a280200220b417f4c0d11200141dc006a280200210c41012117410121150240200b450d00200b10382215450d130b2015200c200b10d40b1a200b211a0c030b4102211720024194016a41026a200141db006a2d00003a000020024188016a200141f0006a29020037030020024190016a200141f8006a2d00003a00002002200141d9006a2f00003b0194012002200141e8006a29020037038001200141e4006a280200210b200141e0006a280200211a200141dc006a28020021150c020b20024196016a200141db006a2d00003a000020024188016a200141f0006a29020037030020024190016a200141f8006a2d00003a00002002200141d9006a2f00003b0194012002200141e8006a29020037038001200141e4006a280200210b200141e0006a280200211a200141dc006a2802002115410321170c010b20024196016a200141db006a2d00003a000020024188016a200141f0006a29020037030020024190016a200141f8006a2d00003a00002002200141d9006a2f00003b0194012002200141e8006a29020037038001200141e4006a280200210b200141e0006a280200211a200141dc006a2802002115410421170b4100211b4100211c024002400240024002400240200141fc006a2d00000e06050102030400050b200241ae016a200141ff006a2d00003a0000200241a0016a20014194016a290200370300200241a8016a2001419c016a2d00003a00002002200141fd006a2f00003b01ac0120022001418c016a2902003703980120014188016a280200211d20014184016a280200210c20014180016a28020021134105211c0c040b20014188016a280200220c417f4c0d1120014180016a280200210d4101211c410121130240200c450d00200c10382213450d130b2013200d200c10d40b1a200c211d0c030b4102211c200241ac016a41026a200141ff006a2d00003a0000200241a0016a20014194016a290200370300200241a8016a2001419c016a2d00003a00002002200141fd006a2f00003b01ac0120022001418c016a2902003703980120014188016a280200211d20014184016a280200210c20014180016a28020021130c020b200241ae016a200141ff006a2d00003a0000200241a0016a20014194016a290200370300200241a8016a2001419c016a2d00003a00002002200141fd006a2f00003b01ac0120022001418c016a2902003703980120014188016a280200211d20014184016a280200210c20014180016a28020021134103211c0c010b200241ae016a200141ff006a2d00003a0000200241a0016a20014194016a290200370300200241a8016a2001419c016a2d00003a00002002200141fd006a2f00003b01ac0120022001418c016a2902003703980120014188016a280200211d20014184016a280200210c20014180016a28020021134104211c0b024002400240024002400240200141a0016a2d00000e06050102030400050b200241c6016a200141a3016a2d00003a0000200241b8016a200141b8016a290200370300200241c0016a200141c0016a2d00003a00002002200141a1016a2f00003b01c4012002200141b0016a2902003703b001200141ac016a280200211e200141a8016a280200210d200141a4016a28020021114105211b0c040b200141ac016a280200220d417f4c0d11200141a4016a280200210e4101211b410121110240200d450d00200d10382211450d130b2011200e200d10d40b1a200d211e0c030b4102211b200241c4016a41026a200141a3016a2d00003a0000200241b8016a200141b8016a290200370300200241c0016a200141c0016a2d00003a00002002200141a1016a2f00003b01c4012002200141b0016a2902003703b001200141ac016a280200211e200141a8016a280200210d200141a4016a28020021110c020b200241c6016a200141a3016a2d00003a0000200241b8016a200141b8016a290200370300200241c0016a200141c0016a2d00003a00002002200141a1016a2f00003b01c4012002200141b0016a2902003703b001200141ac016a280200211e200141a8016a280200210d200141a4016a28020021114103211b0c010b200241c6016a200141a3016a2d00003a0000200241b8016a200141b8016a290200370300200241c0016a200141c0016a2d00003a00002002200141a1016a2f00003b01c4012002200141b0016a2902003703b001200141ac016a280200211e200141a8016a280200210d200141a4016a28020021114104211b0b4100211f4100212002402001418c026a2d00004101470d00200241d8016a2001419d026a280000360200200241d0016a20014195026a29000037030020022001418d026a2900003703c801410121200b024002400240024002400240200141c4016a2d00000e06050102030400050b200241e2016a200141c7016a2d00003a0000200241f0016a200141dc016a290200370300200241f8016a200141e4016a2d00003a00002002200141c5016a2f00003b01e0012002200141d4016a2902003703e801200141d0016a2802002121200141cc016a280200210e200141c8016a28020021094105211f0c040b200141d0016a280200220e417f4c0d11200141c8016a28020021104101211f410121090240200e450d00200e10382209450d130b20092010200e10d40b1a200e21210c030b4102211f200241e0016a41026a200141c7016a2d00003a0000200241f0016a200141dc016a290200370300200241f8016a200141e4016a2d00003a00002002200141c5016a2f00003b01e0012002200141d4016a2902003703e801200141d0016a2802002121200141cc016a280200210e200141c8016a28020021090c020b200241e2016a200141c7016a2d00003a0000200241f0016a200141dc016a290200370300200241f8016a200141e4016a2d00003a00002002200141c5016a2f00003b01e0012002200141d4016a2902003703e801200141d0016a2802002121200141cc016a280200210e200141c8016a28020021094103211f0c010b200241e2016a200141c7016a2d00003a0000200241f0016a200141dc016a290200370300200241f8016a200141e4016a2d00003a00002002200141c5016a2f00003b01e0012002200141d4016a2902003703e801200141d0016a2802002121200141cc016a280200210e200141c8016a28020021094104211f0b41002122024002400240024002400240200141e8016a2d00000e06050102030400050b200241e6016a200141eb016a2d00003a000020024188026a20014180026a29020037030020024190026a20014188026a2d00003a00002002200141e9016a2f00003b01e4012002200141f8016a29020037038002200141f4016a2802002123200141f0016a2802002110200141ec016a2802002105410521220c040b200141f4016a2802002210417f4c0d11200141ec016a2802002101410121224101210502402010450d00201010382205450d130b20052001201010d40b1a201021230c030b41022122200241e4016a41026a200141eb016a2d00003a000020024188026a20014180026a29020037030020024190026a20014188026a2d00003a00002002200141e9016a2f00003b01e4012002200141f8016a29020037038002200141f4016a2802002123200141f0016a2802002110200141ec016a28020021050c020b200241e6016a200141eb016a2d00003a000020024188026a20014180026a29020037030020024190026a20014188026a2d00003a00002002200141e9016a2f00003b01e4012002200141f8016a29020037038002200141f4016a2802002123200141f0016a2802002110200141ec016a2802002105410321220c010b200241e6016a200141eb016a2d00003a000020024188026a20014180026a29020037030020024190026a20014188026a2d00003a00002002200141e9016a2f00003b01e4012002200141f8016a29020037038002200141f4016a2802002123200141f0016a2802002110200141ec016a2802002105410421220b200041116a20022f01643b0000200041206a2002290350370200200041356a20022f017c3b0000200041136a200241e4006a41026a2d00003a0000200041286a200241d0006a41086a290300370200200041306a200241d0006a41106a280200360200200041376a200241fc006a41026a2d00003a0000200241386a41086a2201200241e8006a41086a290300370300200241386a41106a2224200241e8006a41106a28020036020020022002290368370338200041db006a20024194016a41026a2d00003a0000200041d9006a20022f0194013b0000200041e8006a200229038001370200200041f0006a20024180016a41086a290300370200200041f8006a20024180016a41106a280200360200200041fd006a20022f01ac013b0000200041ff006a200241ac016a41026a2d00003a0000200241206a41086a222520024198016a41086a290300370300200241206a41106a222620024198016a41106a2802003602002002200229039801370320200041a3016a200241c4016a41026a2d00003a0000200041a1016a20022f01c4013b0000200041c0016a200241b0016a41106a280200360200200041b8016a200241b0016a41086a290300370200200041b0016a20022903b0013702002000419d026a200241c8016a41106a28020036000020004195026a200241c8016a41086a2903003700002000418d026a20022903c801370000200041c7016a200241e0016a41026a2d00003a0000200041c5016a20022f01e0013b0000200241086a41106a2227200241e8016a41106a280200360200200241086a41086a2228200241e8016a41086a290300370300200220022903e801370308200041eb016a200241e4016a41026a2d00003a0000200041e9016a20022f01e4013b000020004188026a20024180026a41106a28020036020020004180026a20024180026a41086a290300370200200041f8016a200229038002370200200041c0006a200a3602002000413c6a2019360200200041386a2012360200200041346a20183a00002000411c6a200f360200200041186a2016360200200041146a2014360200200041106a20063a00002000410c6a2003360200200041086a2008360200200041046a200736020020004188016a201d36020020004184016a200c36020020004180016a2013360200200041fc006a201c3a0000200041e4006a200b360200200041e0006a201a360200200041dc006a2015360200200041d8006a20173a0000200041c4006a2002290338370200200041cc006a2001290300370200200041d4006a20242802003602002000419c016a202628020036020020004194016a20252903003702002000418c016a2002290320370200200041d0016a2021360200200041cc016a200e360200200041c8016a2009360200200041c4016a201f3a0000200041ac016a201e360200200041a8016a200d360200200041a4016a2011360200200041a0016a201b3a0000200041e4016a2027280200360200200041dc016a2028290300370200200041d4016a20022903083702002000418c026a20203a0000200041f4016a2023360200200041f0016a2010360200200041ec016a2005360200200041e8016a20223a0000200041a3026a20024180026a41026a2d00003a0000200041a1026a20022f0080023b0000200041023a00000c0c0b2001410c6a2802002206ad42c4007e2204422088a70d0c2004a72213417f4c0d0c0240024020130d0041002107410421090c010b200141046a2802002105201310382209450d0e201341c4006e2107201341c400490d004100210a200241ca016a21112005210f2007210b03402013200a460d01200b450d1120024180026a41086a2210200f41086a29020037030020024180026a41106a2214200f41106a29020037030020024180026a41186a2212200f41186a2902003703002002200f290200370380024100210c024002400240024002400240200f2d00200e06050102030400050b20112005200a6a220141236a2d00003a0000200241e8016a41086a200141386a290000370300200241e8016a41106a200141c0006a2d00003a00002002200141216a2f00003b01c8012002200141306a2900003703e8012001412c6a2800002115200141286a280000210d200141246a280000210e4105210c0c040b2005200a6a2201412c6a280200220d417f4c0d12200141246a28020021014101210c4101210e0240200d450d00200d1038220e450d140b200e2001200d10d40b1a200d21150c030b4102210c200241c8016a41026a2005200a6a220141236a2d00003a0000200241e8016a41086a200141386a290000370300200241e8016a41106a200141c0006a2d00003a00002002200141216a2f00003b01c8012002200141306a2900003703e8012001412c6a2800002115200141286a280000210d200141246a280000210e0c020b20112005200a6a220141236a2d00003a0000200241e8016a41086a200141386a290000370300200241e8016a41106a200141c0006a2d00003a00002002200141216a2f00003b01c8012002200141306a2900003703e8012001412c6a2800002115200141286a280000210d200141246a280000210e4103210c0c010b20112005200a6a220141236a2d00003a0000200241e8016a41086a200141386a290000370300200241e8016a41106a200141c0006a2d00003a00002002200141216a2f00003b01c8012002200141306a2900003703e8012001412c6a2800002115200141286a280000210d200141246a280000210e4104210c0b200f41c4006a210f2009200a6a2201200229038002370200200141186a2012290300370200200141106a2014290300370200200141086a2010290300370200200141206a200c3a0000200141216a20022f01c8013b0000200141236a20112d00003a00002001412c6a2015360200200141286a200d360200200141246a200e360200200141306a20022903e801370200200141386a200241e8016a41086a290300370200200141c0006a200241e8016a41106a280200360200200a41c4006a210a200b417f6a220b0d000b0b200041033a00002000410c6a2006360200200041086a2007360200200041046a20093602000c0b0b200041043a00000c0a0b200041053a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c090b200041063a0000200041046a200141046a2802003602000c080b200041073a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c070b200041083a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c060b200041093a0000200041086a200141086a290300370300200041046a200141046a2802003602000c050b200141046a280200210d4101210b02400240024002400240200141086a2d00000e050104020300010b200241ea016a2001410b6a2d00003a000020024180026a41046a2001411c6a2d00003a00002002200141096a2f00003b01e8012002200141186a28020036028002200141146a280200210f200141106a280200210c2001410c6a280200210a4104210b0c030b200241ea016a2001410b6a2d00003a000020024180026a41086a200141206a29020037030020024180026a41106a200141286a2d00003a00002002200141096a2f00003b01e8012002200141186a29020037038002200141146a280200210f200141106a280200210c2001410c6a280200210a4100210b0c020b200141146a280200220f417f4c0d072001410c6a280200210b02400240200f0d004101210a0c010b200f1038220a450d090b200a200b200f10d40b1a4102210b200f210c0c010b200241ea016a2001410b6a2d00003a000020024180026a41086a200141206a29020037030020024180026a41106a200141286a2d00003a00002002200141096a2f00003b01e8012002200141186a29020037038002200141146a280200210f200141106a280200210c2001410c6a280200210a4103210b0b200141c0006a2903002129200141386a290300212a42062104024002400240024002400240024020012802300e0700010203040506000b420021040c050b420121040c040b420221040c030b420321040c020b420421040c010b420521040b2000410a3a0000200041c0006a2029370300200041386a202a370300200041086a200b3a0000200041046a200d360200200041096a20022f01e8013b0000200041146a200f360200200041106a200c3602002000410c6a200a360200200041186a200229038002370200200041306a20043703002000410b6a200241ea016a2d00003a0000200041206a20024180026a41086a290300370200200041286a20024180026a41106a2802003602000c040b4101210b02400240024002400240200141046a2d00000e050104020300010b200241ea016a200141076a2d00003a000020024180026a41046a200141186a2d00003a00002002200141056a2f00003b01e8012002200141146a28020036028002200141106a280200210f2001410c6a280200210c200141086a280200210a4104210b0c030b200241ea016a200141076a2d00003a000020024180026a41086a2001411c6a29020037030020024180026a41106a200141246a2d00003a00002002200141056a2f00003b01e8012002200141146a29020037038002200141106a280200210f2001410c6a280200210c200141086a280200210a4100210b0c020b200141106a280200220f417f4c0d06200141086a280200210102400240200f0d004101210a0c010b200f1038220a450d080b200a2001200f10d40b1a4102210b200f210c0c010b200241ea016a200141076a2d00003a000020024180026a41086a2001411c6a29020037030020024180026a41106a200141246a2d00003a00002002200141056a2f00003b01e8012002200141146a29020037038002200141106a280200210f2001410c6a280200210c200141086a280200210a4103210b0b2000410b3a0000200041046a200b3a0000200041056a20022f01e8013b0000200041106a200f3602002000410c6a200c360200200041086a200a360200200041146a200229038002370200200041076a200241ea016a2d00003a00002000411c6a20024180026a41086a290300370200200041246a20024180026a41106a2802003602000c030b4101211002400240024002400240200141046a2d00000e050104020300010b200241b2016a200141076a2d00003a0000200241e8016a41046a200141186a2d00003a00002002200141056a2f00003b01b0012002200141146a2802003602e801200141106a280200210f2001410c6a2802002114200141086a280200210c410421100c030b200241b2016a200141076a2d00003a0000200241e8016a41086a2001411c6a290200370300200241e8016a41106a200141246a2d00003a00002002200141056a2f00003b01b0012002200141146a2902003703e801200141106a280200210f2001410c6a2802002114200141086a280200210c410021100c020b200141106a280200220f417f4c0d05200141086a280200210a02400240200f0d004101210c0c010b200f1038220c450d070b200c200a200f10d40b1a41022110200f21140c010b200241b2016a200141076a2d00003a0000200241e8016a41086a2001411c6a290200370300200241e8016a41106a200141246a2d00003a00002002200141056a2f00003b01b0012002200141146a2902003703e801200141106a280200210f2001410c6a2802002114200141086a280200210c410321100b4100210d02400240024002400240024020012d00280e06050102030400050b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4105210d0c040b200141346a280200220a417f4c0d072001412c6a28020021014101210d4101210b0240200a450d00200a1038220b450d090b200b2001200a10d40b1a200a210e0c030b4102210d200241c8016a41026a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b0c020b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4103210d0c010b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4104210d0b200041046a20103a0000200041056a20022f01b0013b0000200041106a200f3602002000410c6a2014360200200041086a200c360200200041146a20022903e801370200200041286a200d3a0000200041296a20022f01c8013b0000200041076a200241b0016a41026a2d00003a00002000411c6a200241e8016a41086a290300370200200041246a200241e8016a41106a2802003602002000412b6a200241c8016a41026a2d00003a0000200041346a200a360200200041306a200e3602002000412c6a200b3602002000410c3a0000200041386a200229038002370200200041c0006a20024180026a41086a290300370200200041c8006a20024180026a41106a2802003602000c020b4101211002400240024002400240200141046a2d00000e050104020300010b200241b2016a200141076a2d00003a0000200241e8016a41046a200141186a2d00003a00002002200141056a2f00003b01b0012002200141146a2802003602e801200141106a280200210f2001410c6a2802002114200141086a280200210c410421100c030b200241b2016a200141076a2d00003a0000200241e8016a41086a2001411c6a290200370300200241e8016a41106a200141246a2d00003a00002002200141056a2f00003b01b0012002200141146a2902003703e801200141106a280200210f2001410c6a2802002114200141086a280200210c410021100c020b200141106a280200220f417f4c0d04200141086a280200210a02400240200f0d004101210c0c010b200f1038220c450d060b200c200a200f10d40b1a41022110200f21140c010b200241b2016a200141076a2d00003a0000200241e8016a41086a2001411c6a290200370300200241e8016a41106a200141246a2d00003a00002002200141056a2f00003b01b0012002200141146a2902003703e801200141106a280200210f2001410c6a2802002114200141086a280200210c410321100b4100210d02400240024002400240024020012d00280e06050102030400050b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4105210d0c040b200141346a280200220a417f4c0d062001412c6a28020021014101210d4101210b0240200a450d00200a1038220b450d080b200b2001200a10d40b1a200a210e0c030b4102210d200241c8016a41026a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b0c020b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4103210d0c010b200241ca016a2001412b6a2d00003a000020024188026a200141c0006a29020037030020024190026a200141c8006a2d00003a00002002200141296a2f00003b01c8012002200141386a29020037038002200141346a280200210a200141306a280200210e2001412c6a280200210b4104210d0b200041046a20103a0000200041056a20022f01b0013b0000200041106a200f3602002000410c6a2014360200200041086a200c360200200041146a20022903e801370200200041286a200d3a0000200041296a20022f01c8013b0000200041076a200241b0016a41026a2d00003a00002000411c6a200241e8016a41086a290300370200200041246a200241e8016a41106a2802003602002000412b6a200241c8016a41026a2d00003a0000200041346a200a360200200041306a200e3602002000412c6a200b3602002000410d3a0000200041386a200229038002370200200041c0006a20024180026a41086a290300370200200041c8006a20024180026a41106a2802003602000c010b4101210b02400240024002400240200141046a2d00000e050104020300010b200241ea016a200141076a2d00003a000020024180026a41046a200141186a2d00003a00002002200141056a2f00003b01e8012002200141146a28020036028002200141106a280200210f2001410c6a280200210c200141086a280200210a4104210b0c030b200241ea016a200141076a2d00003a000020024180026a41086a2001411c6a29020037030020024180026a41106a200141246a2d00003a00002002200141056a2f00003b01e8012002200141146a29020037038002200141106a280200210f2001410c6a280200210c200141086a280200210a4100210b0c020b200141106a280200220f417f4c0d03200141086a280200210102400240200f0d004101210a0c010b200f1038220a450d050b200a2001200f10d40b1a4102210b200f210c0c010b200241ea016a200141076a2d00003a000020024180026a41086a2001411c6a29020037030020024180026a41106a200141246a2d00003a00002002200141056a2f00003b01e8012002200141146a29020037038002200141106a280200210f2001410c6a280200210c200141086a280200210a4103210b0b2000410e3a0000200041046a200b3a0000200041056a20022f01e8013b0000200041106a200f3602002000410c6a200c360200200041086a200a360200200041146a200229038002370200200041076a200241ea016a2d00003a00002000411c6a20024180026a41086a290300370200200041246a20024180026a41106a2802003602000b200241a0026a24000f0b1034000b1032000b200820084198b4ca00103c000b200720074198b4ca00103c000b1300200041013602042000419087c2003602000b3400200041d1e5c00036020420004100360200200041146a4102360200200041106a41888dc200360200200041086a42093702000b130020004101360204200041cc8fc2003602000b2d01017f02404108103822020d001032000b20002002360200200242b8173700002000428880808080013702040b950203017f027e027f230041106b220224000240024020002903004201520d00200041106a290300200041086a2903002203420c882204420120044201561b80a741047420037aa7417f6a22054101200541014b1b2205410f2005410f491b7221060240200141046a280200200141086a28020022056b41014b0d002001200541021077200141086a28020021050b200141086a200541026a360200200128020020056a20063b00000c010b0240200141046a280200200141086a2802002205470d002001200541011077200141086a28020021050b200141086a200541016a360200200128020020056a41003a00000b200041186a200110db022002200041206a36020c2002410c6a200110df02200241106a24000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a418b93c200411210cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a418ca3c100410410cb01200241186a41fd92c200410e10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b130020004106360204200041a093c2003602000b34002000418ca3c10036020420004100360200200041146a410c360200200041106a41a0a2c200360200200041086a42043702000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010b7020b2e01017f230041106b2202240020024200370204200241002802d8974e3602002000200210dc05200241106a24000b900201087f02400240200128020822024103744104722203417f4c0d0020012802002104200310382201450d0120002001360200200041086a22054100360200200041046a220620033602002000200210ac0202402002450d00200420024103746a21072005280200210203402004280200210102402006280200220320026b41034b0d00200020024104107720062802002103200528020021020b2000280200220820026a20013600002005200241046a2201360200200441046a28020021090240200320016b41034b0d00200020014104107720052802002101200028020021080b2005200141046a2202360200200820016a2009360000200441086a22042007470d000b0b0f0b1034000b1032000b3400200041b9c3c20036020420004100360200200041146a4106360200200041106a41c8c3c200360200200041086a420d3702000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010b0020b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010b6020b860101037f230041106b2202240020004201370200200041086a220341003602002002410036020c20024200370204200241002802d8974e3602002002200010e1050240200041046a280200200328020022046b41034b0d002000200441041077200328020021040b2003200441046a360200200028020020046a4100360000200241106a24000b920301077f2000280200210220012000280208220010ac0202402000450d0020022000412c6c6a2103200141086a22002802002104200141046a210503402002280200210602402005280200220720046b41034b0d00200120044104107720052802002107200028020021040b2001280200220820046a20063600002000200441046a22043602000240200720046b411f4b0d0020012004412010772005280200210720002802002104200128020021080b200820046a220641186a2002411c6a290000370000200641106a200241146a290000370000200641086a2002410c6a2900003700002006200241046a2900003700002000200441206a2204360200200241246a28020021060240200720046b41034b0d00200120044104107720002802002104200128020021080b200820046a20063600002000200441046a2204360200200241286a28020021060240200528020020046b41034b0d002001200441041077200028020021040b200128020020046a20063600002000200441046a22043602002002412c6a22022003470d000b0b0b8d0201057f230041f0016b22022400200241086a41186a4200370300200241086a41106a22034200370300200241086a41086a420037030020024200370308200241086a41b9c3c200410d10cb0120034184cbc200411110cb012002200241086a412010ce032002280204210320022802002104200241d0016a41186a4200370300200241d0016a41106a22054200370300200241d0016a41086a4200370300200242003703d001200241d0016a41f1d5c400410d10cb012005418bd6c400410c10cb01200241086a200241d0016a412010c703200228028801210520022802980121062000200136020820002003410020041b36020020004101200520064102461b360204200241f0016a24000bec0604067f017e037f017e230041c0006b22022400200241386a22034200370300200241306a22044200370300200241206a41086a2205420037030020024200370320200241206a41ecc0cc00410510cb01200441c49ac300410a10cb01200241106a200241206a412010e6032002280210220641002802d8974e20061b2107024002402002290214420020061b2208422088a7220620014d0d00200041003a00042000200720014102746a2802003602000c010b20034200370300200442003703002005420037030020024200370320200241106a41b9c3c200410d10cb012005200241106a41086a220929000037030020022002290010370320200241106a41f0c8c200410f10cb0120032009290000370300200420022900103703002002200241206a10e40502400240024002402002280200220a0d004100210b41002802d8974e210a0c010b2002280204210b200241086a2802002203450d00200120066b21052003410274417c6a41027641016a210941002103200a21060340200641286a2802002005460d022006412c6a21062009200341016a2203470d000b0b200241386a4200370300200241306a4200370300200241206a41086a2206420037030020024200370320200241106a41b9c3c200410d10cb012006200241106a41086a220329000037030020022002290010370320200241106a41c4c9c200411110cb01200441086a200329000037000020042002290010370000200241106a200241206a10e5052002280210220641002802d8974e20061b21030240024002402002290214420020061b220c422088a720014d0d004102210620032001412c6c6a28020022044102470d010b200041023a00040c010b024020044101460d00200020032001412c6c6a2206290008370005200020062802043602002000410d6a200641106a290000370000200041156a200641186a2900003700002000411d6a200641206a290000370000410121060b200020063a00040b200ca72206450d012006412c6c450d01200310390c010b200041013a0004200020062802003602002000200641046a2900003700052000410d6a2006410c6a290000370000200041156a200641146a2900003700002000411d6a2006411c6a2900003700000b200b450d00200b412c6c450d00200a10390b0240200842ffffffff0383500d00200710390b200241c0006a24000bd40c03057f017e137f230041b0016b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024002400240024020022802000d002002280204220520022802242206412c6e2201200120054b1bad422c7e2207422088a70d012007a72201417f4c0d010240024020010d00410421080c010b200110382208450d030b41002109200241003602382002200836023020022001412c6e3602340240024002402005450d0020024188016a410472210a20024188016a41196a210b20024188016a41126a210c20024188016a410b6a210d4100210e034002400240024020064104490d00200e41016a210e2006417c6a210f200228022022102800002111410021010340200f2001460d02200a20016a201020016a221241046a2d00003a00002002200141016a2213360288012002201241056a3602202013210120134120470d000b200241ac016a41026a2201200d41026a2d00003a000020024184016a41026a220f200c41026a2d00003a00002002200a2f01003b01282002200d2f00003b01ac012002200c2f00003b0184012002200a41026a2d00003a002a20022802a801211420022802a4012115200228009d0121162002280196012117200228008f01211820024180016a41026a2219200b41026a2d00003a00002002200b2f00003b018001200620136b2212417c6a41034b0d022012417c6a21060b200220063602240c050b200241003602240c040b200241f8006a41026a220620012d00003a0000200241f4006a41026a221a200f2d00003a0000200241f0006a41026a220f20192d00003a0000200220022f01283b017c200220022d002a3a007e200220022f01ac013b0178200220022f0184013b0174200220022f0180013b0170201241786a4104490d02201020136a220141046a2800002113200241e8006a41026a221020062d00003a0000200241e4006a41026a2206201a2d00003a0000200241e0006a41026a2219200f2d00003a0000200220022f017c3b016c200220022d007e3a006e200220022f01783b0168200220022f01743b0164200220022f01703b016020022001410c6a360220200141086a280000210f200241d8006a41026a220120102d00003a0000200241d4006a41026a221020062d00003a0000200241d0006a41026a220620192d00003a0000200220022f016c3b015c200220022d006e3a005e200220022f01683b0158200220022f01643b0154200220022f01603b0150200241c8006a41026a221920012d00003a0000200241c4006a41026a221a20102d00003a0000200241c0006a41026a221020062d00003a0000200220022d005e3a004e200220022f015c3b014c200220022f01583b0148200220022f01543b0144200220022f01503b0140024020092002280234470d00200241306a200910c50220022802302108200228023821090b201241746a210620082009412c6c6a22012011360200200141066a20022d004e3a0000200120022f014c3b01042001410d6a20192d00003a00002001410b6a20022f01483b0000200141146a201a2d00003a0000200141126a20022f01443b0000200141076a20183600002001410e6a2017360000200141156a20163600002001411b6a20102d00003a0000200141196a20022f01403b00002001200f36022820012013360224200141206a20143600002001411c6a20153600002002200941016a2209360238200e2005470d000b2002201241746a2206360224200228023021080b2008450d0220022902342107200641034b0d052007a72201450d022001412c6c450d02200810390c020b2002201241786a3602240b20022802342201450d002001412c6c450d00200228023010390b2002420037023420024100280284ee4d3602302002410d36022c2002200241086a3602282002200241306a3602ac012002419c016a41013602002002420137028c01200241949fc500360288012002200241286a36029801200241ac016a41b4dfc40020024188016a103b1a2002280230200228023810d10102402002280234450d00200228023010390b200041003602000c030b1034000b1032000b20002007370204200020083602002000410c6a20022802202800003602000b2004450d00200310390b200241b0016a24000b810d03057f017e137f230041b0016b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024020022802000d00024002400240024002402002280204220520022802242206412c6e2201200120054b1bad422c7e2207422088a70d002007a72201417f4c0d000240024020010d00410421080c010b200110382208450d020b41002109200241003602382002200836023020022001412c6e36023402402005450d0020024188016a410472210a20024188016a41196a210b20024188016a41126a210c20024188016a410b6a210d4100210e03402006450d0420022002280220220f41016a3602202006417f6a21104102211102400240200f2d00000e020100070b2010450d052002200f41026a2201360220410121112006417e6a211002400240200f2d00010e020001080b20104104490d072006417a6a2112200128000021134100210102400240034020122001460d01200a20016a200f20016a221141066a2d00003a00002002200141016a2210360288012002201141076a3602202010210120104120470d000b200241ac016a41026a2211200d41026a2d00003a000020024184016a41026a2212200c41026a2d00003a00002002200a2f01003b01282002200d2f00003b01ac012002200c2f00003b0184012002200a41026a2d00003a002a20022802a801211420022802a4012115200228009d0121162002280196012117200228008f01211820024180016a41026a2219200b41026a2d00003a00002002200b2f00003b018001200620106b2201417a6a41034b0d012001417a6a21100c090b200241003602240c090b200241f8006a41026a20112d00003a0000200241f4006a41026a20122d00003a0000200241f0006a41026a20192d00003a0000200220022f01283b017c200220022d002a3a007e200220022f01ac013b0178200220022f0184013b0174200220022f0180013b01702002200f20106a2211410a6a360220200141766a2110201141066a280000211a410021110b200241e8006a41026a200241f8006a41026a2d00003a0000200241e4006a41026a200241f4006a41026a2d00003a0000200241e0006a41026a200241f0006a41026a2d00003a0000200220022d007e3a006e200220022f017c3b016c200220022f01783b0168200220022f01743b0164200220022f01703b01600b200e41016a210e200241d8006a41026a2201200241e8006a41026a2d00003a0000200241d4006a41026a220f200241e4006a41026a2d00003a0000200241d0006a41026a2206200241e0006a41026a2d00003a0000200220022d006e3a005e200220022f016c3b015c200220022f01683b0158200220022f01643b0154200220022f01603b0150200220022d005e3a004e200220022f015c3b014c200241c8006a41026a221220012d00003a0000200220022f01583b0148200241c4006a41026a2219200f2d00003a0000200220022f01543b0144200241c0006a41026a220f20062d00003a0000200220022f01503b0140024020092002280234470d00200241306a2009410110d20220022802302108200228023821090b20082009412c6c6a22012013360204200120113602002001410a6a20022d004e3a0000200141086a20022f014c3b0100200141116a20122d00003a00002001410f6a20022f01483b0000200141186a20192d00003a0000200141166a20022f01443b00002001410b6a2018360000200141126a2017360000200141196a20163600002001411f6a200f2d00003a00002001411d6a20022f01403b0000200141286a201a360200200141246a2014360000200141206a20153600002002200228023841016a220936023820102106200e2005470d000b200228023021080b2008450d0520002002290234370204200020083602000c060b1034000b1032000b410021100b200220103602240b20022802342201450d002001412c6c450d00200228023010390b2002420037023420024100280284ee4d3602302002410d36022c2002200241086a3602282002200241306a3602ac012002419c016a41013602002002420137028c01200241949fc500360288012002200241286a36029801200241ac016a41b4dfc40020024188016a103b1a2002280230200228023810d10102402002280234450d00200228023010390b200041003602000b2004450d00200310390b200241b0016a24000be90303067f017e017f230041306b22022400200241286a22034200370300200241206a22044200370300200241186a2205420037030020024200370310200241106a41ecc0cc00410510cb01200441c49ac300410a10cb012002200241106a412010e6032002280200220641002802d8974e20061b2107024002402002290204420020061b2208422088a7220620014d0d00200041003a00042000200720014102746a2802003602000c010b20034200370300200442003703002005420037030020024200370310200241106a41b9c3c200410d10cb01200441f0c8c200410f10cb012002200241106a10e4050240200228020022090d00200041023a00040c010b2002280204210502400240200241086a28020022040d00410221060c010b200120066b21012004410274417c6a41027641016a2103410021042009210602400340200641286a2802002001460d012006412c6a21062003200441016a2204470d000b410221060c010b200020062802003602002000200641046a2900003700052000410d6a2006410c6a290000370000200041156a200641146a2900003700002000411d6a2006411c6a290000370000410121060b200020063a00042005450d002005412c6c450d00200910390b0240200842ffffffff0383500d00200710390b200241306a24000bcd0503097f017e017f230041f0016b22032400200341d0016a41186a4200370300200341d0016a41106a22044200370300200341d0016a41086a22054200370300200342003703d001200341d0016a41f1d5c400410d10cb012004418bd6c400410c10cb01200341086a200341d0016a412010c70320032802880121062003280298012107200341086a41186a22084200370300200341086a41106a22044200370300200341086a41086a2209420037030020034200370308200341d0016a41b9c3c200410d10cb0120092005290000370300200320032900d001370308200341d0016a4184cbc200411110cb0120082005290000370300200420032900d0013703002003200341086a412010ce034100210a024002402003280204410020032802001b220b20024b0d0020084200370300200442003703002009420037030020034200370308200341d0016a41b9c3c200410d10cb0120092005290000370300200320032900d001370308200341d0016a4188c8c200410f10cb01200441086a2005290000370000200420032900d001370000200341d0016a200341086a10e80520032802d001220541002802d8974e20051b2109024020032902d401420020051b220c422088a7220520014b0d0002402005450d002005410c6c21042009210503400240200541046a28020041ffffffff0371450d00200528020010390b2005410c6a2105200441746a22040d000b0b4100210a0240200ca722050d000c020b02402005410c6c0d000c020b200910390c010b4101200620074102461b2208450d012005410c6c21042002200b6b20086e20016a200570210d2009210503400240200541046a28020041ffffffff0371450d00200528020010390b2005410c6a2105200441746a22040d000b4101210a200ca72205450d002005410c6c450d00200910390b2000200d3602042000200a360200200341f0016a24000f0b41a0dcc200411941e8c1cd001035000bb90201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10f408024002402002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2003450d00200110390b200241e0006a24000ba50503027f017e067f230041306b22012400024002400240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41b9c3c200410d10cb012005200141206a41086a220629000037030020012001290020370300200141206a4188c8c200410f10cb0120002006290000370300200420012900203703002003422088a72207410c6c41046a2200417f4c0d010240024020000d00410121040c010b200010382204450d030b200141003602282001200036022420012004360220200141206a200710ac0202402007450d0020022007410c6c6a210820022109034020092802002104200141206a2009280208220010ac022009410c6a210902402000450d0020004102742105200128022821000340200428020021060240200128022420006b41034b0d00200141206a200041041077200128022821000b200441046a2104200128022020006a20063600002001200041046a22003602282005417c6a22050d000b0b20092008470d000b0b2001412020012802202200200128022810e90102402001280224450d00200010390b02402007450d002007410c6c21042002210003400240200041046a28020041ffffffff0371450d00200028020010390b2000410c6a2100200441746a22040d000b0b2003a72200450d032000410c6c450d03200210390c030b200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41b9c3c200410d10cb012005200141206a41086a220629000037030020012001290020370300200141206a4188c8c200410f10cb0120002006290000370300200420012900203703002001412010e0010c020b1034000b1032000b200141306a24000bde0301067f230041c0006b220124000240024020002802002202450d002001410c6a22032000410c6a2802003602002001200236020020012000290204370204200141286a22004200370300200141206a22044200370300200141106a41086a2205420037030020014200370310200141306a41b9c3c200410d10cb012005200141306a41086a220629000037030020012001290030370310200141306a41f0c8c200410f10cb01200020062900003703002004200129003037030020014100360238200142013703302001200141306a10e10520032802002105024020012802342204200128023822006b41034b0d00200141306a20004104107720012802342104200128023821000b2001280230220320006a2005360000200141106a41202003200041046a10e90102402004450d00200310390b20012802042200450d012000412c6c450d01200210390c010b200141286a22004200370300200141206a22024200370300200141106a41086a2203420037030020014200370310200141306a41b9c3c200410d10cb012003200141306a41086a220429000037030020012001290030370310200141306a41f0c8c200410f10cb012000200429000037030020022001290030370300200141106a412010e0010b200141c0006a24000b2501017f0240200041cc016a2802002201450d002001412c6c450d0020002802c80110390b0b950101017f410121030240200041d0016a28020020014d0d000240024020002802c8012001412c6c6a280200417f6a0e020002010b4100210320002802d40120002802840122014f0d01410020002802d801220020026b2203200320004b1b20014f0f0b4100210320002802d40120002802880122014f0d00410020002802d801220020026b2203200320004b1b20014f21030b20030bb10b03097f017e097f23004190026b22002400200041f0016a41186a4200370300200041f0016a41106a22014200370300200041f0016a41086a22024200370300200042003703f001200041f0016a41f1d5c400410d10cb012001418bd6c400410c10cb01200041286a200041f0016a412010c70320002802a001210320002802a401210420002802b8012105200041286a41186a22014200370300200041286a41106a22064200370300200041286a41086a2207420037030020004200370328200041f0016a41b9c3c200410d10cb0120072002290000370300200020002900f001370328200041f0016a41f0c8c200410f10cb0120012002290000370300200620002900f001370300200041f0016a200041286a10e4050240024020002802f00122080d002000420037020c20004100360214200041002802d8974e22083602080c010b200041086a410c6a200041f0016a410c6a28020036020020002008360208200020002902f40137020c0b42002109200041c0006a4200370300200041386a4200370300200041286a41086a2202420037030020004200370328200041f0016a41b9c3c200410d10cb012002200041f0016a41086a2201290000370300200020002900f001370328200041f0016a41d4c2cc00410910cb01200641086a2001290000370000200620002900f001370000200041f0016a200041286a10ee050240024020002802f001220a450d00200041286a412010e00120002902f40121090c010b41002802d8974e210a0b024002402009422088a72202450d004100200420054102461b210b200241346c2101200a412c6a2102200541024620034572210c03402002415c6a2d000022054102460d0102402005410171450d00200241586a28020021072002280200210d200041f0016a41186a220e2002415d6a220541186a290000370300200041f0016a41106a220f200541106a290000370300200041f0016a41086a2210200541086a290000370300200020052900003703f001200041286a200710d20320002802282204200028023010d30341ff017121050240200028022c450d00200410390b20054107460d00200541054b0d004101200574412a71450d00200d41016a220d200b4b0d00200c0d0320002000280214221141016a200370360214200041286a41186a2212200e290300370300200041286a41106a220e200f290300370300200041286a41086a220f2010290300370300200020002903f001370328024020002802102204200028020c470d00200041086a200410c50220002802082108200028021021040b20082004412c6c6a22052007360200200520002903283702042005410c6a200f290300370200200541146a200e2903003702002005411c6a2012290300370200200520113602282005200d3602242000200441016a3602100b200241346a21022001414c6a22010d000b0b02402009a72202450d00200241346c450d00200a10390b200041186a41086a200041086a41086a290300370300200020002903082209370318024002402009a722020d00200041c0006a4200370300200041386a4200370300200041286a41086a2202420037030020004200370328200041f0016a41b9c3c200410d10cb012002200041f0016a41086a2201290000370300200020002900f001370328200041f0016a41f0c8c200410f10cb01200641086a2001290000370000200620002900f001370000200041286a412010e0010c010b200041c0006a4200370300200041386a4200370300200041286a41086a2201420037030020004200370328200041f0016a41b9c3c200410d10cb012001200041f0016a41086a2205290000370300200020002900f001370328200041f0016a41f0c8c200410f10cb01200641086a2005290000370000200620002900f001370000200041286a200041186a10ef05200028021c2201450d002001412c6c450d00200210390b20004190026a24000f0b41a0c4c000413941dcc4c0001035000b921003057f017e217f230041d0016b220224002002412036021420022001360210200241186a2001412010e4010240024002400240200228021822030d00200041003602000c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10c1010240024020022802080d00200228020c2205200228022c220641346e2201200120054b1bad42347e2207422088a70d032007a72201417f4c0d030240024020010d00410421080c010b200110382208450d050b4100210920024100360240200220083602382002200141346e36023c024002402005450d00200241a8016a410472210a200241a8016a41196a210b200241a8016a41126a210c200241a8016a410b6a210d4100210e034020064104490d0220022006417c6a220136022c20014104490d022002280228220f28000021102002200f41086a360228410021010240024020064108460d00200f28000421112002200641776a220136022c2002200f41096a221236022841002113024002400240200f2d00080e020100030b200641776a21144100210141762113034020142001460d02200a20016a200f20016a221541096a2d00003a00002002200141016a22123602a8012002200620136a36022c20022015410a6a3602282013417f6a21132012210120124120470d000b200241cc016a41026a2213200d41026a2d00003a0000200241a4016a41026a2215200c41026a2d00003a00002002200a2f01003b01302002200d2f00003b01cc012002200c2f00003b01a4012002200a41026a2d00003a003220022802c801211420022802c401211620022800bd01211720022801b601211820022800af012119200241a0016a41026a221a200b41026a2d00003a00002002200b2f00003b01a001200620126b220641776a22014104490d022002419c016a41026a20022d00323a000020024198016a41026a20132d00003a000020024194016a41026a20152d00003a000020024190016a41026a201a2d00003a0000200220022f01303b019c01200220022f01cc013b019801200220022f01a4013b019401200220022f01a0013b0190012002200641736a220136022c2002200f20126a2213410d6a2212360228201341096a2800002115410121132019211b2018211c2017211d2016211e2014211f0b2002418c016a41026a22062002419c016a41026a2d00003a000020024188016a41026a220f20024198016a41026a2d00003a000020024184016a41026a221420024194016a41026a2d00003a000020024180016a41026a221620024190016a41026a2d00003a0000200220022f019c013b018c01200220022f0198013b018801200220022f0194013b018401200220022f0190013b01800120014104490d01200241fc006a41026a20062d00003a0000200241f8006a41026a200f2d00003a0000200241f4006a41026a20142d00003a0000200241f0006a41026a20162d00003a0000200220022f018c013b017c200220022f0188013b0178200220022f0184013b0174200220022f0180013b017020022001417c6a220636022c2002201241046a36022820122800002120201b2121201121222010212320152124201c2125201d2126201e2127201f21280c020b410021010b41022113200121060b200241ea006a41026a2201200241fc006a41026a2d00003a0000200241e6006a41026a2212200241f8006a41026a2d00003a0000200241e2006a41026a220f200241f4006a41026a2d00003a0000200241de006a41026a2215200241f0006a41026a2d00003a0000200241da006a41026a2214200241ed006a41026a2d00003a0000200220022f017c3b016a200220022f01783b0166200220022f01743b0162200220022f01703b015e200220022f006d3b015a20134102460d02200e41016a210e2022ad4220862023ad842107200241d6006a41026a221020012d00003a0000200241d2006a41026a221120122d00003a0000200241ce006a41026a2212200f2d00003a0000200241ca006a41026a220f20152d00003a0000200241c6006a41026a221520142d00003a0000200220022f016a3b0156200220022f01663b0152200220022f01623b014e200220022f015e3b014a200220022f015a3b014602402009200228023c470d00200241386a200910850320022802382108200228024021090b2008200941346c6a220120133a00082001410b6a20102d00003a0000200141096a20022f01563b0000200141126a20112d00003a0000200141106a20022f01523b0000200120073702002001410c6a2021360000200141136a2025360000200141196a20122d00003a0000200141176a20022f014e3b00002001411a6a2026360000200141206a200f2d00003a00002001411e6a20022f014a3b0000200141256a2028360000200141216a20273600002001412b6a20152d00003a0000200141296a20022f01463b0000200141306a20203600002001412c6a20243600002002200228024041016a2209360240200e2005470d000b200228023821080b2008450d012000200229023c370204200020083602000c020b200228023c2201450d00200141346c450d00200228023810390b2002420037023c20024100280284ee4d3602382002410d3602342002200241106a3602302002200241386a3602cc01200241bc016a4101360200200242013702ac01200241949fc5003602a8012002200241306a3602b801200241cc016a41b4dfc400200241a8016a103b1a2002280238200228024010d1010240200228023c450d00200228023810390b200041003602000b2004450d00200310390b200241d0016a24000f0b1034000b1032000b860101047f230041106b2202240020024100360208200242013703002001200210e105200128020c2103024020022802042204200228020822016b41034b0d00200220014104107720022802042104200228020821010b2002280200220520016a2003360000200041202005200141046a10e90102402004450d00200510390b200241106a24000bc70303027f017e037f230041306b22012400024002400240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41b9c3c200410d10cb012005200141206a41086a220629000037030020012001290020370300200141206a41c4c9c200411110cb0120002006290000370300200420012900203703002003422088a72204412c6c41046a2200417f4c0d010240024020000d00410121050c010b200010382205450d030b200141003602282001200036022420012005360220200141206a200410ac0220022004200141206a10b6022001412020012802202200200128022810e90102402001280224450d00200010390b2003a72200450d032000412c6c450d03200210390c030b200141186a22004200370300200141106a22024200370300200141086a2204420037030020014200370300200141206a41b9c3c200410d10cb012004200141206a41086a220529000037030020012001290020370300200141206a41c4c9c200411110cb0120002005290000370300200220012900203703002001412010e0010c020b1034000b1032000b200141306a24000bc70303027f017e037f230041306b22012400024002400240024020002802002202450d0020002902042103200141186a22004200370300200141106a22044200370300200141086a2205420037030020014200370300200141206a41b9c3c200410d10cb012005200141206a41086a220629000037030020012001290020370300200141206a41d4c2cc00410910cb0120002006290000370300200420012900203703002003422088a7220441346c41046a2200417f4c0d010240024020000d00410121050c010b200010382205450d030b200141003602282001200036022420012005360220200141206a200410ac0220022004200141206a10b0022001412020012802202200200128022810e90102402001280224450d00200010390b2003a72200450d03200041346c450d03200210390c030b200141186a22004200370300200141106a22024200370300200141086a2204420037030020014200370300200141206a41b9c3c200410d10cb012004200141206a41086a220529000037030020012001290020370300200141206a41d4c2cc00410910cb0120002005290000370300200220012900203703002001412010e0010c020b1034000b1032000b200141306a24000b8e0301017f230041c0006b220224000240024002400240200028020022002802000e03010200010b2002200041046a360224200241163602142001411c6a28020021002002200241246a360210200128021821012002413c6a41013602002002420237022c200241acdec2003602282002200241106a36023820012000200241286a103b21010c020b2002200041046a36020c2002200041086a3602242002411c6a4116360200200241163602142001411c6a28020021002002200241246a36021820022002410c6a360210200128021821012002413c6a41023602002002420337022c200241bcdec2003602282002200241106a36023820012000200241286a103b21010c010b2002200041046a36020c2002200041086a3602242002411c6a4116360200200241163602142001411c6a28020021002002200241246a36021820022002410c6a360210200128021821012002413c6a41023602002002420337022c200241d4dec2003602282002200241106a36023820012000200241286a103b21010b200241c0006a240020010bbe0201037f23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002802002103410021000340200220006a41ff006a2003410f712204413072200441d7006a2004410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d02200141f1c5c0004102200220006a4180016a410020006b104921000c010b02402003412071450d0020002802002103410021000340200220006a41ff006a2003410f712204413072200441376a2004410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d03200141f1c5c0004102200220006a4180016a410020006b104921000c010b20003502002001104621000b20024180016a240020000f0b200341800141e087c0001054000b200341800141e087c0001054000b9c0701017f230041c0006b220224000240024002400240024002400240200028020022002802000e06010203040500010b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a4117360200200241106a410c6a4117360200200241173602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241ecb4c0003602282002200241106a36023820012000200241286a103b21000c050b2002200041046a3602082002200041086a36020c2002411c6a4117360200200241173602142001411c6a280200210020022002410c6a3602182002200241086a360210200128021821012002413c6a41023602002002420337022c2002418cb5c0003602282002200241106a36023820012000200241286a103b21000c040b2002200041046a36020c200241173602142001411c6a280200210020022002410c6a360210200128021821012002413c6a41013602002002420237022c200241a4b5c0003602282002200241106a36023820012000200241286a103b21000c030b2002200041046a36020c200241106a41146a4118360200200241106a410c6a411836020020022000410c6a3602202002200041086a360218200241173602142001411c6a280200210020022002410c6a36021020012802182101200241286a41146a41033602002002420337022c200241b4b5c0003602282002200241106a36023820012000200241286a103b21000c020b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a4117360200200241106a410c6a4117360200200241173602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241ccb5c0003602282002200241106a36023820012000200241286a103b21000c010b2002200041046a3602042002200041086a36020820022000410c6a36020c200241106a41146a4117360200200241106a410c6a4117360200200241173602142001411c6a280200210020022002410c6a3602202002200241086a3602182002200241046a36021020012802182101200241286a41146a41033602002002420437022c200241ecb5c0003602282002200241106a36023820012000200241286a103b21000b200241c0006a240020000b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000b7e01027f230041306b22022400200241146a4104360200200241ace0c2003602102002410436020c200241a4e0c2003602082001411c6a2802002103200128021821012002412c6a41023602002002420237021c200241b4e0c2003602182002200241086a36022820012003200241186a103b2101200241306a240020010b110041e1d1cd0041284188a1c1001035000b130020004110360204200041f8e0c2003602000b130020004105360204200041e4ebc2003602000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210cf040b0f0b200041086a108d02200041046a220228020010fa05200228020010390b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010b2020b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010b4020b6b01027f230041d0006b22022400200241063a00280240410110382203450d0020002003360200200341003a0000200041046a428180808010370200024020022d00284101470d00200241306a280200450d002002412c6a28020010390b200241d0006a24000f0b1032000bbc0101057f20004201370200200041086a22024100360200200041004108107720002802002203200228020022046a42003700002002200441086a22043602000240200041046a220528020020046b41074b0d00200020044108107720022802002104200028020021030b2002200441086a2206360200200320046a42003700000240200528020020066b41074b0d002000200641081077200041086a28020021060b200041086a200641086a360200200028020020066a42003700000b3b01017f20004201370200200041086a2202410036020020004100410110772000280200200228020022006a41003a00002002200041016a3602000b7e01027f230041c0026b22022400200241a4026a41023a00000240410110382203450d0020002003360200200341003a0000200041046a428180808010370200024020022d00a4024102460d000240200241146a28020041ffffff3f71450d00200228021010390b2002411c6a109d050b200241c0026a24000f0b1032000b2c01017f02404104103822020d001032000b200020023602002002410136000020004284808080c0003702040b2c01017f02404108103822020d001032000b20002002360200200242003700002000428880808080013702040ba40101067f20004201370200200041086a2202410036020002404120103822030d001032000b20034200370000200341186a22044200370000200341106a22054200370000200341086a2206420037000020004100412010772000280200200228020022076a220020032900003700002002200741206a360200200041086a2006290000370000200041106a2005290000370000200041186a2004290000370000200310390b3d01017f02404114103822020d001032000b200242003700082002420037000020002002360200200041046a429480808080023702002000410010ac020b4a01017f02404120103822020d001032000b2000200236020020024200370000200042a08080808004370204200241086a4200370000200241106a4200370000200241186a42003700000b2e01017f230041106b220224002002420037020420024100280284ee4d36020020002002108706200241106a24000bd60301057f024002402001280208220241046a2203417f4c0d00200128020021040240024002400240024002402003450d00200310382201450d0720002001360200200041086a22054100360200200041046a2003360200200241c000490d02200241808001490d032002418080808004490d04200041086a2105410021030c010b20004201370200200041086a22054100360200200041004101107720052802002103200028020021010b200120036a41033a0000200041086a2201200341016a22033602000240200041046a28020020036b41034b0d002000200341041077200128020021030b2000280200220120036a20023600002005200341046a22033602000c030b200120024102743a000041012103200541013602000c020b20024102744101722106410021050240200341014b0d002000410041021077200041086a2802002105200028020021010b200120056a20063b0000200041086a200541026a22033602000c010b2001200241027441027236000041042103200041086a41043602000b0240200041046a28020020036b20024f0d002000200320021077200041086a2802002103200028020021010b200120036a2004200210d40b1a200041086a200320026a3602000f0b1034000b1032000b2701017f02404104103822020d001032000b20004204370204200020023602002000410010ac020b7e01027f0240411410382202450d0020002002360200200041046a2202421437020041002802d8974e41002000108a0602402002280200200041086a220328020022026b410f4b0d002000200241101077200328020021020b2003200241106a360200200028020020026a22004200370008200042003700000f0b1032000bff0101057f2002200110ac0202402001450d00200141c4006c2103200241086a22042802002101200241046a210503400240200528020020016b411f4b0d002002200141201077200428020021010b2004200141206a360200200228020020016a2201200041046a290000370000200141086a2000410c6a290000370000200141106a200041146a290000370000200141186a2000411c6a290000370000200041246a200210b5022000280200210602402005280200200428020022076b41034b0d002002200741041077200428020021070b200041c4006a21002004200741046a2201360200200228020020076a2006360000200341bc7f6a22030d000b0b0b2e01017f230041106b2202240020024200370204200241002802d8974e36020020002002108c06200241106a24000bdc0101067f024002402001280208220241027441046a2203417f4c0d00200128020021010240024020030d00410121040c010b200310382204450d020b20002004360200200041086a22054100360200200041046a220620033602002000200210ac0202402002450d00200241027421042005280200210303402001280200210702400240200628020020036b41034d0d00200321020c010b2000200341041077200528020021020b200141046a21012005200241046a2203360200200028020020026a20073600002004417c6a22040d000b0b0f0b1034000b1032000b2f01017f02404108103822020d001032000b2000200236020020024200370000200041046a428880808080013702000bbc0401057f20004201370200200041086a22024100360200200041004104107720002802002203200228020022046a41003600002002200441046a22043602000240200041046a220528020020046b41034b0d00200020044104107720022802002104200028020021030b200320046a41003600002002200441046a22033602000240200528020020036b41034b0d002000200341041077200041086a28020021030b2000280200220420036a4100360000200041086a2205200341046a22033602000240200041046a220628020020036b41034b0d00200020034104107720052802002103200028020021040b200420036a41003600002005200341046a220236020002402006280200220320026b410f4b0d002000200241101077200041046a2802002103200041086a2802002102200028020021040b200420026a2205420037000820054200370000200041086a2205200241106a22023602000240200320026b410f4b0d002000200241101077200041046a280200210320052802002102200028020021040b200420026a22064200370008200642003700002005200241106a22023602000240200320026b410f4b0d002000200241101077200041046a2802002103200041086a2802002102200028020021040b200420026a2205420037000820054200370000200041086a2205200241106a22023602000240200320026b410f4b0d00200020024110107720052802002102200028020021040b200420026a22004200370008200042003700002005200241106a3602000b4f01027f230041106b2202240020024200370204200241002802e8c84836020002404104103822030d001032000b20004204370204200020033602002000410010ac022002109006200241106a24000b820501047f024020002802082201450d0020002802002200200141a00b6c6a210203400240024002400240024002400240024020002d00000e18070707070007010207070707030707070704070707070705060b200041086a280200450d06200041046a28020010390c060b200041046a2802000d052000410c6a2802002201450d05200141286c450d05200041086a28020010390c050b200041046a2d00004102470d040240200041106a2802002201450d00200141d0006c2103200041086a28020041c4006a21010340024020012802002204450d00200441306c450d002001417c6a28020010390b200141d0006a2101200341b07f6a22030d000b0b2000410c6a2802002201450d04200141d0006c450d04200028020810390c040b200041046a2802004102470d03200041106a2802002201450d03200041146a280200450d03200110390c030b024002400240200041046a2802000e020001020b200041d0026a280200450d04200041cc026a28020010390c040b200041d0026a280200450d03200041cc026a28020010390c030b200041d0026a280200450d02200041cc026a28020010390c020b200041086a2d0000410a470d01200041346a280200450d01200041306a28020010390c010b200041106a21010240200041086a2903004201510d000240024020012802000e020300010b200041206a280200410b470d02200041286a108d02200041f0036a1084020c020b200041186a280200410b470d01200041206a108d02200041e8036a1084020c010b2001108d02200041d8036a108d02200041a0076a1084020b200041a00b6a21010240200041940b6a28020041ffffff3f71450d0020002802900b10390b2001210020012002470d000b0b0b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010ae020b2e01017f230041106b2202240020024200370204200241002802d8974e36020020002002109306200241106a24000be40301067f02400240200128020822024103744104722203417f4c0d0020012802002104200310382205450d0120002005360200200041086a22064100360200200041046a2003360200024002400240200241c000490d00024002400240200241808001490d002002418080808004490d01200541033a000041012101200041086a220341013602000240200041046a280200417f6a41034b0d00200041014104107720032802002101200028020021050b200520016a20023600002003200141046a22013602000c020b41022101200520024102744101723b0000200041086a41023602000c010b2005200241027441027236000041042101200041086a41043602000b200420024103746a21070c010b200520024102743a000041012101200641013602002002450d01200420024103746a21070b200041046a2103200041086a21020340200428020021060240200328020020016b41034b0d00200020014104107720022802002101200028020021050b200520016a20063600002002200141046a2201360200200441046a28020021060240200328020020016b41034b0d002000200141041077200228020021010b2000280200220520016a20063600002002200141046a2201360200200441086a22042007470d000b0b0f0b1034000b1032000b2701017f02404104103822020d001032000b20004204370204200020023602002000410010ac020b7e01027f0240411410382202450d0020002002360200200041046a2202421437020041002802d8974e4100200010960602402002280200200041086a220328020022026b410f4b0d002000200241101077200328020021020b2003200241106a360200200028020020026a22004200370008200042003700000f0b1032000ba40401047f2002200110ac0202402001450d00200141286c2103200241086a22042802002101200241046a210503400240200528020020016b411f4b0d002002200141201077200428020021010b200228020020016a2206200041046a290000370000200641186a2000411c6a290000370000200641106a200041146a290000370000200641086a2000410c6a2900003700002004200141206a220136020002400240024002400240024002400240200041246a2d00000e06000102030405070b024020052802002001470d002002200141011077200428020021010b200228020020016a41003a00000c050b024020052802002001470d002002200141011077200428020021010b200228020020016a41013a00000c040b024020052802002001470d002002200141011077200428020021010b200228020020016a41023a00000c030b024020052802002001470d002002200141011077200428020021010b200228020020016a41033a00000c020b024020052802002001470d002002200141011077200428020021010b200228020020016a41043a00000c010b024020052802002001470d002002200141011077200428020021010b200228020020016a41053a00000b2004200141016a22013602000b200028020021060240200528020020016b41034b0d002002200141041077200428020021010b200041286a2100200228020020016a20063600002004200141046a2201360200200341586a22030d000b0b0b900101027f230041e0006b22022400200241c0006a41003602000240410110382203450d0020002003360200200341003a0000200041046a428180808010370200024020022802402200450d000240200241c4006a2802002203450d00200341306c450d00200010390b200241d4006a28020041ffffff3f71450d00200228025010390b200241e0006a24000f0b1032000baf0201057f20004201370200200041086a22024100360200200041004110107720002802002203200228020022046a22054200370008200542003700002002200441106a22043602000240200041046a2206280200220520046b410f4b0d0020002004411010772006280200210520022802002104200028020021030b200320046a22064200370008200642003700002002200441106a22043602000240200520046b410f4b0d002000200441101077200041046a2802002105200041086a2802002104200028020021030b200320046a2202420037000820024200370000200041086a2202200441106a22043602000240200520046b410f4b0d00200020044110107720022802002104200028020021030b200320046a22004200370008200042003700002002200441106a3602000b4a01017f02404120103822020d001032000b2000200236020020024200370000200042a08080808004370204200241086a4200370000200241106a4200370000200241186a42003700000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010ad020b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010a8020bd20201057f230041206b22022400200241ecc0cc00410510cb01200241106a41949fc300410e10cb010240412010382203450d0020032001290000370000200341186a2204200141186a290000370000200341106a2205200141106a290000370000200341086a2206200141086a290000370000412010382201450d0020012003290000370000200141186a2004290000370000200141106a2005290000370000200141086a20062900003700002003103941c00010382203450d002003200229000037000020032002290010370010200341086a200241086a290000370000200341186a200241106a41086a29000037000020002003360200200041046a42c0808080800837020020032001290000370020200341286a200141086a290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011039200241206a24000f0b1032000bd20201057f230041206b22022400200241ecc0cc00410510cb01200241106a41bc9fc300410a10cb010240412010382203450d0020032001290000370000200341186a2204200141186a290000370000200341106a2205200141106a290000370000200341086a2206200141086a290000370000412010382201450d0020012003290000370000200141186a2004290000370000200141106a2005290000370000200141086a20062900003700002003103941c00010382203450d002003200229000037000020032002290010370010200341086a200241086a290000370000200341186a200241106a41086a29000037000020002003360200200041046a42c0808080800837020020032001290000370020200341286a200141086a290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011039200241206a24000f0b1032000be90301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41d5f0c200410c10cb01200220013602342002200241346a410410cc01370338200241c0006a410c6a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bd70501087f230041e0006b220324002003200236020c20032001360208200341106a2001200210e4010240024002400240200328021022040d002000410236020c0c010b200328021421052003200341186a280200360224200320043602202003200341206a10c1010240024020032802000d0020032802042206200328022422014103762202200220064b1b22074103742202417f4c0d030240024020070d00410421080c010b200210382208450d050b41002102200341003602502003200736024c20032008360248024002400240024002400240024020060d00410021020c010b200120064103746b2109034020014104490d032001417c6a4104490d022003280220220a28000021072003200a41086a360220200a280004210a02402002200328024c470d00200341c8006a200210b10120032802482108200328025021020b200141786a2101200820024103746a2202200a360204200220073602002003200328025041016a22023602502006417f6a22060d000b20032009360224200328024c210720032802482108200921010b2008450d052001450d044100210a200328022022092d00000e020302040b2001417c6a21010b20032001360224200328024c41ffffffff0171450d03200328024810390c030b2001417f6a4104490d012003200941056a360220200928000121064101210a0b200020063602102000200236020820002007360204200020083602000c020b200741ffffffff0171450d00200810390b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b4102210a0b2000200a36020c2005450d00200410390b200341e0006a24000f0b1034000b1032000b8c0201047f230041106b2203240020034100360208200342013703002002200310a20702400240200228020c4101460d000240200328020420032802082202470d002003200241011077200328020821020b2003280200220420026a41003a0000200241016a21020c010b02402003280204220520032802082206470d00200320064101107720032802042105200328020821060b2003280200220420066a41013a00002003200641016a2206360208200228021021020240200520066b41034b0d00200320064104107720032802002104200328020821060b200420066a2002360000200641046a21020b200020012004200210e90102402003280204450d00200410390b200341106a24000bb40401057f230041e0006b22032400200341086a41ecc0cc00410510cb01200341186a41c9f0c200410c10cb0102400240410410382204450d00200420013600002003200436023820034284808080c00037023c200341386a41044104107720032802382204200328024022016a2002360000200328023c210220032004200141046a220110cc01370348200341d0006a410c6a200420016a360200200320043602582003200341d0006a3602542003200341c8006a360250200341286a200341d0006a10830102402002450d00200410390b2003280230220241206a2204417f4c0d010240024020040d00410121010c010b200410382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200436020002402004410f4b0d00200041004110107720062802002105200028020021010b200120056a22042003290008370000200441086a200341086a41086a2900003700002006200541106a220436020002402007280200220520046b410f4b0d002000200441101077200041046a2802002105200041086a28020021040b200041086a2206200441106a22013602002000280200220720046a22042003290018370000200441086a200341186a41086a290000370000200328022821040240200520016b20024f0d00200020012002107720062802002101200028020021070b200720016a2004200210d40b1a2006200120026a3602000240200328022c450d00200410390b200341e0006a24000f0b1032000b1034000bc20502097f017e23004180016b22012400200141206a4200370300200141186a22024200370300200141086a41086a420037030020014200370308200141086a41ecc0cc00410510cb01200241baf0c200410f10cb012001412036022c2001200141086a360228200141306a200141086a412010e4010240024002400240200128023022030d00410021040c010b200128023421052001200141306a41086a280200360244200120033602402001200141c0006a10c1010240024020012802000d0020012802042206200128024422024103762207200720064b1b22084103742207417f4c0d030240024020080d00410421040c010b200710382204450d050b41002107200141003602702001200836026c200120043602680240024002402006450d00034020024104490d032002417c6a4104490d022001280240220828000021092001200841086a3602402008280004210802402007200128026c470d00200141e8006a200710b10120012802682104200128027021070b200241786a2102200420074103746a22072008360204200720093602002001200128027041016a22073602702006417f6a22060d000b200128026821040b200129026c210a2004450d020c030b2002417c6a21020b200120023602440240200128026c41ffffffff0171450d00200128026810390b0b2001420037024c4100210420014100280284ee4d3602482001410d36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141949fc5003602682001200141d8006a360278200141e4006a41b4dfc400200141e8006a103b1a2001280248200128025010d101200128024c450d00200128024810390b2005450d00200310390b0240024020040d0020004200370204200041002802d8974e3602000c010b2000200a370204200020043602000b20014180016a24000f0b1034000b1032000b8c0101047f230041106b2202240002400240200128020822034103744104722204417f4c0d0020012802002101200410382205450d012002410036020820022004360204200220053602002002200310ac0220012003200210a7022000412020022802002201200228020810e90102402002280204450d00200110390b200241106a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41a8f0c200411210cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a418c9ec300410e10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b6201017f2002280200210302404120103822020d001032000b20022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200020012002412010e901200210390bad0302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc03420010da0b200441286a20022003428094ebdc03420010d20b200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220710da0b02400240024020042903182208428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200710da0b20042903082203428080808010544100200441086a41086a290300501b450d012008a722050d0241f0f0c20041194188f2c2001035000b2004411136024c20044189f1c200360248419af1c20041de00200441c8006a41f8f1c2004188f2c200103d000b2004411136024c20044189f1c200360248419af1c20041de00200441c8006a41f8f1c2004188f2c200103d000b200441d0006a2400200342ffffffff0f83428094ebdc037e2005ad80a70be60301067f230041d0006b22022400200241086a41b69fc500410710cb01200241186a4181f3c200411210cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b13002000410336020420004194f3c2003602000b822b04057f017e027f017e230041a0096b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241d0016a200141086a10ab06200041086a200241d0016a41b80710d40b1a200041253602000c240b000b200241d0016a200141086a10ac0620004100360200200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c220b200241d0016a200141086a10ad06200041086a200241d0016a41a00210d40b1a200041013602000c210b20004102360200200041086a200141086a2903003703000c200b41042103200141046a210402400240024002400240024020012d0004417f6a0e050102030400010b200141086a2802002101410521030c040b200141086a2802002101410121030c030b41022103200241026a200441036a2d00003a0000200241d0016a41086a200141146a290200370300200241e0016a2001411c6a290200370300200241e8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703d001200141286a2802002104200141086a28020021010c020b200141086a2802002101410321030c010b200241026a200441036a2d00003a0000200241d0016a41086a200141146a290200370300200241e0016a2001411c6a290200370300200241e8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703d00120012d00254100472105200141286a2802002104200141086a28020021010b200020033a0004200020022f01003b0005200020053a002520004103360200200041086a20013602002000410c6a20022903d001370200200041286a2004360200200041076a200241026a2d00003a0000200041146a200241d0016a41086a2903003702002000411c6a200241e0016a290300370200200041246a200241e8016a2d00003a00000c1f0b200241d0016a200141086a10ae06200041086a200241d0016a41e00010d40b1a200041043602000c1e0b200241d0016a200141046a10af06200041053602002000410c6a200241d8016a280200360200200020022903d0013702040c1d0b200241d0016a200141086a10b006200041086a200241d0016a41d80010d40b1a200041063602000c1c0b02400240200128020422040d00410021030c010b200241d0016a41186a200141286a290000370300200241d0016a41106a200141206a290000370300200241d8016a200141186a290000370300200241d0016a41286a200141386a290000370300200241d0016a41306a200141c0006a290000370300200241d0016a41386a200141c8006a290000370300200241d0016a41c8006a200141d8006a290000370300200241d0016a41d0006a200141e0006a290000370300200241d0016a41d8006a200141e8006a2900003703002002200141106a2900003703d0012002200141306a2900003703f0012002200141d0006a29000037039002200241d0016a41f8006a20014188016a290000370300200241d0016a41f0006a20014180016a290000370300200241d0016a41e8006a200141f8006a290000370300200241d0016a4188016a20014198016a290000370300200241d0016a4190016a200141a0016a290000370300200241d0016a4198016a200141a8016a290000370300200241d0016a41a8016a200141b8016a290000370300200241d0016a41b0016a200141c0016a290000370300200241d0016a41b8016a200141c8016a2900003703002002200141f0006a2900003703b002200220014190016a2900003703d0022002200141b0016a2900003703f0022001410c6a2802002201417f4c0d1d0240024020010d00410121030c010b200110382203450d1f0b20032004200110d40b1a2002200241d0016a41c00110d40b1a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241c00110d40b1a200041083602000c1b0b200241d0016a200141086a10b106200041086a200241d0016a41980210d40b1a200041093602000c1a0b200141106a2802002203417f4c0d1a20012802042105200141086a28020021060240024020030d00410121040c010b200310382204450d1c0b200220033602d401200220043602d00120042006200310d40b1a200241d0016a41086a22042003360200200241dc016a200141146a10b206200241086a22032004290300370300200241106a2204200241d0016a41106a290300370300200220022903d001370300200129032021072001280228210620002005360204200041e4006a2001412c6a220141386a290200370200200041dc006a200141306a290200370200200041d4006a200141286a290200370200200041cc006a200141206a290200370200200041c4006a200141186a2902003702002000413c6a200141106a290200370200200041346a200141086a2902003702002000412c6a2001290200370200200041286a2006360200200041206a20073702002000410a360200200041086a2002290300370200200041106a2003290300370200200041186a20042903003702000c190b024002400240024020012f0104417f6a0e03010200010b200241d0016a200141086a10b30620022902d401210720022802d0012103410321010c020b200241d0016a200141086a10b30620022902d401210720022802d0012103410121010c010b20012f0106210441c00710382203450d1b200241d0016a200141086a28020010aa062003200241d0016a41c00710d40b1a410221010b200020013b01042000410c3602002000410c6a2007370200200041086a2003360200200041066a20043b01000c180b200241d0016a200141086a10d005200041086a200241d0016a41a80210d40b1a2000410d3602000c170b200141046a210841082109024002400240024002400240024002400240024020012d0004417f6a0e09010203040506070900010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410921090c070b20024190096a41086a2209200141106a2800003602002002200141086a290000370390092002200141186a2900003703d00120022001411d6a2900003700d501200141146a280200210420012f0106210520012d0005210641c00710382203450d202003200141286a28020010b406200241c0016a41086a200928020036020020022002290390093703c001200220022903d001370300200220022900d501370005410121090c070b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241d0016a41086a200141346a290200370300200241d0016a41106a2001413c6a290200370300200241d0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703d001200141286a2802002103200141146a280200210420012f0106210520012d00052106410221090c060b200241c0016a200141086a10b506200141146a280200210420012f01062105410321090c050b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410421090c040b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241d0016a41086a200141346a290200370300200241d0016a41106a2001413c6a290200370300200241d0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703d001200141286a2802002103200141146a280200210420012f0106210520012d00052106410521090c030b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410621090c010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410721090b0b200020053b0106200020063a0005200020093a0004200041086a20022903c001370200200041146a2004360200200041186a2002290300370200200041286a20033602002000412c6a20022903d001370200200041106a200241c0016a41086a280200360200200041206a200241086a290300370200200041346a200241d0016a41086a2903003702002000413c6a200241d0016a41106a290300370200200041c4006a200241d0016a41186a2802003602002000410e3602000c160b200241d0016a200141086a10b606200041086a200241d0016a41f80010d40b1a2000410f3602000c150b200241d0016a200141046a10b70620004110360200200041246a200241f0016a2802003602002000411c6a200241e8016a290300370200200041146a200241d0016a41106a2903003702002000410c6a200241d8016a290300370200200020022903d0013702040c140b200241d0016a200141086a10b80620004111360200200041306a200241d0016a41286a290300370300200041286a200241d0016a41206a290300370300200041206a200241d0016a41186a290300370300200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c130b200241d0016a200141046a10b906200041046a200241d0016a41c80010d40b1a200041123602000c120b200241d0016a200141086a10ba06200041086a200241d0016a41c80010d40b1a200041133602000c110b200241d0016a41306a200141386a10bb06200241d0016a41286a200141306a290300370300200241d0016a41206a200141286a290300370300200241d0016a41186a200141206a290300370300200241d0016a41106a200141186a290300370300200241d0016a41086a200141106a2903003703002002200141086a2903003703d0012002200141f8016a2802003602c00320014180026a2903002107200041086a200241d0016a41f80110d40b1a20004180026a2007370300200041143602000c100b200241d0016a200141086a10bc0620004115360200200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c0f0b10bd06000b10be06000b200241d0016a200141046a10bf06200241dc016a200141106a10c006200241d0016a41186a2001411c6a10c106200241286a200141d0006a290200370300200241206a200141c8006a290200370300200241186a200141c0006a290200370300200241386a200141e0006a290200370300200241c0006a200141e8006a290200370300200241c8006a200141f0006a290200370300200241d8006a20014180016a290200370300200241e0006a20014188016a290200370300200241e8006a20014190016a2902003703002002200141386a2902003703102002200141d8006a2902003703302002200141f8006a290200370350200141286a280200210320024104722001412c6a10c20620022003360200200241f4016a200241f00010d40b1a200041046a2002200241d0016a41940110d40b41940110d40b1a200041183602000c0c0b10f705000b200241d0016a200141046a10c3062000411a360200200041146a200241e0016a2903003702002000410c6a200241d8016a290300370200200020022903d0013702040c0a0b2000411b360200200020012802043602040c090b10c406000b10c506000b4105210302400240024002400240024002402001280204417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a28020021042001410c6a2802002105200141086a2802002106410121030c040b200141086a2802002106410221030c030b2001410c6a2802002105200141086a2802002106410321030c020b200141086a2802002106410421030c010b410621030b200020033602042000411e360200200041106a20043602002000410c6a2005360200200041086a20063602000c060b10c606000b200241d0016a200141086a10c706200041086a200241d0016a41d00010d40b1a200041203602000c040b024002400240024002400240200141086a22032d0000417f6a0e03010203000b41e1d1cd004128418483c6001035000b200241026a200341036a2d00003a0000200241d0016a41086a200141186a290300370300200241d0016a41106a200141206a290300370300200241d0016a41186a200141286a2d00003a0000200220032f00013b01002002200141106a2903003703d001200141c0006a2903002107200141386a290300210a200141346a2802002103200141306a28020021042001410c6a28020021052001412c6a2802002101410121060c030b2001410c6a2802002105410221060c010b2001410c6a2802002105410321060b0b200020022f01003b0009200041c0006a2007370300200041386a200a370300200041086a20063a00002000410c6a2005360200200041106a20022903d001370300200041346a2003360200200041306a20043602002000412c6a20013602002000410b6a200241026a2d00003a0000200041186a200241d0016a41086a290300370300200041206a200241d0016a41106a290300370300200041286a200241d0016a41186a280200360200200041213602000c030b200241d0016a200141086a10c806200041086a200241d0016a41f00310d40b1a200041223602000c020b41032103024002400240200141086a280200417f6a0e03000102000b200141106a28020021052001410c6a2802002104410121030c010b200141286a290300210a200141206a2903002107200141186a2802002109200141146a2802002106200141106a28020021052001410c6a2802002104410221030b20004123360200200041286a200a370300200041206a2007370300200041186a2009360200200041146a2006360200200041106a20053602002000410c6a2004360200200041086a20033602000c010b200241d0016a200141086a10c906200041086a200241d0016a41d80010d40b1a200041243602000b200241a0096a24000f0b1034000b1032000ba60201037f230041e0076b220224000240024002400240024002402001280200417f6a0e0401020300010b2001280204210341e00710382204450d042002200310c10820002004200241e00710d40b36020420004104360200200041086a200141086a2903003703000c030b200041086a200141086a10b403200041d0036a200141d0036a10c603200041013602000c020b200041106a200141106a10b403200041d8036a200141d8036a10b403200041046a200141046a10b30320004102360200200041a0076a200141a0076a2903003703000c010b200041106a200141106a10b403200041d8036a200141d8036a10b403200041046a200141046a10b30320004103360200200041a0076a200141a0076a2903003703000b200241e0076a24000f0b1032000b9a0803047f017e087f230041106b22022400024002400240024002400240024002400240024002400240024002402001280200417f6a0e0a01020304050607080900010b2001410c6a2802002203417f4c0d0a200128020421010240024020030d00410121040c010b200310382204450d0c0b20042001200310d40b21012000410c6a2003360200200041086a2003360200200020013602042000410a3602000c090b20004101360200200020012802043602040c080b2001410c6a2802002203417f4c0d08200128020421010240024020030d00410121040c010b200310382204450d0a0b20042001200310d40b21012000410c6a2003360200200041086a200336020020002001360204200041023602000c070b20004103360200200041086a200141086a2903003703000c060b2001410c6a2802002203417f4c0d06200128020421010240024020030d00410121040c010b200310382204450d080b20042001200310d40b21012000410c6a2003360200200041086a200336020020002001360204200041043602000c050b2001410c6a2802002203417f4c0d05200128020421010240024020030d00410121040c010b200310382204450d070b20042001200310d40b21012000410c6a2003360200200041086a200336020020002001360204200041053602000c040b200041063602002000410c6a2001410c6a2802003602002000200141046a2902003702040c030b2001410c6a2802002205ad42187e2206422088a70d032006a72207417f4c0d030240024020070d0041042108410021090c010b20012802042101200710382208450d05200741186e210920074118490d004100210a2009210b03402007200a460d01200b450d0720012802082204417f4c0d05200128020021030240024020040d004101210c0c010b20041038220c450d070b200c2003200410d40b210d2001280214220c417f4c0d05200128020c210302400240200c0d004101210e0c010b200c1038220e450d070b200141186a2101200e2003200c10d40b210e2008200a6a2203200d360200200341146a200c360200200341106a200c3602002003410c6a200e360200200341086a2004360200200341046a2004360200200a41186a210a200b417f6a220b0d000b0b20002008360204200041073602002000410c6a2005360200200041086a20093602000c020b2002200141046a10df07200041083602002000410c6a200241086a280200360200200020022903003702040c010b2001410c6a2802002203417f4c0d01200128020421040240024020030d004101210c0c010b20031038220c450d030b200c2004200310d40b21042000410c6a2003360200200041086a20033602002000200436020420004109360200200041106a20012802103602000b200241106a24000f0b1034000b1032000b200920094198b4ca00103c000bf50b03017f017e027f230041e0016b2202240002400240024002402001280200417f6a0e03010200010b20004103360200200041186a200141186a2d00003a0000200041106a200141106a290300370300200041086a200141086a2903003703000c020b20004198026a20014198026a29030037030020004190026a20014190026a29030037030020004188026a20014188026a29030037030020004180026a20014180026a290300370300200141186a2903002103200241286a200141c8006a290200370300200241206a200141c0006a290200370300200241186a200141386a290200370300200241386a200141d8006a290200370300200241c0006a200141e0006a290200370300200241c8006a200141e8006a290200370300200241d8006a200141f8006a290200370300200241e0006a20014180016a290200370300200241e8006a20014188016a2902003703002002200141306a2902003703102002200141d0006a2902003703302002200141f0006a290200370350200141206a28020021042002410472200141246a10c20620022004360200200241f0006a41286a200141b8016a290200370300200241f0006a41206a200141b0016a290200370300200241f0006a41186a200141a8016a290200370300200241f0006a41386a200141c8016a290200370300200241f0006a41c0006a200141d0016a290200370300200241f0006a41c8006a200141d8016a290200370300200241f0006a41d8006a200141e8016a290200370300200241f0006a41e0006a200141f0016a290200370300200241f0006a41e8006a200141f8016a2902003703002002200141a0016a290200370380012002200141c0016a2902003703a0012002200141e0016a2902003703c00120014190016a2802002104200241f0006a410472220520014194016a10c20620022004360270200041206a200241f00010d40b1a20004190016a200241f0006a41f00010d40b1a200128020421042005200141086a10df07200041186a2003370300200041013602002000410c6a200241f0006a41086a290300370200200041146a200141146a28020036020020022004360270200020022903703702040c010b20004198026a20014198026a29030037030020004190026a20014190026a29030037030020004188026a20014188026a29030037030020004180026a20014180026a290300370300200141186a2903002103200241286a200141c8006a290200370300200241206a200141c0006a290200370300200241186a200141386a290200370300200241386a200141d8006a290200370300200241c0006a200141e0006a290200370300200241c8006a200141e8006a290200370300200241d8006a200141f8006a290200370300200241e0006a20014180016a290200370300200241e8006a20014188016a2902003703002002200141306a2902003703102002200141d0006a2902003703302002200141f0006a290200370350200141206a28020021042002410472200141246a10c20620022004360200200241f0006a41286a200141b8016a290200370300200241f0006a41206a200141b0016a290200370300200241f0006a41186a200141a8016a290200370300200241f0006a41386a200141c8016a290200370300200241f0006a41c0006a200141d0016a290200370300200241f0006a41c8006a200141d8016a290200370300200241f0006a41d8006a200141e8016a290200370300200241f0006a41e0006a200141f0016a290200370300200241f0006a41e8006a200141f8016a2902003703002002200141a0016a290200370380012002200141c0016a2902003703a0012002200141e0016a2902003703c00120014190016a2802002104200241f0006a410472220520014194016a10c20620022004360270200041206a200241f00010d40b1a20004190016a200241f0006a41f00010d40b1a200128020421042005200141086a10df07200041186a2003370300200041023602002000410c6a200241f0006a41086a290300370200200041146a200141146a28020036020020022004360270200020022903703702040b200241e0016a24000b9817020a7f027e230041c0006b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280200360228200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d06200141086a28020021040240024020050d00410121070c010b200510382207450d080b20072004200510d40b1a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002106200141086a28020021070b200020043a0004200020022f01083b000520004104360200200041286a2001290328370300200041106a20053602002000410c6a2006360200200041086a2007360200200041146a2002290328370200200041306a200141306a290300370300200041076a2002410a6a2d00003a00002000411c6a200241286a41086a290300370200200041246a200241286a41106a2802003602000c030b200141046a2103410121060240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280200360228200141106a28020021052001410c6a2802002104200141086a2802002107410421060c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002104200141086a2802002107410021060c020b200141106a2802002205417f4c0d05200141086a28020021040240024020050d00410121070c010b200510382207450d070b20072004200510d40b1a41022106200521040c010b410321062002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002104200141086a28020021070b200020063a0004200020022f01083b000520004101360200200041286a2001290328370300200041106a20053602002000410c6a2004360200200041086a2007360200200041146a2002290328370200200041306a200141306a290300370300200041076a2002410a6a2d00003a00002000411c6a200241286a41086a290300370200200041246a200241286a41106a2802003602000c020b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241286a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280200360228200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d04200141086a28020021040240024020050d00410121070c010b200510382207450d060b20072004200510d40b1a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241286a41086a2001411c6a290200370300200241286a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370328200141106a28020021052001410c6a2802002106200141086a28020021070b200020043a0004200020022f01083b0005200041286a2001290328370300200041386a2001290338370300200041106a20053602002000410c6a2006360200200041086a2007360200200041146a2002290328370200200041306a200141306a290300370300200041c0006a200141c0006a290300370300200041076a200241086a41026a2d00003a00002000411c6a200241286a41086a290300370200200041246a200241286a41106a280200360200200041023602000c010b200141046a210741012108410121090240024002400240024020012d00040e050104020300010b200241226a200741036a2d00003a0000200241086a41046a200141186a2d00003a0000200220072f00013b01202002200141146a280200360208200141106a28020021052001410c6a2802002103200141086a2802002104410421090c030b200241226a200741036a2d00003a0000200241086a41086a2001411c6a290200370300200241086a41106a200141246a2d00003a0000200220072f00013b01202002200141146a290200370308200141106a28020021052001410c6a2802002103200141086a2802002104410021090c020b200141106a2802002205417f4c0d03200141086a28020021070240024020050d00410121040c010b200510382204450d050b20042007200510d40b1a41022109200521030c010b41032109200241226a200741036a2d00003a0000200241086a41086a2001411c6a290200370300200241086a41106a200141246a2d00003a0000200220072f00013b01202002200141146a290200370308200141106a28020021052001410c6a2802002103200141086a28020021040b02400240024002400240200141286a220a2d00000e050104020300010b200241266a200a41036a2d00003a000041042108200241286a41046a2001413c6a2d00003a00002002200a2f00013b01242002200141386a280200360228200141346a2802002107200141306a280200210b2001412c6a28020021060c030b200241266a200a41036a2d00003a0000200241306a200141c0006a290200370300200241386a200141c8006a2d00003a00002002200a2f00013b01242002200141386a290200370328200141346a2802002107200141306a280200210b2001412c6a2802002106410021080c020b200141346a2802002207417f4c0d032001412c6a28020021080240024020070d00410121060c010b200710382206450d050b20062008200710d40b1a410221082007210b0c010b41032108200241266a200a41036a2d00003a0000200241306a200141c0006a290200370300200241386a200141c8006a2d00003a00002002200a2f00013b01242002200141386a290200370328200141346a2802002107200141306a280200210b2001412c6a28020021060b200020093a0004200020022f01203b0005200020022f01243b0029200041106a20053602002000410c6a2003360200200041086a2004360200200041146a2002290308370200200041286a20083a0000200041076a200241206a41026a2d00003a00002000411c6a200241086a41086a290300370200200041246a200241086a41106a2802003602002000412b6a200241246a41026a2d00003a0000200141d8006a290300210c2001290350210d200041346a2007360200200041306a200b3602002000412c6a2006360200200041d0006a200d370300200041d8006a200c37030020004103360200200041386a2002290328370200200041c0006a200241286a41086a290300370200200041c8006a200241286a41106a2802003602000b200241c0006a24000f0b1034000b1032000bc20303027f017e097f230041f0006b2202240002400240024020012802082203ad42f0007e2204422088a70d002004a72205417f4c0d00200128020021014104210602402005450d00200510382206450d020b2000410036020820002006360200200041046a200541f0006e22073602000240200541f000490d0020024104722108200241d0006a2109200241306a210a200241106a210b2007210c03402005450d01200c450d04200b2001290010370000200a200129003037000020092001290050370000200b41186a200141286a290000370000200b41106a200141206a290000370000200b41086a200141186a290000370000200a41086a200141386a290000370000200a41106a200141c0006a290000370000200a41186a200141c8006a290000370000200941086a200141d8006a290000370000200941106a200141e0006a290000370000200941186a200141e8006a2900003700002001280200210d2008200141046a10c2062002200d3602002006200241f00010d40b41f0006a2106200541907f6a2105200141f0006a2101200c417f6a220c0d000b0b20002003360208200241f0006a24000f0b1034000b1032000b200720074198b4ca00103c000b861403057f027e017f230041c0006b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a0e170102030405060708090a0b0c0d0e0f1011121314151617000b41e1d1cd00412841fcb9ca001035000b4101210302400240024002400240200141246a2d00000e050104020300010b2002411e6a200141276a2d00003a000041042103200241086a41046a200141386a2d00003a00002002200141256a2f00003b011c2002200141346a280200360208200141306a28020021042001412c6a2802002105200141286a28020021060c030b2002411e6a200141276a2d00003a0000200241106a2001413c6a290200370300200241186a200141c4006a2d00003a00002002200141256a2f00003b011c2002200141346a290200370308200141306a28020021042001412c6a2802002105200141286a2802002106410021030c020b200141306a2802002204417f4c0d19200141286a28020021050240024020040d00410121060c010b200410382206450d1b0b20062005200410d40b1a41022103200421050c010b2002411e6a200141276a2d00003a0000200241106a2001413c6a290200370300200241186a200141c4006a2d00003a00002002200141256a2f00003b011c2002200141346a290200370308200141306a28020021042001412c6a2802002105200141286a2802002106410321030b200141d0006a290300210720012903482108410421090240024002400240024020012d00010e050001020304000b410021090c030b410121090c020b410221090c010b200241386a2001411a6a290000370300200241306a200141126a290000370300200241286a2001410a6a2900003703002002200141026a290000370320410321090b200020093a0001200041d0006a2007370300200041c8006a2008370300200041246a20033a0000200041256a20022f011c3b0000200041306a20043602002000412c6a2005360200200041286a2006360200200041346a2002290308370200200041026a2002290320370000200041276a2002411c6a41026a2d00003a00002000413c6a200241086a41086a290300370200200041c4006a200241086a41106a2802003602002000410a6a200241206a41086a290300370000200041126a200241206a41106a2903003700002000411a6a200241386a290300370000200041013a00000c160b200041023a0000200041106a200141106a290300370300200041086a200141086a2903003703000c150b200041033a0000200041106a200141106a290300370300200041086a200141086a2903003703000c140b200041043a0000200041046a200141046a2802003602000c130b200041053a0000200041046a200141046a280200360200200041086a200141086a2d00004100473a00000c120b200241206a200141046a10c509200041063a00002000410c6a200241286a280200360200200041046a20022903203702000c110b200041073a00000c100b410421040240024002400240024020012d00010e050001020304000b410021040c030b410121040c020b410221040c010b200241386a2001411a6a290000370300200241306a200141126a290000370300200241286a2001410a6a2900003703002002200141026a290000370320410321040b200020043a0001200041083a0000200041026a20022903203700002000410a6a200241206a41086a290300370000200041126a200241306a2903003700002000411a6a200241386a2903003700000c0f0b4101210302400240024002400240200141046a2d00000e050104020300010b2002410a6a200141076a2d00003a0000200241206a41046a200141186a2d00003a00002002200141056a2f00003b01082002200141146a280200360220200141106a28020021042001410c6a2802002105200141086a2802002106410421030c030b2002410a6a200141076a2d00003a0000200241206a41086a2001411c6a290200370300200241206a41106a200141246a2d00003a00002002200141056a2f00003b01082002200141146a290200370320200141106a28020021042001410c6a2802002105200141086a2802002106410021030c020b200141106a2802002204417f4c0d11200141086a28020021010240024020040d00410121060c010b200410382206450d130b20062001200410d40b1a41022103200421050c010b2002410a6a200141076a2d00003a0000200241206a41086a2001411c6a290200370300200241206a41106a200141246a2d00003a00002002200141056a2f00003b01082002200141146a290200370320200141106a28020021042001410c6a2802002105200141086a2802002106410321030b200041093a0000200041046a20033a0000200041056a20022f01083b0000200041106a20043602002000410c6a2005360200200041086a2006360200200041146a2002290320370200200041076a2002410a6a2d00003a00002000411c6a200241206a41086a290300370200200041246a200241206a41106a2802003602000c0e0b2000410a3a0000200041046a200141046a2802003602000c0d0b2000410b3a0000200041046a200141046a2802003602000c0c0b2000410c3a0000200020012d00013a00010c0b0b2000410d3a00000c0a0b2000410e3a00000c090b200241206a200141046a10b5062000410f3a00002000410c6a200241286a280200360200200041046a20022903203702000c080b200041103a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a2802003602000c070b200041113a00000c060b200141106a280200220441ffffffff03712004470d0620044102742206417f4c0d06200141086a2802002105200141046a28020021034104210102402006450d00200610382201450d080b20012005200441027410d40b2101200041106a20043602002000410c6a2006410276360200200041086a2001360200200041046a2003360200200041123a00000c050b200041133a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a2802003602000c040b200041143a0000200041106a200141106a290300370300200041086a200141086a2903003703000c030b200041153a0000200041046a200141046a2902003702000c020b200041163a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a2802003602000c010b200241206a200141046a10c509200041173a00002000410c6a200241286a280200360200200041046a20022903203702000b200241c0006a24000f0b1034000b1032000be91205017f017e0a7f027e0e7f230041e0016b22022400024002400240024002402001280200417f6a0e03010203000b41e1d1cd004128418cd2cd001035000b200141186a2903002103200241086a220420014180026a290300370300200241106a220520014188026a290300370300200241186a220620014190026a290300370300200241206a41086a2207200141dc006a290200370300200241206a41106a2208200141e4006a290200370300200241206a41186a2209200141ec006a290200370300200241206a41206a220a200141f4006a290200370300200241206a41286a220b200141fc006a290200370300200241206a41306a220c20014184016a290200370300200241206a41386a220d2001418c016a2902003703002002200141f8016a2903003703002002200141d4006a290200370320200141206a290300210e200141286a290300210f200141306a280200211020024180016a41386a2211200141f0016a29020037030020024180016a41306a2212200141e8016a29020037030020024180016a41286a2213200141e0016a29020037030020024180016a41206a2214200141d8016a29020037030020024180016a41186a2215200141d0016a29020037030020024180016a41106a2216200141c8016a29020037030020024180016a41086a2217200141c0016a290200370300200241e0006a41186a2218200141cc006a290200370300200241e0006a41106a2219200141c4006a290200370300200241e0006a41086a221a2001413c6a2902003703002002200141b8016a290200370380012002200141346a29020037036020014194016a280200211b200041306a2010360200200041286a200f370300200041206a200e420151ad370300200041186a2003370300200241c0016a41186a2210200141b0016a290200370300200241c0016a41106a221c200141a8016a290200370300200241c0016a41086a221d200141a0016a290200370300200041cc006a2018290300370200200041c4006a20192903003702002000413c6a201a290300370200200041346a2002290360370200200220014198016a2902003703c00120004194016a201b3602002000418c016a200d29030037020020004184016a200c290300370200200041fc006a200b290300370200200041f4006a200a290300370200200041ec006a2009290300370200200041e4006a2008290300370200200041dc006a2007290300370200200041d4006a200229032037020020004198016a20022903c001370200200041a0016a201d290300370200200041a8016a201c290300370200200041b0016a2010290300370200200041f0016a2011290300370200200041e8016a2012290300370200200041e0016a2013290300370200200041d8016a2014290300370200200041d0016a2015290300370200200041c8016a2016290300370200200041c0016a2017290300370200200041b8016a20022903800137020020004190026a200629030037030020004188026a200529030037030020004180026a2004290300370300200041f8016a20022903003703002001280204210420024180016a410472200141086a10df07200041013602002000410c6a2017290300370200200041146a200141146a280200360200200220043602800120002002290380013702040c020b200141186a2903002103200241086a220420014180026a290300370300200241106a220520014188026a290300370300200241186a220620014190026a290300370300200241206a41086a2207200141dc006a290200370300200241206a41106a2208200141e4006a290200370300200241206a41186a2209200141ec006a290200370300200241206a41206a220a200141f4006a290200370300200241206a41286a220b200141fc006a290200370300200241206a41306a220c20014184016a290200370300200241206a41386a220d2001418c016a2902003703002002200141f8016a2903003703002002200141d4006a290200370320200141206a290300210e200141286a290300210f200141306a280200211020024180016a41386a2211200141f0016a29020037030020024180016a41306a2212200141e8016a29020037030020024180016a41286a2213200141e0016a29020037030020024180016a41206a2214200141d8016a29020037030020024180016a41186a2215200141d0016a29020037030020024180016a41106a2216200141c8016a29020037030020024180016a41086a2217200141c0016a290200370300200241e0006a41186a2218200141cc006a290200370300200241e0006a41106a2219200141c4006a290200370300200241e0006a41086a221a2001413c6a2902003703002002200141b8016a290200370380012002200141346a29020037036020014194016a280200211b200041306a2010360200200041286a200f370300200041206a200e420151ad370300200041186a2003370300200241c0016a41186a2210200141b0016a290200370300200241c0016a41106a221c200141a8016a290200370300200241c0016a41086a221d200141a0016a290200370300200041cc006a2018290300370200200041c4006a20192903003702002000413c6a201a290300370200200041346a2002290360370200200220014198016a2902003703c00120004194016a201b3602002000418c016a200d29030037020020004184016a200c290300370200200041fc006a200b290300370200200041f4006a200a290300370200200041ec006a2009290300370200200041e4006a2008290300370200200041dc006a2007290300370200200041d4006a200229032037020020004198016a20022903c001370200200041a0016a201d290300370200200041a8016a201c290300370200200041b0016a2010290300370200200041f0016a2011290300370200200041e8016a2012290300370200200041e0016a2013290300370200200041d8016a2014290300370200200041d0016a2015290300370200200041c8016a2016290300370200200041c0016a2017290300370200200041b8016a20022903800137020020004190026a200629030037030020004188026a200529030037030020004180026a2004290300370300200041f8016a20022903003703002001280204210420024180016a410472200141086a10df07200041023602002000410c6a2017290300370200200041146a200141146a280200360200200220043602800120002002290380013702040c010b20004103360200200020012902043702040b200241e0016a24000b8c0203017f017e077f02400240024020012802082202ad420c7e2203422088a70d002003a72204417f4c0d00200128020021054104210602402004450d00200410382206450d020b2000410036020820002006360200200041046a2004410c6e220736020002402004410c490d002007210803402004450d012008450d0420052802082201417f4c0d02200528020021090240024020010d004101210a0c010b20011038220a450d040b2005410c6a2105200a2009200110d40b210a200641086a2001360200200641046a20013602002006200a3602002006410c6a2106200441746a21042008417f6a22080d000b0b200020023602080f0b1034000b1032000b200720074198b4ca00103c000ba93723027f017e137f017e017f047e017f017e017f027e077f017e037f017e047f067e017f017e027f017e027f017e057f037e017f017e057f027e027f017e017f017e047f017e027f230041b00e6b2202240002400240024020012802082203ad42c0077e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821070c010b200510382207450d020b410021082000410036020820002007360200200041046a200541c0076e22093602000240200541c007490d00200241f0086a210a200241b8076a210b200241d0076a210c200241b0076a210d20024190076a210e200241fc066a210f200241f0066a41306a2110200241bc076a211120024194076a2112200241086a4104722113200241d8006a2114200241086a41306a2115200241186a211620024188076a21174200211820092119034020052008460d012019450d0402400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200620086a22012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241f0066a200141086a10ab06200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200229039007212120022903b0072122200241c0056a200b41b00110d40b1a20022802ec08212320022802e8082124200241086a200a41b80510d40b1a2022422088a721252021422088a721262022a721272021a72128412521290c240b000b200241f0066a200141086a10ac06200228028407211e20022902fc06211f20022802f806212020022903f0062104410021290c220b200241f0066a200141086a10ad06200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200229039007212120022903b0072122200241c0056a200b41b00110d40b1a200241086a41086a200a41086a290300370300200241086a41106a200a41106a290300370300200241086a41186a200a41186a2903003703002002200a2903003703082022422088a721252021422088a7212620022802ec08212320022802e80821242022a721272021a72128410121290c210b200141086a2903002104410221290c200b41042129024002400240024002400240200141046a2d0000417f6a0e050102030400010b200141086a2802002101410521290c040b200141086a2802002101410121290c030b200141206a350000200141246a31000042208684212a200141056a2f0000200141076a2d000041107472212b200141286a280200212c2001411c6a280000212d200141146a290000212e200141106a280000212f200141086a2900002204a721012004422088a72130410221290c020b200141086a2802002101410321290c010b200141206a350000200141246a31000042208684212a200141056a2f0000200141076a2d000041107472212b200141256a2d00004100472131200141286a280200212c2001411c6a280000212d200141146a290000212e200141106a280000212f200141086a2900002204a721012004422088a721300b2031ad42ff0183422886202a42ffffffffff1f8384211d202b41087420297221322030ad4220862001ad84210441032129202c2128202d211e202e211f202f21200c1f0b200241f0066a200141086a10ae06200241c0056a41086a200b41086a290300370300200241c0056a41106a200b41106a2903003703002002200b2903003703c00520022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128410421290c1e0b200241f0066a200141046a10af0620022902f406210420022802f0062132410521290c1d0b200241f0066a200141086a10b006200241c0056a41086a200b41086a2903003703002002200b2903003703c00520022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128410621290c1c0b02400240200141046a28020022290d00410021322033211b2034211a0c010b200241f0066a41086a200141d8006a290200370300200241f0066a41106a200141e0006a290200370300200241f0066a41186a200141e8006a290200370300200e200141f0006a290200370200200e41086a200141f8006a290200370200200e41106a20014180016a290200370200200e41186a20014188016a2902003702002002200141d0006a2902003703f006200141c0006a290200211a200141386a290200211b200141c8006a2902002135200141306a2902002136200141286a2902002137200141206a29020021382001411c6a2802002139200141146a290200213a200141106a280200213b200d41186a200141a8016a290200370200200d41106a200141a0016a290200370200200d41086a20014198016a290200370200200d20014190016a290200370200200c200141b0016a290200370200200c41086a200141b8016a290200370200200c41106a200141c0016a290200370200200c41186a200141c8016a2902003702002001410c6a280200223c417f4c0d1f02400240203c0d00410121320c010b203c10382232450d210b20322029203c10d40b1a200241086a200241f0066a41800110d40b1a201b2133201a21340b200241c0056a200241086a41800110d40b1a203cad422086203cad8421042035422088a721252037422088a721262035a721272037a72128410821292036211c2038211d2039211e203a211f203b21200c1b0b200241f0066a200141086a10b106200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200229039007212120022903b0072122200241c0056a200b41b00110d40b1a200241086a41086a200a41086a290300370300200241086a41106a200a41106a2903003703002002200a2903003703082022422088a721252021422088a7212620022802ec08212320022802e80821242022a721272021a72128410921290c1a0b200141106a2802002229417f4c0d1c200141046a2802002132200141086a280200211e0240024020290d00410121200c010b202910382220450d1e0b200220293602f406200220203602f0062020201e202910d40b1a200220293602f806200f200141146a10b206200141286a2802002128200141206a290200211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200241c8056a200141d8006a290000370300200241d0056a200141e0006a290000370300200241d8056a200141e8006a2800003602002002200141d0006a2900003703c005200141c0006a290000211a200141386a290000211b200141306a290000211c2001412c6a2800002126200141c8006a2900002221a721272021422088a72125410a21290c190b0240024002400240200141046a2f0100417f6a0e03010200010b2013200141086a10b306200241033b01080c020b2013200141086a10b306200241013b01080c010b200141066a2f0100212941c00710382220450d1d200241f0066a200141086a28020010aa0620022020200241f0066a41c00710d40b36020c200220293b010a200241023b01080b20022802142120200229020c210420022802082132410c21290c180b200241f0066a200141086a10d005200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200229039007212120022903b0072122200241c0056a200b41b00110d40b1a200241086a41086a200a41086a290300370300200241086a41106a200a41106a290300370300200241086a41186a200a41186a290300370300200241086a41206a200a41206a2903003703002002200a2903003703082022422088a721252021422088a7212620022802ec08212320022802e80821242022a721272021a72128410d21290c170b41082129024002400240024002400240024002400240200141046a2d0000417f6a0e09010203040506070800010b203d4280808080806083200141206a350000200141246a3100004220868484213d2001411c6a280000213e200141106a280000213f200141086a2900002140200141066a2f00002141200141056a2d00002142200141146a2900002204a721432004422088a72144410921290c070b200141246a310000211f200141206a350000211d2001411c6a280000213e200141146a2900002104200141106a280000213f200141086a2900002140200141066a2f00002141200141056a2d0000214241c00710382245450d212045200141286a28020010b406203d4280808080806083201d201f4220868442ffffffffff1f8384213d2004422088a721442004a72143410121290c060b20464280808080806083200141c0006a350000200141c4006a31000042208684842146200141386a2900002147200141306a29000021482001412c6a2800002149200141286a2800002145200141206a290000213d2001411c6a280000213e200141106a280000213f200141086a2900002140200141066a2f00002141200141056a2d00002142200141146a2900002204a721432004422088a72144410221290c050b200241f0066a200141086a10b506200141146a2802002143200141066a2f0100214120022802f806213f20022903f0062140410321290c040b203d4280808080806083200141206a350000200141246a3100004220868484213d2001411c6a280000213e200141106a280000213f200141086a2900002140200141066a2f00002141200141056a2d00002142200141146a2900002204a721432004422088a72144410421290c030b20464280808080806083200141c0006a350000200141c4006a31000042208684842146200141386a2900002147200141306a29000021482001412c6a2800002149200141286a2800002145200141206a290000213d2001411c6a280000213e200141106a280000213f200141086a2900002140200141066a2f0000214141052129200141056a2d00002142200141146a2900002204a721432004422088a721440c020b203d4280808080806083200141206a350000200141246a3100004220868484213d2001411c6a280000213e200141106a280000213f200141086a290000214041062129200141066a2f00002141200141056a2d00002142200141146a2900002204a721432004422088a721440c010b203d4280808080806083200141206a350000200141246a3100004220868484213d2001411c6a280000213e200141106a280000213f200141086a2900002140200141066a2f00002141200141056a2d00002142200141146a2900002204a721432004422088a72144410721290b2041411074204241ff01714108747220297221322044ad4220862043ad84211f410e21292047211b2046211a2048211c2049212620452128203d211d203e211e203f2120204021040c160b200241f0066a200141086a10b606200241c0056a41086a200b41086a290300370300200241c0056a41106a200b41106a290300370300200241c0056a41186a200b41186a290300370300200241c0056a41206a200b41206a290300370300200241c0056a41286a200b41286a2903003703002002200b2903003703c00520022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128410f21290c150b200241f0066a200141046a10b706200229028c07211d200228028807211e200229038007211f20022802fc06212020022902f406210420022802f0062132411021290c140b200241f0066a200141086a10b8062002290390072221422088a72126200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a72128411121290c130b200241f0066a200141046a10b9062002290294072221422088a72126200241ac076a290200211a20022902a407211b20022802b4072127200229029c07211c200229028c07211d200228028807211e200229038007211f20022802fc06212020022902f406210420022802f00621322021a72128411221290c120b200241f0066a200141086a10ba0620022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128411321290c110b2010200141386a10bb06200241f0066a41106a200141186a290300370300200241f0066a41086a200141106a290300224a370300200241f0066a41286a200141306a290300221c370300200241f0066a41206a200141286a2903002221370300200241f0066a41186a200141206a290300221d3703002002200141086a29030022043703f0062002200141f8016a2802003602e00820014180026a280200212420014184026a2802002123200241f0066a41386a290300211a20022903a007211b20022902fc06211f200228028407211e20022903b0072122200241c0056a200b41b00110d40b1a2021a72128204aa721202022422088a721252021422088a721262022a72127411421290c100b200241f0066a200141086a10bc06200228028407211e20022902fc06211f20022802f806212020022903f0062104411521290c0f0b10bd06000b10be06000b200241f0066a200141046a10bf06200f200141106a10c00620172001411c6a10c10641182129201641186a200141d0006a290000370000201641106a200141c8006a290000370000201641086a200141c0006a2900003700002016200141386a2900003700002015200141d8006a290000370000201541086a200141e0006a290000370000201541106a200141e8006a290000370000201541186a200141f0006a2900003700002014200141f8006a290000370000201441086a20014180016a290000370000201441106a20014188016a290000370000201441186a20014190016a290000370000200141286a280200212020132001412c6a10c206200220203602082012200241086a41f00010d40b1a200241ac076a290200211a20022902a407211b20022802f006213220022902f406210420022802fc062120200229038007211f200228028807211e200229028c07211d200229029c07211c200229029407212120022902b4072122200241c0056a201141c80010d40b1a2022422088a721252021422088a721262022a721272021a721280c0c0b10f705000b200241f0066a200141046a10c306200229038007211f20022802fc06212020022902f406210420022802f0062132411a21290c0a0b200141046a2802002132411b21290c090b10c406000b10c506000b410521320240024002400240024002400240200141046a280200417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a280200214b2001410c6a280200214c200141086a280200214d410121320c040b200141086a280200214d410221320c030b2001410c6a280200214c200141086a280200214d410321320c020b200141086a280200214d410421320c010b410621320b204cad422086204dad842104411e2129204b21200c060b10c606000b200241f0066a200141086a10c706200220022903b8073703c00520022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128412021290c040b420221040240024002400240200141086a2d0000417f6a0e03010302000b41e1d1cd004128418483c6001035000b204e41807e71200141286a2d000072214e200141096a2f00002001410b6a2d000041107472214f200141c0006a2903002150200141386a2903002151200141346a2802002152200141306a2802002153200141206a29000021542001411c6a2800002155200141146a2900002156200141106a28000021572001412c6a2802002158420121040c010b420321040b2001410c6a350000422086204fad42ffffff07834208868420048421042052ad4220862053ad84211c412121292051211b2050211a20582126204e21282054211d2055211e2056211f205721200c030b200241f0066a200141086a10c806200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f0062104200229039007212120022903b0072122200241c0056a200b41b00110d40b1a20022802ec08212320022802e8082124200241086a200a41f00110d40b1a2022422088a721252021422088a721262022a721272021a72128412221290c020b42032104024002400240200141086a280200417f6a0e03000102000b200141106a28020021592001410c6a280200215a420121040c010b200141286a2903002118200141206a290300215b200141186a280200215c200141146a280200215d200141106a28020021592001410c6a280200215a420221040b205cad422086205dad84211f205aad42208620048421042018422088a721262018a7212841232129205b211d205921200c010b200241f0066a200141086a10c906200241c0056a41086a200b41086a2903003703002002200b2903003703c00520022903b0072221422088a721252002290390072222422088a72126200241a8076a290300211a20022903a007211b200229039807211c200229038807211d200228028407211e20022902fc06211f20022802f806212020022903f00621042021a721272022a72128412421290b200720086a22012029360200200141c0006a201a370200200141386a201b370200200141306a201c370200200141206a201d3702002001411c6a201e360200200141146a201f370200200141106a2020360200200141086a2004370300200141046a2032360200200141c8006a2025ad4220862027ad84370200200141286a2026ad4220862028ad84370200200141d0006a200241c0056a41b00110d40b1a20014184026a202336020020014180026a202436020020014188026a200241086a41b80510d40b1a200841c0076a21082019417f6a22190d000b0b20002003360208200241b00e6a24000f0b1034000b1032000b200920094198b4ca00103c000bee2a04057f017e027f017e230041a0096b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241e0016a200141086a10ab06200041086a200241e0016a41b80710d40b1a200041253602000c240b000b200241e0016a200141086a10ac0620004100360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c220b200241e0016a200141086a10ad06200041086a200241e0016a41a00210d40b1a200041013602000c210b20004102360200200041086a200141086a2903003703000c200b41042103200141046a210402400240024002400240024020012d0004417f6a0e050102030400010b200141086a2802002101410521030c040b200141086a2802002101410121030c030b41022103200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e001200141286a2802002104200141086a28020021010c020b200141086a2802002101410321030c010b200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e00120012d00254100472105200141286a2802002104200141086a28020021010b200020033a0004200020022f01003b0005200020053a002520004103360200200041086a20013602002000410c6a20022903e001370200200041286a2004360200200041076a200241026a2d00003a0000200041146a200241e0016a41086a2903003702002000411c6a200241f0016a290300370200200041246a200241f8016a2d00003a00000c1f0b200241e0016a200141086a10ae06200041086a200241e0016a41e00010d40b1a200041043602000c1e0b200241e0016a200141046a10af06200041053602002000410c6a200241e8016a280200360200200020022903e0013702040c1d0b200241e0016a200141086a10b006200041086a200241e0016a41d80010d40b1a200041063602000c1c0b02400240200128020422040d00410021030c010b200241e0016a41186a200141286a290000370300200241e0016a41106a200141206a290000370300200241e8016a200141186a290000370300200241e0016a41286a200141386a290000370300200241e0016a41306a200141c0006a290000370300200241e0016a41386a200141c8006a290000370300200241e0016a41c8006a200141d8006a290000370300200241e0016a41d0006a200141e0006a290000370300200241e0016a41d8006a200141e8006a2900003703002002200141106a2900003703e0012002200141306a290000370380022002200141d0006a2900003703a002200241e0016a41f8006a20014188016a290000370300200241e0016a41f0006a20014180016a290000370300200241e0016a41e8006a200141f8006a290000370300200241e0016a4188016a20014198016a290000370300200241e0016a4190016a200141a0016a290000370300200241e0016a4198016a200141a8016a290000370300200241e0016a41a8016a200141b8016a290000370300200241e0016a41b0016a200141c0016a290000370300200241e0016a41b8016a200141c8016a2900003703002002200141f0006a2900003703c002200220014190016a2900003703e0022002200141b0016a290000370380032001410c6a2802002201417f4c0d1d0240024020010d00410121030c010b200110382203450d1f0b20032004200110d40b1a2002200241e0016a41c00110d40b1a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241c00110d40b1a200041083602000c1b0b200241e0016a200141086a10b106200041086a200241e0016a41980210d40b1a200041093602000c1a0b200141106a2802002203417f4c0d1a20012802042105200141086a28020021060240024020030d00410121040c010b200310382204450d1c0b200220033602e401200220043602e00120042006200310d40b1a200241e0016a41086a22042003360200200241ec016a200141146a10b206200241086a22032004290300370300200241106a2204200241e0016a41106a290300370300200220022903e001370300200129032021072001280228210620002005360204200041e4006a2001412c6a220141386a290200370200200041dc006a200141306a290200370200200041d4006a200141286a290200370200200041cc006a200141206a290200370200200041c4006a200141186a2902003702002000413c6a200141106a290200370200200041346a200141086a2902003702002000412c6a2001290200370200200041286a2006360200200041206a20073702002000410a360200200041086a2002290300370200200041106a2003290300370200200041186a20042903003702000c190b024002400240024020012f0104417f6a0e03010200010b2002410472200141086a10b306200241033b01000c020b2002410472200141086a10b306200241013b01000c010b20012f0106210341c00710382204450d1b200241e0016a200141086a28020010aa0620022004200241e0016a41c00710d40b360204200220033b0102200241023b01000b200041046a220120022903003702002000410c360200200141086a200241086a2903003702000c180b200241e0016a200141086a10d005200041086a200241e0016a41a80210d40b1a2000410d3602000c170b200141046a210841082109024002400240024002400240024002400240024020012d0004417f6a0e09010203040506070900010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410921090c070b200241d0016a41086a2209200141106a2800003602002002200141086a2900003703d0012002200141186a2900003703e00120022001411d6a2900003700e501200141146a280200210420012f0106210520012d0005210641c00710382203450d202003200141286a28020010b406200241c0016a41086a2009280200360200200220022903d0013703c001200220022903e001370300200220022900e501370005410121090c070b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410221090c060b200241c0016a200141086a10b506200141146a280200210420012f01062105410321090c050b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410421090c040b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410521090c030b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410621090c010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410721090b0b200020053b0106200020063a0005200020093a0004200041086a20022903c001370200200041146a2004360200200041186a2002290300370200200041286a20033602002000412c6a20022903e001370200200041106a200241c0016a41086a280200360200200041206a200241086a290300370200200041346a200241e0016a41086a2903003702002000413c6a200241e0016a41106a290300370200200041c4006a200241e0016a41186a2802003602002000410e3602000c160b200241e0016a200141086a10b606200041086a200241e0016a41f80010d40b1a2000410f3602000c150b200241e0016a200141046a10b70620004110360200200041246a20024180026a2802003602002000411c6a200241f8016a290300370200200041146a200241e0016a41106a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c140b200241e0016a200141086a10b80620004111360200200041306a200241e0016a41286a290300370300200041286a200241e0016a41206a290300370300200041206a200241e0016a41186a290300370300200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c130b200241e0016a200141046a10b906200041046a200241e0016a41c80010d40b1a200041123602000c120b200241e0016a200141086a10ba06200041086a200241e0016a41c80010d40b1a200041133602000c110b200241e0016a41306a200141386a10bb06200241e0016a41286a200141306a290300370300200241e0016a41206a200141286a290300370300200241e0016a41186a200141206a290300370300200241e0016a41106a200141186a290300370300200241e0016a41086a200141106a2903003703002002200141086a2903003703e0012002200141f8016a2802003602d00320014180026a2903002107200041086a200241e0016a41f80110d40b1a20004180026a2007370300200041143602000c100b200241e0016a200141086a10bc0620004115360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c0f0b10bd06000b10be06000b200241e0016a200141046a10bf06200241ec016a200141106a10c006200241e0016a41186a2001411c6a10c106200241286a200141d0006a290200370300200241206a200141c8006a290200370300200241186a200141c0006a290200370300200241386a200141e0006a290200370300200241c0006a200141e8006a290200370300200241c8006a200141f0006a290200370300200241d8006a20014180016a290200370300200241e0006a20014188016a290200370300200241e8006a20014190016a2902003703002002200141386a2902003703102002200141d8006a2902003703302002200141f8006a290200370350200141286a280200210320024104722001412c6a10c2062002200336020020024184026a200241f00010d40b1a200041046a2002200241e0016a41940110d40b41940110d40b1a200041183602000c0c0b10f705000b200241e0016a200141046a10c3062000411a360200200041146a200241f0016a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c0a0b2000411b360200200020012802043602040c090b10c406000b10c506000b4105210302400240024002400240024002402001280204417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a28020021042001410c6a2802002105200141086a2802002106410121030c040b200141086a2802002106410221030c030b2001410c6a2802002105200141086a2802002106410321030c020b200141086a2802002106410421030c010b410621030b200020033602042000411e360200200041106a20043602002000410c6a2005360200200041086a20063602000c060b10c606000b200241e0016a200141086a10c706200041086a200241e0016a41d00010d40b1a200041203602000c040b024002400240024002400240200141086a22032d0000417f6a0e03010203000b41e1d1cd004128418483c6001035000b200241026a200341036a2d00003a0000200241e0016a41086a200141186a290300370300200241e0016a41106a200141206a290300370300200241e0016a41186a200141286a2d00003a0000200220032f00013b01002002200141106a2903003703e001200141c0006a2903002107200141386a290300210a200141346a2802002103200141306a28020021042001410c6a28020021052001412c6a2802002101410121060c030b2001410c6a2802002105410221060c010b2001410c6a2802002105410321060b0b200020022f01003b0009200041c0006a2007370300200041386a200a370300200041086a20063a00002000410c6a2005360200200041106a20022903e001370300200041346a2003360200200041306a20043602002000412c6a20013602002000410b6a200241026a2d00003a0000200041186a200241e0016a41086a290300370300200041206a200241e0016a41106a290300370300200041286a200241e0016a41186a280200360200200041213602000c030b200241e0016a200141086a10c806200041086a200241e0016a41f00310d40b1a200041223602000c020b41032103024002400240200141086a280200417f6a0e03000102000b200141106a28020021052001410c6a2802002104410121030c010b200141286a290300210a200141206a2903002107200141186a2802002109200141146a2802002106200141106a28020021052001410c6a2802002104410221030b20004123360200200041286a200a370300200041206a2007370300200041186a2009360200200041146a2006360200200041106a20053602002000410c6a2004360200200041086a20033602000c010b200241e0016a200141086a10c906200041086a200241e0016a41d80010d40b1a200041243602000b200241a0096a24000f0b1034000b1032000be90102047f037e024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021040240024020030d00410121010c010b200310382201450d020b2000410036020820002001360200200041046a2003410576220536020002402003450d0003402003450d01200441086a2900002106200441106a290000210720042900002108200141186a200441186a290000370000200141106a2007370000200141086a200637000020012008370000200141206a2101200341606a2103200441206a21042005417f6a22050d000b0b200020023602080f0b1034000b1032000b8e13020a7f047e230041306b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a210341012104410121050240024002400240024020012d00040e050104020300010b200241166a200341036a2d00003a0000200241046a200141186a2d00003a0000200220032f00013b01142002200141146a280200360200200141106a28020021062001410c6a2802002107200141086a2802002108410421050c030b200241166a200341036a2d00003a0000200241086a2001411c6a290200370300200241106a200141246a2d00003a0000200220032f00013b01142002200141146a290200370300200141106a28020021062001410c6a2802002107200141086a2802002108410021050c020b200141106a2802002206417f4c0d06200141086a28020021030240024020060d00410121080c010b200610382208450d080b20082003200610d40b1a41022105200621070c010b41032105200241166a200341036a2d00003a0000200241086a2001411c6a290200370300200241106a200141246a2d00003a0000200220032f00013b01142002200141146a290200370300200141106a28020021062001410c6a2802002107200141086a28020021080b02400240024002400240200141286a22092d00000e050104020300010b2002412e6a200941036a2d00003a000041042104200241186a41046a2001413c6a2d00003a0000200220092f00013b012c2002200141386a280200360218200141346a2802002103200141306a280200210a2001412c6a280200210b0c030b2002412e6a200941036a2d00003a0000200241206a200141c0006a290200370300200241286a200141c8006a2d00003a0000200220092f00013b012c2002200141386a290200370318200141346a2802002103200141306a280200210a2001412c6a280200210b410021040c020b200141346a2802002203417f4c0d062001412c6a28020021040240024020030d004101210b0c010b20031038220b450d080b200b2004200310d40b1a410221042003210a0c010b410321042002412e6a200941036a2d00003a0000200241206a200141c0006a290200370300200241286a200141c8006a2d00003a0000200220092f00013b012c2002200141386a290200370318200141346a2802002103200141306a280200210a2001412c6a280200210b0b200020053a0004200020022f01143b0005200041106a20063602002000410c6a2007360200200041086a2008360200200041146a2002290300370200200041076a200241146a41026a2d00003a00002000411c6a200241086a290300370200200041246a200241106a280200360200200141d8006a290300210c200141e8006a290300210d200141e0006a290300210e200141f0006a28020021062001290350210f200041286a20043a00002000412c6a200b360200200041306a200a360200200041346a2003360200200041f0006a2006360200200041e0006a200e370300200041e8006a200d370300200041d0006a200f370300200041d8006a200c370300200020022f012c3b00292000412b6a2002412c6a41026a2d00003a0000200041386a2002290318370200200041c0006a200241186a41086a290300370200200041c8006a200241186a41106a280200360200200041043602000c030b200041013602000c020b200141046a2107410121080240024002400240024020012d00040e050104020300010b200241026a200741036a2d00003a0000200241186a41046a200141186a2d00003a0000200220072f00013b01002002200141146a280200360218200141106a28020021062001410c6a280200210b200141086a2802002103410421080c030b200241026a200741036a2d00003a0000200241186a41086a2001411c6a290200370300200241186a41106a200141246a2d00003a0000200220072f00013b01002002200141146a290200370318200141106a28020021062001410c6a280200210b200141086a2802002103410021080c020b200141106a2802002206417f4c0d04200141086a28020021010240024020060d00410121030c010b200610382203450d060b20032001200610d40b1a410221082006210b0c010b41032108200241026a200741036a2d00003a0000200241186a41086a2001411c6a290200370300200241186a41106a200141246a2d00003a0000200220072f00013b01002002200141146a290200370318200141106a28020021062001410c6a280200210b200141086a28020021030b200020083a0004200020022f01003b000520004102360200200041106a20063602002000410c6a200b360200200041086a2003360200200041146a2002290318370200200041076a200241026a2d00003a00002000411c6a200241186a41086a290300370200200041246a200241186a41106a2802003602000c010b200141046a2107410121080240024002400240024020012d00040e050104020300010b200241026a200741036a2d00003a0000200241186a41046a200141186a2d00003a0000200220072f00013b01002002200141146a280200360218200141106a28020021062001410c6a280200210b200141086a2802002103410421080c030b200241026a200741036a2d00003a0000200241186a41086a2001411c6a290200370300200241186a41106a200141246a2d00003a0000200220072f00013b01002002200141146a290200370318200141106a28020021062001410c6a280200210b200141086a2802002103410021080c020b200141106a2802002206417f4c0d03200141086a28020021080240024020060d00410121030c010b200610382203450d050b20032008200610d40b1a410221082006210b0c010b41032108200241026a200741036a2d00003a0000200241186a41086a2001411c6a290200370300200241186a41106a200141246a2d00003a0000200220072f00013b01002002200141146a290200370318200141106a28020021062001410c6a280200210b200141086a28020021030b200020083a0004200020022f01003b0005200041106a20063602002000410c6a200b360200200041086a2003360200200041146a2002290318370200200041076a200241026a2d00003a00002000411c6a200241186a41086a290300370200200041246a200241186a41106a280200360200200141c8006a2802002106200141306a290300210c200141386a290300210d2001290328210e200041c0006a200141c0006a290300370300200041386a200d370300200041306a200c370300200041286a200e370300200041c8006a2006360200200041033602000b200241306a24000f0b1034000b1032000bbc0701097f230041c0076b2202240002400240024002400240024002400240024020012d0000417f6a0e06010203040500010b2001410c6a2802002203417f4c0d06200141046a28020021044101210502402003450d00200310382205450d080b20052004200310d40b2105200141016a2d000021042001411c6a2802002106200141186a2802002107200128021421082001280210210941c0071038220a450d0720022001280220108708200a200241c00710d40b21012000411c6a2006360200200041186a2007360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2005360200200041206a2001360200200020043a0001200041063a00000c050b200141016a2d00002103200141106a28020021052001410c6a2802002104200141086a2802002106200141046a280200210741c00710382208450d062002200141146a2802001087082008200241c00710d40b2101200041106a20053602002000410c6a2004360200200041086a2006360200200041046a2007360200200041146a2001360200200020033a0001200041013a00000c040b200041023a0000200041046a200141046a2902003702000c030b2001410c6a2802002203417f4c0d03200141046a28020021044101210502402003450d00200310382205450d050b20052004200310d40b2105200141016a2d000021042001411c6a2802002106200141186a2802002107200128021421082001280210210941c0071038220a450d0420022001280220108708200a200241c00710d40b21012000411c6a2006360200200041186a2007360200200041146a2008360200200041106a20093602002000410c6a2003360200200041086a2003360200200041046a2005360200200041206a2001360200200020043a0001200041033a00000c020b2001410c6a2802002203417f4c0d02200141046a28020021010240024020030d00410121050c010b200310382205450d040b20052001200310d40b21012000410c6a2003360200200041086a2003360200200041046a2001360200200041043a00000c010b200141016a2d00002103200141106a28020021052001410c6a2802002104200141086a2802002106200141046a280200210741c00710382208450d022002200141146a2802001087082008200241c00710d40b2101200041106a20053602002000410c6a2004360200200041086a2006360200200041046a2007360200200041146a2001360200200020033a0001200041053a00000b200241c0076a24000f0b1034000b1032000bb30a01067f230041e0076b2202240002400240024002400240024002402001280200417f6a0e0401020300010b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002411e6a200341036a2d00003a0000200241086a41046a200141186a2d00003a0000200220032f00013b011c2002200141146a280200360208200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002411e6a200341036a2d00003a0000200241086a41086a2001411c6a290200370300200241086a41106a200141246a2d00003a0000200220032f00013b011c2002200141146a290200370308200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d06200141086a28020021040240024020050d00410121070c010b200510382207450d080b20072004200510d40b1a41022104200521060c010b410321042002411e6a200341036a2d00003a0000200241086a41086a2001411c6a290200370300200241086a41106a200141246a2d00003a0000200220032f00013b011c2002200141146a290200370308200141106a28020021052001410c6a2802002106200141086a28020021070b41c00710382203450d05200241206a2001280228108c0b2003200241206a41c00710d40b2101200020043a0004200020022f011c3b0005200041076a2002411e6a2d00003a0000200041106a20053602002000410c6a2006360200200041086a2007360200200041146a20022903083702002000411c6a200241086a41086a290300370200200041246a200241086a41106a280200360200200041286a2001360200200041043602000c030b41c00710382205450d04200241206a2001280204108c0b2005200241206a41c00710d40b210120004101360200200020013602040c020b41c00710382205450d03200241206a2001280204108c0b20002005200241206a41c00710d40b36020420004102360200200041086a200141086a2903003703000c010b200141046a2103410121040240024002400240024020012d00040e050104020300010b2002410a6a200341036a2d00003a0000200241206a41046a200141186a2d00003a0000200220032f00013b01082002200141146a280200360220200141106a28020021052001410c6a2802002106200141086a2802002107410421040c030b2002410a6a200341036a2d00003a0000200241206a41086a2001411c6a290200370300200241206a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370320200141106a28020021052001410c6a2802002106200141086a2802002107410021040c020b200141106a2802002205417f4c0d03200141086a28020021010240024020050d00410121070c010b200510382207450d050b20072001200510d40b1a41022104200521060c010b410321042002410a6a200341036a2d00003a0000200241206a41086a2001411c6a290200370300200241206a41106a200141246a2d00003a0000200220032f00013b01082002200141146a290200370320200141106a28020021052001410c6a2802002106200141086a28020021070b200020043a0004200020022f01083b000520004103360200200041106a20053602002000410c6a2006360200200041086a2007360200200041146a2002290320370200200041076a2002410a6a2d00003a00002000411c6a200241206a41086a290300370200200041246a200241206a41106a2802003602000b200241e0076a24000f0b1034000b1032000bd90a01097f23004180086b2202240002400240024002400240024002400240024002400240024020012d0000417f6a0e0a01020304050607080900010b200241186a2203200141196a290000370300200241106a2204200141116a290000370300200241086a2205200141096a29000037030020022001290001370300200241206a41186a2206200141396a290000370300200241206a41106a2207200141316a290000370300200241206a41086a2208200141296a2900003703002002200141216a290000370320200141c1006a2d0000210941c0071038220a450d0a200241c0006a200141c4006a28020010ee08200a200241c0006a41c00710d40b2101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290300370001200041216a2002290320370000200041296a2008290300370000200041316a2007290300370000200041396a2006290300370000200041c4006a2001360200200041c1006a20093a00002000410a3a00000c090b200241386a2203200141196a290000370300200241306a2204200141116a290000370300200241286a2205200141096a29000037030020022001290001370320200141216a2d0000210641c00710382207450d09200241c0006a200141246a28020010ee082007200241c0006a41c00710d40b2101200041196a2003290300370000200041116a2004290300370000200041096a200529030037000020002002290320370001200041246a2001360200200041216a20063a0000200041013a00000c080b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c070b200041033a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a280200360200200041216a200141216a2d00003a00000c060b200041043a00000c050b200041053a0000200020012d00013a0001200041046a200141046a280200360200200041026a200141026a2f01003b01000c040b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a290200370200200041226a200141226a2f01003b0100200041216a200141216a2d00003a00000c030b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c020b200041083a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c010b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000b20024180086a24000f0b1032000bf60501087f230041d0076b220224000240024002400240024002400240024020012d0000417f6a0e0401020304000b41e1d1cd004128419483c6001035000b2002200141046a10b50641c00710382203450d04200241106a200141106a28020010ee082003200241106a41c00710d40b21012000410c6a200241086a280200360200200041046a2002290300370200200041106a2001360200200041013a00000c030b200141026a2f01002104200241106a200141046a10b506200141246a2802002203417f4c0d042001411c6a2802002105200141146a2802002106200141186a2802002107200141106a28020021080240024020030d00410121090c010b200310382209450d040b20092005200310d40b2105200041026a20043b0100200041246a2003360200200041206a20033602002000411c6a2005360200200041186a2007360200200041146a2006360200200041106a2008360200200041023a0000200041046a20022903103702002000410c6a200241186a280200360200200041286a2001290328370300200020012d00014100473a00010c020b200141226a2f01002103200241106a200141246a10b506200041226a20033b01002000200141016a290000370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a20022903103702002000412c6a200241186a280200360200200041306a200141306a290300370300200041c0006a200141c0006a290300370300200041386a200141386a280200360200200041033a00000c010b200141226a2f01002103200241106a200141246a10b506200041226a20033b0100200041043a00002000200141016a290000370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a20022903103702002000412c6a200241186a280200360200200041306a200141306a2903003703000b200241d0076a24000f0b1032000b1034000bc10d02047f017e024002402001280208220241ffffffff01712002470d0020024103742203417f4c0d00200128020021040240024020030d00410421050c010b200310382205450d020b200020053602002000200341037636020420052004200241037410d40b1a20002002360208200141146a2802002205ad420c7e2206422088a70d002006a72202417f4c0d00200128020c21044104210302402002450d00200210382203450d020b2000200336020c200041106a2002410c6e36020020032004200210d40b1a200041146a2005360200200141206a280200220241ffffffff00712002470d0020024104742203417f4c0d00200128021821044104210502402003450d00200310382205450d020b200020053602182000411c6a200341047636020020052004200241047410d40b1a200041206a20023602002001412c6a2802002205ad42147e2206422088a70d002006a72202417f4c0d00200128022421040240024020020d00410421030c010b200210382203450d020b20002003360224200041286a200241146e36020020032004200210d40b1a2000412c6a2005360200200141386a2802002205ad42187e2206422088a70d002006a72202417f4c0d00200128023021040240024020020d00410421030c010b200210382203450d020b20002003360230200041346a200241186e36020020032004200210d40b1a200041386a2005360200200141c4006a2802002205ad421c7e2206422088a70d002006a72202417f4c0d00200128023c21040240024020020d00410421030c010b200210382203450d020b2000200336023c200041c0006a2002411c6e36020020032004200210d40b1a200041c4006a2005360200200141d0006a280200220241ffffff3f712002470d0020024105742203417f4c0d00200128024821040240024020030d00410421050c010b200310382205450d020b20002005360248200041cc006a200341057636020020052004200241057410d40b1a200041d0006a2002360200200141dc006a2802002205ad42247e2206422088a70d002006a72202417f4c0d00200128025421040240024020020d00410421030c010b200210382203450d020b20002003360254200041d8006a200241246e36020020032004200210d40b1a200041dc006a2005360200200141e8006a2802002205ad42287e2206422088a70d002006a72202417f4c0d00200128026021040240024020020d00410421030c010b200210382203450d020b20002003360260200041e4006a200241286e36020020032004200210d40b1a200041e8006a2005360200200141f4006a2802002205ad422c7e2206422088a70d002006a72202417f4c0d00200128026c21040240024020020d00410421030c010b200210382203450d020b2000200336026c200041f0006a2002412c6e36020020032004200210d40b1a200041f4006a200536020020014180016a2802002205ad42307e2206422088a70d002006a72202417f4c0d00200128027821040240024020020d00410421030c010b200210382203450d020b20002003360278200041fc006a200241306e36020020032004200210d40b1a20004180016a20053602002001418c016a2802002205ad42347e2206422088a70d002006a72202417f4c0d0020012802840121040240024020020d00410421030c010b200210382203450d020b200020033602840120004188016a200241346e36020020032004200210d40b1a2000418c016a200536020020014198016a2802002205ad42387e2206422088a70d002006a72202417f4c0d0020012802900121040240024020020d00410421030c010b200210382203450d020b200020033602900120004194016a200241386e36020020032004200210d40b1a20004198016a2005360200200141a4016a2802002205ad423c7e2206422088a70d002006a72202417f4c0d00200128029c0121040240024020020d00410421030c010b200210382203450d020b2000200336029c01200041a0016a2002413c6e36020020032004200210d40b1a200041a4016a2005360200200141b0016a280200220241ffffff1f712002470d0020024106742203417f4c0d0020012802a80121040240024020030d00410421050c010b200310382205450d020b200020053602a801200041ac016a200341067636020020052004200241067410d40b1a200041b0016a2002360200200141bc016a2802002203ad42c4007e2206422088a70d002006a72202417f4c0d0020012802b40121050240024020020d00410421010c010b200210382201450d020b200020013602b401200041b8016a200241c4006e36020020012005200210d40b1a200041bc016a20033602000f0b1034000b1032000bec0700024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402001280200417f6a0e280102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728000b41e1d1cd00412841c896c5001035000b20004101360200200020012802043602040f0b20004102360200200020012802043602040f0b20004103360200200020012802043602040f0b20004104360200200020012802043602040f0b20004105360200200020012802043602040f0b20004106360200200020012802043602040f0b20004107360200200020012802043602040f0b20004108360200200020012802043602040f0b20004109360200200020012802043602040f0b2000410a360200200020012802043602040f0b2000410b360200200020012802043602040f0b2000410c360200200020012802043602040f0b2000410d360200200041086a200141086a2802003602002000200141046a2802004101463602040f0b2000410e360200200041086a200141086a2802003602002000200141046a2802004101463602040f0b2000410f360200200020012802043602040f0b20004110360200200020012802043602040f0b20004111360200200020012802043602040f0b20004112360200200020012802043602040f0b20004113360200200020012802043602040f0b20004114360200200020012802043602040f0b20004115360200200020012802043602040f0b20004116360200200020012802043602040f0b20004117360200200020012802043602040f0b20004118360200200020012802043602040f0b20004119360200200020012802043602040f0b2000411a360200200020012802043602040f0b2000411b360200200041086a200141086a2903003703000f0b2000411c360200200020012802043602040f0b2000411d360200200020012802043602040f0b2000411e360200200020012802043602040f0b2000411f360200200041106a200141106a290300370300200041086a200141086a2903003703000f0b20004120360200200041106a200141106a290300370300200041086a200141086a2903003703000f0b20004121360200200020012802043602040f0b20004122360200200020012802043602040f0b20004123360200200020012802043602040f0b20004124360200200020012802043602040f0b20004125360200200020012802043602040f0b20004126360200200020012802043602040f0b20004127360200200020012802043602040f0b20004128360200200020012802043602040b110041e1d1cd00412841acefc2001035000b110041e1d1cd00412841e4b4c7001035000bf00203027f017e067f230041d0006b2202240002400240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021014104210602402005450d00200510382206450d020b2000410036020820002006360200200041046a200541d0006e22073602000240200541d000490d00200241106a220841086a21092007210a03402005450d01200a450d042002200110cb09200820012900103700002009200141186a290000370000200841106a200141206a290000370000200841186a200141286a290000370000200841206a200141306a290000370000200841286a200141386a290000370000200841306a200141c0006a290000370000200841386a200141c8006a2900003700002002200128020c36020c2006200241d00010d40b41d0006a2106200541b07f6a2105200141d0006a2101200a417f6a220a0d000b0b20002003360208200241d0006a24000f0b1034000b1032000b200720074198b4ca00103c000bde1704027f017e437f077e23004190086b22022400024002400240024020012802082203ad42f4027e2204422088a70d002004a72205417f4c0d00200128020021014104210602402005450d00200510382206450d020b410021072000410036020820002006360200200041046a200541f4026e22083602000240200541f402490d002001200341f4026c6a2109200241086a41a4026a210a2002418c026a210b200241ec016a210c200241ac016a210d2002418c016a210e200241ec006a210f200241cc006a21102002412c6a2111200241086a4104722112200241086a41e8026a2113200241f0056a41386a2114200241f0056a41306a2115200241f0056a41286a2116200241f0056a41206a211720082118034020072119200920012205460d0120192008460d05200241b0076a41086a221a2005410c6a290000370300200241b0076a41106a221b200541146a290000370300200241b0076a41186a221c2005411c6a29000037030020024190076a41086a221d2005412c6a29020037030020024190076a41106a221e200541346a29020037030020024190076a41186a221f2005413c6a290200370300200220052900043703b007200220052902243703900720052802002120200241f0066a41186a2221200541dc006a290000370300200241f0066a41106a2222200541d4006a290000370300200241f0066a41086a2223200541cc006a290000370300200241d0066a41086a2224200541ec006a290000370300200241d0066a41106a2225200541f4006a290000370300200241d0066a41186a2226200541fc006a290000370300200220052900443703f006200220052900643703d006200241b0066a41186a22272005419c016a290000370300200241b0066a41106a222820054194016a290000370300200241b0066a41086a22292005418c016a29000037030020022005290084013703b0062014200541dc016a2900003703002015200541d4016a2900003703002016200541cc016a2900003703002017200541c4016a290000370300200241f0056a41186a222a200541bc016a290000370300200241f0056a41106a222b200541b4016a290000370300200241f0056a41086a222c200541ac016a290000370300200220052900a4013703f005200241d0056a41186a222d200541fc016a290000370300200241d0056a41106a222e200541f4016a290000370300200241d0056a41086a222f200541ec016a290000370300200220052900e4013703d005200241b0056a41186a22302005419c026a290000370300200241b0056a41106a223120054194026a290000370300200241b0056a41086a22322005418c026a29000037030020022005290084023703b005200241d0036a200541a4026a10df0720052802b802223341ffffffff00712033470d0220334104742234417f4c0d02410021350240024020340d0041042136410021370c010b20052802b0022107203410382236450d0441002138203441047622372139034020342038460d01200728020c2201417f4c0d042007280204213a2007280200213b0240024020010d004101213c0c010b20011038223c450d060b200741106a2107203c203a200110d40b213c203620386a223a203b360200203a410c6a2001360200203a41086a2001360200203a41046a203c360200203841106a21382039417f6a22390d000b0b024020052802bc022201450d0020052802c4022234417f4c0d030240024020340d00410121350c010b203410382235450d050b20352001203410d40b1a0b20052802d002223c417f4c0d0220052802c802210102400240203c0d00410121070c010b203c10382207450d040b20072001203c10d40b213d20024180036a41086a223e200241d0036a41086a223f28020036020020024190056a41086a2240201a29030037030020024190056a41106a2241201b29030037030020024190056a41186a221b201c290300370300200241f0046a41086a221c201d290300370300200241f0046a41106a221d201e290300370300200241f0046a41186a221e201f290300370300200220022903d00337038003200220022903b0073703900520022002290390073703f00420052802d802211f20052802d4022142200241d0046a41186a22432021290300370300200241d0046a41106a22212022290300370300200241d0046a41086a22222023290300370300200241b0046a41086a22232024290300370300200241b0046a41106a22242025290300370300200241b0046a41186a2225202629030037030020024190046a41086a2226202929030037030020024190046a41106a2229202829030037030020024190046a41186a22282027290300370300200220022903f0063703d004200220022903d0063703b004200220022903b00637039004200241d0036a41386a22272014290300370300200241d0036a41306a22442015290300370300200241d0036a41286a22452016290300370300200241d0036a41206a22462017290300370300200241d0036a41186a2247202a290300370300200241d0036a41106a222a202b290300370300203f202c290300370300200241b0036a41186a222b202d290300370300200241b0036a41106a222c202e290300370300200241b0036a41086a222d202f290300370300200220022903f0053703d003200220022903d0053703b00320024190036a41186a222e203029030037030020024190036a41106a222f203129030037030020024190036a41086a22302032290300370300200220022903b0053703900320052802e4022231ad42c1007e2204422088a70d022004a72239417f4c0d020240024020390d004101213b4100211a0c010b20052802dc02210120391038223b450d04203941c1006e211a203941c100490d0041002138201a213a034020392038460d01203a450d06200141396a2900002104200141316a2900002148200141296a2900002149200141216a290000214a200141196a290000214b200141116a290000214c200141096a290000214d2001290001214e203b20386a220720012d00003a0000200741016a204e370000200741096a204d370000200741116a204c370000200741196a204b370000200741216a204a370000200741296a2049370000200741316a2048370000200741396a2004370000203841c1006a2138200141c1006a2101203a417f6a223a0d000b0b201941016a2107200541f4026a21012013200541e8026a10cb092012200229039005370200201241086a2040290300370200201241106a2041290300370200201241186a201b290300370200201120022903f004370200201141086a201c290300370200201141106a201d290300370200201141186a201e290300370200201020022903d004370200201041086a2022290300370200201041106a2021290300370200201041186a204329030037020020022020360208200f41186a2025290300370200200f41106a2024290300370200200f41086a2023290300370200200f20022903b004370200200e200229039004370200200e41086a2026290300370200200e41106a2029290300370200200e41186a2028290300370200200d20022903d003370200200d41086a203f290300370200200d41106a202a290300370200200d41186a2047290300370200200d41206a2046290300370200200d41286a2045290300370200200d41306a2044290300370200200d41386a2027290300370200200c41186a202b290300370200200c41106a202c290300370200200c41086a202d290300370200200c20022903b003370200200b41186a202e290300370200200b41106a202f290300370200200b41086a2030290300370200200b200229039003370200200a41086a203e280200360200200a200229038003370200200220313602ec022002201a3602e8022002203b3602e4022002201f3602e002200220423602dc022002203c3602d8022002203c3602d4022002203d3602d002200220343602cc02200220343602c802200220353602c402200220333602c002200220373602bc02200220363602b8022006201941f4026c6a200241086a41f40210d40b1a2018417f6a22180d000b0b2000200336020820024190086a24000f0b1034000b1032000b201a201a4198b4ca00103c000b200820084198b4ca00103c000ba60704027f017e1a7f037e230041e0006b22022400024002400240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d00200510382207450d020b410021012000410036020820002007360200200041046a200541306e2208360200024020054130490d002006200341306c6a2109200241106a210a200241086a210b200241d8006a210c2008210d03402001210e20092006460d01200e2008460d05200241186a220f200641286a290000370300200a200641206a290000370300200b200641186a29000037030020022006290010370300200628020c2210ad42c8007e2204422088a70d022004a72211417f4c0d02200628020021120240024020110d0041042113410021140c010b20062802042115201110382213450d04201141c8006e2114201141c800490d00410021012014211603402015210520112001460d012016450d062016417f6a2116410421170240024002400240024020052d00040e050001020304000b410021170c030b410121170c020b410221170c010b410321170b200541c8006a2115200241206a41086a22182005410d6a290000370300200241206a41106a2219200541156a290000370300200241206a41186a221a2005411d6a290000370300200241206a41206a221b200541256a290000370300200241206a41286a221c2005412d6a290000370300200241206a41306a221d200541356a290000370300200c2005413d6a290000370300200529000521042005280200211e201320016a220541046a20173a00002005201e36020020022004370320200541056a20022903203700002005410d6a2018290300370000200541156a20192903003700002005411d6a201a290300370000200541256a201b2903003700002005412d6a201c290300370000200541356a201d2903003700002005413d6a200c290300370000200141c8006a210120160d000b0b200e41016a2101200641306a2106200241206a41186a200f2903002204370300200241206a41106a200a290300221f370300200241206a41086a200b29030022203703002002200229030022213703202007200e41306c6a2205201036020c20052014360208200520133602042005201236020020052021370210200541186a2020370200200541206a201f370200200541286a2004370200200d417f6a220d0d000b0b20002003360208200241e0006a24000f0b1034000b1032000b201420144198b4ca00103c000b200820084198b4ca00103c000bf50603027f017e0e7f230041106b2202240002400240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d00200510382207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d002009210a034020052008460d01200a450d040240024002400240024002400240200620086a22012d00000e06010203040500010b2001410c6a280200220b417f4c0d08200141046a280200210102400240200b0d004101210c0c010b200b1038220c450d0a0b200c2001200b10d40b410876210d4105210e200b210f0c050b2002200141146a2900003703002002200141196a290000370005200141016a2f0000200141036a2d0000411074722110200141046a280000220c410876210d200141106a28000021112001410c6a280000210b200141086a280000210f4100210e0c040b200141106a2802002211417f4c0d06200141036a2d00002110200141016a2f0000210b200141086a2802002112200141046a2d0000210c4101210e4101210f02402011450d0020111038220f450d080b200b2010411074722110200f2012201110d40b1a2011210b0c030b200141106a2802002211417f4c0d05200141036a2d00002110200141016a2f0000210b200141086a280200210e200141046a2d0000210c0240024020110d004101210f0c010b20111038220f450d070b200b2010411074722110200f200e201110d40b1a4102210e2011210b0c020b200141106a2802002211417f4c0d04200141036a2d00002110200141016a2f0000210b200141086a280200210e200141046a2d0000210c0240024020110d004101210f0c010b20111038220f450d060b200b2010411074722110200f200e201110d40b1a4103210e2011210b0c010b4104210e200141046a280200210c2001410c6a280200210b200141086a280200210f4100210d0b200720086a2201200e3a0000200141036a20104110763a0000200141016a20103b0000200141106a20113602002001410c6a200b360200200141086a200f360200200141046a200d410874200c41ff017172360200200141146a20022903003702002001411c6a200241086a290300370200200841246a2108200a417f6a220a0d000b0b20002003360208200241106a24000f0b1034000b1032000b200920094198b4ca00103c000b900401047f024002400240024002400240024002402001280200417f6a0e050102030405000b41e1d1cd00412841a882c3001035000b200141106a2802002202417f4c0d04200141086a2802002103200128020421044101210102402002450d00200210382201450d060b200020013602082000410c6a200236020020012003200210d40b1a20002004360204200041106a2002360200200041013602000f0b200141106a2802002202417f4c0d03200141086a2802002103200128020421040240024020020d00410121010c010b200210382201450d050b200020013602082000410c6a200236020020012003200210d40b1a20002004360204200041106a2002360200200041023602000f0b200141106a2802002202417f4c0d02200141086a2802002104200128020421050240024020020d00410121030c010b200210382203450d040b200020033602082000410c6a200236020020032004200210d40b1a200041106a20023602002000200536020420004103360200200041146a20012802143602000f0b200141106a2802002202417f4c0d01200141086a2802002103200128020421040240024020020d00410121010c010b200210382201450d030b200020013602082000410c6a200236020020012003200210d40b1a20002004360204200041106a2002360200200041043602000f0b20004105360200200020012802043602040f0b1034000b1032000b110041e1d1cd00412841d8a0c7001035000b110041e1d1cd00412841c8c0cd001035000b110041e1d1cd00412841f0d8ca001035000b870502047f027e02400240024002400240024002400240024020012d0000417f6a0e06010203040506000b41e1d1cd0041284198bfcc001035000b200141106a2802002202417f4c0d05200141086a2802002103200141046a28020021040240024020020d00410121050c010b200210382205450d070b200020053602082000410c6a200236020020052003200210d40b1a200041106a20023602002001411c6a2802002202417f4c0d05200128021421054101210102402002450d00200210382201450d070b20002001360214200041186a200236020020012005200210d40b1a200041046a20043602002000411c6a2002360200200041013a00000f0b20002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200141306a2802002202417f4c0d04200141c8006a2903002106200141c0006a2903002107200141286a2802002103200141246a28020021040240024020020d00410121050c010b200210382205450d060b200020053602282000412c6a200236020020052003200210d40b1a200041306a20023602002001413c6a2802002202417f4c0d04200128023421050240024020020d00410121010c010b200210382201450d060b20002001360234200041386a200236020020012005200210d40b1a200041c8006a2006370300200041c0006a20073703002000413c6a2002360200200041246a2004360200200041023a00000f0b200041033a0000200041046a200141046a2802003602000f0b200041043a0000200041046a200141046a2902003702000f0b200041053a0000200041046a200141046a2802003602000f0b200041063a00000f0b1034000b1032000b950301067f0240024002400240024002400240024002402001280200417f6a0e06010203040506000b41e1d1cd00412841acc7ca001035000b200141106a2802002202417f4c0d05200141086a2802002103200128020421040240024020020d00410121050c010b200210382205450d070b20052003200210d40b21062001411c6a2802002203417f4c0d05200128021421074101210502402003450d00200310382205450d070b20052007200310d40b21052000411c6a2003360200200041186a2003360200200041146a2005360200200041106a20023602002000410c6a2002360200200041086a20063602002000200436020420004101360200200041206a20012d00204100473a00000f0b20004102360200200020012802043602040f0b20004103360200200020012802043602040f0b20004104360200200020012802043602040f0b20012802042102200041086a200141086a10c60320004105360200200020023602040f0b20004106360200200020012902043702042000410c6a2001410c6a2902003702000f0b1034000b1032000ba10f03017f027e067f23004190016b220224000240024002400240024002400240024002400240024020012d0000417f6a0e080102030405060700010b200041083a0000200041046a200141046a2802003602000c070b200141c0006a2903002103200141386a2903002104200141306a28020021052001412c6a2802002106200141286a2802002107200141246a280200210841032109024020012d0001220a4103460d000240024002400240200a0e03010200010b200241e8006a200141226a2d00003a0000200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a290000370300410221092002200141026a2900003703480c020b200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a2900003703002002200141026a290000370348410021090c010b200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a2900003703002002200141026a290000370348410121090b200241206a200241c8006a41206a2d00003a0000200241186a200241c8006a41186a290300370300200241106a200241c8006a41106a290300370300200241086a200241c8006a41086a290300370300200220022903483703000b200020093a0001200041013a0000200041c0006a2003370300200041386a2004370300200041246a2008360200200041306a20053602002000412c6a2006360200200041286a2007360200200041026a20022903003700002000410a6a200241086a290300370000200041126a200241106a2903003700002000411a6a200241186a290300370000200041226a200241206a2d00003a00000c060b200141d0006a2903002103200141c8006a2903002104200141c4006a280200210541032109024020012d000122064103460d00024002400240024020060e03010200010b41022109200241c8006a410172200141026a41c10010d40b1a0c020b20024181016a2001413a6a290000370000200241f9006a200141326a290000370000200241f1006a2001412a6a290000370000200241e9006a200141226a290000370000200241e1006a2001411a6a290000370000200241d9006a200141126a290000370000200241d1006a2001410a6a2900003700002002200141026a290000370049410021090c010b20024181016a2001413a6a290000370000200241f9006a200141326a290000370000200241f1006a2001412a6a290000370000200241e9006a200141226a290000370000200241e1006a2001411a6a290000370000200241d9006a200141126a290000370000200241d1006a2001410a6a2900003700002002200141026a290000370049410121090b2002200241c8006a41017241c10010d40b1a0b200020093a0001200041d0006a2003370300200041c8006a2004370300200041c4006a2005360200200041026a200241c10010d40b1a200041023a00000c050b200041033a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041246a200141246a2802003602000c040b200041043a0000200041046a200141046a2802003602000c030b200041053a0000200041046a200141046a2802003602000c020b200141c0006a2903002103200141386a2903002104200141306a28020021052001412c6a2802002106200141286a2802002107200141246a280200210841032109024020012d0001220a4103460d000240024002400240200a0e03010200010b200241e8006a200141226a2d00003a0000200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a290000370300410221092002200141026a2900003703480c020b200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a2900003703002002200141026a290000370348410021090c010b200241e0006a2001411a6a290000370300200241d8006a200141126a290000370300200241d0006a2001410a6a2900003703002002200141026a290000370348410121090b200241206a200241c8006a41206a2d00003a0000200241186a200241c8006a41186a290300370300200241106a200241c8006a41106a290300370300200241086a200241c8006a41086a290300370300200220022903483703000b200020093a0001200041063a0000200041c0006a2003370300200041386a2004370300200041246a2008360200200041306a20053602002000412c6a2006360200200041286a2007360200200041026a20022903003700002000410a6a200241086a290300370000200041126a200241106a2903003700002000411a6a200241186a290300370000200041226a200241206a2d00003a00000c010b200141106a2802002209417f4c0d01200141086a2802002105200141046a28020021010240024020090d00410121060c010b200910382206450d030b20062005200910d40b2105200041106a20093602002000410c6a2009360200200041086a2005360200200041046a2001360200200041073a00000b20024190016a24000f0b1034000b1032000bf56a040b7f027e057f087e230041800d6b220124002001420037022c41002102200141002802d8974e220336022802400240024002400240024002402000410c6a28020041246c2204450d00200028020421050340024020052d00004101470d00200541106a2802002206417f4c0d04200541036a2d00002107200541016a2f00002108200541086a2802002109200541046a2d0000210a0240024020060d004101210b0c010b20061038220b450d040b20082007411074722108200b2009200610d40b2109200141f8016a41086a220b200141d8016a41086a290200370300200120012902d8013703f80102402002200128022c470d00200141286a200210820320012802282103200128023021020b2003200241246c6a220720063602102007200636020c200720093602082007200a360204200720083b0001200741013a0000200741036a20084110763a0000200720012903f8013702142007411c6a200b2903003702002001200241016a22023602300b200541246a21052004415c6a22040d000b0b200141d0006a22054200370300200141c8006a22074200370300200141386a41086a2206420037030020014200370338200141d8006a41c7e5c000410610cb012006200141d8006a41086a29000037030020012001290058370338200141e8006a41dc83c400411210cb012005200141e8006a41086a22022900003703002007200129006837030020014120360284012001200141386a36028001200141e8006a200141386a412010e40102400240200128026822060d00410221020c010b200128026c21092001200228020036028c012001200636028801200141206a20014188016a10c101200128022421040240024020012802200d00200141186a20014188016a10c10120012802180d00200128028c01200128021c2205490d002005417f4c0d04410121024101210802402005450d00200510382208450d0420084100200510d60b1a0b2008200128028801200510d40b1a0c010b200142003702dc0120014100280284ee4d3602d8012001410d36025c200120014180016a3602582001200141d8016a360294012001418c026a4101360200200142013702fc01200141949fc5003602f8012001200141d8006a3602880220014194016a41b4dfc400200141f8016a103b1a20012802d80120012802e00110d101024020012802dc01450d0020012802d80110390b410221020b2009450d00200610390b024020024102460d00410121060240200441bcc600490d0041002106024020054107470d0041c0e1c0002008410710d70b4521060b200641017321060b02402005450d00200810390b4200210c2006450d060b20014184026a4100290388e140370200200141bcc6003602f80120014100290380e1403702fc01200141d0006a4200370300200141c8006a4200370300200141386a41086a2205420037030020014200370338200141d8006a41c7e5c000410610cb012005200141d8006a41086a29000037030020012001290058370338200141e8006a41dc83c400411210cb01200741086a200141e8006a41086a29000037000020072001290068370000200141003602e001200142013703d801200141d8016a41004102107720012802d80120012802e00122056a41f199023b00002001200541026a3602e001200141f8016a410472200141d8016a10cb06200141386a412020012802d80120012802e00110e901024020012802dc01450d0020012802d80110390b200141033602782001410636028401200141c7e5c00036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc012001200141f8006a3602e001200120014180016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a4185bec300ad4280808080900b84370200200141a0026a41f1bdc300ad4280808080c0028437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141b8c5c8003602840220014281808080c0133702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b4200210d200141386a41186a22024200370300200141c8006a22044200370300200141386a41086a2205420037030020014200370338200141d8006a41c7e5c000410610cb012005200141d8006a41086a220829000037030020012001290058370338200141e8006a41cc84c400411810cb01200741086a2209200141e8006a41086a220a290000370000200720012900683700000240200141386a10dd04220641ff01714102460d0020064101710d050b20024200370300200442003703002005420037030020014200370338200141d8006a41c7e5c000410610cb012005200829000037030020012001290058370338200141e8006a41cc84c400411810cb012009200a29000037000020072001290068370000200141013a00f801200141386a4120200141f8016a410110e901200141d8006a41c7e5c000410610cb01200141e8006a4194b5cb00410710cb01412010382205450d0020052001290058370000200541086a2206200141d8006a41086a29000037000020052001290068370010200541186a2204200141e8006a41086a2900003700002001200536028801200142a0808080800437028c01412010382202450d0020022005290000370000200241186a2004290000370000200241106a200541106a290000370000200241086a2006290000370000200141f8016a2002412010e50120012802f8012206450d024100280284ee4d210a42a08080808004210d200141b0026a210e200141a0026a210f20014190026a21104120210503400240024002400240200520012902fc01220c422088a722044b0d002001280288012006200510d70b450d010b200ca7450d01200610390c010b0240200da7450d00200210390b2001200436026c20012006360268200141386a2006200410e40102400240024020012802382202450d00200128023c2108024002400240200128024022094104490d002009417c71220b4104460d00200b4108460d00200941746a4110490d00200941646a4110490d00200941546a4110490d00200941446a410f4b0d010b200142003702dc012001200a3602d8012001410d36025c2001200141e8006a3602582001200141d8016a360294012001410136028c02200142013702fc01200141949fc5003602f8012001200141d8006a3602880220014194016a41b4dfc400200141f8016a103b1a20012802d80120012802e00110d101024020012802dc01450d0020012802d80110390b410121090c010b200228000021032002280004211120022800082112200241146a2900002113200229000c2114200241c4006a2900002115200241346a2900002116200241246a2900002117200229003c2118200229002c2119200229001c211a410021090b02402008450d00200210390b20090d0002400240200420056b22054110490d00200541706a21020c010b4100210241002802d0a94e450d004100210241002802cca94e210541002802c8a94e210841002802d4a94e21092001420137038802200141d89fc0003602840220014281808080d0113702b402200141f39fc000ad4280808080b00b843702ac02200141003602a80220014200370398022001411336028002200141013602f801200141e09fc0003602fc01200141e09fc000ad4280808080b002843703a002200141b8c0cd0036029402200841b8c0cd00200941024622091b200141f8016a200541c0a4c00020091b2802101103000b41002105034020022005460d02200541016a22054120470d000b200e2015370300200f201637030020102017370300200120183703a80220012019370398022001201a37038802200120143703f801200141003602c402200120123602c002200120113602bc02200120033602b802200120133703800220062004200141f8016a10cc060c020b41002802d0a94e450d0141002802cca94e210541002802c8a94e210241002802d4a94e21082001420137038802200141b0a6c1003602840220014281808080f0153702b402200141e6a6c100ad4280808080c00d843702ac02200141003602a80220014200370398022001412636028002200141013602f801200141c0a6c1003602fc01200141c0a6c100ad4280808080e004843703a002200141b8c0cd0036029402200241b8c0cd00200841024622081b200141f8016a200541c0a4c00020081b2802101103000c010b41002802d0a94e450d0041002802cca94e210541002802c8a94e210241002802d4a94e21082001420137038802200141b8a6c100360284022001428180808080173702b402200141e6a6c100ad4280808080c00d843702ac02200141003602a80220014200370398022001412636028002200141013602f801200141c0a6c1003602fc01200141c0a6c100ad4280808080e004843703a002200141b8c0cd0036029402200241b8c0cd00200841024622081b200141f8016a200541c0a4c00020081b2802101103000b200141f8016a2006200410e50120012802f80122040d0120062102200c210d0b200da7450d050c040b20012802900121052006210220042106200c210d0c000b0b1032000b1034000b200210390b0240200128028c01450d0020012802880110390b200141f8016a10b803200129038002210d0b200141d8006a41c7e5c000410610cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f017820012d007a20012d007b10cd06200141808004360280012001410936028c0120014186e8c00036028801024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a418f9dc500ad4280808080b00484370200200141a0026a41fd9cc500ad4280808080a0028437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080f0033702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a4186e8c000410910cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001418080a410360280012001410936028c01200141fde7c00036028801024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41c5e6c600ad4280808080900584370200200141a0026a41c7bdc300ad4280808080a0058437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080d0123702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a41fde7c000410910cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a200141e8006a41086a290000370000200141f8016a41086a2205200141d8006a41086a290000370300200141f8016a41106a2206200141386a41106a290300370300200141f8016a41186a2202200141386a41186a290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001418080a4103602582001410836026c200141f5e7c000360268024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc012001200141d8006a3602e0012001200141e8006a3602d80141002802cca94e210441002802c8a94e210841002802d4a94e210920064202370300200141ac026a4191a7cc00ad4280808080800584370200200141a0026a41e8a6cc00ad428080808090058437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd00360284022001428180808080083702b402200141003602a802200141bcbbcd003602fc01200141033602f801200841b8c0cd00200941024622091b200141f8016a200441c0a4c00020091b2802101103000b200141386a41f5e7c000410810cb01200141d8016a41d4a6cc00411410cb012005200141386a41086a290000370300200620012900d8013703002002200141d8016a41086a290000370300200120012900383703f801200141f8016a20012f015820012d005a20012d005b10cd062001411036028c01200141e5e7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41b4c8c800ad4280808080a00684370200200141a0026a4189c8c800ad4280808080b0058437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080e0073702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a41e5e7c000411010cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410536028c0120014192a3c500360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a41d09dc500ad4280808080d00484370200200141a0026a41b29dc500ad4280808080e0038437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080e00e3702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a4192a3c500410510cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410936026c200141e3c0cc003602682001418080a410360258024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc012001200141d8006a3602e0012001200141e8006a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41e1a7cc00ad4280808080f00584370200200141a0026a41b9a7cc00ad428080808080058437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080e0143702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141386a41e3c0cc00410910cb01200141d8016a41d4a6cc00411410cb01200141f8016a41086a2205200141386a41086a290000370300200141f8016a41106a220620012900d801370300200141f8016a41186a2202200141d8016a41086a290000370300200120012900383703f801200141f8016a20012f015820012d005a20012d005b10cd062001411036028c01200141d5e7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210441002802c8a94e210841002802d4a94e210920064202370300200141ac026a4195d1ca00ad4280808080800684370200200141a0026a41ecd0ca00ad428080808090058437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080c0073702b402200141003602a802200141bcbbcd003602fc01200141033602f801200841b8c0cd00200941024622091b200141f8016a200441c0a4c00020091b2802101103000b200141d8006a41d5e7c000411010cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a200141e8006a41086a2900003700002005200141d8006a41086a2900003703002006200141386a41106a2903003703002002200141386a41186a290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410936028c01200141cce7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41a8ecc600ad4280808080800584370200200141a0026a41f291c100ad428080808090048437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080c0313702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a41cce7c000410910cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410836028c01200141c4e7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a418ebdcd00ad4280808080f00484370200200141a0026a41eebccd00ad428080808080048437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080e0173702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a41c4e7c000410810cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410836028c01200141bce7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41e79ec700ad4280808080f00484370200200141a0026a41c79ec700ad428080808080048437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080b00b3702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a41bce7c000410810cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001411036028c01200141ace7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a41f0d3c400ad4280808080f00584370200200141a0026a41c8d3c400ad428080808080058437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080c00e3702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a41ace7c000411010cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410536028c01200141ecc0cc00360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41caeac200ad4280808080900584370200200141a0026a41a8eac200ad4280808080a0048437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080902e3702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a41ecc0cc00410510cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410e36028c012001419ee7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a41fc8cc700ad4280808080d00584370200200141a0026a41c290c100ad4280808080e0048437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080d0193702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a419ee7c000410e10cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410d36028c0120014191e7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41a09ec500ad4280808080a00684370200200141a0026a41f59dc500ad4280808080b0058437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080a0093702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200141d8006a4191e7c000410d10cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410e36028c0120014183e7c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a419ea0c700ad4280808080d00584370200200141a0026a41f89fc700ad4280808080e0048437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080c0193702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a4183e7c000410e10cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001410b36028c01200141d8adc300360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41ffe8c200ad4280808080a00584370200200141a0026a41dce8c200ad4280808080b0048437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080a0073702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b200d4280c2d72f7c210c200141d8006a41d8adc300410b10cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001411736028c01200141ece6c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a41eee6c600ad4280808080900684370200200141a0026a419fd4c400ad4280808080a0058437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd00360284022001428180808080223702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200c200d542103200141d8006a41ece6c000411710cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd062001411036028c01200141dce6c000360288012001418080a41036028001024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210541002802c8a94e210641002802d4a94e210220014188026a4202370300200141ac026a41bc9cc500ad4280808080a00584370200200141a0026a41999cc500ad4280808080b0048437030020014198026a420237030020014180026a411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080d0053702b402200141003602a802200141bcbbcd003602fc01200141033602f801200641b8c0cd00200241024622021b200141f8016a200541c0a4c00020021b2802101103000b427f200c20031b210d200141d8006a41dce6c000411010cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200741086a2202200141e8006a41086a2204290000370000200141f8016a41086a2205200141d8006a41086a2208290000370300200141f8016a41106a2206200141386a41106a2209290300370300200141f8016a41186a220a200141386a41186a220b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd0620014103360280012001411a36028c01200141c2e6c00036028801024041002802d0a94e4103490d00200141e4016a4119360200200141043602dc01200120014180016a3602e001200120014188016a3602d80141002802cca94e210341002802c8a94e211141002802d4a94e211220064202370300200141ac026a41d79dc700ad4280808080800e84370200200141a0026a41ab9dc700ad4280808080c0058437030020014198026a42023703002005411636020020014194026a200141d8016a360200200141acbbcd003602840220014281808080a0c0003702b402200141003602a802200141bcbbcd003602fc01200141033602f801201141b8c0cd00201241024622121b200141f8016a200341c0a4c00020121b2802101103000b200141d8006a41c2e6c000411a10cb01200141e8006a41d4a6cc00411410cb0120072001290068370000200220042900003700002005200829000037030020062009290300370300200a200b290300370300200120012900583703f801200141f8016a20012f01800120012d00820120012d00830110cd06427f200d427f10ce06220c4280e6fe89077c22142014200c541b7c220c200c200d541b210c0b2000280200200041106a200141286a410110cf0620002802002104200141d0006a4200370300200141386a41106a4200370300200141386a41086a2205420037030020014200370338200141d8006a41f5e7c000410810cb012005200141d8006a41086a29000037030020012001290058370338200141e8006a41f0a9cd00410b10cb01200741086a200141e8006a41086a29000037000020072001290068370000200141f8016a200141386a412010de0342c0f0f50b210d024020012802f8014101470d002004200141f8016a41086a2802006b220520044b0d00200541bfb2044b0d000240200541134b0d00200141d0006a22064200370300200141c8006a22024200370300200141386a41086a2205420037030020014200370338200141d8006a41fde7c000410910cb012005200141d8006a41086a220829000037030020012001290058370338200141e8006a41fcc1c400410c10cb01200741086a2209200141e8006a41086a220a29000037000020072001290068370000200141106a200141386a412010ce032001280210210b2001280214210320064200370300200242003703002005420037030020014200370338200141d8006a41fde7c000410910cb012005200829000037030020012001290058370338200141e8006a41fcc1c400410c10cb012009200a290000370000200720012900683700002001200341016a4101200b1b3602f801200141386a4120200141f8016a410410e9010b42002114200141d0006a4200370300200141c8006a4200370300200141386a41086a2205420037030020014200370338200141d8006a41fde7c000410910cb012005200141d8006a41086a29000037030020012001290058370338200141e8006a41d4c1c400410810cb01200741086a200141e8006a41086a29000037000020072001290068370000200141f8016a200141386a412010e6030240024020012802f8012208450d00200141386a412010e00120012902fc0121140c010b41002802d8974e21080b02402014422088220da72205450d00200820054102746a2202417c6a210b200141f8016a41106a2109200821050340200141f8016a2005280200220610d703024020012802ac024103470d002002200541046a2205470d010c020b200141f8016a41186a220a2903002113200129038802211a20012802b802210320012802b4022100200142f0f2bd99e6ac9db7e4003703f801200141d8016a200141f8016a200610d803200a200141d8016a41186a2903003703002009200141d8016a41106a290300370300200141f8016a41086a200141d8016a41086a290300370300200120012903d8013703f801200141386a41186a4200370300200141386a41106a4200370300200141386a41086a220a420037030020014200370338200141d8006a41f5e7c000410810cb01200a200141d8006a41086a29000037030020012001290058370338200141e8006a41c8a9cd00410e10cb01200741086a200141e8006a41086a29000037000020072001290068370000200141086a200141386a412010ce03200141386a200141f8016a2006200128020c410020012802081b20002003201a201310e803200941086a200a280200360200200920012903383702002001200636028402200141083a008002200141173a00f801200b2005462106200141f8016a10c903200541046a21052006450d000b0b0240201442ffffffff0383500d00200810390b200d4298dadb387e200d42c0b2cd3b7e7c200d428084afdf007e7c42c0f8d3ca017c210d0b200410d0062114200141f8016a10b803427f427f200c427f200d20147c22142014200d541b7c220d200d200c541b220d20012903f8017c220c200c200d541b10d1064100410010d20620012802282106024020012802302205450d00200541246c21072006210503400240024002400240024020052d00000e050400010204030b2005410c6a280200450d03200541086a28020010390c030b2005410c6a280200450d02200541086a28020010390c020b2005410c6a280200450d01200541086a28020010390c010b200541086a280200450d00200541046a28020010390b200541246a21052007415c6a22070d000b0b0240200128022c2205450d00200541246c450d00200610390b200141800d6a24000b900701067f230041106b22022400024002400240024020002802004101470d002000410c6a280200220341046a2204417f4c0d0220002802042105024002400240024002402004450d00200410382200450d08200241003602082002200436020420022000360200200341c000490d02200341808001490d034100210420034180808080044f0d0120002003410274410272360000410421000c040b200241003602082002200436020420024101360200200241004101107720022802002100200228020821040b200020046a41033a00002002200441016a22003602080240200228020420006b41034b0d002002200041041077200228020821000b200228020020006a2003360000200041046a21000c020b200020034102743a0000410121000c010b20034102744101722106410021070240200441014b0d00200241004102107720022802002100200228020821070b200020076a20063b0000200741026a21000b200220003602080240200228020420006b20034f0d002002200020031077200228020821000b2002280200220420006a2005200310d40b1a200020036a21000c010b200041086a280200220341046a2204417f4c0d0120002802042105024002400240024002402004450d00200410382200450d07200241003602082002200436020420022000360200200341c000490d02200341808001490d034100210420034180808080044f0d0120002003410274410272360000410421000c040b200241003602082002200436020420024101360200200241004101107720022802002100200228020821040b200020046a41033a00002002200441016a22003602080240200228020420006b41034b0d002002200041041077200228020821000b200228020020006a2003360000200041046a21000c020b200020034102743a0000410121000c010b20034102744101722106410021070240200441014b0d00200241004102107720022802002100200228020821070b200020076a20063b0000200741026a21000b200220003602080240200228020420006b20034f0d002002200020031077200228020821000b2002280200220420006a2005200310d40b1a200020036a21000b0240200141046a280200200141086a220528020022036b20004f0d002001200320001077200528020021030b200128020020036a2004200010d40b1a2005200320006a36020002402002280204450d00200410390b200241106a24000f0b1034000b1032000b970503047f027e017f230041106b22032400200341003602082003420137030020022802402104200341004104107720032802002205200328020822066a20043600002003200641046a2204360208200228024421060240200328020420046b41034b0d00200320044104107720032802002105200328020821040b200520046a20063600002003200441046a2205360208200228024821060240200328020420056b41034b0d002003200541041077200328020821050b2003280200220420056a20063600002003200541046a2205360208200228024c21060240200328020420056b41034b0d00200320054104107720032802002104200328020821050b200420056a20063600002003200541046a2206360208200241086a29030021072002290300210802402003280204220520066b410f4b0d0020032006411010772003280200210420032802042105200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241186a2903002107200229031021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241286a2903002107200229032021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a22092007370008200920083700002003200641106a2206360208200241386a2903002107200229033021080240200520066b410f4b0d0020032006411010772003280204210520032802002104200328020821060b200420066a2202200737000820022008370000200020012004200641106a10e90102402005450d00200410390b200341106a24000bd60101037f230041106b220424002004410036020820044201370300200441004102107720042802002205200428020822066a20013b00002004200641026a22013602080240200428020422062001470d0020042001410110772004280204210620042802002105200428020821010b200520016a20023a00002004200141016a2201360208024020062001470d00200420064101107720042802002105200428020821010b200520016a20033a0000200041202005200141016a10e90102402004280204450d00200428020010390b200441106a24000bea77040d7f017e097f047e230041e0036b22002400200041083602a402200041eda1c5003602a00241002802d0a94e2101200041033602c001024020014103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210241002802d4a94e210320004190036a4202370300200041b4036a41be9bc500ad4280808080b00b84370200200041a8036a41af9bc500ad4280808080f00184370300200041a0036a420237030020004180036a41086a41163602002000419c036a200041c0026a360200200041acbbcd0036028c032000428180808090183702bc03200041003602b003200041bcbbcd00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041e0016a41eda1c500410810cb01200041c0026a41d4a6cc00411410cb0120004180036a41086a200041e0016a41086a29000037030020004180036a41106a220120002900c00237030020004180036a41186a2203200041c0026a41086a290000370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041053602a402200041acfecb003602a002200041e0006a41106a2104024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210241002802c8a94e210541002802d4a94e210620014202370300200041b4036a41d79ac500ad4280808080800b84370200200041a8036a41c39ac500ad4280808080c00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080b00a3702bc03200041003602b003200041bcbbcd00360284032000410336028003200541b8c0cd00200641024622061b20004180036a200241c0a4c00020061b2802101103000b200041e0016a41acfecb00410510cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2205200041c0026a41086a220629000037000020004180036a41086a2202200041e0016a41086a2207290000370300200120042903003703002003200041e0006a41186a290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041043602a402200041bee6c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210341002802d4a94e210820004190036a4202370300200041b4036a41e5bbcd00ad4280808080f00a84370200200041a8036a41d2bbcd00ad4280808080b00284370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080a00e3702bc03200041003602b003200041bcbbcd00360284032000410336028003200341b8c0cd00200841024622081b20004180036a200141c0a4c00020081b2802101103000b200041e0016a41bee6c000410410cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200520062900003700002002200729000037030020004180036a41106a2201200041e0006a41106a29030037030020004180036a41186a2203200041e0006a41186a290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602a00220004109360264200041b5e6c000360260024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041a0026a3602c8022000200041e0006a3602c00241002802cca94e210241002802c8a94e210541002802d4a94e210620014202370300200041b4036a41a8a8cc00ad4280808080c00b84370200200041a8036a4190a8cc00ad4280808080800384370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080f00e3702bc03200041003602b003200041bcbbcd00360284032000410336028003200541b8c0cd00200641024622061b20004180036a200241c0a4c00020061b2802101103000b200041e0016a41b5e6c000410910cb01200041c0026a41d4a6cc00411410cb0120004180036a41086a2202200041e0016a41086a2205290000370300200120002900c0023703002003200041c0026a41086a2201290000370300200020002900e0013703800320004180036a20002f01a00220002d00a20220002d00a30210cd06200041033602c001200041073602a402200041f88bcb003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210341002802c8a94e210641002802d4a94e210720004190036a4202370300200041b4036a41cdd2ca00ad4280808080a00b84370200200041a8036a41b7d2ca00ad4280808080e00284370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080f00c3702bc03200041003602b003200041bcbbcd00360284032000410336028003200641b8c0cd00200741024622071b20004180036a200341c0a4c00020071b2802101103000b200041e0016a41f88bcb00410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a20012900003700002002200529000037030020004180036a41106a2201200041e0006a41106a220329030037030020004180036a41186a2205200041e0006a41186a2206290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041083602a402200041ade6c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210241002802c8a94e210741002802d4a94e210820014202370300200041b4036a41dcd1ca00ad4280808080b00b84370200200041a8036a41c5d1ca00ad4280808080f00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c032000428180808090193702bc03200041003602b003200041bcbbcd00360284032000410336028003200741b8c0cd00200841024622081b20004180036a200241c0a4c00020081b2802101103000b200041e0016a41ade6c000410810cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2207200041c0026a41086a220829000037000020004180036a41086a2202200041e0016a41086a22092900003703002001200329030037030020052006290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041083602a402200041a5e6c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210341002802d4a94e210520004190036a4202370300200041b4036a41ff90c100ad4280808080b00b84370200200041a8036a41e890c100ad4280808080f00284370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080c02c3702bc03200041003602b003200041bcbbcd00360284032000410336028003200341b8c0cd00200541024622051b20004180036a200141c0a4c00020051b2802101103000b200041e0016a41a5e6c000410810cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200720082900003700002002200929000037030020004180036a41106a2201200041e0006a41106a220329030037030020004180036a41186a2205200041e0006a41186a2206290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041073602a4022000419ee6c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210241002802c8a94e210741002802d4a94e210820014202370300200041b4036a4189ebc200ad4280808080a00b84370200200041a8036a41f3eac200ad4280808080e00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080a0093702bc03200041003602b003200041bcbbcd00360284032000410336028003200741b8c0cd00200841024622081b20004180036a200241c0a4c00020081b2802101103000b200041e0016a419ee6c000410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2207200041c0026a41086a220829000037000020004180036a41086a2202200041e0016a41086a22092900003703002001200329030037030020052006290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041123602a4022000418ce6c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210341002802d4a94e210520004190036a4202370300200041b4036a41b3bfcd00ad4280808080e00c84370200200041a8036a4191bfcd00ad4280808080a00484370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080a0043702bc03200041003602b003200041bcbbcd00360284032000410336028003200341b8c0cd00200541024622051b20004180036a200141c0a4c00020051b2802101103000b200041e0016a418ce6c000411210cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200720082900003700002002200929000037030020004180036a41106a2201200041e0006a41106a220329030037030020004180036a41186a2205200041e0006a41186a2206290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041083602a402200041e0c1cd003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210241002802c8a94e210741002802d4a94e210820014202370300200041b4036a41b5becd00ad4280808080c00b84370200200041a8036a419dbecd00ad4280808080800384370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080b01d3702bc03200041003602b003200041bcbbcd00360284032000410336028003200741b8c0cd00200841024622081b20004180036a200241c0a4c00020081b2802101103000b200041e0016a41e0c1cd00410810cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2207200041c0026a41086a220829000037000020004180036a41086a2202200041e0016a41086a22092900003703002001200329030037030020052006290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041073602a40220004185e6c0003602a00241002802d0a94e2101200041033602c001024020014103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210341002802d4a94e210520004190036a4202370300200041b4036a41c3bdcd00ad4280808080a00b84370200200041a8036a41b5bdcd00ad4280808080e00184370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080801b3702bc03200041003602b003200041bcbbcd00360284032000410336028003200341b8c0cd00200541024622051b20004180036a200141c0a4c00020051b2802101103000b200041e0016a4185e6c000410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200720082900003700002002200929000037030020004180036a41106a2201200041e0006a41106a220329030037030020004180036a41186a2205200041e0006a41186a2206290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041073602a402200041b69fc5003602a00241002802d0a94e2102200041033602c001024020024103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210241002802c8a94e210741002802d4a94e210820014202370300200041b4036a41e999c500ad4280808080a00b84370200200041a8036a41db99c500ad4280808080e00184370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080c03f3702bc03200041003602b003200041bcbbcd00360284032000410336028003200741b8c0cd00200841024622081b20004180036a200241c0a4c00020081b2802101103000b200041e0016a41b69fc500410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2207200041c0026a41086a220829000037000020004180036a41086a2202200041e0016a41086a22092900003703002001200329030037030020052006290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd062000410a3602a402200041fbe5c0003602a00241002802d0a94e2101200041033602c001024020014103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210341002802d4a94e210520004190036a4202370300200041b4036a41c3e9c200ad4280808080d00c84370200200041a8036a41a9e9c200ad4280808080a00384370300200041a0036a4202370300200241163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080b0093702bc03200041003602b003200041bcbbcd00360284032000410336028003200341b8c0cd00200541024622051b20004180036a200141c0a4c00020051b2802101103000b200041e0016a41fbe5c000410a10cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200720082900003700002002200929000037030020004180036a41106a2203200041e0006a41106a220129030037030020004180036a41186a200041e0006a41186a2202290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602502000410836025c200041f3e5c000360258024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041d0006a3602c8022000200041d8006a3602c00241002802cca94e210541002802c8a94e210641002802d4a94e210720034202370300200041b4036a41e497c500ad4280808080b00b84370200200041a8036a41e69cc500ad4280808080f00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041b8c5c80036028c0320004281808080c0073702bc03200041003602b003200041bcbbcd00360284032000410336028003200641b8c0cd00200741024622031b20004180036a200541c0a4c00020031b2802101103000b2002420037030020014200370300200041e0006a41086a2201420037030020004200370360200041e0016a41f3e5c000410810cb012001200041e0016a41086a290000370300200020002900e001370360200041c0026a41b8b9c300411010cb01200441086a200041c0026a41086a290000370000200420002900c00237000020004120360284012000200041e0006a3602800120004188016a200041e0006a412010e4010240024002400240024002400240200028028801220a450d00200028028c01210b200020004188016a41086a28020036029c012000200a36029801200041286a20004198016a10c1010240024020002802280d00200028022c220c200028029c01411c6e22012001200c4b1bad421c7e220d422088a70d05200da72201417f4c0d050240024020010d00410421070c010b200110382207450d070b4100210e200041003602a801200020073602a00120002001411c6e3602a4010240200c450d0020004180036a41c4006a21020340200041206a20004198016a10c1010240024020002802200d0020002802242203200028029c0141e0006e2201200120034b1bad42e0007e220d422088a70d09200da72205417f4c0d090240024020050d004108210f0c010b20051038220f450d0b0b41002101200041003602b8012000200f3602b0012000200541e0006e22103602b4010240024002400240024002402003450d0041002101034020004180036a20004198016a10be05200041c0026a41386a220520004180036a41386a290300370300200041c0026a41306a220620004180036a41306a290300370300200041c0026a41286a220720004180036a41286a290300370300200041c0026a41206a220820004180036a41206a290300370300200041c0026a41186a220920004180036a41186a290300370300200041c0026a41106a221020004180036a41106a290300370300200041c0026a41086a221120004180036a41086a290300370300200041a0026a41086a2212200241086a290200370300200041a0026a41106a2213200241106a290200370300200041a0026a41186a2214200241186a28020036020020002000290380033703c002200020022902003703a00220002802c0032215450d02200041e0016a41386a22162005290300370300200041e0016a41306a22052006290300370300200041e0016a41286a22062007290300370300200041e0016a41206a22072008290300370300200041e0016a41186a22082009290300370300200041e0016a41106a22092010290300370300200041e0016a41086a22102011290300370300200041c0016a41086a22112012290300370300200041c0016a41106a22122013290300370300200041c0016a41186a22132014280200360200200020002903c0023703e001200020002903a0023703c0010240200120002802b401470d00200041b0016a200110980720002802b001210f20002802b80121010b200f200141e0006c6a220120002903e001370300200141106a2009290300370300200141086a20102903003703002005290300210d2016290300211720062903002118200729030021192008290300211a200141c0006a2015360200200141186a201a370300200141206a2019370300200141286a2018370300200141c4006a20002903c001370200200141386a2017370300200141306a200d370300200141cc006a2011290300370200200141d4006a2012290300370200200141dc006a2013280200360200200020002802b80141016a22013602b8012003417f6a22030d000b20002802b401211020002802b001210f0b200f450d05200041186a20004198016a10c10120002802180d03200028021c2206200028029c014102762203200320064b1b22084102742203417f4c0d0e20080d01410421090c020b20002802b001210502402001450d00200141e0006c2102200541d4006a210103400240200141706a2802002203450d00200341306c450d002001416c6a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141e0006a2101200241a07f6a22020d000b0b20002802b4012201450d04200141e0006c450d04200510390c040b200310382209450d0d0b41002103200041003602880320002008360284032000200936028003024002402006450d00410021030340200028029c0122074104490d022000280298012208280000210520002007417c6a36029c012000200841046a360298012005418094ebdc034b0d0202402003200028028403470d0020004180036a2003410110ab01200028028003210920002802880321030b200920034102746a2005360200200020002802880341016a2203360288032006417f6a22060d000b200028028403210820002802800321090b2009450d01200028029c01220541034b0d040240200841ffffffff0371450d00200910390b02402001450d00200141e0006c2102200f41d4006a210103400240200141706a2802002203450d00200341306c450d002001416c6a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141e0006a2101200241a07f6a22020d000b0b2010450d03201041e0006c0d020c030b20002802840341ffffffff0371450d0020002802800310390b02402001450d00200141e0006c2102200f41d4006a210103400240200141706a2802002203450d00200341306c450d002001416c6a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141e0006a2101200241a07f6a22020d000b0b2010450d01201041e0006c450d010b200f10390b20002802a0012107024020002802a8012201450d0020072001411c6c6a2106200721050340024020052802082201450d00200141e0006c2102200528020041d4006a210103400240200141706a2802002203450d00200341306c450d002001416c6a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141e0006a2101200241a07f6a22020d000b0b0240200541046a2802002201450d00200141e0006c450d00200528020010390b2005411c6a21010240200541106a28020041ffffffff0371450d00200528020c10390b2001210520012006470d000b0b024020002802a4012201450d002001411c6c450d00200710390b0c030b200e41016a210e2000280298012206280000211120002005417c6a36029c012000200641046a36029801024020002802a801220620002802a401470d00200041a0016a200610800320002802a80121060b20002802a00122072006411c6c6a220520103602042005200f360200200541186a2011360200200541146a2003360200200541106a20083602002005410c6a2009360200200541086a20013602002000200641016a3602a801200e200c470d000b20002902a40121180c020b20002902a401211820070d010b200042003702c4024100210720004100280284ee4d3602c0022000410d3602a402200020004180016a3602a0022000200041c0026a3602e00120004194036a41013602002000420137028403200041949fc500360280032000200041a0026a36029003200041e0016a41b4dfc40020004180036a103b1a20002802c00220002802c80210d10120002802c402450d0020002802c00210390b0240200b450d00200a10390b20070d010b41002802d8974e2107420021180c010b200041e0006a412010e0010b0240024041002802d0a94e41024b0d002018422088a721030c010b200041023602a40220002018422088a722033602c0022000200041c0026a3602a00241002802cca94e210141002802c8a94e210241002802d4a94e210520004190036a4202370300200041b4036a41e9a0ca00ad4280808080900c84370200200041a8036a41cfa0ca00ad4280808080a00384370300200041a0036a420137030020004188036a41113602002000419c036a200041a0026a360200200041f89fca0036028c0320004281808080d0053702bc03200041003602b003200041bea0ca00360284032000410336028003200241b8c0cd00200541024622051b20004180036a200141c0a4c00020051b2802101103000b024020030d0042c0b2cd3b210d0c040b20072003411c6c6a210242c0b2cd3b210d200721010340427f200d2001280200200141086a2802002001410c6a280200200141146a280200200141186a28020010ac087c22172017200d541b210d2001411c6a22012002470d000c030b0b1034000b1032000b2003450d0020072003411c6c6a2106200721050340024020052802082201450d00200141e0006c2102200528020041d4006a210103400240200141706a2802002203450d00200341306c450d002001416c6a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141e0006a2101200241a07f6a22020d000b0b0240200541046a2802002201450d00200141e0006c450d00200528020010390b2005411c6a21010240200541106a28020041ffffffff0371450d00200528020c10390b2001210520012006470d000b0b02402018a72201450d002001411c6c450d00200710390b200041e0016a41f3e5c000410810cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a200041c0026a41086a29000037000020004180036a41086a2205200041e0016a41086a29000037030020004180036a41106a2201200041e0006a41106a29030037030020004180036a41186a2202200041e0006a41186a290300370300200020002900e0013703800320004180036a20002f015020002d005220002d005310cd06200041073602b401200041f0c8c8003602b00141002802d0a94e21032000410336028801024020034103490d00200041cc026a4119360200200041043602c402200020004188016a3602c8022000200041b0016a3602c00241002802cca94e210341002802c8a94e210641002802d4a94e210720014202370300200041b4036a41d6c5c800ad4280808080a00b84370200200041a8036a41c8c5c800ad4280808080e00184370300200041a0036a4202370300200541163602002000419c036a200041c0026a360200200041b8c5c80036028c0320004281808080b090013702bc03200041003602b003200041bcbbcd00360284032000410336028003200641b8c0cd00200741024622051b20004180036a200341c0a4c00020051b2802101103000b20004180036a41f0c8c800410710cb01200242003700002000420037009003200141b8d8cc00410e10cb01200041203602c401200020004180036a3602c001200041e0006a20004180036a412010e40102400240200028026022020d00410621010c010b2000280264210302400240200041e8006a280200450d00410021010240024002400240024020022d00000e06060001020304050b410121010c050b410221010c040b410321010c030b410421010c020b410521010c010b200042003702e40120004100280284ee4d3602e0012000410d3602a4022000200041c0016a3602a0022000200041e0016a3602a001200041d4026a4101360200200042013702c402200041949fc5003602c0022000200041a0026a3602d002200041a0016a41b4dfc400200041c0026a103b1a20002802e00120002802e80110d101024020002802e401450d0020002802e00110390b410621010b2003450d00200210390b42c080b289032117024020014104470d00024041002802d0a94e4103490d00200041f8006a4200370300200041e0006a41106a4200370300200041e0006a41086a2201420037030020004200370360200041e0016a41c7e5c000410610cb012001200041e0016a41086a290000370300200020002900e001370360200041c0026a419081c400410610cb01200441086a200041c0026a41086a290000370000200420002900c002370000200041106a200041e0006a412010ce03200041103602a40220002000280214410020002802101b3602c0022000200041c0026a3602a00241002802cca94e210141002802c8a94e210241002802d4a94e210320004180036a41106a4202370300200041b4036a41d6c5c800ad4280808080a00b84370200200041a8036a41c483c800ad4280808080e0038437030020004180036a41206a420137030020004180036a41086a41103602002000419c036a200041a0026a360200200041a483c80036028c0320004281808080e084013702bc03200041003602b003200041d0b5ca00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041f8006a22034200370300200041f0006a22054200370300200041e0006a41086a2201420037030020004200370360200041e0016a41f0c8c800410710cb012001200041e0016a41086a2206290000370300200020002900e001370360200041c0026a41a6b9c300411210cb01200441086a2202200041c0026a41086a2207290000370000200420002900c002370000200041e0006a412010e00120034200370300200542003703002001420037030020004200370360200041e0016a41f0c8c800410710cb0120012006290000370300200020002900e001370360200041c0026a41e3b8c300411210cb0120022007290000370000200420002900c002370000200041e0006a412010e00120034200370300200542003703002001420037030020004200370360200041e0016a41f0c8c800410710cb0120012006290000370300200020002900e001370360200041c0026a41d6b8c300410d10cb0120022007290000370000200420002900c002370000200041e0006a412010e00120034200370300200542003703002001420037030020004200370360200041e0016a41f0c8c800410710cb0120012006290000370300200020002900e001370360200041c0026a418ab9c300410b10cb0120022007290000370000200420002900c002370000200041e0006a412010e00120034200370300200542003703002001420037030020004200370360200041e0016a41f0c8c800410710cb0120012006290000370300200020002900e001370360200041c0026a4195b9c300411110cb0120022007290000370000200420002900c002370000200041e0006a412010e00120034200370300200542003703002001420037030020004200370360200041e0016a41f0c8c800410710cb0120012006290000370300200020002900e001370360200041c0026a41f5b8c300411510cb0120022007290000370000200420002900c002370000200041e0006a412010e001200041e0006a41f0c8c800410710cb012002420037000020044200370000200441b8d8cc00410e10cb012000410036028803200042013703800320004180036a410041011077200028028003220120002802880322026a41053a00002000280284032103200041e0006a41202001200241016a10e90102402003450d00200110390b4280dea0cb05211741002802d0a94e4103490d00200041f8006a4200370300200041e0006a41106a4200370300200041e0006a41086a2201420037030020004200370360200041e0016a41c7e5c000410610cb012001200041e0016a41086a290000370300200020002900e001370360200041c0026a419081c400410610cb01200441086a200041c0026a41086a290000370000200420002900c002370000200041086a200041e0006a412010ce03200041103602a4022000200028020c410020002802081b3602c0022000200041c0026a3602a00241002802cca94e210141002802c8a94e210241002802d4a94e210320004180036a41106a4202370300200041b4036a41d6c5c800ad4280808080a00b84370200200041a8036a41c483c800ad4280808080e0038437030020004180036a41206a420137030020004180036a41086a41103602002000419c036a200041a0026a360200200041b483c80036028c03200042818080808086013702bc03200041003602b003200041d0b5ca00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041e0016a41f0c8c800410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2203200041c0026a41086a220529000037000020004180036a41086a2201200041e0016a41086a220629000037030020004180036a41106a2202200041e0006a41106a220729030037030020004180036a41186a2208200041e0006a41186a2209290300370300200020002900e0013703800320004180036a20002f01880120002d008a0120002d008b0110cd06200041033602c0012000410a3602a402200041e9e5c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e211041002802c8a94e211141002802d4a94e211220024202370300200041b4036a41ce9cc700ad4280808080d00b84370200200041a8036a41b59cc700ad4280808080900384370300200041a0036a4202370300200141163602002000419c036a200041c0026a360200200041acbbcd0036028c032000428180808080103702bc03200041003602b003200041bcbbcd00360284032000410336028003201141b8c0cd00201241024622121b20004180036a201041c0a4c00020121b2802101103000b200041e0016a41e9e5c000410a10cb01200041c0026a41d4a6cc00411410cb01200420002900c00237000020032005290000370000200120062900003703002002200729030037030020082009290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041123602a402200041dcafca003602a00241002802d0a94e2101200041033602c001024020014103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210241002802d4a94e210320004190036a4202370300200041b4036a41a3c7c800ad4280808080e00c84370200200041a8036a4189c7c800ad4280808080a00384370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080b0203702bc03200041003602b003200041bcbbcd00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041e0016a41dcafca00411210cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2203200041c0026a41086a220529000037000020004180036a41086a2201200041e0016a41086a220629000037030020004180036a41106a2202200041e0006a41106a220729030037030020004180036a41186a2208200041e0006a41186a2209290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041083602a402200041e1e5c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e211041002802c8a94e211141002802d4a94e211220024202370300200041b4036a4191d0ca00ad4280808080b00b84370200200041a8036a41facfca00ad4280808080f00284370300200041a0036a4202370300200141163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080a0173702bc03200041003602b003200041bcbbcd00360284032000410336028003201141b8c0cd00201241024622121b20004180036a201041c0a4c00020121b2802101103000b200041e0016a41e1e5c000410810cb01200041c0026a41d4a6cc00411410cb01200420002900c00237000020032005290000370000200120062900003703002002200729030037030020082009290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041073602a402200041dae5c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210241002802d4a94e210320004190036a4202370300200041b4036a41a0cfca00ad4280808080a00b84370200200041a8036a418acfca00ad4280808080e00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c032000428180808090053702bc03200041003602b003200041bcbbcd00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041e0016a41dae5c000410710cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2203200041c0026a41086a220529000037000020004180036a41086a2201200041e0016a41086a220629000037030020004180036a41106a2202200041e0006a41106a220729030037030020004180036a41186a2208200041e0006a41186a2209290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041093602a402200041d1e5c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e211041002802c8a94e211141002802d4a94e211220024202370300200041b4036a41988ec100ad4280808080c00b84370200200041a8036a41da91c100ad4280808080800384370300200041a0036a4202370300200141163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080c00d3702bc03200041003602b003200041bcbbcd00360284032000410336028003201141b8c0cd00201241024622121b20004180036a201041c0a4c00020121b2802101103000b200041e0016a41d1e5c000410910cb01200041c0026a41d4a6cc00411410cb01200420002900c00237000020032005290000370000200120062900003703002002200729030037030020082009290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041033602c001200041043602a402200041cde5c0003602a002024041002802d0a94e4103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e210141002802c8a94e210241002802d4a94e210320004190036a4202370300200041b4036a41a19fc700ad4280808080f00a84370200200041a8036a418e9fc700ad4280808080b00284370300200041a0036a420237030020004188036a41163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080900d3702bc03200041003602b003200041bcbbcd00360284032000410336028003200241b8c0cd00200341024622031b20004180036a200141c0a4c00020031b2802101103000b200041e0016a41cde5c000410410cb01200041c0026a41d4a6cc00411410cb01200420002900c002370000200441086a2203200041c0026a41086a220529000037000020004180036a41086a2201200041e0016a41086a220629000037030020004180036a41106a2202200041e0006a41106a220729030037030020004180036a41186a2208200041e0006a41186a2209290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041183602a402200041debec3003602a00241002802d0a94e2110200041033602c001024020104103490d00200041cc026a4119360200200041043602c4022000200041c0016a3602c8022000200041a0026a3602c00241002802cca94e211041002802c8a94e211141002802d4a94e211220024202370300200041b4036a4194bfc300ad4280808080d00d84370200200041a8036a41beccc400ad4280808080900484370300200041a0036a4202370300200141163602002000419c036a200041c0026a360200200041acbbcd0036028c0320004281808080c0093702bc03200041003602b003200041bcbbcd00360284032000410336028003201141b8c0cd00201241024622121b20004180036a201041c0a4c00020121b2802101103000b200041e0016a41debec300411810cb01200041c0026a41d4a6cc00411410cb01200420002900c00237000020032005290000370000200120062900003703002002200729030037030020082009290300370300200020002900e0013703800320004180036a20002f01c00120002d00c20120002d00c30110cd06200041e0036a2400427f427f427f200d4280c2d72f7c22182018200d541b220d20177c22172017200d541b220d4280daf1eb047c22172017200d541b0bc70901077f230041c0006b220424004102200410d206200441003602004188d3c30041102004410410e901200441186a22054200370300200441106a22064200370300200441086a2207420037030020044200370300200441206a41c7e5c000410610cb012007200441206a41086a220829000037030020042004290020370300200441206a419081c400410610cb0120052008290000370300200620042900203703002004200036022020044120200441206a410410e90120054200370300200642003703002007420037030020044200370300200441206a41c7e5c000410610cb012007200829000037030020042004290020370300200441206a41c481c400410610cb012005200829000037030020062004290020370300024002402002280208220741246c41046a2205417f4c0d00200228020021080240024020050d00410121020c010b200510382202450d020b200441003602382004200536023420042002360230200441306a200710ac0202400240200741246c22090d002004280230210a200428023821050c010b200428023821050340200441206a200810c007200428022021020240200428023420056b200428022822074f0d00200441306a200520071077200428023821050b2004280230220a20056a2002200710d40b1a2004200520076a220536023802402004280224450d00200210390b200841246a21082009415c6a22090d000b0b20044120200a200510e90102402004280234450d00200a10390b20042001360230200441186a22084200370300200441106a22024200370300200441086a2205420037030020044200370300200441206a41c7e5c000410610cb012005200441206a41086a220729000037030020042004290020370300200441206a41b081c400410a10cb01200641086a220920072900003700002006200429002037000020044120200441306a10a6062004200136022020042000417f6a10e0042004280200220a2004280208200441206a10a60602402004280204450d00200a10390b20084200370300200242003703002005420037030020044200370300200441206a41c7e5c000410610cb012005200729000037030020042004290020370300200441206a41f4ffc300410b10cb0120092007290000370000200620042900203700002004412010e00102402003450d00200441186a22084200370300200441106a22024200370300200441086a2205420037030020044200370300200441206a41c7e5c000410610cb012005200441206a41086a220729000037030020042004290020370300200441206a41f081c400410610cb01200641086a22092007290000370000200620042900203700002004412010e00120084200370300200242003703002005420037030020044200370300200441206a41c7e5c000410610cb012005200729000037030020042004290020370300200441206a41b482c400410a10cb0120092007290000370000200620042900203700002004412010e00120084200370300200242003703002005420037030020044200370300200441206a41c7e5c000410610cb012005200729000037030020042004290020370300200441206a41d082c400410b10cb0120092007290000370000200620042900203700002004412010e1010b200441c0006a24000f0b1034000b1032000bd25205087f017e077f077e0c7f230022012102200141e0276b41607122032400200341d8136a22044200370300200341d0136a22054200370300200341c0136a41086a22014200370300200342003703c01320034180136a41f5e7c000410810cb01200120034180136a41086a220629000037030020032003290080133703c013200341a0136a41f0a9cd00410b10cb012004200341a0136a41086a2207290000370300200520032900a013370300200341e0156a200341c0136a412010de03200341e0156a41086a210842c0f0f50b2109024002400240024002400240024020032802e0154101470d00200020082802006b220a20004b0d00200a41bfb2044b0d0020034180136a41f5e7c000410810cb01200341a0136a4190abcd00410710cb012003200a41146e220b3602d0152003200341d0156a410410cc013703c013200341ec156a200341d0156a41046a3602002003200341c0136a41086a3602e4152003200341d0156a3602e8152003200341c0136a3602e01520034180016a200341e0156a108301200328028801220c41206a220a417f4c0d0202400240200a0d004101210d0c010b200a1038220d450d020b4100210e200341003602e8152003200d3602e0152003200a3602e4150240200a410f4b0d00200341e0156a41004110107720032802e415210a20032802e015210d20032802e815210e0b200d200e6a220f200329008013370000200f41086a20034180136a41086a2900003700002003200e41106a220e3602e8150240200a200e6b410f4b0d00200341e0156a200e4110107720032802e415210a20032802e015210d20032802e815210e0b200d200e6a220f20032900a013370000200f41086a200341a0136a41086a2900003700002003200e41106a220e3602e815200328028001210f0240200a200e6b200c4f0d00200341e0156a200e200c107720032802e015210d20032802e815210e0b200d200e6a200f200c10d40b1a200e200c6a210a0240200328028401450d0020032802800110390b20032802e015220d200a10e301210a024020032802e415450d00200d10390b4280e1eb172109200a0d00024002400240200b417f6a220a200b4b0d00200341e0156a200a10bb0520032903e0154202520d010b20034180016a410041801210d60b1a0c010b20034180016a200341e0156a41801210d40b1a0b200341e0156a20034180016a41801210d40b1a200341a0136a200b10bc0520032802a813210d20032802a013210a4180121038220e450d0120034280123702c4132003200e3602c013200341e0156a200341c0136a10b102200a200d20032802c013220e20032802c81310e901024020032802c413450d00200e10390b024020032802a413450d00200a10390b4280a3c3c70021090b200442003703002005420037030020014200370300200342003703c01320034180136a41f5e7c000410810cb012001200629000037030020032003290080133703c013200341a0136a41f0a9cd00410b10cb01200541086a2007290000370000200520032900a013370000200341e0156a200341c0136a412010de030240024020032802e0154101470d00417f2008280200220141c0b2046a220420042001491b220120004b0d0020032802e4152110410c10382204450d02200441002900d4bd4c370000200441086a41002800dcbd4c360000200320043602d0152003428c808080c0013702d415200341d0156a410c41201077200341c0136a41186a4200370300200341c0136a41106a4200370300200341c0136a41086a22044200370300200342003703c01320034180136a41cde5c000410410cb01200420034180136a41086a29000037030020032003290080133703c013200341a0136a41e8d5c700410e10cb01200541086a200341a0136a41086a290000370000200520032900a013370000200341e0156a200341c0136a10f0070240024020032d00e0154101460d0020034180016a41186a420037030020034180016a41106a420037030020034180016a41086a420037030020034200370380010c010b20034180016a41186a200341f9156a29000037030020034180016a41106a200341f1156a29000037030020034180016a41086a200341e9156a290000370300200320032900e115370380010b024020032802d41520032802d81522086b411f4b0d00200341d0156a20084120107720032802d81521080b20032802d015220620086a2204200329038001370000200441086a20034180016a41086a290300370000200441106a20034180016a41106a290300370000200441186a20034180016a41186a2903003700002003200841206a22043602d815200341c0136a20062004109f0120032802c0132108200341c0136a41186a4200370300200341c0136a41106a4200370300200341c0136a41086a22044200370300200342003703c01320034180136a41cde5c000410410cb01200420034180136a41086a29000037030020032003290080133703c013200341a0136a41b8d8c700410a10cb01200541086a200341a0136a41086a290000370000200520032900a013370000200341e0156a200341c0136a412010de03200341e0156a41086a280200410020032802e0154101461b2104024020032802d415450d00200610390b200120044b0d0042002111200341d8136a4200370300200341c0136a41106a4200370300200341c0136a41086a22014200370300200342003703c01320034180136a41f5e7c000410810cb01200120034180136a41086a29000037030020032003290080133703c013200341a0136a41c8a9cd00410e10cb01200541086a200341a0136a41086a290000370000200520032900a013370000200341f8006a200341c0136a412010ce03200328027c210120032802782104200341e0156a41106a200841c0b2047041146e2208360200200341ec156a2001410020041b360200200341e0156a41086a41083a0000200341163a00e015200341e0156a10c903200341e0156a200810bb050240024020032903e0154202520d0020034180016a410041801210d60b1a0c010b20034180016a200341e0156a41801210d40b1a20032903800121110b200341c0136a41186a22064200370300200341c0136a41106a22074200370300200341c0136a41086a22014200370300200342003703c01320034180136a41f5e7c000410810cb01200120034180136a41086a220429000037030020032003290080133703c013200341a0136a4190abcd00410710cb01200541086a220a200341a0136a41086a2208290000370000200520032900a013370000200341c0136a412010e101200642003703002007420037030020014200370300200342003703c01320034180136a41f5e7c000410810cb012001200429000037030020032003290080133703c013200341a0136a41f0a9cd00410b10cb01200a2008290000370000200520032900a013370000200341c0136a412010e001200341e0156a20034180016a41086a220641f81110d40b1a20114202510d0020034180136a10e903200341a0136a41186a20034180136a41186a290300370300200341a0136a41106a20034180136a41106a2903003703002008200429030037030020032003290380133703a01320034180016a200341a0136a10ea0302402003290380014201520d0020034180016a41086a2101200341b8016a21040340200341c0136a41086a200141086a2903002212370300200341c0136a41106a200141106a2903002213370300200341c0136a41186a200141186a2903002214370300200341c0136a41206a200141206a2903003703002003200129030022153703c0132004290300211620032903b001211720034180016a41186a201437030020034180016a41106a2013370300200120123703002003201537038001200341e8006a20034180016a2017201610e50320034180016a200341a0136a10ea032003290380014201510d000b0b024020032802a413450d0020032802a01310390b0240200341a0136a41106a280200450d0020032802ac1310390b20032011370380012006200341e0156a41f81110d40b1a200341b8156a4200370300200341b0156a420037030020034198156a420037030020034190156a4200370300200341f8146a4200370300200341f0146a4200370300200341d8146a4200370300200341d0146a4200370300200341b8146a4200370300200341b0146a420037030020034198146a420037030020034190146a4200370300200341c0136a41386a4200370300200341c0136a41306a4200370300200341c0136a41186a4200370300200341a4156a420037020020034184156a4200370200200341e4146a4200370200200341c4146a4200370200200341a4146a420037020020034184146a4200370200200341e4136a4200370200200342003703d01320034100280284ee4d22013602a0152003200136028015200320013602e014200320013602c014200320013602a0142003200136028014200320013602e013200342003702c413200320013602c013200341d8006a41086a21184100210603404100210102400240024002400240024002400240024020060e080807000102030405060b410221010c070b410321010c060b410421010c050b410521010c040b410621010c030b410721010c020b200341093602a413200341bd8ccc003602a01341acbecc00410c200341a0136a41b8becc0041c8becc00103d000b410121010b024020034180016a20014106746a22042903004201520d00200341d8006a200441306a290300200441386a290300200110a001ad420010d30b20182903002112410110382204450d0420032903582113200420013a0000200341c0136a20064105746a2201410472210802402001280204450d00200128020010390b20084101360200200120043602002001201337031020014101360208200141186a20123703000b02402006450d00200341c0136a20064105746a220c41086a2119200c410472210e200c41106a210841002104200341c0136a210102400340200341a0136a4100200441016a2204200610e20a20032d00a0134101460d010240024020034180016a20032d00a113220a4106746a22072903004201510d00200141106a220a290300200829030058200141186a220d2903002212200841086a29030022135820122013511b0d01200141086a2802002207417f4c0d092001280200210b0240024020070d004101210f0c010b20071038220f450d090b200f200b200710d40b210b200d2903002112200a29030021130240200e280200450d00200c28020010390b20082013370300200e2007360200200c200b36020020192007360200200820123703080c010b200341c8006a200741306a290300200741386a290300200a10a001ad420010d30b200141106a290300221220032903487c2213200829030058200141186a290300200341c8006a41086a2903007c2013201254ad7c2212200841086a29030022145820122014511b0d00200141086a2802002207417f4c0d082001280200210b4101210d02402007450d0020071038220d450d080b20032007360284132003200d36028013200d200b200710d40b1a20034180136a41086a220d200736020020034180136a200710b609200328028013200d28020022076a200a3a0000200d200741016a2207360200200341a0136a41086a220a200736020020032003290380133703a0130240200e280200450d00200c28020010390b20082013370300200c20032903a013370300200820123703082019200a2903003703000b200141206a210120062004460d020c000b0b200320032902a4133703801341d8becc00412820034180136a41b8becc004180bfcc00103d000b200641016a22064108470d000b20032802a815220e417f4c0d0320032802a015210102400240200e0d00410121040c010b200e10382204450d030b20042001200e10d40b210c024020032802c413450d0020032802c01310390b024020032802e413450d0020032802e01310390b0240200328028414450d0020032802801410390b024020032802a414450d0020032802a01410390b024020032802c414450d0020032802c01410390b024020032802e414450d0020032802e01410390b0240200328028415450d0020032802801510390b024020032802a415450d0020032802a01510390b200ead42387e2212422088a70d032012a72201417f4c0d030240024020010d004108210b0c010b20011038220b450d030b41002119200341003602d8152003200b3602d0152003200141386e22013602d4150240024002402001200e4f0d00200341d0156a200e10b80920032802d015210b20032802d81521190c010b200e0d004100210f200341003602d8150c010b2019200e6a210f200b201941386c6a2101200341c0136a410472210841002106024002400340200c20066a2d000022074124460d0120034180016a20074106746a22042903004201520d052004290308211220044200370308200441306a220a2903002113200a4200370300200441386a220a2903002114200a4200370300200441206a220a2903002115200a4200370300200441186a220a2903002116200a4200370300200441106a220a2903002117200a4200370300200441286a2204290300211120044200370300200320123703c013200320153703d813200320163703d013200320173703c813200341a0136a41086a2204200841086a290200370300200341a0136a41106a220a200841106a290200370300200341a0136a41186a220d200841186a280200360200200320082902003703a0132001201437030820012013370300200141106a20123e0200200141146a20032903a0133702002001411c6a2004290300370200200141246a200a2903003702002001412c6a200d280200360200200141346a20073a0000200141306a20113e0200200141386a2101200e200641016a2206470d000c020b0b201920066a210f0b2003200f3602d815200e450d00200c10390b20032802d415210d0240200f450d00200b200f41386c6a210720034189016a210a200b21010340200141346a2d000022044124460d01200141086a2903002112200141106a280200210620012903002113200341a0136a41186a2001412c6a2902002214370300200341a0136a41106a200141246a2902002215370300200341a0136a41086a2001411c6a29020022163703002003200141146a29020022173703a013200341c0136a41186a2014370300200341c0136a41106a2015370300200341c0136a41086a2016370300200320173703c01341072108024002400240024002400240024002402004413f710e24000000000000000001010101010101020202020202030303030304040404050505060607000b410021080c060b410121080c050b410221080c040b410321080c030b410421080c020b410521080c010b410621080b02402006200341c0136a20132012201020086a200410a00110f20341ff01714101470d0020034180016a200341c0136a2013201210d40320032d0080014108470d00200a20032903c013370000200341b8016a2012370300200a41186a200341c0136a41186a290300370000200a41106a200341c0136a41106a290300370000200a41086a200341c0136a41086a290300370000200320133703b001200320063602ac01200341063a008801200341163a00800120034180016a10c9030b200141386a22012007470d000b0b0240200d450d00200d41386c450d00200b10390b200341d8136a4200370300200341d0136a4200370300200341c0136a41086a22014200370300200342003703c01320034180136a41f5e7c000410810cb01200120034180136a41086a29000037030020032003290080133703c013200341a0136a41c8a9cd00410e10cb01200541086a200341a0136a41086a290000370000200520032900a013370000200341c0006a200341c0136a412010ce032003418c016a2003280244410020032802401b36020020034180016a41086a41013a0000200341163a008001200942c8d99b808b0e7c210920034180016a10c9030b4200211220004180ce18700d06200341ec156a20004180ce186e360200200341e0156a41086a220441003a0000200341153a00e015200341e0156a10c903200341c0136a41186a4200370300200341d0136a4200370300200341c0136a41086a22014200370300200342003703c01320034180136a41ecc0cc00410510cb01200120034180136a41086a29000037030020032003290080133703c013200341a0136a41c49ac300410a10cb01200541086a200341a0136a41086a290000370000200520032900a013370000200341e0156a200341c0136a412010e60320032802e015211a20032902e4152113200342003702d415200341002802d8974e221b3602d01520034180016a4192a3c500410510cb01200341e0156a4197a3c500410610cb01412010382201450d012001200329008001370000200120032900e015370010200141086a20034180016a41086a290000370000200141186a2004290000370000200320013602c013200342a080808080043702c413412010382204450d0120042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020034180136a41086a200341c0136a41086a2802002201360200200320032903c013221237038013200341d4136a2001360200200342a080808080043702c413200320043602c013200320123702cc13200341003a00dc132003411a3602d813200341e0156a2012a7200110e501024020032802e0152201450d00200341cc136a210a20034180016a41086a210d03400240024020032802c813220420032902e4152212422088a722084b0d0020032802c0132001200410d70b450d010b2012a7450d02200110390c020b024020032802d013450d0020032802cc1310390b200320123703d013200320013602cc1320034180016a2001200810e401024002400240024002402003280280012201450d0020032802880121062003280284012107024020032d00dc13450d0020032802cc1320032802d41310e0010b20032802d413220820032802c8132204490d03200341a0136a20032802cc1320046a200820046b2001200620032802d81311050020032802a41322040d02024041002802d0a94e450d002003411236028c0120034111360284012003200a360280012003200341c8156a3602880141002802cca94e210441002802c8a94e210841002802d4a94e2106200342023703f015200341e89fc5003602ec1520034281808080c0d90037029c162003418ea0c500ad4280808080a00c843702941620034100360290162003420237038016200341163602e815200341013602e015200341f89fc5003602e415200341f89fc500ad4280808080e0028437038816200441c0a4c000200641024622061b2802102104200320034180016a3602fc15200841b8c0cd0020061b200341e0156a20041103000b2007450d01200110390c010b41002802d0a94e450d00200341113602a4132003200a3602a01341002802cca94e210141002802c8a94e210441002802d4a94e2108200342013703f015200341d09fc5003602ec1520034281808080e0d70037029c162003418ea0c500ad4280808080a00c843702941620034100360290162003420137038016200341163602e815200341013602e015200341f89fc5003602e415200341f89fc500ad4280808080e0028437038816200141c0a4c000200841024622081b28021021012003200341a0136a3602fc15200441b8c0cd0020081b200341e0156a20011103000b200341e0156a20032802cc1320032802d41310e5010c020b20032903a813211220032802a013210802402007450d00200110390b200320043602a013200320123702a4132012a721010240024002400240024002402012422088a722060e020301000b200d200441106a29030037030020034180016a41106a2205200441186a29030037030020034180016a41186a220e200441206a29030037030020034180016a41206a220c200441286a29030037030020034180016a41286a220b200441306a2903003703002003200429030837038001200429030021122004200441386a200641386c41486a10d50b210720032006417f6a3602a813200341e0156a200810f30320032802e0152106200320032802e8153602cc15200320063602c815200341a0136a200341c8156a10be08024020032802e415450d00200610390b024020124201520d00200341e0156a41286a2206200b290300370300200341e0156a41206a220b200c290300370300200341e0156a41186a200e290300370300200341e0156a41106a2005290300370300200341e0156a41086a200d29030037030020032003290380013703e015200341206a2008200341e0156a10d903200b2903002212200329032022157d221620125620062903002214200341206a41086a2903007d2012201554ad7d221220145620122014511b0d00200341106a200341e0156a2016201210e5030b20072903004201520d01024020032802d815220620032802d415470d00200341d0156a200610990120032802d81521060b20032802d01520064102746a20083602002003200641016a3602d8150c010b024020042903004201520d00200341306a200441086a200441286a290300200441306a29030010e5030b200341e0156a200810f30320032802e015220820032802e81510e00120032802e415450d00200810390b2001450d02200141386c0d010c020b2001450d01200141386c450d010b200410390b200341e0156a20032802cc1320032802d41310e5010c010b2004200841d89fc5001054000b20032802e01522010d000b0b024020032802c413450d0020032802c01310390b0240200341d0136a280200450d0020032802cc1310390b20032802d015211002400240024020032802d815221c41144b0d00201c41014b220b450d082010201c417f6a22084102746a210541002106034020082201417f6a2108200b450d030240201c20086b220c4102490d00201020014102746a22012802002204201020084102746a2207280200220d4f0d00200720043602000240200c4103490d002006417f6a210e41002104200521010340200141046a2207280200220a200d4f0d01200e2004460d052001200a3602002007210120062004417f6a2204470d000b200721010b2001200d3602000b2005417c6a21052006417f6a210620080d000c080b0b201c410176220141ffffffff03712001470d042001410274221d417f4c0d04201d1038221e450d03200342003702e41541002101200341002802d8974e22043602e0152010417c6a211f201041746a2120201c210e0340410021194101210c0240200e417f6a2208450d000240024002400240024002400240201020084102746a280200200e410274220b20106a41786a2802002206490d00200e417e6a21052020200b6a210741002119410021080340024020052008470d00200e210c0c090b200841016a210820062007280200220a4f210d2007417c6a2107200a2106200d0d000b200841016a210c2008417f73200e6a21080c010b2020200b6a210702400340024020084101470d00410021080c020b2008417f6a210820062007280200220a49210d2007417c6a2107200a2106200d0d000b0b200e2008490d01200e201c4b0d02200e20086b220c410176220a450d00201020084102746a2106201f200b6a210703402006280200210d200620072802003602002007200d360200200641046a21062007417c6a2107200a417f6a220a0d000b0b024020080d00200821190c060b0240200c41094d0d00200821190c060b200e201c4b0d032008200e6b2107201020084102746a210b0340200e2008417f6a2219490d050240200e20196b220c4102490d00201020084102746a22082802002206201020194102746a220a28020022054f0d00200a20063602000240200c4103490d0041012106200b21080340200841046a220a280200220d20054f0d01200720066a4101460d062008200d360200200a21082007200641016a22066a0d000b200a21080b200820053602000b2019450d06200b417c6a210b2007417f6a210720192108200c410a4f0d060c000b0b2008200e41c4bac3001055000b200e201c41c4bac300104b000b2006200c41a4bbc300103c000b200e2008417f6a2219490d00200e201c41d4bac300104b000b2019200e41d4bac3001055000b02400240200120032802e415460d00200121080c010b0240200120032802e8152208470d00200341e0156a200110b10120032802e81521080b20032802e01521040b200420084103746a2201200c36020420012019360200200320032802e81541016a22013602e815024020014102490d0020032802e0152104024003400240024002400240024020042001417f6a4103746a2208280200450d00200141037420046a220a41746a2802002207200828020422064b0d010b20014103490d022008280204210620042001417d6a220c4103746a28020421080c010b200141024d0d0520042001417d6a220c4103746a2802042208200620076a4d0d00200141034d0d05200a41646a280200200820076a4b0d050b20082006490d010b2001417e6a210c0b02400240024002402001200c41016a22184d0d0002402001200c4d0d0002402004200c41037422216a2201280204222220012802006a22082004201841037422236a2201280200220f490d0002402008201c4b0d002010200f4102746a22062001280204220b41027422046a21012008410274210a02402008200f6b220d200b6b2207200b490d00201e2006200410d40b220720046a21080240200b41014e0d00200721040c080b200d200b4a0d05200721040c070b201e20012007410274220410d40b220e20046a2108200b4101480d0520074101480d05201f200a6a2104034020042001417c6a220a28020022072008417c6a220d2802002205200520074922071b3602002008200d20071b21082006200a200120071b22014f0d062004417c6a21042008200e4b0d000c060b0b2008201c4184bbc300104b000b200f20084184bbc3001055000b200c200141f4bac300103c000b2018200141e4bac300103c000b2010200a6a210d2007210403402006200128020022072004280200220a2007200a4922071b3602002004200441046a20071b2104200641046a2106200141046a200120071b2201200d4f0d0220042008490d000c020b0b200e2104200121060b20062004200820046b417c7110d40b1a024020032802e8152201200c4d0d0020032802e015220420216a22082022200b6a3602042008200f360200200120184d0d02200420236a2208200841086a2001200c6b41037441706a10d50b1a20032001417f6a22013602e815200141014b0d010c030b0b200c20014194bbc300103c000b201820011044000b2019210e2019450d060c000b0b410120046b200c41a4bbc300103c000b2008201c41b4bac3001054000b41b297c700413341e897c700105b000b1032000b1034000b024020032802e41541ffffffff0171450d0020032802e01510390b201d450d00201e10390b20032802d815211c0b20134200201a1b2113201a201b201a1b210a20032802d015210d02400240201c0d0020134220882212a7210c0c010b200d201c4102746a210b20134220882212a7210c200d210503402005220e41046a210502400240200c450d00200e280200210641002101200c2108200c21040340024002402006200a200841017620016a22084102746a28020022074d0d00200841016a21010c010b2008210420062007460d030b200420016b2108200420014b0d000b0b200341e0156a200e280200220410d20320032802e015220820032802e81510d30341ff01712101024020032802e415450d00200810390b20014101470d00200410ee030d00200410d6030b2005200b470d000b0b0240200c450d00200a200c4102746a210c200a210503402005220e41046a210502400240201c450d00200e280200210641002101201c2108201c21040340024002402006200d200841017620016a22084102746a28020022074d0d00200841016a21010c010b2008210420062007460d030b200420016b2108200420014b0d000b0b200341e0156a200e280200220810d20320032802e015220420032802e81510d30341ff01712101024020032802e415450d00200410390b20014102470d00200810ef031a0b2005200c470d000b0b201cad221442a084d3117e201242c086ce087e7c201242c0f0f50b7e7c201442c0d1e1237e7c20124280c2d72f7e7c428084afdf007c221220144280c6868f017e7c22142012542101024020032802d41541ffffffff0371450d00200d10390b427f201420011b2112201342ffffffff0383500d00200a10390b2000108208211320022400427f2009427f201220137c221320132012541b7c221220122009541b0bcf0303017f017e047f230041e0006b2201240042002102200141306a41186a22034200370300200141306a41106a22044200370300200141306a41086a2205420037030020014200370330200141d0006a41c7e5c000410610cb012005200141d0006a41086a220629000037030020012001290050370330200141d0006a41f4ffc300410b10cb012003200629000037030020042001290050370300200141106a200141306a10df060240024020012903104201510d00200141086a4200370300200142003703000c010b200141086a200141106a41106a29030037030020012001290318370300200141106a41186a29030021020b200141106a41106a200141086a290300370300200141106a41186a427f200220007c220020002002541b3703002001200129030037031820014201370310200141306a41186a4200370300200141306a41106a4200370300200141306a41086a2203420037030020014200370330200141d0006a41c7e5c000410610cb012003200141d0006a41086a220529000037030020012001290050370330200141d0006a41f4ffc300410b10cb01200441086a200529000037000020042001290050370000200141306a200141106a41086a10e006200141e0006a24000be60201057f230041306b22022400200241186a4200370300200241106a22034200370300200241086a420037030020024200370300200241c7e5c000410610cb01200341f484c400410e10cb014100210420024100360228200242013703204101210341002105410121060240024002400240024020000e03000102040b200241206a41004101107720022802202204200228022822036a41003a00002002200341016a22033602280240200228022420036b41034b0d00200241206a20034104107720022802202104200228022821030b200420036a2001360000200341046a2105200228022021030c020b200241206a41004101107720022802202203200228022822046a41013a0000200441016a21050c010b200241206a41004101107720022802202203200228022822046a41023a0000200441016a21050b20032106200228022421040b200241202006200510e90102402004450d00200310390b200241306a24000bc73b05067f067e027f037e037f230041f0276b22022400200220013602e81c200241386a200241e81c6a10d4062002280240210320022802382104200228023c2105200241e81c6a200141d80810d40b1a200241f0106a200241e81c6a10d50620022d00f010210120022f00f110210620022d00f3102107200241d8086a200241f0106a41047241940810d40b1a02400240024002400240024002400240024020014101460d00200241c8006a200241d8086a41046a41900810d40b1a200241306a4188d3c300411010ce032002280234210120022802302106200220033602f810200220053602f410200220043602f010200241e81c6a2001410020061b10c20520022802e81c220120022802f01c200241f0106a10d606024020022802ec1c450d00200110390b02402005450d00200410390b20024188196a20024198016a10b203200241f0106a200241c8006a41900810d40b1a024002400240024002400240024002400240024020022903901122084202520d0020022903881920022d009019200310d706220141ff01714102470d08200241e81c6a41186a4200370300200241881d6a4200370300200241901d6a4200370300200242003703b81c200242003703f01c200242003703e81c200242003703f81c200242003703981d20022802c011417f6a0e14010c0c0c0c0c0c0c02040c0c0c0c0c0c0c0c0c050c0b200241f01a6a41186a200241c8006a41186a290300370300200241f01a6a41106a200241c8006a41106a290300370300200241f01a6a41086a200241c8006a41086a290300370300200220022903483703f01a200241b8116a2903002109200241b0116a290300210a200241a8116a2802002101200229039811210b200241b81c6a41186a22054200370300200241b81c6a41106a22044200370300200241b81c6a41086a22064200370300200242003703b81c200241a81c6a41c7e5c000410610cb012006200241a81c6a41086a2207290000370300200220022900a81c3703b81c200241a81c6a419081c400410610cb0120052007290000370300200420022900a81c370300200241286a200241b81c6a412010ce03024020084201520d00200b4200510d0b0b200241b01b6a200241f01a6a10df03200241e81c6a20022802b01b220420022802b81b10e0030240024020022903e81c4201510d0020024190096a420037030020024188096a420037030020024180096a4200370300200241f8086a4200370300200241f0086a4200370300200241e8086a4200370300200241d8086a41086a420037030041002105200241b81c6a41086a4100360200200242003703d808200242003703b81c0c010b200241d8086a41086a200241e81c6a41106a290300370300200241d8086a41106a200241e81c6a41186a290300370300200241d8086a41186a200241e81c6a41206a290300370300200241d8086a41206a200241e81c6a41286a290300370300200241d8086a41286a200241e81c6a41306a290300370300200241d8086a41306a200241e81c6a41386a290300370300200241d8086a41386a200241a81d6a290300370300200241b81c6a41086a200241bc1d6a280200360200200220022903f01c3703d808200220022902b41d3703b81c200241b01d6a28020021050b024020022802b41b450d00200410390b0240024020052001470d00200241e81c6a41386a200241d8086a41386a290300370300200241e81c6a41306a200241d8086a41306a290300370300200241e81c6a41286a200241d8086a41286a290300370300200241e81c6a41206a200241d8086a41206a290300370300200241e81c6a41186a200241d8086a41186a290300370300200241e81c6a41106a200241d8086a41106a290300370300200241e81c6a41086a200241d8086a41086a290300370300200220022903d8083703e81c2002200141016a3602a81d200241b41d6a200241b81c6a41086a280200360200200220022903b81c3702ac1d200241b01b6a200241f01a6a10df0320022802b01b220120022802b81b200241e81c6a10cc06024020022802b41b450d00200110390b418012210120022d00901922054102460d01200229038819220b2005200310d706220141ff01714102470d01200241e81c6a2003200b200a200920022d009119410047200510d8064200210c4200210b024020022903e81c4201520d00427f427f200241f81c6a290300220b200241881d6a2903007c20022903f01c220c200241801d6a2903007c220d200c542201ad7c220c2001200c200b54200c200b511b22011b220b200241981d6a2903007c427f200d20011b220c200241901d6a2903007c220d200c542201ad7c220c2001200c200b54200c200b511b22011b210b427f200d20011b210c0b200241e81c6a200241f01a6a427f200c20022903a01d7c220d200d200c542201200b200241a81d6a2903007c2001ad7c220c200b54200c200b511b22011b427f200c20011b200a200910d90620022d00e81c4101470d0820022f00e91c20022d00eb1c411074722101200241b01b6a41186a200241d8086a41186a290300370300200241b01b6a41106a200241d8086a41106a2903003703000c010b418006418004200520014b1b21010b200241901b6a41186a200241e01b6a41186a290300370300200241901b6a41106a200241e01b6a41106a2903003703000c080b4100210141002105200241c8116a2802004102470d04200241e0116a200241cc116a10da0622014180feff077141087621050c010b4100210141002105200241c8116a2802004102470d03200241e0116a200241cc116a10db0622014180feff077141087621050b200141ff01714102470d020c080b200241d8086a200241c4116a10dc06024020022d00d8084101460d0020024184096a280200210720024180096a2802002104200241fc086a280200210e200241f4086a2802002106200241f0086a280200210f0240200241f8086a2802002201450d002001410c6c2105200f210103400240200141046a280200450d00200128020010390b2001410c6a2101200541746a22050d000b0b02402006450d002006410c6c450d00200f10390b02402007450d002007410c6c2105200e210103400240200141046a280200450d00200128020010390b2001410c6a2101200541746a22050d000b0b2004450d082004410c6c450d08200e10390c080b20022d00d90822014102460d0720022f01da0821050c010b200241d8086a200241c8116a10b80441002101410021050240024020022d00d808417d6a0e06000101010108010b20022d00da0821050b200541087441077221050b2005410874200141ff017172210120022903981d500d022002200241a01d6a3602d808200241d8086a10e4040c020b200241e81c6a41186a290300210b200241e81c6a41106a290300210c200241e81c6a41086a290300210d200241b01b6a41086a200241f01a6a41086a22012903002210370300200241e01b6a41186a200241f01a6a41186a22052903002211370300200241e01b6a41086a2010370300200241901b6a41186a22042011370300200241901b6a41106a2206200241f01a6a41106a2207290300370300200241901b6a41086a220e2010370300200220022903f01a3703901b200241b01a6a41186a2004290300370300200241b01a6a41106a2006290300370300200241b01a6a41086a200e290300370300200220022903901b3703b01a200241d01a6a41186a2005290300370300200241d01a6a41106a2007290300370300200241d01a6a41086a2001290300370300200220022903f01a3703d01a0c050b200241b81c6a41186a200241d8086a41186a290200370300200241b81c6a41106a200241d8086a41106a2902003703000b200241c0116a10dd060c040b2000200620074110747222013b0001200041013a0000200041036a20014110763a00002005450d06200410390c060b41c0d0c000411941dcd0c0001035000b200241b01a6a41086a200241e81c6a41106a220141086a290300370300200241b01a6a41106a200141106a290300370300200241b01a6a41186a200141186a290300370300200220012903003703b01a200241e81c6a41086a2903002109200241a81d6a290300210b200241a01d6a290300210c20022903e81c210a20022903981d210d0b200241f01a6a41186a2201200241d01a6a41186a290300370300200241f01a6a41106a2205200241d01a6a41106a290300370300200241f01a6a41086a2206200241d01a6a41086a290300370300200220022903d01a3703f01a200241901b6a41186a200241b01a6a41186a290300370300200241901b6a41106a200241b01a6a41106a290300370300200241901b6a41086a200241b01a6a41086a290300370300200220022903b01a3703901b200241d8086a200241c0116a41c00710d40b1a41022104024020084202510d00200241e81c6a41186a2001290300370300200241e81c6a41106a2005290300370300200241e81c6a41086a2006290300370300200220022903f01a3703e81c410121040b200241e01b6a41186a200241e81c6a41186a290300370300200241e01b6a41106a200241e81c6a41106a290300370300200241e01b6a41086a200241e81c6a41086a290300370300200220022903e81c3703e01b411010382205450d04200541cce0c00036020c200541013602082005428180808010370200411010382201450d04200141e4e0c00036020c20014101360208200142818080801037020020052005280200417f6a2206360200024020060d002005280208200528020c2802001102000240200528020c280204450d00200528020810390b200541046a22062006280200417f6a220636020020060d00200510390b024002402001280208200241d8086a200128020c28020c1101000d00200241c81b6a41003a0000200241d01b6a41023a000020012001280200417f6a2205360200200242003703b81b42012108200242013703b01b024020050d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22052005280200417f6a220536020020050d00200110390b200241d8086a10c1030c010b200241e81c6a200241d8086a41c00710d40b1a200241c21c6a200241e81b6a290300370100200241ca1c6a200241f01b6a290300370100200241d21c6a200241f81b6a290300370100200241da1c6a200241801c6a2f01003b0100200220043a00b91c200241003a00b81c200220022903e01b3701ba1c200220013602dc1c200241b01b6a200241e81c6a200241b81c6a10c40320022903b01b21080b200241b01b6a41106a2903002111200241b01b6a41186a2d0000210420022903b81b211020024198096a200b37030020024190096a2206200c370300200241d8086a41186a200241901b6a41086a290300370300200241f8086a200241901b6a41106a29030037030020024180096a200241901b6a41186a290300370300200220093703e0082002200a3703d808200220022903901b3703e8082002200d37038809024002402008500d0020104202510d00200241b81a6a200241d81b6a2903003e02002002200241d01b6a2903003703b01a0c010b200241083a00b01a0b024020022d00901922054102470d0020022d00b01a41ff01714108460d002002200241b01a6a3602e01b024041002802d0a94e450d002002411b3602bc1c2002200241e01b6a3602b81c41002802cca94e210141002802c8a94e210541002802d4a94e2104200241f81c6a42013703002002419c1d6a41b1b5c700ad4280808080d00d84370200200241901d6a418bb5c700ad4280808080e00484370300200241881d6a4201370300200241f01c6a410f360200200241841d6a200241b81c6a360200200241f4b4c7003602f41c20024281808080b01f3702a41d200241003602981d200241fcb4c7003602ec1c200241013602e81c200541b8c0cd00200441024622041b200241e81c6a200141c0a4c00020041b280210110300200229038809210d0b4180102101200d500d01200220063602e81c200241e81c6a10e4040c010b200241d8086a41106a2101200229038819210842002112024020104201520d0020082011580d004200200820117d220920092008561b2109200241b81c6a41186a22134200370300200241b81c6a41106a22064200370300200241b81c6a41086a22074200370300200242003703b81c200241a81c6a41c7e5c000410610cb012007200241a81c6a41086a220e290000370300200220022900a81c3703b81c200241a81c6a41f4ffc300410b10cb012013200e290000370300200620022900a81c370300200241e81c6a200241b81c6a10df06200220022903f01c420020022903e81c420151220f1b3703e01b2002200241e81c6a41106a22142903004200200f1b3703d01a2002200241e81c6a41186a22152903004200200f1b3703e01c200241e01c6a210f02400240024020054103710e03010002010b200241d01a6a210f0c010b200241e01b6a210f0b200f4200200f290300220a20097d22092009200a561b370300201520022903e01c370300201420022903d01a370300200220022903e01b3703f01c200242013703e81c201342003703002006420037030020074200370300200242003703b81c200241a81c6a41c7e5c000410610cb012007200e290000370300200220022900a81c3703b81c200241a81c6a41f4ffc300410b10cb01200641086a200e290000370000200620022900a81c370000200241b81c6a200241e81c6a41086a10e00620024198096a290300210b200241d8086a41086a2903002109200229039009210c20022903d808210a200229038809210d0b200241e01b6a41186a200141186a290000370300200241e01b6a41106a200141106a290000370300200241e01b6a41086a200141086a290000370300200220012900003703e01b200241e81c6a20032008201120112008561b200820104201511b200a200920022d009119410146200441ff017141014672200510d80642002108024020022903e81c4201520d00427f427f200241e81c6a41106a2903002208200241881d6a2903007c20022903f01c2210200241e81c6a41186a2903007c22112010542201ad7c22102001201020085420102008511b22011b2208200241981d6a2903007c427f201120011b2210200241901d6a2903007c22112010542201ad7c22102001201020085420102008511b22011b2108427f201120011b21120b0240200d4201520d004200210d200241e81c6a200241e01b6a4200200c427f201220022903a01d7c2210201020125422012008200241a81d6a2903007c2001ad7c221020085420102008511b22011b22087d22112011200c56200b427f201020011b7d200c200854ad7d2208200b562008200b511b22011b4200200820011b10e10602400240200c4200200241f01c6a29030020022802e81c41014622011b221156200b4200200241f81c6a29030020011b221056200b20105122011b0d00420021082011200c562010200b5620011b450d012011200c7d2010200b7d2011200c54ad7d10e30441800221010c030b200b20107d200c201154ad7d2108200c20117d210d0b2002427f2008200d200a200d200d200a56200820095620082009511b22011b220c54220520082009200820011b220b542008200b511b22011b22093703f01c2002427f200d20011b220a3703e81c0240200c200d200c7d84200b2008200b7d2005ad7d84844200520d002002200241e81c6a3602b81c200241b81c6a10e4040c010b200241b81c6a10d404200241e81c6a10d404200241186a200241e81c6a200a200910e20602400240200a2002290318220b582009200241186a41086a290300220858200920085122011b0d00200241e01a6a200920087d200a200b54ad7d370300200242013703d01a2002200a200b7d3703d81a2002200241d01a6a41086a3602a81c200241a81c6a10e4040c010b200241e01a6a200820097d200b200a54ad7d220c3703002002200b200a7d220d3703d81a2002200b200a56200820095620011bad4201863703d01a200b200a58200820095820011b0d00200d200c10e3040b200241a01d6a2009370300200241981d6a200a370300200241891d6a200241d01c6a290300370000200241811d6a200241c81c6a290300370000200241f91c6a200241b81c6a41086a290300370000200241f11c6a20022903b81c370000200241e81c6a41086a41043a0000200241023a00e81c200241e81c6a10c9030b200241fc196a41246a200241b01b6a41206a290300370200200241fc196a411c6a200241b01b6a41186a290300370200200241fc196a41146a200241b01b6a41106a29030037020041082101200241fc196a410c6a200241b01b6a41086a290300370200200241fc196a412c6a200241b01b6a41286a290300370200200220022903b01b3702801a200241c8196a41206a200241fc196a41206a290200370300200241c8196a41186a200241fc196a41186a290200370300200241c8196a41106a200241fc196a41106a290200370300200241c8196a41086a200241fc196a41086a290200370300200241c8196a41306a200241fc196a41306a280200360200200241c8196a41286a200241fc196a41286a290200370300200220022902fc193703c81920024198196a41286a200241c8196a412c6a29020037030020024198196a41206a2205200241c8196a41246a29020037030020024198196a41186a200241c8196a411c6a29020037030020024198196a41106a2204200241c8196a41146a29020037030020024198196a41086a2203200241c8196a410c6a290200370300200220022902cc193703981920022903881922082004290300220920092008561b200820032903004201511b210820022903901921092002290398194201510d012008210a20092108410021040c020b200241c8196a41086a200241fc196a41086a290200370300200241c8196a41106a200241fc196a41106a290200370300200241c8196a41186a200241fc196a41186a290200370300200241c8196a41206a200241fc196a41206a290200370300200241c8196a41286a200241fc196a41286a290200370300200241c8196a41306a200241fc196a41306a280200360200200220022902fc193703c819200041036a20014110763a0000200020013b0001200041013a00000c020b200220024198196a41086a3602fc19024041002802d0a94e4105490d00200241b81c6a41186a22054200370300200241b81c6a41106a22044200370300200241b81c6a41086a22034200370300200242003703b81c200241a81c6a41c7e5c000410610cb012003200241a81c6a41086a2206290000370300200220022900a81c3703b81c200241a81c6a419081c400410610cb0120052006290000370300200420022900a81c370300200241106a200241b81c6a412010ce03200241fc106a4118360200200241103602f41020022002280214410020022802101b3602d8082002200241fc196a3602f8102002200241d8086a3602f01041002802cca94e210541002802c8a94e210441002802d4a94e2103200241e81c6a41106a42023703002002419c1d6a4185bec300ad4280808080900b84370200200241901d6a41a8d3c300ad4280808080c00184370300200241e81c6a41206a4202370300200241e81c6a41086a410f360200200241841d6a200241f0106a36020020024198d3c3003602f41c20024281808080c0ba013702a41d200241003602981d200241fcb4c7003602ec1c200241053602e81c200441b8c0cd00200341024622031b200241e81c6a200541c0a4c00020031b28021011030020022802fc1941186a21050b2005290204210a20052802002105410121040b200241f11c6a20022f00d8083b0000200241e81c6a41286a20022903f010370300200241e81c6a41206a2009370300200241e81c6a41186a2008370300200241e81c6a41106a200a370300200241e81c6a410c6a2005360200200241e81c6a41086a20043a0000200241f31c6a200241da086a2d00003a0000200241e81c6a41306a200241f0106a41086a290300370300200241a01d6a200241f0106a41106a290300370300200241a81d6a200241f0106a41186a290300370300200241b01d6a200241f0106a41206a290300370300200241003a00e81c200241e81c6a10c903200241086a4188d3c300411010ce032002200228020c41016a410120022802081b22053602e81c4188d3c3004110200241e81c6a410410e9014100200510d20602402002290398194201520d0020022903a0194202510d00200220022900b9193703e81c2002200241c0196a2800003600ef1c200241b8196a2d000021010b200041003a0000200041046a20013a0000200041056a20022903e81c3700002000410c6a20022800ef1c3600000b200241f0276a24000f0b1032000be70e01087f230041c0006b2202240002400240024041da0810382203450d0020002003360200200041046a220441da08360200200341003b000041022105200041086a410236020002400240200128020022032903684202520d0041022101024020042802004102470d002000410241011077200041086a28020021010b200028020020016a41043a0000200041086a2201200128020041016a3602000c010b024020042802004102470d002000410241011077200041086a28020021050b200341e8006a2106200028020020056a4184013a0000200041086a2201200128020041016a3602002003200010de02024002400240024020032d00240e03000102030b0240200041046a220428020020012802002201470d002000200141011077200041086a28020021010b200028020020016a41003a0000200041086a2207200141016a2205360200200341256a21010240200428020020056b413f4b0d002000200541c0001077200728020021050b200028020020056a22042001290000370000200441386a200141386a290000370000200441306a200141306a290000370000200441286a200141286a290000370000200441206a200141206a290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002007200541c0006a3602000c020b0240200041046a220428020020012802002201470d002000200141011077200041086a28020021010b200028020020016a41013a0000200041086a2207200141016a2205360200200341256a21010240200428020020056b413f4b0d002000200541c0001077200728020021050b200028020020056a22042001290000370000200441386a200141386a290000370000200441306a200141306a290000370000200441286a200141286a290000370000200441206a200141206a290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002007200541c0006a3602000c010b0240200041046a220528020020012802002201470d002000200141011077200041086a28020021010b200028020020016a41023a0000200041086a2204200141016a2201360200200341256a21070240200528020020016b41c0004b0d002000200141c1001077200428020021010b200028020020016a200741c10010d40b1a2004200141c1006a3602000b2006200010d5050b20034198016a200010d902200041086a2802002103410410382201450d00200242043702042002200136020002400240024002402003417e6a220441c000490d00200441808001490d012004418080808004490d02200141033a0000410121032002410136020802402002280204417f6a41034b0d00200241014104107720022802002101200228020821030b200120036a2004360000200341046a21030c030b200120044102743a0000410121030c020b41022103200120044102744101723b00000c010b20012004410274410272360000410421030b20022003360208200041086a2204280200220541014d0d01200220003602202004410036020020022001360224200241286a200120036a360200200241023602102002411c6a2000280200220741026a220436020020022005417e6a220636021420022004360218200241246a21080240024020060d002000200810d0090c010b2003450d00200720012d00003a00002000200028020841016a3602082002200141016a36022420034101460d00200720012d00013a00012000200028020841016a3602082002200141026a220436022402402003417e6a2207450d000240200041046a28020020056b20074f0d0020002005200710770b2000280200220520036a200541026a200610d50b1a20022003360210200028020822062003460d00200028020020066a2105200241246a2107034020034102460d02200520042d00003a00002007200441016a22043602002000200028020841016a360208200541016a210520062003417f6a2203470d000b2003417e6a21070b2007417f4c0d030240024020070d00410121000c010b200710382200450d020b200241003602382002200736023420022000360230200241306a200810d0092002280234210720022802302108024020022802382200450d0002402002280220220541046a28020020022802142206200228021022036a22046b20004f0d0020052004200010770b20052802002209200320006a22046a200920036a200610d50b1a20022004360210200528020822092004460d00200920036b2106200528020020096a21032008210403402000450d01200320042d00003a00002005200528020841016a360208200441016a2104200341016a210320062000417f6a2200470d000b0b2007450d00200810390b024020022802142200450d000240200228021022052002280220220641086a22042802002203460d002006280200220620036a200620056a200010d50b1a0b2004200320006a3602000b02402002280204450d00200110390b200241c0006a24000f0b1032000b4102200541908cc700104b000b1034000b871e07017f037e057f017e017f027e077f230041c02a6b220224004202210302400240024002400240024002400240200129036822044202520d00200241106a20014198016a41c00710d40b1a0c010b2002419e086a200141246a41c20010d40b1a200241e0086a41086a20014188016a290300370300200241f0086a20014190016a290300370300200220014180016a2903003703e008200141f8006a29030021052001290370210320012802082106200128020421074101210802400240024020012d00000e03000201020b200241aa126a200141036a2d00003a000020024198096a41086a200141146a290000370300200241a5096a200141196a290000370000200220012f00013b01a8122002200129000c37039809410021080c010b2006450d00200710390b200241b8216a41026a2209200241a8126a41026a2d00003a0000200241f0196a41086a20024198096a41086a290300370300200241f0196a410d6a220a20024198096a410d6a290000370000200220022f01a8123b01b82120022002290398093703f01920080d032002418b096a200241f0196a41086a29030037000020024190096a200a290000370000200220022f01b8213b01f808200220063600ff08200220073600fb08200220022903f01937008309200220092d00003a00fa08200241b8216a20014198016a41c00710d40b1a200241f8286a41106a200241e0086a41106a290300370300200241f8286a41086a200241e0086a41086a290300370300200220022903e0083703f82841002109200241f0296a410010e004200241f0196a20022802f029220620022802f8291085040240024020022d00f0194101460d00200241a52a6a4200370000200241902a6a41106a4200370300200241902a6a41086a4200370300200242003703902a0c010b200241902a6a41086a200241fc196a290200370300200241902a6a41106a200241841a6a290200370300200241a52a6a200241891a6a290000370000200220022902f4193703902a20022f00f11920022d00f3194110747221090b024020022802f429450d00200610390b200241d0296a41086a200241902a6a41086a290300370300200241d0296a41106a200241902a6a41106a290300370300200241d0296a41156a200241902a6a41156a290000370000200220022903902a3703d0294200210b200241881a6a22064200370300200241f0196a41106a22074200370300200241f0196a41086a220a4200370300200242003703f019200241b02a6a41c7e5c000410610cb01200a200241b02a6a41086a220c290000370300200220022900b02a3703f019200241b02a6a419081c400410610cb012006200c290000370300200720022900b02a370300200241086a200241f0196a412010ce030240024020044201520d0020034200510d0442ffffffff0f210d4200200228020c410020022802081bad220b20057d220e200e200b561b220b20057c200b2003827d220b42feffffff0f560d010b200b210d0b200241f0196a200da7220a10e00420022802f019220720022802f81910e3012106024020022802f419450d00200710390b024002402006450d00200241b02a6a200a10e004200241f0196a20022802b02a220a20022802b82a1085040240024020022d00f0194101460d00200241a52a6a4200370000200241a02a6a4200370300200241982a6a4200370300200242003703902a410021070c010b200241982a6a200241fc196a290200370300200241902a6a41106a200241841a6a290200370300200241a52a6a200241891a6a290000370000200220022902f4193703902a20022f00f11920022d00f3194110747221070b024020022802b42a450d00200a10390b200241f0296a41156a220a200241902a6a41156a220c290000370000200241f0296a41106a220f200241902a6a41106a2210290300370300200241f0296a41086a2211200241902a6a41086a2212290300370300200241f0196a41086a200241d0296a41086a290300370300200241f0196a41106a200241d0296a41106a290300370300200241f0196a41156a200241d0296a41156a290000370000200220022903902a3703f029200220022903d0293703f019200c200a2900003700002010200f29030037030020122011290300370300200220022903f0293703902a0c010b200241f0296a41156a200241902a6a41156a290000370000200241f0296a41106a200241902a6a41106a29000037030041800a21070b200241b0296a41156a220a200241f0196a41156a290000370000200241b0296a41106a220c200241f0196a41106a290300370300200241b0296a41086a220f200241f0196a41086a29030037030020024190296a41086a2210200241902a6a41086a221129030037030020024190296a41106a2212200241902a6a41106a221329030037030020024190296a41156a2214200241902a6a41156a2215290000370000200220022903f0193703b029200220022903902a37039029024002402006450d002015200a2900003700002013200c2903003703002011200f290300370300200241f0296a41086a2010290300370300200241f0296a41106a2012290300370300200241f0296a41156a2014290000370000200220022903b0293703902a20022002290390293703f029200241d0296a41106a200241f8286a41106a290300370300200241d0296a41086a200241f8286a41086a290300370300200220022903f8283703d029200241f4196a200241b8216a41c00710d40b1a0c010b200241b8216a10b1080b200241a8126a200241f0196a41c40710d40b1a20024190126a41106a220a200241d0296a41106a29030037030020024190126a41086a220c200241d0296a41086a290300370300200241f0116a41086a220f200241902a6a41086a290300370300200241f0116a41106a2210200241902a6a41106a290300370300200241f0116a41156a2211200241902a6a41156a290000370000200241d0116a41086a2212200241f0296a41086a290300370300200241d0116a41106a2213200241f0296a41106a290300370300200241d0116a41156a2214200241f0296a41156a290000370000200220022903d02937039012200220022903902a3703f011200220022903f0293703d0112006450d0120024198096a200241ac126a41c00710d40b1a20024192116a20094110763a000020024190116a20093b0100200241e8106a2005370300200241e0106a2003370300200241f0106a200229039012370300200241f8106a200c29030037030020024180116a200a29030037030020024193116a20022903f0113700002002419b116a200f290300370000200241a3116a2010290300370000200241a8116a2011290000370000200220043703d810200242bcc68080d00037038811200241b2116a20074110763a0000200241b0116a20073b0100200241b3116a20022903d011370000200241bb116a2012290300370000200241c3116a2013290300370000200241c8116a2014290000370000410810382206450d04200242083702ac12200220063602a81220024198096a200241a8126a10d90220024198096a41c0076a200241a8126a10d5052002280288112107024020022802ac1220022802b01222066b41034b0d00200241a8126a20064104107720022802b01221060b20022802a81220066a20073600002002200641046a22063602b012200228028c112107024020022802ac1220066b41034b0d00200241a8126a20064104107720022802b01221060b20022802a81220066a20073600002002200641046a3602b012412010382206450d04200641086a220a20024198116a290300370000200641106a220c200241a0116a290300370000200641186a220f200241a8116a29030037000020022802ac12210920022802b0122107200620024190116a2903003700000240200920076b411f4b0d00200241a8126a20074120107720022802b01221070b20022802a81220076a22092006290000370000200941086a200a290000370000200941106a200c290000370000200941186a200f2900003700002002200741206a3602b01220061039412010382206450d04200641086a220a200241b8116a290300370000200641106a220c200241c0116a290300370000200641186a220f200241c8116a29030037000020022802ac12210920022802b01221072006200241b0116a2903003700000240200920076b411f4b0d00200241a8126a20074120107720022802b01221070b20022802a81220076a22092006290000370000200941086a200a290000370000200941106a200c290000370000200941186a200f2900003700002002200741206a3602b0122006103920022802a81221060240024020022802b0122207418102490d00200241f0196a20062007109f012002419e086a200241f0196a4120200241f8086a10db0321060c010b2002419e086a20062007200241f8086a10db0321060b024020022802ac12450d0020022802a81210390b024020060d0020004180083b0001200041013a0000200041036a41003a000020024198096a10b1080c060b200241f8076a41086a200241f8086a41086a290300370300200241f8076a41106a200241f8086a41106a290300370300200241f8076a41186a200241f8086a41186a290300370300200241d0076a41086a200241e8106a290300370300200241d0076a41106a200241f0106a290300370300200241d0076a41186a200241f8106a290300370300200241f0076a20024180116a290300370300200220022903f8083703f8072002200241e0106a2903003703d00720022903d8102103200241106a20024198096a41c00710d40b1a0b200041086a20022903f807370300200041286a2003370300200041306a20022903d007370300200041206a200241f8076a41186a290300370300200041186a200241f8076a41106a290300370300200041106a200241f8076a41086a290300370300200041386a200241d0076a41086a290300370300200041c0006a200241d0076a41106a290300370300200041c8006a200241d0076a41186a290300370300200041d0006a200241d0076a41206a290300370300200041d8006a200241106a41c00710d40b1a200041003a00000c050b200020073b0001200041013a0000200041036a20074110763a00000c030b41c0d0c000411941dcd0c0001035000b200041013b0001200041013a0000200041036a41003a00000c010b1032000b2008450d0020014198016a10b1080b200241c02a6a24000bc00301067f230041106b22032400024002402002280208220441046a2205417f4c0d00200228020021060240024002400240024002402005450d00200510382202450d07200341003602082003200536020420032002360200200441c000490d02200441808001490d032004418080808004490d04410021050c010b2003410036020820034201370300200341004101107720032802002102200328020821050b200220056a41033a00002003200541016a22053602080240200328020420056b41034b0d002003200541041077200328020821050b2003280200220220056a2004360000200541046a21050c030b200220044102743a0000410121050c020b20044102744101722107410021080240200541014b0d00200341004102107720032802002102200328020821080b200220086a20073b0000200841026a21050c010b20022004410274410272360000410421050b2003200536020802402003280204220820056b20044f0d0020032005200410772003280200210220032802042108200328020821050b200220056a2006200410d40b1a200020012002200520046a10e90102402008450d00200210390b200341106a24000f0b1034000b1032000b910c02087f067e230041b0036b2203240020034190036a41186a2204420037030020034190036a41106a2205420037030020034190036a41086a22064200370300200342003703900341062107200341d8016a41c7e5c000410610cb012006200341d8016a41086a2208290000370300200320032900d80137039003200341d8016a41a880c400411010cb0120042008290000370300200520032900d801370300200341086a20034190036a412010ce03410021090240417f200328020c410020032802081b220a20026a22022002200a491b220a418080c002418080f001200141ff017122021b4b0d00200341106a10b8032004420037030020054200370300200642003703002003420037039003200341d8016a41c7e5c000410610cb0120062008290000370300200320032900d80137039003200341d8016a41f4ffc300410b10cb01200541086a2008290000370000200520032900d801370000200341d8016a20034190036a10df06200341d8016a41186a290300210b200341d8016a41106a290300210c20032903e001210d20032903d801210e200341d8016a200341106a41b80110d40b1a2003200d4200200e42015122061b370390032003200c420020061b3703d0012003200b420020061b3703c801024002400240024020020e03010200010b427f2000200341d8026a22062903007c220b200b2000541b210b0c020b427f200020032903e8017c220b200b2000541b210b200341e8016a21060c010b427f2000200341a0026a22062903007c220b200b2000541b210b0b02400240024002402006290318220c4201510d0020062903284201510d00200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008427f2008290300220d200b7c220b200b200d541b3703000c010b200341c8016a2108024002400240200141ff01710e03010002010b200341d0016a21080c010b20034190036a21080b2008290300220d200b7c220b200d540d012008200b3703000b200341c8016a2108024002400240200141ff01710e03000102000b20034190036a21080c010b200341d0016a21080b2008290300210e0240200c4201520d00200e200641206a290300560d010b0240427f427f200329039003220b20032903d001220c7c220d200d200b541b220f20032903c801220d7c22102010200f541b20032903e001580d0020062903284201520d00200e200641306a290300560d010b41002106410021070c010b41062107410121060b20060d00200341d8016a10b8030240024002400240200141ff01710e03010200010b200341d8026a21010c020b200341e8016a21010c010b200341a0026a21010b024020012903084201520d0041062107200141106a2903002000540d010b200341a8036a2208420037030020034190036a41106a2207420037030020034190036a41086a220142003703002003420037039003200341d8016a41c7e5c000410610cb012001200341d8016a41086a2206290000370300200320032900d80137039003200341d8016a41a880c400411010cb01200541086a22042006290000370000200520032900d8013700002003200a3602d80120034190036a4120200341d8016a410410e9012008420037030020074200370300200142003703002003420037039003200341d8016a41c7e5c000410610cb0120012006290000370300200320032900d80137039003200341d8016a41f4ffc300410b10cb0120042006290000370000200520032900d801370000200341003602e001200342013703d801200341d8016a41004108107720032802d801220120032802e00122056a200b3700002003200541086a22053602e001024020032802dc01220620056b41074b0d00200341d8016a20054108107720032802dc01210620032802d801210120032802e00121050b200120056a200c3700002003200541086a22053602e0010240200620056b41074b0d00200341d8016a20054108107720032802d801210120032802e00121050b200120056a200d37000020034190036a412020032802d8012201200541086a10e901024020032802dc01450d00200110390b410221090b200341b0036a240020074108742009720b880402017f057e230041c0036b2207240042002108024020050d00200741186a2001ad42004280c2d72f420010d30b20074188026a10b803200741c0006a2007290390022208200220082002541b109c0a200741c0006a41086a29030021082007290340210220074188026a41dcafca00411210cb01200741a0026a4200370000200742003700980220074188026a41106a220141b0b1ca00411110cb01200741286a20074188026a10e90620074188026a200729033042808090bbbad6adf00d200728022822051b200741286a41106a290300420020051b2002200842808090bbbad6adf00d420010a801200741186a41086a2105024002402007280288024101470d00427f2102427f21090c010b2001290300210920074188026a41086a29030021020b2005290300210a2007290318210b200741d0006a10b8030240024002400240200641ff01710e03010200010b200741d0016a21050c020b200741e0006a21050c010b20074198016a21050b2005290300210820074188026a10b803200741086a200729039002220c2008200c2008541b109c0a200741106a29030021082007290308210c200041306a2009370300200041286a2002370300200041206a200a370300200041186a200b370300200041106a20083703002000200c370308420121080b2000200337033820002008370300200041c0006a2004370300200741c0036a24000bc81307017f017e017f077e057f027e037f230041f00c6b22062400420021070240024020022003844200520d00200041003a0000200041086a42003703000c010b200641c8006a200110df03200641e8016a20062802482208200628025010e003420021094200210a4200210b4200210c4200210d4200210e4200210f024020062903e8014201520d00200641f8016a290300210920064188026a290300210b20064180026a290300210a20064198026a290300210d20064190026a290300210c200641a8026a290300210f200641a0026a290300210e20062903f00121070b0240200628024c450d00200810390b0240024002402007200c200a84842009200d200b848484500d00200641286a21080c010b200641286a2108200e200f844200520d00200641e0016a4200370300200641d8016a4200370300200641d0016a4200370300200642003703c8014100211041012111200641286a210842002107420021094200210a4200210b0c010b200641286a41186a200f3703002006200e3703382006200c3703282006200d370330200641c8016a41186a200841186a290300370300200641c8016a41106a200841106a290300370300200641c8016a41086a200841086a290300370300200620082903003703c80141012110410021110b024002400240024002400240200720027d220d200756200920037d2007200254ad7d220c200956200c2009511b0d000240200d200a7c220f42ffc7afa02556200c200b7c200f200d542212ad7c220e420052200e501b0d00200a20077c220742ffc7afa02556200b20097c2007200a54ad7c22074200522007501b0d010b20064188016a200110df03200641e8016a200628028801221320062802900110e00320064198026a290300420020062903e80142015122141b210920064190026a290300420020141b2115200641a8026a290300420020141b2107200641a0026a290300420020141b21160240200628028c01450d00201310390b2016201520162015201656200920075620092007511b22141b20042005845022131b200d5620072009200720141b20131b2207200c562007200c511b0d002002422088a721132002a72117420021022011ad210402400240427f200f2012200e200c54200e200c511b22141b220942ffc7afa02556427f200e20141b220742005220075022141b0d00200d200a84200c200b848422025021182002420052ad21020c010b200641e8016a41186a200641c8016a41186a290300370300200641e8016a41106a200641c8016a41106a290300370300200641e8016a41086a200641c8016a41086a290300370300200620062903c8013703e801410121180b200820062903e801370300200841186a200641e8016a41186a290300370300200841106a200641e8016a41106a290300370300200841086a200641e8016a41086a290300370300200641f0006a2007370300200641e8006a22192009370300200641c8006a41106a200c3703002006200d37035020062003370380012006201336027c20062017360278200620023703602006200437034802402011200942ffc7afa02556200742005220141b221271450d00200620013602e8012001200641e8016a10e5040c040b0240024020104101732012720d00200620013602e8012001200641e8016a10e60441ff017122114103460d0520110e03030501030b20102012720d0420064180016a290300210e0c030b200641f8006a2108024020180d00200620193602e801200641e8016a10e4040b200620083602e801200641e8016a10e4040b200041036a41003a000020004180023b0001410121080c040b20064180016a290300210e0b2006290378210f0c010b20064188016a41186a200841186a29030037030020064188016a41106a200841106a29030037030020064188016a41086a200841086a2903003703002006200829030037038801200641a8016a200110df03200641e8016a20062802a801220820062802b001221110e0030240024020062903e8014201510d00200641b8016a41086a4200370300200642003703b8010c010b200641b8016a41086a200641b8026a2903003703002006200641b0026a2903003703b8010b4200210202400240200942ffc7afa02556200742005220141b0d0020064180026a4200370300200641f8016a4200370300200641f0016a4200370300200642003703e8014200210b4200210d4200210c0c010b200641e8016a41186a20064188016a41186a290300370300200641e8016a41106a20064188016a41106a290300370300200641e8016a41086a20064188016a41086a29030037030020062006290388013703e801200a21020b200641c8016a41186a200641e8016a41186a22102903002207370300200641c8016a41106a200641e8016a41106a22142903002209370300200641c8016a41086a200641e8016a41086a22122903002203370300200620062903e801220a3703c80120064188026a200b370300201020023703002014200c370300200641a8026a2007370300200641e8016a41386a200937030020064198026a2003370300200641e8016a41286a200a370300200641b0026a20062903b801370300200641b8026a200641b8016a41086a2903003703002006200d3703f001200642013703e80120082011201210e704024020062802ac01450d00200810390b200641c8006a41106a290300210c200641c8006a41286a2903002107200641c8006a41386a290300210e2006290350210d200629036821092006290378210f20062903482104200629036021020b024020044201520d00200641a0026a200c37030020064198026a200d370300200641f1016a2001290000370000200641e8016a41086a41003a000020064189026a200141186a29000037000020064181026a200141106a290000370000200641f9016a200141086a290000370000200641023a00e801200641e8016a10c9030b02400240200250450d00420021020c010b200641e8016a41186a200141186a290000370300200641e8016a41106a200141106a290000370300200641e8016a41086a200141086a290000370300200620012900003703e801420121020b200641086a41186a200641e8016a41186a22082903002203370300200641086a41106a200641e8016a41106a2201290300220a370300200641086a41086a200641e8016a41086a290300220c370300200620062903e801220b37030820064198026a200737030020064190026a221120093703002001200c3703002008200a37030020064188026a2003370300200620023703e8012006200b3703f001200641e8016a10e804024020062903e801500d0020062011360248200641c8006a10e4040b200041186a200e370300200041106a200f370300200041086a4201370300410021080b200020083a00000b200641f00c6a24000b8e0403037f017e017f23004190036b22022400200241d0026a410c6a200041f0016a290200370200200241e4026a200041f8016a290200370200200241ec026a20004180026a290200370200200241e2c289ab063602d002200220002902e8013702d40220012802002103200241f8026a410472200141046a10df07200220033602f802200220012802103602880320024180026a200241d0026a200241f8026a10fa0602400240024020022802c002450d00200241a8016a41056a20024180026a41d00010d40b1a200241d0006a200241a8016a41d50010d40b1a2002200241d0006a41056a41d00010d40b220141a8016a200141d00010d40b1a200141d0006a410c6a21042000290300210541002100024003402000220341d000460d01410810382200450d0420002005370000200441002900bccb46370000200441086a41002900c4cb46370000200142888080808001370254200120003602502001200141a8016a20036a36026c20014180026a200141d0006a10d00820001039200141d0006a20014180026a10b90520012802502200200128025810e301210602402001280254450d00200010390b200341d0006a210020060d000b0b0240200141ec016a2802002200450d00200041306c450d00200141e8016a28020010390b200341d00047410174210141800621000c010b4100210141800821000b20024190036a240020002001720f0b1032000b800503027f027e047f23004190036b22022400200241d0026a410c6a200041e8016a290200370200200241e4026a200041f0016a290200370200200241ec026a200041f8016a290200370200200241e7e485f3063602d0022002200041e0016a2902003702d40220012802002103200241f8026a410472200141046a10df07200220033602f802200220012802103602880320024180026a200241d0026a200241f8026a10fa060240024020022802c002450d00200241a8016a41056a20024180026a41d00010d40b1a200241d0006a200241a8016a41d50010d40b1a2002200241d0006a41056a41d00010d40b2101200041106a290300210420002903002105200141a8016a200141d00010d40b1a200141d0006a410c6a210641002100024003402000220341d000460d01200141a8016a20036a21072001410036025820014201370350200141d0006a41004108107720012802502208200128025822006a20053700002001200041086a220036025802402001280254220920006b41074b0d00200141d0006a2000410810772001280254210920012802502108200128025821000b200820006a2004370000200641002900dccb46370000200641086a41002900e4cb463700002001200736026c2001200041086a36025820014180026a200141d0006a10d00802402009450d00200810390b200141d0006a20014180026a10b90520012802502200200128025810e301210802402001280254450d00200010390b200341d0006a210020080d000b0b0240200141ec016a2802002200450d00200041306c450d00200141e8016a28020010390b200341d00047410174210141800621000c010b4100210141800821000b20024190036a240020002001720bf50a02097f017e23004180016b2202240002400240200128022010890b450d0020004181808cd0003602000c010b200241e0006a22034200370300200241d8006a22044200370300200241c8006a41086a2205420037030020024200370348200241306a41b69fc500410710cb012005200241306a41086a220629000037030020022002290030370348200241306a41d091c600410c10cb012003200629000037030020042002290030370300200241086a200241c8006a412010ce030240200128021c200228020c410020022802081b2204460d0020004181808cd0003602000c010b200241106a10d20402400240200228021822032001280224460d0020004181809cd0003602000c010b02402003200128022022064b0d00200041818090d0003602000c010b20022802102107200241003602502002420137034820012802002103200241c8006a4100410410772002280248200228025022056a20033600002002200541046a36025020012802042001410c6a280200200241c8006a10b902200141106a2802002103200241c8006a200141186a280200220510ac0202402005450d0020032005410c6c6a210503402003280200200341086a280200200241c8006a10b9022003410c6a22032005470d000b0b200128021c21080240200228024c2205200228025022036b41034b0d00200241c8006a200341041077200228024c2105200228025021030b200641057421092002280248220620036a20083600002002200341046a2203360250200128022021080240200520036b41034b0d00200241c8006a200341041077200228024c210520022802482106200228025021030b200141286a210a200720096a2107200620036a20083600002002200341046a2203360250200128022421010240200520036b41034b0d00200241c8006a20034104107720022802482106200228025021030b200620036a2001360000200a20022802482205200341046a200710c40121010240200228024c450d00200510390b024020010d00200041818090d0003602000c010b200241c8006a41086a427f370300200241fc006a4108360200200241c8006a41206a4200370300200241dc006a42003702002002427f370348200241e0c1cd00360278200241013a0070200241002802d8974e2201360264200220013602580240411010382201450d00200142c9dabdf2c6ad9ab7e500370001200141203a00002002429080808090013702342002200136023041092101024041010d00200241306a410941041077200228023821010b200241f1006a2106200241c8006a41106a2103200228023020016a20043600002002200141046a22013602380240200228023420016b411f4b0d00200241306a200141201077200228023821010b200228023020016a22042007290000370000200241306a41086a2205200141206a360200200441086a200741086a290000370000200441106a200741106a290000370000200441186a200741186a290000370000200241e4006a4100410110ec012002280264200228026c2201410c6c6a22042002290330370200200441086a20052802003602002002200141016a36026c2005200341086a290300370300200241306a41106a2201200341106a29030037030020022003290300370330200220062900003703202002200641076a2900003700272002290348210b200041306a41013a0000200041106a42ac02370300200041086a200b370300200041286a2001290300370300200041206a2005290300370300200041186a2002290330370300200041003a0000200041316a2002280220360000200041346a2002280023360000200228021441ffffff3f71450d02200228021010390c020b1032000b200228021441ffffff3f71450d00200228021010390b20024180016a24000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010dd06200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010dd06200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010dd06200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010dd06200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010dd06200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010dd06200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010dd06200228020010390f0b2000410c6a220228020010dd06200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010dd06200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010dd06200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010dd06200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a2202280200109d0a200228020010390f0b200041286a220228020010dd06200228020010390f0b0b0c002000280200200110f2010bbd0202037f017e230041d0006b220224002002412036020420022001360200200241086a2001412010e40102400240200228020822010d00200042003703000c010b200228020c2103024002400240200241086a41086a28020022044108490d00200441787141786a0e09000101010101010100010b420021052002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d101200228021c450d01200228021810390c010b200041186a2001290010370300200041106a200129000837030020002001290000370308420121050b200020053703002003450d00200110390b200241d0006a24000bf00103017f017e027f230041106b22022400200241003602082002420137030020012903002103200241004108107720022802002204200228020822056a20033700002002200541086a2205360208200129030821030240200228020420056b41074b0d00200220054108107720022802002104200228020821050b200420056a20033700002002200541086a22053602082001290310210302402002280204220420056b41074b0d00200220054108107720022802042104200228020821050b2002280200220120056a2003370000200041202001200541086a10e90102402004450d00200110390b200241106a24000bce1105017f017e017f077e067f230041800d6b22042400420021050240024020022003844200520d0020004100360200200041106a4200370300200041086a42003703000c010b200441386a200110df03200441f8016a20042802382206200428024010e0034200210742002108420021094200210a4200210b4200210c4200210d024020042903f8014201520d0020044188026a290300210d20044198026a290300210b20044190026a290300210a200441a8026a2903002109200441a0026a2903002108200441b8026a2903002107200441b0026a2903002105200429038002210c0b0240200428023c450d00200610390b0240024002400240024002400240200c2008200a8484200d2009200b848484500d00200441086a21060c010b200441086a210620052007844200520d00200441d4016a410b360200200441d0016a220141a4caca00360200200441063a00ce0120044183083b01cc01200441013602c801200129030021020c010b200441306a2007370300200441206a200937030020042005370328200420083703182004200a3703082004200b370310200c20027c2208200c54220e200d20037c200ead7c220c200d54200c200d511b4101470d0120044187023b01cc01200441013602c8010b20042802cc01220641ff01712101200641807e7121060c010b42002105200641106a210e02400240427f2008200a7c220d200d200854220f200c200b7c200fad7c220d200c54200d200c511b220f1b220942ffc7afa02556427f200d200f1b220d420052200d50220f1b0d002008200a84200c200b848422055021102005420052ad21050c010b200441f8016a41186a200e41186a290300370300200441f8016a41106a200e41106a290300370300200441f8016a41086a200e41086a2903003703002004200e2903003703f801410121100b2006200a370300200e20042903f8013703002006200b370308200e41086a200441f8016a41086a290300370300200e41106a200441f8016a41106a290300370300200e41186a200441f8016a41186a290300370300200441f0006a2003370300200441386a41286a200d370300200441386a41206a220e2009370300200441386a41106a200c37030020042002370368200420083703402004200537035020044200370338024002400240200942ffc7afa02556200d420052200f1b0d00200420013602f8012001200441f8016a10e60441ff017122114103460d0020110e03010002010b200441f8006a41286a200641286a290300370300200441f8006a41206a200641206a290300370300200441f8006a41186a200641186a290300370300200441f8006a41106a200641106a290300370300200441f8006a41086a200641086a29030037030020042006290300370378200441a8016a200110df03200441f8016a20042802a801220620042802b001220e10e0030240024020042903f8014201510d00200441c0016a4200370300200442003703b8010c010b200441c0016a200441c8026a2903003703002004200441c0026a2903003703b8010b4200210202400240200942ffc7afa02556200d420052200f1b0d00200441a0026a420037030020044198026a420037030020044190026a420037030020044188026a420037030020044180026a4200370300200442003703f8014200210c0c010b200441f8016a41286a200441f8006a41286a290300370300200441f8016a41206a200441f8006a41206a290300370300200441f8016a41186a200441f8006a41186a290300370300200441f8016a41106a200441f8006a41106a290300370300200441f8016a41086a200441f8006a41086a290300370300200420042903783703f801200821020b200441c8016a41286a200441f8016a41286a220f2903002203370300200441c8016a41206a200441f8016a41206a2210290300220d370300200441c8016a41186a200441f8016a41186a2211290300220a370300200441c8016a41106a200441f8016a41106a2212290300220b370300200441c8016a41086a200441f8016a41086a22132903002208370300200420042903f80122093703c801200441b8026a2003370300200441f8016a41386a200d370300200441a8026a200a370300200f200b37030020102008370300201120093703002012200c370300200441c0026a20042903b801370300200441c8026a200441b8016a41086a2903003703002004200237038002200442013703f8012006200e201310e704024020042802ac01450d00200610390b200441386a41286a290300210d200441386a41386a290300210320042903582109200429036821022004290350210520042903384201520d002004290340210a200441b0026a200441386a41106a290300370300200441a8026a200a37030020044181026a2001290000370000200441f8016a41086a41003a000020044199026a200141186a29000037000020044191026a200141106a29000037000020044189026a200141086a290000370000200441023a00f801200441f8016a10c9030b200550450d024200210a0c030b024020100d002004200e3602f801200441f8016a10e404200441f0006a2903002103200429036821020b2002200310e30441042101410021060b200041086a200237020020002006200172360204200041013602000c020b200441f8016a41186a200141186a290000370300200441f8016a41106a200141106a290000370300200441f8016a41086a200141086a290000370300200420012900003703f8014201210a0b200441386a41186a200441f8016a41186a2201290300220b370300200441386a41106a200441f8016a41106a2206290300220c370300200441386a41086a200441f8016a41086a2903002208370300200420042903f8012205370338200441a8026a200d370300200441a0026a220e2009370300200620083703002001200c37030020044198026a200b3703002004200a3703f8012004200537038002200441f8016a10e804024020042903f801500d002004200e3602c801200441c8016a10e4040b20004100360200200041106a2003370300200041086a20023703000b200441800d6a24000bcd1203027f087e067f230041a00d6b22042400024002402002200384500d00200441d8006a200110df0320044198026a20042802582205200428026010e003420021064200210742002108420021094200210a4200210b4200210c4200210d02402004290398024201520d00200441a8026a290300210d200441b8026a290300210b200441b0026a290300210a200441c8026a2903002109200441c0026a2903002108200441d8026a2903002107200441d0026a290300210620042903a002210c0b0240200428025c450d00200510390b0240024002400240200c2008200a8484200d2009200b848484500d00200441386a210e200441286a21050c010b2006200784500d01200441286a41106a210e200441286a21050b200441d0006a2007370300200441286a41186a200937030020042006370348200420083703382004200a3703282004200b370330200441e8016a41186a200e41186a290300370300200441e8016a41106a200e41106a290300370300200441e8016a41086a200e41086a2903003703002004200e2903003703e8014100210f410121100c010b4200210c20044180026a4200370300200441e8016a41106a4200370300200441f0016a4200370300200442003703e8014100211020024280c8afa0255441002003501b0d014101210f200441286a21054200210d4200210a4200210b0b4200210642002003200c20027c2209200c54220e200d20037c200ead7c2208200d542008200d511b220e1b210342002002200e1b2102200fad210702400240427f200c2009200e1b2209200a7c220c200c2009542211200d2008200e1b220d200b7c2011ad7c220c200d54200c200d511b220e1b220842ffc7afa02556427f200c200e1b220c420052200c50220e1b0d002009200a84200d200b848422065021122006420052ad21060c010b20044198026a41186a200441e8016a41186a29030037030020044198026a41106a200441e8016a41106a29030037030020044198026a41086a200441e8016a41086a290300370300200420042903e80137039802410121120b2005200a3703002005200b370308200541286a20044198026a41186a290300370300200541206a20044198026a41106a290300370300200541186a200441a0026a290300370300200520042903980237031020044190016a2003370300200441d8006a41206a22132008370300200441d8006a41286a200c370300200441d8006a41106a200d3703002004200937036020042007370358200420063703702004200237038801024002400240024002400240200f200842ffc7afa02556200c420052200e1b221171450d002004200136029802200120044198026a10e5040c010b024020104101732011720d002004200136029802200120044198026a10e60441ff0171220f4103460d01200f0e03020103020b20102011724101470d010b20044198016a41286a200541286a29030037030020044198016a41206a200541206a29030037030020044198016a41186a200541186a29030037030020044198016a41106a200541106a29030037030020044198016a41086a200541086a2903003703002004200529030037039801200441c8016a200110df0320044198026a20042802c801220520042802d001220f10e003024002402004290398024201510d00200441d8016a41086a4200370300200442003703d8010c010b200441d8016a41086a200441e8026a2903003703002004200441e0026a2903003703d8010b4200210a02400240200842ffc7afa02556200c420052200e1b0d00200441c0026a4200370300200441b8026a4200370300200441b0026a4200370300200441a8026a4200370300200441a0026a420037030020044200370398024200210d0c010b20044198026a41286a20044198016a41286a29030037030020044198026a41206a20044198016a41206a29030037030020044198026a41186a20044198016a41186a29030037030020044198026a41106a20044198016a41106a29030037030020044198026a41086a20044198016a41086a2903003703002004200429039801370398022009210a0b200441e8016a41286a20044198026a41286a220e290300220c370300200441e8016a41206a20044198026a41206a2211290300220b370300200441e8016a41186a20044198026a41186a22102903002202370300200441e8016a41106a20044198026a41106a22122903002203370300200441e8016a41086a20044198026a41086a22132903002208370300200420042903980222093703e801200441d8026a200c37030020044198026a41386a200b370300200441c8026a2002370300200e200337030020112008370300201020093703002012200d370300200441e0026a20042903d801370300200441e8026a200441d8016a41086a2903003703002004200a3703a00220044201370398022005200f201310e704024020042802cc01450d00200510390b200441d8006a41106a290300210d200441d8006a41286a290300210c200441d8006a41386a29030021032004290360210920042903782108200429038801210220042903582107200429037021060b024020074201520d00200441d0026a200d370300200441c8026a2009370300200441a1026a200129000037000020044198026a41086a41003a0000200441b9026a200141186a290000370000200441b1026a200141106a290000370000200441a9026a200141086a290000370000200441023a00980220044198026a10c9030b200650450d014200210d0c020b024020120d00200420133602980220044198026a10e40420044190016a290300210320042903880121020b2002200310e3040c020b20044198026a41186a200141186a29000037030020044198026a41106a200141106a29000037030020044198026a41086a200141086a29000037030020042001290000370398024201210d0b200441086a41186a20044198026a41186a2205290300220a370300200441086a41106a20044198026a41106a2201290300220b370300200441086a41086a20044198026a41086a290300220937030020042004290398022206370308200441c8026a200c370300200441c0026a220e2008370300200120093703002005200b370300200441b8026a200a3703002004200d37039802200420063703a00220044198026a10e804200429039802500d012004200e360258200441d8006a10e4040c010b42002102420021030b2000200237030020002003370308200441a00d6a24000bea3b04057f047e097f0a7e230041f00c6b2201240020014180016a41186a2202420037030020014180016a41106a2203420037030020014180016a41086a220442003703002001420037038001200141f0006a41c7e5c000410610cb012004200141f0006a41086a22052900003703002001200129007037038001200141f0006a41f4ffc300410b10cb012002200529000037030020032001290070370300200141e8016a20014180016a10df0620012903e8012106200141e8016a41106a2205290300210720012903f0012108200141e8016a41186a22022903002109200141e8016a10b803024020012903f001427f427f20084200200642015122041b22062007420020041b7c220720072006541b22062009420020041b7c220720072006541b580d00420010d1060b2002420037030020054200370300200141e8016a41086a22044200370300200142003703e801200141b0016a41b6e2c400410b10cb012004200141b0016a41086a220a290000370300200120012900b0013703e801200141b0016a41e4e4c400411610cb012002200a290000370300200520012900b001370300200141b0016a200141e8016a10e4060240024020012802b001220a450d00200141e8016a412010e00120012902b40121060c010b41002802d8974e210a420021060b02402006422088a72202450d00200141e8016a41086a200a2002417f6a2204411c6c6a2202410c6a290200370300200141f8016a220b200241146a280200360200200120022902043703e801200642ffffffff0f832004ad4220868421062002280200450d002002280218210420014180016a41086a200241086a2802003602002001200229020037038001200141b0016a41086a200b280200360200200120012903f0013703b001200420014180016a200141b0016a10e5060b02402006422088a72202450d002002411c6c2104200a210203400240200241046a28020041ffffff3f71450d00200228020010390b0240200241106a28020041ffffff3f71450d002002410c6a28020010390b2002411c6a2102200441646a22040d000b0b02402006a72202450d002002411c6c450d00200a10390b20014180026a4200370300200141f8016a4200370300200141e8016a41086a22024200370300200142003703e801200141b0016a41b6e2c400410b10cb012002200141b0016a41086a2204290000370300200120012900b0013703e801200141b0016a4184e4c400410e10cb01200541086a2004290000370000200520012900b001370000200141b0016a200141e8016a412010e401024020012802b0012202450d00024020012802b401450d00200210390b200141e8016a412010e0010b20014180026a22024200370300200141f8016a22044200370300200141e8016a41086a22054200370300200142003703e801200141b0016a41dee8c600410c10cb012005200141b0016a41086a220a290000370300200120012900b0013703e801200141b0016a41cce9c600410810cb012002200a290000370300200420012900b001370300200141b0016a200141e8016a412010e4010240024002400240024002400240024020012802b0012202450d00024020012802b401450d00200210390b200141e8016a412010e00120014180026a22044200370300200141f8016a22024200370300200141e8016a41086a22054200370300200142003703e80120014180016a41a2c0cd00410f10cb01200520014180016a41086a220a29000037030020012001290080013703e80120014180016a41c5c2cd00410d10cb012004200a2900003703002002200129008001370300200141203602d4012001200141e8016a3602d001200141f0006a200141e8016a412010e401024002402001280270220b0d00410221040c010b2001280274210c02400240200141f0006a41086a28020022044104490d002004417c714104460d00200b28000021052001200441786a3602a4012001200b41086a3602a001200b280004210a200141e8006a200141a0016a10c10120012802680d00200141b0016a200141a0016a200128026c10850220012802b001220d450d0020012802b401210e024020012802a401220f450d00200141b8016a280200211041002104024020012802a00122112d00000e020300010b200f417f6a4104490d002001201141056a3602a00120112800012112410121040c020b200e450d00200e41286c450d00200d10390b200142003702840120014100280284ee4d360280012001410d3602dc012001200141d0016a3602d801200120014180016a3602e401200141c4016a4101360200200142013702b401200141949fc5003602b0012001200141d8016a3602c001200141e4016a41b4dfc400200141b0016a103b1a20012802800120012802880110d1010240200128028401450d0020012802800110390b410221040b200c450d00200b10390b024020044102460d00200141c8016a2012360200200141c0016a2010360200200141bc016a200e360200200120043602c4012001200d3602b8012001200a3602b401200120053602b001200141b8016a210b024020052000470d00024020044101460d0020014180016a200b10e606200141f8016a200a360200200141f4016a20014188016a280200360200200141003602e80120012001290380013702ec01200141e8016a10c1020c010b200141f0016a200b10e606200141fc016a200a360200200120123602ec01200141013602e801200141e8016a10c1020b024020012802b40120012802b0016a2000470d00200141c0016a28020041286c4105722204417f4c0d03200410382205450d07200541013a0000200120043602ec01200120053602e801200141013602f00120012802b8012104200141e8016a200141b0016a41106a280200220510ac0220042005200141e8016a10a80241d2c2cd00411420012802e801220420012802f00110e901024020012802ec01450d00200410390b200141e8016a41106a2205200b41086a280200360200200141e8016a41086a2204200b290200370300200141003602ec01200141063a00e801200141e8016a10c90320014180026a42003703002005420037030020044200370300200142003703e80120014180016a41a2c0cd00410f10cb01200420014180016a41086a220529000037030020012001290080013703e80120014180016a41c5c2cd00410d10cb01200241086a20052900003700002002200129008001370000200141e8016a412010e0010c010b20012802bc012204450d00200441286c450d0020012802b80110390b20014180026a4200370300200141f8016a4200370300200141e8016a41086a22044200370300200142003703e80120014180016a41a2c0cd00410f10cb01200420014180016a41086a220529000037030020012001290080013703e80120014180016a41e6c2cd00410510cb01200241086a20052900003700002002200129008001370000200141203602a4012001200141e8016a3602a001200141f0006a200141e8016a412010e40120012802702204450d042001280274210a024002400240200141f0006a41086a280200220b450d004100210502400240024020042d00000e0405000102030b200b417f6a4108490d0220042900012106410121050c040b410221050c020b200b417f6a4108490d0020042900012106410321050c020b200142003702840120014100280284ee4d360280012001410d3602dc012001200141a0016a3602d801200120014180016a3602d001200141c4016a4101360200200142013702b401200141949fc5003602b0012001200141d8016a3602c001200141d0016a41b4dfc400200141b0016a103b1a20012802800120012802880110d1010240200128028401450d0020012802800110390b410421050b0b0240200a450d00200410390b2005417f6a0e03030402040b41c6b9c500413041f8b9c5001035000b1034000b2006422088a7210402402006a722052000470d00200141043602e801200120043602ec01200141e8016a10c1020b200420056a2000470d0120014180026a4200370300200141f8016a4200370300200141e8016a41086a22044200370300200142003703e80120014180016a41a2c0cd00410f10cb01200420014180016a41086a220529000037030020012001290080013703e80120014180016a41e6c2cd00410510cb01200241086a20052900003700002002200129008001370000200141b0016a41002001200110e706200141e8016a412020012802b001220220012802b80110e901024020012802b401450d00200210390b200141023602ec01200141063a00e801200141e8016a10c9030c010b2006422088a7210402402006a722052000470d00200141033602e801200120043602ec01200141e8016a10c1020b200420056a2000470d0020014180026a4200370300200141f8016a4200370300200141e8016a41086a22044200370300200142003703e80120014180016a41a2c0cd00410f10cb01200420014180016a41086a220529000037030020012001290080013703e80120014180016a41e6c2cd00410510cb01200241086a20052900003700002002200129008001370000200141b0016a41022001200110e706200141e8016a412020012802b001220220012802b80110e901024020012802b401450d00200210390b200141013602ec01200141063a00e801200141e8016a10c9030b200141e8016a41f0c8c800410710cb01200141e8016a41186a220b4200370000200142003700f801200141e8016a41106a220441bce3c900410910cb01200141b0016a200141e8016a10e806024020012903b001427f7c4202540d00200141b0016a41106a290300210620014180016a41186a420037030020014180016a41106a420037030020014180016a41086a220242003703002001420037038001200141f0006a41d1e5c000410910cb012002200141f0006a41086a22052900003703002001200129007037038001200141f0006a41cab8c300410310cb01200341086a200529000037000020032001290070370000200141d8006a20014180016a10ee04200141c8006a2001290360420020012802581b220742e80780420042e807420010d30b200141e8016a41f0c8c800410710cb01200441086a420037000020044200370000200441bce3c900410910cb01200141003602b801200142013703b001200141b0016a41004104107720012802b001220520012802b80122026a20063e00002001200241046a22023602b80120012903482208200742e807827c2206427f524100200141c8006a41086a2903002006200854ad7c501b2100024020012802b401220a2002470d00200141b0016a20024101107720012802b401210a20012802b001210520012802b80121020b2006427f20001b2106200520026a41013a00002001200241016a22023602b8010240200a20026b41074b0d00200141b0016a20024108107720012802b001210520012802b80121020b200520026a20063700002001200241086a22023602b801200141e8016a412020012802b0012205200210e90120012802b401450d00200510390b20014180016a41186a2205420037030020014180016a41106a2202420037030020014180016a41086a220a42003703002001420037038001200141f0006a41e9e5c000410a10cb01200a200141f0006a41086a22002900003703002001200129007037038001200141f0006a41f888c800410610cb01200520002900003703002002200129007037030020014180016a412010e0012005420037030020024200370300200a42003703002001420037038001200141f0006a41e9e5c000410a10cb01200a20002900003703002001200129007037038001200141f0006a419889c800410c10cb01200520002900003703002002200129007037030020014180016a412010e001200141e8016a41dcafca00411210cb01200b4200370000200142003700f801200441b0b1ca00411110cb01200141306a200141e8016a10e906200141306a41106a29030021132001290338211420012802302105200141e8016a4201420042808090bbbad6adf00d420042c0843d420010a8010240024020012802e8014101470d00427f2109427f21070c010b200141f8016a2903002107200141e8016a41086a29030021090b200141e8016a10b803200141e8016a41086a20014198026a20014190026a290300501b290300210620014198016a420037030020014180016a41106a420037030020014180016a41086a220a42003703002001420037038001200141f0006a41c7e5c000410610cb01200a200141f0006a41086a22002900003703002001200129007037038001200141f0006a41f4ffc300410b10cb01200241086a200029000037000020022001290070370000200141b0016a20014180016a10df0620012903b801210820012903b0012115200141b0016a4203420042808090bbbad6adf00d420042a08d06420010a80120062008420020154201511b220820082006561b21080240024020012802b0014101470d00427f2115427f21160c010b200141b0016a41106a2903002116200141b0016a41086a29030021150b200141206a200642808090bbbad6adf00d8222174200428080e4ceceb58bbc03420010d30b200141106a2001290320200141206a41086a29030042808090bbbad6adf00d420010d20b200141b0016a2008200642808090bbbad6adf00d80428080e4ceceb58bbc037e20174202882001290310428080c89d9deb96f80656200141106a41086a29030022174200522017501bad7c7c2217200820175622021b22182017200820021b22197d42002018201954ad7d42808090bbbad6adf00d42002006420120064201561b420010a8010240024020012802b0014101470d00427f2106427f21180c010b200141c0016a2903002118200141b0016a41086a29030021060b200141b0016a200620182006201842808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f211a427f211b0c010b200141c0016a290300211b200141b8016a290300211a0b200141b0016a201520162015201642808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f2119427f211c0c010b200141c0016a290300211c200141b8016a29030021190b200141b0016a2019201c42808090bbbad6adf00d4200428080a0f6f4acdbe01b420010a80120012802b0014101460d012009201442808090bbbad6adf00d20051b221454210220072013420020051b22195121052007201954210a200141c0016a2200290300211c200141b8016a220b2903002113200141b0016a201520162006201842808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f2118427f21160c010b20002903002116200b29030021180b2002200a20051b2102200141b0016a2013201c201a201b42808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f211c427f21130c010b200141c0016a2903002113200141b8016a290300211c0b2019200720021b21062014200920021b21150240024020082017540d00427f2117200141b0016a427f2018201c7c220820082018542202201620137c2002ad7c220820165420082016511b22021b427f200820021b2015200642808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f21080c010b200141c0016a2903002108200141b8016a29030021170b427f200620087c201520177c22162015542202ad7c22082002200820065420082006511b22021b22062007427f201620021b2208200956200620075620062007511b22021b21062008200920021b21070c010b200141b0016a42002018201c7d22082008201856201620137d2018201c54ad7d220820165620082016511b22021b4200200820021b2015200642808090bbbad6adf00d420010a8010240024020012802b0014101470d00427f2108427f21160c010b200141c0016a2903002116200141b8016a29030021080b4200200620167d2015200854ad7d2216201520087d2208201556201620065620162006511b22021b220620074200200820021b2208200956200620075620062007511b22021b21062008200920021b21070b200141e8016a41dcafca00411210cb01200441086a420037000020044200370000200441b0b1ca00411110cb01200120063703b801200120073703b001200141e8016a4120200141b0016a411010e90120014198016a420037030020014180016a41106a420037030020014180016a41086a220242003703002001420037038001200141f0006a41d1e5c000410910cb012002200141f0006a41086a22042900003703002001200129007037038001200141f0006a41cdb8c300410910cb01200341086a20042900003700002003200129007037000020014180016a10dd04220241ff01714102460d0220014180016a412010e0012002410171450d0220014180016a41186a420037030020014180016a41106a420037030020014180016a41086a220242003703002001420037038001200141f0006a41cde5c000410410cb012002200141f0006a41086a22042900003703002001200129007037038001200141f0006a41c0d7c700410b10cb01200341086a200429000037000020032001290070370000200141e8016a20014180016a10ea060240024020012d00e80122024102470d00200141b0016a41186a20014181026a290000370300200141b0016a41106a200141f9016a290000370300200141b0016a41086a200141f1016a290000370300200120012900e9013703b0010c010b20014180016a412010e001200141b0016a41186a20014181026a290000370300200141b0016a41106a200141f9016a290000370300200141b0016a41086a200141f1016a290000370300200120012900e9013703b0010240200241037122024103460d0020020e03010001010b20014198016a420037030020014190016a420037030020014180016a41086a220242003703002001420037038001200141f0006a41cde5c000410410cb012002200141f0006a41086a22042900003703002001200129007037038001200141f0006a4198d6c700410c10cb01200341086a200429000037000020032001290070370000200141086a20014180016a412010ce0341002104200141e8016a200128020c410020012802081b220010c10520014180016a20012802e801220a20012802f00110eb060240024020012802800122050d00200142003702a40120014100280284ee4d22053602a001410021020c010b2001290284012106200120053602a001200120063702a4012006422088a721022006a721040b024020012802ec01450d00200a10390b02400240200241ff014b0d0020014180016a41186a220b200141b0016a41186a29030037030020014180016a41106a2212200141b0016a41106a29030037030020014180016a41086a220e200141b0016a41086a290300370300200120012903b00137038001024020022004470d00200141a0016a200410c20120012802a001210520012802a401210420012802a80121020b200520024105746a220a200129038001370000200a41186a200b290300370000200a41106a2012290300370000200a41086a200e2903003700002001200241016a3602a8012000200141a0016a10c5050c010b412010382202450d02200220012903b001370000200241186a200141b0016a41186a290300370000200241106a200141b0016a41106a290300370000200241086a200141b0016a41086a29030037000020014281808080103702ec01200120023602e801200041016a220a200141e8016a10c5052002103920014180016a41186a420037030020014180016a41106a420037030020014180016a41086a220242003703002001420037038001200141f0006a41cde5c000410410cb012002200141f0006a41086a22002900003703002001200129007037038001200141f0006a4198d6c700410c10cb01200341086a2000290000370000200320012900703700002001200a3602e80120014180016a4120200141e8016a410410e9010b200441ffffff3f71450d00200510390b20014198016a2205420037030020014190016a220a420037030020014180016a41086a220242003703002001420037038001200141f0006a41cde5c000410410cb012002200141f0006a41086a22042900003703002001200129007037038001200141f0006a41fcd7c700411310cb01200341086a220020042900003700002003200129007037000020014180016a412010e00120054200370300200a4200370300200242003703002001420037038001200141f0006a41cde5c000410410cb01200220042900003703002001200129007037038001200141f0006a41fcd8c700410810cb01200020042900003700002003200129007037000020014180016a412010e001200141f00c6a24000f0b1032000b10b301000b41d0a2c100412b41fca2c1001035000bd20603047f017e087f230041e0006b220224002002412036021420022001360210200241186a2001412010e40102400240200228021822030d00200041003602000c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10c1010240024020022802080d0002400240200228020c2205200228022c411c6e2201200120054b1bad421c7e2206422088a70d002006a72207417f4c0d000240024020070d00410421080c010b200710382208450d020b41002101200241003602402002200836023820022007411c6e36023c02402005450d000340200241c8006a200241286a10aa070240024020022802482207450d0020022802502109200228024c210a200241c8006a200241286a10aa0702402002280248220b450d00200228024c210c200228022c220d41044f0d02200c41ffffff3f71450d00200b10390b200a41ffffff3f71450d00200710390b2002280238210702402001450d002001411c6c21052007210103400240200141046a28020041ffffff3f71450d00200128020010390b0240200141106a28020041ffffff3f71450d002001410c6a28020010390b2001411c6a2101200541646a22050d000b0b200228023c2201450d052001411c6c450d05200710390c050b2002280250210e2002200d417c6a36022c20022002280228220d41046a360228200d280000210d02402001200228023c470d00200241386a200110800320022802382108200228024021010b20082001411c6c6a2201200a36020420012007360200200141186a200d360200200141146a200e360200200141106a200c3602002001410c6a200b360200200141086a20093602002002200228024041016a22013602402005417f6a22050d000b200228023821080b2008450d022000200229023c370204200020083602000c030b1034000b1032000b2002420037023c20024100280284ee4d3602382002410d3602342002200241106a3602302002200241386a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241306a360258200241c4006a41b4dfc400200241c8006a103b1a2002280238200228024010d1010240200228023c450d00200228023810390b200041003602000b2004450d00200310390b200241e0006a24000befe50108347f027e037f017e057f017e317f067e230041f00b6b2203240020034180086a22044200370300200341f8076a22054200370300200341e8076a41086a22064200370300200342003703e807200341d8066a41f1d5c400410d10cb012006200341d8066a41086a290000370300200320032900d8063703e807200341e8066a418bd6c400410c10cb012004200341e8066a41086a290000370300200520032900e806370300200341f8026a200341e8076a412010c703410221070240024020032802880422084102470d0041002109200341c8006a410041800110d60b1a200341386a41086a4200370300200342003703384106210a41e400210b41c801210c4101210d4100210e4101210f4101211041012111410021080c010b200341c8006a200341f8026a41800110d40b1a200341386a41086a200341b4046a2902003703002003200341ac046a290200370338200341bc046a2802002112200341a8046a280200210d200341a4046a280200210c200341a0046a28020021072003419c046a280200210b20034198046a280200210a20034194046a280200211320034190046a2802002109200328028c042114200328028404210e200328028004210f20032802fc03211020032802f80321110b200341f0086a41086a4200370300200342003703f008024002400240410510382204450d00200441002800ecd544360000200441046a41002d00f0d5443a0000200320043602a80720034285808080d0003702ac07200341a8076a410541201077200341e8076a41186a4200370300200341e8076a41106a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41cde5c000410410cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a41e8d5c700410e10cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341f8026a200341e8076a10f0070240024020032d00f8024101460d00200341a8086a41186a4200370300200341a8086a41106a4200370300200341b0086a4200370300200342003703a8080c010b200341a8086a41186a20034191036a290000370300200341a8086a41106a20034189036a290000370300200341b0086a20034181036a290000370300200320032900f9023703a8080b024020032802ac07221520032802b00722066b411f4b0d00200341a8076a20064120107720032802ac07211520032802b00721060b20032802a807221620066a220420032903a808370000200441086a200341a8086a41086a290300370000200441106a200341a8086a41106a290300370000200441186a200341a8086a41186a2903003700002003200641206a22043602b007200341e8076a20162004109f01200341f8026a41086a2206200541086a2217290200370300200320052902003703f802200341e8076a41086a2204280200211820032802f407211920032802ec07211a20032802e807211b200341e8076a41186a4200370300200341e8076a41106a420037030020044200370300200342003703e807200341d8066a41cde5c000410410cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a41b8d8c700410a10cb012017200341e8066a41086a290000370000200520032900e806370000200341e8016a200341e8076a412010de0302402015450d00201610390b200341c8016a41086a2006290300370300200320032903f8023703c801200341a8076a41f1d5c400410d10cb01200341e8076a41fed5c400410d10cb01200320003602e8062003200341e8066a410410cc013703e80120034184036a200341e8066a41046a3602002003200341e8016a41086a3602fc022003200341e8066a360280032003200341e8016a3602f802200341f0086a200341f8026a108301024020032802f808221541206a2204417f4c0d000240024020040d00410121060c010b200410382206450d020b41002116200341003602b008200320063602a808200320043602ac0802402004410f4b0d00200341a8086a41004110107720032802ac08210420032802a808210620032802b00821160b200620166a221720032900a807370000201741086a200341a8076a41086a2900003700002003201641106a22163602b0080240200420166b410f4b0d00200341a8086a20164110107720032802ac08210420032802a808210620032802b00821160b200620166a221720032900e807370000201741086a200341e8076a41086a2900003700002003201641106a22163602b00820032802f00821170240200420166b20154f0d00200341a8086a20162015107720032802a808210620032802b00821160b200620166a2017201510d40b1a2003201620156a22043602b008024020032802f408450d0020032802f00810390b200341f8026a20032802a8082206200410c7030240024020032802880422164102460d002006200410e001200341f0086a200341f8026a41900110d40b1a20034198026a2204200341bc046a221528020036020020034190026a2217200341b4046a221c290200370300200341e8016a41206a221d200341ac046a221e290200370300200341e8016a41186a221f200341a4046a2220290200370300200341e8016a41106a22212003419c046a2222290200370300200341e8016a41086a222320034194046a22242902003703002003200329028c043703e801024020032802ac08450d00200610390b200341f8026a200341f0086a41900110d40b1a2003418c046a20032903e80137020020242023290300370200202220212903003702002020201f290300370200201e201d290300370200201c2017290300370200201520042802003602002003201636028804200341a8086a41186a22044200370300200341a8086a41106a22064200370300200341a8086a41086a22164200370300200342003703a808200341a8076a41f1d5c400410d10cb012016200341a8076a41086a290000370300200320032900a8073703a808200341e8076a418bd6c400410c10cb012004200341e8076a41086a290000370300200620032900e807370300200341003602f007200342013703e807200341f8026a200341e8076a10f107200341a8086a412020032802e80720032802f00710e90120032802ec07450d0120032802e80710390c010b20032802ac08450d00200610390b20034180086a4200370300200341f8076a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41f1d5c400410d10cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a418bd6c400410c10cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341f8026a200341e8076a412010c703410221250240024020032802880422264102470d0041002127200341e8016a410041800110d60b1a200341d8016a41086a4200370300200342003703d8014106212841e400212941c801212a4101212b4100212c4101212d4101212e4101212f410021260c010b200341e8016a200341f8026a41800110d40b1a200341d8016a41086a200341b4046a2902003703002003200341ac046a2902003703d801200341bc046a2802002130200341a8046a280200212b200341a4046a280200212a200341a0046a28020021252003419c046a280200212920034198046a280200212820034194046a280200213120034190046a2802002127200328028c042132200328028404212c200328028004212d20032802fc03212e20032802f803212f0b20012802042133200128020021342001280208213520034188096a2204420037030020034180096a22364200370300200341f0086a41086a22064200370300200342003703f008200341d8066a41d8adc300410b10cb012006200341d8066a41086a290000370300200320032900d8063703f008200341e8066a4184b0c300411310cb012004200341e8066a41086a290000370300203620032900e806370300200320003602f802200341f0086a4120200341f8026a410410e901200520032903c801370000200541086a200341c8016a41086a29030037000020032903f80721372003290380082138200341f8026a410041800210d60b1a200341a0056a2239420037030020034198056a203837030020034190056a20373703002003418c056a201936020020034188056a201836020020034184056a201a360200200341a8056a42003703002003201b36028005200341c0003602f8042035203541ffffffff0371470d0020354102742204417f4c0d000240024020040d00410421060c010b200410382206450d020b41002116200341003602e80b200320063602e00b2003200441027622043602e40b024002400240024002400240200420354f0d00200341e00b6a4100203510ab0120032802e00b210620032802e80b21160c010b20350d00200341003602e80b0c010b200620164102746a210441002106034020042006360200200441046a21042035200641016a2206470d000b2003203520166a223a3602e80b203a4102490d0020032802e00b213b203aad213c41c00021040340203ca72206417f6a213d200620066774417f6a213e03400240200441c000490d0020032802a405223fad42208620032802a0052240ad84223742037c2238a72141203742027c2242a72143203742017c2237a721442038422088a721452042422088a721462037422088a7214741e5f0c18b06214841eec8819903214941b2da88cb07214a41f4ca81d906214b410a214c200328029005224d214e200328029405224f215020032802980522512152200328029c0522532154204d2155204f21562051215720532158204d2159204f215a2051215b2053215c200328028c0522042101200328028805220621172003280284052216211c2003280280052215211d2004211e2006211f20162120201521212004212220062123201621242015215d20032903a8052237422088a7225e215f2037a722602161205e216220602163205e21642060216541f4ca81d906216641b2da88cb07216741eec8819903216841e5f0c18b06216941f4ca81d906216a41b2da88cb07216b41eec8819903216c41e5f0c18b06216d41e5f0c18b06216e41eec8819903216f41b2da88cb07217041f4ca81d90621710340201620496a2249ad422086201520486a2248ad842045ad4220862041ad84852237422088a74110772241205a6a2245ad4220862037a7411077225a20596a2259ad842016ad4220862015ad84852237422088a7410c77221620496a2215ad4220862037a7410c77224920486a2248ad842041ad422086205aad84852237422088a7410877224120456a2245ad4220862037a7410877227220596a2259ad842016ad4220862049ad84852237a741077722162004204b6a2249ad4220862006204a6a224aad84205ead4220862060ad84852238422088a7411077225e205c6a2260ad4220862038a7411077224b205b6a225aad842004ad4220862006ad84852238422088a7410c77220420496a22066a2249ad4220862006ad4220862038a7410c772206204a6a224aad84205ead422086204bad84852238422088a7410877225e20606a225bad4220862038a74108772260205a6a225cad842004ad4220862006ad84852238422088a74107772204204a6a2206ad842060ad4220862041ad84852242422088a7411077226020456a2241ad4220862042a7411077224520596a2259ad842016ad4220862004ad84852242422088a7410c77220420496a224bad4220862042a7410c77221620066a224aad842060ad4220862045ad84852242422088a7410877226020416a225aad4220862042a7410877224520596a2259ad842004ad4220862016ad84852242a741077721042038a7410777220620156a2216ad4220862037422088a7410777221520486a2241ad842072ad422086205ead84852237422088a7411077225e205b6a225bad4220862037a74110772272205c6a2273ad842006ad4220862015ad84852237422088a7410c77220620166a2249ad4220862037a7410c77221620416a2248ad84205ead4220862072ad84852237422088a74108772241205b6a225cad4220862037a7410877225e20736a225bad842006ad4220862016ad84852237a74107772116201c20686a2206ad422086201d20696a2215ad842046ad4220862043ad84852238422088a7411077224320566a2246ad4220862038a7411077225620556a2255ad84201cad422086201dad84852238422088a7410c77221c20066a2206ad4220862038a7410c77221d20156a2215ad842043ad4220862056ad84852238422088a7410877224320466a2246ad4220862038a7410877226820556a2255ad84201cad422086201dad84852238a7410777221c200120666a221dad422086201720676a2256ad84205fad4220862061ad84852274422088a7411077225f20586a2258ad4220862074a7411077226120576a2257ad842001ad4220862017ad84852274422088a7410c772201201d6a22176a221dad4220862017ad4220862074a7410c77221720566a2256ad84205fad4220862061ad84852274422088a7410877225f20586a2258ad4220862074a7410877226120576a2257ad842001ad4220862017ad84852274422088a7410777220120566a2217ad842061ad4220862043ad84852275422088a7411077224320466a2246ad4220862075a7411077225620556a2255ad84201cad4220862001ad84852275422088a7410c772201201d6a2266ad4220862075a7410c77221c20176a2267ad842043ad4220862056ad84852275422088a7410877226120466a2256ad4220862075a7410877224620556a2255ad842001ad422086201cad84852275a741077721012074a7410777221720066a2206ad4220862038422088a7410777221c20156a2215ad842068ad422086205fad84852238422088a7411077221d20586a2258ad4220862038a7411077224320576a2257ad842017ad422086201cad84852238422088a7410c77221720066a2268ad4220862038a7410c77220620156a2269ad84201dad4220862043ad84852238422088a7410877224320586a2258ad4220862038a7410877225f20576a2257ad842017ad4220862006ad84852238a7410777211c2020206c6a2206ad4220862021206d6a2215ad842047ad4220862044ad84852274422088a7411077221720506a221dad4220862074a74110772244204e6a2247ad842020ad4220862021ad84852274422088a7410c77222020066a2206ad4220862074a7410c77222120156a2215ad842017ad4220862044ad84852274422088a74108772217201d6a221dad4220862074a7410877224420476a2247ad842020ad4220862021ad84852274a74107772220201e206a6a2221ad422086201f206b6a224ead842062ad4220862063ad84852276422088a7411077225020546a2254ad4220862076a7411077226220526a2252ad84201ead422086201fad84852276422088a7410c77221e20216a221f6a2221ad422086201fad4220862076a7410c77221f204e6a224ead842050ad4220862062ad84852276422088a7410877226220546a2254ad4220862076a7410877225020526a2252ad84201ead422086201fad84852276422088a7410777221e204e6a221fad842050ad4220862017ad84852277422088a74110772217201d6a221dad4220862077a7411077224e20476a226cad842020ad422086201ead84852277422088a7410c77221e20216a226aad4220862077a7410c772220201f6a226bad842017ad422086204ead84852277422088a74108772263201d6a2250ad4220862077a74108772247206c6a224ead84201ead4220862020ad84852277a7410777211e2076a7410777221720066a2206ad4220862074422088a7410777221d20156a2215ad842044ad4220862062ad84852274422088a7411077221f20546a2220ad4220862074a7411077222120526a2252ad842017ad422086201dad84852274422088a7410c77221720066a226cad4220862074a7410c77220620156a226dad84201fad4220862021ad84852274422088a7410877224420206a2254ad4220862074a7410877226220526a2252ad842017ad4220862006ad84852274a741077721202024206f6a2206ad422086205d206e6a2215ad84203fad4220862040ad84852276422088a74110772217204f6a221dad4220862076a7411077221f204d6a2221ad842024ad422086205dad84852276422088a7410c77222420066a2206ad4220862076a7410c77225d20156a2215ad842017ad422086201fad84852276422088a74108772217201d6a221dad4220862076a7410877221f20216a2221ad842024ad422086205dad84852276a74107772224202220716a225dad422086202320706a224dad842064ad4220862065ad84852278422088a7411077224f20536a2253ad4220862078a7411077223f20516a2251ad842022ad4220862023ad84852278422088a7410c772222205d6a22236a225dad4220862023ad4220862078a7410c772223204d6a224dad84204fad422086203fad84852278422088a7410877224020536a2253ad4220862078a7410877224f20516a2251ad842022ad4220862023ad84852278422088a74107772222204d6a2223ad84204fad4220862017ad84852279422088a74110772217201d6a221dad4220862079a7411077224d20216a2221ad842024ad4220862022ad84852279422088a7410c772222205d6a2271ad4220862079a7410c77222420236a2270ad842017ad422086204dad84852279422088a74108772265201d6a224fad4220862079a7410877223f20216a224dad842022ad4220862024ad84852279a741077721222078a7410777221720066a2206ad4220862076422088a7410777221d20156a2215ad84201fad4220862040ad84852276422088a7411077221f20536a2221ad4220862076a7411077222320516a2224ad842017ad422086201dad84852276422088a7410c77221720066a226fad4220862076a7410c77220620156a226ead84201fad4220862023ad84852276422088a7410877224020216a2253ad4220862076a7410877226420246a2251ad842017ad4220862006ad84852276a741077721242042422088a741077721152037422088a741077721062075422088a7410777211d2038422088a741077721172077422088a741077721212074422088a7410777211f2079422088a7410777215d2076422088a74107772123204c417f6a224c0d000b20032903a005213720032903a8052138200341e8066a413c6a224c204b360200200341e8066a41386a224b204a360200200341e8066a41346a224a2049360200200341e8066a412c6a22492066360200200341e8066a41286a22662067360200200341e8066a41246a22672068360200200341e8066a411c6a2268206a360200200341e8066a41186a226a206b360200200341e8066a41146a226b206c360200200320483602980720032069360288072003206d3602f806200320713602f406200320703602f0062003206f3602ec062003206e3602e806200341a8076a413c6a22482004360200200341a8076a41386a22692006360200200341a8076a41346a226c2016360200200341a8076a412c6a226d2001360200200341a8076a41286a226e2017360200200341a8076a41246a226f201c360200200341a8076a411c6a2270201e360200200341a8076a41186a221e201f360200200341a8076a41146a221f2020360200200320153602d8072003201d3602c807200320213602b807200320223602b407200320233602b007200320243602ac072003205d3602a807200341e8076a413c6a2220205c360200200341e8076a41386a2221205b360200200341e8076a41346a2222205a360200200341e8076a412c6a22232058360200200341e8076a41286a22242057360200200341e8076a41246a225d2056360200200341e8076a411c6a22562054360200200341e8076a41186a22542052360200200341e8076a41146a22522050360200200320593602980820032055360288082003204e3602f807200320533602f407200320513602f0072003204f3602ec072003204d3602e807200341a8086a413c6a224d205e360200200341a8086a41386a224f2060360200200341a8086a41346a22512045360200200341a8086a412c6a2253205f360200200341a8086a41286a225e2061360200200341a8086a41246a22602046360200200341a8086a411c6a22452062360200200341a8086a41186a22462063360200200341a8086a41146a224e2047360200200320413602d808200320433602c808200320443602b808200320643602b408200320653602b0082003203f3602ac08200320403602a808200328028005210420032802840521062003280288052116200328028c05211520032802900521012003280294052117200328029805211c200328029c05211d200341f0086a41386a223f2038370300200341f0086a41286a22402038370300200341f0086a41186a22412038370300200341f0086a41086a203941086a29030022423703002003203742037c22743e02a009200341f0086a41346a224320744220883e02002003203742027c22743e029009200341f0086a41246a224420744220883e02002003203742017c22743e028009200341f0086a41146a224720744220883e02002003203929030022743703f008200320383703a8052003203742047c22373e02a005200320374220883e02a40520032802e806215020032802ec06215520032802f006215720032802f406215820032802a807215920032802ac07215a20032802b007215b20032802b407215c20032802e807215f20032802ec07216120032802f007216220032802f407216320032802a808216420032802f408216520032802ac08217120032802b0082172200320032802fc0820032802b4086a3602b403200320722042a76a3602b0032003206520716a3602ac03200320642074a76a3602a8032003201d20636a3602a4032003201c20626a3602a0032003201720616a36029c0320032001205f6a3602980320032015205c6a3602940320032016205b6a3602900320032006205a6a36028c032003200420596a360288032003205841f4ca81d9066a360284032003205741b2da88cb076a360280032003205541eec88199036a3602fc022003205041e5f0c18b066a3602f802206b2802002150206a280200215520682802002157201f280200211f201e280200211e2070280200215820522802002152205428020021542056280200215620472802002147204e280200214e204128020021412046280200214620032802f806215920032802b807215a20032802f807215b200328028009215c20032802b808215f2003200341f0086a411c6a28020020452802006a3602f4032003204120466a3602f00320032047204e6a3602ec032003205c205f6a3602e8032003201d20566a3602e4032003201c20546a3602e0032003201720526a3602dc0320032001205b6a3602d8032003201520586a3602d40320032016201e6a3602d00320032006201f6a3602cc0320032004205a6a3602c8032003205741f4ca81d9066a3602c4032003205541b2da88cb076a3602c0032003205041eec88199036a3602bc032003205941e5f0c18b066a3602b8032067280200211e2066280200211f20492802002141206f2802002145206e2802002146206d2802002147205d280200215d2024280200212420232802002123204428020021442060280200216020402802002140205e280200215e200328028807214920032802c807214e2003280288082150200328029009215220032802c80821542003200341f0086a412c6a28020020532802006a3602b40420032040205e6a3602b0042003204420606a3602ac042003205220546a3602a8042003201d20236a3602a4042003201c20246a3602a00420032017205d6a36029c042003200120506a360298042003201520476a360294042003201620466a360290042003200620456a36028c0420032004204e6a360288042003204141f4ca81d9066a360284042003201f41b2da88cb076a360280042003201e41eec88199036a3602fc032003204941e5f0c18b066a3602f803204a280200211e204b280200211f204c2802002123206c28020021242069280200215d204828020021532022280200212220212802002121202028020021202043280200215e20512802002151203f2802002160204f280200214f200328029807213f20032802d8072140200328029808214120032802a009214320032802d80821442003200341f0086a413c6a280200204d2802006a3602f40420032060204f6a3602f0042003205e20516a3602ec042003204320446a3602e8042003201d20206a3602e4042003201c20216a3602e0042003201720226a3602dc042003200120416a3602d8042003201520536a3602d40420032016205d6a3602d0042003200620246a3602cc042003200420406a3602c8042003202341f4ca81d9066a3602c4042003201f41b2da88cb076a3602c0042003201e41eec88199036a3602bc042003203f41e5f0c18b066a3602b80441002104200341003602f8040b200341f8026a20044102746a35020021372003200441016a22043602f804203e203c20377e2237a7490d000b203d203a4f0d03203a2037422088a722064d0d02203b203d4102746a221628020021152016203b20064102746a220628020036020020062015360200203c427f7c213c203d41014b0d000b0b20032802e80b2101024020274101470d0020012031490d00200320313602e80b203121010b2001410274210420032802e00b221c21060240024003402004450d012004417c6a210420062802002115200641046a22162106203520154d0d000b200341f0086a41186a221d203420154105746a220641186a290000370300200341f0086a41106a2215200641106a290000370300200341f0086a41086a221e200641086a290000370300200320062900003703f008412010382217450d06201720032903f008370000201741186a201d290300370000201741106a2015290300370000201741086a201e29030037000020034281808080103702ac08200320173602a808024003402004450d012004417c6a210420162802002115201641046a22062116203520154d0d000b200341f0086a41186a221e203420154105746a220441186a290000370300200341f0086a41106a221f200441106a290000370300200341f0086a41086a2220200441086a290000370300200320042900003703f008201c20014102746a2116410121044101211d03400240201d2004470d00200341a8086a20044101109e0220032802a80821170b2017201d4105746a220420032903f008370000200441186a201e290300370000200441106a201f290300370000200441086a20202903003700002003201d41016a221d3602b008034020162006460d0220062802002104200641046a22152106203520044d0d000b201e203420044105746a220441186a290000370300201f200441106a2900003703002020200441086a290000370300200320042900003703f00820032802ac082104201521060c000b0b200341e8026a41086a200341a8086a41086a2802002204360200200320032903a8083703e8020c010b200342003702ec024100210420034100280284ee4d3602e8020b02400240024020042001460d0041002802d0a94e41014d0d0041002802cca94e210441002802c8a94e210641002802d4a94e21162003418c096a41b8c0cd00360200200341f0086a41106a4201370300200341a4096a41c894cc00ad428080808080058437020020034198096a41a794cc00ad4280808080900484370300200341f0086a41206a4200370300200341f0086a41086a41133602002003418c94cc003602fc0820034281808080c0063702ac09200341003602a0092003419494cc003602f408200341023602f008200641b8c0cd00201641024622161b200341f0086a200441c0a4c00020161b28021011030020032802e00b221c450d010b20032902e40b213720034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341d8066a41d8adc300410b10cb012004200341d8066a41086a290000370300200320032900d8063703f008200341e8066a41b0b0c300411610cb01203641086a200341e8066a41086a290000370000203620032900e8063700002037422088a7220641027441046a2204417f4c0d050240024020040d00410121160c010b200410382216450d070b200341003602b008200320043602ac08200320163602a808200341a8086a200610ac020240024020060d0020032802a808210120032802b00821040c010b2006410274211620032802b0082104201c2106034020062802002115024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b200641046a210620032802a808220120046a20153600002003200441046a22043602b0082016417c6a22160d000b0b200341f0086a41202001200410e901024020032802ac08450d00200110390b203742ffffffff0383500d01201c10390c010b20034180086a4200370300200341e8076a41106a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41d8adc300410b10cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a41b0b0c300411610cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341e8076a412010e0010b200341a8076a200341e8026a10f2070240024020032802a8072217450d0020032902ac07213720034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341d8066a41d8adc300410b10cb012004200341d8066a41086a290000370300200320032900d8063703f008200341e8066a41fcb0c300411310cb01203641086a200341e8066a41086a290000370000203620032900e8063700002037422088a722044105744104722206417f4c0d05200610382216450d06200341003602b008200320063602ac08200320163602a808200341a8086a200410ac020240024020040d0020032802a808210120032802b00821060c010b2004410574211520032802b0082106201721040340024020032802ac0820066b411f4b0d00200341a8086a20064120107720032802b00821060b20032802a808220120066a22162004290000370000201641086a200441086a290000370000201641106a200441106a290000370000201641186a200441186a2900003700002003200641206a22063602b008200441206a2104201541606a22150d000b0b200341f0086a41202001200610e901024020032802ac08450d00200110390b203742ffffff3f83500d01201710390c010b20034180086a4200370300200341f8076a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41d8adc300410b10cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a41fcb0c300411310cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341e8076a412010e0010b0240203341ffffff3f71450d00203410390b20034190066a200341e8026a41086a2802003602002003419c066a200241086a280200360200200320032903e802370388062003200229020037029406200341f8026a200341c8006a41800110d40b1a20034194046a20133602002003418c046a2014360200200341b4046a200341386a41086a2903003702002003200d3602a8042003200c3602a404200320073602a0042003200b36029c042003200a36029804200320093602900420032008360288042003200e360284042003200f36028004200320103602fc03200320113602f803200320123602bc04200320032903383702ac04200341c0046a200341e8016a41800110d40b1a200341f0056a202b360200200341ec056a202a360200200341e8056a2025360200200341e4056a2029360200200341e0056a2028360200200341dc056a2031360200200341d8056a2027360200200341d4056a2032360200200341d0056a2026360200200341cc056a202c360200200341c8056a202d360200200341c4056a202e360200200341c0056a202f360200200341b0066a2019360200200341ac066a2018360200200341a8066a201a36020020034184066a2030360200200341f4056a20032903d801370200200341fc056a200341d8016a41086a2903003702002003201b3602a406200341bc066a200341c8016a41086a290300370200200341b4066a20032903c801370200200320003602a006200341a8086a2000108d04200341f0086a20032802a808220420032802b008220610e6030240024020032802f008225d450d002004200610e00120032902f40821370c010b41002802d8974e215d420021370b024020032802ac08450d00200410390b20034188096a2204420037030020034180096a224f4200370300200341f0086a41086a22064200370300200342003703f008200341a8086a41ecc0cc00410510cb012006200341a8086a41086a2216290000370300200320032900a8083703f008200341a8086a41c49ac300410a10cb0120042016290000370300204f20032900a808370300200341a8086a200341f0086a412010e6030240024020032802a80822040d00200342003702e40b200341002802d8974e3602e00b0c010b200320032902ac083702e40b200320043602e00b0b200341e8076a41186a22224200370300200341e8076a41106a22234200370300200341e8076a41086a22214200370300200342003703e807200341d8066a41c7e5c000410610cb012021200341d8066a41086a290000370300200320032900d8063703e807200341e8066a419081c400410610cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341306a200341e8076a412010ce03200342003702cc06200341002802d8974e3602c8062037422088a72204450d022003280234410020032802301b2124205d20044102746a211e200341c1076a21474100280284ee4d214e200341f0086a410172211f200341b4076a2150205d21010340200341f0086a2001280200220410d20320032802f008221620032802f80810d30341ff01712106024020032802f408450d00201610390b024020064107460d000240024002400240024002400240024020060e0700080801020303000b200341a8076a2004109b0720032802a8072106200320032802b00722173602dc06200320063602d806200341e8076a2006201710e4010240024020032802e807221c0d00410221164101211c0c010b20032802ec07214b200320032802f0073602ec062003201c3602e806200341286a200341e8066a10c1010240024020032802280d0020032802ec062216200328022c2215490d002015417f4c0d0f0240024020150d004101211d0c010b20151038221d450d11201d4100201510d60b1a0b201d20032802e8062220201510d40b21522003201620156b3602ec062003202020156a3602e806200341206a200341e8066a10c101024020032802200d0020032802ec06221620032802242220490d002020417f4c0d100240024020200d00410121440c010b202010382244450d1220444100202010d60b1a0b204420032802e8062245202010d40b21540240201620206b2216450d0020032016417f6a3602ec062003204520206a225541016a3602e806410021162015214520202146024020552d00000e020400010b4101211620152145202021460c030b2020450d00205410390b2015450d00205210390b200342003702ac082003204e3602a8082003410d3602ec082003200341d8066a3602e8082003200341a8086a3602ec0b2003410136028409200342013702f408200341949fc5003602f0082003200341e8086a36028009200341ec0b6a41b4dfc400200341f0086a103b1a20032802a80820032802b00810d101024020032802ac08450d0020032802a80810390b41022116205e211d20602115203f21452040214420412120204321460b0240204b450d00201c10390b4101211c024020164102470d002046214320202141204421402045213f20152160201d215e410221160c010b2006201710e0014100211c2046214320202141204421402045213f20152160201d215e201d2148201521492045214a2044214d20202151204621530b024020032802ac07450d00200610390b201c0d07204720032f00e8063b0000204741026a200341e8066a41026a2d00003a0000200320163a00c007200320533602bc07200320513602b8072003204d3602b4072003204a3602b007200320493602ac07200320483602a80702402016450d0020032802e00b211c4100210620032802e80b221d450d05201d2115201d21160340024002402004201c201541017620066a22154102746a28020022174d0d00201541016a21060c010b2015211620042017460d080b201620066b2115201620064b0d000b201d20064f0d052006201d1041000b200341a8086a200410d20320032802b008211620032802a8082106200341003602f808200342013703f0084101200341f0086a10762006201620032802f008221520032802f80810e901024020032802f408450d00201510390b20032802ac08450d06200610390c060b20032802e00b211c410021060240024020032802e80b221d450d00201d2115201d21160340024002402004201c201541017620066a22154102746a28020022174d0d00201541016a21060c010b2015211620042017460d030b201620066b2115201620064b0d000b201d2006490d040b0240201d20032802e40b470d00200341e00b6a201d10990120032802e00b211c0b201c20064102746a221641046a2016201d20066b41027410d50b1a201620043602002003201d41016a3602e80b0b200341a8086a200410d20320032802b008210620032802a8082104200341003602f808200342013703f0084102200341f0086a10762004200620032802f008221620032802f80810e901024020032802f408450d00201610390b20032802ac08450d06200410390c060b024020032802e80b2220450d0020032802e00b211c41002106202021152020211602400340024002402004201c201541017620066a22154102746a221d28020022174d0d00201541016a21060c010b20042017460d02201521160b201620066b2115201620064b0d000c020b0b201d201d41046a20202015417f736a41027410d50b1a20032020417f6a3602e80b0b200341a8086a200410d20320032802b008210620032802a8082104200341003602f808200342013703f0084101200341f0086a10762004200620032802f008221620032802f80810e901024020032802f408450d00201610390b20032802ac08450d05200410390c050b024020032802e80b2220450d0020032802e00b211c41002106202021152020211602400340024002402004201c201541017620066a22154102746a221d28020022174d0d00201541016a21060c010b20042017460d02201521160b201620066b2115201620064b0d000c020b0b201d201d41046a20202015417f736a41027410d50b1a20032020417f6a3602e80b0b200341f0086a200410890420032802f008220620032802f80810e001024020032802f408450d00200610390b200341f0086a200410a40620032802f008220620032802f80810e001024020032802f408450d00200610390b200341f0086a200410d20320032802f008220620032802f80810e001024020032802f408450d00200610390b200341a8086a200410a506200341f0086a20032802a808221620032802b00822151085040240024020032d00f00822060d00200641014621150c010b2016201510e0012006410146211520064101470d002022201f41186a2900003703002023201f41106a2900003703002021201f41086a2900003703002003201f2900003703e8070b024020032802ac08450d00201610390b02402015450d00200341f0086a41186a2022290300370300200341f0086a41106a2023290300370300200341f0086a41086a2021290300370300200320032903e8073703f008200341f0086a10a5070b200341a8076a2004108404200341f0086a20032802a807221620032802b00722151085040240024020032d00f00822060d00200641014621150c010b2016201510e0012006410146211520064101470d00200341a8086a41186a201f41186a290000370300200341a8086a41106a201f41106a290000370300200341a8086a41086a201f41086a2900003703002003201f2900003703a8080b024020032802ac07450d00201610390b02402015450d00200341f0086a41186a200341a8086a41186a290300370300200341f0086a41106a200341a8086a41106a290300370300200341f0086a41086a200341a8086a41086a290300370300200320032903a8083703f008200420242024200341f0086a1088041a0b024020032802d006220620032802cc06470d00200341c8066a200610990120032802d00621060b20032802c80620064102746a20043602002003200641016a3602d0060c040b2006201d1041000b0240201d20032802e40b470d00200341e00b6a201d10990120032802e00b211c0b201c20064102746a221641046a2016201d20066b41027410d50b1a201620043602002003201d41016a3602e80b0b200341a8086a200410d20320032802b008211620032802a8082106200341003602f808200342013703f0084102200341f0086a10762006201620032802f008221520032802f80810e901024020032802f408450d00201510390b20032802ac08450d00200610390b200341e8076a204d2053109f01200341a8086a41186a22062022290300370300200341a8086a41106a22162023290300370300200341a8086a41086a22152021290300370300200320032903e8073703a8082021200341a8076a41086a280200360200200320032903a8073703e807200341f0086a200410890420032802f008221720032802f808200341e8076a108a04024020032802f408450d00201710390b024020032802ec07450d0020032802e80710390b200341a8086a20501086041a200341f0086a41186a2006290300370300200341f0086a41106a2016290300370300200341f0086a41086a2015290300370300200320032903a8083703f008200341e8076a200410840420032802e807220420032802f007200341f0086a108704024020032802ec07450d00200410390b2051450d00204d10390b200141046a2201201e470d000c030b0b2006203a41a0dbcc00103c000b203d203a4190dbcc00103c000b0240203742ffffffff0383500d00205d10390b0240024020032802e00b2204450d00200320032902e40b22373702ec07200320043602e80720034188096a420037030020034180096a4200370300200341f0086a41086a22064200370300200342003703f008200341a8086a41ecc0cc00410510cb012006200341a8086a41086a2216290000370300200320032900a8083703f008200341a8086a41c49ac300410a10cb01203641086a2016290000370000203620032900a808370000200341f0086a200341e8076a10f307203742ffffffff0383500d01200410390c010b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41ecc0cc00410510cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41c49ac300410a10cb01204f41086a2006290000370000204f20032900a808370000200341f0086a412010e0010b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41b9c3c200410d10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41f0c8c200410f10cb01203641086a2006290000370000203620032900a808370000200341a8086a200341f0086a10e4050240024020032802a80822040d00200342003702ac07200341003602b407200341002802d8974e3602a8070c010b200341a8076a410c6a200341a8086a410c6a280200360200200320043602a807200320032902ac083702ac070b20034180086a4200370300200341f8076a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41ecc0cc00410510cb012004200341d8066a41086a290000370300200320032900d8063703e807200341e8066a41c49ac300410a10cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341f0086a200341e8076a412010e6030240024020032802f00822060d00410021040c010b20032902f4082237422088a72104203742ffffffff0383500d00200610390b200341b8056a28020020046a210641002104024020032802d0054101470d0020032802d4052216450d0020034190066a28020020166e21040b20034188096a420037030020034180096a4200370300200341f0086a41086a22164200370300200342003703f008200341a8086a41b9c3c200410d10cb012016200341a8086a41086a2215290000370300200320032900a8083703f008200341a8086a41c4c9c200411110cb01203641086a2015290000370000203620032900a80837000020062004200620044b1b2121200341e8076a200341f0086a10e5050240024020032802e80722150d00200342003702ec064100211f200341002802d8974e22153602e806410021200c010b20032902ec072137200320153602e806200320373702ec062037a721202037422088a7221f450d00201f412c6c2101200341f0086a41206a2117200341f0086a41186a211c200341f0086a41106a211d200341f0086a41086a211e410021060340201520066a2204280200211620044102360200024020160d002017200441246a290200370300201c2004411c6a290200370300201d200441146a290200370300201e2004410c6a2902003703002003200441046a2902003703f008024020032802b007220420032802ac07470d00200341a8076a200410c50220032802b00721040b20032802a8072004412c6c6a220420032903f00837020020044100360228200441086a201e290300370200200441106a201d290300370200200441186a201c290300370200200441206a2017290300370200200320032802b00741016a3602b0070b20012006412c6a2206470d000b0b024002402021201f4d0d00201f211602402020201f6b2021201f6b22014f0d00200341e8066a201f200110d20220032802f006211620032802e80621150b20152016412c6c6a2104024020014102490d00201f417f7320216a21060340200441023602002004412c6a21042006417f6a22060d000b200120166a417f6a21160b02402001450d0020044102360200200441086a20032902f008370200200441106a200341f0086a41086a290200370200200441186a200341f0086a41106a290200370200200441206a200341f0086a41186a290200370200201641016a21160b200320163602f00620032802ec06212020032802e80621150c010b200320213602f006202121160b0240024020150d0020034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41b9c3c200410d10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41c4c9c200411110cb01203641086a2006290000370000203620032900a808370000200341f0086a412010e0010c010b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41b9c3c200410d10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41c4c9c200411110cb01203641086a2006290000370000203620032900a8083700002016412c6c41046a2204417f4c0d010240024020040d00410121060c010b200410382206450d030b200341003602b008200320043602ac08200320063602a808200341a8086a201610ac0220152016200341a8086a10b602200341f0086a412020032802a808220420032802b00810e901024020032802ac08450d00200410390b2020450d002020412c6c450d00201510390b0240024002402021450d0020034190066a28020022230d010b200342003702f408200341002802d8974e22513602f008200341f0086a10e9050c010b200342003702ac0841002117200341002802d8974e22513602a808202320216e21152051211f024020232021702224450d00201541016a221e41ffffffff03712220201e47215d201e4102742222417f4a214d410021174100211d0340205d0d03204d450d030240024020220d00410421040c010b202210382204450d050b200341003602f808200320043602f008200320203602f4080240024002402020201e4f0d00200341f0086a4100201e10ab0120032802f008210420032802f808211c0c010b4100211c201e450d010b201d201e6c21012004201c4102746a210441002106417f211603402004200120066a360200200441046a2104200641016a2106201641016a22162015470d000b201e201c6a211c0b201d41016a211d2003201c3602f8080240201720032802ac08470d00200341a8086a201710da0120032802b00821170b20032802a808221f2017410c6c6a220420032903f008370200200441086a200341f0086a41086a2802003602002003201741016a22173602b008201d2024470d000b0b0240202120246b2220450d00201541ffffffff0371221d20154721222024201541016a6c215d2015410274221e417f4a21244100211c034020220d032024450d0302400240201e0d00410421040c010b201e10382204450d050b41002101200341003602f808200320043602f0082003201d3602f4080240201d20154f0d00200341f0086a4100201510ab0120032802f80821010b0240202120234b0d00201c20156c205d6a211620032802f00820014102746a21044100210603402004201620066a360200200441046a2104200641016a22062015470d000b201520016a21010b201c41016a211c200320013602f8080240201720032802ac08470d00200341a8086a201710da0120032802a808211f20032802b00821170b201f2017410c6c6a220420032903f008370200200441086a200341f0086a41086a280200360200200320032802b00841016a22173602b008201c2020470d000b0b200341f0086a41086a200341a8086a41086a280200360200200320032903a8083703f008200341f0086a10e9050b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41b9c3c200410d10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41c0cac200411410cb01203641086a2006290000370000203620032900a808370000200341a8086a200341f0086a412010e60320032902ac08420020032802a80822041b21372004205120041b211d0240024020032802b8050d00024020032802ac072204450d002004412c6c450d0020032802a80710390b200341003602b407200342003702ac07200320513602a807203742ffffffff0f8321370c010b20032802b007211c4100211f200341003602b0070240201c450d004100212020032802a80721214100211f4100210102400340024002400240201f450d0020212001412c6c6a21042021200120206a412c6c6a21060340200441246a28020020032802bc054b0d02200341f0086a2004280200221610d20320032802f008221720032802f80810d30341ff01712115024020032802f408450d00201710390b20154107460d03201541054b0d034101201574412a71450d0320062004290200370200200641286a200441286a280200360200200641206a200441206a290200370200200641186a200441186a290200370200200641106a200441106a290200370200200641086a200441086a2902003702002004412c6a21042006412c6a2106201c200141016a22014b0d000c050b0b20212001412c6c6a21040340200441246a28020020032802bc054b0d01200341f0086a2004280200221610d20320032802f008221520032802f80810d30341ff01712106024020032802f408450d00201510390b20064107460d02200641054b0d024101200674412a71450d022004412c6a2104201c200141016a22014b0d000b4100211f0c040b20212001412c6c6a28020021160b02402037422088a72222450d0041002104202221152022210602400340024002402016201d201541017620046a22154102746a221e28020022174d0d00201541016a21040c010b20162017460d02201521060b200620046b2115200620044b0d000c020b0b201e201e41046a20222015417f736a41027410d50b1a20374280808080707c21370b2020417f6a2120201f41016a211f201c200141016a22014b0d000b0b0240201f0d004100211f0c010b20032802a80722042001201f6b412c6c6a20042001412c6c6a201c20016b412c6c10d50b1a0b2003201c201f6b22013602b00702402001450d00201c412c6c201f412c6c6b211620032802a80741286a210441002106034020032802b8052215450d06200420062015703602002004412c6a2104200641016a2106201641546a22160d000b0b20032802b8052204450d03200320012004703602b4070b2003201d3602e807200320373702ec07200341f0086a41186a22164200370300200341f0086a41106a22154200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41b9c3c200410d10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41c0cac200411410cb01203641086a22012006290000370000203620032900a808370000200341f0086a4120200341e8076a108e040240203742ffffffff0383500d00201d10390b2004200341a8076a41086a290300370300200320032903a8073703f008200341f0086a10ea05200341e8076a41186a4200370300200341e8076a41106a4200370300200341e8076a41086a22174200370300200342003703e807200341d8066a41c7e5c000410610cb012017200341d8066a41086a290000370300200320032900d8063703e807200341e8066a419081c400410610cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341186a200341e8076a412010ce0320032802182117200328021c211c201642003703002015420037030020044200370300200342003703f008200341a8086a41b9c3c200410d10cb0120042006290000370300200320032900a8083703f008200341a8086a4184cbc200411110cb0120012006290000370000203620032900a8083700002003201c41016a410120171b3602a808200341f0086a4120200341a8086a410410e901200341d8066a419399c700410d10cb01200341e8066a41e093c800411e10cb01412010382204450d01200420032900d806370000200441086a2216200341d8066a41086a290000370000200420032900e806370010200441186a2215200341e8066a41086a290000370000200320043602f008200342a080808080043702f408412010382206450d0120062004290000370000200641186a2015290000370000200641106a200441106a290000370000200641086a2016290000370000200341e8076a41086a200341f0086a41086a2802002204360200200320032903f00822373703e807200341bc086a2004360200200342a080808080043702ac08200320063602a808200320373702b408200341013a00c4082003411c3602c008200341f0086a200341a8086a10f507024020032802f408221c450d000340200328029c09211d2003280298092120200328029009211f200328028c0921012003280288092115200328028409211e200328028009211720032802f8082116024020032802fc082204450d002004410c6c2106201c210403400240200441046a280200450d00200428020010390b2004410c6a2104200641746a22060d000b0b02402016450d002016410c6c450d00201c10390b02402015450d0020154104742106201741086a2104034002402004280200450d002004417c6a28020010390b200441106a2104200641706a22060d000b0b0240201e41ffffffff0071450d00201710390b02402001450d00201f450d00200110390b0240201d450d00202010390b200341f0086a200341a8086a10f50720032802f408221c0d000b0b024020032802ac08450d0020032802a80810390b0240200341b8086a280200450d0020032802b40810390b200341d8066a419399c700410d10cb01200341e8066a41a099c700411310cb01412010382204450d01200420032900d806370000200441086a2216200341d8066a41086a290000370000200420032900e806370010200441186a2215200341e8066a41086a290000370000200320043602f008200342a080808080043702f408412010382206450d0120062004290000370000200641186a2015290000370000200641106a200441106a290000370000200641086a2016290000370000200341e8076a41086a200341f0086a41086a2802002204360200200320032903f00822373703e807200341bc086a2004360200200342a080808080043702ac08200320063602a808200320373702b408200341013a00c408200341143602c008200341f0086a200341a8086a10f70703400240200328029c0b22060d00024020032802ac08450d0020032802a80810390b0240200341b8086a280200450d0020032802b40810390b200341d8066a419399c700410d10cb01200341e8066a41a892c800411510cb01412010382204450d03200420032900d806370000200441086a2216200341d8066a41086a290000370000200420032900e806370010200441186a2215200341e8066a41086a290000370000200320043602f008200342a080808080043702f408412010382206450d0320062004290000370000200641186a2015290000370000200641106a200441106a290000370000200641086a2016290000370000200341e8076a41086a200341f0086a41086a2802002204360200200320032903f00822373703e80720034184096a2004360200200342a080808080043702f408200320063602f008200320373702fc08200341013a008c092003411d36028809200341a8086a200341f0086a10f907024002400340024020032802ac0822040d00024020032802f408450d0020032802f00810390b0240200341f0086a41106a280200450d0020032802fc0810390b20034180086a22064200370300200341e8076a41106a4200370300200341e8076a41086a22044200370300200342003703e807200341d8066a41f1d5c400410d10cb012004200341d8066a41086a2216290000370300200320032900d8063703e807200341e8066a418bd6c400410c10cb01200541086a2215200341e8066a41086a2201290000370000200520032900e806370000200341f0086a200341e8076a412010c70320032802800a4102470d02410021244101215d410621204100214d410021534100215e410021600c030b024020032802b408450d00200410390b200341a8086a200341f0086a10f9070c000b0b200341b00a6a2802002124200341ac0a6a280200214d200341a80a6a2802002153200341a40a6a280200215e200341a00a6a280200215d200341900a6a280200212020032802e80921600b20034188066a211720064200370300200341f8076a420037030020044200370300200342003703e807200341d8066a41ecc0cc00410510cb0120042016290000370300200320032900d8063703e807200341e8066a41c49ac300410a10cb0120152001290000370000200520032900e806370000200341f0086a200341e8076a412010e6030240024020032802f00822040d004100213f0c010b20032902f4082237422088a7213f203742ffffffff0383500d00200410390b200341e00b6a201710f207200341e8076a41186a22164200370300200341e8076a41106a22174200370300200341e8076a41086a22044200370300200342003703e807200341d8066a418ce6c000411210cb012004200341d8066a41086a221c290000370300200320032900d8063703e807200341e8066a41c8fbcd00410410cb01200541086a221d200341e8066a41086a221e290000370000200520032900e806370000200341f0086a200341e8076a10fa0720032802f008210120032902f4082137200341f0086a41186a4200370300200341f0086a41106a4200370300200341f0086a41086a22064200370300200342003703f008200341a8086a41dc8ccc00410f10cb012006200341a8086a41086a2215290000370300200320032900a8083703f008200341a8086a418c8fcc00411410cb01204f41086a2015290000370000204f20032900a808370000200341203602dc062003200341f0086a3602d806200341a8076a200341f0086a412010e4010240024020032802a80722060d00410021150c010b20032802ac07211f2003200341a8076a41086a2802003602ec06200320063602e806200341a8086a200341e8066a10aa070240024020032802a8082215450d0020032902ac0821420c010b200342003702ec074100211520034100280284ee4d3602e8072003410d3602ec082003200341d8066a3602e8082003200341e8076a3602ec0b200341bc086a4101360200200342013702ac08200341949fc5003602a8082003200341e8086a3602b808200341ec0b6a41b4dfc400200341a8086a103b1a20032802e80720032802f00710d101024020032802ec07450d0020032802e80710390b0b201f450d00200610390b201642003703002017420037030020044200370300200342003703e807200341d8066a41d8adc300410b10cb012004201c290000370300200320032900d8063703e807200341e8066a41b0b0c300411610cb01201d201e290000370000200520032900e806370000200341203602dc062003200341e8076a3602d806200341a8076a200341e8076a412010e4010240024020032802a80722060d00410021040c010b20032802ac0721162003200341b0076a2802003602ec06200320063602e806200341f0086a200341e8066a10fb070240024020032802f0082204450d0020032902f40821380c010b200342003702ac084100210420034100280284ee4d3602a8082003410d3602ec082003200341d8066a3602e8082003200341a8086a3602ec0b20034184096a4101360200200342013702f408200341949fc5003602f0082003200341e8086a36028009200341ec0b6a41b4dfc400200341f0086a103b1a20032802a80820032802b00810d101024020032802ac08450d0020032802a80810390b0b2016450d00200610390b4100280284ee4d211c2037420020011b2137200341e8076a41186a4200370300200341e8076a41106a4200370300200341e8076a41086a22064200370300200342003703e807200341d8066a41b9c3c200410d10cb012006200341d8066a41086a290000370300200320032900d8063703e807200341e8066a4188c8c200410f10cb01200541086a200341e8066a41086a290000370000200520032900e806370000200341f0086a200341e8076a10e80520032802f008211720032902f408217420032802a0062121200341f0086a41186a4200370300200341f0086a41106a4200370300200341f0086a41086a22064200370300200342003703f008200341a8086a41dc8ccc00410f10cb012006200341a8086a41086a2216290000370300200320032900a8083703f008200341a8086a41dc8fcc00411510cb01204f41086a2016290000370000204f20032900a808370000200341106a200341f0086a412010ce032038420020041b21382004205120041b211f02400240024002402003280214410020032802101b2216450d00201621040c010b200341f0086a410010fc0720032802f0082204450d01024020032802f40841ffffff3f71450d00200410390b024020034180096a28020041ffffff3f71450d00200341fc086a28020010390b02402003418c096a28020041ffffff3f71450d0020034188096a28020010390b20034194096a280200211d02402003419c096a2802002204450d002004410c6c2106201d210403400240200441046a28020041ffffffff0371450d00200428020010390b2004410c6a2104200641746a22060d000b0b024020034198096a2802002204450d002004410c6c450d00201d10390b410021040b024020044100202120206b2206200620214b1b22062016200620164b1b22164f0d000340200341f0086a200410fd0720032802f008220620032802f80810e001200441016a2104024020032802f408450d00200610390b20162004470d000b0b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41dc8ccc00410f10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41dc8fcc00411510cb01203641086a2006290000370000203620032900a808370000200320163602a808200341f0086a4120200341a8086a410410e9010c010b20034188096a420037030020034180096a4200370300200341f0086a41086a22044200370300200342003703f008200341a8086a41dc8ccc00410f10cb012004200341a8086a41086a2206290000370300200320032900a8083703f008200341a8086a41dc8fcc00411510cb01203641086a2006290000370000203620032900a808370000200320213602a808200341f0086a4120200341a8086a410410e9010b2001201c20011b21222042420020151b21422015201c20151b21232074420020171b21742017205120171b214f200341e8076a41086a200341e00b6a41086a280200360200200320032903e00b3703e807201f2038422088a7222041027422046a21172037422088a72115201f21060240024003402004450d012004417c6a210420062802002101200641046a22162106200120154f0d000b200341f0086a41186a221d202220014105746a220641186a290000370300200341f0086a41106a2201200641106a290000370300200341f0086a41086a221e200641086a290000370300200320062900003703f00841201038221c450d05201c20032903f008370000201c41186a201d290300370000201c41106a2001290300370000201c41086a201e29030037000020034281808080103702ac082003201c3602a8080340024020040d004101211e410121510c030b2004417c6a210420162802002101201641046a22062116200120154f0d000b200341f0086a41186a221d202220014105746a220441186a290000370300200341f0086a41106a2201200441106a290000370300200341f0086a41086a2251200441086a290000370300200320042900003703f008410121044101211e03400240201e2004470d00200341a8086a20044101109e0220032802a808211c0b201c201e4105746a220420032903f008370000200441186a201d290300370000200441106a2001290300370000200441086a20512903003700002003201e41016a221e3602b0080240034020172006460d0120062802002104200641046a22162106200420154f0d000b201d202220044105746a220441186a2900003703002001200441106a2900003703002051200441086a290000370300200320042900003703f00820032802ac082104201621060c010b0b20032802ac0821510c010b410021514100280284ee4d211c4100211e0b0240201e2020460d0041002802d0a94e4102490d0041002802cca94e210441002802c8a94e210641002802d4a94e21162003418c096a41b8c0cd0036020020034180096a4201370300200341a4096a41c894cc00ad428080808080058437020020034198096a41a794cc00ad428080808090048437030020034190096a4200370300200341f8086a41133602002003418c94cc003602fc0820034281808080c0063702ac09200341003602a0092003419494cc003602f408200341023602f008200641b8c0cd00201641024622161b200341f0086a200441c0a4c00020161b2802101103000b202041027421042042422088a72115201f21060240024003402004450d012004417c6a210420062802002101200641046a22162106200120154f0d000b200341f0086a41186a2240202320014105746a220641186a290000370300200341f0086a41106a2201200641106a290000370300200341f0086a41086a2241200641086a290000370300200320062900003703f00841201038221d450d05201d20032903f008370000201d41186a2040290300370000201d41106a2001290300370000201d41086a204129030037000020034281808080103702ac082003201d3602a8080340024020040d0041012101410121040c030b2004417c6a210420162802002101201641046a22062116200120154f0d000b200341f0086a41186a2240202320014105746a220441186a290000370300200341f0086a41106a2241200441106a290000370300200341f0086a41086a2243200441086a290000370300200320042900003703f00841012104410121010340024020012004470d00200341a8086a20044101109e0220032802a808211d0b201d20014105746a220420032903f008370000200441186a2040290300370000200441106a2041290300370000200441086a20432903003700002003200141016a22013602b0080240034020172006460d0120062802002104200641046a22162106200420154f0d000b2040202320044105746a220441186a2900003703002041200441106a2900003703002043200441086a290000370300200320042900003703f00820032802ac082104201621060c010b0b20032802ac0821040c010b410021044100280284ee4d211d410021010b024020012020460d0041002802d0a94e4102490d0041002802cca94e210641002802c8a94e211641002802d4a94e21152003418c096a41b8c0cd0036020020034180096a4201370300200341a4096a41c894cc00ad428080808080058437020020034198096a41a794cc00ad428080808090048437030020034190096a4200370300200341f8086a41133602002003418c94cc003602fc0820034281808080c0063702ac09200341003602a0092003419494cc003602f408200341023602f008201641b8c0cd00201541024622151b200341f0086a200641c0a4c00020151b2802101103000b20034198096a2074370300200341f0086a41206a20013602002003418c096a200436020020034184096a201e360200200341f0086a41106a2051360200200341f0086a41086a2206200341e8076a41086a2802003602002003204f36029409200320032903e8073703f0082003204d3602b4092003205d3602b0092003205e3602ac09200320243602a809200320533602a4092003201d360288092003201c3602fc0820032060203f6a3602a009200341e8076a202110fd0720032802f007211720032802e8072101200341003602b008200342013703a80820032802f0082104200341a8086a2006280200220610ac0202402006450d002006410574211520032802b00821060340024020032802ac0820066b411f4b0d00200341a8086a20064120107720032802b00821060b20032802a80820066a22162004290000370000201641086a200441086a290000370000201641106a200441106a290000370000201641186a200441186a2900003700002003200641206a22063602b008200441206a2104201541606a22150d000b0b20032802fc082104200341a8086a200328028409220610ac0202402006450d002006410574211520032802b00821060340024020032802ac0820066b411f4b0d00200341a8086a20064120107720032802b00821060b20032802a80820066a22162004290000370000201641086a200441086a290000370000201641106a200441106a290000370000201641186a200441186a2900003700002003200641206a22063602b008200441206a2104201541606a22150d000b0b20034194096a211c2003280288092104200341a8086a200328029009220610ac0202402006450d002006410574211520032802b00821060340024020032802ac0820066b411f4b0d00200341a8086a20064120107720032802b00821060b20032802a80820066a22162004290000370000201641086a200441086a290000370000201641106a200441106a290000370000201641186a200441186a2900003700002003200641206a22063602b008200441206a2104201541606a22150d000b0b201c200341a8086a10fe0720032802a0092106024020032802ac0820032802b00822046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b00820032802a4092106024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b00820032802a8092106024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b00820032802ac092106024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b00820032802b0092106024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b00820032802b4092106024020032802ac0820046b41034b0d00200341a8086a20044104107720032802b00821040b20032802a80820046a20063600002003200441046a22043602b0082001201720032802a808200410e901024020032802ac08450d0020032802a80810390b024020032802ec07450d00200110390b024020032802f40841ffffff3f71450d0020032802f00810390b024020032802800941ffffff3f71450d0020032802fc0810390b0240200328028c0941ffffff3f71450d0020032802880910390b2074a72116200328029409211502402003419c096a2802002204450d002004410c6c21062015210403400240200441046a28020041ffffffff0371450d00200428020010390b2004410c6a2104200641746a22060d000b0b02402016450d002016410c6c450d00201510390b0240203842ffffffff0383500d00201f10390b0240204242ffffff3f83500d00202310390b0240203742ffffff3f83500d00202210390b20032802c806211e024020032802d0062204450d0020044102742101200341a8076a41046a211c200341e8076a41086a211d0340200341f0086a201e28020010ff0720032802f008220420032802f80810e001024020032802f408450d00200410390b200341d8066a418b8ac800410310cb01200341e8066a41a88cc800411910cb012003201e2802003602a8072003200341a8076a410410cc013703e8072003201c3602fc082003201d3602f4082003200341a8076a3602f8082003200341e8076a3602f008200341a8086a200341f0086a10830120032802b008221541206a2204417f4c0d0402400240024020040d00200341003602f808200320043602f408200341013602f0080c010b200410382206450d0741002116200341003602f808200320063602f008200320043602f4082004410f4b0d010b200341f0086a41004110107720032802f408210420032802f008210620032802f80821160b200620166a221720032900d806370000201741086a200341d8066a41086a2900003700002003201641106a22163602f8080240200420166b410f4b0d00200341f0086a20164110107720032802f408210420032802f008210620032802f80821160b200620166a221720032900e806370000201741086a200341e8066a41086a2900003700002003201641106a22163602f80820032802a80821170240200420166b20154f0d00200341f0086a20162015107720032802f008210620032802f80821160b200620166a2017201510d40b1a201620156a2104024020032802ac08450d0020032802a80810390b20032802f0082206200410e001024020032802f408450d00200610390b201e41046a211e2001417c6a22010d000b20032802c806211e20032802d0062251450d00201e20514102746a214d41002802d8974e214f20034180086a2120200341f8076a2121201e211f0340200341f0086a201f28020010800820032802f008220420032802f80810e001024020032802f408450d00200410390b200341f0086a201f28020010810820032802f008220420032802f80810e001024020032802f408450d00200410390b2020420037030020214200370300200341e8076a41086a221d4200370300200342003703e807200341d8066a41d584ce00410310cb01201d200341d8066a41086a2222290000370300200320032900d8063703e807200341e8066a41d089ce00410d10cb01200541086a2223200341e8066a41086a2224290000370000200520032900e806370000200341f0086a200341e8076a412010e60320032802f0082204204f20041b2117024020032902f408420020041b2237422088a7225d450d00201f280200211541002104205d2116205d2106024003400240024020152017201641017620046a22164102746a221c28020022014d0d00201641016a21040c010b20152001460d02201621060b200620046b2116200620044b0d000c020b0b201c201c41046a205d2016417f736a41027410d50b1a20374280808080707c21370b200320173602f008200320373702f4082020420037030020214200370300201d4200370300200342003703e807200341d8066a41d584ce00410310cb01201d2022290000370300200320032900d8063703e807200341e8066a41d089ce00410d10cb0120232024290000370000200520032900e806370000200341e8076a4120200341f0086a108e0402402017450d00203742ffffffff0383500d00201710390b201f41046a21042020420037030020214200370300201d4200370300200342003703e807200341d8066a41d584ce00410310cb01201d2022290000370300200320032900d8063703e807200341e8066a41a08ace00411a10cb0120232024290000370000200520032900e806370000200341086a200341e8076a412010ce0302400240024020032802084101470d00201f280200200328020c2206460d010b2020420037030020214200370300201d4200370300200342003703e807200341d8066a41d584ce00410310cb01201d2022290000370300200320032900d8063703e807200341e8066a41a08ace00411a10cb0120232024290000370000200520032900e806370000200341e8076a412010e0010c010b2020420037030020214200370300201d4200370300200342003703e807200341d8066a41d584ce00410310cb01201d2022290000370300200320032900d8063703e807200341e8066a41a08ace00411a10cb0120232024290000370000200520032900e806370000200320063602f008200341e8076a4120200341f0086a410410e9010b2004211f2004204d470d000b2051450d0020514102742106201e210403402004108004200441046a21042006417c6a22060d000b0b20032903900320034198036a29030020032802d403108104108204024020032802cc0641ffffffff0371450d00201e10390b02402003418c066a28020041ffffff3f71450d0020032802880610390b024020034198066a28020041ffffff3f71450d0020032802940610390b200341f00b6a24000f0b20032802b00b210420032802a80b2116024020032802a40b450d00200610390b02402004450d00201610390b200341f0086a200341a8086a10f7070c000b0b1034000b1032000b41c0dcc2004139418cddc2001035000b41c0dcc200413941fcdcc2001035000b970204017f017e047f037e02400240024020012802082202ad42287e2203422088a70d002003a72204417f4c0d00200128020021050240024020040d00410821010c010b200410382201450d020b2000410036020820002001360200200041046a200441286e2206360200024020044128490d002006210703402004450d012007450d04200541086a2903002103200541106a2903002108200529032021092005290300210a200141186a200541186a290300370300200141106a2008370300200141086a20033703002001200a370300200141206a2009370300200141286a2101200441586a2104200541286a21052007417f6a22070d000b0b200020023602080f0b1034000b1032000b200620064198b4ca00103c000bc90301047f20004201370200200041086a22044100360200024002400240024020010e0400010203000b20004100410110772000280200200428020022006a41003a00002004200041016a3602000f0b2000410041011077200041046a2205280200210620002802002207200428020022016a41013a00002004200141016a22013602000240200620016b41034b0d002000200141041077200041086a2802002101200028020021070b200720016a2002360000200041086a2202200141046a22043602000240200528020020046b41034b0d002000200441041077200228020021040b200028020020046a20033600002002200441046a3602000f0b20004100410110772000280200200428020022006a41023a00002004200041016a3602000f0b200041004101107720002802002207200428020022016a41033a00002004200141016a22013602000240200041046a220528020020016b41034b0d002000200141041077200041086a2802002101200028020021070b200720016a2002360000200041086a2202200141046a22043602000240200528020020046b41034b0d002000200441041077200228020021040b200028020020046a20033600002002200441046a3602000bc60202047f027e230041d0006b220224002002412036020420022001360200200241086a2001412010e40102400240200228020822010d00200042023703000c010b200228020c210302400240200241106a28020022044104490d0020044104460d0020012800002105420021060240024020012d00040e020100020b2004417b6a4108490d0120012900052107420121060b20002007370308200041106a20053602000c010b2002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b420221060b200020063703002003450d00200110390b200241d0006a24000ba60204017f017e017f027e230041d0006b220224002002412036020420022001360200200241086a2001412010e40102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004110490d00200141086a290000210520012900002106420121030c010b420021032002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b0b2004450d00200110390b2000200637030820002003370300200041106a2005370300200241d0006a24000b8c0d010a7f230041f0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022030d00200041023a00000c010b2002280214210402400240200241186a2802002205450d0041002106410321010240024020032d00000e020100030b20054101460d0120032d0001210120024101360248200220013a004c20054102460d0120032d0002210120024102360248200220013a004d20054103460d0120032d0003210120024103360248200220013a004e20054104460d0120024104360248200220032d00043a004f20054105460d01200241d0006a20032d00053a00002002410536024820054106460d01200241d1006a20032d00063a00002002410636024820054107460d01200241d2006a20032d00073a00002002410736024820054108460d01200241d3006a20032d00083a00002002410836024820054109460d01200241d4006a20032d00093a0000200241093602482005410a460d01200241d5006a20032d000a3a00002002410a3602482005410b460d01200241d6006a20032d000b3a00002002410b3602482005410c460d01200241d7006a20032d000c3a00002002410c3602482005410d460d01200241d8006a20032d000d3a00002002410d3602482005410e460d01200241d9006a20032d000e3a00002002410e3602482005410f460d01200241da006a20032d000f3a00002002410f36024820054110460d01200241db006a20032d00103a00002002411036024820054111460d01200241dc006a20032d00113a00002002411136024820054112460d01200241dd006a20032d00123a00002002411236024820054113460d01200241de006a20032d00133a00002002411336024820054114460d01200241df006a20032d00143a00002002411436024820054115460d01200241e0006a20032d00153a00002002411536024820054116460d01200241e1006a20032d00163a00002002411636024820054117460d01200241e2006a20032d00173a00002002411736024820054118460d01200241e3006a20032d00183a00002002411836024820054119460d01200241e4006a20032d00193a0000200241193602482005411a460d01200241e5006a20032d001a3a00002002411a3602482005411b460d01200241e6006a20032d001b3a00002002411b3602482005411c460d01200241e7006a20032d001c3a00002002411c3602482005411d460d01200241e8006a20032d001d3a00002002411d3602482005411e460d01200241e9006a20032d001e3a00002002411e3602482005411f460d01200241ea006a20032d001f3a00002002411f36024820054120460d01200241eb006a20032d00203a0000200241c0006a41026a200241d5006a2d00003a0000200241ec006a41026a200241dc006a2d00003a0000200220022f014c3b0130200220022d004e3a00322002200241d3006a2f00003b01402002200241da006a2f01003b016c200241e4006a2802002107200241dd006a2800002108200241d6006a280100210920024120360248200241c8006a41206a280200210a200228004f210b2002412c6a41026a200241e3006a2d00003a00002002200241e1006a2f00003b012c410121060b200241286a41026a20022d00323a0000200241246a41026a200241c0006a41026a2d00003a0000200241206a41026a200241ec006a41026a2d00003a00002002411c6a41026a2002412c6a41026a2d00003a0000200220022f01303b0128200220022f01403b0124200220022f016c3b0120200220022f012c3b011c200621010c010b410321010b0240024020014103470d002002420037023420024100280284ee4d3602302002410d3602442002200241086a3602402002200241306a36026c200241dc006a41013602002002420137024c200241949fc5003602482002200241c0006a360258200241ec006a41b4dfc400200241c8006a103b1a2002280230200228023810d10102402002280234450d00200228023010390b410221010c010b200020022f01283b0001200041046a200b360000200041086a20022f01243b00002000410b6a20093600002000410f6a20022f01203b0000200041126a2008360000200041166a20022f011c3b0000200041036a200241286a41026a2d00003a00002000410a6a200241246a41026a2d00003a0000200041116a200241206a41026a2d00003a0000200041186a2002411c6a41026a2d00003a00002000411d6a200a360000200041196a20073600000b200020013a00002004450d00200310390b200241f0006a24000b8d0701147f230041f0006b220324002003200236020c20032001360208200341106a2001200210e4010240024002400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10c1010240024020032802000d0020032802042206200328022422074105762201200120064b1b22014105742202417f4c0d030240024020010d00410121080c010b200210382208450d050b41002109200341003602382003200136023420032008360230024002402006450d00200341c8006a410472210a200341e1006a210b200341da006a210c200341d3006a210d4100210e0340200e41016a210e41002101034020072001460d03200a20016a2003280220220f2d00003a00002003200141016a22023602482003200f41016a3602202002210120024120470d000b200341ec006a41026a220f200d41026a2d00003a0000200341c4006a41026a2210200c41026a2d00003a00002003200a2f01003b01282003200d2f00003b016c2003200c2f00003b01442003200a41026a2d00003a002a2003280268211120032802642112200328005d211320032801562114200328004f2115200341c0006a41026a2216200b41026a2d00003a00002003200b2f00003b0140024020092003280234470d00200341306a200910c20120032802302108200328023821090b200720026b2107200820094105746a220120032f01283b0000200141026a20032d002a3a0000200141096a200f2d00003a0000200120032f016c3b0007200141106a20102d00003a0000200120032f01443b000e200120153600032001201436000a20012013360011200141176a20162d00003a0000200120032f01403b00152001201136001c200120123600182003200941016a2209360238200e2006470d000b200328023021080b2008450d0120002003290234370204200020083602000c020b20034100360224200328023441ffffff3f71450d00200328023010390b2003420037023420034100280284ee4d3602302003410d36022c2003200341086a3602282003200341306a36026c200341dc006a41013602002003420137024c200341949fc5003602482003200341286a360258200341ec006a41b4dfc400200341c8006a103b1a2003280230200328023810d10102402003280234450d00200328023010390b200041003602000b2005450d00200410390b200341f0006a24000f0b1034000b1032000bc56805077f027e0c7f017e0a7f230041c0206b22012400200141e0016a200041046a10c2062000280200200041106a200141e0016a410010cf0620014180026a200010df04200141880d6a41186a220220014180026a41186a290300370300200141880d6a41106a220320014180026a41106a290300370300200141880d6a41086a220420014180026a41086a220529030037030020012001290380023703880d200141901e6a200028020010e00420012802901e220620012802981e200141880d6a108704024020012802941e450d00200610390b20002802002107200242003703002003420037030020044200370300200142003703880d20014180026a41c7e5c000410610cb012004200529000037030020012001290080023703880d20014180026a419081c400410610cb01200220052900003703002003200129008002370300200141d8016a200141880d6a412010ce0320012802d801210420012802dc01210510dd012108200141901e6a410141a1f2c700412910d7010240024002400240024002400240024020012802901e2200450d00200141981e6a280200410c490d00200028000021022000290004210910dd012009580d01200141a00d6a4200370300200141980d6a4200370300200141880d6a41086a22064200370300200142003703880d20014180026a41c7e5c000410610cb01200620014180026a41086a220a29000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a200a2900003700002003200129008002370000200141d0016a200141880d6a412010ce0320012802d001450d0120012802d40120024d0d010b427f200842a09c017c220920092008541b21092001410036028802200142013703800220014180026a410041041077200128028002220620012802880222006a20054196016a41960120041b22023600002001200041046a2200360288020240200128028402220420006b41074b0d0020014180026a2000410810772001280284022104200128028002210620012802880221000b200620006a2009370000200141880d6a41086a200141901e6a41086a280200360200200120012903901e3703880d410141a1f2c7004129200141880d6a2006200041086a10d601210002402004450d00200610390b2000450d01024041002802d0a94e4105490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141c0016a200141880d6a412010ce032001411036028402200120012802c401410020012802c0011b3602901e2001200141901e6a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a41d79dc700ad4280808080800e84370200200141b00d6a419bf4c700ad4280808080c00484370300200141880d6a41206a42013703002000411a360200200141a40d6a20014180026a360200200141ccf2c7003602940d2001428180808090f3003702c40d200141003602b80d200141d0b9c70036028c0d200141053602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b200141b8016a10ed0620012d00b801220041fe01714102460d052000410171450d0520012802bc0122002007470d04200141901e6a200710ee0620012802901e410a460d02200141901c6a41086a200141901e6a41086a290300370300200120012903901e3703901c0c030b20012802941e450d00200010390b200120023602981e200120093703901e41002802d0a94e4104490d04200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141c8016a200141880d6a412010ce032001418c026a411e3602002001411036028402200120012802cc01410020012802c8011b3602901c2001200141901e6a360288022001200141901c6a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a41d79dc700ad4280808080800e84370200200141b00d6a41ab9dc700ad4280808080c00584370300200141880d6a41206a42023703002000411a360200200141a40d6a20014180026a360200200141d4f3c7003602940d20014281808080f0d3003702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000c040b024041002802d0a94e4104490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a2004290000370000200320012900800237000020014180016a200141880d6a412010ce032001411036029418200120012802840141002001280280011b36028002200120014180026a3602901841002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002000411a360200200141a40d6a20014190186a360200200141dcf2c7003602940d20014281808080a0183702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b200141880d6a10f006200128028c0d210220012802880d210020014190186a200141880d6a41086a41800210d40b1a024020004101460d0020014180026a20014190186a41800210d40b1a200141880d6a20014180026a10f10620014190186a41086a200141880d6a410c6a2802003602002001200129028c0d37039018024020012802880d2200410a470d00200141880d6a20014180026a41800210d40b1a200141901c6a200141880d6a10f2060c020b200141901c6a410c6a20014198186a28020036020020012001290390183702941c200120003602901c200141b0026a10fc020c010b2001419c1c6a20014190186a41086a28020036020020012001290290183702941c200120023602901c0b41002802d0a94e4104490d01200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141f8006a200141880d6a412010ce032001418c026a411f36020020014110360284022001200128027c410020012802781b3602901e2001200141901c6a360288022001200141901e6a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a41d79dc700ad4280808080800e84370200200141b00d6a419bf4c700ad4280808080c00484370300200141880d6a41206a42023703002000411a360200200141a40d6a20014180026a360200200141ecf2c7003602940d2001428180808080f4003702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000c010b200020074f0d00200141f0016a200710ee060240024020012802f001410a460d00200141901e6a41086a200141f0016a41086a290300370300200120012903f0013703901e0c010b024041002802d0a94e4104490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141b0016a200141880d6a412010ce032001411036028402200120012802b401410020012802b0011b3602901e2001200141901e6a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002000411a360200200141a40d6a20014180026a360200200141fcf2c7003602940d20014281808080e0123702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b4101210020014190206a410141f8b3c300412910d7010240024020012802902022040d00410021020c010b2001280294202100200120014190206a41086a280200360294182001200436029018200141880d6a20014190186a109505024020012802b80d2202450d00200141901e6a41286a200141880d6a41286a290300370300200141901e6a41206a200141880d6a41206a290300370300200141901e6a41186a200141880d6a41186a290300370300200141901e6a41106a200141880d6a41106a290300370300200141901e6a41086a200141880d6a41086a290300370300200120012903880d3703901e20014180026a200141bc0d6a41cc0110d40b1a0b02402000450d00200410390b20014190186a41286a2200200141901e6a41286a29030037030020014190186a41206a2204200141901e6a41206a29030037030020014190186a41186a2205200141901e6a41186a29030037030020014190186a41106a2206200141901e6a41106a29030037030020014190186a41086a220a200141901e6a41086a290300370300200120012903901e37039018200141880d6a20014180026a41cc0110d40b1a024020020d0041002102410121000c010b20014190206a41286a200029030037030020014190206a41206a200429030037030020014190206a41186a200529030037030020014190206a41106a200629030037030020014190206a41086a200a29030037030020012001290390183703902020014180026a200141880d6a41cc0110d40b1a410021000b024002402000450d00200141901e6a41086a20014190206a41086a28020036020020012001290390203703901e41012102410621000c010b200141880d6a41286a20014190206a41286a290300370300200141880d6a41206a20014190206a41206a290300370300200141880d6a41186a20014190206a41186a290300370300200141880d6a41106a20014190206a41106a290300370300200141880d6a41086a20014190206a41086a29030037030020012001290390203703880d200120023602b80d200141bc0d6a20014180026a41cc0110d40b1a200141901e6a200141880d6a418cf3c700410810f40620014190186a41086a22022001419c1e6a280200360200200120012902941e37039018024020012802901e2200410a470d00200141901e6a200141880d6a41800210d40b1a410021020c010b200141901e6a41086a200228020036020020012001290390183703901e200141b80d6a10fc02410121020b02400240024002402002450d0020014190206a410c6a200141901e6a41086a2802003602002001200036029020200120012903901e37029420024041002802d0a94e4104490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141a8016a200141880d6a412010ce0320014180026a410c6a41203602002001411036028402200120012802ac01410020012802a8011b36029018200120014190206a36028802200120014190186a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42023703002000411a360200200141a40d6a20014180026a36020020014194f3c7003602940d20014281808080b0143702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b28021011030020012802902021000b20014190206a41047221040240024002402000417c6a0e03020001000b200141880d6a41086a200441086a280200360200200120042902003703880d410121020c050b024041002802d0a94e4105490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a20042900003700002003200129008002370000200141a0016a200141880d6a412010ce032001411036028402200120012802a401410020012802a0011b36029018200120014190186a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002000411a360200200141a40d6a20014180026a360200200141a4f3c7003602940d20014281808080e0143702c40d200141003602b80d200141d0b9c70036028c0d200141053602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b200141880d6a10f006200128028c0d210020012802880d210420014190186a200141880d6a41086a220541800210d40b1a4101210220044101460d0320014180026a20014190186a41800210d40b1a200141880d6a20014180026a10f10620014190186a41086a200141940d6a2802003602002001200129028c0d37039018024020012802880d2200410a470d00200141880d6a20014180026a41800210d40b1a0c030b200141880d6a41086a20014190186a41086a28020036020020012001290390183703880d200141b0026a10fc02410121020c040b024041002802d0a94e4105490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220529000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a2005290000370000200320012900800237000020014198016a200141880d6a412010ce0320014110360294182001200128029c0141002001280298011b36028002200120014180026a3602901841002802cca94e210541002802c8a94e210641002802d4a94e210a20024202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002000411a360200200141a40d6a20014190186a360200200141b4f3c7003602940d20014281808080f0153702c40d200141003602b80d200141d0b9c70036028c0d200141053602880d200641b8c0cd00200a41024622001b200141880d6a200541c0a4c00020001b2802101103000b024041002802d0a94e4104490d00200141a00d6a22054200370300200141980d6a22004200370300200141880d6a41086a22024200370300200142003703880d20014180026a41c7e5c000410610cb01200220014180026a41086a220629000037030020012001290080023703880d20014180026a419081c400410610cb0120052006290000370300200020012900800237030020014190016a200141880d6a412010ce032001411036029418200120012802940141002001280290011b36028002200120014180026a3602901841002802cca94e210541002802c8a94e210641002802d4a94e210a20004202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002002411a360200200141a40d6a20014190186a360200200141d0b4c3003602940d20014281808080b00f3702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200641b8c0cd00200a41024622001b200141880d6a200541c0a4c00020001b2802101103000b41012102410141f8b3c300412910d501410141f8fbc700412410d501200141880d6a41086a200441086a280200360200200120042902003703880d20012802902021000c030b200141880d6a200141901e6a41800210d40b1a0b410021020c010b200520014190186a41086a28020036020020012001290290183703880d0b200141901c6a200141880d6a41800210d40b1a024020020d00200141901a6a200141901c6a41800210d40b1a200141880d6a200141901a6a41800210d40b1a200141901e6a200141880d6a10f2060c010b2001419c1e6a200141981c6a280200360200200120012902901c3702941e200120003602901e0b41002802d0a94e4104490d00200141a00d6a4200370300200141980d6a22024200370300200141880d6a41086a22004200370300200142003703880d20014180026a41c7e5c000410610cb01200020014180026a41086a220429000037030020012001290080023703880d20014180026a419081c400410610cb01200341086a2004290000370000200320012900800237000020014188016a200141880d6a412010ce032001418c026a411f36020020014110360284022001200128028c0141002001280288011b3602901c2001200141901e6a360288022001200141901c6a3602800241002802cca94e210441002802c8a94e210541002802d4a94e210620024202370300200141bc0d6a41d79dc700ad4280808080800e84370200200141b00d6a419bf4c700ad4280808080c00484370300200141880d6a41206a42023703002000411a360200200141a40d6a20014180026a360200200141c4f3c7003602940d2001428180808080f5003702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b200141880d6a10f50620012802880d220b20012802900d220241a00b6c6a2104200128028c0d210c200b21000240024002402002450d00200141a8146a210d200141e0106a210e200141f0106a210f200141f8106a2110200141880d6a41286a2111200141a80d6a2112200141880d6a41106a2113200b2102034020022004460d02200241a00b6a210020022802880b4103460d01200241940b6a280200210520022802900b210a20014180026a200241880b10d40b1a200141880d6a20014180026a41880b10d40b1a0240024020012d00880d22024110470d0020012d008c0d21060c010b41062106024002400240024002400240024020020e18070707070007010207070707030707070704070707070705060b20012802900d450d06200128028c0d10390c060b200128028c0d0d0520012802940d2202450d05200241286c450d0520012802900d10390c050b20012d008c0d4102470d04024020012802980d2202450d00200241d0006c211420012802900d41c4006a21020340024020022802002215450d00201541306c450d002002417c6a28020010390b200241d0006a2102201441b07f6a22140d000b0b20012802940d2202450d04200241d0006c450d0420012802900d10390c040b200128028c0d4102470d0320012802980d2202450d03200128029c0d450d03200210390c030b024002400240200128028c0d0e020001020b20012802d80f450d0420012802d40f10390c040b20012802d80f450d0320012802d40f10390c030b20012802d80f450d0220012802d40f10390c020b20012d00900d410a470d0120012802bc0d450d0120012802b80d10390c010b024020012903900d4201510d000240024020012802980d0e020300010b20012802a80d410b470d022011108d022010108b030c020b20012802a00d410b470d012012108d02200f108b030c010b2013108d02200e108d02200d108b030b0240200541ffffff3f71450d00200a10390b20002102200641ff01714101470d000b024020042000460d000340200010f6060240200041940b6a28020041ffffff3f71450d00200041900b6a28020010390b200041a00b6a22002004470d000b0b0240200c450d00200c41a00b6c450d00200b10390b024041002802d0a94e4104490d00200141a00d6a22044200370300200141980d6a22004200370300200141880d6a41086a22024200370300200142003703880d20014180026a41c7e5c000410610cb01200220014180026a41086a220529000037030020012001290080023703880d20014180026a419081c400410610cb01200420052900003703002000200129008002370300200141f0006a200141880d6a412010ce03200141103602941820012001280274410020012802701b36028002200120014180026a3602901841002802cca94e210441002802c8a94e210541002802d4a94e210620004202370300200141bc0d6a4196f5c700ad4280808080d00e84370200200141b00d6a41e8f4c700ad4280808080e00584370300200141880d6a41206a42013703002002411a360200200141a40d6a20014190186a360200200141d0b4c3003602940d20014281808080b00f3702c40d200141003602b80d200141d0b9c70036028c0d200141043602880d200541b8c0cd00200641024622001b200141880d6a200441c0a4c00020001b2802101103000b410141f8b3c300412910d5010c020b20042000460d000340200010f6060240200041940b6a28020041ffffff3f71450d00200041900b6a28020010390b200041a00b6a22002004470d000b0b200c450d00200c41a00b6c450d00200b10390b410141a1f2c700412910d5010b200120073602f00102400240024002400240024010d401450d00200141a00d6a22054200370300200141980d6a22044200370300200141880d6a41086a22004200370300200142003703880d20014180026a41cde5c000410410cb01200020014180026a41086a220229000037030020012001290080023703880d20014180026a41a4d4c700410b10cb01200520022900003703002004200129008002370300200141e0006a200141880d6a10ee042001290368210820012802602106200542003703002004420037030020004200370300200142003703880d20014180026a41cde5c000410410cb012000200229000037030020012001290080023703880d20014180026a4180d3c700410a10cb01200341086a20022900003700002003200129008002370000200141d0006a200141880d6a10ee04200141c0006a2001290358420020012802501b420042d804420010d30b0240200129034850450d0020012903402109200542003703002004420037030020004200370300200142003703880d20014180026a41cde5c000410410cb012000200229000037030020012001290080023703880d20014180026a41f4d3c700410b10cb01200441086a20022900003700002004200129008002370000200141306a200141880d6a10ee04024020092001290338420020012802301b7c22162009540d00024042002008420020061b220920167d220820082009561b42017c220942d804200942d804541b420680a741ff017141314b0d004100210420014180026a210b0c070b200141a00d6a22044200370300200141980d6a22054200370300200141880d6a41086a22004200370300200142003703880d20014180026a41b69fc500410710cb01200020014180026a41086a220229000037030020012001290080023703880d20014180026a41d091c600410c10cb01200341086a220620022900003700002003200129008002370000200141286a200141880d6a412010ce03200128022c211720012802282118200442003703002005420037030020004200370300200142003703880d20014180026a41e0c1cd00410810cb012000200229000037030020012001290080023703880d20014180026a41c8fbcd00410410cb01200620022900003700002003200129008002370000200141901e6a41046a41003a0000200141003602901e200141206a200141880d6a4120200141901e6a4105410010e601024002402001280220450d00200120012802242200410520004105491b360284022001200141901e6a36028002200141186a20014180026a10c10120012802180d00200128021c21190c010b410021190b200141901e6a10d204200141880d6a41e9dabdf30610c001200128028c0d211a20012802880d210f20012802900d2212450d0520122100200f21030340200341206a21032000417f6a22000d000b0240201241144b0d00201241014d0d062012410574200f6a41406a21004101210303402000200341016a220310f706200041606a210020122003470d000c070b0b02402012410176220041ffffff3f712000470d002000410574221b417f4c0d000240201b1038221c450d002001420037028402200141002802d8974e220336028002200f41606a211d200f41a07f6a211e410021002012211f034041002120410121050240201f417f6a2206450d00024002400240024002400240200f20064105746a201f410574220b200f6a41406a412010d70b4100480d00201f417e6a2106201e200b6a210241002120410021040340024020062004470d00201f21050c080b200441016a2104200241206a2002412010d70b2105200241606a21022005417f4a0d000b200441016a21052004417f73201f6a21060c010b201e200b6a210202400340024020064101470d00410021060c020b2006417f6a2106200241206a2002412010d70b2104200241606a210220044100480d000b0b201f2006490d01201f20124b0d02201f20066b2205410176220a450d00201d200b6a2102200f20064105746a21040340200141880d6a41186a220b200441186a220c290000370300200141880d6a41106a2214200441106a2215290000370300200141880d6a41086a220d200441086a220e290000370300200120042900003703880d200241086a22132900002109200241106a22102900002108200241186a2211290000211620042002290000370000200c201637000020152008370000200e20093700002011200b290300370000201020142903003700002013200d290300370000200220012903880d370000200241606a2102200441206a2104200a417f6a220a0d000b0b024020060d00200621200c050b0240200541094d0d00200621200c050b201f20124b0d02201f20066b21052006417f6a2102201d20064105746a21040340201f2002490d0c2004200541016a220510f7062002417f6a220620024f0d04200441606a2104200621022005410a490d000c040b0b2006201f41c4bac3001055000b201f201241c4bac300104b000b201f2006417f6a2202490d08201f201241d4bac300104b000b200641016a21200b02402000200128028402470d0020014180026a200010b101200128028002210320012802880221000b200320004103746a2200200536020420002020360200200120012802880241016a220036028802024020004102490d002001280280022103024003400240024002400240024020032000417f6a4103746a2202280200450d00200041037420036a220641746a2802002205200228020422044b0d010b20004103490d022002280204210420032000417d6a22144103746a28020421020c010b200041024d0d0520032000417d6a22144103746a2802042202200420056a4d0d00200041034d0d05200641646a280200200220056a4b0d050b20022004490d010b2000417e6a21140b02400240024002400240024002402000201441016a220e4d0d00200020144d0d012003201441037422136a2200280204221020002802006a22042003200e41037422116a2200280200220d490d02200420124b0d03200f200d4105746a22022000280204221541057422036a2100200441057421062004200d6b220a20156b22052015490d04201c2002200310d40b220520036a210420154101480d05200a20154c0d05200f20066a210a20052103034020022000200320002003412010d70b41004822061b2205290000370000200241186a200541186a290000370000200241106a200541106a290000370000200241086a200541086a2900003700002003200341206a20061b2103200241206a21020240200041206a200020061b2200200a490d00200221000c080b20032004490d000b200221000c060b200e200041e4bac300103c000b2014200041f4bac300103c000b200d20044184bbc3001055000b200420124184bbc300104b000b201c20002005410574220310d40b220a20036a21040240201541014e0d00200a21030c020b0240200541014e0d00200a21030c020b201d20066a21050340200520002004200441606a220b200041606a220c412010d70b41004822061b41606a2203290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a2900003700002004200b20061b210402402002200c200020061b2200490d00200a21030c030b200541606a2105200a21032004200a4b0d000c020b0b20022100200521030b20002003200420036b41607110d40b1a0240200128028802220020144d0d00200128028002220320136a2202201020156a3602042002200d3602002000200e4d0d02200320116a2202200241086a200020146b41037441706a10d50b1a20012000417f6a220036028802200041014b0d010c030b0b201420004194bbc300103c000b200e20001044000b2020211f2020450d070c000b0b1032000b1034000b41d0bbc70041fa0041dcbcc700105b000b41d0bbc70041fa0041ccbcc700105b000b41002802d0a94e4105490d0420014110360294182001200141f0016a3602901841002802cca94e210041002802c8a94e210341002802d4a94e2102200141980d6a4202370300200141bc0d6a41b5becd00ad4280808080c00b84370200200141b00d6a419dbecd00ad4280808080800384370300200141a80d6a4201370300200141900d6a4112360200200141a40d6a20014190186a360200200141acd2cd003602940d20014281808080d0373702c40d200141003602b80d200141bcd2cd0036028c0d200141053602880d200341b8c0cd00200241024622021b200141880d6a200041c0a4c00020021b2802101103000c040b2002201f41d4bac3001055000b024020012802840241ffffffff0171450d0020012802800210390b201b450d00201c10390b20012802941e210020012802901e210420012802981e2103200120193602a402200120073602a00220012017410020181b36029c0220012012360298022001201a360294022001200f360290022001410036028c022001200420034105746a360288022001200436028402200120003602800220014180026a210b0b200141880d6a41206a2203200b41206a2902002209370300200141880d6a41186a2202200b41186a2902002208370300200141901c6a41086a2205200b41086a290200370300200141901c6a41106a2206200b41106a290200370300200141901c6a41186a220a2008370300200141901c6a41206a220c2009370300200141901a6a41206a2214200141901e6a41206a290200370300200141901a6a41186a2215200141901e6a41186a290200370300200141901a6a41106a220d200141901e6a41106a290200370300200141901a6a41086a220e200141901e6a41086a2902003703002001200b2902003703901c200120012902901e3703901a20014190186a41206a2213200329030037030020014190186a41186a2210200229030037030020014190186a41106a2211200141880d6a41106a220f29030037030020014190186a41086a2212200141880d6a41086a2200290300370300200120012903880d370390182001200436028c0d200141013602880d200020012903901c370300200f2005290300370300200220062903003703002003200a290300370300200141b00d6a200c290300370300200141003602b80d200141bc0d6a220320012903901a370200200141c40d6a200e290300370200200141cc0d6a200d290300370200200141d40d6a2015290300370200200141dc0d6a2014290300370200200141003602e40d200141880e6a2013290300370300200141800e6a2010290300370300200141f80d6a2011290300370300200141f00d6a2012290300370300200141e80d6a220c200129039018370300200141e40d6a2106200141b80d6a2104410021020340024002402002450d00200141106a200410f8060240200128021022024108460d00200128021421050c020b024020012802b80d2202450d00024020012802bc0d41ffffff3f71450d00200210390b20012802d00d41ffffff3f71450d0020012802cc0d10390b200141003602b80d0b200128028c0d21022001410036028c0d02402002450d0020032000290200370200200341086a200041086a290200370200200341106a200041106a290200370200200341186a200041186a290200370200200341206a200041206a290200370200200120023602b80d0c020b024020012802e40d450d00200141086a200610f8060240200128020822024108460d00200128020c21050c020b024020012802e40d2200450d000240200141e80d6a28020041ffffff3f71450d00200010390b200141fc0d6a28020041ffffff3f71450d00200141f80d6a28020010390b200c200b290200370200200c41086a200b41086a290200370200200c41106a200b41106a290200370200200c41186a200b41186a290200370200200c41206a200b41206a290200370200200141003602e40d20012802880d450d00200128028c0d2200450d00024020012802900d41ffffff3f71450d00200010390b200141a40d6a28020041ffffff3f71450d00200141a00d6a28020010390b20012802b80d2200450d02024020012802bc0d41ffffff3f71450d00200010390b20012802d00d41ffffff3f71450d0220012802cc0d10390c020b024020024107460d002001200236029020200120053602942041002802d0a94e4104490d002001412136029c1e200141103602941e200120014190206a3602981e2001200141f0016a3602901e41002802cca94e210241002802c8a94e210541002802d4a94e210a20014202370390022001419cd2cd0036028c0220014281808080c0363702bc02200141b5becd00ad4280808080c00b843702b402200141003602b0022001419dbecd00ad42808080808003843703a802200142023703a0022001411236028802200141bcd2cd00360284022001410436028002200241c0a4c000200a410246220a1b28021021022001200141901e6a36029c02200541b8c0cd00200a1b20014180026a20021103000b20012802b80d21020c000b0b20012802e0012102024020012802e8012200450d00200041246c21032002210003400240024002400240024020002d00000e050400010204030b2000410c6a280200450d03200041086a28020010390c030b2000410c6a280200450d02200041086a28020010390c020b2000410c6a280200450d01200041086a28020010390c010b200041086a280200450d00200041046a28020010390b200041246a21002003415c6a22030d000b0b024020012802e4012200450d00200041246c450d00200210390b200141c0206a24000b9c0301067f230041f0006b22012400200141186a4200370300200141106a22024200370300200141086a420037030020014200370300200141c2e6c000411a10cb0120024198b4c800410c10cb012001412036022420012001360220200141286a2001412010e40102400240200128022822030d00410421020c010b200128022c2104024002400240200141286a41086a2802002205450d00410221020240024020032d00000e03040001020b410321020c020b20054101460d00410021020240024020032d00010e020100020b410121020b2005417e6a4104490d00200328000221060c020b2001420037023c20014100280284ee4d3602382001410d36024c2001200141206a3602482001200141386a360254200141ec006a41013602002001420137025c200141949fc5003602582001200141c8006a360268200141d4006a41b4dfc400200141d8006a103b1a2001280238200128024010d1010240200128023c450d00200128023810390b410421020b0b2004450d00200310390b2000200636020420004102200220024104461b3a0000200141f0006a24000b8e0201037f230041306b22022400200241086a410141f8fbc700412410d7010240024020022802082203450d00200241106a28020041034d0d00024002402003280000220420014d0d004105210141aefcc70021040c010b200441056a2001490d0141122101419cfcc70021040b0240200228020c450d00200310390b2000200436020420004105360200200041086a20013602000c010b200220013602182002200136021c200241206a41086a200241086a41086a280200360200200220022903083703200240410141f8fbc7004124200241206a2002411c6a410410d6010d00200041b3fcc70036020420004105360200200041086a411f3602000c010b2000410a3602000b200241306a24000be00101017f230041106b2202240020024280808080104200200128021841bbcdca0041142001411c6a28020028020c1100001b2001ad84370308200241086a41cfcdca00410c200041086a41dccdca00105f41eccdca004109200041f8cdca00105f22002d00042101024020002d0005450d00200141ff017121004101210120000d000240200228020822012d0000410471450d00200128021841bc9ec00041012001411c6a28020028020c11000021010c010b200128021841bd9ec00041022001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bb6c30111047f017e017f017e067f017e087f027e047f017e037f017e037f027e0d7f057e027f230041f00e6b22012400200141a0056a10db0120012802a005410b702102200141a0056a10c20702400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802a0052203450d00200141a0056a41106a22042903002105200141ac056a280200210620012902a4052107200141d80c6a41186a22084200370300200141d80c6a41106a22094200370300200141d80c6a41086a220a4200370300200142003703d80c200141b00c6a41c2e6c000411a10cb01200a200141b00c6a41086a220b290000370300200120012900b00c3703d80c200141b00c6a41e4b5c800410e10cb012008200b290000370300200920012900b00c370300200141c0016a200141d80c6a412010ce03024020012802c001450d0020012802c401210c200120053702e40a200120063602e00a200120073702b40d200120033602b00d200141a0056a200141e00a6a200141b00d6a109407200141a00c6a41086a200141a0056a41086a2208280200220a360200200120012903a00522073703a00c200141a00d6a41086a200141b4056a220b2802002203360200200120012902ac0522053703a00d200141e00a6a41086a200a360200200120073703e00a200141b00d6a41086a2003360200200120053703b00d200141a0056a200c200141e00a6a200141b00d6a109a074101210d2008290300210e20012802a405210f024020012802a0054101470d00200f21080c060b20042802002110200b2802002111200141a0056a41186a280200211202402002450d002010201241e0006c6a211341002802d8974e211441002802e8c84821154100211603402012450d014200211742002118201021190340024002402019280238220b450d00200b41d8006c210a20192802302204210802400240024002400240024002400240024002400340200841306a280200220328020841016a41004c0d010240200341f4006a2d00000d00200841d8006a2108200a41a87f6a220a0d010c0c0b0b410410382206450d1a2006200836020020014281808080103702a405200120063602a0050240200a41d800470d0020012802a405211a20012802a005211b0c0a0b200841d8006a210a2004200b41d8006c6a220341a87f6a210b4101211c0340200a210802400340200841306a280200220a28020841016a41004c0d040240200a41f4006a2d00000d002003200841d8006a2208470d010c020b0b0240201c20012802a405470d00200141a0056a201c10990120012802a00521060b200841d8006a210a2006201c4102746a20083602002001201c41016a221c3602a805200b2008470d010b0b20012802a405211a20012802a005211b201c4102490d0902400240201c410274220b0d0042002105420021070c010b42002105200b210a42002107201b21080340427f20072008280200220341286a2903007c2005200341206a2903007c221d2005542203ad7c22052003200520075420052007511b22031b2107427f201d20031b2105200841046a2108200a417c6a220a0d000b0b201c41ffffffff0071201c470d16201c4104742208417f4c0d160240024020080d00410821040c010b200810382204450d1b0b201b200b6a211e41002106200141003602b80d200120043602b00d2001200841047622083602b40d02402008201c4f0d00200141b00d6a4100201c10930720012802b00d210420012802b80d21060b0240201b201e46221f0d00201c410274210b200420064104746a2108201b210a0340200a28020041306a280200220328020841016a41004c0d04200a41046a210a2003290340211d2008200341c8006a2903003703082008201d370300200641016a2106200841106a2108200b417c6a220b0d000b0b200120063602b80d201c4102742220210a201b21030240024002400340200a450d01200a417c6a210a2003280200210b200341046a22082103200b290320200b41286a29030084500d000b200b280230220a280208220341016a41004c0d06200a2003360208200a41c8006a290300211d200a2903402121411010382222450d1d202220213703002022201d37030841012123200141013602a405200120223602a0054100210b0340200120233602a80502400340201e2008460d012008280200210a200841046a22032108200a290320200a41286a29030084500d000b200a2802302208280208220a41016a41004c0d092008200a360208200841c8006a290300211d200829034021210240202320012802a405470d00200141a0056a2023410110930720012802a00521220b202220234104746a2208201d37030820082021370300200b41106a210b202341016a2123200321080c010b0b20012802a40521242023450d012023410474450d080240024020234101470d002022210a0c010b202241106a21082022210a0340200a2008200a290300200829030056200a41086a290300221d200841086a290300222156201d2021511b1b210a200841106a2108200b41706a220b0d000b0b20064104742203450d09024020064101460d00200441106a2108200341706a21030340200820042004290300200829030056200441086a290300221d200841086a290300222156201d2021511b1b2104200841106a2108200341706a22030d000b0b427f4200200a41086a290300221d200441086a2903007d200a29030022212004290300222554ad7d2226202120257d22252021562026201d562026201d511b22081b221d4200201941086a290300222120077d20192903002207200554ad7d2226200720057d2205200756202620215620262021511b220a1b7c4200202520081b220742002005200a1b7c22052007542208ad7c220720082007201d542007201d511b22081b211d427f200520081b21260c020b41002124201521220b201941086a290300211d201929030021260b20202103201b210a201f0d080340200a28020028023022082802080d082008417f3602082008420020082903402207200a280200220b29032022217d22052005200756200841c8006a22062903002205200b41286a2903007d2007202154ad7d220720055620072005511b220b1b370340200642002007200b1b370300200a280200220b4200370320200b41286a42003703002008200828020841016a360208200a41046a210a2003417c6a2203450d090c000b0b41dcdccc004118200141e00a6a41a0a3ca0041dcb9ca00103d000b41dcdccc004118200141e00a6a41a0a3ca0041dcb9ca00103d000b41dcdccc004118200141e00a6a41f897c70041c499c700103d000b41dcdccc004118200141e00a6a41a0a3ca0041ecb9ca00103d000b41dcdccc004118200141e00a6a41a0a3ca0041ecb9ca00103d000b41eca1ca004130419ca2ca00105b000b41aca2ca00413241e0a2ca00105b000b41f0a2ca004110200141e00a6a4180a3ca004190a3ca00103d000b02400240201c41144b0d00201c41014d0d01201b201c4102746a41786a21084101210a03402008200a41016a220a10c5072008417c6a2108201c200a470d000c020b0b201c410176220841ffffffff03712008470d0e20084102742227417f4c0d0e202710382228450d12200142003702a405200120143602a005201b417c6a2129201b41746a212a410021082014210a201c2123024002400340024002402023417f6a222b0d00410121064100212b0c010b024002400240024002400240024002400240024002400240201b202b4102746a28020041306a280200220328020841016a41004c0d00201b2023417e6a221e4102746a28020041306a280200220b28020841016a41004c0d012003290340200b29034054200341c8006a2903002207200b41c8006a29030022055420072005511b0d04202a20234102746a21034100212b4100210b03400240201e200b470d00202321060c0e0b200341046a28020041306a280200220628020841016a41004c0d03200328020041306a280200220428020841016a41004c0d042003417c6a2103200b41016a210b200629034020042903405a200641c8006a2903002207200441c8006a29030022055a20072005511b0d000b200b41016a2106200b417f7320236a212b0c050b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b202a2023410274221e6a2103024003400240202b4101470d004100212b0c020b200341046a28020041306a280200220b28020841016a41004c0d03200328020041306a280200220628020841016a41004c0d042003417c6a2103202b417f6a212b200b290340200629034054200b41c8006a2903002207200641c8006a29030022055420072005511b0d000b0b2023202b490d032023201c4b0d042023202b6b22064101762204450d00201b202b4102746a21032029201e6a210b03402003280200211e2003200b280200360200200b201e360200200341046a2103200b417c6a210b2004417f6a22040d000b0b202b450d06200641094b0d062023201c4b0d042023202b6b2106202b417f6a21032029202b4102746a210b034020232003490d09200b200641016a220610c5072003417f6a220420034f0d06200b417c6a210b200421032006410a490d000c060b0b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b202b202341c4bac3001055000b2023201c41c4bac300104b000b2023202b417f6a2203490d032023201c41d4bac300104b000b200441016a212b0b0240200820012802a405470d00200141a0056a200810b10120012802a005210a20012802a80521080b200a20084103746a220820063602042008202b360200200120012802a80541016a22083602a805024020084102490d0020012802a005210a0240034002400240024002400240200a2008417f6a4103746a2203280200450d002008410374200a6a220441746a28020022062003280204220b4b0d010b20084103490d022003280204210b200a2008417d6a222c4103746a28020421030c010b200841024d0d05200a2008417d6a222c4103746a2802042203200b20066a4d0d00200841034d0d05200441646a280200200320066a4b0d050b2003200b490d010b2008417e6a212c0b02400240024002402008202c41016a222d4d0d0002402008202c4d0d000240200a202c410374222e6a2208280204222f20082802006a2203200a202d41037422306a22082802002231490d0002402003201c4b0d00201b20314102746a220b20082802042232410274220a6a2108200341027421040240200320316b221e20326b22062032490d002028200b200a10d40b2206200a6a21030240203241014e0d002006210a0c080b201e20324a0d052006210a0c070b202820082006410274220a10d40b2233200a6a210320324101480d0520064101480d05202920046a210a03400240024002402003417c6a220628020041306a280200220428020841016a41004c0d002008417c6a221e28020041306a280200222328020841016a41004c0d01200a201e20062004290340202329034054200441c8006a2903002207202341c8006a29030022055420072005511b22041b2802003602002003200620041b2103200b201e200820041b2208490d020c090b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b200a417c6a210a200320334b0d000c060b0b2003201c4184bbc300104b000b203120034184bbc3001055000b202c200841f4bac300103c000b202d200841e4bac300103c000b201b20046a211e2006210a024002400340200828020041306a280200220628020841016a41004c0d01200a28020041306a280200220428020841016a41004c0d02200b2008200a2006290340200429034054200641c8006a2903002207200441c8006a29030022055420072005511b22061b280200360200200a200a41046a20061b210a200b41046a210b200841046a200820061b2208201e4f0d04200a2003490d000c040b0b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041e4bbc300103d000b2033210a2008210b0b200b200a2003200a6b417c7110d40b1a024020012802a8052208202c4d0d0020012802a005220a202e6a2203202f20326a360204200320313602002008202d4d0d02200a20306a2203200341086a2008202c6b41037441706a10d50b1a20012008417f6a22083602a805200841014b0d010c030b0b202c20084194bbc300103c000b202d20081044000b202b2123202b450d020c000b0b2003202341d4bac3001055000b024020012802a40541ffffffff0171450d0020012802a00510390b2027450d00202810390b201c417f6a210602400240024002400240024002400240201f450d0042002107420021050c010b42002107410021082020210b42002105201b210303402003280200280230220a28020841016a41004c0d02200141a0016a200a41c8006a290300223442002008ad2235420010d30b200141b0016a200a290340223642002035420010d30b02404200427f20012903b00120012903a801420052200141b0016a41086a290300222120012903a0017c222520215472220a1b222120077d22372037202156427f2025200a1b222520057d2021200754ad7d222120255620212025511b220a1b20192903005842002021200a1b2221201941086a29030022255820212025511b0d0042002035427f7c2221202120355620084520081b1ba721060c020b200841016a2108200341046a2103427f200520347c200720367c2221200754220aad7c2207200a200720055420072005511b220a1b2105427f2021200a1b2107200b417c6a220b0d000b0b201c20064d0d01201b20064102746a280200280230220828020841016a41004c0d0220014180016a200841c8006a29030022374200200641016a220bad2235420010d30b20014190016a2008290340223442002035420010d30b4200427f201941086a290300222120057c2019290300220520077c22252005542208ad7c22072008200720215420072021511b22081b2207427f20014190016a41086a29030022052001290380017c2221200129038801420052202120055472220a1b7d427f202520081b2205427f200129039001200a1b222554ad7d2221200520257d2225200556202120075620212007511b22081b21364200202520081b2138201b210a03402020450d06200a2802002208450d062008280230220328020841016a41004c0d04200141f0006a203820362035420010da0b200841286a4200427f200141f0006a41086a290300220720377c2001290370220520347c22212005542206ad7c22052006200520075420052007511b22061b2207200341c8006a2903007d427f202120061b22052003290340222554ad7d2221200520257d2225200556202120075620212007511b22031b220537030020084200202520031b2207370320200828023022082802080d05200a41046a210a200841003602082008427f2008290340222120077c220720072021542203200841c8006a2206290300220720057c2003ad7c220520075420052007511b22031b3703402006427f200520031b3703002020417c6a2120200b417f6a220b0d000c060b0b41dcdccc004118200141e00a6a41a0a3ca0041b0a3ca00103d000b41c0a3ca00418a0141cca4ca00105b000b41dcdccc004118200141e00a6a41a0a3ca0041dca4ca00103d000b41dcdccc004118200141e00a6a41a0a3ca0041eca4ca00103d000b41f0a2ca004110200141e00a6a4180a3ca0041fca4ca00103d000b0240201a41ffffffff0371450d00201b10390b200141e8006a20191092070240202441ffffffff0071450d00202210390b20012802b40d41ffffffff0071450d0220012802b00d10390c020b201a41ffffffff0371450d00201b10390b420021264200211d0b201d20182026201756201d201856201d2018511b22081b21182026201720081b2117201941e0006a22192013470d000b201641016a221620024f0d01201720188450450d000b0b200e422088a721040240024002400240200c0d00200f2108200f21030c010b200f2108200f21032004450d002004410274210b200f210a200f210302400340200a2802002208450d01200828020841016a41004c0d0402400240200841f4006a2d00000d0020082008280200417f6a220636020020060d01200841046a22062006280200417f6a220636020020060d01200810390c010b20032008360200200341046a2103200c417f6a220c450d020b200a41046a210a200b417c6a220b0d000b2003200f6b2220410275211b0c020b200a41046a21080b2003200f6b2220410275211b200f20044102746a220b2008460d0003402008280200220a200a280200417f6a2203360200200841046a2108024020030d00200a41046a22032003280200417f6a220336020020030d00200a10390b200b2008470d000b0b0240201b41144b0d00201b41014d0d06201b410274200f6a41786a21084101210a03402008200a41016a220a10ae072008417c6a2108201b200a470d000c070b0b201b410176220841ffffffff03712008470d0820084102742229417f4c0d0820291038221c450d0c200142003702a405200141002802d8974e3602a005200f417c6a2128200f41746a211941002108201b212b034002400240202b221e417f6a222b0d004100212b4101210b0c010b024002400240024002400240024002400240024002400240200f202b4102746a280200220a28020841016a41004c0d00200f201e417e6a22044102746a280200220328020841016a41004c0d01200a2802502003280250490d042019201e4102746a210a4100212b410021030340024020042003470d00201e210b0c0e0b200a41046a280200220b28020841016a41004c0d03200a280200220628020841016a41004c0d04200a417c6a210a200341016a2103200b28025020062802504f0d000b200341016a210b2003417f73201e6a212b0c050b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b2019201e41027422046a210a024003400240202b4101470d004100212b0c020b200a41046a280200220328020841016a41004c0d03200a280200220b28020841016a41004c0d04200a417c6a210a202b417f6a212b2003280250200b280250490d000b0b201e202b490d03201e201b4b0d04201e202b6b220b4101762206450d00200f202b4102746a210a202820046a21030340200a2802002104200a200328020036020020032004360200200a41046a210a2003417c6a21032006417f6a22060d000b0b202b450d06200b41094b0d06201e201b4b0d04201e202b6b210b202b417f6a21082028202b4102746a210a0340201e2008490d0c200a200b41016a220b10ae072008417f6a220320084f0d06200a417c6a210a20032108200b410a490d000c060b0b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b202b201e41c4bac3001055000b201e201b41c4bac300104b000b201e202b417f6a2208490d06201e201b41d4bac300104b000b200341016a212b20012802a80521080b02400240200820012802a405460d0020012802a80521030c010b200141a0056a200810b10120012802a805220321080b20012802a005220a20084103746a2208200b3602042008202b3602002001200341016a22083602a805024020084102490d00024003400240024002400240200a2008417f6a4103746a2203280200450d002008410374200a6a220441746a28020022062003280204220b4d0d00200841024d0d06200a2008417d6a222c4103746a2802042203200b20066a4d0d01200841034d0d06200441646a280200200320066a4b0d060c010b20084103490d012003280204210b200a2008417d6a222c4103746a28020421030b2003200b490d010b2008417e6a212c0b02400240024002402008202c41016a222d4d0d0002402008202c4d0d000240200a202c410374222e6a2208280204222f20082802006a2203200a202d41037422306a22082802002231490d0002402003201b4b0d00200f20314102746a220b20082802042232410274220a6a2108200341027421040240200320316b221e20326b22062032490d00201c200b200a10d40b2206200a6a21030240203241014e0d002006210a0c080b201e20324a0d052006210a0c070b201c20082006410274220a10d40b2233200a6a210320324101480d0520064101480d05202820046a210a03400240024002402003417c6a2206280200221e28020841016a41004c0d002008417c6a2204280200222328020841016a41004c0d01200a20042006201e280250202328025049221e1b28020036020020032006201e1b2103200b20042008201e1b2208490d020c090b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b200a417c6a210a200320334b0d000c060b0b2003201b4184bbc300104b000b203120034184bbc3001055000b202c200841f4bac300103c000b202d200841e4bac300103c000b200f20046a211e2006210a0240024003402008280200220628020841016a41004c0d01200a280200220428020841016a41004c0d02200b2008200a200628025020042802504922061b280200360200200a200a41046a20061b210a200b41046a210b200841046a200820061b2208201e4f0d04200a2003490d000c040b0b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b41dcdccc004118200141e00a6a41b4bbc30041c4bbc300103d000b2033210a2008210b0b200b200a2003200a6b417c7110d40b1a024020012802a8052208202c4d0d0020012802a005220a202e6a2203202f20326a360204200320313602002008202d4d0d02200a20306a2203200341086a2008202c6b41037441706a10d50b1a20012008417f6a22083602a805200841014d0d030c010b0b202c20084194bbc300103c000b202d20081044000b202b450d050c000b0b41dcdccc004118200141e00a6a41ac8dc70041bc8dc700103d000b0240200542ffffff3f83500d00200610390b02402007422088a72208450d00200841386c210a2003412c6a210803400240200828020041ffffff3f71450d002008417c6a28020010390b200841386a2108200a41486a220a0d000b0b2007a72208450d00200841386c450d00200310390b4101210a420021070c110b2008201e41d4bac3001055000b024020012802a40541ffffffff0171450d00200a10390b2029450d00201c10390b2010201241e0006c220a6a2104024002400240024020120d00201021080c010b200141b00d6a410472210b20102108024002400340200841306a280200450d02200141a0056a200841e00010d40b1a200141b00d6a200141a0056a10b60720012802b00d22030d01200841e0006a2108200a41a07f6a220a0d000b41002802d8974e212c0c030b200141e00a6a41206a200b41206a2902002207370300200141d80c6a41086a221e200b41086a290200370300200141d80c6a41106a2223200b41106a290200370300200141d80c6a41186a2233200b41186a290200370300200141d80c6a41206a222c20073703002001200b2902003703d80c412c10382206450d0a20062003360200200620012903d80c3702042006410c6a201e290300370200200641146a20232903003702002006411c6a2033290300370200200641246a202c29030037020020014281808080103702840d200120063602800d02400240200a41e000470d004101211a0c010b200841e0006a2108200141b00d6a410472211e2010201241e0006c6a220341a07f6a21334101211a03402008210a02400340200a41e0006a2108200a41306a280200450d01200141a0056a200a41e00010d40b1a200141b00d6a200141a0056a10b607024020012802b00d220b0d002008210a20032008470d010c040b0b200141e00a6a41206a201e41206a2902002207370300200141d80c6a41086a222c201e41086a290200370300200141d80c6a41106a2232201e41106a290200370300200141d80c6a41186a2231201e41186a290200370300200141d80c6a41206a222d20073703002001201e2902003703d80c0240201a20012802840d470d00200141800d6a201a10c50220012802800d21060b200a41e0006a21082006201a412c6c6a2223200b360200202320012903d80c3702042023410c6a202c290300370200202341146a20322903003702002023411c6a2031290300370200202341246a202d2903003702002001201a41016a221a3602880d2033200a470d010c020b0b20042008460d00034002402008220641386a2802002208450d00200841d8006c2103200628023041306a210803402008280200220a200a280200417f6a220b3602000240200b0d00200a41046a220b200b280200417f6a220b360200200b0d00200a10390b200841d8006a2108200341a87f6a22030d000b0b200641e0006a21080240200641346a280200220a450d00200a41d8006c450d00200628023010390b20082004470d000b0b02402011450d00201141e0006c450d00201010390b20012802840d212a20012802800d212c0c030b200841e0006a21080b41002802d8974e212c20042008460d00034002402008220641386a2802002208450d00200841d8006c2103200628023041306a210803402008280200220a200a280200417f6a220b3602000240200b0d00200a41046a220b200b280200417f6a220b360200200b0d00200a10390b200841d8006a2108200341a87f6a22030d000b0b200641e0006a21080240200641346a280200220a450d00200a41d8006c450d00200628023010390b20082004470d000b0b4100212a02402011450d00201141e0006c450d00201010390b4100211a0b200ea7212b201a412c6c210a410021080340200a2008460d02200141e0006a202c20086a10dc092008412c6a21082001280260220b450d000b200128026421060240201a450d00201a412c6c210a202c210803400240200841046a2802002203450d00200341226c450d00200828020010390b2008412c6a2108200a41546a220a0d000b0b2006ad21070240202a450d00202a412c6c450d00202c10390b20074220862107200bad210502402020450d00201b4102742103200f210803402008280200220a200a280200417f6a220b3602000240200b0d00200a41046a220b200b280200417f6a220b360200200b0d00200a10390b200841046a21082003417c6a22030d000b0b2007200584210e41032108202b41ffffffff0371450d00200f10390b200120083602a0052001200e3702a405200e422088a7210820012903a0052207422088a7211e2007a721044100210a0c0c0b201bad42307e2207422088a70d002007a72208417f4c0d000240024020080d004108210a0c010b20081038220a450d050b4100210b200141003602b80d2001200a3602b00d2001200841306e22083602b40d02402008201b4f0d00200141b00d6a4100201b10f60320012802b80d210b0b0240024002400240024002400240024002400240024002400240024002400240024020200d00200f21080c010b201b410274212320012802b00d200b41306c6a210a200141d80c6a41186a2106200141d80c6a41106a2104200141d80c6a41086a211e200f21030240034020032802002208450d01200828020841016a223341004c0d04200820333602082006200841ec006a2900003703002004200841e4006a290000370300201e200841dc006a2900003703002001200841d4006a2900003703d80c200828020841016a223341004c0d0520082033360208200141a0056a41086a2233201e290300370300200141a0056a41106a22322004290300370300200141a0056a41186a2231200629030037030020082008280208417e6a360208200120012903d80c3703a005200841c8006a29030021072008290340210520082008280200417f6a222d3602000240202d0d00200841046a222d202d280200417f6a222d360200202d0d00200810390b200341046a2103200a20012903a005370300200a41286a2007370300200a41206a2005370300200a41186a2031290300370300200a41106a2032290300370300200a41086a2033290300370300200a41306a210a200b41016a210b2023417c6a22230d000b2001200b3602b80d0c020b200341046a21080b2001200b3602b80d200f201b4102746a220b2008460d0003402008280200220a200a280200417f6a2203360200200841046a2108024020030d00200a41046a22032003280200417f6a220336020020030d00200a10390b200b2008470d000b0b0240202b41ffffffff0371450d00200f10390b20012802b00d210c20012902b40d2217a7211f200141a0056a10c207024020012802a0052208450d00200141ac056a280200210a200141a0056a41106a2903002107200120012902a4053702a40a200120083602a00a200120073702b40a2001200a3602b00a200141f00c6a4200370300200141d80c6a41106a4200370300200141d80c6a41086a22084200370300200142003703d80c200141b00c6a41c2e6c000411a10cb012008200141b00c6a41086a220a290000370300200120012900b00c3703d80c200141b00c6a41e4b5c800410e10cb01200941086a200a290000370000200920012900b00c370000200141d8006a200141d80c6a412010ce030240200128025822140d004101210a4100211e0c190b200128025c2139200142003702c40a024020012802a80a2208450d00200841386c210320012802a00a41086a21084100210a0340200141a0056a41186a200841186a290000370300200141a0056a41106a200841106a290000370300200141a0056a41086a200841086a290000370300200120082900003703a005200841386a2108200141c00a6a200141a0056a200a109607200a41016a210a200341486a22030d000b0b2001200141c00a6a3602cc0a200142003702d40a024020012802b80a2208450d0020012802b00a220420084105746a212b4100210b41002132034002400240200b450d0020012802d00a21230c010b41e0001038220b450d1641002123200b4100360200200b41003b015e2001200b3602d40a200141003602d00a0b200441206a2131024002400340200b41046a212d200b2f015e2233410274210641002108417f210a02400340024020062008470d002033210a0c020b2004200b20086a221e41046a280200412010d70b2203450d03200a41016a210a200841046a21082003417f4a0d000b0b02402023450d002023417f6a2123200b200a4102746a41e0006a280200210b0c010b0b02400240024002400240024002402033410a4b0d00202d200a41027422086a2103200a2033490d01200320043602000c020b4100211e4104210802400240200a41054f0d00200a21060c010b410521084105210602400240200a417b6a0e020201000b200a41796a21064101211e410621080c010b410021064101211e0b41e00010382203450d1d200341003b015e200341003602002003200b2f015e22232008417f736a220a3b015e200a410c4f0d0d2023200841016a22336b200a470d0e200b41306a22232008410274222f6a280200212e202d202f6a280200212f200341046a202d203341027422336a200a410274220a10d40b1a200341306a202320336a200a10d40b1a200b20083b015e2003200b201e1b220841046a22332006410274220a6a212302400240200641016a222d20082f015e221e4d0d00202320043602000c010b2033202d410274222d6a2023201e20066b410274220610d50b1a20232004360200200841306a2204202d6a2004200a6a200610d50b1a0b2008200a6a41306a20323602002008201e41016a3b015e200b28020022080d024100212d0c030b202d200a41016a41027422066a20032033200a6b410274220a10d50b1a20032004360200200b41306a220320066a200320086a200a10d50b1a0b200b20086a41306a2032360200200b203341016a3b015e0c030b4100212d202f2133202e211b200321300340200b2f015c21062008221e2f015e2223410b490d024100210441042108024020064105490d0020062108024002402006417b6a0e020201000b200641796a210641012104410621080c010b4100210641012104410521080b41900110382203450d1b200341003b015e200341003602002003201e2f015e220b2008417f736a220a3b015e200a410c4f0d0d200b200841016a221c6b200a470d0e201e41306a22282008410274220b6a280200212e201e41046a2219200b6a280200212f200341046a2019201c410274220b6a200a410274220a10d40b1a200341306a2028200b6a200a10d40b1a201e20083b015e20032f015e220a41016a211c200a410c4f0d0f202320086b2208201c470d10202d41016a212d200341e0006a201e200b6a41e0006a200841027410d40b1a4100210802400340200320084102746a41e0006a280200220b20083b015c200b20033602002008200a4f0d0120082008200a496a2208200a4d0d000b0b2003201e20041b220b41046a221c200641027422236a210402400240200641016a2208200b2f015e220a4d0d0020042033360200200b41306a21330c010b201c200841027422286a2004200a20066b410274221c10d50b1a20042033360200200b41306a223320286a203320236a201c10d50b1a0b200a41016a2104203320236a201b360200200b41e0006a21330240200641026a221c200a41026a221b4f0d002033201c4102746a203320084102746a200a20066b41027410d50b1a0b203320084102746a2030360200200b20043b015e02402008201b4f0d00200b20236a41e4006a210803402008280200220a200641016a22063b015c200a200b360200200841046a210820042006470d000b0b201e210b202f2133202e211b20032130201e28020022080d000b0b20012802d40a220a450d0f20012802d00a210b41900110382208450d192008200a360260200841003b015e20084100360200200a41003b015c200a2008360200200120083602d40a2001200b41016a3602d00a200b202d470d1020082f015e220a410b4f0d112008200a41016a220b3b015e2008200a4102746a220a41306a202e360200200a41046a202f360200200841e0006a200b4102746a2003360200200320083602002003200b3b015c200120012802d80a41016a3602d80a0c030b201e41046a210a202341016a210302400240202320064b0d00200a200641027422086a2033360200201e20086a41306a201b360200201e41e0006a210a202341026a210b200641016a21080c010b200a200641016a2208410274220b6a200a200641027422046a220a202320066b410274220610d50b1a200a2033360200201e41306a220a200b6a200a20046a220a200610d50b1a200a201b3602002004201e41e0006a220a6a41086a200a200b6a200610d50b1a202341026a210b0b200a200841027422066a2030360200201e20033b015e2008200b4f0d00201e20066a41e0006a210a0340200a280200220320083b015c2003201e360200200a41046a210a200b200841016a2208470d000b0b200120012802d80a41016a3602d80a0c010b201e41306a20323602000b2031202b460d01203241016a213220012802d40a210b203121040c000b0b202c201a412c6c6a2106201a450d0c200141b00d6a410c6a2104200141b00d6a410472210a4100210b02400340202c200b6a22082802002203450d01200141b00c6a41206a200841246a2902002207370300200141b00c6a41186a2008411c6a2902002205370300200141b00c6a41106a200841146a2902002218370300200141b00c6a41086a2008410c6a290200221d3703002001200841046a29020022213703b00c200a2021370200200a41086a201d370200200a41106a2018370200200a41186a2005370200200a41206a2007370200200120033602b00d420021070240200141c00a6a200410b8072203450d0020012802a80a200328020022034d0d0020012802a00a200341386c6a29030021070b200141a0056a41286a200141b00d6a41286a280200360200200141a0056a41206a200141b00d6a41206a290300370300200141a0056a41186a200141b00d6a41186a290300370300200141a0056a41106a200141b00d6a41106a290300370300200141a0056a41086a200141b00d6a41086a290300370300200120012903b00d3703a005200141e00a6a200141a0056a2007420010dd09200841286a200141e00a6a41286a280200360200200841206a200141e00a6a41206a290300370200200841186a200141e00a6a41186a290300370200200841106a200141e00a6a41106a290300370200200841086a200141e00a6a41086a290300370200200820012903e00a370200200b412c6a210b2008412c6a2006470d000b200b412c6d21280c0f0b2008412c6a210a0c0d0b4101210a4100211e0c180b41dcdccc004118200141e00a6a41f897c700418898c700103d000b41dcdccc004118200141e00a6a41f897c700419898c700103d000b200a410b41a485c700104b000b41b485c700412841dc85c7001035000b200a410b41a485c700104b000b41b485c700412841dc85c7001035000b201c410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b202c210a202c21080b2008202c6b220b412c6d21282006200a460d00202c201a412c6c6a21060340200a2208412c6a210a0240200841046a2802002203450d00200341226c450d00200828020010390b2006200a470d000b0b202aad21052028412c6c210a202c21030240034020032108200a450d01420021070240200141c00a6a2008410c6a10b8072203450d0020012802a80a200328020022034d0d0020012802a00a200341386c6a29030021070b2008412c6a2103200141d0006a20082007420010b207200a41546a210a20012802502206450d000b20012802542108200141033602a00520012008ad4220862006ad843702a40520012903a00521070240200b450d002028412c6c2103202c210a03400240200a41046a280200220b450d00200b41306c450d00200a28020010390b200a412c6a210a200341546a22030d000b0b200742208821050240202a450d00202a412c6c450d00202c10390b2007a721042005a7211e0c080b20012005422086202cad843703a00c200120283602a80c200141a00c6a10de092001200141a00a6a3602e40a2001200141c00a6a3602e00a2001200141e00a6a3602d80c0240202841144b0d00202841014d0d042028412c6c202c6a41a87f6a21084101210a03402008200a41016a220a200141d80c6a10c407200841546a21082028200a470d000c050b0b2028410176ad422c7e2207422088a70d002007a72227417f4c0d00202710382222450d04200142003702b40d41002108200141002802d8974e3602b00d202c41546a2124202c41887f6a21022028212f0240034002400240202f220f417f6a222f0d004100212f4101210b0c010b20012802d80c220a280200202c202f412c6c6a410c6a10b807210b200a280204210342002105420021070240024002400240024002400240024002400240024002400240200b450d0020032802082206200b280200220b4d0d012003280200200b41386c6a29030021070b0240200a280200202c200f417e6a221e412c6c6a410c6a10b807220b450d0020032802082206200b280200220b4d0d022003280200200b41386c6a29030021050b20052007540d042002200f412c6c6a21034100212f4100210603400240201e2006470d00200f210b0c0e0b200a2802002003412c6a10b8072104200a280204210b420021054200210702402004450d00200b2802082223200428020022044d0d04200b280200200441386c6a29030021070b0240200a280200200310b8072204450d00200b2802082223200428020022044d0d05200b280200200441386c6a29030021050b200341546a2103200641016a2106200520075a0d000b200641016a210b2006417f73200f6a212f0c050b200b200641d4bbc300103c000b200b200641d4bbc300103c000b2004202341d4bbc300103c000b2004202341d4bbc300103c000b2002200f410b6c410274221e6a2103024003400240202f4101470d004100212f0c020b200a2802002003412c6a10b8072106200a280204210b420021054200210702402006450d00200b2802082204200628020022064d0d04200b280200200641386c6a29030021070b0240200a280200200310b8072206450d00200b2802082204200628020022064d0d05200b280200200641386c6a29030021050b200341546a2103202f417f6a212f20052007540d000b0b200f202f490d03200f20284b0d04200f202f6b220b4101762206450d00202c202f412c6c6a210a2024201e6a21030340200141a0056a41286a2204200a41286a221e280200360200200141a0056a41206a2223200a41206a2233290200370300200141a0056a41186a2232200a41186a2231290200370300200141a0056a41106a222d200a41106a222b290200370300200141a0056a41086a222e200a41086a22302902003703002001200a2902003703a005200341086a221b2902002107200341106a221c2902002105200341186a22192902002118200341206a2220290200211d200341286a22292802002113200a2003290200370200201e20133602002033201d37020020312018370200202b200537020020302007370200202920042802003602002020202329030037020020192032290300370200201c202d290300370200201b202e290300370200200320012903a005370200200a412c6a210a200341546a21032006417f6a22060d000b0b202f450d06200b41094b0d06200f20284b0d04200f202f6b210b202f417f6a21082024202f412c6c6a210a0340200f2008490d0b200a200b41016a220b200141d80c6a10c4072008417f6a220320084f0d06200a41546a210a20032108200b410a490d000c060b0b2006200441d4bbc300103c000b2006200441d4bbc300103c000b202f200f41c4bac3001055000b200f202841c4bac300104b000b200f202f417f6a2208490d05200f202841d4bac300104b000b200341016a212f20012802b80d21080b0240200820012802b40d470d00200141b00d6a200810b10120012802b80d21080b20012802b00d220a20084103746a2203200b3602042003202f3602002001200841016a22083602b80d0240024020084102490d0020012802d80c2106034002400240024002400240200a2008417f6a4103746a2203280200450d002008410374200a6a221e41746a28020022042003280204220b4b0d010b20084103490d022003280204210b200a2008417d6a22314103746a28020421030c010b200841024d0d04200a2008417d6a22314103746a2802042203200b20046a4d0d00200841034d0d04201e41646a280200200320046a4b0d040b2003200b490d010b2008417e6a21310b02400240024002402008203141016a222e4d0d000240200820314d0d000240200a203141037422306a2208280204221b20082802006a2203200a202e410374221c6a220a280200222b490d000240200320284b0d00202c202b412c6c6a2208200a280204222d412c6c220b6a210a2003412c6c210402402003202b6b221e202d6b2203202d490d0020222008200b10d40b2203200b6a210b0240202d41014e0d00200321030c080b201e202d4a0d05200321030c070b2022200a2003412c6c220b10d40b2232200b6a210b202d4101480d0520034101480d05202420046a210303402006280200200b41606a10b807211e2006280204210442002105420021070240024002400240201e450d0020042802082223201e280200221e4d0d012004280200201e41386c6a29030021070b02402006280200200a41606a10b807221e450d0020042802082223201e280200221e4d0d022004280200201e41386c6a29030021050b2003200a41546a2223200b41546a22332005200754221e1b2204290200370200200341286a200441286a280200360200200341206a200441206a290200370200200341186a200441186a290200370200200341106a200441106a290200370200200341086a200441086a290200370200200b2033201e1b210b20082023200a201e1b220a490d020c090b201e202341d4bbc300103c000b201e202341d4bbc300103c000b200341546a2103200b20324b0d000c060b0b200320284184bbc300104b000b202b20034184bbc3001055000b2031200841f4bac300103c000b202e200841e4bac300103c000b202c20046a2123200321030240024003402006280200200a410c6a10b807211e2006280204210442002105420021070240201e450d0020042802082233201e280200221e4d0d022004280200201e41386c6a29030021070b024020062802002003410c6a10b807221e450d0020042802082233201e280200221e4d0d032004280200201e41386c6a29030021050b2008200a20032005200754221e1b2204290200370200200841286a200441286a280200360200200841206a200441206a290200370200200841186a200441186a290200370200200841106a200441106a290200370200200841086a200441086a29020037020020032003412c6a201e1b21032008412c6a2108200a412c6a200a201e1b220a20234f0d042003200b490d000c040b0b201e203341d4bbc300103c000b201e203341d4bbc300103c000b20322103200a21080b20082003200b20036b220a200a412c706b10d40b1a20012802b80d220820314d0d0220012802b00d220a20306a2203201b202d6a3602042003202b3602002008202e4d0d04200a201c6a2203200341086a200820316b41037441706a10d50b1a20012008417f6a22083602b80d200841014b0d000b0b202f450d050c010b0b203120084194bbc300103c000b202e20081044000b1034000b2008200f41d4bac3001055000b024020012802b40d41ffffffff0171450d00200a10390b2027412c7021082027412c490d0020272008460d00202210390b20012802a00c222e20012802a80c2208412c6c6a213220012802a40c213a0240024020080d00202e2108202e211e0c010b41002802d895472112200141a2056a211c200141800d6a41086a212f200141800d6a41106a2130200141800d6a41186a211b202e213103402031221e412c6a21310240201e28020022330d00203121080c020b202f201e41146a22282902003703002030201e411c6a2219290200370300201b201e41246a22202902003703002001201e29020c3703800d02400240201e280208220b41306c220a0d0042002105420021070c010b203341206a210842002105420021070340427f2007200841086a2903007c200520082903007c22182005542203ad7c22052003200520075420052007511b22031b2107427f201820031b2105200841306a2108200a41506a220a0d000b0b201e280204212d024002400240200b41306c2208450d00203320086a2104200841506a210a203321080340200141b00d6a41186a2203200841186a290300370300200141b00d6a41106a220b200841106a290300370300200141b00d6a41086a2206200841086a290300370300200120082903003703b00d200841206a290300200841286a2903002005200710b707222341ffff03710d02200a41506a210a200841306a22082004470d000b0b410021080240202d450d00202d41306c450d00203310390b2012210a410021230c010b200141b00c6a41186a221620032903002218370300200141b00c6a41106a220d200b290300221d370300200141b00c6a41086a221520062903002221370300200120012903b00d22263703b00c201c41186a22292018370100201c41106a2213201d370100201c41086a220f2021370100201c2026370100200141e00a6a41086a2222200f290100370300200141e00a6a41106a22242013290100370300200141e00a6a41186a220220292901003703002001201c2901003703e00a41221038222b450d03202b20012903e00a370100202b20233b0120202b41186a2002290300370100202b41106a2024290300370100202b41086a202229030037010020014281808080103702a40d2001202b3602a00d02400240200a0d00410121230c010b200841306a2110200441506a211141012123034020102108024003402003200841186a290300370300200b200841106a2903003703002006200841086a290300370300200120082903003703b00d200841206a290300200841286a2903002005200710b707220a41ffff03710d01200841306a22082004470d000c030b0b201620032903002218370300200d200b290300221d370300201520062903002221370300200120012903b00d22263703b00c202920183701002013201d370100200f2021370100201c20263701002022200f29010037030020242013290100370300200220292901003703002001201c2901003703e00a0240202320012802a40d470d00200141a00d6a2023410110c70220012802a00d212b0b200841306a2110202b202341226c6a222720012903e00a370100202229030021182024290300211d200229030021212027200a3b0120202741186a2021370100202741106a201d370100202741086a20183701002001202341016a22233602a80d20112008470d000b0b0240202d450d00202d41306c450d00203310390b20012802a40d210820012802a00d210a0b200141a0056a41186a201b2903002207370300200141a0056a41106a20302903002205370300200141a0056a41086a202f2903002218370300200120012903800d221d3703a005201e2023360208201e2008360204201e200a360200201e201d37020c20282018370200201920053702002020200737020020322031470d000b203221082031211e0b201e202e6b2206412c6d210b024020322008460d0003402008220a412c6a21080240200a41046a2802002203450d00200341306c450d00200a28020010390b20322008470d000b0b200b412c6c210a4100210802400340200a2008460d01200141c8006a202e20086a10dc092008412c6a210820012802482203450d000b200128024c2108200141033602a00520012008ad4220862003ad843702a40520012903a005210702402006450d00200b412c6c2103202e210a03400240200a41046a280200220b450d00200b41226c450d00200a28020010390b200a412c6a210a200341546a22030d000b0b200742208821050240203a450d00203a412c6c450d00202e10390b2005a7211e2007a721040c040b200141053602b00c200141c40d6a200141d00a6a3602002001201e3602bc0d2001202e3602b80d2001203a3602b40d2001202e3602b00d2001200141b00c6a3602c80d2001200141cc0a6a3602c00d200141a0056a200141b00d6a10df090240024020012802a405450d0041101038220b450d02200b20012903a005370200200b41086a200141a0056a41086a220829030037020020014281808080103702dc0c2001200b3602d80c200141a0056a41186a200141b00d6a41186a280200360200200141a0056a41106a200141b00d6a41106a2903003703002008200141b00d6a41086a290300370300200120012903b00d3703a005200141e00a6a200141a0056a10df09024020012802e40a450d00410221084110210a41012103034002402008417f6a2003470d00200141d80c6a2003410110cb0220012802d80c210b0b200b200a6a220320012903e00a370200200341086a200141e00a6a41086a290300370200200120083602e00c200141e00a6a200141a0056a10df0920012802e40a450d01200a41106a210a200841016a210820012802dc0c21030c000b0b20012802ac0520012802a80522086b220a412c6d21030240200a450d002003412c6c210a03400240200841046a2802002203450d00200341226c450d00200828020010390b2008412c6a2108200a41546a220a0d000b0b024020012802a4052208450d002008412c6c450d0020012802a00510390b20012902dc0c21210c010b20012802bc0d20012802b80d22086b220a412c6d21030240200a450d002003412c6c210a03400240200841046a2802002203450d00200341226c450d00200828020010390b2008412c6a2108200a41546a220a0d000b0b41002802d8974e210b4200212120012802b40d2208450d002008412c6c450d0020012802b00d10390b0240024020012802b00c22044105470d0020012802a80a210620012802b80a2123200141a0056a10a101200141b8056a29030050450d0141baccc800413e41f8ccc800105b000b20012902b40c210702402021422088a72208450d002008410474210a200b41086a210803400240200828020041ffffffff0371450d002008417c6a28020010390b200841106a2108200a41706a220a0d000b0b0240202142ffffffff0083500d00200b10390b2007422088a721082007a7211e0c040b2021422088a721034100210a2006450d024200200141c0056a290300220742809ce8af6d7c220520052007561b21072039ad42c08db7017e21052006ad221d42d89585027e211820062108024020064101762204450d00201d42a0d9a8087e211d2006210a034002400240201d20057c4280e59af7007c221d2007540d00201d2007510d06200a20046b2208200a4d0d01200a21080c030b0240200a20046a2208200a4f0d00200a21080c030b20082006490d00200a21080c020b2008200a460d042008ad42c8c3a3067e20187c211d2008210a200441017622040d000b0b024003402008220a41016a220820064b0d012008ad42c8c3a3067e20187c20057c4280e59af7007c2007540d000b0b4100211e200a417f6a200a4b0d0103400240200aad42c8c3a3067e20187c20057c4280e59af7007c2007560d00200a211e0c030b200a417e6a2108200a417f6a2204210a200820044d0d000c020b0b1032000b2006201e201e20064b1b210a0b2001200a3602a00d200141002003200a6b2208200820034b1b3602800d024041002802d0a94e4104490d00200141f00c6a4200370300200141d80c6a41106a4200370300200141d80c6a41086a22084200370300200142003703d80c200141b00c6a41c7e5c000410610cb012008200141b00c6a41086a220a290000370300200120012900b00c3703d80c200141b00c6a419081c400410610cb01200941086a200a290000370000200920012900b00c370000200141c0006a200141d80c6a412010ce03200141b00d6a411c6a4102360200200141c40d6a4102360200200141bc0d6a410236020020012001280244410020012802401b3602b00c200141103602b40d200120033602e00a2001200141800d6a3602c80d2001200141a00d6a3602c00d2001200141e00a6a3602b80d2001200141b00c6a3602b00d41002802cca94e210841002802c8a94e210a41002802d4a94e2104200141a0056a41106a4204370300200141d4056a4196f5c700ad4280808080d00e84370200200141c8056a41e8f4c700ad4280808080e00584370300200141a0056a41206a4204370300200141a0056a41086a411a360200200141a0056a411c6a200141b00d6a360200200141bcf9c7003602ac0520014281808080b0343702dc05200141003602d005200141d0b9c7003602a405200141043602a005200a41b8c0cd00200441024622041b200141a0056a200841c0a4c00020041b28021011030020012802a00d210a0b0240200a20034b0d00200a2003460d002003410474200a41047422086b21032008200b6a41086a210803400240200828020041ffffffff0371450d002008417c6a28020010390b200841106a2108200341706a22030d000b200a21030b2021a721324100210a0240024002400240024002400240024002400240024002400240024002400240024020030e020401000b200141a0056a41047221334100210a2003210403402003200a20046a4101762208490d0b200141a0056a200b200810fb0220012802a0054101460d05200141b00d6a203341c00110d40b1a200141e00a6a200141b00d6a10c80220012802e80a211e024020012802e40a450d0020012802e00a10390b200141b00d6a10fc0220082004201e418080d8014b221e1b2204200a2008201e1b220a6b41014b0d000b200a2003490d010c020b4100210a0b200a41016a21082003200a4d0d09200141a0056a200b200810fb0220012802a0054101460d0a200141b00d6a200141a0056a41047241c00110d40b1a200141e00a6a200141b00d6a10c80220012802e80a2104024020012802e40a450d0020012802e00a10390b200a20082004418080d8014b1b210a200141b00d6a10fc020b2001200a3602800d024041002802d0a94e4104490d00200141f00c6a4200370300200141d80c6a41106a4200370300200141d80c6a41086a22084200370300200142003703d80c200141b00c6a41c7e5c000410610cb012008200141b00c6a41086a2204290000370300200120012900b00c3703d80c200141b00c6a419081c400410610cb01200941086a2004290000370000200920012900b00c370000200141386a200141d80c6a412010ce03200141b00d6a411c6a4102360200200141c40d6a4102360200200141bc0d6a41023602002001200128023c410020012802381b3602b00c200141103602b40d200120033602d80c200141002003200a6b2208200820034b1b3602e00a2001200141e00a6a3602c80d2001200141800d6a3602c00d2001200141d80c6a3602b80d2001200141b00c6a3602b00d41002802cca94e210841002802c8a94e210a41002802d4a94e2104200141a0056a41106a4204370300200141d4056a4196f5c700ad4280808080d00e84370200200141c8056a41e8f4c700ad4280808080e00584370300200141a0056a41206a4204370300200141a0056a41086a411a360200200141a0056a411c6a200141b00d6a360200200141fcf9c7003602ac0520014281808080f03c3702dc05200141003602d005200141d0b9c7003602a405200141043602a005200a41b8c0cd00200441024622041b200141a0056a200841c0a4c00020041b28021011030020012802800d210a0b02402003200a4f0d002003210a0c010b02402003200a470d002003210a0c010b2003410474200a41047422086b21032008200b6a41086a210803400240200828020041ffffffff0371450d002008417c6a28020010390b200841106a2108200341706a22030d000b0b200141a0056a200b200a10fb02200141a0056a410c6a280200210820012902a405210720012802a0052133200141b00d6a200141b0056a41b40110d40b1a20334101460d05200120083602e80a200120073703e00a200141e00a6a410c6a200141b00d6a41b40110d40b1a200120173702a4052001200c3602a005200141800d6a200141a0056a10b307200141b00d6a200141e00a6a10bb0620012802880d210820012802800d212b200141a0056a200141b00d6a41c00110d40b1a200141d80c6a200141a0056a200141a00a6a200141b00a6a10c402200141d80c6a41086a290300213520012802dc0c213120012802d80c4101460d04200120353702dc0c200120313602d80c200141a0056a200141d80c6a200141c00a6a200141a00a6a10e009200141a0056a41086a280200212f200141ac056a280200212e20012802a405213120012802a0054101460d03200141a0056a202b20082031202e109007200141a8056a290300213520012802a405213020012802a0054101460d022035422088a72208410674211b20080d0142002121417f2108427f212520302104420021184200211d42002105417f21030c090b20012802a40521082001200141a8056a29030022183702a405200120083602a0050c0a0b203041206a2108201b2133427f2125427f21264200211d42002105420021214200211803400240200841106a280200222d0d00200841206a21042026422088a721032026a721080c090b200141186a200841086a2903002207420020082903002217420010d30b200141286a201742002017420010d30b2021427f200129032820072001290320223784203784420052200141286a41086a29030022372001290318223420347c7c22342037547222031b7c223720215422042018427f203420031b7c2004ad7c222120185420212018511b21032017202554200720265420072026511b2104201d20177c2234201d54221e200520077c201ead7c221d200554201d2005511b211e0240200841146a280200222c450d00202c41306c450d00202d10390b427f202120031b2118427f203720031b21212007202620041b21262017202520041b2125427f201d201e1b2105427f2034201e1b211d200841c0006a2108203341406a22330d000b2026422088a721032026a721080c080b0240202e450d00202e412c6c21032031210803400240200841046a2802002206450d00200641306c450d00200828020010390b2008412c6a2108200341546a22030d000b0b0240202f0d00203021310c020b0240202f412c6c0d00203021310c020b20311039203021310c010b202ead422086202fad8421350b200120313602a00520012802840d2108200120353702a4052035422088210520012903a00521070240200841ffffff3f71450d00202b10390b2005a72108200141e00a6a10fc020b0240200a450d00200a4104742103200b41086a210a03400240200a28020041ffffffff0371450d00200a417c6a28020010390b200a41106a210a200341706a22030d000b0b200742208821050240203241ffffffff0071450d00200b10390b2005a7211e2007a7210420334101460d060c070b2008200341dcf9c700104b000b2008200341ecf9c700104b000b20012802a40521082001200141a8056a29030022183702a405200120083602a0050c020b2030201b6a222c2004460d0003402004221e41c0006a21040240201e41346a2802002233450d00203341306c450d00201e41306a28020010390b202c2004470d000b0b0240203542ffffff1f83500d00203010390b0240202e450d00202e412c6c211e2031210403400240200441046a2802002233450d00203341306c450d00200428020010390b2004412c6a2104201e41546a221e0d000b0b0240202f450d00202f412c6c450d00203110390b200141f00c6a4200370300200141e80c6a4200370300200141d80c6a41086a22044200370300200142003703d80c200141b00c6a41c2e6c000411a10cb012004200141b00c6a41086a221e290000370300200120012900b00c3703d80c200141b00c6a41d0b3c800410510cb01200941086a201e290000370000200920012900b00c370000200141106a200141d80c6a412010ce032001280214211e20012802102133200141e0086a200141e00a6a41c00110d40b1a024020012802840d41ffffff3f71450d00202b10390b0240200a450d00200a4104742104200b41086a210a03400240200a28020041ffffffff0371450d00200a417c6a28020010390b200a41106a210a200441706a22040d000b0b0240203241ffffffff0071450d00200b10390b200141d00a6a10e109200141c00a6a109907024020012802b40a41ffffff3f71450d0020012802b00a10390b024020012802a80a220a450d00200a41386c210b20012802a00a412c6a210a03400240200a28020041ffffff3f71450d00200a417c6a28020010390b200a41386a210a200b41486a220b0d000b0b20254220882107024020012802a40a220a450d00200a41386c450d0020012802a00a10390b201e410120331b210b2007a7211e2025a721044100210d0c050b20012903a005220742208821052018422088211802402003450d002003410474210a200b41086a210803400240200828020041ffffffff0371450d002008417c6a28020010390b200841106a2108200a41706a220a0d000b0b2005a7211e2018a721082007a72104203241ffffffff0071450d00200b10390b201f450d00201f41306c450d00200c10390b200141d00a6a10e109200141c00a6a1099074100210a0b024020012802b40a41ffffff3f71450d0020012802b00a10390b024020012802a80a2203450d00200341386c210b20012802a00a412c6a210303400240200328020041ffffff3f71450d002003417c6a28020010390b200341386a2103200b41486a220b0d000b0b024020012802a40a2203450d00200341386c450d0020012802a00a10390b2014450d004101210d0c010b0240201f450d00201f41306c450d00200c10390b0240201a450d00201a412c6c210b202c210303400240200341046a2802002206450d00200641226c450d00200328020010390b2003412c6a2103200b41546a220b0d000b0b4101210d0240202a450d00202a412c6c450d00202c10390c010b0b200141a0076a200141e0086a41c00110d40b1a201ead4220862004ad842107200d0d00200141c8056a2018370300200141a0056a41186a2005370300200120213703c0052001201d3703b005200120033602ac05200120083602a805200120073703a005200141d0056a200141a0076a41c00110d40b21032001200b36029007200141b00d6a200141a0056a419cfac700410510f40620012802b00d220a410a460d01200141b00d6a410c6a280200210820012902b40d2107200310fc020b200141c8016a200141b4036a41ec0110d40b1a200041106a2008360200200041086a20073702002000200a360204200041013602000c010b20012903a005210720012802a8052108200141b4036a200141a0056a410c6a220a41ec0110d40b1a200141c8016a200141b4036a41ec0110d40b1a200141b4036a200141c8016a41ec0110d40b1a200141c40d6a200141b4036a41086a290200370200200141cc0d6a200141b4036a41106a290200370200200141d40d6a200141b4036a41186a290200370200200141dc0d6a200141b4036a41206a280200360200200120083602b80d200120073703b00d200120012902b4033702bc0d200120083602a805200120073703a005200a200141b4036a41ec0110d40b1a2001419c076a220820233602002001200636029807024041002802d0a94e4104490d00200141f00c6a220a4200370300200141d80c6a41106a22034200370300200141d80c6a41086a220b4200370300200142003703d80c200141b00c6a41c7e5c000410610cb01200b200141b00c6a41086a2206290000370300200120012900b00c3703d80c200141b00c6a419081c400410610cb01200a2006290000370300200320012900b00c370300200141086a200141d80c6a412010ce032001200128020c410020012802081b3602a007200141003602d001200142013703c801200141c8016a41004101107720012802c80120012802d001220a6a41003a00002001200a41016a3602d001200141a0056a200141c8016a10e60220014198076a200141c8016a10db022008200141c8016a10db0220012802d0012108024020012802cc01450d0020012802c80110390b200141f40a6a4102360200200141ec0a6a410f360200200120083602e008200141103602e40a2001200141e0086a3602f00a2001200141b00d6a3602e80a2001200141a0076a3602e00a41002802cca94e210841002802c8a94e210a41002802d4a94e2103200141d8016a4203370300200141fc016a4196f5c700ad4280808080d00e84370200200141f0016a41e8f4c700ad4280808080e00584370300200141e8016a4203370300200141d0016a411a360200200141e4016a200141e00a6a360200200141a4fac7003602d40120014281808080a01a37028402200141003602f801200141d0b9c7003602cc01200141043602c801200a41b8c0cd00200341024622031b200141c8016a200841c0a4c00020031b2802101103000b200041086a200141a0056a41800210d40b1a200041003602000b200141f00e6a24000bbe0e05067f017e017f047e047f230041800c6b22022400024041002802d0a94e4104490d0020024198086a420037030020024190086a2203420037030020024188086a22044200370300200242003703800820024180086a41c7e5c000410610cb012003419081c400410610cb01200220024180086a412010ce03200241103602940220022002280204410020022802001b3602880a2002200241880a6a3602900241002802cca94e210541002802c8a94e210641002802d4a94e210720034202370300200241b4086a4196f5c700ad4280808080d00e84370200200241a8086a41e8f4c700ad4280808080e0058437030020024180086a41206a42013703002004411a3602002002419c086a20024190026a360200200241e8b3c30036028c0820024281808080a00c3702bc08200241003602b008200241d0b9c700360284082002410436028008200641b8c0cd00200741024622031b20024180086a200541c0a4c00020031b2802101103000b200241086a410141f8b3c300412910d70102400240200228020822030d00420021080c010b2002200241086a41086a28020036028c06200220033602880620024180086a20024188066a109505024020022802b0082204450d00200241880a6a41286a20024180086a41286a290300370300200241880a6a41206a20024180086a41206a290300370300200241880a6a41186a20024180086a41186a290300370300200241880a6a41106a20024180086a41106a290300370300200241880a6a41086a20024180086a41086a29030037030020022002290380083703880a20024190026a200241b4086a41cc0110d40b1a0b200241e0016a41086a200241880a6a41086a290300370300200241e0016a41106a200241880a6a41106a290300370300200241e0016a41186a200241880a6a41186a290300370300200241e0016a41206a200241880a6a41206a290300370300200241e0016a41286a200241880a6a41286a290300370300200220022903880a3703e001200241146a20024190026a41cc0110d40b1a420121080b20024180086a41306a200241e0016a41286a29030037030020024180086a41286a200241e0016a41206a29030037030020024180086a41206a200241e0016a41186a29030037030020024180086a41186a200241e0016a41106a29030037030020024180086a41106a200241e0016a41086a290300370300200220022903e00137038808200241bc086a200241146a41cc0110d40b1a200241b8086a220920043602002002200837038008200241880a6a41306a200141306a10bb06200241880a6a41286a200141286a2903002208370300200241880a6a41206a200141206a290300220a370300200241880a6a41186a200141186a290300220b370300200241880a6a41106a200141106a290300220c370300200241880a6a41086a200141086a290300220d370300200241d0076a41086a2205200d370300200241d0076a41106a2206200c370300200241d0076a41186a2207200b370300200241d0076a41206a220e200a370300200241d0076a41286a220f20083703002002200129030022083703880a200220012802f0013602f80b200220083703d007200141f8016a2802002110200141fc016a280200211120022802b80a210120024188066a200241bc0a6a41c40110d40b1a02402003450d002004450d00200910fc020b200241d8056a41086a2005290300370300200241d8056a41106a2006290300370300200241d8056a41186a2007290300370300200241d8056a41206a200e290300370300200241d8056a41286a200f290300370300200220022903d0073703d80520024194046a20024188066a41c40110d40b1a0240024002402001450d0020024190026a41286a200241d8056a41286a29030037030020024190026a41206a200241d8056a41206a29030037030020024190026a41186a200241d8056a41186a29030037030020024190026a41106a200241d8056a41106a29030037030020024190026a41086a200241d8056a41086a290300370300200220022903d80537039002200241c4026a20024194046a41c40110d40b1a2002418c046a220320113602002002201036028804200220013602c002200241003602900a200242013703880a200241880a6a41004101107720022802880a20022802900a22016a41003a00002002200141016a3602900a20024190026a200241880a6a10e60220024188046a200241880a6a10db022003200241880a6a10db0220022802900a210120022802880a210320024180086a41086a2204200241086a41086a2802003602002002200229030837038008410141f8b3c300412920024180086a2003200110d60121010240200228028c0a450d00200310390b200420024190026a41800210d40b1a20022001410173ad370380082001450d012000410a360200200241b8086a10fc020c020b200242023703800802402003450d00200228020c450d00200310390b200041083602000c010b20004108360200200241b8086a10fc020b200241800c6a24000bae0401067f230041900b6b22022400024041002802d0a94e4104490d00200241b0026a4200370300200241a8026a22034200370300200241a0026a22044200370300200242003703980220024198026a41c7e5c000410610cb012003419081c400410610cb01200241086a20024198026a412010ce03200241103602142002200228020c410020022802081b3602800b2002200241800b6a36021041002802cca94e210541002802c8a94e210641002802d4a94e210720034202370300200241cc026a4196f5c700ad4280808080d00e84370200200241c0026a41e8f4c700ad4280808080e0058437030020024198026a41206a42013703002004411a360200200241b4026a200241106a360200200241ecf8c7003602a40220024281808080d01b3702d402200241003602c802200241d0b9c70036029c022002410436029802200641b8c0cd00200741024622031b20024198026a200541c0a4c00020031b2802101103000b200241106a41046a200141800210d40b1a200241b4036a200241106a41840210d40b1a200241143602b0032002420237038003200220024198026a3602800b200241f00a6a200241800b6a10d406200241800b6a41086a200241f00a6a41086a280200360200200220022903f00a3703800b200241800b6a10dc01210102402002290380034202510d0020022d00980241ff01714102470d0020022802a002450d00200228029c0210390b200241b0036a10e20920004102410a20011b360200200241900b6a24000bd10301027f230041106b22022400024002402000280200410a460d00200220012802184197b8c30041032001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a419cb8c30010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b2002200128021841acb8c30041022001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41b0b8c30010651a20022d0008210120022802042203450d00200141ff017121004101210120000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470ba60c01047f23004180046b220424002004200336021420042002360210200441d0006a200110b8040240024020042d00504108460d0020044188016a41086a200441d0006a41086a2802003602002004200429035037038801024041002802d0a94e4104490d00200441e8016a22034200370300200441e0016a22014200370300200441d0016a41086a22024200370300200442003703d001200441f0036a41c7e5c000410610cb012002200441f0036a41086a2205290000370300200420042900f0033703d001200441f0036a419081c400410610cb0120032005290000370300200120042900f003370300200441086a200441d0016a412010ce03200441dc036a4122360200200441d4036a4104360200200441103602cc032004200428020c410020042802081b3602f003200420044188016a3602d8032004200441106a3602d0032004200441f0036a3602c80341002802cca94e210341002802c8a94e210541002802d4a94e21062001420337030020044184026a4196f5c700ad4280808080d00e84370200200441f8016a41e8f4c700ad4280808080e00584370300200441d0016a41206a42033703002002411a360200200441ec016a200441c8036a360200200441f8f6c7003602dc0120044281808080b01d37028c022004410036028002200441d0b9c7003602d401200441043602d001200541b8c0cd00200641024622011b200441d0016a200341c0a4c00020011b2802101103000b20002004290218370204200041033602002000410c6a200441206a2802003602000c010b200441d0016a41306a200141306a10bb06200441d0016a41286a200141286a290300370300200441d0016a41206a200141206a290300370300200441d0016a41186a200141186a290300370300200441d0016a41106a200141106a290300370300200441d0016a41086a200141086a290300370300200420012903003703d001200420012802f0013602c00320044188016a200441d0016a10ba0402402004280288014101470d00200441e0036a41086a220120044188016a410c6a2802003602002004200429028c013703e003024041002802d0a94e4104490d00200441e8016a22054200370300200441e0016a22024200370300200441d0016a41086a22034200370300200442003703d001200441f0036a41c7e5c000410610cb012003200441f0036a41086a2206290000370300200420042900f0033703d001200441f0036a419081c400410610cb0120052006290000370300200220042900f0033703002004200441d0016a412010ce03200441dc036a4123360200200441c8036a410c6a4104360200200441103602cc0320042004280204410020042802001b3602f0032004200441e0036a3602d8032004200441106a3602d0032004200441f0036a3602c80341002802cca94e210541002802c8a94e210641002802d4a94e21072002420337030020044184026a4196f5c700ad4280808080d00e84370200200441f8016a41e8f4c700ad4280808080e00584370300200441d0016a41206a42033703002003411a360200200441ec016a200441c8036a36020020044190f7c7003602dc0120044281808080801e37028c022004410036028002200441d0b9c7003602d401200441043602d001200641b8c0cd00200741024622021b200441d0016a200541c0a4c00020021b2802101103000b200441d0006a41086a22022001280200360200200441186a41106a200441d0006a41106a290300370300200441186a41186a200441d0006a41186a290300370300200441186a41206a200441d0006a41206a290300370300200441186a41286a200441d0006a41286a290300370300200441186a41306a200441d0006a41306a280200360200200441186a41086a22012002290300370300200420042903e003370318200041043602002000410c6a2001280200360200200020042903183702040c010b200441c4016a2802002106200441c0016a2802002105024020044188016a41c0006a2802002201450d0020014106742102200541346a21010340024020012802002203450d00200341306c450d002001417c6a28020010390b200141c0006a2101200241406a22020d000b0b0240200641ffffff1f71450d00200510390b2000410a3602000b20044180046a24000be70c03067f017e107f230041b02d6b22012400200141286a4200370300200141206a22024200370300200141106a41086a420037030020014200370310200141106a41c7e5c000410610cb01200241f081c400410610cb01200141203602342001200141106a360230200141386a200141106a412010e4010240024002400240200128023822030d00410021040c010b200128023c21052001200141386a41086a28020036024c20012003360248200141086a200141c8006a10c1010240024020012802080d00200128020c2206200128024c41a00b6e2202200220064b1bad42a00b7e2207422088a70d032007a72208417f4c0d030240024020080d00410821040c010b200810382204450d050b4100210220014100360258200120043602502001200841a00b6e360254024002402006450d00200141c01e6a2109200141f81a6a210a200141881b6a210b200141901b6a210c200141a0176a41286a210d200141c0176a210e200141b0176a210f41002110034002400240200128024c2211450d00200128024822122d0000211320012011417f6a221436024c410121152001201241016a3602484103210802400240024020130e03000201040b20144104490d022012280001211620012011417b6a36024c2001201241056a360248410021150c010b410221150b200141a8226a200141c8006a10900320012d00a8224119460d00200141a0176a200141a8226a41880b10d40b1a200141a8226a200141c8006a10dd07024020012802a822450d0020014190176a41086a200141a8226a41086a280200360200200120012903a82237039017200141a8226a200141a0176a41880b10d40b1a20162117201521080c020b024002400240024002400240024020012d00a0170e18070707070007010207070707030707070704070707070705060b20012802a817450d0620012802a41710390c060b20012802a4170d0520012802ac172208450d05200841286c450d0520012802a81710390c050b20012d00a4174102470d04024020012802b0172208450d00200841d0006c211120012802a81741c4006a21080340024020082802002212450d00201241306c450d002008417c6a28020010390b200841d0006a2108201141b07f6a22110d000b0b20012802ac172208450d04200841d0006c450d0420012802a81710390c040b20012802a4174102470d0320012802b0172208450d0320012802b417450d03200810390c030b02400240024020012802a4170e020001020b20012802f019450d0420012802ec1910390c040b20012802f019450d0320012802ec1910390c030b20012802f019450d0220012802ec1910390c020b20012d00a817410a470d0120012802d417450d0120012802d01710390c010b024020012903a8174201510d000240024020012802b0170e020300010b20012802c017410b470d02200d108d02200c108b030c020b20012802b817410b470d01200e108d02200b108b030c010b200f108d02200a108d022009108b030b410321080b200141880c6a200141a8226a41880b10d40b1a200141f80b6a41086a221120014190176a41086a28020036020020012001290390173703f80b20084103460d02201041016a2110200141f0006a200141880c6a41880b10d40b1a200141e0006a41086a22122011280200360200200120012903f80b370360024020022001280254470d00200141d0006a200210de0720012802502104200128025821020b2004200241a00b6c6a200141f0006a41880b10d40b2202418c0b6a2017360200200220083602880b200241900b6a2001290360370200200241980b6a20122802003602002001200128025841016a220236025820102006470d000b200128025021040b200129025421072004450d010c020b200141d0006a109006024020012802542202450d00200241a00b6c450d00200128025010390b0b200142003702a4174100210420014100280284ee4d3602a0172001410d36028c0c2001200141306a3602880c2001200141a0176a360270200141bc226a4101360200200142013702ac22200141949fc5003602a8222001200141880c6a3602b822200141f0006a41b4dfc400200141a8226a103b1a20012802a01720012802a81710d10120012802a417450d0020012802a01710390b2005450d00200310390b0240024020040d0020004200370204200041002802e8c8483602000c010b20002007370204200020043602000b200141b02d6a24000f0b1034000b1032000baa0401037f0240024002400240024002400240024020002d00000e18070707070007010207070707030707070704070707070705060b200041086a280200450d06200041046a28020010390f0b200041046a2802000d052000410c6a2802002201450d05200141286c450d05200041086a28020010390f0b200041046a2d00004102470d040240200041106a2802002201450d00200141d0006c2102200041086a28020041c4006a21010340024020012802002203450d00200341306c450d002001417c6a28020010390b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d04200141d0006c450d04200028020810390f0b200041046a2802004102470d03200041106a2802002201450d03200041146a280200450d03200110390f0b024002400240200041046a2802000e020001020b200041d0026a280200450d04200041cc026a28020010390f0b200041d0026a280200450d03200041cc026a28020010390f0b200041d0026a280200450d02200041cc026a28020010390f0b200041086a2d0000410a470d01200041346a280200450d01200041306a28020010390c010b200041106a21010240200041086a2903004201510d000240024020012802000e020300010b200041206a280200410b470d02200041286a108d02200041f0036a108b030f0b200041186a280200410b470d01200041206a108d02200041e8036a108b030f0b2001108d02200041d8036a108d02200041a0076a108b030f0b0bfa0203027f017e067f230041206b220224000240024020014102490d00200041206a22032000412010d70b417f4a0d002000290000210420002003290000370000200241186a2205200041186a2206290000370300200241106a2207200041106a2208290000370300200241086a2209200041086a220a290000370300200a200341086a2900003700002008200341106a2900003700002006200341186a29000037000020022004370300024020014103490d00200041206a210320002001417f6a22064105746a21080340200341206a22002002412010d70b417f4a0d012006450d0320032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200021032006417f6a22064101470d000b200821030b20032002290300370000200341186a2005290300370000200341106a2007290300370000200341086a20092903003700000b200241206a24000f0b2001200141a4bbc300103c000bd71c030e7f047e097f230041e00b6b220224000240024020012802082203200128020c2204470d00410821030c010b2001200341206a22053602082001280210210620024188036a41186a2207200341186a29000037030020024188036a41106a2208200341106a29000037030020024188036a41086a2209200341086a29000037030020022003290000370388032001280214210a02400240024002402001411c6a280200220b450d00200b210c41002103200b210d0340200a200c41017620036a220c4105746a220e20024188036a412010d70b220f450d02200d200c200f410048220f1b220d200c41016a2003200f1b22036b210c200d20034b0d000b0b02400340200641016a210620052004460d012001200541206a220e3602082007200541186a2900003703002008200541106a2900003703002009200541086a29000037030020022005290000370388030240200b450d0041002103200b210c200b210d0340200a200c41017620036a220c4105746a220520024188036a412010d70b220f450d05200d200c200f410048220f1b220d200c41016a2003200f1b22036b210c200d20034b0d000b0b200e21050c000b0b20012006360210410821030c030b200241d0006a41186a200e41186a290000370300200241d0006a41106a200e41106a290000370300200241d0006a41086a200e41086a2900003703002002200e2900003703500c010b20012006360210200241d0006a41086a200541086a290000370300200241d0006a41106a200541106a290000370300200241d0006a41186a200541186a290000370300200220052900003703500b200241186a200241d0006a41186a2903002210370300200241106a200241d0006a41106a2903002211370300200241086a200241d0006a41086a29030022123703002002200229035022133703002001200641016a360210200141286a280200210f200141206a280200210c200141246a2802002103200241206a41186a2010370300200241206a41106a2011370300200241206a41086a2012370300200220133703202002200336024c2002200c360248200220063602440240200610890b450d002006210d410221030c010b0240024002400240411b1038220d450d00200d410029008cee4d370000200d41086a4100290094ee4d370000200d41106a410029009cee4d370000200d41176a41002800a3ee4d3600002002200d360288032002429b808080b00337028c0341041038220d450d00200d200636000020024188036a411b410410772002280288032205200228029003220a6a200d280000360000200d1039200228028c032101200241b8026a41012005200a41046a220e10d701024002400240024020022802b802220a450d00200241c0026a280200220d4104490d00200d417c714104460d00200a280000200c470d00200a280004220d41036a20034b0d010b2002410036025820024201370350200241d0006a4100410410772002280250220a2002280258220d6a200c3600002002200d41046a220d36025802402002280254220b200d6b41034b0d00200241d0006a200d410410772002280254210b2002280250210a2002280258210d0b200a200d6a200336000020024188036a41086a200241b8026a41086a280200360200200220022903b8023703880341012005200e20024188036a200a200d41046a10d601210d0240200b450d00200a10390b4104210a200d0d022003210d0c010b024020022802bc02450d00200a10390b4101210a0b02402001450d00200510390b200a21030c050b20024188036a10d901200228028803220d450d0120024198036a280200210820024188036a410c6a28020021042002419c036a280200210b20024188036a41086a2802002107200228028c0321092002410036028003200242013703f802200241f8026a41004104107720022802f802200228028003220a6a20033600002002200a41046a36028003200d2007200241f8026a10b902200241f8026a200b10ac020240200b450d002004200b410c6c6a21142004210a0340200a280200200a41086a280200200241f8026a10b902200a410c6a220a2014470d000b0b024020022802fc022214200228028003220a6b41034b0d00200241f8026a200a4104107720022802fc022114200228028003210a0b20022802f8022215200a6a200c3600002002200a41046a220a3602800302402014200a6b41034b0d00200241f8026a200a4104107720022802fc02211420022802f8022115200228028003210a0b2015200a6a20063600002002200a41046a220a3602800302402014200a6b41034b0d00200241f8026a200a4104107720022802f8022115200228028003210a0b2015200a6a200f36000020024188036a41e9dabdf306200241206a20022802f8022216200a41046a10c3010240024020022d008803220a4101460d00410321140c010b200241f6026a20022d008b033a0000200241b8026a41086a2002419c036a290200370300200241c8026a200241a4036a290200370300200241d0026a200241ac036a290200370300200241d8026a200241b4036a290200370300200241e0026a200241bc036a290200370300200241e5026a200241c1036a290000370000200220022f0089033b01f402200220024194036a2902003703b80220024188036a41086a2802002115200228028c0321140b200241b4026a41026a2217200241f4026a41026a2d00003a0000200241f8016a41086a2218200241b8026a41086a290300370300200241f8016a41106a2219200241b8026a41106a290300370300200241f8016a41186a221a200241b8026a41186a290300370300200241f8016a41206a221b200241b8026a41206a290300370300200241f8016a41286a221c200241b8026a41286a290300370300200241f8016a41306a200241b8026a41306a290300370300200220022f01f4023b01b402200220022903b8023703f8010240200a4101470d00200241f4016a41026a20172d00003a000020024188036a41086a201829030037030020024188036a41106a201929030037030020024188036a41186a201a29030037030020024188036a41206a201b29030037030020024188036a41286a201c29030037030020024188036a412d6a200241f8016a412d6a290000370000200220022f01b4023b01f401200220022903f80137038803024020022802fc02450d00201610390b200220022f01f4013b01b8022002200241f6016a2d00003a00ba024100210a0c040b024020022802fc02450d00201610390b02402009450d00200d10390b0240200b450d00200b410c6c210d2004210303400240200341046a280200450d00200328020010390b2003410c6a2103200d41746a220d0d000b0b02402008450d002008410c6c450d00200410390b201421032015210d0c020b1032000b410521030b4101210a0b200241b8016a41086a221620024188036a41086a290300370300200241b8016a41106a221720024188036a41106a290300370300200241b8016a41186a221820024188036a41186a290300370300200241b8016a41206a221920024188036a41206a290300370300200241b8016a41286a221a20024188036a41286a290300370300200241b8016a412d6a221b20024188036a412d6a290000370000200220022d00ba023a00f201200220022f01b8023b01f00120022002290388033703b801024002400240200a0d00200241d0006a41186a200b360200200241d0006a41146a2008360200200241d0006a41106a2004360200200241d0006a410c6a2007360200200241d0006a41086a2009360200200241fa006a20022d00f2013a000020024183016a20022903b8013700002002418b016a201629030037000020024193016a20172903003700002002419b016a2018290300370000200241a3016a2019290300370000200241ab016a201a290300370000200241b0016a201b2900003700002002200f360274200220063602702002200c36026c200220022f01f0013b0178200241ff006a2015360000200241fb006a20143600002002200d36025420022003360250024041002802d0a94e4103490d00200241b8026a411c6a4124360200200241b8026a41146a4110360200200241b8026a410c6a4110360200200241103602bc022002200241d0006a3602d0022002200241c8006a3602c8022002200241cc006a3602c0022002200241c4006a3602b80241002802cca94e210341002802c8a94e210d41002802d4a94e210f20024198036a4204370300200241bc036a41b5becd00ad4280808080c00b84370200200241b0036a41c8eecd00ad4280808080800284370300200241a8036a420437030020024190036a411236020020024188036a411c6a200241b8026a360200200241a8eecd003602940320024281808080f0d0003702c403200241003602b803200241bcd2cd0036028c032002410336028803200d41b8c0cd00200f410246220f1b20024188036a200341c0a4c000200f1b2802101103000b200241a4046a200241d0006a41e80010d40b1a2002410a3602a004200242023703f003200220024188036a3602b802200241f8016a200241b8026a10d406200241b8026a41086a200241f8016a41086a280200360200200220022903f8013703b802200241b8026a10dc012103024020022903f0034202510d0020022d00880341ff01714102470d00200228029003450d00200228028c0310390b200241a0046a10e2092003450d01410621030b024020034107470d00410721030c020b2002410036029003200242013703880320024188036a410041041077200228028803220f200228029003220a6a200c3600002002200a41046a220c360290030240200228028c03220a200c6b41034b0d0020024188036a200c41041077200228028c03210a200228028803210f200228029003210c0b200f200c6a410036000041012005200e200f200c41046a10d801200a450d01200f10390c010b410721030b2001450d00200510390b2000200d36020420002003360200200241e00b6a24000bd40401017f230041306b220224000240024002400240024002400240024020002802000e0701020304050600010b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c200241e8ecc60036021820012000200241186a103b21010c060b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c200241f0ecc60036021820012000200241186a103b21010c050b2002200041046a36020c200241163602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c200241f8ecc6003602182002200241106a36022820012000200241186a103b21010c040b2002200028020436020c200241023602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024188edc6003602182002200241106a36022820012000200241186a103b21010c030b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c20024198edc60036021820012000200241186a103b21010c020b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c200241a0edc60036021820012000200241186a103b21010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c200241a8edc60036021820012000200241186a103b21010b200241306a240020010be21404077f017e017f077e230041a0036b2203240020012800002104200341e0006a41186a2001411c6a290000370300200341e0006a41106a200141146a290000370300200341e0006a41086a2001410c6a2900003703002003200129000437036020022802002101200341a0016a41186a22054200370300200341a0016a41106a22064200370300200341a0016a41086a22074200370300200342003703a00120034180036a41b69fc500410710cb01200720034180036a41086a220829000037030020032003290080033703a00120034180036a41d091c600410c10cb01200520082900003703002006200329008003370300200341d8006a200341a0016a412010ce030240024002402001200328025c410020032802581b470d0020074120360200200320043602a0012003200341e0006a3602a401200341a0026a200341a0016a10d804200341a0016a20032802a002220120032802a802108504024020032d00a00122084101470d0020034198016a200341b9016a29000037030020034190016a200341b1016a29000037030020034188016a200341a9016a290000370300200320032900a101370380010b024020032802a402450d00200110390b2002410c6a2802002101200241086a280200210720022802042105024020084101470d0020022802102102200341a0016a41186a220820034180016a41186a290300370300200341a0016a41106a220420034180016a41106a290300370300200341a0016a41086a20034180016a41086a29030037030020032003290380013703a001200341a0026a200341a0016a10fb060240024020032802c0022209450d00200341c8026a290300210a20032802c402210b2008420037030020044200370300200341a0016a41086a22084200370300200342003703a00120034180036a41b69fc500410710cb01200820034180036a41086a220429000037030020032003290080033703a00120034180036a41f4c9c800410a10cb01200641086a2004290000370000200620032900800337000020034190036a200341a0016a10bf020240024020032802900322080d00410021060c010b200329029403220c422088a72106200c42ffffff3f83500d00200810390b024020022006460d00200041003602400240200b450d00200b41306c450d00200910390b02402001450d002001410c6c21002005210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2007450d052007410c6c0d020c050b2000200329038001220c370300200341a0016a41206a20032903a002220d370300200041206a200d370300200341a0016a41186a20034180016a41186a290300220d370300200341a0016a41106a20034180016a41106a290300220e370300200341a0016a41086a20034180016a41086a290300220f370300200341a0016a41286a200341a0026a41086a2903002210370300200341a0016a41306a200341a0026a41106a2903002211370300200341a0016a41386a200341a0026a41186a2903002212370300200041086a200f370300200041106a200e370300200041186a200d370300200041286a2010370300200041306a2011370300200041386a20123703002003200c3703a001200041c8006a200a3703002000200b3602442000200936024002402001450d002001410c6c21002005210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2007450d042007410c6c0d010c040b2000410036024002402001450d002001410c6c21002005210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2007450d032007410c6c450d030b200510390c020b2000410036024002402001450d002001410c6c21002005210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b2007450d012007410c6c450d01200510390c010b200341a0016a200110fc060240024020032802a0014101470d00200341a0026a41186a200341bc016a290200220a370300200341a0026a41106a200341b4016a290200220c370300200341a0026a41086a200341a0016a410c6a290200220d370300200320032902a401220e3703a002200341c4016a280200210120034180016a41186a200a37030020034180016a41106a200c37030020034180016a41086a200d3703002003200e37038001024020012002280210460d00200041003602400c020b2002410c6a280200210520022802042108410110382201450d03200141003a0000410041003502c4a94e200341a0016aad7c42adfed5e4d485fda8d8007e422189220a3e02c4a94e200341c8006a41c4a9ce00ad220c42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010d30b200341286a200a42a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010d30b200341386a200c42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010d30b200341186a200a42c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010d30b200341086a200a200c85420042adfed5e4d485fda8d800420010d30b200341a0016a41919ece004101109f01200341f4026a200341a0016a41186a290300370200200341ec026a200341a0016a41106a290300370200200341e4026a200341a0016a41086a290300370200200341d4026a428180808010370200200341c8026a4200370300200341c4026a41e4a2c000360200200320032903a0013702dc02200320013602d002200341003602c0022003200a200341c8006a41086a2903002003290348857c200341086a41086a29030020032903088542cf829ebbefefde82147c220d893703a0022003200341186a41086a290300200329031885200c7c200d423088893703b8022003200a200341386a41086a2903002003290338857c200d422088893703b0022003200341286a41086a290300200329032885200c7c200d421088893703a80202402005450d0020082005410c6c6a210741002802e0a240210641002902d8a240210a20082101034020034180036a41086a20063602002003200a37038003200341a0016a200341a0026a20034180036a2001280200200141086a28020010fd062001410c6a22012007470d000b0b200341a0016a200341a0026a41e00010d40b1a20034198026a20034180016a41186a29030037030020034190026a20034180016a41106a29030037030020034188026a20034180016a41086a2903003703002003200329038001370380022000200341a0016a2004200341e0006a10fe06200341a0016a10ff0602402005450d002005410c6c21002008210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d022001410c6c450d02200810390c020b200041003602400b2002280204210702402002410c6a2802002201450d002001410c6c21002007210103400240200141046a280200450d00200128020010390b2001410c6a2101200041746a22000d000b0b200241086a2802002201450d002001410c6c450d00200710390b200341a0036a24000f0b1032000ba40301057f230041e0006b22022400200241206a41f0c8c800410710cb01200241386a420037000020024200370030200241206a41106a41bce3c900410910cb012002200241206a10e8060240024020022903004202520d00200041003602200c010b200241d0006a200241106a280200200110da08200241206a20022802502203200228025810db0802400240200228024022010d00200241186a4200370300200241106a4200370300200241086a4200370300200242003703004100210441002802e8c8482101410021050c010b200241186a200241206a41186a290300370300200241106a200241206a41106a290300370300200241086a200241206a41086a29030037030020022002290320370300200241cc006a2802002106200241c8006a2802002105200228024421040b02402002280254450d00200310390b2000200229030037030020002004360224200020013602202000412c6a2006360200200041286a2005360200200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a2903003703000b200241e0006a24000bfa0401057f230041f0006b22022400200241c0006a41b69fc500410710cb01200241d0006a4181f3c200411210cb012002200136026c2002200241ec006a410410cc01370330200241146a200241ec006a41046a3602002002200241386a36020c2002200241ec006a3602102002200241306a360208200241e0006a200241086a108301024002402002280268220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b4100210520024100360238200220043602302002200136023402402001410f4b0d00200241306a4100411010772002280234210120022802302104200228023821050b200420056a22062002290040370000200641086a200241c0006a41086a2900003700002002200541106a22053602380240200120056b410f4b0d00200241306a2005411010772002280234210120022802302104200228023821050b200420056a22062002290050370000200641086a200241d0006a41086a2900003700002002200541106a2205360238200228026021060240200120056b20034f0d00200241306a20052003107720022802302104200228023821050b200420056a2006200310d40b1a2002200520036a220136023802402002280264450d00200228026010390b200241086a20022802302204200110800741002101024020022802084101470d002000200229020c370204200041246a200241086a41246a2802003602002000411c6a200241086a411c6a290200370200200041146a200241086a41146a2902003702002000410c6a200241086a410c6a290200370200410121010b2000200136020002402002280234450d00200410390b200241f0006a24000f0b1034000b1032000bb60301057f230041e0006b22052400024002402004417f4c0d000240024020040d00410121060c010b200410382206450d020b20062003200410d40b2107410021060240200141386a2802002004470d0020072001280230200410d70b4521060b02402004450d00200710390b024002402006450d002000200129003c370000200041186a200141d4006a290000370000200041106a200141cc006a290000370000200041086a200141c4006a2900003700000c010b200520032004109f01200541206a41186a200541186a2207290000370300200541206a41106a200541106a2208290000370300200541206a41086a200541086a220929000037030020052005290000370320200541c0006a41086a200241086a280200360200200520022902003703400240024020040d00410121060c010b200410382206450d030b200520043602542005200636025020062003200410d40b1a200520043602582001200541206a200541c0006a200541d0006a10a208200041186a2007290000370000200041106a2008290000370000200041086a2009290000370000200020052900003700000b200541e0006a24000f0b1034000b1032000b8e0c03037f017e0a7f230041a0016b2204240002400240024002400240200141e0006a22052001413c6a412010d70b450d00200441f0006a41186a200541186a290000370300200441f0006a41106a200541106a290000370300200441f0006a41086a200541086a2900003703002004200529000037037002402001200441f0006a1081072206450d00200628020c41004a0d010b413010382201450d01200141003a000020012005290000370001200141096a200541086a290000370000200141116a200541106a290000370000200141196a200541186a29000037000020011039200041003602400c040b2004410036020c20042005360208200441b886c30036020420042001360200412410382205450d002005200236000020054180013a000420042005360220200442a4808080d000370224200441206a41054120107720042802202201200428022822066a22052003290000370000200541086a200341086a290000370000200541106a200341106a290000370000200541186a200341186a29000037000020042802242105200441f0006a20042001200641206a10820702402005450d00200110390b024020042802704101470d0002400240200428027422052d00000e0405050005010b200541086a280200450d04200541046a28020010390c040b200541286a280200450d03200541246a28020010390c030b024020042802742205450d000240200441f8006a2903002207422088a722064104490d00200528000021010b02402007a7450d00200510390b20064104490d0020042001360220200441f0006a2004200441206a4104108207024020042802704101470d0002400240200428027422052d00000e0405050005010b200541086a280200450d04200541046a28020010390c040b200541286a280200450d03200541246a28020010390c030b0240200428027422080d00200041003602400c050b2004200441f8006a2903002207422088a7220336025c20042008360258200441f0006a410472210941002105417f210102400240034020032005460d01200920056a200820056a22022d00003a00002004200541016a22063602702004200320016a36025c2004200241016a3602582001417f6a21012006210520064120470d000b200441e8006a41026a2205200441fd006a2d00003a0000200441e4006a41026a220120044184016a2d00003a0000200420042f01743b016c200420042d00763a006e2004200441fb006a2f00003b0168200420044182016a2f01003b016420044190016a28020021062004418c016a280200210320044185016a2800002102200441fe006a28010021092004280077210a200441e0006a41026a220b2004418b016a2d00003a0000200420044189016a2f00003b0160200441f0006a200441d8006a109203200428029001220c450d00200441206a41186a220d200441f0006a41186a290300370300200441206a41106a220e200441f0006a41106a290300370300200441206a41086a220f200441f0006a41086a290300370300200441106a41086a22102004419c016a280200360200200441cc006a41026a221120052d00003a000020042004290370370320200420042f016c3b0150200420042d006e3a0052200420042f01683b014c200420044194016a290200370310200441c8006a41026a220520012d00003a0000200441c4006a41026a2201200b2d00003a0000200420042f01643b0148200420042f01603b0144200041026a20042d00523a0000200020042f01503b01002000200a3600032000200936000a200020042f014c3b0007200041096a20112d00003a000020002002360011200020042f01483b000e200041106a20052d00003a0000200020042f01443b0015200041176a20012d00003a00002000200636001c20002003360018200041386a200d290300370300200041306a200e290300370300200041286a200f290300370300200020042903203703202000200c360240200041cc006a2010280200360200200020042903103702440c010b200041003602400b2007a7450d04200810390c040b200041003602400c030b1032000b20051039200041003602400c010b20051039200041003602400b200441a0016a24000b950201077f024020002802202201450d00024002402000412c6a2802000d00200141016a21020c010b200041246a2802002203200141016a22026a2104200341046a21012003280200417f7341808182847871210503400240024020050d000340200120044f0d04200341c07e6a210320012802002105200141046a220621012005418081828478712205418081828478460d000b2005418081828478732205417f6a2005712107200621010c010b2005417f6a20057121070b2005682106200721052003410020064103766b41306c6a220641746a280200450d00200641706a2802001039200721050c000b0b200041246a2802002002ad42307ea76b10390b0240200041346a280200450d00200028023010390b0ba40c010a7f230041f0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602000c010b2003280214210402400240200341186a2802002202450d00200320012d00003a004c2003410136024820024101460d00200320012d00013a004d2003410236024820024102460d00200320012d00023a004e2003410336024820024103460d00200320012d00033a004f2003410436024820024104460d00200341d0006a20012d00043a00002003410536024820024105460d00200341d1006a20012d00053a00002003410636024820024106460d00200341d2006a20012d00063a00002003410736024820024107460d00200341d3006a20012d00073a00002003410836024820024108460d00200341d4006a20012d00083a00002003410936024820024109460d00200341d5006a20012d00093a00002003410a3602482002410a460d00200341d6006a20012d000a3a00002003410b3602482002410b460d00200341d7006a20012d000b3a00002003410c3602482002410c460d00200341d8006a20012d000c3a00002003410d3602482002410d460d00200341d9006a20012d000d3a00002003410e3602482002410e460d00200341da006a20012d000e3a00002003410f3602482002410f460d00200341db006a20012d000f3a00002003411036024820024110460d00200341dc006a20012d00103a00002003411136024820024111460d00200341dd006a20012d00113a00002003411236024820024112460d00200341de006a20012d00123a00002003411336024820024113460d00200341df006a20012d00133a00002003411436024820024114460d00200341e0006a20012d00143a00002003411536024820024115460d00200341e1006a20012d00153a00002003411636024820024116460d00200341e2006a20012d00163a00002003411736024820024117460d00200341e3006a20012d00173a00002003411836024820024118460d00200341e4006a20012d00183a00002003411936024820024119460d00200341e5006a20012d00193a00002003411a3602482002411a460d00200341e6006a20012d001a3a00002003411b3602482002411b460d00200341e7006a20012d001b3a00002003411c3602482002411c460d00200341e8006a20012d001c3a00002003411d3602482002411d460d00200341e9006a20012d001d3a00002003411e3602482002411e460d00200341ea006a20012d001e3a00002003411f3602482002411f460d00200341eb006a20012d001f3a0000200341386a41026a2205200341c8006a410d6a2d00003a0000200341ec006a41026a2206200341c8006a41146a2d00003a0000200320032f014c3b0128200320032d004e3a002a2003200341d3006a2f00003b01382003200341da006a2f01003b016c200341d6006a2801002107200341dd006a2800002108200341c8006a411c6a280200210920034120360248200341c8006a41206a280200210a200328004f210b200341c4006a41026a220c200341c8006a411b6a2d00003a00002003200341e1006a2f00003b01442002417c714120460d00200020032f01283b0104200041066a20032d002a3a0000200341246a41026a220220052d00003a0000200341206a41026a220520062d00003a00002003411c6a41026a2206200c2d00003a0000200320032f01383b0124200320032f016c3b0120200320032f01443b011c2001280020210c200041076a200b360000200020032f01243b000b2000410d6a20022d00003a00002000200736000e200020032f01203b0012200041146a20052d00003a000020002008360015200020032f011c3b00192000411b6a20062d00003a0000200041246a200c360200200041206a200a3600002000411c6a2009360000410121020c010b2003420037022c4100210220034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a36026c200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341ec006a41b4dfc400200341c8006a103b1a2003280228200328023010d101200328022c450d00200328022810390b200020023602002004450d00200110390b200341f0006a24000bd30303017f047e097f230041306b22022400200241206a20002903182000290308852203200141186a2900008542002000290310220420002903002205852206200129001085420010d30b200241106a2003200141086a2900008542002006200129000085420010d30b2002200442002004200241106a41086a2903002002290310857c2004200241206a41086a2903002002290320857c200542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892203420010d30b200041246a2802002207200041206a2802002208200241086a290300200229030085200389a722007122096a280000220a200041197641818284086c220b732200417f73200041fffdfb776a7141808182847871210c200941046a200871210d4104210e02400340200d21000240200c0d000240200a200a4101747141808182847871450d00410021000c030b200b200720006a280000220a73220c417f73200c41fffdfb776a7141808182847871210c20082000200e6a41046a71210d200e41046a210e200021090c010b200c68210f2000210d200c417f6a200c71210c20012007410020082009200f4103766a716b41306c6a41506a2200412010d70b0d000b0b200241306a2400200041206a410020001b0b9d1603027f047e1b7f23004190046b22042400200441086a2001280208220541086a2900002206370300200441106a200541106a2900002207370300200441186a200541186a29000022083703002004200529000022093703002001280204210a2001280200210b200441206a41186a220c2008370300200441206a41106a220d2007370300200441206a41086a220e2006370300200420093703202003410174210f200441206a4107722110200441e8016a41186a2111200441e8016a410c6a2112200441e8016a41206a211341002105410021144100211502400240024002400240024002400240024002400240024002400240024002400340201541017621010240024020154101710d00200120034b0d03200441003a00f001200420013602ec01200420023602e8010c010b200120034b0d03200120034f0d04200441013a00f001200420023602e801200420013602ec012004200220016a2d000041f001713a00f1010b200441c0006a200b200441206a200441e8016a200a28020c110600024002400240200428024022160d00200441e8016a41186a2205200441206a41186a290300370300200441e8016a41106a2217200441206a41106a290300370300200441e8016a41086a2218200441206a41086a290300370300200420042903203703e8014130103822010d010c130b20042802442119200441e8016a2016200428024810cb0720042d00e8014101460d0f201441016a21140c010b200120042903e801370001200120144100473a0000200141096a2018290300370000200141116a2017290300370000200141196a200529030037000020004101360200200020013602040c100b0340200428028402211a200428028002211b20042802fc01211c20042802f801211820042802f401211720042802f001211d20042802ec012101200441c0006a201341a80110d40b1a20042802b403211e20042802b003211f024002400240024020010e05110f000102110b410021010240201741017420186b2220200f20056b221e201e20204b1b2221450d000340200520016a221f410176221e20034f0d0a201820016a2222410176222320174f0d0b2002201e6a2d0000221e410f71201e41f00171410476201f4101711b201d20236a2d0000221e410f71201e41047620224101711b470d012021200141016a2201470d000b202121010b024020012020470d00202021010c030b200042003702000c120b2004201a3602fc012004201b3602f8012004201c3602f401200420183602f001200420173602ec012004201d3602e8012011200441c0006a41a80110d40b1a02400240200f2005460d002005410176220120034f0d0b200441e8016a200220016a2d00002201410f71200141047620054101711b410c6c6a2201280200221c4102470d01200042003702000c130b410021010240201f450d00201e417f4c0d1002400240201e0d00410121010c010b201e10382201450d160b2001201f201e10d40b1a0b20002001360204200041003602002000410c6a201e360200200041086a201e3602000c120b2001280204211b200141086a280200211a41012120410121010c010b20042802c003212020042802bc03212420042802b80321012004201a3602f0012004201b3602ec012004201c3602e8012012200441c0006a41a80110d40b1a200420013602a4032004201e3602a0032004201f36029c03410021010240201741017420186b221a200f20056b221b201b201a4b1b2221450d000340200520016a221f410176221e20034f0d0b201820016a2222410176222320174f0d0c2002201e6a2d0000221e410f71201e41f00171410476201f4101711b201d20236a2d0000221e410f71201e41047620224101711b470d012021200141016a2201470d000b202121010b02402001201a460d00200042003702000c110b02400240201b201a460d002005201a6a2217410176220120034f0d0d200441e8016a200220016a2d00002201410f71200141047620174101711b410c6c6a2217280200221c4102470d01200042003702000c120b4100210102402024450d002020417f4c0d0f0240024020200d00410121010c010b202010382201450d150b20012024202010d40b1a0b20002001360204200041003602002000410c6a2020360200200041086a20203602000c110b201a41016a2120201a41016a21012017280204211b201741086a280200211a0b200120156a2115200520206a21050240201c450d00200441e8016a201b201a10cb0720042d00e8014101460d0f0c010b0b02400240201a4120460d002011200c290300370300200441e8016a41106a2217200d290300370300200441e8016a41086a2218200e290300370300200420042903203703e801201a417f4c0d0d02400240201a0d00410121010c010b201a10382201450d130b2001201b201a10d40b211d413010382201450d12200141043a0000200120042903e8013700012001201a36002c2001201a3600282001201d360024200141096a2018290300370000200141116a2017290300370000200141196a20112903003700000c010b200441e8016a41026a41003a0000200441003b01e801201b2f00002117200441ec036a41026a201b41026a2d00003a0000201b411f6a2d00002118201b41176a2900002106201b2800032101201b2900072107200441f0036a41086a221d201b410f6a290000370300200441f0036a41106a221e2006370300200441f0036a41186a221f20183a0000200420173b01ec03200420073703f0032011201f2d00003a0000200441e8016a41106a201e290300370300200441e8016a41086a201d290300370300200420042903f0033703e8010b200441e8036a41026a2217200441ec036a41026a2d00003a0000200441c8036a41086a2218200441e8016a41086a290300370300200441c8036a41106a221d200441e8016a41106a290300370300200441c8036a41186a221e2011280200360200200420042f01ec033b01e803200420042903e8013703c8030240201a4120470d00201020042903c803370000201041086a2018290300370000201041106a201d290300370000201041186a201e2d00003a0000200420042f01e8033b012020042001360023200420172d00003a00222019450d01201610390c010b0b20004101360200200020013602040c0d0b2001200341a8ddc000104b000b2001200341b8ddc000104b000b2001200341c8ddc000103c000b201e200341d4cbc400103c000b2023201741d4cbc400103c000b2001200341d4cbc400103c000b201e200341d4cbc400103c000b2023201741d4cbc400103c000b2001200341d4cbc400103c000b4100211a024002400240201741017420186b200f20056b2221470d004100211a41002101024002402021450d00410021010340201820016a221f410176221e20174f0d04200520016a2222410176222320034f0d05201d201e6a2d0000221e410f71201e41f00171410476201f4101711b200220236a2d0000221e410f71201e41047620224101711b470d012021200141016a2201470d000c020b0b20012021470d010b201b417f4c0d0302400240201b0d004101211a0c010b201b1038221a450d090b201a201c201b10d40b1a201bad220642208620068421060b2000201a36020420004100360200200041086a20063702000c050b201e201741d4cbc400103c000b2023200341d4cbc400103c000b1034000b200042003702000c010b20042d00e9012105413010382201450d02200141033a0000200120053a002120012004290320370001200141096a200441286a290300370000200141116a200441306a290300370000200141196a200441386a29030037000020004101360200200020013602040b2019450d00201610390b20044190046a24000f0b1032000bd12005027f047e037f017e157f230041f0086b2202240002400240024002400240410110382203450d00200341003a0000410041003502c4a94e20024198076aad7c42adfed5e4d485fda8d8007e42218922043e02c4a94e200241a0016a41c4a9ce00ad220542a4bb99fed1a0bbb023852206420042adfed5e4d485fda8d800420010d30b20024180016a200442a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010d30b20024190016a200542c5ecb3fec9ecf7c2c300852207420042adfed5e4d485fda8d800420010d30b200241f0006a200442c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010d30b200241e0006a2004200585420042adfed5e4d485fda8d800420010d30b20024198076a41919ece004101109f0120024184026a20024198076a41186a2208290000370200200241fc016a20024198076a41106a2209290000370200200241b0016a41c4006a20024198076a41086a220a290000370200200241b0016a41346a428180808010370200200241b0016a41286a4200370300200241b0016a41246a41e4a2c00036020020022002290098073702ec01200220033602e001200241003602d00120022004200241a0016a41086a29030020022903a001857c200241e0006a41086a29030020022903608542cf829ebbefefde82147c220b893703b0012002200241f0006a41086a29030020022903708520057c200b423088893703c8012002200420024190016a41086a290300200229039001857c200b422088893703c001200220024180016a41086a2903002002290380018520057c200b421088893703b80120024190026a41186a2203420037030020024190026a41106a220c420037030020024190026a41086a220d4200370300200242003703900220024198076a41919ece004101109f0120032008290000370300200c2009290000370300200d200a29000037030020022002290098073703900220024198076a41919ece004101109f01200241d8056a41186a22032008290000370300200241d8056a41106a220c2009290000370300200241d8056a41086a220d200a29000037030020022002290098073703d80541201038220e450d00200820032903003703002009200c290300370300200a200d290300370300410041003502c4a94e20024198046aad7c42adfed5e4d485fda8d8007e42218922043e02c4a94e200241d0006a2006420042adfed5e4d485fda8d800420010d30b200241306a200442a4bb99fed1a0bbb02385420042adfed5e4d485fda8d800420010d30b200241c0006a2007420042adfed5e4d485fda8d800420010d30b200241206a200442c5ecb3fec9ecf7c2c30085420042adfed5e4d485fda8d800420010d30b200241106a2004200585420042adfed5e4d485fda8d800420010d30b200241b0026a41346a4200370200200241ec026a4200370200200241b0026a41d0006a41cc86c300360200200241b0026a41c8006a4108360200200241b0026a41c4006a200e360200200220022903d80537039807200241002802d8974e3602e002200241013a008803200220024190026a360284032002200241b0016a3602fc02200241a1036a200829030037000020024199036a200929030037000020024191036a200a29030037000020024189036a200229039807370000200241b0026a41286a4200370300200241b0026a41246a41e4a2c000360200200241003602ac03200241003602d00220022004200241d0006a41086a2903002002290350857c200241106a41086a29030020022903108542cf829ebbefefde82147c220b893703b0022002200241206a41086a29030020022903208520057c200b423088893703c80220022004200241c0006a41086a2903002002290340857c200b422088893703c0022002200241306a41086a29030020022903308520057c200b421088893703b8022001280200220f2001280208221041d0006c6a210d20012802042111200f21082010450d03200d41b07f6a211220024198076a41306a211320024198076a41206a211420024198076a4101722115200241d0036a41046a2103200241fc056a210c20024198076a41046a210941002116200f211703402016210e2017210802400240024003400240200841c0006a28020022180d00200841d0006a21080c090b20092008290200370200200941386a200841386a290200370200200941306a200841306a290200370200200941286a200841286a290200370200200941206a200841206a290200370200200941186a200841186a290200370200200941106a200841106a290200370200200941086a200841086a290200370200200241d8056a20024198076a41c40010d40b1a200241d0036a41086a200241d8056a41086a290200370300200241d0036a41106a200241d8056a41106a290200370300200241d0036a41186a200241d8056a41186a290200370300200241d0036a41206a200241d8056a41206a280200360200200241b0036a41086a2219200c41086a290200370300200241b0036a41106a221a200c41106a290200370300200241b0036a41186a221b200c41186a290200370300200220022902d8053703d0032002200c2902003703b003200241f8036a41186a200341186a2216290000370300200241f8036a41106a200341106a2217290000370300200241f8036a41086a200341086a221c290000370300200220032900003703f803200841c4006a280200210a200841c8006a2902002105200241e0086a200241f8036a10d60420024198076a20022802e008221d20022802e80810d704024020022d00980741014722010d00200241d8056a201541c00110d40b1a0b024020022802e408450d00201d10390b024020010d0020024198046a200241d8056a41c00110d40b1a201420022903b003370300201441086a2019290300370300201441106a201a290300370300201441186a201b29030037030020024198076a41186a221e201629020037030020024198076a41106a221f201729020037030020024198076a41086a2220201c290200370300200220053703e0072002200a3602dc07200220183602d8072002200329020037039807200841d0006a2117200e41016a2116416821190340200241086a20024198046a20194198e3c0006a280000221a10bd02200228020c220a41046a2201417f4c0d032002280208211b02400240024020010d00200241003602e808200220013602e408200241013602e0080c010b200110382218450d094100211d200241003602e808200220013602e408200220183602e008200a417c490d010b200241e0086a41004104107720022802e008211820022802e808211d0b2018201d6a201a3600002002201d41046a22013602e8080240024002400240200a41c000490d00200a41808001490d01200a418080808004490d02024020022802e40822182001470d00200241e0086a20014101107720022802e408211820022802e80821010b20022802e008221d20016a41033a00002002200141016a22013602e8080240201820016b41034b0d00200241e0086a20014104107720022802e008211d20022802e80821010b201d20016a200a360000200141046a21010c030b200a4102742118024020022802e4082001470d00200241e0086a20014101107720022802e80821010b20022802e008221d20016a20183a0000200141016a21010c020b200a4102744101722118024020022802e40820016b41014b0d00200241e0086a20014102107720022802e80821010b20022802e008221d20016a20183b0000200141026a21010c010b200a4102744102722118024020022802e40820016b41034b0d00200241e0086a20014104107720022802e80821010b20022802e008221d20016a2018360000200141046a21010b200220013602e808024020022802e40820016b200a4f0d00200241e0086a2001200a107720022802e008211d20022802e80821010b201d20016a201b200a10d40b1a20022001200a6a22013602e80820022802e008210a2002200e3602ec08200241d8056a200241b0026a200a2001200241ec086a4104108407024020022802e408450d00200a10390b20022802dc05210a024020022802d8054101470d0002400240200a2d00000e0407070007010b200a41086a280200450d06200a41046a28020010390c060b200a41286a280200450d05200a41246a28020010390c050b0240200a450d0020022802e005450d00200a10390b201941046a2219450d050c000b0b200841d0006a21080240200a450d00200a41306c450d00201810390b200e41016a210e200d2008470d000b200d21080c070b1034000b200a1039200041086a411a360200200041f486c300360204200041013602000c040b2002200e3602dc08200241003602e808200242013703e008200241e0086a41004120107720022802e00820022802e80822016a220a200229039807370000200a41086a2020290300370000200a41106a201f290300370000200a41186a201e2903003700002002200141206a3602e808200220143602ec08200241ec086a200241e0086a10df02200220133602ec08200241ec086a200241e0086a10df0220022802d807210a200241e0086a20022802e007220110ac0202402001450d00200141306c211d0340024020022802e40820022802e808220e6b411f4b0d00200241e0086a200e4120107720022802e808210e0b20022802e008200e6a2201200a41106a290000370000200141086a200a41186a290000370000200141106a200a41206a290000370000200141186a200a41286a2900003700002002200e41206a3602e8082002200a3602ec08200241ec086a200241e0086a10df02200a41306a210a201d41506a221d0d000b0b200241d8056a200241b0026a200241dc086a410420022802e008220a20022802e808108407024020022802e408450d00200a10390b024020022802d8054101470d000240024020022802dc0522092d00000e0405050005010b200941086a280200450d04200941046a28020010390c040b200941286a280200450d03200941246a28020010390c030b024020022802dc05220a450d0020022802e005450d00200a10390b024020022802dc07220a450d00200a41306c450d0020022802d80710390b20122008470d000b200d21080c030b1032000b20091039200041086a411a360200200041f486c300360204200041013602000b200d41b07f6a2109024020022802dc07220a450d00200a41306c450d0020022802d80710390b024020092008460d00201041d0006c200f6a41b07f6a210a0340024020084194016a2802002209450d00200941306c450d0020084190016a28020010390b200a200841d0006a2208470d000b0b02402011450d00201141d0006c450d00200f10390b200241b0026a108507200241b0016a10ff060c010b0240200d2008460d0003402008220941d0006a21080240200941c4006a280200220a450d00200a41306c450d00200941c0006a28020010390b200d2008470d000b0b02402011450d00201141d0006c450d00200f10390b200241b0026a10850720024198076a200241b0016a41e00010d40b1a20024190086a200241a8026a29030037030020024188086a200241a0026a29030037030020024180086a20024190026a41086a29030037030020022002290390023703f807200041086a20024198076a41800110d40b1a200041003602000b200241f0086a24000b960401037f23004190016b2206240041002107200641003602080240024020012d00584101460d00200141dc006a28020021080c010b200641366a200141db006a2d00003a0000200641206a200141e8006a290200370300200641286a200141f0006a290200370300200641306a200141f8006a2d00003a00002006200141d9006a2f00003b01342006200141e0006a290200370318200141dc006a2802002108410121070b200641c8006a41086a2006290318370300200641c8006a41106a200641186a41086a290300370300200641c8006a41186a200641186a41106a290300370300200641e8006a200641186a41186a280200360200200620073a0048200620062f01343b00492006200836024c2006200641366a2d00003a004b200641003602782006200336027420062002360270024002402005417f4c0d004101210702402005450d00200510382207450d020b2006200536028401200620073602800120072004200510d40b1a2006200536028801200641386a2001200641c8006a200641f0006a20064180016a200641086a10c707200628023c21050240024020062802384101460d00200141003a00582000200629030837020420004100360200200141dc006a20053602002000410c6a200641106a2802003602000c010b200041013602002000200536020420062802082201450d00200628020c450d00200110390b20064190016a24000f0b1034000b1032000b9a2b040e7f027e067f037e230041d0036b22012400200041286a41003602002000412c6a2202280200210320024100360200200041246a22022802002104200241e4a2c000360200200041206a22022802002105200241003602002004200541016a22066a2107200441046a21022004280200417f73418081828478712108200141c8016a410572210920014192016a210a2004210b0240024002400240024002400240024002400240024002400340024002400240024020080d000340024020022007490d004100210c0c040b200b41c07d6a210b2002280200210c200241046a220d2102200c41808182847871220c418081828478460d000b200c418081828478732208417f6a200871210c0c010b2008417f6a200871210c2002210d0b2003417f6a2103200b41002008684103766b41d0006c6a220241546a2d0000220e4102470d01200d21020b02402003450d00034002400240200c0d000340200220074f0d04200b41c07d6a210b2002280200210c200241046a220d2102200c41808182847871220c418081828478460d000b200c41808182847873220c417f6a200c712109200d21020c010b200c417f6a200c7121090b200c68210d2009210c200b4100200d4103766b41d0006c6a220d41506a2802004125490d00200d41586a28020010392009210c0c000b0b02402005450d00200441ff01200541056a10d60b1a0b200020053602202000412c6a4100360200200041246a200436020020002005200641037641076c20054108491b36022820002d00584101460d0d200041dc006a28020021020240200041c8006a220d280200220b200b417f6a220c200041c0006a2207280200220b2000413c6a22092802006b716b4101470d002009108807200d280200417f6a210c2007280200210b0b200041c4006a280200200b4102746a20023602002007200c200b41016a71360200200041386a280200220b20024d0d03200141e4006a41026a200041306a220e280200200241fc006c6a220241036a2d00003a0000200141c0006a41086a2207200241206a290000370300200141c0006a41106a200241286a290000370300200141c0006a41186a200241306a290000370300200120022f00013b0164200120022900183703402002280008210d200228000c210c2002290010210f20022800442103200229003c211020022800402104200228003c211120022800382112200241046a2209280000210b20022d0000210820094100360200200241003a0000200141286a41106a2209200241d8006a280000360200200141286a41086a2213200241d0006a290000370300200141086a41086a2214200241e4006a290000370300200141086a41106a2215200241ec006a290000370300200141086a41186a2216200241f4006a290000370300200120022900483703282001200229005c37030820084101470d02200241016a22082f000021112000280254220241026a200841026a2d00003a0000200220113b00002002200f37000f2002200c36000b2002200d3600072002200b360003200220012903403700172002411f6a20072d00003a0000200141fc016a200141dc006a280200360200200141f4016a200141d4006a2902003702002001200129024c3702ec0120014190026a2001290328370300200141c8016a41d0006a2013290300370300200141c8016a41d8006a2009280200360200200141a4026a2001290308370200200141c8016a41e4006a2014290300370200200141c8016a41ec006a2015290300370200200141c8016a41f4006a20162903003702002001200141e4006a41026a2d00003a00cb01200120012f01643b00c901200141c8016a41106a200f370300200141d4016a200c360200200141c8016a41206a20072d00003a0000200141c8016a41186a20012903403703002001418c026a200336020020014184026a201037020020014180026a2012360200200141c8016a41086a200d3602002001200b3602cc01200141013a00c8012000200e200141c8016a10890736025c200041003a00580c0d0b200241506a2802002108200241b07f6a2202290200210f200241086a2902002110200241106a2902002117200141c8026a41186a2213200241186a290200370300200141c8026a41106a22142017370300200141c8026a41086a221220103703002001200f3703c8022002290025210f2002412d6a2900002110200241356a29000021172002413d6a2900002118200241c5006a2900002119200241cd006a2f00002115200a200241cf006a2d00003a0000200141e8006a41286a20153b0100200141e8006a41206a22022019370300200141e8006a41186a22152018370300200141e8006a41106a22162017370300200141e8006a41086a221120103703002001200f37036820014198036a41186a201329030037030020014198036a41106a201429030037030020014198036a41086a2012290300370300200120012903c802370398032001200e3a00cc01200120083602c80120092001290368370000200941086a2011290300370000200941106a2016290300370000200941186a2015290300370000200941206a2002290300370000200941276a200141e8006a41276a280000360000200028024c21022000280250210e0240024020084125490d0020012802d401210820012802d00121130c010b200921130b200120012f01f4013b01f802200120083602f402200120133602f002200220014198036a200141f0026a200e28021c110700024020012802c8014125490d0020012802d00110390b200d2102200c21080c000b0b2001410036029401200141003a006c2001410036026802400240024002400240200b0e050102030400010b200141c8016a41086a200f370300200141c8016a41106a2001290340370300200141c8016a41186a200141c0006a41086a290300370300200141e8016a200141c0006a41106a290300370300200141f0016a200141c0006a41186a2903003703002001200d3602c8012001200c3602cc0102400240200c4125490d00200f422088a7210920012802d801210c0c010b200141d1016a21090b200d410176210202400240200d4101712208450d00200c20024d0d08200920026a2d0000410f712107200241016a21020c010b200c2002490d06410021070b200c20026b210b200920026a2102200c410174200d6b210c024002402010a7220d450d00200c41ffff03200c41ffff03491b220c41017641036a22091038220e450d09200141003602a0012001200936029c012001200e360298012001200c36029c0320014181023b01980320014198036a20014198016a108a07024020080d000240200b0d00201121090c030b20012802a001210c034020022d000021070240200c200128029c01470d0020014198016a200c410110770b200128029801200c6a20073a00002001200c41016a220c3602a001200241016a2102200b417f6a220b0d000b201121090c020b20012802a001210c03400240200c200128029c01470d0020014198016a200c410110770b200128029801200c6a20073a00002001200c41016a220c3602a0010240200b450d00200b417f6a210b20022d00002107200241016a21020c010b0b201121090c010b200c41ffff03200c41ffff03491b220c41017641036a220e10382213450d0841002109200141003602a0012001200e36029c0120012013360298012001200c36029c03200141013b01980320014198036a20014198016a108a07024020080d00200b450d0120012802a001210c034020022d000021070240200c200128029c01470d0020014198016a200c410110770b200128029801200c6a20073a00002001200c41016a220c3602a001200241016a2102200b417f6a220b0d000c020b0b20012802a001210c03400240200c200128029c01470d0020014198016a200c410110770b200128029801200c6a20073a00002001200c41016a220c3602a0010240200b450d00200b417f6a210b20022d00002107200241016a21020c010b0b410021090b20012802a0012205210202402005200128029c01470d0020014198016a20054101107720012802a00121020b20012802980120026a41003a0000200120012802a00141016a22023602a00102402002200128029c01470d0020014198016a20024101107720012802a00121020b20012802980120026a41003a0000200120012802a00141016a3602a0010240200d450d002009200320014198016a10b9020b201241c0046a211520014198036a410172210b200141c8016a41096a210a4100210d200141f0026a411f6a2113200141f0026a41186a2108200141f0026a41106a2103200141f0026a41086a210e20122102410021094101210702400240034020022d0000210c200241023a00000240200c4103470d0020094180fe0371410876210b0c030b2013200241206a2800003600002008200241196a2900003703002003200241116a290000370300200e200241096a2900003703002001200241016a2900003703f00202400240200c4102470d00200141023a00c8020c010b0240024020012802cc0122144125490d0020012802d801211420012802d40121160c010b200a21160b200120012802c8013602c803200120143602c403200120163602c003200141e8006a200141c0036a4101200d10f8012114200b20012903f002370000200b41086a200e290300370000200b41106a2003290300370000200b41186a2008290300370000200b411f6a20132800003600002001200c3a009803200141c8026a200020014198036a200141e8006a108b07200141e8006a201410f70120012d00c8024103460d020b20014198036a41206a200141c8026a41206a29030037030020014198036a41186a200141c8026a41186a29030037030020014198036a41106a200141c8026a41106a29030037030020014198036a41086a200141c8026a41086a290300370300200120012903c802220f370398034100210c0240024002400240200fa741ff0171417f6a0e020103000b200b412020014198016a10b9020c010b2008200b41186a2900003703002003200b41106a290000370300200e200b41086a2900003703002001200b2900003703f00220012802bc03220c41214f0d0d200141f0026a200c20014198016a10b9020b2007210c0b200d41016a210d20074101742107200c2009722109200241246a22022015470d000b20094180fe0371410876210b0c010b20094180fe0371410876210b0b200541026a21022005417e4f0d0920012802a001220c2002490d0a20012802980120056a200b410874200941ff0171723b000002402011450d002004450d00201110390b2012103920012802cc014125490d0d20012802d40110390c0d0b410110382202450d062001410136029c012001200236029801200241003a0000200141013602a0010c0c0b200141c8016a41086a200f370300200141c8016a41106a2001290340370300200141c8016a41186a200141c0006a41086a290300370300200141e8016a200141c0006a41106a290300370300200141f0016a200141c0006a41186a2903003703002001200d3602c8012001200c3602cc0102400240200c4125490d00200f422088a7210b20012802d801210c0c010b200141d1016a210b0b200d410176210202400240200d410171450d00200c20024d0d0c200141013a009803200141a0036a200c200241016a22076b3602002001200b20076a36029c032001200b20026a2d0000410f713a0099030c010b200c2002490d0a200141a0036a200c20026b360200200141003b0198032001200b20026a36029c030b20014198016a20014198036a20122010422088a7108c0702402010a7450d00201210390b20012802cc014125490d0b200141d4016a28020010390c0b0b200141c8016a41086a200f370300200141c8016a41106a2001290340370300200141c8016a41186a200141c0006a41086a290300370300200141e8016a200141c0006a41106a290300370300200141f0016a200141c0006a41186a2903003703002001200d3602c8012001200c3602cc0102400240200c4125490d00200f422088a7210220012802d801210c0c010b200141d1016a21020b2001200d3602c8032001200c3602c403200120023602c003200141f0026a200141c0036a10fc01200141e8006a200141c0036a4100200210f8012102200141d4026a2003360200200141c8026a41106a2001290328370300200141e0026a200141306a290300370300200141e8026a200141286a41106a280200360200200120103702cc02200120123602c80220014198036a2000200141c8026a200141e8006a108b07200141e8006a200210f701108d07000b108e07000b2002200b41c8b9c300103c000b2002200c41f4dbc0001054000b2002200c4184dcc000103c000b1032000b200c412041b49ece00104b000b2005200241c49ece001055000b2002200c41c49ece00104b000b2002200c41f4dbc0001054000b2002200c4184dcc000103c000b200028024c21022000280250210b20014198036a41086a41002802e0a240360200200141002902d8a24037039803200141c8016a200220014198036a20012802980120012802a001200b2802141105002000280254220220012903c801370000200241186a200141c8016a41186a290300370000200241106a200141c8016a41106a290300370000200241086a200141c8016a41086a2903003700002000200028027c41016a36027c2000280254220241186a290000210f200241106a2900002110200241086a2900002117200041d9006a2002290000370000200041013a0058200041e1006a2017370000200041e9006a2010370000200041f1006a200f3700000240200128029c01450d0020012802980110390b20012802684125490d00200141f0006a28020010390b0240200041386a280200220b450d0020002802302102200b41fc006c210b03400240024020022d00000d00200241046a108f070c010b200241246a108f070b200241fc006a2102200b41847f6a220b0d000b0b0240200041346a2802002202450d00200241fc006c450d00200028023010390b200041c8006a280200210202400240024002400240200041c0006a280200220b2000413c6a280200220c490d002002200b4f0d01200b200241f08bc700104b000b2002200c490d010b0240200241ffffffff0371450d00200041c4006a28020010390b20002802202202450d0202402000412c6a2802000d00200241016a21080c020b200041246a280200220b200241016a22086a2107200b41046a2102200b280200417f7341808182847871210c034002400240200c0d000340200220074f0d05200b41c07d6a210b2002280200210c200241046a220d2102200c41808182847871220c418081828478460d000b200c41808182847873220c417f6a200c712109200d21020c010b200c417f6a200c7121090b200c68210d2009210c200b4100200d4103766b41d0006c6a220d41506a2802004125490d00200d41586a28020010392009210c0c000b0b41e78ac700412341808cc7001035000b200041246a2802002008ad42d0007ea76b10390b200141d0036a24000bf90b03047f017e037f230041e0006b2204240002400240024002400240024002400240200141e0006a22052001413c6a412010d70b450d00200441306a41186a200541186a290000370300200441306a41106a200541106a290000370300200441306a41086a200541086a2900003703002004200529000037033002402001200441306a1081072206450d00200628020c41004a0d010b413010382201450d01200141003a000020012005290000370001200141096a200541086a290000370000200141116a200541106a290000370000200141196a200541186a29000037000020011039200041003602000c070b2004410036020c20042005360208200441b886c300360204200420013602002004410036021c20044200370214200441002802d8974e2207360210412410382205450d002005200236000020054180013a000420042005360220200442a4808080d000370224200441206a41054120107720042802202201200428022822066a22052003290000370000200541086a200341086a290000370000200541106a200341106a290000370000200541186a200341186a290000370000200441306a20042001200641206a200441106a108707024002400240024020042802304101470d0002400240200428023422052d00000e0403030003010b200541086a280200450d02200541046a28020010390c020b200541286a280200450d01200541246a28020010390c010b20042802342203450d010240200441306a41086a2903002208422088a722054104490d00200328000021060b200541034b21052008a7450d02200310390c020b200510390b410021050b02402004280224450d00200110390b2005450d012004200636022c200441306a20042004412c6a4104200441106a108707024020042802304101470d0002400240200428023422052d00000e0406060006010b200541086a280200450d05200541046a28020010390c050b200541286a280200450d04200541246a28020010390c040b20042802342209450d042004200441386a2903002208422088a7220236022420042009360220200941016a2101417f210502400340410021030240200220056a2206417f470d000c020b2004200636022420042001360220200141016a21012005417f6a2205415f470d000b200441306a200441206a1092030240200428025022010d000c010b200441d4006a2802002105200121030b02402008a7450d00200910390b2003450d0402402005450d00200541306c450d00200310390b2004280214210a20042802182109200442003702142004280210210b200420073602102009ad420c7e2208422088a70d022008a72205417f4c0d024104210102402005450d00200510382201450d010b2000200136020041002106200041086a22034100360200200041046a2005410c6e22053602000240024002400240200520094f0d0020004100200910ec0120032802002106200028020021010c010b200b21052009450d010b200941306c2103200b41306a210520012006410c6c6a21010340200541546a2802002202450d01200141046a200541586a290200370200200120023602002001410c6a2101200541306a2105200641016a2106200341506a22030d000b200041086a20063602000c010b200041086a2006360200200b200941306c6a22002005460d000340200541306a21010240200541086a280200450d00200541046a28020010390b2001210520002001470d000b0b0240200a450d00200a41306c450d00200b10390b20042802102100024020042802182205450d00200541306c2101200041086a2105034002402005280200450d002005417c6a28020010390b200541306a2105200141506a22010d000b0b20042802142205450d06200541306c450d06200010390c060b1032000b200041003602000c030b1034000b200510390b200041003602000b20042802102100024020042802182205450d00200541306c2101200041086a2105034002402005280200450d002005417c6a28020010390b200541306a2105200141506a22010d000b0b20042802142205450d00200541306c450d00200010390b200441e0006a24000b971803027f047e1b7f23004190046b22052400200541086a2001280208220641086a2900002207370300200541106a200641106a2900002208370300200541186a200641186a290000220937030020052006290000220a3703002001280204210b2001280200210c200541206a41186a220d2009370300200541206a41106a220e2008370300200541206a41086a220f20073703002005200a37032020034101742110200541206a4107722111200541e8016a41186a2112200541e8016a410c6a2113200541e8016a41206a21144100210641002115410021160240024002400240024002400240024002400240024002400240024002400240024002400340201641017621010240024020164101710d00200120034b0d03200541003a00f001200520013602ec01200520023602e8010c010b200120034b0d03200120034f0d04200541013a00f001200520023602e801200520013602ec012005200220016a2d000041f001713a00f1010b200541c0006a200c200541206a200541e8016a200b28020c1106000240200528024022170d00200541e8016a41186a2206200541206a41186a290300370300200541e8016a41106a2218200541206a41106a290300370300200541e8016a41086a2219200541206a41086a290300370300200520052903203703e801413010382201450d13200120052903e801370001200120154100473a0000200141096a2019290300370000200141116a2018290300370000200141196a200629030037000020004101360200200020013602040c120b200528024821012005280244211a0240200428020c20154b0d002001417f4c0d0c0240024020010d00410121180c010b200110382218450d140b20182017200110d40b21192012200d290300370300200541e8016a41106a221b200e290300370300200541e8016a41086a221c200f290300370300200520052903203703e801024020042802082218200441046a280200470d0020042018108403200428020821180b2004201841016a3602082004280200201841306c6a2218201936020420182015360200201820052903e8013702102018410c6a2001360200201841086a2001360200201841186a201c290300370200201841206a201b290300370200201841286a20122903003702000b200541e8016a2017200110cb0720052d00e8014101460d0f201541016a21150340200528028402211d200528028002211e20052802fc01211f20052802f801211920052802f401211820052802f001211b20052802ec012101200541c0006a201441a80110d40b1a20052802b403211c20052802b0032120024002400240024020010e05130f000102130b410021010240201841017420196b2221201020066b221c201c20214b1b2222450d000340200620016a2220410176221c20034f0d0a201920016a2223410176222420184f0d0b2002201c6a2d0000221c410f71201c41f0017141047620204101711b201b20246a2d0000221c410f71201c41047620234101711b470d012022200141016a2201470d000b202221010b024020012021470d00202121010c030b200042003702000c140b2005201d3602fc012005201e3602f8012005201f3602f401200520193602f001200520183602ec012005201b3602e8012012200541c0006a41a80110d40b1a0240024020102006460d002006410176220120034f0d0b200541e8016a200220016a2d00002201410f71200141047620064101711b410c6c6a2201280200221f4102470d01200042003702000c150b4100210102402020450d00201c417f4c0d1002400240201c0d00410121010c010b201c10382201450d180b20012020201c10d40b1a0b20002001360204200041003602002000410c6a201c360200200041086a201c3602000c140b2001280204211e200141086a280200211d41012121410121010c010b20052802c003212120052802bc03212520052802b80321012005201d3602f0012005201e3602ec012005201f3602e8012013200541c0006a41a80110d40b1a200520013602a4032005201c3602a0032005202036029c03410021010240201841017420196b221d201020066b221e201e201d4b1b2222450d000340200620016a2220410176221c20034f0d0b201920016a2223410176222420184f0d0c2002201c6a2d0000221c410f71201c41f0017141047620204101711b201b20246a2d0000221c410f71201c41047620234101711b470d012022200141016a2201470d000b202221010b02402001201d460d00200042003702000c130b02400240201e201d460d002006201d6a2218410176220120034f0d0d200541e8016a200220016a2d00002201410f71200141047620184101711b410c6c6a2218280200221f4102470d01200042003702000c140b4100210102402025450d002021417f4c0d0f0240024020210d00410121010c010b202110382201450d170b20012025202110d40b1a0b20002001360204200041003602002000410c6a2021360200200041086a20213602000c130b201d41016a2121201d41016a21012018280204211e201841086a280200211d0b200120166a2116200620216a21060240201f450d00200541e8016a201e201d10cb0720052d00e8014101460d110c010b0b02400240201d4120460d002012200d290300370300200541e8016a41106a2218200e290300370300200541e8016a41086a2219200f290300370300200520052903203703e801201d417f4c0d0d02400240201d0d00410121010c010b201d10382201450d150b2001201e201d10d40b211b413010382201450d14200141043a0000200120052903e8013700012001201d36002c2001201d3600282001201b360024200141096a2019290300370000200141116a2018290300370000200141196a20122903003700000c010b200541e8016a41026a41003a0000200541003b01e801201e2f00002118200541ec036a41026a201e41026a2d00003a0000201e411f6a2d00002119201e41176a2900002107201e2800032101201e2900072108200541f0036a41086a221b201e410f6a290000370300200541f0036a41106a221c2007370300200541f0036a41186a222020193a0000200520183b01ec03200520083703f003201220202d00003a0000200541e8016a41106a201c290300370300200541e8016a41086a201b290300370300200520052903f0033703e8010b200541e8036a41026a2218200541ec036a41026a2d00003a0000200541c8036a41086a2219200541e8016a41086a290300370300200541c8036a41106a221b200541e8016a41106a290300370300200541c8036a41186a221c2012280200360200200520052f01ec033b01e803200520052903e8013703c8030240201d4120470d00201120052903c803370000201141086a2019290300370000201141106a201b290300370000201141186a201c2d00003a0000200520052f01e8033b012020052001360023200520182d00003a0022201a450d01201710390c010b0b20004101360200200020013602040c0f0b2001200341a8ddc000104b000b2001200341b8ddc000104b000b2001200341c8ddc000103c000b201c200341d4cbc400103c000b2024201841d4cbc400103c000b2001200341d4cbc400103c000b201c200341d4cbc400103c000b2024201841d4cbc400103c000b2001200341d4cbc400103c000b4100211d0240201841017420196b201020066b2222470d004100211d41002101024002402022450d00410021010340201920016a2220410176221c20184f0d05200620016a2223410176222420034f0d06201b201c6a2d0000221c410f71201c41f0017141047620204101711b200220246a2d0000221c410f71201c41047620234101711b470d012022200141016a2201470d000c020b0b20012022470d010b201e417f4c0d0102400240201e0d004101211d0c010b201e1038221d450d090b201d201f201e10d40b1a201ead220742208620078421070b2000201d36020420004100360200200041086a20073702000c050b1034000b201c201841d4cbc400103c000b2024200341d4cbc400103c000b200042003702000c010b20052d00e9012106413010382201450d02200141033a0000200120063a002120012005290320370001200141096a200541286a290300370000200141116a200541306a290300370000200141196a200541386a29030037000020004101360200200020013602040b201a450d00201710390b20054190046a24000f0b1032000bde0201067f230041206b220124000240024002402000410c6a28020022022002417f6a200041046a2802002203200028020022046b716b4101470d00200221050240024002402002450d00200220026a22052002490d04200141106a41086a4104360200200120024102743602142001200028020836021020012005410274200541ffffffff0371200546410274200141106a109a01200141086a280200210520012802004101460d01200020012802043602082000410c6a200541027622053602000b20052002410174470d04200320044f0d022003200220046b22064f0d01200041086a280200220420024102746a2004200341027410d40b1a200041046a200320026a3602000c020b2005450d021032000b200041086a2802002202200520066b22034102746a200220044102746a200641027410d40b1a200020033602000b200141206a24000f0b1034000b418896ce00412b41b496ce001035000b9c0201037f23004180016b220224000240024002402000410c6a22032802002204200041106a280200470d002002200141fc0010d40b2101024020002802082204200041046a280200470d002000200410c607200028020821040b2000280200200441fc006c6a200141fc0010d40b1a2000200441016a3602080c010b2003200041186a280200417f6a200441016a71360200200041146a28020020044102746a28020021042002200141fc0010d40b21012000280208220320044d0d010240024020002802002200200441fc006c6a22032d00000d002000200441fc006c6a41046a108f070c010b2000200441fc006c6a41246a108f070b2003200141fc0010d40b1a0b20024180016a240020040f0b2004200341f4bbc300103c000be40501067f024002400240024020002d00000e03010200010b200041046a280200220241ffff03200241ffff03491b220041c0006a41ff0020002002413e2000413e491b2202461b2103200020026b2104200141086a210541012102034002400240200241ff01714102460d0020024101712100410021022000450d00200321060c010b2004450d040240200441ff014b0d002004417f6a210641022102410021040c010b200441817e6a210441ff012106410221020b0240200141046a28020020052802002200470d002001200041011077200528020021000b200128020020006a20063a00002005200041016a3602000c000b0b0240200141046a280200200141086a22022802002200470d002001200041011077200228020021000b200128020020006a41003a00002002200041016a3602000c010b200041046a2802002202413e200241ffff03200241ffff03491b2202413e491b2105024020002d0001450d00200241406a417f20022005461b2107200220056b2106200141086a2105200141046a210341012102034002400240200241ff01714102460d0020024101712100410021022000450d00200721040c010b2006450d030240200641ff014b0d002006417f6a210441022102410021060c010b200641817e6a210641ff012104410221020b0240200328020020052802002200470d002001200041011077200528020021000b200128020020006a20043a00002005200041016a3602000c000b0b200241807f7341bf7f20022005461b2107200220056b2106200141086a2105200141046a210341012102034002400240200241ff01714102460d0020024101712100410021022000450d00200721040c010b2006450d020240200641ff014b0d002006417f6a210441022102410021060c010b200641817e6a210641ff012104410221020b0240200328020020052802002200470d002001200041011077200528020021000b200128020020006a20043a00002005200041016a3602000c000b0b0bfc1c05077f017e037f017e097f230041d0026b220424000240024002400240024002400240024002400240024002400240024020022d00004101460d00200241046a28020021020240200141c8006a220528020022062006417f6a2207200141c0006a220828020022062001413c6a22092802006b716b4101470d0020091088072005280200417f6a2107200828020021060b200141c4006a28020020064102746a200236020020082007200641016a71360200200141386a280200220620024d0d02200441086a2001280230200241fc006c6a220241fc0010d40b1a200241046a4100360200200241003a000020042d0008220a4101460d01200441cc006a2802002109200441c4006a2208290200210b200441c0006a280200210c200441086a41086a2802002107200441086a41186a2102200441086a410c6a210602400240024002400240200428020c0e050102030400010b200441c8006a280200210d2008280200210e20044198016a41106a200229020037030020044198016a410c6a200641086a28020036020020044198016a41186a200241086a290200370300200441b8016a200241106a290200370300200441c0016a200241186a290200370300200420073602980120042006290200220f37029c0102400240200fa722054125490d00200441a4016a280200211020042802a80121050c010b200441a1016a21100b200741017621020240024020074101712211450d00200520024d0d0a201020026a2d0000410f712108200241016a21020c010b20052002490d08410021080b200520026b2106201020026a2102200541017420076b210702400240200ba72205450d00200741ffff03200741ffff03491b220741017641036a221010382212450d0b20044100360290012004201036028c0120042012360288012004200736029c0220044181023b01980220044198026a20044188016a108a07024020110d00024020060d00200e21100c030b2004280290012107034020022d0000210802402007200428028c01470d0020044188016a2007410110770b20042802880120076a20083a00002004200741016a220736029001200241016a21022006417f6a22060d000b200e21100c020b2004280290012107034002402007200428028c01470d0020044188016a2007410110770b20042802880120076a20083a00002004200741016a22073602900102402006450d002006417f6a210620022d00002108200241016a21020c010b0b200e21100c010b200741ffff03200741ffff03491b220741017641036a221210382213450d0a4100211020044100360290012004201236028c0120042013360288012004200736029c02200441013b01980220044198026a20044188016a108a07024020110d002006450d012004280290012107034020022d0000210802402007200428028c01470d0020044188016a2007410110770b20042802880120076a20083a00002004200741016a220736029001200241016a21022006417f6a22060d000c020b0b2004280290012107034002402007200428028c01470d0020044188016a2007410110770b20042802880120076a20083a00002004200741016a22073602900102402006450d002006417f6a210620022d00002108200241016a21020c010b0b410021100b2004280290012214210202402014200428028c01470d0020044188016a20144101107720042802900121020b20042802880120026a41003a0000200420042802900141016a22023602900102402002200428028c01470d0020044188016a20024101107720042802900121020b20042802880120026a41003a0000200420042802900141016a3602900102402005450d002010200920044188016a10b9020b200c41c0046a211520044198026a410172210620044198016a41096a211641002105200441f0016a411f6a2113200441f0016a41186a2110200441f0016a41106a2111200441f0016a41086a2112200c2102410021094101210802400240034020022d00002107200241023a0000024020074103470d0020094180fe037141087621060c030b2013200241206a2800003600002010200241196a2900003703002011200241116a2900003703002012200241096a2900003703002004200241016a2900003703f0010240024020074102470d00200441023a00c8010c010b02400240200428029c0122174125490d0020042802a801211720042802a40121180c010b201621180b20042004280298013602c802200420173602c402200420183602c0022003200441c0026a4101200510f8012117200620042903f001370000200641086a2012290300370000200641106a2011290300370000200641186a20102903003700002006411f6a2013280000360000200420073a009802200441c8016a200120044198026a2003108b072003201710f70120042d00c8014103460d020b20044198026a41206a200441c8016a41206a29030037030020044198026a41186a200441c8016a41186a29030037030020044198026a41106a200441c8016a41106a29030037030020044198026a41086a200441c8016a41086a290300370300200420042903c801220b37039802410021070240024002400240200ba741ff0171417f6a0e020103000b2006412020044188016a10b9020c010b2010200641186a2900003703002011200641106a2900003703002012200641086a290000370300200420062900003703f00120042802bc02220741214f0d0f200441f0016a200720044188016a10b9020b200821070b200541016a21052008410174210820072009722109200241246a22022015470d000b20094180fe037141087621060c010b20094180fe037141087621060b201441026a21022014417e4f0d0b20042802900122072002490d0c20042802880120146a2006410874200941ff0171723b00000240200e450d00200d450d00200e10390b200c1039200428029c014125490d0f20042802a40110390c0f0b410110382202450d082004410136028c012004200236028801200241003a000020044101360290010c0e0b20044198016a41106a200229020037030020044198016a410c6a200641086a28020036020020044198016a41186a200241086a290200370300200441b8016a200241106a290200370300200441c0016a200241186a290200370300200420073602980120042006290200220f37029c0102400240200fa722064125490d00200441a4016a280200210820042802a80121060c010b200441a1016a21080b20074101762102024002402007410171450d00200620024d0d0e200441013a009802200441a0026a2006200241016a22076b3602002004200820076a36029c022004200820026a2d0000410f713a0099020c010b20062002490d0c200441a0026a200620026b360200200441003b0198022004200820026a36029c020b20044188016a20044198026a200c200b422088a7108c070240200ba7450d00200c10390b200428029c014125490d0d200441a4016a28020010390c0d0b20044198016a41106a200229020037030020044198016a410c6a200641086a28020036020020044198016a41186a200241086a290200370300200441b8016a200241106a290200370300200441c0016a200241186a290200370300200420073602980120042006290200220f37029c0102400240200fa722024125490d00200441a4016a280200210020042802a80121020c010b200441a1016a21000b200420073602c802200420023602c402200420003602c002200441f0016a200441c0026a10fc012003200441c0026a4100200410f8012102200441d4016a2009360200200441d8016a200441d0006a290300370300200441e0016a200441d8006a290300370300200441e8016a200441e0006a2802003602002004200b3702cc012004200c3602c80120044198026a2001200441c8016a2003108b072003200210f701108d07000b108e07000b200041003a000020002002290001370001200041196a200241196a290000370000200041116a200241116a290000370000200041096a200241096a2900003700000c0c0b20002004290009370001200041003a0000200041196a200441086a41196a290000370000200041116a200441086a41116a290000370000200041096a200441086a41096a2900003700000c0a0b2002200641c8b9c300103c000b2002200541f4dbc0001054000b200220054184dcc000103c000b1032000b2007412041b49ece00104b000b2014200241c49ece001055000b2002200741c49ece00104b000b2002200641f4dbc0001054000b200220064184dcc000103c000b024002402004280290012202411f4b0d00200441b0016a22064200370300200441a8016a22014200370300200441a0016a22074200370300200442003703980120044198016a200428028801200210d40b1a200041246a2002360200200041013a0000200041196a2006290300370000200041116a2001290300370000200041096a200729030037000020002004290398013700010c010b200141d0006a2802002108200128024c2105200328022c220741017621060240024002400240024020074101710d0002400240200328020022074125490d002003410c6a2802002107200341086a28020021030c010b200341056a21030b20072006490d022004200336029801410021070c010b02400240200328020022074125490d002003410c6a2802002109200341086a28020021100c010b200341056a2110200721090b20092006490d020240024020074125490d002003410c6a2802002107200341086a28020021030c010b200341056a21030b200720064d0d03200441a1016a200320066a2d000041f001713a00002004201036029801410121070b200420073a00a0012004200636029c01200041016a200520044198016a20042802880120022008280214110500200041003a00002001200128027c41016a36027c0c030b2006200741f4dac000104b000b200620094184dbc000104b000b200620074194dbc000103c000b0240200428028c01450d0020042802880110390b200a450d010b2004412c6a108f070b200441d0026a24000bb10201067f02400240200141086a280200220441036a2205417f4c0d0020012d000021062001280204210720012d000121084101210102402005450d00200510382201450d020b20002001360200200041086a22014100360200200041046a22092005360200200441017420066a220541ffff03200541ffff03491b41c000200010f6010240024020060d00200128020021010c010b2008410f7121060240200128020022052009280200470d002000200541011077200041086a28020021050b200041086a200541016a2201360200200028020020056a20063a00000b0240200041046a28020020016b20044f0d002000200120041077200041086a28020021010b200028020020016a2007200410d40b1a200041086a200120046a36020020022003200010b9020f0b1034000b1032000b110041e1d1cd00412841a49ece001035000b110041e1d1cd00412841949ece001035000bcd0101017f0240024002400240024020002802000e0404000102030b0240200041086a2802004125490d00200041106a28020010390b200041386a280200450d03200041346a28020010390f0b200041086a2802004125490d02200041106a28020010390f0b20002802041039200041086a2802002201450d012000410c6a280200450d01200110390c010b0240200041086a2802004125490d00200041106a28020010390b200041346a2802001039200041386a2802002201450d002000413c6a280200450d00200110390f0b0ba34505217f017e067f067e067f230041b0026b22052400024002400240024002400240024002400240024002400240024002400240024002400240024020020d0041002106410021070c010b200120024105746a2108200541f8016a41186a2109200541386a41186a210a200541f8016a41086a210b41002802e8c848210c410021064100210703402009200141186a290000370300200541f8016a41106a220d200141106a290000370300200b200141086a290000370300200520012900003703f801024020070d0041c80510382207450d0c4100210e200741003b01e602200741003602e0020b200141206a21012007210f200e2110024002400340200f41e8026a2111200f2f01e6022212410574211341002102417f211402400340024020132002470d00201221140c020b200541f8016a200f20026a221541e8026a412010d70b2216450d03201441016a2114200241206a21022016417f4a0d000b0b02402010450d002010417f6a2110200f20144102746a41c8056a280200210f0c010b0b200541206a41086a2215200b41086a290200370300200541206a41106a2213200b41106a2902003703002005200b29020037032020052802fc01211020052802f801211702402012410a4b0d00200541a8016a41106a220d2013290300370300200541a8016a41086a22132015290300370300200520052903203703a801201441016a21150240201420124f22180d00201120154105746a201120144105746a201220146b41057410d50b1a0b2011201441057422166a2202201036000420022017360000200220052903a801370008200241106a2013290300370000200241186a200d290300370000024020180d00200f20154105746a200f20166a201220146b41057410d50b1a0b200f20166a2202420037030820024200370300200242003702142002200c360210200f201241016a3b01e602200641016a21060c020b410021194104210202400240201441054f0d00201421160c010b4105210241052116024002402014417b6a0e020201000b201441796a211641012119410621020c010b41002116410121190b41c80510382212450d0d201241003b01e602201241003602e0022012200f2f01e602221a2002417f736a22183b01e60220112002410574221b6a2214280004211c2014280000211d200541a8016a41106a221e201441186a290000370300200541a8016a41086a221f201441106a290000370300200520142900083703a801200a200f201b6a221441186a290300370300200541386a41106a2220201441106a290300370300200541386a41086a2221201441086a290300370300200520142903003703382018410c4f0d0b201a200241016a22146b2018470d0a201241e8026a2011201441057422146a2018410574221110d40b1a2012200f20146a201110d40b212220092005290338370300200941086a22232021290300370300200941106a22242020290300370300200941186a2225200a290300370300200f20023b01e602200d201e2903002226370300200541c0016a41086a2218201f290300370300200541c0016a41106a221b2026370300200541c0016a41186a221a2009290300370300200541c0016a41206a2227200541f8016a41206a2228290300370300200541c0016a41286a2229200541f8016a41286a222a290300370300200541c0016a41306a222b200541f8016a41306a222c290300370300200520052903a8013703c0012022200f20191b22022f01e6022111201e2013290300370300201f2015290300370300200520052903203703a801200241e8026a21140240201641016a221920114b22130d00201420194105746a201420164105746a201120166b41057410d50b1a0b2014201641057422156a2214201036000420142017360000201420052903a801370008201441106a201f290300370000201441186a201e290300370000024020130d00200220194105746a200220156a201120166b41057410d50b1a0b200220156a2214420037030820144200370300201442003702142014200c3602102002201141016a3b01e602200541f0006a41086a20182903002226370300200541f0006a41106a201b290300222d370300200541f0006a41186a201a290300222e370300200541f0006a41206a2027290300222f370300200541f0006a41286a20292903002230370300200541f0006a41306a202b2903002231370300200520052903c0012232370370200541386a41306a22332031370300200541386a41286a22342030370300200541386a41206a2235202f370300200a202e3703002020202d3703002021202637030020052032370338024002400240200f2802e00222020d00410021190c010b4100211920222122201c2136201d21370340200f2f01e40221150240200222102f01e6022211410a4b0d00200d2020290300370300200b2021290300370300200520052903383703f801201041e8026a21020240201120154d22160d00200220154105746a221441206a2014201120156b41057410d50b1a0b2002201541057422146a2202203636000420022037360000200220052903f801370008200241106a200b290300370000200241186a200d2903003700002009200a41186a290300370300200d200a41106a290300370300200b200a41086a2903003703002005200a2903003703f801201541016a2102024020160d00201020024105746a201020146a201120156b41057410d50b1a0b201141016a210f201020146a221420052903f801370300201441186a2009290300370300201441106a200d290300370300201441086a200b290300370300201041c8056a2114201141026a2113024020160d00201541027420146a41086a201420024102746a201120156b41027410d50b1a0b2010200f3b01e602201420024102746a2022360200200220134f0d0320102002417f6a22024102746a41cc056a2114034020142802002216200241016a22023b01e402201620103602e002201441046a2114200f2002470d000c040b0b4100211341042102024020154105490d0020152102024002402015417b6a0e020201000b201541796a211541012113410621020c010b4100211541012113410521020b41f80510382212450d10201241003b01e602201241003602e002201220102f01e60222172002417f736a22163b01e602201f201041e8026a22382002410574220f6a221441106a290000370300201e201441186a290000370300200520142900083703a8012014280004211c2014280000211d201a2010200f6a221441186a290300370300201b201441106a2903003703002018201441086a290300370300200520142903003703c0012016410c4f0d0c2017200241016a220f6b2016470d0b201241e8026a2038200f41057422146a2016410574221610d40b1a2012201020146a201610d40b2116201020023b01e602200b201f290300370300200d201e290300370300200920052903c001370300202320182903003703002024201b2903003703002025201a290300370300200520052903a8013703f80120162f01e602221441016a21172014410c4f0d0a201120026b22022017470d09201941016a2119201641c8056a2010200f4102746a41c8056a200241027410d40b1a4100210202400340201620024102746a41c8056a280200220f20023b01e402200f20163602e002200220144f0d01200220022014496a220220144d0d000b0b202b202c2903003703002029202a29030037030020272028290300370300201a2009290300370300201b200d2903003703002018200b290300370300200520052903f8013703c0012016201020131b220f2f01e6022102200d2020290300370300200b2021290300370300200520052903383703f801200f41e8026a21140240201541016a221120024b22130d00201420114105746a201420154105746a200220156b41057410d50b1a0b2014201541057422176a2214203636000420142037360000201420052903f801370008201441106a200b290300370000201441186a200d2903003700002009200a41186a290300370300200d200a41106a290300370300200b200a41086a2903003703002005200a2903003703f801024020130d00200f20114105746a200f20176a200220156b41057410d50b1a0b200241016a2113200f20176a221420052903f801370300201441186a2009290300370300201441106a200d290300370300201441086a200b290300370300200f41c8056a21140240201541026a2236200241026a22174f0d00201420364102746a201420114102746a200220156b41027410d50b1a0b201420114102746a2022360200200f20133b01e6020240201120174f0d00200f20154102746a41cc056a2102034020022802002214201541016a22153b01e4022014200f3602e002200241046a210220132015470d000b0b2033202b2903003703002034202929030037030020352027290300370300200a201a2903003703002020201b29030037030020212018290300370300200520052903c0013703382010210f20162122201c2136201d213720102802e00222020d000b0b202b2033290300222637030020292034290300222d37030020272035290300222e370300201a200a290300222f370300201b202029030022303703002018202129030022313703002005200529033822323703c001202c2026370300202a202d3703002028202e3703002009202f370300200d2030370300200b2031370300200520323703f80141f80510382202450d0e200220073602c805200241003b01e602200241003602e002200741003b01e402200720023602e002200e2019470d0620022f01e6022214410b4f0d05200e41016a210e2002201441016a22163b01e602200220144105746a221441f8026a201829030037000020144180036a201b290300370000201441106a2024290300370300201441186a202529030037030020142009290300370300201441ec026a201c360000201441e8026a201d360000201441f0026a20052903c001370000201441086a2023290300370300200241c8056a20164102746a2012360200201220023602e002201220163b01e402200221070b200641016a21060c010b2015420037030820154200370300201541186a4100360200201541146a2214280200210220144100360200201541106a221628020021142016200c3602002014450d002002450d00200241306c450d00201410390b20012008470d000b0b02402004450d0020032004412c6c6a210903400240200328020841306c2202450d002003280200221320026a210d2003410c6a2112024003402007450d01201341306a21112007210f200e211002400340200f2f01e602220b410574210141002102417f2114024002400340024020012002470d00200b21140c020b2013200f20026a221541e8026a412010d70b2216450d02201441016a2114200241206a21022016417f4a0d000b0b2010450d022010417f6a2110200f20144102746a41c8056a280200210f0c010b0b2015427f2015290300222620132903207c222d202d2026542202201541086a22142903002226201341286a22162903007c2002ad7c222d202654202d2026511b22021b3703002014427f202d20021b370300200541f8016a41186a220f201241186a290000370300200541f8016a41106a2201201241106a290000370300200541f8016a41086a2210201241086a290000370300200520122900003703f801201629030021262013290320212d0240201541186a22142802002202201541146a280200470d00201541106a2002410110f603201428020021020b201541106a280200200241306c6a220220052903f8013703002002202d370320200241186a200f290300370300200241106a2001290300370300200241086a2010290300370300200241286a20263703002014201428020041016a360200201121132011200d460d030c010b0b0240200e450d00034020072802c8052107200e417f6a220e0d000b0b02402006450d004100211403400240024002400240201420072f01e602490d0041002114034041002102024020072802e0022215450d00201441016a210f20072f01e4022116201521020b024041f80541c80520141b450d00200710390b024020020d00410021070c050b200f211420022107201620022f01e6024f0d000b200220164105746a21150240200f0d00200221070c020b201641027420026a41cc056a28020021070240200f417f6a2214450d00034020072802c80521072014417f6a22140d000b0b410021140c020b200720144105746a211520072102201421160b201641016a21140b200220164105746a2802102101201528021421130b2001450d022006417f6a210602402013450d00201341306c450d00200110390b20060d000b0b41002102034020072802e0022114024041f80541c80520021b450d00200710390b2002417f6a21022014210720140d000b0b20004104360204410121120c130b2003412c6a22032009470d000b0b41002101024020070d0041002102410021060c090b200721020340200e450d09200e417f6a210e200720072f01e6024102746a41c8056a280200210720022802c80521020c000b0b41a583c700412041e084c7001035000b41a084c700413041d084c7001035000b41b485c700412841dc85c7001035000b2017410c41b486c700104b000b41b485c700412841dc85c7001035000b2016410b41a485c700104b000b41b485c700412841dc85c7001035000b2018410b41a485c700104b000b024020060d00410021160c070b0240024002402002450d00024020022f01e602450d004100210f410021150c020b41002116034041002114024020022802e0022213450d00201641016a211520022f01e402210f201321140b024041f80541c80520161b450d00200210390b024020140d00410021020c040b2015211620142102200f20142f01e6024f0d000b201421020c010b41a5cbc800412b41d0cbc8001035000b200f41016a21162002200f41057422146a210f200220146a41e8026a211302402015450d00200220164102746a41c8056a280200210202402015417f6a2214450d00034020022802c80521022014417f6a22140d000b0b410021160b200541c0016a41186a2215201341186a290000370300200541c0016a41106a2207201341106a290000370300200541c0016a41086a2201201341086a290000370300200520132900003703c001200541c0016a41206a2213200f290300370300200541c0016a41286a2210200f41086a290300370300200f2802102114200541386a41086a2212200f411c6a2802003602002005200f29021437033820054184026a20012903003702002005418c026a2007290300370200200541f8016a411c6a20152903003702002005419c026a2013290300370200200541a4026a2010290300370200200520052903c0013702fc01200541a8016a41086a2012280200360200200520052903383703a801200541c0016a41306a200541f8016a41306a2802003602002010200541f8016a41286a2902003703002013200541f8016a41206a2902003703002015200541f8016a41186a2902003703002007200541f8016a41106a2902003703002001200541f8016a41086a290200370300200520052902f8013703c0010b2006417f6a2101200541f8016a41306a200541c0016a41306a280200360200200541f8016a41286a200541c0016a41286a290300370300200541f8016a41206a200541c0016a41206a290300370300200541f8016a41186a200541c0016a41186a290300370300200541f8016a41106a200541c0016a41106a290300370300200541f8016a41086a200541c0016a41086a290300370300200541206a41086a200541a8016a41086a280200360200200520052903c0013703f801200520052903a801370320200541f0006a41086a20054184026a290200370300200541f0006a41106a2005418c026a290200370300200541f0006a41186a20054194026a290200370300200541f0006a41206a2005419c026a290200370300200541f0006a41286a200541a4026a290200370300200520052902fc013703702014450d06417f200141016a220f200f2001491b220f41ffffff1f71200f470d05200f410674220f417f4c0d05200f1038220a450d00200041046a211d200a2005290370370300200a2014360230200a2005290320370234200a41286a200541f0006a41286a290300370300200a41206a200541f0006a41206a290300370300200a41186a200541f0006a41186a290300370300200a41106a200541f0006a41106a290300370300200a41086a200541f0006a41086a290300370300200a413c6a200541206a41086a280200360200200541013602082005200f41067622153602042005200a3602002001450d030240201620022f01e6024f0d00410021130c020b4100210f034041002114024020022802e0022207450d00200f41016a211320022f01e4022116200721140b024041f80541c805200f1b450d00200210390b024020140d00410021020c040b2013210f20142102201620142f01e6024f0d000b201421020c010b1032000b201641016a210f2002201641057422146a2116200220146a41e8026a210702402013450d002002200f4102746a41c8056a280200210202402013417f6a2214450d00034020022802c80521022014417f6a22140d000b0b4100210f0b200541c0016a41186a2214200741186a290000370300200541c0016a41106a2213200741106a290000370300200541c0016a41086a2201200741086a290000370300200520072900003703c001200541c0016a41206a22072016290300370300200541c0016a41286a2210201641086a2903003703002016280210210b200541f0006a41086a22122016411c6a2802003602002005201629021437037020054184026a20012903003702002005418c026a2013290300370200200541f8016a411c6a20142903003702002005419c026a2007290300370200200541a4026a2010290300370200200520052903c0013702fc01200541a8016a41086a2012280200360200200520052903703703a801200541c0016a41306a200541f8016a41306a2802003602002010200541f8016a41286a2902003703002007200541f8016a41206a2902003703002014200541f8016a41186a2902003703002013200541f8016a41106a2902003703002001200541f8016a41086a290200370300200520052902f8013703c0010b2006417e6a2101200541f8016a41306a2220200541c0016a41306a221e280200360200200541f8016a41286a2221200541c0016a41286a2218290300370300200541f8016a41206a2227200541c0016a41206a220e290300370300200541f8016a41186a2229200541c0016a41186a2211290300370300200541f8016a41106a222b200541c0016a41106a220d290300370300200541f8016a41086a221c200541c0016a41086a2209290300370300200541106a41086a221b200541a8016a41086a221f280200360200200520052903c0013703f801200520052903a801370310200541386a41086a221a20054184026a290200370300200541386a41106a220c2005418c026a290200370300200541386a41186a2208200541f8016a411c6a290200370300200541386a41206a22062005419c026a290200370300200541386a41286a2217200541a4026a290200370300200520052902fc013703380240200b450d00200541f0006a41046a2107200541f8016a41046a2110410121120340024020122015470d0020052015417f200141016a221420142001491b1091072005280200210a0b200a20124106746a22142005290338370300200c29030021262008290300212d2006290300212e2017290300212f201a29030021302014200b360230201441086a2030370300201420052903103702342014413c6a201b280200360200201441286a202f370300201441206a202e370300201441186a202d370300201441106a20263703002005201241016a22123602082001450d02024002400240200f20022f01e602490d0041002116034041002114024020022802e0022213450d00201641016a211520022f01e402210f201321140b024041f80541c80520161b450d00200210390b024020140d00410021020c040b2015211620142102200f20142f01e6024f0d000b200f41016a21162014200f4105746a221341e8026a210b024020150d00201421020c020b201420164102746a41c8056a280200210202402015417f6a2216450d00034020022802c80521022016417f6a22160d000b0b410021160c010b200f41016a21162002200f4105746a221341e8026a210b200221140b2011200b41186a290000370300200d200b41106a2900003703002009200b41086a2900003703002005200b2900003703c001200e2013290300370300200e41086a201341086a2903003703002014200f4105746a280210210b201f2013411c6a28020036020020132902142126201041286a2018290300370200200520263703a801201020052903c001370200201041086a2009290300370200201041106a200d290300370200201041186a2011290300370200201041206a200e290300370200200541206a41086a201f280200360200200520052903a801370320201e202028020036020020182021290200370300200e202729020037030020112029290200370300200d202b2902003703002009201c290200370300200520052902f8013703c0010b2001417f6a2101200541f0006a41306a201e280200360200200541f0006a41286a2018290300370300200541f0006a41206a200e290300370300200541f0006a41186a2011290300370300200541f0006a41106a200d290300370300200541f0006a41086a2009290300370300201b200541206a41086a280200360200200520052903c00137037020052005290320370310201a200741086a290200370300200c200741106a2902003703002008200741186a2902003703002006200741206a2902003703002017200741286a290200370300200520072902003703380240200b0d002016210f0c020b200528020421152016210f0c000b0b2001450d0003400240024002400240200f20022f01e602490d0041002116034041002114024020022802e0022213450d00201641016a210f20022f01e4022115201321140b024041f80541c80520161b450d00200210390b024020140d00410021020c050b200f211620142102201520142f01e6024f0d000b201420154105746a21130240200f0d00201421020c020b201541027420146a41cc056a28020021020240200f417f6a2216450d00034020022802c80521022016417f6a22160d000b0b4100210f0c020b2002200f4105746a211320022114200f21150b201541016a210f0b201420154105746a2802102110201328021421070b2010450d022001417f6a210102402007450d00200741306c450d00201010390b20010d000b0b41002114034020022802e0022116024041f80541c80520141b450d00200210390b2014417f6a21142016210220160d000b0b201d2005290300370200201d41086a200541086a280200360200410021120c020b1034000b200041086a420037020041002112200041002802e8c8483602042002450d0002402001450d000340024002400240201620022f01e602490d0041002116034041002114024020022802e0022213450d00201641016a211520022f01e402210f201321140b024041f80541c80520161b450d00200210390b024020140d00410021020c040b2015211620142102200f20142f01e6024f0d000b200f41016a21162014200f4105746a2113024020150d00201421020c020b201420164102746a41c8056a280200210202402015417f6a2216450d00034020022802c80521022016417f6a22160d000b0b410021160c010b200220164105746a2113200221142016210f201641016a21160b2014200f4105746a2802102110201328021421070b2010450d022001417f6a210102402007450d00200741306c450d00201010390b20010d000b0b41002114034020022802e0022116024041f80541c80520141b450d00200210390b2014417f6a21142016210220160d000b410021120b20002012360200200541b0026a24000bd70101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffff1f712001464103742102200141067421010240024020040d00200341003602100c010b200341106a41086a410836020020032004410674360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410676360200200341206a24000f0b1034000bda0705067f027e037f037e027f230041306b22022400200141386a280200220341d8006c2104200128023022052106024002400240024002400240024003402004450d01200641306a280200220728020841016a41004c0d03200641d8006a2106200441a87f6a2104200741f4006a2d0000450d000b200641486a22042903002108200441086a290300210941101038220a450d03200a2008370300200a20093703082002410136021c2002200a3602182005200341d8006c6a21034101210503402002200536022002400340200320062204460d01200441306a280200220728020841016a41004c0d07200441d8006a2106200741f4006a2d0000450d000b200441d8006a220641486a22042903002108200441086a290300210902402005200228021c470d00200241186a200541011093072002280218210a0b200a20054104746a2204200937030820042008370300200541016a21050c010b0b200241086a41086a200241186a41086a280200360200200220022903183703080c010b2002420037020c200241002802e8c8483602080b200241186a200241086a2001290300200141086a29030010b0010240024020022802184101470d00200241186a41086a2802002106200228021c21040c010b20012802302206200128023841d8006c6a2107200228021c220a200241246a2802004104746a210b200241186a41086a280200210c200a21010240034020072006460d01200641306a2802002204280208220341016a41004c0d06200641d8006a2106200441f4006a2d0000450d002001200b460d0120030d07200141086a2903002108200129030021092004417f360208200442002004290340220d200641486a2205290300220e7d220f200f200d56200441c8006a2203290300220f200541086a22102903007d200d200e54ad7d220d200f56200d200f511b22111b37034020034200200d20111b37030020102008370300200520093703002004200428020841016a3602082004427f20092004290340220d7c22092009200d5422052008200329030022097c2005ad7c220820095420082009511b22051b3703402003427f200820051b370300200141106a21010c000b0b410021040240200c41ffffffff0071450d00200a10390b0b0240200228020c41ffffffff0071450d00200228020810390b2000200636020420002004360200200241306a24000f0b41dcdccc004118200241286a41c887c30041f0b5c300103d000b1032000b41dcdccc004118200241286a41c887c30041f0b5c300103d000b41dcdccc004118200241286a41c887c30041d887c300103d000b41f0a2ca004110200241286a41e887c30041f887c300103d000bd80101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffffff00712001464103742102200141047421010240024020040d00200341003602100c010b200341106a41086a410836020020032004410474360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410476360200200341206a24000f0b1034000b9815040f7f017e037f047e230041c0036b2203240020034200370204024002400240024002402001280208220441ffffffff03712004470d0020044102742205417f4c0d0020012802042106200128020021070240024020050d00410421010c010b200510382201450d020b410021082003410036021820032001360210200320054102762205360214024002400240200520044f0d00200341106a200410950720032802102101200328021821080c010b2004450d010b20044105742109200120084102746a210a200341d8026a41046a210b200341f0016a41c4006a21054100210c200721040340200341c0016a41186a2201200441186a220d290000370300200341c0016a41106a220e200441106a220f290000370300200341c0016a41086a2210200441086a2211290000370300200320042900003703c001200341d8026a41186a200d290000370300200341d8026a41106a200f290000370300200341d8026a41086a2011290000370300200320042900003703d8022003200341d8026a200c109607200541186a2001290300370000200541106a200e290300370000200541086a2010290300370000200520032903c001370000200341f0016a410041c40010d60b1a200b200341f0016a41e40010d40b1a41f80010382201450d03200441206a2104200141003602082001410c6a200341d8026a41e80010d40b1a2001428180808010370300200141003a0074200a2001360200200c41016a210c200a41046a210a200941606a22090d000b2008200c6a21080b200320083602180240200641ffffff3f71450d00200710390b2002280208210c2002280204210d20022802002109200341346a200341106a360200200320093602282003200d3602242003200936022020032009200c41386c22016a220536022c2003200336023020092104200c450d032000410c6a210f2003418c036a210e200341206a41106a210a20092104024003400240200441286a220c2802000d00200441386a21040c050b200341f0016a41306a200441306a290300370300200341f0016a41286a200c290300370300200341f0016a41206a200441206a290300370300200341f0016a41186a200441186a290300370300200341f0016a41106a200441106a290300370300200341f0016a41086a200441086a290300370300200320042903003703f001200341d8026a200a200341f0016a109707200328028803220c0d01200441386a2104200141486a22010d000b200521040c030b200341c0016a41086a2210200341d8026a41086a290300370300200341c0016a41106a2211200341d8026a41106a290300370300200341c0016a41186a220b200341d8026a41186a290300370300200341c0016a41206a2202200341d8026a41206a290300370300200341c0016a41286a2208200341d8026a41286a290300370300200341c8006a41086a2201200e41086a290200370300200341c8006a41106a2205200e41106a290200370300200341c8006a41186a220a200e41186a290200370300200341c8006a41206a2209200e41206a290200370300200341c8006a41286a220d200e41286a280200360200200320032903d8023703c0012003200441386a3602282003200e29020037034820034190016a41086a2204200129030037030020034190016a41106a2201200529030037030020034190016a41186a220e200a29030037030020034190016a41206a220a200929030037030020034190016a41286a2209200d280200360200200320032903483703900141e00010382205450d01200520032903c0013703002005200c3602302005200329039001370234200541286a2008290300370300200541206a2002290300370300200541186a200b290300370300200541106a2011290300370300200541086a20102903003703002005413c6a2004290300370200200541c4006a2001290300370200200541cc006a200e290300370200200541d4006a200a290300370200200541dc006a2009280200360200200342818080801037023c20032005360238200341f8006a41086a200341206a41086a2903002212370300200341f8006a41106a220a200341206a41106a2903003703002003200329032037037802402012a72204200328028401220c460d00200341d8026a41346a21094101210d03400240200441286a22012802000d002003200441386a2204360280010c020b200341f0016a41306a200441306a290300370300200341f0016a41286a2001290300370300200341f0016a41206a200441206a290300370300200341f0016a41186a200441186a290300370300200341f0016a41106a200441106a290300370300200341f0016a41086a200441086a290300370300200320042903003703f001200341d8026a200a200341f0016a109707024020032802880322010d00200c200441386a2204470d012003200c2204360280010c020b200341c0016a41086a220e200341d8026a41086a290300370300200341c0016a41106a2210200341d8026a41106a290300370300200341c0016a41186a2211200341d8026a41186a290300370300200341c0016a41206a220b200341d8026a41206a290300370300200341c0016a41286a2202200341d8026a41286a290300370300200341c8006a41086a2208200941086a290200370300200341c8006a41106a2207200941106a290200370300200341c8006a41186a2206200941186a290200370300200341c8006a41206a2213200941206a290200370300200341c8006a41286a2214200941286a280200360200200320032903d8023703c0012003200441386a360280012003200929020037034820034190016a41086a2215200829030037030020034190016a41106a2208200729030037030020034190016a41186a2207200629030037030020034190016a41206a2206201329030037030020034190016a41286a2213201428020036020020032003290348370390010240200d200328023c470d00200341386a200d109807200328023821050b2005200d41e0006c6a220420032903c00137030020022903002112200e29030021162010290300211720112903002118200b290300211920042001360230200441206a2019370300200441186a2018370300200441106a2017370300200441086a2016370300200441286a2012370300200441346a200329039001370200200441c4006a20082903003702002004413c6a2015290300370200200441cc006a2007290300370200200441d4006a2006290300370200200441dc006a20132802003602002003200d41016a220d3602402003280280012204200c470d000b0b024020032802840122052004460d000340200441386a210102402004412c6a28020041ffffff3f71450d00200441286a28020010390b2001210420052001470d000b0b0240200328027c2204450d00200441386c450d00200328027810390b200f2003290338370200200f41086a200341386a41086a2802003602000c040b1034000b1032000b200320043602280b200041106a4200370200200041002802e8c84836020c024020052004460d000340200441386a210102402004412c6a28020041ffffff3f71450d00200441286a28020010390b2001210420052001470d000b0b200d450d00200d41386c450d00200910390b20002003290310370200200041086a200341106a41086a2802003602002003109907200341c0036a24000bc90101037f230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1b220141ffffffff03712001464102742104200141027421010240024020030d00200241003602100c010b200241186a410436020020022003410274360214200220002802003602100b200220012004200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410276360200200241206a24000f0b1034000bc21a07107f017e027f017e027f017e0b7f230041e0016b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a290000370300200320012900003703200240024002400240024002400240024002400240024002400240024020002802042204450d00200028020021050c010b41940310382204450d0141002105200441003b01322004410036020020002004360204200041003602000b02400340200441346a210620042f01322207410574210841002101417f21094104210a02400340024020082001470d00200721090c020b200341206a200420016a41346a412010d70b220b450d03200941016a2109200a41046a210a200141206a2101200b417f4a0d000b0b02402005450d002005417f6a2105200420094102746a4194036a28020021040c010b0b200341086a22012003412c6a290200370300200341106a220a200341346a290200370300200341186a220b2003413c6a280200360200200320032902243703002003280220210502402007410a4b0d00200341206a41186a200b280200360200200341206a41106a200a290300370300200341206a41086a200129030037030020032003290300370320200941016a210b0240200920074f220a0d002006200b4105746a200620094105746a200720096b41057410d50b1a0b200620094105746a22012005360000200120032903203700042001410c6a200341286a290300370000200141146a200341306a2903003700002001411c6a200341386a280200360000200441046a21010240200a0d002001200b4102746a200120094102746a200720096b41027410d50b1a0b200120094102746a20023602002004200741016a3b01320c0c0b410521014100210c02400240200941054f0d00410421012009210b0c010b4105210b024002402009417b6a0e020201000b200941796a210b4101210c410621010c010b4100210b4101210c0b4194031038220a450d01200a41003b0132200a4100360200200a20042f013222072001417f736a22083b0132200620014105746a2209280000210d200341386a2009411c6a280000360200200341306a200941146a290000370300200341286a2009410c6a290000370300200320092900043703202008410c4f0d022007200141016a22096b2008470d03200441046a220720014102746a280200210e200a41346a200620094105746a200841057410d40b1a200a41046a200720094102746a200841027410d40b1a200420013b0132200341a0016a41086a200341206a41086a2207290300370300200341a0016a41106a200341206a41106a2206290300370300200341a0016a41186a200341206a41186a220f280200360200200320032903203703a001200a2004200c1b22092f01322108200f200341186a2802003602002006200341106a2903003703002007200341086a29030037030020032003290300370320200941346a21010240200b41016a220c20084b22100d002001200c4105746a2001200b4105746a2008200b6b41057410d50b1a0b2001200b4105746a22012005360000200120032903203700042001410c6a2007290300370000200141146a20062903003700002001411c6a200f280200360000200941046a2101024020100d002001200c4102746a2001200b4102746a2008200b6b41027410d50b1a0b2001200b4102746a20023602002009200841016a3b0132200341c0016a41086a2211200341a0016a41086a22122903002213370300200341c0016a41106a2214200341a0016a41106a22152903002216370300200341c0016a41186a2217200341a0016a41186a22182802002201360200200320032903a00122193703c001200341e0006a41186a220c2001360200200341e0006a41106a22102016370300200341e0006a41086a221a201337030020032019370360024002400240200428020022010d004100211b0c010b4100211b200e211c200a211d200d211e034020042f0130210420034180016a41186a221f200c28020036020020034180016a41106a2220201029030037030020034180016a41086a2221201a2903003703002003200329036037038001200122052f01322222410b490d024100210f41042101024020044105490d0020042101024002402004417b6a0e020201000b200441796a21044101210f410621010c010b410021044101210f410521010b41c4031038220a450d04200a41003b0132200a4100360200200a20052f0132220d2001417f736a220b3b0132200341206a41086a2208200541346a222320014105746a2209410c6a290000370300200341206a41106a2206200941146a290000370300200341206a41186a22022009411c6a28000036020020032009290004370320200b410c4f0d07200d200141016a22076b200b470d08200541046a222420014102746a280200210e2009280000210d200a41346a202320074105746a200b41057410d40b1a200a41046a2024200741027422076a200b41027410d40b1a200520013b0132201220082903003703002015200629030037030020182002280200360200200320032903203703a001200a2f0132220941016a210b2009410c4f0d09202220016b2201200b470d0a201b41016a211b200a4194036a200520076a4194036a200141027410d40b1a4100210102400340200a20014102746a4194036a280200220b20013b0130200b200a360200200120094f0d01200120012009496a220120094d0d000b0b201720182802003602002014201529030037030020112012290300370300200320032903a0013703c001200a2005200f1b220b2f013221012002201f28020036020020062020290300370300200820212903003703002003200329038001370320200b41346a21090240200441016a220720014b220f0d00200920074105746a200920044105746a200120046b41057410d50b1a0b200920044105746a2209201e360000200920032903203700042009410c6a2008290300370000200941146a20062903003700002009411c6a2002280200360000200b41046a21090240200f0d00200920074102746a200920044102746a200120046b41027410d50b1a0b200141016a21082009200441027422026a201c360200200b4194036a21090240200441026a220f200141026a22064f0d002009200f4102746a200920074102746a200120046b41027410d50b1a0b200920074102746a201d360200200b20083b01320240200720064f0d00200b20026a4198036a2101034020012802002209200441016a22043b01302009200b360200200141046a210120082004470d000b0b200c201728020036020020102014290300370300201a2011290300370300200320032903c00137036020052104200e211c200a211d200d211e200528020022010d000b0b200341c0006a41186a200c280200360200200341c0006a41106a2010290300370300200341c0006a41086a201a2903003703002003200329036037034020002802042209450d092000280200210b41c40310382201450d022001200936029403200141003b01322001410036020020002001360204200941003b0130200920013602002000200b41016a360200200b201b470d0a20012f0132220b410b4f0d0b2001200b41016a22043b01322001200b4105746a220941c8006a200341d0006a290300370000200941d0006a200341d8006a280200360000200941346a200d360000200941386a2003290340370000200941c0006a200341c8006a2903003700002001200b4102746a41046a200e36020020014194036a20044102746a200a3602002000200028020841016a360208200a20043b0130200a20013602000c0d0b200341206a41186a2209200341e0006a41186a280200360200200341206a41106a220a200341e0006a41106a290300370300200341206a41086a220b200341e0006a41086a29030037030020032003290360370320200541346a21010240202220044d0d00200120044105746a220841206a2008202220046b41057410d50b1a0b202241016a2108200120044105746a2201201e360000200120032903203700042001410c6a200b290300370000200141146a200a2903003700002001411c6a2009280200360000200541046a220a2004410274220b6a2109200441016a210102400240202220044b0d002009201c36020020054194036a21090c010b200a200141027422076a2009202220046b410274220a10d50b1a2009201c360200200b20054194036a22096a41086a200920076a200a10d50b1a0b20092001410274220a6a201d360200200520083b01322001202241026a220b4f0d0b200a20056a4194036a210903402009280200220a20013b0130200a2005360200200941046a2109200b200141016a2201470d000c0c0b0b2004200a6a20023602000c0b0b1032000b2008410b41a485c700104b000b41b485c700412841dc85c7001035000b200b410b41a485c700104b000b41b485c700412841dc85c7001035000b200b410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b2000200028020841016a3602080b200341e0016a24000be00909027f017e037f017e097f017e017f027e027f230041e0016b220324000240024002400240024002400240200241306a2802002204ad42d8007e2205422088a70d002005a72206417f4c0d002002412c6a280200210720022802282108200229030021090240024020060d004108210a0c010b20061038220a450d020b4100210b200341003602102003200a3602082003200641d8006e36020c2004450d06200820044105746a210c200341f8006a41046a210d2001280204210e2001280200210f4100210b200821100340200341186a41186a2211201041186a2900002205370300200341186a41106a2212201041106a2900002213370300200341186a41086a2214201041086a2900002215370300200320102900002216370318200341386a41186a2005370300200341386a41106a2013370300200341386a41086a201537030020032016370338200b41d8006c2106201041206a2110200a21040240024003402006450d01200641a87f6a2106200441346a2101200441d8006a21042001200341386a412010d70b0d000c020b0b200f200341386a10b8072206450d00200e2802082201200628020022044d0d04200e28020020044102746a28020022012802080d052001417f3602082001427f2001290330220520097c221320132005542204200141386a221729030022152004ad7c2216201554201320055a1b22041b3703302017427f201620041b370300200e2802082204200628020022064d0d06200e28020020064102746a280200221728020041016a220641014d0d0720172006360200200d410041e40010d60b1a41f80010382204450d03200441003602082004410c6a200341f8006a41e80010d40b1a2004428180808010370300200441003a0074200341d8006a41086a22182014290300370300200341d8006a41106a22142012290300370300200341d8006a41186a22122011290300370300200320032903183703580240200b200328020c470d00200341086a200b10b9072003280208210a2003280210210b0b200a200b41d8006c6a2206420037030020062017360230200641186a4200370300200641106a4200370300200641086a4200370300200641206a4200370300200641286a4200370300200620032903583702342006413c6a2018290300370200200641c4006a2014290300370200200641cc006a20122903003702002003200328021041016a220b36021020042004280200417f6a2206360200024020060d00200441046a22062006280200417f6a220636020020060d00200410390b2001200128020841016a3602080b2010200c470d000c070b0b1034000b1032000b2004200141c0b5c300103c000b41f0a2ca004110200341f8006a41e887c30041d0b5c300103d000b2006200441e0b5c300103c000b00000b0240200741ffffff3f71450d00200810390b02400240200b450d002000420137032020004200370310200042003703082000200937030020002003290308370230200041286a4200370300200041186a42003703002000413c6a200241086a2206290200370200200041d4006a200641186a290200370200200041cc006a200641106a290200370200200041c4006a200641086a290200370200200041386a200341086a41086a2802003602000c010b20004100360230200328020c2206450d00200641d8006c450d00200328020810390b200341e0016a24000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42e0007e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141e0006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141e0006e360200200241206a24000f0b1034000bc00201067f200028020421012000410036020402402001450d00024020002802002202450d00034020012802940321012002417f6a22020d000b0b024020002802082203450d004100210403402003417f6a2103024002400240200420012f0132490d0041002100034041002102024020012802002205450d00200041016a210620012f01302104200521020b024041c40341940320001b450d00200110390b024020020d00410021010c040b2006210020022101200420022f01324f0d000b20060d01200221010b200441016a21040c010b200441027420026a4198036a280200210102402006417f6a2202450d00034020012802940321012002417f6a22020d000b0b410021040b20030d000b0b41002102034020012802002100024041c40341940320021b450d00200110390b2002417f6a21022000210120000d000b0b0b971c090b7f027e037f017e027f017e017f047e057f230041f0006b220424000240024002400240024002400240200241086a2802002205200120052001491b22060d0020032802082107200328020021080c010b200541027421092002280200210a4100210b034002402005410274220c450d002009210d200a210e02400340200e28020022012802080d012001417f3602080240200141f4006a2d00000d0002402001290330220f200141386a2903002210844200520d00200142013703202001427f370310200141286a4200370300200141186a427f3703000c010b200441086a427f427f200f201010da0b2001427f370320200141286a427f370300200141186a200441086a41086a290300370300200120042903083703100b200e41046a210e20014100360208200d417c6a220d0d000c020b0b41f0a2ca004110200441186a41e887c30041f088c300103d000b200328020022082003280208220741e0006c6a211102402007450d00200821120340024020122802382201450d00200141d8006c2113201228023041306a210e02400340200e28020022012802080d01417f210d2001417f3602080240200141f4006a2d00000d002001290330220f200141386a290300221084500d00200441186a2012290310201241186a2903002012290300201241086a290300200f201010a80120012001290310220f427f200f427f20042903202004280218410146220d1b22147c22102010200f542215200141186a2216290300220f427f200441186a41106a290300200d1b22177c2015ad7c2210200f542010200f511b220d1b20142017845022151b3703102016200f427f2010200d1b20151b3703002001280208210d0b2001200d41016a360208200e41d8006a210e201341a87f6a2213450d020c000b0b41f0a2ca004110200441186a41e887c300418089c300103d000b201241e0006a22122011470d000b0b200b41016a2118200a200c6a21122009210e200a21010340200e450d022001280200220d28020841016a41004c0d07200141046a2101200e417c6a210e200d41f4006a2d00000d000b2001417c6a210c0240200e450d00200d41186a2903002119200d41286a2903002114200d290310211a200d290320211703402001280200220e280208220d41016a41004c0d070240200e41f4006a2d00000d00200e200d360208200e41186a290300210f200e29031021100240024002402017200e290320221b852014200e41286a290300221c85844200520d00201a2010542019200f542019200f511b0d03201a2010852019200f858442005221160c010b2017201484500d01201b201c84500d0241101038220e450d09200e201a3e020c200e201a4220883e0208200e20193e0204200e20194220883e020020044284808080c0003702542004200e360250200441d0006a10a90141101038220e450d09200e201b3e020c200e201b4220883e0208200e201c3e0204200e201c4220883e020020044284808080c0003702642004200e360260200441e0006a10a901200441186a41086a220d200441d0006a41086a221328020036020020042004290350370318200441306a200441186a200441e0006a10aa010240200428026441ffffffff0371450d00200428026010390b41101038220e450d09200e20103e020c200e20104220883e0208200e200f3e0204200e200f4220883e020020044284808080c0003702542004200e360250200441d0006a10a90141101038220e450d09200e20173e020c200e20174220883e0208200e20143e0204200e20144220883e020020044284808080c0003702642004200e360260200441e0006a10a901200d201328020036020020042004290350370318200441c0006a200441186a200441e0006a10aa010240200428026441ffffffff0371450d00200428026010390b2004280230211d024002402004280238221e0d00410121154100210d0c010b201e4102742213417c6a41027641016a21164100210d201d210e03400240200e280200450d00410021150c020b200e41046a210e41012115200d41016a210d2013417c6a22130d000b2016210d0b2004280240211f024002400240024020042802482220450d00201f20204102746a211641002113201f210e0340200e2802000d02201341016a2113200e41046a220e2016470d000b0b41012121410021162015450d010c020b41ff01211620150d01201e200d490d0a41ff012121201e200d6b2215202020136b2213490d00024020132015470d00201541016a2113201d200d4102746a211e4100210d034002402013417f6a22130d00410021210c030b201e200d6a2802002215200e200d6a2802002216490d02200d41046a210d20152016460d000b0b410121210b202121160b0240200428024441ffffffff0371450d00201f10390b200428023441ffffffff0371450d00201d10390b20164101470d010b2010211a200f2119201b2117201c21142001210c0b200141046a22012012470d000b0b200c450d01200c280200220e2802080d02417f2101200e417f360208200e200b360250200e41f4006a41013a000002402007450d00200e41106a41c4006a21122008211d0340201d221341e0006a211d02402013280238220d450d0020132802302101200d41d8006c210d03400240200141346a2012412010d70b0d00201341186a22152903002117200e41186a2216290300210f20132903102114200e2903102110200e2903202119200141186a200e41286a220c290300370300200141106a20193703002001200f4200200f20177d2010201454ad7d2219201020147d221b2010562019200f562019200f511b220b1b201420178450221f1b370308200120104200201b200b1b201f1b3703002016290300210f200c2903002110200e29031021142013200e290320370320201341286a2010370300201320143703102015200f3703000b200141d8006a2101200d41a87f6a220d0d000b0b201d2011470d000b200e28020821010b200e200141016a3602082018210b20182006470d000b0b2008200741e0006c6a2111200441286a211620082101024003400240024002402001220d2011460d00200d41386a220c28020022010d0141002112410021150c020b200441186a41086a2201200241086a280200360200200441186a41146a200341086a2802003602002000410036020020002002290200370204200420032902003702242000410c6a2001290300370200200041146a200441286a2903003702000c030b200d280230210e200141d8006c2113024003400240200e41306a2212280200220128020841016a41004a0d0041dcdccc004118200441186a41c887c30041a089c300103d000b02400240200141f4006a2d0000450d00200441186a200d290300200d41086a290300200e290300200e41086a290300200d290310200d41186a29030010a8012004290320210f200e41286a427f2016290300200428021841014622011b370300200e41206a427f200f20011b370300201228020021010c010b200e41286a4200370300200e41206a42003703000b024020012802080d002001417f360208200e41206a290300210f200e41286a2903002110200141003602082001427f200f200129034022147c220f200f20145422122010200141c8006a2215290300220f7c2012ad7c2210200f542010200f511b22121b3703402015427f201020121b370300200e41d8006a210e201341a87f6a2213450d020c010b0b41f0a2ca004110200441186a41e887c30041b089c300103d000b0240200c28020022120d00410021150c010b200d280230220b41206a211d4100211f410021154100210e02400340024002402015450d00200b200e41d8006c6a2101200b200e201f6a41d8006c6a21130340200141206a290300200141286a290300844200510d022013200141d80010d40b2113200141d8006a2101201341d8006a21132012200e41016a220e4b0d000c040b0b201d200e41d8006c6a210103402001290300200141086a29030084500d01200141d8006a21012012200e41016a220e4b0d000b410021150c030b200b200e41d8006c6a28023022012001280200417f6a2213360200200e41016a210e024020130d00200141046a22132013280200417f6a221336020020130d00200110390b201541016a2115201f417f6a211f2012200e4b0d000b0b024020150d00410021150c010b200b200e20156b41d8006c6a200b200e41d8006c6a2012200e6b41d8006c10d50b1a0b200d41e0006a2101200c201220156b3602002004200d1092072004280200220e450d000b200428020421012000428180808030370200200041086a2001ad422086200ead8437020002402007450d002008200741e0006c6a211520082101034002402001221241386a2802002201450d00200141d8006c210d201228023041306a210103402001280200220e200e280200417f6a2213360200024020130d00200e41046a22132013280200417f6a221336020020130d00200e10390b200141d8006a2101200d41a87f6a220d0d000b0b201241e0006a21010240201241346a280200220e450d00200e41d8006c450d00201228023010390b20012015470d000b0b0240200341046a2802002201450d00200141e0006c450d00200810390b2002280200211202402005450d002005410274210d2012210103402001280200220e200e280200417f6a2213360200024020130d00200e41046a22132013280200417f6a221336020020130d00200e10390b200141046a2101200d417c6a220d0d000b0b200241046a28020041ffffffff0371450d00201210390b200441f0006a24000f0b41f0a2ca004110200441186a41e887c300419089c300103d000b200d201e418ccbc0001054000b1032000b41dcdccc004118200441186a41f897c70041b499c700103d000b41dcdccc004118200441186a41c887c30041b499c700103d000be60301067f230041d0006b22022400200241086a41ecc0cc00410510cb01200241186a41e89ec300411410cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bb80401027f230041a0016b22022400200241286a2001108404200241d8006a200228022822032002280230108504024020022d005822014101470d00200241206a200241f1006a290000370300200241186a200241e9006a290000370300200241106a200241e1006a290000370300200220022900593703080b0240200228022c450d00200310390b0240024020014101460d00200041003602000c010b200241286a41186a200241086a41186a290300370300200241286a41106a200241086a41106a290300370300200241286a41086a200241086a41086a29030037030020022002290308370328200241d8006a200241286a109d06200241c8006a200228025822032002280260109d070240024020022802482201450d002000200229024c3702040c010b410021010b200020013602000240200228025c450d00200310390b20010d0041002802d0a94e450d002002412536024c2002200241286a36024841002802cca94e210041002802c8a94e210141002802d4a94e2103200241e8006a42013703002002418c016a41caeac200ad4280808080900584370200200241f8006a4201370300200241e0006a4122360200200241a8eac20036025c20024180016a41a8eac200ad4280808080a00484370300200241f4006a200241c8006a360200200241c089c30036026420024281808080e03837029401200241003602880120024101360258200141b8c0cd00200341024622031b200241d8006a200041c0a4c00020031b2802101103000b200241a0016a24000bfc0202037f017e230041e0006b220324002003200236020c20032001360208200341106a2001200210e4010240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10c1010240024020032802000d00200328022420032802042204490d002004417f4c0d030240024020040d00410121050c010b200410382205450d0520054100200410d60b1a0b200020052003280220200410d40b36020020002004ad22064220862006843702040c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602000b2002450d00200110390b200341e0006a24000f0b1034000b1032000b130020004105360204200041888ac3003602000b3400200041ecc0cc0036020420004100360200200041146a410d360200200041106a41e490c300360200200041086a42053702000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010a7020b860101037f230041206b2202240020004201370200200041086a22034100360200200241003602142002420037020c200241002802d8974e360208200241086a200010a2070240200041046a28020020032802002204470d002000200441011077200328020021040b2003200441016a360200200028020020046a41003a0000200241206a24000bd80101087f2000280200210220012000280208220010ac0202402000450d00200220004103746a2103200141086a22042802002100200141046a210503402002280200210602402005280200220720006b41034b0d00200120004104107720052802002107200428020021000b2001280200220820006a20063600002004200041046a2206360200200241046a28020021090240200720066b41034b0d00200120064104107720042802002106200128020021080b2004200641046a2200360200200820066a2009360000200241086a22022003470d000b0b0b2e01017f230041106b2202240020024200370204200241002802d8974e36020020002002108c06200241106a24000bda0601087f23004180026b22032400200341306a22044200370300200341286a22054200370300200341186a41086a2206420037030020034200370318200341386a41c7e5c000410610cb012006200341386a41086a220729000037030020032003290038370318200341386a419081c400410610cb012004200729000037030020052003290038370300200341106a200341186a412010ce0320044200370300200542003703002006420037030020034200370318200341386a41f1d5c400410d10cb012006200729000037030020032003290038370318200341386a418bd6c400410c10cb012004200729000037030020052003290038370300200341386a200341186a412010c703200341386a200110a406200341086a20032802382204200328024010ce030240200328023c450d00200410390b200341186a2001109e06200341386a200328021822062003280220109f0602400240200328024422074102470d0041d897ce0021054100210441002108410021070c010b200328023c41ffffffff0171210820032802402104200341386a21050b200328024821092005280200210a0240200328021c450d00200610390b024002400240024002402004450d00200441037441786a41037641016a210641002105200a21040340200428020020024f0d02200441086a21042006200541016a2205470d000b0b20074101470d0120092002490d010c020b024020050d002007450d00200920024f0d020b200341186a2001200428020010a106200341386a20032802182205200328022010850441002104024020032d00384101470d0020002003290039370001200041196a200341386a41196a290000370000200041116a200341386a41116a290000370000200041096a200341386a41096a290000370000410121040b200020043a0000200328021c450d02200510390c020b200341186a2001108404200341386a20032802182205200328022010850441002104024020032d00384101470d0020002003290039370001200041196a200341386a41196a290000370000200041116a200341386a41116a290000370000200041096a200341386a41096a290000370000410121040b200020043a0000200328021c450d01200510390c010b200041003a00000b02402008450d00200a10390b20034180026a24000be80101037f230041206b22012400200141106a2000109c06200141086a20012802102202200128021810ce03200128020c410020012802081b210302402001280214450d00200210390b02400240200341014b0d00200141106a2000109d0620012802102203200128021810e00102402001280214450d00200310390b200141106a2000109c0620012802102200200128021810e0012001280214450d01200010390c010b200141106a2000109c06200128021821022001280210210020012003417f6a36021c200020022001411c6a410410e9012001280214450d00200010390b200141206a24000b3400200041d8adc30036020420004100360200200041146a4103360200200041106a41e4adc300360200200041086a420b3702000b2e01017f230041106b220224002002420037020420024100280284ee4d3602002000200210a807200241106a24000bfa0101057f02400240200128020822024105744104722203417f4c0d0020012802002101200310382204450d0120002004360200200041086a22054100360200200041046a220620033602002000200210ac0202402002450d002002410574210420052802002103034002400240200628020020036b411f4d0d00200321020c010b2000200341201077200528020021020b2005200241206a2203360200200028020020026a22022001290000370000200241086a200141086a290000370000200241106a200141106a290000370000200241186a200141186a290000370000200141206a2101200441606a22040d000b0b0f0b1034000b1032000b9b0302047f017e23004180016b22012400200141206a4200370300200141186a22024200370300200141086a41086a420037030020014200370308200141086a41d8adc300410b10cb01200241fcb0c300411310cb012001412036022c2001200141086a360228200141306a200141086a412010e40102400240200128023022030d00410021020c010b200128023421042001200141306a41086a28020036024420012003360240200141e8006a200141c0006a10aa070240024020012802682202450d00200129026c21050c010b2001420037024c4100210220014100280284ee4d3602482001410d36025c2001200141286a3602582001200141c8006a360264200141fc006a41013602002001420137026c200141949fc5003602682001200141d8006a360278200141e4006a41b4dfc400200141e8006a103b1a2001280248200128025010d1010240200128024c450d00200128024810390b0b2004450d00200310390b0240024020020d002000420037020420004100280284ee4d3602000c010b20002005370204200020023602000b20014180016a24000bb80301097f230041e0006b220224002002200110c10102400240024002402002280200450d00200041003602000c010b2002280204220320012802044105762204200420034b1b22054105742204417f4c0d010240024020050d00410121060c010b200410382206450d030b41002104200241003602102002200536020c20022006360208024002402003450d00200241386a41017221050340200241386a200110860220022d00384101460d02200241186a41186a2207200541186a290000370300200241186a41106a2208200541106a290000370300200241186a41086a2209200541086a2900003703002002200529000037031802402004200228020c470d00200241086a20044101109e0220022802082106200228021021040b200620044105746a220a2002290318370000200a41186a2007290300370000200a41106a2008290300370000200a41086a20092903003700002002200441016a22043602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b20004100360200200228020c41ffffff3f71450d00200610390b200241e0006a24000f0b1034000b1032000ba1860104147f057e107f037e23004180046b22012400200141c8006a4100200210ac07200128024c200141c8006a41086a22032802002204200128024841014622021b21052004200141c8006a410c6a220628020020021b2107200141c8006a41106a2204280200210802400240024002400240024002400240024002400240024002400240024020020d00200141c8006a4100200210ad07200128024c20032802002203200128024841014622021b21092003200628020020021b210a2004280200210b20020d01200141d0026a41f0c8c800410710cb01200141d0026a41186a220c4200370200200142003702e002200141d0026a41106a220d41c0e0c900410e10cb01200141306a200141d0026a412010ce032001280234210e2001280230210f2001420037023c02400240024002400240024002400240024002402008450d002005200841386c6a2110200141d0026a41086a2111200141c8006a41086a211241002113200521140340200141a8026a41186a201441206a2900002215370300200141a8026a41106a201441186a2900002216370300200141a8026a41086a201441106a29000022173703002001201429000822183703a80220142903002119200141c8006a41186a2015370300200141c8006a41106a221a20163703002012201737030020012018370348024002402013450d002001280238211b0c010b41c00310382213450d114100211b201341003b015e201341003602582001201336023c200141003602380b201441386a2114024002400340201341e0006a211c20132f015e221d410574211e41002103417f210441002102024003400240201e2002470d00201d21040c020b200141c8006a201320026a41e0006a412010d70b2206450d03200441016a2104200341086a2103200241206a21022006417f4a0d000b0b0240201b450d00201b417f6a211b201320044102746a41c0036a28020021130c010b0b200141c0036a41086a221e201241086a290200370300200141c0036a41106a221b201241106a290200370300200120122902003703c003200128024c211f200128024821200240024002400240024002400240201d410a4b0d00201a201b2903003703002012201e290300370300200120012903c0033703482004201d4f0d01201c200441016a22034105746a201c20044105746a2202201d20046b220641057410d50b1a2002201f3600042002202036000020022001290348370008200241106a2012290300370000200241186a201a290300370000201320034103746a201320044103746a200641037410d50b1a0c020b410021214104210202400240200441054f0d00200421030c010b4105210241052103024002402004417b6a0e020201000b200441796a210341012121410621020c010b41002103410121210b41c0031038221d450d18201d41003b015e201d4100360258201d20132f015e22222002417f736a22063b015e201c20024105746a2204280004212320042800002124201a200441186a2900003703002012200441106a290000370300200120042900083703482006410c4f0d122022200241016a22046b2006470d11201320024103746a2903002115201d41e0006a201c20044105746a200641057410d40b1a201d201320044103746a200641037410d40b211c201320023b015e20112012290300370300200d201a290300370300200120012903483703d002201c201320211b22022f015e2104201a201b2903003703002012201e290300370300200120012903c003370348200241e0006a210602400240200341016a221e20044b0d002006201e4105746a200620034105746a2206200420036b221b41057410d50b1a2006201f3600042006202036000020062001290348370008200641106a2012290300370000200641186a201a2903003700002002201e4103746a200220034103746a201b41037410d50b1a0c010b200620034105746a2206201f3600042006202036000020062001290348370008200641106a2012290300370000200641186a201a2903003700000b200220034103746a20193703002002200441016a3b015e20014180026a41086a2011290300221637030020014180026a41106a200d2903002217370300200120012903d002221837038002200141e0036a41106a221f2017370300200141e0036a41086a22202016370300200120183703e003201328025822020d02410021210c030b201c20044105746a2202201f3600042002202036000020022001290348370008200241106a2012290300370000200241186a201a2903003700000b201320044103746a20193703002013201d41016a3b015e0c030b4100212120152116201c21222023212520242126034020132f015c21132002221b2f015e221c410b490d024100211e41042102024020134105490d0020132102024002402013417b6a0e020201000b201341796a21134101211e410621020c010b410021134101211e410521020b41f0031038221d450d16201d41003b015e201d4100360258201d201b2f015e22232002417f736a22043b015e2012201b41e0006a222720024105746a220341106a290000370300201a200341186a290000370300200120032900083703482004410c4f0d0e2023200241016a22066b2004470d0d2003280004212320032800002124201b20024103746a2903002115201d41e0006a202720064105746a200441057410d40b1a201d201b20064103746a200441037410d40b2103201b20023b015e20112012290300370300200d201a290300370300200120012903483703d00220032f015e220441016a21272004410c4f0d0c201c20026b22022027470d0b202141016a2121200341c0036a201b20064102746a41c0036a200241027410d40b1a4100210202400340200320024102746a41c0036a280200220620023b015c20062003360258200220044f0d01200220022004496a220220044d0d000b0b201a200d29030037030020122011290300370300200120012903d0023703482003201b201e1b22062f015e2102201120012903e003370200201141086a2020290300370200201141106a201f290300370200200120253602d402200120263602d002200641e0006a211e02400240201341016a220420024b0d00201e20044105746a201e20134105746a221e200220136b221c41057410d50b1a201e41186a200c290200370000201e41106a200d290200370000201e41086a2011290200370000201e20012902d002370000200620044103746a200620134103746a201c41037410d50b1a0c010b201e20134105746a221e20012902d002370000201e41186a200c290200370000201e41106a200d290200370000201e41086a20112902003700000b200241016a211e200620134103746a2016370300200641c0036a211c0240201341026a2226200241026a22254f0d00201c20264102746a201c20044102746a200220136b41027410d50b1a0b201c20044102746a20223602002006201e3b015e0240200420254f0d00200620134102746a41c4036a2102034020022802002204201341016a22133b015c20042006360258200241046a2102201e2013470d000b0b201f201a29030037030020202012290300370300200120012903483703e00320152116201b2113200321222023212520242126201b28025822020d000b0b201a201f29030037030020122020290300370300200120012903e003370348200128023c2204450d082001280238210341f00310382202450d14200220043602c003200241003b015e20024100360258200441003b015c200420023602582001200236023c2001200341016a36023820032021470d0720022f015e2204410b4f0d062002200441016a22033b015e200220044103746a2015370300200220044105746a220441f0006a2012290300370000200441f8006a201a290300370000200441e4006a2023360000200441e0006a2024360000200441e8006a2001290348370000200241c0036a20034102746a201d360200201d20033b015c201d20023602580c010b201120012903e003370200201141086a2020290300370200201141106a201f290300370200200120253602d402200120263602d002201b41e0006a2104201c41016a210302400240201c20134b0d00200420134105746a220220012902d002370000200241186a200c290200370000200241106a200d290200370000200241086a2011290200370000201b20134103746a2016370300201b41c0036a2104201c41026a2106201341016a21020c010b2004201341016a22024105746a200420134105746a2204201c20136b220641057410d50b1a200441186a200c290200370000200441106a200d290200370000200441086a2011290200370000200420012902d002370000201b20024103746a201b20134103746a2204200641037410d50b1a200420163703002013410274201b41c0036a22046a41086a200420024102746a200641027410d50b1a201c41026a21060b2004200241027422136a2022360200201b20033b015e200220064f0d00201b20136a41c0036a210403402004280200220320023b015c2003201b360258200441046a21042006200241016a2202470d000b0b2001200128024041016a3602400c010b201320036a20193703000b20142010460d01200128023c21130c000b0b2001200b3602b0022001200a3602ac02200120093602a802200120083602d802200120073602d402200120053602d002200141c8006a200141a8026a200141d0026a109407200141b0036a41086a200141c8006a41086a220228020022043602002001200129034822153703b00320014190036a41086a200141dc006a2206280200220336020020012001290254221637039003200141a8026a41086a2004360200200120153703a802200141d0026a41086a2003360200200120163703d002200141c8006a200e4100200f1b2213200141a8026a200141d0026a109a0720022903002115200128024c2122024020012802484101470d00202221020c160b200141c8006a41106a280200212520062802002108200141c8006a41186a28020021272015422088a72114024002400240024020130d0020222102202221030c010b20222102202221032014450d002014410274210620222104202221030240034020042802002202450d01200228020841016a41004c0d0402400240200241f4006a2d00000d0020022002280200417f6a221e360200201e0d01200241046a221e201e280200417f6a221e360200201e0d01200210390c010b20032002360200200341046a21032013417f6a2213450d020b200441046a21042006417c6a22060d000b200320226b222841027521260c020b200441046a21020b200320226b22284102752126202220144102746a22062002460d000340200228020022042004280200417f6a2203360200200241046a2102024020030d00200441046a22032003280200417f6a220336020020030d00200410390b20062002470d000b0b0240202641144b0d00202641014d0d0f202641027420226a41786a21024101210403402002200441016a220410ae072002417c6a210220262004470d000c100b0b2026410176220241ffffffff03712002470d1020024102742205417f4c0d1020051038221f450d0f2001420037024c200141002802d8974e3602482022417c6a2120202241746a2121410021022026211003400240024020102214417f6a22100d0041002110410121060c010b024002400240024002400240024002400240024002400240202220104102746a280200220428020841016a41004c0d0020222014417e6a221e4102746a280200220328020841016a41004c0d0120042802502003280250490d04202120144102746a2104410021104100210303400240201e2003470d00201421060c0e0b200441046a280200220628020841016a41004c0d032004280200221328020841016a41004c0d042004417c6a2104200341016a2103200628025020132802504f0d000b200341016a21062003417f7320146a21100c050b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b20212014410274221e6a210402400340024020104101470d00410021100c020b200441046a280200220328020841016a41004c0d032004280200220628020841016a41004c0d042004417c6a21042010417f6a211020032802502006280250490d000b0b20142010490d03201420264b0d04201420106b22064101762213450d00202220104102746a21042020201e6a210303402004280200211e200420032802003602002003201e360200200441046a21042003417c6a21032013417f6a22130d000b0b2010450d06200641094b0d06201420264b0d04201420106b21062010417f6a2102202020104102746a2104034020142002490d152004200641016a220610ae072002417f6a220320024f0d062004417c6a2104200321022006410a490d000c060b0b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b2010201441c4bac3001055000b2014202641c4bac300104b000b20142010417f6a2202490d0f2014202641d4bac300104b000b200341016a2110200128025021020b024002402002200128024c460d00200128025021030c010b200141c8006a200210b1012001280250220321020b2001280248220420024103746a22022006360204200220103602002001200341016a2202360250024020024102490d0002400340024002400240024020042002417f6a4103746a2203280200450d00200241037420046a221e41746a2802002213200328020422064d0d00200241024d0d0620042002417d6a221c4103746a2802042203200620136a4d0d01200241034d0d06201e41646a280200200320136a4b0d060c010b20024103490d012003280204210620042002417d6a221c4103746a28020421030b20032006490d010b2002417e6a211c0b02400240024002402002201c41016a22114d0d0002402002201c4d0d0002402004201c410374220d6a2202280204222320022802006a22032004201141037422246a2202280200221a490d000240200320264b0d002022201a4102746a22062002280204221241027422046a21022003410274211e02402003201a6b221420126b22132012490d00201f2006200410d40b221320046a21030240201241014e0d00201321040c080b201420124a0d05201321040c070b201f20022013410274220410d40b221d20046a210320124101480d0520134101480d052020201e6a210403400240024002402003417c6a2213280200221428020841016a41004c0d002002417c6a221e280200221b28020841016a41004c0d012004201e20132014280250201b2802504922141b2802003602002003201320141b21032006201e200220141b2202490d020c090b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b2004417c6a21042003201d4b0d000c060b0b200320264184bbc300104b000b201a20034184bbc3001055000b201c200241f4bac300103c000b2011200241e4bac300103c000b2022201e6a2114201321040240024003402002280200221328020841016a41004c0d012004280200221e28020841016a41004c0d022006200220042013280250201e2802504922131b2802003602002004200441046a20131b2104200641046a2106200241046a200220131b220220144f0d0420042003490d000c040b0b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b41dcdccc00411820014180026a41b4bbc30041c4bbc300103d000b201d2104200221060b20062004200320046b417c7110d40b1a024020012802502202201c4d0d0020012802482204200d6a2203202320126a3602042003201a360200200220114d0d02200420246a2203200341086a2002201c6b41037441706a10d50b1a20012002417f6a2202360250200241014d0d030c010b0b201c20024194bbc300103c000b201120021044000b2010450d0e0c000b0b41dcdccc00411820014180026a41ac8dc70041bc8dc700103d000b41a583c700412041e084c7001035000b41a084c700413041d084c7001035000b41a5cbc800412b4180b6c3001035000b41b485c700412841dc85c7001035000b2027410c41b486c700104b000b41b485c700412841dc85c7001035000b2004410b41a485c700104b000b41b485c700412841dc85c7001035000b2006410b41a485c700104b000b2000428180808010370300200041106a20083602002000410c6a2007360200200041086a20053602000c0d0b2000428180808010370300200041106a200b3602002000410c6a200a360200200041086a200936020002402008450d00200841386c21042005412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010390b200241386a2102200441486a22040d000b0b2007450d0c200741386c450d0c200510390c0c0b2002201441d4bac3001055000b0240200128024c41ffffffff0171450d00200410390b2005450d00201f10390b2025202741e0006c22046a211e202521020240024002402027450d00200141d0026a410472210620252102024002400340200241306a280200450d02200141c8006a200241e00010d40b1a200141d0026a200141c8006a10af0720012802d00222030d01200241e0006a2102200441a07f6a22040d000b41002802d8974e210a0c030b20014180026a41206a200641206a2902002216370300200141a8026a41086a2213200641086a290200370300200141a8026a41106a2214200641106a290200370300200141a8026a41186a221b200641186a290200370300200141a8026a41206a221d2016370300200120062902003703a802412c10382206450d0420062003360200200620012903a8023702042006410c6a2013290300370200200641146a20142903003702002006411c6a201b290300370200200641246a201d29030037020020014281808080103702e403200120063602e00302400240200441e000470d004101210b0c010b200241e0006a2102200141d0026a4104722113201e41a07f6a211b4101210b03402002210402400340200441e0006a2102200441306a280200450d01200141c8006a200441e00010d40b1a200141d0026a200141c8006a10af07024020012802d00222030d0020022104201e2002470d010c040b0b20014180026a41206a201341206a2902002216370300200141a8026a41086a221d201341086a290200370300200141a8026a41106a221c201341106a290200370300200141a8026a41186a2212201341186a290200370300200141a8026a41206a221a2016370300200120132902003703a8020240200b20012802e403470d00200141e0036a200b10c50220012802e00321060b200441e0006a21022006200b412c6c6a22142003360200201420012903a8023702042014410c6a201d290300370200201441146a201c2903003702002014411c6a2012290300370200201441246a201a2903003702002001200b41016a220b3602e803201b2004470d010c020b0b201e2002460d00034002402002221341386a2802002202450d00200241d8006c2103201328023041306a21020340200228020022042004280200417f6a2206360200024020060d00200441046a22062006280200417f6a220636020020060d00200410390b200241d8006a2102200341a87f6a22030d000b0b201341e0006a21020240201341346a2802002204450d00200441d8006c450d00201328023010390b2002201e470d000b0b02402008450d00200841e0006c450d00202510390b20012802e403210f20012802e003210941002802d8974e210a0c030b200241e0006a21020b41002802d8974e210a201e2002460d00034002402002221341386a2802002202450d00200241d8006c2103201328023041306a21020340200228020022042004280200417f6a2206360200024020060d00200441046a22062006280200417f6a220636020020060d00200410390b200241d8006a2102200341a87f6a22030d000b0b201341e0006a21020240201341346a2802002204450d00200441d8006c450d00201328023010390b2002201e470d000b0b4100210b02402008450d00200841e0006c450d00202510390b4100210f200a21090b2015a721292009200b412c6c6a210541002802e8c848210c2009210202400340200222272005460d012027280208220441ffffffff03712004470d0320272802002113024002402004410274221e0d00410421020c010b201e10382202450d030b2013200441246c22066a211441002103200141003602c803200120023602c0032001201e410276221e3602c4030240201e20044f0d00200141c0036a4100200410ab0120012802c003210220012802c80321030b024020132014460d00201341206a2104200220034102746a2102034020022004280200360200200441246a2104200341016a2103200241046a21022006415c6a22060d000b20012802c00321020b200120033602c803200341ffffffff01712003470d0320034103742206417f4c0d030240024020060d00410821040c010b200610382204450d030b200141003602e803200120043602e0032001200641037622063602e403024002400240200620034f0d00200141e0036a200310b00720012802e803211a20012802e00321040c010b4100211a2003450d010b200341027421032004201a4103746a2104034020042002350200370300201a41016a211a200441086a2104200241046a21022003417c6a22030d000b20012802e00321040b2001201a3602e803024002400240024002400240201a450d002004201a41037422036a211e42002115200421020340201520022903007c22162015540d02200241086a210220162115200341786a22030d000b0240428094ebdc0320162016428094ebdc035422021b2016428094ebdc0320021b7d222a50450d00201a41ffffffff0171201a470d0a201a4103742202417f4c0d0a20021038221e450d092001201e2004200210d40b3602d402200241037621140c050b202a201aad222b822119202a202b80212c201a41ffffffff0071201a470d09201a4104742206417f4c0d09200610382202450d084100210320014100360288022001200236028002200120064104762206360284024100211402402006201a4f0d0020014180026a201a10b201200128028802211420012802800221020b200220144104746a21024100201a41037441786a410376221b6b210620142123034020022004290300370308200220033602002006221341016a2106200341016a2103202341016a2123200241106a2102200441086a2204201e470d000b20012023360288022001280280022124024002400240202341144b0d00202341014d0d0620242014201b6a22034104746a211b2003417f6a211d034020032202417f6a2103201d20234b0d030240202320036b22144102490d00202420024104746a220241086a2206290300202420034104746a220441086a221e29030022155a0d002004280200211c20042002290300370300201e2006290300370300024020144103490d0041002106201b21020340200241186a221e29030020155a0d01200641016a220420144f0d05200241086a201e2903003703002002200241106a221e290300370300201e21022004210620132004470d000b201e21020b200220153703082002201c3602000b201341016a2113201b41706a211b20030d000c070b0b2023410176220241ffffffff00712002470d0b2002410474220e417f4c0d0b200e10382225450d0a2001420037024c2001200a360248202441706a2108202441586a210741002102200a2103202321140340024002402014417f6a22040d004101211b410021100c010b0240024002400240024002400240202420044104746a41086a2903002014410474221d20246a41686a2903002215540d002014417e6a211e2007201d6a2106410021104100210403400240201e2004470d002014211b0c090b200441016a21042015200629030022175a2113200641706a21062017211520130d000b200441016a211b2004417f7320146a21040c010b2007201d6a210602400340024020044101470d00410021040c020b2004417f6a2104201520062903002217542113200641706a21062017211520130d000b0b20142004490d01201420234b0d02201420046b221b410176221e450d00202420044104746a21062008201d6a21130340201341086a221d29030021152006290300211720062013290300370300200641086a221c2903002118201c2015370300201d201837030020132017370300200641106a2106201341706a2113201e417f6a221e0d000b0b024020040d00200421100c060b0240201b41094d0d00200421100c060b201420234b0d03200420146b2113202420044104746a211d034020142004417f6a2210490d050240201420106b221b4102490d00202420044104746a220441086a221e290300202420104104746a220641086a221c29030022155a0d002006280200211220062004290300370300201c201e2903003703000240201b4103490d0041012106201d21040340200441186a221e29030020155a0d01201320066a4101460d06200441086a201e2903003703002004200441106a221e290300370300201e21042013200641016a22066a0d000b201e21040b20042015370308200420123602000b2010450d06201d41706a211d2013417f6a211320102104201b410a4f0d060c000b0b2004201441c4bac3001055000b2014202341c4bac300104b000b2006201b41a4bbc300103c000b20142004417f6a2210490d002014202341d4bac300104b000b2010201441d4bac3001055000b024002402002200128024c460d00200221040c010b0240200220012802502204470d00200141c8006a200210b101200128025021040b200128024821030b200320044103746a2202201b360204200220103602002001200128025041016a2202360250024020024102490d0020012802482103024003400240024002400240024020032002417f6a4103746a2204280200450d00200241037420036a221e41746a2802002213200428020422064b0d010b20024103490d022004280204210620032002417d6a221c4103746a28020421040c010b200241024d0d0520032002417d6a221c4103746a2802042204200620136a4d0d00200241034d0d05201e41646a280200200420136a4b0d050b20042006490d010b2002417e6a211c0b02400240024002402002201c41016a220d4d0d0002402002201c4d0d0002402003201c410374221f6a2202280204222020022802006a22042003200d41037422216a22022802002211490d000240200420234b0d00202420114104746a22062002280204221241047422036a2102200441047421130240200420116b221e20126b22042012490d0020252006200310d40b220420036a21030240201241014e0d00200421040c080b201e20124a0d05200421040c070b202520022004410474220310d40b221d20036a210320124101480d0520044101480d05200820136a210403402004200241706a221e200341706a2214200341786a290300200241786a2903005422131b221b290300370300200441086a201b41086a2903003703002003201420131b21032006201e200220131b22024f0d06200441706a21042003201d4b0d000c060b0b200420234184bbc300104b000b201120044184bbc3001055000b201c200241f4bac300103c000b200d200241e4bac300103c000b202420136a2114200421040340200620022004200241086a290300200441086a2903005422131b221e290300370300200641086a201e41086a2903003703002004200441106a20131b2104200641106a2106200241106a200220131b220220144f0d0220042003490d000c020b0b201d2104200221060b20062004200320046b41707110d40b1a024020012802502202201c4d0d0020012802482203201f6a2204202020126a360204200420113602002002200d4d0d02200320216a2204200441086a2002201c6b41037441706a10d50b1a20012002417f6a2202360250200241014b0d010c030b0b201c20024194bbc300103c000b200d20021044000b201021142010450d050c000b0b200641016a201441a4bbc300103c000b2003202341b4bac3001054000b4100211a41002114200c211e0c030b024020012802e40341ffffffff0171450d0020012802e00310390b411e211e41a880c80021040c030b0240200128024c41ffffffff0171450d00200128024810390b200e450d00202510390b024002400240024002400240024002400240024002400240201642ff93ebdc03560d00428094ebdc03202b802117410021020240202a202b540d00410021022001280288022106201a21040340200620024d0d0320012802800220024104746a22032903082216202c7c22152016540d04200341086a2015370300024020152017540d00200241016a201a7021020b2004417f6a22040d000b0b20194200520d062001280288022120200128028002210d0c070b02402001280288022220450d00200128028002220d2903082117201a417f6a220421020240202a202b540d000340202020024d0d05200d20024104746a220341086a2106024020032903082215202c7d22162015580d0042002015202c7d221620162015561b2116202c20157d20197c21190b20062016370300200220042002417f6a2203200320024b1b20162017561b2102201a417f6a221a0d000b0b2019500d070340202020024d0d0502400240200d200241047422066a22032903082215427f7c22162015580d0020042002417f6a2203200320024b1b21020c010b200341086a2016370300200128028802222020024d0d07200220042002417f6a2203200320024b1b200128028002220d20066a2903082017561b21022019427f7c21190b20194200520d000c080b0b41c680c800413f418881c800105b000b20022006419881c800103c000b41a881c800412641d081c800105b000b20022020418082c800103c000b2002202041a082c800103c000b2002202041b082c800103c000b20012802880221200340202020024d0d03200128028002220d20024104746a2204290308221642017c22152016540d02200441086a2015370300024020152017540d00200241016a201a7021020b2019427f7c221950450d000b0b024002400240202041144b0d00202041014b221c450d062020417f6a2106200d20204104746a41706a211441002113034020062202417f6a2106201c450d030240202020066b221d4102490d00200d20024104746a2202280200200d20064104746a2204280200221e4f0d002004200229030037030020042903082115200441086a200241086a2903003703000240201d4103490d002013417f6a211b41002104201421020340200241106a2203280200201e4f0d01201b2004460d05200241086a200241186a290300370300200220032903003703002003210220132004417f6a2204470d000b200321020b200220153703082002201e3602000b201441706a21142013417f6a211320060d000c070b0b2020410176220241ffffffff00712002470d0b20024104742207417f4c0d0b200710382221450d0a200142003702ac022001200a3602a802200d41706a2125200d41506a210841002104200a21032020211b034002400240201b417f6a22020d004101211d410021110c010b0240024002400240024002400240200d20024104746a280200201b410474221c200d6a41606a2802002206490d00201b417e6a211d2008201c6a2113410021114100210203400240201d2002470d00201b211d0c090b200241016a210220062013280200221e4f2114201341706a2113201e210620140d000b200241016a211d2002417f73201b6a21020c010b2008201c6a211302400340024020024101470d00410021020c020b2002417f6a210220062013280200221e492114201341706a2113201e210620140d000b0b201b2002490d01201b20204b0d02201b20026b221d410176221e450d00200d20024104746a21062025201c6a21130340200141c8006a41086a2214200641086a221c29030037030020012006290300370348201341086a2212290300211520062013290300370300201c20153703002012201429030037030020132001290348370300200641106a2106201341706a2113201e417f6a221e0d000b0b024020020d00200221110c060b0240201d41094d0d00200221110c060b201b20204b0d032002201b6b211e200d20024104746a211c0340201b2002417f6a2211490d050240201b20116b221d4102490d00200d20024104746a2202280200200d20114104746a220628020022144f0d002006200229030037030020062903082115200641086a200241086a2903003703000240201d4103490d0041012106201c21020340200241106a221328020020144f0d01201e20066a4101460d06200241086a200241186a2903003703002002201329030037030020132102201e200641016a22066a0d000b201321020b20022015370308200220143602000b2011450d06201c41706a211c201e417f6a211e20112102201d410a4f0d060c000b0b2002201b41c4bac3001055000b201b202041c4bac300104b000b2006201d41a4bbc300103c000b201b2002417f6a2211490d00201b202041d4bac300104b000b2011201b41d4bac3001055000b02400240200420012802ac02460d00200421020c010b0240200420012802b0022202470d00200141a8026a200410b10120012802b00221020b20012802a80221030b200320024103746a2202201d36020420022011360200200120012802b00241016a22043602b002024020044102490d0020012802a8022103024003400240024002400240024020032004417f6a4103746a2202280200450d00200441037420036a221e41746a2802002213200228020422064b0d010b20044103490d022002280204210620032004417d6a221c4103746a28020421020c010b200441024d0d0520032004417d6a221c4103746a2802042202200620136a4d0d00200441034d0d05201e41646a280200200220136a4b0d050b20022006490d010b2004417e6a211c0b02400240024002402004201c41016a22104d0d0002402004201c4d0d0002402003201c41037422236a2202280204222420022802006a220420032010410374221f6a2202280200221a490d000240200420204b0d00200d201a4104746a22032002280204221241047422066a21022004410474211302402004201a6b221e20126b22042012490d0020212003200610d40b220420066a21060240201241014e0d00200421040c080b201e20124a0d05200421040c070b202120022004410474220610d40b221d20066a210620124101480d0520044101480d05202520136a210403402004200241706a2213200641706a221e201e28020020132802004922141b221b290300370300200441086a201b41086a2903003703002006201e20141b210620032013200220141b22024f0d06200441706a21042006201d4b0d000c060b0b200420204184bbc300104b000b201a20044184bbc3001055000b201c200441f4bac300103c000b2010200441e4bac300103c000b200d20136a2114200421040340200320022004200228020020042802004922131b221e290300370300200341086a201e41086a2903003703002004200441106a20131b2104200341106a2103200241106a200220131b220220144f0d0220042006490d000c020b0b201d2104200221030b20032004200620046b41707110d40b1a024020012802b0022202201c4d0d0020012802a802220320236a2204202420126a3602042004201a360200200220104d0d022003201f6a2204200441086a2002201c6b41037441706a10d50b1a20012002417f6a22043602b002200441014b0d010c030b0b201c20024194bbc300103c000b201020021044000b2011211b2011450d050c000b0b410120046b201d41a4bbc300103c000b2006202041b4bac3001054000b41a881c800412641f081c800105b000b2002202041e081c800103c000b024020012802ac0241ffffffff0171450d0020012802a80210390b2007450d00202110390b200128028802220241ffffffff01712002470d0520024103742204417f4c0d05200128028402211320012802800221060240024020040d004108211e0c010b20041038221e450d050b200141003602dc022001201e3602d4022001200441037622043602d802024002400240200420024f0d00200141d0026a410472200210b00720012802d402211e20012802dc02211a0c010b4100211a2002450d010b20024104742103200641086a2102201e201a4103746a2104034020042002290300370300200241106a2102201a41016a211a200441086a2104200341706a22030d000b0b0240201341ffffffff0071450d00200610390b20012802d80221140b201a4103742206410375220241ffffffff03712002470d0420024102742204417f4c0d040240024020040d00410421130c010b200410382213450d040b201e20066a211b41002103200141003602502001201336024820012004410276220436024c0240200420024f0d00200141c8006a4100200210ab0120012802502103200128024821130b0240201b201e460d00201320034102746a2102201e2104034020022004290300221542ffffffff0f201542ffffffff0f541ba72213418094ebdc032013418094ebdc03491b360200200341016a2103200241046a2102200441086a2104200641786a22060d000b0b0240201441ffffffff0171450d00201e10390b200128024c211e20012802482114024020012802e40341ffffffff0171450d0020012802e00310390b02402003410274410275220220272802082204200420024b1b2202450d00410020026b2102202728020041206a210420142103034020042003280200360200200341046a2103200441246a2104200241016a220620024f21132006210220130d000b0b410021040240201e0d004100211e0c010b201e41ffffffff0371450d00201410390b024020012802c40341ffffffff0371450d0020012802c00310390b2027412c6a21022004450d000b20272005470d070b2026ad42307e2215422088a70d012015a72202417f4c0d010240024020020d00410821040c010b200210382204450d010b41002106200141003602b002200120043602a8022001200241306e22023602ac020240200220264f0d00200141a8026a4100202610f60320012802b00221060b02400240024020280d00202221020c010b2026410274211b20012802a802200641306c6a2104200141d0026a41186a2113200141d0026a41106a211e200141d0026a41086a2114202221030240034020032802002202450d01200228020841016a221d41004c0d062002201d3602082013200241ec006a290000370300201e200241e4006a2900003703002014200241dc006a2900003703002001200241d4006a2900003703d002200228020841016a221d41004c0d072002201d360208200141c8006a41086a221d2014290300370300200141c8006a41106a221c201e290300370300200141c8006a41186a2212201329030037030020022002280208417e6a360208200120012903d002370348200241c8006a29030021152002290340211620022002280200417f6a221a3602000240201a0d00200241046a221a201a280200417f6a221a360200201a0d00200210390b200341046a210320042001290348370300200441286a2015370300200441206a2016370300200441186a2012290300370300200441106a201c290300370300200441086a201d290300370300200441306a2104200641016a2106201b417c6a221b0d000b200120063602b0020c020b200341046a21020b200120063602b002202220264102746a22062002460d000340200228020022042004280200417f6a2203360200200241046a2102024020030d00200441046a22032003280200417f6a220336020020030d00200410390b20062002470d000b0b0240202941ffffffff0371450d00202210390b2009200b412c6c22026a212020012902ac02212b20012802a802210a2002450d04200141c8006a410c6a2113200141d0026a41086a2114200141c8006a410472221a41106a2121201a41186a2122201a41206a21252009211d0340201d2203412c6a211d02402003280200221b0d00201d21020c070b201a2003290204370200201a41086a2003410c6a2902003702002021200341146a221129020037020020222003411c6a22102902003702002025200341246a220d2902003702002001201b36024802400240200141386a201310b10722020d00420021150c010b200229030021150b20014190036a41086a2223201341086a29020037030020014190036a41106a2224201341106a29020037030020014190036a41186a221f201341186a2902003703002001201329020037039003200128024c21120240024020012802502202450d00200241246c221c2104201b210203400240200241206a2802002206450d002014200241086a290200370300200141d0026a41106a2226200241106a290200370300200141d0026a41186a2227200241186a290200370300200120022902003703d0022015428094ebdc0382211641301038221e450d05200141206a2015428094ebdc0380221942002006ad2215420010d30b201e20012903d002370300201e41186a2027290300370300201e41106a2026290300370300201e41086a2014290300370300201e20012903202217417f201620157e2215428094ebdc0380a7201542ffffffffffbfb2cd3b561b2015428094ebdc03824280cab5ee01566aad7c2215370320201e41286a200141206a41086a2903002015201754ad7c37030020014281808080103702b4032001201e3602b0030240024020044124470d004101211c0c010b200241246a2126201b201c6a2206415c6a21274101211c03402026210203400240200241206a2802002204450d00200141106a201942002004ad222c420010d30b200241186a2902002115200241106a290200211720022902002118200141c0036a41086a200241086a290200222a370300200141c0036a41106a2017370300200141c0036a41186a2015370300200120183703c003201441186a22042015370300201441106a22262017370300201441086a2208202a37030020142018370300200141e0036a41086a22052008290300370300200141e0036a41106a22082026290300370300200141e0036a41186a22072004290300370300200120142903003703e003200141106a41086a29030020012903102217417f2016202c7e2215428094ebdc0380a7201542ffffffffffbfb2cd3b561b2015428094ebdc03824280cab5ee01566aad7c2215201754ad7c21170240201c20012802b403470d00200141b0036a201c410110f60320012802b003211e0b200241246a2126201e201c41306c6a220420012903e003370300200529030021182008290300212c2007290300212a20042015370320200441286a2017370300200441186a202a370300200441106a202c370300200441086a20183703002001201c41016a221c3602b80320272002470d020c030b2006200241246a2202470d000b0b0b02402012450d00201241246c450d00201b10390b20012802b40321060c030b200241246a21022004415c6a22040d000b0b4100210602402012450d00201241246c450d00201b10390b200c211e4100211c0b200141d0026a41186a2202201f290300370300200141d0026a41106a220420242903003703002014202329030037030020012001290390033703d002200320063602042003201e3602002003201c360208200320012903d00237020c2011201429030037020020102004290300370200200d20022903003702002020201d470d000b20202102201d21030c050b1032000b1034000b41dcdccc00411820014180026a41f897c700418898c700103d000b41dcdccc00411820014180026a41f897c700419898c700103d000b20092102200921030b202b4220882115200320096b2214412c6d2113024020202002460d002009200b412c6c6a2106034020022204412c6a21020240200441046a2802002203450d00200341246c450d00200428020010390b20062002470d000b0b2015a7211b202ba7211e2013412c6c210420092102024003402004450d0102400240200141386a2002410c6a10b10722030d00420021150c010b200329030021150b200141086a20022015420010b207200441546a21042002412c6a210220012802082206450d000b200128020c211b02402014450d002013412c6c21042009210203400240200241046a2802002203450d00200341306c450d00200228020010390b2002412c6a2102200441546a22040d000b0b0240200f450d00200f412c6c450d00200910390b20004201370300200041106a201b3602002000410c6a2006360200200041086a4103360200201e450d03201e41306c450d03200a10390c030b2001201b3602502001201e36024c2001200a360248200141d0026a200141c8006a10b307200141c8006a20012802d002220420012802d80220092013109007410121020240024020012802484101470d00200129024c2115200041106a200141d4006a280200360200200041086a2015370200200041003602040c010b200128024c21022000410c6a200141c8006a41086a290300370200200041086a2002360200200141c8006a10b803200041186a2001290350370300410021020b20002002360200024020012802d40241ffffff3f71450d00200410390b02402014450d002013412c6c21042009210203400240200241046a2802002203450d00200341306c450d00200228020010390b2002412c6a2102200441546a22040d000b0b0240200f450d00200f412c6c450d00200910390b200141386a10b4070c030b0240200b450d00200b412c6c21032009210203400240200241046a2802002206450d00200641246c450d00200228020010390b2002412c6a2102200341546a22030d000b0b201ead21150240200f450d00200f412c6c450d00200910390b201542208621152004ad211602402028450d0020264102742103202221020340200228020022042004280200417f6a2206360200024020060d00200441046a22062006280200417f6a220636020020060d00200410390b200241046a21022003417c6a22030d000b0b2015201684211541032102202941ffffffff0371450d00202210390b200120023602482001201537024c20012903482116200041106a20154220883e02002000410c6a20164220883e0200200041086a20163e0200200042013703000b200141386a10b4070b20014180046a24000be44508057f017e037f027e047f027e2b7f017e230041d0046b22032400200341f0006a41f0c8c800410710cb01200341a8016a41fec9c800410a10cb01024002400240412010382204450d0020042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341e0036a41086a20034198046a41086a2802002204360200200320032903980422083703e00320034184016a2004360200200342a08080808004370274200320073602702003200837027c41002109200341003a008c012003412636028801200341a8016a200341f0006a10ae080240200341d8016a2d00004102460d00410021090340024020032802cc0141ffffff3f71450d0020032802c80110390b200941016a2109200341a8016a200341f0006a10ae0820032d00d8014102470d000b0b02402003280274450d00200328027010390b024020034180016a280200450d00200328027c10390b200341f0006a41f0c8c800410710cb01200341a8016a41f4c9c800410a10cb01412010382204450d0020042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341e0036a41086a20034198046a41086a2802002204360200200320032903980422083703e00320034184016a2004360200200342a08080808004370274200320073602702003200837027c4100210a200341003a008c012003412736028801200341a8016a200341f0006a10b0080240200341cc016a2d00004102460d004100210a0340200a41016a210a200341a8016a200341f0006a10b00820032d00cc014102470d000b0b02402003280274450d00200328027010390b024020034180016a280200450d00200328027c10390b02402001450d00417f2009200a6a220420042009491b20024d0d00200041f8a5ca0036020420004101360200200041086a41163602000c030b200341f0006a41f0c8c800410710cb01200341a8016a41c4d4c800410d10cb01412010382204450d0020042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341e0036a41086a20034198046a41086a2802002204360200200320032903980422083703e00320034184016a2004360200200342a08080808004370274200320073602702003200837027c4100210b200341003a008c012003412836028801200341a8016a200341f0006a10af08024020032802d4012204450d004100210b0340024020032802d80141ffffffff0371450d00200410390b200b41016a210b200341a8016a200341f0006a10af0820032802d40122040d000b0b02402003280274450d00200328027010390b0240200341f0006a41106a280200450d00200328027c10390b200341b0046a2204420037030020034198046a41106a2207420037030020034198046a41086a220542003703002003420037039804200341a8016a41e1e5c000410810cb012005200341a8016a41086a2206290000370300200320032900a80137039804200341a8016a41e4b4cb00410d10cb0120042006290000370300200720032900a801370300200341086a20034198046a412010c107200341086a41106a29030021082003290310210c2003290308210d41101038220e450d0020034200370224200e200c4200200da722041b370300200e2008420020041b370308200341002802e8c848220f360220200341f0006a41f0c8c800410710cb01200341a8016a41f4c9c800410a10cb01412010382204450d0020042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341f0026a41086a20034198046a41086a2802002204360200200320032903980422083703f002200341f4036a2004360200200342a080808080043702e403200320073602e003200320083702ec0341002104200341003a00fc03200341273602f803200341a8016a200341e0036a10b0080240200341cc016a2d00004102460d000340200341f0006a41206a200341a8016a41206a290300370300200341f0006a41186a2202200341a8016a41186a22052903002208370300200341f0006a41106a2210200341a8016a41106a2206290300220c370300200341f0006a41086a2211200341a8016a41086a2201290300220d370300200320032903a801221237037020034198046a41186a200837030020034198046a41106a200c37030020034198046a41086a200d3703002003201237039804200e20034198046a10bb0a2108412010382207450d0220072003290370220c370000200741186a2002290300220d370000200741106a20102903002212370000200741086a201129030022133700002005200d37030020062012370300200120133703002003200c3703a801024020042003280224470d00200341206a200410c3072003280220210f200328022821040b200f200441386c6a22042008370300200420032903a801370308200529030021082006290300210c2001290300210d2004412c6a42818080801037020020042007360228200441106a200d370300200441186a200c370300200441206a20083703002003200328022841016a2204360228200341a8016a200341e0036a10b00820032d00cc014102470d000b0b024020032802e403450d0020032802e00310390b0240200341f0036a280200450d0020032802ec0310390b200341f0006a41f0c8c800410710cb01200341a8016a41c4d4c800410d10cb01412010382204450d0020042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341c0006a41086a220420034198046a41086a280200360200200320032903980437034020034200370234200342a0808080800437025420032007360250200341d0006a41146a200428020036020041002114200341003a006c200341283602682003200329034037025c200341f0006a200341d0006a10af080240024002400240024002400240024002400240200328029c01450d0020034180026a411c6a211520034198046a410472211620034198046a411c6a2117200341b8026a411c6a2118200341a8016a41206a211141002114410021010340200341a8016a41306a200341f0006a41306a290300370300200341a8016a41286a200341f0006a41286a2903003703002011200341f0006a41206a290300370300200341a8016a41186a200341f0006a41186a2903002208370300200341a8016a41106a200341f0006a41106a290300220c370300200341a8016a41086a200341f0006a41086a290300220d3703002003200329037022123703a80120034198046a41186a2219200837030020034198046a41106a221a200c37030020034198046a41086a221b200d3703002003201237039804024002402001450d00200328023021100c010b41f00410382201450d0c41002110200141003b018e022001410036020020032001360234200341003602300b02400240034020014190026a211c20012f018e02220f410574210241002105417f21074100210402400340024020022004470d00200f21070c020b20034198046a200120046a4190026a412010d70b2206450d03200741016a2107200541186a2105200441206a21042006417f4a0d000b0b02402010450d002010417f6a2110200120074102746a41f0046a28020021010c010b0b200341e0016a41086a2210201641086a221d290200370300200341e0016a41106a2214201641106a221e290200370300200341e0016a41186a221f201641186a2220280200360200200320162902003703e001200328029804212102400240200f410a4b0d00200341e0036a41106a2205201141106a290200370300200341e0036a41086a2206201141086a290200370300200320112902003703e003200341c0036a41186a2202201f280200360200200341c0036a41106a22192014290300370300200341c0036a41086a22142010290300370300200320032903e0013703c003200741016a211002402007200f4f22220d00201c20104105746a201c20074105746a200f20076b41057410d50b1a0b201c20074105746a220420213600002004411c6a2002280200360000200441146a20192903003700002004410c6a2014290300370000200420032903c003370004201a2005290300370300201b2006290300370300200320032903e00337039804200141046a2104024020220d002004201041186c6a2004200741186c6a200f20076b41186c10d50b1a0b2004200741186c6a2204200329039804370200200441106a201a290300370200200441086a201b2903003702002001200f41016a3b018e020c010b410021234104210402400240200741054f0d00200721060c010b4105210441052106024002402007417b6a0e020201000b200741796a210641012123410621040c010b41002106410121230b41f00410382205450d0e200541003b018e0220054100360200200520012f018e02220f2004417f736a22023b018e02201c20044105746a22072800002124200341c0036a41186a22252007411c6a280000360200200341c0036a41106a2226200741146a290000370300200341c0036a41086a22272007410c6a290000370300200320072900043703c003200341b8026a41106a2222200141046a2228200441186c6a220741106a290200370300200341b8026a41086a2229200741086a290200370300200320072902003703b8022002410c4f0d0d200f200441016a22076b2002470d0c20054190026a201c20074105746a200241057410d40b1a200541046a2028200741186c6a200241186c10d40b1a201720032903b80237020020192025280200360200201741086a222a2029290300370200201741106a222b2022290300370200200120043b018e02201a20262903002208370300200341e0036a41086a220f2027290300370300200341e0036a41106a221c2008370300200341e0036a41186a222c2019290300370300200341e0036a41206a222d20034198046a41206a222e290300370300200341e0036a41286a222f20034198046a41286a2230290300370300200341e0036a41306a223120034198046a41306a2232280200360200200320032903c0033703e0032022201141106a2902003703002029201141086a290200370300200320112902003703b8022005200120231b22072f018e0221022025201f2802003602002026201429030037030020272010290300370300200320032903e0013703c00320074190026a21040240200641016a221420024b22100d00200420144105746a200420064105746a200220066b41057410d50b1a0b200420064105746a220420213600002004411c6a2025280200360000200441146a20262903003700002004410c6a2027290300370000200420032903c003370004201a2022290300370300201b2029290300370300200320032903b80237039804200741046a2104024020100d002004201441186c6a2004200641186c6a200220066b41186c10d50b1a0b2004200641186c6a2204200329039804370200200441106a201a290300370200200441086a201b2903003702002007200241016a3b018e02200341f0026a41086a221f200f290300370300200341f0026a41106a2221201c290300370300200341f0026a41186a2223202c290300370300200341f0026a41206a2204202d290300370300200341f0026a41286a2207202f290300370300200341f0026a41306a22062031280200360200200320032903e0033703f002200341b8026a41306a22332006280200360200200341b8026a41286a22342007290300370300200341b8026a41206a22352004290300370300200341b8026a41186a22282023290300370300202220212903003703002029201f290300370300200320032903f0023703b80202400240200128020022040d00410021360c010b410021362005213720242138034020012f018c0221012023202828020036020020212022290300370300201f2029290300370300200320032903b8023703f002200341a8036a41106a2239201841106a2207290200370300200341a8036a41086a223a201841086a2205290200370300200320182902003703a8030240200422102f018e02223b410a4b0d00201620032903b802370200201d2029290300370200201e202229030037020020202028280200360200200320383602980420104190026a21040240203b20014d22020d00200420014105746a220641206a2006203b20016b41057410d50b1a0b200420014105746a2204200329039804370000200441186a2019290300370000200441106a201a290300370000200441086a201b290300370000201a2007290200370300201b20052902003703002003201829020037039804200141016a2104201041046a2107024020020d002007200441186c6a2007200141186c6a203b20016b41186c10d50b1a0b203b41016a21062007200141186c6a2207200329039804370200200741106a201a290300370200200741086a201b290300370200201041f0046a2107203b41026a2105024020020d00200141027420076a41086a200720044102746a203b20016b41027410d50b1a0b201020063b018e02200720044102746a2037360200200420054f0d0320102004417f6a22044102746a41f4046a2107034020072802002205200441016a22043b018c0220052010360200200741046a210720062004470d000c040b0b4100211441042104024020014105490d0020012104024002402001417b6a0e020201000b200141796a210141012114410621040c010b4100210141012114410521040b41a00510382205450d10200541003b018e0220054100360200200520102f018e02223c2004417f736a22063b018e02202720104190026a223d20044105746a2207410c6a2900003703002026200741146a29000037030020252007411c6a280000360200200320072900043703c00320072800002124201c201041046a223e200441186c6a220741106a290200370300200f200741086a290200370300200320072902003703e0032006410c4f0d0d203c200441016a22026b2006470d0c20054190026a203d20024105746a200641057410d40b1a200541046a203e200241186c6a200641186c10d40b1a201020043b018e02201b2027290300370300201a202629030037030020192025280200360200201720032903e003370200202a200f290300370200202b201c290300370200200320032903c0033703980420052f018e02220741016a21062007410c4f0d0b203b20046b22042006470d0a203641016a2136200541f0046a201020024102746a41f0046a200441027410d40b1a4100210402400340200520044102746a41f0046a280200220620043b018c0220062005360200200420074f0d01200420042007496a220420074d0d000b0b20312032280200360200202f2030290300370300202d202e290300370300202c2019290300370300201c201a290300370300200f201b29030037030020032003290398043703e0032005201020141b22062f018e0221042003203836029804201620032903f002370000201d201f290300370000201e20212903003700002020202328020036000020064190026a21020240200141016a220720044b223b0d00200220074105746a200220014105746a200420016b41057410d50b1a0b200220014105746a2202200329039804370000200241186a2019290300370000200241106a201a290300370000200241086a201b290300370000201a2039290300370300201b203a290300370300200320032903a80337039804200641046a21140240203b0d002014200741186c6a2014200141186c6a200420016b41186c10d50b1a0b200441016a21022014200141186c6a2214200329039804370200201441106a201a290300370200201441086a201b290300370200200641f0046a21140240200141026a2238200441026a223b4f0d00201420384102746a201420074102746a200420016b41027410d50b1a0b201420074102746a2037360200200620023b018e0202402007203b4f0d00200620014102746a41f4046a2104034020042802002207200141016a22013b018c0220072006360200200441046a210420022001470d000b0b203320312802003602002034202f2903003703002035202d2903003703002028202c2903003703002022201c2903003703002029200f290300370300200320032903e0033703b802201021012005213720242138201028020022040d000b0b20034180026a41306a203328020036020020034180026a41286a203429030037030020034180026a41206a203529030037030020034180026a41186a2202202829030037030020034180026a41106a2210202229030037030020034180026a41086a220f2029290300370300200320032903b8023703800220032802342207450d072003280230210641a00510382204450d0e200420073602f004200441003b018e0220044100360200200741003b018c0220072004360200200320043602342003200641016a36023020062036470d0620042f018e022206410b4f0d052004200641016a22013b018e02200420064105746a220741a4026a2010290300370000200741ac026a20022802003600002004200641186c6a220641046a20152902003702002006410c6a201541086a290200370200200641146a201541106a29020037020020074190026a202436000020074194026a2003290380023700002007419c026a200f290300370000200441f0046a20014102746a2005360200200520013b018c02200520043602000b2003200328023841016a22143602380c010b201a201141106a2902002208370300201b201141086a290200220c37030020032011290200220d37039804200120056a220441046a200d370200200441146a2207280200210520072008370200200441106a28020021072004410c6a200c3702002007450d00200541ffffffff0371450d00200710390b200341f0006a200341d0006a10af08200328029c01450d01200328023421010c000b0b02402003280254450d00200328025010390b0240200341e0006a280200450d00200328025c10390b200341f0006a41f0c8c800410710cb01200341a8016a41fec9c800410a10cb01412010382204450d0920042003290070370000200420032900a801370010200441086a2205200341f0006a41086a290000370000200441186a2206200341a8016a41086a2900003700002003200436029804200342a0808080800437029c04412010382207450d09200aad220842c080c10d7e2009ad220c42c0fe9a0c7e7c200bad220d428081b8097e7c200c42c0d1e1237e7c200842c0d1e1237e7c42c0d1e1237c2113200d42c0f0f50b7e213f20072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341f0026a41086a20034198046a41086a2802002204360200200320032903980422083703f002200341f4036a2004360200200342a080808080043702e403200320073602e003200320083702ec03200341003a00fc03200341263602f803200341a8016a200341e0036a10ae08200341a8016a41306a2d00004102460d0a034020034198046a41086a220a200341a8016a41086a220f290300220837030020034198046a41106a221c200341a8016a41106a221a290300220c37030020034198046a41186a220b200341a8016a41186a2209290300220d370300200320032903a80122123703980420032802d401210220032802c801211120032802cc01211920032802d0012106200341f0006a41186a200d370300200341f0006a41106a200c370300200341f0006a41086a2008370300200320123703700240024020060d00410021100c010b4100211b410021104100210502400340024002402010450d00201120054105746a210420112005201b6a4105746a210703400240200341306a200410bc0a2201450d00200128020820024b0d030b20072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a290000370000200441206a2104200741206a21072006200541016a22054b0d000c040b0b201120054105746a210403400240200341306a200410bc0a2207450d00200728020820024b0d020b200441206a21042006200541016a22054b0d000b410021100c030b201b417f6a211b201041016a21102006200541016a22054b0d000b0b024020100d00410021100c010b2011200520106b4105746a201120054105746a200620056b41057410d50b1a0b200e200341f0006a10bb0a21082009200b290300370300201a201c290300370300200f200a29030037030020032003290398043703a801200620106b21050240200328022822072003280224470d00200341206a200710c307200328022821070b2003280220200741386c6a22042008370300200420032903a80137030820042011360228200441106a200f290300370300200441186a201a290300370300200441206a2009290300370300200441306a20053602002004412c6a20193602002003200741016a360228200341a8016a200341e0036a10ae0820032d00d8014102470d000c0b0b0b41a583c700412041e084c7001035000b41a084c700413041d084c7001035000b41a5cbc800412b4180b6c3001035000b41b485c700412841dc85c7001035000b2006410c41b486c700104b000b41b485c700412841dc85c7001035000b2006410b41a485c700104b000b41b485c700412841dc85c7001035000b2002410b41a485c700104b000b1032000b2013203f7c2108024020032802e403450d0020032802e00310390b200820135421040240200341f0036a280200450d0020032802ec0310390b427f200820041b210c024020032802342204450d00024020032802302207450d00034020042802f00421042007417f6a22070d000b0b02402014450d00410021050340024002400240200520042f018e024f0d00200421072005220641016a21050c010b41002105034041002107024020042802002202450d00200541016a210120042f018c022106200221070b024041a00541f00420051b450d00200410390b024020070d00410021040c030b2001210520072104200620072f018e024f0d000b024020010d0020072104200641016a21050c010b200641027420076a41f4046a280200210402402001417f6a2205450d00034020042802f00421042005417f6a22050d000b0b410021050b2007200641186c6a220741146a2902002108200741106a28020021100b2010450d022014417f6a21140240200842ffffffff0383500d00201010390b20140d000b0b41002107034020042802002105024041a00541f00420071b450d00200410390b2007417f6a21072005210420050d000b0b200e1039200041106a200341206a41086a280200360200200041086a200329032037020020004100360200200041186a200c3703000b200341d0046a24000ba80b03057f017e037f230041b0016b22032400200341e0006a41f0c8c800410710cb0120034188016a41f4c9c800410a10cb010240412010382204450d00200420032900603700002004200329008801370010200441086a2205200341e0006a41086a290000370000200441186a220620034188016a41086a29000037000020032004360240200342a08080808004370244412010382207450d0020072004290000370000200741186a2006290000370000200741106a200441106a290000370000200741086a2005290000370000200341106a41086a200341c0006a41086a2802002204360200200320032903402208370310200341f4006a2004360200200342a08080808004370264200320073602602003200837026c41002104200341003a007c2003412736027820034188016a200341e0006a10b0080240200341ac016a2d00004102460d00410021040340200441016a210420034188016a200341e0006a10b00820032d00ac014102470d000b0b02402003280264450d00200328026010390b0240200341f0006a280200450d00200328026c10390b024002402001450d00200420024d0d002000418ea6ca00360204200041086a4117360200410121040c010b200341e0006a41f0c8c800410710cb0120034188016a41f4c9c800410a10cb01412010382207450d01200720032900603700002007200329008801370010200741086a2205200341e0006a41086a290000370000200741186a220620034188016a41086a29000037000020032007360240200342a08080808004370244412010382201450d0120012007290000370000200141186a2006290000370000200141106a200741106a290000370000200141086a2005290000370000200341086a200341c0006a41086a2802002207360200200320032903402208370300200341246a2007360200200342a08080808004370214200320013602102003200837021c200341003a002c2003412736022820034188016a200341106a10b0080240024020032d00ac014102460d00200341f9006a20034188016a41186a290300370000200341f1006a20034188016a41106a290300370000200341e9006a20034188016a41086a2903003700002003200329038801370061412010382209450d032009200341e0006a4101722207290000370000200941186a200741186a290000370000200941106a200741106a290000370000200941086a200741086a290000370000200342818080801037023420032009360230200341c0006a41186a200341106a41186a290300370300200341c0006a41106a200341106a41106a290300370300200341c0006a41086a200341106a41086a2903003703002003200329031037034020034188016a200341c0006a10b008024020032d00ac014102460d00200341e0006a410172210741202106410121014101210503402007200329038801370000200741186a220220034188016a41186a290300370000200741106a220a20034188016a41106a290300370000200741086a220b20034188016a41086a290300370000024020052001470d00200341306a20014101109e02200328023021090b200920066a22012007290000370000200141186a2002290000370000200141106a200a290000370000200141086a200b2900003700002003200541016a220536023820034188016a200341c0006a10b00820032d00ac014102460d01200641206a2106200328023421010c000b0b02402003280244450d00200328024010390b200041086a21070240200341d0006a280200450d00200328024c10390b20072003290330370200200741086a200341306a41086a2802003602000c010b2000410c6a420037020020004100280284ee4d36020802402003280214450d00200328021010390b200341206a280200450d00200328021c10390b200041186a2004ad42c0f0f50b7e370300410021040b20002004360200200341b0016a24000f0b1032000bdd0201067f230041106b2202240002400240024002400240024020014102490d002000280204220328020841016a41004c0d022000280200220428020841016a41004c0d03200328025020042802504f0d002000200336020002400240200141034f0d00200041046a21030c010b200041046a210320002001417f6a22054102746a21060340200341046a2207280200220028020841016a41004c0d06200428020841016a41004c0d07200028025020042802504f0d012005450d0320032000360200200721032005417f6a22054101470d000b200621030b200320043602000b200241106a24000f0b2001200141a4bbc300103c000b41dcdccc004118200241086a41b4bbc30041c4bbc300103d000b41dcdccc004118200241086a41b4bbc30041c4bbc300103d000b41dcdccc004118200241086a41b4bbc30041c4bbc300103d000b41dcdccc004118200241086a41b4bbc30041c4bbc300103d000ba60d07077f027e047f027e057f027e017f230041e0016b22022400200241086a41086a200141c4006a290200370300200241086a41106a200141cc006a290200370300200241086a41186a200141d4006a2902003703002002200129023c37030820012802302203200141386a280200220441d8006c22056a2106200141346a28020021072003210802400240024002402004450d00200141086a29030021092001290300210a4100210b200241c0016a41186a210c200241c0016a41106a210d200241c0016a41086a210e0240024003402003200b6a220841306a2802002201450d02200841286a290300210f200841206a2903002110200c200841cc006a290200370300200d200841c4006a290200370300200e2008413c6a2902003703002002200841346a2902003703c00102402010200f200a200910a7062211450d00200241a0016a41186a200c290300370300200241a0016a41106a200d290300370300200241a0016a41086a200e290300370300200220022903c0013703a001201121120b20012001280200417f6a2213360200024020130d00200141046a22132013280200417f6a221336020020130d00200110390b20110d012005200b41d8006a220b470d000b200621080c020b200241d8006a41086a2201200241a0016a41086a290300370300200241d8006a41186a2211200241a0016a41186a290300370300200241d8006a41106a2213200241a0016a41106a290300370300200220022903a001370358412410382205450d042005200229035837020020052012360220200541186a2011290300370200200541106a2013290300370200200541086a2001290300370200200242818080801037022c2002200536022802400240200441d8006c41a87f6a200b470d00410121040c010b200841d8006a2101200641a87f6a2114200241fc006a41046a2115200241c0016a41186a210c200241c0016a41106a210d200241c0016a41086a210e4101210403402001210802400340200841d8006a2101200841306a280200220b450d01200841286a290300210f200841206a2903002110200c200841cc006a290200370300200d200841c4006a290200370300200e2008413c6a2902003703002002200841346a2902003703c00102402010200f200a200910a7062211450d00200241a0016a41186a200c290300370300200241a0016a41106a200d290300370300200241a0016a41086a200e290300370300200220022903c0013703a001201121120b200b200b280200417f6a2213360200024020130d00200b41046a22132013280200417f6a221336020020130d00200b10390b024020110d002001210820062001470d010c040b0b200241386a41186a200241a0016a41186a290300220f370300200241386a41106a200241a0016a41106a2903002210370300200241386a41086a200241a0016a41086a2903002216370300200220022903a0012217370338201541186a2201200f370200201541106a220b2010370200201541086a2211201637020020152017370200200241d8006a41086a22132011290200370300200241d8006a41106a2211200b290200370300200241d8006a41186a221820012902003703002002201529020037035802402004200228022c470d00200241286a2004108203200228022821050b200841d8006a21012005200441246c6a220b20022903583702002013290300210f2011290300211020182903002116200b2012360220200b41186a2016370200200b41106a2010370200200b41086a200f3702002002200441016a220436023020142008470d010c020b0b20062001460d000340200141306a28020022082008280200417f6a220b360200200141d8006a21010240200b0d00200841046a220b200b280200417f6a220b360200200b0d00200810390b20062001470d000b0b02402007450d00200741d8006c450d00200310390b200228022c2108200228022821012004450d0220002008360204200020013602002000410c6a2002290308370200200041086a2004360200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241086a41086a2903003702000c030b200841d8006a21080b024020062008460d000340200841306a28020022012001280200417f6a220b360200200841d8006a21080240200b0d00200141046a220b200b280200417f6a220b360200200b0d00200110390b20062008470d000b0b02402007450d00200741d8006c450d00200310390b200041003602000c010b200041003602002008450d00200841246c450d00200110390b200241e0016a24000f0b1032000bcc0101037f230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1b220141ffffffff01712001464103742104200141037421010240024020030d00200241003602100c010b200241106a41086a410836020020022003410374360214200220002802003602100b200220012004200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410376360200200241206a24000f0b1034000b960101057f0240200028020422020d0041000f0b200028020021030340200241e0006a210420022f015e21054100210002400240034020052000460d0120012004412010d70b2206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41c0036a28020021020c010b0b200220004103746a0bef0303077f017e017f230041206b22042400024002402001280208220541ffffffff00712005470d0020054104742206417f4c0d00200128020021070240024020060d00410821080c010b200610382208450d020b2007200541306c6a21094100210a20044100360218200420083602102004200641047622063602140240200620054f0d00200441106a41002005109307200428021021082004280218210a0b024020072009460d00200541306c2109200741206a21062008200a4104746a210703402006290300210b2007200641086a2903003703082007200b370300200641306a2106200a41016a210a200741106a2107200941506a22090d000b0b2004200a3602182004200441106a2002200310b0010240024020042802004101470d00200441086a2802002106200428020421070c010b200441086a280200210c2004280204210902402004410c6a28020022062005200520064b1b220a450d00200128020041206a21062009210703402007290300210b2006200741086a2903003703082006200b370300200741106a2107200641306a2106200a417f6a220a0d000b0b410021070240200c41ffffffff0071450d00200910390b0b0240200428021441ffffffff0071450d00200810390b2000200636020420002007360200200441206a24000f0b1034000b1032000bc30202067f037e024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d0020012802042104200128020021050240024020030d00410121010c010b200310382201450d020b2000200136020041002106200041086a22074100360200200020034105762203360204024002400240200320024f0d00200041002002109e0220072802002106200028020021010c010b2002450d010b200241306c2103200120064105746a2102200521010340200141086a2900002108200141106a29000021092001290000210a200241186a200141186a290000370000200241106a2009370000200241086a20083700002002200a370000200641016a2106200241206a2102200141306a2101200341506a22030d000b0b200041086a200636020002402004450d00200441306c450d00200510390b0f0b1034000b1032000bc00201067f200028020421012000410036020402402001450d00024020002802002202450d00034020012802c00321012002417f6a22020d000b0b024020002802082203450d004100210403402003417f6a2103024002400240200420012f015e490d0041002100034041002102024020012802582205450d00200041016a210620012f015c2104200521020b024041f00341c00320001b450d00200110390b024020020d00410021010c040b2006210020022101200420022f015e4f0d000b20060d01200221010b200441016a21040c010b200441027420026a41c4036a280200210102402006417f6a2202450d00034020012802c00321012002417f6a22020d000b0b410021040b20030d000b0b41002102034020012802582100024041f00341c00320021b450d00200110390b2002417f6a21022000210120000d000b0b0ba80101027f230041900f6b220124000240200028020022024126470d002001200041c8076a28020036028c0f200120002802c0073602880f200141c8076a200141880f6a10a202024020012802c80722024126460d002001410c6a200141c8076a41047241bc0710d40b1a0b024020002802004126460d00200010cf040b20002002360200200041046a2001410c6a41bc0710d40b1a0b200141900f6a24004100200020024126461b0bb30d07077f027e047f027e057f027e017f230041e0016b22022400200241086a41086a200141c4006a290200370300200241086a41106a200141cc006a290200370300200241086a41186a200141d4006a2902003703002002200129023c37030820012802302203200141386a280200220441d8006c22056a2106200141346a28020021072003210802400240024002402004450d00200141086a29030021092001290300210a4100210b200241c0016a41186a210c200241c0016a41106a210d200241c0016a41086a210e0240024003402003200b6a220841306a2802002201450d02200841286a290300210f200841206a2903002110200c200841cc006a290200370300200d200841c4006a290200370300200e2008413c6a2902003703002002200841346a2902003703c00102402010200f200a200910b707221141ffff03712212450d00200241a0016a41186a200c290300370300200241a0016a41106a200d290300370300200241a0016a41086a200e290300370300200220022903c0013703a001201121130b20012001280200417f6a2211360200024020110d00200141046a22112011280200417f6a221136020020110d00200110390b20120d012005200b41d8006a220b470d000b200621080c020b200241d8006a41086a2201200241a0016a41086a290300370300200241d8006a41186a2212200241a0016a41186a290300370300200241d8006a41106a2211200241a0016a41106a290300370300200220022903a001370358412210382205450d0420052002290358370100200520133b0120200541186a2012290300370100200541106a2011290300370100200541086a2001290300370100200242818080801037022c2002200536022802400240200441d8006c41a87f6a200b470d00410121040c010b200841d8006a2101200641a87f6a211420024180016a2115200241c0016a41186a210c200241c0016a41106a210d200241c0016a41086a210e4101210403402001210802400340200841d8006a2101200841306a280200220b450d01200841286a290300210f200841206a2903002110200c200841cc006a290200370300200d200841c4006a290200370300200e2008413c6a2902003703002002200841346a2902003703c00102402010200f200a200910b707221141ffff03712212450d00200241a0016a41186a200c290300370300200241a0016a41106a200d290300370300200241a0016a41086a200e290300370300200220022903c0013703a001201121130b200b200b280200417f6a2211360200024020110d00200b41046a22112011280200417f6a221136020020110d00200b10390b024020120d002001210820062001470d010c040b0b200241386a41186a200241a0016a41186a290300220f370300200241386a41106a200241a0016a41106a2903002210370300200241386a41086a200241a0016a41086a2903002216370300200220022903a0012217370338201541186a2201200f370100201541106a220b2010370100201541086a2212201637010020152017370100200241d8006a41086a22112012290100370300200241d8006a41106a2212200b290100370300200241d8006a41186a221820012901003703002002201529010037035802402004200228022c470d00200241286a2004410110c702200228022821050b200841d8006a21012005200441226c6a220b20022903583701002011290300210f2012290300211020182903002116200b20133b0120200b41186a2016370100200b41106a2010370100200b41086a200f3701002002200441016a220436023020142008470d010c020b0b20062001460d000340200141306a28020022082008280200417f6a220b360200200141d8006a21010240200b0d00200841046a220b200b280200417f6a220b360200200b0d00200810390b20062001470d000b0b02402007450d00200741d8006c450d00200310390b200228022c2108200228022821012004450d0220002008360204200020013602002000410c6a2002290308370200200041086a2004360200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241086a41086a2903003702000c030b200841d8006a21080b024020062008460d000340200841306a28020022012001280200417f6a220b360200200841d8006a21080240200b0d00200141046a220b200b280200417f6a220b360200200b0d00200110390b20062008470d000b0b02402007450d00200741d8006c450d00200310390b200041003602000c010b200041003602002008450d00200841226c450d00200110390b200241e0016a24000f0b1032000ba50302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff03420010da0b200441286a2002200342ffff03420010d20b200441186a20022003200429033822062004290328200441286a41086a29030084420052ad7c220742012007420156200441386a41086a2903002007200654ad7c22074200522007501b22051b22062007420020051b220710da0b0240024002402004290318220842808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2006200710da0b2004290308220342808004544100200441086a41086a290300501b450d012008a741ffff037122050d0241f0f0c200411941b0b5c3001035000b2004411136024c20044189f1c200360248419af1c20041de00200441c8006a41f8f1c20041b0b5c300103d000b2004411136024c20044189f1c200360248419af1c20041de00200441c8006a41f8f1c20041b0b5c300103d000b200441d0006a24002003a741ffff037141ffff036c20056e0b980101057f0240200028020422020d0041000f0b200028020021030340200241346a210420022f013221054100210002400240034020052000460d0120012004412010d70b2206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a4194036a28020021020c010b0b200220004102746a41046a0bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42d8007e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141d8006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141d8006e360200200241206a24000f0b1034000bb71807137f017e027f017e027f017e0a7f230041a0016b22022400200041146a21032000280210210420002802082105024002400240200028020422062f01322207410a4b0d0020024180016a41186a2208200341186a28000036020020024180016a41106a2209200341106a29000037030020024180016a41086a220a200341086a2900003703002002200329000037038001200641346a21030240200541016a220b20074b220c0d002003200b4105746a200320054105746a200720056b41057410d50b1a0b200320054105746a2203200436000020032002290380013700042003410c6a200a290300370000200341146a20092903003700002003411c6a2008280200360000200641046a21030240200c0d002003200b4102746a200320054102746a200720056b41027410d50b1a0b200320054102746a220d20013602002006200741016a3b01320c010b410521074100210e02400240200541054f0d0041042107200521080c010b41052108024002402005417b6a0e020201000b200541796a21084101210e410621070c010b410021084101210e0b2000280200210b0240024002400240024002400240024002400240024041940310382205450d00200541003b013220054100360200200520062f0132220f2007417f736a220a3b013220024188016a200641346a221020074105746a2209410c6a29000037030020024190016a200941146a29000037030020024198016a2009411c6a2800003602002002200929000437038001200a410c4f0d01200f200741016a220c6b200a470d02200641046a220f20074102746a280200211120092800002112200541346a2010200c4105746a200a41057410d40b1a200541046a200f200c4102746a200a41027410d40b1a200620073b0132200241c0006a41086a20024180016a41086a220a290300370300200241c0006a41106a20024180016a41106a220c290300370300200241c0006a41186a20024180016a41186a220f280200360200200220022903800137034020052006200e1b22072f01322109200f200341186a280000360200200c200341106a290000370300200a200341086a2900003703002002200329000037038001200741346a21030240200841016a220e20094b22100d002003200e4105746a200320084105746a200920086b41057410d50b1a0b200320084105746a2203200436000020032002290380013700042003410c6a200a290300370000200341146a200c2903003700002003411c6a200f280200360000200741046a2103024020100d002003200e4102746a200320084102746a200920086b41027410d50b1a0b200320084102746a220d2001360200200241e0006a41086a2213200241c0006a41086a22142903002215370300200241e0006a41106a2216200241c0006a41106a22172903002218370300200241e0006a41186a2219200241c0006a41186a221a28020022033602002007200941016a3b013220022002290340221b370360200241186a220e2003360200200241106a22102018370300200241086a221c20153703002002201b370300024002400240200628020022030d004100210b0c010b2011211d410021072005211e2012211f03402003210a20062f01302108200241206a41186a2220200e280200360200200241206a41106a22212010290300370300200241206a41086a2222201c29030037030020022002290300370320200b2007470d06200a2f01322223410b490d024100210f41042106024020084105490d0020082106024002402008417b6a0e020201000b200841796a21084101210f410621060c010b410021084101210f410521060b41c40310382205450d03200541003b0132200541003602002005200a2f013222112006417f736a22073b013220024180016a41086a2209200a41346a222420064105746a2203410c6a29000037030020024180016a41106a2204200341146a29000037030020024180016a41186a220c2003411c6a28000036020020022003290004370380012007410c4f0d072011200641016a22016b2007470d08200a41046a222520064102746a280200211120032800002112200541346a202420014105746a200741057410d40b1a200541046a2025200141027422016a200741027410d40b1a200a20063b01322014200929030037030020172004290300370300201a200c280200360200200220022903800137034020052f0132220341016a21072003410c4f0d09202320066b22062007470d0a200b41016a210b20054194036a200a20016a4194036a200641027410d40b1a4100210602400340200520064102746a4194036a280200220720063b013020072005360200200620034f0d01200620062003496a220620034d0d000b0b2019201a2802003602002016201729030037030020132014290300370300200220022903403703602005200a200f1b22072f01322106200c202028020036020020042021290300370300200920222903003703002002200229032037038001200741346a21030240200841016a220120064b220f0d00200320014105746a200320084105746a200620086b41057410d50b1a0b200320084105746a2203201f36000020032002290380013700042003410c6a2009290300370000200341146a20042903003700002003411c6a200c280200360000200741046a21030240200f0d00200320014102746a200320084102746a200620086b41027410d50b1a0b200641016a210920032008410274220c6a201d36020020074194036a21030240200841026a220f200641026a22044f0d002003200f4102746a200320014102746a200620086b41027410d50b1a0b200320014102746a201e360200200720093b01320240200120044f0d002007200c6a4198036a2106034020062802002203200841016a22083b013020032007360200200641046a210620092008470d000b0b200e201928020036020020102016290300370300201c201329030037030020022002290360370300200a21062011211d200b21072005211e2012211f200a28020022030d000b0b20024180016a41186a200e28020036020020024180016a41106a201029030037030020024180016a41086a201c2903003703002002200229030037038001200028020c22032802042207450d092003280200210841c40310382206450d012006200736029403200641003b01322006410036020020032006360204200741003b0130200720063602002003200841016a3602002008200b470d0a20062f01322208410b4f0d0b2006200841016a22093b0132200620084105746a220741c8006a20024190016a290300370000200741d0006a20024198016a280200360000200741346a2012360000200741386a200229038001370000200741c0006a20024188016a290300370000200620084102746a41046a201136020020064194036a20094102746a2005360200200520093b0130200520063602002003200328020841016a3602080c0d0b20024180016a41186a2203200241186a28020036020020024180016a41106a2205200241106a29030037030020024180016a41086a2207200241086a2903003703002002200229030037038001200a41346a21060240202320084d0d00200620084105746a220941206a2009202320086b41057410d50b1a0b202341016a2109200620084105746a2206201f36000020062002290380013700042006410c6a2007290300370000200641146a20052903003700002006411c6a2003280200360000200a41046a2205200841027422076a2103200841016a210602400240202320084b0d002003201d360200200a4194036a21030c010b2005200641027422016a2003202320086b410274220510d50b1a2003201d3602002007200a4194036a22036a41086a200320016a200510d50b1a0b2003200641027422056a201e360200200a20093b01322006202341026a22074f0d0b2005200a6a4194036a210303402003280200220520063b01302005200a360200200341046a21032007200641016a2206470d000c0c0b0b1032000b200a410b41a485c700104b000b41b485c700412841dc85c7001035000b41ec85c700413541a486c7001035000b2007410b41a485c700104b000b41b485c700412841dc85c7001035000b2007410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b200028020c2206200628020841016a3602080b200241a0016a2400200d0bae1803147f027e0c7f23004180016b22022400200041106a2103200028020821040240024002400240024002400240024002400240024002400240024002400240024002400240200028020422052f01322206410a4b0d00200541346a2107200441016a220820064d0d012007200441216c6a22072003290000370000200741206a200341206a2d00003a0000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a290000370000200541046a21030c020b410521064100210902400240200441054f0d0041042106200421070c010b41052107024002402004417b6a0e020201000b200441796a210741012109410621060c010b41002107410121090b2000280200210a41a00310382204450d05200441003b013220044100360200200420052f0132220b2006417f736a220c3b0132200241c8006a200541346a220d200641216c6a2208410c6a290000370300200241d0006a200841146a290000370300200241d5006a200841196a29000037000020022008290004370340200c410c4f0d06200b200641016a220e6b200c470d07200541046a220b20064102746a280200210f20082800002110200441346a200d200e41216c6a200c41216c10d40b1a200441046a200b200e4102746a200c41027410d40b1a200520063b0132200241086a200241c0006a41086a290300370300200241106a200241c0006a41106a290300370300200241156a200241c0006a41156a290000370000200220022903403703002004200520091b220641346a210802400240200741016a220e20062f0132220c4d0d002008200741216c6a22082003290000370000200841206a200341206a2d00003a0000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a290000370000200641046a21030c010b2008200e41216c6a2008200741216c6a2208200c20076b220941216c10d50b1a200841206a200341206a2d00003a0000200841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a29000037000020082003290000370000200641046a2203200e4102746a200320074102746a200941027410d50b1a0b200320074102746a221120013602002006200c41016a3b0132200241e0006a41156a2212200241156a2213290000370000200241e0006a41106a220e200241106a2214290300370300200241e0006a41086a2209200241086a22152903002216370300200220022903002217370360200241186a2218200241e0006a41186a22192903003703002014200e2903003703002015201637030020022017370300200528020022030d024100210a0c030b2007200841216c6a2007200441216c6a2207200620046b220c41216c10d50b1a200741206a200341206a2d00003a0000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a29000037000020072003290000370000200541046a220320084102746a200320044102746a200c41027410d50b1a0b200320044102746a221120013602002005200641016a3b01320c0e0b200f211a410021062004211b2010211c03402003210c20052f01302107200241206a41156a221d2013290000370000200241206a41106a221e2014290300370300200241206a41086a221f201529030037030020022002290300370320200a2006470d06200c2f01322220410b490d024100210141042105024020074105490d0020072105024002402007417b6a0e020201000b200741796a210741012101410621050c010b4100210741012101410521050b41d00310382204450d03200441003b0132200441003602002004200c2f0132220f2005417f736a22063b0132200241c0006a41086a220b200c41346a2221200541216c6a2203410c6a290000370300200241c0006a41106a220d200341146a290000370300200241c0006a41156a2222200341196a290000370000200220032900043703402006410c4f0d07200f200541016a22086b2006470d08200c41046a222320054102746a280200210f20032800002110200441346a2021200841216c6a200641216c10d40b1a200441046a2023200841027422086a200641027410d40b1a200c20053b01322009200b290300370300200e200d290300370300201220222900003700002002200229034037036020042f0132220341016a21062003410c4f0d09202020056b22052006470d0a200a41016a210a200441a0036a200c20086a41a0036a200541027410d40b1a4100210502400340200420054102746a41a0036a280200220620053b013020062004360200200520034f0d01200520052003496a220520034d0d000b0b200241c0006a41186a22202019290300370300200d200e290300370300200b2009290300370300200220022903603703402004200c20011b22062f013221052012201d290000370000200e201e2903003703002009201f29030037030020022002290320370360200641346a21030240200741016a220120054b22080d002003200141216c6a2003200741216c6a200520076b41216c10d50b1a0b2003200741216c6a2203201c360000200320022903603700042003410c6a2009290300370000200341146a200e290300370000200341196a2012290000370000200641046a2103024020080d00200320014102746a200320074102746a200520076b41027410d50b1a0b200541016a210820032007410274221c6a201a360200200641a0036a21030240200741026a221d200541026a221a4f0d002003201d4102746a200320014102746a200520076b41027410d50b1a0b200320014102746a201b360200200620083b013202402001201a4f0d002006201c6a41a4036a2105034020052802002203200741016a22073b013020032006360200200541046a210520082007470d000b0b201820202903003703002014200d2903003703002015200b29030037030020022002290340370300200f211a200c2105200a21062004211b2010211c200c28020022030d000b0b20192018290300370300200e20142903003703002009201529030037030020022002290300370360200028020c22032802042206450d092003280200210741d00310382205450d01200520063602a003200541003b01322005410036020020032005360204200641003b0130200620053602002003200741016a3602002007200a470d0a20052f01322207410b4f0d0b2005200741016a22083b01322005200741216c6a220641c8006a200241f0006a290300370000200641cd006a200241f5006a290000370000200641346a2010360000200641386a2002290360370000200641c0006a200241e8006a290300370000200520074102746a41046a200f360200200541a0036a20084102746a2004360200200420083b0130200420053602002003200328020841016a3602080c0d0b200241e0006a41156a2203200241156a290000370000200241e0006a41106a2204200241106a290300370300200241e0006a41086a2206200241086a29030037030020022002290300370360200c41346a21050240202020074d0d002005200741216c6a220841216a2008202020076b41216c10d50b1a0b202041016a21082005200741216c6a2205201c360000200520022903603700042005410c6a2006290300370000200541146a2004290300370000200541196a2003290000370000200c41046a2204200741027422066a2103200741016a210502400240202020074b0d002003201a360200200c41a0036a21030c010b2004200541027422016a2003202020076b410274220410d50b1a2003201a3602002006200c41a0036a22036a41086a200320016a200410d50b1a0b2003200541027422046a201b360200200c20083b01322005202041026a22064f0d0b2004200c6a41a0036a210303402003280200220420053b01302004200c360200200341046a21032006200541016a2205470d000c0c0b0b1032000b200c410b41a485c700104b000b41b485c700412841dc85c7001035000b41ec85c700413541a486c7001035000b2006410b41a485c700104b000b41b485c700412841dc85c7001035000b2006410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b200028020c2205200528020841016a3602080b20024180016a240020110b981305017f017e0a7f017e077f230041d0006b220224002000290210210320002802082104024002400240200028020422052f018a012206410a4b0d002005418c016a21070240200441016a220820064b22090d00200720084103746a200720044103746a200620046b41037410d50b1a0b200720044103746a2003370000200241c0006a41086a220a200141086a28020036020020022001290200370340200541046a2107024020090d0020072008410c6c6a20072004410c6c6a200620046b410c6c10d50b1a0b20072004410c6c6a22042002290340370200200441086a200a2802003602002005200641016a3b018a010c010b410521074100210b02400240200441054f0d0041042107200421080c010b41052108024002402004417b6a0e020201000b200441796a21084101210b410621070c010b410021084101210b0b2000280200210a0240024002400240024002400240024002400240024041e40110382206450d00200641003b018a0120064100360200200620052f018a01220c2007417f736a22043b018a012005418c016a220d20074103746a290000210e200241c0006a41086a200541046a220f2007410c6c6a220941086a280200360200200220092902003703402004410c4f0d01200c200741016a22096b2004470d022006418c016a200d20094103746a200441037410d40b1a200641046a200f2009410c6c6a2004410c6c10d40b1a200520073b018a01200241306a41086a200241c0006a41086a220c2802003602002002200229034037033020062005200b1b2204418c016a21070240200841016a220b20042f018a0122094b220d0d002007200b4103746a200720084103746a200920086b41037410d50b1a0b200720084103746a2003370000200c200141086a28020036020020022001290200370340200441046a21070240200d0d002007200b410c6c6a20072008410c6c6a200920086b410c6c10d50b1a0b20072008410c6c6a22072002290340370200200741086a200241c0006a41086a220b280200360200200241206a41086a2210200241306a41086a220f28020022073602002004200941016a3b018a01200220022903302203370320200241086a220d200736020020022003370300024002400240200528020022040d004100210a0c010b200e2103200621114100210703402004210920052f0188012108200241106a41086a2212200d28020036020020022002290300370310200a2007470d0620092f018a01220c410b490d024100210141042105024020084105490d0020082105024002402008417b6a0e020201000b200841796a210841012101410621050c010b4100210841012101410521050b41940210382206450d03200641003b018a0120064100360200200620092f018a0122132005417f736a22043b018a012009418c016a221420054103746a290000210e200b200941046a22152005410c6c6a220741086a280200360200200220072902003703402004410c4f0d072013200541016a22076b2004470d082006418c016a201420074103746a200441037410d40b1a200641046a20152007410c6c6a2004410c6c10d40b1a200920053b018a01200f200b2802003602002002200229034037033020062f018a01220441016a21132004410c4f0d09200c20056b22052013470d0a200a41016a210a200641e4016a200920074102746a41e4016a200541027410d40b1a4100210502400340200620054102746a41e4016a280200220720053b01880120072006360200200520044f0d01200520052004496a220520044d0d000b0b2010200f280200360200200220022903303703202006200920011b2207418c016a21010240200841016a220420072f018a0122054b22130d00200120044103746a200120084103746a200520086b41037410d50b1a0b200120084103746a2003370000200b201228020036020020022002290310370340200741046a210c024020130d00200c2004410c6c6a200c2008410c6c6a200520086b410c6c10d50b1a0b200541016a2101200c2008410c6c6a220c2002290340370200200c41086a200b280200360200200741e4016a210c0240200841026a2213200541026a22124f0d00200c20134102746a200c20044102746a200520086b41027410d50b1a0b200c20044102746a2011360200200720013b018a010240200420124f0d00200720084102746a41e8016a2105034020052802002204200841016a22083b01880120042007360200200541046a210520012008470d000b0b200d201028020036020020022002290320370300200e21032006211120092105200a2107200928020022040d000b0b200b200d28020036020020022002290300370340200028020c22042802042207450d092004280200210841940210382205450d01200520073602e401200541003b018a012005410036020020042005360204200741003b018801200720053602002004200841016a3602002008200a470d0a20052f018a012207410b4f0d0b2005200741016a22083b018a01200520074103746a418c016a200e37000020052007410c6c6a2207410c6a200241c8006a280200360200200741046a2002290340370200200541e4016a20084102746a2006360200200620083b018801200620053602002004200428020841016a3602080c0d0b2009418c016a21050240200c20084d22040d00200520084103746a220641086a2006200c20086b41037410d50b1a0b200520084103746a2003370000200241c0006a41086a2207200241086a28020036020020022002290300370340200841016a2105200941046a2106024020040d0020062005410c6c6a20062008410c6c6a200c20086b410c6c10d50b1a0b200c41016a210120062008410c6c6a22062002290340370200200641086a2007280200360200200941e4016a2106200c41026a2107024020040d00200841027420066a41086a200620054102746a200c20086b41027410d50b1a0b200920013b018a01200620054102746a2011360200200520074f0d0b200c41016a210720092005417f6a22054102746a41e8016a2104034020042802002206200541016a22053b01880120062009360200200441046a210420072005470d000c0c0b0b1032000b2004410b41a485c700104b000b41b485c700412841dc85c7001035000b41ec85c700413541a486c7001035000b2004410b41a485c700104b000b41b485c700412841dc85c7001035000b2013410c41b486c700104b000b41b485c700412841dc85c7001035000b41a5cbc800412b4180b6c3001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b200028020c2205200528020841016a3602080b200241d0006a24000b0c00200028020020011095010bdc15030a7f017e0b7f230041e0026b2202240020024198026a41047221032001280204210441002105417f21060240024002400240034020042005460d012001200420066a36020420012001280200220741016a360200200320056a20072d00003a00002002200541016a2207360298022006417f6a210620072105200741c000470d000b2002200241cd026a22062900003703f8012002200241d4026a2900003700ff01200220022f019c023b01d801200220022d009e023a00da01200241c2026a2801002108200241c9026a2800002109200241bb026a2800002101200241b4026a220a2802002107200241ad026a2800002104200241a6026a280100210320022800fb01210b20022900ff01210c200228009f02210d200241b0016a41026a220e200241a5026a220f2d00003a00002002200241a3026a2f00003b01b001200241f8006a41026a2210200241ac026a22112d00003a00002002200241aa026a2f01003b0178200241d0006a41026a2212200241b3026a2d00003a00002002200241b1026a2f00003b0150200241286a41026a2213200241ba026a2d00003a00002002200241b8026a22142f01003b0128200241d0016a41026a2215200241c1026a2d00003a00002002200241bf026a2f00003b01d001200241a8016a41026a2216200241c8026a2d00003a00002002200241c6026a2f01003b01a801200241f0006a41026a2205200241cf026a2d00003a0000200220062f00003b01702002411c6a41026a220620022d00da013a0000200220022f01d8013b011c200241186a41026a2217200e2d00003a0000200220022f01b0013b0118200241146a41026a220e20102d00003a0000200220022f01783b0114200241106a41026a221020122d00003a0000200220022f01503b01102002410c6a41026a221220132d00003a0000200220022f01283b010c200241086a41026a221320152d00003a0000200220022f01d0013b0108200241046a41026a221520162d00003a0000200220022f01a8013b0104200241026a221620052d00003a0000200220022f01703b0100200241a4016a41026a20132d00003a0000200220022f01083b01a401200241a0016a41026a20152d00003a0000200220022f01043b01a0012002419c016a41026a20162d00003a0000200220022f01003b019c01200241f8016a41026a20062d00003a00002002200d3600fb01200220022f011c3b01f80120024181026a20172d00003a00002002200336018202200220022f01183b00ff0120024188026a200e2d00003a00002002200436008902200220022f01143b0186022002418f026a20102d00003a0000200220022f01103b008d02200220073601900220024196026a20122d00003a0000200220022f010c3b019402200220013a00970220024198026a200241f8016a107441022106024020022d00980222074101470d00200241f2006a20022d009b023a0000200241f8016a41086a200f29000037030020024187026a2011290000370000200241fc006a20142d00003a0000200220022f0099023b01702002200229009d023703f8012002200a28020036027820022d009c0221060b200241f4016a41026a20052d00003a0000200241d8016a41086a200241f8016a41086a290300370300200241d8016a410f6a2205200241f8016a410f6a290000370000200241d0016a41046a2204200241f8006a41046a2d00003a0000200220022f01703b01f401200220022903f8013703d801200220022802783602d00120074101470d01200241cc016a41026a200241f4016a41026a22072d00003a0000200241b0016a41086a200241d8016a41086a2203290300370300200241b0016a410f6a2005290000370000200241a8016a41046a20042d00003a0000200220022f01f4013b01cc01200220022903d8013703b001200220022802d0013602a8012002200141087622053b01f801200220054110763a00fa01200241fd016a200241a4016a41026a2d00003a0000200220083601fe01200220022f01a4013b00fb0120024184026a200241a0016a41026a2d00003a00002002200936008502200220022f01a0013b0182022002418b026a2002419c016a41026a2d00003a00002002200c370290022002200b36028c02200220022f019c013b00890220024198026a200241f8016a107441022101024020022d00980222054101470d00200241f2006a20022d009b023a0000200241f8016a41086a200241a5026a29000037030020024187026a200241ac026a290000370000200241fc006a200241b8026a2d00003a0000200220022f0099023b01702002200229009d023703f8012002200241b4026a28020036027820022d009c0221010b2007200241f0006a41026a2d00003a00002003200241f8016a41086a290300370300200241d8016a410f6a2207200241f8016a410f6a2204290000370000200241d0016a41046a2203200241f8006a41046a2d00003a0000200220022f01703b01f401200220022903f8013703d801200220022802783602d001024020054101460d0020024198026a410f6a200729000037000020024198026a41086a200241d8016a41086a290300370300200220022903d8013703980241012105200121060c030b20024194016a41026a200241f4016a41026a2d00003a0000200241f8006a41086a200241d8016a41086a290300370300200241f8006a410f6a2007290000370000200241f0006a41046a20032d00003a000020024198016a41026a200241cc016a41026a2d00003a0000200220022f01f4013b019401200220022903d801370378200220022802d001360270200220022f01cc013b01980120024198026a410f6a2205200241b0016a410f6a29000037000020024198026a41086a2207200241b0016a41086a290300370300200220022903b00137039802200241d8016a41046a200241a8016a41046a2d00003a0000200220022802a8013602d80120042005290000370000200241f8016a41086a200729030037030020022002290398023703f801410021050c020b200041013a00000c020b20024198026a410f6a200529000037000020024198026a41086a200241d8016a41086a290300370300200220022903d80137039802410121050b200241ec006a41026a220720024198016a41026a2d00003a0000200241d0006a41086a2204200241f8016a41086a290300370300200241d0006a410f6a2203200241f8016a410f6a290000370000200241c8006a41046a220d200241d8016a41046a2d00003a0000200241c4006a41026a220e20024194016a41026a2d00003a0000200220022f0198013b016c200220022903f801370350200220022802d801360248200220022f0194013b0144200241286a410f6a2210200241f8006a410f6a290000370000200241286a41086a2212200241f8006a41086a290300370300200241206a41046a2213200241f0006a41046a2d00003a00002002200229037837032820022002280270360220024020050d00200020022f016c3b00012000411c6a20022802483600002000413c6a2002280220360000200041046a20063a0000200041056a2002290350370000200041206a200d2d00003a0000200041c0006a20132d00003a0000200041036a20072d00003a00002000410d6a2004290300370000200041146a2003290000370000200041246a20013a0000200041003a0000200041236a200e2d00003a0000200041216a20022f01443b0000200041256a20022903283700002000412d6a2012290300370000200041346a20102900003700000c010b200041013a00000b200241e0026a24000ba30301047f230041306b22022400200241186a4200370300200241106a22034200370300200241086a420037030020024200370300200241c2e6c000411a10cb0120034198b4c800410c10cb014100210420024100360228200242013703204101210302400240024002402000417e6a22054102200541ff01714102491b41ff01710e03000102030b200241206a41004101107720022802202203200228022822046a41003a0000200441016a21040c020b200241206a41004101107720022802202203200228022822046a41013a0000200441016a21040c010b200241206a41004101107720022802202203200228022822046a41023a00002002200441016a22043602280240200228022422052004470d00200241206a2004410110772002280220210320022802242105200228022821040b200320046a20003a00002002200441016a22043602280240200520046b41034b0d00200241206a20044104107720022802202103200228022821040b200320046a2001360000200441046a21040b200241202003200410e90102402002280224450d00200310390b200241306a24000bf40501037f02400240024002400240024020012d00000e06010402030500010b200041046a420037020020004100280284ee4d36020020004100410110772000280200200041086a220228020022036a41003a00002002200341016a360200200141046a2802002001410c6a280200200010b9020f0b200041046a420037020020004100280284ee4d36020020004100410110772000280200200041086a220228020022036a41023a00002002200341016a360200200141016a200010b5020f0b200041046a2204420037020020004100280284ee4d36020020004100410110772000280200200041086a220328020022026a41043a00002003200241016a22023602000240200428020020026b41034b0d002000200241041077200328020021020b200028020020026a20012800013600002003200241046a3602002001280208200141106a280200200010b9020f0b200041046a2204420037020020004100280284ee4d36020020004100410110772000280200200041086a220328020022026a41053a00002003200241016a22023602000240200428020020026b41034b0d002000200241041077200328020021020b200028020020026a20012800013600002003200241046a3602002001280208200141106a280200200010b9020f0b200041046a2204420037020020004100280284ee4d36020020004100410110772000280200200041086a220328020022026a41063a00002003200241016a22023602000240200428020020026b41034b0d002000200241041077200328020021020b200028020020026a20012800013600002003200241046a3602002001280208200141106a280200200010b9020f0b200041046a2204420037020020004100280284ee4d36020020004100410110772000280200200041086a220328020022026a41073a00002003200241016a2202360200200141046a2101024020042802002002470d002000200241011077200328020021020b200028020020026a41003a00002003200241016a3602002001200010da020ba20202017f037e230041d0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b420021042003420037021c20034100280284ee4d3602182003410d36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341286a360248200341346a41b4dfc400200341386a103b1a2003280218200328022010d1010240200328021c450d00200328021810390b0b2002450d00200110390b2000200637030820002004370300200041106a2005370300200341d0006a24000b970f05077f017e0f7f027e057f230041d0016b22012400200141306a4200370300200141286a22024200370300200141186a41086a420037030020014200370318200141186a41c2e6c000411a10cb0120024198b5c800410810cb012001412036023c2001200141186a360238200141c0006a200141186a412010e40102400240200128024022030d00410021040c010b200128024421052001200141c0006a41086a28020036025420012003360250200141106a200141d0006a10c1010240024002400240024020012802100d00200128021422062001280254220741386e2202200220064b1bad42387e2208422088a70d032008a72202417f4c0d030240024020020d00410821040c010b200210382204450d030b4100210920014100360268200120043602602001200241386e220a3602640240024020060d00410021090c010b200141a8016a410472210b200141a8016a41196a210c200141a8016a41126a210d200141a8016a410b6a210e4100210f02400340200f41016a210f4100210202400240034020072002460d01200b20026a2001280250220a2d00003a00002001200241016a22103602a8012001200a41016a3602502010210220104120470d000b200141a4016a41026a2211200e41026a2d00003a0000200141a0016a41026a2212200d41026a2d00003a00002001200b2f01003b01582001200e2f00003b01a4012001200d2f00003b01a0012001200b41026a2d00003a005a2001200720106b220236025420012800af01210720012801b601211320012800bd01211420012802c401211520012802c80121162001419c016a41026a2217200c41026a2d00003a00002001200c2f00003b019c010240200241084f0d00410021100c020b2001200a41096a3602502001200241786a360254200a2900012118200141086a200141d0006a10c1010240024020012802080d00200141a8016a200141d0006a200128020c109d0220012802a80122100d010b410021100c020b20014194016a41026a20112d00003a000020014190016a41026a20122d00003a00002001418c016a41026a20172d00003a0000200120012f01583b019801200120012d005a3a009a01200120012f01a4013b019401200120012f01a0013b019001200120012f019c013b018c0120012902ac012108201821192007211a2013211b2014211c2015211d2016211e0c010b41002110200141003602540b20014184016a41026a220220014194016a41026a2d00003a000020014180016a41026a220a20014190016a41026a2d00003a0000200141fc006a41026a22072001418c016a41026a2d00003a0000200120012d009a013a008a01200120012f0198013b018801200120012f0194013b018401200120012f0190013b018001200120012f018c013b017c02402010450d00200141f4006a41026a221120022d00003a0000200141f0006a41026a2212200a2d00003a0000200141ec006a41026a220a20072d00003a0000200120012d008a013a007a200120012f0188013b0178200120012f0184013b0174200120012f0180013b0170200120012f017c3b016c024020092001280264470d00200141e0006a200910c30720012802602104200128026821090b2004200941386c6a220220193703002002410a6a20012d007a3a0000200220012f01783b0108200241116a20112d00003a00002002410f6a20012f01743b0000200241186a20122d00003a0000200241166a20012f01703b00002002410b6a201a360000200241126a201b360000200241196a201c3600002002411f6a200a2d00003a00002002411d6a20012f016c3b00002002412c6a200837020020022010360228200241246a201e360000200241206a201d3600002001200128026841016a2209360268200f2006460d02200128025421070c010b0b2001280260210a02402009450d00200941386c2110200a412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010390b200241386a2102201041486a22100d000b0b024020012802642202450d00200241386c450d00200a10390b0c020b2001280264210a200128026021040b2004450d002001200141d0006a10c101024002402001280200450d00200141003602a8010c010b200141a8016a200141d0006a2001280204109d0220012802a8010d020b02402009450d00200941386c21102004412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010390b200241386a2102201041486a22100d000b0b0240200a0d004100210a0c010b200a41386c450d00200410390b200142003702644100210420014100280284ee4d3602602001410d36025c2001200141386a3602582001200141e0006a3602a401200141bc016a4101360200200142013702ac01200141949fc5003602a8012001200141d8006a3602b801200141a4016a41b4dfc400200141a8016a103b1a2001280260200128026810d1012001280264450d03200128026010390c030b200141e0006a41086a200141a8016a41086a280200360200200120012903a8013703600c020b1032000b1034000b2005450d00200310390b200041146a200141e0006a41086a2802003602002000410c6a2001290360370200200041086a20093602002000200a36020420002004360200200141d0016a24000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42387e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141386c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141386e360200200241206a24000f0b1034000bbf0603037f027e097f230041306b2203240002400240024002400240024020014102490d0020022802002204280200200041386a10b807210520042802042102420021064200210702402005450d0020022802082208200528020022054d0d032002280200200541386c6a29030021070b024020042802002000410c6a10b8072205450d0020022802082208200528020022054d0d042002280200200541386c6a29030021060b200620075a0d002000290200210720002000412c6a2202290200370200200341286a2209200041286a2205280200360200200341206a220a200041206a2208290200370300200341186a220b200041186a220c290200370300200341106a220d200041106a220e290200370300200341086a220f200041086a22102902003703002010200241086a290200370200200e200241106a290200370200200c200241186a2902003702002008200241206a2902003702002005200241286a2802003602002003200737030002400240200141034f0d002000412c6a210e0c010b200041d8006a210220002001417f6a2205412c6c6a210e2003410c6a210c034020042802002002410c6a10b807210820042802042100420021064200210702402008450d0020002802082210200828020022084d0d072000280200200841386c6a29030021070b02402004280200200c10b8072208450d0020002802082210200828020022084d0d082000280200200841386c6a29030021060b0240200620075a0d002005450d04200241546a22002002290200370200200041286a200241286a280200360200200041206a200241206a290200370200200041186a200241186a290200370200200041106a200241106a290200370200200041086a200241086a2902003702002002412c6a21022005417f6a22054101470d010c020b0b200241546a210e0b200e2003290300370200200e41286a2009280200360200200e41206a200a290300370200200e41186a200b290300370200200e41106a200d290300370200200e41086a200f2903003702000b200341306a24000f0b2001200141a4bbc300103c000b2005200841d4bbc300103c000b2005200841d4bbc300103c000b2008201041d4bbc300103c000b2008201041d4bbc300103c000bbb0303057f027e037f230041106b2202240002400240024002400240024020014102490d002000280204220341306a280200220428020841016a41004c0d022000280200220541306a280200220628020841016a41004c0d03200429034020062903405a200441c8006a2903002207200641c8006a29030022085a20072008511b0d002000200336020002400240200141034f0d00200041046a21040c010b200041046a210420002001417f6a22034102746a21090340200441046a220a280200220b41306a280200220028020841016a41004c0d06200541306a280200220628020841016a41004c0d07200029034020062903405a200041c8006a2903002207200641c8006a29030022085a20072008511b0d012003450d032004200b360200200a21042003417f6a22034101470d000b200921040b200420053602000b200241106a24000f0b2001200141a4bbc300103c000b41dcdccc004118200241086a41b4bbc30041e4bbc300103d000b41dcdccc004118200241086a41b4bbc30041e4bbc300103d000b41dcdccc004118200241086a41b4bbc30041e4bbc300103d000b41dcdccc004118200241086a41b4bbc30041e4bbc300103d000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42fc007e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141fc006c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141fc006e360200200241206a24000f0b1034000bf20e03067f017e017f23004180076b2206240002400240024002400240024002400240024002400240024020022d00004101470d00200641206a200241196a290000370300200641186a200241116a290000370300200641106a200241096a290000370300200620022900013703082003280208220741017621020240024020074101710d00200328020422072002490d0420032802002107410021080c010b200328020422072002490d04200220074f0d052003280200220720026a2d00004170712109410121080b200141d0006a280200210a200128024c210b200641f9026a20093a0000200620083a00f802200620023602f402200620073602f002200641f0036a200b200641086a200641f0026a200a28020c1106000240024020062802f00322070d004130103822020d011032000b20062902f403210c20064180016a41186a200641086a41186a220929030037030020064180016a41106a200641086a41106a220a29030037030020064180016a41086a200641086a41086a220b2903003703002006200629030837038001200641f0026a20064180016a2007200c422088a7200141306a220d10c80720062802f402210220062802f0022108200641f0036a200641f0026a41086a41d40010d40b1a20084101460d0a200641f8016a200641f0036a41d40010d40b1a20064198036a200641f8016a41d40010d40b1a20064189036a200929030037000020064181036a200a290300370000200641f9026a200b2903003700002006200236029403200641013a00f002200620062903083700f102200d200641f0026a1089072102200ca7450d02200710390c020b200241013a000020022006290308370001200241096a200641106a290300370000200241116a200641186a290300370000200241196a200641206a2903003700000c0a0b200241046a28020021020b0240200141c8006a220a28020022072007417f6a2208200141c0006a220928020022072001413c6a220b2802006b716b4101470d00200b108807200a280200417f6a2108200928020021070b200141c4006a28020020074102746a200236020020092008200741016a71360200200141386a280200220720024d0d03200141306a220b280200200241fc006c6a22022d0000210720022f00012108200241036a2d00002109200641086a200241046a220a41f80010d40b1a200a4100360200200241003a0000200641f8016a200641086a41f80010d40b1a20082009411074722102024002400240024020074101470d0020032802082107200328020421082003280200210920064198066a20064198026a41d80010d40b1a200641f0066a41086a200441086a280200360200200620042902003703f006200641f0026a200120064198066a2003200641f0066a200510c90720062802f0024101460d0320062802f4022104200641c0056a200641f0026a41086a41d80010d40b1a200641e8046a200641c0056a41d80010d40b1a4101210320044101470d01200641f0026a41156a200641086a41156a290000370000200641f0026a41106a200641086a41106a290000370300200641f0026a41086a200641086a41086a290000370300200620062900083703f00220064190036a200641e8046a41d80010d40b1a200641f0036a200641f0026a41f80010d40b1a410021010c020b20064198066a200641086a41d80010d40b1a200641f0066a41086a200441086a280200360200200620042902003703f006200641f0026a200120064198066a2003200641f0066a200510c90720062802f0024101460d0220062802f4022101200641c0056a200641f0026a41086a41d80010d40b1a200641e8046a200641c0056a41d80010d40b1a200641f0036a200641e8046a41d80010d40b1a20014101472101410021030c010b20064188036a2006411d6a29000037000020064183036a200641186a290000370000200641fb026a200641106a290000370000200620062900083700f302200741017621030240024020074101710d0020082003490d08410021040c010b20082003490d08200320084f0d09200920036a2d00004170712107410121040b20064190036a2009200310fb01200641bd036a20073a0000200641bc036a20043a0000200620023b01f002200620024110763a00f2022001200641f0026a10ca07200641f0036a200641e8046a41d80010d40b1a41002103410121010b20064180016a200641f0036a41f80010d40b1a200641f0036a20064180016a41f80010d40b1a200620033a00f002200620023b00f102200620024110763a00f302200641f0026a410472200641f0036a41f80010d40b1a200b200641f0026a1089072102200041086a20013a000020002002360204200041003602000c0a0b20062802f402210120004101360200200020013602040c090b2002200741a8ddc000104b000b2002200741b8ddc000104b000b2002200741c8ddc000103c000b2002200741c8b9c300103c000b2003200841a8ddc000104b000b2003200841b8ddc000104b000b2003200841c8ddc000103c000b200ca7450d00200710390b2000410136020020002002360204200441046a280200450d00200428020010390b20064180076a24000be8761f037f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e017f017e037f017e1f7f230041900c6b2205240020052002200310cb07024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020052d00004101470d0020052d000121034130103822020d010c2a0b200541cc016a2802002106200541c8016a2802002107200541c0016a2903002108200541bc016a2802002109200541b4016a290200210a200541b0016a280200210b200541a8016a290300210c200541a4016a280200210d2005419c016a290200210e20054198016a280200210f20054190016a29030021102005418c016a280200211120054184016a290200211220054180016a2802002113200541f8006a2903002114200541f4006a2802002115200541ec006a2902002116200541e8006a2802002117200541e0006a2903002118200541dc006a2802002119200541d4006a290200211a200541d0006a280200211b200541c8006a290300211c200541c4006a280200211d2005413c6a290200211e200541386a280200211f200541306a29030021202005412c6a2802002121200541246a2902002122200541206a28020021232005411c6a2802002124200541186a2802002102200541146a28020021252005410c6a2902002126200541086a28020021274100212820052802040e050702030401070b200241033a000020022001290000370001200241096a200141086a290000370000200241116a200141106a290000370000200241196a200141186a290000370000200220033a002120004101360200200020023602040c270b200541d8016a2802002129200541d4016a280200212a200541d0016a28020021034102212b4102212c024020254102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200541e00b6a41086a2024360200200520023602e40b200520253602e00b200520054198026a200541e00b6a200410cc072005280204212c20052802004101460d17200541c0056a41186a200541206a290300370300200541c0056a41106a200541186a290300370300200541c0056a41086a200541106a2903003703002005200541086a2903003703c0050b200541a0056a41186a200541c0056a41186a290300370300200541a0056a41106a200541c0056a41106a290300370300200541a0056a41086a200541c0056a41086a290300370300200520052903c0053703a005024020234102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520223702e40b200520233602e00b200520054198026a200541e00b6a200410cc072005280204212b20052802004101460d1820054180066a41186a200541206a29030037030020054180066a41106a200541186a29030037030020054180066a41086a200541106a2903003703002005200541086a290300370380060b200541e0056a41186a20054180066a41186a290300370300200541e0056a41106a20054180066a41106a290300370300200541e0056a41086a20054180066a41086a29030037030020052005290380063703e0054102212541022102024020214102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520203702e40b200520213602e00b200520054198026a200541e00b6a200410cc072005280204210220052802004101460d19200541c0066a41186a200541206a290300370300200541c0066a41106a200541186a290300370300200541c0066a41086a200541106a2903003703002005200541086a2903003703c0060b200541a0066a41186a200541c0066a41186a290300370300200541a0066a41106a200541c0066a41106a290300370300200541a0066a41086a200541c0066a41086a290300370300200520052903c0063703a0060240201f4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201e3702e40b2005201f3602e00b200520054198026a200541e00b6a200410cc072005280204212520052802004101460d1a20054180076a41186a200541206a29030037030020054180076a41106a200541186a29030037030020054180076a41086a200541106a2903003703002005200541086a290300370380070b200541e0066a41186a20054180076a41186a290300370300200541e0066a41106a20054180076a41106a290300370300200541e0066a41086a20054180076a41086a29030037030020052005290380073703e0064102212d410221280240201d4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201c3702e40b2005201d3602e00b200520054198026a200541e00b6a200410cc072005280204212820052802004101460d1b200541c0076a41186a200541206a290300370300200541c0076a41106a200541186a290300370300200541c0076a41086a200541106a2903003703002005200541086a2903003703c0070b200541a0076a41186a200541c0076a41186a290300370300200541a0076a41106a200541c0076a41106a290300370300200541a0076a41086a200541c0076a41086a290300370300200520052903c0073703a0070240201b4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201a3702e40b2005201b3602e00b200520054198026a200541e00b6a200410cc072005280204212d20052802004101460d1c20054180086a41186a200541206a29030037030020054180086a41106a200541186a29030037030020054180086a41086a200541106a2903003703002005200541086a290300370380080b200541e0076a41186a20054180086a41186a290300370300200541e0076a41106a20054180086a41106a290300370300200541e0076a41086a20054180086a41086a29030037030020052005290380083703e0074102212341022124024020194102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520183702e40b200520193602e00b200520054198026a200541e00b6a200410cc072005280204212420052802004101460d1d200541c0086a41186a200541206a290300370300200541c0086a41106a200541186a290300370300200541c0086a41086a200541106a2903003703002005200541086a2903003703c0080b200541a0086a41186a200541c0086a41186a290300370300200541a0086a41106a200541c0086a41106a290300370300200541a0086a41086a200541c0086a41086a290300370300200520052903c0083703a008024020174102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520163702e40b200520173602e00b200520054198026a200541e00b6a200410cc072005280204212320052802004101460d1e20054180096a41186a200541206a29030037030020054180096a41106a200541186a29030037030020054180096a41086a200541106a2903003703002005200541086a290300370380090b200541e0086a41186a20054180096a41186a290300370300200541e0086a41106a20054180096a41106a290300370300200541e0086a41086a20054180096a41086a29030037030020052005290380093703e0084102211f41022121024020154102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520143702e40b200520153602e00b200520054198026a200541e00b6a200410cc072005280204212120052802004101460d1f200541c0096a41186a200541206a290300370300200541c0096a41106a200541186a290300370300200541c0096a41086a200541106a2903003703002005200541086a2903003703c0090b200541a0096a41186a200541c0096a41186a290300370300200541a0096a41106a200541c0096a41106a290300370300200541a0096a41086a200541c0096a41086a290300370300200520052903c0093703a009024020134102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520123702e40b200520133602e00b200520054198026a200541e00b6a200410cc072005280204211f20052802004101460d20200541800a6a41186a200541206a290300370300200541800a6a41106a200541186a290300370300200541800a6a41086a200541106a2903003703002005200541086a2903003703800a0b200541e0096a41186a200541800a6a41186a290300370300200541e0096a41106a200541800a6a41106a290300370300200541e0096a41086a200541800a6a41086a290300370300200520052903800a3703e0094102211b4102211d024020114102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520103702e40b200520113602e00b200520054198026a200541e00b6a200410cc072005280204211d20052802004101460d21200541c00a6a41186a200541206a290300370300200541c00a6a41106a200541186a290300370300200541c00a6a41086a200541106a2903003703002005200541086a2903003703c00a0b200541a00a6a41186a200541c00a6a41186a290300370300200541a00a6a41106a200541c00a6a41106a290300370300200541a00a6a41086a200541c00a6a41086a290300370300200520052903c00a3703a00a0240200f4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200e3702e40b2005200f3602e00b200520054198026a200541e00b6a200410cc072005280204211b20052802004101460d22200541e00a6a41186a200541206a290300370300200541e00a6a41106a200541186a290300370300200541e00a6a41086a200541106a2903003703002005200541086a2903003703e00a0b41022117410221190240200d4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200c3702e40b2005200d3602e00b200520054198026a200541e00b6a200410cc072005280204211920052802004101460d23200541800b6a41186a200541206a290300370300200541800b6a41106a200541186a290300370300200541800b6a41086a200541106a2903003703002005200541086a2903003703800b0b0240200b4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200a3702e40b2005200b3602e00b200520054198026a200541e00b6a200410cc072005280204211720052802004101460d24200541a00b6a41186a200541206a290300370300200541a00b6a41106a200541186a290300370300200541a00b6a41086a200541106a2903003703002005200541086a2903003703a00b0b4102211341022115024020094102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520083702e40b200520093602e00b200520054198026a200541e00b6a200410cc072005280204211520052802004101460d25200541c00b6a41186a200541206a290300370300200541c00b6a41106a200541186a290300370300200541c00b6a41086a200541106a2903003703002005200541086a2903003703c00b0b024020074102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200541800c6a41086a2003360200200520063602840c200520073602800c200520054198026a200541800c6a200410cc072005280204211320052802004101460d26200541e00b6a41186a200541206a290300370300200541e00b6a41106a200541186a290300370300200541e00b6a41086a200541106a2903003703002005200541086a2903003703e00b0b20054180056a41186a2201200541a0056a41186a29030037030020054180056a41106a2204200541a0056a41106a29030037030020054180056a41086a2206200541a0056a41086a290300370300200541e0046a41086a2211200541e0056a41086a290300370300200541e0046a41106a220f200541e0056a41106a290300370300200541e0046a41186a220d200541e0056a41186a290300370300200541c0046a41086a220b200541a0066a41086a290300370300200541c0046a41106a2209200541a0066a41106a290300370300200541c0046a41186a2207200541a0066a41186a290300370300200520052903a00537038005200520052903e0053703e004200520052903a0063703c004200541a0046a41186a222e200541e0066a41186a290300370300200541a0046a41106a222f200541e0066a41106a290300370300200541a0046a41086a2230200541e0066a41086a29030037030020054180046a41086a2231200541a0076a41086a29030037030020054180046a41106a2232200541a0076a41106a29030037030020054180046a41186a2233200541a0076a41186a290300370300200541e0036a41086a2234200541e0076a41086a290300370300200541e0036a41106a2235200541e0076a41106a290300370300200541e0036a41186a2236200541e0076a41186a290300370300200520052903e0063703a004200520052903a00737038004200520052903e0073703e003200541c0036a41186a2237200541a0086a41186a290300370300200541c0036a41106a2238200541a0086a41106a290300370300200541c0036a41086a2239200541a0086a41086a290300370300200541a0036a41186a223a200541e0086a41186a290300370300200541a0036a41106a223b200541e0086a41106a290300370300200541a0036a41086a223c200541e0086a41086a29030037030020054180036a41186a223d200541a0096a41186a29030037030020054180036a41106a223e200541a0096a41106a29030037030020054180036a41086a223f200541a0096a41086a290300370300200520052903a0083703c003200520052903e0083703a003200520052903a00937038003200541e0026a41186a2240200541e0096a41186a290300370300200541e0026a41106a2241200541e0096a41106a290300370300200541e0026a41086a2242200541e0096a41086a290300370300200520052903e0093703e002200541c0026a41186a2243200541a00a6a41186a290300370300200541c0026a41106a2244200541a00a6a41106a290300370300200541c0026a41086a2245200541a00a6a41086a290300370300200520052903a00a3703c00241c00410382203450d272003202c36020020032005290380053702042003202b360224200320052903e0043702282003410c6a2006290300370200200341146a20042903003702002003411c6a2001290300370200200341306a2011290300370200200341386a200f290300370200200341c0006a200d290300370200200320023602482003202536026c200320052903c00437024c200341d4006a200b290300370200200341dc006a2009290300370200200341e4006a2007290300370200200320052903a004370270200341f8006a203029030037020020034180016a202f29030037020020034188016a202e29030037020020032028360290012003202d3602b401200341ac016a2033290300370200200341a4016a20322903003702002003419c016a2031290300370200200320052903800437029401200341d0016a2036290300370200200341c8016a2035290300370200200341c0016a2034290300370200200320052903e0033702b801200320243602d801200341f4016a2037290300370200200341ec016a2038290300370200200341e4016a2039290300370200200320052903c0033702dc01200320233602fc0120034198026a203a29030037020020034190026a203b29030037020020034188026a203c290300370200200320052903a00337028002200320213602a002200341bc026a203d290300370200200341b4026a203e290300370200200341ac026a203f29030037020020032005290380033702a4022003201f3602c402200341e0026a2040290300370200200341d8026a2041290300370200200341d0026a2042290300370200200320052903e0023702c8022003201d3602e80220034184036a2043290300370200200341fc026a2044290300370200200341f4026a2045290300370200200320052903c0023702ec022003201b36028c03200341a8036a200541e00a6a41186a290300370200200341a0036a200541e00a6a41106a29030037020020034198036a200541e00a6a41086a290300370200200320052903e00a37029003200320193602b003200341cc036a200541800b6a41186a290300370200200341c4036a200541800b6a41106a290300370200200341bc036a200541800b6a41086a290300370200200320052903800b3702b403200320173602d403200341f0036a200541a00b6a41186a290300370200200341e8036a200541a00b6a41106a290300370200200341e0036a200541a00b6a41086a290300370200200320052903a00b3702d803200320153602f80320034194046a200541c00b6a41186a2903003702002003418c046a200541c00b6a41106a29030037020020034184046a200541c00b6a41086a290300370200200320052903c00b3702fc032003201336029c04200341b8046a200541e00b6a41186a290300370200200341b0046a200541e00b6a41106a290300370200200341a8046a200541e00b6a41086a290300370200200320052903e00b3702a00441042128200541047220272026a710fb01202a0d03410021020c040b200541047220272026a710fb012002417f4c0d06410121284101210302402002450d00200210382203450d270b2026422088a7212c20032025200210d40b1a200541f8016a41086a200541186a290300370300200541f8016a41106a200541206a290300370300200541f8016a41186a200541286a2903003703002005200541106a2903003703f8012005410c6a280200212a200541086a28020021062005280204212b2002212d0c040b200541047220272026a710fb01200541e00b6a41186a200141186a290000370300200541e00b6a41106a200141106a290000370300200541e00b6a41086a200141086a290000370300200520012900003703e00b200541a00b6a41086a2024360200200520023602a40b200520253602a00b20054198026a200541e00b6a200541a00b6a200410cc07200541c00b6a41086a20054198026a411c6a290200370300200541c00b6a41106a220120054198026a41246a280200360200200520054198026a41146a2902003703c00b200528029c02210302402005280298024101460d0020054198026a41086a290300212220054198026a41106a2802002129200541e0016a41106a2001280200360200200541e0016a41086a200541c00b6a41086a290300370300200541f8016a41086a200541186a290300370300200541f8016a41106a200541206a290300370300200541f8016a41186a200541286a290300370300200520052903c00b3703e0012005200541106a2903003703f8012022422088a7212d2026422088a7212c200541086a28020021062005410c6a280200212a2005280204212b2022a72102410221280c040b200041013602002000200336020420052802044125490d242005410c6a28020010390c240b4102212941022103024020274102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520263702e40b200520273602e00b200520054198026a200541e00b6a200410cc072005280204210320052802004101460d04200541c0056a41186a200541206a290300370300200541c0056a41106a200541186a290300370300200541c0056a41086a200541106a2903003703002005200541086a2903003703c0050b200541a0056a41186a200541c0056a41186a290300370300200541a0056a41106a200541c0056a41106a290300370300200541a0056a41086a200541c0056a41086a290300370300200520052903c0053703a005024020254102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200541e00b6a41086a2024360200200520023602e40b200520253602e00b200520054198026a200541e00b6a200410cc072005280204212920052802004101460d0620054180066a41186a200541206a29030037030020054180066a41106a200541186a29030037030020054180066a41086a200541106a2903003703002005200541086a290300370380060b200541e0056a41186a20054180066a41186a290300370300200541e0056a41106a20054180066a41106a290300370300200541e0056a41086a20054180066a41086a29030037030020052005290380063703e0054102212541022102024020234102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520223702e40b200520233602e00b200520054198026a200541e00b6a200410cc072005280204210220052802004101460d07200541c0066a41186a200541206a290300370300200541c0066a41106a200541186a290300370300200541c0066a41086a200541106a2903003703002005200541086a2903003703c0060b200541a0066a41186a200541c0066a41186a290300370300200541a0066a41106a200541c0066a41106a290300370300200541a0066a41086a200541c0066a41086a290300370300200520052903c0063703a006024020214102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520203702e40b200520213602e00b200520054198026a200541e00b6a200410cc072005280204212520052802004101460d0820054180076a41186a200541206a29030037030020054180076a41106a200541186a29030037030020054180076a41086a200541106a2903003703002005200541086a290300370380070b200541e0066a41186a20054180076a41186a290300370300200541e0066a41106a20054180076a41106a290300370300200541e0066a41086a20054180076a41086a29030037030020052005290380073703e006410221284102212b0240201f4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201e3702e40b2005201f3602e00b200520054198026a200541e00b6a200410cc072005280204212b20052802004101460d09200541c0076a41186a200541206a290300370300200541c0076a41106a200541186a290300370300200541c0076a41086a200541106a2903003703002005200541086a2903003703c0070b200541a0076a41186a200541c0076a41186a290300370300200541a0076a41106a200541c0076a41106a290300370300200541a0076a41086a200541c0076a41086a290300370300200520052903c0073703a0070240201d4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201c3702e40b2005201d3602e00b200520054198026a200541e00b6a200410cc072005280204212820052802004101460d0a20054180086a41186a200541206a29030037030020054180086a41106a200541186a29030037030020054180086a41086a200541106a2903003703002005200541086a290300370380080b200541e0076a41186a20054180086a41186a290300370300200541e0076a41106a20054180086a41106a290300370300200541e0076a41086a20054180086a41086a29030037030020052005290380083703e0074102212d4102212a0240201b4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005201a3702e40b2005201b3602e00b200520054198026a200541e00b6a200410cc072005280204212a20052802004101460d0b200541c0086a41186a200541206a290300370300200541c0086a41106a200541186a290300370300200541c0086a41086a200541106a2903003703002005200541086a2903003703c0080b200541a0086a41186a200541c0086a41186a290300370300200541a0086a41106a200541c0086a41106a290300370300200541a0086a41086a200541c0086a41086a290300370300200520052903c0083703a008024020194102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520183702e40b200520193602e00b200520054198026a200541e00b6a200410cc072005280204212d20052802004101460d0c20054180096a41186a200541206a29030037030020054180096a41106a200541186a29030037030020054180096a41086a200541106a2903003703002005200541086a290300370380090b200541e0086a41186a20054180096a41186a290300370300200541e0086a41106a20054180096a41106a290300370300200541e0086a41086a20054180096a41086a29030037030020052005290380093703e0084102212441022127024020174102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520163702e40b200520173602e00b200520054198026a200541e00b6a200410cc072005280204212720052802004101460d0d200541c0096a41186a200541206a290300370300200541c0096a41106a200541186a290300370300200541c0096a41086a200541106a2903003703002005200541086a2903003703c0090b200541a0096a41186a200541c0096a41186a290300370300200541a0096a41106a200541c0096a41106a290300370300200541a0096a41086a200541c0096a41086a290300370300200520052903c0093703a009024020154102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520143702e40b200520153602e00b200520054198026a200541e00b6a200410cc072005280204212420052802004101460d0e200541800a6a41186a200541206a290300370300200541800a6a41106a200541186a290300370300200541800a6a41086a200541106a2903003703002005200541086a2903003703800a0b200541e0096a41186a200541800a6a41186a290300370300200541e0096a41106a200541800a6a41106a290300370300200541e0096a41086a200541800a6a41086a290300370300200520052903800a3703e0094102212141022123024020134102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520123702e40b200520133602e00b200520054198026a200541e00b6a200410cc072005280204212320052802004101460d0f200541c00a6a41186a200541206a290300370300200541c00a6a41106a200541186a290300370300200541c00a6a41086a200541106a2903003703002005200541086a2903003703c00a0b200541a00a6a41186a200541c00a6a41186a290300370300200541a00a6a41106a200541c00a6a41106a290300370300200541a00a6a41086a200541c00a6a41086a290300370300200520052903c00a3703a00a024020114102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520103702e40b200520113602e00b200520054198026a200541e00b6a200410cc072005280204212120052802004101460d10200541e00a6a41186a200541206a290300370300200541e00a6a41106a200541186a290300370300200541e00a6a41086a200541106a2903003703002005200541086a2903003703e00a0b4102211d4102211f0240200f4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200e3702e40b2005200f3602e00b200520054198026a200541e00b6a200410cc072005280204211f20052802004101460d11200541800b6a41186a200541206a290300370300200541800b6a41106a200541186a290300370300200541800b6a41086a200541106a2903003703002005200541086a2903003703800b0b0240200d4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200c3702e40b2005200d3602e00b200520054198026a200541e00b6a200410cc072005280204211d20052802004101460d12200541a00b6a41186a200541206a290300370300200541a00b6a41106a200541186a290300370300200541a00b6a41086a200541106a2903003703002005200541086a2903003703a00b0b410221194102211b0240200b4102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a29000037030020052001290000370398022005200a3702e40b2005200b3602e00b200520054198026a200541e00b6a200410cc072005280204211b20052802004101460d13200541c00b6a41186a200541206a290300370300200541c00b6a41106a200541186a290300370300200541c00b6a41086a200541106a2903003703002005200541086a2903003703c00b0b0240024020094102460d0020054198026a41186a200141186a29000037030020054198026a41106a200141106a29000037030020054198026a41086a200141086a2900003703002005200129000037039802200520083702840c200520093602800c200520054198026a200541800c6a200410cc072005280204211920052802004101460d01200541e00b6a41186a200541206a290300370300200541e00b6a41106a200541186a290300370300200541e00b6a41086a200541106a2903003703002005200541086a2903003703e00b0b20054180056a41186a2201200541a0056a41186a29030037030020054180056a41106a2204200541a0056a41106a29030037030020054180056a41086a2217200541a0056a41086a290300370300200541e0046a41086a2215200541e0056a41086a290300370300200541e0046a41106a2213200541e0056a41106a290300370300200541e0046a41186a2211200541e0056a41186a290300370300200541c0046a41086a220f200541a0066a41086a290300370300200541c0046a41106a220d200541a0066a41106a290300370300200541c0046a41186a220b200541a0066a41186a290300370300200520052903a00537038005200520052903e0053703e004200520052903a0063703c004200541a0046a41186a2209200541e0066a41186a290300370300200541a0046a41106a222e200541e0066a41106a290300370300200541a0046a41086a222f200541e0066a41086a29030037030020054180046a41086a2230200541a0076a41086a29030037030020054180046a41106a2231200541a0076a41106a29030037030020054180046a41186a2232200541a0076a41186a290300370300200541e0036a41086a2233200541e0076a41086a290300370300200541e0036a41106a2234200541e0076a41106a290300370300200541e0036a41186a2235200541e0076a41186a290300370300200520052903e0063703a004200520052903a00737038004200520052903e0073703e003200541c0036a41186a2236200541a0086a41186a290300370300200541c0036a41106a2237200541a0086a41106a290300370300200541c0036a41086a2238200541a0086a41086a290300370300200541a0036a41186a2239200541e0086a41186a290300370300200541a0036a41106a223a200541e0086a41106a290300370300200541a0036a41086a223b200541e0086a41086a29030037030020054180036a41186a223c200541a0096a41186a29030037030020054180036a41106a223d200541a0096a41106a29030037030020054180036a41086a223e200541a0096a41086a290300370300200520052903a0083703c003200520052903e0083703a003200520052903a00937038003200541e0026a41186a223f200541e0096a41186a290300370300200541e0026a41106a2240200541e0096a41106a290300370300200541e0026a41086a2241200541e0096a41086a290300370300200520052903e0093703e002200541c0026a41186a2242200541a00a6a41186a290300370300200541c0026a41106a2243200541a00a6a41106a290300370300200541c0026a41086a2244200541a00a6a41086a290300370300200520052903a00a3703c00241c0041038222c450d25202c2003360200202c200529038005370204202c2029360224202c20052903e004370228202c410c6a2017290300370200202c41146a2004290300370200202c411c6a2001290300370200202c41306a2015290300370200202c41386a2013290300370200202c41c0006a2011290300370200202c2002360248202c202536026c202c20052903c00437024c202c41d4006a200f290300370200202c41dc006a200d290300370200202c41e4006a200b290300370200202c20052903a004370270202c41f8006a202f290300370200202c4180016a202e290300370200202c4188016a2009290300370200202c202b36029001202c20283602b401202c41ac016a2032290300370200202c41a4016a2031290300370200202c419c016a2030290300370200202c20052903800437029401202c41d0016a2035290300370200202c41c8016a2034290300370200202c41c0016a2033290300370200202c20052903e0033702b801202c202a3602d801202c41f4016a2036290300370200202c41ec016a2037290300370200202c41e4016a2038290300370200202c20052903c0033702dc01202c202d3602fc01202c4198026a2039290300370200202c4190026a203a290300370200202c4188026a203b290300370200202c20052903a00337028002202c20273602a002202c41bc026a203c290300370200202c41b4026a203d290300370200202c41ac026a203e290300370200202c2005290380033702a402202c20243602c402202c41e0026a203f290300370200202c41d8026a2040290300370200202c41d0026a2041290300370200202c20052903e0023702c802202c20233602e802202c4184036a2042290300370200202c41fc026a2043290300370200202c41f4026a2044290300370200202c20052903c0023702ec02202c202136028c03202c41a8036a200541e00a6a41186a290300370200202c41a0036a200541e00a6a41106a290300370200202c4198036a200541e00a6a41086a290300370200202c20052903e00a37029003202c201f3602b003202c41cc036a200541800b6a41186a290300370200202c41c4036a200541800b6a41106a290300370200202c41bc036a200541800b6a41086a290300370200202c20052903800b3702b403202c201d3602d403202c41f0036a200541a00b6a41186a290300370200202c41e8036a200541a00b6a41106a290300370200202c41e0036a200541a00b6a41086a290300370200202c20052903a00b3702d803202c201b3602f803202c4194046a200541c00b6a41186a290300370200202c418c046a200541c00b6a41106a290300370200202c4184046a200541c00b6a41086a290300370200202c20052903c00b3702fc03202c201936029c04202c41b8046a200541e00b6a41186a290300370200202c41b0046a200541e00b6a41106a290300370200202c41a8046a200541e00b6a41086a290300370200202c20052903e00b3702a00441032128024020070d004100212b2006212a0c040b2006417f4c0d050240024020060d004101212b0c010b20061038222b450d260b202b2007200610d40b1a2006212a0c030b20004101360200200020193602040c230b2029417f4c0d030240024020290d00410121020c010b202910382202450d240b2002202a202910d40b1a0b2026422088a7212c200541f8016a41086a200541186a290300370300200541f8016a41106a200541206a290300370300200541f8016a41186a200541286a2903003703002005200541106a2903003703f8012005410c6a280200212a200541086a28020021062005280204212b2029212d0b20002028360204200041186a20052903f801370200200041c8006a20052903e001370200200041c4006a2029360200200041386a2003360200200041146a202a360200200041106a20063602002000410c6a202b360200200041086a202c360200200041306a200541f8016a41186a290300370200200041286a200541f8016a41106a290300370200200041206a200541f8016a41086a290300370200200041d0006a200541e0016a41086a290300370200200041d8006a200541e0016a41106a2802003602002000413c6a202dad4220862002ad84370200200041003602000c200b20004101360200200020033602040c1f0b1034000b20004101360200200020293602040c1d0b20004101360200200020023602040c1c0b20004101360200200020253602040c1b0b200041013602002000202b3602040c1a0b20004101360200200020283602040c190b200041013602002000202a3602040c180b200041013602002000202d3602040c170b20004101360200200020273602040c160b20004101360200200020243602040c150b20004101360200200020233602040c140b20004101360200200020213602040c130b200041013602002000201f3602040c120b200041013602002000201d3602040c110b200041013602002000201b3602040c100b200041013602002000202c3602040c0f0b200041013602002000202b3602040c0e0b20004101360200200020023602040c0d0b20004101360200200020253602040c0c0b20004101360200200020283602040c0b0b200041013602002000202d3602040c0a0b20004101360200200020243602040c090b20004101360200200020233602040c080b20004101360200200020213602040c070b200041013602002000201f3602040c060b200041013602002000201d3602040c050b200041013602002000201b3602040c040b20004101360200200020193602040c030b20004101360200200020173602040c020b20004101360200200020153602040c010b20004101360200200020133602040b200541900c6a24000f0b1032000b925302127f047e23004180056b22062400200641086a200341086a280200360200200620032902003703000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802000e050104000203010b20064198016a2002412c6a29020037030020064190016a200241246a29020037030020064188016a2002411c6a29020037030020064180016a2207200241146a290200370300200641f0006a41086a2002410c6a29020037030020062002290204370370200241346a2108200241386a2109024002402006280274220a4125490d002007280200210a200641f0006a410c6a280200210b0c010b200641f9006a210b0b2002413c6a210c200241356a210d20082d0000210e2009280200210f2006200628027022103602a8012006200b3602a00120062802042111200628020821122006200a3602a4010240200a410174221320106b2214201141017420126b2202200220144b1b2215450d00410021022006280200211602400340201220026a2209410176220820114f0d10201020026a22174101762207200a4f0d11201620086a2d00002208410f71200841f0017141047620094101711b200b20076a2d00002208410f71200841047620174101711b470d012015200241016a2202470d000b201521020b20020d060b20132010470d044184bcc300412a41b0bcc3001035000b4101210720062802042208200628020822094101762202490d0e20064180046a410472200628020020026a200820026b10fb01200641286a41086a20064180046a41186a290300370300200641286a41106a200641a0046a290300370300200641286a41186a200641a8046a290300370300200620064180046a41106a290300370328200941017121022006418c046a280200210820064180046a41086a2802002117200429020421182004280200210c2006280284042103410021090c2a0b200241106a28020021102002410c6a280200210b200241086a280200210a2002280204210202402006280204220941017420062802082208470d0020042802082108410021090240200a450d0020102008470d00200a2004280200201010d70b452109201021080b2004280204211720042802002103024020052802002207450d00200541046a280200450d00200710390b2005200b3602042005200a360200200541086a2010360200410321070c2a0b2008410176220720094f0d0e2003200328020841016a22173602082002200628020020076a2d00002209410f71200941047620084101711b220741246c6a22082d00002109200841023a00000240024020094102470d002003280204220520174101762209490d112006418c046a200328020020096a200520096b10fb01200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a201741017136020041002109200641003a0080042002200741246c6a41046a200141306a20064180046a108907360200200841003a00000c010b20064180046a41096a200841096a29000037000020064180046a41116a200841116a29000037000020064180046a41196a200841196a29000037000020064180046a41206a200841206a280000360000200620093a0080042006200829000137008104200641a8036a41086a200441086a280200360200200620042902003703a803200641d0026a200120064180046a2003200641a8036a200510c70720062802d402211720062802d0024101460d0b200641d0026a41086a2d0000210341002109200841003a00002002200741246c6a41046a2017360200200341ff0171450d090b4103210720102108200b2117200a21030c290b200641a0026a2002412c6a29020037030020064198026a200241246a29020037030020064190026a2002411c6a29020037030020064188026a2217200241146a290200370300200641f8016a41086a2002410c6a290200370300200620022902043703f801200241346a2108200241386a21092002413c6a2107200241c0006a21020240024020062802fc01220a4125490d002017280200210a200641f8016a410c6a280200210b0c010b20064181026a210b0b2008280200210c2009280200210e200728020021132002280200210f200620062802f80122103602d0012006200b3602c80120062802042111200628020821122006200a3602cc01410021020240200a41017420106b2214201141017420126b220d200d20144b1b2215450d00200628020021160340201220026a2209410176220820114f0d11201020026a22174101762207200a4f0d12201620086a2d00002208410f71200841f0017141047620094101711b200b20076a2d00002208410f71200841047620174101711b470d012015200241016a2202470d000b201521020b0240024020022014470d002014200d470d00410021090240200e450d00200f2004280208470d00200e2004280200200f10d70b4521090b200a20104101762202490d1320064180046a410472200b20026a200a20026b10fb01200641a8036a41086a220720064180046a41186a290300370300200641a8036a41106a220b200641a0046a290300370300200641a8036a41186a2211200641a8046a290300370300200620064180046a41106a2903003703a803201041017121022006418c046a280200210820064180046a41086a28020021172004280208210a200429020021182006280284042103024020052802002204450d00200541046a280200450d00200410390b200520133602042005200e360200200541086a200f360200200641286a41086a2007290300370300200641286a41106a200b290300370300200641286a41186a2011290300370300200620062903a8033703280c010b02400240024002400240200220144f0d00200a2010200241016a22176a22094101762208490d18200641d0026a410472200b20086a200a20086b10fb01200620094101713602d002201020026a22094101762208200a4f0d19200b20086a2d0000210841c00410382207450d1a200741023a009c04200741023a00f803200741023a00d403200741023a00b003200741023a008c03200741023a00e802200741023a00c402200741023a00a002200741023a00fc01200741023a00d801200741023a00b401200741023a009001200741023a006c200741023a0048200741023a0024200741023a000020064180046a41306a200641d0026a41286a29030037030020064180046a41286a2203200641d0026a41206a29030037030020064180046a41206a220a200641d0026a41186a29030037030020064180046a41186a2210200641d0026a41106a29030037030020064180046a41106a2205200641d0026a41086a29030037030020064180046a41086a220b20062903d002370300200641c4046a200f360200200641c0046a2013360200200641bc046a200e360200200641b8046a200c360200200641003a008004200641043602840420072008410f71200841f0017141047620094101711b41246c6a2208200141306a221120064180046a108907360204200841003a000020062802042208410174200628020822096b2002470d0120064180046a200641c8016a200210fa01200641286a41086a2010290300370300200641286a41106a200a290300370300200641286a41186a2003290300370300200620052903003703282006418c046a2802002108200b28020021172004280208210a20042902002118200628028404210320062802800421020c020b201220026a2209410176220820114f0d1a2003200220032802086a41016a2207360208200c200628020020086a2d00002202410f71200241047620094101711b220941246c6a22022d00002108200241023a000020084102470d022003280204221720074101762208490d1d2006418c046a200328020020086a201720086b10fb01200641b8046a2004290200370300200641c0046a200441086a280200360200200641013602840420064180046a41086a2007410171360200200641003a008004200c200941246c6a41046a200141306a20064180046a108907360200200241003a00000c030b200920026a220a410176220320084f0d1a2008200920176a22104101762209490d1b2006280200220520036a2d00002117200641a8036a41046a200520096a200820096b10fb01200620104101713602a803200641b0046a200641a8036a41286a29020037030020064180046a41286a2208200641a8036a41206a29020037030020064180046a41206a2209200641a8036a41186a29020037030020064180046a41186a2203200641a8036a41106a29020037030020064180046a41106a2210200641a8036a41086a29020037030020064180046a41086a220520062902a803370300200641b8046a2004290200370300200641c0046a200441086a2802003602002006410136028404200641003a00800420072017410f71201741f00171410476200a4101711b41246c6a2217201120064180046a108907360204201741003a000020064180046a200641c8016a200210fa01200641286a41086a2003290300370300200641286a41106a2009290300370300200641286a41186a2008290300370300200620102903003703282006418c046a28020021082005280200211720062802840421032006280280042102420021180b410021092007210c0c020b20064180046a41096a200241096a29000037000020064180046a41116a200241116a29000037000020064180046a41196a200241196a29000037000020064180046a41206a200241206a280000360000200620083a0080042006200229000137008104200641a8036a41086a200441086a280200360200200620042902003703a803200641d0026a200120064180046a2003200641a8036a200510c70720062802d402210820062802d0024101460d0a200641d0026a41086a2d00002107200241003a0000200c200941246c6a41046a2008360200200741ff0171450d080b200a20104101762202490d1a20064180046a410472200b20026a200a20026b10fb01200641286a41086a20064180046a41186a290300370300200641286a41106a200641a0046a290300370300200641286a41186a200641a8046a290300370300200620064180046a41106a290300370328201041017121022013ad422086200ead8421182006418c046a280200210820064180046a41086a2802002117200628028404210341002109200f210a0b024020062802fc014125490d0020064184026a28020010390b410421070c290b200641a0026a2002412c6a29020037030020064198026a200241246a29020037030020064190026a2002411c6a29020037030020064188026a2207200241146a290200370300200641f8016a41086a2002410c6a290200370300200620022902043703f8012002413c6a2108200241386a2109200241346a21020240024020062802fc01220d4125490d002007280200210a200641f8016a410c6a280200210b0c010b20064181026a210b200d210a0b2008280200210e200928020021132002280200210f410021020240200a41017420062802f80122106b220c20062802042211410174200628020822126b22142014200c4b1b2215450d00200628020021160340201220026a2209410176220820114f0d1b201020026a22174101762207200a4f0d1c201620086a2d00002208410f71200841f0017141047620094101711b200b20076a2d00002208410f71200841047620174101711b470d012015200241016a2202470d000b201521020b024002402002200c470d00200c2014470d00410021020240200e2004280208470d00200f2004280200200e10d70b4521020b024020052802002208450d00200541046a280200450d00200810390b200520133602042005200f360200200541086a200e360200024020020d00200620103602800420064180046a410472210802400240200d4125490d0020064188026a280200210d20064184026a28020021020c010b20064181026a21020b4100210920064180046a41086a220741003a00002006410036028404200820022002200d6a10cd07200641286a41086a20064180046a41186a290300370300200641286a41106a200641a0046a290300370300200641286a41186a200641a8046a290300370300200620064180046a41106a2903003703282006418c046a280200210820072802002117200429020421182004280200210c20062802840421032006280280042102410121070c020b200620103602800420064180046a410472210802400240200d4125490d0020064188026a280200210d20064184026a28020021020c010b20064181026a21020b20064180046a41086a220941003a00002006410036028404200820022002200d6a10cd07200641286a41086a20064180046a41186a290300370300200641286a41106a200641a0046a290300370300200641286a41186a200641a8046a290300370300200620064180046a41106a2903003703282006418c046a280200210820092802002117200429020421182004280200210c2006280284042103200628028004210241012107410121090c010b02402002200c4f0d0041c00410382208450d15200841023a009c04200841023a00f803200841023a00d403200841023a00b003200841023a008c03200841023a00e802200841023a00c402200841023a00a002200841023a00fc01200841023a00d801200841023a00b401200841023a009001200841023a006c200841023a0048200841023a0024200841023a0000201020026a22074101762217200a4f0d1d200a200741016a22104101762209490d1e200b20176a2d00002117200641a8036a41046a200b20096a200a20096b10fb01200620104101713602a80320064180046a41306a200641a8036a41286a29020037030020064180046a41286a220b200641a8036a41206a29020037030020064180046a41206a2211200641a8036a41186a29020037030020064180046a41186a220a200641a8036a41106a221229020037030020064180046a41106a2210200641a8036a41086a221529020037030020064180046a41086a221620062902a803370300200641c0046a2214200e360200200641bc046a220c201336020020064180046a41386a200f360200200641013602840441002109200641003a00800420082017410f71201741f0017141047620074101711b41246c6a2207200141306a20064180046a108907360204200741003a000020064180046a2006200210fa01200641c8006a41086a22022006418c046a2217280200360200200641f0006a41086a2207200a290300370300200641f0006a41106a220d2011290300370300200641f0006a41186a2211200b29030037030020062006290284043703482006201029030037037020062006280280043602ac03200641043602a8032015200629034837030020122002280200360200200641a8036a41386a4100360200200641a8036a41346a2008360200200641a8036a41146a2006290370370200200641a8036a411c6a2007290300370200200641a8036a41246a200d290300370200200641a8036a412c6a2011290300370200200641a0016a41086a200441086a280200360200200620042902003703a00120064180046a2001200641a8036a2003200641a0016a200510c907200641d0026a41086a220520064180046a41246a290200370300200641d0026a41106a220b20064180046a412c6a290200370300200641d0026a41186a221120064180046a41346a290200370300200620064180046a411c6a2902003703d00220162802002107201728020021022010280200210320064180046a41146a2802002117200a2802002108200c280200210c20142903002118200641c8046a280200210a20062802840421102006280280042104200641b0016a41106a2212200641dc046a280200360200200641b0016a41086a2215200641d4046a2902003703002006200641cc046a2902003703b00120044101460d06200641c8016a41186a20112903002219370300200641c8016a41106a200b290300221a370300200641c8016a41086a2005290300221b370300200641d8006a41086a22042015290300370300200641d8006a41106a22102012280200360200200641286a41086a201b370300200641286a41106a201a370300200641286a41186a2019370300200620062903d00222193703c801200620062903b00137035820062019370328200641106a41106a2010280200360200200641106a41086a2004290300370300200620062903583703100c010b200a20104101762202490d1e20064180046a410472200b20026a200a20026b10fb01200620104101713602800441c00410382202450d14200241023a009c04200241023a00f803200241023a00d403200241023a00b003200241023a008c03200241023a00e802200241023a00c402200241023a00a002200241023a00fc01200241023a00d801200241023a00b401200241023a009001200241023a006c200241023a0048200241023a0024200241023a0000200641d0026a41086a220820064180046a41086a2209290300370300200641d0026a41106a220720064180046a41106a2217290300370300200641d0026a41186a220a20064180046a41186a2210290300370300200641d0026a41206a220b20064180046a41206a290300370300200641d0026a41286a221120064180046a41286a29030037030020062006290380043703d002200641a8036a410c6a2008290300370200200641a8036a41146a2007290300370200200641a8036a411c6a200a290300370200200641a8036a41246a200b290300370200200641a8036a412c6a2011290300370200200641a8036a41c0006a200e360200200641a8036a413c6a2013360200200641e0036a200f360200200641a8036a41346a2002360200200641043602a803200620062903d0023702ac03200641a0016a41086a200441086a280200360200200620042902003703a00120064180046a2001200641a8036a2003200641a0016a200510c907200641c8016a41086a220420064180046a41246a290200370300200641c8016a41106a220520064180046a412c6a290200370300200641c8016a41186a220b20064180046a41346a290200370300200620064180046a411c6a2902003703c8012009280200210720064180046a410c6a28020021022017280200210320064180046a41146a28020021172010280200210820064180046a413c6a280200210c20064180046a41c0006a2903002118200641c8046a280200210a20062802840421102006280280042109200641b0016a41106a2211200641dc046a280200360200200641b0016a41086a2212200641d4046a2902003703002006200641cc046a2902003703b00120094101460d1f200641f0006a41186a200b2903002219370300200641f0006a41106a2005290300221a370300200641f0006a41086a2004290300221b370300200641d8006a41086a22092012290300370300200641d8006a41106a22042011280200360200200641286a41086a201b370300200641286a41106a201a370300200641286a41186a2019370300200620062903c8012219370370200620062903b00137035820062019370328200641106a41106a2004280200360200200641106a41086a200929030037030020062006290358370310410021090b20062802fc014125490d2820064184026a28020010390c280b20104101762202200a4f0d1e200b20026a2d0000210841c00410382202450d12200241023a009c04200241023a00f803200241023a00d403200241023a00b003200241023a008c03200241023a00e802200241023a00c402200241023a00a002200241023a00fc01200241023a00d801200241023a00b401200241023a009001200241023a006c200241023a0048200241023a0024200241023a00000240024020144101470d00200641a8036a41026a200d41026a2d00003a000020064180046a41086a200c41086a29020037030020064180046a41106a200c41106a29020037030020064180046a41186a200c41186a2802003602002006200d2f00003b01a8032006200c290200370380040c010b200a201041016a22074101762209490d20200641ac036a200b20096a200a20096b10fb01200620074101713602a80320064180046a41306a200641a8036a41286a29020037030020064180046a41286a200641a8036a41206a29020037030020064180046a41206a200641a8036a41186a29020037030020064180046a41186a200641a8036a41106a29020037030020064180046a41106a200641a8036a41086a29020037030020064180046a41086a20062902a803370300200641b9046a200d2f00003b0000200641bb046a200d41026a2d00003a0000200641c0046a200c290200370300200641c8046a200c41086a290200370300200641d0046a200c41106a290200370300200641d8046a200c41186a280200360200200641bc046a200f360200200641b8046a200e3a000020064102360284044100210e200641003a008004200141306a20064180046a108907210f0b20022008410f71200841047620104101711b41246c6a2208200e3a0000200820062f01a8033b00012008200f3602042008200629038004370208200841036a200641aa036a2d00003a0000200841106a20064180046a41086a2207290300370200200841186a20064180046a41106a2217290300370200200841206a20064180046a41186a220828020036020041002109200641a8036a41086a4100360200200620023602ac03200641033602a803200641d8006a41086a200441086a2802003602002006200429020037035820064180046a2001200641a8036a2003200641d8006a200510c907200641d0026a41086a221020064180046a41246a290200370300200641d0026a41106a2205200641ac046a290200370300200641d0026a41186a220b200641b4046a29020037030020062006419c046a2902003703d002200728020021072006418c046a28020021022017280200210320064194046a280200211720082802002108200641bc046a280200210c200641c0046a2903002118200641c8046a280200210a20062802840421112006280280042104200641c8016a41106a2212200641dc046a280200360200200641c8016a41086a2215200641d4046a2902003703002006200641cc046a2902003703c80120044101460d01200641f8016a41186a200b2903002219370300200641f8016a41106a2005290300221a370300200641f8016a41086a2010290300221b370300200641b0016a41086a22042015290300370300200641b0016a41106a22102012280200360200200641286a41086a201b370300200641286a41106a201a370300200641286a41186a2019370300200620062903d00222193703f801200620062903c8013703b00120062019370328200641106a41106a2010280200360200200641106a41086a2004290300370300200620062903b0013703100c250b0240024020022014460d00200a201020026a22094101762208490d21200641c8016a41046a200b20086a200a20086b10fb012003200328020820026a360208200620094101713602c801200641b4036a2209200641c8016a41086a290200370200200641bc036a200641c8016a41106a290200370200200641c4036a200641c8016a41186a290200370200200641cc036a200641c8016a41206a290200370200200641d4036a200641c8016a41286a290200370200200641dc036a200e3a000041022107200641023602a803200641df036a200d41026a2d00003a0000200620062902c8013702ac032006200d2f00003b00dd03200641e0036a200f360200200641e4036a200c290200370200200641ec036a200c41086a290200370200200641f4036a200c41106a290200370200200641fc036a200c41186a280200360200200641b0016a41086a200441086a280200360200200620042902003703b00120064180046a2001200641a8036a2003200641b0016a200510c90720062802840421172006280280042108200641d0026a20064180046a41086a41d80010d40b1a20084101460d01200641f8016a200641d0026a41d80010d40b1a200641a8036a200641a0016a200210fa0120064180046a410472200641f8016a41d80010d40b1a4100210c200641003a008004200141306a20064180046a1089072102200641286a41086a200641a8036a41186a290300370300200641286a41106a200641a8036a41206a290300370300200641286a41186a200641a8036a41286a2903003703002006200641a8036a41106a2903003703282002ad2118200641a8036a41086a28020021172009280200210820062802a803210220062802ac032103410021090c260b2003200328020820146a36020820064180046a41086a200c29020037030020064180046a41106a200c41086a29020037030020064180046a41186a200c41106a290200370300200641a0046a200c41186a2802003602002006200e3a0080042006200f360284042006200d2f00003b0081042006200d41026a2d00003a008304200641a8036a41086a200441086a280200360200200620042902003703a803200641d0026a200120064180046a2003200641a8036a200510c70720062802d4022107024020062802d0024101460d00200a20104101762202490d22200641d0026a41086a2d0000210820064180046a410472200b20026a200a20026b10fb01200641a8036a41186a200641a8046a2903002218370300200641a8036a41106a200641a0046a2903002219370300200641286a41086a20064180046a41186a290300370300200641286a41106a2019370300200641286a41186a2018370300200620064180046a41106a29030037032820104101712102200841ff01714521092006418c046a280200210820064180046a41086a280200211720062802840421032007ad2118410221074100210c0c260b20004101360200200020073602040c020b20004101360200200020173602040c010b20004101360200200020113602040b20062802744125490d25200641fc006a28020010390c250b20004101360200200020103602040c200b200a20104101762202490d1d20064184046a200b20026a200a20026b10fb01200041c8006a200f360200200041c4006a2013360200200041c0006a200e3602002000413c6a200c36020020004281808080c000370204200041146a20064188046a2902003702002000411c6a20064190046a290200370200200041246a20064198046a2902003702002000412c6a200641a0046a290200370200200041346a200641a8046a29020037020020062010410171360280042000410c6a200629028004370200200041003602000c1e0b2000428080808010370200200041186a2010360200200041146a200b360200200041106a200a3602002000410c6a2002360200200041086a41033602000c220b20004101360200200020083602040240200e450d002013450d00200e10390b200c10390c1c0b20004101360200200020173602040240200a450d00200b450d00200a10390b200210390c200b2008201141d4cbc400103c000b2007200a41d4cbc400103c000b2002200841f8dcc0001054000b2007200941d4cbc400103c000b2009200541f8dcc0001054000b2008201141d4cbc400103c000b2007200a41d4cbc400103c000b2002200a41f8dcc0001054000b2008200a41f8dcc0001054000b2008200a41d4cbc400103c000b1032000b2008201141d4cbc400103c000b2003200841d4cbc400103c000b2009200841f8dcc0001054000b2008201741f8dcc0001054000b2002200a41f8dcc0001054000b2008201141d4cbc400103c000b2007200a41d4cbc400103c000b2017200a41d4cbc400103c000b2009200a41f8dcc0001054000b2002200a41f8dcc0001054000b20004101360200200020103602040c060b2002200a41d4cbc400103c000b2009200a41f8dcc0001054000b2008200a41f8dcc0001054000b2002200a41f8dcc0001054000b2002200a41f8dcc0001054000b20062802fc014125490d0420064184026a28020010390c040b20062802fc014125490d0320064184026a28020010390c030b20062802744125490d01200641fc006a28020010390c010b0b20002009360204200041186a2008360200200041146a2017360200200041106a20033602002000410c6a2002360200200041086a20073602002000411c6a2006290328370200200041c8006a200a360200200041c0006a20183702002000413c6a200c360200200041cc006a2006290310370200200041246a200641286a41086a2903003702002000412c6a200641286a41106a290300370200200041346a200641286a41186a290300370200200041d4006a200641106a41086a290300370200200041dc006a200641106a41106a280200360200200041003602000b20064180056a24000b940b03017f057e197f230041e0016b22022400200241e8006a200141d00010d40b1a200241c0016a41186a200029031820002903088522033703002002200029031022043703c801200241e8006a41186a290300210520022004200029030022068522073703d001200241c8006a200320058542002007200229037885420010d30b200241d8006a2003200241e8006a41086a2903008542002007200229036885420010d30b20022004200241d8006a41086a2903002002290358857c2004200241c8006a41086a2903002002290348857c200642adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217893703c00120024188016a200241c0016a10ce0702400240200241b4016a2d000022080d00200241186a20022903c001420042adfed5e4d485fda8d800420010d30b200241186a41086a29030020022903188521040c010b200241386a20022903c001420185420042adfed5e4d485fda8d800420010d30b200241286a200241386a41086a290300200229033885200241b5016a31000085420042adfed5e4d485fda8d800420010d30b200241286a41086a29030020022903288521040b200241086a20022903c80142002004420010d30b200041246a2802002209200041206a220a280200220b200241106a290300200229030885200489a7220c71220d6a280000220e200c411976220f41818284086c2210732211417f73201141fffdfb776a71418081828478712112200d41046a200b71211341042114200d2115200e2111024002400240024003402013211620120d012011201141017471418081828478710d022010200920166a2800002211732212417f73201241fffdfb776a71418081828478712112200b201620146a41046a712113201441046a2114201621150c000b0b2012417f6a201271211320152012684103766a2117200241e8006a41256a211820024194016a280200211920024190016a280200211a200228028801211b200241e8006a41cd006a2d000041ff0171211c03400240200241e8006a20094100200b2017716b41d0006c6a221241b07f6a221d412010d70b0d00201241506a211e201a211f201921170240201b41254f0d002018211f201b21170b02400240201e28020022204125490d002012415c6a2802002120201241586a280200211e0c010b201e41056a211e0b20172020470d00201f201e201710d70b0d0020082012417c6a2d0000470d002008450d03201c201d41cd006a2d000041ff0171460d030b024003402016211220130d012011201141017471418081828478710d032010200920126a2800002211732216417f73201641fffdfb776a71418081828478712113200b201220146a41046a712116201441046a2114201221150c000b0b20152013684103766a2117201221162013417f6a20137121130c000b0b200220003602bc014104211102400340200e4180818284787122160d01200d20116a2116201141046a211120092016200b71220d6a280000210e0c000b0b02402009201668410376200d6a200b7122116a2c000022164100480d0020092009280200418081828478716841037622116a2d000021160b200041286a280200211402402016410171220d450d0020140d00200241c0016a200a200241bc016a10cf072000280220220b200c712116200041246a28020021094104211103402016221420116a200b712116201141046a2111200920146a28000041808182847871220e450d000b02402009200e6841037620146a200b7122116a2c00004100480d002009280200418081828478716841037621110b200028022821140b20002014200d6b360228200920116a200f3a00002011417c6a200b7120096a41046a200f3a00002009410020116b41d0006c6a41b07f6a200141d00010d40b1a2000412c6a2211201128020041016a3602000c010b201b4125490d00201a10390b200241e0016a24000b9a1103027f027e0c7f23004190086b2203240041002104200341003602880520032002360284052003200136028005420321050240024020020d0042002106410021070c010b41012107200341013602880542002106024020012d000022080d00420021050c010b0240024002400240024002400240024002400240200841c00171220941c001460d0002402009418001460d00200941c000470d0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d0320032007360288050240200120076a417f6a2d0000220941ff01460d00200920086b21080c0c0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c0a0b2008413f712208413f470d05410221074141210803402007417f6a20024f0d0320032007360288050240200120076a417f6a2d0000220941ff01460d00200920086b21080c0a0b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c080b2008413f712208413f470d05410221074141210803402007417f6a20024f0d0320032007360288050240200120076a417f6a2d0000220941ff01460d00200920086b21080c080b200841817e6a2108200741016a2207418302470d000b41ffff03210841820221070c060b2007417f6a21070c080b2007417f6a21070c070b2007417f6a21070c060b410121070c040b410121070c020b410121070b2008ad422086428002842106420121050c020b2008ad4220862106420121050c010b2008ad4220862106420221050b2006422088a7210a410121094101210802400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402005200684a741ff01710e040200010a020b0240200a410171220b450d00200720024f0d0441002108200120076a2d0000410f4b0d0a0b2007200a41016a4101766a220c20024b22080d082003200c3602880520080d08200c41026a220820024b0d082003200836028805200c417e4f0d0a2001200c6a2f000021044100210a4100210d0240200642800283500d00200341106a20034180056a10ca0a20032802100d0941012108200328028805220e20032802146a220f2003280284054b0d0a2003200f360288054101210d0b2003410236028408200341023602f807200341023602ec07200341023602e007200341023602d407200341023602c807200341023602bc07200341023602b007200341023602a40720034102360298072003410236028c072003410236028007200341023602f406200341023602e806200341023602dc06200341023602d006200341d0066a2108200441ffff03712110034002402010200a410f7176410171450d00200341086a20034180056a10ca0a20032802080d0a2003280288052211200328020c22126a22042003280284054b0d0a200841086a2004360200200841046a20113602002008201241204736020020032004360288050b2008410c6a2108200a41016a220a4110470d000b200341c0036a200341d0066a41c00110d40b1a410421040c010b0240200a410171220b450d00200720024f0d0241002108200120076a2d0000410f4b0d090b2007200a41016a4101766a220c20024b0d072003200c36028805200341186a20034180056a10ca0a20032802180d0741012108200328028805220d200328021c6a220e2003280284054b0d082003200e36028805410121040b20034180026a200341c0036a41c00110d40b1a200341206a410c6a200b360200200341206a41086a200c36020020032007360224200341206a411c6a20034180026a41c00110d40b1a200341386a200f360200200341346a200e360200200341306a200d3602002003200436022020040e050304020205030b2007200241d496ce00103c000b2007200241e496ce00103c0b000b41002109200041003602040c0d0b200c2007490d04200c20024b0d05200e200d490d06200e20024b0d0720004101360204200041186a200e200d6b360200200041146a2001200d6a360200200041106a200b3602002000410c6a200c20076b360200200041086a200120076a360200410021090c0c0b2003410236028408200341023602f807200341023602ec07200341023602e007200341023602d407200341023602c807200341023602bc07200341023602b007200341023602a40720034102360298072003410236028c072003410236028007200341023602f406200341023602e806200341023602dc06200341023602d0064100210803404102210a0240200341206a20086a2209411c6a22122802004102460d00200941246a2802002104200941206a28020021090240024020122802004101470d0020042009490d0b4101210a200420024d0d012004200241b8dec000104b000b20042009490d0b4100210a200420024b0d0c0b200120096a2111200420096b21040b200341d0066a20086a2209200a360200200941086a2004360200200941046a20113602002008410c6a220841c001460d0b0c000b0b410121080b20034180026a200341c0036a41c00110d40b1a200020083a00010c090b200c200841c496ce001055000b2007200c41acdfc0001055000b200c200241acdfc000104b000b200d200e41bcdfc0001055000b200e200241bcdfc000104b000b2009200441b8dec0001055000b2009200441c8dec0001055000b2004200241c8dec000104b000b02400240200d4101460d00410021080c010b200f200e490d02200f20024b0d03200f200e6b21092001200e6a21080b200c2007490d03200c20024b0d04200041106a200b3602002000410c6a200c20076b360200200041086a200120076a360200200041146a200341d0066a41c00110d40b1a200041d8016a2009360200200041d4016a200836020020004104360204410021090b200020093a000020034190086a24000f0b200e200f41ccdfc0001055000b200f200241ccdfc000104b000b2007200c41acdfc0001055000b200c200241acdfc000104b000bfd0601047f230041f0026b22042400200241086a280200210520022802042106024002400240024002400240024020022802004101470d00200441d0016a41186a200141186a290000370300200441d0016a41106a200141106a290000370300200441d0016a41086a200141086a290000370300200420012900003703d001200441f0016a200441d0016a20062005200310c80720042802f401210120042802f0012102200441f8006a200441f0016a41086a41d40010d40b1a20024101460d05200441246a200441f8006a41d40010d40b1a200441f8016a200441246a41d40010d40b1a41002105200441003a00f001200420013602f4012003200441f0016a10890721020c010b0240024020054120460d002005417f4c0d040240024020050d00410121020c010b200510382202450d060b20022006200510d40b2106413010382202450d05200241043a00002002200536002c200220053600282002200636002420022001290000370001200241096a200141086a290000370000200241116a200141106a290000370000200241196a200141186a2900003700000c010b200441246a41026a200641026a2d00003a0000200441f8016a2006410f6a29000037030020044180026a200641176a29000037030020044188026a2006411f6a2d00003a0000200420062f00003b0124200420062900073703f001200628000321020b200441d0016a41026a2201200441246a41026a2d00003a0000200441f8006a41086a2206200441f0016a41086a290300370300200441f8006a41106a2203200441f0016a41106a290300370300200441f8006a41186a2207200441f0016a41186a2d00003a0000200420042f01243b01d001200420042903f00137037820054120470d01200441206a41026a20012d00003a0000200441086a2006290300370300200441106a2003290300370300200441186a20072d00003a0000200420042f01d0013b012020042004290378370300410121050b200020053a0004200041003602002000410c6a2004290300370200200041056a20042f01203b0000200041086a2002360200200041246a200441186a2802003602002000411c6a200441106a290300370200200041146a200441086a290300370200200041076a200441226a2d00003a00000c040b20004101360200200020023602040c030b1034000b1032000b20004101360200200020013602040b200441f0026a24000b9b0301087f230041106b2203240020032000200220016b10f9010240024020032802004101470d00200341086a2802000d0141f8d2cd004111418cd3cd001035000b02400240200028020022044125490d002000410c6a22052802002106200041086a28020021070c010b200041056a21072004210620002105412421040b024002400240200620044f0d00034020022001460d02200720066a20012d00003a0000200141016a21012004200641016a2206470d000b200421060b2005200636020020012002460d012000410c6a2108200041056a2109034002400240200028020022074125490d00200028020c210620002802082105200821040c010b200721062000210420092105412421070b20012d0000210a024020062007470d0020032000410110f901024020032802004101470d00200341086a2802000d0541f8d2cd004111418cd3cd001035000b200028020c210620002802082105200821040b200520066a200a3a00002004200428020041016a3602002002200141016a2201470d000c020b0b200520063602000b200341106a24000f0b1032000bfd0404027f027e017f027e230041f0006b2202240002400240200028020022034125490d002000410c6a2802002103200041086a28020021000c010b200041056a21000b200241e0006a20012903002003ad220485420042adfed5e4d485fda8d800420010d30b2001200241e8006a29030020022903608520047c42adfed5e4d485fda8d8007e2204370300024002400240024020034109490d00200341104d0d01200241106a200141186a2903002205200320006a41706a220641086a29000085420020012903102207200629000085420010d30b20012903082208200241106a41086a2903002002290310857c2004854217892104034020022005200041086a2900008542002007200029000085420010d30b200041106a21002008200241086a2903002002290300857c2004854217892104200341706a220341104b0d000b200120043703000c030b0240200341014b0d002003450d03200241d0006a2004200031000085420042adfed5e4d485fda8d800420010d30b2001200241d8006a2903002002290350853703000c030b200341034b0d01200241c0006a200320006a417f6a310000422086200033000084200485420042adfed5e4d485fda8d800420010d30b2001200241c8006a2903002002290340853703000c020b200241206a200141186a290300200320006a41786a2900008542002001290310200029000085420010d30b20012001290308200241286a2903002002290320857c2004854217893703000c010b200241306a200141186a290300200320006a417c6a3500008542002001290310200035000085420010d30b20012001290308200241386a2903002002290330857c2004854217893703000b200241f0006a24000bbb1307107f017e017f067e047f017e017f23004180026b22032400024002400240200128020c220441016a22052004490d00200520012802002206200641016a220741037641076c20064108491b22084101764b0d01200141046a28020021094100210a410021050340024002400240200a4101710d00200520074f0d010c020b200541036a220a2005490d00200a2105200a2007490d010b02400240024020074104490d00200920076a20092800003600000c010b200941046a2009200710d50b1a2007450d010b2002280200210b200341e0016a41186a210c410021050340024020092005220d6a220e2d0000418001470d0020094100200d6b41d0006c6a220541406a210f200541706a21072005417c6a2110200541506a2111200541b07f6a22122900002113201241086a221429000021150340200c200b290318200b2903088522163703002003200b29031022173703e801200f41086a290000211820032017200b290300221985221a3703f001200341b0016a20162018854200201a200f29000085420010d30b200341a0016a201520168542002013201a85420010d30b20032017200341a0016a41086a29030020032903a001857c2017200341b0016a41086a29030020032903b001857c201942adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217893703e0012011200341e0016a10ce0720032903e00121170240024020102d00000d00200341f0006a2017420042adfed5e4d485fda8d800420010d30b200341f0006a41086a29030020032903708521170c010b20034190016a2017420185420042adfed5e4d485fda8d800420010d30b20034180016a20034190016a41086a29030020032903900185201031000185420042adfed5e4d485fda8d800420010d30b20034180016a41086a2903002003290380018521170b200341e0006a20032903e80142002017420010d30b41002105200341e0006a41086a2903002003290360852017892217a7221b210a0340200541046a2205200a20067122026a210a200920026a28000041808182847871221c450d000b02402009201c6841037620026a20067122056a2c00004100480d002009280200418081828478716841037621050b024020052006201b71220a6b200d200a6b7320067141034b0d00200e2017a741197622053a0000200d417c6a20067120096a41046a20053a00000c020b200920056a220a2d00002102200a2017a7411976221c3a00002005417c6a20067120096a41046a201c3a00000240200241ff01470d00200e41ff013a0000200d417c6a20067120096a41046a41ff013a00002009410020056b41d0006c6a41b07f6a201241d00010d40b1a0c020b2009410020056b41d0006c6a220a41506a2205290200211720052011290200370200200541086a220229020021162002201141086a221c290200370200200541106a2202290200211a2002201141106a221b290200370200200541186a220529020021182005201141186a2202290200370200200a41b07f6a2205290200211320052012290200370200200541186a221d2902002119201d201241186a221e290200370200200541106a221d290200211f201d201241106a2220290200370200200541086a2205290200211520052014290200370200201c2016370200201b201a37020020022018370200201420153702002020201f370200201e20193702002012201337020020112017370200200a41706a220541086a220a2902002117200a200741086a2202290200370200200529020021162005200729020037020020072016370200200220173702000c000b0b200d41016a2105200d2006470d000b0b200041003602002001200820046b3602080c040b200920056a220a200a280200220a410776417f73418182840871200a41fffefdfb07726a3602004101210a200541016a21050c000b0b4180d2c400411c419cd2c4001035000b024002400240024002402005200841016a220a2005200a4b1b22050d0041e4a2c00021094100211c410021100c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d02417f200541037441076e417f6a677641016a21050b2005ad42d0007e2217422088a70d022017a7220a200541046a221c6a2209200a490d02200910382209450d032009200a6a220941ff01201c10d60b1a2005417f6a221c200541037641076c201c4108491b21100b200141046a280200222041046a210b202020076a210f2020280200417f734180818284787121052002280200211b200341f8016a211e2020211203400240024020050d0002400340200b200f4f0d01201241c07d6a2112200b2802002105200b41046a220a210b2005418081828478712205418081828478460d000b2005418081828478732205417f6a200571211d200a210b0c020b2001201c360200200041003602002001201020046b360208200141046a20093602002006450d0620202007ad42d0007ea76b10390c060b2005417f6a200571211d0b201e201b290318201b2903088522163703002003201b29031022173703e8012003201b290300221a3703e00120032017201a8522133703f001200341d0006a2016201241002005684103766b41d0006c6a220541406a220a41086a2900008542002013200a29000085420010d30b200341c0006a2016200541b07f6a221441086a2900008542002013201429000085420010d30b20032017200341c0006a41086a2903002003290340857c2017200341d0006a41086a2903002003290350857c201a42adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217893703e001200541506a200341e0016a10ce07024002402005417c6a22052d00000d00200341106a20032903e001420042adfed5e4d485fda8d800420010d30b200341106a41086a29030020032903108521170c010b200341306a20032903e001420185420042adfed5e4d485fda8d800420010d30b200341206a200341306a41086a290300200329033085200531000185420042adfed5e4d485fda8d800420010d30b200341206a41086a29030020032903208521170b200320032903e80142002017420010d30b200341086a2903002003290300852017892217a721054100210a0340200a41046a220a2005201c7122026a2105200920026a280000418081828478712211450d000b0240200920116841037620026a201c7122056a2c00004100480d002009280200418081828478716841037621050b200920056a2017a7411976220a3a00002005417c6a201c7120096a41046a200a3a00002009410020056b41d0006c6a41b07f6a201441d00010d40b1a201d21050c000b0b4180d2c400411c419cd2c4001035000b4180d2c400411c419cd2c4001035000b1032000b20034180026a24000b13002000411736020420004198c0c3003602000ba52603087f017e0d7f230041e0016b2201240020014198016a41186a2202420037030020014198016a41106a2203420037030020014198016a41086a220442003703002001420037039801200141b8016a41c7e5c000410610cb012004200141b8016a41086a2205290000370300200120012900b80137039801200141b8016a41f484c400410e10cb0120022005290000370300200320012900b80137030020014198016a412010e0012002420037030020034200370300200442003703002001420037039801200141b8016a41c7e5c000410610cb0120042005290000370300200120012900b80137039801200141b8016a41a880c400411010cb0120022005290000370300200320012900b80137030020014198016a412010e0012002420037030020034200370300200442003703002001420037039801200141b8016a41c7e5c000410610cb0120042005290000370300200120012900b80137039801200141b8016a419081c400410610cb0120022005290000370300200320012900b801370300200141106a20014198016a412010ce0320012802142106200128021021072002420037030020034200370300200442003703002001420037039801200141b8016a41c7e5c000410610cb0120042005290000370300200120012900b80137039801200141b8016a41b081c400410a10cb0120022005290000370300200320012900b801370300200141b8016a20014198016a41201085040240024020012d00b8014101460d00200141186a41186a4200370300200141186a41106a4200370300200141186a41086a4200370300200142003703180c010b200141186a41186a200141d1016a290000370300200141186a41106a200141c9016a290000370300200141186a41086a200141c1016a290000370300200120012900b9013703180b200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141b8016a41c7e5c000410610cb012002200141b8016a41086a2204290000370300200120012900b80137039801200141b8016a41c481c400410610cb01200341086a2004290000370000200320012900b801370000200141b8016a20014198016a10d2070240024020012802b80122020d002001420037023c200141002802d8974e3602380c010b200120012902bc0137023c200120023602380b200141b0016a4200370300200141a8016a420037030020014198016a41086a220242003703002001420037039801200141b8016a41c7e5c000410610cb012002200141b8016a41086a2204290000370300200120012900b80137039801200141b8016a41ccffc300410e10cb01200341086a2004290000370000200320012900b801370000200141086a20014198016a412010ce03200128020c210241002103024020012802084101470d0020014198016a412010e001410121030b024002400240024002400240024002402002410020031b2208ad420c7e2209422088a70d002009a72202417f4c0d004104210302402002450d00200210382203450d030b2006410020071b210a4100210b200141003602502001200336024820012002410c6e220236024c024002400240200220084f0d00200141c8006a4100200810ec01200128024821032001280250210b0c010b2008450d010b2003200b410c6c6a2103410021024100280284ee4d2107034020014198016a200210c205200141b8016a200128029801220520012802a0012206109d070240024020012802b80122040d0042002109200721040c010b2005200610e00120012902bc0121090b200241016a21020240200128029c01450d00200510390b20032004360200200341046a20093702002003410c6a210320082002470d000b200b20086a210b0b200141c8006a41086a200b360200200141b8016a41086a200b360200200120012903483703b80120014198016a200141b8016a10cf010240200a41e212490d00200141b8016a4100200a419f6d6a22032003200a4b1b10e00420012802b801220320012802c00110e00120012802bc01450d00200310390b200141e8006a10e80120012802702202450d072001200128026822032d00003a00bc01200141013602b80120024101460d07200120032d00013a00bd01200141023602b80120024102460d07200120032d00023a00be01200141033602b80120024103460d07200120032d00033a00bf01200141043602b80120024104460d07200141c0016a20032d00043a0000200141053602b80120024105460d07200141c1016a20032d00053a0000200141063602b80120024106460d07200141c2016a20032d00063a0000200141073602b80120024107460d07200141c3016a20032d00073a0000200141083602b80120024108460d07200141c4016a20032d00083a0000200141093602b80120024109460d07200141c5016a20032d00093a00002001410a3602b8012002410a460d07200141c6016a20032d000a3a00002001410b3602b8012002410b460d07200141c7016a20032d000b3a00002001410c3602b8012002410c460d07200141c8016a20032d000c3a00002001410d3602b8012002410d460d07200141c9016a20032d000d3a00002001410e3602b8012002410e460d07200141ca016a20032d000e3a00002001410f3602b8012002410f460d07200141cb016a20032d000f3a0000200141103602b80120024110460d07200141cc016a20032d00103a0000200141113602b80120024111460d07200141cd016a20032d00113a0000200141123602b80120024112460d07200141ce016a20032d00123a0000200141133602b80120024113460d07200141cf016a20032d00133a0000200141143602b80120024114460d07200141d0016a20032d00143a0000200141153602b80120024115460d07200141d1016a20032d00153a0000200141163602b80120024116460d07200141d2016a20032d00163a0000200141173602b80120024117460d07200141d3016a20032d00173a0000200141183602b80120024118460d07200141d4016a20032d00183a0000200141193602b80120024119460d07200141d5016a20032d00193a00002001411a3602b8012002411a460d07200141d6016a20032d001a3a00002001411b3602b8012002411b460d07200141d7016a20032d001b3a00002001411c3602b8012002411c460d07200141d8016a20032d001c3a00002001411d3602b8012002411d460d07200141d9016a20032d001d3a00002001411e3602b8012002411e460d07200141da016a20032d001e3a00002001411f3602b8012002411f470d010c070b1034000b200141db016a20032d001f3a000020014190016a41026a2202200141c5016a2d00003a00002001418c016a41026a2204200141cc016a2d00003a0000200120012f01bc013b019401200120012d00be013a0096012001200141c3016a2f00003b0190012001200141ca016a2f01003b018c01200141d4016a280200210b200141cd016a280000210c200141c6016a280100210d200141203602b801200141b8016a41206a280200210e20012800bf01210f20014188016a41026a200141d3016a2d000022053a0000200141e4006a41026a20012d0096013a0000200141e0006a41026a20022d00003a0000200141dc006a41026a20042d00003a00002001200141d1016a2f000022023b018801200120012f0194013b0164200120012f0190013b0160200120012f018c013b015c200141d8006a41026a20053a0000200120023b01580240200128026c450d00200310390b200141003602c001200142013703b801412010382203450d0020032001290318370000200341186a2205200141186a41186a290300370000200341106a2206200141186a41106a290300370000200341086a2208200141186a41086a290300370000200141b8016a41004120107720012802b801220420012802c00122076a22022003290000370000200241086a2008290000370000200241106a2006290000370000200241186a200529000037000020012802bc01210220031039200141e8006a2004200741206a10df0102402002450d00200410390b20012802682203450d03200141f0006a2802002202450d04200128026c2105200120032d00003a00bc01200141013602b80120024101460d04200120032d00013a00bd01200141023602b80120024102460d04200120032d00023a00be01200141033602b80120024103460d04200120032d00033a00bf01200141043602b80120024104460d04200141c0016a20032d00043a0000200141053602b80120024105460d04200141c1016a20032d00053a0000200141063602b80120024106460d04200141c2016a20032d00063a0000200141073602b80120024107460d04200141c3016a20032d00073a0000200141083602b80120024108460d04200141c4016a20032d00083a0000200141093602b80120024109460d04200141c5016a20032d00093a00002001410a3602b8012002410a460d04200141c6016a20032d000a3a00002001410b3602b8012002410b460d04200141c7016a20032d000b3a00002001410c3602b8012002410c460d04200141c8016a20032d000c3a00002001410d3602b8012002410d460d04200141c9016a20032d000d3a00002001410e3602b8012002410e460d04200141ca016a20032d000e3a00002001410f3602b8012002410f460d04200141cb016a20032d000f3a0000200141103602b80120024110460d04200141cc016a20032d00103a0000200141113602b80120024111460d04200141cd016a20032d00113a0000200141123602b80120024112460d04200141ce016a20032d00123a0000200141133602b80120024113460d04200141cf016a20032d00133a0000200141143602b80120024114460d04200141d0016a20032d00143a0000200141153602b80120024115460d04200141d1016a20032d00153a0000200141163602b80120024116460d04200141d2016a20032d00163a0000200141173602b80120024117460d04200141d3016a20032d00173a0000200141183602b80120024118460d04200141d4016a20032d00183a0000200141193602b80120024119460d04200141d5016a20032d00193a00002001411a3602b8012002411a460d04200141d6016a20032d001a3a00002001411b3602b8012002411b460d04200141d7016a20032d001b3a00002001411c3602b8012002411c460d04200141d8016a20032d001c3a00002001411d3602b8012002411d460d04200141d9016a20032d001d3a00002001411e3602b8012002411e460d04200141da016a20032d001e3a00002001411f3602b8012002411f460d04200141b8016a41236a20032d001f3a000020014180016a41026a2202200141c5016a2d00003a0000200141fc006a41026a2204200141cc016a2d00003a0000200120012f01bc013b018401200120012d00be013a0086012001200141c3016a2f00003b0180012001200141ca016a2f01003b017c200141c6016a2801002108200141cd016a2800002107200141d4016a2802002110200141203602b801200141b8016a41206a280200211120012800bf012106200141f8006a41026a2212200141d3016a2d00003a00002001200141d1016a2f00003b0178200141b8016a41026a221320012d0086013a000020014194016a41026a221420022d00003a0000200120012f0184013b01b801200120012f0180013b01940120014190016a41026a221520042d00003a0000200120012f017c3b0190012001418c016a41026a221620122d00003a0000200120012f01783b018c0120012802402204200128023c460d010c020b1032000b200141386a2004108203200128024021040b2001280238200441246c6a220241003a0000200220012f01b8013b000120022006360004200220012f0194013b00082002200836000b200220012f0190013b000f20022007360012200220012f018c013b0016200241036a20132d00003a00002002410a6a20142d00003a0000200241116a20152d00003a0000200241186a20162d00003a00002002201136001d20022010360019200220012f0088013b0021200241236a20014188016a41026a2d00003a00002001200441016a3602402005450d00200310390b2000200129039801370050200020012f01643b0030200041376a20012f01603b00002000413e6a20012f015c3b0000200041e8006a20014198016a41186a290300370000200041e0006a20014198016a41106a290300370000200041d8006a20014198016a41086a290300370000200041326a200141e4006a41026a2d00003a0000200041396a200141e0006a41026a2d00003a0000200041c0006a200141dc006a41026a2d00003a0000200041cc006a200e360000200041c8006a200b360000200041c1006a200c3600002000413a6a200d360000200041336a200f3600002000200a360200200041c7006a200141d8006a41026a2d00003a0000200041c5006a20012f01583b0000200041286a200141186a41186a290300370000200041206a200141186a41106a290300370000200041186a200141186a41086a290300370000200020012903183700102000410c6a200141386a41086a28020036020020002001290338370204200141e0016a24000f0b41ced3c300412c200141b8016a41fcd3c300419cd4c300103d000b41ced3c300412c200141b8016a41fcd3c300418cd4c300103d000bb90201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a109705024002402002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2003450d00200110390b200241e0006a24000b13002000410a360204200041b4dac3003602000b3400200041c7e5c00036020420004100360200200041146a4110360200200041106a418cf3c300360200200041086a42063702000b130020004106360204200041c490c4003602000b2b01017f02404101103822020d001032000b200020023602002002412a3a000020004281808080103702040b920101017f230041c0006b22022400200241386a41002903b8e140370300200241306a41002903b0e140370300200241286a41002903a8e140370300200241206a41002903a0e140370300200241186a4100290398e140370300200241106a4100290390e140370300200241086a4100290388e14037030020024100290380e1403703002000200210d807200241c0006a24000b920701067f20004201370200200041086a220241003602002001200010cb06200141106a200010cb06200128022021030240200041046a2204280200200228020022056b41034b0d002000200541041077200228020021050b200028020020056a20033600002002200541046a2205360200200128022421020240200428020020056b41034b0d002000200541041077200041086a28020021050b200028020020056a2002360000200041086a2202200541046a2205360200200128022821030240200041046a28020020056b41034b0d002000200541041077200228020021050b200028020020056a20033600002002200541046a2205360200200141306a28020021020240024002400240200141386a200141346a200128022c4101461b280200220341c000490d00200341808001490d012003418080808004490d020240200041046a22062802002005470d002000200541011077200041086a28020021050b200028020020056a41033a0000200041086a2204200541016a22053602000240200628020020056b41034b0d002000200541041077200428020021050b200028020020056a20033600002004200541046a22053602000c030b200341027421040240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a20043a0000200041086a200541016a22053602000c020b200341027441017221040240200041046a28020020056b41014b0d002000200541021077200041086a28020021050b200028020020056a20043b0000200041086a200541026a22053602000c010b200341027441027221040240200041046a28020020056b41034b0d002000200541041077200041086a28020021050b200028020020056a2004360000200041086a200541046a22053602000b02402003410c6c2203450d00200220036a2107200041046a210403400240200428020020056b41074b0d002000200541081077200041086a28020021050b200028020020056a2002290000370000200041086a2203200541086a2205360200200241086a28020021060240200428020020056b41034b0d002000200541041077200328020021050b200028020020056a20063600002003200541046a22053602002002410c6a22022007470d000b0b200128023c21020240200041046a28020020056b41034b0d002000200541041077200041086a28020021050b200028020020056a2002360000200041086a200541046a3602000b820101037f20004201370200200041086a22024100360200200041004108107720002802002203200228020022046a42c0f0f50b3700002002200441086a22043602000240200041046a28020020046b41074b0d00200020044108107720022802002104200028020021030b2002200441086a360200200320046a4280c2d72f3700000b2d01017f02404104103822020d001032000b20002002360200200241e01236000020004284808080c0003702040bc50101057f20004201370200200041086a22024100360200200041004104107720002802002203200228020022046a418080f0013600002002200441046a22043602000240200041046a220528020020046b41034b0d00200020044104107720022802002104200028020021030b2002200441046a2206360200200320046a418080c0023600000240200528020020066b41034b0d002000200641041077200041086a28020021060b200041086a200641046a360200200028020020066a418080c0023600000bdf1103027f017e027f230041c0016b22022400200241086a10b803200041086a22034100360200200042013702002002290308210420004100410810772000280200200328020022056a20043700002003200541086a2205360200200229031021040240200041046a220628020020056b41074b0d002000200541081077200328020021050b200028020020056a20043700002003200541086a2205360200200229031821040240200628020020056b41074b0d002000200541081077200041086a28020021050b200028020020056a2004370000200041086a200541086a220536020002400240200241206a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a2205360200200229032821040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241306a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a2205360200200229033821040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241c0006a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a2205360200200229034821040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a22032005360200200241d0006a29030021040240200041046a28020020056b41074b0d002000200541081077200328020021050b200028020020056a20043700002003200541086a220536020002400240200241d8006a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a2205360200200229036021040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241e8006a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a2205360200200229037021040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241f8006a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a220536020020022903800121040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a2203200536020020024188016a29030021040240200041046a28020020056b41074b0d002000200541081077200328020021050b200028020020056a20043700002003200541086a22053602000240024020024190016a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a220536020020022903980121040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241a0016a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a220536020020022903a80121040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a200536020002400240200241b0016a2903004201510d000240200041046a2802002005470d002000200541011077200041086a28020021050b200028020020056a41003a0000200541016a21050c010b0240200041046a22032802002005470d002000200541011077200041086a28020021050b200028020020056a41013a0000200041086a2206200541016a220536020020022903b80121040240200328020020056b41074b0d002000200541081077200628020021050b200028020020056a2004370000200541086a21050b200041086a2005360200200241c0016a24000bc30403057f037e047f230041a0016b220224002002200110c10102400240024002402002280200450d00200041003602000c010b2002280204220320012802044105762204200420034b1b22054105742204417f4c0d010240024020050d00410121060c010b200410382206450d030b41002104200241003602102002200536020c20022006360208024002402003450d00200241f8006a41017221050340200241f8006a200110860220022d00784101460d02200241386a41086a200541086a2900002207370300200241386a41106a200541106a2900002208370300200241386a41186a200541186a2900002209370300200241186a41086a220a2007370300200241186a41106a220b2008370300200241186a41186a220c20093703002002200529000022073703382002200737031802402004200228020c470d00200241086a20044101109e0220022802082106200228021021040b200620044105746a220d2002290318370000200d41186a200c290300370000200d41106a200b290300370000200d41086a200a2903003700002002200441016a22043602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b200241386a41086a200241d8006a41086a290300370300200241386a41106a200241d8006a41106a290300370300200241386a41186a200241d8006a41186a2903003703002002200229035837033820004100360200200228020c41ffffff3f71450d00200610390b200241a0016a24000f0b1034000b1032000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b2203410120031bad42a00b7e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141a00b6c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141a00b6e360200200241206a24000f0b1034000b8c0203017f017e077f02400240024020012802082202ad420c7e2203422088a70d002003a72204417f4c0d00200128020021054104210602402004450d00200410382206450d020b2000410036020820002006360200200041046a2004410c6e220736020002402004410c490d002007210803402004450d012008450d0420052802082201417f4c0d02200528020021090240024020010d004101210a0c010b20011038220a450d040b2005410c6a2105200a2009200110d40b210a200641086a2001360200200641046a20013602002006200a3602002006410c6a2106200441746a21042008417f6a22080d000b0b200020023602080f0b1034000b1032000b200720074198b4ca00103c000ba20201057f230041106b2202240041002103024002400240200028020841016a220441004c0d000240200028020c2205450d00200020043602080240024020052001470d00410121030c010b200528020841016a220441004c0d03200520043602082001280208220441016a220341004c0d0420012003360208200541106a200141106a412010d70b210320052d003021062001200436020820012d0030210120052005280208417f6a3602082003452006200146712103200028020821040b20002004417f6a3602080b200241106a240020030f0b41dcdccc004118200241086a41d099c40041e099c400103d000b41dcdccc004118200241086a41d099c4004180e1cc00103d000b41dcdccc004118200241086a41d099c4004190e1cc00103d000be108010e7f230041306b220224002002420037020c200241002802d8974e22033602082002420037021c200220033602180240024002400240200128020041016a220341014d0d0020012003360200200241086a4100410110ab0120022802082204200228021022034102746a20013602002002200341016a22053602102001280200220341016a41014d0d002001200341016a360200200241186a4100410110ab0120022802182206200228022022034102746a20013602002002200341016a2207360220200128020041016a220341014d0d00200120033602000340200341016a220341014d0d0120012003360200200128020841016a220841004c0d02200120083602082001410c6a210902400240200128020c220a450d0020074102742108200a41106a210b2006210c03402008450d020240200c2802002203200a460d00200328020841016a220d41004c0d072003200d360208200a280208220d41016a220e41004c0d08200c41046a210c200a200e360208200341106a200b412010d70b210e20032d0030210f200a200d360208200a2d0030210d20032003280208417f6a3602082008417c6a2108200e0d01200f41ff0171200d41ff0171470d010b0b20012802002103200128020821080b20012003417f6a220336020020012008417f6a360208024020030d00200910e207200141046a22032003280200417f6a220336020020030d00200110390b20002002290308370204200020013602002000410c6a200241106a28020036020002402007450d00200741027421082006210303402003280200220a200a280200417f6a220c3602000240200c0d00200a410c6a10e207200a41046a220c200c280200417f6a220c360200200c0d00200a10390b200341046a21032008417c6a22080d000b0b0240200228021c41ffffffff0371450d00200610390b200241306a24000f0b2009280200220328020041016a220a41014d0d012003200a36020002402005200228020c470d00200241086a2005410110ab0120022802082104200228021021050b200420054102746a20033602002002200228021041016a22053602102009280200220a28020041016a220341014d0d01200a200336020020012001280200417f6a2203360200024020030d00200910e207200141046a22032003280200417f6a220336020020030d00200110390b200a28020041016a220341014d0d01200a2003360200024020022802202203200228021c470d00200241186a2003410110ab01200228022021030b2002280218220620034102746a200a36020020012001280200417f6a220836020020012001280208417f6a3602082002200341016a2207360220024020080d00200910e207200141046a22032003280200417f6a220336020020030d00200110390b200a2802002103200a21010c000b0b00000b41dcdccc004118200241286a41d099c40041889bc400103d000b41dcdccc004118200241286a41f897c7004180e1cc00103d000b41dcdccc004118200241286a41f897c7004190e1cc00103d000b4801017f024020002802002200450d0020002000280200417f6a220136020020010d002000410c6a10e207200041046a22012001280200417f6a220136020020010d00200010390b0b130020004108360204200041eca7c4003602000b3400200041fde7c00036020420004100360200200041146a4104360200200041106a41f0bdc400360200200041086a42093702000b130020004103360204200041d0c4c4003602000b2d01017f02404104103822020d001032000b20002002360200200241f40336000020004284808080c0003702040b3501017f02404108103822020d001032000b20002002360200200242f0f2bd99e6ac9db7e4003700002000428880808080013702040b3400200041debec30036020420004100360200200041146a4101360200200041106a41fcc8c400360200200041086a42183702000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210ce040b0f0b200041086a108d02200041046a220228020010e907200228020010390be50a01037f02402001450d00200020014198046c6a21020340200022034198046a21000240024002400240024002400240024020032d00000e0707000102030405060b02402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b0240200341086a2802002201450d00200141f8036c450d00200328020410390b200341106a108d020c060b02402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b0240200341086a2802002201450d00200141f8036c450d00200328020410390b200341206a108d020240200341186a2802002204450d00200341106a280200210120044198046c21040340200110920220014198046a2101200441e87b6a22040d000b0b200341146a2802002201450d0520014198046c450d05200328021010390c050b02402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b0240200341086a2802002201450d00200141f8036c450d00200328020410390b0240200341186a2802002204450d00200341106a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b200341146a2802002201450d04200141f8036c450d04200328021010390c040b02402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b0240200341086a2802002201450d00200141f8036c450d00200328020410390b200341206a108d020240200341186a2802002204450d00200341106a280200210120044198046c21040340200110920220014198046a2101200441e87b6a22040d000b0b200341146a2802002201450d0320014198046c450d03200328021010390c030b02402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b0240200341086a2802002201450d00200141f8036c450d00200328020410390b200341206a108d020240200341186a2802002204450d00200341106a280200210120044198046c21040340200110920220014198046a2101200441e87b6a22040d000b0b200341146a2802002201450d0220014198046c450d02200328021010390c020b200341186a108d0202402003410c6a2802002204450d00200341046a2802002101200441f8036c210403402001108b02200141f8036a2101200441887c6a22040d000b0b200341086a2802002201450d01200141f8036c450d01200328020410390c010b024002400240024002400240024002400240200341106a2802000e0b0808080800010203040506070b200341186a280200450d07200341146a28020010390c070b200341186a280200450d06200341146a28020010390c060b200341186a108d020c050b200341186a108d020c040b200341186a280200450d03200341146a28020010390c030b0240200341186a280200450d00200341146a28020010390b200341206a2d00004106490d02200341286a280200450d02200341246a28020010390c020b200341186a108d020c010b200341186a108d02200341e0036a2d00004106490d00200341e8036a280200450d00200341e4036a28020010390b02402003410c6a2802002204450d00200341046a2802002101200441e0076c210403402001108002200141e0076a2101200441a0786a22040d000b0b200341086a2802002201450d00200141e0076c450d00200328020410390b20002002470d000b0b0b130020004105360204200041e0ccc4003602000bcf0f050d7f017e017f057e067f23004180016b22032400024002400240200128020c220441016a22052004490d00200520012802002206200641016a220741037641076c20064108491b22084101764b0d01200141046a28020021094100210a410021050340024002400240200a4101710d00200520074f0d010c020b200541036a220a2005490d00200a2105200a2007490d010b02400240024020074104490d00200920076a20092800003600000c010b200941046a2009200710d50b1a2007450d010b200941506a210b20022802002102410021050340024020092005220c6a220d2d0000418001470d00200b4100200c6b41306c6a220e41106a210f200e41206a2107200e2900002110200e41086a221129000021120340200341d0006a20022903182002290308852213200f41086a2900008542002002290310221420022903002215852216200f29000085420010d30b200341c0006a201320128542002016201085420010d30b200341306a201442002014200341c0006a41086a2903002003290340857c2014200341d0006a41086a2903002003290350857c201542adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892210420010d30b41002105200341306a41086a2903002003290330852010892214a72217210a0340200541046a2205200a20067122186a210a200920186a280000418081828478712219450d000b0240200920196841037620186a20067122056a2c00004100480d002009280200418081828478716841037621050b024020052006201771220a6b200c200a6b7320067141034b0d00200d2014a741197622053a0000200c417c6a20067120096a41046a20053a00000c020b200920056a220a2d00002118200a2014a741197622193a00002005417c6a20067120096a41046a20193a00000240201841ff01470d00200d41ff013a0000200c417c6a20067120096a41046a41ff013a0000200b410020056b41306c6a220541286a200e41286a290200370200200541206a2007290200370200200541186a200e41186a290200370200200541106a200f290200370200200541086a20112902003702002005200e2902003702000c020b200b410020056b41306c6a220529020021102005200e290200370200200541186a220a2902002114200a200e41186a2218290200370200200541106a220a2902002113200a200f290200370200200541086a220a2902002112200a201129020037020020112012370200200f201337020020182014370200200e2010370200200541286a220a2902002114200a200741086a2218290200370200200529022021132005200729020037022020072013370200201820143702000c000b0b200c41016a2105200c2006470d000b0b200041003602002001200820046b3602080c040b200920056a220a200a280200220a410776417f73418182840871200a41fffefdfb07726a3602004101210a200541016a21050c000b0b4180d2c400411c419cd2c4001035000b024002400240024002402005200841016a220a2005200a4b1b22050d0041e4a2c0002109410021194100211a0c010b02400240200541074b0d004104410820054104491b21050c010b200541ffffffff01712005470d02417f200541037441076e417f6a677641016a21050b2005ad42307e2214422088a70d022014a7220a200541046a22196a2218200a490d02201810382218450d032018200a6a220941ff01201910d60b1a2005417f6a2219200541037641076c20194108491b211a0b200941506a211b200141046a280200221c41046a210f201c20076a2111201c280200417f734180818284787121182002280200210c201c210e03400240024020180d0002400340200f20114f0d01200e41c07e6a210e200f2802002105200f41046a220a210f2005418081828478712205418081828478460d000b2005418081828478732218417f6a201871210b200a210f0c020b20012019360200200041003602002001201a20046b360208200141046a20093602002006450d06201c2007ad42307ea76b10390c060b2018417f6a201871210b0b41002105200341106a200c290318200c290308852210200e41002018684103766b41306c6a41506a221741186a220d290000854200200c2903102214200c2903002212852213201729001085420010d30b200341206a2010201741086a22082900008542002013201729000085420010d30b2003201442002014200341206a41086a2903002003290320857c2014200341106a41086a2903002003290310857c201242adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892210420010d30b200341086a2903002003290300852010892214a7210a0340200541046a2205200a20197122186a210a200920186a280000418081828478712202450d000b0240200920026841037620186a20197122056a2c00004100480d002009280200418081828478716841037621050b200920056a2014a7411976220a3a00002005417c6a20197120096a41046a200a3a0000201b410020056b41306c6a220541286a201741286a290200370200200541206a201741206a290200370200200541186a200d290200370200200541106a201741106a290200370200200541086a200829020037020020052017290200370200200b21180c000b0b4180d2c400411c419cd2c4001035000b4180d2c400411c419cd2c4001035000b1032000b20034180016a24000bd99a0204067f1a7e117f407e230041c0d0006b22042400200441f0c7006a200341d00110d40b1a200441f0c7006a41d7c1cd004109200241a0016a4120108d01200441a0c6006a200441f0c7006a41d00110d40b1a200441c0c9006a41386a22024200370300200441c0c9006a41306a22034200370300200441c0c9006a41286a22054200370300200441c0c9006a41206a22064200370300200441c0c9006a41186a22074200370300200441c0c9006a41106a22084200370300200441c0c9006a41086a22094200370300200442003703c049200441a0c6006a41c9d4c4004107200441c0c9006a41c000108f012008310000210a2009310000210b2007310000210c20043100d249210d20043100d149210e20043100cf49210f20043100cd49211020043100ce49211120043100df49211220043100de49211320043100dd49211420043100dc49211520043100db49211620043100da49211720043100cc49211820043100cb49211920043100ca49211a20043100c949211b20043100c749211c20043100d949211d20043100d749211e20043100d649211f20043100d349212020043100d449212120043100d5492122200420043502c04920043100c4494220868420043100c5494228868420043100c64922234230868442ffffffffffffff03833703804a20042020202142088684202242108684201f42188684201e42208684200c42288684201d4230868442018842ffffffffffffff03833703984a20042023201c42088684200b42108684201b42188684201a4220868420194228868420184230868442038842ffffffffffffff03833703884a2004200c201d42088684201742108684201642188684201542208684201442288684201342308684201242388684420c8842ffffffffffffff03833703a04a20042018201042088684201142108684200f42188684200a42208684200e42288684200d4230868420204238868442068842ffffffffffffff03833703904a200441a8ca006a20044180ca006a1073200441c8cb006a41186a20022903002220370300200441c8cb006a41106a2003290300220a370300200441c8cb006a41086a2005290300220b37030020042006290300220d3703c84b20043100da4b210e20043100d94b210f20043100d74b211020043100d54b211120043100d64b211220043100e74b211320043100e64b211420043100e54b211520043100e44b211620043100e34b211720043100e24b211920043100d44b210c20043100d34b211a20043100d24b211b20043100d14b211c20043100cf4b211e20043100e14b211820043100df4b211f20043100de4b212120043100db4b211d20043100dc4b212220043100dd4b21232004200d42ffffffff0f8320043100cc4b4220868420043100cd4b4228868420043100ce4b220d4230868442ffffffffffffff03833703e84b2004201d202242088684202342108684202142188684201f42208684202042ff018322204228868420184230868442018842ffffffffffffff03833703804c2004200d201e42088684200b42ff018342108684201c42188684201b42208684201a42288684200c4230868442038842ffffffffffffff03833703f04b20042018420886202084201942108684201742188684201642208684201542288684201442308684201342388684420c8842ffffffffffffff03833703884c2004200c201142088684201242108684201042188684200a42ff018342208684200f42288684200e42308684201d4238868442068842ffffffffffffff03833703f84b20044190cc006a200441e8cb006a1073200441f0c7006a41106a220520044190cc006a41386a2206290300220c370300200441f0c7006a41186a220220044190cc006a41c0006a2207290300370300200441f0c7006a41206a220320044190cc006a41c8006a2208290300370300200441f0c7006a41086a220920044190cc006a41306a222429030020042903984c7c3703002005200c20042903a04c7c3703002002200229030020042903a84c7c370300200420042903b84c20042903904c7c3703f0472003200329030020042903b04c7c3703002024290300210c2006290300211820042903904c211d20042903b84c212020042903984c210a20042903a04c210b200441f0c7006a41c8006a2224200829030020042903b04c7d42f0ffffffffffff3f7c220d42ffffffffffffff0383200729030020042903a84c7d42f0ffffffffffff3f7c220e4233887c370300200441f0c7006a41c0006a2207200e42ffffffffffffff03832018200b7d42f0ffffffffffff3f7c22184233887c370300200441f0c7006a41386a2208201842ffffffffffffff0383200c200a7d42f0ffffffffffff3f7c220c4233887c370300200441f0c7006a41306a2225200c42ffffffffffffff03832020201d7d42d0fdffffffffff3f7c220c4233887c3703002004200d42338842137e200c42ffffffffffffff03837c37039848200441f0c7006a41f0006a222620044190cc006a41f0006a290300370300200441f0c7006a41e8006a222720044190cc006a41e8006a290300370300200441f0c7006a41e0006a222820044190cc006a41e0006a290300370300200441f0c7006a41d8006a222920044190cc006a41d8006a290300370300200420042903e04c3703c048200441d0c1006a20042903884d220c420042d9e2cbb5c2f2a603420010d30b200441a0c2006a20044190cc006a4198016a29030022184200428ee0b9a98cbfbd1f420010d30b200441f0c2006a20044190cc006a4190016a290300221d420042968c8a82a4c39824420010d30b200441c0c3006a20044190cc006a4188016a2903002220420042d587a4ceaceea43d420010d30b20044190c4006a20044190cc006a4180016a290300220a420042edd39cadab84b215420010d30b200441a0c4006a200a420042d9e2cbb5c2f2a603420010d30b200441e0c1006a200c420042fabaabb1878ad401420010d30b200441b0c2006a2018420042968c8a82a4c39824420010d30b20044180c3006a201d420042d587a4ceaceea43d420010d30b200441d0c3006a2020420042edd39cadab84b215420010d30b200441e0c3006a2020420042d9e2cbb5c2f2a603420010d30b200441b0c4006a200a420042fabaabb1878ad401420010d30b200441f0c1006a200c420042d2808e80cce8f301420010d30b200441c0c2006a2018420042d587a4ceaceea43d420010d30b20044190c3006a201d420042edd39cadab84b215420010d30b200441a0c3006a201d420042d9e2cbb5c2f2a603420010d30b200441f0c3006a2020420042fabaabb1878ad401420010d30b200441c0c4006a200a420042d2808e80cce8f301420010d30b20044180c2006a200c420042f7f281baccf19c03420010d30b200441d0c2006a2018420042edd39cadab84b215420010d30b200441e0c2006a2018420042d9e2cbb5c2f2a603420010d30b200441b0c3006a201d420042fabaabb1878ad401420010d30b20044180c4006a2020420042d2808e80cce8f301420010d30b200441d0c4006a200a420042f7f281baccf19c03420010d30b20044190c2006a200c420042ffdb95eed98d9001420010d30b200441f0c7006a4188016a222a20042903c042221320042903f0417c220c2004290390437c221820042903e0437c221d20042903b0447c222020042903b042221420042903e0417c220a2004290380437c220b20042903d0437c220d20042903a0447c220e20042903a042221520042903d0417c220f20042903f0427c221020042903c0437c22112004290390447c2212423388200441a0c2006a41086a290300200441d0c1006a41086a2903007c200f201554ad7c200441f0c2006a41086a2903007c2010200f54ad7c200441c0c3006a41086a2903007c2011201054ad7c20044190c4006a41086a2903007c2012201154ad7c420d86847c220f423388200441b0c2006a41086a290300200441e0c1006a41086a2903007c200a201454ad7c20044180c3006a41086a2903007c200b200a54ad7c200441d0c3006a41086a2903007c200d200b54ad7c200441a0c4006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383370300200441f0c7006a4190016a222b20042903d04222112004290380427c220b20042903a0437c220d20042903f0437c220e20042903c0447c2210200a423388200441c0c2006a41086a290300200441f0c1006a41086a2903007c200c201354ad7c20044190c3006a41086a2903007c2018200c54ad7c200441e0c3006a41086a2903007c201d201854ad7c200441b0c4006a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff0383370300200441f0c7006a4198016a222c20042903e04222132004290390427c221820042903b0437c221d2004290380447c222020042903d0447c220a200c423388200441d0c2006a41086a29030020044180c2006a41086a2903007c200b201154ad7c200441a0c3006a41086a2903007c200d200b54ad7c200441f0c3006a41086a2903007c200e200d54ad7c200441c0c4006a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff0383370300200441f0c7006a4180016a222d200c423388200441e0c2006a41086a29030020044190c2006a41086a2903007c2018201354ad7c200441b0c3006a41086a2903007c201d201854ad7c20044180c4006a41086a2903007c2020201d54ad7c200441d0c4006a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c423388200f42ffffffffffffff03837c3703002004200c42ffffffffffffff03833703e848200441d0ce006a41206a2206200441a8ca006a41c8006a222e290300370300200441d0ce006a41186a222f200441a8ca006a41c0006a22302903002220370300200441d0ce006a41106a2231200441a8ca006a41386a2232290300221d370300200441d0ce006a41086a2233200441a8ca006a41306a22342903002218370300200420042903d04a220c3703d04e2004200c20042903a84a7c220c3703d04e2033201820042903b04a7c22183703002031201d20042903b84a7c221d370300202f202020042903c04a7c22203703002006200629030020042903c84a7c220a370300200441c03e6a20042903f047220b4200200c420010d30b200441c0c1006a200a42002009290300220d42137e420010d30b200441f0c0006a202042002005290300220e42137e2212420010d30b200441a0c0006a201d42002002290300221042137e2211420010d30b200441d03f6a201842002003290300221342137e220f420010d30b200441d03e6a20184200200b420010d30b200441b0c1006a200c4200200d420010d30b200441e0c0006a200a42002012420010d30b20044190c0006a202042002011420010d30b200441c03f6a201d4200200f420010d30b200441e03e6a201d4200200b420010d30b200441a0c1006a20184200200d420010d30b200441d0c0006a200c4200200e420010d30b20044180c0006a200a42002011420010d30b200441b03f6a20204200200f420010d30b200441f03e6a20204200200b420010d30b20044190c1006a201d4200200d420010d30b200441c0c0006a20184200200e420010d30b200441f03f6a200c42002010420010d30b200441a03f6a200a4200200f420010d30b200441803f6a200a4200200b420010d30b20044180c1006a20204200200d420010d30b200441b0c0006a201d4200200e420010d30b200441e03f6a201842002010420010d30b200441903f6a200c42002013420010d30b2034290300210b2032290300210a2030290300211d20042903b04a210d20042903b84a210e20042903c04a2120200441f03b6a200429039848220c4200202e29030020042903c84a7d42f0ffffffffffff3f7c220f42338842137e20042903d04a20042903a84a7d42d0fdffffffffff3f7c221242ffffffffffffff03837c2218420010d30b200441f03d6a200f42ffffffffffffff0383201d20207d42f0ffffffffffff3f7c220f4233887c221d42002025290300222042137e420010d30b200441b03d6a200f42ffffffffffffff0383200a200e7d42f0ffffffffffff3f7c220f4233887c220a42002008290300220e42137e2213420010d30b200441f03c6a200f42ffffffffffffff0383200b200d7d42f0ffffffffffff3f7c220d4233887c220b42002007290300221042137e2211420010d30b200441b03c6a200d42ffffffffffffff038320124233887c220d42002024290300221242137e220f420010d30b200441e03b6a200d4200200c420010d30b200441b03e6a201842002020420010d30b200441a03d6a201d42002013420010d30b200441e03c6a200a42002011420010d30b200441a03c6a200b4200200f420010d30b200441d03b6a200b4200200c420010d30b200441a03e6a200d42002020420010d30b200441e03d6a20184200200e420010d30b200441d03c6a201d42002011420010d30b200441903c6a200a4200200f420010d30b200441c03b6a200a4200200c420010d30b200441903e6a200b42002020420010d30b200441d03d6a200d4200200e420010d30b200441903d6a201842002010420010d30b200441803c6a201d4200200f420010d30b200441b03b6a201d4200200c420010d30b200441803e6a200a42002020420010d30b200441c03d6a200b4200200e420010d30b200441803d6a200d42002010420010d30b200441c03c6a201842002012420010d30b200420042903d03c221320042903e03d7c220c20042903903c7c221820042903d03b7c221d20042903a03e7c222020042903a03d221420042903b03e7c220a20042903e03c7c220b20042903a03c7c220d20042903e03b7c220e20042903f03d221520042903f03b7c220f20042903b03d7c221020042903f03c7c221120042903b03c7c2212423388200441f03d6a41086a290300200441f03b6a41086a2903007c200f201554ad7c200441b03d6a41086a2903007c2010200f54ad7c200441f03c6a41086a2903007c2011201054ad7c200441b03c6a41086a2903007c2012201154ad7c420d86847c220f423388200441a03d6a41086a290300200441b03e6a41086a2903007c200a201454ad7c200441e03c6a41086a2903007c200b200a54ad7c200441a03c6a41086a2903007c200d200b54ad7c200441e03b6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703884f200420042903803c221120042903903d7c220b20042903c03b7c220d20042903903e7c220e20042903d03d7c2210200a423388200441d03c6a41086a290300200441e03d6a41086a2903007c200c201354ad7c200441903c6a41086a2903007c2018200c54ad7c200441d03b6a41086a2903007c201d201854ad7c200441a03e6a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff03833703904f200420042903b03b221320042903c03c7c221820042903803e7c221d20042903c03d7c222020042903803d7c220a200c423388200441803c6a41086a290300200441903d6a41086a2903007c200b201154ad7c200441c03b6a41086a2903007c200d200b54ad7c200441903e6a41086a2903007c200e200d54ad7c200441d03d6a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff03833703984f2004200c423388200441b03b6a41086a290300200441c03c6a41086a2903007c2018201354ad7c200441803e6a41086a2903007c201d201854ad7c200441c03d6a41086a2903007c2020201d54ad7c200441803d6a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff03833703f84e2004200c423388200f42ffffffffffffff03837c3703804f200441e03a6a20042903e848220c420020042903a04b2218420010d30b200441d03a6a200441a8ca006a4198016a290300221d4200202d290300222042137e420010d30b200441803a6a200441a8ca006a4190016a290300220a4200202a290300220e42137e2212420010d30b200441b0396a200441a8ca006a4188016a290300220b4200202b290300221042137e2211420010d30b200441e0386a200441a8ca006a4180016a290300220d4200202c290300221342137e220f420010d30b200441d0386a200d4200200c420010d30b200441a03b6a201842002020420010d30b200441c03a6a201d42002012420010d30b200441f0396a200a42002011420010d30b200441a0396a200b4200200f420010d30b20044190396a200b4200200c420010d30b200441c0386a200d42002020420010d30b200441903b6a20184200200e420010d30b200441b03a6a201d42002011420010d30b200441e0396a200a4200200f420010d30b200441d0396a200a4200200c420010d30b20044180396a200b42002020420010d30b200441b0386a200d4200200e420010d30b200441803b6a201842002010420010d30b200441a03a6a201d4200200f420010d30b200441903a6a201d4200200c420010d30b200441c0396a200a42002020420010d30b200441f0386a200b4200200e420010d30b200441a0386a200d42002010420010d30b200441f03a6a201842002013420010d30b200420042903903a221c20042903f03a7c220c20042903c0397c221820042903f0387c221d20042903a0387c222020042903a03a221e20042903803b7c220a20042903d0397c220b2004290380397c220d20042903b0387c220e20042903b03a221f20042903903b7c220f20042903e0397c22102004290390397c221120042903c0387c221220042903c03a222120042903a03b7c221320042903f0397c221420042903a0397c221520042903d0387c221620042903d03a222220042903e03a7c221720042903803a7c221920042903b0397c221a20042903e0387c221b423388200441d03a6a41086a290300200441e03a6a41086a2903007c2017202254ad7c200441803a6a41086a2903007c2019201754ad7c200441b0396a41086a2903007c201a201954ad7c200441e0386a41086a2903007c201b201a54ad7c420d86847c2217423388200441c03a6a41086a290300200441a03b6a41086a2903007c2013202154ad7c200441f0396a41086a2903007c2014201354ad7c200441a0396a41086a2903007c2015201454ad7c200441d0386a41086a2903007c2016201554ad7c2017201654ad7c420d86847c2213423388200441b03a6a41086a290300200441903b6a41086a2903007c200f201f54ad7c200441e0396a41086a2903007c2010200f54ad7c20044190396a41086a2903007c2011201054ad7c200441c0386a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03a6a41086a290300200441803b6a41086a2903007c200a201e54ad7c200441d0396a41086a2903007c200b200a54ad7c20044180396a41086a2903007c200d200b54ad7c200441b0386a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff03833703c04f2004200f42ffffffffffffff03833703b84f2004201342ffffffffffffff03833703b04f2004200a423388200441903a6a41086a290300200441f03a6a41086a2903007c200c201c54ad7c200441c0396a41086a2903007c2018200c54ad7c200441f0386a41086a2903007c201d201854ad7c200441a0386a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c220c423388201742ffffffffffffff03837c3703a84f2004200c42ffffffffffffff03833703a04f20044190356a20042903c048220c420020042903f84a2218420010d30b200441a0366a200441a8ca006a41f0006a290300221d42002029290300222042137e420010d30b200441e0366a200441a8ca006a41e8006a290300220a42002028290300220e42137e2212420010d30b200441a0376a200441a8ca006a41e0006a290300220b42002027290300221042137e2211420010d30b200441e0376a200441a8ca006a41d8006a290300220d42002026290300221342137e220f420010d30b200441e0356a200d4200200c420010d30b200441a0356a201842002020420010d30b200441b0366a201d42002012420010d30b200441f0366a200a42002011420010d30b200441b0376a200b4200200f420010d30b200441f0356a200b4200200c420010d30b200441f0376a200d42002020420010d30b200441b0356a20184200200e420010d30b200441c0366a201d42002011420010d30b20044180376a200a4200200f420010d30b20044180366a200a4200200c420010d30b200441c0376a200b42002020420010d30b20044180386a200d4200200e420010d30b200441c0356a201842002010420010d30b200441d0366a201d4200200f420010d30b20044190366a201d4200200c420010d30b20044190376a200a42002020420010d30b200441d0376a200b4200200e420010d30b20044190386a200d42002010420010d30b200441d0356a201842002013420010d30b200441c8cf006a41106a20042903c036221320042903b0357c220c2004290380377c221820042903f0357c221d20042903f0377c222020042903b036221420042903a0357c220a20042903f0367c220b20042903b0377c220d20042903e0357c220e20042903a03622152004290390357c220f20042903e0367c221020042903a0377c221120042903e0377c2212423388200441a0366a41086a29030020044190356a41086a2903007c200f201554ad7c200441e0366a41086a2903007c2010200f54ad7c200441a0376a41086a2903007c2011201054ad7c200441e0376a41086a2903007c2012201154ad7c420d86847c220f423388200441b0366a41086a290300200441a0356a41086a2903007c200a201454ad7c200441f0366a41086a2903007c200b200a54ad7c200441b0376a41086a2903007c200d200b54ad7c200441e0356a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383220b370300200441c8cf006a41186a20042903d036221420042903c0357c220d2004290380367c220e20042903c0377c22102004290380387c2211200a423388200441c0366a41086a290300200441b0356a41086a2903007c200c201354ad7c20044180376a41086a2903007c2018200c54ad7c200441f0356a41086a2903007c201d201854ad7c200441f0376a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff03832218370300200441c8cf006a41206a200429039036221520042903d0357c221d2004290390377c222020042903d0377c220a2004290390387c2213200c423388200441d0366a41086a290300200441c0356a41086a2903007c200d201454ad7c20044180366a41086a2903007c200e200d54ad7c200441c0376a41086a2903007c2010200e54ad7c20044180386a41086a2903007c2011201054ad7c200c201154ad7c420d86847c220c42ffffffffffffff0383220d370300200441c8cf006a41086a200c42338820044190366a41086a290300200441d0356a41086a2903007c201d201554ad7c20044190376a41086a2903007c2020201d54ad7c200441d0376a41086a2903007c200a202054ad7c20044190386a41086a2903007c2013200a54ad7c200c201354ad7c420d868442137e201242ffffffffffffff03837c221d423388200f42ffffffffffffff03837c220c3703002004201d42ffffffffffffff0383221d3703c84f20044198d0006a41086a2224200c200c7c37030020044198d0006a41106a2225200b200b7c37030020044198d0006a41186a2226201820187c37030020044198d0006a41206a2227200d200d7c3703002004201d201d7c3703985020042903f84e211c20042903804f211e20042903884f211f200420042903803f222120042903903f7c220c2004290380417c221820042903b0407c221d20042903e03f7c222020042903a03f222220042903f03f7c220a20042903f03e7c220b2004290390417c220d20042903c0407c220e200429038040222320042903d0407c220f20042903b03f7c221020042903e03e7c221120042903a0417c221220042903e040223520042903b0417c22132004290390407c221420042903c03f7c221520042903d03e7c221620042903c041223620042903c03e7c221720042903f0407c221920042903a0407c221a20042903d03f7c221b423388200441c0c1006a41086a290300200441c03e6a41086a2903007c2017203654ad7c200441f0c0006a41086a2903007c2019201754ad7c200441a0c0006a41086a2903007c201a201954ad7c200441d03f6a41086a2903007c201b201a54ad7c420d86847c2217423388200441e0c0006a41086a290300200441b0c1006a41086a2903007c2013203554ad7c20044190c0006a41086a2903007c2014201354ad7c200441c03f6a41086a2903007c2015201454ad7c200441d03e6a41086a2903007c2016201554ad7c2017201654ad7c420d86847c221342338820044180c0006a41086a290300200441d0c0006a41086a2903007c200f202354ad7c200441b03f6a41086a2903007c2010200f54ad7c200441e03e6a41086a2903007c2011201054ad7c200441a0c1006a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441a03f6a41086a290300200441f03f6a41086a2903007c200a202254ad7c200441f03e6a41086a2903007c200b200a54ad7c20044190c1006a41086a2903007c200d200b54ad7c200441c0c0006a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383220b20042903984f7d42f0ffffffffffff3f7c221042ffffffffffffff0383200f42ffffffffffffff0383220d20042903904f7d42f0ffffffffffff3f7c220e4233887c3703d04d2004200e42ffffffffffffff0383201342ffffffffffffff0383220e201f7d42f0ffffffffffff3f7c220f4233887c3703c84d2004200f42ffffffffffffff0383200a423388200441803f6a41086a290300200441903f6a41086a2903007c200c202154ad7c20044180c1006a41086a2903007c2018200c54ad7c200441b0c0006a41086a2903007c201d201854ad7c200441e03f6a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e201b42ffffffffffffff03837c2218423388201742ffffffffffffff03837c220c201e7d42f0ffffffffffff3f7c221d4233887c3703c04d2004201842ffffffffffffff038322183703d84d2004201d42ffffffffffffff03832018201c7d42d0fdffffffffff3f7c221d4233887c3703b84d2004201042338842137e201d42ffffffffffffff03837c3703b04d200441b0cd006a41306a2228200c370300200441b0cd006a41386a2229200e370300200441b0cd006a41c0006a222a200d370300200441b0cd006a41c8006a222b200b3703002004201820042903f84e7c3703d84d2028200c20042903804f7c3703002029200e20042903884f7c370300202a200d20042903904f7c370300202b200b20042903984f7c370300200441b0cd006a41f0006a22062027290300370300200441b0cd006a41e8006a22072026290300370300200441b0cd006a41e0006a22082025290300370300200441b0cd006a41d8006a2209202429030037030020042004290398503703804e200420042903804e20042903a04f7c3703804e2009200929030020042903a84f7c3703002008200829030020042903b04f7c3703002007200729030020042903b84f7c3703002006200629030020042903c04f7c3703002024290300210c2025290300211820042903a04f211d200429039850212020042903a84f210a20042903b04f210b200441b0cd006a4198016a202729030020042903c04f7d42f0ffffffffffff3f7c220d42ffffffffffffff0383202629030020042903b84f7d42f0ffffffffffff3f7c220e4233887c221e370300200441b0cd006a4190016a200e42ffffffffffffff03832018200b7d42f0ffffffffffff3f7c22184233887c221b370300200441b0cd006a4188016a201842ffffffffffffff0383200c200a7d42f0ffffffffffff3f7c220c4233887c2214370300200441b0cd006a4180016a200c42ffffffffffffff03832020201d7d42d0fdffffffffff3f7c220c4233887c22183703002004200d42338842137e200c42ffffffffffffff03837c220c3703a84e200441e0296a200c420020042903b04d221d420010d30b200441802b6a20042903d04d22204200201842137e2223420010d30b200441902c6a20042903c84d220a4200201442137e221f420010d30b200441a02d6a20042903c04d220b4200201b42137e221c420010d30b200441b02e6a20042903b84d220d4200201e42137e2215420010d30b200441d0296a200d4200200c420010d30b200441f0296a201d42002018420010d30b200441902b6a20204200201f420010d30b200441a02c6a200a4200201c420010d30b200441b02d6a200b42002015420010d30b200441c0296a200b4200200c420010d30b200441c02e6a200d42002018420010d30b200441802a6a201d42002014420010d30b200441a02b6a20204200201c420010d30b200441b02c6a200a42002015420010d30b20044190286a200a4200200c420010d30b200441c02d6a200b42002018420010d30b200441d02e6a200d42002014420010d30b200441902a6a201d4200201b420010d30b200441b02b6a202042002015420010d30b200441e0266a20204200200c420010d30b200441c02c6a200a42002018420010d30b200441d02d6a200b42002014420010d30b200441e02e6a200d4200201b420010d30b200441a02a6a201d4200201e420010d30b200441c02f6a20042903804e220e420020042903d84d220f420010d30b20044180336a202b290300221942002009290300221042137e420010d30b200441c0326a202a290300221642002008290300221242137e2235420010d30b20044180326a2029290300221342002007290300221742137e2222420010d30b200441c0316a2028290300221142002006290300221a42137e2221420010d30b20044190306a20114200200e420010d30b200441d02f6a200f42002010420010d30b200441f0326a201942002035420010d30b200441b0326a201642002022420010d30b200441f0316a201342002021420010d30b200441a0306a20134200200e420010d30b200441b0316a201142002010420010d30b200441e02f6a200f42002012420010d30b200441e0326a201942002022420010d30b200441a0326a201642002021420010d30b200441b0306a20164200200e420010d30b200441e0316a201342002010420010d30b200441a0316a201142002012420010d30b200441f02f6a200f42002017420010d30b200441d0326a201942002021420010d30b200441c0306a20194200200e420010d30b20044190326a201642002010420010d30b200441d0316a201342002012420010d30b20044190316a201142002017420010d30b20044180306a200f4200201a420010d30b200441b0226a200c4200200e420010d30b200441c0336a201a42002023420010d30b20044180346a20174200201f420010d30b200441c0346a20124200201c420010d30b20044180356a201042002015420010d30b200441c0226a20104200200c420010d30b200441d0306a200e42002018420010d30b200441b0336a201a4200201f420010d30b200441f0336a20174200201c420010d30b200441b0346a201242002015420010d30b200441d0226a20124200200c420010d30b200441f0346a201042002018420010d30b200441e0306a200e42002014420010d30b200441a0336a201a4200201c420010d30b200441e0336a201742002015420010d30b200441e0226a20174200200c420010d30b200441a0346a201242002018420010d30b200441e0346a201042002014420010d30b200441f0306a200e4200201b420010d30b20044190336a201a42002015420010d30b200441f0226a201a4200200c420010d30b200441d0336a201742002018420010d30b20044190346a201242002014420010d30b200441d0346a20104200201b420010d30b20044180316a200e4200201e420010d30b200441b02a6a200f4200201d420010d30b200441c02b6a20204200201142137e420010d30b200441d02c6a200a4200201342137e220e420010d30b200441e02d6a200b4200201642137e2218420010d30b200441f02e6a200d4200201942137e220c420010d30b200441802f6a200d4200200f420010d30b200441c02a6a201d42002011420010d30b200441d02b6a20204200200e420010d30b200441e02c6a200a42002018420010d30b200441f02d6a200b4200200c420010d30b200441802e6a200b4200200f420010d30b200441902f6a200d42002011420010d30b200441d02a6a201d42002013420010d30b200441e02b6a202042002018420010d30b200441f02c6a200a4200200c420010d30b200441802d6a200a4200200f420010d30b200441902e6a200b42002011420010d30b200441a02f6a200d42002013420010d30b200441e02a6a201d42002016420010d30b200441f02b6a20204200200c420010d30b200441802c6a20204200200f420010d30b200441902d6a200a42002011420010d30b200441a02e6a200b42002013420010d30b200441b02f6a200d42002016420010d30b200441f02a6a201d42002019420010d30b200420042903e032221320042903e02f7c220c20042903a0327c221820042903a0307c221d20042903b0317c222020042903f032221420042903d02f7c220a20042903b0327c220b20042903f0317c220d2004290390307c220e200429038033221520042903c02f7c220f20042903c0327c22102004290380327c221120042903c0317c221242338820044180336a41086a290300200441c02f6a41086a2903007c200f201554ad7c200441c0326a41086a2903007c2010200f54ad7c20044180326a41086a2903007c2011201054ad7c200441c0316a41086a2903007c2012201154ad7c420d86847c220f423388200441f0326a41086a290300200441d02f6a41086a2903007c200a201454ad7c200441b0326a41086a2903007c200b200a54ad7c200441f0316a41086a2903007c200d200b54ad7c20044190306a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff038322173703d84f200420042903d032221120042903f02f7c220b20042903b0307c220d20042903e0317c220e20042903a0317c2210200a423388200441e0326a41086a290300200441e02f6a41086a2903007c200c201354ad7c200441a0326a41086a2903007c2018200c54ad7c200441a0306a41086a2903007c201d201854ad7c200441b0316a41086a2903007c2020201d54ad7c200a202054ad7c420d86847c220c42ffffffffffffff0383221a3703e04f200420042903c03022132004290380307c22182004290390327c221d20042903d0317c22202004290390317c220a200c423388200441d0326a41086a290300200441f02f6a41086a2903007c200b201154ad7c200441b0306a41086a2903007c200d200b54ad7c200441e0316a41086a2903007c200e200d54ad7c200441a0316a41086a2903007c2010200e54ad7c200c201054ad7c420d86847c220c42ffffffffffffff038322223703e84f2004200c423388200441c0306a41086a29030020044180306a41086a2903007c2018201354ad7c20044190326a41086a2903007c201d201854ad7c200441d0316a41086a2903007c2020201d54ad7c20044190316a41086a2903007c200a202054ad7c200c200a54ad7c420d868442137e201242ffffffffffffff03837c220c42ffffffffffffff038322143703c84f2004200c423388200f42ffffffffffffff03837c22153703d04f200441a01f6a20042903f02222232004290380317c220c20042903d0337c22182004290390347c221d20042903d0347c2220200429039033223520042903f0307c220a20042903e0227c220b20042903a0347c220d20042903e0347c220e20042903a033223620042903e0307c220f20042903e0337c221020042903d0227c221120042903f0347c221220042903b033223720042903d0307c221320042903f0337c221620042903b0347c221920042903c0227c221b20042903c033223820042903b0227c221c2004290380347c221e20042903c0347c221f2004290380357c2221423388200441c0336a41086a290300200441b0226a41086a2903007c201c203854ad7c20044180346a41086a2903007c201e201c54ad7c200441c0346a41086a2903007c201f201e54ad7c20044180356a41086a2903007c2021201f54ad7c420d86847c221c423388200441b0336a41086a290300200441d0306a41086a2903007c2013203754ad7c200441f0336a41086a2903007c2016201354ad7c200441b0346a41086a2903007c2019201654ad7c200441c0226a41086a2903007c201b201954ad7c201c201b54ad7c420d86847c2213423388200441a0336a41086a290300200441e0306a41086a2903007c200f203654ad7c200441e0336a41086a2903007c2010200f54ad7c200441d0226a41086a2903007c2011201054ad7c200441f0346a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f42338820044190336a41086a290300200441f0306a41086a2903007c200a203554ad7c200441e0226a41086a2903007c200b200a54ad7c200441a0346a41086a2903007c200d200b54ad7c200441e0346a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a42ffffffffffffff0383223942f0ffffffffffff3f7c223a20227d221242338842137e200a423388200441f0226a41086a29030020044180316a41086a2903007c200c202354ad7c200441d0336a41086a2903007c2018200c54ad7c20044190346a41086a2903007c201d201854ad7c200441d0346a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e202142ffffffffffffff03837c222042ffffffffffffff0383223b42d0fdffffffffff3f7c223c20147d220a42ffffffffffffff03837c220c4200203b20147c2218420010d30b200441e0206a203920227c221d42002020423388201c42ffffffffffffff03837c223d42f0ffffffffffff3f7c223e20157d220b42ffffffffffffff0383200a4233887c222042137e420010d30b200441c0216a200f42ffffffffffffff0383223f201a7c220a4200201342ffffffffffffff0383224042f0ffffffffffff3f7c224120177d220d42ffffffffffffff0383200b4233887c220e42137e2213420010d30b200441d0216a204020177c220b4200203f42f0ffffffffffff3f7c2242201a7d220f42ffffffffffffff0383200d4233887c221042137e2211420010d30b200441f0206a203d20157c220d4200201242ffffffffffffff0383200f4233887c221242137e220f420010d30b200441a0206a200d4200200c420010d30b200441b01f6a201842002020420010d30b200441b0216a201d42002013420010d30b20044180226a200a42002011420010d30b200441e0216a200b4200200f420010d30b20044190206a200b4200200c420010d30b200441d0206a200d42002020420010d30b200441c01f6a20184200200e420010d30b200441f0216a201d42002011420010d30b20044190226a200a4200200f420010d30b20044180206a200a4200200c420010d30b200441c0206a200b42002020420010d30b20044180216a200d4200200e420010d30b200441d01f6a201842002010420010d30b200441a0226a201d4200200f420010d30b200441f01f6a201d4200200c420010d30b200441b0206a200a42002020420010d30b200441a0216a200b4200200e420010d30b20044190216a200d42002010420010d30b200441e01f6a201842002012420010d30b20044190246a2014420020042903e026222320042903a02a7c220c20042903c02c7c221820042903d02d7c221d20042903e02e7c222020042903b02b223520042903902a7c220a2004290390287c220b20042903c02d7c220d20042903d02e7c220e20042903a02b223620042903802a7c220f20042903b02c7c221020042903c0297c221120042903c02e7c221220042903902b223720042903f0297c221320042903a02c7c221620042903b02d7c221920042903d0297c221b20042903802b223820042903e0297c221c20042903902c7c221e20042903a02d7c221f20042903b02e7c2221423388200441802b6a41086a290300200441e0296a41086a2903007c201c203854ad7c200441902c6a41086a2903007c201e201c54ad7c200441a02d6a41086a2903007c201f201e54ad7c200441b02e6a41086a2903007c2021201f54ad7c420d86847c221c423388200441902b6a41086a290300200441f0296a41086a2903007c2013203754ad7c200441a02c6a41086a2903007c2016201354ad7c200441b02d6a41086a2903007c2019201654ad7c200441d0296a41086a2903007c201b201954ad7c201c201b54ad7c420d86847c2213423388200441a02b6a41086a290300200441802a6a41086a2903007c200f203654ad7c200441b02c6a41086a2903007c2010200f54ad7c200441c0296a41086a2903007c2011201054ad7c200441c02e6a41086a2903007c2012201154ad7c2013201254ad7c420d86847c220f423388200441b02b6a41086a290300200441902a6a41086a2903007c200a203554ad7c20044190286a41086a2903007c200b200a54ad7c200441c02d6a41086a2903007c200d200b54ad7c200441d02e6a41086a2903007c200e200d54ad7c200f200e54ad7c420d86847c220a423388200441e0266a41086a290300200441a02a6a41086a2903007c200c202354ad7c200441c02c6a41086a2903007c2018200c54ad7c200441d02d6a41086a2903007c201d201854ad7c200441e02e6a41086a2903007c2020201d54ad7c200a202054ad7c420d868442137e202142ffffffffffffff03837c220c42ffffffffffffff03832218420010d30b200441c0256a200a42ffffffffffffff0383221d4200201542137e420010d30b200441f0266a200f42ffffffffffffff038322204200201742137e220e420010d30b200441a0286a201342ffffffffffffff0383220a4200201a42137e220d420010d30b200441b0256a200c423388201c42ffffffffffffff03837c220b4200202242137e220c420010d30b200441a0256a200b42002014420010d30b20044180246a201842002015420010d30b200441d0256a201d4200200e420010d30b20044180276a20204200200d420010d30b200441b0286a200a4200200c420010d30b200441c0286a200a42002014420010d30b20044190256a200b42002015420010d30b200441f0236a201842002017420010d30b200441e0256a201d4200200d420010d30b20044190276a20204200200c420010d30b200441a0276a202042002014420010d30b200441d0286a200a42002015420010d30b20044180256a200b42002017420010d30b200441e0236a20184200201a420010d30b200441f0256a201d4200200c420010d30b20044180266a201d42002014420010d30b200441b0276a202042002015420010d30b200441e0286a200a42002017420010d30b200441f0246a200b4200201a420010d30b200441d0236a201842002022420010d30b200420042903e025221e20042903f0237c220c2004290390277c220d20042903c0287c220e2004290390257c220f20042903d025221f2004290380247c22102004290380277c221120042903b0287c221220042903a0257c221320042903c02522212004290390247c221620042903f0267c221920042903a0287c221b20042903b0257c221c423388200441c0256a41086a29030020044190246a41086a2903007c2016202154ad7c200441f0266a41086a2903007c2019201654ad7c200441a0286a41086a2903007c201b201954ad7c200441b0256a41086a2903007c201c201b54ad7c420d86847c2216423388200441d0256a41086a29030020044180246a41086a2903007c2010201f54ad7c20044180276a41086a2903007c2011201054ad7c200441b0286a41086a2903007c2012201154ad7c200441a0256a41086a2903007c2013201254ad7c2016201354ad7c420d86847c221042ffffffffffffff03833703a850200420042903f025221b20042903e0237c221120042903a0277c221220042903d0287c22132004290380257c22192010423388200441e0256a41086a290300200441f0236a41086a2903007c200c201e54ad7c20044190276a41086a2903007c200d200c54ad7c200441c0286a41086a2903007c200e200d54ad7c20044190256a41086a2903007c200f200e54ad7c2010200f54ad7c420d86847c220c42ffffffffffffff03833703b0502004200429038026221e20042903d0237c220d20042903b0277c220e20042903e0287c220f20042903f0247c2210200c423388200441f0256a41086a290300200441e0236a41086a2903007c2011201b54ad7c200441a0276a41086a2903007c2012201154ad7c200441d0286a41086a2903007c2013201254ad7c20044180256a41086a2903007c2019201354ad7c200c201954ad7c420d86847c220c42ffffffffffffff03833703b8502004200c42338820044180266a41086a290300200441d0236a41086a2903007c200d201e54ad7c200441b0276a41086a2903007c200e200d54ad7c200441e0286a41086a2903007c200f200e54ad7c200441f0246a41086a2903007c2010200f54ad7c200c201054ad7c420d868442137e201c42ffffffffffffff03837c220c42ffffffffffffff0383370398502004200c423388201642ffffffffffffff03837c3703a050200441b01f6a41086a2903002143200441b0216a41086a290300214420042903b01f213720042903b021210c20044180226a41086a29030021452004290380222138200441e0216a41086a290300214620042903e0212147200441a0206a41086a290300214820042903a0202149200441a01f6a41086a290300214a200441e0206a41086a290300214b20042903a01f214c20042903e020210d200441c0216a41086a290300214d20042903c021214e200441d0216a41086a290300214f20042903d0212150200441f0206a41086a290300215120042903f020215220042903f021210f20042903c01f21212004290390222123200429039020213520042903d0202136200441f0216a41086a2903002153200441c01f6a41086a290300215420044190226a41086a290300215520044190206a41086a2903002156200441d0206a41086a290300215720042903a022211020042903d01f211b200429038020211c20042903c020211e200429038021211f200441a0226a41086a2903002158200441d01f6a41086a290300215920044180206a41086a290300215a200441c0206a41086a290300215b20044180216a41086a290300215c20042903e01f211220042903f01f211120042903b020211320042903a02121162004290390212119200441e01f6a41086a290300215d200441f01f6a41086a290300215e200441b0206a41086a290300215f200441a0216a41086a290300216020044190216a41086a290300216120044190cc006a20044198d0006a41011070200441d01c6a20042903904c220e4200201920162013201120127c22127c22137c22167c2219201f201e201c2010201b7c221b7c221c7c221e7c221f203620352023200f20217c22217c22237c22357c2236204920472038200c20377c22377c22387c22477c224920522050204e200d204c7c224c7c224e7c22507c22524233882051204f204d204b204a7c204c200d54ad7c7c204e204c54ad7c7c2050204e54ad7c7c2052205054ad7c420d86847c220d423388204820462045204420437c2037200c54ad7c7c2038203754ad7c7c2047203854ad7c7c2049204754ad7c200d204954ad7c420d86847c2237423388205720562055205320547c2021200f54ad7c7c2023202154ad7c7c2035202354ad7c7c2036203554ad7c2037203654ad7c420d86847c2221423388205c205b205a205820597c201b201054ad7c7c201c201b54ad7c7c201e201c54ad7c7c201f201e54ad7c2021201f54ad7c420d86847c220f42338820612060205f205e205d7c2012201154ad7c7c2013201254ad7c7c2016201354ad7c7c2019201654ad7c200f201954ad7c420d868442137e205242ffffffffffffff03837c221142ffffffffffffff0383220c420010d30b200441d01e6a200f42ffffffffffffff03832219420020042903984c220f42137e420010d30b200441801e6a202142ffffffffffffff03832216420020042903a04c221042137e221c420010d30b200441b01d6a203742ffffffffffffff03832213420020042903a84c221242137e221b420010d30b200441a01d6a2011423388200d42ffffffffffffff03837c220d420020042903b04c221e42137e2211420010d30b200441901d6a200d4200200e420010d30b200441c01c6a200c4200200f420010d30b200441e01e6a20194200201c420010d30b200441901e6a20164200201b420010d30b200441c01d6a201342002011420010d30b200441d01d6a20134200200e420010d30b200441801d6a200d4200200f420010d30b200441b01c6a200c42002010420010d30b200441f01e6a20194200201b420010d30b200441a01e6a201642002011420010d30b200441b01e6a20164200200e420010d30b200441e01d6a20134200200f420010d30b200441f01c6a200d42002010420010d30b200441a01c6a200c42002012420010d30b200441801f6a201942002011420010d30b200441901f6a20194200200e420010d30b200441c01e6a20164200200f420010d30b200441f01d6a201342002010420010d30b200441e01c6a200d42002012420010d30b200441901c6a200c4200201e420010d30b200420042903f01e223620042903b01c7c220e20042903a01e7c220f20042903d01d7c221020042903801d7c221120042903e01e223720042903c01c7c221220042903901e7c221b20042903c01d7c221c20042903901d7c221e20042903d01e223820042903d01c7c221f20042903801e7c222120042903b01d7c222320042903a01d7c2235423388200441d01e6a41086a290300200441d01c6a41086a2903007c201f203854ad7c200441801e6a41086a2903007c2021201f54ad7c200441b01d6a41086a2903007c2023202154ad7c200441a01d6a41086a2903007c2035202354ad7c420d86847c221f423388200441e01e6a41086a290300200441c01c6a41086a2903007c2012203754ad7c200441901e6a41086a2903007c201b201254ad7c200441c01d6a41086a2903007c201c201b54ad7c200441901d6a41086a2903007c201e201c54ad7c201f201e54ad7c420d86847c221242ffffffffffffff03833703b84a200420042903801f222320042903a01c7c221b20042903b01e7c221c20042903e01d7c221e20042903f01c7c22212012423388200441f01e6a41086a290300200441b01c6a41086a2903007c200e203654ad7c200441a01e6a41086a2903007c200f200e54ad7c200441d01d6a41086a2903007c2010200f54ad7c200441801d6a41086a2903007c2011201054ad7c2012201154ad7c420d86847c220e42ffffffffffffff03833703c04a200420042903901f223620042903901c7c220f20042903c01e7c221020042903f01d7c221120042903e01c7c2212200e423388200441801f6a41086a290300200441a01c6a41086a2903007c201b202354ad7c200441b01e6a41086a2903007c201c201b54ad7c200441e01d6a41086a2903007c201e201c54ad7c200441f01c6a41086a2903007c2021201e54ad7c200e202154ad7c420d86847c220e42ffffffffffffff03833703c84a2004200e423388200441901f6a41086a290300200441901c6a41086a2903007c200f203654ad7c200441c01e6a41086a2903007c2010200f54ad7c200441f01d6a41086a2903007c2011201054ad7c200441e01c6a41086a2903007c2012201154ad7c200e201254ad7c420d868442137e203542ffffffffffffff03837c220e42ffffffffffffff03833703a84a2004200e423388201f42ffffffffffffff03837c3703b04a200441b0cd006a41106a4200370300200441b0cd006a41186a4200370300200441b0cd006a41206a4200370300200442003703b84d200442013703b04d200441f0c7006a200441b0cd006a200441a8ca006a1071200441f0136a200c420020042903f847220e420010d30b20044190156a200441f0c7006a41286a290300220f4200200d42137e420010d30b200441b0166a200329030022104200201342137e221e420010d30b200441d0176a200229030022114200201642137e221c420010d30b200441f0186a200529030022124200201942137e221b420010d30b200441e0186a20124200200c420010d30b200441e0136a200e4200200d420010d30b20044180156a200f4200201e420010d30b200441a0166a20104200201c420010d30b200441c0176a20114200201b420010d30b200441b0176a20114200200c420010d30b200441d0186a20124200200d420010d30b200441d0136a200e42002013420010d30b200441f0146a200f4200201c420010d30b20044190166a20104200201b420010d30b20044180166a20104200200c420010d30b200441a0176a20114200200d420010d30b200441c0186a201242002013420010d30b200441f0126a200e42002016420010d30b200441e0146a200f4200201b420010d30b200441d0146a200f4200200c420010d30b200441f0156a20104200200d420010d30b20044190176a201142002013420010d30b200441b0186a201242002016420010d30b20044190126a200e42002019420010d30b200441b0116a200429039850220c4200200e420010d30b200441c0146a200f420020042903a050220d42137e420010d30b200441e0156a2010420020042903a850221342137e221c420010d30b20044180176a2011420020042903b050221942137e221b420010d30b200441a0186a2012420020042903b850221e42137e2216420010d30b20044190186a20124200200c420010d30b200441a0116a200e4200200d420010d30b200441b0146a200f4200201c420010d30b200441d0156a20104200201b420010d30b200441f0166a201142002016420010d30b200441e0166a20114200200c420010d30b20044180186a20124200200d420010d30b20044190116a200e42002013420010d30b200441a0146a200f4200201b420010d30b200441c0156a201042002016420010d30b200441b0156a20104200200c420010d30b200441d0166a20114200200d420010d30b200441f0176a201242002013420010d30b200441b0106a200e42002019420010d30b20044190146a200f42002016420010d30b20044180146a200f4200200c420010d30b200441a0156a20104200200d420010d30b200441c0166a201142002013420010d30b200441e0176a201242002019420010d30b200441d00f6a200e4200201e420010d30b200441800d6a20042903802c224720042903f02a7c220c20042903902d7c220d20042903a02e7c220e20042903b02f7c220f20042903f02b224920042903e02a7c221020042903802d7c221120042903902e7c221220042903a02f7c221320042903e02b224c20042903d02a7c221620042903f02c7c221920042903802e7c221b20042903902f7c221c20042903d02b224e20042903c02a7c221e20042903e02c7c221f20042903f02d7c222120042903802f7c222320042903c02b225020042903b02a7c223520042903d02c7c223620042903e02d7c223720042903f02e7c2238423388200441c02b6a41086a290300200441b02a6a41086a2903007c2035205054ad7c200441d02c6a41086a2903007c2036203554ad7c200441e02d6a41086a2903007c2037203654ad7c200441f02e6a41086a2903007c2038203754ad7c420d86847c2235423388200441d02b6a41086a290300200441c02a6a41086a2903007c201e204e54ad7c200441e02c6a41086a2903007c201f201e54ad7c200441f02d6a41086a2903007c2021201f54ad7c200441802f6a41086a2903007c2023202154ad7c2035202354ad7c420d86847c221f423388200441e02b6a41086a290300200441d02a6a41086a2903007c2016204c54ad7c200441f02c6a41086a2903007c2019201654ad7c200441802e6a41086a2903007c201b201954ad7c200441902f6a41086a2903007c201c201b54ad7c201f201c54ad7c420d86847c2216423388200441f02b6a41086a290300200441e02a6a41086a2903007c2010204954ad7c200441802d6a41086a2903007c2011201054ad7c200441902e6a41086a2903007c2012201154ad7c200441a02f6a41086a2903007c2013201254ad7c2016201354ad7c420d86847c2210423388200441802c6a41086a290300200441f02a6a41086a2903007c200c204754ad7c200441902d6a41086a2903007c200d200c54ad7c200441a02e6a41086a2903007c200e200d54ad7c200441b02f6a41086a2903007c200f200e54ad7c2010200f54ad7c420d868442137e203842ffffffffffffff03837c225242ffffffffffffff0383220d4200200429038014224320042903d00f7c220c20042903a0157c220e20042903c0167c220f20042903e0177c2211200429039014224420042903b0107c221220042903b0157c221320042903d0167c221920042903f0177c221b20042903a01422452004290390117c221c20042903c0157c221e20042903e0167c22212004290380187c222320042903b014224620042903a0117c223620042903d0157c223720042903f0167c22382004290390187c224720042903c014224820042903b0117c224920042903e0157c224c2004290380177c224e20042903a0187c2250423388200441c0146a41086a290300200441b0116a41086a2903007c2049204854ad7c200441e0156a41086a2903007c204c204954ad7c20044180176a41086a2903007c204e204c54ad7c200441a0186a41086a2903007c2050204e54ad7c420d86847c2249423388200441b0146a41086a290300200441a0116a41086a2903007c2036204654ad7c200441d0156a41086a2903007c2037203654ad7c200441f0166a41086a2903007c2038203754ad7c20044190186a41086a2903007c2047203854ad7c2049204754ad7c420d86847c2236423388200441a0146a41086a29030020044190116a41086a2903007c201c204554ad7c200441c0156a41086a2903007c201e201c54ad7c200441e0166a41086a2903007c2021201e54ad7c20044180186a41086a2903007c2023202154ad7c2036202354ad7c420d86847c221e42338820044190146a41086a290300200441b0106a41086a2903007c2012204454ad7c200441b0156a41086a2903007c2013201254ad7c200441d0166a41086a2903007c2019201354ad7c200441f0176a41086a2903007c201b201954ad7c201e201b54ad7c420d86847c221242338820044180146a41086a290300200441d00f6a41086a2903007c200c204354ad7c200441a0156a41086a2903007c200e200c54ad7c200441c0166a41086a2903007c200f200e54ad7c200441e0176a41086a2903007c2011200f54ad7c2012201154ad7c420d868442137e205042ffffffffffffff03837c220c42ffffffffffffff0383221b420010d30b200441800f6a201242ffffffffffffff0383221c42002052423388203542ffffffffffffff03837c220e42137e420010d30b200441e00f6a201e42ffffffffffffff0383221e4200201f42ffffffffffffff0383220f42137e2212420010d30b200441c0106a203642ffffffffffffff0383221f4200201642ffffffffffffff0383221642137e2211420010d30b200441d00d6a200c423388204942ffffffffffffff03837c22214200201042ffffffffffffff0383221942137e220c420010d30b200441c00d6a20214200200d420010d30b200441f00c6a201b4200200e420010d30b200441900f6a201c42002012420010d30b200441f00f6a201e42002011420010d30b200441d0106a201f4200200c420010d30b200441e0106a201f4200200d420010d30b200441b00d6a20214200200e420010d30b200441e00c6a201b4200200f420010d30b200441a00f6a201c42002011420010d30b20044180106a201e4200200c420010d30b20044190106a201e4200200d420010d30b200441f0106a201f4200200e420010d30b200441a00d6a20214200200f420010d30b200441a00c6a201b42002016420010d30b200441b00f6a201c4200200c420010d30b200441c00f6a201c4200200d420010d30b200441a0106a201e4200200e420010d30b20044180116a201f4200200f420010d30b200441900d6a202142002016420010d30b200441f00b6a201b42002019420010d30b200441f0096a20042903c00f224820042903f00b7c220c20042903a0107c22102004290380117c221120042903900d7c221220042903b00f224a20042903a00c7c22132004290390107c222320042903f0107c223520042903a00d7c223620042903a00f224b20042903e00c7c22372004290380107c223820042903e0107c224720042903b00d7c224920042903900f224d20042903f00c7c224c20042903f00f7c224e20042903d0107c225020042903c00d7c225220042903800f224f20042903800d7c224320042903e00f7c224420042903c0107c224520042903d00d7c2246423388200441800f6a41086a290300200441800d6a41086a2903007c2043204f54ad7c200441e00f6a41086a2903007c2044204354ad7c200441c0106a41086a2903007c2045204454ad7c200441d00d6a41086a2903007c2046204554ad7c420d86847c2243423388200441900f6a41086a290300200441f00c6a41086a2903007c204c204d54ad7c200441f00f6a41086a2903007c204e204c54ad7c200441d0106a41086a2903007c2050204e54ad7c200441c00d6a41086a2903007c2052205054ad7c2043205254ad7c420d86847c224c423388200441a00f6a41086a290300200441e00c6a41086a2903007c2037204b54ad7c20044180106a41086a2903007c2038203754ad7c200441e0106a41086a2903007c2047203854ad7c200441b00d6a41086a2903007c2049204754ad7c204c204954ad7c420d86847c2237423388200441b00f6a41086a290300200441a00c6a41086a2903007c2013204a54ad7c20044190106a41086a2903007c2023201354ad7c200441f0106a41086a2903007c2035202354ad7c200441a00d6a41086a2903007c2036203554ad7c2037203654ad7c420d86847c2238423388200441c00f6a41086a290300200441f00b6a41086a2903007c200c204854ad7c200441a0106a41086a2903007c2010200c54ad7c20044180116a41086a2903007c2011201054ad7c200441900d6a41086a2903007c2012201154ad7c2038201254ad7c420d868442137e204642ffffffffffffff03837c225142ffffffffffffff03832223420020042903d01422532004290390127c220c20042903f0157c22102004290390177c221120042903b0187c221220042903e014225420042903f0127c22132004290380167c223520042903a0177c223620042903c0187c224720042903f014225520042903d0137c22492004290390167c224e20042903b0177c225020042903d0187c2252200429038015225620042903e0137c224420042903a0167c224520042903c0177c224620042903e0187c2248200429039015225720042903f0137c224a20042903b0167c224b20042903d0177c224d20042903f0187c224f42338820044190156a41086a290300200441f0136a41086a2903007c204a205754ad7c200441b0166a41086a2903007c204b204a54ad7c200441d0176a41086a2903007c204d204b54ad7c200441f0186a41086a2903007c204f204d54ad7c420d86847c224a42338820044180156a41086a290300200441e0136a41086a2903007c2044205654ad7c200441a0166a41086a2903007c2045204454ad7c200441c0176a41086a2903007c2046204554ad7c200441e0186a41086a2903007c2048204654ad7c204a204854ad7c420d86847c2244423388200441f0146a41086a290300200441d0136a41086a2903007c2049205554ad7c20044190166a41086a2903007c204e204954ad7c200441b0176a41086a2903007c2050204e54ad7c200441d0186a41086a2903007c2052205054ad7c2044205254ad7c420d86847c2249423388200441e0146a41086a290300200441f0126a41086a2903007c2013205454ad7c20044180166a41086a2903007c2035201354ad7c200441a0176a41086a2903007c2036203554ad7c200441c0186a41086a2903007c2047203654ad7c2049204754ad7c420d86847c2213423388200441d0146a41086a29030020044190126a41086a2903007c200c205354ad7c200441f0156a41086a2903007c2010200c54ad7c20044190176a41086a2903007c2011201054ad7c200441b0186a41086a2903007c2012201154ad7c2013201254ad7c420d868442137e204f42ffffffffffffff03837c224e42ffffffffffffff0383220c420010d30b200441c00a6a201342ffffffffffffff0383221042002051423388204342ffffffffffffff03837c223542137e420010d30b200441e00a6a204942ffffffffffffff038322114200204c42ffffffffffffff0383223642137e224c420010d30b200441900b6a204442ffffffffffffff038322124200203742ffffffffffffff0383224742137e2249420010d30b200441d00b6a204e423388204a42ffffffffffffff03837c22134200203842ffffffffffffff0383223842137e2237420010d30b200441e0096a201342002023420010d30b200441b00a6a200c42002035420010d30b200441d00a6a20104200204c420010d30b200441800b6a201142002049420010d30b200441c00b6a201242002037420010d30b200441d0096a201242002023420010d30b200441a00a6a201342002035420010d30b200441b00c6a200c42002036420010d30b200441f00a6a201042002049420010d30b200441b00b6a201142002037420010d30b200441f0086a201142002023420010d30b200441900a6a201242002035420010d30b200441c00c6a201342002036420010d30b200441800c6a200c42002047420010d30b200441a00b6a201042002037420010d30b20044190086a201042002023420010d30b200441800a6a201142002035420010d30b200441d00c6a201242002036420010d30b200441900c6a201342002047420010d30b200441e00b6a200c42002038420010d30b200441c0236a2018420042b0c1bad0f4e48603420010d30b20044190266a201d420042a7a7fbf49beaf607420010d30b200441c0276a2020420042a0d69f90da80b1cb00420010d30b200441f0286a200a420042badf96dcb5c3bac700420010d30b200441e0246a200b420042a7ecfac2b5f7ea19420010d30b200441d0246a200b420042b0c1bad0f4e48603420010d30b200441b0236a20184200429db1bce4dfb435420010d30b200441a0266a201d420042a0d69f90da80b1cb00420010d30b200441d0276a2020420042badf96dcb5c3bac700420010d30b20044180296a200a420042a7ecfac2b5f7ea19420010d30b20044190296a200a420042b0c1bad0f4e48603420010d30b200441c0246a200b4200429db1bce4dfb435420010d30b200441a0236a2018420042e098f4e5e9ebfb03420010d30b200441b0266a201d420042badf96dcb5c3bac700420010d30b200441e0276a2020420042a7ecfac2b5f7ea19420010d30b200441f0276a2020420042b0c1bad0f4e48603420010d30b200441a0296a200a4200429db1bce4dfb435420010d30b200441b0246a200b420042e098f4e5e9ebfb03420010d30b20044190236a20184200429e9981b4dab2e103420010d30b200441c0266a201d420042a7ecfac2b5f7ea19420010d30b200441d0266a201d420042b0c1bad0f4e48603420010d30b20044180286a20204200429db1bce4dfb435420010d30b200441b0296a200a420042e098f4e5e9ebfb03420010d30b200441a0246a200b4200429e9981b4dab2e103420010d30b20044180236a20184200429df893c0a486ae01420010d30b200441c0196a20042903c84f2223420042b0c1bad0f4e48603420010d30b200441901a6a20042903e84f2235420042a7a7fbf49beaf607420010d30b200441e01a6a20042903e04f2236420042a0d69f90da80b1cb00420010d30b200441b01b6a20042903d84f2237420042badf96dcb5c3bac700420010d30b200441801c6a20042903d04f2238420042a7ecfac2b5f7ea19420010d30b200441f01b6a2038420042b0c1bad0f4e48603420010d30b200441b0196a20234200429db1bce4dfb435420010d30b200441801a6a2035420042a0d69f90da80b1cb00420010d30b200441d01a6a2036420042badf96dcb5c3bac700420010d30b200441a01b6a2037420042a7ecfac2b5f7ea19420010d30b200441901b6a2037420042b0c1bad0f4e48603420010d30b200441e01b6a20384200429db1bce4dfb435420010d30b200441a0196a2023420042e098f4e5e9ebfb03420010d30b200441f0196a2035420042badf96dcb5c3bac700420010d30b200441c01a6a2036420042a7ecfac2b5f7ea19420010d30b200441b01a6a2036420042b0c1bad0f4e48603420010d30b200441801b6a20374200429db1bce4dfb435420010d30b200441d01b6a2038420042e098f4e5e9ebfb03420010d30b20044190196a20234200429e9981b4dab2e103420010d30b200441e0196a2035420042a7ecfac2b5f7ea19420010d30b200441d0196a2035420042b0c1bad0f4e48603420010d30b200441a01a6a20364200429db1bce4dfb435420010d30b200441f01a6a2037420042e098f4e5e9ebfb03420010d30b200441c01b6a20384200429e9981b4dab2e103420010d30b20044180196a20234200429df893c0a486ae01420010d30b200441a00e6a200c420042ea81f582a8b53f420010d30b20044180126a2010420042bbda9284b7cbdd1b420010d30b200441e0126a201142004288f5a7f5b28623420010d30b200441c0136a2012420042edd5d7bc83fb803c420010d30b200441f00e6a2013420042edc19ab7ab9cc0c700420010d30b200441e00e6a2013420042ea81f582a8b53f420010d30b200441900e6a200c420042b9a6dff282e9ba01420010d30b200441f0116a201042004288f5a7f5b28623420010d30b200441d0126a2011420042edd5d7bc83fb803c420010d30b200441b0136a2012420042edc19ab7ab9cc0c700420010d30b200441a0136a2012420042ea81f582a8b53f420010d30b200441d00e6a2013420042b9a6dff282e9ba01420010d30b200441800e6a200c420042d8f8d29390ec01420010d30b200441e0116a2010420042edd5d7bc83fb803c420010d30b200441c0126a2011420042edc19ab7ab9cc0c700420010d30b200441b0126a2011420042ea81f582a8b53f420010d30b20044190136a2012420042b9a6dff282e9ba01420010d30b200441c00e6a2013420042d8f8d29390ec01420010d30b200441f00d6a200c420042ff91f789b6a19403420010d30b200441d0116a2010420042edc19ab7ab9cc0c700420010d30b200441c0116a2010420042ea81f582a8b53f420010d30b200441a0126a2011420042b9a6dff282e9ba01420010d30b20044180136a2012420042d8f8d29390ec01420010d30b200441b00e6a2013420042ff91f789b6a19403420010d30b200441e00d6a200c420042fff5f38289d9e103420010d30b200441a0076a200429039008224820042903e00b7c220c20042903800a7c221020042903d00c7c221120042903900c7c221220042903a00b224a20042903800c7c221320042903f0087c222320042903900a7c223520042903c00c7c223620042903f00a224b20042903b00c7c223720042903b00b7c223820042903d0097c224720042903a00a7c224920042903d00a224d20042903b00a7c224c20042903800b7c224e20042903c00b7c225020042903e0097c225220042903c00a224f20042903f0097c224320042903e00a7c224420042903900b7c224520042903d00b7c2246423388200441c00a6a41086a290300200441f0096a41086a2903007c2043204f54ad7c200441e00a6a41086a2903007c2044204354ad7c200441900b6a41086a2903007c2045204454ad7c200441d00b6a41086a2903007c2046204554ad7c420d86847c2243423388200441d00a6a41086a290300200441b00a6a41086a2903007c204c204d54ad7c200441800b6a41086a2903007c204e204c54ad7c200441c00b6a41086a2903007c2050204e54ad7c200441e0096a41086a2903007c2052205054ad7c2043205254ad7c420d86847c224c423388200441f00a6a41086a290300200441b00c6a41086a2903007c2037204b54ad7c200441b00b6a41086a2903007c2038203754ad7c200441d0096a41086a2903007c2047203854ad7c200441a00a6a41086a2903007c2049204754ad7c204c204954ad7c420d86847c2237423388200441a00b6a41086a290300200441800c6a41086a2903007c2013204a54ad7c200441f0086a41086a2903007c2023201354ad7c200441900a6a41086a2903007c2035202354ad7c200441c00c6a41086a2903007c2036203554ad7c2037203654ad7c420d86847c223642338820044190086a41086a290300200441e00b6a41086a2903007c200c204854ad7c200441800a6a41086a2903007c2010200c54ad7c200441d00c6a41086a2903007c2011201054ad7c200441900c6a41086a2903007c2012201154ad7c2036201254ad7c420d868442137e204642ffffffffffffff03837c220c42ffffffffffffff038322104200200d420010d30b200441f0076a20194200200c423388204342ffffffffffffff03837c221142137e225a420010d30b20044190096a20164200204c42ffffffffffffff0383221342137e224c420010d30b200441c0086a200f4200203742ffffffffffffff0383223542137e2223420010d30b200441d0066a200e4200203642ffffffffffffff0383224e42137e2212420010d30b20044190076a200e42002010420010d30b200441e0076a200d42002011420010d30b20044180096a20194200204c420010d30b200441b0086a201642002023420010d30b200441c0066a200f42002012420010d30b20044180076a200f42002010420010d30b200441d0076a200e42002011420010d30b200441a0096a200d42002013420010d30b200441a0086a201942002023420010d30b200441b0066a201642002012420010d30b200441f0066a201642002010420010d30b200441c0076a200f42002011420010d30b200441b0096a200e42002013420010d30b200441d0086a200d42002035420010d30b200441a0066a201942002012420010d30b200441e0066a201942002010420010d30b200441b0076a201642002011420010d30b200441c0096a200f42002013420010d30b200441e0086a200e42002035420010d30b20044180086a200d4200204e420010d30b200420042903a008224820042903a0097c220c20042903b0067c22362004290380077c223720042903d0077c2238200429038009224a20042903e0077c224720042903b0087c224920042903c0067c22502004290390077c225220042903f007224b20042903a0077c22432004290390097c224420042903c0087c224520042903d0067c2246423388200441f0076a41086a290300200441a0076a41086a2903007c2043204b54ad7c20044190096a41086a2903007c2044204354ad7c200441c0086a41086a2903007c2045204454ad7c200441d0066a41086a2903007c2046204554ad7c420d86847c224342338820044180096a41086a290300200441e0076a41086a2903007c2047204a54ad7c200441b0086a41086a2903007c2049204754ad7c200441c0066a41086a2903007c2050204954ad7c20044190076a41086a2903007c2052205054ad7c2043205254ad7c420d86847c224742ffffffffffffff038337038048200420042903a006224520042903d0087c224920042903f0067c225020042903c0077c225220042903b0097c22442047423388200441a0086a41086a290300200441a0096a41086a2903007c200c204854ad7c200441b0066a41086a2903007c2036200c54ad7c20044180076a41086a2903007c2037203654ad7c200441d0076a41086a2903007c2038203754ad7c2047203854ad7c420d86847c220c42ffffffffffffff038337038848200420042903e00622482004290380087c223620042903b0077c223720042903c0097c223820042903e0087c2247200c423388200441a0066a41086a290300200441d0086a41086a2903007c2049204554ad7c200441f0066a41086a2903007c2050204954ad7c200441c0076a41086a2903007c2052205054ad7c200441b0096a41086a2903007c2044205254ad7c200c204454ad7c420d86847c220c42ffffffffffffff0383370390482004200c423388200441e0066a41086a29030020044180086a41086a2903007c2036204854ad7c200441b0076a41086a2903007c2037203654ad7c200441c0096a41086a2903007c2038203754ad7c200441e0086a41086a2903007c2047203854ad7c200c204754ad7c420d868442137e204642ffffffffffffff03837c220c42ffffffffffffff03833703f0472004200c423388204342ffffffffffffff03837c3703f847200441a0266a41086a290300215b200441b0236a41086a290300215c20042903a026210c20042903b0232151200441d0276a41086a290300215d20042903d027215320044180296a41086a290300215e2004290380292154200441d0246a41086a290300215f20042903d024215520044190266a41086a2903002160200441c0236a41086a2903002161200429039026213620042903c0232156200441c0276a41086a290300216220042903c0272157200441f0286a41086a290300216320042903f0282158200441e0246a41086a290300216420042903e024215920042903b026213720042903a023214a20042903e027214b200429039029214d20042903c024214f200441b0266a41086a2903002165200441a0236a41086a2903002166200441e0276a41086a290300216720044190296a41086a2903002168200441c0246a41086a290300216920042903c0262138200429039023214420042903f027214520042903a029214620042903b0242148200441c0266a41086a290300216a20044190236a41086a290300216b200441f0276a41086a290300216c200441a0296a41086a290300216d200441b0246a41086a290300216e20042903d02621472004290380232149200429038028215020042903b029215220042903a0242143200441d0266a41086a290300216f20044180236a41086a290300217020044180286a41086a2903002171200441b0296a41086a2903002172200441a0246a41086a2903002173200441c8cb006a200441f0c7006a106d20042d00c84b410171106f2102200420042903c84f2274204320522050204720497c22497c22507c22527c2243204820462045203820447c22447c22457c22467c2248204f204d204b2037204a7c224a7c224b7c224d7c224f205520542053200c20517c22517c22537c22547c2255205920582057203620567c22567c22577c22587c2259423388206420632062206020617c2056203654ad7c7c2057205654ad7c7c2058205754ad7c7c2059205854ad7c420d86847c2236423388205f205e205d205b205c7c2051200c54ad7c7c2053205154ad7c7c2054205354ad7c7c2055205454ad7c2036205554ad7c420d86847c2251423388206920682067206520667c204a203754ad7c7c204b204a54ad7c7c204d204b54ad7c7c204f204d54ad7c2051204f54ad7c420d86847c2237423388206e206d206c206a206b7c2044203854ad7c7c2045204454ad7c7c2046204554ad7c7c2048204654ad7c2037204854ad7c420d86847c2238423388207320722071206f20707c2049204754ad7c7c2050204954ad7c7c2052205054ad7c7c2043205254ad7c2038204354ad7c420d868442137e205942ffffffffffffff03837c224742ffffffffffffff03838542002002ad42ff01837d220c832074853703c84f200420042903d04f22492047423388203642ffffffffffffff03837c85200c832049853703d04f200420042903d84f2236205142ffffffffffffff038385200c832036853703d84f200420042903e04f2236203742ffffffffffffff038385200c832036853703e04f200420042903e84f2236203842ffffffffffffff038385200c832036853703e84f20044190066a20104200201820042903d01922562004290380197c223620042903a01a7c223720042903f01a7c223820042903c01b7c224720042903e01922572004290390197c224920042903b01a7c225020042903801b7c225220042903d01b7c224320042903f019225820042903a0197c224420042903c01a7c224520042903901b7c224620042903e01b7c224820042903801a225920042903b0197c224a20042903d01a7c224b20042903a01b7c224d20042903f01b7c224f20042903901a225b20042903c0197c225120042903e01a7c225320042903b01b7c225420042903801c7c2255423388200441901a6a41086a290300200441c0196a41086a2903007c2051205b54ad7c200441e01a6a41086a2903007c2053205154ad7c200441b01b6a41086a2903007c2054205354ad7c200441801c6a41086a2903007c2055205454ad7c420d86847c2251423388200441801a6a41086a290300200441b0196a41086a2903007c204a205954ad7c200441d01a6a41086a2903007c204b204a54ad7c200441a01b6a41086a2903007c204d204b54ad7c200441f01b6a41086a2903007c204f204d54ad7c2051204f54ad7c420d86847c224a423388200441f0196a41086a290300200441a0196a41086a2903007c2044205854ad7c200441c01a6a41086a2903007c2045204454ad7c200441901b6a41086a2903007c2046204554ad7c200441e01b6a41086a2903007c2048204654ad7c204a204854ad7c420d86847c2244423388200441e0196a41086a29030020044190196a41086a2903007c2049205754ad7c200441b01a6a41086a2903007c2050204954ad7c200441801b6a41086a2903007c2052205054ad7c200441d01b6a41086a2903007c2043205254ad7c2044204354ad7c420d86847c2249423388200441d0196a41086a29030020044180196a41086a2903007c2036205654ad7c200441a01a6a41086a2903007c2037203654ad7c200441f01a6a41086a2903007c2038203754ad7c200441c01b6a41086a2903007c2047203854ad7c2049204754ad7c420d868442137e205542ffffffffffffff03837c225042ffffffffffffff038385200c832018852236420010d30b200441d0036a201d204942ffffffffffffff038385200c83201d8522374200205a420010d30b200441a0046a2020204442ffffffffffffff038385200c8320208522384200204c420010d30b200441f0046a200a204a42ffffffffffffff038385200c83200a85224742002023420010d30b200441c0056a200b2050423388205142ffffffffffffff03837c85200c83200b85224942002012420010d30b200441b0056a204942002010420010d30b20044180066a203642002011420010d30b200441c0036a20374200204c420010d30b20044190046a203842002023420010d30b200441e0046a204742002012420010d30b200441d0046a204742002010420010d30b200441a0056a204942002011420010d30b200441f0056a203642002013420010d30b200441b0036a203742002023420010d30b20044180046a203842002012420010d30b200441f0036a203842002010420010d30b200441c0046a204742002011420010d30b20044190056a204942002013420010d30b200441e0056a203642002035420010d30b200441a0036a203742002012420010d30b20044190036a203742002010420010d30b200441e0036a203842002011420010d30b200441b0046a204742002013420010d30b20044180056a204942002035420010d30b200441d0056a20364200204e420010d30b200420042903b003224e20042903f0057c22102004290380047c221120042903d0047c221220042903a0057c221320042903c00322502004290380067c22232004290390047c223520042903e0047c223620042903b0057c223720042903d00322522004290390067c223820042903a0047c224720042903f0047c224920042903c0057c224c423388200441d0036a41086a29030020044190066a41086a2903007c2038205254ad7c200441a0046a41086a2903007c2047203854ad7c200441f0046a41086a2903007c2049204754ad7c200441c0056a41086a2903007c204c204954ad7c420d86847c2238423388200441c0036a41086a29030020044180066a41086a2903007c2023205054ad7c20044190046a41086a2903007c2035202354ad7c200441e0046a41086a2903007c2036203554ad7c200441b0056a41086a2903007c2037203654ad7c2038203754ad7c420d86847c222342ffffffffffffff038337038048200420042903a003224920042903e0057c223520042903f0037c223620042903c0047c22372004290390057c22472023423388200441b0036a41086a290300200441f0056a41086a2903007c2010204e54ad7c20044180046a41086a2903007c2011201054ad7c200441d0046a41086a2903007c2012201154ad7c200441a0056a41086a2903007c2013201254ad7c2023201354ad7c420d86847c221042ffffffffffffff0383370388482004200429039003224e20042903d0057c221120042903e0037c221220042903b0047c22132004290380057c22232010423388200441a0036a41086a290300200441e0056a41086a2903007c2035204954ad7c200441f0036a41086a2903007c2036203554ad7c200441c0046a41086a2903007c2037203654ad7c20044190056a41086a2903007c2047203754ad7c2010204754ad7c420d86847c221042ffffffffffffff0383370390482004201042338820044190036a41086a290300200441d0056a41086a2903007c2011204e54ad7c200441e0036a41086a2903007c2012201154ad7c200441b0046a41086a2903007c2013201254ad7c20044180056a41086a2903007c2023201354ad7c2010202354ad7c420d868442137e204c42ffffffffffffff03837c221042ffffffffffffff03833703f04720042010423388203842ffffffffffffff03837c3703f847200441f0116a41086a2903002156200441900e6a41086a290300215720042903f011211220042903900e214a200441d0126a41086a290300215820042903d012214b200441b0136a41086a290300215920042903b013214d200441e00e6a41086a290300215a20042903e00e214f20044180126a41086a290300215b200441a00e6a41086a290300215c200429038012211320042903a00e2151200441e0126a41086a290300215d20042903e0122153200441c0136a41086a290300215e20042903c0132154200441f00e6a41086a290300215f20042903f00e215520042903e011212320042903800e214420042903c012214520042903a013214620042903d00e2148200441e0116a41086a2903002160200441800e6a41086a2903002161200441c0126a41086a2903002162200441a0136a41086a2903002163200441d00e6a41086a290300216420042903d011213520042903f00d214e20042903b0122150200429039013215220042903c00e2143200441d0116a41086a2903002165200441f00d6a41086a2903002166200441b0126a41086a290300216720044190136a41086a2903002168200441c00e6a41086a290300216920042903c011213620042903e00d213820042903a0122147200429038013214920042903b00e214c200441c0116a41086a290300216a200441e00d6a41086a290300216b200441a0126a41086a290300216c20044180136a41086a290300216d200441b00e6a41086a290300216e200441c8cb006a200441f0c7006a106d20042d00c84b410171106f210220044180036a203a20042903e84f221142f0ffffffffffff3f20117d226f42ffffffffffffff038342f0ffffffffffff3f20042903e04f22377d22704233887c8542002002ad42ff01837d2210832011857d223a42338842137e203c20042903c84f2211206f42338842137e42d0fdffffffffff3f20117d226f42ffffffffffffff03837c852010832011857d223c42ffffffffffffff03837c22114200201b204c20492047203620387c22387c22477c22497c224c2043205220502035204e7c224e7c22507c22527c2243204820462045202320447c22447c22457c22467c2248204f204d204b2012204a7c224a7c224b7c224d7c224f205520542053201320517c22517c22537c22547c2255423388205f205e205d205b205c7c2051201354ad7c7c2053205154ad7c7c2054205354ad7c7c2055205454ad7c420d86847c2251423388205a20592058205620577c204a201254ad7c7c204b204a54ad7c7c204d204b54ad7c7c204f204d54ad7c2051204f54ad7c420d86847c224a423388206420632062206020617c2044202354ad7c7c2045204454ad7c7c2046204554ad7c7c2048204654ad7c204a204854ad7c420d86847c2223423388206920682067206520667c204e203554ad7c7c2050204e54ad7c7c2052205054ad7c7c2043205254ad7c2023204354ad7c420d86847c2213423388206e206d206c206a206b7c2038203654ad7c7c2047203854ad7c7c2049204754ad7c7c204c204954ad7c2013204c54ad7c420d868442137e205542ffffffffffffff03837c223642ffffffffffffff038385200c83201b852212420010d30b200441c0006a201c201342ffffffffffffff038385200c83201c8522134200203e20042903d04f221b42f0ffffffffffff3f201b7d223542ffffffffffffff0383206f4233887c85201083201b857d223842ffffffffffffff0383203c4233887c221b42137e420010d30b20044190016a201e202342ffffffffffffff038385200c83201e85221c4200204120042903d84f221e42f0ffffffffffff3f201e7d224742ffffffffffffff038320354233887c85201083201e857d223542ffffffffffffff038320384233887c222342137e2238420010d30b200441e0016a201f204a42ffffffffffffff038385200c83201f85221e4200204220372037207042ffffffffffffff038320474233887c85201083857d221042ffffffffffffff038320354233887c221f42137e2235420010d30b200441b0026a20212036423388205142ffffffffffffff03837c85200c83202185220c4200203a42ffffffffffffff038320104233887c222142137e2210420010d30b200441a0026a200c42002011420010d30b200441f0026a20124200201b420010d30b200441306a201342002038420010d30b20044180016a201c42002035420010d30b200441d0016a201e42002010420010d30b200441c0016a201e42002011420010d30b20044190026a200c4200201b420010d30b200441e0026a201242002023420010d30b200441206a201342002035420010d30b200441f0006a201c42002010420010d30b200441e0006a201c42002011420010d30b200441b0016a201e4200201b420010d30b20044180026a200c42002023420010d30b200441d0026a20124200201f420010d30b200441106a201342002010420010d30b2004201342002011420010d30b200441d0006a201c4200201b420010d30b200441a0016a201e42002023420010d30b200441f0016a200c4200201f420010d30b200441c0026a201242002021420010d30b20042004290300225220042903c0027c220c20042903507c221020042903a0017c221120042903f0017c22122004290310224320042903d0027c221320042903607c221b20042903b0017c221c2004290380027c221e2004290320224420042903e0027c221f20042903707c222120042903c0017c22232004290390027c22352004290330224520042903f0027c22362004290380017c223720042903d0017c223820042903a0027c2247200429034022462004290380037c22492004290390017c224c20042903e0017c224e20042903b0027c2250423388200441c0006a41086a29030020044180036a41086a2903007c2049204654ad7c20044190016a41086a2903007c204c204954ad7c200441e0016a41086a2903007c204e204c54ad7c200441b0026a41086a2903007c2050204e54ad7c420d86847c2249423388200441306a41086a290300200441f0026a41086a2903007c2036204554ad7c20044180016a41086a2903007c2037203654ad7c200441d0016a41086a2903007c2038203754ad7c200441a0026a41086a2903007c2047203854ad7c2049204754ad7c420d86847c2236423388200441206a41086a290300200441e0026a41086a2903007c201f204454ad7c200441f0006a41086a2903007c2021201f54ad7c200441c0016a41086a2903007c2023202154ad7c20044190026a41086a2903007c2035202354ad7c2036203554ad7c420d86847c221f423388200441106a41086a290300200441d0026a41086a2903007c2013204354ad7c200441e0006a41086a2903007c201b201354ad7c200441b0016a41086a2903007c201c201b54ad7c20044180026a41086a2903007c201e201c54ad7c201f201e54ad7c420d86847c2213423388200441086a290300200441c0026a41086a2903007c200c205254ad7c200441d0006a41086a2903007c2010200c54ad7c200441a0016a41086a2903007c2011201054ad7c200441f0016a41086a2903007c2012201154ad7c2013201254ad7c420d868442137e205042ffffffffffffff03837c220c42ffffffffffffff038322103703f0472004200c423388204942ffffffffffffff03837c22113703f8472004201342ffffffffffffff03832212370390482004201f42ffffffffffffff03832213370388482004203642ffffffffffffff0383221b37038048200441c8cb006a200441f0c7006a106d2004201242f0ffffffffffff3f20127d221c42ffffffffffffff038342f0ffffffffffff3f20137d221e4233887c85420020042d00c84b410171106fad42ff01837d220c832012853703904820042013201e42ffffffffffffff038342f0ffffffffffff3f201b7d22124233887c85200c83201385370388482004201b201242ffffffffffffff038342f0ffffffffffff3f20117d22124233887c85200c83201b853703804820042011201242ffffffffffffff038342d0fdffffffffff3f20107d22124233887c85200c832011853703f84720042010201c42338842137e201242ffffffffffffff03837c85200c832010853703f047200441e0c4006a41a0016a200441f0c7006a106d200441e0c4006a4198016a2019370300200441e0c4006a4190016a2016370300200441e0c4006a4188016a200f370300200441e0c4006a4180016a200e370300200441e0c4006a41f0006a2039370300200441e0c4006a41e8006a203f370300200441e0c4006a41e0006a2040370300200441e0c4006a41d8006a203d370300200441e0c4006a41c8006a2022370300200441e0c4006a41c0006a201a370300200441e0c4006a41386a2017370300200441e0c4006a41306a20153703002004200d3703d8452004203b3703b04520042014370388452004201d37038045200420203703f8442004200a3703f0442004200b3703e844200420183703e044410021020340200441a0c6006a20026a41003a0000200241016a220241c801470d000b20044190cc006a41186a2203200141186a29000037030020044190cc006a41106a2205200141106a29000037030020044190cc006a41086a2206200141086a290000370300200420012900003703904c200441f0c7006a20044190cc006a10a601200441f0c7006a41086a290300210c200441f0c7006a41106a2903002118200441f0c7006a41186a290300211d200441f0c7006a41206a290300210b20044198c8006a290300210d200441a0c8006a2903002120200441a8c8006a290300210a200441b0c8006a290300210e200441b8c8006a290300210f200441c0c8006a290300211020042802f447210120042802f0472102200441a0c6006a200441c8c8006a41f00010d40b1a0240024020024101460d00200441b0cd006a200441a0c6006a41f00010d40b1a20042018200c4233887c22114233882011201854ad420d86842213201d7c221242ffffffffffffff03833703b84a200420124233882012201354ad420d86842213200b7c221242ffffffffffffff03833703c04a200420124233882012201354ad420d86842213200d7c221242ffffffffffffff03833703c84a200420124233882012201354ad420d868442137e200c42ffffffffffffff03837c221242ffffffffffffff03833703a84a20042012423388201142ffffffffffffff03837c3703b04a20044190cc006a41206a4200370300200342003703002005420037030020064200370300200442003703904c200441a0c6006a41206a4200370300200441a0c6006a41186a4200370300200441a0c6006a41106a4200370300200441a0c6006a41086a4200370300200442003703a0462004200a20204233887c22114233882011200a54ad420d86842213200e7c22124233882012201354ad420d86842214200f7c22134233882013201454ad420d8684221520107c221442ffffffffffffff0383370390482004201342ffffffffffffff0383370388482004201242ffffffffffffff038337038048200420144233882014201554ad420d868442137e202042ffffffffffffff03837c2212423388201142ffffffffffffff03837c3703f8472004201242ffffffffffffff03833703f0470240200441a8ca006a20044190cc006a106e200441a0c6006a200441f0c7006a106e72106f41ff01714101470d0020004101360200200041013a00040c020b200041086a200441e0c4006a41c00110d40b1a20004198026a200441b0cd006a41f00010d40b1a20004190026a201037030020004188026a200f37030020004180026a200e370300200041f8016a200a370300200041f0016a2020370300200041e8016a200d370300200041e0016a200b370300200041d8016a201d370300200041d0016a2018370300200041c8016a200c370300200041003602000c010b2000200136020420004101360200200041186a201d3e0200200041106a2018370200200041086a200c3702000b200441c0d0006a24000bac0301077f230041c0006b22022400200241106a41047221032001280200210420012802042105410021060340200241003a0038200241386a20042005410047220710d40b1a200641016a2108024020050d00200241003a00380b2001200520076b22053602042001200420076a2204360200200320066a20022d00383a0000200220083602102008210620084120470d000b2002200241106a41196a220528000036023820022002412c6a28000036003b200220022f01143b010c200220022d00163a000e2002411e6a2801002108200241256a2800002104200241306a280200210620022800172107200228003b21012000410a6a2002411d6a2d00003a0000200041086a200241106a410b6a2f00003b00002000410f6a200241106a41126a2f01003b0000200041116a200241246a2d00003a0000200041166a20052f00003b0000200041186a2002412b6a2d00003a00002000411d6a2006360000200041196a2001360000200041126a20043600002000410b6a2008360000200041046a2007360000200041036a20022d000e3a0000200020022f010c3b0001200041003a0000200241c0006a24000b13002000410136020420004180d5c4003602000bd30a03047f017e017f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003a00000c010b2002280214210302400240200241186a2802002204450d00200220012d00003a003c2002410136023820044101460d00200220012d00013a003d2002410236023820044102460d00200220012d00023a003e2002410336023820044103460d00200220012d00033a003f2002410436023820044104460d00200241c0006a20012d00043a00002002410536023820044105460d00200241c1006a20012d00053a00002002410636023820044106460d00200241c2006a20012d00063a00002002410736023820044107460d00200241c3006a20012d00073a00002002410836023820044108460d00200241c4006a20012d00083a00002002410936023820044109460d00200241c5006a20012d00093a00002002410a3602382004410a460d00200241c6006a20012d000a3a00002002410b3602382004410b460d00200241c7006a20012d000b3a00002002410c3602382004410c460d00200241c8006a20012d000c3a00002002410d3602382004410d460d00200241c9006a20012d000d3a00002002410e3602382004410e460d00200241ca006a20012d000e3a00002002410f3602382004410f460d00200241cb006a20012d000f3a00002002411036023820044110460d00200241cc006a20012d00103a00002002411136023820044111460d00200241cd006a20012d00113a00002002411236023820044112460d00200241ce006a20012d00123a00002002411336023820044113460d00200241cf006a20012d00133a00002002411436023820044114460d00200241d0006a20012d00143a00002002411536023820044115460d00200241d1006a20012d00153a00002002411636023820044116460d00200241d2006a20012d00163a00002002411736023820044117460d00200241d3006a20012d00173a00002002411836023820044118460d00200241d4006a20012d00183a00002002411936023820044119460d00200241d5006a20012d00193a00002002411a3602382004411a460d00200241d6006a20012d001a3a00002002411b3602382004411b460d00200241d7006a20012d001b3a00002002411c3602382004411c460d00200241d8006a20012d001c3a00002002411d3602382004411d460d00200241d9006a20012d001d3a00002002411e3602382004411e460d00200241da006a20012d001e3a00002002411f3602382004411f460d00200241db006a20012d001f3a0000200041086a200241386a410b6a2f00003b00002000410a6a200241c5006a2d00003a0000200041116a200241cc006a2d00003a00002000410f6a200241386a41126a2f01003b000020024120360238200220022f013c3b0120200220022d003e3a0022200241c6006a2801002104200241cd006a2800002105200241d4006a2902002106200228003f2107200041186a200241d3006a2d00003a0000200041166a200241386a41196a2f00003b0000200041036a20022d00223a0000200020022f01203b0001200041196a2006370000200041126a20053600002000410b6a2004360000200041046a2007360000410121040c010b200242003702244100210420024100280284ee4d3602202002410d3602342002200241086a3602302002200241206a36025c200241cc006a41013602002002420137023c200241949fc5003602382002200241306a360248200241dc006a41b4dfc400200241386a103b1a2002280220200228022810d1012002280224450d00200228022010390b200020043a00002003450d00200110390b200241e0006a24000bad1802047f027e200028022821020240200141046a2203280200200141086a220428020022056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028022c21040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028023021020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028023421040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028023821020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028023c21040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028024021020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028024421040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028024821020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028024c21040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028025021020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200029030021060240200328020020056b41074b0d002001200541081077200141086a28020021050b200128020020056a2006370000200141086a2204200541086a2205360200200028025421020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028025821040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028025c21020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200041106a2903002106200029030821070240200328020020056b410f4b0d002001200541101077200141086a28020021050b200128020020056a2204200637000820042007370000200141086a2204200541106a2205360200200041206a2903002106200029031821070240200141046a220228020020056b410f4b0d002001200541101077200428020021050b200128020020056a22032006370008200320073700002004200541106a2205360200200028026021040240200228020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028026421020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028026821040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028026c21020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028027021040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028027421020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200200028027821040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028027c21020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802800121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a220536020020002802840121020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802880121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a2205360200200028028c0121020240200141046a28020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a2205360200024002402000280290014101460d000240200141046a2802002005470d002001200541011077200141086a28020021050b200128020020056a41003a0000200541016a21050c010b0240200141046a22042802002005470d002001200541011077200141086a28020021050b200128020020056a41013a0000200141086a2203200541016a220536020020002802940121020240200428020020056b41034b0d002001200541041077200328020021050b200128020020056a2002360000200541046a21050b200141086a2005360200024002402000280298014101460d000240200141046a2802002005470d002001200541011077200141086a28020021050b200128020020056a41003a0000200541016a21050c010b0240200141046a22042802002005470d002001200541011077200141086a28020021050b200128020020056a41013a0000200141086a2203200541016a2205360200200028029c0121020240200428020020056b41034b0d002001200541041077200328020021050b200128020020056a2002360000200541046a21050b200141086a2204200536020020002802a00121020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802a40121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a220536020020002802a80121020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802ac0121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a220536020020002802b00121020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802b40121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a220536020020002802b80121020240200141046a220328020020056b41034b0d002001200541041077200428020021050b200128020020056a20023600002004200541046a220536020020002802bc0121040240200328020020056b41034b0d002001200541041077200141086a28020021050b200128020020056a2004360000200141086a2204200541046a220536020020002802c00121000240200141046a28020020056b41034b0d002001200541041077200428020021050b200128020020056a20003600002004200541046a3602000be90102047f037e024002402001280208220241ffffff3f712002470d0020024105742203417f4c0d00200128020021040240024020030d00410121010c010b200310382201450d020b2000410036020820002001360200200041046a2003410576220536020002402003450d0003402003450d01200441086a2900002106200441106a290000210720042900002108200141186a200441186a290000370000200141106a2007370000200141086a200637000020012008370000200141206a2101200341606a2103200441206a21042005417f6a22050d000b0b200020023602080f0b1034000b1032000b870201057f230041106b22022400024002402001280208220341027441046a2204417f4c0d00200128020021010240024020040d00410121050c010b200410382205450d020b2002410036020820022004360204200220053602002002200310ac020240024020030d0020022802002106200228020821040c010b20034102742103200228020821040340200128020021050240200228020420046b41034b0d002002200441041077200228020821040b200141046a21012002280200220620046a20053600002002200441046a22043602082003417c6a22030d000b0b200041202006200410e90102402002280204450d00200610390b200241106a24000f0b1034000b1032000bbf0401047f23004190016b220524002005200436020c20052003360208024002400240200241074b0d0041002802d0a94e450d0141002802cca94e210241002802c8a94e210341002802d4a94e2104200541e4006a41b8c0cd00360200200541d8006a4201370300200541fc006a41f39fc000ad4280808080b00b84370200200541e8006a4200370300200541d0006a4113360200200541e09fc00036024c200541f0006a41e09fc000ad4280808080b00284370300200541d89fc00036025420054281808080b00e370284012005410036027820054101360248200341b8c0cd00200441024622041b200541c8006a200241c0a4c00020041b2802101103000c010b2002417c714108460d0020012800082102200541c8006a200541086a10fd08200541106a41086a200541d4006a290200370300200541106a41106a2203200541dc006a290200370300200541106a41186a2204200541e4006a290200370300200541106a41206a2201200541ec006a290200370300200541106a41286a2206200541f4006a290200370300200541106a41306a2207200541fc006a2802003602002005200529024c370310024020052802482208450d00200020052903103702082000200836020420002002360200200041386a2007280200360200200041306a2006290300370200200041286a2001290300370200200041206a2004290300370200200041186a2003290300370200200041106a200541186a2903003702000c020b200041003602040c010b200041003602040b20054190016a24000ba70703067f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010e5010240024020022802502203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902542208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c2006200837020020022003200910e401024002400240024020022802002203450d002002280208210a2002280204210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d032002200128020c20076a200920076b2003200a20012802181105002002280204450d0120002002290300370200200041386a200241386a280200360200200041306a200241306a290300370200200041286a200241286a290300370200200041206a200241206a290300370200200041186a200241186a290300370200200041106a200241106a290300370200200041086a200241086a290300370200200b450d06200310390c060b41002802d0a94e450d01200241113602442002200436024041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370360200241d09fc50036025c20024281808080e0d70037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242013703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200341c0a4c000200941024622091b28021021032002200241c0006a36026c200741b8c0cd0020091b200241d0006a20031103000c010b024041002802d0a94e450d002002411236024c2002411136024420022004360240200220024198016a36024841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370360200241e89fc50036025c20024281808080c0d90037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242023703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200741c0a4c000200a410246220a1b28021021072002200241c0006a36026c200941b8c0cd00200a1b200241d0006a20071103000b200b450d00200310390b200241d0006a200128020c200128021410e501200228025022030d010c020b0b2007200941d89fc5001054000b200041003602040b200241a0016a24000b840501057f230041e0056b220524002005200436020420052003360200024002400240200241074b0d0041002802d0a94e450d0141002802cca94e210241002802c8a94e210341002802d4a94e21042005418c036a41b8c0cd0036020020054180036a4201370300200541a4036a41f39fc000ad4280808080b00b8437020020054190036a4200370300200541f8026a4113360200200541e09fc0003602f40220054198036a41e09fc000ad4280808080b00284370300200541d89fc0003602fc0220054281808080b00e3702ac03200541003602a003200541013602f002200341b8c0cd00200441024622041b200541f0026a200241c0a4c00020041b2802101103000c010b2002417c714108460d0020012800082102200541f0026a200510f808200541c8006a200541f0026a41a80210d40b1a200541086a41086a200541a4056a290200370300200541186a2203200541ac056a290200370300200541206a2204200541b4056a290200370300200541286a2201200541bc056a290200370300200541306a2206200541c4056a290200370300200541386a2207200541cc056a290200370300200541c0006a2208200541d4056a2902003703002005200529029c0537030802402005280298052209450d00200020052903083702b00220002002360200200041e8026a2008290300370200200041e0026a2007290300370200200041d8026a2006290300370200200041d0026a2001290300370200200041c8026a2004290300370200200041c0026a2003290300370200200041b8026a200541106a290300370200200041046a200541c8006a41a80210d40b1a200020093602ac020c020b200041003602ac020c010b200041003602ac020b200541e0056a24000bc00603067f017e037f230041d0036b220224002002200128020c200141146a28020010e5010240024020022802002203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902042208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c2006200837020020024180036a2003200910e40102400240024002402002280280032203450d00200228028803210a200228028403210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d032002200128020c20076a200920076b2003200a200128021811050020022802ac02450d012000200241f00210d40b1a200b450d06200310390c060b41002802d0a94e450d01200241113602f402200220043602f00241002802cca94e210341002802c8a94e210741002802d4a94e210920024201370310200241d09fc50036020c20024281808080e0d70037023c2002418ea0c500ad4280808080a00c8437023420024100360230200242013703202002411636020820024101360200200241f89fc500360204200241f89fc500ad4280808080e00284370328200341c0a4c000200941024622091b28021021032002200241f0026a36021c200741b8c0cd0020091b200220031103000c010b024041002802d0a94e450d00200241123602fc02200241113602f402200220043602f0022002200241c8036a3602f80241002802cca94e210741002802c8a94e210941002802d4a94e210a2002420237039003200241e89fc50036028c0320024281808080c0d9003702bc032002418ea0c500ad4280808080a00c843702b403200241003602b003200242023703a00320024116360288032002410136028003200241f89fc50036028403200241f89fc500ad4280808080e002843703a803200741c0a4c000200a410246220a1b28021021072002200241f0026a36029c03200941b8c0cd00200a1b20024180036a20071103000b200b450d00200310390b2002200128020c200128021410e501200228020022030d010c020b0b2007200941d89fc5001054000b200041003602ac020b200241d0036a24000b940302017f017e230041d0006b220524002005200436020420052003360200024002400240200241074b0d0041002802d0a94e450d0141002802cca94e210241002802c8a94e210341002802d4a94e2104200541246a41b8c0cd00360200200541186a42013703002005413c6a41f39fc000ad4280808080b00b84370200200541286a4200370300200541106a4113360200200541e09fc00036020c200541306a41e09fc000ad4280808080b00284370300200541d89fc00036021420054281808080b00e3702442005410036023820054101360208200341b8c0cd00200441024622041b200541086a200241c0a4c00020041b2802101103000c010b2002417c714108460d0020012800082103200541086a200510f1090240024020052802082202450d00200529020c2106200528020441034b0d012006428080808010540d00200210390b200041003602040c020b200020063702082000200236020420002003360200200041106a200528020022022800003602002005200241046a3602000c010b200041003602040b200541d0006a24000bd70603067f017e037f23004180016b22022400200241306a200128020c200141146a28020010e5010240024020022802302203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902342208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c20062008370200200241086a2003200910e401024002400240024020022802082203450d002002280210210a200228020c210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d03200241086a200128020c20076a200920076b2003200a2001280218110500200228020c450d0120002002290308370200200041106a200241086a41106a280200360200200041086a200241086a41086a290300370200200b450d06200310390c060b41002802d0a94e450d01200241113602242002200436022041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370340200241d09fc50036023c20024281808080e0d70037026c2002418ea0c500ad4280808080a00c8437026420024100360260200242013703502002411636023820024101360230200241f89fc500360234200241f89fc500ad4280808080e00284370358200341c0a4c000200941024622091b28021021032002200241206a36024c200741b8c0cd0020091b200241306a20031103000c010b024041002802d0a94e450d002002411236022c20024111360224200220043602202002200241f8006a36022841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370340200241e89fc50036023c20024281808080c0d90037026c2002418ea0c500ad4280808080a00c8437026420024100360260200242023703502002411636023820024101360230200241f89fc500360234200241f89fc500ad4280808080e00284370358200741c0a4c000200a410246220a1b28021021072002200241206a36024c200941b8c0cd00200a1b200241306a20071103000b200b450d00200310390b200241306a200128020c200128021410e501200228023022030d010c020b0b2007200941d89fc5001054000b200041003602040b20024180016a24000bb90201027f230041e0006b220224002002412036020c20022001360208200241106a2001412010e40102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10aa07024002402002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2003450d00200110390b200241e0006a24000bd80201067f230041206b22022400200241086a200110c10102400240024002402002280208450d00200041003602000c010b200228020c2203200128020422044102762205200520034b1b22064102742205417f4c0d010240024020060d00410421070c010b200510382207450d030b41002105200241003602182002200636021420022007360210024002402003450d00034020044104490d0220012004417c6a220436020420012001280200220641046a36020020062800002106024020052002280214470d00200241106a2005410110ab0120022802102107200228021821050b200720054102746a20063602002002200228021841016a22053602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b20004100360200200228021441ffffffff0371450d00200228021010390b200241206a24000f0b1034000b1032000bb80801167f230041f0006b22022400200241186a41dc8ccc00410f10cb01200241d8006a418c90cc00410810cb010240024002400240410410382203450d0020032001360000412410382201450d002001200229001837000020012002290058370010200141086a200241186a41086a290000370000200141186a200241d8006a41086a2900003700002001200328000036002020022001360208200242a4808080c00437020c200310392002412436022c20022001360228200241306a2001412410e4010240200228023022040d00410021050c040b200228023421062002200241306a41086a28020036024420022004360240200241d8006a200241c0006a10aa07024020022802582205450d00200241e0006a22072802002103200228025c2108200241d8006a200241c0006a10aa07024020022802582209450d002007280200210a200228025c210b200241d8006a200241c0006a10aa0702402002280258220c450d00200241e0006a2207280200210d200228025c210e200241d8006a200241c0006a10f40802402002280258220f450d0020072802002107200228025c21100240200228024422114104490d0020022011417c6a221236024420124104490d002002280240221328000021122002201341086a22143602402011417c714108460d002011417c712215410c460d0020154110460d002013280004211620142800002115201328000c211420022011416c6a2211360244201141034b0d060b02402007450d002007410c6c2107200f210303400240200341046a28020041ffffffff0371450d00200328020010390b2003410c6a2103200741746a22070d000b0b2010450d002010410c6c450d00200f10390b200e41ffffff3f71450d00200c10390b200b41ffffff3f71450d00200910390b200841ffffff3f71450d00200510390b2002420037021c4100210520024100280284ee4d3602182002410d36024c2002200241286a3602482002200241186a360254200241ec006a41013602002002420137025c200241949fc5003602582002200241c8006a360268200241d4006a41b4dfc400200241d8006a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b0c020b1032000b201328001021172002201341186a360240201328001421110b2006450d00200410390b024002402005450d002000200836020420002005360200200041c4006a2011360200200041c0006a20173602002000413c6a2014360200200041386a2015360200200041346a2016360200200041306a20123602002000412c6a2007360200200041286a2010360200200041246a200f360200200041206a200d3602002000411c6a200e360200200041186a200c360200200041146a200a360200200041106a200b3602002000410c6a2009360200200041086a20033602000c010b200041003602000b0240200228020c450d00200110390b200241f0006a24000baa0101027f230041206b22022400200241dc8ccc00410f10cb01200241106a418c90cc00410810cb010240410410382203450d0020032001360000412410382201450d002001200229000037000020012002290010370010200141086a200241086a290000370000200141186a200241106a41086a29000037000020002001360200200041046a42a4808080c0043702002001200328000036002020031039200241206a24000f0b1032000bc80101077f2000280200210220012000280208220010ac0202402000450d0020022000410c6c6a2103200141086a210403402002280200210020012002280208220510ac022002410c6a210202402005450d00200541027421062004280200210503402000280200210702400240200141046a28020020056b41034d0d00200521080c010b2001200541041077200428020021080b200041046a21002004200841046a2205360200200128020020086a20073600002006417c6a22060d000b0b20022003470d000b0b0be60301067f230041d0006b22022400200241086a418b8ac800410310cb01200241186a418e8ac800411510cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41d584ce00410310cb01200241186a41c888ce00411610cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41d584ce00410310cb01200241186a41d887ce00411310cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bdd7309057f017e117f057e097f027e097f017e047f230041b03c6b2201240020014198016a41186a2202420037030020014198016a41106a2203420037030020014198016a41086a220442003703002001420037039801200141d8296a41f1d5c400410d10cb012004200141d8296a41086a2205290000370300200120012900d82937039801200141d8296a418bd6c400410c10cb0120022005290000370300200320012900d829370300200141a8316a20014198016a412010c70342c0f0f50b210602404100200128029c3220012802b8324102461b220220004f0d00200141d8196a10a2060240024020012802e01922070d0041002108200141003602e0190c010b2002417f7320006a210920012802d819220a41046a2102200741037441786a41037641016a21054100210802400340200228020020094b0d01200241086a21022005200841016a2208470d000b200521080b0240024020072008490d00200141003602e0192008450d01200a20084103746a210b41002802d8974e210c20014198016a4101722105200141a8316a410172210d0340200141d8216a200a280200220e109e06200141a8316a20012802d82120012802e021109f0602400240024020012802b431220f4102470d002001200c3602d811410021104100210f410021110c010b200120012802a83122123602d81120012802b831211320012802ac31211120012802b0312210450d00201241046a2102201041037441786a41037641016a21144100211502400240024002400240024002400340200228020020094b0d01200241086a21022014201541016a2215470d000b201421150c010b2015450d010b20102015417f6a22024d0d0220102015490d03201020156b2110201220024103746a28020021132015410374220f0d010c040b4100211220100d050c040b0340200141d8296a200e201228020010a106200141a8316a20012802d829221420012802e029221610850441002102024020012d00a8312217450d002014201610e00120174101470d002005200d290000370000200541186a200d41186a290000370000200541106a200d41106a290000370000200541086a200d41086a290000370000410121020b200120023a009801024020012802dc29450d002014103920012d00980121020b02400240200241ff0171450d00200141a8316a41186a200541186a290000370300200141a8316a41106a200541106a290000370300200141a8316a41086a200541086a290000370300200120052900003703a831200141a8316a10a5070c010b41002802d0a94e4102490d00200141293602dc29200120014198016a3602d82941002802cca94e210241002802c8a94e211441002802d4a94e2116200142013703b831200141a4adc3003602b43120014281808080e0cb003702e431200141caeac200ad42808080809005843702dc31200141003602d831200141a8eac200ad4280808080a004843703d031200142013703c8312001410e3602b031200141acadc3003602ac31200141023602a831200241c0a4c000201641024622161b28021021022001200141d8296a3602c431201441b8c0cd0020161b200141a8316a20021103000b201241086a2112200f41786a220f450d030c000b0b200220104194adc300103c000b2015201041908cc700104b000b024020100d004101210f410021100c010b02402015450d0020012802d8112202200220154103746a201041037410d50b1a0b410021124101210f0c010b200141a8316a200e10890420014198016a20012802a831221220012802b031109d072001280298012102200129029c012118024020012802ac31450d00201210390b2018201920021b2119024020020d00410121120c010b410021122019a7450d00200210390b200120133602b831200120103602b031200120113602ac31200120012802d81122143602a8312001200f3602b43120012802e021211520012802d821210202400240200f4102470d002002201510e0010c010b20022015200141a8316a10a006200f4102460d00201141ffffffff0171450d00201410390b024020012802dc21450d00200210390b200a41086a210a02402012450d00200141a8316a200e109e0620012802a831220220012802b03110e00120012802ac31450d00200210390b200b200a470d000c020b0b2008200741908cc700104b000b200720086b2202450d000240200820012802e0192205460d0020012802d819221220054103746a201220084103746a200241037410d50b1a0b2001200520026a3602e0190b20014198016a41086a200141d8196a41086a280200360200200120012903d819221937039801024002402019a722020d00200141f0096a22024200370300200141e8096a22054200370300200141d8096a41086a22124200370300200142003703d809200141a8316a41ecc0cc00410510cb012012200141a8316a41086a2215290000370300200120012900a8313703d809200141a8316a41baf0c200410f10cb0120022015290000370300200520012900a831370300200141d8096a412010e0010c010b200141f0096a22054200370300200141e8096a22124200370300200141d8096a41086a22154200370300200142003703d809200141a8316a41ecc0cc00410510cb012015200141a8316a41086a2214290000370300200120012900a8313703d809200141a8316a41baf0c200410f10cb0120052014290000370300201220012900a831370300200141d8096a20014198016a10a306200128029c0141ffffffff0171450d00200210390b2008ad221942c0f0f50b7e2019428084afdf007e7c42c0f0f50b7c21060b200141a8316a41186a22024200370300200141a8316a41106a22054200370300200141a8316a41086a22124200370300200142003703a83120014198016a41b6e2c400410b10cb012012200429000037030020012001290098013703a83120014198016a4184e4c400410e10cb01200220042900003703002005200129009801370300200141a8316a412041b8c0cd00410010e901200141a8316a41f0c8c800410710cb0120024200370000200142003700b83120054180e3c900410a10cb0120014190016a200141a8316a412010ce0320012802940121122001280290012115200141a8316a41f0c8c800410710cb0120024200370000200142003700b831200541b0ecc900411510cb0120014188016a200141a8316a412010ce03200128028c012114200128028801210f200141a8316a2012410020151b10840820014180016a20012802a831220220012802b03110ce0320012802840121162001280280012117024020012802ac31450d00200210390b200141d8096a41186a22054200370300200141d8096a41106a22124200370300200141d8096a41086a22154200370300200142003703d809200141a8316a41cde5c000410410cb012015200141a8316a41086a2202290000370300200120012900a8313703d809200141a8316a4180d3c700410a10cb0120052002290000370300201220012900a831370300200141f0006a200141d8096a10ee04200141e0006a2001290378420020012802701b420042d804420010d30b0240024002400240200129036850450d0020012903602119200141a8316a41186a22154200370300200141a8316a41106a2205420037030020024200370300200142003703a83120014198016a41cde5c000410410cb01200220014198016a41086a220e29000037030020012001290098013703a83120014198016a41f4d3c700410b10cb012015200e2900003703002005200129009801370300200141d0006a200141a8316a10ee0420192001290358420020012802501b7c22182019540d01410020144100200f1b22022016410020171b6b2215201520024b1b2115200141c0316a4200370300200141b8316a4200370300200141a8316a41086a22024200370300200142003703a83120014198016a41cde5c000410410cb01200220014198016a41086a221429000037030020012001290098013703a83120014198016a41a4d4c700410b10cb01200541086a20142900003700002005200129009801370000200141c0006a200141a8316a10ee04410021020240427f201842d8047c221920192018541b22192001290348420020012802401b7d22182019560d00417f2000201842ffffffff0f201842ffffffff0f541ba76a220220022000491b21020b4100417f2000417f4100200220006b2205200520024b1b220241004100410620156b2205200541064b1b2205417f6a2215201520054b1b41d8046c6a220520052002491b6a220220022000491b220220006b2205200520024b1b2115200141386a10ed0642b88194dd00211a0240024020012d00382214417e6a22054102200541ff01714102491b41ff01710e020001050b200220004d0d0420154196014b0d040c030b200220004d0d032015419701490d020c030b41d0bbc70041fa0041ccbcc700105b000b41d0bbc70041fa0041dcbcc700105b000b200141013a00d819420021190240201441ff01714103460d00200141a8316a410141ffff0310ad070240024020012802a8314101460d00200141a8316a41086a2205280200210e200141c0316a22152903002119200141b8316a220f2802002102200141b4316a22162802002117200141a8316a4101417f10ac070240024020012802a8314101470d002005280200210220012802ac3121050c010b2005280200210a20152903002118200f280200210d2016280200210920014198016a41f0c8c800410710cb01200341086a420037000020034200370000200341c0e0c900410e10cb01200141306a20014198016a412010ce030240200241ffff034b0d002001280234410020012802301b2111200120023602dc212001200d3602d821200141b0016a220f420037030020014198016a41106a2216420037030020014198016a41086a220542003703002001420037039801200141d8296a41c2e6c000411a10cb012005200141d8296a41086a2215290000370300200120012900d82937039801200141d8296a419cb6c800411010cb01200341086a22102015290000370000200320012900d829370000200141003602b031200142013703a831200141d8216a200141a8316a10db02200141d8216a410472200141a8316a10db0220014198016a412020012802a831220820012802b03110e901024020012802ac31450d00200810390b200f420037030020164200370300200542003703002001420037039801200141d8296a41c2e6c000411a10cb0120052015290000370300200120012900d82937039801200141d8296a41e4b5c800410e10cb0120102015290000370000200320012900d829370000200120113602a83120014198016a4120200141a8316a410410e901200141bc316a2002360200200141a8316a41106a20173602002001200e3602b4312001200d3602b031200120093602ac312001200a3602a831200f420037030020164200370300200542003703002001420037039801200141d8296a41c2e6c000411a10cb0120052015290000370300200120012900d82937039801200141d8296a4198b5c800410810cb0120102015290000370000200320012900d829370000200141003602e029200142013703d829200141a8316a200141d8296a108508200141d8296a200210ac020240024020020d0020012802d829211620012802e02921050c010b2002410574210f20012802e0292105200e21020340024020012802dc2920056b411f4b0d00200141d8296a20054120107720012802e02921050b20012802d829221620056a22152002290000370000201541086a200241086a290000370000201541106a200241106a290000370000201541186a200241186a2900003700002001200541206a22053602e029200241206a2102200f41606a220f0d000b0b20014198016a41202016200510e901024020012802dc29450d00201610390b0240200d450d00200d41386c2105200a412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010390b200241386a2102200541486a22050d000b0b02402009450d00200941386c450d00200a10390b0240201741ffffff3f71450d00200e10390b427f427f201920187c221820182019541b221942c0b6fc9a017c221820182019541b21190c040b0240200d450d00200d41386c2105200a412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010390b200241386a2102200541486a22050d000b0b41202102419cbbc70021052009450d00200941386c450d00200a10390b201741ffffff3f71450d01200e10390c010b200141b0316a280200210220012802ac3121050b200141033602980120012002ad4220862005ad8437029c01024041002802d0a94e4102490d00200141f0096a4200370300200141d8096a41106a4200370300200141d8096a41086a22054200370300200142003703d809200141a8316a41c7e5c000410610cb012005200141a8316a41086a2202290000370300200120012900a8313703d809200141a8316a419081c400410610cb01201241086a2002290000370000201220012900a831370000200141286a200141d8096a412010ce03200141e4296a412a360200200141103602dc292001200128022c410020012802281b3602d821200120014198016a3602e0292001200141d8216a3602d82941002802cca94e210541002802c8a94e211241002802d4a94e2115200141a8316a41106a4202370300200141dc316a41d79dc700ad4280808080800e84370200200141d0316a41ab9dc700ad4280808080c00584370300200141a8316a41206a42023703002002411a360200200141c4316a200141d8296a360200200141bcbac7003602b43120014281808080c0d0003702e431200141003602d831200141d0b9c7003602ac31200141023602a831201241b8c0cd00201541024622021b200141a8316a200541c0a4c00020021b2802101103000b42b88194dd00211a0c010b4101200010bf07200141f0096a22154200370300200141d8096a41106a220f4200370300200141d8096a41086a22054200370300200142003703d809200141a8316a41c2e6c000411a10cb012005200141a8316a41086a2202290000370300200120012900a8313703d809200141a8316a41d0b3c800410510cb01201241086a22162002290000370000201220012900a831370000200141206a200141d8096a412010ce0320022001280224410120012802201b360200200141053a00ac31200141103a00a831427f20194280c2d72f7c221820182019541b2119200141a8316a10c903024041002802d0a94e4103490d0020154200370300200f420037030020054200370300200142003703d809200141a8316a41c7e5c000410610cb0120052002290000370300200120012900a8313703d809200141a8316a419081c400410610cb0120162002290000370000201220012900a831370000200141186a200141d8096a412010ce03200141a4016a412b3602002001411036029c012001200128021c410020012802181b3602d8292001200141d8196a3602a0012001200141d8296a3602980141002802cca94e210541002802c8a94e211241002802d4a94e2115200141a8316a41106a4203370300200141dc316a41d79dc700ad4280808080800e84370200200141d0316a41ab9dc700ad4280808080c00584370300200141a8316a41206a42023703002002411a360200200141c4316a20014198016a360200200141a4bac7003602b4312001428180808090cf003702e431200141003602d831200141d0b9c7003602ac31200141033602a831201241b8c0cd00201541024622021b200141a8316a200541c0a4c00020021b2802101103000b427f42a895ebc30042a0abf7ce02201441ff01714103461b221820197c221920192018541b211a0b200141a8316a10a10120012903b031211920014198016a200010c304200141a8316a200128029801220220012802a001220510c4042019428094ebdc0382428090bcfd027e2218428094ebdc0380211b2018428094ebdc038221182019428094ebdc0380211c0240024020012802a8312216450d002002200510e00120012902ac3121190c010b41002802e8c8482116420021190b0240200128029c01450d00200210390b20162019422088a7221d410a74220e6a211e2019a7211f0240024002400240024002400240200e0d00201621020c010b20014198016a41046a2107200141a8316a41046a2120200141d8196a410472210d41002112200141a8196a41286a2109200141a8196a41206a210a200141a8196a41186a2110200141a8196a41106a2111200141a8196a41086a210841002115024002400340201620126a220241cc076a28020022144103460d02200d200241cc0710d40b21172009200241f8076a290200370300200a200241f0076a2902003703002010200241e8076a2902003703002011200241e0076a2902003703002008200241d8076a2902003703002001200241d0076a22052902003703a81920014198016a200141d8196a41d00710d40b1a024002402014410247220f0d00200141d8116a41d48dc70041d00710d40b1a41002105200141a8116a41286a41002903d09547370300200141a8116a41206a41002903c89547370300200141a8116a41186a41002903c09547370300200141a8116a41106a41002903b89547370300200141a8116a41086a41002903b09547370300200141002903a895473703a8110c010b2020200741cc0710d40b1a200141a8296a41286a2213200541286a290300370300200141a8296a41206a220b200541206a290300370300200141a8296a41186a2204200541186a290300370300200141a8296a41106a220c200541106a290300370300200141a8296a41086a2203200541086a290300370300200120052903003703a829200141d8296a200141a8316a41d00710d40b1a200141d8116a200141d8296a41d00710d40b1a200141a8116a41286a2013290300370300200141a8116a41206a200b290300370300200141a8116a41186a2004290300370300200141a8116a41106a200c290300370300200141a8116a41086a2003290300370300200120012903a8293703a811201521050b200f0d01201541016a2115200e20124180086a2212470d000b201e21020c020b200141d8096a200141d8116a41d00710d40b1a200141a8096a41286a220f200141a8116a41286a290300370300200141a8096a41206a220e200141a8116a41206a290300370300200141a8096a41186a220d200141a8116a41186a290300370300200141a8096a41106a2209200141a8116a41106a290300370300200141a8096a41086a220a200141a8116a41086a290300370300200120012903a8113703a809200141d8216a200141d8096a41d00710d40b1a200141a8216a41286a2210200f290300370300200141a8216a41206a220f200e290300370300200141a8216a41186a2211200d290300370300200141a8216a41106a220d2009290300370300200141a8216a41086a2209200a290300370300200120012903a8093703a8214188081038220e450d0541012104200e2005360200200e41046a200141d8216a41d00710d40b1a200e20143602d407200e20012903a8213703d807200e41e0076a2009290300370300200e41e8076a200d290300370300200e41f0076a2011290300370300200e41f8076a200f290300370300200e4180086a2010290300370300200142818080801037029c092001200e360298090240201d410a744180786a2012460d00201541016a211520024180086a210f2016201d410a746a22084180786a2121200141a8196a41286a210d200141a8196a41206a2109200141a8196a41186a210a200141a8196a41106a2110200141a8196a41086a2111410121040340200f21020240034020024180086a2105200241cc076a22122802004103460d012017200241cc0710d40b1a20122802002114200d200241f8076a2902003703002009200241f0076a290200370300200a200241e8076a2902003703002010200241e0076a2902003703002011200241d8076a2902003703002001200241d0076a22122902003703a81920014198016a200141d8196a41d00710d40b1a024002402014410247220f0d00200141d8116a41d48dc70041d00710d40b1a41002112200141a8116a41286a41002903d09547370300200141a8116a41206a41002903c89547370300200141a8116a41186a41002903c09547370300200141a8116a41106a41002903b89547370300200141a8116a41086a41002903b09547370300200141002903a895473703a8110c010b2020200741cc0710d40b1a200141a8296a41286a2213201241286a290300370300200141a8296a41206a220b201241206a290300370300200141a8296a41186a220c201241186a290300370300200141a8296a41106a2203201241106a290300370300200141a8296a41086a2222201241086a290300370300200120122903003703a829200141d8296a200141a8316a41d00710d40b1a200141d8116a200141d8296a41d00710d40b1a200141a8116a41286a2013290300370300200141a8116a41206a200b290300370300200141a8116a41186a200c290300370300200141a8116a41106a2003290300370300200141a8116a41086a2022290300370300200120012903a8293703a811201521120b0240200f0d00201541016a21152005210220082005470d010c040b0b200141d8096a200141d8116a41d00710d40b1a200141a8096a41286a2205200141a8116a41286a290300370300200141a8096a41206a220f200141a8116a41206a290300370300200141a8096a41186a2213200141a8116a41186a290300370300200141a8096a41106a220b200141a8116a41106a290300370300200141a8096a41086a220c200141a8116a41086a290300370300200120012903a8113703a809200141d8216a200141d8096a41d00710d40b1a200141a8216a41286a22032005290300370300200141a8216a41206a2222200f290300370300200141a8216a41186a22232013290300370300200141a8216a41106a2213200b290300370300200141a8216a41086a220b200c290300370300200120012903a8093703a82102402004200128029c09470d0020014198096a2004108608200128029809210e0b20024180086a210f201541016a2115200e20044188086c6a22052012360200200541046a200141d8216a41d00710d40b1a200541d4076a2014360200200541d8076a20012903a821370300200541e0076a200b290300370300200541e8076a2013290300370300200541f0076a2023290300370300200541f8076a202229030037030020054180086a20032903003703002001200441016a22043602a00920212002470d010c020b0b201e2005460d002016201d410a746a2112034020054180086a21020240200541cc076a2802004102460d000240200541c0076a2802002215450d00200541c4076a280200450d00201510390b200510ce040b2002210520122002470d000b0b0240201f41ffffff0171450d00201610390b200128029c092124200128029809211120044133490d0241002802d0a94e4102490d0341002802cca94e210241002802c8a94e210541002802d4a94e2112200141c4316a41b8c0cd00360200200141b8316a4201370300200141dc316a41a8a8cc00ad4280808080c00b84370200200141d0316a4190a8cc00ad4280808080800384370300200141c8316a4200370300200141b0316a411236020020014190bfcc003602b43120014281808080801f3702e431200141003602d831200141b4bccc003602ac31200141023602a831200541b8c0cd00201241024622121b200141a8316a200241c0a4c00020121b2802101103000c030b20024180086a21020b410021240240201e2002460d002016201d410a746a2112034020024180086a21050240200241cc076a2802004102460d000240200241c0076a2802002215450d00200241c4076a280200450d00201510390b200210ce040b2005210220122005470d000b0b41002802e8c84821110240201f41ffffff0171450d00201610390b410021040c020b200441144b0d00200441014b220d450d012004417f6a211220044188086c20116a41f8776a211641002115200141b0196a2109200141b8196a210a200141c0196a2110200141c8196a2108200141d0196a211302400240034020122202417f6a2112200d450d010240200420126b220e4102490d00201120024188086c6a22024184086a2d0000201120124188086c6a22054184086a2d0000220f4f0d00200141d8196a200541d00710d40b1a2009200541dc076a290200370300200a200541e4076a2902003703002010200541ec076a2902003703002008200541f4076a2902003703002013200541fc076a290200370300200141a8316a41026a220b20054187086a2d00003a00002001200541d4076a2902003703a819200120054185086a2f00003b01a831200541d0076a280200210c2005200241880810d40b1a0240200e4103490d002015417f6a2117410021052016210203402002418c106a2d0000200f4f0d0120172005460d05200220024188086a221441880810d40b1a2014210220152005417f6a2205470d000b201421020b2002200141d8196a41d00710d40b2202200c3602d00720024184086a200f3a0000200220012903a8193702d407200241dc076a2009290300370200200241e4076a200a290300370200200241ec076a2010290300370200200241f4076a2008290300370200200241fc076a201329030037020020024185086a20012f01a8313b000020024187086a200b2d00003a00000b201641f8776a21162015417f6a211520120d000c040b0b2012200441b4bac3001054000b410120056b200e41a4bbc300103c000b2004410176ad4288087e2219422088a70d022019a7221d417f4c0d02201d1038220c450d012001420037029c0141002102200141002802d8974e221236029801201141f8776a2122201141ec6f6a211f200141b8196a2103200141c0196a2107200141c8196a2120200141d0196a211e2004211703404100210a4101210e02402017417f6a2205450d000240024002400240024002400240201120054188086c6a4184086a2d000020174188086c220d20116a41f4776a2d00002215490d002017417e6a2116201f200d6a21144100210a410021050340024020162005470d002017210e0c090b200541016a2105201541ff0171210f20142d00002115201441f8776a2114200f20154f0d000b200541016a210e2005417f7320176a21050c010b201f200d6a211402400340024020054101470d00410021050c020b2005417f6a2105201541ff0171210f20142d00002115201441f8776a2114200f2015490d000b0b20172005490d01201720044b0d02201720056b220e410176220f450d00201120054188086c6a21152022200d6a21140340200141a8316a201541880810d40b1a2015201441880810d50b4188086a21152014200141a8316a41880810d40b41f8776a2114200f417f6a220f0d000b0b024020050d002005210a0c060b0240200e41094d0d002005210a0c060b201720044b0d03200520176b2114201120054188086c6a210d034020172005417f6a220a490d0502402017200a6b220e4102490d00201120054188086c6a22054184086a2d00002011200a4188086c6a22154184086a2d000022164f0d00200141d8196a201541d00710d40b1a200141a8196a41086a2209201541dc076a2902003703002003201541e4076a2902003703002007201541ec076a2902003703002020201541f4076a290200370300201e201541fc076a290200370300200141a8316a41026a221020154187086a2d00003a00002001201541d4076a2902003703a819200120154185086a2f00003b01a831201541d0076a28020021082015200541880810d40b1a0240200e4103490d0041012115200d210503402005418c106a2d000020164f0d01201420156a4101460d06200520054188086a220f41880810d40b1a200f21052014201541016a22156a0d000b200f21050b2005200141d8196a41d00710d40b220520083602d00720054184086a20163a0000200520012903a8193702d407200541dc076a2009290300370200200541e4076a2003290300370200200541ec076a2007290300370200200541f4076a2020290300370200200541fc076a201e29030037020020054185086a20012f01a8313b000020054187086a20102d00003a00000b200a450d06200d41f8776a210d2014417f6a2114200a2105200e410a4f0d060c000b0b2005201741c4bac3001055000b2017200441c4bac300104b000b2015200e41a4bbc300103c000b20172005417f6a220a490d002017200441d4bac300104b000b200a201741d4bac3001055000b02402002200128029c01470d0020014198016a200210b101200128029801211220012802a00121020b201220024103746a2202200e3602042002200a360200200120012802a00141016a22023602a001024020024102490d002001280298012112024003400240024002400240024020122002417f6a4103746a2205280200450d00200241037420126a220f41746a2802002214200528020422154b0d010b20024103490d022005280204211520122002417d6a220e4103746a28020421050c010b200241024d0d0520122002417d6a220e4103746a2802042205201520146a4d0d00200241034d0d05200f41646a280200200520146a4b0d050b20052015490d010b2002417e6a210e0b02400240024002402002200e41016a22104d0d0002402002200e4d0d0002402012200e41037422086a2202280204221320022802006a220520122010410374220b6a22022802002209490d000240200520044b0d00201120094188086c6a22152002280204220d4188086c22126a210220054188086c21140240200520096b220f200d6b2205200d490d00200c2015201210d40b220520126a21120240200d41014e0d00200521050c080b200f200d4a0d05200521050c070b200c200220054188086c221210d40b221720126a2112200d4101480d0520054101480d05202220146a211403402014200241f8776a220f201241f8776a22162012417c6a2d00002002417c6a2d00004922051b41880810d40b21142012201620051b21122015200f200220051b22024f0d06201441f8776a2114201220174b0d000c060b0b200520044184bbc300104b000b200920054184bbc3001055000b200e200241f4bac300103c000b2010200241e4bac300103c000b201120146a21162005210503402002200520024184086a2d000020054184086a2d00004922141b210f200520054188086a20141b21052015200f41880810d40b4188086a211520024188086a200220141b220220164f0d0220052012490d000c020b0b20172105200221150b20152005201220056b22022002418808706b10d40b1a024020012802a0012202200e4d0d00200128029801221220086a22052013200d6a36020420052009360200200220104d0d022012200b6a2205200541086a2002200e6b41037441706a10d50b1a20012002417f6a22023602a001200241014b0d010c030b0b200e20024194bbc300103c000b201020021044000b200a2117200a0d000b0240200128029c0141ffffffff0171450d0020012802980110390b201d418808702102201d418808490d00201d2002460d00200c10390b201120044188086c22026a212502400240024020020d0042002126201121050c010b201c428090bcfd027e201b20184280cab5ee0156ad7c7c2127200141f9196a212820014198016a41c0076a212920014198016a41da076a212a200141a8316a41d0076a210520014198016a41d0076a2115200141a8316a41da076a212b200041016a212c200141d8096a41086a2116200141d8196a41086a2114200141d8096a410672211720014198016a41046a212d42c0f4a4eb002119200141c5316a222e41076a212f41002109420021262011210202400340200241d4076a28020022124102460d012002280200213020014198016a200241046a41d00710d40b1a200141d8216a41286a220f20024180086a290200370300200141d8216a41206a220b200241f8076a290200370300200141d8216a41186a2213200241f0076a290200370300200141d8216a41106a2208200241e8076a290200370300200141d8216a41086a2210200241e0076a2902003703002001200241d8076a2902003703d821200141a8316a202d41cc0710d40b1a200520012903d821370200200541086a220a2010290300370200200541106a22102008290300370200200541186a22082013290300370200200541206a2213200b290300370200200541286a220b200f290300370200200120123602f438200141d8196a200141a8316a10b20320012903d81921310240024020012d008039410146220f0d004102210d02400240024020012d0081390e03000102000b4100210d0c010b200141d8096a41186a202b41186a290100370300200141d8096a41106a202b41106a2901003703002016202b41086a2901003703002001202b29010022183703d8092018a721324101210d0b2014201741086a290100370300200141d8196a41106a201741106a290100370300200141d8196a41186a201741186a2f01003b0100200120172901003703d81920012801da092107410021200c010b4101212020012802843921070b411010382212450d04201241cce0c00036020c20124101360208201242818080801037020020162014290300370300200141d8096a41106a220c200141d8196a41106a290300370300200141d8096a41186a2203200141d8196a41186a280200360200200120012903d8193703d80902400240200f0d002012210f200d41ff0171450d010b41101038220f450d05200f41e4e0c00036020c200f4101360208200f42818080801037020020122012280200417f6a221e360200201e0d002012280208201228020c2802001102000240201228020c280204450d00201228020810390b201241046a221e201e280200417f6a221e360200201e0d00201210390b200141a8296a41086a221f20162903002218370300200141a8296a41106a221d200c290300221b370300200141a8296a41186a222120032802002212360200200120012903d809221c3703a8292014201c370100201441086a2018370100201441106a201b370100201441186a2012360100200120073602dc19200120323b01da192001200d3a00d919200120203a00d8192001200f3602fc19200141d8096a200141d8196a10cc0320012d00d809212320012802f438211220012802e8382133200141d8296a200141a8316a41cc0710d40b1a200141d8116a41286a220f200b290300370300200141d8116a41206a22072013290300370300200141d8116a41186a22202008290300370300200141d8116a41106a221e2010290300370300200141d8116a41086a2222200a290300370300200120052903003703d811024020124102460d00427f427f427f201920317c221820182019541b2219427f201942c0b2cd3b7c221820182019541b20231b22194280c2d72f7c221820182019541b201920331b221942c0b2cd3b7c221820182019541b201920124101461b211920014198016a200141d8296a41cc0710d40b1a201541286a200f290300370300201520012903d811370300201541086a2022290300370300201541106a201e290300370300201541186a2020290300370300201541206a2007290300370300200120123602e40802400240024020012d00940941c000490d002009450d0020192027560d010b200141d8216a20014198016a1087080240024020012d00f00841014622120d004102213402400240024020012d00f1080e03000102000b410021340c010b2003202a41186a290100370300200c202a41106a2901003703002016202a41086a2901003703002001202a29010022183703d8092018a72135410121340b200141a8316a41086a201741086a290100370300200141a8316a41106a201741106a290100370300200141a8316a41186a201741186a2f01003b0100200120172901003703a83120012801da09210a410021100c010b4101211020012802f408210a0b2021200141a8316a41186a280200360200201d200141a8316a41106a290300370300201f200141a8316a41086a290300370300200120012903a8313703a82941101038220f450d07200f41cce0c00036020c200f4101360208200f4281808080103702000240024020120d00200f2112203441ff0171450d010b411010382212450d08201241e4e0c00036020c201241013602082012428180808010370200200f200f280200417f6a220836020020080d00200f280208200f28020c2802001102000240200f28020c280204450d00200f28020810390b200f41046a22082008280200417f6a220836020020080d00200f10390b024002402012280208200141d8216a201228020c28020c1101000d0020122012280200417f6a220f360200200141003a00f019200142003703e019200141023a00f819200142013703d8190240200f0d002012280208201228020c2802001102000240201228020c280204450d00201228020810390b201241046a220f200f280200417f6a220f360200200f0d00201210390b200141d8216a10c1030c010b200141a8316a200141d8216a41c00710d40b1a201620012903a829370100201641086a201f290300370100201641106a201d290300370100201641186a20212802003601002001200a3602dc09200120353b01da09200120343a00d909200120103a00d809200120123602fc09200141d8196a200141a8316a200141d8096a10c4030b0240024020012802d808220f0d00410021120c010b20012802e008220e417f4c0d0902400240200e0d00410121120c010b200e10382212450d090b2012200f200e10d40b1a0b0240024020012802e4084101460d004101210a20012802d808450d01200141a8316a202910ba0520012802a831220f20012802b03110e00120012802ac31450d01200f10390c010b20012802e808210f0240024020012802ec08220a4102490d00200141013602e4082001200a417f6a3602ec080c010b200141003602e4080b200f20006a210f024020012802d808450d00200141a8316a200f10c30420012802b031211020012802a831210a200141d8096a41046a41003a0000200141003602d809200141106a200a2010200141d8096a4105410010e601024002402001280210450d00200120012802142210410520104105491b3602dc212001200141d8096a3602d821200141086a200141d8216a10c101200128020c211020012802084521080c010b410021080b024020012802ac31450d00200a10390b200141a8316a202910ba0520012802a831220a20012802b031200f2010410020081b10eb0320012802ac31450d00200a10390b200141a8316a20014198016a41800810d40b1a200f200141a8316a10c4054100210a0b4108210f024020012903d8194201520d0020012903e0194202510d00200120282900003703a8312001202841076a2800003600af3120012d00f819210f0b200120012800af313600df21200120012903a8313703d821202f20012800df21360000202e20012903d8213700002001200f3a00c4312001200e3602c0312001200e3602bc31200120123602b831200120303602b431200120003602b031200141023602ac312001410c3a00a831200141a8316a10c9030240200a450d00024020012802d8082212450d0020012802dc08450d00201210390b20014198016a10c1040b201921260c010b20124103460d00200141a8316a200141d8296a41cc0710d40b1a200520012903d811370300200a20222903003703002010201e2903003703002008202029030037030020132007290300370300200b200f290300370300200120123602f438202c200141a8316a10c4050b2009417f6a210920024188086a22022025470d010c040b0b20024188086a21050c010b20024188086a21050b20252005460d00201120044188086c6a21150340200522024188086a21050240200241c8076a2802002212450d00200241cc076a280200450d00201210390b200241086a10ce0420152005470d000b0b02402024450d0020244188086c450d00201110390b20001088082119200141b03c6a2400427f2006427f427f201a427f202620197c221920192026541b7c22192019201a541b221942c0b2cd3b7c221820182019541b7c221920192006541b0f0b1032000b1034000b9f0201027f230041106b220224000240024020002d00004101470d002002200128021841d0ecc60041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041016a36020c20022002410c6a41d8ecc60010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b200128021841d4ecc60041042001411c6a28020028020c11000021010b200241106a2400200141ff01714100470be60301067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a4184e4c900411510cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bc00302087f017e2000280200210220012000280208220010ac0202402000450d002002200041386c6a2103200141046a21040340200241086a2100024020042802002205200141086a220628020022076b411f4b0d00200120074120107720042802002105200628020021070b2001280200220820076a22092000290000370000200941186a200041186a290000370000200941106a200041106a290000370000200941086a200041086a2900003700002006200741206a22003602002002290300210a0240200520006b41074b0d00200120004108107720062802002100200128020021080b200241386a2105200820006a200a3700002006200041086a3602002002280228210020012002280230220210ac0202402002450d002002410574210720062802002109034002400240200428020020096b411f4d0d00200921020c010b2001200941201077200628020021020b2006200241206a2209360200200128020020026a22022000290000370000200241086a200041086a290000370000200241106a200041106a290000370000200241186a200041186a290000370000200041206a2100200741606a22070d000b0b2005210220052003470d000b0b0bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b2203410120031bad4288087e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a4108360200200220014188086c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a20014188086e360200200241206a24000f0b1034000bee2a04057f017e027f017e230041a0096b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241d0016a200141086a10ab06200041086a200241d0016a41b80710d40b1a200041253602000c240b000b200241d0016a200141086a10ac0620004100360200200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c220b200241d0016a200141086a10ad06200041086a200241d0016a41a00210d40b1a200041013602000c210b20004102360200200041086a200141086a2903003703000c200b41042103200141046a210402400240024002400240024020012d0004417f6a0e050102030400010b200141086a2802002101410521030c040b200141086a2802002101410121030c030b41022103200241026a200441036a2d00003a0000200241d0016a41086a200141146a290200370300200241e0016a2001411c6a290200370300200241e8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703d001200141286a2802002104200141086a28020021010c020b200141086a2802002101410321030c010b200241026a200441036a2d00003a0000200241d0016a41086a200141146a290200370300200241e0016a2001411c6a290200370300200241e8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703d00120012d00254100472105200141286a2802002104200141086a28020021010b200020033a0004200020022f01003b0005200020053a002520004103360200200041086a20013602002000410c6a20022903d001370200200041286a2004360200200041076a200241026a2d00003a0000200041146a200241d0016a41086a2903003702002000411c6a200241e0016a290300370200200041246a200241e8016a2d00003a00000c1f0b200241d0016a200141086a10ae06200041086a200241d0016a41e00010d40b1a200041043602000c1e0b200241d0016a200141046a10af06200041053602002000410c6a200241d8016a280200360200200020022903d0013702040c1d0b200241d0016a200141086a10b006200041086a200241d0016a41d80010d40b1a200041063602000c1c0b02400240200128020422040d00410021030c010b200241d0016a41186a200141286a290000370300200241d0016a41106a200141206a290000370300200241d8016a200141186a290000370300200241d0016a41286a200141386a290000370300200241d0016a41306a200141c0006a290000370300200241d0016a41386a200141c8006a290000370300200241d0016a41c8006a200141d8006a290000370300200241d0016a41d0006a200141e0006a290000370300200241d0016a41d8006a200141e8006a2900003703002002200141106a2900003703d0012002200141306a2900003703f0012002200141d0006a29000037039002200241d0016a41f8006a20014188016a290000370300200241d0016a41f0006a20014180016a290000370300200241d0016a41e8006a200141f8006a290000370300200241d0016a4188016a20014198016a290000370300200241d0016a4190016a200141a0016a290000370300200241d0016a4198016a200141a8016a290000370300200241d0016a41a8016a200141b8016a290000370300200241d0016a41b0016a200141c0016a290000370300200241d0016a41b8016a200141c8016a2900003703002002200141f0006a2900003703b002200220014190016a2900003703d0022002200141b0016a2900003703f0022001410c6a2802002201417f4c0d1d0240024020010d00410121030c010b200110382203450d1f0b20032004200110d40b1a2002200241d0016a41c00110d40b1a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241c00110d40b1a200041083602000c1b0b200241d0016a200141086a10b106200041086a200241d0016a41980210d40b1a200041093602000c1a0b200141106a2802002203417f4c0d1a20012802042105200141086a28020021060240024020030d00410121040c010b200310382204450d1c0b200220033602d401200220043602d00120042006200310d40b1a200241d0016a41086a22042003360200200241dc016a200141146a10b206200241086a22032004290300370300200241106a2204200241d0016a41106a290300370300200220022903d001370300200129032021072001280228210620002005360204200041e4006a2001412c6a220141386a290200370200200041dc006a200141306a290200370200200041d4006a200141286a290200370200200041cc006a200141206a290200370200200041c4006a200141186a2902003702002000413c6a200141106a290200370200200041346a200141086a2902003702002000412c6a2001290200370200200041286a2006360200200041206a20073702002000410a360200200041086a2002290300370200200041106a2003290300370200200041186a20042903003702000c190b024002400240024020012f0104417f6a0e03010200010b2002410472200141086a10b306200241033b01000c020b2002410472200141086a10b306200241013b01000c010b20012f0106210341c00710382204450d1b200241d0016a200141086a28020010aa0620022004200241d0016a41c00710d40b360204200220033b0102200241023b01000b200041046a220120022903003702002000410c360200200141086a200241086a2903003702000c180b200241d0016a200141086a10d005200041086a200241d0016a41a80210d40b1a2000410d3602000c170b200141046a210841082109024002400240024002400240024002400240024020012d0004417f6a0e09010203040506070900010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410921090c070b20024190096a41086a2209200141106a2800003602002002200141086a290000370390092002200141186a2900003703d00120022001411d6a2900003700d501200141146a280200210420012f0106210520012d0005210641c00710382203450d202003200141286a28020010b406200241c0016a41086a200928020036020020022002290390093703c001200220022903d001370300200220022900d501370005410121090c070b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241d0016a41086a200141346a290200370300200241d0016a41106a2001413c6a290200370300200241d0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703d001200141286a2802002103200141146a280200210420012f0106210520012d00052106410221090c060b200241c0016a200141086a10b506200141146a280200210420012f01062105410321090c050b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410421090c040b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241d0016a41086a200141346a290200370300200241d0016a41106a2001413c6a290200370300200241d0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703d001200141286a2802002103200141146a280200210420012f0106210520012d00052106410521090c030b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410621090c010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410721090b0b200020053b0106200020063a0005200020093a0004200041086a20022903c001370200200041146a2004360200200041186a2002290300370200200041286a20033602002000412c6a20022903d001370200200041106a200241c0016a41086a280200360200200041206a200241086a290300370200200041346a200241d0016a41086a2903003702002000413c6a200241d0016a41106a290300370200200041c4006a200241d0016a41186a2802003602002000410e3602000c160b200241d0016a200141086a10b606200041086a200241d0016a41f80010d40b1a2000410f3602000c150b200241d0016a200141046a10b70620004110360200200041246a200241f0016a2802003602002000411c6a200241e8016a290300370200200041146a200241d0016a41106a2903003702002000410c6a200241d8016a290300370200200020022903d0013702040c140b200241d0016a200141086a10b80620004111360200200041306a200241d0016a41286a290300370300200041286a200241d0016a41206a290300370300200041206a200241d0016a41186a290300370300200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c130b200241d0016a200141046a10b906200041046a200241d0016a41c80010d40b1a200041123602000c120b200241d0016a200141086a10ba06200041086a200241d0016a41c80010d40b1a200041133602000c110b200241d0016a41306a200141386a10bb06200241d0016a41286a200141306a290300370300200241d0016a41206a200141286a290300370300200241d0016a41186a200141206a290300370300200241d0016a41106a200141186a290300370300200241d0016a41086a200141106a2903003703002002200141086a2903003703d0012002200141f8016a2802003602c00320014180026a2903002107200041086a200241d0016a41f80110d40b1a20004180026a2007370300200041143602000c100b200241d0016a200141086a10bc0620004115360200200041186a200241d0016a41106a290300370300200041106a200241d0016a41086a290300370300200041086a20022903d0013703000c0f0b10bd06000b10be06000b200241d0016a200141046a10bf06200241dc016a200141106a10c006200241d0016a41186a2001411c6a10c106200241286a200141d0006a290200370300200241206a200141c8006a290200370300200241186a200141c0006a290200370300200241386a200141e0006a290200370300200241c0006a200141e8006a290200370300200241c8006a200141f0006a290200370300200241d8006a20014180016a290200370300200241e0006a20014188016a290200370300200241e8006a20014190016a2902003703002002200141386a2902003703102002200141d8006a2902003703302002200141f8006a290200370350200141286a280200210320024104722001412c6a10c20620022003360200200241f4016a200241f00010d40b1a200041046a2002200241d0016a41940110d40b41940110d40b1a200041183602000c0c0b10f705000b200241d0016a200141046a10c3062000411a360200200041146a200241e0016a2903003702002000410c6a200241d8016a290300370200200020022903d0013702040c0a0b2000411b360200200020012802043602040c090b10c406000b10c506000b4105210302400240024002400240024002402001280204417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a28020021042001410c6a2802002105200141086a2802002106410121030c040b200141086a2802002106410221030c030b2001410c6a2802002105200141086a2802002106410321030c020b200141086a2802002106410421030c010b410621030b200020033602042000411e360200200041106a20043602002000410c6a2005360200200041086a20063602000c060b10c606000b200241d0016a200141086a10c706200041086a200241d0016a41d00010d40b1a200041203602000c040b024002400240024002400240200141086a22032d0000417f6a0e03010203000b41e1d1cd004128418483c6001035000b200241026a200341036a2d00003a0000200241d0016a41086a200141186a290300370300200241d0016a41106a200141206a290300370300200241d0016a41186a200141286a2d00003a0000200220032f00013b01002002200141106a2903003703d001200141c0006a2903002107200141386a290300210a200141346a2802002103200141306a28020021042001410c6a28020021052001412c6a2802002101410121060c030b2001410c6a2802002105410221060c010b2001410c6a2802002105410321060b0b200020022f01003b0009200041c0006a2007370300200041386a200a370300200041086a20063a00002000410c6a2005360200200041106a20022903d001370300200041346a2003360200200041306a20043602002000412c6a20013602002000410b6a200241026a2d00003a0000200041186a200241d0016a41086a290300370300200041206a200241d0016a41106a290300370300200041286a200241d0016a41186a280200360200200041213602000c030b200241d0016a200141086a10c806200041086a200241d0016a41f00310d40b1a200041223602000c020b41032103024002400240200141086a280200417f6a0e03000102000b200141106a28020021062001410c6a2802002109410121030c010b200141286a290300210a200141206a2903002107200141186a2802002104200141146a2802002105200141106a28020021062001410c6a2802002109410221030b20004123360200200041286a200a370300200041206a2007370300200041186a2004360200200041146a2005360200200041106a20063602002000410c6a2009360200200041086a20033602000c010b200241d0016a200141086a10c906200041086a200241d0016a41d80010d40b1a200041243602000b200241a0096a24000f0b1034000b1032000bdace0108017f017e047f017e047f017e177f077e230041f0156b2201240010cb084200210202400240024002400240024020004101460d00200141e80a6a41186a22034200370300200141e80a6a41106a22044200370300200141e80a6a41086a22054200370300200142003703e80a200141c0076a41cde5c000410410cb012005200141c0076a41086a2206290000370300200120012900c0073703e80a200141c0076a41a4d4c700410b10cb0120032006290000370300200420012900c007370300200141b8046a200141e80a6a10ee0420012903c004210720012802b8042108200141c8046a41186a22094200370300200141c8046a41106a220a4200370300200141c8046a41086a220b4200370300200142003703c804200141a8096a41cde5c000410410cb01200b200141a8096a41086a290000370300200120012900a8093703c804200141c0076a4180d3c700410a10cb0120092006290000370300200a20012900c007370300200141a8046a200141c8046a10ee0420014198046a20012903b004420020012802a8041b420042d804420010d30b024002400240024002400240024002400240024020012903a00450450d002001290398042102200342003703002004420037030020054200370300200142003703e80a200141c0076a41cde5c000410410cb0120052006290000370300200120012900c0073703e80a200141c0076a41f4d3c700410b10cb01200441086a2006290000370000200420012900c00737000020014188046a200141e80a6a10ee040240200220012903900442002001280288041b7c220c2002540d004200210242002007420020081b2207200c7d220c200c2007561b42d804540d0b200141a8096a41186a22054200370300200141a8096a41106a220d4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2203290000370300200120012900e80a3703a809200141e80a6a41d091c600410c10cb0120052003290000370300200d20012900e80a37030020014180046a200141a8096a412010ce03200128028404210e200128028004210f20054200370300200d420037030020064200370300200142003703a809200141e80a6a41b69fc500410710cb0120062003290000370300200120012900e80a3703a809200141e80a6a41f491c600410d10cb0120052003290000370300200d20012900e80a370300200141a8096a10dd042110200141c8046a41186a22034200370300200141c8046a41106a22094200370300200141c8046a41086a22054200370300200142003703c804200141a8096a41b69fc500410710cb0120052006290000370300200120012900a8093703c804200141c0076a41d091c600410c10cb01200a41086a220b200141c0076a41086a2208290000370000200a20012900c007370000200141f8036a200141c8046a412010ce0320012802fc03211120012802f8032112200141e8046a10d204200342003703002009420037030020054200370300200142003703c804200141a8096a41b69fc500410710cb0120052006290000370300200120012900a8093703c804200141c0076a41f4c9c800410a10cb01200b2008290000370000200a20012900c007370000200141e80a6a200141c8046a10bf0220012902ec0a210220012802e80a2106200141003602d007200120064100280284ee4d20061b22053602c807200120053602c00720012002420020061b22023e02c407200120052002422088a74105746a3602cc07200141e80a6a200141c0076a10cc0802400240200141a80b6a280200450d0041d00010382209450d0e2009200141e80a6a41d00010d40b210620014281808080103702ac09200120063602a809200141e0056a41106a200141c0076a41106a280200360200200141e0056a41086a200141c0076a41086a290300370300200120012903c0073703e005200141e80a6a200141e0056a10cc080240200141a80b6a280200450d004102210641d000210541012103034002402006417f6a2003470d00200141a8096a2003410110930320012802a80921090b200920056a200141e80a6a41d00010d40b1a200120063602b009200141e80a6a200141e0056a10cc0820012802a80b450d01200541d0006a2105200641016a210620012802ac0921030c000b0b024020012802e40541ffffff3f71450d0020012802e00510390b200141f8046a41086a200141a8096a41086a280200360200200120012903a8093703f8040c010b200142003702fc04200141002802e8c8483602f80420012802c40741ffffff3f71450d0020012802c00710390b200141e0046a4200370300200141d8046a4200370300200141c8046a41086a22064200370300200142003703c804200141a8096a41b69fc500410710cb012006200141a8096a41086a290000370300200120012900a8093703c804200141c0076a41d091c600410c10cb01200a41086a200141c0076a41086a290000370000200a20012900c007370000200141f0036a200141c8046a412010ce0320012802f403210620012802f0032105200141a8096a41e0c1cd00410810cb01200141c0076a41f8fbcd00411210cb0120012006410020051b3602c8042001200141c8046a410410cc0137038809200141e80a6a410c6a200141c8046a41046a360200200120014188096a41086a3602ec0a2001200141c8046a3602f00a200120014188096a3602e80a200141e0056a200141e80a6a10830120012802e805220941206a2206417f4c0d0d0240024020060d00410121050c010b200610382205450d0d0b41002103200141003602f00a200120053602e80a200120063602ec0a02402006410f4b0d00200141e80a6a41004110107720012802ec0a210620012802e80a210520012802f00a21030b200520036a220b20012900a809370000200b41086a200141a8096a41086a2900003700002001200341106a22033602f00a0240200620036b410f4b0d00200141e80a6a20034110107720012802ec0a210620012802e80a210520012802f00a21030b200520036a220b20012900c007370000200b41086a200141c0076a41086a2900003700002001200341106a22033602f00a20012802e005210b0240200620036b20094f0d00200141e80a6a20032009107720012802e80a210520012802f00a21030b200520036a200b200910d40b1a200320096a2106024020012802e405450d0020012802e00510390b20012802e80a2205200610e101024020012802ec0a450d00200510390b200141e0046a4200370300200141d8046a4200370300200141c8046a41086a22064200370300200142003703c804200141a8096a41b69fc500410710cb012006200141a8096a41086a290000370300200120012900a8093703c804200141c0076a41d091c600410c10cb01200a41086a200141c0076a41086a290000370000200a20012900c007370000200141e8036a200141c8046a412010ce0320012802ec03210620012802e8032105200141a8096a41e0c1cd00410810cb01200141c0076a41bcfccd00410e10cb0120012006410020051b3602c8042001200141c8046a410410cc0137038809200141e80a6a410c6a200141c8046a41046a360200200120014188096a41086a3602ec0a2001200141c8046a3602f00a200120014188096a3602e80a200141e0056a200141e80a6a10830120012802e805220941206a2206417f4c0d0d0240024020060d00410121050c010b200610382205450d0d0b41002103200141003602f00a200120053602e80a200120063602ec0a02402006410f4b0d00200141e80a6a41004110107720012802ec0a210620012802e80a210520012802f00a21030b200520036a220b20012900a809370000200b41086a200141a8096a41086a2900003700002001200341106a22033602f00a0240200620036b410f4b0d00200141e80a6a20034110107720012802ec0a210620012802e80a210520012802f00a21030b200520036a220b20012900c007370000200b41086a200141c0076a41086a2900003700002001200341106a22033602f00a20012802e005210b0240200620036b20094f0d00200141e80a6a20032009107720012802e80a210520012802f00a21030b200520036a200b200910d40b1a200320096a2106024020012802e405450d0020012802e00510390b20012802e80a2205200610e101024020012802ec0a450d00200510390b200128028005450d02200141e80a6a200141f8046a10cd08200141eb056a200141e80a6a41086a280200360000200120012903e80a3700e305200141073a00e80a200141f40a6a200141e0056a41076a290000370000200120012900e0053700ed0a200141023a00ec0a200141e80a6a10c90320012802f004211320014198056a200141f8046a41086a2802003602002001201336028c0520012011410020121b220b36028805200120012903f80437039005200141a0056a20014188056a41086a10cd08200142003702d40520014100280284ee4d22143602d005410410382206450d0c2006200b360000200120063602c00720014284808080c0003702c407200141e80a6a41cccbc60010bf05200141e0056a20012802e80a220520012802f00a109d0720012902e405420020012802e00522061b21022006201420061b2115024020012802ec0a450d00200510390b200120024220883e02ac09200120153602a809200141e0036a200141a8096a10c1010240024020012802e0030d0020012802e403221620012802ac09220541246e2206200620164b1bad42247e2207422088a70d0f2007a72206417f4c0d0f0240024020060d00410421120c010b200610382212450d0f0b200141003602e805200120123602e0052001200641246e22063602e405024020160d00410021112012450d010c020b200141e80a6a4104722108200141e80a6a41196a2117200141e80a6a41126a2118200141e80a6a410b6a2119410021114100211a024002400240034020054104490d02201a41016a211a200120012802a809220341046a3602a8092005417c6a21092003280000211b410021060340200141003a00cf0520092006460d022001200320066a220541056a3602a809200820066a200541046a2d00003a00002001200641016a22053602e80a2005210620054120470d000b200141b0056a41026a2206201941026a2d00003a0000200141cc056a41026a2203201841026a2d00003a0000200120082f01003b01c804200120192f00003b01b005200120182f00003b01cc052001200841026a2d00003a00ca0420012802880b211c20012802840b211d20012800fd0a211e20012801f60a211f20012800ef0a2120200141c8056a41026a201741026a2d000022213a0000200141c4056a41026a222220062d00003a0000200141c0056a41026a222320032d00003a0000200141bc056a41026a220320213a0000200120172f000022063b01c805200120012f01c8043b018809200120012d00ca043a008a09200120012f01b0053b01c405200120012f01cc053b01c005200120063b01bc050240201120012802e405470d00200141e0056a201110820320012802e005211220012802e80521110b200920056b21052012201141246c6a2206201b360200200641066a20012d008a093a0000200620012f0188093b01042006410d6a20222d00003a00002006410b6a20012f01c4053b0000200641146a20232d00003a0000200641126a20012f01c0053b0000200641076a20203600002006410e6a201f360000200641156a201e3600002006411b6a20032d00003a0000200641196a20012f01bc053b0000200641206a201c3600002006411c6a201d3600002001201141016a22113602e805201a2016470d000b20012802e405210620012802e0052212450d030c040b200141003602ac090c010b200120053602ac090b20012802e4052206450d00200641246c450d0020012802e00510390b4100210641002802d8974e2112410021110b200141e80a6a41cccbc600200141c0076a10ce08200141e0056a20012802e80a220320012802f00a10cf080240024020012802e00522050d00200141b8096a4200370300200120143602b409410021160c010b200141b8096a20012902e4052207370300200120053602b4092007422088a72116200521140b024020012802ec0a450d00200310390b200141c8096a2011360200200141c4096a2006360200200141a8096a41086a200141c0076a41086a280200360200200120012903c0073703a809200120123602c00902402002a7450d00201510390b20012802a005211f20012802a405212020012802a8052206450d03201f200641d0006c6a211c200141e80a6a41d0006a211e200141e80a6a410c6a211a200141e0056a41c4006a2115201f21114100211d03402011220641d0006a21110240200641c0006a28020022050d00201c2011460d0603402011220641d0006a21110240200641c4006a2802002205450d00200541306c450d00200641c0006a28020010390b201c2011470d000c070b0b200141c0076a41386a2203200641386a290300370300200141c0076a41306a2209200641306a290300370300200141c0076a41286a2208200641286a290300370300200141c0076a41206a2212200641206a290300370300200141c0076a41186a2217200641186a290300370300200141c0076a41106a2218200641106a290300370300200141c0076a41086a2219200641086a290300370300200141b0056a41086a221b200641cc006a280200360200200120062903003703c0072001200641c4006a2902003703b005200141e0056a41386a2003290300370300200141e0056a41306a2009290300370300200141e0056a41286a2008290300370300200141e0056a41206a2012290300370300200141e0056a41186a2017290300370300200141e0056a41106a2018290300370300200141e0056a41086a2019290300370300200120012903c0073703e005200120053602a006201520012903b005370200201541086a201b280200360200410410382206450d0d2006200b360000201a41002900cccb46370000201a41086a41002900d4cb4637000020014284808080c0003702ec0a200120063602e80a2001200141e0056a3602840b20014188096a200141e80a6a10d00820061039200141e80a6a20014188096a10b90520012802e80a220520012802f00a10e3012106024020012802ec0a450d00200510390b0240024020060d00200141e80a6a200141e0056a41d00010d40b1a201e200141d0056a10b50620014188096a200141e80a6a10c60520012802c00921080240024020012802c8092212450d0041002106201221092012210302400340024002402008200941017620066a220541246c6a2802002209200b4f0d00200541016a21060c010b200521032009200b460d020b200320066b210920062105200320064b0d000b0b201220054f0d01200520121041000b410021050b0240201220012802c409470d00200141a8096a41186a201210820320012802bc09211620012802c00921080b2008200541246c6a220641246a2006201220056b41246c10d50b1a200620012903880922023700042006410c6a20014188096a41086a2903002207370000200641146a20014188096a41106a290300220c3700002006411c6a20014188096a41186a29030022243700002006200b3602002001201241016a3602c809200141c8046a41186a22052024370300200141c8046a41106a2203200c370300200141c8046a41086a22092007370300200120023703c8040240201620012802b809470d0020162016470d00200141a8096a410c6a20164101109e0220012802bc0921160b20012802b409221420164105746a220620012903c804370000200641186a2005290300370000200641106a2003290300370000200641086a20092903003700004101211d2001201641016a22163602bc090c010b20012802a4062206450d00200641306c450d0020012802a00610390b2011201c470d000c050b0b41d0bbc70041fa0041dcbcc700105b000b41d0bbc70041fa0041ccbcc700105b000b200141013a00ec0a200141073a00e80a200141e80a6a10c90320012802fc042206450d04200641d0006c450d0420012802f80410390c040b2020450d01202041d0006c450d01201f10390c010b02402020450d00202041d0006c450d00201f10390b201d410171450d000240024002402016450d0020164105742105201421060340200141e80a6a200610bd0520012802a80b22030d02200641206a2106200541606a22050d000b0b41002802e8c8482115420021020c010b200141c0076a41386a2208200141e80a6a41386a290300370300200141c0076a41306a2211200141e80a6a41306a290300370300200141c0076a41286a2212200141e80a6a41286a290300370300200141c0076a41206a2215200141e80a6a41206a290300370300200141c0076a41186a221a200141e80a6a41186a290300370300200141c0076a41106a2217200141e80a6a41106a290300370300200141c0076a41086a2218200141e80a6a41086a290300370300200141e0056a41086a2219200141e80a6a41cc006a290200370300200141e0056a41106a221b200141e80a6a41d4006a290200370300200141e0056a41186a221c200141e80a6a41dc006a280200360200200120012903e80a3703c0072001200141ac0b6a2902003703e00541e00010382209450d08200920012903c00737030020092003360240200920012903e005370244200941386a2008290300370300200941306a2011290300370300200941286a2012290300370300200941206a2015290300370300200941186a201a290300370300200941106a2017290300370300200941086a2018290300370300200941cc006a2019290300370200200941d4006a201b290300370200200941dc006a201c280200360200200142818080801037028c092001200936028809024020054120460d00200641206a2115201420164105746a220341606a2116200141e80a6a41c4006a21124101211103402015210602400340200141e80a6a200610bd0520012802a80b22050d012003200641206a2206470d000c030b0b200141e0056a41386a221a200141e80a6a41386a290300370300200141e0056a41306a2217200141e80a6a41306a290300370300200141e0056a41286a2218200141e80a6a41286a290300370300200141e0056a41206a2219200141e80a6a41206a290300370300200141e0056a41186a221b200141e80a6a41186a290300370300200141e0056a41106a221c200141e80a6a41106a290300370300200141e0056a41086a2214200141e80a6a41086a290300370300200141c0076a41086a221d201241086a290200370300200141c0076a41106a221e201241106a290200370300200141c0076a41186a221f201241186a280200360200200120012903e80a3703e005200120122902003703c00702402011200128028c09470d0020014188096a201110980720012802880921090b200641206a21152009201141e0006c6a220820012903e005370300200841106a201c290300370300200841086a201429030037030020172903002102201a29030021072018290300210c20192903002124201b2903002125200841c0006a2005360200200841186a2025370300200841206a2024370300200841286a200c370300200841c4006a20012903c007370200200841386a2007370300200841306a2002370300200841cc006a201d290300370200200841d4006a201e290300370200200841dc006a201f2802003602002001201141016a22113602900920162006470d000b0b2001280288092115200129028c0921020b200141e80a6a41206a200141a8096a41206a2802002206360200200141e80a6a41186a200141a8096a41186a2903002207370300200141e80a6a41106a200141a8096a41106a290300370300200141e80a6a41086a200141a8096a41086a290300370300200120012903a8093703e80a200641246c41046a2205417f4c0d080240024020050d00410121030c010b200510382203450d080b2007a7211a20014100360290092001200536028c09200120033602880920014188096a200610ac0202402006450d00201a200641246c6a21162001280290092103201a21060340200628020021050240200128028c0920036b41034b0d0020014188096a20034104107720012802900921030b200128028809220920036a20053600002001200341046a220336029009412010382205450d09200541186a22082006411c6a290000370000200541106a2211200641146a290000370000200541086a22122006410c6a2900003700002005200641046a2900003700000240200128028c0920036b411f4b0d0020014188096a200341201077200128028809210920012802900921030b200920036a22092005290000370000200941186a2008290000370000200941106a2011290000370000200941086a20122900003700002001200341206a22033602900920051039200641246a22062016470d000b0b200141c0076a41086a20014188096a41086a28020036020020012001290388093703c007200141e0056a41cccbc60010bf0520012802e005220620012802e805200141c0076a10d606024020012802e405450d00200610390b024020012802c407450d0020012802c00710390b41cccbc600200141e80a6a200141f40a6a10d108024020012802ec0a450d0020012802e80a10390b0240200141f80a6a28020041ffffff3f71450d0020012802f40a10390b200141840b6a2802002206450d01200641246c450d01201a10390c010b024020012802ac09450d0020012802a80910390b0240200141b8096a28020041ffffff3f71450d00201410390b41002115024020012802c4092206450d00200641246c450d0020012802c00910390b0b024020012802d40541ffffff3f71450d0020012802d00510390b0240024020150d002001280290052109024020014198056a2802002206450d00200641d0006c2105200941c4006a21060340024020062802002203450d00200341306c450d002006417c6a28020010390b200641d0006a2106200541b07f6a22050d000b0b20014194056a2802002206450d01200641d0006c450d01200910390c010b4100210302402013410a6e417f732002422088a722096a220520094b0d0020134101201341014b1b2206418094ebdc036e2006418094ebdc03704100476a22034101200341014b1b220320064b0d032006200541036c220520062005491b20036ead428094ebdc037e200620036ead8042ffffffff0f834280bbb0217e428094ebdc0380a721030b200941ffffffff03712009470d0720094102742205417f4c0d070240024020050d00410421060c010b200510382206450d070b41002108200141003602e805200120063602e0052001200541027622053602e405024002400240200520094f0d00200141e0056a4100200910ab0120012802e005210620012802e80521080c010b2009450d010b200620084102746a210620092105034020062003360200200641046a21062005417f6a22050d000b200820096a210820012802e00521060b200120083602e805201520092006200820012802880510ac081a410410382205450d062005200b360000200141800b6a41002900d4cb46370300200141f80a6a41002900cccb46370300200141f00a6a4284808080c000370300200120053602ec0a200141043a00e80a200141e80a6a10c903024020012802e40541ffffffff0371450d00200610390b02402009450d00200941e0006c2105201541d4006a210603400240200641706a2802002203450d00200341306c450d002006416c6a28020010390b0240200628020041ffffff3f71450d002006417c6a28020010390b200641e0006a2106200541a07f6a22050d000b0b02402002a72206450d00200641e0006c450d00201510390b2001280290052109024020014198056a2802002206450d00200641d0006c2105200941c4006a21060340024020062802002203450d00200341306c450d002006417c6a28020010390b200641d0006a2106200541b07f6a22050d000b0b20014194056a2802002206450d00200641d0006c450d00200910390b20150d0041fcd8c000410c10d10141e8d8c000410f10d1010b024020012802ec0441ffffff3f71450d0020012802e80410390b200141e80a6a41186a4200370300200141e80a6a41106a4200370300200141e80a6a41086a22064200370300200142003703e80a200141a8096a41b69fc500410710cb012006200141a8096a41086a290000370300200120012900a8093703e80a200141c0076a41f4c9c800410a10cb01200441086a200141c0076a41086a290000370000200420012900c007370000200141e0056a200141e80a6a10bf0220012902e405420020012802e00522061b2202a721184100210520064100280284ee4d20061b21080240024002402002422088a722124105742211450d00034020014188096a41186a200820056a220641186a220329000037030020014188096a41106a200641106a220929000037030020014188096a41086a200641086a220b2900003703002001200629000037038809200141e0056a41186a2003290000370300200141e0056a41106a2009290000370300200141e0056a41086a200b290000370300200120062900003703e005200141a8096a200141e0056a10fb0620012802c80922030d022011200541206a2205470d000b0b4100210b41002802e8c84821090240201841ffffff3f71450d00200810390b410021150c010b200141e0056a41206a221920012903a809370300200141e0056a41186a220920014188096a41186a290300370300200141e0056a41106a220b20014188096a41106a290300370300200141e0056a41086a221120014188096a41086a290300370300200141e0056a41286a2216200141a8096a41086a290300370300200141e0056a41306a2215200141a8096a41106a290300370300200141e0056a41386a221a200141a8096a41186a290300370300200141c8046a41086a2217200141d4096a28020036020020012001290388093703e005200120012902cc093703c804200141e80a6a41386a221b201a290300370300200141e80a6a41306a20152903002202370300200141e80a6a41286a20162903002207370300200141e80a6a41206a2019290300220c370300200141e80a6a41186a20092903002224370300200141e80a6a41106a200b2903002225370300200141e80a6a41086a20112903002226370300200120012903e00522273703e80a200141c0076a41306a22092002370300200141c0076a41286a220b2007370300200141c0076a41206a2211200c370300200141c0076a41186a22162024370300200141c0076a41106a22152025370300200141c0076a41086a221a2026370300200141c0076a41386a221c201b290300370300200120273703c00720014188056a41086a221b2017280200360200200120012903c8043703880541d00010382217450d05201720012903c007370300201720033602402017200129038805370244201741386a201c290300370300201741306a2009290300370300201741286a200b290300370300201741206a2011290300370300201741186a2016290300370300201741106a2015290300370300201741086a201a290300370300201741cc006a201b28020036020020014281808080103702d405200120173602d00502400240201241057441606a2005470d00410121150c010b200641206a2103200820124105746a221a41606a211c200141cc096a211b410121150340200321060240034020014188096a41186a220b200641186a290000220237030020014188096a41106a2211200641106a290000220737030020014188096a41086a2212200641086a290000220c37030020012006290000222437038809200141e0056a41186a22052002370300200141e0056a41106a22032007370300200141e0056a41086a2209200c370300200120243703e005200141a8096a200141e0056a10fb0620012802c80922160d01201a200641206a2206470d000c030b0b201920012903a809370300201941186a200141a8096a41186a290300370300201941106a200141a8096a41106a290300370300201941086a200141a8096a41086a2903003703002005200b2903003703002003201129030037030020092012290300370300200141c8046a41086a220b201b41086a28020036020020012001290388093703e0052001201b2902003703c804200141e80a6a41386a2211200141e0056a41386a290300370300200141e80a6a41306a2212200141e0056a41306a290300370300200141e80a6a41286a2214200141e0056a41286a290300370300200141e80a6a41206a221d200141e0056a41206a290300370300200141e80a6a41186a221e2005290300370300200141e80a6a41106a22052003290300370300200141e80a6a41086a22032009290300370300200120012903e0053703e80a200141c0076a41386a22092011290300370300200141c0076a41306a22112012290300370300200141c0076a41286a22122014290300370300200141c0076a41206a2214201d290300370300200141c0076a41186a221d201e290300370300200141c0076a41106a221e2005290300370300200141c0076a41086a22132003290300370300200120012903e80a3703c007200141b0056a41086a221f200b280200360200200120012903c8043703b0050240201520012802d405470d00200141d0056a2015410110930320012802d00521170b200641206a21032017201541d0006c6a220520012903c007370300201e2903002102201d29030021072014290300210c2012290300212420112903002125200929030021262013290300212720052016360240200541086a2027370300200520012903b005370244200541cc006a201f280200360200200541386a2026370300200541306a2025370300200541286a2024370300200541206a200c370300200541186a2007370300200541106a20023703002001201541016a22153602d805201c2006470d000b0b0240201841ffffff3f71450d00200810390b20012802d405210b20012802d00521090b201541d0006c4104722206417f4c0d05200610382205450d04200e4100200f1b2108200141003602e805200120063602e405200120053602e005200141e0056a201510ac020240201541d0006c2205450d002009210603402006200141e0056a108e03200641d0006a2106200541b07f6a22050d000b0b20013502e805210220012802e0052105200120083602c007411710382206450d04200641f3003a0000200641ecde003b0011200642e9e6d1fba6aedab1e100370009200642e5e6cdcbf6cddbafe800370001200620012802c007360013200142173702ec0a200120063602e80a2006ad4280808080f0028420024220862005ad84102e024020012802ec0a450d00200610390b024020012802e405450d0020012802e00510390b02402015450d00201541d0006c2105200941c4006a21060340024020062802002203450d00200341306c450d002006417c6a28020010390b200641d0006a2106200541b07f6a22050d000b0b0240200b450d00200b41d0006c450d00200910390b200120083602880920082106024041002802d0a94e4105490d00200141800b6a4200370300200141e80a6a41106a22054200370300200141e80a6a41086a22064200370300200142003703e80a200141a8096a41c7e5c000410610cb012006200141a8096a41086a290000370300200120012900a8093703e80a200141c0076a419081c400410610cb01200441086a200141c0076a41086a290000370000200420012900c007370000200141d8036a200141e80a6a412010ce03200141ec056a4102360200200141103602e405200120012802dc03410020012802d8031b3602c007200120014188096a3602e8052001200141c0076a3602e00541002802cca94e210341002802c8a94e210941002802d4a94e210b200542033703002001419c0b6a41d6c5c800ad4280808080a00b84370200200141900b6a41c8c5c800ad4280808080e00184370300200141e80a6a41206a420237030020064110360200200141840b6a200141e0056a360200200141b8b5ca003602f40a20014281808080d0cd023702a40b200141003602980b200141d0b5ca003602ec0a200141053602e80a200941b8c0cd00200b41024622061b200141e80a6a200341c0a4c00020061b28021011030020012802880921060b200141c8046a41f0c8c800410710cb01200a41086a4200370200200a4200370200200a41bce3c900410910cb01200141e80a6a200141c8046a10e806024020012903e80a22024202510d0020012903f00a2107200141e80a6a200141e80a6a41106a280200220341016a108408200141d0036a20012802e80a220920012802f00a10ce0320012802d403210b20012802d0032105024020012802ec0a450d00200910390b20054101470d00200b200641016a470d0020024201520d00200141800b6a22094200370300200141e80a6a41106a220b4200370300200141e80a6a41086a22064200370300200142003703e80a200141a8096a41d1e5c000410910cb012006200141a8096a41086a2211290000370300200120012900a8093703e80a200141c0076a41cab8c300410310cb01200441086a2212200141c0076a41086a2216290000370000200420012900c007370000200141c0036a200141e80a6a10ee0420014198036a20012903c803420020012802c0031b220242e80780420042e807420010d30b200141e80a6a200310d208200141a8036a20012802e80a221a20012802f00a10c10741002105200129039803220c200242e807827c2202427f2002427f52410020014198036a41086a2903002002200c54ad7c501b1b20077d2124200141a8036a41106a290300420020012802a80322151b210720012903b003420020151b2125024020012802ec0a450d00201a10390b20094200370300200b420037030020064200370300200142003703e80a200141a8096a41e1e5c000410810cb0120062011290000370300200120012900a8093703e80a200141c0076a41e4b4cb00410d10cb0120122016290000370000200420012900c00737000020014180036a200141e80a6a412010c107200141f0026a200129038803420020012802800322061b220c20014180036a41106a290300420020061b2202428094ebdc03420010d20b200141e0026a200c2002428094ebdc03420010da0b200220072025200c56200720025620072002511b22061b2107200c202520061b21272024428086ebc7f5002024428086ebc7f500541b420588428094ebdc037e4298ac9fd603802128200141e0026a41086a29030021254198e3c000210620012903e002212620012903f0022124024002400340200141d0026a2026202520063502002202420010d30b202720012903d002220c417f202420027e2202428094ebdc0380a7200242ffffffffffbfb2cd3b561b2002428094ebdc03824280cab5ee01566aad7c2202542007200141d0026a41086a2903002002200c54ad7c22025420072002511b0d01200641086a2106200541016a22054125470d000b200141c0026a2026202542e8aafa0b420010d30b200141c8026a29030020012903c0022207202442e8aafa0b7e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202200754ad7c21070c010b02402005417f6a220920054d0d00200141d0016a2026202542c0f0f50b420010d30b200141d8016a29030020012903d00122072024422880a7202442c0f0f50b7e428094ebdc03824280cab5ee01566aad7c2202200754ad7c21070c010b02400240200941244b0d00200141b0026a202620252009410374220b4198e3c0006a2802002209ad2202420010d30b20014190026a202720012903b002220c417f202420027e2202428094ebdc0380a7200242ffffffffffbfb2cd3b561b2002428094ebdc03824280cab5ee01566aad7c220220272002562007200141b0026a41086a2903002002200c54ad7c220c562007200c511b22051b22292002202720051b22027d22272007200c20051b200c200720051b7d2029200254ad7d220c41002006280200221120096b2209200920114b1b22094101200941014b1bad2202420010da0b200141e0016a20014190026a41086a2903004200200641046a2802002209200b419ce3c0006a2802002206200920064b220b1b20062009200b1b6bad2207420010d30b200141f0016a20012903900242002007420010d30b20014180026a2027200c2002420010d20b200141a0026a202620252006ad2227420010d30b427f427f200141f0016a41086a290300220c20012903e0017c222920012903e8014200522029200c5472220b1b2229427f20012903f001200b1b220c20012903800220077e2002807c2202200c54220bad7c2207200b20072029542002200c5a1b220b1b2129427f2002200b1b210c200141a0026a41086a29030020012903a002222a417f202420277e2202428094ebdc0380a7200242ffffffffffbfb2cd3b561b2002428094ebdc03824280cab5ee01566aad7c2207202a54ad7c21022005200920064d460d01427f200220297c2007200c7c220c2007542206ad7c22072006200720025420072002511b22061b2107427f200c20061b21020c020b20094125419ccac800103c000b4200200220297d2007200c54ad7d22272007200c7d220c200756202720025620272002511b22061b21074200200c20061b21020b200141c0016a20022007428094ebdc03420010d20b200141b0016a20022007428094ebdc03420010da0b200141a0016a20012903b001200141b0016a41086a2903002028420010d30b20014190016a202620254280c2d72f420010d30b20014180016a20012903900122072024420a80a720244280c2d72f7e428094ebdc03824280cab5ee01566aad7c220220014190016a41086a2903002002200754ad7c2207428094ebdc03420010d20b200141f0006a20022007428094ebdc03420010da0b200141e0006a2001290370200141f0006a41086a2903002028420010d30b200141f40a6a2003360200200141e80a6a41086a41003a0000200141e80a6a41106a20012903a0012207202820012903c0017e2202428094ebdc0380a72002428094ebdc03824280cab5ee01566aad7c2202370300200141800b6a200141a0016a41086a2903002002200754ad7c220c370300200141900b6a4200200141e0006a41086a2903002001290360222420282001290380017e2207428094ebdc0380a72007428094ebdc03824280cab5ee01566aad7c2207202454ad7c2224200c7d2007200254ad7d2225200720027d2226200756202520245620252024511b22061b2207370300200141880b6a4200202620061b2224370300200141033a00e80a200141e80a6a10c903200141e0056a200310d30820012802e805210520012802e00521062001200c3703f00a200120023703e80a20062005200141e80a6a411010e901024020012802e405450d00200610390b200141d0006a2024200710d408200129035021022001200141d0006a41086a29030022073703f00a200120023703e80a024020022007844200520d002001200141e80a6a3602e005200141e0056a10e4040c010b200120073703f00a200120023703e80a2001200141e80a6a3602e005200141e0056a10e4040b200141c0096a4200370300200141a8096a41106a4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2205290000370300200120012900e80a3703a809200141e80a6a4188bac500410a10cb01200d41086a2005290000370000200d20012900e80a370000200141203602b4052001200141a8096a3602b00520014188056a200141a8096a412010e4010240024020012802880522120d004100210b0c010b200128028c052116200120014190056a2802003602d405200120123602d005200141c8006a200141d0056a10c1010240024020012802480d00200128024c221520012802d405220941e0016e2206200620154b1bad42e0017e2202422088a70d082002a72206417f4c0d080240024020060d004101210b0c010b20061038220b450d080b4100211720014100360290092001200b360288092001200641e0016e36028c0902402015450d00200141c0076a4104722111200141e80a6a41206a211e200141c0076a4101722113200141dd046a2118200141d6046a2119200141c8046a410772211b200141d9076a211c200141d2076a2114200141cb076a211d4100211a02400340201a41016a211a410021060240034020092006460d01201120066a20012802d00522032d00003a00002001200641016a22053602c0072001200341016a3602d0052005210620054120470d000b201b201d2f00003b0000201920142f01003b01002018201c2f00003b0000201b41026a201d41026a2d00003a0000201941026a201441026a2d00003a0000201841026a201c41026a2d00003a00002001200920056b3602d405200120112f01003b01c8042001201141026a2d00003a00ca0420012800c707210620012801ce07210520012800d5072103200120012902dc073703e004200120033600d904200120053601d204200120063600cb04200141c0076a200141d0056a10f20220012d00c0074101460d02201e201341c00110d40b1a200141e80a6a41186a200141c8046a41186a290300370300200141e80a6a41106a200141c8046a41106a290300370300200141e80a6a41086a200141c8046a41086a290300370300200120012903c8043703e80a200141e0056a200141e80a6a41e00110d40b1a02402017200128028c09470d0020014188096a2017410110d508200128028809210b20012802900921170b200b201741e0016c6a200141e0056a41e00110d40b1a2001201741016a221736029009201a2015460d0320012802d40521090c010b0b200141003602d4050b0240200128028c092206450d00200641e0016c450d00200b10390b0c010b200129028c092102200b0d010b200142003702e4054100210b20014100280284ee4d3602e0052001410d3602c4072001200141b0056a3602c0072001200141e0056a36028809200141fc0a6a4101360200200142013702ec0a200141949fc5003602e80a2001200141c0076a3602f80a20014188096a41b4dfc400200141e80a6a103b1a20012802e00520012802e80510d10120012802e405450d0020012802e00510390b2016450d00201210390b20024200200b1b2225422088a7221941ffffff3f712019470d0502400240201941057422060d00410121030c010b200610382203450d050b200b4100280284ee4d200b1b211441002109200141003602d805200120033602d0052001200641057622063602d405024002400240200620194f0d00200141d0056a41002019109e0220012802d005210320012802d80521090c010b2019450d010b201941e0016c210b200320094105746a210620142105034020062005290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200941016a2109200641206a2106200541e0016a2105200b41a07e6a220b0d000b0b200120093602d805200141c0096a4200370300200141b8096a4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2205290000370300200120012900e80a3703a809200141e80a6a41f4c9c800410a10cb01200d41086a2005290000370000200d20012900e80a37000020094105744104722206417f4c0d05200610382205450d04201041ff01714102472111200141003602f00a200120063602ec0a200120053602e80a200141e80a6a200910ac020240024020090d0020012802e80a210b20012802f00a21060c010b2009410574210920012802f00a21060340024020012802ec0a20066b411f4b0d00200141e80a6a20064120107720012802f00a21060b20012802e80a220b20066a22052003290000370000200541086a200341086a290000370000200541106a200341106a290000370000200541186a200341186a2900003700002001200641206a22063602f00a200341206a2103200941606a22090d000b0b20102011712110200141a8096a4120200b200610e901024020012802ec0a450d00200b10390b02402010450d00200141c0096a4200370300200141b8096a4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2205290000370300200120012900e80a3703a809200141e80a6a41e492c600411210cb01200d41086a2005290000370000200d20012900e80a370000200141e80a6a200141a8096a10c00220012802e80a2206450d00200141a8096a412010e00120012902ec0a42ffffffff0383500d00200610390b200141a8096a41186a4200370300200141a8096a41106a4200370300200141a8096a41086a22054200370300200142003703a809200141e80a6a41b69fc500410710cb012005200141e80a6a41086a2203290000370300200120012900e80a3703a809200141e80a6a41d091c600410c10cb01200d41086a2003290000370000200d20012900e80a3700002001200841016a221e3602e80a200141a8096a4120200141e80a6a410410e9012001201e36028809201e2106024041002802d0a94e4105490d00200141c8046a41186a4200370300200141c8046a41106a4200370300200141c8046a41086a22064200370300200142003703c804200141a8096a41c7e5c000410610cb0120062005290000370300200120012900a8093703c804200141c0076a419081c400410610cb01200a41086a200141c0076a41086a290000370000200a20012900c007370000200141c0006a200141c8046a412010ce03200141e0056a410c6a4102360200200141103602e40520012001280244410020012802401b3602c007200120014188096a3602e8052001200141c0076a3602e00541002802cca94e210641002802c8a94e210541002802d4a94e2109200141e80a6a41106a42033703002001419c0b6a41d6c5c800ad4280808080a00b84370200200141900b6a41c8c5c800ad4280808080e00184370300200141e80a6a41206a420237030020034110360200200141840b6a200141e0056a360200200141f4b8ca003602f40a2001428180808090cd023702a40b200141003602980b200141d0b5ca003602ec0a200141053602e80a200541b8c0cd00200941024622031b200141e80a6a200641c0a4c00020031b28021011030020012802880921060b200141e80a6a41f0c8c800410710cb01200441086a420037000020044200370000200441bce3c900410910cb01200141e0056a200141e80a6a10e806200141e80a6a4100200141e0056a41106a28020041016a20012903e0054202511b108408200141386a20012802e80a220920012802f00a10ce03200128023c210320012802382105024020012802ec0a450d00200910390b024020054101470d00024020032006460d00200320064f0d01418cb9ca00413010d1010b200610d6080b200141800b6a22054200370300200141f80a6a22064200370300200141e80a6a41086a22034200370300200142003703e80a200141c0076a41b69fc500410710cb012003200141c0076a41086a2209290000370300200120012900c0073703e80a200141c0076a41ffb1c000410b10cb0120052009290000370300200620012900c007370300200141e0056a200141e80a6a412010de03200841026a211d0240024020012802e0054101470d0020013502e40521020c010b201dad21020b200141013602e00520012002200841036aad422086843702e405200141e80a6a41186a4200370300200141e80a6a41106a22094200370300200141e80a6a41086a22054200370300200142003703e80a200141c0076a41b69fc500410710cb012005200141c0076a41086a2203290000370300200120012900c0073703e80a200141c0076a41ffb1c000410b10cb01200641086a2003290000370000200620012900c007370000200141e80a6a4120200141e0056a41047210d7082001201d36028805201d2106024041002802d0a94e4105490d00200141c8046a41186a4200370300200141c8046a41106a4200370300200141c8046a41086a22064200370300200142003703c804200141a8096a41c7e5c000410610cb012006200141a8096a41086a290000370300200120012900a8093703c804200141c0076a419081c400410610cb01200a41086a2003290000370000200a20012900c007370000200141306a200141c8046a412010ce03200141ec056a4102360200200141103602e40520012001280234410020012802301b3602c007200120014188056a3602e8052001200141c0076a3602e00541002802cca94e210641002802c8a94e210341002802d4a94e210b200942033703002001419c0b6a41d6c5c800ad4280808080a00b84370200200141900b6a41c8c5c800ad4280808080e00184370300200141e80a6a41206a420237030020054110360200200141840b6a200141e0056a360200200141fcb5ca003602f40a20014281808080c0cc023702a40b200141003602980b200141d0b5ca003602ec0a200141053602e80a200341b8c0cd00200b41024622051b200141e80a6a200641c0a4c00020051b28021011030020012802880521060b200141e80a6a41f0c8c800410710cb01200441086a2205420037000020044200370000200441b0ecc900411510cb01200120063602e005200141e80a6a4120200141e0056a410410e9012001280288052106200141e80a6a41f0c8c800410710cb01200542003700002004420037000020044180e3c900410a10cb01200141286a200141e80a6a412010ce03024020012802284101470d00200141e80a6a200128022c108408200141186a20012802e80a220920012802f00a10ce03200128021c210320012802182105024020012802ec0a450d00200910390b024020050d004188a0ca00413610d101410021030b200141e80a6a41f0c8c800410710cb01200441086a2209420037000020044200370000200441d8e7c900410810cb010240024002404100200141e80a6a10d8082205200541ff01714104461b41ff01710e0401000502050b200141e80a6a41f0c8c800410710cb012009420037000020044200370000200441d8e7c900410810cb01200141e80a6a412010e0010c010b4100200620036b2205200520064b1b4106490d030b20014188096a200610d9080c030b024041002802d0a94e4104490d00200141e0046a4200370300200141c8046a41106a4200370300200141c8046a41086a22054200370300200142003703c804200141a8096a41c7e5c000410610cb012005200141a8096a41086a290000370300200120012900a8093703c804200141c0076a419081c400410610cb01200a41086a200141c0076a41086a290000370000200a20012900c007370000200141206a200141c8046a412010ce03200141103602e40520012001280224410020012802201b3602c0072001200141c0076a3602e00541002802cca94e210541002802c8a94e210341002802d4a94e2109200141e80a6a41106a42023703002001419c0b6a41d6c5c800ad4280808080a00b84370200200141900b6a41c8c5c800ad4280808080e00184370300200141e80a6a41206a4201370300200141e80a6a41086a4110360200200141840b6a200141e0056a36020020014194b6ca003602f40a20014281808080f08c023702a40b200141003602980b200141d0b5ca003602ec0a200141043602e80a200341b8c0cd00200941024622091b200141e80a6a200541c0a4c00020091b2802101103000b20014188096a200610d9080c020b41f0f0c20041194188f2c2001035000b20014100360288090b0240024020012802880922130d004100211b20014100360288050c010b200141e80a6a41f0c8c800410710cb01200441086a42003700002004420037000020044180e3c900410a10cb01200141106a200141e80a6a412010ce0320014188096a41086a2802002206ad42d0007e2202422088a70d032002a72205417f4c0d032001280210210320012802142109200128028c09210e4108211b02402005450d0020051038221b450d030b4100210b20014190056a41003602002001201b360288052001200541d0006e220536028c05024002400240200520064f0d0020014188056a41002006109303200128028805211b200128029005210b0c010b2006450d010b2009410020031b211820064105742108201b200b41d0006c6a210641002802e8c848211c200141e80a6a41206a2103201321050340200141c8046a41186a200541186a2209290000370300200141c8046a41106a200541106a2211290000370300200141c8046a41086a200541086a2204290000370300200120052900003703c804200141c0076a41186a22122009290000370300200141c0076a41106a22162011290000370300200141c0076a41086a22112004290000370300200120052900003703c007200141a8096a2018200141c0076a10da08200141e0056a20012802a809221720012802b00910db080240024020012802800622090d0020034200370300200341186a4200370300200341106a4200370300200341086a420037030041002104201c2109410021150c010b200320012903e005370300200341186a200141e0056a41186a290300370300200341106a200141e0056a41106a290300370300200341086a200141e0056a41086a290300370300200128028c06211a200128028806211520012802840621040b024020012802ac09450d00201710390b200541206a2105200141e80a6a41086a20112903002202370300200141e80a6a41106a20162903002207370300200141e80a6a41186a2012290300220c370300200120012903c00722243703e80a200641386a200141e80a6a41386a290300370300200641306a200141e80a6a41306a290300370300200641286a200141e80a6a41286a290300370300200641206a2003290300370300200641186a200c370300200641106a2007370300200641086a200237030020062024370300200641cc006a201a360200200641c8006a2015360200200641c4006a2004360200200641c0006a2009360200200641d0006a2106200b41016a210b200841606a22080d000b0b2001200b36029005200e41ffffff3f71450d00201310390b024002400240201b0d002001410036028809200141e0056a4100201d417f6a22062006201d4b1b10a806200141e80a6a20012802e005220620012802e80510800720012802e80a4101470d01200141b0056a41026a200141f90a6a2d00003a0000200141cc056a41026a200141800b6a2d00003a0000200141c8056a41026a200141870b6a2d00003a0000200120012f00f70a3b01b005200120012f01fe0a3b01cc05200120012f00850b3b01c8052001200141f00a6a2f01003b01c8042001200141f20a6a2d00003a00ca04200141f30a6a280000210520012802ec0a210320012801fa0a210920012800810b210b2001418c0b6a2802002108200141880b6a2802002111024020012802e405450d00200610390b200141e0056a201d10a80620012802e805210420012802e0052112410410382206450d04200142043702ec0a200120063602e80a412010382206450d0420062003360000200620012f01c8043b000420062005360007200620012f01b0053b000b2006200936000e200620012f01cc053b00122006200b360015200620012f01c8053b0019200641066a20012d00ca043a00002006410d6a200141b0056a41026a2d00003a0000200641146a200141cc056a41026a2d00003a00002006411b6a200141c8056a41026a2d00003a00002006201136001c200141e80a6a41004120107720012802e80a220320012802f00a22096a22052006290000370000200541086a200641086a290000370000200541106a200641106a290000370000200541186a200641186a2900003700002001200941206a22053602f00a20012802ec0a2109200610390240200920056b41034b0d00200141e80a6a20054104107720012802e80a210320012802f00a21050b200320056a20083600002001200541046a22063602f00a2012200420012802e80a2205200610e901024020012802ec0a450d00200510390b20012802e405450d0220012802e00510390c020b20014190056a280200220b41ffffff3f71200b470d04200b4105742206417f4c0d040240024020060d00410121050c010b200610382205450d040b201b200b41d0006c6a21094100210320014190096a4100360200200120053602880920012006410576220636028c0902402006200b4f0d0020014188096a4100200b109e02200128029009210320012802880921050b0240201b2009460d00200b41d0006c2109200520034105746a2106201b2105034020062005290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200341016a2103200641206a2106200541d0006a2105200941b07f6a22090d000b0b200120033602900920012903880521022001200b3602e805200120023703e005200141e80a6a200141e0056a108307024020012802e80a4101470d0020012802f00a210620012802ec0a2105418e87c300413710d1012005200610d1010c020b200141e0056a200141f00a6a41800110d40b1a200141a8096a201d10a80620012802b009210920012802a8092108410410382206450d03200142043702c407200120063602c007412010382206450d032006200141c0066a2205290000370000200641186a2211200541186a290000370000200641106a2204200541106a290000370000200641086a2212200541086a290000370000200141c0076a41004120107720012802c007220320012802c80722166a22052006290000370000200541086a2012290000370000200541106a2004290000370000200541186a20112900003700002001201641206a22053602c80720012802c4072111200610390240201120056b41034b0d00200141c0076a20054104107720012802c007210320012802c80721050b200320056a200b3600002001200541046a22063602c8072008200920012802c0072205200610e901024020012802c407450d00200510390b024020012802ac09450d0020012802a80910390b200141e0056a10ff060c010b20012802e405450d00200610390b20014190096a3502002102200135028c092107200128028809210b0240201b0d002001280288052209450d00024020014190056a2802002206450d00200641d0006c2105200941c4006a21060340024020062802002203450d00200341306c450d002006417c6a28020010390b200641d0006a2106200541b07f6a22050d000b0b200128028c052206450d00200641d0006c450d00200910390b02400240200b0d00200141e0046a4200370300200141d8046a4200370300200141c8046a41086a22064200370300200142003703c804200141a8096a41b69fc500410710cb012006200141a8096a41086a290000370300200120012900a8093703c804200141c0076a41f4c9c800410a10cb01200a41086a200141c0076a41086a290000370000200a20012900c007370000200141e80a6a200141c8046a10bf0220012902ec0a420020012802e80a22061b210220064100280284ee4d20061b21180c010b20024220862007842102200b21180b2002422088a7221141057422034105752205ad42e0017e2207422088a70d022007a72206417f4c0d020240024020060d00410121080c010b200610382208450d020b201820036a210341002109200141003602900520012008360288052001200641e0016e220636028c050240200620054f0d0020014188056a4100200510d50820012802900521090b200b4100472116024020032018460d002014201941e0016c6a210a2011410574210b200128028805200941e0016c6a2108200141e80a6a41206a211a200141a8096a41a0016a210e200141a8096a4180016a2113200141a8096a41e0006a211d200141a8096a41c0006a211c200141a8096a41206a211b200141e0056a4101722117201421032018210603402003210520014188096a41186a2211200641186a29000037030020014188096a41106a2204200641106a29000037030020014188096a41086a2212200641086a2900003703002001200629000037038809200141c8046a20014188096a10d604200141e0056a20012802c804221520012802d00410d704024020012d00e00522034101470d00200141c0076a201741c00110d40b1a0b024020012802cc04450d00201510390b0240024020034101460d00200141a8096a410041c00110d60b1a0c010b200141a8096a200141c0076a41c00110d40b1a0b02400240201641ff0171450d00200521030c010b4100211602402005200a470d00200521030c010b200541e0016a21030240200541206a200141a8096a412010d70b0d00200541c0006a201b412010d70b0d00200541e0006a201c412010d70b0d0020054180016a201d412010d70b0d00200541a0016a2013412010d70b0d00200541c0016a200e412010d70b450d010b410121160b200641206a2106200141e80a6a41186a2011290300370300200141e80a6a41106a2004290300370300200141e80a6a41086a201229030037030020012001290388093703e80a201a200141a8096a41c00110d40b1a200941016a21092008200141e80a6a41e00110d40b41e0016a2108200b41606a220b0d000b0b0240200242ffffff3f83500d00201810390b2009ad42e0017e2202422088a70d022002a7221a417f4c0d02200128028c052118200128028805210a02400240201a0d00410121174100211b0c010b201a10382217450d02201a41e0016e211b201a41e001490d00200141a80c6a2103200141880c6a210b200141e80b6a2108200141c80b6a2111200141a80b6a2104200141880b6a211241002105200a2106201b21150340201a2005460d012015450d052012200629002037000020042006290040370000200141e80a6a41186a200641186a290000370300200141e80a6a41106a200641106a290000370300200141e80a6a41086a200641086a290000370300201241086a200641286a290000370000201241106a200641306a290000370000201241186a200641386a290000370000200441086a200641c8006a290000370000200441106a200641d0006a290000370000200441186a200641d8006a290000370000200120062900003703e80a201141186a200641f8006a290000370000201141106a200641f0006a290000370000201141086a200641e8006a290000370000201120062900603700002008200629008001370000200841086a20064188016a290000370000200841106a20064190016a290000370000200841186a20064198016a290000370000200b20062900a001370000200b41086a200641a8016a290000370000200b41106a200641b0016a290000370000200b41186a200641b8016a290000370000200341186a200641d8016a290000370000200341106a200641d0016a290000370000200341086a200641c8016a290000370000200320062900c001370000201720056a200141e80a6a41e00110d40b1a200541e0016a2105200641e0016a21062015417f6a22150d000b0b200141c0096a4200370300200141b8096a4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2205290000370300200120012900e80a3703a809200141e80a6a4188bac500410a10cb01200d41086a2005290000370000200d20012900e80a370000200941e0016c4104722206417f4c0d02200610382205450d01200141003602f00a200120063602ec0a200120053602e80a200141e80a6a200910ac0202402009450d002017200941e0016c6a210b201721060340024020012802ec0a20012802f00a22036b411f4b0d00200141e80a6a20034120107720012802f00a21030b20012802e80a20036a22052006290000370000200541086a200641086a290000370000200541106a200641106a290000370000200541186a200641186a2900003700002001200341206a3602f00a200641206a200141e80a6a10e202200641e0016a2206200b470d000b0b200141a8096a412020012802e80a220620012802f00a10e901024020012802ec0a450d00200610390b0240201a41e001490d00201b41e0016c450d00201710390b200141c0096a4200370300200141b8096a4200370300200141a8096a41086a22064200370300200142003703a809200141e80a6a41b69fc500410710cb012006200141e80a6a41086a2205290000370300200120012900e80a3703a809200141e80a6a41f491c600410d10cb01200d41086a2005290000370000200d20012900e80a370000200120163a00cf05200141a8096a4120200141cf056a410110e9012001201e3602ec0a200141053a00e80a200141e80a6a10c903201020142019200a200910dc0802402018450d00201841e0016c450d00200a10390b024020012802d40541ffffff3f71450d0020012802d00510390b02402025a72206450d00200641e0016c450d00201410390b200141e80a6a10b80320012903f00a21020b200141e0056a10de044100210520012802e005210b41002103024020012802e8052208450d00200841c4006c21092008410274417c6a41027641016a211141002103200b210602400340024020062d00004101460d00200641046a28020020004f0d020b200641c4006a2106200341016a2103200941bc7f6a22090d000b201121030b20082003490d040b200141003602e805200820036b2104200b200341c4006c22086a21060240034020082005460d01200b20056a2109200541c4006a2211210520092d00004102470d000b200b20116a21060b200b200341c4006c6a21090240034020092006460d0120062d00002105200641c4006a210620054102470d000b0b0240024020040d00410021040c010b02402003450d00200b200b200341c4006c6a200441c4006c10d50b1a0b200120043602e8050b20012802e4052103200141e0046a22064200370300200141d8046a22054200370300200141c8046a41086a22094200370300200142003703c804200141a8096a41e9e5c000410a10cb012009200141a8096a41086a290000370300200120012900a8093703c804200141c0076a41a088c800410610cb012006200141c0076a41086a290000370300200520012900c007370300200441c4006c41046a2206417f4c0d010240024020060d00410121090c010b200610382209450d010b200141003602f00a200120063602ec0a200120093602e80a200141e80a6a200410ac02200b2004200141e80a6a10b402200141c8046a412020012802e80a20012802f00a10e901024020012802ec0a450d0020012802e80a10390b02402003450d00200341c4006c450d00200b10390b200141c8046a41186a22094200370300200141c8046a41106a220b4200370300200141c8046a41086a22034200370300200142003703c804200141a8096a41e9e5c000410a10cb012003200141a8096a41086a2208290000370300200120012900a8093703c804200141c0076a419889c800410c10cb01200541086a2211200141c0076a41086a2204290000370000200520012900c007370000200141003a00cf05200141c8046a4120200141cf056a410110e901200141e0056a10d404412410382206450d00200620012903e00537000020064114360220200641186a200141e0056a41186a2212290300370000200641106a200141e0056a41106a2216290300370000200641086a200141e0056a41086a221529030037000020014281808080103702ec0a200120063602e80a200141e80a6a10e10420094200370300200b420037030020034200370300200142003703c804200141a8096a41b69fc500410710cb0120032008290000370300200120012900a8093703c804200141c0076a41d091c600410c10cb0120112004290000370000200520012900c007370000200141086a200141c8046a412010ce03200128020c21062001280208211a200141e80a6a41186a2012290300370300200141e80a6a41106a2016290300370300200141e80a6a41086a2015290300370300200120012903e0053703e80a20064100201a1b200141e80a6a10e20410cb0820094200370300200b420037030020034200370300200142003703c804200141a8096a41c7e5c000410610cb0120032008290000370300200120012900a8093703c804200141c0076a41b081c400410a10cb0120112004290000370000200520012900c007370000200141e80a6a200141c8046a41201085040240024020012d00e80a4101460d00200141f8056a4200370300200141f0056a4200370300200141e8056a4200370300200142003703e0050c010b200141f8056a200141810b6a290000370300200141f0056a200141f90a6a290000370300200141e8056a200141f10a6a290000370300200120012900e90a3703e0050b200141e80a6a41186a22064200370300200141f80a6a22054200370300200141e80a6a41086a22034200370300200142003703e80a200141c0076a41debec300411810cb012003200141c0076a41086a2209290000370300200120012900c0073703e80a200141c0076a41f6bec300410e10cb0120062009290000370300200520012900c007370300200141c0076a200141e80a6a412010cf080240024020012802c00722030d00200142003702ac094100210920014100280284ee4d22033602a809410021060c010b20012902c4072107200120033602a809200120073702ac092007422088a721062007a721090b024002400240200641d0004b0d00200141e80a6a41186a2208200141e0056a41186a290300370300200141e80a6a41106a2211200141e0056a41106a290300370300200141e80a6a41086a2204200141e0056a41086a290300370300200120012903e0053703e80a024020062009470d00200141a8096a20094101109e0220012802a809210320012802ac09210920012802b00921060b200320064105746a220b20012903e80a370000200b41186a2008290300370000200b41106a2011290300370000200b41086a20042903003700002001200641016a22063602b00920030d01200141e80a6a41186a4200370300200141f80a6a4200370300200141e80a6a41086a22064200370300200142003703e80a200141c0076a41debec300411810cb012006200141c0076a41086a2203290000370300200120012900c0073703e80a200141c0076a41f6bec300410e10cb01200541086a2003290000370000200520012900c007370000200141e80a6a412010e0010c020b20062000417f6a41d10070220b4d0d062003200b4105746a220b20012903e005370000200b41186a200141e0056a41186a290300370000200b41106a200141e0056a41106a290300370000200b41086a200141e0056a41086a2903003700000b200141e80a6a41186a4200370300200141f80a6a4200370300200141e80a6a41086a220b4200370300200142003703e80a200141c0076a41debec300411810cb01200b200141c0076a41086a2208290000370300200120012900c0073703e80a200141c0076a41f6bec300410e10cb01200541086a2008290000370000200520012900c00737000020064105744104722205417f4c0d0220051038220b450d01200141003602c807200120053602c4072001200b3602c007200141c0076a200610ac0202402006450d00200641057421052003210603402006200141c0076a10b502200641206a2106200541606a22050d000b0b200141e80a6a412020012802c007220620012802c80710e901024020012802c407450d00200610390b200941ffffff3f71450d00200310390b200141f0156a2400427f20024298cbe40d7c220720072002541b0f0b1032000b1034000b201b201b4198b4ca00103c000b2003200841908cc700104b000b200b20064184bfc300103c000be60301067f230041d0006b22022400200241086a41f1d5c400410d10cb01200241186a41fed5c400410d10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bb60201037f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410c7641e001723a000c20022001410676413f71418001723a000d410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d2002200141067641c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b0240200041046a280200200041086a220328020022046b20014f0d002000200420011077200328020021040b200028020020046a2002410c6a200110d40b1a2003200420016a360200200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41b4dfc400200241086a103b2101200241206a240020010b8d0708037f047e017f027e017f027e017f077e230041e0006b2201240020014200370328200142003703202001200041186a29030037033820012000290310370330200041386a2000290300200041086a290300200141306a200141206a108d080240200041286a28020041306c2202450d002000280220210303402003200341206a290300200341286a290300200141306a200141206a108d08200341306a2103200241506a22020d000b0b200141206a41086a2903002104200129032021050240024002400240024020012903302206200141306a41086a290300220784500d00200041346a28020022020d010b200120053703402001200437034820052004844200520d012001200141c0006a36025c200141dc006a10e4040c030b200028022c2103200141106a200520062005200654200420075420042007511b22081b22092004200720081b220a2002ad420010da0b20024105742102200141c0006a41086a210b200141106a41086a290300210c2001290310210d200141d0006a210e2009210f200a2110034020012003200d200f200f200d562010200c562010200c511b22081b2207200c201020081b220610e206201020067d2111200f200754ad211202400240200720012903002210582006200141086a290300221358200620135122081b0d00200e200620137d2007201054ad7d370300200142013703402001200720107d3703482001200b36025c200141dc006a10e4040c010b200e201320067d2010200754ad7d22143703002001201020077d221537034820012010200756201320065620081bad4201863703402010200758201320065820081b0d002015201410e3040b201120127d2110200f20077d210f200341206a2103200241606a2202450d020c000b0b20012004370348200120053703402001200141c0006a36025c200141dc006a10e4040c010b2001427f2004200a7d2005200954ad7d220720107c200520097d2206200f7c220c2006542203ad7c22132003201320075420132007511b22031b22133703482001427f200c20031b220c37034002402006200f842007201084844200520d002001200141c0006a36025c200141dc006a10e4040c010b200120133703482001200c3703402001200141c0006a36025c200141dc006a10e4040b0240200041246a2802002203450d00200341306c450d00200028022010390b0240200041306a28020041ffffff3f71450d00200028022c10390b200141e0006a24000baa2c06057f087e017f097e037f067e230041d00d6b22052400200541b8016a2000108e08200541c8026a20052802b801220620052802c001108504024020052d00c80222074101470d00200541386a200541e1026a290000370300200541306a200541d9026a290000370300200541286a200541d1026a290000370300200520052900c9023703200b024020052802bc01450d00200610390b024020074101470d00200541186a200541206a41186a290300370300200541106a200541206a41106a290300370300200541086a200541206a41086a2903003703002005200529032037030020054198016a2005108f08200541c8026a200528029801220620052802a001109008024020052802e8022207450d00200541a8026a41186a200541c8026a41186a290300370300200541a8026a41106a200541c8026a41106a290300370300200541a8026a41086a200541c8026a41086a290300370300200541b8016a41086a200541f4026a290200370300200541b8016a41106a200541fc026a290200370300200541b8016a41186a20054184036a290200370300200541d8016a2005418c036a290200370300200541e0016a20054194036a290200370300200541e8016a2005419c036a280200360200200520052903c8023703a802200520052902ec023703b8010b0240200528029c01450d00200610390b2007450d00200541c4006a20052903b801370200200541206a41186a2206200541a8026a41186a290300370300200541206a41106a2208200541a8026a41106a290300370300200541206a41086a2209200541a8026a41086a290300370300200541cc006a200541b8016a41086a290300370200200541d4006a200541b8016a41106a290300370200200541dc006a200541b8016a41186a290300370200200541e4006a200541d8016a290300370200200541ec006a200541b8016a41286a290300370200200541f4006a200541e8016a280200360200200520052903a802370320200520073602402009290300210a2005290320210b024002402008290300220c2001200c2001542006290300220d200254200d2002511b22081b220e200d200220081b220f8450450d00200b210f200a21100c010b2006200d200f7d200c200e54ad7d22103703002005200c200e7d22113703300240024020114280c8afa0255620104200522010501b450d00200e210c200f210d0c010b200541386a420037030020054200370330201020027c201120017c2201201154ad7c21020b20054200200a200d7d200b200c54ad7d220e200b200c7d220f200b56200e200a56200e200a511b22061b221037032820054200200f20061b220f3703202002200d7d2001200c54ad7d21022001200c7d21010b024002400240024002400240024002400240200541206a41286a28020022060d00200541003602480c010b200641186c2109200641037441786a41037641016a21124100210602400340024002402007290300220c20012001200c562002200741086a290300220d562002200d511b22081b2211200d200220081b22138450450d00200c2114200d210e0c010b2007200c20117d22153703002007200d20137d200c201154ad7d220e3703080240024020154280c8afa02556200e420052200e501b450d00201521142011210c2013210d0c010b420021142007420037030820074200370300200e20027c201520017c2201201554ad7c21024200210e0b200542002010200d7d200f200c54ad7d2211200f200c7d2215200f56201120105620112010511b22081b221037032820054200201520081b220f3703202002200d7d2001200c54ad7d21022001200c7d21010b2014200e844200520d01200741186a2107200641016a2106200941686a22090d000b201221060b200528024822072006490d0120054100360248200720066b2207450d0002402006450d00200528024022082008200641186c6a200741186c10d50b1a200541286a29030021102005290320210f0b200520073602480b200b200f58200a201058200a2010511b0d06200b200f7d220d200b56200a20107d200b200f54ad7d220c200a56200c200a511b2107200541b8016a200010df03200541c8026a20052802b801220620052802c00110e003200541d8026a2903002110200541e8026a2903002111200541e0026a290300211520052903d002211420052903c802210e024020052802bc01450d00200610390b4200200c20071b21024200200d20071b210c42002101200e4201520d044200210f200c210d2002210e2014201584201020118484500d05200541b8016a200010df03200541c8026a20052802b801220720052802c00110e0034200210e4200210f4200210d4200210142002111420021154200211042002114024020052903c8024201520d00200541d8026a2903002114200541c8026a41206a2903002115200541c8026a41306a290300210120054188036a290300210f20052903d002211020052903e002211120052903f002210d200529038003210e0b024020052802bc01450d00200710390b024002402010200d2011848420142001201584848450450d00200e200f844200520d00200541c0026a4200370300200541b8026a4200370300200541b0026a4200370300200542003703a8024100210941012107420021104200211442002111420021150c010b20054198016a41086a200137030020054198016a41186a200f37030020054198016a41106a200e3703002005200d37039801200541a8026a41186a200f370300200541a8026a41106a200e370300200541a8026a41086a20013703002005200d3703a80241012109410021070b4200210b2002200220142010200c56201420025620142002511b22061b22164200200220167d200c200c201020061b220a54ad7d220d20152011200c200a7d2201562015200d562015200d511b22061b2001200d845022081b22177c200a42002001201120061b20081b22187c2201200a54ad7c220f7d200c200154ad7d210e200c20017d210d2007ad211902400240427f2010200a7d2213201120187d221a7c221b201b2013542206201420167d2010200a54ad7d2210201520177d2011201854ad7d22147c2006ad7c221120105420112010511b22061b221542ffc7afa02556427f201120061b221142005220115022081b0d002013201a84201020148484220a50211c200a420052ad210b0c010b200541c8026a41186a200541a8026a41186a290300370300200541c8026a41106a200541a8026a41106a290300370300200541c8026a41086a200541a8026a41086a290300370300200520052903a8023703c8024101211c0b20054198016a41186a200541c8026a41186a29030037030020054198016a41106a200541c8026a41106a29030037030020054198016a41086a200541c8026a41086a29030037030020054180026a200e370300200541f0016a200f370300200541b8016a41106a2010370300200520153703d801200541e0016a2011370300200520052903c802370398012005200d3703f801200520013703e801200520133703c0012005200b3703d001200520193703b8012007201542ffc7afa0255622122011420052221d20081b2206714101460d010240024002400240024020094101732012201d20081b720d00200520003602c8022000200541c8026a10e60441ff017122074103460d0720070e03020701020b20092006724101470d070c060b200541b8016a41306a2108200541b8016a41206a211e0240201c0d002005201e3602c802200541c8026a10e4040b200520083602c802200541c8026a10e404200541b8016a200010df03200541c8026a20052802b801220720052802c00110e0034200210e4200210f4200210d420021014200210a420021164200211842002117024020052903c8024201520d00200541d8026a2903002117200541e8026a2903002116200541f8026a290300210120054188036a290300210f20052903d002211820052903e002210a20052903f002210d200529038003210e0b024020052802bc01450d00200710390b2018200d200a848420172001201684848450450d01200e200f844200520d01200541c0026a4200370300200541b8026a4200370300200541b0026a4200370300200542003703a8024100211d4101210742002118420021174200210a420021160c020b20054180026a290300210e200541f0016a290300210f200541e0016a2903002111200541c8016a290300211020052903f801210d20052903e801210120052903d801211520052903c001211320052903d001210b20052903b80121190c050b20054198016a41086a200137030020054198016a41186a200f37030020054198016a41106a200e3703002005200d37039801200541a8026a41186a200f370300200541a8026a41106a200e370300200541a8026a41086a20013703002005200d3703a8024101211d410021070b4200210b4100210620024200201620177c200a20187c220d200a54ad7c2201200d4280c8afa02554ad7d220e200d4280b8d0df5a7c220f200d56200e200156200d42ffc7afa025561b22091b220d2002200c4200200f20091b2201562002200d562002200d511b22091b220d201720182001200c20091b2201562017200d562017200d511b22091b221f4200200d201f7d20012001201820091b221b54ad7d220d2016200a2001201b7d2201562016200d562016200d511b22091b2001200d845022121b22207c201b42002001200a20091b20121b22217c2201201b54ad7c220f7d200c200154ad7d210e200c20017d210d2007ad211902400240427f2018201b7d2222200a20217d22237c2224202420225422092017201f7d2018201b54ad7d2218201620207d200a202154ad7d22167c2009ad7c220a201854200a2018511b22091b22174280c8afa025544100427f200a20091b220a501b0d00200541c8026a41186a200541a8026a41186a290300370300200541c8026a41106a200541a8026a41106a290300370300200541c8026a41086a200541a8026a41086a290300370300200520052903a8023703c8024101210620222113201821102023211a20162114410121090c010b0240202220238420182016848450450d00410121090c010b4201210b410021064100210920172115200a21110b20054198016a41186a200541c8026a41186a29030037030020054198016a41106a200541c8026a41106a29030037030020054198016a41086a200541c8026a41086a29030037030020054180026a200e370300200541f0016a200f370300200541e0016a2011370300200541b8016a41106a2018370300200520052903c802370398012005200d3703f801200520013703e801200520153703d801200520223703c0012005200b3703d001200520193703b80120062007710d0102400240201d2006410173710d00201d2006720d040c010b200520003602c8022000200541c8026a10e60441ff017122074103460d030240024020070e03010500010b024020090d002005201e3602c802200541c8026a10e4040b200520083602c802200541c8026a10e404420021010c060b20054180026a290300210e200541f0016a290300210f200541e0016a2903002111200541c8016a290300211820052903f801210d20052903e801210120052903d801211520052903c001212220052903d001210b20052903b80121190b20222113201821100c030b2006200741908cc700104b000b200520003602c8022000200541c8026a10e504410121060b20054188026a200010df03200541c8026a2005280288022207200528029002220810e0030240024020052903c8024201510d00200541a0026a420037030020054200370398020c010b200541a0026a20054198036a290300370300200520054190036a290300370398020b0240024020060d004200211a200541e0026a4200370300200541d8026a4200370300200541d0026a4200370300200542003703c8024200211442002113420021100c010b200541c8026a41186a20054198016a41186a290300370300200541c8026a41106a20054198016a41106a290300370300200541c8026a41086a20054198016a41086a29030037030020052005290398013703c8020b200541a8026a41186a200541c8026a41186a2206290300220d370300200541a8026a41106a200541c8026a41106a22092903002201370300200541a8026a41086a200541c8026a41086a2212290300220e370300200520052903c802220f3703a802200541e8026a20143703002006201a3703002009201037030020054188036a200d370300200541c8026a41386a2001370300200541f8026a200e370300200541c8026a41286a200f370300200541c8026a41c8006a20052903980237030020054198036a20054198026a41086a290300370300200520133703d002200542013703c80220072008201210e7040240200528028c02450d00200710390b200541b8016a41106a2903002110200541b8016a41286a2903002111200541b8016a41386a290300210f200541b8016a41c8006a290300210e20052903c001211320052903d801211520052903e801210120052903f801210d20052903b801211920052903d001210b0b024020194201520d0020054180036a2010370300200541f8026a2013370300200541d1026a2000290000370000200541c8026a41086a41003a0000200541e9026a200041186a290000370000200541e1026a200041106a290000370000200541d9026a200041086a290000370000200541023a00c802200541c8026a10c9030b02400240200b50450d00420021100c010b200541c8026a41186a200041186a290000370300200541c8026a41106a200041106a290000370300200541c8026a41086a200041086a290000370300200520002900003703c802420121100b200541f8006a41186a200541c8026a41186a22072903002214370300200541f8006a41106a200541c8026a41106a22062903002213370300200541f8006a41086a200541c8026a41086a290300220a370300200520052903c802220b370378200541f8026a2011370300200541f0026a220820153703002006200a37030020072013370300200541e8026a2014370300200520103703c8022005200b3703d002200541c8026a10e80420052903c802500d01200520083602b801200541b8016a10e4040c010b4200210f200c210d2002210e0b2004427f2004290300221020017c220120012010542207200441086a22062903002201200f7c2007ad7c221020015420102001511b22071b3703002006427f201020071b3703000240200d200e84500d002003420020032903002201200d7d22102010200156200341086a22072903002210200e7d2001200d54ad7d220d201056200d2010511b22061b37030020074200200d20061b3703000b42f3e885db96cddbb320200541206a41386a2005290320200541206a41086a290300411f109108200541c8026a2005108f0820052802c802220720052802d002200541206a109208024020052802cc02450d00200710390b200541c8026a41386a2002370300200541f8026a200c370300200541c8026a41086a41023a0000200541e9026a200041186a290000370000200541e1026a200041106a290000370000200541d9026a200041086a290000370000200541d1026a2000290000370000200541033a00c802200541c8026a10c9030b024020052802442207450d00200741186c450d00200528024010390b200541d0006a28020041ffffffff0371450d00200528024c10390b200541d00d6a24000b9f0401067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a4193cac800410610cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b990401067f230041d0006b22022400200241f0c8c800410710cb01200241106a418dcac800410610cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200241306a2003412010ca01200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a108301200310392002280228220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290000370000200341086a200241086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290010370000200341086a200241106a41086a290000370000200228022021030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a36020002402002280224450d00200310390b200241d0006a24000f0b1032000b1034000ba30b07077f047e017f017e037f017e027f230041d0016b220324002003200236025c20032001360258200341e0006a2001200210e40102400240200328026022040d00200041003602200c010b200328026421052003200341e8006a280200220636027c20032004360278200341a8016a410472210741002101417f210202400240024002400240034020062001460d01200720016a200420016a22082d00003a00002003200141016a22093602a8012003200620026a36027c2003200841016a3602782002417f6a21022009210120094120470d000b200341a4016a41026a200341b5016a2d00003a0000200341a0016a41026a200341bc016a2d00003a0000200320032f01ac013b019001200320032d00ae013a0092012003200341b3016a2f00003b01a4012003200341ba016a2f01003b01a001200341c8016a2802002102200341c4016a2802002109200341bd016a2800002106200341b6016a280100210820032800af0121072003419c016a41026a200341c3016a2d00003a00002003200341c1016a2f00003b019c01200341c0006a200341f8006a108c052003290340a70d00200341c0006a41106a290300210a2003290348210b200341286a200341f8006a108c052003290328a70d00200341286a41106a290300210c2003290330210d200341206a200341f8006a10c10120032802200d002003280224220e200328027c41186e22012001200e4b1bad42187e220f422088a70d01200fa72210417f4c0d010240024020100d00410821110c010b201010382211450d030b41002101200341003602b001200320113602a8012003201041186e22103602ac010240024002400240200e0d00410021010c010b200341186a21120340200341086a200341f8006a108c052003290308a70d022012290300210f200329031021132003200341f8006a10c10120032802000d02200328020421100240200120032802ac01470d00200341a8016a200110820920032802a801211120032802b00121010b2011200141186c6a220120103602102001200f37030820012013370300200320032802b00141016a22013602b001200e417f6a220e0d000b20032802ac01211020032802a80121110b2011450d02200341a8016a200341f8006a108f0520032802a8010d052010450d02201041186c0d010c020b20032802ac012201450d01200141186c450d010b201110390b200342003702840120034100280284ee4d360280012003410d360294012003200341d8006a36029001200320034180016a3602a401200341bc016a4101360200200342013702ac01200341949fc5003602a801200320034190016a3602b801200341a4016a41b4dfc400200341a8016a103b1a20032802800120032802880110d1010240200328028401450d0020032802800110390b200041003602200c030b1034000b1032000b20034180016a41086a220e200341a8016a41086a280200360200200341f4006a41026a2212200341a4016a41026a2d00003a0000200341f0006a41026a2214200341a0016a41026a2d00003a0000200320032903a801370380012000413a6a20032d0092013a0000200041386a20032f0190013b0100200320032f01a4013b0174200320032f01a0013b0170200341ec006a41026a22152003419c016a41026a2d00003a0000200320032f019c013b016c200041186a200c3703002000200d3703102000200a3703082000200b370300200041286a200136020020002010360224200020113602202000413b6a20073600002000412c6a200329038001370200200041346a200e28020036020020002008360042200020032f01743b003f200041c1006a20122d00003a0000200020032f01703b0046200041c8006a20142d00003a000020002006360049200041cf006a20152d00003a0000200020032f016c3b004d200041d4006a2002360000200041d0006a20093600000b2005450d00200410390b200341d0016a24000bf50303077f037e017f230041206b2205240002402002200384500d00200541086a200110c70541004102410120044101711b200441ff01714101461b210620052802082107200528020c210802400240200528021022040d00200721040c010b200720044105746a21092007210a200721040340200a41186a2d0000220b4103460d01024002400240200a41106a290300220c2000510d00200a41086a290300210d200a290300210e2005200a411c6a28000036000b2005200a41196a2800003602082006210f0c010b4103210f2006210b2000210c2002210e2003210d200641ff01714103470d00410321060c010b2004200e3703002004200b3a00182004200c370310200420052802083600192004200d3703082004411c6a200528000b360000200441206a2104200f21060b200a41206a220a2009470d000b0b2005200836020c200520073602082005200420076b41057522043602100240200641ff01714103460d00024020042008470d00200541086a200810a50520052802082107200528021021040b200720044105746a220a2003370308200a2002370300200a20063a0018200a2000370310200a2005280019360019200a411c6a2005411c6a280000360000200441016a2104200528020c21080b20012007200410ce0a200841ffffff3f71450d00200710390b200541206a24000ba30201037f230041106b22032400200341003602082003420137030020034100412010772003280200200328020822046a22052002290038370000200541086a200241c0006a290000370000200541106a200241c8006a290000370000200541186a200241d0006a2900003700002003200441206a3602082003200236020c2003410c6a200310df022003200241106a36020c2003410c6a200310df02200228022021052003200241286a280200220410ac020240200441186c2204450d00200520046a210403402003200536020c2003410c6a200310df02200541106a200310db02200541186a22052004470d000b0b2002412c6a200310e0022000200120032802002205200328020810e90102402003280204450d00200510390b200341106a24000bb40101077f2001280208210302402001410c6a280200220420024d0d00200141146a2802002105410221062001411c6a280200410274210102400340200421072001450d012001417c6a21012003417f6a210320052802002108200541046a22092105200720086b220420024b0d0020092105200720024d0d000b2000200836020c20002004ad4220862003ad84370200410121060b200020063602080f0b2000410036020820002004ad4220862003ad843702000b950d04047f017e027f067e230041d0026b22052400200541c8016a200120021093080240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10950820052802f0012108200520052802f801220736028402200520083602800220054188026a2008200710e4010240024020052802880222070d00420021090c010b200528028c02210a02400240024020054188026a41086a280200220b4110490d00200b4170714110470d010b42002109200542003702c40220054100280284ee4d3602c0022005410d36029c02200520054180026a360298022005200541c0026a3602a402200541bc026a4101360200200542013702ac02200541949fc5003602a802200520054198026a3602b802200541a4026a41b4dfc400200541a8026a103b1a20052802c00220052802c80210d101024020052802c402450d0020052802c00210390b0c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d00200710390b200d4200200942005222071b210d200f420020071b210f024020052802f401450d00200810390b200c420020071b210c200e420020071b210e0240200f200354200d200454200d2004511b0d00200f200385200d2004858450450d04200541b8016a20032004428094ebdc03420010d20b200541a8016a20032004428094ebdc03420010da0b20054198016a20052903a801200541a8016a41086a2903002001350228220d420010d30b20054188016a4200200529039801220f417f200d20052903b8017e220d428094ebdc0380a7200d42ffffffffffbfb2cd3b561b200d428094ebdc03824280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b220d428094ebdc03420010d20b200541f8006a200f200d428094ebdc03420010da0b200541e8006a2005290378200541f8006a41086a2903004280cab5ee01420010d30b2005290368220f200529038801220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541e8006a41086a290300200d200f54ad7c220f84500d040c020b200541d8006a20032004428094ebdc03420010d20b200541c8006a20032004428094ebdc03420010da0b200541386a2005290348200541c8006a41086a29030020013502282209420010d30b200541286a420020052903382210417f200920052903587e2209428094ebdc0380a7200942ffffffffffbfb2cd3b561b2009428094ebdc03824280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b2209428094ebdc03420010d20b200541186a20102009428094ebdc03420010da0b200541086a2005290318200541186a41086a2903004280cab5ee01420010d30b200128022422072003200f7d220920072903007c2210370300200141106a2208200828020022082002200820024b1b360200200741086a22022004200d7d2003200f54ad7d20022903007c2010200954ad7c3703002005290308220f2005290328220d420188a7200d4280cab5ee017e428094ebdc03824280cab5ee01566aad7c220d200541086a41086a290300200d200f54ad7c220f8450450d01200e210d0c020b410021010c030b2001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c0b200141013a002c200541c0026a200541c8016a10950820052802c802210a20052802c0022107200541003602b002200542013703a802200541a8026a41004110107720052802a802220220052802b00222016a22082004370008200820033700002005200141106a22013602b002024020052802ac02220820016b410f4b0d00200541a8026a20014110107720052802ac02210820052802a802210220052802b00221010b200220016a220b200c370008200b200d3700002007200a2002200141106a10e90102402008450d00200210390b20052802c402450d00200710390b410121010b2000200636020420002001360200200541d0026a24000ba40501067f230041e0006b22022400200241086a41f0c8c800410710cb01200241186a41d1d4c800410910cb0102400240410410382203450d002002420437023c20022003360238200241386a41004120107720022802382204200228024022056a22032001290000370000200341086a200141086a290000370000200341106a200141106a290000370000200341186a200141186a2900003700002002200541206a2203360240200128022021010240200228023c20036b41034b0d00200241386a20034104107720022802382104200228024021030b200420036a2001360000200220022802382201200341046a220310cc01370348200241dc006a200120036a360200200220013602582002200241c8006a41086a3602542002200241c8006a360250200241286a200241d0006a1083010240200228023c450d00200110390b2002280230220441206a2201417f4c0d010240024020010d00410121030c010b200110382203450d010b2000200336020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021030b200320056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22033602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520036b20044f0d00200020032004107720062802002103200028020021070b200720036a2001200410d40b1a2006200320046a3602000240200228022c450d00200110390b200241e0006a24000f0b1032000b1034000bd60101037f20004201370200200041086a220241003602002001280200210320004100410410772000280200200228020022046a20033600002002200441046a3602002001280204210320002001410c6a280200220410ac0202402004450d0020032004410c6c6a210403402003280200200341086a280200200010b9022003410c6a22032004470d000b0b200128021021040240200041046a280200200228020022036b41034b0d002000200341041077200041086a28020021030b200041086a200341046a360200200028020020036a20043600000b13002000410136020420004188e0c4003602000b3400200041b6e2c40036020420004100360200200041146a4102360200200041106a41c4e2c400360200200041086a420b3702000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802d8974e4100200010af020b130020004128360204200041e4ebc4003602000b3400200041f1d5c40036020420004100360200200041146a4102360200200041106a41b891c500360200200041086a420d3702000b950101017f230041d0016b22022400200241086a410041800110d60b1a200241c4016a42003702002000410036020820004201370200200242003702bc01200241013602b8012002428280808080193703b00120024286808080c00c3703a801200241003602a00120024100360298012002420137039001200242818080801037038801200241086a200010f107200241d0016a24000ba51b04067f017e037f017e230041c0016b2202240002400240200128020422030d002000410a3a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a3602000240024002400240024002400240024002400240024002400240024002400240024002400240024020050e0a000102030405060708090a0b200041003a00000c130b2002200110c101024020022802000d0020022802042101200041013a0000200041046a20013602000c130b2000410a3a00000c120b2006450d0b20042d0001210520012003417e6a3602042001200441026a3602004100210641012107024002400240024020050e04030001020f0b200241086a200110c10120022802080d0e20012802042205200228020c2203490d0e2003417f4c0d0d410121064101210402402003450d00200310382204450d1120044100200310d60b1a0b200420012802002207200310d40b1a2001200520036b3602042001200720036a360200410021070c020b41012107410221060c010b41032106410121070b20024198016a2001108602024020022d0098014101460d002000200229009901370001200041196a20024198016a41196a290000370000200041116a20024198016a41116a290000370000200041096a20024198016a41096a290000370000200041306a20033600002000412c6a2003360000200041286a2004360000200041246a2006360000200041023a00000c120b2000410a3a00002007200345720d11200410390c110b2006450d0b20042d0001210520012003417e6a3602042001200441026a3602004100210641012107024002400240024020050e04030001020f0b200241206a200110c10120022802200d0e2001280204220520022802242203490d0e2003417f4c0d0c410121064101210402402003450d00200310382204450d1020044100200310d60b1a0b200420012802002207200310d40b1a2001200520036b3602042001200720036a360200410021070c020b410221060c010b410321060b200241106a2001109a0202402002290310a70d0020022903182108200041033a0000200041186a2008370300200041106a20033600002000410c6a2003360000200041086a2004360000200041046a20063600000c110b2000410a3a00002007200345720d10200410390c100b2006450d0620042d0001210620012003417e6a22053602042001200441026a2203360200410121094100210a024002400240024020060e04030001020a0b200241286a200110c10120022802280d0920012802042203200228022c2204490d092004417f4c0d0b4101210a4101210702402004450d00200410382207450d0f20074100200410d60b1a0b200720012802002206200410d40b1a2001200320046b22053602042001200620046a2203360200410021090c020b4102210a0c010b4103210a0b20024100360298012005450d0e20032d0000210620012005417f6a220b36020420024101360298012001200341016a360200200220063a009c01200b0d070c0e0b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200020053a0001200041053a00000c0f0b2000410a3a00000c0e0b200241306a2001108c0502402002290330a70d00200241306a41106a29030021082002290338210c200041063a0000200041086a200c370300200041106a20083703000c0e0b2000410a3a00000c0d0b200241c8006a200110c101024020022802480d0020012802042204200228024c2203490d002003417f4c0d060240024020030d00410121050c010b200310382205450d0a20054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041046a2005360000200041073a0000200041086a2003ad22084220862008843700000c0d0b2000410a3a00000c0c0b200041083a00000c0b0b2006450d0720042d0001210520012003417e6a22033602042001200441026a360200410021064101210702400240024002400240024020050e070e0001020304050d0b20024188016a200110c1012002280288010d0c20012802042203200228028c012205490d0c2005417f4c0d08410121064101210402402005450d00200510382204450d0c20044100200510d60b1a0b200420012802002207200510d40b1a2001200320056b22033602042001200720056a3602002005ad22084220862008842108410021070c0d0b20024190016a200110c1012002280290010d0b200228029401210420012802042103410221060c0c0b410321060c0b0b410421060c0a0b410521060c090b410621060c080b2000410a3a00000c090b2000410a3a00000c080b20032d0001210620012005417e6a220b36020420024102360298012001200341026a360200200220063a009d01200b450d0620032d0002210620012005417d6a220b36020420024103360298012001200341036a360200200220063a009e01200b450d0620032d0003210620012005417c6a220b36020420024104360298012001200341046a360200200220063a009f01200b450d0620032d0004210620012005417b6a220b360204200241a0016a20063a000020024105360298012001200341056a360200200b450d0620032d0005210620012005417a6a220b360204200241a1016a20063a000020024106360298012001200341066a360200200b450d0620032d000621062001200541796a220b360204200241a2016a20063a000020024107360298012001200341076a360200200b450d0620032d000721062001200541786a220b360204200241a3016a20063a000020024108360298012001200341086a360200200b450d0620032d000821062001200541776a220b360204200241a4016a20063a000020024109360298012001200341096a360200200b450d0620032d000921062001200541766a220b360204200241a5016a20063a00002002410a3602980120012003410a6a360200200b450d0620032d000a21062001200541756a220b360204200241a6016a20063a00002002410b3602980120012003410b6a360200200b450d0620032d000b21062001200541746a220b360204200241a7016a20063a00002002410c3602980120012003410c6a360200200b450d0620032d000c21062001200541736a220b360204200241a8016a20063a00002002410d3602980120012003410d6a360200200b450d0620032d000d21062001200541726a220b360204200241a9016a20063a00002002410e3602980120012003410e6a360200200b450d0620032d000e21062001200541716a220b360204200241aa016a20063a00002002410f3602980120012003410f6a360200200b450d0620032d000f21062001200541706a220b360204200241ab016a20063a000020024110360298012001200341106a360200200b450d0620032d0010210620012005416f6a220b360204200241ac016a20063a000020024111360298012001200341116a360200200b450d0620032d0011210620012005416e6a220b360204200241ad016a20063a000020024112360298012001200341126a360200200b450d0620032d0012210620012005416d6a220b360204200241ae016a20063a000020024113360298012001200341136a360200200b450d0620024198016a41176a20032d001322063a000020012005416c6a3602042001200341146a360200200041086a20024198016a410b6a2f00003b00002000410a6a200241a5016a2d00003a00002000410f6a20024198016a41126a2f01003b0000200041116a20024198016a41146a2d00003a0000200220022f019c013b01bc01200220022d009e013a00be01200241a6016a280100210120024198016a41156a2f00002103200228009f012105200041146a20063a0000200041126a20033b0000200041036a20022d00be013a0000200020022f01bc013b00012000410b6a2001360000200041046a2005360000200041043a0000200041156a20022f00b9013b0000200041176a200241bb016a2d00003a0000200041246a2004360000200041206a20043600002000411c6a2007360000200041186a200a3600000c070b1034000b2000410a3a00000c050b2000410a3a00000c040b1032000b2000410a3a00000c020b02402003450d00200128020022052d0000210920012003417f6a3602042001200541016a360200410021050240024002400240024020090e050400010203050b200241d0006a200110c10120022802500d0420022802542103410121050c030b200241e0006a200110c10120022802600d0320022802642103200241d8006a200110c10120022802580d03200228025c210a410221050c020b200241f0006a200110c10120022802700d0220022802742103200241e8006a200110c10120022802680d02200228026c210a410321050c010b20024180016a200110c1012002280280010d012002280284012103200241f8006a200110c10120022802780d01200228027c210a410421050b200041093a0000200020022f00bc013b00012000411c6a200a360200200041186a2003360200200041146a20053602002000410c6a2008370000200041086a2004360000200041046a2006360000200041206a200229039801370300200041036a200241be016a2d00003a0000200041286a20024198016a41086a290300370300200041306a200241a8016a2903003703000c020b2000410a3a000020072008a745720d01200410390c010b2000410a3a00002009200445720d00200710390b200241c0016a24000b801e020c7f027e230041d0016b22022400024002402001280200220328020422040d002000410a3a00000c010b200328020022052d0000210620032004417f6a22073602042003200541016a360200024002400240024002400240024002400240024002400240024002400240024002400240024020060e0a000102030405060708090a0b200041003a00000c120b200241086a2001108c02024020022802080d00200228020c2103200041013a0000200041046a20033602000c120b2000410a3a00000c110b024002400240024002402007450d0020052d0001210720032004417e6a22063602042003200541026a220836020041002104410121094100210a024020070e0405000304010b200241106a2001108c0220022802100d00200328020422012002280214220b490d00200b417f4c0d1002400240200b0d004101210c0c010b200b1038220c450d13200c4100200b10d60b1a200328020421010b2001200b4f0d01200c10390b2000410a3a00000c140b200c20032802002205200b10d40b1a20032001200b6b220636020420032005200b6a22083602004101210a410021090c020b410121094102210a0c010b4103210a410121090b200241003602a801200241a8016a410472210d417f21010340024020062004470d002000410a3a00002009200b45720d12200c10390c120b200820046a22052d000021072003200620016a360204200d20046a20073a00002003200541016a3602002002200441016a22053602a8012001417f6a21012005210420054120470d000b200041086a200241a8016a410b6a2f00003b00002000410a6a200241b5016a2d00003a00002000410f6a200241a8016a41126a2f01003b0000200041116a200241bc016a2d00003a0000200041186a200241c3016a2d00003a0000200041166a200241a8016a41196a2f00003b0000200220022f01ac013b01a401200220022d00ae013a00a601200241b6016a2801002103200241bd016a2800002101200241c4016a290200210e20022800af012104200041036a20022d00a6013a0000200020022f01a4013b0001200041196a200e370000200041126a20013600002000410b6a2003360000200041046a2004360000200041306a200b3600002000412c6a200b360000200041286a200c360000200041246a200a360000200041023a00000c100b024002400240024002402007450d0020052d0001210620032004417e6a3602042003200541026a3602004100210741012108024020060e0405000304010b200241286a2001108c0220022802280d0020032802042206200228022c2204490d002004417f4c0d0f0240024020040d00410121050c010b200410382205450d1220054100200410d60b1a200328020421060b200620044f0d01200510390b2000410a3a00000c130b200520032802002207200410d40b1a2003200620046b3602042003200720046a36020041012107410021080c020b410221070c010b410321070b200241186a2001108e0202402002290318a70d002002290320210e200041033a0000200041186a200e370300200041106a20043600002000410c6a2004360000200041086a2005360000200041046a20073600000c100b2000410a3a00002008200445720d0f200510390c0f0b024002400240024002402007450d0020052d0001210720032004417e6a22063602042003200541026a22043602004101210d4100210b024020070e0405000304010b200241306a2001108c0220022802300d002003280204220120022802342205490d002005417f4c0d0e0240024020050d00410121080c010b200510382208450d1120084100200510d60b1a200328020421010b200120054f0d01200810390b2000410a3a00000c120b200820032802002204200510d40b1a2003200120056b22063602042003200420056a22043602004101210b4100210d0c020b4102210b0c010b4103210b0b200241003602a80120060d080c0d0b02402007450d0020052d0001210120032004417e6a3602042003200541026a360200200020013a0001200041053a00000c0e0b2000410a3a00000c0d0b200241386a200110f50402402002290338a70d00200241386a41106a290300210e2002290340210f200041063a0000200041086a200f370300200041106a200e3703000c0d0b2000410a3a00000c0c0b200241d0006a2001108c02024020022802500d002003280204220420022802542201490d002001417f4c0d070240024020010d00410121050c010b200110382205450d0a20054100200110d60b1a200328020421040b200420014f0d08200510390b2000410a3a00000c0b0b200041083a00000c0a0b2007450d0720052d0001210620032004417e6a22043602042003200541026a360200410021074101210802400240024002400240024020060e07080001020304050d0b20024190016a2001108c022002280290010d0c200328020422042002280294012206490d0c2006417f4c0d090240024020060d00410121050c010b200610382205450d0c20054100200610d60b1a200328020421040b200420064f0d06200510390c0c0b20024198016a2001108c022002280298010d0b200228029c01210520032802042104410221070c060b410321070c050b410421070c040b410521070c030b410621070c020b2000410a3a00000c080b200520032802002207200610d40b1a2003200420066b22043602042003200720066a3602002006ad220e422086200e84210e41012107410021080b02402004450d00200328020022062d0000210d20032004417f6a3602042003200641016a3602004100210402400240024002400240200d0e050400010203050b200241d8006a2001108c0220022802580d04200228025c2103410121040c030b200241e8006a2001108c0220022802680d03200228026c2103200241e0006a2001108c0220022802600d0320022802642106410221040c020b200241f8006a2001108c0220022802780d02200228027c2103200241f0006a2001108c0220022802700d0220022802742106410321040c010b20024188016a2001108c022002280288010d01200228028c01210320024180016a2001108c022002280280010d012002280284012106410421040b200041093a0000200020022f00a4013b00012000411c6a2006360200200041186a2003360200200041146a20043602002000410c6a200e370000200041086a2005360000200041046a2007360000200041206a20022903a801370300200041036a200241a6016a2d00003a0000200041286a200241a8016a41086a290300370300200041306a200241b8016a2903003703000c070b2000410a3a00002008200ea745720d06200510390c060b20042d000021012003200441016a36020020032006417f6a2207360204200241013602a801200220013a00ac012007450d0420042d000121012003200441026a36020020032006417e6a2207360204200241023602a801200220013a00ad012007450d0420042d000221012003200441036a36020020032006417d6a2207360204200241033602a801200220013a00ae012007450d0420042d000321012003200441046a36020020032006417c6a2207360204200241043602a801200220013a00af012007450d0420042d0004210120032006417b6a22073602042003200441056a360200200241b0016a20013a0000200241053602a8012007450d0420042d0005210120032006417a6a22073602042003200441066a360200200241b1016a20013a0000200241063602a8012007450d0420042d000621012003200641796a22073602042003200441076a360200200241b2016a20013a0000200241073602a8012007450d0420042d000721012003200641786a22073602042003200441086a360200200241b3016a20013a0000200241083602a8012007450d0420042d000821012003200641776a22073602042003200441096a360200200241b4016a20013a0000200241093602a8012007450d0420042d000921012003200641766a220736020420032004410a6a360200200241b5016a20013a00002002410a3602a8012007450d0420042d000a21012003200641756a220736020420032004410b6a360200200241b6016a20013a00002002410b3602a8012007450d0420042d000b21012003200641746a220736020420032004410c6a360200200241b7016a20013a00002002410c3602a8012007450d0420042d000c21012003200641736a220736020420032004410d6a360200200241b8016a20013a00002002410d3602a8012007450d0420042d000d21012003200641726a220736020420032004410e6a360200200241b9016a20013a00002002410e3602a8012007450d0420042d000e21012003200641716a220736020420032004410f6a360200200241ba016a20013a00002002410f3602a8012007450d0420042d000f21012003200641706a22073602042003200441106a360200200241bb016a20013a0000200241103602a8012007450d0420042d0010210120032006416f6a22073602042003200441116a360200200241bc016a20013a0000200241113602a8012007450d0420042d0011210120032006416e6a22073602042003200441126a360200200241bd016a20013a0000200241123602a8012007450d0420042d0012210120032006416d6a22073602042003200441136a360200200241be016a20013a0000200241133602a8012007450d0420042d0013210120032006416c6a3602042003200441146a360200200041086a200241a8016a410b6a2f00003b00002000410a6a200241b5016a2d00003a00002000410f6a200241a8016a41126a2f01003b0000200041116a200241a8016a41146a2d00003a0000200220022f01ac013b01a401200220022d00ae013a00a601200241b6016a2801002103200241bd016a2f0000210420022800af012106200041146a20013a0000200041126a20043b00002000410b6a2003360000200041046a2006360000200041036a20022d00a6013a0000200020022f01a4013b0001200041246a2005360000200041206a20053600002000411c6a2008360000200041186a200b360000200041043a00000c050b1034000b200520032802002206200110d40b21052003200420016b3602042003200620016a360200200041086a2001ad220e422086200e84370000200041046a2005360000200041073a00000c030b1032000b2000410a3a00000c010b2000410a3a0000200d200545720d00200810390b200241d0016a24000ba71701047f230041106b220224000240024002400240024002400240024002400240024020002d00000e0a000102030405060708090a0b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41003a00002003200041016a3602000c090b200041046a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41013a00002003200041016a3602002004200110db020c080b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41023a00002004200341016a22033602000240024002400240024020002802240e0400010203000b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2204200341016a3602002000280228200041306a280200200110b902200428020021030c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000b200041016a21000240200141046a28020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200141086a200341206a3602000c070b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200041186a2105200128020020036a41033a00002004200341016a2203360200024002400240024020002802040e0400010203000b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602002005200110dd020c090b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602002000280208200041106a280200200110b9022005200110dd020c080b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602002005200110dd020c070b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a3602002005200110dd020c060b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41043a00002004200341016a22033602000240024002400240024020002802180e0400010203000b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a22033602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a2204200341016a360200200028021c200041246a280200200110b902200428020021030c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a22033602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a22033602000b200041016a21000240200141046a28020020036b41134b0d002001200341141077200141086a28020021030b200128020020036a22042000290000370000200441106a200041106a280000360000200441086a200041086a290000370000200141086a200341146a3602000c050b0240200141046a2205280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41053a00002004200341016a220336020020002d00012100024020052802002003470d002001200341011077200141086a28020021030b200128020020036a20003a0000200141086a200341016a3602000c040b200041086a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41063a00002003200041016a3602002002200436020c2002410c6a200110df020c030b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41073a00002004200341016a36020020002802042000410c6a280200200110b9020c020b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41083a00002003200041016a3602000c010b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41093a00002004200341016a22033602000240024002400240024002400240024020002802040e0700010203040506070b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000c060b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41013a0000200141086a200341016a3602002000280208200041106a280200200110b9020c050b200041086a21040240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41023a0000200141086a200341016a3602002004200110db020c040b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41033a0000200141086a200341016a3602000c030b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41043a0000200141086a200341016a3602000c020b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41053a0000200141086a200341016a3602000c010b0240200141046a2802002003470d002001200341011077200141086a28020021030b200128020020036a41063a0000200141086a200341016a3602000b0240024002400240024020002802140e050001020304050b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41003a00002003200041016a3602000c040b200041186a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41013a00002003200041016a3602002004200110db020c030b2000411c6a2104200041186a21050240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41023a00002003200041016a3602002005200110db022004200110db020c020b2000411c6a2104200041186a21050240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41033a00002003200041016a3602002005200110db022004200110db020c010b2000411c6a2104200041186a21050240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41043a00002003200041016a3602002005200110db022004200110db020b200241106a24000b8b0501057f230041900b6b22022400200141940b6a280200210320012802900b2104200241086a200141880b10d40b1a0240024020022d000822014111470d002000200241086a41047241dc0210d40b1a0c010b20004103360200024002400240024002400240024020010e18070707070007010207070707030707070704070707070705060b200241106a280200450d06200228020c10390c060b200228020c0d05200241146a2802002201450d05200141286c450d05200241106a28020010390c050b20022d000c4102470d04200241106a28020021050240200241186a2802002201450d00200141d0006c2100200541c4006a21010340024020012802002206450d00200641306c450d002001417c6a28020010390b200141d0006a2101200041b07f6a22000d000b0b200241146a2802002201450d04200141d0006c450d04200510390c040b200228020c4102470d03200241186a2802002201450d032002411c6a280200450d03200110390c030b024002400240200228020c0e020001020b200241d8026a280200450d04200241d4026a28020010390c040b200241d8026a280200450d03200241d4026a28020010390c030b200241d8026a280200450d02200241d4026a28020010390c020b200241106a2d0000410a470d012002413c6a280200450d01200241386a28020010390c010b0240200241106a2903004201510d000240024020022802180e020300010b200241286a280200410b470d02200241306a108d02200241f8036a108b030c020b200241206a280200410b470d01200241286a108d02200241f0036a108b030c010b200241186a108d02200241e0036a108d02200241a8076a108b030b0240200341ffffff3f71450d00200410390b200241900b6a24000bb10201027f230041206b220424000240024002400240024020022001413c6a412010d70b0d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b200210382201450d030b200020023602042000200136020020012005200210d40b1a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a29000037030020042002290000370300200120041081072202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b200110382202450d020b200020013602042000200236020020022005200110d40b1a200041086a20013602000c030b1034000b1032000b200041003602000b200441206a24000be50301047f23004180016b220424000240024020032802082205200041386a280200470d00200328020022062000280230200510d70b0d00200341046a280200450d01200610390c010b200441c0006a41186a2205200141186a290000370300200441c0006a41106a2206200141106a290000370300200441c0006a41086a2207200141086a2900003703002004200129000037034020042000200441c0006a10a308024020042903004201520d00200441c0006a41286a200441306a290300370300200441c0006a41206a200441286a2903003703002005200441206a2903003703002006200441186a2903003703002007200441106a29030037030020042004290308370340200441f0006a41086a200341086a2802003602002004410136027c20042003290200370370200441c0006a200441f0006a10a4080c010b0240200441106a2802002205417c6a2201280200220041004a0d00200541706a2106200441c0006a41086a2207200341086a280200360200200420032902003703400240200541746a280200450d0020062802001039200128020021000b20062004290340370200200641086a20072802003602002001200041016a3602000c010b2001200041016a360200200341046a280200450d00200328020010390b20044180016a24000b840503017f047e0a7f230041306b22032400200341206a20012903182001290308852204200241186a2900008542002001290310220520012903002206852207200229001085420010d30b200341106a2004200241086a2900008542002007200229000085420010d30b2003200542002005200341106a41086a2903002003290310857c2005200341206a41086a2903002003290320857c200642adfed5e4d485fda8d8007e42a0cbbf9599b5a19f0a7c85421789854217892204420010d30b200141246a2802002208200141206a2802002209200341086a2903002003290300852004892205a7220a71220b6a280000220c200a41197641818284086c220d73220a417f73200a41fffdfb776a7141808182847871210e200b41046a200971210f4104211002400340200f210a0240200e0d000240200c200c41017471418081828478710d00200d2008200a6a280000220c73220e417f73200e41fffdfb776a7141808182847871210e2009200a20106a41046a71210f201041046a2110200a210b0c020b2000200537030820004201370300200041106a2001360200200041146a20022900003700002000411c6a200241086a290000370000200041246a200241106a2900003700002000412c6a200241186a2900003700000c020b200e682111200a210f200e417f6a200e71210e200841002009200b20114103766a716b41306c6a220a41506a2002412010d70b0d000b2000200537030820004200370300200041186a41013a0000200041146a2001360200200041106a200a360200200041196a2002290000370000200041216a200241086a290000370000200041296a200241106a290000370000200041316a200241186a2900003700000b200341306a24000bde0403027f017e067f230041d0006b2202240020022000280208220336020c20002903002104200241286a200041246a290200370300200241206a2000411c6a290200370300200241106a41086a200041146a290200370300200241386a200141086a2902003703002002200029020c37031020022001290200370330200341206a2105200328022022062004a72207712101200341246a28020021084104210003402001220920006a2006712101200041046a2100200820096a28000041808182847871220a450d000b02402008200a6841037620096a20067122006a2c000022014100480d0020082008280200418081828478716841037622006a2d000021010b200341286a280200210902402001410171220a450d0020090d00200241c0006a20052002410c6a10ec07200328022022062007712101200341246a28020021084104210003402001220920006a2006712101200041046a2100200820096a280000418081828478712205450d000b0240200820056841037620096a20067122006a2c00004100480d002008280200418081828478716841037621000b200328022821090b20032009200a6b360228200820006a200741197622013a00002000417c6a20067120086a41046a20013a00002008410020006b41306c6a41506a220041286a200241106a41286a290300370200200041206a200241106a41206a290300370200200041186a200241106a41186a290300370200200041106a200241106a41106a290300370200200041086a200241106a41086a290300370200200020022903103702002003200328022c41016a36022c200241d0006a24000baa0201047f23004180016b22032400024020012000413c6a412010d70b450d00200341c0006a41186a2204200141186a290000370300200341c0006a41106a2205200141106a290000370300200341c0006a41086a2206200141086a2900003703002003200129000037034020032000200341c0006a10a308024020032903004201520d00200341c0006a41286a200341306a290300370300200341c0006a41206a200341286a2903003703002004200341206a2903003703002005200341186a2903003703002006200341106a290300370300200320032903083703402003417f36027c2003420037027420034100280284ee4d360270200341c0006a200341f0006a10a4080c010b200341106a280200417c6a22012001280200417f6a3602000b20034180016a24000b880101017f230041206b220324000240024020012000413c6a412010d70b0d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310810722010d00410021010c010b200128020c41004a21010b200341206a240020010b1300200041a096c500360204200020013602000b1300200041a096c500360204200020013602000bb10201027f230041206b220424000240024002400240024020022001413c6a412010d70b0d00200141386a2802002202417f4c0d01200128023021050240024020020d00410121010c010b200210382201450d030b200020023602042000200136020020012005200210d40b1a200041086a20023602000c040b200441186a200241186a290000370300200441106a200241106a290000370300200441086a200241086a29000037030020042002290000370300200120041081072202450d02200228020c4101480d0220022802082201417f4c0d00200228020021050240024020010d00410121020c010b200110382202450d020b200020013602042000200236020020022005200110d40b1a200041086a20013602000c030b1034000b1032000b200041003602000b200441206a24000b880101017f230041206b220324000240024020012000413c6a412010d70b0d00410121010c010b200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a2900003703002003200129000037030002402000200310810722010d00410021010c010b200128020c41004a21010b200341206a240020010b130020004102360204200041c098c5003602000bf0360a067f017e057f027e097f047e027f017e077f017e230041b0036b22052400200541c8026a41f0c8c800410710cb01200541e0026a4200370000200542003700d802200541c8026a41106a22064180e8c900411310cb01200541203602ac022005200541c8026a3602a802200541b8026a200541c8026a412010e4010240024020052802b80222070d00410021080c010b20052802bc02210902400240200541c0026a2802004104490d00410121082007280000220a418194ebdc03490d010b200542003702dc014100210820054100280284ee4d3602d8012005410d3602fc022005200541a8026a3602f8022005200541d8016a360288022005419c036a41013602002005420137028c03200541949fc500360288032005200541f8026a3602980320054188026a41b4dfc40020054188036a103b1a20052802d80120052802e00110d10120052802dc01450d0020052802d80110390b2009450d00200710390b200541c8026a41f0c8c800410710cb01200641086a420037000020064200370000200641bce3c900410910cb0120054188036a200541c8026a10e80642c0f0f50b210b02402005290388034202510d00200541c8026a20054188036a41106a280200220c108408200541d0016a20052802c802220920052802d00210ce0320052802d401210d20052802d0012107024020052802cc02450d00200910390b024002400240024020070d004188a0ca00413610d1014100200c41646a22072007200c4b1b210e428084afdf00210b200c210f0c010b4100200c41646a22072007200c4b1b210e428084afdf00210b0240200d20044b0d00200c210f0c010b200541c8026a41f0c8c800410710cb01200641086a420037000020064200370000200641c0e9c900410a10cb0120054188036a200541c8026a108009200528028803220741002802d8974e20071b2210200529028c03420020071b2211422088a741037422076a210903402007450d02200741786a21072009417c6a210d200941786a2109200d28020020044b0d000b201020076a280200210f42c0f4a4eb00210b201142ffffffff0183500d00201010390b200541c8026a41f0c8c800410710cb01200641086a220742003700002006420037000020064180ecc900411610cb01200541c8016a200541c8026a412010ce0320052802cc01210920052802c801210d200541c8026a41f0c8c800410710cb01200742003700002006420037000020064180ecc900411610cb0120052009200c200d4101461b36028803200541c8026a412020054188036a410410e901200541c8026a41f0c8c800410710cb012007420037000020064200370000200641f7c8c800410d10cb0120054188036a200541c8026a10bf02200529028c03420020052802880322071b211220074100280284ee4d221320071b211020032001200120034b1b2214450d01200a410020081b2115200c41016a21162012422088a74105742108200541c8026a41086a210a41002802d8974e2117200541f8026a41046a2118200541f8016a41086a211941002802e8c848211a20054188036a41106a2103200541dc026a211b4100210403402004220141016a21042000200141e0006c6a210d2008210720102109024003402007450d01200741606a21072009200d412010d70b2106200941206a210920060d000b20042014490d010c030b200220014102746a28020021072005420037038002200542003703f80120054200370390022005420037038802200541e8006a200d2903302211200d41386a290300221c428094ebdc03420010d20b20054188016a2011201c428094ebdc03420010da0b200541f8006a20052903880120054188016a41086a2903002007ad2211420010d30b20054198016a200d290320221c200d41286a290300221d428094ebdc03420010d20b200541b8016a201c201d428094ebdc03420010da0b200541a8016a20052903b801200541b8016a41086a2903002011420010d30b200529036820117e221d428094ebdc0380211e201d428094ebdc0382211f02400240024020052903a8014200417f20052903980120117e221c428094ebdc0380a7201c42ffffffffffbfb2cd3b561b201c428094ebdc03824280cab5ee01566a2209ad7d85200541a8016a41086a29030042002009410047ad7d85844200520d00200542003703b002200542003703a802200542003703c002200542003703b80220054188036a200d10960a024002402005280294030d00200542003703e801200520173602e401200541003602e0012005200e3602dc01200541003602d801200d200541d8016a10a10a0c010b200541d8016a41106a2003290300370300200541d8016a41086a20054188036a41086a29030037030020052005290388033703d8010b200a20052903d801370200200a41106a200541d8016a41106a290300370200200a41086a200541d8016a41086a290300370200200541003a00f402200520153602f0022005200d3602cc022005200e3602c8022005200541b8026a3602ec022005200541a8026a3602e80220054188036a200541c8026a200f10930802402005280290034102460d00200528028803220620052802d002470d00410021070240201620052802d40222094d0d00201620096b212041002107024020052802e402220120052802e002470d00201b200110990120052d00f402210720052802d00221060b20052802dc02222141046a2021200141027410d50b1a202120203602002005200141016a3602e402200520163602d4022005200641016a3602d0020b2005201620094b200741ff01714100477222073a00f40220054188036a200d108f0a200528028803220920052802900310e0010240200528028c03450d00200910390b20054188036a200d108e0a200528028803220920052802900310e0010240200528028c03450d00200910390b0240200d10be0241ff017122094102460d002009410171450d0020054188036a41f0c8c800410710cb01200341086a2206420037000020034200370000200341d8e7c900410810cb010240410020054188036a10d8082209200941ff01714104461b41ff0171417f6a0e03010001000b20054188036a41f0c8c800410710cb012006420037000020034200370000200341d8e7c900410810cb0120054188036a41011087090b2007450d00200541f8026a200a20052802c802109b01024020052802f8024101470d0020052802fc022207200528028003220d4f0d0020052802cc022109034020054188036a41186a200941186a2900003703002003200941106a29000037030020054188036a41086a200941086a2900003703002005200929000037038803200520073602a803200541d8016a20054188036a10950820052802d801220620052802e00110e001200741016a2107024020052802dc01450d00200610390b200d2007470d000b0b20052802cc02200a10a10a0b20052802e00241ffffffff0371450d0120052802dc0210390c010b2005290378211c200541f8006a41086a2903002122200541b8026a200f200d109f0a20052802b8022109200520052802c00222063602ac02200520093602a802200541d8016a2009200610e4010240024020052802d80122010d00410021060c010b20052802dc0121210240024020052802e00122204104490d0020012800002206418094ebdc034b0d002020417c6a410f4b0d010b2005420037028c0320052013360288032005410d3602fc022005200541a8026a3602f802200520054188036a36029802200541013602dc02200542013702cc02200541949fc5003602c8022005200541f8026a3602d80220054198026a41b4dfc400200541c8026a103b1a20052802880320052802900310d1010240200528028c03450d0020052802880310390b410021060b2021450d00200110390b024020052802bc02450d00200910390b200720064d0d0020054188036a200f200d109f0a2005280290032121200528028803210102400240411010382209450d0020092007360000200520093602c80220054290808080c0003702cc02200541c8026a41044110107720052802c802220720052802d00222096a22202022201c417f201ea7201d42ffffffffffbfb2cd3b561b201f4280cab5ee01566aad7c221d201c54ad7c221c3700082020201d37000020052802cc022120200120212007200941106a10e90102402020450d00200710390b0240200528028c03450d00200110390b20054188036a200d10960a024002402005280294030d00200542003703e801200520173602e401200541003602e0012005200e3602dc01200541003602d801200d200541d8016a10a10a0c010b200541d8016a41106a2003290300370300200541d8016a41086a20054188036a41086a29030037030020052005290388033703d8010b200a20052903d801370200200a41106a2223200541d8016a41106a2224290300370200200a41086a2225200541d8016a41086a2226290300370200200541003a00f402200520153602f0022005200d3602cc022005200e3602c802200520054188026a3602ec022005200541f8016a3602e802200541e0006a200541c8026a200f201d201c10940802400240024020052802604101470d002005280264220920052802d002460d010b20052d00f40221070c010b0240201620052802d40222074d0d00201620076b2120024020052802e402220120052802e002470d00201b200110990120052802d00221090b20052802dc02222141046a2021200141027410d50b1a202120203602002005200141016a3602e402200520163602d4022005200941016a3602d0020b2005201620074b20052d00f4024100477222073a00f40220054188036a200d108f0a200528028803220920052802900310e0010240200528028c03450d00200910390b20054188036a200d108e0a200528028803220920052802900310e0010240200528028c03450d00200910390b200d10be0241ff017122094102460d002009410171450d0020054188036a41f0c8c800410710cb01200341086a2201420037000020034200370000200341d8e7c900410810cb010240410020054188036a10d8082209200941ff01714104461b41ff0171417f6a0e03010001000b20054188036a41f0c8c800410710cb012001420037000020034200370000200341d8e7c900410810cb0120054188036a41011087090b0240200741ff0171450d00200541b8026a200a20052802c802109b01024020052802b8024101470d0020052802bc02220720052802c00222214f0d0020052802cc022109034020054188036a41186a200941186a2900003703002003200941106a29000037030020054188036a41086a200941086a2900003703002005200929000037038803200520073602a803200541d8016a20054188036a10950820052802d801220120052802e00110e001200741016a2107024020052802dc01450d00200110390b20212007470d000b0b20052802cc02200a10a10a0b024020052802e00241ffffffff0371450d0020052802dc0210390b2005420037029c022005201a36029802200542003703b002200542003703a802024002400240200d41c8006a22072802002209450d0020054198026a4100200910f603200728020022070d010b4200211c20052802a002210620052802980221094200211d0c010b200d41c0006a2802002221200741306c6a21272006ad21220340200542003703c002200542003703b802200541386a2021290300221c202141086a290300221d428094ebdc03420010d20b200541286a201c201d428094ebdc03420010da0b200541186a2005290328221c200541286a41086a290300221d2022420010d30b200541086a201c201d2011420010d30b200541c8026a200f202141106a220610a00a200541c8006a20052802c802220920052802d00210c1074200200541086a41086a2903002005290308221d417f2005290338221e20117e221c428094ebdc0380a7201c42ffffffffffbfb2cd3b561b201c428094ebdc03824280cab5ee01566aad7c221c201d54ad7c221d200541186a41086a2903002005290318221f417f201e20227e221e428094ebdc0380a7201e42ffffffffffbfb2cd3b561b201e428094ebdc03824280cab5ee01566aad7c221e201f54ad7c7d201c201e54ad7d221f201c201e7d221e201c56201f201d56201f201d511b22071b211d4200201e20071b211c200541c8006a41106a290300211e2005290350211f20052802482107024020052802cc02450d00200910390b20054188036a200f200610a00a200528029003210120052802880321092005201f420020071b221f201c7c221c3703c8022005201e420020071b201d7c201c201f54ad7c221d3703d00220092001200541c8026a411010e9010240200528028c03450d00200910390b20054188036a200610960a024002402005280294030d00200542003703e801200520173602e401200541003602e0012005200e3602dc01200541003602d8012006200541d8016a10a10a0c010b20242003290300370300202620054188036a41086a29030037030020052005290388033703d8010b200a20052903d8013702002023202429030037020020252026290300370200200541003a00f402200520153602f002200520063602cc022005200e3602c8022005200541b8026a3602ec022005200541a8026a3602e8022005200541c8026a200f201c201d1094080240024020052802004101470d002005280204220920052802d002470d000240201620052802d40222074d0d00201620076b2128024020052802e402220120052802e002470d00201b200110990120052802d00221090b20052802dc02222041046a2020200141027410d50b1a202020283602002005200141016a3602e402200520163602d4022005200941016a3602d0020b2005201620074b20052d00f4024100477222073a00f4020c010b20052d00f40221070b0240200741ff0171450d00200541f8026a200a20052802c802109b01024020052802f8024101470d0020052802fc02220720052802800322204f0d0020052802cc022109034020054188036a41186a200941186a2900003703002003200941106a29000037030020054188036a41086a200941086a2900003703002005200929000037038803200520073602a803200541d8016a20054188036a10950820052802d801220120052802e00110e001200741016a2107024020052802dc01450d00200110390b20202007470d000b0b20052802cc02200a10a10a0b024020052802e00241ffffffff0371450d0020052802dc0210390b202141306a2121200a200641086a290000370300200541c8026a41106a2201200641106a290000370300200541c8026a41186a2220200641186a290000370300200520062900003703c802200541b8026a41086a290300211c20052903b802211d024020052802a0022206200528029c02470d0020054198026a2006410110f60320052802a00221060b2005280298022209200641306c6a2207201d370320200720052903c802370300200741286a201c370300200741086a200a290300370300200741106a2001290300370300200741186a20202903003703002005200641016a22063602a00220212027470d000b200541a8026a41086a290300211d20052903a802211c0b2009450d022019290300211e20052903f801211120054188026a41086a290300211f2005290388022122200528029c022120200541d8016a41186a2207200d41186a2903003703002024200d41106a2903003703002026200d41086a2903003703002005200d2903003703d801200541c8026a200d41d0006a10b50620052802d002212320052802cc02212520052802c802212720054188036a41186a222820072903003703002003202429030037030020054188036a41086a22242026290300370300200520052903d80137038803200541a8026a41f0c8c800410710cb01200541b8026a41e4c9c800411010cb012005200c3602f8022005200541f8026a410410cc013703f801200520183602d402200520193602cc022005200541f8026a3602d0022005200541f8016a3602c80220054188026a200541c8026a108301200528029002222141206a2207417f4c0d0102400240024020070d002005410036028002200520073602fc01200541013602f8010c010b20071038220d450d024100210120054100360280022005200d3602f801200520073602fc012007410f4b0d010b200541f8016a41004110107720052802fc01210720052802f801210d20052802800221010b200d20016a222620052900a802370000202641086a200541a8026a41086a2900003700002005200141106a2201360280020240200720016b410f4b0d00200541f8016a20014110107720052802fc01210720052802f801210d20052802800221010b2011201c7c211c200d20016a222620052900b802370000202641086a200541b8026a41086a22262900003700002005200141106a22013602800220052802880221290240200720016b20214f0d00200541f8016a20012021107720052802f801210d20052802800221010b201c2011542107200d20016a2029202110d40b1a2005200120216a220d360280020240200528028c02450d0020052802880210390b2006ad212a201e201d7c211d2007ad211e200541c8026a20052802f801200d10f6080240024020052802c80222070d00200542003702bc022005201a3602b80241002101201a21074100210d0c010b20052902cc022111200520073602b802200520113702bc022011422088a7210d2011a721010b202a42c097e8b2017e2111201d201e7c211d200541c8026a41186a22212028290300370300200541c8026a41106a22282003290300370300200a202429030037030020052005290388033703c8020240200d2001470d00200541b8026a200110b90720052802b802210720052802c002210d0b2011200b7c21112007200d41d8006c6a2207201c3703102007201f370308200720223703002007202736022c20072009360220200741186a201d370300200741346a2023360200200741306a2025360200200741286a2006360200200741246a2020360200200720052903c802370338200741c0006a200a290300370300200741c8006a2028290300370300200741d0006a20212903003703002026200d41016a2207360200200a2007360200200520052903b802221c3703c802200528028002210720052802f801210d02400240201ca722010d00200d200710e0010c010b200d2007200541c8026a108809024020052802d0022207450d00200741d8006c2109200141306a210703400240200741746a2802002206450d00200641306c450d00200741706a28020010390b0240200728020041ffffff3f71450d002007417c6a28020010390b200741d8006a2107200941a87f6a22090d000b0b20052802cc022207450d00200741d8006c450d00200110390b201142c097e8b2017c2111024020052802fc01450d00200d10390b201142c0b2cd3b7c210b0c030b1032000b1034000b200b42808c8d9e027c210b0b20042014490d000c020b0b42c0d1e123210b201142ffffffff0183500d01201010390c010b201242ffffff3f83500d00201010390b200541b0036a2400200b0bc90102037f017e230041106b2202240020002802082103200028020021004101210420024280808080104200200128021841e0b5ca0041012001411c6a28020028020c1100001b22052001ad843703000240024020030d002005422088a721000c010b03402002200036020c200041016a210020022002410c6a4190b5c300106621012003417f6a22030d000b20012d000421000b0240200041ff01710d002002280200220028021841c49ec00041012000411c6a28020028020c11000021040b200241106a240020040bb10703067f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010e5010240024020022802502203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902542208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c20062008370200200241086a2003200910e401024002400240024020022802082203450d002002280210210a200228020c210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d03200241086a200128020c20076a200920076b2003200a200128021811050020022d00384102460d0120002002290308370200200041306a200241086a41306a280200360200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a290300370200200b450d06200310390c060b41002802d0a94e450d01200241113602442002200436024041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370360200241d09fc50036025c20024281808080e0d70037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242013703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200341c0a4c000200941024622091b28021021032002200241c0006a36026c200741b8c0cd0020091b200241d0006a20031103000c010b024041002802d0a94e450d002002411236024c2002411136024420022004360240200220024198016a36024841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370360200241e89fc50036025c20024281808080c0d90037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242023703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200741c0a4c000200a410246220a1b28021021072002200241c0006a36026c200941b8c0cd00200a1b200241d0006a20071103000b200b450d00200310390b200241d0006a200128020c200128021410e501200228025022030d010c020b0b2007200941d89fc5001054000b200041023a00300b200241a0016a24000baf0703067f017e037f230041a0016b22022400200241d0006a200128020c200141146a28020010e5010240024020022802502203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902542208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c20062008370200200241086a2003200910e401024002400240024020022802082203450d002002280210210a200228020c210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d03200241086a200128020c20076a200920076b2003200a20012802181105002002280234450d0120002002290308370200200041306a200241086a41306a290300370200200041286a200241086a41286a290300370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a290300370200200b450d06200310390c060b41002802d0a94e450d01200241113602442002200436024041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370360200241d09fc50036025c20024281808080e0d70037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242013703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200341c0a4c000200941024622091b28021021032002200241c0006a36026c200741b8c0cd0020091b200241d0006a20031103000c010b024041002802d0a94e450d002002411236024c2002411136024420022004360240200220024198016a36024841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370360200241e89fc50036025c20024281808080c0d90037028c012002418ea0c500ad4280808080a00c84370284012002410036028001200242023703702002411636025820024101360250200241f89fc500360254200241f89fc500ad4280808080e00284370378200741c0a4c000200a410246220a1b28021021072002200241c0006a36026c200941b8c0cd00200a1b200241d0006a20071103000b200b450d00200310390b200241d0006a200128020c200128021410e501200228025022030d010c020b0b2007200941d89fc5001054000b2000410036022c0b200241a0016a24000b830703067f017e037f23004190016b22022400200241c0006a200128020c200141146a28020010e5010240024020022802402203450d002001410c6a2104200141086a2105200141106a21060340024002402005280200220720022902442208422088a722094b0d0020012802002003200710d70b450d010b2008a7450d02200310390c020b02402006280200450d00200428020010390b2001200336020c20062008370200200241086a2003200910e401024002400240024020022802082203450d002002280210210a200228020c210b024020012d001c450d00200128020c200128021410e0010b2001280214220920052802002207490d03200241086a200128020c20076a200920076b2003200a200128021811050020022d002c4102460d0120002002290308370200200041206a200241086a41206a290300370200200041186a200241086a41186a290300370200200041106a200241086a41106a290300370200200041086a200241086a41086a290300370200200b450d06200310390c060b41002802d0a94e450d01200241113602342002200436023041002802cca94e210341002802c8a94e210741002802d4a94e210920024201370350200241d09fc50036024c20024281808080e0d70037027c2002418ea0c500ad4280808080a00c8437027420024100360270200242013703602002411636024820024101360240200241f89fc500360244200241f89fc500ad4280808080e00284370368200341c0a4c000200941024622091b28021021032002200241306a36025c200741b8c0cd0020091b200241c0006a20031103000c010b024041002802d0a94e450d002002411236023c2002411136023420022004360230200220024188016a36023841002802cca94e210741002802c8a94e210941002802d4a94e210a20024202370350200241e89fc50036024c20024281808080c0d90037027c2002418ea0c500ad4280808080a00c8437027420024100360270200242023703602002411636024820024101360240200241f89fc500360244200241f89fc500ad4280808080e00284370368200741c0a4c000200a410246220a1b28021021072002200241306a36025c200941b8c0cd00200a1b200241c0006a20071103000b200b450d00200310390b200241c0006a200128020c200128021410e501200228024022030d010c020b0b2007200941d89fc5001054000b200041023a00240b20024190016a24000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010b108200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010b108200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010b108200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010b108200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010b108200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010b108200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010b108200228020010390f0b2000410c6a220228020010b108200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010b108200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010b108200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010b108200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010b703200228020010390f0b200041286a220228020010b108200228020010390f0b0bc50303027f017e047f230041106b22032400200341086a200141086a28020022043602002003200129020022053703002005a721060240024002400240024020040d00410021070c010b20044105742108410021094100210720062101034002402009450d0020092001412010d70b4100480d00200041053a0006200041832e3b0104200041013602002000410c6a4115360200200041086a41eaa2c5003602000c040b024020012002412010d70b220941004a0d00024020090d00200041063a0006200041832e3b0104200041013602002000410c6a4113360200200041086a41ffa2c5003602000c050b200741016a21070b20012109200141206a2101200841606a22080d000b20042007490d010b024020042003280204470d00200320044101109e02200328020021060b200620074105746a220141206a2001200420076b41057410d50b1a2000410c6a200441016a36020020004100360200200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020012002290000370000200020032903003702040c020b200720041041000b200328020441ffffff3f71450d00200610390b200341106a24000bfa0201057f230041106b2202240002400240200141086a28020022034105744116722204417f4c0d00200410382205450d01200520012802002206290000370000200541086a200641086a290000370000200241103602082002200436020420022005360200200128020421052002200310ac020240024020030d00200228020821030c010b200341057421062002280208210303400240200228020420036b411f4b0d002002200341201077200228020821030b200228020020036a22042005290000370000200441086a200541086a290000370000200441106a200541106a290000370000200441186a200541186a2900003700002002200341206a2203360208200541206a2105200641606a22060d000b0b20012f010c210602402002280204220420036b41014b0d00200220034102107720022802042104200228020821030b2002280200220520036a20063b000020002005200341026a109f0102402004450d00200510390b200241106a24000f0b1034000b1032000b9434050c7f027e017f047e017f230041d0246b220924004101210a02400240200241ffff037141014b0d0041002102200041003a00222000420037030820004201370300200041286a4110360200200041246a418ca2c500360200200041206a41832e3b0100200041186a41003a00000c010b0240200341086a280200220a0d00200041033a00222000420037030820004201370300200041286a4111360200200041246a41caa1c500360200200041206a41832e3b010041002102200041186a41003a00004101210a0c010b024002400240024002400240024002400240024002400240024002400240024002400240024002400240200a41e400490d00200041043a00222000420037030820004201370300200041286a4112360200200041246a41dba1c500360200200041206a41832e3b0100200041186a41003a00000c010b200941b8116a41086a200341086a280200360200200920032902003703b811200941a0196a41186a220b200141186a290000370300200941a0196a41106a220c200141106a290000370300200941a0196a41086a220d200141086a290000370300200920012900003703a01920094180026a200941b8116a200941a0196a10b20820094180026a41086a280200210e20094180026a410c6a280200210f200928028402211002402009280280024101460d00200d200f360200200920023b01ac19200920103602a419200941baa1c5003602a019200941b8116a200941a0196a10b308200941a0196a410f6a20092d00c3113a00002009410a3602a019200941a0196a410a6a20092f00be113b01002009410b3602a0192009410c3602a019200941a0196a410c6a20092d00c0113a00002009410d3602a019200941a0196a410d6a220f20092f00c1113b0000200920092f00b8113b01a419200920092800ba113601a619200c20092d00c4113a0000200941a0196a41116a20092d00c5113a00002009410e3602a019200941a0196a41126a220c20092d00c6113a00002009410f3602a019200941a0196a41136a20092d00c7113a0000200941103602a019200941a0196a41146a220d20092d00c8113a0000200941113602a019200941a0196a41156a221120092d00c9113a0000200941123602a019200941a0196a41166a20092d00ca113a0000200941133602a019200941a0196a41176a20092d00cb113a0000200941143602a019200b20092d00cc113a0000200941153602a019200941a0196a41196a220b20092d00cd113a0000200941163602a019200941a0196a411a6a20092d00ce113a0000200941173602a019200941a0196a411b6a221220092d00cf113a0000200941183602a019200941a0196a411c6a221320092d00d0113a0000200941193602a019200941a0196a411d6a20092d00d1113a00002009411a3602a019200941a0196a411e6a20092d00d2113a00002009411b3602a019200941a0196a411f6a20092d00d3113a00002009411c3602a019200941a0196a41206a20092d00d4113a00002009411d3602a019200941c1196a20092d00d5113a00002009411e3602a019200941c2196a20092d00d6113a00002009411f3602a019200941c3196a20092d00d7113a0000200941203602a019200941a0196a410e6a2801002114201128000021112013290200211520092800a7192113200920092d00a6193a0032200920092f01a4193b0130200941306a41096a200f2d00003a00002009200941a0196a410b6a2f00003b0037200941306a41106a200d2d00003a00002009200c2f01003b013e200941306a41176a20122d00003a00002009200b2f00003b004520092015370348200920113600412009201436013a200920133600330240024020072d000022124101470d00200941b8196a200741196a290000370300200941b0196a200741116a290000370300200941a8196a200741096a290000370300200920072900013703a019420021164100210d410021170c010b20072d0001210f200941a0196a200741046a280200220d200741086a29020022184220882216a7109f01200f41004721170b200941d0006a41186a200941a0196a41186a220f2903002215370300200941d0006a41106a200941a0196a41106a220b2903002219370300200941d0006a41086a200941a0196a41086a220c290300221a370300200920092903a019221b370350200f2015370300200b2019370300200c201a3703002009201b3703a019200941f0006a200941306a200941a0196a10b5080240024020092802880122110d004101210520044101470d012000410b3a00222000420037030820004201370300200041286a4113360200200041246a41caa2c500360200200041206a41832e3b0100200041186a41003a00000c150b200941b8016a200941f0006a41c80010d40b1a0240024020044101470d00024020092802c8012005470d00200941cc016a2802002006460d020b2000410a3a00222000420037030820004201370300200041286a410e360200200041246a41fea1c500360200200041206a41832e3b010041002105200041186a41003a0000200941d4016a28020041ffffff3f71450d1620092802d00110390c160b200041093a00222000420037030820004201370300200041286a410b360200200041246a41a1a2c500360200200041206a41832e3b010041002105200041186a41003a0000200941d4016a28020041ffffff3f71450d1520092802d00110390c150b02400240200941b8016a41206a280200221c0d0041012113410021040c010b20092802d0012114201c210f41002104201c210b024003402014200f41017620046a220f4105746a2001412010d70b220c450d0141012113200b200f200c410048220c1b220b200f41016a2004200c1b22046b210f200b20044b0d000c020b0b41002113200f21040b201c41ffff0371200241ffff0371220f492013712202201c6a41ffff0371200f490d0602400240200d0d00200941b8116a200941d0006a10b708200941a0196a20092802b811220f20092802c01110b80820092902a419211520092802a019210b024020092802bc11450d00200f10390b0240200b0d0020094126360280020c0d0b2009200b3602b81120092015422088a7220c3602bc11200941a0196a200941b8116a10a202024020092802a019220f4126460d0020094180026a410472200941a0196a41047241bc0710d40b1a2009200c3602c0090b2009200f360280022015a7450d01200b1039200928028002210f0c010b2009200d3602b81120092018422088a7220b3602bc11200941a0196a200941b8116a10a202024020092802a019220f4126460d0020094180026a410472200941a0196a41047241bc0710d40b1a2009200b3602c0090b2009200f360280020b200f4126460d09200941c8096a20094180026a41c00710d40b1a20093502c0092115200941a0196a200941c8096a10b203024020092903a0192008580d002000410c3a00222000420037030820004201370300200041286a410f360200200041246a41aca2c500360200200041206a41832e3b010041002105200041186a41003a0000200941c8096a10b108200941d4016a28020041ffffff3f71450d1520092802d00110390c150b200941b8116a41186a200941d0006a41186a290300370300200941b8116a41106a200941d0006a41106a290300370300200941b8116a41086a200941d0006a41086a290300370300200920092903503703b811200941a0196a200941306a200941b8116a10b90820092802a019220720092802a81910e001024020092802a419450d00200710390b200941d0006a10b608200941206a200941dc016a20092903b801200941b8016a41086a29030010e503200941b8116a200941c8096a41c00710d40b1a200941f8186a41186a200941306a41186a290300370300200941f8186a41106a200941306a41106a290300370300200941f8186a41086a200941306a41086a290300370300200920092903303703f818411010382203450d05200341cce0c00036020c200341013602082003428180808010370200411010382207450d05200741e4e0c00036020c20074101360208200742818080801037020020032003280200417f6a2202360200024020020d002003280208200328020c2802001102000240200328020c280204450d00200328020810390b200341046a22022002280200417f6a220236020020020d00200310390b024002402007280208200941b8116a200728020c28020c1101000d00200941a0116a41003a000041022102200941a8116a41023a000020072007280200417f6a220336020020094200370390112009420137038811024020030d002007280208200728020c2802001102000240200728020c280204450d00200728020810390b200741046a22032003280200417f6a220336020020030d00200710390b200941b8116a10c103410121030c010b200941a0196a200941b8116a41c00710d40b1a200941b2246a20094180196a290300370100200941ba246a20094188196a290300370100200941c2246a20094190196a290300370100200941ca246a200941f8186a41206a2f01003b010020094180023b01a824200920092903f8183701aa24200920073602cc2420094188116a200941a0196a200941a8246a10c403200929038811420151210320094188116a41206a2d000021020b4108210702402003450d00410821072009290390114202510d002009200941a9116a22072900003703a0192009200741076a2800003600a719200221070b200920092800a7193600bf11200920092903a0193703b811200941c5196a2009290330370000200941cd196a200941306a41086a290300370000200941d5196a200941306a41106a290300370000200941dd196a200941306a41186a290300370000200941bd196a200141186a290000370000200941b5196a200141106a290000370000200941ad196a200141086a290000370000200920012900003700a519200941e5196a2009290350370000200941ed196a200941d0006a41086a290300370000200941f5196a200941d0006a41106a290300370000200941fd196a200941d0006a41186a290300370000200941981a6a20092800bf11360000200941911a6a20092903b811370000200941901a6a20073a00002009418c1a6a2006360200200941881a6a2005360200200941023a00a4192009410f3a00a019200941a0196a10c903024002402009280290110d00420021080c010b427f200aad42a0ec107e20154288277e7c42c8f7efd3017c220820094188116a41106a2903007c221520152008541b2115420121080b2000200837030820004200370300200041186a41003a0000200041106a2015370300410121030c120b200941106a2002ad42ffff038342004280a0f8fa05420010d30b200941106a41086a290300200929031022154280f89ed79d1d7c2208201554ad7c21150240024002400240200d450d0020170d012018a7450d00200d10390b200941a0196a20012008201510d403200920092900a119370380022009200941a0196a41086a2800003600870220092d00a01922024108470d064101211c0c010b200941a0196a41186a200141186a290000370300200941a0196a41106a200141106a290000370300200941a0196a41086a200141086a290000370300200920012900003703a01920092018370284022009200d36028002200941b8116a200941a0196a200941d0006a20094180026a2008201510ba08200920092900b9113703c8092009200941b8116a41086a2800003600cf0920092d00b81122024108470d014100211c0b200941b8116a41186a200941d0006a41186a2205290300370300200941b8116a41106a200941d0006a41106a2206290300370300200941b8116a41086a200941d0006a41086a220f290300370300200920092903503703b811200941a0196a41186a4200370300200941a0196a41106a22074200370300200941a0196a41086a4200370300200942003703a019200941a0196a41c7e5c000410610cb012007419081c400410610cb01200941086a200941a0196a412010ce03200928020c210b2009280208210c20094188d3c300411010ce032009280204210d2009280200211220094180026a41186a2213200141186a220329000037030020094180026a41106a2214200141106a220229000037030020094180026a41086a2217200141086a22042900003703002009200129000037038002412010382207450d0520072001290000370000200941bc196a428180808010370200200741186a2003290000370000200741106a2002290000370000200741086a2004290000370000200941b4196a200d410020121b360200200941cc196a2017290300370200200941d4196a2014290300370200200941dc196a2013290300370200200920083703a019200920073602b81920092009290380023702c419200920153703a8192009200b4100200c1b3602b019200941306a200941b8116a200941a0196a10bb08200941c5196a2009290330370000200941cd196a200941306a41086a290300370000200941d5196a200941306a41106a290300370000200941dd196a200941306a41186a290300370000200941bd196a2003290000370000200941b5196a2002290000370000200941ad196a2004290000370000200920012900003700a519200941e5196a2009290350370000200941ed196a200f290300370000200941f5196a2006290300370000200941fd196a2005290300370000200941003a00a4192009410f3a00a019200941a0196a10c903200aad2108201c450d03200842c0a9077e201642e8077e7c42a8b5b6df007c21080c080b20004200370308200020092903c80937002120004201370300200041206a20023a0000200041186a41003a0000200041286a20092800cf093600000c060b2000200e3600242000420037030820004201370300200041286a200f360000200041206a2010360000200041186a41003a00000b200a41e3004b210a410021020c130b200842d8a1077e201642b8177e7c42b0948e9e017c21080c040b20004200370308200020092903800237002120004201370300200041206a20023a0000200041186a41003a0000200041286a2009280087023600000c020b1032000b20094126360280020c020b410121050c0d0b2000420137030820004200370300200041186a41003a0000200041106a20083703000c0a0b200d450d00024020170d002018a7450d01200d10390c010b200941a0196a41186a200141186a290000370300200941a0196a41106a200141106a290000370300200941a0196a41086a200141086a290000370300200920012900003703a019200920183702bc112009200d3602b811200941c8096a200941a0196a200941d0006a200941b8116a4200420010ba08200920092900c909370388112009200941c8096a41086a28000036008f11024020092d00c809220f4108460d0020004200370308200020092903881137002120004201370300200041206a200f3a0000200041186a41003a0000200041286a200928008f113600000c020b410121074100210f2002450d030c020b4101210f20020d01200041013a00222000420037030820004201370300200041286a410f360200200041246a41bba2c500360200200041206a41832e3b0100200041186a41003a00000b02402009280280024126460d0020094180026a10b1080b0240200941d4016a28020041ffffff3f71450d0020092802d00110390b410021050c090b200941a0196a41186a200141186a290000370300200941a0196a41106a200141106a290000370300200941a0196a41086a200141086a290000370300200920012900003703a01920092802d80122032004490d0302402003200941d4016a280200470d00200941d0016a20034101109e020b20092802d00120044105746a220741206a2007200320046b41057410d50b1a200741186a200941a0196a41186a290300370000200741106a200941a0196a41106a290300370000200741086a200941a0196a41086a290300370000200720092903a0193700002009200341016a3602d801200941b8116a41186a200941d0006a41186a2207290300370300200941b8116a41106a200941d0006a41106a2203290300370300200941b8116a41086a200941d0006a41086a2204290300370300200920092903503703b811200941a0196a200941b8016a41c80010d40b1a200941306a200941b8116a200941a0196a10bb08200941c5196a2009290330370000200941cd196a200941306a41086a290300370000200941d5196a200941306a41106a290300370000200941dd196a200941306a41186a290300370000200941bd196a200141186a290000370000200941b5196a200141106a290000370000200941ad196a200141086a290000370000200920012900003700a519200941e5196a2009290350370000200941ed196a2004290300370000200941f5196a2003290300370000200941fd196a20072903003700002009418c1a6a2006360200200941881a6a2005360200200941013a00a4192009410f3a00a01920024101732107200941a0196a10c903200f0d010b200aad4290b3097e201642b8177e7c42889df190017c21080c010b200aad42f8bd087e201642e8077e7c42f0f5b1c9007c21080b200042013703082000420037030041002103200041186a41003a0000200041106a20083703002009280280024126470d0120070d020c030b200420031041000b20094180026a10b1082007450d010b0240200941d4016a28020041ffffff3f71450d0020092802d00110390b2003410173200d45720d002018a7450d00200d10390b0240200e41ffffff3f71450d00201010390b024020110d002009280288012200450d002009418c016a28020041ffffff3f71450d00200010390b200941d0246a24000f0b200d450d002018a7450d00200d10390b0240200e41ffffff3f71450d00201010390b4100210a02402005201141004771450d002009418c016a28020041ffffff3f71450d00201110390b201241014721020b024020020d0020072d000041ff01710d00200741086a280200450d00200741046a28020010390b0240200a450d00200341046a28020041ffffff3f71450d00200328020010390b200941d0246a24000bd00804077f027e037f017e230041a0016b22032400200341f8006a41186a200241186a290000370300200341f8006a41106a200241106a290000370300200341f8006a41086a200241086a29000037030020032002290000370378200341206a2001200341f8006a10b9082003280220210420032003280228220236023420032004360230200341386a2004200210e40102400240200328023822050d00410021020c010b200328023c210602400240200341386a41086a28020022024104490d00200528000021072002417c714104460d002003200541086a2201360248200241786a4110490d00200528000421082003200241686a220936024c200141086a290000210a2001290000210b200341f8006a410472210c410021020240034020092002460d01200c20026a200520026a220d41186a2d00003a00002003200241016a22013602782003200d41196a3602482001210220014120470d000b200341e8006a41026a20034185016a2d00003a0000200341f4006a41026a2003418c016a2d00003a0000200320032f017c3b0158200320032d007e3a005a2003200920016b36024c200320034183016a2f00003b016820032003418a016a2f01003b017420034186016a280100210d2003418d016a280000210920034194016a280200210c20034198016a280200210e200328007f2101200341d4006a41026a20034193016a2d00003a0000200320034191016a2f00003b01542003200341c8006a10c10120032802000d01200341f8006a200341c8006a2003280204109d0220032802782202450d01200341146a41026a200341e8006a41026a2d00003a0000200341106a41026a200341f4006a41026a2d00003a00002003410c6a41026a200341d4006a41026a2d00003a0000200320032f01583b0118200320032d005a3a001a200320032f01683b0114200320032f01743b0110200320032f01543b010c200329027c210f0c020b2003410036024c0b2003420037025c4100210220034100280284ee4d3602582003410d36026c2003200341306a3602682003200341d8006a3602742003418c016a41013602002003420137027c200341949fc5003602782003200341e8006a36028801200341f4006a41b4dfc400200341f8006a103b1a2003280258200328026010d1010240200328025c450d00200328025810390b0b2006450d00200510390b02402002450d002000200b3703002000200f37021c2000200836021420002007360210200020032f01143b002b2000200d36002e200020032f01103b00322000200a370308200041246a20032f01183b0100200041266a20032d001a3a0000200041276a20013600002000412d6a200341146a41026a2d00003a0000200041346a200341106a41026a2d00003a0000200020093600352000413c6a200c360000200041c0006a200e360000200020032f010c3b00392000413b6a2003410c6a41026a2d00003a00000b2000200236021802402003280224450d00200410390b200341a0016a24000bd00202047f027e23004190016b22012400200141c0006a200010b708200141d0006a200128024022022001280248220310b80802400240200128025022000d00410021040c010b2002200310e001200141186a41086a200141d0006a41106a290300370300200141186a41106a200141d0006a41186a290300370300200141186a41186a200141d0006a41206a290300370300200141186a41206a200141f8006a2802003602002001200141d0006a41086a29030037031820014188016a290300210520014180016a290300210620012802542103200021040b02402001280244450d00200210390b02402000450d00200141e8006a200141346a290200370300200141e0006a2001412c6a290200370300200141d8006a200141246a2902003703002001200129021c370350200141086a200141d0006a2006200510e5032003450d00200410390b20014190016a24000bd20201047f230041206b22022400200241eda1c500410810cb01200241106a419ca2c500410510cb010240412010382203450d0020032001290000370000200341186a2204200141186a290000370000200341106a2205200141106a290000370000200341086a200141086a290000370000412010382201450d0020012003290000370000200141186a2004290000370000200141106a2005290000370000200141086a2204200341086a2900003700002003103941c00010382203450d002003200229000037000020032002290010370010200341086a200241086a290000370000200341186a200241106a41086a29000037000020002003360200200041046a42c0808080800837020020032001290000370020200341286a2004290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011039200241206a24000f0b1032000bfd07020f7f027e23004180016b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360234200320043602302003200341306a10c1010240024002400240024020032802000d002003280234220220032802042206490d002006417f4c0d014101210102402006450d00200610382201450d0320014100200610d60b1a0b200120032802302207200610d40b2108200720066a2109200220066b210a200341d8006a410472210b41002101024002400340200a2001460d01200b20016a200920016a22072d00003a00002003200141016a22023602582003200741016a3602302002210120024120470d000b200341c8006a41026a2207200341e5006a2d00003a0000200341d4006a41026a220b200341ec006a2d00003a0000200320032f015c3b0138200320032d005e3a003a2003200341e3006a2f00003b01482003200341ea006a2f01003b01542003200a20026b2201360234200341d8006a410e6a280100210a200341d8006a41156a280000210c200341d8006a411c6a280200210d200341f8006a280200210e200328005f210f200341d0006a41026a2210200341f3006a2d00003a00002003200341f1006a2f00003b0150200141104f0d0520060d010c020b200341003602342006450d010b200810390b2003420037023c20034100280284ee4d3602382003410d36024c2003200341086a3602482003200341386a360254200341ec006a41013602002003420137025c200341949fc5003602582003200341c8006a360268200341d4006a41b4dfc400200341d8006a103b1a2003280238200328024010d1010240200328023c450d00200328023810390b200041003602000c030b1034000b1032000b200341286a41026a221120072d00003a0000200341246a41026a2207200b2d00003a0000200341206a41026a220b20102d00003a0000200320032f01383b012c200320032d003a3a002e200320032f01483b0128200320032f01543b0124200320032f01503b01202003200141706a3602342003200920026a220141106a36023020012900002112200141086a2900002113200041086a200636020020002006360204200020083602002000410c6a20032f012c3b01002000410e6a20032d002e3a00002000410f6a200f360000200020032f01283b0013200041156a20112d00003a00002000200a360016200020032f01243b001a2000411c6a20072d00003a00002000200c36001d200041386a2013370300200041306a2012370300200041286a200e360000200041246a200d360000200041236a200b2d00003a0000200020032f01203b00210b2005450d00200410390b20034180016a24000b990601067f230041e0006b22032400200341eda1c500410810cb01200341106a41f5a1c500410910cb0102400240412010382204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004412010cc01370340200341dc006a2201200441206a360200200320043602582003200341c0006a41086a3602542003200341c0006a360250200341206a200341d0006a10830120041039412010382204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a290000370000200341c0006a2004412010ca012001200441206a360200200320043602582003200341c0006a41106a3602542003200341c0006a360250200341306a200341d0006a1083012004103920032802282201200328023822026a41206a2204417f4c0d010240024020040d00410121050c010b200410382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200436020002402004410f4b0d00200041004110107720072802002106200028020021050b200520066a22042003290000370000200441086a200341086a2900003700002007200641106a220436020002402008280200220520046b410f4b0d002000200441101077200041046a2802002105200041086a28020021040b2000280200220620046a22072003290010370000200741086a200341106a41086a290000370000200041086a2207200441106a2204360200200328022021080240200520046b20014f0d002000200420011077200041046a280200210520072802002104200028020021060b200620046a2008200110d40b1a2007200420016a2204360200200328023021010240200520046b20024f0d002000200420021077200041086a2802002104200028020021060b200620046a2001200210d40b1a200041086a200420026a36020002402003280234450d00200328023010390b02402003280224450d00200328022010390b200341e0006a24000f0b1032000b1034000bf80703037f027e037f230041d0006b22062400200641106a200210b70820062802102207200628021810e301210802402006280214450d00200710390b024002400240024002402008450d00200041832e3b0100200041086a410d360200200041046a41dda2c500360200200041026a410d3a00000c010b2006200341086a2802002208411f6a410576ad42004280a0f8fa05420010d30b200641106a2001200420062903007c22094280f89ed79d1d7c220a2005200641086a2903007c2009200454ad7c200a200954ad7c220410d403200620062900113703402006200641106a41086a2207280000360047024020062d0010220b4108470d002007200141086a290000370300200641106a41106a200141106a290000370300200641106a41186a200141186a290000370300200620012900003703102003280204210c2003280200210b200641306a41eda1c500410810cb01200641c0006a419ca2c500410510cb01412010382203450d0320032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a2201200241086a290000370000412010382202450d0320022003290000370000200241186a2207200341186a290000370000200241106a220d200341106a290000370000200241086a20012900003700002003103941c00010382203450d032003200629004037001020032006290030370000200341086a200641306a41086a290000370000200341186a200641c0006a41086a29000037000020032002290000370020200341286a200241086a290000370000200341306a200d290000370000200341386a200729000037000020021039200841146a2202417f4c0d040240024020020d00410121010c010b200210382201450d040b200641003602482006200236024420062001360240200b2008200641c0006a10b902024020062802442208200628024822076b411f4b0d00200641c0006a20074120107720062802442108200628024821070b2006280240220120076a22022006290310370000200241086a200641106a41086a290300370000200241106a200641106a41106a290300370000200241186a200641106a41186a2903003700002006200741206a22023602480240200820026b410f4b0d00200641c0006a2002411010772006280244210820062802402101200628024821020b200120026a220720043700082007200a370000200341c0002001200241106a10e90102402008450d00200110390b200310390240200c450d00200b10390b200041083a00000c020b200020062903403700012000200b3a0000200041086a20062800473600000b200341046a280200450d00200328020010390b200641d0006a24000f0b1032000b1034000be10503047f027e037f230041306b22032400200341106a41186a200141186a290000370300200341106a41106a200141106a290000370300200341106a41086a200141086a2900003703002003200129000037031020032000200341106a10b9082003280200210420032802082105200341003602182003420137031020022802102101200341106a41004104107720032802102200200328021822066a20013600002003200641046a2201360218200241146a28020021060240200328021420016b41034b0d00200341106a20014104107720032802102100200328021821010b200020016a20063600002003200141046a2201360218200241086a29030021072002290300210802402003280214220920016b410f4b0d00200341106a2001411010772003280214210920032802102100200328021821010b200020016a22062007370008200620083700002003200141106a2206360218200241246a21010240200920066b411f4b0d00200341106a20064120107720032802102100200328021821060b200020066a22002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a2900003700002003200641206a3602182002280218210a200341106a200241206a280200220110ac020240024020010d002003280210210b200328021821000c010b2001410574210920032802182100200a210103400240200328021420006b411f4b0d00200341106a200041201077200328021821000b2003280210220b20006a22062001290000370000200641086a200141086a290000370000200641106a200141106a290000370000200641186a200141186a2900003700002003200041206a2200360218200141206a2101200941606a22090d000b0b20042005200b200010e90102402003280214450d00200b10390b02402003280204450d00200410390b02402002411c6a28020041ffffff3f71450d00200a10390b200341306a24000bff0504047f017e067f047e230041a0016b220224002002200110c10102400240024002402002280200450d00200041003602000c010b200228020422032001280204220441386e2205200520034b1bad42387e2206422088a70d012006a72207417f4c0d010240024020070d00410821080c010b200710382208450d030b4100210520024100360210200220083602082002200741386e36020c024002402003450d00200241f8006a410172210703402004450d0220012004417f6a220436020420012001280200220941016a360200420021060240024020092d00000e020100040b200241f8006a200110860220022d00784101460d03200241d8006a41186a220a200741186a290000370300200241d8006a41106a220b200741106a290000370300200241d8006a41086a220c200741086a2900003703002002200729000037035820012802042204410f4d0d032001200441706a220436020420012001280200220941106a360200200241386a41086a200c290300370300200241386a41106a200b290300370300200241386a41186a200a29030037030020022002290358370338200941086a290000210d2009290000210e420121060b200241186a41186a2209200241386a41186a290300370300200241186a41106a220a200241386a41106a290300370300200241186a41086a220b200241386a41086a2903003703002002200229033837031802402005200228020c470d00200241086a2005410110bd0820022802082108200228021021050b2008200541386c6a220520063703002005200229031837030820092903002106200a290300210f200b2903002110200541306a200d370300200541286a200e370300200541106a2010370300200541186a200f370300200541206a20063703002002200228021041016a22053602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b20004100360200200228020c2205450d00200541386c450d00200228020810390b200241a0016a24000f0b1034000b1032000bd70102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42387e2205422088a74541037421022005a721040240024020010d00200341003602100c010b200341106a41086a41083602002003200141386c360214200320002802003602100b200320042002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141386e360200200341206a24000f0b1034000b920101047f230041106b22022400024002402000280208220341386c4104722204417f4c0d0020002802002100200410382205450d012002410036020820022004360204200220053602002002200310ac0220002003200210a9022001280200200128020420022802002200200228020810e90102402002280204450d00200010390b200241106a24000f0b1034000b1032000b1300200041043602042000419ca5c5003602000b340020004186e8c00036020420004100360200200041146a4100360200200041106a41b8c0cd00360200200041086a42093702000b8a0803027f017e027f230041c00b6b220224000240024002400240024002400240024002400240024002400240024020012d00000e0b0102030405060708090a00010b200241186a200141086a10b40341e00710382203450d0b200241e0036a200141046a28020010c1082003200241e0036a41e00710d40b2101200041086a200241186a41c80310d40b1a2000410a3a0000200041046a20013602000c0a0b200241186a200141046a10b303200241e0036a200141106a10c609200041003a00002000410c6a200241186a41086a280200360200200041046a2002290318370200200041106a20022903e003370200200041186a200241e0036a41086a2802003602000c090b200241186a200141046a10b303200241e0036a200141106a10c609200041013a00002000410c6a200241186a41086a280200360200200041046a2002290318370200200041106a20022903e003370200200041186a200241e0036a41086a2802003602000c080b200241186a200141046a10b303200241e0036a200141106a10c609200041023a00002000410c6a200241186a41086a280200360200200041046a2002290318370200200041106a20022903e003370200200041186a200241e0036a41086a2802003602000c070b200141106a2903002104200241e0036a200141046a10b303200041106a2004370300200041033a0000200041046a20022903e0033702002000410c6a200241e8036a2802003602000c060b200241186a200141046a10b303200241e0036a200141106a10b4032000410c6a200241206a280200360200200041046a2002290318370200200041106a200241e0036a41c80310d40b1a200041043a00000c050b200241086a200141046a10b303200241e0036a200141206a10b403200241186a200141106a10c9092000410c6a200241086a41086a280200360200200041046a2002290308370200200041206a200241e0036a41c80310d40b1a200041053a0000200041186a200241186a41086a280200360200200041106a20022903183702000c040b200141d8076a2802002203417f4c0d05200141d0076a2802002105200141086a290300210420012d000121010240024020030d00410121060c010b200310382206450d050b20062005200310d40b2105200041d8076a2003360200200041d4076a2003360200200041d0076a2005360200200041106a4126360200200041086a2004370300200020013a0001200041063a00000c030b200041073a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000c020b200041083a0000200041046a200141046a2802003602000c010b200041093a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000b200241c00b6a24000f0b1032000b1034000bf90a02077f027e230041a0026b22042400200441d0016a200110b405200441f8016a20042802d001220520042802d80110c40820044180026a280200410020042802f80122011b210620042802fc01210741002802d8974e2108024020042802d401450d00200510390b2007410020011b21052001200820011b21090240024002402006450d00200441f8016a4104722107024002400240200341ff0171220a4106460d00200641286c2106200921010340200141246a2d000022084106460d04200441f8016a41206a200141206a280200360200200441f8016a41186a200141186a290200370300200441f8016a41106a200141106a290200370300200441f8016a41086a200141086a290200370300200420012902003703f801024020072002412010d70b0d002008200a460d030b200141286a2101200641586a22060d000c040b0b200641286c2106200921010340200141246a2d000022034106460d03200441f8016a41206a200141206a280200360200200441f8016a41186a200141186a290200370300200441f8016a41106a200141106a290200370300200441f8016a41086a200141086a290200370300200420012902003703f801024020072002412010d70b450d00200141286a2101200641586a2206450d040c010b0b200441d0016a41206a200141206a280200360200200441d0016a41186a200141186a290200370300200441d0016a41106a200141106a290200370300200441d0016a41086a200141086a290200370300200441ce016a200141276a2d00003a0000200420012902003703d0012004200141256a2f00003b01cc010c010b200441d0016a41206a200141206a280200360200200441d0016a41186a200141186a290200370300200441d0016a41106a200141106a290200370300200441d0016a41086a200141086a290200370300200441ce016a200141276a2d00003a0000200420012902003703d0012004200141256a2f00003b01cc010b200441a8016a41206a200441d0016a41206a2802002201360200200441a8016a41186a200441d0016a41186a290300220b370300200441a8016a41106a200441d0016a41106a290300220c370300200441fc006a41026a2202200441cc016a41026a2d00003a000020044180016a41086a2207200441d0016a41086a29030037030020044180016a41106a2206200c37030020044180016a41186a2208200b37030020044180016a41206a220a2001360200200420042f01cc013b017c200420042903d00137038001200341ff01714106460d00200441d8006a41206a200a2802002201360200200441d8006a41186a2008290300220b370300200441d8006a41106a2006290300220c370300200441046a41026a220620022d00003a0000200441326a410a6a2007290300370100200441326a41126a200c370100200441326a411a6a200b370100200441326a41226a2001360100200420042f017c3b01042004200429038001370134200441086a411e6a200441326a411e6a290100370100200441086a41186a200441326a41186a290100370300200441086a41106a200441326a41106a290100370300200441086a41086a200441326a41086a29010037030020042004290132370308200041286a20033a0000200041246a200441086a41226a2801003601002000411c6a200441086a411a6a290100370100200041146a200441086a41126a2901003701002000410c6a200441086a410a6a2901003701002000200429010a37010420004100360200200020042f01043b00292000412b6a20062d00003a00002005450d02200541286c450d020c010b2000410c6a4108360200200041086a4197b7c500360200200041023a0006200041832c3b0104200041013602002005450d01200541286c450d010b200910390b200441a0026a24000be10701037f230041d0136b22032400200341086a41186a200141186a290000370300200341086a41106a200141106a290000370300200341086a41086a200141086a2900003703002003200129000037030802400240411010382204450d00200441cce0c00036020c200441013602082004428180808010370200411010382201450d00200141e4e0c00036020c20014101360208200142818080801037020020042004280200417f6a2205360200024020050d002004280208200428020c2802001102000240200428020c280204450d00200428020810390b200441046a22052005280200417f6a220536020020050d00200410390b200128020041016a220441014d0d0120012004360200412c10382205450d0020052001360200200520002902003702042005410c6a200041086a290200370200200541146a200041106a2902003702002005411c6a200041186a290200370200200541246a200041206a290200370200411010382204450d0020044190e8c00036020c20042005360208200442818080801037020020012001280200417f6a2205360200024020050d002001280208200128020c2802001102000240200128020c280204450d00200128020810390b200141046a22052005280200417f6a220536020020050d00200110390b200341e0006a200241c00710d40b1a024002402004280208200341e0006a200428020c28020c1101000d00200341c8006a41003a000041022105200341d0006a41023a000020042004280200417f6a22013602002003420037033820034201370330024020010d002004280208200428020c2802001102000240200428020c280204450d00200428020810390b200441046a22012001280200417f6a220136020020010d00200410390b200341e0006a10c103410121040c010b200341a0086a200341e0006a41c00710d40b1a200341b2136a200341106a290300370100200341ba136a200341186a290300370100200341c2136a200341206a290300370100200341ca136a200341086a41206a2f01003b010020034180023b01a813200320032903083701aa13200320043602cc13200341306a200341a0086a200341a8136a10c40320032903304201512104200341306a41206a2d000021050b4108210102402004450d004108210120032903384202510d002003200341d1006a22012900003703a0082003200141076a2800003600a708200521010b200320032800a708360067200320032903a008370360200341b0086a2003280067360000200341a9086a2003290360370000200341a8086a20013a0000200341003a00a4082003410e3a00a008200341a0086a10c903200341d0136a24000f0b1032000b00000b8b0d03057f017e177f230041a0016b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10c1010240024002400240024020032802000d00200328020422062003280224220741286e2201200120064b1bad42287e2208422088a70d012008a72201417f4c0d010240024020010d00410421090c010b200110382209450d030b4100210a20034100360238200320093602302003200141286e220136023402400240024020060d004100210a0c010b200341f8006a410472210b200341f8006a41196a210c200341f8006a41126a210d200341f8006a410b6a210e4100210f034020072110200f41016a210f41002101024002400240034020102001460d01200b20016a200328022022112d00003a00002003200141016a22023602782003201141016a3602202002210120024120470d000b2003419c016a41026a2201200e41026a2d00003a0000200341f4006a41026a2212200d41026a2d00003a00002003200b2f01003b01282003200e2f00003b019c012003200d2f00003b01742003200b41026a2d00003a002a20032802980121132003280294012114200328008d0121152003280186012116200328007f2117200341f0006a41026a2218200c41026a2d00003a00002003200c2f00003b01704100210720102002460d012003201141026a3602202002417f7320106a21074100211902400240024002400240024020112d00010e06050001020304070b410121190c040b410221190c030b410321190c020b410421190c010b410521190b20074104490d01200341ec006a41026a20012d00003a0000200341e8006a41026a20122d00003a0000200341e4006a41026a20182d00003a0000200320032f01283b0178200320032d002a3a007a200320032f019c013b016c200320032f01743b0168200320032f01703b01642003201141066a360220201020026b417b6a21072011280002211a2017211b2016211c2015211d2014211e2013211f0c020b410021070b410621190b200341dc006a41026a2201200341ec006a41026a2d00003a0000200341d8006a41026a2202200341e8006a41026a2d00003a0000200341d4006a41026a2211200341e4006a41026a2d00003a0000200341d0006a41026a2210200341286a41026a2d00003a0000200320032d007a3a0062200320032f01783b0160200320032f016c3b015c200320032f01683b0158200320032f01643b0154200320032f00283b015020194106460d02200341c8006a41026a221220012d00003a0000200341c4006a41026a221320022d00003a0000200341c0006a41026a220220112d00003a00002003413c6a41026a221120102d00003a0000200320032d00623a004e200320032f01603b014c200320032f015c3b0148200320032f01583b0144200320032f01543b0140200320032f01503b013c0240200a2003280234470d00200341306a200a108303200328023021092003280238210a0b2009200a41286c6a2201201a360200200141066a20032d004e3a0000200120032f014c3b01042001410d6a20122d00003a00002001410b6a20032f01483b0000200141076a201b3600002001410e6a201c360000200141146a20132d00003a0000200141126a20032f01443b0000200141156a201d360000200141196a20032f01403b00002001411b6a20022d00003a0000200120193a0024200141206a201f3600002001411c6a201e360000200141276a20112d00003a0000200120032f013c3b00252003200328023841016a220a360238200f2006470d000b2003200736022420032802342101200328023021090b2009450d012007410f4b0d042001450d01200141286c450d01200910390c010b2003200736022420032802342201450d00200141286c450d00200328023010390b2003420037023420034100280284ee4d3602302003410d36022c2003200341086a3602282003200341306a36029c012003418c016a41013602002003420137027c200341949fc5003602782003200341286a360288012003419c016a41b4dfc400200341f8006a103b1a2003280230200328023810d10102402003280234450d00200328023010390b200041003602000c030b1034000b1032000b2000200136020420002009360200200041106a20032802202201290000370300200041086a200a360200200041186a200141086a2900003703000b2005450d00200410390b200341a0016a24000bef0501067f230041106b220224000240411a10382203450d002002421a37020420022003360200200320012802002204290000370000200341086a200441086a290000370000200241103602082001280204210320024110412010772002280204210520022802002206200228020822076a22042003290000370000200441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a2900003700002002200741206a2203360208200128020821040240200520036b41034b0d00200220034104107720022802002106200228020821030b200620036a20043600002002200341046a2203360208200128020c21040240200228020420036b41034b0d002002200341041077200228020821030b200228020020036a20043600002002200341046a22033602080240024002400240024002400240024020012802102d00000e06000102030405070b024020022802042003470d002002200341011077200228020821030b200228020020036a41003a0000200341016a21030c050b024020022802042003470d002002200341011077200228020821030b200228020020036a41013a0000200341016a21030c040b024020022802042003470d002002200341011077200228020821030b200228020020036a41023a0000200341016a21030c030b024020022802042003470d002002200341011077200228020821030b200228020020036a41033a0000200341016a21030c020b024020022802042003470d002002200341011077200228020821030b200228020020036a41043a0000200341016a21030c010b024020022802042003470d002002200341011077200228020821030b200228020020036a41053a0000200341016a21030b200220033602080b20012f011421010240200228020420036b41014b0d002002200341021077200228020821030b200228020020036a20013b0000200020022802002201200341026a109f0102402002280204450d00200110390b200241106a24000f0b1032000ba81103057f017e187f230041e0016b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10c1010240024002400240024020032802000d00200328020422062003280224220741c4006e2201200120064b1bad42c4007e2208422088a70d012008a72201417f4c0d010240024020010d00410421020c010b200110382202450d030b4100210920034100360238200320023602302003200141c4006e2201360234024002402006450d00200341b8016a410472210a200341b8016a41196a210b200341b8016a41126a210c200341b8016a410b6a210d2003280224210e0240024002400340200941016a2109410021010340200e2001460d03200a20016a200328022022072d00003a00002003200141016a22023602b8012003200741016a3602202002210120024120470d000b200341a4016a41026a220f200d41026a22102d00003a0000200341a0016a41026a2211200c41026a22122d00003a00002003200e20026b22133602242003200a2f01003b01a8012003200d2f00003b01a4012003200c2f00003b01a0012003200a41026a22142d00003a00aa0120032800bf01211520032801c601211620032800cd01211720032802d401211820032802d80121192003419c016a41026a221a200b41026a221b2d00003a00002003200b2f00003b019c012002200e6b211c410021010340201c20016a450d02200a20016a200720016a220e41016a2d00003a00002003200141016a22023602b8012003200e41026a3602202013417f6a21132002210120024120470d000b200341b4016a41026a220120102d00003a0000200341b0016a41026a221c20122d00003a00002003200a2f01003b01282003200d2f00003b01b4012003200c2f00003b01b001200320142d00003a002a2003201336022420032800bf01211020032801c601211220032800cd01211420032802d401211d20032802d801211e200341ac016a41026a221f201b2d00003a00002003200b2f00003b01ac0120134104490d0320034194016a41026a221b200f2d00003a000020034190016a41026a220f20112d00003a00002003418c016a41026a2211201a2d00003a0000200320032f01a8013b019801200320032d00aa013a009a01200320032f01a4013b019401200320032f01a0013b019001200320032f019c013b018c0120032013417c6a220e3602242003200720026a220241056a360220200241016a280000211a20034184016a41026a220220012d00003a000020034180016a41026a2201201c2d00003a0000200341fc006a41026a2207201f2d00003a0000200320032d002a3a008a01200320032f01283b018801200320032f01b4013b018401200320032f01b0013b018001200320032f01ac013b017c200320032d009a013a007a200320032f0198013b0178200341f4006a41026a221c201b2d00003a0000200320032f0194013b0174200341f0006a41026a221b200f2d00003a0000200320032f0190013b0170200341ec006a41026a220f20112d00003a0000200320032f018c013b016c200320032d008a013a006a200320032f0188013b0168200341e4006a41026a221120022d00003a0000200320032f0184013b0164200341e0006a41026a220220012d00003a0000200320032f0180013b0160200341dc006a41026a220120072d00003a0000200320032f017c3b015c200320032d007a3a005a200320032f01783b0158200341d4006a41026a221f201c2d00003a0000200320032f01743b0154200341d0006a41026a221c201b2d00003a0000200320032f01703b0150200341cc006a41026a221b200f2d00003a0000200320032f016c3b014c200320032d006a3a004a200320032f01683b0148200341c4006a41026a220f20112d00003a0000200320032f01643b0144200341c0006a41026a221120022d00003a0000200320032f01603b01402003413c6a41026a222020012d00003a0000200320032f015c3b013c0240200328023822072003280234470d00200341306a2007108903200328023821070b20032802302202200741c4006c6a2201201a360200200120032f01583b0104200141066a20032d005a3a0000200141076a20153600002001410b6a20032f01543b00002001410d6a201f2d00003a00002001410e6a2016360000200141126a20032f01503b0000200141146a201c2d00003a0000200141156a2017360000200141196a20032f014c3b00002001411b6a201b2d00003a0000200141206a20193600002001411c6a2018360000200141276a20103600002001412e6a2012360000200141356a2014360000200120032f01483b0124200141266a20032d004a3a00002001412b6a20032f01443b00002001412d6a200f2d00003a0000200141326a20032f01403b0000200141346a20112d00003a0000200141396a20032f013c3b00002001413b6a20202d00003a0000200141c0006a201e3600002001413c6a201d3600002003200741016a221c36023820092006470d000b2013417c6a2107200328023421010c040b200341003602240c010b200341003602240b20032802342201450d02200141c4006c450d02200328023010390c020b2002450d014100211c0b2007410f4b0d032001450d00200141c4006c450d00200210390b2003420037023420034100280284ee4d3602302003410d36022c2003200341086a3602282003200341306a3602b401200341cc016a4101360200200342013702bc01200341949fc5003602b8012003200341286a3602c801200341b4016a41b4dfc400200341b8016a103b1a2003280230200328023810d10102402003280234450d00200328023010390b200041003602000c030b1034000b1032000b2000200136020420002002360200200041106a20032802202201290000370300200041086a201c360200200041186a200141086a2900003703000b2005450d00200410390b200341e0016a24000be90102047f027e230041106b22032400024002402002280208220441c4006c41146a2205417f4c0d000240024020050d00410121060c010b200510382206450d02200228020821040b200341003602082003200536020420032006360200200228020020042003108a06200241186a290300210720022903102108024020032802042204200328020822026b410f4b0d00200320024110107720032802042104200328020821020b2003280200220520026a2206200737000820062008370000200020012005200241106a10e90102402004450d00200510390b200341106a24000f0b1034000b1032000bd40103037f027e017f230041106b2203240002400240200228020841286c41146a2204417f4c0d00200410382205450d01200341003602082003200436020420032005360200200228020020022802082003109606200241186a290300210620022903102107024020032802042205200328020822026b410f4b0d00200320024110107720032802042105200328020821020b2003280200220420026a2208200637000820082007370000200020012004200241106a10e90102402005450d00200410390b200341106a24000f0b1034000b1032000b130020004102360204200041b0b7c5003602000bd60201017f230041d0006b220524002005200436020420052003360200024002400240200241074b0d0041002802d0a94e450d0141002802cca94e210241002802c8a94e210341002802d4a94e2104200541246a41b8c0cd00360200200541186a42013703002005413c6a41f39fc000ad4280808080b00b84370200200541286a4200370300200541106a4113360200200541e09fc00036020c200541306a41e09fc000ad4280808080b00284370300200541d89fc00036021420054281808080b00e3702442005410036023820054101360208200341b8c0cd00200441024622041b200541086a200241c0a4c00020041b2802101103000c010b2002417c714108460d0020012800082102200541086a200510bc08024020052802082203450d002000200529020c37020820002003360204200020023602000c020b200041003602040c010b200041003602040b200541d0006a24000ba51f06067f017e017f017e027f027e230041a00d6b22002400200041b0026a22014200370300200041a8026a2202420037030020004198026a41086a220342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2204290000370300200020002900c00b37039802200041c00b6a41c0d7c700410b10cb0120012004290000370300200220002900c00b370300200041b8086a20004198026a10ea06024020002d00b8084102470d002001420037030020024200370300200342003703002000420037039802200041c00b6a41c7e5c000410610cb0120032004290000370300200020002900c00b37039802200041c00b6a41c481c400410610cb01200241086a2004290000370000200220002900c00b370000200041b8086a20004198026a10d20720002802b808220341002802d8974e20031b21050240024020002902bc08420020031b2206422088a722070d00420321080c010b200741246c2104200041b8086a41086a21092005210302400340024020032d00004101470d00200341016a2800002101200341086a280200210a2000200341106a2802003602d40b2000200a3602d00b200141c28289aa04470d00200041b8086a200041d00b6a10990920002903b80822084203510d0020004198026a200941f00010d40b1a200041306a20004198026a41f00010d40b1a0c020b200341246a21032004415c6a22040d000b420321080b2007450d00200741246c21042005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032004415c6a22040d000b0b02402006a72203450d00200341246c450d00200510390b0240024020084203520d00200041003a00d8060c010b200020083703a001200041a0016a41086a200041306a41f00010d40b2109200041b0026a22014200370300200041a8026a220a420037030020004198026a41086a220342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2204290000370300200020002900c00b37039802200041c00b6a41f4d3c700410b10cb01200241086a22072004290000370000200220002900c00b370000200041206a20004198026a10ee0420002903a8012106024002402000280220450d0020002903284200520d010b20014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41f4d3c700410b10cb0120072004290000370000200220002900c00b370000200020063703b80820004198026a4120200041b8086a410810e90120014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41a8d3c700410b10cb0120072004290000370000200220002900c00b370000200041b8086a20004198026a10f30820002802b808210520002902bc08210b20014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41b8d4c700410a10cb0120072004290000370000200220002900c00b370000200b420020051b210c200b42808080807083420020051b210b200541002802e8c84820051b2103200041b8086a20004198026a10f0070240024020002d00b8084101460d00200041e80b6a4200370300200041e00b6a4200370300200041d80b6a4200370300200042003703d00b0c010b200041e80b6a200041d1086a290000370300200041e00b6a200041c9086a290000370300200041d80b6a200041c1086a290000370300200020002900b9083703d00b0b200041b8086a41106a20002903d00b370300200041b8086a41086a200b200c42ffffffff0f8384370300200041b8086a41186a200041d00b6a41086a290300370300200041d8086a200041d00b6a41106a290300370300200041b8086a41286a200041d00b6a41186a290300370300200020033602bc08200041003602b80820004198026a200041b8086a10c202200041e3066a20004198026a41086a28020036000020002000290398023700db06200041a4026a200041df066a290000370000200041c28289aa0436009902200041023a009802200020002900d80637009d0220004198026a10c302200ca72204450d00200441286c450d00200310390b200041b0026a2201420037030020004198026a41106a220a420037030020004198026a41086a220342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2204290000370300200020002900c00b37039802200041c00b6a41a4d4c700410b10cb01200241086a22072004290000370000200220002900c00b370000200041106a20004198026a10ee04200028021021052000290318210b20014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41fcd8c700410810cb0120072004290000370000200220002900c00b370000200042002006200b42017c420120051b7d220b200b2006561b3e02b80820004198026a4120200041b8086a410410e90120014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41a4d4c700410b10cb0120072004290000370000200220002900c00b370000200020063703b80820004198026a4120200041b8086a410810e901024020084201520d00200041003a00d8060c010b200041a0016a41106a280200210520014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41a8d3c700410b10cb0120072004290000370000200220002900c00b370000200041b8086a20004198026a10f3084100210420002802b808220341002802e8c84820031b21010240200520002902bc08420020031b220b422088a74f0d00200041d8066a41186a2001200541286c6a220341186a290000370300200041d8066a41106a200341106a290000370300200041d8066a41086a200341086a290000370300200020032900003703d806200041b8086a200041d8066a10a60120002802b8082103200041d00b6a200041b8086a41047241c40110d40b1a20034101460d002009410c6a210a20004198056a20004198026a41086a200041d00b6a41046a41c00110d40b220341c00110d40b1a200041d8066a20004198056a41c00110d40b1a20004198026a41186a420037030020004198026a41106a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2207290000370300200020002900c00b37039802200041c00b6a41b8d4c700410a10cb01200241086a2007290000370000200220002900c00b370000200041b8086a20004198026a10f0070240024020002d00b8084101460d00200041b0086a4200370300200041a8086a4200370300200041a0086a420037030020004200370398080c010b200041b0086a200041d1086a290000370300200041a8086a200041c9086a290000370300200041a0086a200041c1086a290000370300200020002900b908370398080b200041b0026a420037030020004198026a41106a420037030020004198026a41086a220342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2207290000370300200020002900c00b37039802200041c00b6a4180d3c700410a10cb01200241086a2007290000370000200220002900c00b370000200020004198026a10ee042000290308210c20002802002103200041d00b6a41bcbbc7004104108c01200041d00b6a41dfcbc000410b2006108e01200041d00b6a41eacbc000410d200c420020031b108e01200041d00b6a41f7cbc000411020004198086a4120108d0120004198026a200041d00b6a41d00110d40b1a200041b8086a200a200041d8066a20004198026a10ed0720002802b8084101460d0020004198026a200041b8086a41086a41800310d40b1a200041b8086a20004198026a41800310d40b1a200041d00b6a41d0d4c4004109108c01200041d00b6a41b8c0cd00410041cccbc0004113108d01200041d00b6a41d9d4c4004106200041d8096a4120108d01200041d00b6a41dfd4c4004107200041980b6a4120108d01200041f1066a4200370000200041e9066a4200370000200041d8066a41096a4200370000200042003700d906200041d00b6a41b8c0cd004100200041d8066a4101724120108f01410021030340200041d00b6a20036a41003a0000200341016a220341c801470d000b410121040b200020043a00d806200ba72203450d00200341286c450d00200110390b41002103024020084200520d00200041d80b6a200041e1066a290000370300200041e00b6a200041e9066a290000370300200041e80b6a200041f1066a290000370300200020002900d9063703d00b20002d00d80621030b200041c1086a200041d00b6a41086a290300370000200041c9086a200041d00b6a41106a290300370000200041d1086a200041d00b6a41186a290300370000200020033a00b808200020002903d00b3700b90820004198026a41186a2201420037030020004198026a41106a220a420037030020004198026a41086a220342003703002000420037039802200041c00b6a41cde5c000410410cb012003200041c00b6a41086a2204290000370300200020002900c00b37039802200041c00b6a41c0d7c700410b10cb01200241086a22072004290000370000200220002900c00b37000020004198026a200041b8086a108309200041b8086a41206a200041d8066a41206a2d00003a0000200041b8086a41186a200041d8066a41186a290300370300200041b8086a41106a200041d8066a41106a290300370300200041b8086a41086a200041d8066a41086a290300370300200020002903d8063703b80820014200370300200a4200370300200342003703002000420037039802200041c00b6a41cde5c000410410cb0120032004290000370300200020002900c00b37039802200041c00b6a41fcd7c700411310cb0120072004290000370000200220002900c00b37000020004198026a200041b8086a1083090b200041a00d6a24000b830b01167f230041f0026b2202240002400240024020012802082203200128020c2204460d0020012802102105200241a4026a2106200241b0026a41206a2107200241d8016a4104722108200241b0026a41106a2109200241e0006a410472210a200241206a41286a210b200241206a41306a210c200241206a41386a210d03402001200341206a220e360208200a41186a200341186a290000370000200a41106a200341106a290000370000200a41086a200341086a290000370000200a200329000037000020022005360260200241b0026a41186a220f420037030020094200370300200241b0026a41086a22034200370300200242003703b00220024198016a41b69fc500410710cb01200320024198016a41086a221029000037030020022002290098013703b00220024198016a41d091c600410c10cb01200941086a20102900003700002009200229009801370000200241086a200241b0026a412010ce03200241b0026a200228020c410020022802081b2211200510d10420022802b002221220022802b80210e3012113024020022802b402450d00201210390b024002400240024020130d002011200a10c3090d00200241d8016a41206a200241e0006a41206a280200360200200241d8016a41186a200241e0006a41186a290300370300200241d8016a41106a200241e0006a41106a290300370300200241d8016a41086a200241e0006a41086a290300370300200220022903603703d801200f200841186a22122900003703002009200841106a22112900003703002003200841086a2214290000370300200220082900003703b00220024180026a200241b0026a10fb0620022802a00222130d01200241206a41086a4200370300200241206a41106a4200370300200241206a41186a4200370300200241206a41206a4200370300200b4200370300200c4200370300200d420037030041002113200241106a41086a410036020020024200370320200242003703100c020b2001200541016a22053602100c020b2007200229038002370300200741186a20024180026a41186a290300370300200741106a20024180026a41106a290300370300200741086a20024180026a41086a290300370300200f2012290200370300200920112902003703002003201429020037030020024188016a41086a2212200641086a280200360200200220082902003703b002200220062902003703880120024198016a41386a2211200241b0026a41386a29030037030020024198016a41306a2214200241b0026a41306a29030037030020024198016a41286a2215200241b0026a41286a29030037030020024198016a41206a2216200729030037030020024198016a41186a2217200f29030037030020024198016a41106a220f200929030037030020102003290300370300200220022903b00237039801200d2011290300370300200c2014290300370300200b2015290300370300200241206a41206a2016290300370300200241206a41186a2017290300370300200241206a41106a200f290300370300200241206a41086a20102903003703002002200229039801370320200241106a41086a201228020036020020022002290388013703100b2001200541016a220536021020130d030b200e21032004200e470d000b0b200041003602400c010b2000200229032037030020002002290310370244200041386a200241206a41386a290300370300200041306a200241206a41306a290300370300200041286a200241206a41286a290300370300200041206a200241206a41206a290300370300200041186a200241206a41186a290300370300200041106a200241206a41106a290300370300200041086a200241206a41086a290300370300200041cc006a200241106a41086a280200360200200020133602400b200241f0026a24000bf40204027f017e057f037e230041d0006b2202240002400240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510382206450d020b2000410036020820002006360200200041046a200541d0006e22073602000240200541d000490d00200241c0006a21082007210903402005450d012009450d04200241186a200141186a290300370300200241106a200141106a290300370300200241086a200141086a29030037030020022001290300370300200141306a2903002104200141286a290300210a200141386a290300210b2001290320210c2008200141c0006a10ca09200241386a200b370300200241286a200a370300200220043703302002200c3703202006200241d00010d40b41d0006a2106200541b07f6a2105200141d0006a21012009417f6a22090d000b0b20002003360208200241d0006a24000f0b1034000b1032000b200720074198b4ca00103c000b820501067f230041d0006b22032400200341086a41f3e5c000410810cb01200341186a41a8ffc700411610cb0102400240411010382204450d0020042001290000370000200441086a200141086a29000037000020032004411010cc01370338200341cc006a200441106a360200200320043602482003200341386a41086a3602442003200341386a360240200341286a200341c0006a10830120041039200341c0006a2002280200200228020810b80220032802302201200328024822026a41206a2204417f4c0d010240024020040d00410121050c010b200410382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200436020002402004410f4b0d00200041004110107720072802002106200028020021050b200520066a22042003290008370000200441086a200341086a41086a2900003700002007200641106a220436020002402008280200220520046b410f4b0d002000200441101077200041046a2802002105200041086a28020021040b2000280200220620046a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200441106a2204360200200328022821080240200520046b20014f0d002000200420011077200041046a280200210520072802002104200028020021060b200620046a2008200110d40b1a2007200420016a2204360200200328024021010240200520046b20024f0d002000200420021077200041086a2802002104200028020021060b200620046a2001200210d40b1a200041086a200420026a36020002402003280244450d00200328024010390b0240200328022c450d00200328022810390b200341d0006a24000f0b1032000b1034000bb90201017f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10dd07024002402003280248450d0020002003290348370200200041086a200341c8006a41086a2802003602000c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602000b2002450d00200110390b200341e0006a24000bc10401057f230041106b2202240002400240200128020841146a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520024100360208200220043602002001410c6a21062002200336020402402003410f4b0d00200241004110107720022802002104200228020821050b200420056a22032006290000370000200341086a200641086a2900003700002002200541106a36020820012802002001280208200210b902200128021c210302402002280204200228020822046b411f4b0d002002200441201077200228020821040b200228020020046a22012003290000370000200141086a200341086a290000370000200141106a200341106a290000370000200141186a200341186a2900003700002002200441206a3602082002200341206a36020c2002410c6a200210df022002200341306a36020c2002410c6a200210df02200341c0006a28020021012002200341c8006a280200220310ac0202402003450d00200341306c2105034002402002280204200228020822046b411f4b0d002002200441201077200228020821040b200228020020046a2203200141106a290000370000200341086a200141186a290000370000200341106a200141206a290000370000200341186a200141286a2900003700002002200441206a3602082002200136020c2002410c6a200210df02200141306a2101200541506a22050d000b0b2000200228020022012002280208109f0102402002280204450d00200110390b200241106a24000f0b1034000b1032000bd80101047f230041206b2203240020032000200110ce0802400240200228020822004105744104722201417f4c0d00200228020021022003280208210420032802002105200110382206450d01200341003602182003200136021420032006360210200341106a200010ac0202402000450d002000410574210003402002200341106a10b502200241206a2102200041606a22000d000b0b2005200420032802102202200328021810e90102402003280214450d00200210390b02402003280204450d00200510390b200341206a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41d6c9c800410e10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41c3c9c800411310cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bc30304057f027e017f027e230041d0006b2203240002400240200120028450450d0042002101420021020c010b200341386a22044200370300200341206a41106a22054200370300200341206a41086a2206420037030020034200370320200341c0006a41e1e5c000410810cb012006200341c0006a41086a220729000037030020032003290040370320200341c0006a41e4b4cb00410d10cb012004200729000037030020052003290040370300200341086a200341206a412010c107200341086a41106a2903002108200329031021092003280208210a20044200370300200542003703002006420037030020034200370320200341c0006a41e1e5c000410810cb012006200729000037030020032003290040370320200341c0006a41e4b4cb00410d10cb0120042007290000370300200520032900403703002003427f20084200200a1b220820027c20094200200a1b220920017c220b2009542204ad7c220c2004200c200854200c2008511b22041b3703482003427f200b20041b370340200341206a4120200341c0006a411010e9012008427f85200220041b21022009427f85200120041b21010b2000200137030020002002370308200341d0006a24000bd40102027f017e230041206b220324000240200120026a22022001490d00200041046a280200220141017422042002200420024b1b22024104200241044b1bad42e0017e2205a721022005422088a74521040240024020010d00200341003602100c010b200341186a41013602002003200141e0016c360214200320002802003602100b200320022004200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a200141e0016e360200200341206a24000f0b1034000bfe1c03047f017e0c7f230041c0016b22012400200141386a41f0c8c800410710cb01200141d0006a2202420037000020014200370048200141386a41106a220341bce3c900410910cb01200141106a200141386a10e806200141106a41106a280200210420012903102105200141386a41f0c8c800410710cb012002420037000020014200370048200341bce3c900410910cb012001410036021820014201370310200141106a41004104107720012802102206200128021822026a4100200441016a20054202511b22073600002001200241046a22023602180240200128021422042002470d00200141106a2002410110772001280214210420012802102106200128021821020b200620026a41003a0000200141386a41202006200241016a10e90102402004450d00200610390b200141386a41f0c8c800410710cb01200341086a420037000020034200370000200341c0e9c900410a10cb01200141106a200141386a108009024002400240200128021022020d002001420037022c41002104200141002802d8974e3602280c010b20012902142105200120023602282001200537022c2005422088a722062005a72204470d010b200141286a200410b10120012802282102200128023021060b200220064103746a22022000360204200220073602002001280230220241016a21080240024002402007411d490d0002400240024020080d00410021080c010b200741646a2106200241ffffffff017141016a2104410021092001280228220a210202400340200228020020064f0d01200241086a21022004200941016a2209470d000b200421090b0240024020082009490d00200141003602302009450d012009410374210b200141a4016a41046a210c200141a8016a41086a210d0340200a280200210e20014194016a41f0c8c800410710cb01200141106a419ed4c800411310cb012001200e3602a4012001200141a4016a410410cc013703a8012001200c3602442001200d36023c2001200141a4016a3602402001200141a8016a360238200141b0016a200141386a10830120012802b801220041206a2202417f4c0d0702400240024020020d00200141003602402001200236023c200141013602380c010b200210382206450d084100210420014100360240200120063602382001200236023c2002410f4b0d010b200141386a410041101077200128023c210220012802382106200128024021040b200620046a220f200129009401370000200f41086a20014194016a41086a22102900003700002001200441106a22043602400240200220046b410f4b0d00200141386a200441101077200128023c210220012802382106200128024021040b200620046a220f2001290010370000200f41086a200141106a41086a22112900003700002001200441106a220436024020012802b001210f0240200220046b20004f0d00200141386a20042000107720012802382106200128024021040b200620046a200f200010d40b1a200420006a2102024020012802b401450d0020012802b00110390b20012802382206200210e1010240200128023c450d00200610390b20014194016a41f0c8c800410710cb01200141106a41b1d4c800411310cb012001200e3602a4012001200141a4016a410410cc013703a8012001200c3602442001200d36023c2001200141a4016a3602402001200141a8016a360238200141b0016a200141386a10830120012802b801220041206a2202417f4c0d0702400240024020020d00200141003602402001200236023c200141013602380c010b200210382206450d084100210420014100360240200120063602382001200236023c2002410f4b0d010b200141386a410041101077200128023c210220012802382106200128024021040b200620046a220e200129009401370000200e41086a20102900003700002001200441106a22043602400240200220046b410f4b0d00200141386a200441101077200128023c210220012802382106200128024021040b200620046a220e2001290010370000200e41086a20112900003700002001200441106a220436024020012802b001210e0240200220046b20004f0d00200141386a20042000107720012802382106200128024021040b200620046a200e200010d40b1a200420006a2102024020012802b401450d0020012802b00110390b20012802382206200210e1010240200128023c450d00200610390b200a41086a210a200b41786a220b0d000c020b0b2009200841908cc700104b000b200820096b2102200128023021082002450d01024020092008460d002001280228220620084103746a200620094103746a200241037410d50b1a0b200820026a21080b200120083602300b024020080d00410021080c010b2001280228280204210a200141d0006a22024200370300200141c8006a22004200370300200141386a41086a220642003703002001420037033820014194016a41b69fc500410710cb01200620014194016a41086a2900003703002001200129009401370338200141106a41ffb1c000410b10cb012002200141106a41086a29000037030020002001290010370300200141106a200141386a412010de032001290214210541002102024020012802104101470d0002402005422088a7220e200a200a200e4b1b22042005a722024f0d00410121020c010b0240200420024d0d000340200141386a200210a80620012802382206200128024010e001200241016a21020240200128023c450d00200610390b20042002470d000b0b200a200e4921022005428080808070832004ad8421050b200120053702b401200120023602b001024020020d00200141d0006a4200370300200141c8006a4200370300200141386a41086a220242003703002001420037033820014194016a41b69fc500410710cb01200220014194016a41086a2900003703002001200129009401370338200141106a41ffb1c000410b10cb01200041086a200141106a41086a29000037000020002001290010370000200141386a412010e0010c010b200141d0006a4200370300200141c8006a4200370300200141386a41086a220242003703002001420037033820014194016a41b69fc500410710cb01200220014194016a41086a2900003703002001200129009401370338200141106a41ffb1c000410b10cb01200041086a200141106a41086a29000037000020002001290010370000200141386a4120200141b0016a41047210d7080b200128022c210c2001280228210e200141386a41f0c8c800410710cb01200341086a420037000020034200370000200341c0e9c900410a10cb0102400240200e0d00200141386a412010e0010c010b20084103744104722202417f4c0d02200210382204450d01200141003602182001200236021420012004360210024002400240200841c000490d00024002400240200841808001490d002008418080808004490d01200441033a0000410121022001410136021802402001280214417f6a41034b0d00200141106a41014104107720012802102104200128021821020b200420026a2008360000200241046a21020c020b41022102200420084102744101723b00000c010b20042008410274410272360000410421020b20012002360218200e20084103746a210a0c010b200420084102743a000041012102200141013602182008450d01200e20084103746a210a0b200e21060340200628020021000240200128021420026b41034b0d00200141106a20024104107720012802102104200128021821020b200420026a20003600002001200241046a2202360218200641046a28020021000240200128021420026b41034b0d00200141106a200241041077200128021821020b2001280210220420026a20003600002001200241046a2202360218200641086a2206200a470d000b0b200141386a41202004200210e90102402001280214450d00200410390b200c41ffffffff0171450d00200e10390b200141386a41f0c8c800410710cb01200341086a42003700002003420037000020034180ecc900411610cb01200141086a200141386a412010ce03200128020c21110240024020012802084101460d00410021020c010b024020114100200741656a2202200220074b1b22104f0d0041002802e8c8482109200141386a41246a220641286a210a2011210e0340200141106a200e10910a200141386a200128021022022001280218220410f608024002402001280238220c0d00420021052009210c0c010b2002200410e001200129023c21050b02402001280214450d00200210390b2005422088a7220b41d8006c210f2005a7210d024002400240200b0d00200c21020c010b200f2104200c210203400240200241206a28020022000d00200241d8006a21020c020b200141386a41186a200241186a290300370300200141386a41106a200241106a290300370300200141386a41086a200241086a2903003703002006200241246a290200370200200641086a2002412c6a290200370200200641106a200241346a290200370200200641186a2002413c6a290200370200200641206a200241c4006a290200370200200a200241cc006a290200370200200641306a200241d4006a2802003602002001200036025820012002290300370338200141386a108c08200241d8006a2102200441a87f6a22040d000c020b0b200c200f6a2002460d00200c200b41d8006c6a210003400240200241246a2802002204450d00200441306c450d00200241206a28020010390b200241d8006a21040240200241306a28020041ffffff3f71450d002002412c6a28020010390b2004210220002004470d000b0b200e41016a210e0240200d450d00200d41d8006c450d00200c10390b200e2010470d000b0b20112010201120104b1b2111410121020b2001201136021420012002360210200141386a41f0c8c800410710cb01200341086a42003700002003420037000020034180ecc900411610cb010240024020020d00200141386a412010e0010c010b2001201136029401200141386a412020014194016a410410e9010b200141c0016a24000f0b1032000b1034000b6501027f230041106b220324000240410810382204450d00200420022802003600002004200228020436000420034288808080c00037020420032004360200200020012004410810e90102402003280204450d00200410390b200341106a24000f0b1032000b990201037f230041d0006b220124002001412036020420012000360200200141086a2000412010e40102400240200128020822020d00410421000c010b200128020c210302400240200141106a280200450d004100210002400240024020022d00000e0404000102030b410121000c030b410221000c020b410321000c010b2001420037021c20014100280284ee4d3602182001410d36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141949fc5003602382001200141286a360248200141346a41b4dfc400200141386a103b1a2001280218200128022010d1010240200128021c450d00200128021810390b410421000b2003450d00200210390b200141d0006a240020000b8c5e090c7f027e017f017e067f027e057f087e137f230041d00e6b22022400200241c8036a41f0c8c800410710cb01200241e0036a22034200370000200242003700d803200241d8036a22044180e3c900410a10cb01200241c0016a200241c8036a412010ce0320022802c001210520022802c4012106200241c8036a41f0c8c800410710cb0120034200370000200242003700d80320044180e3c900410a10cb01410121072002200641016a410020051b220836029003200241c8036a412020024190036a410410e90120024190026a41f0c8c800410710cb0120024190036a4184e4c900411510cb01200220083602f0012002200241f0016a410410cc013703c002200241d4036a200241f0016a41046a3602002002200241c8026a3602cc032002200241f0016a3602d0032002200241c0026a3602c803200241e0026a200241c8036a10830102400240024002400240024020022802e802220641206a2203417f4c0d00024002402003450d00200310382207450d010b41002105200241003602d003200220073602c803200220033602cc0302402003410f4b0d00200241c8036a41004110107720022802cc03210320022802c803210720022802d00321050b200720056a2209200229009002370000200941086a20024190026a41086a2900003700002002200541106a22053602d0030240200320056b410f4b0d00200241c8036a20054110107720022802cc03210320022802c803210720022802d00321050b200720056a2209200229009003370000200941086a20024190036a41086a2900003700002002200541106a22053602d00320022802e00221090240200320056b20064f0d00200241c8036a20052006107720022802c803210720022802d00321050b200720056a2009200610d40b1a2002200520066a22073602d003024020022802e402450d0020022802e00210390b20022802c803210320022001360290032003200720024190036a410410e901024020022802cc03450d00200310390b200241c8036a41f0c8c800410710cb01200441086a420037000020044200370000200441ecdfc900410c10cb01200241b8016a200241c8036a412010ce030240200820022802bc0141016a41d50020022802b8011b6b220320084b0d00200310950a0b200241f8026a22034200370300200241f0026a220a4200370300200241e0026a41086a22074200370300200242003703e002200241c8036a41c2e6c000411a10cb012007200241c8036a41086a2205290000370300200220022900c8033703e002200241c8036a41d4b4c800410e10cb0120032005290000370300200a20022900c803370300200241c8036a200241e0026a10fc08024020022d00840422034103460d00200241e0026a412010e0010b024002400240024020034103460d00200228028004210720022802fc03210520022802f803210b41f8befaec7e210c4101210d0c010b200241c8036a10ab070240024020022802c80322054101470d0020024198036a220320022902cc03370300200241a0036a2206200241d4036a2902003703000c010b20024190036a41186a2203200241c8036a41186a29030037030020024190036a41106a200241c8036a41106a290300220e37030020024190036a41086a2206200241c8036a41086a290300370300200ea721070b20050d01200628020421052006280200210b2003280204210d2003280200210c410021030b200220033a00c002200220033a00cd03200241013a00cc03200241103a00c803200241c8036a10c903200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22034200370300200242003703e002200241c8036a41c2e6c000411a10cb012003200241c8036a41086a2206290000370300200220022900c8033703e002200241c8036a41d0b3c800410510cb01200a41086a2006290000370000200a20022900c803370000200241b0016a200241e0026a412010ce03024020022802b001450d0020022802b4014101460d0041002802d0a94e4103490d00200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22064200370300200242003703e002200241c8036a41c7e5c000410610cb012006200241c8036a41086a2203290000370300200220022900c8033703e002200241c8036a419081c400410610cb01200a41086a2003290000370000200a20022900c803370000200241a8016a200241e0026a412010ce032002419c026a412c3602002002411036029402200220022802ac01410020022802a8011b360290032002200241c0026a36029802200220024190036a3602900241002802cca94e210641002802c8a94e210141002802d4a94e2109200241c8036a41106a4203370300200241fc036a41d79dc700ad4280808080800e84370200200241f0036a419bf4c700ad4280808080c00484370300200241c8036a41206a42023703002003411a360200200241e4036a20024190026a360200200241ec9ec8003602d40320024281808080e0910137028404200241003602f803200241d0b9c7003602cc03200241033602c803200141b8c0cd00200941024622031b200241c8036a200641c0a4c00020031b2802101103000b2007ad4220862005ad84210f410021100c010b2003290300210e20024190036a41106a200629030022114220883e020020024190036a41086a2011422086200e42208822118437030020024102360290032002200ea7220c3602940320024181063b01cc03200241103a00c803200241c8036a10c903200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22034200370300200242003703e002200241c8036a41c2e6c000411a10cb012003200241c8036a41086a2207290000370300200220022900c8033703e002200241c8036a41d0b3c800410510cb01200a41086a2007290000370000200a20022900c803370000200241a0016a200241e0026a412010ce03024020022802a001450d0020022802a4014101460d0041002802d0a94e4102490d00200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22074200370300200242003703e002200241c8036a41c7e5c000410610cb012007200241c8036a41086a2203290000370300200220022900c8033703e002200241c8036a419081c400410610cb01200a41086a2003290000370000200a20022900c80337000020024198016a200241e0026a412010ce032002419c026a412a36020020024110360294022002200228029c0141002002280298011b3602c002200220024190036a360298022002200241c0026a3602900241002802cca94e210741002802c8a94e210541002802d4a94e2106200241c8036a41106a4202370300200241fc036a41d79dc700ad4280808080800e84370200200241f0036a419bf4c700ad4280808080c00484370300200241c8036a41206a42023703002003411a360200200241e4036a20024190026a360200200241849fc8003602d40320024281808080d0920137028404200241003602f803200241d0b9c7003602cc03200241023602c803200541b8c0cd00200641024622031b200241c8036a200741c0a4c00020031b2802101103000b2011a7210d20022802a0032112200229039803210f200228029403210b2002280290032113410121100b200241f8026a22054200370300200241e0026a41106a22064200370300200241e0026a41086a22034200370300200242003703e002200241c8036a41c2e6c000411a10cb012003200241c8036a41086a2207290000370300200220022900c8033703e002200241c8036a41d0b3c800410510cb01200a41086a22012007290000370000200a20022900c80337000020024190016a200241e0026a412010ce0320022802900121092002280294012114200542003703002006420037030020034200370300200242003703e002200241c8036a41c2e6c000411a10cb0120032007290000370300200220022900c8033703e002200241c8036a41d0b3c800410510cb0120012007290000370000200a20022900c8033700002002201441016a410220091b3602c803200241e0026a4120200241c8036a410410e9014102200310bf07200542003703002006420037030020034200370300200242003703e002200241c8036a41c2e6c000411a10cb0120032007290000370300200220022900c8033703e002200241c8036a4198b5c800410810cb0120012007290000370000200a20022900c803370000200241e0026a412010e001200542003703002006420037030020034200370300200242003703e002200241c8036a41c2e6c000411a10cb0120032007290000370300200220022900c8033703e002200241c8036a419cb6c800411010cb0120012007290000370000200a20022900c803370000200241e0026a412010e001200542003703002006420037030020034200370300200242003703e002200241c8036a41c2e6c000411a10cb0120032007290000370300200220022900c8033703e002200241c8036a41e4b5c800410e10cb0120012007290000370000200a20022900c803370000200241e0026a412010e00102402010450d0020024190036a41106a201236020020024190036a41086a200f3703002002200b36029403200220133602900341002802d0a94e4102490d05200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22074200370300200242003703e002200241c8036a41c7e5c000410610cb012007200241c8036a41086a2203290000370300200220022900c8033703e002200241c8036a419081c400410610cb01200a41086a2003290000370000200a20022900c803370000200241086a200241e0026a412010ce032002419c026a412a36020020024110360294022002200228020c410020022802081b3602c002200220024190036a360298022002200241c0026a3602900241002802cca94e210741002802c8a94e210541002802d4a94e2106200241c8036a41106a4202370300200241fc036a41d6c5c800ad4280808080a00b84370200200241f0036a41c8c5c800ad4280808080e00184370300200241c8036a41206a420237030020034110360200200241e4036a20024190026a360200200241c4b6ca003602d40320024281808080b09c0237028404200241003602f803200241d0b5ca003602cc03200241023602c803200541b8c0cd00200641024622031b200241c8036a200741c0a4c00020031b2802101103000c050b200b450d04200dad422086200cad8410d106200220083602cc01200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22034200370300200242003703e002200241c8036a41e1e5c000410810cb012003200241c8036a41086a2207290000370300200220022900c8033703e002200241c8036a41e4b4cb00410d10cb01200a41086a2007290000370000200a20022900c803370000200241f8006a200241e0026a412010c107200f422088a7221541067422064106752205ad42d0007e220e422088a70d01200ea72203417f4c0d01200241f8006a41106a290300210e2002290380012111200228027821070240024020030d00410821160c010b200310382216450d010b200b20066a21174100210d200241003602d801200220163602d0012002200341d0006e22033602d4010240200320054f0d00200241d0016a4100200510930320022802d001211620022802d801210d0b0240024002402017200b470d00200b210c0c010b200241e8006a2011200e427f420010da0b200241e8006a41086a290300420020071b220e42002002290368420020071b2211420156200e420052200e501b22031b21182011420120031b21192016200d41d0006c6a2113200b210c0340200c220341c0006a210c200341306a280200450d01200341386a28020021072003290330210e20024190026a41186a221a200341186a29000037030020024190026a41106a221b200341106a29000037030020024190026a41086a221c200341086a29000037030020022003290000370390022007ad42307e2211422088a70d042011a72203417f4c0d040240024020030d00410821120c010b200310382212450d040b200e422088a7211d200ea7211e200241003602c802200220123602c0022002200341306e3602c4020240024020070d004200211f42002120420021114200210e0c010b200741306c210642002111410021054200210e4200211f42002120201e21030340200341206a2903002121200341286a290300212220024190036a41186a2201200341186a290300222337030020024190036a41106a2209200341106a290300222437030020024190036a41086a2214200341086a290300222537030020022003290300222637039003200241386a202242002019420010d30b200241c8006a201842002021420010d30b200241d8006a202142002019420010d30b200241c8036a41186a2023370300200241c8036a41106a2024370300200241c8036a41086a2025370300200220263703c803427f200241d8006a41086a2903002221200229033820022903487c7c2223202242005220184200527120022903404200527220022903504200527220232021547222071b2121427f200229035820071b212202400240200241c8036a20024190026a412010d70b0d00427f202020217c201f20227c2224201f542207ad7c22232007202320205420232020511b22071b2120427f202420071b211f0c010b200241e0026a41186a22102001290300370300200241e0026a41106a22012009290300370300200241e0026a41086a2209201429030037030020022002290390033703e0020240200520022802c402470d00200241c0026a200510b70920022802c002211220022802c80221050b2012200541306c6a2207202137030820072022370300200720022903e002370310200741186a2009290300370300200741206a2001290300370300200741286a20102903003703002002200541016a22053602c8020b200341306a2103427f200e20217c201120227c22212011542207ad7c221120072011200e542011200e511b22071b210e427f202120071b2111200641506a22060d000b0b0240201d450d00201d41306c450d00201e10390b200241c8036a41186a201a2903002221370300200241c8036a41106a201b2903002222370300200241c8036a41086a201c290300222337030020024190036a41086a2203200241c0026a41086a280200360200200220022903900222243703c803200220022903c00237039003201341386a2020370300201341306a201f370300201341286a200e37030020132011370320201341186a2021370300201341106a2022370300201341086a202337030020132024370300201341c0006a200229039003370300201341c8006a2003280200360200200d41016a210d201341d0006a2113200c2017470d000b2002200d3602d8010c010b2002200d3602d8012017200c460d00200b20154106746a21050340200c220341c0006a210c0240200341346a2802002207450d00200741306c450d00200341306a28020010390b2005200c470d000b0b0240200f42ffffff1f83500d00200b10390b200d41ffffff3f71200d470d01200d4105742203417f4c0d010240024020030d00410121070c010b200310382207450d010b2016200d41d0006c6a211041002105200241003602e801200220073602e0012002200341057622033602e40102402003200d4f0d00200241e0016a4100200d109e0220022802e80121050b024020162010460d0020022802e00120054105746a2103200241c8036a41c0006a2112201621070340200241c8036a41186a2206200741186a290300370300200241c8036a41106a2201200741106a290300370300200241c8036a41086a2209200741086a290300370300200220072903003703c8032012200741c0006a220710ca090240200228028c042214450d00201441306c450d0020022802880410390b200320022903c803370000200341186a2006290300370000200341106a2001290300370000200341086a2009290300370000200541016a2105200341206a2103200741106a22072010470d000b0b200220053602e801200241c8036a41f0c8c800410710cb0142002123200441086a420037000020044200370000200441e8e0c900411510cb01200241306a200241c8036a412010ce03024020052002280234410020022802301b22034101200341014b1b4f0d0002402008450d0041002802d0a94e4102490d00200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22074200370300200242003703e002200241c8036a41c7e5c000410610cb012007200241c8036a41086a2203290000370300200220022900c8033703e002200241c8036a419081c400410610cb01200a41086a2003290000370000200a20022900c803370000200241186a200241e0026a412010ce032002200228021c410020022802181b3602c002200220053602e002200241c8036a41f0c8c800410710cb01200441086a420037000020044200370000200441e8e0c900411510cb01200241106a200241c8036a412010ce0320024190036a411c6a4102360200200241a4036a41023602002002419c036a4110360200200241103602940320022002280214410020022802101b36029002200220024190026a3602a8032002200241e0026a3602a0032002200241cc016a360298032002200241c0026a3602900341002802cca94e210741002802c8a94e210541002802d4a94e2106200241c8036a41106a4205370300200241fc036a41d6c5c800ad4280808080a00b84370200200241f0036a41c8c5c800ad4280808080e00184370300200241c8036a41206a420437030020034110360200200241c8036a411c6a20024190036a360200200241d4b6ca003602d4032002428180808080a00237028404200241003602f803200241d0b5ca003602cc03200241023602c803200541b8c0cd00200641024622031b200241c8036a200741c0a4c00020031b2802101103000b024020022802e40141ffffff3f71450d0020022802e00110390b20022802d0012106024020022802d8012203450d00200341d0006c2107200641c4006a21030340024020032802002205450d00200541306c450d002003417c6a28020010390b200341d0006a2103200741b07f6a22070d000b0b20022802d4012203450d05200341d0006c450d05200610390c050b2016200d41d0006c6a212720022802d40121280240200d0d0020162129420021190c030b200241c8036a41206a212a20024190036a41106a210841002802d8974e212b20024190026a41106a212c42002123420021192016212903402029220341d0006a2129200341c0006a280200450d03200241c8036a200341d00010d40b1a200241f0016a41186a200341186a290000370300200241f0016a41106a200341106a290000370300200241f0016a41086a200341086a290000370300200220032900003703f00120024190026a41286a2207202a41286a29030037030020024190026a41206a2203202a41206a29030037030020024190026a41186a2209202a41186a290300370300202c202a41106a29030037030020024190026a41086a2214202a41086a29030022243703002002202a290300222537039002200241e0026a20022802cc01200241f0016a10da0820022802e802211020022802e002210120024100360298032002420137039003200220024190026a3602c002200241c0026a20024190036a10df022002202c3602c002200241c0026a20024190036a10df022003280200210320024190036a2007280200220710ac0202402007450d00200741306c21060340024020022802940320022802980322056b411f4b0d0020024190036a20054120107720022802980321050b20022802900320056a2207200341106a290000370000200741086a200341186a290000370000200741106a200341206a290000370000200741186a200341286a2900003700002002200541206a36029803200220033602c002200241c0026a20024190036a10df02200341306a2103200641506a22060d000b0b20012010200228029003220320022802980310e9010240200228029403450d00200310390b024020022802e402450d00200110390b200241c0026a41186a222d2009290300370300200241c0026a41106a222e202c290300370300200241c0026a41086a222f201429030037030020022002290390023703c00220022802bc02213020022802b402213120022802b002211a024020022802b802223241c100490d002032410176ad42307e220e422088a70d03200ea72233417f4c0d03203310382234450d0220024200370284032002202b36028003201a41506a2135201a41f07e6a213641002107202b2105203221120340024002402012417f6a22010d00410121134100211d0c010b0240024002400240024002400240201a200141306c6a2203290300201241306c2237201a6a41a07f6a2206290300221156200341086a2903002221200641086a290300220e562021200e511b0d002012417e6a2110203620376a21034100211d410021060340024020102006470d00201221130c090b201120032903002222582101200e200341086a2903002221512109200e2021582114200341506a2103200641016a2106202221112021210e2001201420091b0d000b200641016a21132006417f7320126a21010c010b203620376a210302400340024020014101470d00410021010c020b201120032903002222562106200e200341086a2903002221512109200e2021562114200341506a21032001417f6a2101202221112021210e2006201420091b0d000b0b20122001490d01201220324b0d02201220016b22134101762209450d00201a200141306c6a2103203520376a2106034020024190036a41286a2214200341286a221029030037030020024190036a41206a220c200341206a220d29030037030020024190036a41186a221d200341186a221e2903003703002008200341106a221b29030037030020024190036a41086a221c200341086a22042903003703002002200329030037039003200641086a2217290300210e200641106a220b2903002111200641186a22152903002121200641206a22382903002122200629030021182010200641286a2239290300370300200d2022370300201e2021370300201b20113703002004200e37030020032018370300203920142903003703002038200c2903003703002015201d290300370300200b20082903003703002017201c2903003703002006200229039003370300200341306a2103200641506a21062009417f6a22090d000b0b024020010d002001211d0c060b0240201341094d0d002001211d0c060b201220324b0d03201220016b2109201a200141306c6a210c203520376a2117034020122001417f6a221d490d0502402012201d6b22134102490d00201a200141306c6a2203290300201a201d41306c6a2210290300222158200341086a22062903002211201041086a2201290300220e582011200e511b0d00200241e0026a41186a221b201041286a2214290300370300200241e0026a41106a221c201041206a220d290300370300200241e0026a41086a2204201041186a221e290300370300200220102903103703e0022010200329030037030020012006290300370300201041106a200341106a290300370300201e200341186a290300370300200d200341206a2903003703002014200341286a29030037030041012106024020134103490d002009417f6a210d41002106200c210302400340200341306a2201290300202158200341386a22142903002211200e582011200e511b0d0120092006460d07200341286a200341d8006a290300370300200341206a200341d0006a290300370300200341186a200341c8006a290300370300200341106a200341c0006a290300370300200341086a20142903003703002003200129030037030020012103200d200641016a2206470d000b200641016a2106201721030c010b200641016a21060b200320213703002003200e3703082010200641306c6a220341286a201b290300370300200341206a201c290300370300200341186a2004290300370300200320022903e0023703100b201d450d06200941016a2109200c41506a210c201d21012013410a4f0d060c000b0b2001201241c4bac3001055000b2012203241c4bac300104b000b200641016a201341a4bbc300103c000b20122001417f6a221d490d002012203241d4bac300104b000b201d201241d4bac3001055000b02402007200228028403470d0020024180036a200710b101200228028003210520022802880321070b200520074103746a220320133602042003201d360200200220022802880341016a220736028803024020074102490d002002280280032105024003400240024002400240024020052007417f6a4103746a2203280200450d00200741037420056a220941746a2802002201200328020422064b0d010b20074103490d022003280204210620052007417d6a22134103746a28020421030c010b200741024d0d0520052007417d6a22134103746a2802042203200620016a4d0d00200741034d0d05200941646a280200200320016a4b0d050b20032006490d010b2007417e6a21130b02400240024002402007201341016a221e4d0d000240200720134d0d00024020052013410374221b6a2203280204221c20032802006a22062005201e41037422046a2207280200220d490d000240200620324b0d00201a200d41306c6a22032007280204220c41306c22056a2107200641306c210902402006200d6b2214200c6b2206200c490d0020342003200510d40b220620056a21010240200c41014e0d00200621050c080b2014200c4a0d05200621050c070b20342007200641306c220510d40b221220056a2101200c4101480d0520064101480d05203520096a210503402005200741506a2209200141506a22142014290300200929030056201441086a290300220e200941086a290300221156200e2011511b22101b2206290300370300200541086a200641086a290300370300200541106a200641106a290300370300200541186a200641186a290300370300200541206a200641206a290300370300200541286a200641286a2903003703002001201420101b210120032009200720101b22074f0d06200541506a2105200120124b0d000c060b0b200620324184bbc300104b000b200d20064184bbc3001055000b2013200741f4bac300103c000b201e200741e4bac300103c000b201a20096a21142006210503402003200720052007290300200529030056200741086a290300220e200541086a290300221156200e2011511b22091b2206290300370300200341086a200641086a290300370300200341106a200641106a290300370300200341186a200641186a290300370300200341206a200641206a290300370300200341286a200641286a2903003703002005200541306a20091b2105200341306a2103200741306a200720091b220720144f0d0220052001490d000c020b0b20122105200721030b20032005200120056b220720074130706b10d40b1a0240200228028803220320134d0d002002280280032205201b6a2207201c200c6a3602042007200d3602002003201e4d0d02200520046a2207200741086a200320136b41037441706a10d50b1a20022003417f6a220736028803200741014b0d010c030b0b201320034194bbc300103c000b201e20031044000b201d2112201d0d000b024020022802840341ffffffff0171450d0020022802800310390b20334130702103024020334130490d0020332003460d00203410390b203241c000203241c000491b21320b201920247c210e202320257c22112023542209ad212120024190036a41186a202d2903003703002008202e29030037030020024190036a41086a202f290300370300200220022903c00237039003200220303602bc03200220323602b803200220313602b4032002201a3602b00320024180036a20022802cc01200241f0016a10920a20022802880321142002280280032101200241003602e802200242013703e002200220024190036a3602c403200241c4036a200241e0026a10df02200220083602c403200241c4036a200241e0026a10df0220022802b0032103200241e0026a20022802b803220710ac0202402007450d00200741306c21060340024020022802e40220022802e80222056b411f4b0d00200241e0026a20054120107720022802e80221050b20022802e00220056a2207200341106a290000370000200741086a200341186a290000370000200741106a200341206a290000370000200741186a200341286a2900003700002002200541206a3602e802200220033602c403200241c4036a200241e0026a10df02200341306a2103200641506a22060d000b0b200e20217c210e2001201420022802e002220320022802e80210e901024020022802e402450d00200310390b200e2019512103200e20195421070240200228028403450d00200110390b2009200720031b2103024020022802b4032207450d00200741306c450d0020022802b00310390b427f200e20031b2119427f201120031b212320292027470d000c040b0b1032000b1034000b20272029460d0003402029220341d0006a21290240200341c4006a2802002207450d00200741306c450d00200341c0006a28020010390b20272029470d000b0b02402028450d00202841d0006c450d00201610390b20024190036a20022802cc0110d20820022802980321072002280290032103200220193703d003200220233703c80320032007200241c8036a411010e9010240200228029403450d00200310390b024020022802e8012203450d0020022802e0012107200341057421060340200241c8036a2007108f0a200241286a20022802c803220120022802d00310f0084100200228022820022d002c22054102461b2103024020022802cc03450d00200110390b20024190036a20022802cc01200710930a20022802980321092002280290032114200241003602d003200242013703c8030240024002400240200341c000490d00200341808001490d012003418080808004490d02200241c8036a41004101107720022802cc03211220022802c803221020022802d00322016a41033a00002002200141016a22013602d0030240201220016b41034b0d00200241c8036a20014104107720022802c803211020022802d00321010b201020016a2003360000200141046a21030c030b200241c8036a41004101107720022802c80320022802d00322016a20034102743a0000200141016a21030c020b200241c8036a41004102107720022802c80320022802d00322016a20034102744101723b0000200141026a21030c010b200241c8036a41004104107720022802c80320022802d00322016a2003410274410272360000200141046a21030b200220033602d00320054101712110024020022802cc0322012003470d00200241c8036a20034101107720022802cc03210120022802d00321030b20022802c803220520036a20103a0000201420092005200341016a10e90102402001450d00200510390b0240200228029403450d0020022802900310390b200741206a2107200641606a22060d000b0b200241d0036a41043a0000200241033a00c803200241c8036a10c903024020022802cc01450d0041002802d0a94e4103490d00200241f8026a4200370300200241e0026a41106a4200370300200241e0026a41086a22074200370300200242003703e002200241c8036a41c7e5c000410610cb012007200241c8036a41086a2203290000370300200220022900c8033703e002200241c8036a419081c400410610cb01200a41086a2003290000370000200a20022900c803370000200241206a200241e0026a412010ce03200241a4036a41103602002002419c036a411036020020022002280224410020022802201b3602c0022002411036029403200220022802e801360290022002200241cc016a3602a003200220024190026a360298032002200241c0026a3602900341002802cca94e210741002802c8a94e210541002802d4a94e2106200241c8036a41106a4203370300200241fc036a41d6c5c800ad4280808080a00b84370200200241f0036a41c8c5c800ad4280808080e00184370300200241c8036a41206a420337030020034110360200200241e4036a20024190036a360200200241fcb6ca003602d40320024281808080f0a40237028404200241003602f803200241d0b5ca003602cc03200241033602c803200541b8c0cd00200641024622031b200241c8036a200741c0a4c00020031b2802101103000b20022802e00122030d010b200041003602000c010b200020022902e401370204200020033602000b200241d00e6a24000be80501067f230041e0006b22032400200341086a41f0c8c800410710cb01200341186a4194c9c800410b10cb01200320013602482003200341c8006a410410cc01370338200341dc006a2204200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a10830102400240412010382201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001412010cc013703482004200141206a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012001103920032802302202200328024022046a41206a2201417f4c0d010240024020010d00410121050c010b200110382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200136020002402001410f4b0d00200041004110107720072802002106200028020021050b200520066a22012003290008370000200141086a200341086a41086a2900003700002007200641106a220136020002402008280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b2000280200220620016a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200141106a2201360200200328022821080240200520016b20024f0d002000200120021077200041046a280200210520072802002101200028020021060b200620016a2008200210d40b1a2007200120026a2201360200200328023821020240200520016b20044f0d002000200120041077200041086a2802002101200028020021060b200620016a2002200410d40b1a200041086a200120046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000b810301017f230041f0006b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a109203024002402003280238450d0020002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000c010b2003420037025420034100280284ee4d3602502003410d360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341949fc5003602182003200341e0006a360228200341ec006a41b4dfc400200341186a103b1a2003280250200328025810d10102402003280254450d00200328025010390b200041003602200b2002450d00200110390b200341f0006a24000bc6820105087f017e067f027e067f230041e0026b2205240002400240410810382206450d0020062001200241e0016c6a220736020420062001360200410810382208450d0020082003200441e0016c6a22093602042008200336020002400240024002402000450d0020054188016a210a0c010b200541a0016a220b420037030020054198016a2202420037030020054188016a41086a220442003703002005420037038801200541b8026a41a2c0cd00410f10cb012004200541b8026a41086a220c290000370300200520052900b80237038801200541b8026a41b1c0cd00410710cb01200b200c290000370300200220052900b80237030020054188016a210a20054188016a412010e301450d010b200541b8016a200610950b0240024020052802b801450d00200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200541b8026a41186a200541b8016a41186a290300370300200541b8026a41206a200541b8016a41206a28020036020020054188016a41106a200541c4026a29020037030020054188016a41186a200541cc026a29020037030020054188016a41206a200541d4026a290200370300200520052903b8013703b802200520052902bc0237039001200541b8026a200610960b417f20052802b802220241016a220420042002491bad42287e220d422088a70d05200da72204417f4c0d0520041038220e450d04200e4201370320200e20054188016a41086a2202290300370300200e41186a200241186a290300370300200e41106a200241106a290300370300200e41086a200241086a290300370300200541013602702005200e3602682005200441286e220436026c200541b8016a200610950b024020052802b8010d004101210f200610390c020b20054188016a41086a2102200541b8026a410472210c4128210f4101210b0340200541b8026a41206a200541b8016a41206a280200360200200541b8026a41186a200541b8016a41186a290300370300200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200520052903b8013703b8022002200c290200370200200241086a2210200c41086a290200370200200241106a2211200c41106a290200370200200241186a2212200c41186a2902003702000240200b2004470d00200541b8026a200610960b200541e8006a2004417f20052802b802220e41016a22132013200e491b1087022005280268210e0b200e200f6a220420022903003703002010290300210d2011290300211420122903002115200441206a4201370300200441186a2015370300200441106a2014370300200441086a200d3703002005200b41016a2210360270200541b8016a200610950b024020052802b801450d00200f41286a210f200528026c21042010210b0c010b0b200b41016a210f200528026c21042005280268210e200610390c010b200610394100210f41002802e8c848210e410021040b200541a0016a220c420037030020054198016a2202420037030020054188016a41086a42003703002005420037038801200541b8026a41a2c0cd00410f10cb01200a41086a200541b8026a41086a220b290000370000200a20052900b802370000200541b8026a41b1c0cd00410710cb01200c200b290000370300200220052900b802370300200541b8026a200a412010de030240024020052802b8024101460d002005200f360290012005200436028c012005200e36028801200541b8016a20054188016a41004100200510970b0c010b200a412010e00120052902bc02210d2005200f360290012005200436028c012005200e36028801200541b8016a20054188016a200da74101200d422088a710970b0b0240024020052d00b8014108470d00200541a0016a220c420037030020054198016a220b420037030020054188016a41086a220f42003703002005420037038801200541b8026a41a2c0cd00410f10cb01200a41086a2210200541b8026a41086a2204290000370000200a20052900b802370000200541b8026a41d8e8cd00410c10cb01200241086a22112004290000370000200220052900b802370000200541386a200a10ee04200528023821122005290340210d200c4200370300200b4200370300200f42003703002005420037038801200541b8026a41a2c0cd00410f10cb0120102004290000370000200a20052900b802370000200541b8026a41d8e8cd00410c10cb0120112004290000370000200220052900b8023700002005200d42017c420120121b220d3703b802200a4120200541b8026a410810e9010c010b200541a0016a420037030020054198016a420037030020054188016a41086a42003703002005420037038801200541b8026a41a2c0cd00410f10cb01200a41086a200541b8026a41086a2204290000370000200a20052900b802370000200541b8026a41d8e8cd00410c10cb01200241086a2004290000370000200220052900b802370000200541c8006a200a10ee042005290350420020052802481b210d0b4101210f0c010b200b420037030020024200370300200442003703002005420037038801200541b8026a41a2c0cd00410f10cb012004200c290000370300200520052900b80237038801200541b8026a41d8e8cd00410c10cb01200241086a200c290000370000200220052900b802370000200541d8006a20054188016a10ee042005290360420020052802581b210d4100210f0b200541d0016a22024200370300200541c8016a22164200370300200541b8016a41086a22044200370300200542003703b801200541b8026a41b69fc500410710cb012004200541b8026a41086a290000370300200520052900b8023703b801200541e0016a41d091c600410c10cb012002200541e0016a41086a290000370300201620052900e001370300200541306a200541b8016a412010ce03200528023421042005280230210c20054188016a200d10880b200528029001210b2005280288012102200520044100200c1b3602b8022002200b200541b8026a410410e9010240200528028c01450d00200210390b200810390240200f0d00200610390b41081038220e450d00200e2007360204200e2001360200410810382213450d002013200936020420132003360200200541b8016a200e10980b0240024020052802b801450d00200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200541b8026a41186a200541b8016a41186a290300370300200541b8026a41206a200541b8016a41206a28020036020020054188016a41106a200541c4026a29020037030020054188016a41186a200541cc026a29020037030020054188016a41206a200541d4026a290200370300200520052903b8013703b802200520052902bc0237039001200541b8026a200e10960b417f20052802b802220241016a220420042002491bad42287e220d422088a70d03200da72204417f4c0d0320041038220a450d02200a4201370320200a20054188016a41086a2202290300370300200a41186a200241186a290300370300200a41106a200241106a290300370300200a41086a200241086a290300370300200541013602702005200a3602682005200441286e221036026c200541b8016a200e10980b024020052802b8010d0041012117200e10390c020b20054188016a41086a2102200541b8026a410472210c4128210f4101210b0340200541b8026a41206a200541b8016a41206a280200360200200541b8026a41186a200541b8016a41186a290300370300200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200520052903b8013703b8022002200c290200370200200241086a2211200c41086a290200370200200241106a2212200c41106a290200370200200241186a2206200c41186a2902003702000240200b2010470d00200541b8026a200e10960b200541e8006a2010417f20052802b802220441016a220a200a2004491b1087022005280268210a0b200a200f6a220420022903003703002011290300210d2012290300211420062903002115200441206a4201370300200441186a2015370300200441106a2014370300200441086a200d3703002005200b41016a2204360270200541b8016a200e10980b024020052802b801450d00200f41286a210f200528026c21102004210b0c010b0b200b41016a2117200528026c21102005280268210a200e10390c010b200e10394100211741002802e8c848210a410021100b200541b8016a201310980b0240024020052802b801450d00200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200541b8026a41186a200541b8016a41186a290300370300200541b8026a41206a200541b8016a41206a28020036020020054188016a41106a200541c4026a29020037030020054188016a41186a200541cc026a29020037030020054188016a41206a200541d4026a290200370300200520052903b8013703b802200520052902bc0237039001200541b8026a201310960b417f20052802b802220241016a220420042002491bad42287e220d422088a70d03200da72204417f4c0d03200410382208450d0220084201370320200820054188016a41086a2202290300370300200841186a200241186a290300370300200841106a200241106a290300370300200841086a200241086a29030037030020054101360270200520083602682005200441286e221136026c200541b8016a201310980b024020052802b8010d0041012118201310390c020b20054188016a41086a2102200541b8026a410472210c4128210f4101210b0340200541b8026a41206a200541b8016a41206a280200360200200541b8026a41186a200541b8016a41186a290300370300200541b8026a41106a200541b8016a41106a290300370300200541b8026a41086a200541b8016a41086a290300370300200520052903b8013703b8022002200c290200370200200241086a2212200c41086a290200370200200241106a2206200c41106a290200370200200241186a220e200c41186a2902003702000240200b2011470d00200541b8026a201310960b200541e8006a2011417f20052802b802220441016a220820082004491b108702200528026821080b2008200f6a220420022903003703002012290300210d20062903002114200e2903002115200441206a4201370300200441186a2015370300200441106a2014370300200441086a200d3703002005200b41016a2204360270200541b8016a201310980b024020052802b801450d00200f41286a210f200528026c21112004210b0c010b0b200b41016a2118200528026c211120052802682108201310390c010b201310394100211841002802e8c8482108410021110b200541d0026a220c4200370300200541c8026a22124200370300200541b8026a41086a22024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a4180d3c700410a10cb01200c2004290300370300201220052903e001370300200541206a200541b8026a10ee04024002400240024002402005290328420020052802201b221442017c220d2014540d00200c42003703002012420037030020024200370300200542003703b802200541e0016a41cde5c000410410cb0120022004290000370300200520052900e0013703b802200541e0016a4180d3c700410a10cb01201241086a220b2004290300370000201220052903e0013700002005200d37038801200541b8026a412020054188016a410810e901200c42003703002012420037030020024200370300200542003703b802200541e0016a41cde5c000410410cb0120022004290000370300200520052900e0013703b802200541e0016a41a8d3c700410b10cb01200b2004290300370000201220052903e001370000201741286c4104722202417f4c0d06200210382204450d0520054100360290012005200236028c01200520043602880120054188016a201710ac02200a201720054188016a10a802200541b8026a4120200528028801220220052802900110e9010240200528028c01450d00200210390b02402010450d00201041286c450d00200a10390b200d42017c2214200d540d01200541b8026a41186a4200370300200541b8026a41106a4200370300200541b8026a41086a22024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a41e8d5c700410e10cb01201241086a2004290300370000201220052903e00137000020054188016a200541b8026a10f0070240024020052d0088014101460d00200541e8006a41186a4200370300200541e8006a41106a4200370300200541e8006a41086a4200370300200542003703680c010b200541e8006a41186a200541a1016a290000370300200541e8006a41106a20054199016a290000370300200541e8006a41086a20054191016a29000037030020052005290089013703680b200541d0026a220c4200370300200541c8026a220b4200370300200541b8026a41086a22024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a4198d6c700410c10cb01201241086a220f2004290300370000201220052903e001370000200541186a200541b8026a412010ce03200528021c211020052802182106200c4200370300200b420037030020024200370300200542003703b802200541e0016a41cde5c000410410cb0120022004290000370300200520052900e0013703b802200541e0016a4198d6c700410c10cb01200f2004290300370000201220052903e0013700002005410036028801200541b8026a412020054188016a410410e901417f2010410020061b220e41016a22022002200e491b410d744128722202417f4c0d06200210382206450d052006200529036837000020062014370020200641086a200541e8006a41086a290300370000200641106a200541e8006a41106a290300370000200641186a200541e8006a41186a2903003700002005200236029c02200520063602980241282113200541283602a002410021044100280284ee4d210a41002102024003402004200e2004200e4b1b211002400240034002402002450d00200c200b470d02200f41ffffff3f71450d00200210390b024020102004460d00200541e0016a200410c105200541b8026a20052802e001220c20052802e801220b10eb060240024020052802b80222020d004200210d200a21020c010b200c200b10e00120052902bc02210d0b024020052802e401450d00200c10390b200441016a21042002200d422088a74105746a210b200da7210f2002210c0c010b0b20054188016a20062013109f010240200528029c02450d00200610390b200541b8026a41186a220b4200370300200541b8026a41106a220f4200370300200541b8026a41086a22044200370300200542003703b802200541e0016a41cde5c000410410cb012004200541e0016a41086a220c290000370300200520052900e0013703b802200541e0016a41e8d5c700410e10cb01201241086a2210200c290300370000201220052903e001370000412010382202450d092002200529008801370000200241186a20054188016a41186a290000370000200241106a20054188016a41106a290000370000200241086a20054188016a41086a290000370000200541b8026a41202002412010e90120021039200541b8016a41186a200541e8006a41186a290300370300200541b8016a41106a200541e8006a41106a290300370300200541b8016a41086a200541e8006a41086a290300370300200520052903683703b801200b4200370300200f420037030020044200370300200542003703b802200541e0016a41cde5c000410410cb012004200c290000370300200520052900e0013703b802200541e0016a41b8d4c700410a10cb012010200c290300370000201220052903e001370000412010382202450d09200220052903b801370000200241186a200541b8016a41186a290300370000200241106a200541b8016a41106a290300370000200241086a200541b8016a41086a290300370000200541b8026a41202002412010e90120021039200541b8026a41186a4200370300200541b8026a41106a4200370300200541b8026a41086a22024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a4180d6c700410f10cb01201241086a2004290300370000201220052903e001370000201841286c4104722202417f4c0d0a200210382204450d0920054100360290012005200236028c01200520043602880120054188016a201810ac022008201820054188016a10a802200541b8026a4120200528028801220220052802900110e9010240200528028c01450d00200210390b200541b8016a41186a220b4200370300200541b8016a41106a220f4200370300200541b8016a41086a220c4200370300200542003703b801200541b8026a41cde5c000410410cb01200c200541b8026a41086a2202290000370300200520052900b8023703b801200541e0016a41b8d8c700410a10cb01201641086a2210200541e0016a41086a2204290000370000201620052900e00137000020054188016a200541b8016a412010de0320054188016a41086a2206280200210e2005280288012113200541b8026a41186a22174200370300200541b8026a41106a2219420037030020024200370300200542003703b802200541e0016a41c7e5c000410610cb0120022004290000370300200520052900e0013703b802200541e0016a419081c400410610cb01201241086a221a2004290300370000201220052903e001370000200541106a200541b8026a412010ce0320062005280214410020052802101b36020020054101360288012005200e410020134101461b36028c01200b4200370300200f4200370300200c4200370300200542003703b801200541b8026a41cde5c000410410cb01200c2002290000370300200520052900b8023703b801200541e0016a41b8d8c700410a10cb0120102004290000370000201620052900e001370000200541b8016a412020054188016a41047210d708201742003703002019420037030020024200370300200542003703b802200541e0016a41cde5c000410410cb0120022004290000370300200520052900e0013703b802200541e0016a41e8d5c700410e10cb01201a2004290300370000201220052903e00137000020054188016a200541b8026a10f00720052d0088014101460d01200b4200370300200f4200370300200c4200370300200542003703b8010c030b200541b8016a41186a200c41186a2210290000370300200541b8016a41106a200c41106a2217290000370300200541b8016a41086a200c41086a22192900003703002005200c2900003703b8012019290000210d20172900002114200c290000211520054188016a41186a2217201029000037030020054188016a41106a2210201437030020054188016a41086a2219200d3703002005201537038801200541b8026a41186a221a2017290300370300200541b8026a41106a22172010290300370300200541b8026a41086a221b201929030037030020052005290388013703b8020240200528029c0220136b411f4b0d0020054198026a201341201077200528029802210620052802a00221130b200c41206a210c200620136a221020052903b802370000201041186a201a290300370000201041106a2017290300370000201041086a201b2903003700002005201341206a22133602a0020c010b0b200b200541a1016a290000370300200f20054199016a290000370300200c20054191016a29000037030020052005290089013703b8010b20054188016a410c6a201836020020054188016a41086a201136020020054188016a41106a20052903b80137030020054188016a41186a200541b8016a41086a290300370300200541a8016a200541b8016a41106a29030037030020054188016a41286a200541b8016a41186a2903003703002005200836028c012005410036028801200541b8026a20054188016a10c202200541eb016a200541b8026a41086a2202280200360000200520052903b8023700e301200541b8026a410c6a200541e7016a290000370000200541c28289aa043600b902200541023a00b802200520052900e0013700bd02200541b8026a10c30202402011450d00201141286c450d00200810390b200541b8026a41186a4200370300200541b8026a41106a420037030020024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a41e8d9c700410f10cb01201241086a2004290300370000201220052903e00137000020054188016a200541b8026a10f108024020052d00980122024103460d00200529038801210d2005290390012114200541d0026a4200370300200541c8026a4200370300200541b8026a41086a22044200370300200542003703b802200541e0016a41cde5c000410410cb012004200541e0016a41086a220c290000370300200520052900e0013703b802200541e0016a41acd9c700410b10cb01201241086a200c290300370000201220052903e001370000200541b8026a200d201420021085090b200541b8026a41186a4200370300200541c8026a4200370300200541b8026a41086a22024200370300200542003703b802200541e0016a41cde5c000410410cb012002200541e0016a41086a2204290000370300200520052900e0013703b802200541e0016a41b8d5c700411810cb01201241086a2004290000370000201220052900e001370000200541203602f4012005200541b8026a3602f001200541f8016a200541b8026a412010e4010240024020052802f80122040d00410321020c010b20052802fc01210c2005200541f8016a41086a28020036029402200520043602900220054188016a20054190026a108a0541042102024020052d009801220b4103460d00200541e0016a41086a20054188016a41086a29030037030020052005290388013703e00120052005280099013602880220052005419c016a28000036008b02200b21020b0240024020024104470d002005420037029c022005200a360298022005410d3602ac022005200541f0016a3602a802200520054198026a3602b4022005419c016a41013602002005420137028c01200541949fc500360288012005200541a8026a36029801200541b4026a41b4dfc40020054188016a103b1a20052802980220052802a00210d1010240200528029c02450d0020052802980210390b410321020c010b2005200528028802360288012005200528008b0236008b0120052903e801210d20052903e00121140b0240200c450d00200410390b024020024103470d00410321020c010b200541b8026a412010e0010b2005200528008b0136009b02200520052802880136029802024020024103460d00200541b8026a41186a4200370300200541b8026a41106a4200370300200541b8026a41086a22044200370300200542003703b802200541e0016a41cde5c000410410cb012004200541e0016a41086a220c290000370300200520052900e0013703b802200541e0016a41e8d9c700410f10cb01201241086a200c290300370000201220052903e001370000200541b8026a2014200d2002108509200541a4016a200528009b0236000020054188016a41186a20023a000020054188016a41106a200d37030020054188016a41086a201437030020052005280298023600a1012005410236028801200541b8026a20054188016a10c202200541e0016a41036a220241086a2004280200360000200220052903b802370000200541c4026a200541e7016a290000370000200541c28289aa043600b902200541023a00b802200520052900e0013700bd02200541b8026a10c3020b41081038220e450d05200e2007360204200e2001360200410810382213450d052013200936020420132003360200200541b8016a41186a220c4200370300200541b8016a41106a220b4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a41c7e5c000410610cb012002200541b8026a41086a2204290000370300200520052900b8023703b801200541e0016a419081c400410610cb01201641086a220f200541e0016a41086a2210290000370000201620052900e001370000200541086a200541b8016a412010ce0320052802082111200528020c2112200c4200370300200b420037030020024200370300200542003703b801200541b8026a41e0c1cd00410810cb0120022004290000370300200520052900b8023703b801200541e0016a41d0facd00410e10cb01200f2010290000370000201620052900e0013700002005201241ac026a41ac0220111b36028801200541b8016a412020054188016a410410e901200541b8026a200e10990b0240024020052802b802450d0020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200429030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054194016a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200e10960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0820024105742204417f4c0d08200410382208450d072008200541b8016a4101722202290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a2900003700004101210b200541013602702005200836026820052004410576221036026c200541b8026a200e10990b024020052802b802450d0020054188016a4104722104200541b8016a41017221024120210f4101210b034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2211200441086a290000370000200241106a2212200441106a290000370000200241186a2206200441186a2900003700000240200b2010470d0020054188016a200e10960b200541e8006a2010417f200528028801220c41016a22082008200c491b109e02200528026821080b2008200f6a220c2002290000370000200c41186a2006290000370000200c41106a2012290000370000200c41086a20112900003700002005200b41016a220b360270200541b8026a200e10990b200f41206a210f200528026c211020052802b8020d000b0b200e10390c010b200e10394100210b41002110200a21080b200541d0016a4200370300200541c8016a4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a41e0c1cd00410810cb012002200541b8026a41086a290000370300200520052900b8023703b801200541e0016a41c8fbcd00410410cb01201641086a200541e0016a41086a290000370000201620052900e001370000200b4105744104722202417f4c0d06200210382204450d0520054100360290012005200236028c01200520043602880120054188016a200b10ac0202400240200b0d00200528028801210f20052802900121040c010b200b410574210b20052802900121042008210203400240200528028c0120046b411f4b0d0020054188016a20044120107720052802900121040b200528028801220f20046a220c2002290000370000200c41086a200241086a290000370000200c41106a200241106a290000370000200c41186a200241186a2900003700002005200441206a220436029001200241206a2102200b41606a220b0d000b0b200541b8016a4120200f200410e9010240200528028c01450d00200f10390b0240201041ffffff3f71450d00200810390b2013103941081038220e450d05200e2007360204200e2001360200410810382208450d052008200936020420082003360200200541b8016a41186a4200370300200541b8016a41106a4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a41b69fc500410710cb012002200541b8026a41086a2204290000370300200520052900b8023703b801200541e0016a41d091c600410c10cb01201641086a200541e0016a41086a290000370000201620052900e0013700002005200541b8016a412010ce032005280204211720052802002119200541b8026a200e109a0b0240024020052802b802450d0020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200429030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054188016a410c6a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200e10960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0820024105742204417f4c0d08200410382213450d072013200541b8016a4101722202290000370000201341186a200241186a290000370000201341106a200241106a290000370000201341086a200241086a2900003700004101210b200541013602702005201336026820052004410576221136026c200541b8026a200e109a0b024020052802b802450d0020054188016a4104722104200541b8016a41017221024120210f4101210b034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2210200441086a290000370000200241106a2212200441106a290000370000200241186a2206200441186a2900003700000240200b2011470d0020054188016a200e10960b200541e8006a2011417f200528028801220c41016a22132013200c491b109e02200528026821130b2013200f6a220c2002290000370000200c41186a2006290000370000200c41106a2012290000370000200c41086a20102900003700002005200b41016a220b360270200541b8026a200e109a0b200f41206a210f200528026c211120052802b8020d000b0b200e10390c010b200e1039200a2113410021114100210b0b200541b8026a2008109a0b0240024020052802b802450d0020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a29030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054194016a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200810960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0820024105742204417f4c0d08200410382218450d072018200541b8016a4101722202290000370000201841186a200241186a290000370000201841106a200241106a290000370000201841086a200241086a2900003700004101210f200541013602702005201836026820052004410576220c36026c200541b8026a2008109a0b024020052802b802450d0020054188016a4104722104200541b8016a4101722102412021104101210f034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2212200441086a290000370000200241106a2206200441106a290000370000200241186a220e200441186a2900003700000240200f200c470d0020054188016a200810960b200541e8006a200c417f200528028801221841016a221a201a2018491b109e02200528026821180b201820106a220c2002290000370000200c41186a200e290000370000200c41106a2006290000370000200c41086a20122900003700002005200f41016a220f360270200541b8026a2008109a0b201041206a2110200528026c210c20052802b8020d000b0b200810390c010b200810394100210c200a21184100210f0b024002402017410020191b22100d002005200b3602c002200520113602bc02200520133602b8022005200f360290012005200c36028c0120052018360288014100200541b8026a20054188016a10e5060c010b200541a0016a2202420037030020054198016a2204420037030020054188016a41086a221242003703002005420037038801200541e0016a41b6e2c400410b10cb012012200541e0016a41086a2206290000370300200520052900e00137038801200541e0016a41e4e4c400411610cb0120022006290300370300200420052903e001370300200541b8026a20054188016a10e40602400240024020052802b80222020d00200542003702bc0141002106200541002802d8974e3602b8010c010b20052902bc02210d200520023602b8012005200d3702bc01200d422088a72212200da72206470d010b200541b8016a200610800320052802b801210220052802c00121120b20022012411c6c6a220220103602182002201836020c2002200b3602082002201136020420022013360200200241146a200f360200200241106a200c360200200520052802c001220f41016a22023602c001024020052802b801220c0d00200541a0016a420037030020054188016a41106a420037030020054188016a41086a220242003703002005420037038801200541e0016a41b6e2c400410b10cb012002200541e0016a41086a220c290000370300200520052900e00137038801200541e0016a41e4e4c400411610cb01200441086a200c290300370000200420052903e00137000020054188016a412010e0010c010b20052802bc01210b200541a0016a420037030020054188016a41106a420037030020054188016a41086a221042003703002005420037038801200541e0016a41b6e2c400410b10cb012010200541e0016a41086a2211290000370300200520052900e00137038801200541e0016a41e4e4c400411610cb01200441086a2011290300370000200420052903e0013700002002411c6c41046a2204417f4c0d070240024020040d00410121100c010b200410382210450d070b200541003602c002200520043602bc02200520103602b802200541b8026a200210ac02200c2002200541b8026a10af0220054188016a412020052802b802220420052802c00210e901024020052802bc02450d00200410390b02402002450d00200f411c6c411c6a2104200c210203400240200241046a28020041ffffff3f71450d00200228020010390b0240200241106a28020041ffffff3f71450d002002410c6a28020010390b2002411c6a2102200441646a22040d000b0b200b450d00200b411c6c450d00200c10390b41081038220e450d05200e2007360204200e2001360200410810382213450d052013200936020420132003360200200541b8026a200e109b0b20052802b802450d0220054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a29030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054194016a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200e10960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0620024105742204417f4c0d06200410382208450d052008200541b8016a4101722202290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a2900003700004101210b200541013602702005200836026820052004410576221036026c200541b8026a200e109b0b024020052802b802450d0020054188016a4104722104200541b8016a41017221024120210f4101210b034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2211200441086a290000370000200241106a2212200441106a290000370000200241186a2206200441186a2900003700000240200b2010470d0020054188016a200e10960b200541e8006a2010417f200528028801220c41016a22082008200c491b109e02200528026821080b2008200f6a220c2002290000370000200c41186a2006290000370000200c41106a2012290000370000200c41086a20112900003700002005200b41016a220b360270200541b8026a200e109b0b200f41206a210f200528026c211020052802b8020d000b0b200e103920080d03200541d0016a4200370300200541c8016a4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a41dc8ccc00410f10cb012002200541b8026a41086a290000370300200520052900b8023703b801200541e0016a418c8fcc00411410cb01201641086a200541e0016a41086a290000370000201620052900e001370000200541b8016a412010e0010c040b41a4bdc70041c90041f0bdc700105b000b41a4bdc70041c9004180bec700105b000b200e10394100210b41002110200a21080b200541a0016a2202420037030020054198016a2204420037030020054188016a41086a220c42003703002005420037038801200541b8026a41dc8ccc00410f10cb01200c200541b8026a41086a290000370300200520052900b80237038801200541e0016a418c8fcc00411410cb012002200541e0016a41086a290000370300200420052900e001370300200b4105744104722202417f4c0d02200210382204450d01200541003602c002200520023602bc02200520043602b802200541b8026a200b10ac0202400240200b0d0020052802b802210f20052802c00221040c010b200b410574210b20052802c0022104200821020340024020052802bc0220046b411f4b0d00200541b8026a20044120107720052802c00221040b20052802b802220f20046a220c2002290000370000200c41086a200241086a290000370000200c41106a200241106a290000370000200c41186a200241186a2900003700002005200441206a22043602c002200241206a2102200b41606a220b0d000b0b20054188016a4120200f200410e901024020052802bc02450d00200f10390b201041ffffff3f71450d00200810390b20131039410810382206450d00200620073602042006200136020041081038220e450d00200e2009360204200e2003360200024002402000450d00200541b8026a2006109c0b0240024020052802b802450d0020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a29030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054194016a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200610960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0520024105742204417f4c0d05200410382208450d042008200541b8016a4101722202290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a2900003700004101210b200541013602702005200836026820052004410576220c36026c200541b8026a2006109c0b024020052802b802450d0020054188016a4104722104200541b8016a41017221024120210f4101210b034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2210200441086a290000370000200241106a2211200441106a290000370000200241186a2212200441186a2900003700000240200b200c470d0020054188016a200610960b200541e8006a200c417f200528028801220841016a221320132008491b109e02200528026821080b2008200f6a220c2002290000370000200c41186a2012290000370000200c41106a2011290000370000200c41086a20102900003700002005200b41016a220b360270200541b8026a2006109c0b200f41206a210f200528026c210c20052802b8020d000b0b200610390c010b200610394100210b4100210c200a21080b2005200b3602900120052008360288012005200c36028c01200541d0016a4200370300200541c8016a4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a418ce6c000411210cb012002200541b8026a41086a290000370300200520052900b8023703b801200541e0016a41c8fbcd00410410cb01201641086a200541e0016a41086a290000370000201620052900e001370000200541b8016a20054188016a1089090240200c41ffffff3f71450d00200810390b200541b8026a200e109c0b0240024020052802b802450d0020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a29030037030020054188016a41186a200541b8026a41186a29030037030020054188016a41206a200541b8026a41206a280200360200200541c1016a20054194016a290200370000200541c9016a2005419c016a290200370000200541d1016a200541a4016a290200370000200520052903b802370388012005200529028c013700b90120054188016a200e10960b417f200528028801220241016a220420042002491b220241ffffff3f712002470d0520024105742204417f4c0d0520041038220a450d04200a200541b8016a4101722202290000370000200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a2900003700004101210b200541013602702005200a36026820052004410576220c36026c200541b8026a200e109c0b024020052802b802450d0020054188016a4104722104200541b8016a41017221024120210f4101210b034020054188016a41206a200541b8026a41206a28020036020020054188016a41186a200541b8026a41186a29030037030020054188016a41106a200541b8026a41106a29030037030020054188016a41086a200541b8026a41086a290300370300200520052903b8023703880120022004290000370000200241086a2210200441086a290000370000200241106a2211200441106a290000370000200241186a2212200441186a2900003700000240200b200c470d0020054188016a200e10960b200541e8006a200c417f200528028801220641016a220a200a2006491b109e022005280268210a0b200a200f6a220c2002290000370000200c41186a2012290000370000200c41106a2011290000370000200c41086a20102900003700002005200b41016a220b360270200541b8026a200e109c0b200f41206a210f200528026c210c20052802b8020d000b0b200e10390c010b200e10394100210b4100210c0b2005200b360290012005200a360288012005200c36028c01200541d0016a4200370300200541c8016a4200370300200541b8016a41086a22024200370300200542003703b801200541b8026a418ce6c000411210cb012002200541b8026a41086a290000370300200520052900b8023703b801200541e0016a41c59fc500410810cb01201641086a200541e0016a41086a290000370000201620052900e001370000200541b8016a20054188016a108909200c41ffffff3f71450d01200a10390c010b200e1039200610390b200541e0026a24000f0b1032000b1034000bec5105057f017e117f017e0a7f230041a00a6b22032400200341206a10a907200341d8046a22044200370300200341d0046a22054200370300200341c0046a41086a22064200370300200342003703c004200341b0076a41d8adc300410b10cb012006200341b0076a41086a2207290000370300200320032900b0073703c004200341b0076a4184b0c300411310cb0120042007290000370300200520032900b007370300200341186a200341c0046a412010ce030240024002402001ad42f4027e2208422088a70d002008a72204417f4c0d0020032802182109200328021c210a02400240024020040d00410421060c010b200410382206450d010b4100210b20034100360238200320063602302003200441f4026e220436023402400240024002400240024002400240200420014f0d00200341306a200110bc09200328023021062003280238210b0c010b20010d00410021040c010b2006200b41f4026c6a21044100210c41002802d8974e210d200341b0076a41106a210e200341dc096a210f200341b0076a41186a2110200341d0006a41286a2111200341d0006a41306a2112200341d0006a41386a21134104211441002106034020104200370300200e4200370300200341b0076a41086a22154200370300200342003703b007200341c0046a41b9c3c200410d10cb012015200341c0046a41086a2216290000370300200320032900c0043703b007200341c0046a41c4c9c200411110cb01200e41086a2016290000370000200e20032900c004370000200341c0046a200341b0076a10e50520032802c0042217200d20171b2118410121190240200620032902c404420020171b2208422088a74f0d004101211902400240201820146a2217417c6a280200417f6a0e020102000b20172802002107410021190c010b200341c0046a41186a4200370300200341c0046a41106a420037030020164200370300200342003703c004200341b0076a41ecc0cc00410510cb0120162015290000370300200320032900b0073703c004200341b0076a41c49ac300410a10cb01200541086a2015290000370000200520032900b007370000200341b0076a200341c0046a412010e603200620032902b407420020032802b00722071b221a422088a722174f0d032007200d20071b2217200c6a280200210741002119201a42ffffffff0383500d00201710390b02402008a72217450d002017412c6c450d00201810390b200641016a210641002117024020190d00200341d0006a200710de08200341b0076a20032802502217200328025810df08024020032802d8092215450d00200341c0046a200341b0076a41a80210d40b1a200341a8016a41386a200f41386a290200370300200341a8016a41306a200f41306a290200370300200341a8016a41286a200f41286a290200370300200341a8016a41206a200f41206a290200370300200341a8016a41186a200f41186a290200370300200341a8016a41106a200f41106a290200370300200341a8016a41086a200f41086a2902003703002003200f2902003703a8010b02402003280254450d00201710390b200341b0076a200341c0046a41a80210d40b1a2013200341a8016a41386a2903003703002012200341a8016a41306a2903003703002011200341a8016a41286a290300370300200341d0006a41206a200341a8016a41206a290300370300200341d0006a41186a200341a8016a41186a290300370300200341d0006a41106a200341a8016a41106a290300370300200341d0006a41086a200341a8016a41086a290300370300200320032903a801370350410121170b20042017360200200441046a2007360200200441086a200341b0076a41a80210d40b1a200441b0026a2015360200200441b4026a2003290350370200200441bc026a200341d0006a41086a290300370200200441c4026a200341d0006a41106a290300370200200441cc026a200341d0006a41186a290300370200200441d4026a200341d0006a41206a290300370200200441dc026a2011290300370200200441e4026a2012290300370200200441ec026a2013290300370200200441f4026a21042014412c6a2114200c41046a210c20012006470d000b200b20016a2104200328023021060b20032004360238200320063602a80120032006200441f4026c6a3602ac012003200436025020044180808080024f0d01200342003702b40720034100280284ee4d3602b007024002400240200441037620044107714100476a2206450d00200341b0076a410020061077200620032802b807220e4b0d010b20032802b00721070c010b024020032802b407200e6b2006200e6b22064f0d00200341b0076a200e2006107720032802b807210e0b20032802b0072207200e6a21170240024020064102490d00201741002006417f6a10d60b1a2006200e6a20076a417f6a21170c010b2006450d010b201741003a00000b20032802b4072119200341b9076a20042004410771200441ffffffff0171220641084922171bad3c0000200342003c00b40720032007ad3e02b007200342003703c0074100210e200341003602c807200320074100200641037620171b6aad3e00b5072003200341a8016a3602bc07200341b0076a10f4092208422888a7221741ff01714102460d020340024020032802bc07220628020022042006280204470d0041012008422088a74107717421062008a7210402400240201741ff0171450d0020042d000020067221060c010b20042d00002006417f737121060b200420063a00000c050b2006200441f4026a36020041012008422088a74107717421172008a721060240024020042802004101470d00200441b0026a280200450d0020062d000020177221040c010b20062d00002017417f737121040b200620043a0000200e41016a210e200341b0076a10f4092208422888a7221741ff01714102470d000c040b0b20062017419cdec200103c000b200341cc046a4102360200200341c4076a4102360200200342023702b407200341dcb6cd003602b007200341d8b6cd003602c804200341023602c4042003200341c0046a3602c0072003200341d0006a3602c004200341b0076a41ecb6cd001043000b4100210e20034100360288040c010b2003200e36028804200e418080808002490d00200341cc046a4102360200200341c4076a4102360200200342023702b407200341dcb6cd003602b007200341d8b6cd003602c804200341023602c4042003200341c0046a3602c007200320034188046a3602c004200341b0076a41fcb6cd001043000b02400240024002400240201941ffffffff01712019470d0020032019410374220436025002402004200e4f0d00200341cc046a4102360200200341c4076a4102360200200342023702b407200341dcb6cd003602b007200341023602c4042003200341c0046a3602c0072003200341d0006a3602c804200320034188046a3602c004200341b0076a419cb7cd001043000b200e4103742104024020032802a801220620032802ac012215460d00034020044103762117200641b0026a280200210f20062802002114024002402004450d002017410771220e45410374200e724108470d010b200320073602b0072003200441067620044138714100476a220e3602b807200320193602b4070240200e2019470d00200341b0076a20194101107720032802b007210720032802b807210e0b2007200e6a41003a000020032802b407211920032802b00721070b200741002004410676200441c000491b6a210e41012017410771742117024002402014450d00200f450d00200e2d000020177221170c010b200e2d00002017417f737121170b200441086a2104200e20173a0000200641f4026a22062015470d000b0b200a410020091b211b200320193602482003200436024420032007360240200341d8046a4200370300200341d0046a4200370300200341c0046a41086a22044200370300200342003703c004200341b0076a41c7e5c000410610cb012004200341b0076a41086a2206290000370300200320032900b0073703c004200341b0076a41b081c400410a10cb01200541086a2006290000370000200520032900b007370000200341b0076a200341c0046a41201085040240024020032d00b0074101460d00200341a4046a42003702002003419c046a420037020020034194046a42003702002003420037028c040c010b200341a4046a200341c9076a2900003702002003419c046a200341c1076a29000037020020034194046a200341b9076a290000370200200320032900b10737028c040b2003201b36028804200241086a2802002207ad42d0007e2208422088a70d062008a72204417f4c0d060240024020040d004104211c0c010b20041038221c450d060b200341003602a0012003201c360298012003200441d0006e36029c012002280200221d200741d0006c22046a210d2002280204211e201d21062007450d03200441b07f6a2112200341b0076a410c6a211020034188046a410472211f200341c0076a2120200341c0046a410472212141002109201d2104410121070340200441d0006a210620042802002202450d04200320023602c0042021200441046a41cc0010d40b1a024020032802c40422224103762001460d00200041046a410110a309200041013602000c030b0240200720032802cc04220b200e4b724101710d00200041046a410210a309200041013602000c030b0240200b2003280228490d00200041046a410310a309200041013602000c030b200341a8016a200341c0006a10cb09200341b0076a200341c0046a10cb0920032802b007212320032802b807212420032802a8012111024020032802ac01220a410376220f450d0020032802b4072204410376200441077122176a22042004410771200441084922071b211820234100200441037620071b6a210c200a410771210420232107034020114100200441037620044108491b6a220e2d0000410120044107717422157121160240024002402007200c470d0020182119200c2114201741ff0171201841ff0171460d010b201741ff0171221941016a22142014410771201941074922131b211920074100201441037620131b6a211420072d0000201741077176410171220741ff01714102470d010b410221070b02400240201641ff0171450d0020074102460d002007410171450d00200e2d000020157221070c010b200e2d00002015417f737121070b200e20073a0000200441016a21042014210720192117200f417f6a220f0d000b0b02402024450d00202310390b20032802b0012119410021170240200a20227341074b0d00200342003702cc07200342203702c407200320223602c007200320023602bc07200341203602b8072003200a3602b407200320113602b0070340200341106a200341b0076a10f5094101211720032802102204450d0120032802142107200341086a201010f5092003280208220e450d01200328020c21172004200710f609200e201710f609460d000b410021170b02402019450d00201110390b024020170d00200041046a410d10a309200041013602000c030b20032802202119200341b0076a200341c0046a41d00010d40b1a200342013703a00720032802b4072107200341003602a80720032802b00721172007410376220e200341a0076a1079024020032802a40720032802a80722046b200e20074107716a220741037620074107714100476a220e4f0d00200341a0076a2004200e107720032802a80721040b200b410574211420032802a007220720046a2017200e10d40b1a20032004200e6a22043602a807200341003602d803200342013703d003200341d0036a41004104107720032802d00320032802d803220e6a201b3600002003200e41046a3602d803201f200341d0036a10b50220032802d403210f20032802d0032117024020032802a40720046b20032802d803220e4f0d00200341a0076a2004200e107720032802a007210720032802a80721040b201920146a2119200720046a2017200e10d40b1a2004200e6a21040240200f450d00201710390b202020072004201910c4012104024020032802a407450d00200710390b20032802b007210702402004450d0020032802b807210e20032802b4072117200341a8016a201041c40010d40b1a200341d0006a200341a8016a41c40010d40b1a02402009200328029c01470d0020034198016a2009108105200328029801211c20032802a00121090b201c200941d0006c6a2204200e36020820042017360204200420073602002004410c6a200341d0006a41c40010d40b1a2003200941016a22093602a001201241b07f6a21124100210720062104200b210e2006200d470d010c060b0b024020032802b807450d00200710390b200041046a410410a309200041013602000c020b41bcb6cd00411c418cb7cd00105b000b024020032802c804450d00200210390b200320023602c0040b0240200d2006460d000340200628020021040240200641086a2207280200220e450d00200410390b200620043602002007200e360200200641d0006a2106201241b07f6a22120d000b0b0240201e450d00201e41d0006c450d00201d10390b2003280298012119024020032802a0012204450d00200441d0006c2107201921040340200428020021060240200441086a220e2802002217450d00200610390b20042006360200200e2017360200200441d0006a2104200741b07f6a22070d000b0b0240200328029c012204450d00200441d0006c450d00201910390b02402003280248450d00200328024010390b20032802302114024020032802382204450d00200441f4026c210620142104034002402004280200450d00200441b0026a220e2802002207450d000240200441b8026a22172802002219450d00200710390b20172019360200200e2007360200200441c4026a280200450d00200441bc026a28020010390b200441f4026a21042006418c7d6a22060d000b0b024020032802342204450d00200441f4026c450d00201410390b200328022441ffffff3f71450d05200328022010390c050b200d2006460d000340200641d0006a2104200628020021070240200641086a220e2802002217450d00200710390b20062007360200200e201736020020042106200d2004470d000b0b0240201e450d00201e41d0006c450d00201d10390b20032802a0012104200328029c01210b200328029801210202402003280248450d00200328024010390b200341d8046a4200370300200341c0046a41106a4200370300200341c0046a41086a22134200370300200342003703c004200341b0076a41c7e5c000410610cb012013200341b0076a41086a2206290000370300200320032900b0073703c004200341b0076a419081c400410610cb01200541086a2006290000370000200520032900b0073700002003200341c0046a412010ce032002200441d0006c6a21182002210f024002402004450d002003280204410020032802001b2105200341d0036a41046a210d20034188046a41086a2110200221040340200441d0006a210f20042802002216450d012004280204220c410376200c41077122076a220620064107712006410849220e1b2115200428020c2111200428020821120240024041002006410376200e1b22040d002007201541ff0171460d010b201620046a2114200741016a22044107712004200741074622171b21064100210e20162004410376410020171b6a210420162d0000200776410171ad42288621080340200e41f4026c2117024003402008428080808080c00084428080808080e03f83428080808080c000520d01024020042014470d00200641ff0171201541ff0171460d040b200e41016a210e201741f4026a211720042d0000200641077176410171ad4228862108200641ff0171220641016a22072007410771200641074922191b210620044100200741037620191b6a21040c000b0b02400240024002400240024020032802382207200e4d0d00200328023020176a22072802004101470d01200741b0026a2802002217450d050240200741b4026a280200220741037620114b0d00428080808080c00021084200211a0c050b20074107712207410048201120076a2207201148730d020240200741084f0d0041002109200721190c040b20074107712119200741037521090c030b200e200741f495c800103c000b418496c80041d60041dc96c800105b000b20074107712119200741037621090b2019ad42ff0183422086201720096a2207ad84211a20072d0000201941077176410171ad42288621080b2008428080808080c000510d00201aa7220720072d00004101201a422088a741077174723a00000b024020042014470d00200641ff0171201541ff0171460d020b200e41016a210e20042d0000200641077176410171ad4228862108200641ff0171220641016a22072007410771200641074922171b210620044100200741037620171b6a21040c000b0b200341a8016a419399c700410d10cb01200341c0046a41a892c800411510cb01200320113602d0032003200341d0036a410410cc01370388042003200d3602bc07200320103602b4072003200341d0036a3602b807200320034188046a3602b007200341d0006a200341b0076a1083012003280258220e41206a2204417f4c0d0402400240024020040d0020034100360290042003200436028c0420034101360288040c010b200410382206450d0541002107200341003602900420032006360288042003200436028c042004410f4b0d010b20034188046a410041101077200328028c042104200328028804210620032802900421070b200620076a221720032900a801370000201741086a200341a8016a41086a2900003700002003200741106a2207360290040240200420076b410f4b0d0020034188046a200741101077200328028c042104200328028804210620032802900421070b200620076a221720032900c004370000201741086a20132900003700002003200741106a220736029004200328025021170240200420076b200e4f0d0020034188046a2007200e1077200328028804210620032802900421070b200620076a2017200e10d40b1a20032007200e6a22173602900402402003280254450d00200328025010390b2003280288042106200341003602b807200342013703b0072016200c200341b0076a10e702024020032802b407220e20032802b80722046b41034b0d00200341b0076a20044104107720032802b407210e20032802b80721040b20032802b007220720046a2005360000200620172007200441046a10e9010240200e450d00200710390b0240200328028c04450d00200610390b02402012450d00201610390b200f2104200f2018470d000c020b0b2018200f460d000340200f41d0006a2104200f28020021060240200f41086a2207280200220e450d00200610390b200f20063602002007200e3602002004210f20182004470d000b0b0240200b450d00200b41d0006c450d00200210390b20032802284101742204410370210e200441036e2117200141ffffffff03712001470d0120014102742204417f4c0d010240024020040d00410421060c010b200410382206450d010b200341003602a00120032006360298012003200441027636029c012003280230220f2003280238220441f4026c22196a210720032802342115200f21062004450d022017200e6a2112200f20196a418c7d6a2113200341b8096a211d20034198096a211c200341d8086a210a200341b8086a211b20034198086a211e200341f8076a2124200341b0076a41286a2123200341b0076a41086a2121200341b0076a41cc026a2122200341c0046a41a8026a2114200341b0076a410472210b200341c0046a4104722116200341b0076a41b4026a2118200341dc096a2119200341b0076a41a8026a2111200f2106034020062104024002400340200428020022064102460d01024020064101470d00200441b0026a280200220e0d030b200441f4026a22042007470d000b200721060c050b200441f4026a21060c040b200441046a280200210d200341d0006a41386a2206200441ec026a290200370300200341d0006a41306a2217200441e4026a290200370300200341d0006a41286a2210200441dc026a290200370300200341d0006a41206a2205200441d4026a290200370300200341d0006a41186a2202200441cc026a290200370300200341d0006a41106a2209200441c4026a290200370300200341d0006a41086a221f200441bc026a2902003703002003200441b4026a290200370350200341b0076a200441086a41a80210d50b1a200341a8016a200341b0076a41a80210d40b1a200341b0076a200341a8016a41a80210d40b1a201941386a2006290300370200201941306a2017290300370200201941286a2010290300370200201941206a2005290300370200201941186a2002290300370200201941106a2009290300370200201941086a201f290300370200201920032903503702002003200e3602d8094100211020032802dc0922174103762202201741077122066a220541037620054107714100476a21054100210902402002200672450d00200220176a41077122174541037420177221090b024002400240024002400240024020050d0041b8c0cd002106410021170c010b024020060d0020094108470d00200e2106200521170c010b024020094108470d002005417f6a2117200141807e712006722101410021100c030b20060d01200e2005417f6a22176a2110200e21062009210c0b410021020c020b20054101460d022005417e6a2117200141807e7120067221012005200e6a417f6a21102009210c0b200e41016a210641ff0121050240200141ff0171450d00417f410020016b41077174417f7320014107717421050b2005200e2d0000716921020b410021054100210e02402017450d004100210e0340200e20062d0000696a210e200641016a21062017417f6a22170d000b0b200e20026a210602402010450d00417f417f200c41077174417f73200c41ff01714108461b20102d0000716921050b200620056a21060c010b417f417f200920066b221741077174417f7320067420174108461b200e2d000071692106200e21010b0240024020062012490d00200341c0046a200d10de0820032802c004220620032802c80410e001024020032802c404450d00200610390b200341a0076a200d10e008200341c0046a20032802a007220e20032802a807221710e1080240024020032802c00422060d00410021060c010b200e201710e00120034188046a41306a201641306a28020036020020034188046a41286a201641286a29020037030020034188046a41206a201641206a29020037030020034188046a41186a201641186a29020037030020034188046a41106a201641106a29020037030020034188046a41086a201641086a29020037030020032016290200370388040b024020032802a407450d00200e10390b02402006450d00200341d0036a41306a220e20034188046a41306a280200360200200341d0036a41286a221720034188046a41286a290300370300200341d0036a41206a220d20034188046a41206a290300370300200341d0036a41186a221020034188046a41186a290300370300200341d0036a41106a220520034188046a41106a290300370300200341d0036a41086a220220034188046a41086a220929030037030020032003290388043703d00320032802f009211f200341c0046a200b41a40210d40b1a201420032903d003370200201441086a2002290300370200201441106a2005290300370200201441186a2010290300370200201441206a200d290300370200201441286a2017290300370200201441306a200e280200360200200320063602e406200341a0076a41086a201841086a280200360200200320182902003703a0072009201141086a2802003602002003201129020037038804201f200341c0046a200341a0076a20034188046a20032802b00720032802f80910ee0920032802b007210e024020032802a0012206200328029c01470d0020034198016a2006410110ab0120032802a00121060b20032802980120064102746a200e3602002003200641016a3602a0010c020b024041002802d0a94e4102490d0041002802cca94e210641002802c8a94e210e41002802d4a94e2117200342013703d004200341ec96c8003602cc0420034281808080d02b3702fc042003419ea0c700ad4280808080d005843702f404200341003602f004200341f89fc700ad4280808080e004843703e804200342003703e004200341123602c804200341f496c8003602c404200341023602c004200341b8c0cd003602dc04200e41b8c0cd00201741024622171b200341c0046a200641c0a4c00020171b2802101103000b20032802d8092106024020032802e009220e450d00200610390b2003200e3602e009200320063602d80920032802ec09450d0120032802e40910390c010b20034188046a200d10de082003280290042110200328028804210d200341003602c804200342013703c00420032802b0072106200341c0046a41004104107720032802c00420032802c804220e6a20063600002003200e41046a3602c804412010382206450d0220032802c404211720032802c804210e20062022290000370000200641086a2205202241086a290000370000200641106a2202202241106a290000370000200641186a2209202241186a29000037000002402017200e6b411f4b0d00200341c0046a200e4120107720032802c804210e0b20032802c004200e6a22172006290000370000201741086a2005290000370000201741106a2002290000370000201741186a20092900003700002003200e41206a3602c8042006103920032802b407210e024020032802c40420032802c80422066b41034b0d00200341c0046a20064104107720032802c80421060b20032802c00420066a200e3600002003200641046a3602c8042021200341c0046a10b502024020032802c40420032802c804220e6b411f4b0d00200341c0046a200e4120107720032802c804210e0b20032802c004200e6a22062023290000370000200641086a202341086a290000370000200641106a202341106a290000370000200641186a202341186a2900003700002003200e41206a3602c8042024200341c0046a10b502201e200341c0046a10b502201b200341c0046a10b502024020032802c40420032802c804220e6b413f4b0d00200341c0046a200e41c000107720032802c804210e0b20032802c004200e6a2206200a290000370000200641086a200a41086a290000370000200641106a200a41106a290000370000200641186a200a41186a290000370000200641206a200a41206a290000370000200641286a200a41286a290000370000200641306a200a41306a290000370000200641386a200a41386a2900003700002003200e41c0006a3602c804201c200341c0046a10b502201d200341c0046a10b50220032802d80920032802dc09200341c0046a10e70220032802e40920032802e809200341c0046a10e70220032802f009210e024020032802c40420032802c80422066b41034b0d00200341c0046a20064104107720032802c80421060b20032802c00420066a200e3600002003200641046a22063602c80420032802f409210e024020032802c40420066b41034b0d00200341c0046a20064104107720032802c80421060b20032802c00420066a200e3600002003200641046a22063602c80420032802f809210e024020032802c40420066b41034b0d00200341c0046a20064104107720032802c80421060b20032802c00420066a200e3600002003200641046a22063602c804200d201020032802c004200610e901024020032802c404450d0020032802c00410390b0240200328028c04450d00200d10390b20032802d8092106024020032802e009220e450d00200610390b2003200e3602e009200320063602d80920032802ec09450d0020032802e40910390b200441f4026a210620132004470d000b200721060c020b1032000b1034000b024020072006460d0003402006220441f4026a210602402004280200450d00200441b0026a2217280200220e450d000240200441b8026a22192802002214450d00200e10390b201920143602002017200e360200200441c4026a280200450d00200441bc026a28020010390b20072006470d000b0b02402015450d00201541f4026c450d00200f10390b2000200329039801370204200041003602002000410c6a200341a0016a280200360200200328022441ffffff3f71450d00200328022010390b200341a00a6a24000be60301067f230041d0006b22022400200241086a419399c700410d10cb01200241186a41a099c700411310cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bb10201017f230041b0036b220324002003200236020420032001360200200341086a2001200210e40102400240200328020822010d00200041003602a8020c010b200328020c21022003200341106a28020036028c032003200136028803200341186a20034188036a10f8080240024020032802c002450d002000200341186a41ec0210d40b1a0c010b200342003702940320034100280284ee4d360290032003410d3602a403200320033602a003200320034190036a3602ac032003412c6a41013602002003420137021c200341949fc5003602182003200341a0036a360228200341ac036a41b4dfc400200341186a103b1a20032802900320032802980310d1010240200328029403450d0020032802900310390b200041003602a8020b2002450d00200110390b200341b0036a24000be60301067f230041d0006b22022400200241086a419399c700410d10cb01200241186a41e093c800411e10cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000b970301017f23004180016b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036025c20032001360258200341206a200341d8006a10fd08024002402003280220450d0020002003290320370200200041306a200341206a41306a290300370200200041286a200341206a41286a290300370200200041206a200341206a41206a290300370200200041186a200341206a41186a290300370200200041106a200341206a41106a290300370200200041086a200341206a41086a2903003702000c010b2003420037026420034100280284ee4d3602602003410d3602742003200341086a3602702003200341e0006a36027c200341346a410136020020034201370224200341949fc5003602202003200341f0006a360230200341fc006a41b4dfc400200341206a103b1a2003280260200328026810d10102402003280264450d00200328026010390b200041003602000b2002450d00200110390b20034180016a24000be074050d7f017e4a7f027e147f230041b0176b22042400024002400240200241086a2802002205200341086a28020022064d0d00200441c80a6a410510a309200041013602002000410c6a200441c80a6a41086a280200360200200020042903c80a3702040c010b024020060d0020004100360200200041086a4200370200200041002802d8974e3602040c010b200441186a10a907200441e0026a41186a22074200370300200441e0026a41106a22084200370300200441e0026a41086a22094200370300200442003703e002200441c80a6a41c7e5c000410610cb012009200441c80a6a41086a220a290000370300200420042900c80a3703e002200441c80a6a41b081c400410a10cb012007200a290000370300200820042900c80a370300200441c80a6a200441e0026a41201085040240024020042d00c80a4101460d00200441286a41186a4200370300200441286a41106a4200370300200441286a41086a4200370300200442003703280c010b200441286a41186a200441e10a6a290000370300200441286a41106a200441d90a6a290000370300200441286a41086a200441d10a6a290000370300200420042900c90a3703280b200441f8026a220a4200370300200441f0026a220b4200370300200441e0026a41086a22074200370300200442003703e002200441c80a6a41c7e5c000410610cb012007200441c80a6a41086a2209290000370300200420042900c80a3703e002200441c80a6a419081c400410610cb01200841086a220c2009290000370000200820042900c80a370000200441106a200441e0026a412010ce032004280214210d2004280210210e200a4200370300200b420037030020074200370300200442003703e002200441c80a6a41f1d5c400410d10cb0120072009290000370300200420042900c80a3703e002200441c80a6a418bd6c400410c10cb01200c2009290000370000200820042900c80a370000200441c80a6a200441e0026a412010c70341002107200d4100200e1b220f417f6a21100240024020042802d80b22094102470d00200441c8006a410041800110d60b1a20044184026a4200370200200442003702fc01200441013602f8012004428280808080193703f00120044286808080c00c3703e801200441003602e001200442013703d00120044281808080103703c8010c010b200441c8006a200441c80a6a41900110d40b1a200441c8006a41c4016a200441c80a6a41c4016a280200360200200441c8006a41bc016a200441c80a6a41bc016a290200370200200441c8006a41b4016a200441c80a6a41b4016a290200370200200441c8006a41ac016a200441c80a6a41ac016a290200370200200441c8006a41a4016a200441c80a6a41a4016a290200370200200441c8006a419c016a200441c80a6a419c016a290200370200200441dc016a20042902dc0b370200200921070b200420073602d80120042010360294022004200f36029002024002400240024002402005ad42147e2211422088a70d002011a72207417f4c0d000240024020070d00410421120c010b200710382212450d020b200420123602c0022004200741146e3602c402200441003602c8022004419c086a200441286a41186a29030037020020044180086a41146a200441286a41106a29030037020020044180086a410c6a200441286a41086a2903003702002004200429032837028408200441e0026a41186a22134200370300200441e0026a41106a22144200370300200441e0026a41086a22154200370300200442003703e002200441c80a6a41d8adc300410b10cb012015200441c80a6a41086a2216290000370300200420042900c80a3703e002200441c80a6a4184b0c300411310cb01200841086a22172016290000370000200820042900c80a370000200441086a200441e0026a412010ce032004200428020c410020042802081b360280080240024020050d002003280200211841002119410021094100210a0c010b20022802002207200541f4026c6a211a200441c80a6a410172211b200441c80a6a4184026a211c200441ac0c6a211d200441c80a6a41a4016a211e200441c80a6a4184016a211f200441c80a6a41e4006a2120200441c80a6a41c4006a2121200441c80a6a41246a2122200441c80a6a4104722123200441c80a6a41a4026a212441002802d8974e212520044188056a41146a2126200441a0026a4101722127200441c80a6a410272212820042802202129410021094100212a4100210b0240024003402004202a36029c022007280200210e200441d0026a202910f7090240200741046a2219200441286a412010d70b450d00200441c80a6a410c10a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c020b20072802002105200441c80a6a41206a410041e40010d60b212b200441c80a6a41186a222c201941186a222d290000370300200441c80a6a41106a222e201941106a222f2900003703002016201941086a22302900003703002019290000211120222007290044370000202241086a2231200741cc006a290000370000202241106a2232200741d4006a290000370000202241186a2233200741dc006a290000370000202141186a2234200741fc006a290000370000202141106a2235200741f4006a290000370000202141086a2236200741ec006a29000037000020212007290064370000200420113703c80a200420053602e80a202041186a22372007419c026a290000370000202041106a223820074194026a290000370000202041086a22392007418c026a29000037000020202007290084023700000240200741a4016a223a200441c80a6a418401200741246a223b10c4010d00200441c80a6a411110a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c020b200441c80a6a200e200f10a4070240024002400240024002400240024020042d00c80a4101470d0020272028290000370000202741086a202841086a290000370000202741106a202841106a290000370000202741176a202841176a290000370000200420042d00c90a3a00a002024020074184026a223c200441a0026a412010d70b450d00200441c80a6a411810a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c0a0b20044190176a200441c8006a200e200741d0026a280200200741bc026a20072802d40220072802a40220072802ac0220072802d80220072802b00220072802b80210f80902402004280290174107460d00200441e0026a41106a20044190176a41106a280200360200200441e0026a41086a20044190176a41086a29030037030020042004290390173703e002024041002802d0a94e4104490d002004419c056a412d36020020044194056a41023602002004410236028c052004200e3602f0162004200441e0026a360298052004200441f0166a3602900520042004419c026a3602880541002802cca94e210541002802c8a94e210741002802d4a94e2109200441c80a6a41106a4203370300200441fc0a6a419ea0c700ad4280808080d00584370200200441f00a6a41f89fc700ad4280808080e00484370300200441e80a6a4203370300200441c80a6a41086a4112360200200441e40a6a20044188056a360200200441a898c8003602d40a20044281808080b03b3702840b200441003602f80a200441f496c8003602cc0a200441043602c80a200741b8c0cd00200941024622091b200441c80a6a200541c0a4c00020091b2802101103000b41172105024002400240024002400240024020042802e0020e0700010203040506000b410921050c050b410a21050c040b410b21050c030b411421050c020b411521050c010b411621050b200441c80a6a200510a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c0a0b200341086a28020022062009490d01200741f4026a213d202a41016a212a200741e4006a213e200741c4006a213f200741a4026a214020032802002118200641346c2112200941346c21050340024020122005470d00200441c80a6a410510a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c0b0b201820056a220c280200210a024002400240200b450d00200a200d4d0d010b200a210d0c010b200441c80a6a410810a3092004201b290000370388052004201b41076a28000036008f0520042d00c80a220a4108470d040b4101210b200941016a2109200541346a2105200e200c41046a280200470d000b0240201820056a224141546a2d00004101470d00204141556a203b412010d70b450d00200441c80a6a410710a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c0a0b2013200141186a2900003703002014200141106a2900003703002015200141086a290000370300200420012900003703e002200441c80a6a200e2010200441e0026a10fa09024020042802c80a0d002000202536020420004100360200200041086a42003702000c0a0b20044188056a41306a2212200441c80a6a41306a28020036020020044188056a41286a2242200441c80a6a41286a29030037030020044188056a41206a2243202b29030037030020044188056a41186a2244202c29030037030020044188056a41106a2245202e29030037030020044188056a41086a222b2016290300370300200420042903c80a37038805200441003602981720044201370390172004280288052246202b28020020044190176a10b902200428029405210a024020042802941720042802981722056b41034b0d0020044190176a20054104107720042802981721050b20042802901720056a200a3600002004200541046a36029817202620044190176a10b502200428029805210c0240200428029417220b20042802981722056b41034b0d0020044190176a200541041077200428029417210b20042802981721050b200428029017220a20056a200c360000200441e0026a200a200541046a109f01202c2013290300370300202e201429030037030020162015290300370300200420042903e0023703c80a0240200b450d00200a10390b0240200441c80a6a203f412010d70b450d00200441e0026a411210a309200041013602002000410c6a200441e8026a280200360200200020042903e002370204200428028c05450d0a204610390c0a0b0240200428028c05450d00204610390b20044188056a200e10de08200441c80a6a200428028805222c20042802900510df0820042802f00c210520042802f80c210a20042802fc0c210b20042802840d210c0240200428028c05450d00202c10390b200a204720051b2147200b204820051b2148200c204920051b2149024002400240024002400240024020050d0020044188056a200e10e008200441c80a6a200428028805220520042802900510e1080240024020042802c80a220b0d004100210b0c010b20042802f00a214a20042802ec0a214b20042802e40a214c20042802e00a214d20042802dc0a214e20042802d80a214f20042802d40a215020042802d00a215120042802cc0a21520b0240200428028c05450d00200510390b0240200b450d0002402051450d002051410c6c210a200b210503400240200541046a280200450d00200528020010390b2005410c6a2105200a41746a220a0d000b0b02402052450d002052410c6c450d00200b10390b0240204e450d00204e410474210a205041086a2105034002402005280200450d002005417c6a28020010390b200541106a2105200a41706a220a0d000b0b0240204f41ffffffff0071450d00205010390b0240204d450d00204c450d00204d10390b0240204a450d00204b10390b200b0d020b2041417c6a2246280200210a201342003703002014420037030020154200370300200442003703e002200441c80a6a41b9c3c200410d10cb0120152016290000370300200420042900c80a3703e002200441c80a6a4188c8c200410f10cb0120172016290000370000200820042900c80a370000200441c80a6a200441e0026a10e80520042802c80a2205202520051b210c200a20042902cc0a420020051b2211422088a722054f0d04200c200a410c6c6a220b280208225341ffffffff03712053470d132053410274220a417f4c0d13200b280200210b200a0d024104212c0c030b02402047450d00200510390b2049450d00204810390b200441c80a6a410610a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c0e0b200a1038222c450d110b202c200b200a10d40b1a200a4102762154200c2005410c6c6a210b0c010b4100212c2005450d01200c2005410c6c6a210b0b200c210503402005410c6a210a0240200541046a28020041ffffffff0371450d00200528020010390b200a2105200b200a470d000b0b02402011a72205450d002005410c6c450d00200c10390b202c450d0320072802ec024103762053470d05200741e4026a222e28020020534b0d05201520302900003703002014202f2900003703002013202d29000037030020044190176a41086a2205203b41086a29020037030020044190176a41106a220a203b41106a29020037030020044190176a41186a220b203b41186a290200370300200420192900003703e0022004203b290200370390172007280200210c200441f0166a41186a220e203f41186a290000370300200441f0166a41106a2219203f41106a290000370300200441f0166a41086a223b203f41086a290000370300200441d0166a41086a222d203e41086a290000370300200441d0166a41106a222f203e41106a290000370300200441d0166a41186a2230203e41186a2900003703002004203f2900003703f0162004203e2900003703d016200441b0166a41186a223f2007419c016a290000370300200441b0166a41106a223e20074194016a290000370300200441b0166a41086a22552007418c016a29000037030020042007290084013703b01620044188056a41386a2256203a41386a2900003703002012203a41306a2900003703002042203a41286a2900003703002043203a41206a2900003703002044203a41186a2900003703002045203a41106a290000370300202b203a41086a2900003703002004203a2900003703880520044190166a41186a223a200741fc016a29000037030020044190166a41106a2257200741f4016a29000037030020044190166a41086a2258200741ec016a290000370300200420072900e40137039016200441f0156a41186a2259203c41186a290000370300200441f0156a41106a225a203c41106a290000370300200441f0156a41086a225b203c41086a2900003703002004203c2900003703f01520242040109e01202320042903e002370200202341086a2015290300370200202341106a2014290300370200202341186a20132903003702002022200429039017370200203120052903003702002032200a2903003702002033200b290300370200202120042903f0163702002036203b290300370200203520192903003702002034200e2903003702002004200c3602c80a203720302903003702002038202f2903003702002039202d290300370200202020042903d016370200201f20042903b016370200201f41086a2055290300370200201f41106a203e290300370200201f41186a203f290300370200201e200429038805370200201e41086a202b290300370200201e41106a2045290300370200201e41186a2044290300370200201e41206a2043290300370200201e41286a2042290300370200201e41306a2012290300370200201e41386a2056290300370200201d41186a203a290300370200201d41106a2057290300370200201d41086a2058290300370200201d200429039016370200201c41186a2059290300370200201c41106a205a290300370200201c41086a205b290300370200201c20042903f015370200200441d0156a200441c80a6a10fb0920072802ec0222054103762005410771220c6a220520054107712005410849220a1b21194100213a20072802e802210e202e280200213b20072802dc02213f024041002005410376200a1b22050d00200c201941ff0171460d050b200e20056a2112203f203b41c1006c6a213c200c41016a22054107712005200c410746223a1b210a4100210b200e20054103764100203a1b6a2105200e2d0000200c76410171ad42288621112004280218213e4100213a0340202c200b4102746a210c024003402011428080808080c00084428080808080e03f83428080808080c000520d01024020052012470d00200a41ff0171201941ff0171460d080b200b41016a210b200c41046a210c20052d0000200a41077176410171ad422886211120054100200a41ff0171220e41016a220a410376200e410749220e1b6a2105200a200a410771200e1b210a0c000b0b0240203f203c470d00203b213a0c060b2053200b4d0d062029200c280200220c4d0d06203e200c4105746a220c2900002111200c41186a290000215c200c41106a290000215d202b200c41086a2900003703002045205d3703002044205c370300200420113703880502400240203f2d00004101470d00201b20042903d015370000201b41186a200441d0156a41186a290300370000201b41106a200441d0156a41106a290300370000201b41086a200441d0156a41086a290300370000200441013a00c80a200420044180086a3602ec0a200441e0026a200441c80a6a109b090c010b201b20042903d015370000201b41186a200441d0156a41186a290300370000201b41106a200441d0156a41106a290300370000201b41086a200441d0156a41086a290300370000200441003a00c80a200420044180086a3602ec0a200441e0026a200441c80a6a109b090b0240203f41016a20042802e002220c20042802e80220044188056a10c401450d00024020042802e402450d00200c10390b203a41016a213a024020052012470d00200a41ff0171201941ff0171460d070b200b41016a210b203f41c1006a213f20052d0000200a41077176410171ad422886211120054100200a41ff0171220c41016a220a410376200c410749220c1b6a2105200a200a410771200c1b210a0c010b0b20042802e402450d05200c10390c050b200441c80a6a410510a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c080b2009200641c098c8001054000b2000200a3a00042000200429038805370005200041013602002000410c6a200428008f053600000c060b200441c80a6a410e10a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c050b203a202e280200470d00203a41017420534b0d02200441c80a6a410f10a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040c010b200441c80a6a411010a309200041013602002000410c6a200441d00a6a280200360200200020042903c80a3702040b205441ffffffff0371450d02202c10390c020b20072802ec0222054103762005410771220b6a220520054107712005410849220a1b211220072802e802210c0240024041002005410376200a1b22050d00200b201241ff0171460d010b200c20056a210e200b41016a22054107712005200b41074622191b21074100210a200c2005410376410020191b6a210520042802d4022219410771213a20194103762119200c2d0000200b76410171ad422886211120042802d002213f0340202c200a4102746a210b024003402011428080808080c00084428080808080e03f83428080808080c000520d0102402005200e470d00200741ff0171201241ff0171460d040b200a41016a210a200b41046a210b20052d0000200741077176410171ad422886211120054100200741ff0171220c41016a2207410376200c410749220c1b6a210520072007410771200c1b21070c000b0b02400240024002402053200a4d0d002004200b280200220b36029017200420193602e0022019200b4d0d01203a410048200b203a6a220c200b48730d020240200c41084f0d004100210b200c213b0c040b200c410771213b200c410375210b0c030b41d098c800411a41ec98c800105b000b20044194056a4102360200200441dc0a6a4102360200200442023702cc0a200441c496cc003602c80a2004410236028c05200420044188056a3602d80a2004200441e0026a36029005200420044190176a36028805200441c80a6a41d496cc001043000b200c410771213b200c410376210b0b203f200b6a220b200b2d00004101203b41077174723a000002402005200e470d00200741ff0171201241ff0171460d020b200a41016a210a20052d0000200741077176410171ad422886211120054100200741ff0171220b41016a2207410376200b410749220b1b6a210520072007410771200b1b21070c000b0b2016200441d0026a41086a280200360200200420042903d0023703c80a2046280200210a2041414c6a280200210b024020042802c802220720042802c402470d00200441c0026a200710fe0220042802c80221070b20042802c0022212200741146c6a2205200b360200200520042903c80a3702042005200a3602102005410c6a20162802003602002004200741016a22193602c8020240205441ffffffff0371450d00202c10390b4101210b203d2107201a203d460d020c000b0b024020042802d802450d0020042802d00210390b20042802c002211220042802c80221190c060b024020062009490d004101210a0c010b20092006419898c8001054000b024020092006460d00200641346c200941346c22056b2109201820056a2105200441c80a6a410172220b41076a210c0240034020052802002107024002400240200a450d002007200d4d0d010b2007210d0c010b200441c80a6a410810a3092004200b290000370388052004200c28000036008f0520042d00c80a22074108470d020b200541346a21054101210a2009414c6a22090d000c020b0b200020073a00042000200429038805370005200041013602002000410c6a200428008f053600000c050b201941ffffffff03712019470d0020042802c402213902400240201941027422070d00410421050c010b200710382205450d020b41002109200441003602c802200420053602c0022004200741027622073602c402024002400240200720194f0d00200441c0026a4100201910ab0120042802c802210920042802c00221050c010b2019450d010b201941146c210a200520094102746a210520122107034020052007280200360200200941016a2109200541046a2105200741146a2107200a416c6a220a0d000b0b200420093602c8022012201941146c6a21322002280200224a200241086a280200220541f4026c6a210e2002280204214d024020050d00204a21092012210a0c030b200441d00c6a215e200441b00c6a215f200441f00b6a2106200441d00b6a2160200441b00b6a2161200441900b6a2162200441c80a6a41286a2101200441c80a6a41086a2133200441c80a6a4184026a211c200441c80a6a41e4016a211d200441c80a6a41a4016a2108200441c80a6a4184016a211f200441c80a6a41e4006a2123200441c80a6a41c4006a2129200441c80a6a41246a212c200441c80a6a410472212a200441c80a6a41a4026a216320044180086a4184026a211320044180086a41e4016a211420044180086a41a4016a211b20044180086a4184016a213f20044180086a41e4006a213b20044180086a41c4006a215320044180086a41246a213c20044180086a41046a213e20044180086a41a4026a216420044188056a4184026a211620044188056a41e4016a212020044188056a41a4016a211820044188056a4184016a212120044188056a41e4006a212220044188056a41c4006a212720044188056a41246a212820044188056a410472211520044188056a41d0026a2154200441c80a6a41a8026a214f200441c80a6a41cc026a210f20044188056a41a4026a215020122107204a21050340200541f4026a2109024020052802a402222e0d002007210a0c040b200541f0026a2802002117200541e0026a280200210b200541cc026a2802002149200541c8026a280200213d200541c0026a2802002148200541bc026a280200213a200541b8026a280200210d200541b4026a2802002147200541b0026a280200211e200541ac026a2802002102200541a8026a280200210c20052802e802212b20052802dc02215202400240024020072032470d002032210a0c010b200741146a210a200728020422400d010b02402002450d002002410c6c2107202e210503400240200541046a280200450d00200528020010390b2005410c6a2105200741746a22070d000b0b0240200c450d00200c410c6c450d00202e10390b0240200d450d00200d4104742107201e41086a2105034002402005280200450d002005417c6a28020010390b200541106a2105200741706a22070d000b0b0240204741ffffffff0071450d00201e10390b0240203a450d002048450d00203a10390b02402049450d00203d10390b0240200b450d00200b41c1006c450d00205210390b2017450d04202b10390c040b200541ec026a2802002151200541e4026a280200214e200541c4026a280200212d200741086a29020021112007280210213420072802002135200441e0026a200541a40210d40b1a200441d0026a41086a2207200541d0026a220541086a280200360200200420052902003703d00220044188056a200441e0026a41a40210d40b1a205420042903d002370200205441086a2007280200360200200420493602d4072004203d3602d0072004202d3602cc07200420483602c8072004203a3602c4072004200d3602c007200420473602bc072004201e3602b807200420023602b4072004200c3602b0072004202e3602ac07200420173602f807200420513602f4072004202b3602f0072004204e3602ec072004200b3602e807200420523602e4072004280288052136200441a0026a200428022010f70920044190176a41086a2207201541086a222529020037030020044190176a41106a220b201541106a224129020037030020044190176a41186a220c201541186a2224290200370300200441f0166a41086a220d202841086a221a290200370300200441f0166a41106a2202202841106a2244290200370300200441f0166a41186a223a202841186a22452902003703002004201529020037039017200420282902003703f0162004280288052105200441d0166a41186a221e202741186a2242290200370300200441d0166a41106a222e202741106a2243290200370300200441d0166a41086a2217202741086a2246290200370300200441b0166a41086a2249202241086a2255290200370300200441b0166a41106a2247202241106a2256290200370300200441b0166a41186a2248202241186a2257290200370300200420272902003703d016200420222902003703b01620044190166a41186a223d202141186a225829020037030020044190166a41106a222b202141106a225929020037030020044190166a41086a2252202141086a225a2902003703002004202129020037039016200441c80a6a41386a2237201841386a225b290200370300200441c80a6a41306a2238201841306a22652902003703002001201841286a2266290200370300200441c80a6a41206a224c201841206a2267290200370300200441c80a6a41186a2226201841186a2268290200370300200441c80a6a41106a224b201841106a22692902003703002033201841086a226a290200370300200420182902003703c80a200441f0156a41186a2251202041186a226b290200370300200441f0156a41106a224e202041106a226c290200370300200441f0156a41086a222d202041086a226d290200370300200420202902003703f015200441d0156a41186a222f201641186a226e290200370300200441d0156a41106a2230201641106a226f290200370300200441d0156a41086a2231201641086a2270290200370300200420162902003703d01520642050109e01203e200429039017370200203e41086a2007290300370200203e41106a200b290300370200203e41186a200c290300370200203c20042903f016370200203c41086a200d290300370200203c41106a2002290300370200203c41186a203a290300370200205320042903d016370200205341086a2017290300370200205341106a202e290300370200205341186a201e2903003702002004200536028008203b41186a2048290300370200203b41106a2047290300370200203b41086a2049290300370200203b20042903b016370200203f200429039016370200203f41086a2052290300370200203f41106a202b290300370200203f41186a203d290300370200201b20042903c80a370200201b41086a2033290300370200201b41106a204b290300370200201b41186a2026290300370200201b41206a204c290300370200201b41286a2001290300370200201b41306a2038290300370200201b41386a2037290300370200201441186a2051290300370200201441106a204e290300370200201441086a202d290300370200201420042903f015370200201341186a202f290300370200201341106a2030290300370200201341086a2031290300370200201320042903d01537020020042802d8072205417f4c0d0120042802d00721384101213702402005450d00200510382237450d030b20372038200510d40b2137203320044180086a41c40210d40b2171200420343602a40d200420353602a00d2004200536029c0d200420053602980d200420373602940d200441003602cc0a200441113a00c80a200441c80a6a10c90320072025290200370300200b2041290200370300200c2024290200370300200d201a29020037030020022044290200370300203a20452902003703002004201529020037039017200420282902003703f016200428028805214c201e2042290200370300202e204329020037030020172046290200370300204920552902003703002047205629020037030020482057290200370300200420272902003703d016200420222902003703b016203d2058290200370300202b20592902003703002052205a290200370300200420212902003703901620044180086a41386a2226205b29020037030020044180086a41306a224b206529020037030020044180086a41286a2225206629020037030020044180086a41206a2241206729020037030020044180086a41186a2205206829020037030020044180086a41106a2237206929020037030020044180086a41086a2238206a29020037030020042018290200370380082051206b290200370300204e206c290200370300202d206d290200370300200420202902003703f015202f206e2902003703002030206f29020037030020312070290200370300200420162902003703d01520632050109e01202a200429039017370200202a41086a2007290300370200202a41106a200b290300370200202a41186a200c290300370200202c20042903f016370200202c41086a200d290300370200202c41106a2002290300370200202c41186a203a290300370200202920042903d016370200202941086a2017290300370200202941106a202e290300370200202941186a201e2903003702002004204c3602c80a202341186a2048290300370200202341106a2047290300370200202341086a2049290300370200202320042903b016370200201f200429039016370200201f41086a2052290300370200201f41106a202b290300370200201f41186a203d2903003702002008200429038008370200200841086a2038290300370200200841106a2037290300370200200841186a2005290300370200200841206a2041290300370200200841286a2025290300370200200841306a204b290300370200200841386a2026290300370200201d41186a2051290300370200201d41106a204e290300370200201d41086a202d290300370200201d20042903f015370200201c41186a202f290300370200201c41106a2030290300370200201c41086a2031290300370200201c20042903d01537020020044180086a200441c80a6a10fb0920042802ac07214920042802b007214720042802b407213a20042802b807211720042802bc07212b20042802c007211e20042802c407212e20042802c807213120042802cc07214c20042802d007214820042802d407215220042802d807215120042802dc07214e20042802e007212d200f41186a220b2005290300370000200f41106a220d2037290300370000200f41086a22022038290300370000200f200429038008370000202a20044188056a41a40210d40b1a204f41086a200441a0026a41086a280200360200204f20042903a002370200200420343602900d200420103602880d200420113703800d200420403602fc0c200420353602c80a200420042802900236028c0d200441f0166a203610de0820042802f816213d20042802f016210c2004410036029817200442013703901720042802c80a210520044190176a41004104107720042802901720042802981722076a20053600002004200741046a36029817412010382205450d02200428029417212f20042802981721072005200f290000370000200541086a22302002290000370000200541106a2202200d290000370000200541186a220d200b2900003700000240202f20076b411f4b0d0020044190176a20074120107720042802981721070b20042802901720076a220b2005290000370000200b41086a2030290000370000200b41106a2002290000370000200b41186a200d2900003700002004200741206a360298172005103920042802cc0a2107024020042802941720042802981722056b41034b0d0020044190176a20054104107720042802981721050b20042802901720056a20073600002004200541046a36029817207120044190176a10b502024020042802941720042802981722076b411f4b0d0020044190176a20074120107720042802981721070b20042802901720076a22052001290000370000200541086a200141086a290000370000200541106a200141106a290000370000200541186a200141186a2900003700002004200741206a36029817206220044190176a10b502206120044190176a10b502206020044190176a10b502024020042802941720042802981722076b413f4b0d0020044190176a200741c000107720042802981721070b20042802901720076a22052006290000370000200541086a200641086a290000370000200541106a200641106a290000370000200541186a200641186a290000370000200541206a200641206a290000370000200541286a200641286a290000370000200541306a200641306a290000370000200541386a200641386a2900003700002004200741c0006a36029817205f20044190176a10b502205e20044190176a10b50220042802f00c20042802f40c20044190176a10e70220042802fc0c20042802800d20044190176a10e70220042802880d2107024020042802941720042802981722056b41034b0d0020044190176a20054104107720042802981721050b20042802901720056a20073600002004200541046a220536029817200428028c0d2107024020042802941720056b41034b0d0020044190176a20054104107720042802981721050b20042802901720056a20073600002004200541046a22053602981720042802900d2107024020042802941720056b41034b0d0020044190176a20054104107720042802981721050b20042802901720056a20073600002004200541046a220536029817200c203d200428029017200510e9010240200428029417450d0020042802901710390b024020042802f416450d00200c10390b20042802f00c2105024020042802f80c2207450d00200510390b200420073602f80c200420053602f00c024020042802840d450d0020042802fc0c10390b20044190176a203610e008200428029817212f200428029017213d200441003602d00a200442013703c80a200441c80a6a203a10ac02203a410c6c210b0240203a450d002049200b6a21072049210503402005280200200541086a280200200441c80a6a10b9022005410c6a22052007470d000b0b200441c80a6a201e10ac02201e410474210c0240201e450d002017200c6a21022017210503402005280200210d024020042802cc0a20042802d00a22076b41034b0d00200441c80a6a20074104107720042802d00a21070b20042802c80a20076a200d3600002004200741046a3602d00a200541046a2802002005410c6a280200200441c80a6a10b902200541106a22052002470d000b0b20042802cc0a210720042802d00a210502400240202e0d00024020072005470d00200441c80a6a20054101107720042802d00a21050b20042802c80a20056a41003a00002004200541016a3602d00a0c010b024020072005470d00200441c80a6a20054101107720042802d00a21050b20042802c80a20056a41013a00002004200541016a3602d00a202e204c200441c80a6a10b9020b20482051200441c80a6a10b902024020042802cc0a220d20042802d00a22056b41034b0d00200441c80a6a20054104107720042802cc0a210d20042802d00a21050b20042802c80a220720056a204e3600002004200541046a22053602d00a0240200d20056b41034b0d00200441c80a6a20054104107720042802cc0a210d20042802c80a210720042802d00a21050b200720056a202d360000203d202f2007200541046a10e9010240200d450d00200710390b0240200428029417450d00203d10390b0240203a450d002049210503400240200541046a280200450d00200528020010390b2005410c6a2105200b41746a220b0d000b0b02402047450d002047410c6c450d00204910390b0240201e450d00201741086a2105034002402005280200450d002005417c6a28020010390b200541106a2105200c41706a220c0d000b0b0240202b41ffffffff0071450d00201710390b0240202e450d002031450d00202e10390b02402052450d00204810390b024020042802e8072205450d00200541c1006c450d0020042802e40710390b024020042802f807450d0020042802f00710390b200a2107200921052009200e470d000c040b0b1034000b1032000b200e2009460d0003400240200941ac026a2802002207450d0020092802a40221052007410c6c210703400240200541046a280200450d00200528020010390b2005410c6a2105200741746a22070d000b0b0240200941a8026a2802002205450d002005410c6c450d0020092802a40210390b0240200941b8026a2802002205450d0020054104742107200941b0026a28020041086a2105034002402005280200450d002005417c6a28020010390b200541106a2105200741706a22070d000b0b0240200941b4026a28020041ffffffff0071450d0020092802b00210390b0240200941bc026a2802002205450d00200941c0026a280200450d00200510390b0240200941cc026a280200450d00200941c8026a28020010390b0240200941e0026a2802002205450d00200541c1006c450d0020092802dc0210390b200941f4026a210520092802e80221070240200941f0026a280200220b450d00200710390b2009200b3602f002200920073602e802200521092005200e470d000b0b0240204d450d00204d41f4026c450d00204a10390b02402032200a460d002012201941146c6a210c0340200a41146a2105200a41046a220928020021070240200a410c6a220a280200220b450d00200710390b200a200b360200200920073602002005210a200c2005470d000b0b02402039450d00203941146c450d00201210390b200020042903c002370204200041003602002000410c6a200441c8026a2802003602000240200428021c41ffffff3f71450d00200428021810390b200341046a2802002205450d02200541346c450d02200328020010390c020b02402019450d00201941146c21092012410c6a21050340200541786a220a280200210702402005280200220b450d00200710390b2005200b360200200a2007360200200541146a21052009416c6a22090d000b0b024020042802c4022205450d00200541146c450d00201210390b200428021c41ffffff3f71450d00200428021810390b0240200341046a2802002205450d00200541346c450d00200328020010390b200228020021090240200241086a2802002205450d00200541f4026c2107200921050340200510c203200541f4026a21052007418c7d6a22070d000b0b200241046a2802002205450d00200541f4026c450d00200910390b200441b0176a24000ba40404037f017e027f017e230041d0006b220324002003200236020420032001360200200341086a2001200210e401024002400240200328020822010d00200041003602080c010b200328020c21042003200341106a28020036021c20032001360218200341386a200341186a1087050240024020032802382205450d0002400240417f200329023c2206422088a7220741016a410220071b22082006a72202200820024b1b2208417f6a677641016a4101200841014b1b22082002460d00200220076b200820076b22084f0d00200720086a22082007490d052008ad420c7e2209422088a74541027421072009a721080240024020020d00200341003602380c010b200341c0006a41043602002003200536023820032002410c6c36023c0b200341286a20082007200341386a109a01200341306a280200210220032802284101460d01200328022c21052002410c6e21022006422088a721070b2000200236020c2000200536020820002007360204200041003602000c020b2002450d031032000b2003420037022c20034100280284ee4d3602282003410d360224200320033602202003200341286a360234200341cc006a41013602002003420137023c200341949fc5003602382003200341206a360248200341346a41b4dfc400200341386a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602080b2004450d00200110390b200341d0006a24000f0b1034000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d0020021085050b0f0b200041086a108d02200041046a220228020010e408200228020010390b1c00200128021841a8bbc500410f2001411c6a28020028020c1100000b13002000410a360204200041b0c0c5003602000b3400200041acfecb0036020420004100360200200041146a4102360200200041106a41e4f1c500360200200041086a42053702000b130020004106360204200041d4f6c5003602000b3701017f02404110103822020d001032000b200242003700082002428082c8a50c370000200020023602002000429080808080023702040b2c01017f02404104103822020d001032000b200020023602002002412036000020004284808080c0003702040b2b01017f02404102103822020d001032000b20002002360200200241203b000020004282808080203702040b3701017f02404110103822020d001032000b200242003700082002428081e49206370000200020023602002000429080808080023702040b3801017f02404110103822020d001032000b2002420037000820024280a8f2e38e1d370000200020023602002000429080808080023702040bee2a04057f017e027f017e230041a0096b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241e0016a200141086a10ab06200041086a200241e0016a41b80710d40b1a200041253602000c240b000b200241e0016a200141086a10ac0620004100360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c220b200241e0016a200141086a10ad06200041086a200241e0016a41a00210d40b1a200041013602000c210b20004102360200200041086a200141086a2903003703000c200b41042103200141046a210402400240024002400240024020012d0004417f6a0e050102030400010b200141086a2802002101410521030c040b200141086a2802002101410121030c030b41022103200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e001200141286a2802002104200141086a28020021010c020b200141086a2802002101410321030c010b200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e00120012d00254100472105200141286a2802002104200141086a28020021010b200020033a0004200020022f01003b0005200020053a002520004103360200200041086a20013602002000410c6a20022903e001370200200041286a2004360200200041076a200241026a2d00003a0000200041146a200241e0016a41086a2903003702002000411c6a200241f0016a290300370200200041246a200241f8016a2d00003a00000c1f0b200241e0016a200141086a10ae06200041086a200241e0016a41e00010d40b1a200041043602000c1e0b200241e0016a200141046a10af06200041053602002000410c6a200241e8016a280200360200200020022903e0013702040c1d0b200241e0016a200141086a10b006200041086a200241e0016a41d80010d40b1a200041063602000c1c0b02400240200128020422040d00410021030c010b200241e0016a41186a200141286a290000370300200241e0016a41106a200141206a290000370300200241e8016a200141186a290000370300200241e0016a41286a200141386a290000370300200241e0016a41306a200141c0006a290000370300200241e0016a41386a200141c8006a290000370300200241e0016a41c8006a200141d8006a290000370300200241e0016a41d0006a200141e0006a290000370300200241e0016a41d8006a200141e8006a2900003703002002200141106a2900003703e0012002200141306a290000370380022002200141d0006a2900003703a002200241e0016a41f8006a20014188016a290000370300200241e0016a41f0006a20014180016a290000370300200241e0016a41e8006a200141f8006a290000370300200241e0016a4188016a20014198016a290000370300200241e0016a4190016a200141a0016a290000370300200241e0016a4198016a200141a8016a290000370300200241e0016a41a8016a200141b8016a290000370300200241e0016a41b0016a200141c0016a290000370300200241e0016a41b8016a200141c8016a2900003703002002200141f0006a2900003703c002200220014190016a2900003703e0022002200141b0016a290000370380032001410c6a2802002201417f4c0d1d0240024020010d00410121030c010b200110382203450d1f0b20032004200110d40b1a2002200241e0016a41c00110d40b1a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241c00110d40b1a200041083602000c1b0b200241e0016a200141086a10b106200041086a200241e0016a41980210d40b1a200041093602000c1a0b200141106a2802002203417f4c0d1a20012802042105200141086a28020021060240024020030d00410121040c010b200310382204450d1c0b200220033602e401200220043602e00120042006200310d40b1a200241e0016a41086a22042003360200200241ec016a200141146a10b206200241086a22032004290300370300200241106a2204200241e0016a41106a290300370300200220022903e001370300200129032021072001280228210620002005360204200041e4006a2001412c6a220141386a290200370200200041dc006a200141306a290200370200200041d4006a200141286a290200370200200041cc006a200141206a290200370200200041c4006a200141186a2902003702002000413c6a200141106a290200370200200041346a200141086a2902003702002000412c6a2001290200370200200041286a2006360200200041206a20073702002000410a360200200041086a2002290300370200200041106a2003290300370200200041186a20042903003702000c190b024002400240024020012f0104417f6a0e03010200010b2002410472200141086a10b306200241033b01000c020b2002410472200141086a10b306200241013b01000c010b20012f0106210341c00710382204450d1b200241e0016a200141086a28020010aa0620022004200241e0016a41c00710d40b360204200220033b0102200241023b01000b200041046a220120022903003702002000410c360200200141086a200241086a2903003702000c180b200241e0016a200141086a10d005200041086a200241e0016a41a80210d40b1a2000410d3602000c170b200141046a210841082109024002400240024002400240024002400240024020012d0004417f6a0e09010203040506070900010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410921090c070b200241d0016a41086a2209200141106a2800003602002002200141086a2900003703d0012002200141186a2900003703e00120022001411d6a2900003700e501200141146a280200210420012f0106210520012d0005210641c00710382203450d202003200141286a28020010b406200241c0016a41086a2009280200360200200220022903d0013703c001200220022903e001370300200220022900e501370005410121090c070b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410221090c060b200241c0016a200141086a10b506200141146a280200210420012f01062105410321090c050b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410421090c040b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410521090c030b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410621090c010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410721090b0b200020053b0106200020063a0005200020093a0004200041086a20022903c001370200200041146a2004360200200041186a2002290300370200200041286a20033602002000412c6a20022903e001370200200041106a200241c0016a41086a280200360200200041206a200241086a290300370200200041346a200241e0016a41086a2903003702002000413c6a200241e0016a41106a290300370200200041c4006a200241e0016a41186a2802003602002000410e3602000c160b200241e0016a200141086a10b606200041086a200241e0016a41f80010d40b1a2000410f3602000c150b200241e0016a200141046a10b70620004110360200200041246a20024180026a2802003602002000411c6a200241f8016a290300370200200041146a200241e0016a41106a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c140b200241e0016a200141086a10b80620004111360200200041306a200241e0016a41286a290300370300200041286a200241e0016a41206a290300370300200041206a200241e0016a41186a290300370300200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c130b200241e0016a200141046a10b906200041046a200241e0016a41c80010d40b1a200041123602000c120b200241e0016a200141086a10ba06200041086a200241e0016a41c80010d40b1a200041133602000c110b200241e0016a41306a200141386a10bb06200241e0016a41286a200141306a290300370300200241e0016a41206a200141286a290300370300200241e0016a41186a200141206a290300370300200241e0016a41106a200141186a290300370300200241e0016a41086a200141106a2903003703002002200141086a2903003703e0012002200141f8016a2802003602d00320014180026a2903002107200041086a200241e0016a41f80110d40b1a20004180026a2007370300200041143602000c100b200241e0016a200141086a10bc0620004115360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c0f0b10bd06000b10be06000b200241e0016a200141046a10bf06200241ec016a200141106a10c006200241e0016a41186a2001411c6a10c106200241286a200141d0006a290200370300200241206a200141c8006a290200370300200241186a200141c0006a290200370300200241386a200141e0006a290200370300200241c0006a200141e8006a290200370300200241c8006a200141f0006a290200370300200241d8006a20014180016a290200370300200241e0006a20014188016a290200370300200241e8006a20014190016a2902003703002002200141386a2902003703102002200141d8006a2902003703302002200141f8006a290200370350200141286a280200210320024104722001412c6a10c2062002200336020020024184026a200241f00010d40b1a200041046a2002200241e0016a41940110d40b41940110d40b1a200041183602000c0c0b10f705000b200241e0016a200141046a10c3062000411a360200200041146a200241f0016a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c0a0b2000411b360200200020012802043602040c090b10c406000b10c506000b4105210302400240024002400240024002402001280204417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a28020021042001410c6a2802002105200141086a2802002106410121030c040b200141086a2802002106410221030c030b2001410c6a2802002105200141086a2802002106410321030c020b200141086a2802002106410421030c010b410621030b200020033602042000411e360200200041106a20043602002000410c6a2005360200200041086a20063602000c060b10c606000b200241e0016a200141086a10c706200041086a200241e0016a41d00010d40b1a200041203602000c040b024002400240024002400240200141086a22032d0000417f6a0e03010203000b41e1d1cd004128418483c6001035000b200241026a200341036a2d00003a0000200241e0016a41086a200141186a290300370300200241e0016a41106a200141206a290300370300200241e0016a41186a200141286a2d00003a0000200220032f00013b01002002200141106a2903003703e001200141c0006a2903002107200141386a290300210a200141346a2802002103200141306a28020021042001410c6a28020021052001412c6a2802002101410121060c030b2001410c6a2802002105410221060c010b2001410c6a2802002105410321060b0b200020022f01003b0009200041c0006a2007370300200041386a200a370300200041086a20063a00002000410c6a2005360200200041106a20022903e001370300200041346a2003360200200041306a20043602002000412c6a20013602002000410b6a200241026a2d00003a0000200041186a200241e0016a41086a290300370300200041206a200241e0016a41106a290300370300200041286a200241e0016a41186a280200360200200041213602000c030b200241e0016a200141086a10c806200041086a200241e0016a41f00310d40b1a200041223602000c020b41032103024002400240200141086a280200417f6a0e03000102000b200141106a28020021052001410c6a2802002104410121030c010b200141286a290300210a200141206a2903002107200141186a2802002109200141146a2802002106200141106a28020021052001410c6a2802002104410221030b20004123360200200041286a200a370300200041206a2007370300200041186a2009360200200041146a2006360200200041106a20053602002000410c6a2004360200200041086a20033602000c010b200241e0016a200141086a10c906200041086a200241e0016a41d80010d40b1a200041243602000b200241a0096a24000f0b1034000b1032000be108030b7f047e097f230041d0016b220324002003200236021420032001360210200341186a2001200210e401024002400240200328021822040d00200041003602000c010b200328021c210502400240200341206a28020022014104490d0020032001417c6a36023c2003200441046a36023820042800002106200341086a200341386a10c10120032802080d00200328020c210720034200370254024002402007450d00200341a0016a41106a2108200341a0016a41017221094100210a0340200341a0016a200341386a10860220032d00a0014101460d0220034180016a41186a220b200941186a29000037030020034180016a41106a220c200941106a29000037030020034180016a41086a220d200941086a2900003703002003200929000037038001200328023c220141034d0d02200341e0006a41086a200d290300220e370300200341e0006a41106a200c290300220f370300200341e0006a41186a200b29030022103703002003200329038001221137036020032001417c6a36023c20032003280238220141046a36023820012800002112200341a0016a41186a221320103703002008200f370300200341a0016a41086a2214200e370300200320113703a0010240024020032802542215450d00200328025021160c010b41940310382215450d074100211620154100360200201541003b013220032015360254200341003602500b200a41016a210a02400240034020152f0132221741057421184100210141042119417f210202400340024020182001470d00201721020c020b200341a0016a201520016a41346a412010d70b221a450d03200241016a2102201941046a2119200141206a2101201a417f4a0d000b0b02402016450d002016417f6a2116201520024102746a4194036a28020021150c010b0b200b2013290300220e370300200c2008290300220f370300200d20142903002210370300200320032903a00122113703800120082011370200200841086a2010370200200841106a200f370200200841186a200e370200200320023602a801200320153602a401200341003602a0012003200341d0006a3602ac01200341a0016a201210ba071a0c010b201520196a20123602000b200a2007470d000b0b200341286a41086a200341d0006a41086a280200220136020020032003290350220e37032820002006360204200041086a200e370200200041106a2001360200410121010c020b200341a0016a41086a200341d0006a41086a280200360200200320032903503703a001200341a0016a1099070b20034200370284014100210120034100280284ee4d360280012003410d3602642003200341106a360260200320034180016a360250200341b4016a4101360200200342013702a401200341949fc5003602a0012003200341e0006a3602b001200341d0006a41b4dfc400200341a0016a103b1a20032802800120032802880110d101200328028401450d0020032802800110390b200020013602002005450d00200410390b200341d0016a24000f0b1032000bec0201037f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022040d00410221020c010b200328021421052003200341186a280200360224200320043602202003200341206a10c1010240024020032802000d00200328020421012003418094ebdc0336024c20032001360248200341c8006a2001418094ebdc034b4102746a28020021012003280224450d0041002102024020032802202d00000e020200010b410121020c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b410221020b2005450d00200410390b200020023a000420002001360200200341e0006a24000bd00202037f027e230041d0006b220224002002412036020420022001360200200241086a2001412010e40102400240200228020822010d00200041033a00100c010b200228020c21030240024002400240200241086a41086a28020022044108490d0020044178714108460d0020044110460d00200129000821052001290000210641002104024020012d00100e03030200010b410221040c020b2002420037021c20024100280284ee4d3602182002410d36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241949fc5003602382002200241286a360248200241346a41b4dfc400200241386a103b1a2002280218200228022010d1010240200228021c450d00200228021810390b410321040c020b410121040b20002005370308200020063703000b200020043a00102003450d00200110390b200241d0006a24000b8306020a7f017e230041f0006b220324002003200236021c20032001360218200341206a2001200210e4010240024002400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10c1010240024020032802100d004104210620032802142207200328023422084104762201200120074b1b22014104742202417f4c0d0302402001450d00200210382206450d050b200341003602602003200136025c20032006360258024002402007450d0041002102034020084104490d0220032008417c6a36023420032003280230220141046a36023020012800002109200341086a200341306a10c10120032802080d022003280234220a200328020c2201490d022001417f4c0d060240024020010d00410121080c010b200110382208450d0820084100200110d60b1a0b20082003280230220b200110d40b210c2003200a20016b22083602342003200b20016a3602302001ad220d422086200d84210d02402002200328025c470d00200341d8006a200210fd0220032802582106200328026021020b200620024104746a2201200c36020420012009360200200141086a200d3702002003200328026041016a22023602602007417f6a22070d000b200328025821060b2006450d012000200329025c370204200020063602000c020b2003280258210802402002450d0020024104742102200841086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200241706a22020d000b0b200328025c41ffffffff0071450d00200810390b2003420037023c20034100280284ee4d3602382003410d36024c2003200341186a3602482003200341386a360254200341ec006a41013602002003420137025c200341949fc5003602582003200341c8006a360268200341d4006a41b4dfc400200341d8006a103b1a2003280238200328024010d1010240200328023c450d00200328023810390b200041003602000b2005450d00200410390b200341f0006a24000f0b1034000b1032000bc10803057f017e117f23004180016b220224002002412036020c20022001360208200241106a2001412010e4010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024020022802000d00200228020422052002280224220641286e2201200120054b1bad42287e2207422088a70d032007a72201417f4c0d030240024020010d00410821080c010b200110382208450d050b4100210920024100360238200220083602302002200141286e3602340240024002402005450d00200241d8006a410472210a200241f1006a210b200241ea006a210c200241e3006a210d4100210e0340200e41016a210e41002101034020062001460d03200a20016a2002280220220f2d00003a00002002200141016a22103602582002200f41016a3602202010210120104120470d000b200241fc006a41026a2211200d41026a2d00003a0000200241d4006a41026a2212200c41026a2d00003a00002002200a2f01003b01282002200d2f00003b017c2002200c2f00003b01542002200a41026a2d00003a002a2002280278211320022802742114200228006d211520022801662116200228005f2117200241d0006a41026a2218200b41026a2d00003a00002002200b2f00003b01500240200620106b220141084f0d00200220013602240c040b200241c4006a41026a221020112d00003a0000200241c0006a41026a221120122d00003a00002002413c6a41026a221220182d00003a0000200220022f01283b0148200220022d002a3a004a200220022f017c3b0144200220022f01543b0140200220022f01503b013c2002200f41096a360220200f2900012107024020092002280234470d00200241306a2009410110870220022802302108200228023821090b200141786a21062008200941286c6a220120022f01483b0100200141026a20022d004a3a0000200141096a20102d00003a0000200120022f01443b0007200141106a20112d00003a0000200120022f01403b000e200120173600032001201636000a20012015360011200141176a20122d00003a0000200120022f013c3b0015200120073703202001201336001c200120143600182002200941016a2209360238200e2005470d000b200228023021080b2008450d0220002002290234370204200020083602000c030b200241003602240b20022802342201450d00200141286c450d00200228023010390b2002420037023420024100280284ee4d3602302002410d36022c2002200241086a3602282002200241306a36027c200241ec006a41013602002002420137025c200241949fc5003602582002200241286a360268200241fc006a41b4dfc400200241d8006a103b1a2002280230200228023810d10102402002280234450d00200228023010390b200041003602000b2004450d00200310390b20024180016a24000f0b1034000b1032000ba90303037f017e027f230041306b22022400200241086a200110c10102400240024002402002280208450d00200041003602000c010b200228020c22032001280204410c6e2204200420034b1bad420c7e2205422088a70d012005a72206417f4c0d010240024020060d00410421070c010b200610382207450d030b41002104200241003602182002200736021020022006410c6e360214024002402003450d000340200241206a200110fb0720022802202206450d0220022902242105024020042002280214470d00200241106a200410da0120022802102107200228021821040b20072004410c6c6a22042005370204200420063602002002200228021841016a22043602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b200041003602002002280210210602402004450d002004410c6c21032006210403400240200441046a28020041ffffffff0371450d00200428020010390b2004410c6a2104200341746a22030d000b0b20022802142204450d002004410c6c450d00200610390b200241306a24000f0b1034000b1032000bd20502067f017e230041e0006b220324002003200236021420032001360210200341186a2001200210e40102400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a10c1010240024020032802080d004104210602400240200328020c2207200328022c22024104762201200120074b1b22084104742201417f4c0d0002402008450d00200110382206450d020b41002101200341003602402003200836023c2003200636023802402007450d002007417f6a210702400240034020024104490d0120032002417c6a36022c20032003280228220241046a360228200228000021022003200341286a10c10120032802000d01200341c8006a200341286a2003280204109c0220032802482208450d01200329024c210902402001200328023c470d00200341386a200110fd0220032802382106200328024021010b200620014104746a2201200836020420012002360200200141086a20093702002003200328024041016a22013602402007450d022007417f6a2107200328022c21020c000b0b2003280238210702402001450d0020014104742102200741086a210103400240200128020041ffffffff0371450d002001417c6a28020010390b200141106a2101200241706a22020d000b0b200328023c41ffffffff0071450d04200710390c040b200328023821060b2006450d022000200329023c370204200020063602000c030b1034000b1032000b2003420037023c20034100280284ee4d3602382003410d3602342003200341106a3602302003200341386a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341306a360258200341c4006a41b4dfc400200341c8006a103b1a2003280238200328024010d1010240200328023c450d00200328023810390b200041003602000b2005450d00200410390b200341e0006a24000bcd0e09057f017e0f7f027e047f017e057f027e047f230041b0016b220324002003200236021c20032001360218200341206a2001200210e40102400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10c1010240024020032802100d000240200328021422062003280234220741d8006e2201200120064b1bad42d8007e2208422088a70d002008a72201417f4c0d0002400240024020010d00410821090c010b200110382209450d010b20034100360248200320093602402003200141d8006e36024402402006450d0020034188016a410472210a200341a1016a210b2003419a016a210c20034193016a210d4100210e4100210f02400340200f41016a210f41002101024002400240034020072001460d01200a20016a200328023022102d00003a00002003200141016a2202360288012003201041016a3602302002210120024120470d000b20034184016a41026a2211200d41026a2d00003a000020034180016a41026a2212200c41026a2d00003a00002003200a2f01003b01382003200d2f00003b0184012003200c2f00003b0180012003200a41026a2d00003a003a2003200720026b2201360234200328008f0121072003280196012113200328009d01211420032802a401211520032802a8012116200341fc006a41026a2217200b41026a2d00003a00002003200b2f00003b017c20014110490d012003201041116a3602302003200141706a360234201041096a29000021182010290001211920034188016a200341306a10f7082003280288012202450d012003280290012110200328028c012101200341086a200341306a10c101024020032802080d0020034188016a200341306a200328020c109d02200328028801221a450d00200328028c01211b02402003280234221c4110490d00200328029001211d200341f8006a41026a20112d00003a0000200341f4006a41026a20122d00003a0000200341f0006a41026a20172d00003a0000200320032f01383b018801200320032d003a3a008a01200320032f0184013b0178200320032f0180013b0174200320032f017c3b01702003201c41706a36023420032003280230221141106a360230201141086a290000211e20112900002108201a211f201b21202010212120012122200721232019212420182125201321262014212720152128201621290c040b201b41ffffff3f71450d00201a10390b2001450d01200141306c450d01200210390c010b200341003602340b410021020b200341e8006a41026a2201200341f8006a41026a2d00003a0000200341e4006a41026a2210200341f4006a41026a2d00003a0000200341e0006a41026a2207200341f0006a41026a2d00003a0000200320032d008a013a006e200320032f0188013b016c200320032f01783b0168200320032f01743b0164200320032f01703b016002402002450d00200341d8006a41026a221120012d00003a0000200341d4006a41026a221220102d00003a0000200341d0006a41026a221020072d00003a0000200320032d006e3a005e200320032f016c3b015c200320032f01683b0158200320032f01643b0154200320032f01603b01500240200e2003280244470d00200341c0006a200e10b907200328024021092003280248210e0b2009200e41d8006c6a22012002360220200141346a201d360200200141306a20203602002001412c6a201f360200200141286a2021360200200141246a20223602002001413a6a20032d005e3a0000200141386a20032f015c3b0100200141c1006a20112d00003a00002001413f6a20032f01583b0000200120083703102001202537030820012024370300200141186a201e370300200141c2006a20263600002001413b6a2023360000200141c8006a20122d00003a0000200141c6006a20032f01543b0000200141c9006a2027360000200141cd006a20032f01503b0000200141cf006a20102d00003a0000200141d4006a2029360000200141d0006a20283600002003200328024841016a220e360248200f2006460d02200328023421070c010b0b200328024021070240200e450d00200e41d8006c2102200741306a210103400240200141746a2802002210450d00201041306c450d00200141706a28020010390b0240200128020041ffffff3f71450d002001417c6a28020010390b200141d8006a2101200241a87f6a22020d000b0b20032802442201450d04200141d8006c450d04200710390c040b200328024021090b2009450d0220002003290244370204200020093602000c030b1032000b1034000b2003420037024420034100280284ee4d3602402003410d36023c2003200341186a3602382003200341c0006a360284012003419c016a41013602002003420137028c01200341949fc500360288012003200341386a3602980120034184016a41b4dfc40020034188016a103b1a2003280240200328024810d10102402003280244450d00200328024010390b200041003602000b2005450d00200410390b200341b0016a24000be40404037f017e077f047e23004180016b220224002002200110c10102400240024002402002280200450d00200041003602000c010b20022802042203200128020441306e2204200420034b1bad42307e2205422088a70d012005a72204417f4c0d010240024020040d00410821060c010b200410382206450d030b4100210720024100360210200220063602082002200441306e36020c024002402003450d00200241d8006a41017221080340200241d8006a200110860220022d00584101460d02200241386a41186a2209200841186a290000370300200241386a41106a220a200841106a290000370300200241386a41086a220b200841086a2900003703002002200829000037033820012802042204410f4d0d022001200441706a36020420012001280200220441106a360200200241186a41086a220c200b290300370300200241186a41106a220b200a290300370300200241186a41186a220a200929030037030020022002290338370318200441086a29000021052004290000210d02402007200228020c470d00200241086a2007410110f60320022802082106200228021021070b2006200741306c6a22042002290318370300200c290300210e200b290300210f200a29030021102004200d370320200441286a2005370300200441186a2010370300200441106a200f370300200441086a200e3703002002200741016a22073602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b20004100360200200228020c2201450d00200141306c450d00200610390b20024180016a24000f0b1034000b1032000bdc05010c7f230041a0076b220224000240024002400240024002400240024002400240200128020422034104490d0020012003417c6a36020420012001280200220341046a36020020032800002103200241f8046a200110860220022d00f8044101460d01200241c8026a20024191056a290000370300200241c0026a20024189056a290000370300200241b8026a20024181056a290000370300200220022900f9043703b002200241f8046a200110940320022802f8044101460d02200241d0026a200241f8046a41047241a40210d40b1a200241f8046a200110f10920022802f8042204450d0320024180056a2205280200210620022802fc042107200241f8046a200110f10920022802f8042208450d0420052802002105200128020422094104490d0520022802fc04210a20012009417c6a220b36020420012001280200220c41046a360200200b4104490d06200c280000210d2001200941786a220b3602042001200c41086a3602000240200b4104490d00200c280004210b2001200941746a3602042001200c410c6a360200200041cc026a20022903b002370000200041d4026a200241b0026a41086a290300370000200041dc026a200241c0026a290300370000200041e4026a200241c8026a290300370000200c2800082101200241086a200241d0026a41a40210d40b1a20002003360200200041046a200241086a41a40210d40b1a200041c8026a2001360200200041c4026a200b360200200041c0026a200d360200200041bc026a2005360200200041b8026a200a360200200041b4026a2008360200200041b0026a2006360200200020073602ac02200020043602a8020c0a0b200041003602a8020c070b200041003602a8020c080b200041003602a8020c070b200041003602a8020c060b200041003602a8020c050b200041003602a8020c030b200041003602a8020c010b200041003602a8020b2005450d00200810390b2006450d00200410390b200241a0076a24000b880401057f230041106b22022400200241003a00030240024002400240024020012802002203280204220120014100472204490d00200241036a20032802002205200410d40b1a2003200120046b22063602042003200520046a2204360200024020010d00410021010c040b024020022d0003220141037122054103460d000240024020050e03060001060b200241003b010e200220013a000e41012101200620064100472205490d042002410e6a4101722004200510d40b21012003200620056b3602042003200420056a360200024020060d00200120056a41003a00000b20022f010e220141ff014d0d0220014102762103410021010c060b20024100360208200220013a0008200241086a410172200328020022042006410320064103491b220110d40b21052003200620016b3602042003200420016a360200024020014103732203450d00200520016a4100200310d60b1a0b2002280208220341808004492101200341027621030c050b200141034d0d010b410121010c030b20024100360204200241046a200328020022042006410420064104491b220110d40b1a2003200620016b3602042003200420016a360200024020014104460d00200241046a20016a4100410420016b10d60b1a0b200228020422034180808080044921010c020b0c010b20014102762103410021010b2000200336020420002001360200200241106a24000b980d010e7f230041306b22022400200241003a0008024002400240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241086a20032802002206200510d40b1a2003200420056b22013602042003200620056a2205360200024020040d00410021070c070b4100210720022d000822080e260601010101010101010101010101010101010101010101010101010101010101010102030405010b200041063a00000c0b0b02402008417f6a220941ff01714121490d00200041063a00000c0b0b410121070240024020090d004101210a0c010b20091038220a450d06200a4100200910d60b1a20032802002105200328020421010b200a20052001200920012009491b220410d40b21062003200120046b3602042003200520046a360200024020012009490d002009210b0c050b200620046a22014100200620096a20016b10d60b1a2009210b0c040b200241086a4104722109410021060340200241003a002f200120014100472204490d06200641016a210c2002412f6a2005200410d40b1a2003200120046b220d3602042003200520046a2205360200024020010d00200241003a002f0b200920066a20022d002f3a0000200c2106200d2101200c4120470d000b200241086a41086a2802002201410874200228020c220441187672210a200241146a2f0100200241166a2d000041107472410874200141187672210b2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d0000411074722106200241176a28000021092002411e6a280100210e200241256a280000210f410221070c030b200241086a4104722109410021060340200241003a002f200120014100472204490d06200641016a210c2002412f6a2005200410d40b1a2003200120046b220d3602042003200520046a2205360200024020010d00200241003a002f0b200920066a20022d002f3a0000200c2106200d2101200c4120470d000b200241086a41086a2802002201410874200228020c220441187672210a200241146a2f0100200241166a2d000041107472410874200141187672210b2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d0000411074722106200241176a28000021092002411e6a280100210e200241256a280000210f410321070c020b200241086a4104722109410021060340200241003a002f200120014100472204490d06200641016a210c2002412f6a2005200410d40b1a2003200120046b220d3602042003200520046a2205360200024020010d00200241003a002f0b200920066a20022d002f3a0000200c2106200d2101200c4120470d000b200241086a41086a2802002201410874200228020c220441187672210a200241146a2f0100200241166a2d000041107472410874200141187672210b2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d0000411074722106200241176a28000021092002411e6a280100210e200241256a280000210f410421070c010b200241086a4104722109410021060340200241003a002f200120014100472204490d06200641016a210c2002412f6a2005200410d40b1a2003200120046b220d3602042003200520046a2205360200024020010d00200241003a002f0b200920066a20022d002f3a0000200c2106200d2101200c4120470d000b200241086a41086a2802002201410874200228020c220441187672210a200241146a2f0100200241166a2d000041107472410874200141187672210b2002411b6a2f00002002411d6a2d000041107472210d200241226a2f0100200241246a2d000041107472210c200241296a2f00002002412b6a2d0000411074722106200241176a28000021092002411e6a280100210e200241256a280000210f410521070b200020043b0001200020073a0000200041206a20064110763a00002000411e6a20063b0000200041196a200c4110763a0000200041176a200c3b0000200041126a200d4110763a0000200041106a200d3b0000200041036a20044110763a00002000411a6a200f360000200041136a200e3600002000410c6a2009360000200041086a200b360000200041046a200a3600000c050b1032000b200041063a00000c030b200041063a00000c020b200041063a00000c010b200041063a00000b200241306a24000bbf0301077f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041023a00100c010b200328021421042003200341186a280200360224200320013602202003200341206a10c101024002400240024020032802000d00200341c8006a200341206a2003280204109d0220032802482205450d00200328024c21060240200328022422024104490d0020024104460d00200341d0006a280200210720032802202208280000210920032002417b6a3602242003200841056a3602204100210220082d00040e020302000b200641ffffff3f71450d00200510390b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b410221020c020b410121020b2000200936020c2000200736020820002006360204200020053602000b200020023a00102004450d00200110390b200341e0006a24000bc71203157f057e057f230041f0016b220224002002412036021420022001360210200241186a2001412010e40102400240200228021822030d00200041033a003c0c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10c101024002402002280208450d00410421010c010b024002400240024002400240200228020c2205200228022c22064106762201200120054b1b22074106742201417f4c0d0002400240024020070d00410821080c010b200110382208450d010b41002109200241003602502002200736024c200220083602480240024020050d00410021090c010b200241b8016a4104722107200241d1016a210a200241ca016a210b200241c3016a210c4100210d02400340200d41016a210d4100210102400240034020062001460d01200720016a2002280228220e2d00003a00002002200141016a220f3602b8012002200e41016a360228200f2101200f4120470d000b200241c0006a41026a2210200c41026a2d00003a0000200241b4016a41026a2211200b41026a2d00003a0000200220072f01003b01302002200c2f00003b01402002200b2f00003b01b4012002200741026a2d00003a003220022006200f6b220136022c20022800bf01210620022801c601211220022800cd01211320022802d401211420022802d8012115200241b0016a41026a2216200a41026a2d00003a00002002200a2f00003b01b001024020014110490d002002200e41116a3602282002200141706a36022c200e41096a2900002117200e2900012118200241b8016a200241286a10f70820022802b801220f450d00200241a4016a41026a20102d00003a0000200241a0016a41026a20112d00003a00002002419c016a41026a20162d00003a0000200220022f01303b01a801200220022d00323a00aa01200220022f01403b01a401200220022f01b4013b01a001200220022f01b0013b019c0120022902bc0121192018211a2017211b2006211c2012211d2013211e2014211f201521200c020b4100210f0c010b4100210f2002410036022c0b20024194016a41026a2201200241a4016a41026a2d00003a000020024190016a41026a220e200241a0016a41026a2d00003a00002002418c016a41026a22062002419c016a41026a2d00003a0000200220022d00aa013a009a01200220022f01a8013b019801200220022f01a4013b019401200220022f01a0013b019001200220022f019c013b018c010240200f450d0020024184016a41026a221020012d00003a000020024180016a41026a2211200e2d00003a0000200241fc006a41026a220e20062d00003a0000200220022d009a013a008a01200220022f0198013b018801200220022f0194013b018401200220022f0190013b018001200220022f018c013b017c02402009200228024c470d00200241c8006a2009410110910720022802482108200228025021090b200820094106746a220120022f0188013b0100200141026a20022d008a013a0000200141096a20102d00003a0000200120022f0184013b0007200141106a20112d00003a0000200120022f0180013b000e2001201c3600032001201d36000a2001201e360011200141176a200e2d00003a0000200120022f017c3b0015200120193702342001200f3602302001202036001c2001201f360018200141286a201b3703002001201a3703202002200228025041016a2209360250200d2005460d02200228022c21060c010b0b2002280248210602402009450d002009410674210f200641346a2101034002402001280200220e450d00200e41306c450d002001417c6a28020010390b200141c0006a2101200f41406a220f0d000b0b0240200228024c41ffffff1f71450d00200610390b410421010c090b200228024c2107200228024821080b2008450d0602400240200228022c22014110490d0020022002280228220f2900003703b8012002200f41106a3602282002200f41086a2900003703c001200141706a220f41104f0d012002200f36022c0c050b2002200136022c0c040b200241b8016a41186a220e2002280228220f41086a2900003703002002200f2900003703c8012002200f41106a3602280240200141606a220f4110490d00200241e8006a2002280228220f290000370300200241c8006a41086a200241b8016a41086a290300370300200241c8006a41106a200241b8016a41106a290300370300200241c8006a41186a200e290300370300200241f0006a200f41086a290000370300200220022903b8013703482002200f41106a36022820014130460d0420022001414f6a36022c2002200f41116a36022841002101200f2d00100e03060305040b2002200f36022c0c030b1032000b1034000b410121010c020b02402009450d002009410674210f200841346a2101034002402001280200220e450d00200e41306c450d002001417c6a28020010390b200141c0006a2101200f41406a220f0d000b0b024020070d0041002107410421010c040b200741ffffff1f71450d0220081039410421010c030b410221010b200241b8016a41286a200241c8006a41286a290300370300200241b8016a41206a200241c8006a41206a290300370300200241b8016a41186a200241c8006a41186a290300370300200241b8016a41106a200241c8006a41106a290300370300200241b8016a41086a200241c8006a41086a290300370300200241b0016a41026a200241306a41026a2d00003a0000200220022903483703b801200220022f00303b01b0010c010b410421010b0240024020014104470d002002420037023420024100280284ee4d3602302002410d3602442002200241106a3602402002200241306a3602b401200241dc006a41013602002002420137024c200241949fc5003602482002200241c0006a360258200241b4016a41b4dfc400200241c8006a103b1a2002280230200228023810d10102402002280234450d00200228023010390b410321010c010b200020022903b801370300200020093602382000200736023420002008360230200020022f01b0013b003d200041286a200241b8016a41286a290300370300200041206a200241b8016a41206a290300370300200041186a200241b8016a41186a290300370300200041106a200241b8016a41106a290300370300200041086a200241b8016a41086a2903003703002000413f6a200241b2016a2d00003a00000b200020013a003c2004450d00200310390b200241f0016a24000bcf0a030c7f017e037f230041306b22022400200241206a2001108705024002400240024020022802202203450d00200241286a280200210420022802242105200241186a200110c10120022802180d014104210602400240200228021c2207200128020422084104762209200920074b1b2209410474220a417f4c0d0002402009450d00200a10382206450d020b2002410036022820022009360224200220063602200240024020070d002006450d05410021070c010b2007417f6a21094100210702400240034020084104490d012001280200220a280000210b20012008417c6a3602042001200a41046a360200200241106a200110c10120022802100d012001280204220c20022802142208490d012008417f4c0d040240024020080d004101210a0c010b20081038220a450d06200a4100200810d60b1a0b200a2001280200220d200810d40b210a2001200c20086b3602042001200d20086a3602002008ad220e422086200e84210e024020072002280224470d00200241206a200710fd0220022802202106200228022821070b200620074104746a2208200a3602042008200b360200200841086a200e3702002002200228022841016a22073602282009450d022009417f6a2109200128020421080c000b0b2002280220210902402007450d0020074104742108200941086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200841706a22080d000b0b200228022441ffffffff0071450d05200910390c050b20022802202206450d04200228022421090b024002400240024002400240024020012802042208450d002001280200220a2d0000210b20012008417f6a3602042001200a41016a3602004100210802400240200b0e020100020b200241086a200110c10120022802080d012001280204220b200228020c220a490d01200a417f4c0d0802400240200a0d00410121080c010b200a10382208450d0a20084100200a10d60b1a0b20082001280200220c200a10d40b1a2001200b200a6b3602042001200c200a6a360200200aad220e422086200e84210e0b2002200110c101200ea7210b20022802000d012001280204220c2002280204220a490d01200a417f4c0d0702400240200a0d004101210d0c010b200a1038220d450d09200d4100200a10d60b1a0b200d2001280200220f200a10d40b21102001200c200a6b220c3602042001200f200a6a220d360200200c4104490d02200d28000021112001200c417c6a220f3602042001200d41046a360200200f4104490d032000200536020420002003360200200d28000421052001200c41786a3602042001200d41086a360200200041346a2005360200200041306a20113602002000412c6a200a360200200041286a200a360200200041246a2010360200200041206a200e422088a73602002000411c6a200b360200200041186a2008360200200041146a2007360200200041106a20093602002000410c6a2006360200200041086a20043602000c0c0b200041003602000c050b200041003602000c030b200041003602000c010b200041003602000b200a450d00201010390b2008450d00200b450d00200810390b02402007450d0020074104742108200641086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200841706a22080d000b0b200941ffffffff0071450d04200610390c040b1034000b1032000b200041003602000c020b200041003602000b02402004450d002004410c6c21082003210103400240200141046a280200450d00200128020010390b2001410c6a2101200841746a22080d000b0b2005450d002005410c6c450d00200310390b200241306a24000bd70101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff017120014641037421032001410a7421010240024020040d00200241003602100c010b200241106a41086a410836020020022004410a74360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410a76360200200241206a24000f0b1034000b8d0302037f037e230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602140c010b2003280214210202400240200341186a28020022044104490d002004417c6a4110490d002001280000210520032004416c6a3602242003200141146a3602202001410c6a2900002106200129000421072003200341206a10c10120032802000d00200341c8006a200341206a2003280204109d0220032802482204450d00200329024c210820002006370308200020073703002000200837031820002004360214200020053602100c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602140b2002450d00200110390b200341e0006a24000bd20401087f230041e0006b220224002002412036020c20022001360208200241106a2001412010e4010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c1010240024020022802000d0020022802042205200228022422014103762206200620054b1b22074103742206417f4c0d030240024020070d00410421080c010b200610382208450d050b41002106200241003602502002200736024c200220083602480240024002402005450d00034020014104490d032001417c6a4104490d022002280220220728000021092002200741086a3602202007280004210702402006200228024c470d00200241c8006a200610b10120022802482108200228025021060b200141786a2101200820064103746a22062007360204200620093602002002200228025041016a22063602502005417f6a22050d000b200228024821080b2008450d022000200229024c370204200020083602000c030b2001417c6a21010b20022001360224200228024c41ffffffff0171450d00200228024810390b2002420037022c20024100280284ee4d3602282002410d36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280228200228023010d1010240200228022c450d00200228022810390b200041003602000b2004450d00200310390b200241e0006a24000f0b1034000b1032000bd20303037f037e017f230041e0006b220324002003200236020c20032001360208200341106a2001200210e40102400240200328021022010d00200041003602140c010b2003280214210202400240200341186a28020022044104490d002004417c6a4110490d002001280000210520032004416c6a3602242003200141146a3602202001410c6a2900002106200129000421072003200341206a10c10120032802000d00200341c8006a200341206a2003280204109d0220032802482204450d00200329024c21080240200328022441024f0d00200842ffffff3f83500d01200410390c010b20032003280220220941026a3602202004450d0020092f000021092000200737030020002008370318200020043602142000200536021020002006370308200041206a20093b01000c010b2003420037022c20034100280284ee4d3602282003410d36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341949fc5003602482003200341386a360258200341c4006a41b4dfc400200341c8006a103b1a2003280228200328023010d1010240200328022c450d00200328022810390b200041003602140b2002450d00200110390b200341e0006a24000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42187e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141186c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141186e360200200241206a24000f0b1034000b8c0101027f02404121410120012d000041014622021b10382203450d000240024020020d00200341003a0000410121010c010b200341013a000020032001290001370001200341096a200141096a290000370000200341116a200141116a290000370000200341196a200141196a290000370000412121010b200041202003200110e901200310390f0b1032000bfb0101047f230041106b2203240002400240200228020822044104744104722205417f4c0d0020022802002102200510382206450d012003410036020820032005360204200320063602002003200410ac0202402004450d00200220044104746a210603402002280200210502402003280204200328020822046b41034b0d002003200441041077200328020821040b200328020020046a20053600002003200441046a360208200241046a2802002002410c6a280200200310b902200241106a22022006470d000b0b2000200120032802002202200328020810e90102402003280204450d00200210390b200341106a24000f0b1034000b1032000bd80201037f230041106b220424002004410036020820044201370300200441004108107720042802002205200428020822066a20013700002004200641086a22063602080240200428020420066b41074b0d00200420064108107720042802002105200428020821060b200520066a20023700002004200641086a22063602080240024002400240200341ff01710e03000102030b024020042802042006470d00200420064101107720042802002105200428020821060b200520066a41003a0000200641016a21060c020b024020042802042006470d00200420064101107720042802002105200428020821060b200520066a41013a0000200641016a21060c010b024020042802042006470d00200420064101107720042802002105200428020821060b200520066a41023a0000200641016a21060b200041202005200610e90102402004280204450d00200510390b200441106a24000bf20201057f230041106b2203240020034100360208200342013703002002280200210420032002280208220510ac020240024020050d00200328020821050c010b200541057421062003280208210503400240200328020420056b411f4b0d002003200541201077200328020821050b200328020020056a22072004290000370000200741086a200441086a290000370000200741106a200441106a290000370000200741186a200441186a2900003700002003200541206a2205360208200441206a2104200641606a22060d000b0b200228020c210402402003280204220620056b41034b0d00200320054104107720032802042106200328020821050b2003280200220720056a20043600002003200541046a220436020820022d00102105024020062004470d0020032006410110772003280204210620032802002107200328020821040b200720046a20053a0000200020012007200441016a10e90102402006450d00200710390b200341106a24000bd10101027f230041106b22022400200241003602082002420137030002400240024002400240200141ff01710e0400010203000b200241004101107720022802002201200228020822036a41003a00000c030b200241004101107720022802002201200228020822036a41013a00000c020b200241004101107720022802002201200228020822036a41023a00000c010b200241004101107720022802002201200228020822036a41033a00000b200041202001200341016a10e90102402002280204450d00200110390b200241106a24000b8d0101047f230041106b22032400024002402002280208220441d8006c4104722205417f4c0d0020022802002102200510382206450d012003410036020820032005360204200320063602002003200410ac0220022004200310aa022000200120032802002202200328020810e90102402003280204450d00200210390b200341106a24000f0b1034000b1032000ba50201057f230041106b2202240002400240200128020822034105744104722204417f4c0d0020012802002101200410382205450d012002410036020820022004360204200220053602002002200310ac020240024020030d0020022802002106200228020821030c010b200341057421052002280208210303400240200228020420036b411f4b0d002002200341201077200228020821030b2002280200220620036a22042001290000370000200441086a200141086a290000370000200441106a200141106a290000370000200441186a200141186a2900003700002002200341206a2203360208200141206a2101200541606a22050d000b0b200041202006200310e90102402002280204450d00200610390b200241106a24000f0b1034000b1032000b130020004102360204200041a483c6003602000b3400200041b69fc50036020420004100360200200041146a4107360200200041106a41848cc600360200200041086a42073702000b2b01017f02404104103822020d001032000b20002002360200200241003a000020004284808080103702040b2b01017f02404101103822020d001032000b20002002360200200241003a000020004281808080103702040b2c01017f02404104103822020d001032000b200020023602002002410036000020004284808080c0003702040bca0301037f41e2d6c8002102410d21034100210402400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff0171417f6a0e14130102030405060708090a0b0c0d0e0f10111200130b41efd6c800210241092103411321040c120b41dad6c800210241082103410121040c110b41cdd6c8002102410221040c100b41c0d6c8002102410321040c0f0b41b4d6c8002102410c2103410421040c0e0b41a6d6c8002102410e2103410521040c0d0b4195d6c800210241112103410621040c0c0b4184d6c800210241112103410721040c0b0b41f8d5c8002102410c2103410821040c0a0b41ebd5c8002102410921040c090b41dfd5c8002102410c2103410a21040c080b41cdd5c800210241122103410b21040c070b41b3d5c8002102411a2103410c21040c060b41a1d5c800210241122103410d21040c050b4193d5c8002102410e2104410e21030c040b41fed4c800210241152103410f21040c030b41e8d4c800210241162103411021040c020b41b1bbcb00210241082103411121040c010b41dad4c8002102410e2103411221040b200041830c3b0100200041086a2003360200200041046a2002360200200041026a20043a00000beb0806047f017e037f017e017f037e230041e0116b22022400200241286a2001108c02024002400240024002400240024020022802280d00200228022c210320012001280204220441016a2205360204200520012802084b0d00024002402003450d004100210542002106034002402005417f470d0020064280808080705a0d032006422088a721050b200642ffffffff0f83200541016a2205ad4220868421062003417f6a22030d000b0b20012004360204200128020022052802042203450d02200528020022072d0000210420052003417f6a3602042005200741016a3602000240200441ff00714104460d00200042033703680c080b02402004411874411875417f4c0d00420221060c060b200241f0106a200110f404024020022d00f01022044105460d00200241f8106a280200210320022802f410210720024198116a200110ff040240024020022d0098114103470d0020044102470d0220030d010c020b0240200128020022052802042208450d0020052802002209310000210a20052008417f6a220b3602042005200941016a36020002400240200a50450d00420021060c010b200b450d012009310001210c20052008417e6a3602042005200941026a3602004202200a420f8386220d4204540d0142012106200c420886200a84420488200d420c88220a4201200a4201561b7e220a200d5a0d010b200241206a2001108c0220022802200d0020022802242108200241086a200110f5042002290308a7450d060b20044102470d012003450d010b200710390b420221060c040b109109000b200042033703680c050b200042033703680c040b200241086a41106a290300210e2002290310210c200241f0016a41026a200241f0106a410172220941026a2d00003a0000200241b0096a41086a200241fc106a220541086a290200370300200241b0096a41106a200541106a290200370300200220092f00003b01f001200220052902003703b009200241c8096a20024198116a41c20010d40b1a200241f4016a200241b0096a41dc0010d40b1a0b200241ec016a41026a2205200241f0016a41026a2d00003a0000200220022f01f0013b01ec0120024190016a200241f4016a41dc0010d40b1a20064202510d012002418c016a41026a20052d00003a0000200220022f01ec013b018c01200241306a20024190016a41dc0010d40b1a0b200241b0096a200110940220022802b0092105200241f4016a200241b0096a41047241bc0710d40b1a024020054126460d00200020043a0000200020022f018c013b00012000200336020820002007360204200041036a2002418e016a2d00003a00002000410c6a200241306a41dc0010d40b1a20004190016a200e37030020004188016a200c37030020004180016a2008360200200041f8006a200a3703002000200d3703702000200637036820004198016a20053602002000419c016a200241f4016a41bc0710d40b1a0c020b2000420337036820064202510d01200441ff01714102470d012003450d01200710390c010b200042033703680b200241e0116a24000b05001034000b1300200041043602042000418898c6003602000b3400200041eda1c50036020420004100360200200041146a4102360200200041106a41b4bec600360200200041086a42083702000b130020004103360204200041a0c1c6003602000b2c01017f02404102103822020d001032000b20002002360200200241e4003b000020004282808080203702040b3701017f02404110103822020d001032000b2002420037000820024280a0f8fa05370000200020023602002000429080808080023702040b3801017f02404110103822020d001032000b2002420037000820024280f89ed79d1d370000200020023602002000429080808080023702040b3400200041f3e5c00036020420004100360200200041146a4103360200200041106a41eccbc600360200200041086a42083702000bca0d03047f017e087f230041b0026b2202240002400240200128020422030d00200042033703000c010b20012003417f6a220436020420012001280200220541016a360200024002400240024020052d0000417f6a0e03000102030b024020044104490d0020012003417b6a22043602042001200541056a36020020044108490d00200528000121042001200341736a36020420012005410d6a36020020052900052106200241a8016a200110860220024190026a41086a200241b1016a29000037030020024190026a41106a2203200241b9016a29000037030020024190026a41186a2205200241c1016a290000370300200220022900a9013703900220022d00a8014101460d0020024188016a41086a220720024190026a41086a29030037030020024188016a41106a200329030037030020024188016a41186a2005290300370300200220022903900237038801200241a8016a200110be0720022d00a8014101460d00200241c0006a2201200241e1016a290000370300200241386a2203200241d9016a290000370300200241306a2205200241d1016a290000370300200241286a2208200241c9016a290000370300200241086a41186a2209200241c1016a290000370300200241086a41106a220a200241b9016a290000370300200241086a41086a220b200241b1016a290000370300200241e8006a41086a220c2007290300370300200241e8006a41106a220720024188016a41106a290300370300200241e8006a41186a220d20024188016a41186a290300370300200220022900a9013703082002200229038801370368200241c8006a41186a220e200d290300370300200241c8006a41106a220d2007290300370300200241c8006a41086a2207200c29030037030020022002290368370348200041106a20043602002000200637030820004200370300200020022903483702142000411c6a2007290300370200200041246a200d2903003702002000412c6a200e290300370200200020022903083702342000413c6a200b290300370200200041c4006a200a290300370200200041cc006a2009290300370200200041d4006a2008290300370200200041dc006a2005290300370200200041e4006a2003290300370200200041ec006a20012903003702000c040b200042033703000c030b024020044104490d0020012003417b6a22043602042001200541056a36020020044108490d0020052800012104200042013703002001200341736a36020420012005410d6a360200200041106a2004360200200020052900053703080c030b200042033703000c020b024020044104490d0020012003417b6a22043602042001200541056a36020020044108490d00200528000121042001200341736a36020420012005410d6a36020020052900052106200241a8016a200110860220024190026a41086a200241b1016a29000037030020024190026a41106a2203200241b9016a29000037030020024190026a41186a2205200241c1016a290000370300200220022900a9013703900220022d00a8014101460d0020024188016a41086a220720024190026a41086a29030037030020024188016a41106a200329030037030020024188016a41186a2005290300370300200220022903900237038801200241a8016a200110be0720022d00a8014101460d00200241c0006a2201200241e1016a290000370300200241386a2203200241d9016a290000370300200241306a2205200241d1016a290000370300200241286a2208200241c9016a290000370300200241086a41186a2209200241c1016a290000370300200241086a41106a220a200241b9016a290000370300200241086a41086a220b200241b1016a290000370300200241e8006a41086a220c2007290300370300200241e8006a41106a220720024188016a41106a290300370300200241e8006a41186a220d20024188016a41186a290300370300200220022900a9013703082002200229038801370368200241c8006a41186a220e200d290300370300200241c8006a41106a220d2007290300370300200241c8006a41086a2207200c29030037030020022002290368370348200041106a20043602002000200637030820004202370300200020022903483702142000411c6a2007290300370200200041246a200d2903003702002000412c6a200e290300370200200020022903083702342000413c6a200b290300370200200041c4006a200a290300370200200041cc006a2009290300370200200041d4006a2008290300370200200041dc006a2005290300370200200041e4006a2003290300370200200041ec006a20012903003702000c020b200042033703000c010b200042033703000b200241b0026a24000bbf0801067f0240410110382202450d0020002002360200200041046a420137020002400240200128020022030d00200241003a0000410121030c010b200241013a0000200041086a220441013602002000200141086a280200220210ac0202402002450d002002410574210520042802002102200041046a210603400240200628020020026b411f4b0d002000200241201077200428020021020b200028020020026a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a2900003700002004200241206a2202360200200341206a2103200541606a22050d000b0b2001410c6a28020021032000200141146a280200220210ac0202402002450d0020024105742105200041086a22042802002102200041046a210603400240200628020020026b411f4b0d002000200241201077200428020021020b200028020020026a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a2900003700002004200241206a2202360200200341206a2103200541606a22050d000b0b200141186a28020021032000200141206a280200220210ac0202402002450d0020024105742105200041086a22042802002102200041046a210603400240200628020020026b411f4b0d002000200241201077200428020021020b200028020020026a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a2900003700002004200241206a2202360200200341206a2103200541606a22050d000b0b200141246a200010fe07200141306a28020021070240200041046a2205280200200041086a220228020022036b41034b0d002000200341041077200228020021030b200028020020036a20073600002002200341046a2203360200200141346a28020021020240200528020020036b41034b0d002000200341041077200041086a28020021030b200028020020036a2002360000200041086a2202200341046a2203360200200141386a28020021070240200041046a220528020020036b41034b0d002000200341041077200228020021030b200028020020036a20073600002002200341046a22033602002001413c6a28020021020240200528020020036b41034b0d002000200341041077200041086a28020021030b200028020020036a2002360000200041086a2202200341046a2203360200200141c0006a28020021070240200041046a220528020020036b41034b0d002000200341041077200228020021030b200028020020036a20073600002002200341046a2203360200200141c4006a28020021020240200528020020036b41034b0d002000200341041077200041086a28020021030b200028020020036a2002360000200341046a21030b200041086a20033602000f0b1032000b920402067f047e0240412510382202450d0020002002360200200241c296b9ba04360000200041046a42a5808080c000370200200141016a21030240024020012d00004101460d00200241013a0004200041086a22044105360200412010382205450d0220052003290000370000200541186a2206200341186a290000370000200541106a2207200341106a290000370000200541086a200341086a2900003700000240200041046a280200200428020022036b411f4b0d002000200341201077200041086a2802002103200028020021020b200220036a22042005290000370000200041086a200341206a2203360200200441186a2006290000370000200441106a2007290000370000200441086a200541086a290000370000200510390c010b200241023a0004200041086a22044105360200412010382205450d01200520032900002208370000200541186a200341186a2900002209370000200541106a200341106a290000220a370000200541086a200341086a290000220b3700004125210320044125360200200220083700052002410d6a200b370000200241156a200a3700002002411d6a2009370000200510390b2001280224220128020021050240200041046a28020020036b41034b0d002000200341041077200041086a2802002103200028020021020b200220036a2005360000200041086a200341046a360200200141046a200010b5020f0b1032000b130020004103360204200041b8d3c6003602000b340020004192a3c50036020420004100360200200041146a4101360200200041106a41f8dac600360200200041086a42053702000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010a9020b130020004101360204200041c0e3c6003602000b2e01017f02404104103822020d001032000b2000200236020020024180ce1836000020004284808080c0003702040b130020004101360204200041a0e7c6003602000b3400200041dee8c60036020420004100360200200041146a4101360200200041106a41ece8c600360200200041086a420c3702000ba30401037f4194a6c70021024111210341002104024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff0171417f6a0e18170102030405060708090a0b0c0d0e0f1011121314151600170b41bcabc700210241192103411721040c160b41b0a6c7002102411c2103410121040c150b41d4a6c700210241192103410221040c140b41f8a6c700210241182103410321040c130b4198a7c700210241142103410421040c120b41b4a7c700210241202103410521040c110b41dca7c7002102410d2103410621040c100b41f4a7c700210241132103410721040c0f0b4194adcc00210241102103410821040c0e0b4198a8c700210241142103410921040c0d0b41b4a8c7002102410f2103410a21040c0c0b41cca8c7002102411b2103410b21040c0b0b41f0a8c700210241172103410c21040c0a0b4190a9c7002102410d21040c090b41aca9c700210241132103410e21040c080b41c8a9c7002102410e2103410f21040c070b41e0a9c7002102411021040c060b41fca9c7002102411a2103411121040c050b41a0aac7002102410d2103411221040c040b41b8aac700210241202103411321040c030b41e0aac700210241152103411421040c020b4180abc700210241182103411521040c010b41a0abc700210241132103411621040b20004183d8003b0100200041086a2003360200200041046a2002360200200041026a20043a00000be40c010b7f230041e0006b220224002002200141206a41e9dabdf30610bd0220022802042103200228020021044100210520024100360230024002402003450d00200220042d00003a00342002410136023020034101460d00200220042d00013a00352002410236023020034102460d00200220042d00023a00362002410336023020034103460d00200220042d00033a00372002410436023020034104460d00200241386a20042d00043a00002002410536023020034105460d00200241396a20042d00053a00002002410636023020034106460d002002413a6a20042d00063a00002002410736023020034107460d002002413b6a20042d00073a00002002410836023020034108460d002002413c6a20042d00083a00002002410936023020034109460d002002413d6a20042d00093a00002002410a3602302003410a460d002002413e6a20042d000a3a00002002410b3602302003410b460d002002413f6a20042d000b3a00002002410c3602302003410c460d00200241c0006a20042d000c3a00002002410d3602302003410d460d00200241c1006a20042d000d3a00002002410e3602302003410e460d00200241c2006a20042d000e3a00002002410f3602302003410f460d00200241c3006a20042d000f3a00002002411036023020034110460d00200241c4006a20042d00103a00002002411136023020034111460d00200241c5006a20042d00113a00002002411236023020034112460d00200241c6006a20042d00123a00002002411336023020034113460d00200241c7006a20042d00133a00002002411436023020034114460d00200241c8006a20042d00143a00002002411536023020034115460d00200241c9006a20042d00153a00002002411636023020034116460d00200241ca006a20042d00163a00002002411736023020034117460d00200241cb006a20042d00173a00002002411836023020034118460d00200241cc006a20042d00183a00002002411936023020034119460d00200241cd006a20042d00193a00002002411a3602302003411a460d00200241ce006a20042d001a3a00002002411b3602302003411b460d00200241cf006a20042d001b3a00002002411c3602302003411c460d00200241d0006a20042d001c3a00002002411d3602302003411d460d00200241d1006a20042d001d3a00002002411e3602302003411e460d00200241d2006a20042d001e3a00002002411f3602302003411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210320022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021034100210441002108410021070b20002001360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a20053600002000410b6a20022f01103b00002000410d6a200241106a41026a2d00003a00002000410e6a2007360000200041126a20022f010c3b0000200041146a2002410c6a41026a2d00003a0000200041156a2008360000200041196a20022f01083b00002000411b6a200241086a41026a2d00003a0000200041206a20033600002000411c6a2004360000200241e0006a24000be40c010b7f230041e0006b220224002002200141206a41e7e485f30610bd0220022802042103200228020021044100210520024100360230024002402003450d00200220042d00003a00342002410136023020034101460d00200220042d00013a00352002410236023020034102460d00200220042d00023a00362002410336023020034103460d00200220042d00033a00372002410436023020034104460d00200241386a20042d00043a00002002410536023020034105460d00200241396a20042d00053a00002002410636023020034106460d002002413a6a20042d00063a00002002410736023020034107460d002002413b6a20042d00073a00002002410836023020034108460d002002413c6a20042d00083a00002002410936023020034109460d002002413d6a20042d00093a00002002410a3602302003410a460d002002413e6a20042d000a3a00002002410b3602302003410b460d002002413f6a20042d000b3a00002002410c3602302003410c460d00200241c0006a20042d000c3a00002002410d3602302003410d460d00200241c1006a20042d000d3a00002002410e3602302003410e460d00200241c2006a20042d000e3a00002002410f3602302003410f460d00200241c3006a20042d000f3a00002002411036023020034110460d00200241c4006a20042d00103a00002002411136023020034111460d00200241c5006a20042d00113a00002002411236023020034112460d00200241c6006a20042d00123a00002002411336023020034113460d00200241c7006a20042d00133a00002002411436023020034114460d00200241c8006a20042d00143a00002002411536023020034115460d00200241c9006a20042d00153a00002002411636023020034116460d00200241ca006a20042d00163a00002002411736023020034117460d00200241cb006a20042d00173a00002002411836023020034118460d00200241cc006a20042d00183a00002002411936023020034119460d00200241cd006a20042d00193a00002002411a3602302003411a460d00200241ce006a20042d001a3a00002002411b3602302003411b460d00200241cf006a20042d001b3a00002002411c3602302003411c460d00200241d0006a20042d001c3a00002002411d3602302003411d460d00200241d1006a20042d001d3a00002002411e3602302003411e460d00200241d2006a20042d001e3a00002002411f3602302003411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210320022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021034100210441002108410021070b20002001360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a20053600002000410b6a20022f01103b00002000410d6a200241106a41026a2d00003a00002000410e6a2007360000200041126a20022f010c3b0000200041146a2002410c6a41026a2d00003a0000200041156a2008360000200041196a20022f01083b00002000411b6a200241086a41026a2d00003a0000200041206a20033600002000411c6a2004360000200241e0006a24000bce0303017f017e027f230041d02b6b2203240020034280808080802037020c2003200236021c200320013602182003200341186a360208200341f8226a200341086a10900902400240024020032903e02322044203510d00200341a01a6a200341f8226a41d80810d40b1a20032802082202280204220541034b0d01024020032903881b4202510d0020032d00a01a41ff01714102470d0020032802a81a450d0020032802a41a10390b200341b81b6a10b1080b420321040c010b20022802002206280000210120022005417c6a3602042002200641046a360200200341b8196a200341f8226a41e80010d40b1a200341d0116a200341e8236a41e80710d40b1a0b200341e8106a200341b8196a41e80010d40b1a20034180096a200341d0116a41e80710d40b1a0240024020044203510d00200341206a200341e8106a41e80010d40b1a20034190016a20034180096a41e80710d40b1a200320013602f8082003200437038801024020032802082802040d002000200341206a41e00810d40b1a0c020b20004203370368024020044202510d0020032d002041ff01714102470d002003280228450d00200328022410390b200341b8016a10b1080c010b200042033703680b200341d02b6a24000bf40301057f200141046a2802002102200141086a2802002103024020002d000422044102470d00024020022003470d002001200341011077200141086a28020021030b200128020020036a41003a0000200141086a200341016a3602000f0b024020022003470d002001200341011077200141086a28020021030b2001280200220220036a41013a0000200141086a2205200341016a2203360200200028020021060240200141046a28020020036b41034b0d00200120034104107720052802002103200128020021020b200220036a20063600002005200341046a2203360200024020044101460d000240200141046a2802002003470d002001200341011077200141086a2802002103200128020021020b200220036a41003a0000200141086a200341016a3602000f0b200041046a21000240200141046a220528020022042003470d00200120034101107720052802002104200141086a2802002103200128020021020b200041016a2100200220036a41013a0000200141086a2205200341016a22033602000240200420036b411f4b0d00200120034120107720052802002103200128020021020b200220036a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002005200341206a3602000b13002000410536020420004184efc6003602000b13002000410e36020420004184f2c6003602000b13002000410436020420004198fcc6003602000b130020004108360204200041f0fdc6003602000b900e01127f230041b0026b2203240020012802002104200128020422052f01062106200341f0006a41386a2207200541086a2208200128020822094106746a220141386a290000370300200341f0006a41306a220a200141306a290000370300200341f0006a41286a220b200141286a290000370300200341f0006a41206a220c200141206a290000370300200341f0006a41186a220d200141186a290000370300200341f0006a41106a220e200141106a290000370300200341f0006a41086a220f200141086a2900003703002003200129000037037020012008200941016a22104106746a20062009417f736a220841067410d50b1a200341b0016a41186a2211200541c8056a221220094105746a220141186a290000370300200341b0016a41106a2213200141106a290000370300200341b0016a41086a2214200141086a290000370300200320012900003703b0012001201220104105746a200841057410d50b1a20052006417f6a22013b0106200341d0016a41386a2007290300370300200341d0016a41306a200a290300370300200341d0016a41286a200b290300370300200341d0016a41206a200c290300370300200341d0016a41186a200d290300370300200341d0016a41106a200e290300370300200341d0016a41086a200f29030037030020034198026a2014290300370300200341a0026a2013290300370300200341a8026a2011290300370300200320032903703703d001200320032903b00137039002200341106a200341d0016a41e00010d40b1a200341d0016a200341106a41e00010d40b1a0240200141ffff037141044b0d0002400240024020052802002206450d00200441016a21080240024020052f010422070d0020062f01060d01200341246a410136020020034201370214200341c0c0cd0036021020034104360274200341c486c7003602702003200341f0006a360220200341106a41cc86c7001043000b024020062007417f6a22074102746a41a8086a280200220a2f0106200141ffff03716a41016a410b4b0d00200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4101200910ad090c040b200341286a2005360200200341206a200a360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110ae09200320103602b8010c020b0240200141ffff0371200741027420066a41ac086a28020022012f01066a41016a410b4b0d00200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341b0016a200341106a4100200910ad090c030b200341286a2001360200200341206a2005360200200320043602242003200436021c200320073602182003200636021420032008360210200341106a410110af090b200320093602b8010b200320053602b401200320043602b0010b20032802b801210920032802b001210420032802b40122052802002201450d0020012f0106220741044b0d00200441016a21060240034020012802002210450d01200741ffff03712107200641016a210a024002400240024020012f010422080d0020102f01060d01200341246a410136020020034201370214200341c0c0cd0036021020034104360274200341c486c7003602702003200341f0006a360220200341106a41cc86c7001043000b20102008417f6a220b4102746a41a8086a28020021082003200136028801200320063602840120032008360280012003200636027c2003200b360278200320103602742003200a3602700240200720082f01066a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a29030037030020032003290370370310200341086a200341106a10b009200328020c2101200328020821060c030b200341f0006a410520076b10ae090c010b2003200841027420106a41ac086a280200220b36028801200320063602840120032001360280012003200636027c20032008360278200320103602742003200a36027002402007200b2f01066a41016a410b4b0d00200341106a41186a200341f0006a41186a280200360200200341106a41106a200341f0006a41106a290300370300200341106a41086a200341f0006a41086a290300370300200320032903703703102003200341106a10b00920032802042101200328020021060c020b200341f0006a410520076b10af090b410021010b2001450d0220012f0106220741044d0d000c020b0b200741ffff03710d00200241013a00000b2000200341d0016a41e00010d40b220141e8006a2009360200200141e4006a200536020020012004360260200341b0026a24000bb70701167f230041e0006b22042400024002400240200141186a28020022052f01062206200141106a28020022072f0106220820021b2003490d00200841016a220920066a220a410c4f0d01200128020c210b2001280208210c2001280200210d2001280204220e2f0106210f2007200a3b0106200441386a2210200e41086a2211200c4106746a221241386a290000370300200441306a2213201241306a290000370300200441286a2214201241286a290000370300200441206a2215201241206a290000370300200441186a2216201241186a290000370300200441106a2217201241106a290000370300200441086a2218201241086a2900003703002004201229000037030020122011200c41016a22014106746a200f200c417f736a221141067410d50b1a200741086a221920084106746a221241386a2010290300370000201241306a2013290300370000201241286a2014290300370000201241206a2015290300370000201241186a2016290300370000201241106a2017290300370000201241086a201829030037000020122004290300370000201920094106746a200541086a200641067410d40b1a200441c0006a41186a2210200e41c8056a2213200c4105746a221241186a290000370300200441c0006a41106a2214201241106a290000370300200441c0006a41086a2215201241086a290000370300200420122900003703402012201320014105746a201141057410d50b1a200741c8056a221320084105746a221241186a2010290300370000201241106a2014290300370000201241086a201529030037000020122004290340370000201320094105746a200541c8056a200641057410d40b1a200e41a8086a221220014102746a200c410274220c20126a41086a201141027410d50b1a02402001200f4f0d00200c200e6a41ac086a211203402012280200220c20013b0104200c200e360200201241046a2112200f200141016a2201470d000b0b200e200e2f0106417f6a3b01060240200d4102490d002006200a20096b470d03200720094102746a41a8086a200541a8086a200641016a220c41027410d40b1a200a20084d0d00200720084102746a41ac086a21012009211203402001280200220e20123b0104200e2007360200200141046a2101201241016a2112200c417f6a220c0d000b0b20051039200020073602042000200b36020020002009410020021b20036a360208200441e0006a24000f0b41b089c70041910141c48ac7001035000b41dc86c700412a418887c7001035000b41b485c700412841dc85c7001035000bb50a02207f077e230041e0016b220224000240024002400240200041186a28020022032f0106220420016a2205410c4f0d00200041106a28020022062f010622072001490d012006200720016b22083b0106200320053b0106200341086a220920014106746a2009200441067410d50b1a200341c8056a220a20014105746a200a200441057410d50b1a2007200841016a220b6b22042001417f6a470d022009200641086a2207200b4106746a2004410674220c10d40b2109200a200641c8056a220d200b4105746a2004410574220e10d40b210a200241186a220f200d20084105746a220441186a290000370300200241106a220d200441106a290000370300200241086a2210200441086a2900003703002002200429000037030020024180016a41086a2211200041046a2802002212200028020822134106746a220441106a221429000037030020024180016a41106a2215200441186a221629000037030020024180016a41186a2217200441206a221829000037030020024180016a41206a2219200441286a221a29000037030020024180016a41286a221b200441306a221c29000037030020024180016a41306a221d200441386a221e29000037030020024180016a41386a221f200441c0006a22202900003703002002200441086a222129000037038001200720084106746a22042900002122200441086a2900002123200441106a2900002124200441186a2900002125200441206a2900002126200441286a2900002127200441306a29000021282020200441386a290000370000201e2028370000201c2027370000201a202637000020182025370000201620243700002014202337000020212022370000200241c8016a2208201220134105746a220441d0056a2207290000370300200241d0016a2212200441d8056a2213290000370300200241d8016a2214200441e0056a22162900003703002002200441c8056a22042900003703c00120042002290300370000200720102903003700002013200d2903003700002016200f290300370000200241206a41386a2207201f290300370300200241206a41306a220d201d290300370300200241206a41286a220f201b290300370300200241206a41206a22102019290300370300200241206a41186a22132017290300370300200241206a41106a22162015290300370300200241206a41086a221520112903003703002002200229038001370320200241e0006a41186a22112014290300370300200241e0006a41106a22142012290300370300200241e0006a41086a22122008290300370300200220022903c0013703602009200c6a220441386a2007290300370000200441306a200d290300370000200441286a200f290300370000200441206a2010290300370000200441186a2013290300370000200441106a2016290300370000200441086a201529030037000020042002290320370000200a200e6a22042002290360370000200441086a2012290300370000200441106a2014290300370000200441186a2011290300370000200028020c21040240024020002802140d002004450d010c050b2004450d04200341a8086a2204200141027422006a2004200520016b41027441046a10d50b1a20042006200b4102746a41a8086a200010d40b1a200541016a21064100210103402004280200220020013b010420002003360200200441046a21042006200141016a2201470d000b0b200241e0016a24000f0b41a488c700413341d888c7001035000b41e888c7004127419089c7001035000b41b485c700412841dc85c7001035000b41e1d1cd00412841a089c7001035000b840b02207f077e230041e0016b220224000240024002400240200041106a28020022032f0106220420016a2205410c4f0d00200041186a28020022062f010622072001490d01200320053b01062006200720016b22083b0106200241186a2209200641c8056a220a2001417f6a220b410574220c6a220741186a290000370300200241106a220d200741106a290000370300200241086a220e200741086a2900003703002002200729000037030020024180016a41086a220f200041046a2802002210200028020822114106746a220741106a221229000037030020024180016a41106a2213200741186a221429000037030020024180016a41186a2215200741206a221629000037030020024180016a41206a2217200741286a221829000037030020024180016a41286a2219200741306a221a29000037030020024180016a41306a221b200741386a221c29000037030020024180016a41386a221d200741c0006a221e2900003703002002200741086a221f29000037038001200641086a2220200b41067422216a22072900002122200741086a2900002123200741106a2900002124200741186a2900002125200741206a2900002126200741286a2900002127200741306a2900002128201e200741386a290000370000201c2028370000201a202737000020182026370000201620253700002014202437000020122023370000201f2022370000200241c8016a2212201020114105746a220741d0056a2210290000370300200241d0016a2211200741d8056a2214290000370300200241d8016a2216200741e0056a22182900003703002002200741c8056a22072900003703c001200720022903003700002010200e2903003700002014200d29030037000020182009290300370000200241206a41386a2209201d290300370300200241206a41306a220d201b290300370300200241206a41286a220e2019290300370300200241206a41206a22102017290300370300200241206a41186a22142015290300370300200241206a41106a22152013290300370300200241206a41086a2213200f2903003703002002200229038001370320200241e0006a41186a220f2016290300370300200241e0006a41106a22162011290300370300200241e0006a41086a22112012290300370300200220022903c001370360200341086a221220044106746a220741386a2009290300370000200741306a200d290300370000200741286a200e290300370000200741206a2010290300370000200741186a2014290300370000200741106a2015290300370000200741086a201329030037000020072002290320370000200341c8056a220920044105746a22072002290360370000200741086a2011290300370000200741106a2016290300370000200741186a200f290300370000200b2005200441016a22076b470d02201220074106746a2020202110d40b1a200920074105746a200a200c10d40b1a2020202020014106746a200841067410d50b1a200a200a20014105746a200841057410d50b1a200028020c210a0240024020002802140d00200a450d010c050b200a450d04200320074102746a41a8086a200641a8086a22002001410274220a10d40b1a20002000200a6a200841027441046a10d50b1a0240200520044d0d00200441027420036a41ac086a210003402000280200220420073b010420042003360200200041046a2100200741016a21072001417f6a22010d000b0b2008417f460d00200641a8086a2107200841016a21044100210003402007280200220120003b010420012006360200200741046a21072004200041016a2200470d000b0b200241e0016a24000f0b419887c700413241cc87c7001035000b41dc87c7004128418488c7001035000b41b485c700412841dc85c7001035000b41e1d1cd004128419488c7001035000bfe0601157f230041e0006b2202240002400240200141106a28020022032f0106220441016a2205200141186a28020022062f010622076a2208410c4f0d00200128020821092001280200210a2001280204220b2f0106210c200320083b0106200241386a220d200b41086a220e20094106746a220f41386a290000370300200241306a2210200f41306a290000370300200241286a2211200f41286a290000370300200241206a2212200f41206a290000370300200241186a2213200f41186a290000370300200241106a2214200f41106a290000370300200241086a2215200f41086a2900003703002002200f290000370300200f200e200941016a22014106746a200c2009417f736a220e41067410d50b1a200341086a221620044106746a220f41386a200d290300370000200f41306a2010290300370000200f41286a2011290300370000200f41206a2012290300370000200f41186a2013290300370000200f41106a2014290300370000200f41086a2015290300370000200f2002290300370000201620054106746a200641086a200741067410d40b1a200241c0006a41186a220d200b41c8056a221020094105746a220f41186a290000370300200241c0006a41106a2211200f41106a290000370300200241c0006a41086a2212200f41086a2900003703002002200f290000370340200f201020014105746a200e41057410d50b1a200341c8056a221020044105746a220f41186a200d290300370000200f41106a2011290300370000200f41086a2012290300370000200f2002290340370000201020054105746a200641c8056a200741057410d40b1a200b41a8086a220f20014102746a20094102742209200f6a41086a200e41027410d50b1a02402001200c4f0d002009200b6a41ac086a210f0340200f280200220920013b01042009200b360200200f41046a210f200c200141016a2201470d000b0b200b200b2f0106417f6a3b01060240200a4102490d002007200820056b470d02200320054102746a41a8086a200641a8086a200741016a220f41027410d40b1a200820044d0d00200441027420036a41ac086a210103402001280200220920053b010420092003360200200141046a2101200541016a2105200f417f6a220f0d000b0b200610392000200b3602042000200a360200200241e0006a24000f0b41dc86c700412a418887c7001035000b41b485c700412841dc85c7001035000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b2203410120031bad42d8087e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141d8086c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141d8086e360200200241206a24000f0b1034000bc80102037f017e230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1bad420c7e2205422088a74541027421012005a721040240024020030d00200241003602100c010b200241186a410436020020022003410c6c360214200220002802003602100b200220042001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410c6e360200200241206a24000f0b1034000bd10101037f230041206b220224000240200141016a22032001490d00200041046a280200220441017422012003200120034b1b22014104200141044b1b220141ffffff1f712001462103200141067421010240024020040d00200241003602100c010b200241186a410136020020022004410674360214200220002802003602100b200220012003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410676360200200241206a24000f0b1034000bcb0102037f017e230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1bad42b0037e2205422088a74541027421012005a721040240024020030d00200241003602100c010b200241186a41043602002002200341b0036c360214200220002802003602100b200220042001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a200141b0036e360200200241206a24000f0b1034000bda0102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42f8037e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141f8036c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141f8036e360200200241206a24000f0b1034000bbc0101037f230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034108200341084b1b21030240024020010d00200241003602100c010b200241106a41086a410136020020022001360214200220002802003602100b200220034101200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a2001360200200241206a24000f0b1034000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42307e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141306c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141306e360200200241206a24000f0b1034000bcb0102037f017e230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1bad42387e2205422088a74541037421012005a721040240024020030d00200241003602100c010b200241106a41086a41083602002002200341386c360214200220002802003602100b200220042001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a200141386e360200200241206a24000f0b1034000bbd0101047f230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1b220120016a220520014f41017421010240024020030d00200241003602100c010b200241186a410236020020022004360214200220002802003602100b200220052001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410176360200200241206a24000f0b1034000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42dc027e2205422088a74541027421032005a721040240024020010d00200241003602100c010b200241186a41043602002002200141dc026c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141dc026e360200200241206a24000f0b1034000bd50101027f230041206b220324000240200120026a22022001490d00200041046a280200220441017422012002200120024b1b22014104200141044b1b220141ffffffff03712001464101742102200141027421010240024020040d00200341003602100c010b200341186a410236020020032004410274360214200320002802003602100b200320012002200341106a109a01200341086a2802002101024020032802004101470d002001450d011032000b20002003280204360200200041046a2001410276360200200341206a24000f0b1034000bcb0102037f017e230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1bad42f4027e2205422088a74541027421012005a721040240024020030d00200241003602100c010b200241186a41043602002002200341f4026c360214200220002802003602100b200220042001200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a200141f4026e360200200241206a24000f0b1034000bd70102037f017e230041206b220224000240200141016a22032001490d00200041046a280200220141017422042003200420034b1b22034104200341044b1bad42287e2205422088a74541037421032005a721040240024020010d00200241003602100c010b200241106a41086a41083602002002200141286c360214200220002802003602100b200220042003200241106a109a01200241086a2802002101024020022802004101470d002001450d011032000b20002002280204360200200041046a200141286e360200200241206a24000f0b1034000bc90101037f230041206b22022400200041046a280200220341017422042001200420014b1b22014104200141044b1b220141ffffffff01712001464102742104200141037421010240024020030d00200241003602100c010b200241186a410436020020022003410374360214200220002802003602100b200220012004200241106a109a01200241086a28020021010240024020022802004101470d002001450d011032000b20002002280204360200200041046a2001410376360200200241206a24000f0b1034000bfa0101057f02400240200128020822024105744104722203417f4c0d0020012802002101200310382204450d0120002004360200200041086a22054100360200200041046a220620033602002000200210ac0202402002450d002002410574210420052802002103034002400240200628020020036b411f4d0d00200321020c010b2000200341201077200528020021020b2005200241206a2203360200200028020020026a22022001290000370000200241086a200141086a290000370000200241106a200141106a290000370000200241186a200141186a290000370000200141206a2101200441606a22040d000b0b0f0b1034000b1032000bd30101057f02400240200128020822024104744104722203417f4c0d0020012802002101200310382204450d0120002004360200200041086a22044100360200200041046a220520033602002000200210ac0202402002450d00200120024104746a210603402001280200210302402005280200200428020022026b41034b0d002000200241041077200428020021020b200028020020026a20033600002004200241046a360200200141046a2802002001410c6a280200200010b902200141106a22012006470d000b0b0f0b1034000b1032000b9a08090c7f017e097f027e047f027e017f017e017f230041d00f6b220224002001280204210320012802002104024002400240200128020822052001410c6a2802002206470d00200421070c010b200620056b2108200241bc046a41046a2109200241f40b6a41046a210a4100210b02400240034020012005200b6a220c4198046a3602082002200c41980410d40b22072d00004108460d01200c41186a280200210d200c41106a290300210e200c410c6a280100210f200c41086a2801002110200c41046a2801002111200c41016a2d00002112200c2d00002113200741a8086a200c411c6a221441cc0310d40b1a20074188086a41186a2215200c4180046a29030037030020074188086a41106a2216200c41f8036a29030037030020074188086a41086a2217200c41f0036a2903003703002007200c41e8036a29030037038808200c4188046a2903002118200c4190046a2903002119200741f40b6a201441cc0310d40b1a4100211a02400240024002400240024002400240024020130e080801020304050600080b200720113602a0042007201036029c04200720113602980420072011200f41e0076c6a3602a404200741c00f6a20074198046a10c209200741bc046a200741a8086a41cc0310d40b1a20074198046a41186a201529030037030020074198046a41106a201629030037030020074198046a41086a201729030037030020072007290388083703980420072802c00f211b20072802c40f211c20072802c80f211d4107211a2019211e2018211f200d2120200e2121201221220c070b200741bc046a201441bc0310d40b1a4101211a0c050b2009200a41c80310d40b1a4102211a0c040b4103211a0c030b2009200a41c80310d40b1a4104211a0c020b2009200a41c80310d40b1a4105211a0c010b200741bc046a201441c40310d40b1a4106211a0b2011211b200d2120200e21212010211c200f211d0b2004200b6a220c41186a2020360200200c41106a2021370300200c410c6a201d360100200c41086a201c360100200c41046a201b360100200c41016a20223a0000200c201a3a0000200c411c6a200741bc046a41cc0310d40b1a200c4190046a201e370300200c4188046a201f370300200c4180046a20074198046a41186a290300370300200c41f8036a20074198046a41106a290300370300200c41f0036a20074198046a41086a290300370300200c41e8036a2007290398043703002008200b4198046a220b460d020c000b0b2004200b6a2107200c4198046a21050c020b2004200b6a21072005200b6a21050b200241083a00000b200141003602042001410c6a41002802e8c848220c3602002001200c3602082001200c3602002005200620056b4198046d10ea072000200720046b4198046d3602082000200336020420002004360200200c410010ea07200241d00f6a24000bf90101087f230041c00f6b22022400200128020421032001280200210402400240200128020822052001410c6a22062802002207470d00200421080c010b2004210802400340200522092d0000410b460d01200241e0076a200941e00710d40b1a2002200241e0076a10c4092008200241e00710d40b41e0076a21082007200941e0076a2205470d000b0b200941e0076a21050b20014100360204200641002802e8c84822093602002001200936020820012009360200024020072005460d000340200510e9072007200541e0076a2205470d000b0b20002003360204200020043602002000200820046b41e0076d360208200241c00f6a24000b820601047f230041e0006b22022400200241086a41e0c1cd00410810cb01200241186a41bcfccd00410e10cb01200220003602482002200241c8006a410410cc01370338200241dc006a2203200241c8006a41046a3602002002200241386a41086a3602542002200241c8006a3602582002200241386a360250200241286a200241d0006a10830102400240412010382200450d0020002001290000370000200041186a200141186a290000370000200041106a200141106a290000370000200041086a200141086a29000037000020022000412010cc013703482003200041206a360200200220003602582002200241c8006a41086a3602542002200241c8006a360250200241386a200241d0006a108301200010392002280230220420022802406a41206a2200417f4c0d010240024020000d00410121010c010b200010382201450d010b4100210320024100360258200220013602502002200036025402402000410f4b0d00200241d0006a4100411010772002280254210020022802502101200228025821030b200120036a22052002290008370000200541086a200241086a41086a2900003700002002200341106a22033602580240200020036b410f4b0d00200241d0006a2003411010772002280254210020022802502101200228025821030b200120036a22052002290018370000200541086a200241186a41086a2900003700002002200341106a2203360258200228022821050240200020036b20044f0d00200241d0006a20032004107720022802502101200228025821030b200120036a2005200410d40b1a2002200320046a2200360258200228023821030240200228025420006b200228024022014f0d00200241d0006a200020011077200228025821000b2002280250220420006a2003200110d40b1a0240200228023c450d00200310390b200020016a21000240200228022c450d00200228022810390b20022004200010ce03200228020421002002280200210102402002280254450d00200410390b200241e0006a24002000410020011b0f0b1032000b1034000bc40902047f017e23004190136b22022400024002400240024002400240024002400240024002400240024020012d00000e0b0102030405060a07080900010b200141046a2802002103200241086a200141086a41c80310d40b1a200241b00b6a200341e00710d40b1a200241d0036a200241b00b6a10c40941e00710382201450d0b2001200241d0036a41e00710d40b2101200041086a200241086a41c80310d40b1a2000410a3a0000200041046a2001360200200310390c0a0b200241086a41086a22032001410c6a2802003602002002200141046a290200370308200141186a2802002104200141146a28020021052002200141106a28020022013602b80b200220053602b40b200220013602b00b2002200120044198046c6a3602bc0b200241d0036a200241b00b6a10c1092000410c6a2003280200360200200041046a2002290308370200200041106a20022903d003370200200041186a200241d0036a41086a280200360200200041003a00000c090b200241086a41086a22032001410c6a2802003602002002200141046a290200370308200141186a2802002104200141146a28020021052002200141106a28020022013602b80b200220053602b40b200220013602b00b2002200120044198046c6a3602bc0b200241d0036a200241b00b6a10c1092000410c6a2003280200360200200041046a2002290308370200200041106a20022903d003370200200041186a200241d0036a41086a280200360200200041013a00000c080b200241086a41086a22032001410c6a2802003602002002200141046a290200370308200141186a2802002104200141146a28020021052002200141106a28020022013602b80b200220053602b40b200220013602b00b2002200120044198046c6a3602bc0b200241d0036a200241b00b6a10c1092000410c6a2003280200360200200041046a2002290308370200200041106a20022903d003370200200041186a200241d0036a41086a280200360200200041023a00000c070b200041033a0000200041106a200141106a290300370300200041046a200141046a2902003702002000410c6a2001410c6a2802003602000c060b2000410c6a2001410c6a280200360200200041046a200141046a290200370200200041106a200141106a41c80310d40b1a200041043a00000c050b2000410c6a2001410c6a280200360200200041046a200141046a290200370200200041206a200141206a41c80310d40b1a200041053a0000200041186a200141186a280200360200200041106a200141106a2902003702000c040b200041073a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000c030b200041083a0000200041046a200141046a2802003602000c020b200041093a00002000410c6a2001410c6a280200360200200041046a200141046a2902003702000c010b200141086a290300210620012d00012103200241b00b6a200141106a41d00710d40b1a200241940b6a200241b00b6a41c8076a280200360200200220022903f01237028c0b024020022802b00b4126460d00200241b00b6a10cf040b200020033a0001200041106a4126360200200041086a2006370300200041146a200241d0036a41c80710d40b1a200041063a00000b20024190136a24000f0b1032000be90503027f017e0b7f230041206b2202240002400240024020012802082203ad42247e2204422088a70d002004a72205417f4c0d00200128020021064104210702402005450d00200510382207450d020b410021082000410036020820002007360200200041046a200541246e2209360200024020054124490d002002411e6a210a2009210b034020052008460d01200b450d044101210c02400240024002400240200620086a22012d00000e050104020300010b200a200141036a2d00003a00004104210c200241086a41046a200141146a2d00003a00002002200141016a2f00003b011c2002200141106a2800003602082001410c6a280000210d200141086a280000210e200141046a280000210f0c030b200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210d200141086a280000210e200141046a280000210f4100210c0c020b2001410c6a280200220e417f4c0d04200141046a280200210102400240200e0d004101210f0c010b200e1038220f450d060b200f2001200e10d40b1a4102210c200e210d0c010b4103210c200a200141036a2d00003a0000200241086a41086a200141186a290000370300200241086a41106a200141206a2d00003a00002002200141016a2f00003b011c2002200141106a2900003703082001410c6a280000210d200141086a280000210e200141046a280000210f0b200720086a2201200c3a0000200141016a20022f011c3b0000200141036a200a2d00003a00002001410c6a200d360200200141086a200e360200200141046a200f360200200141106a2002290308370200200141186a200241086a41086a290300370200200141206a200241086a41106a280200360200200841246a2108200b417f6a220b0d000b0b20002003360208200241206a24000f0b1034000b1032000b200920094198b4ca00103c000b810a05027f017e0d7f027e027f23004190086b2202240002400240024020012802082203ad4298047e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821070c010b200510382207450d020b2000410036020820002007360200200041046a20054198046e220836020002402005419804490d0020024194046a21092002412c6a41046a210a20024188046a410472210b200241fa036a41026a210c200241e0076a210d20024180046a210e4100210f2008211003402005200f460d012010450d042010417f6a211041002111024002400240024002400240024002402006200f6a22012d00000e080701020304050600070b20024188046a200141106a10c70920014190046a290300211220014188046a2903002113200141016a2d0000211120024180086a200141046a10c809200228029004211420022903880421042002412c6a200941cc0310d40b1a200241086a41186a200d41186a290300370300200241086a41106a200d41106a290300370300200241086a41086a200d41086a290300370300200c200229038008370100200c41086a20024180086a41086a2802003601002002200d29030037030820114100472115410721110c060b200241086a200141046a10b30320024188046a200141106a10b403200c41086a200241086a41086a280200360100200c2002290308370100200229038804210420022802900421142002412c6a200941bc0310d40b1a410121110c050b20024180086a200141046a10b30320024188046a200141206a10b403200241086a200141106a10c909200c41086a20024180086a41086a280200360100200c200229038008370100200a20024188046a41c80310d40b1a2002280210211420022903082104410221110c040b200241086a200141046a10b30320024188046a200141106a10b303200c41086a200241086a41086a280200360100200c200229030837010020022903880421042002280290042114410321110c030b4104211120024180086a200141046a10b30320024188046a200141206a10b403200241086a200141106a10c909200c41086a20024180086a41086a280200360100200c200229038008370100200a20024188046a41c80310d40b1a20022802102114200229030821040c020b20024180086a200141046a10b30320024188046a200141206a10b403200241086a200141106a10c909200c41086a20024180086a41086a280200360100200c200229038008370100200a20024188046a41c80310d40b1a2002280210211420022903082104410521110c010b200141106a290300210420024188046a200141186a10b403200241086a200141046a10b30320022802880421142002412c6a200b41c40310d40b1a200c41086a200241086a41086a280200360100200c2002290308370100410621110b2007200f6a220120113a0000200141016a20153a0000200141026a20022901fa03370100200141086a200e290100370100200141186a2014360200200141106a20043703002001411c6a2002412c6a41cc0310d40b1a20014190046a201237030020014188046a201337030020014180046a200241086a41186a290300370300200141f8036a200241086a41106a290300370300200141f0036a200241086a41086a290300370300200141e8036a2002290308370300200f4198046a210f20100d000b0b2000200336020820024190086a24000f0b1034000b1032000b200820084198b4ca00103c000bfa0e03077f027e037f230041e0036b2202240002400240024002400240024002400240024002400240024002400240024020012802000e0c0102030405060708090a0b00010b200241086a200141086a10b4034100210341002104410021050240024002400240024002400240200141d0036a2d00000e0706010203040500060b200141dc036a2802002206417f4c0d12200141d4036a28020021010240024020060d00410121070c010b200610382207450d140b200641807e71210520072001200610d40b41807e71210341062104200621080c050b200141d8036a2903002209a7220841807e712105200141e0036a290300210a2009422088a72106410121040c040b20012f00d103200141d3036a2d000041107472210b200141d4036a2d0000210741022104410021050c030b200141d4036a280200220741807e71210320012f00d103200141d3036a2d000041107472210b200141d8036a2d0000210841032104410021050c020b200141d8036a280200220841807e712105200141d4036a280200220741807e71210320012f00d103200141d3036a2d000041107472210b200141e0036a310000210a200141dc036a2802002106410421040c010b200241d0036a41086a200141f0036a2d00003a00002002200141e8036a2903003703d003200141d4036a280200220741807e712103200141d8036a2903002209a7220841807e71210520012f00d103200141d3036a2d000041107472210b200141e0036a290300210a2009422088a72106410521040b200041086a200241086a41c80310d40b1a200041d3036a200b4110763a0000200041d1036a200b3b0000200041e0036a200a370300200041d4036a2003200741ff017172360200200041d0036a20043a00002000410b360200200041e8036a20022903d003370300200041f0036a200241d0036a41086a290300370300200041d8036a2006ad4220862005200841ff017172ad843703000c0b0b200041003602000c0a0b200041013602000c090b200041023602000c080b200041033602000c070b2001410c6a280200220b417f4c0d072001280204210102400240200b0d00410121060c010b200b10382206450d090b20062001200b10d40b21012000410c6a200b360200200041086a200b36020020002001360204200041043602000c060b2001410c6a280200220b417f4c0d062001280204210102400240200b0d00410121060c010b200b10382206450d080b20062001200b10d40b21012000410c6a200b360200200041086a200b36020020002001360204200041053602000c050b200241086a200141086a10b403200041086a200241086a41c80310d40b1a200041063602000c040b200241086a200141086a10b403200041086a200241086a41c80310d40b1a200041073602000c030b2001410c6a280200220b417f4c0d032001280204210602400240200b0d00410121070c010b200b10382207450d050b20072006200b10d40b21062000410c6a200b360200200041086a200b3602002000200636020420004108360200200041186a200141186a290300370300200041106a20012903103703000c020b2001410c6a280200220b417f4c0d022001280204210602400240200b0d00410121070c010b200b10382207450d040b20072006200b10d40b210c4100210d4100210841002103024002400240024002400240024020012d00100e0706010203040500060b2001411c6a2802002207417f4c0d08200141146a28020021010240024020070d00410121040c010b200710382204450d0a0b200741807e71210320042001200710d40b41807e71210d41062108200721050c050b200141186a2903002209a7220541807e712103200141206a290300210a2009422088a72107410121080c040b20012f0011200141136a2d0000411074722106200141146a2d0000210441022108410021030c030b200141146a280200220441807e71210d20012f0011200141136a2d0000411074722106200141186a2d0000210541032108410021030c020b200141186a280200220541807e712103200141146a280200220441807e71210d20012f0011200141136a2d0000411074722106200141206a310000210a2001411c6a2802002107410421080c010b200241106a200141306a2d00003a00002002200141286a290300370308200141146a280200220441807e71210d200141186a2903002209a7220541807e71210320012f0011200141136a2d0000411074722106200141206a290300210a2009422088a72107410521080b2000200c36020420004109360200200041136a20064110763a0000200041116a20063b0000200041206a200a370300200041106a20083a00002000410c6a200b360200200041086a200b360200200041286a2002290308370300200041146a200d200441ff017172360200200041306a200241086a41086a290300370300200041186a2007ad4220862003200541ff017172ad843703000c010b200241086a200141086a10b403200141d0036a290300210a200141d8036a2903002109200041086a200241086a41c80310d40b1a200041d8036a2009370300200041d0036a200a3703002000410a3602000b200241e0036a24000f0b1034000b1032000be50103027f017e047f230041e0076b2202240002400240024020012802082203ad42e0077e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510382206450d020b2000410036020820002006360200200041046a200541e0076e22073602000240200541e007490d002007210803402005450d012008450d042002200110c1082006200241e00710d40b41e0076a2106200541a0786a2105200141e0076a21012008417f6a22080d000b0b20002003360208200241e0076a24000f0b1034000b1032000b200720074198b4ca00103c000bd80a05027f017e107f027e047f230041c00b6b22022400024002400240024020012802082203ad4298047e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510382206450d020b2000410036020820002006360200200041046a20054198046e220736020002402005419804490d00200120034198046c6a2108200241e0036a410c6a2109200241046a41046a210a200241e0036a410472210b200241b8076a210c200241d8076a41186a210d200241d8076a41106a210e200241d8076a41086a210f200721104100211103402011210520012008460d0120052007460d05410021120240024002400240024002400240024020012d00000e080701020304050600070b200241e0036a200141106a10c7092001410c6a2802002213ad42e8037e2204422088a70d092004a72214417f4c0d0920014190046a290300211520014188046a290300211620012d000121170240024020140d0041082118410021190c010b200141046a280200211a201410382218450d0b201441e8036e2119201441e803490d004100211220192111034020142012460d012011450d0d200241d8076a201a20126a10c603201820126a200241d8076a41e80310d40b1a201241e8036a21122011417f6a22110d000b0b20022802e803211420022903e0032104200241046a200941cc0310d40b1a200d200c41186a290300370300200e200c41106a290300370300200f200c41086a2903003703002002200c2903003703d807201741ff0171410047211a410721120c060b200241d8076a200141046a10b303200241e0036a200141106a10b40320022802e803211420022903e003210420022802e007211320022802dc07211920022802d8072118200241046a200941bc0310d40b1a410121120c050b200241d0036a200141046a10b303200241e0036a200141206a10b403200241d8076a200141106a10c90920022802d803211320022802d403211920022802d0032118200a200241e0036a41c80310d40b1a20022802e007211420022903d8072104410221120c040b200241d8076a200141046a10b303200241e0036a200141106a10b30320022802e803211420022903e003210420022802e007211320022802dc07211920022802d8072118410321120c030b41042112200241d0036a200141046a10b303200241e0036a200141206a10b403200241d8076a200141106a10c90920022802d803211320022802d403211920022802d0032118200a200241e0036a41c80310d40b1a20022802e007211420022903d80721040c020b200241d0036a200141046a10b303200241e0036a200141206a10b403200241d8076a200141106a10c90920022802d803211320022802d403211920022802d0032118200a200241e0036a41c80310d40b1a20022802e007211420022903d8072104410521120c010b200141106a2903002104200241e0036a200141186a10b403200241d8076a200141046a10b30320022802e0032114200241046a200b41c40310d40b1a20022802e007211320022802dc07211920022802d8072118410621120b20014198046a2101200541016a2111200620054198046c6a220520183601042005201a3a0001200520123a00002005201336010c2005201936010820052014360218200520043703102005411c6a200241046a41cc0310d40b1a2005201537039004200520163703880420054180046a200d290300370300200541f8036a200e290300370300200541f0036a200f290300370300200520022903d8073703e8032010417f6a22100d000b0b20002003360208200241c00b6a24000f0b1034000b1032000b201920194198b4ca00103c000b200720074198b4ca00103c000bdd0203027f017e077f230041206b2202240002400240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410821010c010b200510382201450d020b2000410036020820002001360200200041046a200541306e2207360200024020054130490d002007210803402005450d012008450d04200241186a2209200641286a290300370300200241106a220a200641206a290300370300200241086a220b200641186a29030037030020022006290310370300200641086a29030021042001200629030037030020012004370308200141106a2002290300370300200141186a200b290300370300200141206a200a290300370300200141286a2009290300370300200141306a2101200541506a2105200641306a21062008417f6a22080d000b0b20002003360208200241206a24000f0b1034000b1032000b200720074198b4ca00103c000be20d010e7f230041a0016b22022400410021034100280284ee4d2104024002402001280204220541037622060d0020052107410021080c010b2002420037023c20022004360238024002400240200541067620054138714100476a2209450d00200241386a4100200910772009200228024022074b0d010b200228023821040c010b0240200228023c20076b200920076b22094f0d00200241386a200720091077200228024021070b2002280238220420076a210a0240024020094102490d00200a41002009417f6a10d60b1a200920076a20046a417f6a210a0c010b2009450d010b200a41003a00000b41002005410676200541c0004922071b2109200228023c2103024002402006200641077120071b41ff0171220a0d00200521072009450d010b200420096a210b41002106200421090340200920092d0000417e200641077177713a000020094100200641ff0171220741016a2206410376200741074922071b6a21092006200641077120071b220641ff0171200a470d00200b2009470d000b2001280204220741037621060b200541787121080b2001280200210920022008410376220a360270200220063602880102400240200a2006470d00024020074107710d0041002101200841067620084138714100476a210b024002400240024002402008450d00200a410771220645410374200672210c200b0d0141b8c0cd0021064100210b0c040b4100210c200b0d0141b8c0cd002106410021014100210b0c030b200c4108470d00410021010c010b2004200b417f6a220b6a21010b200421060b4100210d200a2007410771220e6a220541037620054107714100476a21050240024002400240200a200e72450d0020050d0141b8c0cd002109410021050c030b20050d014100210541b8c0cd0021094100210d0c020b200a20076a4107712207454103742007724108460d010b20092005417f6a22056a210d0b02402005200b200b20054b1b2207450d000340200620092d00003a0000200641016a2106200941016a21092007417f6a22070d000b0b2001450d02200d450d02200120012d0000417f417f200c41077174417f73200c4108461b2209417f737122063a000020012006200d2d0000200971723a00000c020b200241cc006a4220370200200241c8006a20073602002002420037025420022009360244200241203602402002200836023c20022004360238200241106a200241386a109a0a20022802102209450d01200241c4006a210e200228021421070340200241086a200e10f50920022802082206450d022006200228020c10f609210620024105360264200241b895cc0036026020022007410376220a410020091b220b36026c0240024002400240200b417f6a41204f0d0041002105200a2007410771220b6a220141037620014107714100476a21010240200a200b72450d00200a20076a41077122074541037420077221050b2001450d0302400240200b0d0020054108470d00200920016a21074100210a0c010b02400240024020054108470d00200941016a210f2001417f6a2107200c41807e71200b72210c4100210a0c010b0240200b0d0020092001417f6a22076a210a0c020b20014101460d04200941016a210f2001417e6a2107200c41807e71200b72210c200120096a417f6a210a2005210d0b02400240200c41ff01710d00200c410771210541ff01210b0c010b417f4100200c6b41077174417f73200c410771220574210b0b200920092d0000200b417f73712006200574200b71723a000002404108200c6b41ff01712209411f4d0d00200d2105200f2109410021060c010b20062009762106200d2105200f21090b024020070d002005210d0c040b200920076a21072005210d0b0340200920063a0000200641087621062007200941016a2209470d000c030b0b20024188016a41146a410236020020024194016a412e360200200241f0006a41146a410336020020024204370274200241f4b6c300360270200241f0b6c300360290012002410436028c01200220024188016a360280012002200241ec006a360298012002200241e0006a36028801200241f0006a4194b7c3001043000b200920092d0000417f417f2005200b6b220741077174417f73200b7420074108461b2207417f73712006200b74200771723a00002009210c0c010b200a450d00200a200a2d0000417f417f200d41077174417f73200d41ff01714108461b2209417f73712009200671723a00000b2002200241386a109a0a2002280204210720022802002209450d020c000b0b200241cc006a4100360200200241c8006a41b8c0cd003602002002420137023c200241a095cc00360238200241f0006a20024188016a200241386a41a895cc0010850b000b200020033602082000200836020420002004360200200241a0016a24000bfc2b01017f230041c0036b22022400024002400240024002400240024002400240024020012802000e09010203040506070800010b2002200141086a10cd09200241386a200141c0006a10cd09200241f0006a200141f8006a10cd09200241a8016a200141b0016a10cd09200241e0016a200141e8016a10cd0920024198026a200141a0026a10cd09200241d0026a200141d8026a10cd0920024188036a20014190036a10cd09200041386a200241306a290300370300200041306a200241286a290300370300200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a29030037030020002002290300370308200041c0006a2002290338370300200041c8006a200241386a41086a290300370300200041d0006a200241386a41106a290300370300200041d8006a200241386a41186a290300370300200041e0006a200241386a41206a290300370300200041e8006a200241386a41286a290300370300200041f0006a200241386a41306a290300370300200041a8016a200241f0006a41306a290300370300200041a0016a200241f0006a41286a29030037030020004198016a200241f0006a41206a29030037030020004190016a200241f0006a41186a29030037030020004188016a200241f0006a41106a29030037030020004180016a200241f0006a41086a290300370300200041f8006a2002290370370300200041e0016a200241a8016a41306a290300370300200041d8016a200241a8016a41286a290300370300200041d0016a200241a8016a41206a290300370300200041c8016a200241a8016a41186a290300370300200041c0016a200241a8016a41106a290300370300200041b8016a200241a8016a41086a290300370300200041b0016a20022903a80137030020004198026a200241e0016a41306a29030037030020004190026a200241e0016a41286a29030037030020004188026a200241e0016a41206a29030037030020004180026a200241e0016a41186a290300370300200041f8016a200241e0016a41106a290300370300200041f0016a200241e0016a41086a290300370300200041e8016a20022903e001370300200041d0026a20024198026a41306a290300370300200041c8026a20024198026a41286a290300370300200041c0026a20024198026a41206a290300370300200041b8026a20024198026a41186a290300370300200041b0026a20024198026a41106a290300370300200041a8026a20024198026a41086a290300370300200041a0026a20022903980237030020004188036a200241d0026a41306a29030037030020004180036a200241d0026a41286a290300370300200041f8026a200241d0026a41206a290300370300200041f0026a200241d0026a41186a290300370300200041e8026a200241d0026a41106a290300370300200041e0026a200241d0026a41086a290300370300200041d8026a20022903d002370300200041c0036a20024188036a41306a290300370300200041b8036a20024188036a41286a290300370300200041b0036a20024188036a41206a290300370300200041a8036a20024188036a41186a290300370300200041a0036a20024188036a41106a29030037030020004198036a20024188036a41086a29030037030020004190036a200229038803370300200042083703000c080b200042003703000c070b20024188036a200141086a10cd0920004201370300200041386a20024188036a41306a290300370300200041306a20024188036a41286a290300370300200041286a20024188036a41206a290300370300200041206a20024188036a41186a290300370300200041186a20024188036a41106a290300370300200041106a20024188036a41086a29030037030020002002290388033703080c060b200241d0026a200141086a10cd0920024188036a200141c0006a10cd09200041386a200241d0026a41306a290300370300200041306a200241d0026a41286a290300370300200041286a200241d0026a41206a290300370300200041206a200241d0026a41186a290300370300200041186a200241d0026a41106a290300370300200041106a200241d0026a41086a290300370300200020022903d002370308200041c0006a200229038803370300200041c8006a20024188036a41086a290300370300200041d0006a20024188036a41106a290300370300200041d8006a20024188036a41186a290300370300200041e0006a20024188036a41206a290300370300200041e8006a20024188036a41286a290300370300200041f0006a20024188036a41306a290300370300200042023703000c050b20024198026a200141086a10cd09200241d0026a200141c0006a10cd0920024188036a200141f8006a10cd09200041386a20024198026a41306a290300370300200041306a20024198026a41286a290300370300200041286a20024198026a41206a290300370300200041206a20024198026a41186a290300370300200041186a20024198026a41106a290300370300200041106a20024198026a41086a2903003703002000200229039802370308200041c0006a20022903d002370300200041c8006a200241d0026a41086a290300370300200041d0006a200241d0026a41106a290300370300200041d8006a200241d0026a41186a290300370300200041e0006a200241d0026a41206a290300370300200041e8006a200241d0026a41286a290300370300200041f0006a200241d0026a41306a29030037030020004203370300200041a8016a20024188036a41306a290300370300200041a0016a20024188036a41286a29030037030020004198016a20024188036a41206a29030037030020004190016a20024188036a41186a29030037030020004188016a20024188036a41106a29030037030020004180016a20024188036a41086a290300370300200041f8006a2002290388033703000c040b200241e0016a200141086a10cd0920024198026a200141c0006a10cd09200241d0026a200141f8006a10cd0920024188036a200141b0016a10cd09200041386a200241e0016a41306a290300370300200041306a200241e0016a41286a290300370300200041286a200241e0016a41206a290300370300200041206a200241e0016a41186a290300370300200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200020022903e001370308200041c0006a200229039802370300200041c8006a20024198026a41086a290300370300200041d0006a20024198026a41106a290300370300200041d8006a20024198026a41186a290300370300200041e0006a20024198026a41206a290300370300200041e8006a20024198026a41286a290300370300200041f0006a20024198026a41306a290300370300200041a8016a200241d0026a41306a290300370300200041a0016a200241d0026a41286a29030037030020004198016a200241d0026a41206a29030037030020004190016a200241d0026a41186a29030037030020004188016a200241d0026a41106a29030037030020004180016a200241d0026a41086a290300370300200041f8006a20022903d002370300200041e0016a20024188036a41306a290300370300200041d8016a20024188036a41286a290300370300200041d0016a20024188036a41206a290300370300200041c8016a20024188036a41186a290300370300200041c0016a20024188036a41106a290300370300200041b8016a20024188036a41086a290300370300200041b0016a200229038803370300200042043703000c030b200241a8016a200141086a10cd09200241e0016a200141c0006a10cd0920024198026a200141f8006a10cd09200241d0026a200141b0016a10cd0920024188036a200141e8016a10cd09200041386a200241a8016a41306a290300370300200041306a200241a8016a41286a290300370300200041286a200241a8016a41206a290300370300200041206a200241a8016a41186a290300370300200041186a200241a8016a41106a290300370300200041106a200241a8016a41086a290300370300200020022903a801370308200041c0006a20022903e001370300200041c8006a200241e0016a41086a290300370300200041d0006a200241e0016a41106a290300370300200041d8006a200241e0016a41186a290300370300200041e0006a200241e0016a41206a290300370300200041e8006a200241e0016a41286a290300370300200041f0006a200241e0016a41306a290300370300200041a8016a20024198026a41306a290300370300200041a0016a20024198026a41286a29030037030020004198016a20024198026a41206a29030037030020004190016a20024198026a41186a29030037030020004188016a20024198026a41106a29030037030020004180016a20024198026a41086a290300370300200041f8006a200229039802370300200041e0016a200241d0026a41306a290300370300200041d8016a200241d0026a41286a290300370300200041d0016a200241d0026a41206a290300370300200041c8016a200241d0026a41186a290300370300200041c0016a200241d0026a41106a290300370300200041b8016a200241d0026a41086a290300370300200041b0016a20022903d00237030020004198026a20024188036a41306a29030037030020004190026a20024188036a41286a29030037030020004188026a20024188036a41206a29030037030020004180026a20024188036a41186a290300370300200041f8016a20024188036a41106a290300370300200041f0016a20024188036a41086a290300370300200041e8016a200229038803370300200042053703000c020b200241f0006a200141086a10cd09200241a8016a200141c0006a10cd09200241e0016a200141f8006a10cd0920024198026a200141b0016a10cd09200241d0026a200141e8016a10cd0920024188036a200141a0026a10cd09200041386a200241f0006a41306a290300370300200041306a200241f0006a41286a290300370300200041286a200241f0006a41206a290300370300200041206a200241f0006a41186a290300370300200041186a200241f0006a41106a290300370300200041106a200241f0006a41086a29030037030020002002290370370308200041c0006a20022903a801370300200041c8006a200241a8016a41086a290300370300200041d0006a200241a8016a41106a290300370300200041d8006a200241a8016a41186a290300370300200041e0006a200241a8016a41206a290300370300200041e8006a200241a8016a41286a290300370300200041f0006a200241a8016a41306a290300370300200041a8016a200241e0016a41306a290300370300200041a0016a200241e0016a41286a29030037030020004198016a200241e0016a41206a29030037030020004190016a200241e0016a41186a29030037030020004188016a200241e0016a41106a29030037030020004180016a200241e0016a41086a290300370300200041f8006a20022903e001370300200041e0016a20024198026a41306a290300370300200041d8016a20024198026a41286a290300370300200041d0016a20024198026a41206a290300370300200041c8016a20024198026a41186a290300370300200041c0016a20024198026a41106a290300370300200041b8016a20024198026a41086a290300370300200041b0016a20022903980237030020004198026a200241d0026a41306a29030037030020004190026a200241d0026a41286a29030037030020004188026a200241d0026a41206a29030037030020004180026a200241d0026a41186a290300370300200041f8016a200241d0026a41106a290300370300200041f0016a200241d0026a41086a290300370300200041e8016a20022903d002370300200041d0026a20024188036a41306a290300370300200041c8026a20024188036a41286a290300370300200041c0026a20024188036a41206a290300370300200041b8026a20024188036a41186a290300370300200041b0026a20024188036a41106a290300370300200041a8026a20024188036a41086a290300370300200041a0026a200229038803370300200042063703000c010b200241386a200141086a10cd09200241f0006a200141c0006a10cd09200241a8016a200141f8006a10cd09200241e0016a200141b0016a10cd0920024198026a200141e8016a10cd09200241d0026a200141a0026a10cd0920024188036a200141d8026a10cd09200041386a200241386a41306a290300370300200041306a200241386a41286a290300370300200041286a200241386a41206a290300370300200041206a200241386a41186a290300370300200041186a200241386a41106a290300370300200041106a200241386a41086a29030037030020002002290338370308200041c0006a2002290370370300200041c8006a200241f0006a41086a290300370300200041d0006a200241f0006a41106a290300370300200041d8006a200241f0006a41186a290300370300200041e0006a200241f0006a41206a290300370300200041e8006a200241f0006a41286a290300370300200041f0006a200241f0006a41306a290300370300200041a8016a200241a8016a41306a290300370300200041a0016a200241a8016a41286a29030037030020004198016a200241a8016a41206a29030037030020004190016a200241a8016a41186a29030037030020004188016a200241a8016a41106a29030037030020004180016a200241a8016a41086a290300370300200041f8006a20022903a801370300200041e0016a200241e0016a41306a290300370300200041d8016a200241e0016a41286a290300370300200041d0016a200241e0016a41206a290300370300200041c8016a200241e0016a41186a290300370300200041c0016a200241e0016a41106a290300370300200041b8016a200241e0016a41086a290300370300200041b0016a20022903e00137030020004198026a20024198026a41306a29030037030020004190026a20024198026a41286a29030037030020004188026a20024198026a41206a29030037030020004180026a20024198026a41186a290300370300200041f8016a20024198026a41106a290300370300200041f0016a20024198026a41086a290300370300200041e8016a200229039802370300200041d0026a200241d0026a41306a290300370300200041c8026a200241d0026a41286a290300370300200041c0026a200241d0026a41206a290300370300200041b8026a200241d0026a41186a290300370300200041b0026a200241d0026a41106a290300370300200041a8026a200241d0026a41086a290300370300200041a0026a20022903d00237030020004188036a20024188036a41306a29030037030020004180036a20024188036a41286a290300370300200041f8026a20024188036a41206a290300370300200041f0026a20024188036a41186a290300370300200041e8026a20024188036a41106a290300370300200041e0026a20024188036a41086a290300370300200041d8026a200229038803370300200042073703000b200241c0036a24000bee0801067f02400240024002400240024002400240024002400240024020012d00000e0a01020304050607080900010b410421024106210302400240024002400240024002400240200141046a2802000e0700010203040507000b410021030c050b200141106a2802002204417f4c0d0f200141086a2802002105410121034101210602402004450d00200410382206450d110b20062005200410d40b1a0c050b200141086a2802002106410221030c040b410321030c020b410421030c020b410521030b0b2001411c6a2802002105200141186a28020021070240024002400240024020012802140e050001020304000b410021020c030b410121020c020b410221020c010b410321020b200041093a00002000411c6a2005360200200041186a2007360200200041146a2002360200200041106a20043602002000410c6a2004360200200041086a2006360200200041046a20033602000f0b200041003a00000f0b200041013a0000200041046a200141046a2802003602000f0b4103210302400240024002400240200141246a2802000e0400010204000b410021030c020b200141306a2802002204417f4c0d09200141286a2802002102410121034101210602402004450d00200410382206450d0b0b20062002200410d40b1a0c020b410221030b0b200041023a000020002001290001370001200041306a20043602002000412c6a2004360200200041286a2006360200200041246a2003360200200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b4103210302400240024002400240200141046a2802000e0400010204000b410021030c020b200141106a2802002204417f4c0d08200141086a2802002102410121034101210602402004450d00200410382206450d0a0b20062002200410d40b1a0c020b410221030b0b200041033a0000200041186a2001290318370300200041106a20043602002000410c6a2004360200200041086a2006360200200041046a20033602000f0b4103210302400240024002400240200141186a2802000e0400010204000b410021030c020b200141246a2802002204417f4c0d072001411c6a2802002102410121034101210602402004450d00200410382206450d090b20062002200410d40b1a0c020b410221030b0b200041043a000020002001290001370001200041246a2004360200200041206a20043602002000411c6a2006360200200041186a2003360200200041116a200141116a280000360000200041096a200141096a2900003700000f0b200041053a0000200020012d00013a00010f0b200041063a0000200041106a200141106a290300370300200041086a200141086a2903003703000f0b2001410c6a2802002204417f4c0d01200141046a28020021010240024020040d00410121060c010b200410382206450d030b20062001200410d40b21012000410c6a2004360200200041086a2004360200200041046a2001360200200041073a00000f0b200041083a00000f0b1034000b1032000bf00403037f017e027f230041901a6b2202240020022001108c02024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020028020441d8086e2204200420034b1bad42d8087e2205422088a70d002005a72204417f4c0d000240024020040d00410821060c010b200410382206450d020b2001200128020441016a220736020420024100360210200220063602082002200441d8086e36020c200720012802084b0d02024002402003450d00200241b8116a41f0006a2107410021040340200241b8116a2001109009200241d0106a200241b8116a41e80010d40b1a20022903a0122105200241e8086a200741e80710d40b1a20054203510d0220024180086a200241d0106a41e80010d40b1a200241186a200241e8086a41e80710d40b1a02402004200228020c470d00200241086a200410b10920022802082106200228021021040b2006200441d8086c6a20024180086a41e80010d40b22042005370368200441f0006a200241186a41e80710d40b1a2002200228021041016a22043602102003417f6a22030d000b200128020421070b2000200229030837020020012007417f6a360204200041086a200241086a41086a2802003602000c050b20004100360200200228020821062004450d03200441d8086c210120062103034002402003220441e8006a2903004202510d0020042d00004102470d00200441086a280200450d00200441046a28020010390b200441d8086a210320044198016a109602200141a8776a22010d000c040b0b1034000b1032000b200041003602000b200228020c2204450d00200441d8086c450d00200610390b200241901a6a24000bf10701167f230041f0006b2202240020022001108c02024002402002280200450d00200041003602000c010b024002400240024020022802042203200128020022042802044105762205200520034b1b22054105742206417f4c0d004101210702402005450d00200610382207450d020b20012001280204220841016a2206360204200241003602102002200536020c20022007360208200620012802084b0d02024002402003450d00200241c8006a4104722109200241e1006a210a200241da006a210b200241d3006a210c4100210d4100210e0340200e41016a210e2004280204210f417f21104100210502400340200f20052206460d01200428020022052d000021112004200f20106a3602042004200541016a360200200920066a20113a00002002200641016a22053602482010417f6a211020054120470d000b200241c0006a41026a200c41026a2d00003a00002002413c6a41026a200b41026a2d00003a0000200220092f01003b01442002200c2f00003b01402002200b2f00003b013c2002200941026a2d00003a0046200228004f211220022801562113200228005d21142002280264211520022802682116200241386a41026a200a41026a2d00003a00002002200a2f00003b01380b200241346a41026a220520022d00463a0000200241306a41026a2210200241c0006a41026a2d00003a00002002412c6a41026a22112002413c6a41026a2d00003a0000200241286a41026a2217200241386a41026a2d00003a0000200220022f01443b0134200220022f01403b0130200220022f013c3b012c200220022f01383b0128200f2006460d02200241246a41026a220620052d00003a0000200241206a41026a220f20102d00003a00002002411c6a41026a221020112d00003a0000200241186a41026a221120172d00003a0000200220022f01343b0124200220022f01303b0120200220022f012c3b011c200220022f01283b01180240200d200228020c470d00200241086a200d4101109e02200228020821072002280210210d0b2007200d4105746a220520022f01243b0000200541026a20062d00003a0000200541096a200f2d00003a0000200520022f01203b0007200541106a20102d00003a0000200520022f011c3b000e200520123600032005201336000a20052014360011200541176a20112d00003a0000200520022f01183b00152005201636001c200520153600182002200d41016a220d360210200e2003470d000b0b2001200836020420002002290308370200200041086a200241086a41086a2802003602000c050b20004100360200200228020c21050c030b1034000b1032000b200041003602000b200541ffffff3f71450d00200228020810390b200241f0006a24000bb20101057f0240200041046a280200200041086a220228020022036b200141046a2802002204200128020022056b22064f0d002000200320061077200228020021030b0240024020052004470d00200321060c010b2001200541016a3602002004417f6a21022004200320056b6a2106200028020020036a21040340200420052d00003a000020022005460d012001200541026a360200200541016a2105200441016a21040c000b0b200041086a20063602000bee0305077f017e017f017e067f230041206b210302400240200128020020012800052204470d0020012d0004200141096a2d0000460d010b200141046a22052005310000a7220641016a22072007410771200641074922081b2209ad220a3c000020012001280200220b4100200741037620081b6a2207ad220c3e0200200a422086200c84210a200128020c2208410574210d200b2d0000200641077176410171ad422886210c2002280200210e200141096a2d000041ff0171210f200341186a2110200341106a2111200341086a2112024003400240200c500d00200e28020820084b0d02201042003703002011420037030020124200370300200342003703000b2001200841016a220836020c024020072004470d00200941ff0171200f460d030b2005200a4280808080f01f83422088a7220641016a22072007410771200641074922021b2209ad220c3c00002001200aa7220b4100200741037620021b6a2207ad220a3e0200200c422086200a84210a200d41206a210d200b2d0000200641077176410171ad422886210c0c000b0b2001200841016a36020c2000200e280200200d6a2206290000370001200041096a200641086a290000370000200041116a200641106a290000370000200041196a200641186a290000370000200041013a00000f0b200041003a00000b130020004100360204200041b8c0cd003602000bb30c03067f017e0a7f230041d0016b22022400024002402000410c6a2802002203450d0020002003417f6a220336020c2000280204200341246c6a22032d000022044106460d00200241e0006a41206a200341206a280000360000200241e0006a41196a200341196a290000370000200241e0006a41116a200341116a290000370000200241e0006a41096a200341096a29000037000020022003290001370061200220043a0060024020044103470d0041032104200241e0006a41017228000041c28289aa04470d00200241f0006a2802002105200241e8006a280200210620024188016a4104722107410021030240034020052003460d01200720036a200620036a2d00003a00002002200341016a22043602880120042103200441c000470d000b200241d8006a41026a220320024195016a2d00003a0000200220022f018c013b015c200220022d008e013a005e200220024193016a2f00003b0158200241c0016a2802002104200241c4016a2902002108200241b9016a2800002105200241b2016a2801002106200241ab016a2800002107200241a4016a28020021092002419d016a280000210a20024196016a280100210b200228008f01210c200241d4006a41026a220d2002419c016a2d00003a0000200241d0006a41026a220e200241a3016a2d00003a0000200241cc006a41026a220f200241aa016a2d00003a0000200241c8006a41026a2210200241b1016a2d00003a0000200241c4006a41026a2211200241b8016a2d00003a000020022002419a016a2f01003b01542002200241a1016a2f00003b0150200220024188016a41206a2f01003b014c2002200241af016a2f00003b01482002200241b6016a2f01003b0144200241c0006a41026a2212200241bf016a2d00003a0000200241096a20032d00003a0000200241106a200d2d00003a00002002200241bd016a2f00003b01402002200c3600032002200b36010a200220022d005e3a0002200220022f015c3b0100200220022f01583b0007200220022f01543b010e2002200a360011200241176a200e2d00003a0000200220022f01503b0015200220093602182002411e6a200f2d00003a0000200220022f014c3b011c2002200736001f200241256a20102d00003a0000200220022f01483b0023200220063601262002412c6a20112d00003a0000200220022f01443b012a2002200536002d200241336a20122d00003a0000200220022f01403b003120022008370338200220043602340240024002400240024020022d00600e050400010204030b200241ec006a280200450d03200228026810390c030b200241ec006a280200450d02200228026810390c020b200241ec006a280200450d01200228026810390c010b2002280268450d00200228026410390b20024188016a200010df04200220024188016a4120200110c401450d02200028020421010240200028020c2203450d00200341246c21042001210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032004415c6a22040d000b0b41012103200041086a2802002204450d03200441246c450d03200110390c030b20022d006021040b0240024002400240200441ff01710e050400010204030b200241ec006a280200450d03200241e8006a28020010390c030b200241ec006a280200450d02200241e8006a28020010390c020b200241ec006a280200450d01200241e8006a28020010390c010b200241e8006a280200450d00200228026410390b200028020421010240200028020c2203450d00200341246c21042001210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032004415c6a22040d000b0b41002103200041086a2802002204450d00200441246c450d00200110390b200241d0016a240020030b130020004118360204200041f4a0c7003602000bb80302027f017e230041c0016b22042400200441206a4200370300200441086a41106a22054200370300200441106a420037030020044200370308200441086a41c7e5c000410610cb01200541a880c400411010cb012004200441086a412010ce0302400240417f2004280204410020042802001b220520036a220320032005491b418080c002418080f001200241ff017122031b4b0d00200441086a10b803024002400240024020030e03010200010b20044188016a21030c020b200441186a21030c010b200441d0006a21030b0240024020032903084201520d00200341106a2903002001540d010b42002106024002400240200241ff01710e03000102000b200121060c010b427f200142ffffffffffffffffbf7f7c220620062001541b21060b200041003a00002000411c6a4200370200200041186a41002802d8974e2202360200200041306a41013a0000200041286a4200370200200041246a2002360200200041106a427f370300200041086a20063703000c020b200041800c3b0001200041013a0000200041036a41003a00000c010b200041800c3b0001200041013a0000200041036a41003a00000b200441c0016a24000b130020004104360204200041b0b6c7003602000b130020004103360204200041f8bfc7003602000b3400200041cde5c00036020420004100360200200041146a4110360200200041106a4180c7c700360200200041086a42043702000b130020004102360204200041acecc7003602000b2d01017f02404108103822020d001032000b20002002360200200242f02e3700002000428880808080013702040b2d01017f02404108103822020d001032000b20002002360200200242d8043700002000428880808080013702040b893003137f017e0c7f230041d0006b22022400024002402001280208220320036a22042003490d00200128020021050240024020040d00410221060c010b200410382206450d020b2005200341226c6a21074100210820024100360208200220063602002002200441017622043602040240200420034f0d002002200310b90920022802002106200228020821080b024020052007460d00200341226c2104200541206a2103200620084101746a21060340200620032f01003b0100200341226a2103200841016a2108200641026a21062004415e6a22040d000b200228020021060b20022008360208200841ffffffff03712008470d0020084102742203417f4c0d000240024020030d00410421040c010b200310382204450d020b410021092002410036021820022004360210200220034102762203360214024002400240200320084f0d00200241106a4100200810ab0120022802182109200228021021040c010b2008450d010b20084101742108200420094102746a21030340200320062f0100360200200941016a2109200341046a2103200641026a21062008417e6a22080d000b200228021021040b200220093602180240024002400240024002402009450d002004200941027422086a210541002106200421030340200620032802006a220a2006490d02200341046a2103200a21062008417c6a22080d000b024041ffff03200a200a41ffff034922061b200a41ffff0320061b6b220b0d00200941ffffffff03712009470d0720094102742206417f4c0d07200610382207450d08200220072004200941027410d40b3602242006410276210c0c050b200b200970210d200b20096e210e200941ffffffff01712009470d0620094103742203417f4c0d06200310382206450d074100210c20024100360238200220063602302002200341037622033602340240200320094f0d00200241306a200910be092002280238210c200228023021060b2006200c4103746a21062009410274417c6a220f410276211041002103200c2111034020062004280200360204200620032208360200200841016a21032011220741016a2111200641086a2106200441046a22042005470d000b2002201136023820022802302112024002400240201141144b0d00201141014d0d06200f41027620086b21042012200c20106a22084103746a210c201220074103746a21132008417f6a20114d2114034020082206417f6a21082014450d030240201120086b22104102490d00201220064103746a220641046a280200201220084103746a220341046a2802004f0d002003290200211520032006290200370200024020104103490d002015422088a721072004417f6a210f41002103200c210603402006410c6a28020020074f0d01200f2003460d052006200641086a22052902003702002005210620042003417f6a2203470d000b201321060b200620153702000b2004417f6a2104200c41786a210c20080d000c070b0b2011410176220641ffffffff01712006470d0820064103742216417f4c0d08201610382217450d092002420037024441002110200241002802d8974e2218360240201241786a21192012416c6a211a2011211b0340201b21074100211b4101210502402007417f6a2206450d000240024002400240024002400240201220064103746a41046a2802002007410374221420126a41746a2802002203490d002007417e6a210c201a20146a21084100211b4100210603400240200c2006470d00200721050c090b200641016a21062003200828020022044f2105200841786a21082004210320050d000b200641016a21052006417f7320076a21060c010b201a20146a210802400340024020064101470d00410021060c020b2006417f6a2106200320082802002204492105200841786a21082004210320050d000b0b20072006490d01200720114b0d02200720066b22054101762204450d00201220064103746a2103201920146a21080340200329020021152003200829020037020020082015370200200341086a2103200841786a21082004417f6a22040d000b0b024020060d002006211b0c060b0240200541094d0d002006211b0c060b200720114b0d03200720066b2108201220064103746a210f201920146a2113034020072006417f6a221b490d0502402007201b6b22054102490d00201220064103746a220641046a2802002012201b4103746a220341046a2802004f0d002003290200211520032006290200370200024020054103490d002015422088a7210c2008417f6a211441002103200f210603402006410c6a280200200c4f0d0120082003460d062006200641086a2204290200370200200421062014200341016a2203470d000b201321060b200620153702000b201b450d06200841016a2108200f41786a210f201b21062005410a4f0d060c000b0b2006200741c4bac3001055000b2007201141c4bac300104b000b200341016a200541a4bbc300103c000b20072006417f6a221b490d002007201141d4bac300104b000b201b200741d4bac3001055000b0240024020102002280244460d00201021060c010b0240201020022802482206470d00200241c0006a201010b101200228024821060b200228024021180b201820064103746a220620053602042006201b3602002002200228024841016a221c36024802400240201c41024f0d00201c21100c010b200228024021180340024002400240024002402018201c2210417f6a221c4103746a2206280200450d00201041037420186a220441746a2802002208200628020422034b0d010b20104103490d022006280204210320182010417d6a22134103746a28020421060c010b201041024d0d0420182010417d6a22134103746a2802042206200320086a4d0d00201041034d0d04200441646a280200200620086a4b0d040b20062003490d010b2010417e6a21130b02400240024002400240024002402010201341016a22064d0d00201020134d0d01201820134103746a221d280204221e201d2802006a2203201820064103746a221f2802002220490d02200320114b0d03201d41046a2121201220204103746a2204201f280204221441037422086a2106200341037421050240200320206b220720146b22032014490d0020172004200810d40b220320086a21080240201441014e0d00200321030c080b200720144a0d05200321030c070b201720062003410374220810d40b220f20086a210820144101480d0520034101480d05201920056a210303402003200641786a2207200841786a220c2008417c6a2802002006417c6a2802004922051b2902003702002008200c20051b210820042007200620051b22064f0d06200341786a21032008200f4b0d000c060b0b2006201041e4bac300103c000b2013201041f4bac300103c000b202020034184bbc3001055000b200320114184bbc300104b000b201220056a2107200321030340200420062003200641046a280200200341046a2802004922051b2902003702002003200341086a20051b2103200441086a2104200641086a200620051b220620074f0d02200320084f0d020c000b0b200f2103200621040b20042003200820036b41787110d40b1a2021201e20146a360200201d2020360200201f201f41086a201020136b41037441706a10d50b1a2002201c36024841012110201c41014b0d000b0b201b450d050c000b0b410120036b201041a4bbc300103c000b2008201141b4bac3001054000b4100210941002802d8974e21074100210c0c030b0240200228021441ffffffff0371450d00200228021010390b411e210741a880c80021060c030b0240200228024441ffffffff0171450d00200228024010390b2016450d00201710390b0240024002400240024002400240024002400240024002400240024002400240200a41feff034b0d0041ffff0320096e21054100210602402009200b4b0d00410021062002280238210c200921080340200c20064d0d0e200228023020064103746a22072802042204200e6a22032004490d0d200741046a2003360200024020032005490d00200641016a20097021060b2008417f6a22080d000b0b200d0d01200228023821122002280230211f0c040b20022802382212450d0c2009417f6a21042002280230221f280204210c2009200b4d0d01200421060c020b200228023821120340201220064d0d092002280230221f20064103746a2204280204220841016a22032008490d08200441046a2003360200024020032005490d00200641016a20097021060b200d417f6a220d0d000c030b0b200421060340201220064d0d06201f20064103746a220341046a2105024020032802042203200e6b220820034d0d0041002003200e6b2208200820034b1b2108200e20036b200d6a210d0b200520083602002002280238221220064d0d05200620042006417f6a2203200320064b1b2008200c4b1b21062009417f6a22090d000b0b200d450d000340201220064d0d0302400240201f200641037422076a22082802042203417f6a220520034d0d0020042006417f6a2203200320064b1b21060c010b200841046a20053602002002280238221220064d0d03200620042006417f6a2203200320064b1b2002280230221f20076a280204200c4b1b2106200d417f6a210d0b200d0d000b0b024002400240201241144b0d00201241014b2214450d0d41002105201f2012417f6a22044103746a22132107034020042206417f6a21042014450d030240201220046b22104102490d00201f20064103746a2206280200201f20044103746a22032802004f0d002003290200211520032006290200370200024020104103490d002015a7210c2005417f6a210f41002103200721060340200641086a2208280200200c4f0d01200f2003460d05200620082902003702002008210620052003417f6a2203470d000b201321060b200620153702000b2005417f6a2105200741786a210720040d000c0e0b0b2012410176220641ffffffff01712006470d0f2006410374220a417f4c0d0f200a10382211450d102002420037024441002106200241002802d8974e2213360240201f41786a211e201f41686a21212012211d02400340201d210c4100211d410121070240200c417f6a2203450d000240024002400240024002400240201f20034103746a280200200c4103742214201f6a41706a2802002208490d00200c417e6a210f202120146a21044100211d4100210303400240200f2003470d00200c21070c090b200341016a21032008200428020022054f2107200441786a21042005210820070d000b200341016a21072003417f73200c6a21030c010b202120146a210402400340024020034101470d00410021030c020b2003417f6a2103200820042802002205492107200441786a21042005210820070d000b0b200c2003490d01200c20124b0d02200c20036b22074101762205450d00201f20034103746a2108201e20146a21040340200829020021152008200429020037020020042015370200200841086a2108200441786a21042005417f6a22050d000b0b024020030d002003211d0c060b0240200741094d0d002003211d0c060b200c20124b0d03200c20036b2105201f20034103746a2110201e20146a21090340200c2003417f6a221d490d050240200c201d6b22074102490d00201f20034103746a2203280200201f201d4103746a22082802004f0d002008290200211520082003290200370200024020074103490d002015a7210f2005417f6a211441002108201021030340200341086a2204280200200f4f0d0120052008460d0620032004290200370200200421032014200841016a2208470d000b200921030b200320153702000b201d450d06200541016a2105201041786a2110201d21032007410a4f0d060c000b0b2003200c41c4bac3001055000b200c201241c4bac300104b000b200841016a200741a4bbc300103c000b200c2003417f6a221d490d00200c201241d4bac300104b000b201d200c41d4bac3001055000b0240024020062002280244460d00200621030c010b0240200620022802482203470d00200241c0006a200610b101200228024821030b200228024021130b201320034103746a220620073602042006201d3602002002200228024841016a22063602480240024020064102490d002002280240211303400240024002400240024020132006417f6a4103746a2203280200450d00200641037420136a220541746a2802002204200328020422084b0d010b20064103490d022003280204210820132006417d6a22104103746a28020421030c010b200641024d0d0420132006417d6a22104103746a2802042203200820046a4d0d00200641034d0d04200541646a280200200320046a4b0d040b20032008490d010b2006417e6a21100b02400240024002402006201041016a22204d0d000240200620104d0d000240201320104103746a2218280204221b20182802006a2203201320204103746a221c2802002209490d000240200320124b0d00201f20094103746a2204201c280204221441037422086a2106200341037421050240200320096b220720146b22032014490d0020112004200810d40b220320086a21080240201441014e0d00200321030c080b200720144a0d05200321030c070b201120062003410374220810d40b220f20086a210820144101480d0520034101480d05201e20056a210303402003200641786a2205200841786a22072007280200200528020049220c1b29020037020020082007200c1b2108200420052006200c1b22064f0d06200341786a21032008200f4b0d000c060b0b200320124184bbc300104b000b200920034184bbc3001055000b2010200641f4bac300103c000b2020200641e4bac300103c000b201f20056a2107200321030340200420062003200628020020032802004922051b2902003702002003200341086a20051b2103200441086a2104200641086a200620051b220620074f0d0220032008490d000c020b0b200f2103200621040b20042003200820036b41787110d40b1a2002280248220620104d0d0220182009360200201841046a201b20146a360200200620204d0d04201c201c41086a200620106b41037441706a10d50b1a20022006417f6a2206360248200641014b0d000b0b201d450d0e0c010b0b201020064194bbc300103c000b202020061044000b410120036b201041a4bbc300103c000b2004201241b4bac3001054000b2006201241b082c800103c000b2006201241a082c800103c000b20062012419082c800103c000b20062012418082c800103c000b41a881c800412641f081c800105b000b2006201241e081c800103c000b41a881c800412641d081c800105b000b2006200c419881c800103c000b41c680c800413f418881c800105b000b0240200228024441ffffffff0171450d00200228024010390b200a450d00201110390b2002280238220641ffffffff03712006470d0220064102742203417f4c0d0220022802342105200228023021040240024020030d00410421070c010b200310382207450d040b410021092002412c6a4100360200200241286a2003410276220336020020022007360224024002400240200320064f0d00200241206a4104724100200610ab0120022802242107200228022c21090c010b2006450d010b20064103742108200720094102746a2106200421030340200620033502043e0200200941016a2109200641046a2106200341086a2103200841786a22080d000b0b0240200541ffffffff0171450d00200410390b2002280228210c0b20094102742208410275220320036a22062003490d012006417f4c0d010240024020060d00410221050c010b200610382205450d030b200720086a21044100210820024100360228200220053602202002200641017622063602240240200620034f0d00200241206a200310b90920022802282108200228022021050b024020042007460d0020094102742104200520084101746a210620072103034020062003280200220541ffff03200541ffff03491b3b0100200841016a2108200641026a2106200341046a21032004417c6a22040d000b0b0240200c41ffffffff0371450d00200710390b200228022421072002280220210c0240200228021441ffffffff0371450d00200228021010390b02402008410174410175220620012802082203200320064b1b2206450d00410020066b2106200128020041206a2103200c21080340200320082f01003b0100200841026a2108200341226a2103200641016a220420064f21052004210620050d000b0b41002106024020070d00410021070c010b200741ffffffff0771450d00200c10390b0240200228020441808080807872418080808078460d00200228020010390b2000200736020420002006360200200241d0006a24000f0b1034000b1032000bb708040c7f047e037f017e230041e0016b22042400200128020021052001280204210602400240024020012802082207450d002005200741226c22086a21092005210703400240200741206a2f0100220a450d00200441386a2002200342ffff03420010d20b20044198016a41086a220b200741086a29010037030020044198016a41106a220c200741106a29010037030020044198016a41186a220d200741186a29010037030020042007290100370398012004280238210e024041301038220f450d00200441286a2002200342ffff03420010da0b200441186a20042903282210200441286a41086a2903002211200aad420010d30b200f200429039801370300200f41186a200d290300370300200f41106a200c290300370300200f41086a200b290300370300200f20042903182202417f200e200a6c220a41ffff036e200a41ffff7b4b1b200a41ffff037041ffff014b6aad42ffff03837c2203370320200f41286a200441186a41086a2903002003200254ad7c370300200442818080801037024c2004200f36024820084122460d04200741226a210c2009415e6a210d20044198016a41086a210a4101210b0340200c210703400240200741206a2f01002208450d00200441086a201020112008ad420010d30b200741186a2901002102200741106a290100210320072901002112200441d8006a41086a200741086a2901002213370300200441d8006a41106a2003370300200441d8006a41186a200237030020042012370358200a41186a220c2002370300200a41106a22142003370300200a41086a22152013370300200a2012370300200441f8006a41086a22162015290300370300200441f8006a41106a22152014290300370300200441f8006a41186a2214200c2903003703002004200a290300370378200441086a41086a29030020042903082202417f200e20086c220841ffff036e200841ffff7b4b1b200841ffff037041ffff014b6aad42ffff03837c2203200254ad7c21020240200b200428024c470d00200441c8006a200b410110f6032004280248210f0b200741226a210c200f200b41306c6a2208200429037837030020162903002112201529030021132014290300211720082003370320200841286a2002370300200841186a2017370300200841106a2013370300200841086a20123703002004200b41016a220b360250200d2007470d020c070b2009200741226a2207470d000c060b0b0b1032000b200741226a21072008415e6a22080d000b0b20004200370204200041002802e8c8483602002006450d01200641226c450d01200510390c010b02402006450d00200641226c450d00200510390b20002004290348370200200041086a200441c8006a41086a2802003602000b2000200129020c37020c200041246a200141246a2902003702002000411c6a2001411c6a290200370200200041146a200141146a290200370200200441e0016a24000bebac0102467f0a7e230041c0076b220124000240024002400240200041086a22022802002203450d00200141f0016a41c0006a2104200141d0066a41c0006a2105200141b0036a41c0006a210641002802e8c8482107200141f0056a41c0006a21084100280284ee4d210941002802d8974e210a200141d0066a41206a210b200141306a41206a210c200141106a210d200141186a210e4100210f41002110410021110340024002402002280200221220114d0d00200141086a221320002802002011412c6c22146a221241146a290000370300200d2012411c6a290000370300200e201241246a2900003703002001201229000c3703002012280208221541ffffff3f712015470d0520154105742216417f4c0d05201228020021120240024020160d00410121170c010b201610382217450d050b2012201541306c22186a21194100211a20014100360228200120173602202001201641057622163602240240201620154f0d00200141206a41002015109e02200128022021172001280228211a0b024020122019460d002017201a4105746a2115034020152012290000370000201541186a201241186a290000370000201541106a201241106a290000370000201541086a201241086a290000370000201a41016a211a201541206a2115201241306a2112201841506a22180d000b0b2001201a360228410021184100211b2009211c0240201a4102490d00201a417f6a201a6c410176221241ffffff1f712012470d0620124106742212417f4c0d064101211d4101211c02402012450d0020121038221c450d060b41002118200141003602f8052001201c3602f005200120124106763602f405201741206a211e4100211f03400240201f221241016a221f201a4f0d00024002402012201a4f0d00201a201d201a201d4b1b2120201720124105746a2119201f201a201f201a4b1b2121201e2115201f2116034020202016460d02201641016a2116200b2015290000370000200b41186a201541186a290000370000200b41106a201541106a290000370000200b41086a201541086a290000370000200141d0066a41086a2222201941086a290000370300200141d0066a41106a2223201941106a290000370300200141d0066a41186a2224201941186a290000370300200120192900003703d0060240201820012802f405470d00200141f0056a201810b30920012802f005211c20012802f80521180b201c20184106746a221220012903d006370000201241386a200141d0066a41386a290300370000201241306a200141d0066a41306a290300370000201241286a200141d0066a41286a290300370000201241206a200b290300370000201241186a2024290300370000201241106a2023290300370000201241086a20222903003700002001201841016a22183602f805201541206a2115201a2016460d030c000b0b2012201a41e0dacc00103c000b2021201a41f0dacc00103c000b201d41016a211d201e41206a211e201f201a470d000b20012802f405211b0b2018450d01201c20184106746a2125201c211f0340200141306a41386a201f41386a290000370300200141306a41306a201f41306a290000370300200141306a41286a201f41286a290000370300200c201f41206a290000370300200141306a41186a201f41186a2212290000370300200141306a41106a201f41106a2215290000370300200141306a41086a201f41086a22182900003703002001201f290000370330200141f0006a41186a22162012290000370300200141f0006a41106a22122015290000370300200141f0006a41086a221520182900003703002001201f29000037037020014190016a41186a200c41186a221829000037030020014190016a41106a200c41106a221929000037030020014190016a41086a200c41086a22222900003703002001200c29000037039001200141d0066a41186a221e2016290300370300200141d0066a41106a22172012290300370300200141d0066a41086a22212015290300370300200b200c290000370000200b41086a2022290000370000200b41106a2019290000370000200b41186a2018290000370000200120012903703703d006024020100d0041a80810382210450d0641002126201041003b0106201041003602000b201f41c0006a211f201021232026211a0340202341086a211d20232f0106222041067421244100211241a808211641c805211841002115034002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020242012460d0002400240200141d0066a202320126a222241086a412010d70b2219450d002019417f4c0d010c190b200b202241286a412010d70b2219450d02201941004e0d180b201521200b201a450d01201a417f6a211a202320204102746a41a8086a28020021230c180b2002280200222720114d0d062000280200222420146a221d28020841306c2219450d12202320186a2120201d41086a2128201d2802002112410021180340024002402012200141f0006a412010d70b0d00410121220c010b201220014190016a412010d70b4521220b201241306a2112202220186a2118201941506a22190d000b20184102470d122027412c6c2112202441546a211803402012450d13201241546a21122018412c6a21182024410c6a21192024412c6a212420192020412010d70b0d000b0240201841086a2802002212450d0020182802002119201241306c2122410021120340201920126a2218200141f0006a412010d70b450d03201820014190016a412010d70b450d032022201241306a2212470d000b0b41002127200721240c020b200141b0016a41386a2212200141d0066a41386a221a290300370300200141b0016a41306a2218200141d0066a41306a2227290300370300200141b0016a41286a2216200141d0066a41286a2228290300370300200141b0016a41206a2219200b290300370300200141b0016a41186a2222201e290300370300200141b0016a41106a22242017290300370300200141b0016a41086a22292021290300370300200120012903d0063703b001200141d0026a41386a222a2012290300370300200141d0026a41306a222b2018290300370300200141d0026a41286a222c2016290300370300200141d0026a41206a222d2019290300370300200141d0026a41186a222e2022290300370300200141d0026a41106a222f2024290300370300200141d0026a41086a22302029290300370300200120012903b0013703d00220014190036a41186a2231200e29030037030020014190036a41106a2232200d29030037030020014190036a41086a223320132903003703002001200129030037039003024020232f01062215410a4b0d00201a20122903003703002027201829030037030020282016290300370300200b2019290300370300201e20222903003703002017202429030037030020212029290300370300200120012903b0013703d006202041016a21180240202020154f22160d00201d20184106746a201d20204106746a201520206b41067410d50b1a0b201d20204106746a221220012903d006370000201241386a201a290300370000201241306a2027290300370000201241286a2028290300370000201241206a200b290300370000201241186a201e290300370000201241106a2017290300370000201241086a2021290300370000200141d0056a41186a2219200e290300370300200141d0056a41106a2222200d290300370300200141d0056a41086a22242013290300370300200120012903003703d005202341c8056a2112024020160d00201220184105746a201220204105746a201520206b41057410d50b1a0b201220204105746a221220012903d005370000201241186a2019290300370000201241106a2022290300370000201241086a20242903003700002023201541016a3b0106200f41016a210f0c120b410021224104211502400240202041054f0d00202021160c010b4105211541052116024002402020417b6a0e020201000b202041796a211641012122410621150c010b41002116410121220b41a80810382218450d1c201841003b010620184100360200201820232f010622242015417f736a22193b0106200141f0056a41386a2234201d20154106746a221241386a290000370300200141f0056a41306a2235201241306a290000370300200141f0056a41286a2236201241286a290000370300200141f0056a41206a2237201241206a290000370300200141f0056a41186a2238201241186a290000370300200141f0056a41106a2239201241106a290000370300200141f0056a41086a223a201241086a290000370300200120122900003703f005200141d0056a41186a2220202341c8056a223b20154105746a221241186a290000370300200141d0056a41106a2229201241106a290000370300200141d0056a41086a223c201241086a290000370300200120122900003703d0052019410c4f0d062024201541016a22126b2019470d07201841086a201d20124106746a201941067410d40b1a201841c8056a203b20124105746a201941057410d40b1a202320153b0106201a20342903003703002027203529030037030020282036290300370300200b2037290300370300201e2038290300370300201720392903003703002021203a290300370300200520012903d005370000200541086a223d203c290300370000200541106a223e2029290300370000200541186a223f2020290300370000200120012903f0053703d006200141f0056a200141d0066a41e00010d40b1a2018202320221b22152f01062119201a202a2903003703002027202b2903003703002028202c290300370300200b202d290300370300201e202e2903003703002017202f29030037030020212030290300370300200120012903d0023703d006201541086a21120240201641016a222220194b22240d00201220224106746a201220164106746a201920166b41067410d50b1a0b201220164106746a221220012903d006370000201241386a201a290300370000201241306a2027290300370000201241286a2028290300370000201241206a200b290300370000201241186a201e290300370000201241106a2017290300370000201241086a20212903003700002020203129030037030020292032290300370300203c203329030037030020012001290390033703d005201541c8056a2112024020240d00201220224105746a201220164105746a201920166b41057410d50b1a0b201220164105746a221220012903d005370000201241186a2020290300370000201241106a2029290300370000201241086a203c2903003700002015201941016a3b010620014190046a200141f0056a41e00010d40b1a200141b0036a20014190046a41e00010d40b1a0240202328020022120d004100211d0c100b4100211d2018212a034020232f01042119200141f0046a41386a222b200141b0036a41386a2215290300370300200141f0046a41306a222c200141b0036a41306a2218290300370300200141f0046a41286a222d200141b0036a41286a2216290300370300200141f0046a41206a222e200141b0036a41206a2222290300370300200141f0046a41186a222f200141b0036a41186a2240290300370300200141f0046a41106a2230200141b0036a41106a2241290300370300200141f0046a41086a2231200141b0036a41086a2242290300370300200120012903b0033703f004200141b0056a41186a2232200641186a2243290000370300200141b0056a41106a2233200641106a2244290000370300200141b0056a41086a223b200641086a2245290000370300200120062900003703b0050240201222242f01062223410a4b0d00201a20152903003703002027201829030037030020282016290300370300200b2022290300370300201e20402903003703002017204129030037030020212042290300370300200120012903b0033703d006202441086a21120240202320194d22180d00201220194106746a221541c0006a2015202320196b41067410d50b1a0b201220194106746a221220012903d006370000201241386a201a290300370000201241306a2027290300370000201241286a2028290300370000201241206a200b290300370000201241186a201e290300370000201241106a2017290300370000201241086a2021290300370000201e20432902003703002017204429020037030020212045290200370300200120062902003703d006201941016a2112202441c8056a2115024020180d00201520124105746a201520194105746a202320196b41057410d50b1a0b202341016a2116201520194105746a221520012903d006370000201541186a201e290300370000201541106a2017290300370000201541086a2021290300370000202441a8086a2115202341026a2122024020180d00201941027420156a41086a201520124102746a202320196b41027410d50b1a0b202420163b0106201520124102746a202a3602000240201220224f0d0020242012417f6a22124102746a41ac086a2115034020152802002218201241016a22123b010420182024360200201541046a211520162012470d000b0b410021122019211d204621180c120b4100212241042116024020194105490d0020192116024002402019417b6a0e020201000b201941796a211941012122410621160c010b4100211941012122410521160b41d80810382218450d1d201841003b010620184100360200201820242f010622402016417f736a22153b01062034202441086a224120164106746a221241386a2900003703002035201241306a2900003703002036201241286a2900003703002037201241206a2900003703002038201241186a2900003703002039201241106a290000370300203a201241086a290000370300200120122900003703f0052020202441c8056a224220164105746a221241186a2900003703002029201241106a290000370300203c201241086a290000370300200120122900003703d0052015410c4f0d092040201641016a22126b2015470d0a201841086a204120124106746a201541067410d40b1a201841c8056a204220124105746a201541057410d40b1a202420163b01062021203a29030037030020172039290300370300201e2038290300370300200b20372903003703002028203629030037030020272035290300370300201a2034290300370300200520012903d005370000203d203c290300370000203e2029290300370000203f2020290300370000200120012903f0053703d00620182f0106221541016a21402015410c4f0d0b202320166b22162040470d0c201d41016a211d201841a8086a202420124102746a41a8086a201641027410d40b1a4100211202400340201820124102746a41a8086a280200221620123b010420162018360200201220154f0d01201220122015496a221220154d0d000b0b200141f0056a200141d0066a41e00010d40b1a2018202420221b22162f01062115201a202b2903003703002027202c2903003703002028202d290300370300200b202e290300370300201e202f2903003703002017203029030037030020212031290300370300200120012903f0043703d006201641086a21120240201941016a222320154b22220d00201220234106746a201220194106746a201520196b41067410d50b1a0b201220194106746a221220012903d006370000201241386a201a290300370000201241306a2027290300370000201241286a2028290300370000201241206a200b290300370000201241186a201e290300370000201241106a2017290300370000201241086a2021290300370000201e2032290300370300201720332903003703002021203b290300370300200120012903b0053703d006201641c8056a2112024020220d00201220234105746a201220194105746a201520196b41057410d50b1a0b201541016a2122201220194105746a221220012903d006370000201241186a201e290300370000201241106a2017290300370000201241086a2021290300370000201641a8086a21120240201941026a222c201541026a222b4f0d002012202c4102746a201220234102746a201520196b41027410d50b1a0b201220234102746a202a360200201620223b010602402023202b4f0d00201620194102746a41ac086a2112034020122802002215201941016a22193b010420152016360200201241046a211220222019470d000b0b20014190046a200141f0056a41e00010d40b1a200141b0036a20014190046a41e00010d40b1a202421232018212a20242802002212450d100c000b0b201e201841186a2903003703002017201841106a2903003703002021201841086a290300370300200120182903003703d006201841286a2903002147201841206a2903002148413010382224450d1b20242048370320202420012903d006370300202441286a2047370300202441186a201e290300370300202441106a2017290300370300202441086a202129030037030020014281808080103702f405200120243602f0050240202241506a2012470d0020012802f40521270c010b201841306a2127201920226a221841506a2129410121220340202721120240024003402012200141f0006a412010d70b450d01201220014190016a412010d70b450d012018201241306a2212470d000c020b0b201241286a2903002147201241206a2903002148201241086a2903002149201241106a290300214a2012290300214b201e201241186a2903003703002017204a370300202120493703002001204b3703d0060240202220012802f405470d00200141f0056a2022410110f60320012802f00521240b201241306a21272024202241306c6a221920012903d006370300202129030021492017290300214a201e290300214b20192048370320201941286a2047370300201941186a204b370300201941106a204a370300201941086a20493703002001202241016a22223602f80520292012470d010b0b20012802f4052127202241014b0d010b20202001290300370000202041186a200e290300370000202041106a200d290300370000202041086a20132903003700000c010b0240024020224102470d0041e00010382229450d1b200142023702d402200120293602d002202828020041306c2222450d01201d2802002112410021190340024002402012200141f0006a412010d70b450d00201220014190016a412010d70b0d010b201e201241186a2903003703002017201241106a2903003703002021201241086a290300370300200120122903003703d006201241286a2903002147201241206a29030021480240201920012802d402470d00200141d0026a2019410110f60320012802d002212920012802d80221190b2029201941306c6a221820012903d006370300202129030021492017290300214a201e290300214b20182048370320201841286a2047370300201841186a204b370300201841106a204a370300201841086a20493703002001201941016a22193602d8020b201241306a2112202241506a22220d000b20194102470d01024020242029412010d70b450d00200141d0066a41286a2212202441286a2218290300370300200b202441206a2219290300370300201e202441186a22222903003703002017202441106a221d2903003703002021202441086a2228290300370300200120242903003703d0062018202441d8006a223c2903003703002019202441d0006a22182903003703002022202441c8006a2219290300370300201d202441c0006a22222903003703002028202441386a221d29030037030020242024290330370300203c20122903003703002018200b2903003703002019201e29030037030020222017290300370300201d2021290300370300202420012903d0063703300b41c00141e00020241b221810382212450d1b41002119200141003602f804200120123602f0042001201841306e22183602f404024020184104410220241b22224f0d00200141f0046a4100202210f60320012802f804211920012802f00421120b202941086a2903002148202941106a2903002149202941186a290300214b2029290300214c2012201941306c6a22122029290320224a370320202941286a29030021472012204c370300201241286a2047370300201241186a204b370300201241106a2049370300201241086a2048370300202941386a2903002149202941c0006a290300214c202941c8006a290300214d2029290330214e201241d8006a202941d8006a2903002248370300201241d0006a202941d0006a290300224b370300201241c8006a204d370300201241c0006a204c370300201241386a20493703002012204e370330204b204a582048204758204820475122221b211820472048204b204a56204820475620221b22221b2149204a204b20221b214a0240024020240d00201941026a21120c010b202441086a2903002148202441106a290300214c202441186a290300214d2024290300214e201241e0006a221241286a202441286a290300224737030020122024290320224b370320201241186a204d370300201241106a204c370300201241086a20483703002012204e370300202441386a290300214d202441c0006a290300214e202441c8006a290300214f20242903302150201241d8006a202441d8006a2903002248370300201241d0006a2024290350224c370300201241c8006a204f370300201241c0006a204e370300201241386a204d3703002012205037033020492047204b204a56204720495620472049511b22121b22472048204c204a204b20121b224a56204820475620482047511b22221b2149204a204c20221b214a2018410220121b410320221b2118201941046a21120b200120123602f804200142003702f4012001200a3602f001200142003702b4032001200a3602b003200141b0036a410010990120012802b003221920012802b80322124102746a20183602002001201241016a22123602b80302400240201841014b0d00200141f0016a410010990120012802f001221d20012802f80122224102746a410120186b3602002001202241016a22223602f801410320186b21280240201220012802b403470d00200141b0036a201210990120012802b003211920012802b80321120b201920124102746a20283602002001201241016a3602b803201841026a21120240202220012802f401470d00200141f0016a202210990120012802f001211d20012802f80121220b201d20224102746a20123602000c010b200141f0016a410010990120012802f001221d20012802f80122224102746a201841017122284103733602002001202241016a22223602f801202841017321280240201220012802b403470d00200141b0036a201210990120012802b003211920012802b80321120b201920124102746a20283602002001201241016a3602b8032018417e6a21120240202220012802f401470d00200141f0016a202210990120012802f001211d20012802f80121220b201d20224102746a20123602000b200120012802f80141016a22123602f801410410382239450d1b2001420137029404200120393602900420012802f001213720012802f401213802402012450d00203720124102746a213520012802f004213620012802f8042128203721340340024002402034280200222241014b0d00201e200e2903003703002017200d29030037030020212013290300370300200120012903003703d0060c010b201e202041186a2900003703002017202041106a2900003703002021202041086a290000370300200120202900003703d0060b024020022802002212450d00200028020022292012412c6c6a213c2036202241306c6a211d034002402029410c6a200141d0066a412010d70b0d0020292802082218450d0020292802002112201841306c2118410021190340202820224d0d1102402012201d412010d70b450d00201241306a2112201941016a2119201841506a22180d010c020b0b201241206a2218427f20182903002247204a7c224820482047542218201241286a2212290300224720497c2018ad7c224820475420482047511b22181b3703002012427f204820181b3703000b2029412c6a2229203c470d000b0b203441046a22342035470d000b0b0240203841ffffffff0371450d00203710390b20012802b003212b20012802b403212c0240024020012802b80322120d00410021360c010b202b20124102746a213a4100213620012802f004212a20012802f8042128202b21380340024002402038280200222241014b0d00201e200e2903003703002017200d29030037030020212013290300370300200120012903003703d0060c010b201e202041186a2900003703002017202041106a2900003703002021202041086a290000370300200120202900003703d0060b024020022802002212450d00200028020022292012412c6c6a213c202a202241306c6a211d034002402029410c6a200141d0066a412010d70b0d00202941086a22352802002234450d0020292802002112203441306c41506a2118410021190340202820224d0d1202402012201d412010d70b450d00201241306a2112201941016a2119201841506a22184150470d010c020b0b0240201241206a22192903002248204a56201241286a2237290300224720495620472049511b0d002012201241306a201810d50b1a20352034417f6a36020002402036200128029404470d0020014190046a2036109901200128029004213920012802980421360b203920364102746a2022360200200120012802980441016a2236360298040c010b20374200204720497d2048204a54ad7d224b2048204a7d224c204856204b204756204b2047511b22121b37030020194200204c20121b3703000b2029412c6a2229203c470d000b0b203841046a2238203a470d000b0b0240202c41ffffffff0371450d00202b10390b200128029004221d417c6a211920364102742212211802400340024020180d00410021190c020b2018417c6a2118201941046a221928020041014b0d000b0b200128029404211e201d211802400240024003402012450d012012417c6a211220182802002122201841046a2118202241014d0d000b0240201e41ffffffff0371450d00201d10390b20190d0120202001290300370000202041186a200e290300370000202041106a200d290300370000202041086a20132903003700000c020b0240201e41ffffffff0371450d00201d10390b20190d0141d0dbcc00412941fcdbcc001035000b200141003a00d00502400240201a450d00202320166a28020021120240201a4101460d00410121150340201220122f01064102746a41a8086a2802002112201a201541016a2215470d000b0b20122f01062115200141003602f00520012015417f6a410020151b3602f80520012012410020151b3602f405200141d0066a200141f0056a200141d0056a10ac09200141f0056a200141d0066a41e00010d40b1a20012802b00721160240024020012802b807221820012802b40722152f01064f0d00201521120c010b03400240201528020022120d00410021120c020b201641016a211620152f0104211820122115201820122f01064f0d000b0b201220184106746a221541c0006a200141f0056a41386a290300370000201541386a200141f0056a41306a290300370000201541306a200141f0056a41286a290300370000201541286a200141f0056a41206a290300370000201541206a200141f0056a41186a290300370000201541186a200141f0056a41106a290300370000201541106a200141f0056a41086a290300370000201541086a20012903f005370000201220184105746a221541c8056a2008290000370000201541d0056a200841086a290000370000201541d8056a200841106a290000370000201541e0056a200841186a2900003700002016450d012016417f6a2215450d01201841027420126a41ac086a2802002112034020122802a80821122015417f6a22150d000c020b0b200120153602f805200120233602f405200141003602f005200141d0066a200141f0056a200141d0056a10ac090b024020012d00d005450d002026450d0f20102802a80822124100360200201010392026417f6a2126201221100b200f417f6a210f0b024020012802f4042212450d00201241306c450d0020012802f00410390b20012802d4022212450d00201241306c450d0020012802d00210390b2027450d0f202741306c0d020c0f0b20012802d4022212450d00201241306c450d00202910390b2027450d0d202741306c450d0d0b202410390c0c0b201120274180dbcc00103c000b2019410b41a485c700104b000b41b485c700412841dc85c7001035000b2015410b41a485c700104b000b41b485c700412841dc85c7001035000b2040410c41b486c700104b000b41b485c700412841dc85c7001035000b2022202841b0dbcc00103c000b2022202841c0dbcc00103c000b41f084c7004121419485c7001035000b200141f0016a200141b0036a41e00010d40b1a410121120b024020120d0020182146200f41016a210f0c010b41d80810382212450d0b201220103602a808201241003b010620124100360200201041003b0104201020123602002026201d470d0120122f01062216410b4f0d02202641016a2126201220164106746a221541086a20012902f001370000201541106a200141f0016a41086a290200370000201541186a200141f0016a41106a290200370000201541206a200141f0016a41186a290200370000201541286a200141f0016a41206a290200370000201541306a200141f0016a41286a290200370000201541386a200141f0016a41306a290200370000201541c0006a200141f0016a41386a2902003700002012201641016a22193b0106201220164105746a221541c8056a2004290000370000201541d0056a200441086a290000370000201541d8056a200441106a290000370000201541e0056a200441186a290000370000201241a8086a20194102746a2018360200201820193b0104201820123602002018214620122110200f41016a210f0b201f2025470d050c070b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b201541016a2115201841206a2118201641046a2116201241c0006a21120c000b0b0b0b2011201241d0dacc00103c000b0240201b41ffffff1f71450d00201c10390b201141016a21110240200128022441ffffff3f71450d00200128022010390b20112003470d000b2010450d0002402026450d00034020102802a80821102026417f6a22260d000b0b0240200f450d00410021180340200f417f6a210f024002400240201820102f0106490d0041002115034041002112024020102802002219450d00201541016a211620102f01042118201921120b024041d80841a80820151b450d00201010390b024020120d00410021100c040b2016211520122110201820122f01064f0d000b20160d01201221100b201841016a21180c010b201841027420126a41ac086a280200211002402016417f6a2212450d00034020102802a80821102012417f6a22120d000b0b410021180b200f0d000b0b41002112034020102802002115024041d80841a80820121b450d00201010390b2012417f6a21122015211020150d000b0b200142003702d4052002280200220e450d02200141d0066a410472211741002802d8974e2144200141b0016a41086a212f200141b0016a41106a2130200141b0016a41186a2131200e21204100212a024003402020202a4d0d01202a41016a210d202f2000280200221a202a412c6c22426a221241146a29000037030020302012411c6a2900003703002031201241246a2900003703002001201229000c3703b0014100213903400240201a20426a221228020820394b0d00200d212a200d200e470d0220012802d4052212450d06024020012802d0052215450d00034020122802a00321122015417f6a22150d000b0b024020012802d8052223450d004100211603400240024002400240201620122f0132490d0041002118034041002115024020122802002222450d00201841016a211920122f01302116202221150b024041d00341a00320181b450d00201210390b2015450d042019211820152112201620152f01324f0d000b2015201641216c6a41346a2122201520164102746a221241046a2802002118024020190d00201521120c020b201241a4036a280200211202402019417f6a2215450d00034020122802a00321122015417f6a22150d000b0b410021160c020b2012201641216c6a41346a2122201220164102746a41046a28020021180b201641016a21160b200141d0066a41186a202241186a290000370300200141d0066a41106a202241106a290000370300200141d0066a41086a202241086a290000370300200120222900003703d0060b2023417f6a212320182018280200417f6a2215360200024020150d002018410c6a10e207201841046a22152015280200417f6a221536020020150d00201810390b20230d000b0b41002115034020122802002118024041d00341a00320151b450d00201210390b2015417f6a21152018211220180d000c070b0b200141186a2012280200203941306c6a221241186a2218290000370300200141106a201241106a2216290000370300200141086a201241086a221929000037030020012012290000370300200141b0036a41186a22232031290300370300200141b0036a41106a220b2030290300370300200141b0036a41086a2224202f290300370300200120012903b0013703b003200141003a00d00320014190046a41186a2215201829000037030020014190046a41106a2218201629000037030020014190046a41086a221620192900003703002001201229000037039004200141013a00b004200141d0056a200141b0036a10c40a2119200141d0056a20014190046a10c40a2122200141f0056a41186a22342031290300370300200141f0056a41106a22352030290300370300200141f0056a41086a2236202f290300370300200120012903b0013703f005200141003a009006200141d0066a200141d0056a200141f0056a10c70a0240024020012802d0064101460d00200141f0056a41306a201741306a280200360200200141f0056a41286a201741286a290200370300200141f0056a41206a201741206a2902003703002034201741186a2902003703002035201741106a2902003703002036201741086a290200370300200120172902003703f005413410382212450d0520124200370208201220012903b0033700102012428180808010370200201241186a2024290300370000201241206a200b290300370000201241286a2023290300370000201241306a200141b0036a41206a2d00003a0000200141f0056a201210bb0721120c010b20012802d80620012802dc064102746a41046a21120b0240024002400240024002400240024002400240024002402012280200221e28020041016a221241014d0d00201e201236020020342015290300370300203520182903003703002036201629030037030020012001290390043703f005200141013a009006200141d0066a200141d0056a200141f0056a10c70a0240024020012802d0064101460d00200141f0056a41306a201741306a280200360200200141f0056a41286a201741286a290200370300200141f0056a41206a201741206a2902003703002034201741186a2902003703002035201741106a2902003703002036201741086a290200370300200120172902003703f005413410382212450d112012420037020820122001290390043700102012428180808010370200201241186a2016290300370000201241206a2018290300370000201241286a2015290300370000201241306a20014190046a41206a2d00003a0000200141f0056a201210bb0721120c010b20012802d80620012802dc064102746a41046a21120b2012280200221d280200221541016a221241014d0d00201d20123602000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020190d0020220d01201e28020041016a221241014d0d1a201e2012360200201d2802080d09201d417f3602080240201d28020c2212450d0020122012280200417f6a221536020020150d002012410c6a10e207201241046a22152015280200417f6a221536020020150d00201210390b201d201e36020c201d201d28020841016a3602080c240b2022450d01200141d0066a201e10e10720012802dc06213b20012802d806213e20012802d406213a20012802d006212e200141d0066a201d10e10720012802dc06214020012802d806213f20012802d406212b202e20012802d0062232460d04202e28020841016a221241004c0d06202e20123602082032280208221241016a221541004c0d0720322015360208202e41106a203241106a412010d70b2115202e2d003021182032201236020820322d00302112202e202e280208417f6a360208024020150d00201841ff0171201241ff0171460d050b203fad422086202bad842149203ead422086203aad842147203b20404b0d0220472148203b2112204921472040213b0c030b2015417e4f0d18201d201541026a360200201e2802080d08201e417f3602080240201e28020c2212450d0020122012280200417f6a221536020020150d002012410c6a10e207201241046a22152015280200417f6a221536020020150d00201210390b201e201d36020c201e201e28020841016a3602080c220b201e28020041016a221241014d0d17201e2012360200201d2802080d08201d417f3602080240201d28020c2212450d0020122012280200417f6a221536020020150d002012410c6a10e207201241046a22152015280200417f6a221536020020150d00201210390b201d201e36020c201d201d28020841016a3602080c210b20492148204021120b2048a72122024020124102742218450d00202220186a2124410121154100212320222116202221190340024020234101710d00202420166b4102762015417f6a4d0d02201620154102746a21160b20162024460d012019280200222328020041016a221541014d0d1720232015360200201628020022152802080d09201941046a21192015417f3602080240201528020c220b450d00200b200b280200417f6a221a360200201a0d00200b410c6a10e207200b41046a221a201a280200417f6a221a360200201a0d00200b10390b201641046a21162015202336020c410121232015201528020841016a3602084100211520242019470d000b0b2012450d08203b0d014100410041bcdccc00103c000b202b204041027422106a211a203a203b41027422216a21184100212202402021450d00201a2116201821190340202b2016460d0102402019417c6a221928020022122016417c6a22162802002215460d00201228020841016a222341004c0d0b201220233602082015280208222341016a220b41004c0d0c2015200b360208201241106a201541106a412010d70b210b20122d003021242015202336020820152d0030211520122012280208417f6a360208200b0d02202441ff0171201541ff0171470d020b202241016a2122203a2019470d000b0b203b20226b2123204020226b224541016a211502400240202b450d002015201a202b6b4102762212201220154b1b410020151b20232018203a6b4102762212201220234b1b410020231b6a21120c010b024020230d00410021120c010b20232018203a6b4102762212201220234b1b21120b201241ffffffff03712012470d2420124102742212417f4c0d240240024020120d00410421160c010b201210382216450d240b2001410036023820012016360230200120124102762212360234024002400240202b450d002015201a202b6b4102762219201920154b1b410020151b20232018203a6b4102762219201920234b1b410020231b6a21190c010b024020230d004100211a0c020b20232018203a6b4102762219201920234b1b21190b0240024020122019490d004100211a0c010b200141306a4100201910ab012001280238211a200128023021160b2016201a4102746a21120240202b450d002015450d00202b20106a210b2040417f7320226a2116201a20406a20226b41016a2124202b21150340200b2015460d012015280200221928020041016a222241014d0d172019202236020020122019360200201a41016a211a201241046a2112201541046a2115201641016a221920164f21222019211620220d000b2024211a0b2023450d0002402018203a6b410276221520234d0d0020152023417f736a221620154f0d01201820164102746b417c6a21180b2018203a460d0003402018417c6a2218280200221528020041016a221641014d0d162015201636020020122015360200201a41016a211a201241046a2112203a2018470d000b0b2001201a360238200141d0026a41186a22114200370300200141d0026a41106a22254200370300200141d0026a41086a22054200370300200142003703d002200141f0046a41186a22024200370300200141f0046a41106a22144200370300200141f0046a41086a223d4200370300200142003703f00441002137427f21490240201a0d004100211f4100212d4100212c427f214a0c140b4100212d20012802302120201a211f4100212c427f214a4100210b0340201f200b4d0d0b2020200b4102746a2215280200221228020841016a41004c0d0c200b41016a2124024020122d00300d0020012802382212200b4d0d0e20152802002212280208221541016a41004c0d0f20122015360208200141f0016a41186a221c201241286a290000370300200141f0016a41106a221f201241206a290000370300200141f0016a41086a220c201241186a290000370300200120122900103703f00120012802382212202441002012417f6a200b4b1b22154d0d10202020154102746a2802002212280208221541016a41004c0d11201220153602082034201241286a2900003703002035201241206a2900003703002036201241186a290000370300200120122900103703f00520012802382212200b2012200b1b417f6a22154d0d12202020154102746a2802002212280208221541016a41004c0d1320122015360208200141d0066a41186a2206201241286a290000370300200141d0066a41106a2227201241206a290000370300200141d0066a41086a2228201241186a290000370300200120122900103703d006200041086a280200412c6c221521182000280200221241546a2219212220122116024003402018450d01201841546a21182022412c6a21222016410c6a21232016412c6a21162023200141f0016a412010d70b0d000b202241086a28020041306c21182022280200211603402018450d01201841506a21182016200141f0056a412010d70b2122201641306a2223211620220d000b2049202341706a2218290300224858204a201841086a290300224758204a2047511b0d00201120342903003703002025203529030037030020052036290300370300203d200c2903003703002014201f2903003703002002201c290300370300200120012903f0053703d002200120012903f0013703f0044101212d200b212c204821492047214a0b03402015450d01201541546a21152019412c6a21192012410c6a21182012412c6a21122018200141f0016a412010d70b0d000b201941086a28020041306c21122019280200211503402012450d01201241506a21122015200141d0066a412010d70b2118201541306a2216211520180d000b2049201641706a2212290300224858204a201241086a290300224758204a2047511b0d00201120062903003703002025202729030037030020052028290300370300203d200c2903003703002014201f2903003703002002201c290300370300200120012903d0063703d002200120012903f0013703f0044100212d200b212c204821492047214a0b2001280238211f2024210b2024201a460d140c000b0b2047a72223280200221528020041016a221241014d0d1320152012360200202228020022122802080d112012417f3602080240201228020c2216450d0020162016280200417f6a221936020020190d002016410c6a10e207201641046a22192019280200417f6a221936020020190d00201610390b2012201536020c2012201228020841016a360208203b4102742116202321120340201228020022152015280200417f6a2219360200024020190d002015410c6a10e207201541046a22192019280200417f6a221936020020190d00201510390b201241046a21122016417c6a22160d000b024020474280808080f0ffffff3f83500d00202310390b202221120340201228020022152015280200417f6a2216360200024020160d002015410c6a10e207201541046a22162016280200417f6a221636020020160d00201510390b201241046a21122018417c6a22180d000b024020484280808080f0ffffff3f83500d00202210390b20322032280200417f6a22123602004101212920120d1c2032410c6a10e207203241046a22122012280200417f6a221236020020120d1c203210390c1c0b41dcdccc004118200141b0056a41f4dccc004180e1cc00103d000b41dcdccc004118200141b0056a41f4dccc004190e1cc00103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b4100410041acdccc00103c000b41dcdccc004118200141b0056a41f4dccc004180e1cc00103d000b41dcdccc004118200141b0056a41f4dccc004190e1cc00103d000b200b201f41ccdccc00103c000b41dcdccc004118200141b0056a41f4dccc004184ddcc00103d000b200b20124194ddcc00103c000b41dcdccc004118200141b0056a41f4dccc0041a4ddcc00103d000b2015201241b4ddcc00103c000b41dcdccc004118200141b0056a41f4dccc0041c4ddcc00103d000b2015201241d4ddcc00103c000b41dcdccc004118200141b0056a41f4dccc0041e4ddcc00103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b200142003702f401200120443602f001202d202c6a21434101212902400240201f0d00410021120c010b204341017121064100213720442141201f211241002124024002400240024002400340201220244d0d0520012802302215202441027422386a280200222028020841016a221241004c0d04202441016a211c202020123602080240024020202d00300d00200128023822122024201220241b417f6a22184d0d05201520184102746a280200222728020841016a221241004c0d04202720123602080240200041086a22262802002212450d00200028020022192012412c6c6a210b2024410171213c202741106a2116202041106a212341002122034002402019410c6a2023412010d70b0d00201941086a220c280200221a450d0020192802002112201a41306c41506a2115410021180240034020122016412010d70b450d01201241306a2112201841016a2118201541506a22154150470d000c020b0b201241286a22182903002147201241206a2228290300214802400240203c0d0002402006450d00427f2047204a7c204820497c224b2048542233ad7c22482033204820475420482047511b22331b2147427f204b20331b21480c020b42002047204a7d2048204954ad7d224b204820497d224c204856204b204756204b2047511b22331b21474200204c20331b21480c010b02402006450d0042002047204a7d2048204954ad7d224b204820497d224c204856204b204756204b2047511b22331b21474200204c20331b21480c010b427f2047204a7c204820497c224b2048542233ad7c22482033204820475420482047511b22331b2147427f204b20331b21480b02400240024020482047844200520d002012201241306a201510d50b1a200c201a417f6a36020041002029202a2022461b212902402024202c470d00202d450d040b2001280238221220244d0d01200128023020386a280200221228020041016a221541014d0d0f20122015360200200128023822152024201520241b417f6a22184d0d02200128023020184102746a280200221528020041016a221841014d0d0f201520183602000240203720012802f401470d00200141f0016a203710b10120012802f001214120012802f80121370b204120374103746a2218201536020420182012360200200120012802f80141016a22373602f8010c030b20182047370300202820483703000c020b2024201241b4decc00103c000b2018201541c4decc00103c000b202241016a21222019412c6a2219200b470d000b0b20012802382212201c41002012417f6a20244b1b22154d0d03200128023020154102746a280200222828020841016a221241004c0d0120282012360208024020262802002215450d00200028020022192015412c6c6a210b20244101712126202841106a2116202041106a212341002122034002402019410c6a2023412010d70b0d00201941086a220c280200221a450d0020192802002112201a41306c41506a2115410021180240034020122016412010d70b450d01201241306a2112201841016a2118201541506a22154150470d000c020b0b201241286a22182903002147201241206a223c29030021480240024020260d0002402006450d0042002047204a7d2048204954ad7d224b204820497d224c204856204b204756204b2047511b22331b21474200204c20331b21480c020b427f2047204a7c204820497c224b2048542233ad7c22482033204820475420482047511b22331b2147427f204b20331b21480c010b02402006450d00427f2047204a7c204820497c224b2048542233ad7c22482033204820475420482047511b22331b2147427f204b20331b21480c010b42002047204a7d2048204954ad7d224b204820497d224c204856204b204756204b2047511b22331b21474200204c20331b21480b02400240024020482047844200520d002012201241306a201510d50b1a200c201a417f6a36020041002029202a2022461b212902402024202c470d00202d4101460d040b2001280238221220244d0d01200128023020386a280200221228020041016a221541014d0d0f2012201536020020012802382215201c41002015417f6a20244b1b22184d0d02200128023020184102746a280200221528020041016a221841014d0d0f201520183602000240203720012802f401470d00200141f0016a203710b10120012802f80121370b20012802f001224120374103746a22182015360204201820123602002001203741016a22373602f8010c030b20182047370300203c20483703000c020b2024201241f4decc00103c000b201820154184dfcc00103c000b202241016a21222019412c6a2219200b470d000b202828020821120b20282012417f6a36020820272027280208417f6a360208202028020821120b20202012417f6a36020820012802382112201c2124201c201f460d070c010b0b41dcdccc004118200141b0056a41f4dccc0041e4decc00103d000b2015201241d4decc00103c000b41dcdccc004118200141b0056a41f4dccc0041a4decc00103d000b201820124194decc00103c000b41dcdccc004118200141b0056a41f4dccc004184decc00103d000b2024201241f4ddcc00103c000b02400240202c2012417f6a470d00202d4101460d010b41c00010382215450d10201520012903f004370000201520012903d002370020201541186a2002290300370000201541106a2014290300370000201541086a203d290300370000201541286a2005290300370000201541306a2025290300370000201541386a201129030037000002400240204320454d0d000240024002400240024002400240203b417f6a2224450d00203b4101203b41014b1b417f6a210b41002116034020162218203b460d02203a20184102746a22232802002212280200221941016a221641014d0d0b201220163602002012280208222241016a41004c0d03201841016a211620122022360208201220193602002034201241286a2900003703002035201241206a2900003703002036201241186a290000370300200120122900103703f0052018200b460d04203a20164102746a22222802002212280200221941016a221841014d0d0b201220183602002012280208221841016a41004c0d052012201836020820122019360200200141d0066a41186a201241286a290000370300200141d0066a41106a201241206a290000370300200141d0066a41086a201241186a290000370300200120122900103703d0064100211202400340201241c000460d01201520126a2118201241206a21122018200141f0056a412010d70b0d000b410021120340201241c000460d01201520126a2118201241206a21122018200141d0066a412010d70b0d000c030b0b2023280200221828020041016a221241014d0d0b20182012360200202228020022122802080d062012417f3602080240201228020c2219450d0020192019280200417f6a222236020020220d002019410c6a10e207201941046a22222022280200417f6a222236020020220d00201910390b2012201836020c2012201228020841016a36020820162024470d000b0b201d28020041016a221241014d0d09201d2012360200201e2802080d05201e417f3602080240201e28020c2212450d0020122012280200417f6a221836020020180d002012410c6a10e207201241046a22182018280200417f6a221836020020180d00201210390b201e201d36020c201e201e28020841016a3602080c070b203b203b4194dfcc00103c000b41dcdccc004118200141b0056a41f4dccc0041a4dfcc00103d000b2016203b41b4dfcc00103c000b41dcdccc004118200141b0056a41f4dccc0041c4dfcc00103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b02402040417f6a2224450d0020404101204041014b1b417f6a210b410021160340201622182040460d05202b20184102746a22232802002212280200221941016a221641014d0d04201220163602002012280208222241016a41004c0d06201841016a211620122022360208201220193602002034201241286a2900003703002035201241206a2900003703002036201241186a290000370300200120122900103703f0052018200b460d07202b20164102746a22222802002212280200221941016a221841014d0d04201220183602002012280208221841016a41004c0d082012201836020820122019360200200141d0066a41186a201241286a290000370300200141d0066a41106a201241206a290000370300200141d0066a41086a201241186a290000370300200120122900103703d0064100211202400340201241c000460d01201520126a2118201241206a21122018200141f0056a412010d70b0d000b410021120340201241c000460d01201520126a2118201241206a21122018200141d0066a412010d70b0d000c030b0b2023280200221828020041016a221241014d0d0420182012360200202228020022122802080d092012417f3602080240201228020c2219450d0020192019280200417f6a222236020020220d002019410c6a10e207201941046a22222022280200417f6a222236020020220d00201910390b2012201836020c2012201228020841016a36020820162024470d000b0b201e28020041016a221241014d0d02201e2012360200201d2802080d08201d417f3602080240201d28020c2212450d0020122012280200417f6a221836020020180d002012410c6a10e207201241046a22182018280200417f6a221836020020180d00201210390b201d201e36020c201d201d28020841016a3602080b201510390b20012802f001222320374103746a211620012802f401210b20232112024002402037450d00202321180240034020182802002212450d01024002402012201841046a280200221510e007450d0020122802080d0d2012417f3602080240201228020c2219450d0020192019280200417f6a222236020020220d002019410c6a10e207201941046a22222022280200417f6a222236020020220d00201910390b2012410036020c2012201228020841016a3602080c010b2015201210e007450d0020152802080d0d2015417f3602080240201528020c2219450d0020192019280200417f6a222236020020220d002019410c6a10e207201941046a22222022280200417f6a222236020020220d00201910390b2015410036020c2015201528020841016a3602080b20152015280200417f6a2219360200024020190d002015410c6a10e207201541046a22192019280200417f6a221936020020190d00201510390b20122012280200417f6a2215360200024020150d002012410c6a10e207201241046a22152015280200417f6a221536020020150d00201210390b201841086a22182016470d000c030b0b201841086a21120b20162012460d000340201228020022152015280200417f6a2218360200024020180d002015410c6a10e207201541046a22182018280200417f6a221836020020180d00201510390b201241046a28020022152015280200417f6a2218360200024020180d002015410c6a10e207201541046a22182018280200417f6a221836020020180d00201510390b201241086a22122016470d000b0b0240200b41ffffffff0171450d00202310390b024020012802382215450d0020012802302112201541027421180340201228020022152015280200417f6a2216360200024020160d002015410c6a10e207201541046a22162016280200417f6a221636020020160d00201510390b201241046a21122018417c6a22180d000b0b0240200128023441ffffffff0371450d00200128023010390b02402040450d00202b21120340201228020022152015280200417f6a2218360200024020180d002015410c6a10e207201541046a22182018280200417f6a221836020020180d00201510390b201241046a21122010417c6a22100d000b0b0240203f41ffffffff0371450d00202b10390b20322032280200417f6a2212360200024020120d002032410c6a10e207203241046a22122012280200417f6a221236020020120d00203210390b0240203b450d00203a21120340201228020022152015280200417f6a2218360200024020180d002015410c6a10e207201541046a22182018280200417f6a221836020020180d00201510390b201241046a21122021417c6a22210d000b0b203e41ffffffff0371450d09203a10390c090b00000b2040204041d4dfcc00103c000b41dcdccc004118200141b0056a41f4dccc0041e4dfcc00103d000b2016204041f4dfcc00103c000b41dcdccc004118200141b0056a41f4dccc004184e0cc00103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041f89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041e89ac400103d000b41f0a2ca004110200141b0056a41d89ac40041e89ac400103d000b202e202e280200417f6a2212360200024020120d00202e410c6a10e207202e41046a22122012280200417f6a221236020020120d00202e10390b201d201d280200417f6a2212360200024020120d00201d410c6a10e207201d41046a22122012280200417f6a221236020020120d00201d10390b201e201e280200417f6a2212360200024020120d00201e410c6a10e207201e41046a22122012280200417f6a221236020020120d00201e10390b202941ff01712112200041086a28020021202000280200211a0c010b201d201d280200417f6a2212360200024020120d00201d410c6a10e207201d41046a22122012280200417f6a221236020020120d00201d10390b201e201e280200417f6a2212360200024020120d00201e410c6a10e207201e41046a22122012280200417f6a221236020020120d00201e10390b410121120b203920126a21392020202a4b0d000b0b202a2020419cdccc00103c000b202a2020418cdccc00103c000b1032000b1034000b200141c0076a24000be10604107f017e047f027e23004190016b220224000240024020012802082203200128020c2204460d0020012802182105200141146a280200210641002802d895472107200241286a410c6a210820012802102109200241286a410472220a41086a210b200a41106a210c200a41186a210d200a41206a210e034020012003412c6a220f36020820032802002210450d01200a2003290204370200200b2003410c6a290200370200200c200341146a290200370200200d2003411c6a290200370200200e200341246a29020037020020022010360228200220063602580240024002400240024002402009280200200810b8072203450d002003280200211120022802302103200241003a005f2002201036026020022010200341226c6a3602642002200241df006a36026c2002200241d8006a36026802400240200241e0006a10870b221242ffff0383500d00410410382213450d05201320124220883d010220132012a74110763b010020024281808080103702742002201336027020024180016a41086a200241e0006a41086a2903003703002002200229036037038001024020024180016a10870b221242ffff03834201520d002012421088a7211420124280808080f0ff3f83422088a72115410121164102210341062110034002402003417f6a2016470d00200241f0006a2016410110bb09200228027021130b201320106a221620153b01002016417e6a20143b010020022003360278024020024180016a10870b221242ffff03834201520d00201041046a2110200341016a21032012421088a7211420124280808080f0ff3f83422088a72115200228027421160c010b0b200228027021130b200229027421120c010b42002112200721130b20022d005f450d01201242ffffffff0383500d02201310390c020b201742808080807083211741012103410221110c040b20130d020b20174280808080708320184220888421172018a7211341012103410221110c020b1032000b4100210320122118201221170b0240200228022c2210450d00201041226c450d00200228022810390b02402003450d00200520173e02082005201336020420052011360200410021130c030b024020130d00200f2103200f2004470d010c020b0b20002017370208200020113602000c010b410021130b2000201336020420024190016a24000b9607020e7f017e230041a0016b220424002001280200220520012802082206412c6c6a2107200128020421082005210920052101024002402006450d00200441c0006a410c6a210a2003280200210b2003280208210c41002106200441c0006a410472220d41086a210e200d41106a210f200d41186a2110200d41206a211102400340200520066a22012802002209450d01200d200141046a290200370200200e2001410c6a290200370200200f200141146a29020037020020102001411c6a2902003702002011200141246a290200370200200420093602404200211202402002200a10b8072209450d00200c200928020022094d0d00200b200941386c6a29030021120b200441f0006a41286a200441c0006a41286a280200360200200441f0006a41206a200441c0006a41206a290300370300200441f0006a41186a200441c0006a41186a290300370300200441f0006a41106a200441c0006a41106a290300370300200441f0006a41086a200441c0006a41086a29030037030020042004290340370370200441106a200441f0006a2012420010dd09200141286a200441106a41286a280200360200200141206a200441106a41206a290300370200200141186a200441106a41186a290300370200200141106a200441106a41106a290300370200200141086a200441106a41086a290300370200200120042903103702002006412c6a210620072001412c6a470d000b2006412c6d210e0c020b2001412c6a21090b200120056b2206412c6d210e20072009460d00034020092201412c6a21090240200141046a280200220d450d00200d41226c450d00200128020010390b20072009470d000b0b200e412c6c21092003280200210a2003280208210d20052107024002400340200721012009450d0142002112024020022001410c6a10b8072207450d00200d200728020022074d0d00200a200741386c6a29030021120b2001412c6a2107200441086a20012012420010b207200941546a210920042802082201450d000b200428020c210920004103360204200041086a2009ad4220862001ad8437020002402006450d00200e412c6c21092005210103400240200141046a2802002207450d00200741306c450d00200128020010390b2001412c6a2101200941546a22090d000b0b410121012008450d012008412c6c450d01200510390c010b200020053602042000410c6a200e360200200041086a2008360200410021010b20002001360200200441a0016a24000bbe0201067f200028020421012000410036020402402001450d00024020002802002202450d000340200128026021012002417f6a22020d000b0b024020002802082203450d004100210403402003417f6a2103024002400240200420012f015e490d0041002100034041002102024020012802002205450d00200041016a210620012f015c2104200521020b024041900141e00020001b450d00200110390b024020020d00410021010c040b2006210020022101200420022f015e4f0d000b20060d01200221010b200441016a21040c010b200441027420026a41e4006a280200210102402006417f6a2202450d000340200128026021012002417f6a22020d000b0b410021040b20030d000b0b41002102034020012802002100024041900141e00020021b450d00200110390b2002417f6a21022000210120000d000b0b0b8d2e01057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010e209200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010e209200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010e209200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010e209200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010e209200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010e209200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010e209200228020010390f0b2000410c6a220228020010e209200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010e209200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010e209200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010e209200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b200041386a10fc020f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010e309200228020010390f0b200041286a220228020010e209200228020010390f0b0b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210e2090b0f0b200041086a108d02200041046a220228020010e309200228020010390b9c0601067f230041e0006b22032400200341086a41ade6c000410810cb01200341186a41b0fdcb00411010cb0102400240412010382204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004412010cc01370338200341dc006a2201200441206a360200200320043602582003200341386a41086a3602542003200341386a360250200341286a200341d0006a10830120041039412010382204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004412010cc013703482001200441206a360200200320043602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012004103920032802302201200328024022026a41206a2204417f4c0d010240024020040d00410121050c010b200410382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200436020002402004410f4b0d00200041004110107720072802002106200028020021050b200520066a22042003290008370000200441086a200341086a41086a2900003700002007200641106a220436020002402008280200220520046b410f4b0d002000200441101077200041046a2802002105200041086a28020021040b2000280200220620046a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200441106a2204360200200328022821080240200520046b20014f0d002000200420011077200041046a280200210520072802002104200028020021060b200620046a2008200110d40b1a2007200420016a2204360200200328023821010240200520046b20024f0d002000200420021077200041086a2802002104200028020021060b200620046a2001200210d40b1a200041086a200420026a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000bfe0102027f037e230041306b2205240002400240024020044104490d000240024002402004417c6a4110490d002003280000210620052004416c6a36020c2005200341146a3602082003410c6a2900002107200329000421082005200541086a10c1012005280200450d01200541003602200c020b200041003602140c040b200541206a200541086a2005280204109d0220052802200d020b200041003602140c020b200041003602140c010b200541106a41086a200541206a41086a2802002204360200200520052903202209370310200020073703082000200837030020002006360210200020093702142000411c6a20043602000b200541306a24000bdb0305017f017e027f017e047f230041206b22032400200241086a29030021042002411c6a2802002105200241186a280200210620022903002107200228021421082002280210210220032000200110e409200328020821092003280200210a2003410036021820034201370310200341106a41004104107720032802102200200328021822016a20023600002003200141046a22023602180240200328021420026b410f4b0d00200341106a20024110107720032802102100200328021821020b200020026a22002004370008200020073700002003200241106a360218200341106a200510ac020240024020050d002003280210210b200328021821050c010b20054105742101200328021821052008210203400240200328021420056b411f4b0d00200341106a200541201077200328021821050b2003280210220b20056a22002002290000370000200041086a200241086a290000370000200041106a200241106a290000370000200041186a200241186a2900003700002003200541206a2205360218200241206a2102200141606a22010d000b0b200a2009200b200510e90102402003280214450d00200b10390b02402003280204450d00200a10390b0240200641ffffff3f71450d00200810390b200341206a24000b1300200041013602042000418085c8003602000b3400200041e9e5c00036020420004100360200200041146a4103360200200041106a418086c800360200200041086a420a3702000b34002000418b8ac80036020420004100360200200041146a4102360200200041106a41a48ac800360200200041086a42033702000b2e01017f230041106b2202240020024200370204200241002802d8974e3602002000200210c009200241106a24000bc10301067f230041106b22022400024002402001280208220341046a2204417f4c0d00200128020021050240024002400240024002402004450d00200410382201450d07200241003602082002200436020420022001360200200341c000490d02200341808001490d032003418080808004490d04410021040c010b2002410036020820024201370300200241004101107720022802002101200228020821040b200120046a41033a00002002200441016a22043602080240200228020420046b41034b0d002002200441041077200228020821040b2002280200220120046a2003360000200441046a21040c030b200120034102743a0000410121040c020b20034102744101722106410021070240200441014b0d00200241004102107720022802002101200228020821070b200120076a20063b0000200741026a21040c010b20012003410274410272360000410421040b200220043602080240200228020420046b20034f0d00200220042003107720022802002101200228020821040b200120046a2005200310d40b1a2002200420036a2203360208200020012003109f0102402002280204450d00200110390b200241106a24000f0b1034000b1032000bd80301087f230041106b220224000240410410382203450d002002420437020420022003360200412010382203450d0020032001290004370000200341186a22042001411c6a290000370000200341106a2205200141146a290000370000200341086a22062001410c6a290000370000200241004120107720022802002207200228020822086a22092003290000370000200941086a2006290000370000200941106a2005290000370000200941186a20042900003700002002200841206a220936020820031039200128020021030240200228020420096b41034b0d00200220094104107720022802002107200228020821090b200720096a20033600002002200941046a2209360208412010382203450d0020032001290024370000200341186a22042001413c6a290000370000200341106a2205200141346a290000370000200341086a22062001412c6a2900003700000240200228020420096b411f4b0d002002200941201077200228020821090b2002280200220720096a22012003290000370000200141086a2006290000370000200141106a2005290000370000200141186a20042900003700002003103920002007200941206a109f0102402002280204450d00200710390b200241106a24000f0b1032000bb80701187f230041d0056b22012400200141c0056a200010de08200141d0026a20012802c005220220012802c805220310df080240024020012802f80422040d000c010b2002200310e00120012802d00221052001410c6a200141d0026a41047241a40210d40b1a20014198056a280200210620014190056a28020021072001418c056a280200210820014188056a280200210920014184056a280200210a20014180056a280200210b20012802fc04210c0b024020012802c405450d00200210390b200141c0056a200010e008200141d0026a20012802c005220020012802c805220310e108024020012802d0022202450d002000200310e0010b200141f8026a2103200141f4026a210d200141f0026a210e200141ec026a210f200141e8026a2110200141e4026a2111200141e0026a2112200141dc026a2113200141d0026a41086a21140240024020020d00410021020c010b200141b0026a41086a20014184036a2802003602002001200141fc026a2902003703b0020b20032802002115200d2802002116200e2802002117200f28020021182010280200210f2011280200210d20122802002111201328020021102014280200210e20012802d4022103024020012802c405450d00200010390b0240024002402004450d002002450d01200141d0026a2001410c6a41a40210d40b1a2001419c056a201536020020014198056a201636020020014194056a201736020020014190056a20183602002001418c056a200f36020020014188056a200d36020020014184056a201136020020014180056a2010360200200141fc046a200e360200200141f8046a2003360200200141a0056a20012903b002370300200141a8056a200141b8026a280200360200200120023602f404200120083602c802200120093602c4022001200a3602c0022001200b3602c8052001200c3602c405200120043602c0052007200141d0026a200141c0026a200141c0056a2005200610ee090c020b2002450d010240200e450d00200e410c6c21042002210003400240200041046a280200450d00200028020010390b2000410c6a2100200441746a22040d000b0b02402003450d002003410c6c450d00200210390b0240200d450d00200d4104742104201041086a2100034002402000280200450d002000417c6a28020010390b200041106a2100200441706a22040d000b0b0240201141ffffffff0071450d00201010390b0240200f450d002018450d00200f10390b2015450d01201610390c010b0240200b450d00200410390b2008450d00200a10390b200141d0056a24000bd46a05217f027e017f027e057f230041f00f6b22062400200641b8046a41086a22072001410c6a290000370300200641b8046a41106a2208200141146a290000370300200641b8046a41186a22092001411c6a290000370300200641e0036a41086a220a2001412c6a290200370300200641e0036a41106a220b200141346a290200370300200641e0036a41186a220c2001413c6a290200370300200620012900043703b804200620012902243703e0032001280200210d20064190046a41186a220e200141dc006a29000037030020064190046a41106a220f200141d4006a29000037030020064190046a41086a2210200141cc006a290000370300200641c0036a41086a2211200141ec006a290000370300200641c0036a41106a2212200141f4006a290000370300200641c0036a41186a2213200141fc006a2900003703002006200129004437039004200620012900643703c00320064198036a41186a22142001419c016a29000037030020064198036a41106a221520014194016a29000037030020064198036a41086a22162001418c016a290000370300200620012900840137039803200641a0056a2217200141dc016a29000037030020064198056a2218200141d4016a29000037030020064190056a2219200141cc016a290000370300200641e8046a41206a221a200141c4016a290000370300200641e8046a41186a221b200141bc016a290000370300200641e8046a41106a221c200141b4016a290000370300200641e8046a41086a221d200141ac016a290000370300200620012900a4013703e804200641f8026a41186a221e200141fc016a290000370300200641f8026a41106a221f200141f4016a290000370300200641f8026a41086a2220200141ec016a290000370300200620012900e4013703f802200641d8026a41186a22212001419c026a290000370300200641d8026a41106a222220014194026a290000370300200641d8026a41086a22232001418c026a29000037030020062001290084023703d802200641106a41a4026a200141a4026a109e01200641106a410c6a2007290300370200200641106a41146a2008290300370200200641106a411c6a2009290300370200200641106a412c6a200a290300370200200641106a41346a200b290300370200200641106a413c6a200c290300370200200641106a41cc006a2010290300370200200641106a41d4006a200f290300370200200641106a41dc006a200e2903003702002006200d360210200620062903b804370214200620062903e0033702342006200629039004370254200641106a41fc006a2013290300370200200641106a41f4006a2012290300370200200641106a41ec006a2011290300370200200641106a418c016a2016290300370200200641106a4194016a2015290300370200200641106a419c016a2014290300370200200641106a41ac016a201d290300370200200641106a41b4016a201c290300370200200641106a41bc016a201b290300370200200641106a41c4016a201a290300370200200641106a41cc016a2019290300370200200641106a41d4016a2018290300370200200641106a41dc016a2017290300370200200620062903c003370274200620062903980337029401200620062903e8043702b401200641106a41fc016a201e290300370200200641106a41f4016a201f290300370200200641106a41ec016a2020290300370200200641106a419c026a2021290300370200200641106a4194026a2022290300370200200641106a418c026a2023290300370200200620062903f8023702f401200620062903d80237029402200141d8026a2802002113200141d4026a2802002119200141d0026a2802002120200141cc026a2802002124200141c8026a2802002125200141c4026a280200211c200141c0026a280200211e200141bc026a280200211b200141b8026a2802002122200141b4026a2802002126200141b0026a2802002121200141ac026a2802002118200141a8026a280200211a20012802a4022117200c4200370300200b4200370300200a4200370300200642003703e003200641e8046a41f1d5c400410d10cb01200a201d290000370300200620062900e8043703e003200641e8046a418bd6c400410c10cb01200c201d290000370300200b20062900e804370300200641e8046a200641e0036a412010c70320062802b005211f20062802f80521232002280200210c2002280204210a200641143602bc03200e4200370300200f4200370300201042003703002006420037039004200641e8046a41b69fc500410710cb012010201d290000370300200620062900e80437039004200641e8046a41f4c9c800410a10cb01200e201d290000370300200f20062900e804370300200641e8046a20064190046a10bf020240024020062802e804221d0d00200642003702dc0220064100280284ee4d3602d8020c010b200620062902ec043702dc022006201d3602d8020b200641e0036a41f0c8c800410710cb01200b41086a4200370000200b4200370000200b41bce3c900410910cb01200641e8046a200641e0036a10e8060240024020062903e8044202510d00200a410376200a4107716a221d201d410771201d410849220e1bad422086200c4100201d410376200e1b6aad842127200aad420783422086200cad842128200641f8026a200641f8046a28020010ef09200641e8046a20062802f802221d200628028003220a10ef080240024020062802e8044101460d00200641a0036a420037030020064100360298030c010b200641a0036a200641f4046a290200370300200620062902ec04370398030b200620273e00c503200641c9036a20274220883c0000200641003602cc03200620283e02c003200620284220883c00c4032006200641bc036a3602d4032006200641d8026a3602d003200641b8046a200641c0036a200641c0036a41106a221410d109024020062d00b8044101470d00200641e8046a41106a2112200641e8046a41046a210820064198036a4104722129200641b8046a41017221090340200641e0036a41186a200941186a2900002227370300200641e0036a41106a200941106a2900002228370300200641e0036a41086a200941086a290000222a37030020062009290000222b3703e003200841186a221d2027370000200841106a220a2028370000200841086a220c202a3700002008202b37000020062802d403280200211120064190046a41086a220e200c29020037030020064190046a41106a220c200a29020037030020064190046a41186a220a201d2902003703002006200829020037039004200641e8046a41186a2215200a2903003703002012200c290300370300200641e8046a41086a2216200e29030037030020062006290390043703e8040240024020062802a003220f450d00200628029c0321070c010b4194031038220f450d0441002107200f4100360200200f41003b01322006200f3602a0032006410036029c030b024002400340200f2f0132220d41057421104100211d417c210c417f210a0240034002402010201d470d00200d210a0c020b200641e8046a200f201d6a41346a412010d70b220e450d03200a41016a210a200c417c6a210c201d41206a211d200e417f4a0d000b0b02402007450d002007417f6a2107200f200a4102746a4194036a280200210f0c010b0b200641b8046a41186a20152903002227370300200641b8046a41106a20122903002228370300200641b8046a41086a2016290300222a370300200620062903e804222b3703b8042012202b370200201241086a202a370200201241106a2028370200201241186a2027370200200620293602f4042006200a3602f0042006200f3602ec04200641003602e804200641e8046a410010ba07211d0c010b200f200c6b211d0b201d201d28020020116a360200200620062802980320116a36029803200641b8046a200641c0036a201410d10920062d00b8044101460d000b200628028003210a20062802f802211d0b200641f4046a20064198036a41086a29030037020020062006290398033702ec04200641013602e804200641b8046a200641e8046a41047210f009201d200a20062802b804220c20062802c00410e901024020062802bc04450d00200c10390b200641e8046a41086a10990720062802fc02450d00201d10390b024020062802dc0241ffffff3f71450d0020062802d80210390b0240201b450d002001280200211d2006201c3602f0042006201e3602ec042006201b3602e804201d200641e8046a4100201f20234102461b20006a108b040b200641b8046a200128020010ff07200641e8046a20062802b804220f20062802c004221010f20820062902ec042227420020062802e804221d1b2128201d41002802d8974e201d1b210c0240024002402027422088a74100201d1b221d20194f0d00202842ffffffff0f8321272028422088a7221d450d01201d410474210e4100211d03400240200c201d6a220a41086a280200450d00200a41046a28020010390b200e201d41106a221d470d000c020b0b0240024020190d002028a7220741ffffffff00712007470d032007410474221d417f4c0d03410421080240201d450d00201d10382208450d050b201d410476ad21272028422088a7210e0c010b201d20196b220e41ffffffff0071200e470d02200e410474221d417f4c0d024104210a0240201d450d00201d1038220a450d040b202842ffffffff0f832019ad422086842127201d4104762107200c2108200a200c20194104746a200e41047410d40b210c0b02402027422088a7221d450d00201d410474210a200841086a211d03400240201d280200450d00201d417c6a28020010390b201d41106a211d200a41706a220a0d000b0b0240202742ffffffff0083500d00200810390b200ead4220862007ad8421270b2006200c3602e804200620273702ec04200f2010200641e8046a10840902402027422088a7221d450d00201d410474210a200c41086a211d03400240201d280200450d00201d417c6a28020010390b201d41106a211d200a41706a220a0d000b0b0240202742ffffffff0083500d00200c10390b024020062802bc04450d00200f10390b02400240024002400240024002402018450d0020012802002107201741086a211d2018410c6c220c41746a210e4100210a0340201d280200200a6a210a201d410c6a211d200c41746a220c0d000b200641e0036a2007108108200641e8046a20062802e00320062802e80310e308200e410c6e21140240024020062802f00422100d0041e00010382210450d0a4100210d4108210c4100211d0c010b20062903e8042227422088a7211d2027a7210d20062802f404210c0b20172018410c6c220e6a2111024002400240200e0d002017210e0c010b200e41746a210f2017210e02400340200e2802002208450d01200e41046a29020021270240200c417f6a2209201d200d6b712009470d00200c417f200f410c6d220941016a221220122009491b6a2209200c490d094100417f2009417f6a677620094102491b221241016a22092012490d092009200c4d0d00024002400240024002402009200c6b22090d00200c21090c010b200c20096a2209200c490d102009ad420c7e2228422088a74541027421092028a7211202400240200c0d00200641003602e8040c010b200641043602f004200620103602e8042006200c410c6c3602ec040b200641b8046a20122009200641e8046a109a0120062802c004210920062802b8044101460d0120062802bc0421102009410c6e21090b201d200d4f0d02201d200c200d6b22124f0d012010200c410c6c6a2010201d410c6c10d40b1a201d200c6a211d0c020b2009450d0e0c0f0b200d410c6c210c2010200920126b220d410c6c6a2010200c6a2012410c6c10d40b1a0b2009210c0b2010201d410c6c6a2209202737020420092008360200200c417f6a201d41016a71211d200f41746a210f200e410c6a220e2011470d000c030b0b200e410c6a210e0b2011200e460d0020172018410c6c6a21080340200e410c6a210f0240200e41046a280200450d00200e28020010390b200f210e2008200f470d000b0b0240201a450d00201a410c6c450d00201710390b20062802e803211120062802e00321090240024020100d002009201110e0010c010b200c417f6a2208201d200d6b71220f410c6c41046a220e417f4c0d0802400240200e0d00410121120c010b200e10382212450d0a0b200641003602f0042006200e3602ec04200620123602e804200641e8046a200f10ac020240201d200d460d00200d210e03402010200e410c6c6a220f280200200f280208200641e8046a10b902200e41016a200871220e201d470d000b0b2009201120062802e804220e20062802f00410e901024020062802ec04450d00200e10390b02400240201d200d490d000240200c201d490d00201d210e4100211d0c020b201d200c41f08bc700104b000b200c210e200c200d490d050b0240200e200d460d00200e410c6c200d410c6c220e6b210f2010200e6a210e03400240200e41046a280200450d00200e28020010390b200e410c6a210e200f41746a220f0d000b0b0240201d450d00201d410c6c210f4100211d034002402010201d6a220e41046a280200450d00200e28020010390b200f201d410c6a221d470d000b0b200c450d00200c410c6c450d00201010390b201441016a210e024020062802e403450d00200910390b200641b8046a2007108008200641e8046a20062802b804220c20062802c004220f10de03200641e8046a41086a221d280200211020062802ec04210820062802e8042109200641013602e804201d20104100200941014622091b200a6a36020020062008410020091b200e6a3602ec04200c200f200641e8046a41047210d708024020062802bc04450d00200c10390b200641f8036a4200370300200641f0036a4200370300200641e0036a41086a220a4200370300200642003703e003200641e8046a41d584ce00410310cb01200a201d290000370300200620062900e8043703e003200641e8046a41d089ce00410d10cb01200b41086a201d290000370000200b20062900e804370000200641e8046a200641e0036a412010e6030240024020062802e804220f0d00200642003702940441002108200641002802d8974e220f36029004410021100c010b20062902ec0421272006200f3602900420062027370294042027422088a721102027a721080b4100211d024002402010450d002010210c2010210a0340024002402007200f200c410176201d6a220c4102746a280200220e4d0d00200c41016a211d0c010b200c210a2007200e460d030b200a201d6b210c200a201d4b0d000b2010201d490d040b024020102008470d0020064190046a2008109901200628029004210f0b200f201d4102746a220a41046a200a2010201d6b41027410d50b1a200a20073602002006201041016a360298040b200641b8046a41086a20064190046a41086a280200360200200620062903900422273703b80402402027a7221d0d00200641f8036a4200370300200641f0036a4200370300200641e0036a41086a221d4200370300200642003703e003200641e8046a41d584ce00410310cb01201d200641e8046a41086a220a290000370300200620062900e8043703e003200641e8046a41d089ce00410d10cb01200b41086a200a290000370000200b20062900e804370000200641e0036a412010e0010c020b200641f8036a4200370300200641f0036a4200370300200641e0036a41086a220a4200370300200642003703e003200641e8046a41d584ce00410310cb01200a200641e8046a41086a220c290000370300200620062900e8043703e003200641e8046a41d089ce00410d10cb01200b41086a200c290000370000200b20062900e804370000200641e0036a4120200641b8046a108e0420062802bc0441ffffffff0371450d01201d10390c010b201a450d00201a410c6c450d00201710390b200641b8046a2001280200221c10d605200641e8046a20062802b80420062802c00410f50820062902ec042227422088a7410020062802e804221d1b220a41ffffffff0071200a470d05200a410474220a417f4c0d054104210c0240200a450d00200a1038220c450d070b4100211a200641003602f0042006200c3602e8042006200a4104763602ec04201d41002802d8974e201d1b222320274200201d1b2228422088a722294104746a211f024020290d004100210d202321150c040b4100211a4100210d2023211503402015221d41106a2115201d280204221e450d04201d41086a290200212702400240201d280200220a20134b0d000240024002400240024002400240024002402027422088a7221d450d00201e201d4102746a2114201e210803402008280200210c0240200d0d0041341038220d450d1441002112200d41003b0132200d41003602000b200841046a2108200d210f2012210702400340200f41046a2111200f2f0132220941027421104100211d417f210a0240034002402010201d470d002009210a0c020b200f201d6a210e200a41016a210a201d41046a211d417f200e41046a280200220e200c47200e200c4b1b220e4101460d000b200e41016a0e020002000b02402007450d002007417f6a2107200f200a4102746a41346a280200210f0c010b0b024002402009410a4b0d000240200a20094f0d002011200a4102746a221d41046a201d2009200a6b41027410d50b1a0b2011200a4102746a200c360200200f200941016a3b01320c010b410021074104211d02400240200a41054f0d00200a21100c010b4105211d4105211002400240200a417b6a0e020201000b200a41796a2110410121074106211d0c010b41002110410121070b41341038220e450d15200e41003b0132200e4100360200200e200f2f01322209201d417f736a220a3b0132200a410c4f0d042009201d41016a22176b200a470d052011201d4102746a2802002116200e41046a201120174102746a200a41027410d40b1a200f201d3b0132200e200f20071b221d41046a210a0240201041016a2209201d2f013222074b0d00200a20094102746a200a20104102746a200720106b41027410d50b1a0b200a20104102746a200c360200201d200741016a3b0132024002400240200f280200221d0d00410021110c010b4100211120162117200e21180340200f2f0130210f201d22072f0132220c410b490d02410021104104211d0240200f4105490d00200f211d02400240200f417b6a0e020201000b200f41796a210f410121104106211d0c010b4100210f410121104105211d0b41e4001038220e450d18200e41003b0132200e4100360200200e20072f01322209201d417f736a220a3b0132200a410c4f0d092009201d41016a22196b200a470d0a200741046a2209201d4102746a2802002116200e41046a2009201941027422196a200a41027410d40b1a2007201d3b0132200e2f0132220a41016a2109200a410c4f0d0b200c201d6b221d2009470d0c201141016a2111200e41346a200720196a41346a201d41027410d40b1a4100211d02400340200e201d4102746a41346a280200220c201d3b0130200c200e360200201d200a4f0d01201d201d200a496a221d200a4d0d000b0b200e200720101b220c41046a21090240200f41016a221d200c2f0132220a4b0d002009201d4102746a2009200f4102746a200a200f6b41027410d50b1a0b200a41016a21102009200f41027422196a2017360200200c41346a21090240200f41026a221b200a41026a22174f0d002009201b4102746a2009201d4102746a200a200f6b41027410d50b1a0b2009201d4102746a2018360200200c20103b01320240201d20174f0d00200c20196a41386a211d0340201d280200220a200f41016a220f3b0130200a200c360200201d41046a211d2010200f470d000b0b2007210f20162117200e21182007280200221d0d000b0b41e4001038221d450d16201d200d360234201d41003b0132201d4100360200200d41003b0130200d201d36020020122011470d0b201d2f0132220a410b4f0d0c201241016a2112201d200a41016a220c3b0132201d41346a200c4102746a200e360200201d200a4102746a41046a2016360200200e200c3b0130200e201d360200201d210d0c010b200741046a2210200f41027422096a210a200f41016a211d200c41016a210e02400240200c200f4b0d00200a2017360200200741346a210a0c010b2010201d41027422116a200a200c200f6b410274220f10d50b1a200a20173602002009200741346a220a6a41086a200a20116a200f10d50b1a0b200a201d410274220f6a20183602002007200e3b0132201d200c41026a220e4f0d00200f20076a41346a210a0340200a280200220c201d3b0130200c2007360200200a41046a210a200e201d41016a221d470d000b0b201a41016a211a0b20082014470d000b0b202742ffffffff0383500d09201e10390c090b200a410b41a485c700104b000b41b485c700412841dc85c7001035000b200a410b41a485c700104b000b41b485c700412841dc85c7001035000b2009410c41b486c700104b000b41b485c700412841dc85c7001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b024020062802f004221d20062802ec04470d00200641e8046a201d10fd0220062802f004211d0b20062802e804201d4104746a220c201e360204200c200a360200200c41086a20273702002006201d41016a3602f0040b2015201f470d000c050b0b201d20101041000b41e78ac700412341808cc7001035000b41f8d2cd004111419c94ce00105b000b201f2015460d00202320294104746a210a0340201541106a211d0240201541086a28020041ffffffff0371450d00201541046a28020010390b201d2115200a201d470d000b0b0240202842ffffffff0083500d00202310390b20062802c004210a20062802b804210c0240024020062802e804220e0d00200c200a10e0010c010b20062902ec042227422088a7221d410474410472220f417f4c0d01200f10382210450d02200641003602f0042006200f3602ec04200620103602e804200641e8046a201d10ac02200e201d200641e8046a10b702200c200a20062802e804220f20062802f00410e901024020062802ec04450d00200f10390b0240201d450d00201d410474210a200e41086a211d03400240201d28020041ffffffff0371450d00201d417c6a28020010390b201d41106a211d200a41706a220a0d000b0b202742ffffffff0083500d00200e10390b024020062802bc04450d00200c10390b0240200d450d00200d210c024003402012450d012012417f6a2112200d200d2f01324102746a41346a280200210d200c280234210c0c000b0b0240201a450d00024002400240200c2f01320d004100210a03404100211d0240200c2802002210450d00200a41016a210f200c2f0130210e2010211d0b024041e4004134200a1b450d00200c10390b0240201d0d004100210c0c040b200f210a201d210c200e201d2f01324f0d000b201d200e4102746a220a41046a28020021140240200f0d00201d210c0c020b200a41386a280200210c0240200f417f6a221d450d000340200c280234210c201d417f6a221d0d000b0b410021080c020b200c28020421144100210e0b200e41016a21080b2006419d056a211141002802d8974e211b0340200641e8046a2014201c10b205200641b8046a20062802e804220e20062802f00410f20820062902bc042227422088a7410020062802b804220a1b211d024020062802ec04450d00200e10390b201d41ffffffff0071201d470d03201d410474221d417f4c0d0302400240201d0d00410421120c010b201d10382212450d050b41002110200641003602a00320062012360298032006201d41047636029c03200a201b200a1b221520274200200a1b2228422088a7221d4104746a210e024002400240201d0d002015211d410021094100210d0c010b410021102015211d4100210d4100210903400240201d41046a280200220a0d00201d41106a211d0c020b201d41086a290200212702400240201d280200220f20134d0d0002402010200628029c03470d0020064198036a201010fd02200628029803211220062802a00321100b201220104104746a2207200a3602042007200f360200200741086a20273702002006201041016a22103602a0030c010b200d41016a210d20092027422088a76a21092027a7450d00200a10390b201d41106a221d200e470d000c020b0b200e201d460d000340201d41106a210a0240201d41086a280200450d00201d41046a28020010390b200a211d200e200a470d000b0b0240202842ffffffff0083500d00201510390b0240024020100d00200641e8046a2014201c10b20520062802e804221d20062802f00410e00120062802ec04450d01201d10390c010b200628029c0321182006280298032112200641b8046a2014201c10b2052010410474220e410472221d417f4c0d0420062802c004211920062802b8042115201d1038220a450d05200641003602f0042006201d3602ec042006200a3602e804200641e8046a201010ac022012200e6a21072012211d0340201d280200210f024020062802ec0420062802f004220a6b41034b0d00200641e8046a200a4104107720062802f004210a0b20062802e804200a6a200f3600002006200a41046a3602f004201d41046a280200201d410c6a280200200641e8046a10b902201d41106a221d2007470d000b2015201920062802e804221d20062802f00410e901024020062802ec04450d00201d10390b024020062802bc04450d00201510390b201241086a211d03400240201d280200450d00201d417c6a28020010390b201d41106a211d200e41706a220e0d000b201841ffffffff0071450d00201210390b200641c0036a2014201c10fd03200641e8046a20062802c003221d20062802c803220e10fe03024020062d009c05220a410247220f450d00200641b8046a41286a200641e8046a41286a280200360200200641b8046a41206a200641e8046a41206a290300370300200641b8046a41186a200641e8046a41186a290300370300200641b8046a41106a200641e8046a41106a290300370300200641b8046a41086a200641e8046a41086a290300370300200641e0036a41086a201141086a290000370300200641e0036a41106a201141106a290000370300200641e0036a41186a201141186a290000370300200641e0036a411f6a2011411f6a280000360000200620062903e8043703b804200620112900003703e00320062802980520096b2117200628029405200d6b21160b201120062903e003370000200641e8046a41286a200641b8046a41286a280200360200200641e8046a41206a200641b8046a41206a290300370300200641e8046a41186a2207200641b8046a41186a290300370300200641e8046a41106a200641b8046a41106a290300370300200641e8046a41086a2209200641b8046a41086a290300370300201141086a200641e0036a41086a290300370000201141106a200641e0036a41106a290300370000201141186a200641e0036a41186a2903003700002011411f6a200641e0036a411f6a280000360000200620062903b8043703e804200620173602980520062016360294052006200a3a009c0502400240200f0d00201d200e10e0010c010b20064100360298042006420137039004200628028805210f20064190046a410041041077200628029004220d20062802980422126a200f3600002006201241046a220f36029804200628028c0521120240200628029404200f6b41034b0d0020064190046a200f41041077200628029004210d200628029804210f0b200d200f6a20123600002006200f41046a220f3602980420062802900521120240200628029404200f6b41034b0d0020064190046a200f41041077200628029804210f0b200628029004220d200f6a20123600002006200f41046a220f360298040240200628029404200f6b41034b0d0020064190046a200f41041077200628029004210d200628029804210f0b200d200f6a20163600002006200f41046a220f360298040240200628029404200f6b41034b0d0020064190046a200f41041077200628029004210d200628029804210f0b200d200f6a20173600002006200f41046a220f36029804200628029404210d02400240200a4101460d000240200d200f470d0020064190046a200f41011077200628029804210f0b200628029004200f6a41003a00002006200f41016a220a360298040c010b0240200d200f470d0020064190046a200f41011077200628029804210f0b200628029004200f6a41013a00002006200f41016a36029804201120064190046a10b502200628029804210a0b2009290300212720062903e804212802402006280294042209200a6b410f4b0d0020064190046a200a411010772006280294042109200628029804210a0b200628029004220f200a6a220d2027370008200d20283700002006200a41106a220a360298042007290300212720062903f804212802402009200a6b410f4b0d0020064190046a200a411010772006280294042109200628029004210f200628029804210a0b200f200a6a2207202737000820072028370000201d200e200f200a41106a10e9012009450d00200f10390b024020062802c403450d00201d10390b201a417f6a211a024020100d00200628029c0341ffffffff0071450d0020062802980310390b201a450d0102402008200c2f0132490d004100210a03404100211d0240200c280200220f450d00200a41016a210e200c2f01302108200f211d0b024041e4004134200a1b450d00200c10390b0240201d0d004100210c0c030b200e210a201d210c2008201d2f01324f0d000b201d20084102746a220a41046a28020021140240200e0d00201d210c200841016a21080c020b200a41386a280200210c0240200e417f6a221d450d000340200c280234210c201d417f6a221d0d000b0b410021080c010b200c20084102746a41046a2802002114200841016a21080c000b0b4100211d0340200c280200210a024041e4004134201d1b450d00200c10390b201d417f6a211d200a210c200a0d000b0b200641e8046a201c10d70520062802f004210a20062802e804211d200620133602b804201d200a200641b8046a410410e901024020062802ec04450d00201d10390b20012802002107200641e0036a41186a22144200370300200641e0036a41106a22154200370300200641e0036a41086a22134200370300200642003703e003200641e8046a41c7e5c000410610cb012013200641e8046a41086a220d290000370300200620062900e8043703e003200641e8046a419081c400410610cb01200b41086a200d290000370000200b20062900e804370000200641086a200641e0036a412010ce03202120224104746a210c2021211d024002402022450d00200628020c410020062802081b2116202241047420216a41706a211c41002802d8974e211e200641bd056a21182006419d056a210a20064190046a41206a21192006418c056a211a200641e8046a4104722117200641b8046a410472211b2021210e0340200e211d03400240201d41046a280200220f0d00201d41106a211d0c030b201d41086a290200212720064198036a2007201d280200220810fd03200641e8046a200628029803221020062802a00310fe03024020062d009c052209410246220e0d00200641b8046a41286a200641e8046a41286a280200360200200641b8046a41206a200641e8046a41206a290300370300200641b8046a41186a200641e8046a41186a290300370300200641b8046a41106a200641e8046a41106a290300370300200641b8046a41086a200d29030037030020064190046a41086a200a41086a29000037030020064190046a41106a200a41106a29000037030020064190046a41186a200a41186a29000037030020064190046a411f6a200a411f6a280000360000200620062903e8043703b8042006200a29000037039004200628029805211220062802940521110b0240200628029c03450d00201010390b0240200e0d00200641e0036a41286a2229200641b8046a41286a280200360200200641e0036a41206a222c200641b8046a41206a2903003703002014200641b8046a41186a2903003703002015200641b8046a41106a2903003703002013200641b8046a41086a290300370300200641c0036a41086a220b20064190046a41086a220e290300370300200641c0036a41106a222220064190046a41106a2210290300370300200641c0036a41186a222320064190046a41186a221f290300370300200620062903b8043703e00320062006290390043703c003200641d8026a41026a222d201941026a2d00003a0000200620192f00003b01d8022006200f3602bc04200620163602b804201141016a212e200620273703c00420122027422088a7222f6a21300240024020094101470d00201f202329030037030020102022290300370300200e200b290300370300200620062903c003370390040c010b201f420037030020104200370300200e420037030020064200370390040b201a201b10eb09201741186a201f290300370200201741106a2010290300370200201741086a200e2903003702002017200629039004370200200620163602e804200641c0036a200641e8046a10ec09200641e8046a41286a2029280200360200200641e8046a41206a202c290300370300200641e8046a41186a2014290300370300200641e8046a41106a2015290300370300200d2013290300370300200a20062903c003370000200a41086a200b290300370000200a41106a2022290300370000200a41186a2023290300370000200620062903e0033703e804200641013a009c0520062030360298052006202e36029405201841026a202d2d00003a0000201820062f01d8023b000020064198036a2007200810fd03200628029803220e20062802a003200641e8046a10b1050240200628029c03450d00200e10390b2027a72109200641f8026a2007200810b205200628028003211f20062802f802211020064198036a41086a220e4100360200200642013703980320064198036a410041041077200628029803200e280200220b6a2016360000200e200b41046a360200200f202f20064198036a10b902200d200e28020036020020062006290398033703e8042010201f200641e8046a10de01024020062802fc02450d00201010390b02402009450d00200f10390b200641e8046a200810d60520064198036a20062802e804221020062802f00410f50802400240200628029803220f0d00200642003702fc022006201e3602f80241002109201e210f4100210e0c010b200629029c0321272006200f3602f802200620273702fc022027422088a7210e2027a721090b024020062802ec04450d00201010390b024002400240200e450d00200f200e417f6a4104746a22102802002016460d010b410410382210450d08201020073602000240200e2009470d00200641f8026a200910fd0220062802f802210f200628028003210e0b200f200e4104746a220e2010360204200e2016360200200e41086a428180808010370200200620062802800341016a220e360280030c010b2010410c6a210f201041046a211f0240201028020c2209201041086a280200470d00201f2009109901200f2802002109200628028003210e0b201f28020020094102746a2007360200200f200f28020041016a3602000b20062802fc02211f20062802f802211020064198036a200810d605200e410474220f4104722208417f4c0d0520062802a003210b2006280298032109200810382222450d06200641003602f004200620083602ec04200620223602e804200641e8046a200e10ac022010200e200641e8046a10b7022009200b20062802e804220820062802f00410e901024020062802ec04450d00200810390b0240200628029c03450d00200910390b0240200e450d00201041086a210e03400240200e28020041ffffffff0371450d00200e417c6a28020010390b200e41106a210e200f41706a220f0d000b0b0240201f41ffffffff0071450d00201010390b201d41106a210e201c201d470d020c040b02402027a7450d00200f10390b201d41106a221d200c470d000c030b0b0b200c201d460d000340201d41106a210a0240201d41086a280200450d00201d41046a28020010390b200a211d200c200a470d000b0b0240202641ffffffff0071450d00202110390b2020417f4c0d004101211d02402020450d0020201038221d450d020b201d2025202010d40b211d200641f0046a200641106a41c40210d40b1a200641c4076a2005360200200641c0076a2004360200200641bc076a2020360200200641b8076a2020360200200641b4076a201d360200200641013602ec04200641113a00e804200641e8046a10c9032001280200211d200620203602f004200620243602ec04200620253602e804201d200641e8046a2000108c042003280200211d02402003280208220a450d00201d10390b2003200a3602082003201d3602002002280200211d02402002280208220a450d00201d10390b2002200a3602082002201d360200200641f00f6a24000f0b1034000b1032000be60301067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a4184c9c800411010cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000bee0503057f017e017f230041306b220224002000420137020041002103200041086a220441003602002001280200210520004100410410772000280200200428020022066a20053600002004200641046a36020020002001410c6a280200220610ac0202400240200141086a28020022050d0041002104410021060c010b20012802042201ad4220862107200521040240034020052f01322108024020010d0020010d02200521030c030b2001450d0120074280808080707c21072001417f6a2101200520084102746a4194036a280200210520042802940321040c000b0b2002411c6a41013602002002420137020c200241c0c0cd003602082002410436022c200241a8b5cd003602282002200241286a360218200241086a41b0b5cd001043000b2002411c6a2008360200200241186a2003360200200220073703102002200436020c2002200136020802402006450d00200041086a2103034020022006417f6a360220200241086a410020041b220828020021050240024020082802082206200828020422042f01324f0d00200421010c010b03400240200428020022010d00410021010c020b200541016a210520042f0130210620012104200620012f01324f0d000b0b024002402005450d00200641027420016a4198036a280200210402402005417f6a2205450d00034020042802940321042005417f6a22050d000b0b410021050c010b200641016a2105200121040b200820043602042008410036020020082005360208200120064102746a41046a2108200120064105746a41346a21060240200041046a22052802002204200328020022016b411f4b0d00200020014120107720052802002104200328020021010b2000280200220520016a2006412010d40b1a2003200141206a2201360200200828020021060240200420016b41034b0d00200020014104107720032802002101200028020021050b2003200141046a360200200520016a200636000020022802202206450d01200228020c21040c000b0b200241306a24000bed0201077f230041106b22022400200241086a200110c1010240024002402002280208450d00200041003602000c010b0240200228020c2203418080808002490d00200041003602000c010b02400240200341086a22042003490d00024002400240200128020422052004417f6a22064103762204490d000240024020040d00410121070c010b200410382207450d0320074100200410d60b1a0b200720012802002208200410d40b21072001200520046b3602042001200820046a3602000240200641ffffffff014b0d00200720064103756a2201450d05200120074f0d020b02402004450d00200710390b200041003602000c050b200041003602000c040b200641f8ffffff017122012003490d042000200736020020002004ad42208620034103742004410674200120034b1bad843702040c030b1032000b200041003602000c010b418495c500412f41b495c500105b000b200241106a24000f0b41b5e2cc00412f41e4e2cc001035000b34002000419399c70036020420004100360200200041146a4103360200200041106a418890c800360200200041086a420d3702000b910101027f230041f0026b22022400200241003602a8020240410110382203450d0020002003360200200341003a0000200041046a428180808010370200024020022802a8022200450d00024020022802b0022203450d00200010390b200220033602b002200220003602a802200241bc026a280200450d00200241b4026a28020010390b200241f0026a24000f0b1032000bcc0105017f017e027f017e017f024020002802002000280005470d0020002d0004200041096a2d0000470d004200428080808080c000840f0b200041046a220120013100002202a7220141016a22032003410771200141074922041bad3c0000200020003502002205a722064100200341037620041b6aad3e0200200620062d00002200410120014107712201742203722000417e20017771200020037141ff017122001b3a0000200520024220868422024280808080f000832005200242238884842000410047ad422886840b800101057f024002402001280204220241037622030d00410021040c010b200128020021042001200128020822052003200320054b1b2205200241077122066a22034107712002200541037422056b41787172360204200120044100200341037620034108491b6a360200200620057221010b20002001360204200020043602000bc40401077f230041c0006b2202240020024104360204200241bd95cc0036020020022001410376220336020c0240024002400240024002402003450d0020014188024f0d004100210402402003200141077122056a220641037620064107714100476a22060d0041b8c0cd00210741002101410021000c040b200320016a4107712208454103742008722103024020050d0020034108470d002006210120002107410021000c040b024020034108470d00200041016a21072006417f6a21010c040b20050d0120002006417f6a22016a210420002107410021000c020b200241286a41146a4102360200200241346a412e360200200241106a41146a410336020020024204370214200241f4b6c300360210200241f0b6c3003602302002410436022c2002200241286a36022020022002410c6a36023820022002360228200241106a4194b7c3001043000b20064101460d02200041016a21072006417e6a2101200620006a417f6a21040b417f417f200874417f7320034108461b20042d00007121040b02402001450d002007417f6a210303402004410874200320016a2d00007221042001417f6a22010d000b0b2000450d0141ff0121012004410820056b41ff0171220374410020034120491b210402400240200541ff01710d00200541077121030c010b417f410020056b41077174417f73200541077122037421010b2004200120002d0000712003767221040c010b417f417f200320056b220141077174417f7320057420014108461b20002d00007120057621040b200241c0006a240020040b910301037f230041306b2202240020022001360214024002400240024020014180808080024f0d0002400240200141037620014107714100476a22030d00410121040c010b200310382204450d020b20002003360208200041003602042000200436020020022001360210200341ffffffff01712003470d0220022003410374220336021420032001490d03200020014103743602040240200141037641ffffff1f7120014107714100476a2201450d000340200441003a0000200441016a21042001417f6a22010d000b0b200241306a24000f0b2002410c6a41023602002002412c6a41023602002002420237021c200241dcb6cd00360218200241d8b6cd0036020820024102360204200220023602282002200241146a360200200241186a41dc9ac8001043000b1032000b41bcb6cd00411c418cb7cd00105b000b2002410c6a41023602002002412c6a41023602002002420237021c200241dcb6cd0036021820024102360204200220023602282002200241146a3602082002200241106a360200200241186a419cb7cd001043000bd41102077f027e230041b0016b220b240002400240200128022c20034f0d00200041003602000c010b024002400240024002400240024002400240024002402004280200450d00200b41206a41ecc0cc00410510cb01200b41306a41a8f0c200411210cb01200b200236024c200b200b41cc006a410410cc01370350200b41e4006a200b41cc006a41046a360200200b200b41d8006a36025c200b200b41cc006a360260200b200b41d0006a360258200b41c0006a200b41d8006a108301200b280248220c41206a2203417f4c0d010240024020030d004101210d0c010b20031038220d450d030b4100210e200b4100360260200b200d360258200b200336025c02402003410f4b0d00200b41d8006a410041101077200b28025c2103200b280258210d200b280260210e0b200d200e6a220f200b290020370000200f41086a200b41206a41086a290000370000200b200e41106a220e36026002402003200e6b410f4b0d00200b41d8006a200e41101077200b28025c2103200b280258210d200b280260210e0b200d200e6a220f200b290030370000200f41086a200b41306a41086a290000370000200b200e41106a220e360260200b280240210f02402003200e6b200c4f0d00200b41d8006a200e200c1077200b280258210d200b280260210e0b200d200e6a200f200c10d40b1a200e200c6a21030240200b280244450d00200b28024010390b200b41186a200b280258220e200310ce03200b28021c2103200b280218210d0240200b28025c450d00200e10390b02400240200d4101460d00200b41306a2002109e06200b41d8006a200b2802302210200b280238109f0641002802d8974e2103200b280258210e4100200b280260200b280264220c410246220f1b210d200b28025c21110240200b280234450d00201010390b2003200e200f1b210e02400240200d0d000c010b200d410374200e6a41786a28020021030b0240200c4102460d00201141ffffffff0171450d00200e10390b200d450d010b024020012802cc01220d2003490d004100200d20036b22032003200d4b1b20012802444f0d010b200041013602000c0c0b200441086a28020020012802284d0d00200041023602000c0b0b200b41d8006a200210ff07200b280260210d200b280258210341002104200b41246a41003a0000200b4100360220200b41106a2003200d200b41206a4105410010e60102400240200b280210450d00200b200b2802142204410520044105491b360234200b200b41206a360230200b41086a200b41306a10c101200b28020c210d200b2802084521040c010b0b0240200b28025c450d00200310390b4100210e200d410020041b210302400240024020050d0020030d010b200320054f0d012003ad4220862005ad8421124101210e0b2000200e36020420004103360200200041086a20123702000c0b0b0240200128023c220420074f0d00410021010c050b200b41d8006a2002108008200b41306a200b2802582205200b28026010de03200b2802304101462103200b2802342104200b41386a280200210d0240200b28025c450d00200510390b2004410020031b210f200d410020031b210d024020070d00200f21070c040b2007410c6c210e200641086a21032001280238210c410021050240034020032802002204200c4b0d012003410c6a21032005417f6a21052004200d6a210d200e41746a220e450d040c000b0b410020056b2107410121010c040b1034000b1032000b200f20056b21070b02402007200128023022044d0d00410221010c010b0240200d200128023422044d0d0041032101200d21070c010b20012802cc012104200b41d8006a200210d705200b200b2802582205200b28026010ce03200b2802042103200b280200210d0240200b28025c450d00200510390b0240200d4101470d0020032008490d002003ad4220862008ad842112410021010c060b0240200420084f0d002004ad4220862008ad842112410121010c060b024020042008460d00200b41d8006a200210d605200b41306a200b280258220d200b28026010f508200b2902344200200b28023022031b211341002802d8974e21040240200b28025c450d00200d10390b2003200420031b210e2013422088a7220c450d0341002103200c210d200c21040240034002400240200e200d41017620036a220d4104746a280200220520084f0d00200d41016a21030c010b200d210420052008460d020b200420036b210d200420034b0d000b2008ad2112200c450d06200c4104742103200e41086a210103400240200128020041ffffffff0371450d002001417c6a28020010390b200141106a2101200341706a22030d000c070b0b200c4104742104200e41086a210303400240200328020041ffffffff0371450d002003417c6a28020010390b200341106a2103200441706a22040d000b201342ffffffff0083500d00200e10390b20012802402201200a4f0d014100210d0c030b2000200136020420004104360200200041106a200c3602002000410c6a2004360200200041086a20073602000c050b0240200a450d002009200a4104746a21084100210a41012101034020092802002103024020014101710d002003200d4b0d004101210d0c040b200b41306a2002200310fd03200b41d8006a200b280230220d200b28023810fe030240200b2d008c0122014102460d00200b28028801210e200b280284012107200b280280012104200b28027c2105200b280278210c0b0240200b280234450d00200d10390b4102210d024020014102470d0020032104200221010c040b02402009410c6a280200220120044d0d004103210d0c040b02402001200e6a220120054d0d004104210d200521040c040b0240200741016a2201200c4d0d004105210d200c21040c040b200a41016a210a410021012003210d2008200941106a2209470d000b0b200041073602000c040b2008ad21120c010b2000200d36020420004106360200200041106a20043602002000410c6a2001360200200041086a200a3602000c020b41022101201342ffffffff0083500d00200e10390b2000200136020420004105360200200041086a20123702000b200b41b0016a24000bf40701027f230041106b220224000240024002400240024002400240024020002802000e0701020304050600010b2002200128021841d299c800410c2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41e099c80010651a20022d0008210120022802042203450d06200141ff017121004101210120000d06024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d070b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c060b20012802184194adcc0041102001411c6a28020028020c11000021010c050b20012802184198a8c70041142001411c6a28020028020c11000021010c040b200128021841b4a8c700410f2001411c6a28020028020c11000021010c030b2002200128021841f099c80041192001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a418c9ac80010651a20022d0008210120022802042203450d02200141ff017121004101210120000d02024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d030b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c020b20022001280218419c9ac800410e2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41ac9ac80010651a20022d0008210120022802042203450d01200141ff017121004101210120000d01024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d020b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010c010b2002200128021841bc9ac800410d2001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200041046a36020c20022002410c6a41cc9ac80010651a20022d0008210120022802042203450d00200141ff017121004101210120000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841c29ec00041012000411c6a28020028020c1100000d010b2002280200220128021841fbb5ca0041012001411c6a28020028020c11000021010b200241106a2400200141ff01714100470bb70202047f017e230041f0016b22042400200441e8016a4200370300200441e0016a22054200370300200441d8016a4200370300200442003703d001200441d0016a41f1d5c400410d10cb012005418bd6c400410c10cb01200441086a200441d0016a412010c703200428025421052004280298012106200441086a2001108904200441d0016a200428020822072004280210109d0720042902d401210820042802d00121010240200428020c450d00200710390b024002402001450d002000200837020420002001360200200041146a2003290000370000200041106a4100200520064102461b3602002000410c6a20023602002000412c6a200341186a290000370000200041246a200341106a2900003700002000411c6a200341086a2900003700000c010b200041003602000b200441f0016a24000bea0301047f230041106b2202240020024100360208200242013703002001280200210320024100410410772002280200200228020822046a20033600002002200441046a360208200141046a200210b502200141246a210302402002280204200228020822056b411f4b0d002002200541201077200228020821050b200228020020056a22042003290000370000200441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a2900003700002002200541206a360208200141c4006a200210b502200141e4006a200210b50220014184016a200210b502200141a4016a210302402002280204200228020822056b413f4b0d002002200541c0001077200228020821050b200228020020056a22042003290000370000200441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a290000370000200441206a200341206a290000370000200441286a200341286a290000370000200441306a200341306a290000370000200441386a200341386a2900003700002002200541c0006a360208200141e4016a200210b50220014184026a200210b502200141a4026a200210b5022000200228020022012002280208109f0102402002280204450d00200110390b200241106a24000bec0101017f230041306b2202240002400240200028020022002802004101470d00200220002802043602002002200041086a280200360204200241146a41023602002002410236020c2001411c6a28020021002002200241046a36021020022002360208200128021821012002412c6a41023602002002420237021c200241ecc4c0003602182002200241086a36022820012000200241186a103b21010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241b8c0cd003602282002420137021c200241fcc4c00036021820012000200241186a103b21010b200241306a240020010b1300200041013602042000418ca8c8003602000b3400200041c2e6c00036020420004100360200200041146a4106360200200041106a4190afc800360200200041086a421a3702000b13002000410436020420004198bbc8003602000b2c01017f02404104103822020d001032000b200020023602002002410536000020004284808080c0003702040b2e01017f02404104103822020d001032000b20002002360200200241a0c21e36000020004284808080c0003702040b2d01017f02404104103822020d001032000b20002002360200200241960136000020004284808080c0003702040ba70c02047f017e02400240024002400240024002400240024020002d00000e080001020304050607000b0240200141046a280200200141086a22002802002202470d002001200241011077200028020021020b200128020020026a41003a00002000200241016a3602000f0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041106a2104200128020020026a41013a00002003200241016a3602002000280204210220012000410c6a280200220010ac020240200041f8036c2200450d0003402002200110ec02200241f8036a2102200041887c6a22000d000b0b2004200110eb020f0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41023a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0503402002200110840a20024198046a2102200041e87b6a22000d000c060b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41033a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b200028021021022001200041186a280200220010ac02200041f8036c450d04200041f8036c210003402002200110ec02200241f8036a2102200041887c6a22000d000c050b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41043a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0303402002200110840a20024198046a2102200041e87b6a22000d000c040b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41053a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0203402002200110840a20024198046a2102200041e87b6a22000d000c030b0b200041186a2104200041106a21050240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41063a00002003200241016a3602002005200110dd022004200110eb022000280204210220012000410c6a280200220010ac02200041f8036c2200450d0103402002200110ec02200241f8036a2102200041887c6a22000d000c020b0b200041106a21040240200141046a2205280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41073a00002003200241016a3602002004200110ec02200029038804210602402005280200200328020022026b41074b0d002001200241081077200141086a28020021020b200128020020026a2006370000200141086a2203200241086a220236020020002903900421060240200141046a220428020020026b41074b0d002001200241081077200328020021020b200128020020026a20063700002003200241086a220236020020002d00012103024020042802002002470d002001200241011077200141086a28020021020b200128020020026a20033a0000200141086a200241016a3602002000280204210220012000410c6a280200220010ac02200041e0076c2200450d0003402002200110ed02200241e0076a2102200041a0786a22000d000b0b0ba70c02047f017e02400240024002400240024002400240024020002d00000e080001020304050607000b0240200141046a280200200141086a22002802002202470d002001200241011077200028020021020b200128020020026a41003a00002000200241016a3602000f0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041106a2104200128020020026a41013a00002003200241016a3602002000280204210220012000410c6a280200220010ac020240200041f8036c2200450d0003402002200110ec02200241f8036a2102200041887c6a22000d000b0b2004200110eb020f0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41023a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0503402002200110840a20024198046a2102200041e87b6a22000d000c060b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41033a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b200028021021022001200041186a280200220010ac02200041f8036c450d04200041f8036c210003402002200110ec02200241f8036a2102200041887c6a22000d000c050b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41043a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0303402002200110840a20024198046a2102200041e87b6a22000d000c040b0b0240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200041206a2104200128020020026a41053a00002003200241016a3602002000280204210220012000410c6a280200220310ac020240200341f8036c2203450d0003402002200110ec02200241f8036a2102200341887c6a22030d000b0b2004200110eb02200028021021022001200041186a280200220010ac0220004198046c2200450d0203402002200110840a20024198046a2102200041e87b6a22000d000c030b0b200041186a2104200041106a21050240200141046a280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41063a00002003200241016a3602002005200110dd022004200110eb022000280204210220012000410c6a280200220010ac02200041f8036c2200450d0103402002200110ec02200241f8036a2102200041887c6a22000d000c020b0b200041106a21040240200141046a2205280200200141086a22032802002202470d002001200241011077200328020021020b200128020020026a41073a00002003200241016a3602002004200110ec02200029038804210602402005280200200328020022026b41074b0d002001200241081077200141086a28020021020b200128020020026a2006370000200141086a2203200241086a220236020020002903900421060240200141046a220428020020026b41074b0d002001200241081077200328020021020b200128020020026a20063700002003200241086a220236020020002d00012103024020042802002002470d002001200241011077200141086a28020021020b200128020020026a20033a0000200141086a200241016a3602002000280204210220012000410c6a280200220010ac02200041e8036c2200450d0003402002200110e902200241e8036a2102200041987c6a22000d000b0b0bbd0503017f017e057f230041106b22012400200141003602082001420137030020002903002102200141004108107720012802002203200128020822046a20023700002001200441086a2204360208200029030821020240200128020420046b41074b0d00200120044108107720012802002103200128020821040b200320046a20023700002001200441086a2204360208200029031021020240200128020420046b41074b0d002001200441081077200128020821040b200128020020046a20023700002001200441086a360208200028023021042001200041386a280200220310ac0220042003200110a8022000413c6a2104024020012802042205200128020822066b411f4b0d00200120064120107720012802042105200128020821060b2001280200220320066a22072004290000370000200741086a200441086a290000370000200741106a200441106a290000370000200741186a200441186a2900003700002001200641206a2204360208200029031821020240200520046b41074b0d00200120044108107720012802002103200128020821040b200320046a20023700002001200441086a2204360208200029032021020240200128020420046b41074b0d00200120044108107720012802002103200128020821040b200320046a20023700002001200441086a22043602080240024002400240200041286a2d00000e03000102030b024020012802042004470d00200120044101107720012802002103200128020821040b200320046a41003a0000200441016a21040c020b024020012802042004470d00200120044101107720012802002103200128020821040b200320046a41013a0000200441016a21040c010b024020012802042004470d002001200441011077200128020821040b2001280200220320046a41023a0000200441016a21040b200141106a24002004ad4220862003ad840b2a01017f02404101103822010d001032000b2001200041ff01714101463a00002001ad428080808010840be30202037f017e230041106b220124000240410110382202450d00200142013702042001200236020002400240200041ff017122034106460d0041012100200241013a00002001410136020802400240024002400240024020030e06000102030405070b20014101410110772001280200200128020822026a41003a0000200241016a21000c060b20014101410110772001280200200128020822026a41013a0000200241016a21000c050b20014101410110772001280200200128020822026a41023a0000200241016a21000c040b20014101410110772001280200200128020822026a41033a0000200241016a21000c030b20014101410110772001280200200128020822026a41043a0000200241016a21000c020b20014101410110772001280200200128020822026a41053a0000200241016a21000c010b200241003a0000410121000b20013502002104200141106a240020042000ad422086840f0b1032000b13002000410336020420004190c1c8003602000b130020004107360204200041e4c1c8003602000b9f0401067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a4188cac800410510cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000bf50201047f20004201370200200041086a2202410036020002400240024002400240024020012d00000e050001020304050b20004100410110772000280200200228020022006a41003a00002002200041016a3602000f0b20004100410110772000280200200228020022006a41013a00002002200041016a3602000f0b20004100410110772000280200200228020022006a41023a00002002200041016a3602000f0b2000410041011077200041046a280200210320002802002204200228020022056a41033a00002002200541016a2205360200200141016a21020240200320056b411f4b0d002000200541201077200041086a2802002105200028020021040b200420056a22012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200041086a200541206a3602000f0b20004100410110772000280200200228020022006a41043a00002002200041016a3602000b0bdd0601087f23004180016b22032400200341c8006a2001108e08200341d8006a200328024822042003280250108504024020032d005822054101470d00200341306a200341e2006a290100370300200341386a200341ea006a2901003703002003413f6a200341f1006a2900003700002003200329015a37032820032d005921060b0240200328024c450d00200410390b0240024020054101470d00200341206a2003413f6a290000370000200341196a200341386a290300370000200341116a200341306a29030037000020032003290328370009200320063a0008200341d8006a200110960a024020032802642207450d00200328026821080240200341ec006a28020022054102742206417c6a41027641026a410120051b20024d0d000240200841ffffffff0371450d00200710390b200041830c3b0100200041086a4116360200200041046a41e8d4c800360200200041026a41103a00000c030b20032802582109200341d8006a200110970a20032802582205200328026010e0010240200328025c450d00200510390b200720066a210a410021052007210420092102024003402005417e712106410221050240024020064102460d00200921060c010b2004450d02200a2004460d02200441046a2104410321052002417f6a220221060b200341d8006a41186a200141186a290000370300200341d8006a41106a200141106a290000370300200341d8006a41086a200141086a2900003703002003200636027820032001290000370358200341286a200341d8006a10950820032802282206200328023010e001200328022c450d00200610390c000b0b200841ffffffff0371450d00200710390b200341d8006a2001108e0820032802582205200328026010e0010240200328025c450d00200510390b200341d8006a200341086a108f0820032802582205200328026010e0010240200328025c450d00200510390b200341d8006a2001108a0a20032802582205200328026010e0010240200328025c450d00200510390b200341d8006a2001108f0a20032802582205200328026010e0010240200328025c450d00200510390b200341d8006a2001108e0a20032802582205200328026010e0010240200328025c450d00200510390b200110d904200041083a00000c010b20004102108f090b20034180016a24000b8b03010a7f230041206b22012400200142f3e885db96cddbb320370308200141106a200010c70502400240200128021822020d0041002103200128021021040c010b2001280210220441106a210541002106410021034100210702400340024002402003450d00200420074105746a21082004200720066a4105746a21090340200841106a220a2900002001290308510d0220092008290300370300200941186a200841186a290300370300200941106a200a290300370300200941086a200841086a290300370300200941206a2109200841206a21082002200741016a22074b0d000c040b0b200520074105746a2108034020082900002001290308510d01200841206a21082002200741016a22074b0d000b410021030c030b2006417f6a2106200341016a21032002200741016a22074b0d000b0b024020030d00410021030c010b2004200720036b4105746a200420074105746a200220076b41057410d50b1a0b20002004200220036b10ce0a0240200128021441ffffff3f71450d00200410390b200141206a24000b9f0401067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41fec9c800410a10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9f0401067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41f4c9c800410a10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b8407010b7f230041f0006b22022400024002400240024020012802082203200128020c460d00200128021421042001200341246a36020820032d000022054105460d002003410c6a2802002106200341086a2802002107200341046a2802002108024002402005450d00024020054102470d002007450d00200810390b410121084100210141012103200621090c010b200241306a41086a2205200341186a290000370300200241306a41106a220a200341206a2d00003a0000200220032f000122093b00492002200341036a2d0000220b3a004b2002200341106a290000370330200128021021032002200b3a0052200220093b01502002200636005b20022007360057200220083a00532002200841187622093a005620022008410876220b3b0154200241e7006a2005290300370000200241ef006a200a2d00003a00002002200229033037005f200328020841057421012008411076210a20032802002103024003402001450d01200141606a21012003200241d0006a412010d70b2105200341206a210320050d000c040b0b200241186a200241d0006a108f0a200241086a20022802182203200228022010f00820022d000c41017121010240200228021c450d00200310390b2001450d024109210941efd6c80021074113210141062105410321030b200420053a0001200420033a0000200441086a2009360200200441046a2007360200200441036a20013a0000200441026a20013a0000410021030c020b410021010c020b2002412e6a20022d005222013a0000200241186a41086a200241306a41086a290300370300200241186a41106a200241306a41106a2d00003a0000200220013a004f200220022f015022013b004d200220013b012c20022002290330370318410121030b200241146a41026a22052002412c6a41026a2d00003a0000200241d0006a41086a2204200241186a41086a290300370300200241d0006a41106a220c200241186a41106a2d00003a0000200220022f012c3b011420022002290318370350410021012003450d00200020022f01143b00012000410c6a2006360000200041086a2007360000200041076a20093a0000200041066a200a3a0000200041056a200b3a0000200041046a20083a0000200041106a2002290350370000200041036a20052d00003a0000200041186a2004290300370000200041206a200c2d00003a0000410121010b200020013a0000200241f0006a24000be60301067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41e4c9c800411010cb01200220013602342002200241346a410410cc01370338200241cc006a200241346a41046a3602002002200241c0006a3602442002200241346a3602482002200241386a360240200241286a200241c0006a108301024002402002280230220341206a2201417f4c0d000240024020010d00410121040c010b200110382204450d020b2000200436020041002105200041086a22064100360200200041046a2207200136020002402001410f4b0d00200041004110107720062802002105200028020021040b200420056a22012002290008370000200141086a200241086a41086a2900003700002006200541106a220136020002402007280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b200041086a2206200141106a22043602002000280200220720016a22012002290018370000200141086a200241186a41086a290000370000200228022821010240200520046b20034f0d00200020042003107720062802002104200028020021070b200720046a2001200310d40b1a2006200420036a3602000240200228022c450d00200110390b200241d0006a24000f0b1034000b1032000be80501067f230041e0006b22032400200341086a41f0c8c800410710cb01200341186a419fc9c800411210cb01200320013602482003200341c8006a410410cc01370338200341dc006a2204200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a10830102400240412010382201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001412010cc013703482004200141206a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012001103920032802302202200328024022046a41206a2201417f4c0d010240024020010d00410121050c010b200110382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200136020002402001410f4b0d00200041004110107720072802002106200028020021050b200520066a22012003290008370000200141086a200341086a41086a2900003700002007200641106a220136020002402008280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b2000280200220620016a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200141106a2201360200200328022821080240200520016b20024f0d002000200120021077200041046a280200210520072802002101200028020021060b200620016a2008200210d40b1a2007200120026a2201360200200328023821020240200520016b20044f0d002000200120041077200041086a2802002101200028020021060b200620016a2002200410d40b1a200041086a200120046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000be80501067f230041e0006b22032400200341086a41f0c8c800410710cb01200341186a41b1c9c800411210cb01200320013602482003200341c8006a410410cc01370338200341dc006a2204200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a10830102400240412010382201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001412010cc013703482004200141206a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012001103920032802302202200328024022046a41206a2201417f4c0d010240024020010d00410121050c010b200110382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200136020002402001410f4b0d00200041004110107720072802002106200028020021050b200520066a22012003290008370000200141086a200341086a41086a2900003700002007200641106a220136020002402008280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b2000280200220620016a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200141106a2201360200200328022821080240200520016b20024f0d002000200120021077200041046a280200210520072802002101200028020021060b200620016a2008200210d40b1a2007200120026a2201360200200328023821020240200520016b20044f0d002000200120041077200041086a2802002101200028020021060b200620016a2002200410d40b1a200041086a200120046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000beb1e070c7f037e0d7f037e017f027e057f230041b0036b22042400200441286a2001108a0a200428022821052004200428023022063602a401200420053602a001200441e0006a2005200610e401024002400240024020042802602207450d002004280264210802400240200441e8006a2802002209450d004100210a4106210602400240024002400240024020072d00000e050500010203070b4101210a0c030b4102210a0c020b20094101460d0320072d00012106200441013602c002200420063a00c40220094102460d0320072d00022106200441023602c002200420063a00c50220094103460d0320072d00032106200441033602c002200420063a00c60220094104460d03200441043602c002200420072d00043a00c70220094105460d03200441c8026a20072d00053a0000200441053602c00220094106460d03200441c9026a20072d00063a0000200441063602c00220094107460d03200441ca026a20072d00073a0000200441073602c00220094108460d03200441cb026a20072d00083a0000200441083602c00220094109460d03200441cc026a20072d00093a0000200441093602c0022009410a460d03200441cd026a20072d000a3a00002004410a3602c0022009410b460d03200441ce026a20072d000b3a00002004410b3602c0022009410c460d03200441cf026a20072d000c3a00002004410c3602c0022009410d460d03200441d0026a20072d000d3a00002004410d3602c0022009410e460d03200441d1026a20072d000e3a00002004410e3602c0022009410f460d03200441d2026a20072d000f3a00002004410f3602c00220094110460d03200441d3026a20072d00103a0000200441103602c00220094111460d03200441d4026a20072d00113a0000200441113602c00220094112460d03200441d5026a20072d00123a0000200441123602c00220094113460d03200441d6026a20072d00133a0000200441133602c00220094114460d03200441d7026a20072d00143a0000200441143602c00220094115460d03200441d8026a20072d00153a0000200441153602c00220094116460d03200441d9026a20072d00163a0000200441163602c00220094117460d03200441da026a20072d00173a0000200441173602c00220094118460d03200441db026a20072d00183a0000200441183602c00220094119460d03200441dc026a20072d00193a0000200441193602c0022009411a460d03200441dd026a20072d001a3a00002004411a3602c0022009411b460d03200441de026a20072d001b3a00002004411b3602c0022009411c460d03200441df026a20072d001c3a00002004411c3602c0022009411d460d03200441e0026a20072d001d3a00002004411d3602c0022009411e460d03200441e1026a20072d001e3a00002004411e3602c0022009411f460d03200441e2026a20072d001f3a00002004411f3602c00220094120460d03200441e3026a20072d00203a0000200441a0026a41026a200441cd026a2d00003a0000200441d0016a41026a200441d4026a2d00003a0000200420042f01c4023b01e001200420042d00c6023a00e2012004200441cb026a2f00003b01a0022004200441d2026a2f01003b01d001200441dc026a280200210b200441d5026a280000210c200441ce026a280100210d200441203602c002200441c0026a41206a280200210e20042800c702210f200441ac036a41026a200441db026a2d00003a00002004200441d9026a2f00003b01ac034103210a0c020b4104210a0b0b200441a8036a41026a20042d00e2013a0000200441a4036a41026a200441a0026a41026a2d00003a0000200441a0036a41026a200441d0016a41026a2d00003a00002004419c036a41026a200441ac036a41026a2d00003a0000200420042f01e0013b01a803200420042f01a0023b01a403200420042f01d0013b01a003200420042f01ac033b019c03200a21060c010b410621060b0240024020064106470d00200442003702e40120044100280284ee4d3602e0012004410d3602a4022004200441a0016a3602a0022004200441e0016a3602d001200441d4026a4101360200200442013702c402200441949fc5003602c0022004200441a0026a3602d002200441d0016a41b4dfc400200441c0026a103b1a20042802e00120042802e80110d101024020042802e401450d0020042802e00110390b410521060c010b200441cc016a41026a200441a8036a41026a2d00003a0000200441c8016a41026a200441a4036a41026a2d00003a0000200441c4016a41026a200441a0036a41026a2d00003a0000200441c0016a41026a2004419c036a41026a2d00003a0000200420042f01a8033b01cc01200420042f01a4033b01c801200420042f01a0033b01c401200420042f019c033b01c0010b02402008450d00200710390b20064105470d010b200428022c450d01200510390c010b200441ac036a41026a200441cc016a41026a2d00003a0000200441a8036a41026a200441c8016a41026a2d00003a0000200441a4036a41026a200441c4016a41026a2d00003a0000200441a0036a41026a200441c0016a41026a2d00003a0000200420042f01cc013b01ac03200420042f01c8013b01a803200420042f01c4013b01a403200420042f01c0013b01a0030240200428022c450d00200510390b42002110024002400240024020060e050401000205040b200441e0006a2001108e08200441c0026a200428026022052004280268108504024020042d00c0024101470d00200441e0016a41186a2201200441d9026a290000370300200441e0016a41106a2206200441d1026a290000370300200441e0016a41086a2207200441c9026a290000370300200420042900c1023703e00102402004280264450d00200510390b200441c0026a41186a2001290300370300200441c0026a41106a2006290300370300200441c0026a41086a2007290300370300200420042903e0013703c002200441086a200441c0026a2002200310e206200441086a41086a2903002111200429030821120c030b02402004280264450d00200510390b0c040b200441c0026a20012002200310e10620042802c002410147ad2110200441d0026a2903002111200441c8026a29030021120c030b200441c9026a200441a8036a41026a2d00003a0000200441d0026a200441a4036a41026a2d00003a0000200441d7026a200441a0036a41026a2d00003a0000200420042f01ac033b01c0022004200f3600c302200420042f01a8033b00c7022004200d3601ca02200420042f01a4033b01ce022004200c3600d102200420042f01a0033b00d5022004200441ac036a41026a2d00003a00c2022004200e3602dc022004200b3602d802200441186a200441c0026a2002200310e206200441206a2903002111200429031821120b420121100c010b200441e0016a2001108e08200441c0026a20042802e001220520042802e8011085040240024020042d00c0024101470d00200441a0016a41186a2206200441d9026a290000370300200441a0016a41106a2207200441d1026a290000370300200441a0016a41086a2208200441c9026a290000370300200420042900c1023703a001024020042802e401450d00200510390b200441a0026a41186a2006290300370300200441a0026a41106a2007290300370300200441a0026a41086a2008290300370300200420042903a0013703a002200441d0016a200441a0026a108f08200441c0026a20042802d001220c20042802d801109008024020042802e002220a450d00200441e0016a41186a2208200441c0026a41186a2205290300370300200441e0016a41106a220f200441c0026a41106a2206290300370300200441e0016a41086a220d200441c0026a41086a2207290300370300200441286a41086a2209200441ec026a2213290200370300200441286a41106a2214200441f4026a2215290200370300200441286a41186a2216200441fc026a2217290200370300200441286a41206a221820044184036a2219290200370300200441286a41286a221a2004418c036a221b290200370300200441286a41306a221c20044194036a221d280200360200200420042903c0023703e001200420042902e402370328024020042802d401450d00200c10390b200441c0026a41206a20042903e00122113703002005200441a0016a41186a29030022123703002006200441a0016a41106a221e29030022103703002007200441a0016a41086a221f2903002220370300200441c0026a41286a200d2903002221370300200441c0026a41306a200f2903002222370300200441c0026a41386a222320082903002224370300200420042903a00122253703c002200441e0006a41386a22262024370300200441e0006a41306a22272022370300200441e0006a41286a22282021370300200441e0006a41206a22292011370300200441e0006a41186a220c2012370300200441e0006a41106a220b2010370300200441e0006a41086a220e202037030020042025370360200441e0016a41386a222a2026290300370300200441e0016a41306a22262027290300370300200441e0016a41286a22272028290300370300200441e0016a41206a222820292903003703002008200c290300370300200f200b290300370300200d200e290300370300200420042903603703e001200441a0026a41186a200c290300370300200441a0026a41106a200b290300370300200441a0026a41086a200e290300370300200420042903603703a0022005202a29030037030020062026290300370300200720272903003703002004200a3602e002200420282903003703c002200441e4026a200429032837020020132009290300370200201520142903003702002017201629030037020020192018290300370200201b201a290300370200201d201c2802003602002005290300211120062006290300221220027c22103703002005201120037c2010201254ad7c3703002007200729030020037c20042903c002221120027c2210201154ad7c2220370300200420103703c002200441a0016a20012002200310e106201e2903002111201f290300211220042802a001210542f3e885db96cddbb320202320102020411f109108200441a0016a200441a0026a108f0820042802a001220120042802a801200441c0026a109208024020042802a401450d00200110390b024020042802e4022201450d00200141186c450d0020042802e00210390b200541014721050240200441f0026a28020041ffffffff0371450d0020042802ec0210390b2005ad21100c030b20042802d401450d01200c10390c010b20042802e401450d0020051039420021100c010b420021100b200041106a20113703002000201237030820002010370300200441b0036a24000bb21301067f230041d0006b22012400200141086a41f0c8c800410710cb01200141186a4194c9c800410b10cb01200120003602342001200141346a410410cc01370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a108301024002402001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520014100360248200120043602402001200336024402402003410f4b0d00200141c0006a4100411010772001280244210320012802402104200128024821050b200420056a22062001290008370000200641086a200141086a41086a2900003700002001200541106a22053602480240200320056b410f4b0d00200141c0006a2005411010772001280244210320012802402104200128024821050b200420056a22062001290018370000200641086a200141186a41086a2900003700002001200541106a2205360248200128022821060240200320056b20024f0d00200141c0006a20052002107720012802402104200128024821050b200420056a2006200210d40b1a200520026a21030240200128022c450d00200128022810390b20012802402204200310e10102402001280244450d00200410390b200141086a41f0c8c800410710cb01200141186a419fc9c800411210cb01200120003602342001200141346a410410cc01370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a1083012001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520014100360248200120043602402001200336024402402003410f4b0d00200141c0006a4100411010772001280244210320012802402104200128024821050b200420056a22062001290008370000200641086a200141086a41086a2900003700002001200541106a22053602480240200320056b410f4b0d00200141c0006a2005411010772001280244210320012802402104200128024821050b200420056a22062001290018370000200641086a200141186a41086a2900003700002001200541106a2205360248200128022821060240200320056b20024f0d00200141c0006a20052002107720012802402104200128024821050b200420056a2006200210d40b1a200520026a21030240200128022c450d00200128022810390b20012802402204200310e10102402001280244450d00200410390b200141086a41f0c8c800410710cb01200141186a41b1c9c800411210cb01200120003602342001200141346a410410cc01370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a1083012001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520014100360248200120043602402001200336024402402003410f4b0d00200141c0006a4100411010772001280244210320012802402104200128024821050b200420056a22062001290008370000200641086a200141086a41086a2900003700002001200541106a22053602480240200320056b410f4b0d00200141c0006a2005411010772001280244210320012802402104200128024821050b200420056a22062001290018370000200641086a200141186a41086a2900003700002001200541106a2205360248200128022821060240200320056b20024f0d00200141c0006a20052002107720012802402104200128024821050b200420056a2006200210d40b1a200520026a21030240200128022c450d00200128022810390b20012802402204200310e10102402001280244450d00200410390b200141086a41f0c8c800410710cb01200141186a41c3c9c800411310cb01200120003602342001200141346a410410cc01370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a1083012001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520014100360248200120043602402001200336024402402003410f4b0d00200141c0006a4100411010772001280244210320012802402104200128024821050b200420056a22062001290008370000200641086a200141086a41086a2900003700002001200541106a22053602480240200320056b410f4b0d00200141c0006a2005411010772001280244210320012802402104200128024821050b200420056a22062001290018370000200641086a200141186a41086a2900003700002001200541106a2205360248200128022821060240200320056b20024f0d00200141c0006a20052002107720012802402104200128024821050b200420056a2006200210d40b1a200520026a21030240200128022c450d00200128022810390b20012802402204200310e00102402001280244450d00200410390b200141c0006a200010ef0920012802402203200128024810e00102402001280244450d00200310390b200141086a41f0c8c800410710cb01200141186a41d6c9c800410e10cb01200120003602342001200141346a410410cc01370338200141cc006a200141346a41046a3602002001200141c0006a3602442001200141346a3602482001200141386a360240200141286a200141c0006a1083012001280230220241206a2203417f4c0d000240024020030d00410121040c010b200310382204450d020b4100210520014100360248200120043602402001200336024402402003410f4b0d00200141c0006a4100411010772001280244210320012802402104200128024821050b200420056a22062001290008370000200641086a200141086a41086a2900003700002001200541106a22053602480240200320056b410f4b0d00200141c0006a2005411010772001280244210320012802402104200128024821050b200420056a22062001290018370000200641086a200141186a41086a2900003700002001200541106a2205360248200128022821060240200320056b20024f0d00200141c0006a20052002107720012802402104200128024821050b200420056a2006200210d40b1a200520026a21030240200128022c450d00200128022810390b20012802402204200310e00102402001280244450d00200410390b200141c0006a200010840820012802402200200128024810e00102402001280244450d00200010390b200141d0006a24000f0b1034000b1032000ba50302077f017e230041f0006b22022400200241086a200110970a2002280208210120022002280210220336021c20022001360218200241206a2001200310e40102400240200228022022040d00410021030c010b2002280224210502400240200241286a28020022034104490d002003417c7122064104460d0020064108460d0020042800002107200428000421082002200341746a36023420022004410c6a36023020042800082106200241d8006a200241306a108f0520022802582203450d00200229025c21090c010b2002420037023c4100210320024100280284ee4d3602382002410d36024c2002200241186a3602482002200241386a360254200241ec006a41013602002002420137025c200241949fc5003602582002200241c8006a360268200241d4006a41b4dfc400200241d8006a103b1a2002280238200228024010d1010240200228023c450d00200228023810390b0b2005450d00200410390b02402003450d00200020093702102000200636020820002008360204200020073602000b2000200336020c0240200228020c450d00200110390b200241f0006a24000b9f0401067f230041d0006b22022400200241086a41f0c8c800410710cb01200241186a41c4d4c800410d10cb0102400240412010382203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003412010cc01370338200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a108301200310392002280230220441206a2203417f4c0d010240024020030d00410121010c010b200310382201450d010b2000200136020041002105200041086a22064100360200200041046a2207200336020002402003410f4b0d00200041004110107720062802002105200028020021010b200120056a22032002290008370000200341086a200241086a41086a2900003700002006200541106a220336020002402007280200220520036b410f4b0d002000200341101077200041046a2802002105200041086a28020021030b200041086a2206200341106a22013602002000280200220720036a22032002290018370000200341086a200241186a41086a290000370000200228022821030240200520016b20044f0d00200020012004107720062802002101200028020021070b200720016a2003200410d40b1a2006200120046a3602000240200228022c450d00200310390b200241d0006a24000f0b1032000b1034000b9f09050c7f017e027f017e027f230041d0006b22022400200241106a2001108c0202400240024002402002280210450d00200041013602000c010b200228021421032001200128020441016a22043602040240200420012802084b0d002002420037021c024002402003450d00200241286a41086a2105200241316a2106200241326a2107200241336a21084100210903400240024020012802002204280204220a450d002004280200220b2d0000210c2004200a417f6a220d3602042004200b41016a3602002002200c3a002c200d450d002004280200220b2d0000210c2004200a417e6a220d3602042004200b41016a3602002002200c3a002d200d450d002004280200220b2d0000210c2004200a417d6a220d3602042004200b41016a3602002002200c3a002e200d450d002004280200220b2d0000210c2004200a417c6a220d3602042004200b41016a3602002002200c3a002f200d450d002004280200220b2d0000210c2004200a417b6a220d3602042004200b41016a3602002005200c3a0000200d450d002004280200220b2d0000210c2004200a417a6a220d3602042004200b41016a3602002006200c3a0000200d450d002004280200220b2d0000210c2004200a41796a220d3602042004200b41016a3602002007200c3a0000200d450d0020082004280200220b2d00003a00002004200a41786a3602042004200b41016a360200200229022c210e200241086a2001108c0220022802080d002004280204220b200228020c220a490d00200a417f4c0d0702400240200a0d004101210c0c010b200a1038220c450d09200c4100200a10d60b1a2004280204210b0b200b200a4f0d01200c10390b200241286a41086a200241186a41086a28020036020020022002290318370328200241286a10990a410121040c030b200c2004280200220d200a10d40b210f2004200b200a6b3602042004200d200a6a3602002002200e37032802400240200228021c220d450d00200228021821100c010b41e4011038220d450d0741002110200d4100360200200d41003b018a012002200d36021c200241003602180b200941016a2109200aad22114220862011842111024002400340200d2f018a01221241037421134100210b417f210a4100210402400340024020132004470d002012210a0c020b200241286a200d20046a418c016a410810d70b220c450d03200a41016a210a200b410c6a210b200441086a2104200c417f4a0d000b0b02402010450d002010417f6a2110200d200a4102746a41e4016a280200210d0c010b0b2002200e3703382002200a3602302002200d36022c200241003602282002200241186a360234200220113702442002200f360240200241286a200241c0006a10bc070c010b200d200b6a220441086a220a280200210b200a2011370200200441046a220a2802002104200a200f3602002004450d00200b450d00200410390b20092003470d000b0b20002002290318220e370204200241286a41086a200241186a41086a28020022043602002000410c6a20043602002002200e370328410021040b2000200436020020012001280204417f6a3602040c010b200041013602000b200241d0006a24000f0b1034000b1032000b9a0303067f017e017f200028020421012000410036020402402001450d00024020002802002202450d00034020012802e40121012002417f6a22020d000b0b024020002802082203450d004100210003400240024002400240200020012f018a01490d0041002100034041002102024020012802002204450d00200041016a210520012f0188012106200421020b024041940241e40120001b450d00200110390b024020020d00410021010c050b2005210020022101200620022f018a014f0d000b20022006410c6c6a41046a2104024020050d00200221010c020b200641027420026a41e8016a280200210102402005417f6a2200450d00034020012802e40121012000417f6a22000d000b0b410021000c020b20012000410c6c6a41046a210420002106200121020b200641016a21000b20022006410c6c6a41086a2902002107200428020021080b2008450d022003417f6a210302402007a7450d00200810390b20030d000b0b41002102034020012802002100024041940241e40120021b450d00200110390b2002417f6a21022000210120000d000b0b0b990101057f2001280204210241002103200141003602042001280200210420014100280284ee4d36020002400240200241037622050d000c010b2001200128020822032005200520034b1b2205200241077122066a22034107712002200541037422056b41787172360204200120044100200341037620034108491b6a36020020062005722101200421030b20002001360204200020033602000b130020004108360204200041accdc8003602000bda0706017f017e047f037e037f067e230041c0026b2202240042002103420042004280f985d404420010a7062104200241e0016a22054200370300200241d0016a41086a4208370300200241ec016a22064180023b0100200241e8016a2207200436020041012104200241013602b802200241003602d001024002404100450d0042012108420021090c010b0240024002404101450d004200210a0c010b200241c8016a210b4101210c420021080340200241b0016a200842002001420010d30b200241c0016a200142002001420010d30b200820022903b801220184200184420052200b290300220120022903b001220a200a7c7c220a200154720d0220022903c0012101200c410271210d200c4101762204210c200a2108200d450d000b0b0240200441024f0d0020012108200a21090c020b200241a0016a41086a210d20012108200a2109034020024190016a200a42002001420010d30b200241a0016a200142002001420010d30b200a200229039801220184200184420052200d2903002201200229039001220a200a7c7c220a200154720d0120022903a001210102402004410271450d00200241e0006a200942002001420010d30b200241f0006a200a42002008420010d30b20024180016a200842002001420010d30b2009420052200a4200527120022903684200527220022903784200527220024180016a41086a2903002208200229036020022903707c7c2209200854720d0220022903800121080b200441034b210c20044101762104200a210a200c0d000c020b0b427f2108427f21090b200241d0006a20082009428094ebdc03420010d20b200241306a2005290300220a42002008420010d30b200241206a2009420020022903d8012201420010d30b200241c0006a200142002008420010d30b0240024020062d0000450d00420021010c010b2002290338210e2002290328210f2002290320211020022903302111200241c0006a41086a2903002101200728020021042002290350210320022903402112200241106a20082009428094ebdc03420010da0b20022002290310200241106a41086a2903002004ad2208420010d30b427f200241086a29030020022903002213417f200320087e2208428094ebdc0380a7200842ffffffffffbfb2cd3b561b2008428094ebdc03824280cab5ee01566aad7c2208201354ad7c2203427f2001201120107c7c2210200a420052200942005271200e42005272200f4200527220102001547222041b7c2008427f201220041b7c220a2008542204ad7c22012004200120035420012003511b22041b2101427f200a20041b21030b2000200337030020002001370308200241c0026a24000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210dd060b0f0b200041086a108d02200041046a2202280200109d0a200228020010390bdd4e030a7f057e027f230041d0056b220724000240024002400240024002400240024020012903204202520d00200741e0006a41206a22084200370300200741e0006a41146a22054200370200200741013a008801200741002802d8974e220936027c200720093602702007427f3703682007420037036020074198046a41206a220a420037030020074198046a41146a220b4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a004200742003703980420074198016a200741e0006a20074198046a10eb01200741e0006a41286a220c20074198016a41286a290300370300200820074198016a41206a290300370300200741e0006a41186a220d20074198016a41186a290300370300200741e0006a41106a220e20074198016a41106a290300370300200741e0006a41086a220f20074198016a41086a2903003703002007200729039801370360200a4200370300200b4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741c8016a200741e0006a20074198046a10eb01200c200741c8016a41286a2903003703002008200741c8016a41206a290300370300200d200741c8016a41186a290300370300200e200741c8016a41106a290300370300200f200741c8016a41086a290300370300200720072903c801370360200a4200370300200b4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741f8016a200741e0006a20074198046a10eb01200c200741f8016a41286a2903003703002008200741f8016a41206a290300370300200d200741f8016a41186a290300370300200e200741f8016a41106a290300370300200f200741f8016a41086a290300370300200720072903f801370360200a4200370300200b4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741a8026a200741e0006a20074198046a10eb01200c200741a8026a41286a2903003703002008200741a8026a41206a290300370300200d200741a8026a41186a290300370300200e200741a8026a41106a290300370300200f200741a8026a41086a290300370300200720072903a802370360200a4200370300200b4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741d8026a200741e0006a20074198046a10eb01200741b8036a41286a200741d8026a41286a290300370300200741b8036a41206a200741d8026a41206a290300370300200741b8036a41186a2210200741d8026a41186a290300370300200741b8036a41106a200741d8026a41106a290300370300200741b8036a41086a200741d8026a41086a290300370300200720072903d8023703b80320074198046a20032004200610d509200f20074198046a410c6a290200370300200e200b290200370300200d20074198046a411c6a290200370300200820074198046a41246a290200370300200c20074198046a412c6a29020037030020074190016a200741cc046a2802003602002007200729029c0437036020072d009804220a4101470d0120072d009b04210920072f0099042108200741013a00980420072008200941107472220b3b0099042007200b4110763a009b0420072802c803210c024020102802002209450d002009410c6c2108200c210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b0240200741cc036a2802002209450d002009410c6c450d00200c10390b20072802d403210c0240200741dc036a2802002209450d002009410c6c2108200c210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b200741d8036a2802002209450d042009410c6c450d04200c10390c040b200741e0006a41206a22084200370300200741e0006a41146a4200370200200741013a008801200741002802d8974e220936027c20072009360270427f21112007427f3703682007420037036020074198046a41206a220b420037030020074198046a41146a220a4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a004200742003703980420074198016a200741e0006a20074198046a10eb01200741e0006a41286a220c20074198016a41286a290300370300200820074198016a41206a290300370300200741e0006a41186a220d20074198016a41186a290300370300200741e0006a41106a220e20074198016a41106a290300370300200741e0006a41086a220f20074198016a41086a2903003703002007200729039801370360200b4200370300200a4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741c8016a200741e0006a20074198046a10eb01200c200741c8016a41286a2903003703002008200741c8016a41206a290300370300200d200741c8016a41186a290300370300200e200741c8016a41106a290300370300200f200741c8016a41086a290300370300200720072903c801370360200b4200370300200a4200370200200741013a00c004200720093602b404200720093602a8042007427f3703a0042007420037039804200741f8016a200741e0006a20074198046a10eb01200c200741f8016a41286a2903003703002008200741f8016a41206a290300370300200d200741f8016a41186a290300370300200e200741f8016a41106a290300370300200f200741f8016a41086a290300370300200720072903f80137036020074198046a41186a2208420037030020074198046a41106a220c420037030020074198046a41086a220d42003703002007420037039804200741b8036a41c7e5c000410610cb01200d200741b8036a41086a220e290000370300200720072900b80337039804200741b8036a419081c400410610cb012008200e290000370300200c20072900b803370300200741306a20074198046a412010ce032007280234410020072802301bad2112024020012903204201520d00200129032822114200510d02200141306a290300221320117c4200201220137d221320132012561b22137c20132011827d21110b200b4200370300200a4200370200200741013a00c004200720093602b404200720093602a804200742003703980420074200201120127d221220122011561b3703a004200741a8026a200741e0006a20074198046a10eb01200741e8036a41286a200741a8026a41286a290300370300200741e8036a41206a200741a8026a41206a290300370300200741e8036a41186a200741a8026a41186a290300370300200741e8036a41106a200741a8026a41106a290300370300200741e8036a41086a200741a8026a41086a290300370300200720072903a8023703e803200741b8036a200110df0320074198046a20072802b803220b20072802c00310e003200741e0046a28020041002007290398044201511b2108024020072802bc03450d00200b10390b024002402001280238220b2008490d00410c1038220a450d0641041038220c450d06200a200c360200200a41046a220f42043702004100210e200a410041201077200a280200200a41086a220d28020022026a220c2001290000370000200c41186a200141186a290000370000200c41106a200141106a290000370000200c41086a200141086a290000370000200d200241206a220c3602000240200f280200200c6b41034b0d00200a200c41041077200d280200210c0b200a280200200c6a200b360000200d200c41046a3602002009210c02402008200b4f0d00410c1038220c450d07410410382208450d07200b417f6a210d200c2008360200200c41046a220e4204370200200c410041201077200c280200200c41086a220b280200220f6a22082001290000370000200841186a200141186a290000370000200841106a200141106a290000370000200841086a200141086a290000370000200b200f41206a22083602000240200e28020020086b41034b0d00200c200841041077200b28020021080b200c28020020086a200d360000200b200841046a3602004101210e0b200741e0006a41206a2208428180808010370300200741e0006a41186a220b200e360200200741e0006a41146a200e360200200741013a0088012007200a36027c2007200c3602702007427f37036820074200370360200741d8026a200741e8036a200741e0006a10eb01200741b8036a41286a200741d8026a41286a290300370300200741b8036a41206a200741d8026a41206a290300370300200741b8036a41186a200741d8026a41186a290300370300200741b8036a41106a200741d8026a41106a290300370300200741b8036a41086a200741d8026a41086a290300370300200720072903d8023703b8030240200441ff01714102470d0020074190016a200741cc046a280200360200200741e0006a41286a200741c4046a2902003703002008200741bc046a290200370300200b200741b4046a290200370300200741e0006a41106a20074198046a41146a290200370300200741e0006a41086a200741a4046a2902003703002007200729029c0437036041801221090c050b20074198046a20032004200610d509200741e0006a41086a20074198046a410c6a290200370300200741e0006a41106a20074198046a41146a290200370300200b20074198046a411c6a290200370300200820074198046a41246a290200370300200741e0006a41286a20074198046a412c6a29020037030020074190016a200741cc046a2802003602002007200729029c0437036020072d0098044101470d0120072f00990420072d009b044110747221090c040b20004180063b0001200041013a0000200041036a410a3a000020072802f8032101024020074180046a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b0240200741fc036a2802002209450d002009410c6c450d00200110390b200728028404210102402007418c046a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b20074188046a2802002209450d072009410c6c450d07200110390c070b200741e8036a41286a2208200741e0006a412c6a290200370300200741e8036a41206a220b200741e0006a41246a290200370300200741e8036a41186a220a200741e0006a411c6a290200370300200741e8036a41106a220c200741f4006a290200370300200741e8036a41086a220d200741e0006a410c6a290200370300200720072902643703e80320074188036a200741b8036a200741e8036a10eb01200820074188036a41286a290300370300200b20074188036a41206a290300370300200a20074188036a41186a290300370300200c20074188036a41106a290300370300200d20074188036a41086a29030037030020072007290388033703e80320074198046a2006200320012903402213200141c8006a2903002214200541ff0171410047200410d806420021124200211102402007290398044201520d00427f427f20074198046a41106a290300221120074198046a41206a2903007c20072903a004221220074198046a41186a2903007c22152012542208ad7c22122008201220115420122011511b22081b2211200741c8046a2903007c427f201520081b221220074198046a41286a2903007c22152012542208ad7c22122008201220115420122011511b22081b2111427f201520081b21120b20074198046a2001427f201220072903d0047c2215201520125422082011200741d8046a2903007c2008ad7c221220115420122011511b22081b2211427f201220081b22122013201410d906024020072d0098044101460d0020074198046a41106a290300211420074198046a41086a2903002113200741b8036a41206a20074198046a41186a290300370300200741d0036a22082014370300200720113703b803200720123703c003200720133703c80302402013500d00200720083602980420074198046a10e4040b20074198046a10b80320072903a0042113200741013a008801200741106a20124200418080f00120064101200641014b1b6ead221420132003420120034201561b80220320032014561b2203420010d30b200741206a201142002003420010d30b200741e0006a41206a4200370300200741f4006a42003702002007200936027c2007200936027020072903182103200741206a41086a2903002111200729031021122007427f3703682007427f20072903202003420052201120127c22032011547222091b2211427f2011427f524100427f200320091b501b1b370360200041086a200741e8036a200741e0006a10eb01200041003a00000c070b200020072f00990420072d009b044110747222093b0001200041013a0000200041036a20094110763a000020072802f8032101024020074180046a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b0240200741fc036a2802002209450d002009410c6c450d00200110390b200728028404210102402007418c046a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b20074188046a2802002209450d062009410c6c450d06200110390c060b200741e8036a41286a220b200741e0006a412c6a290200370300200741e8036a41206a220c200741e0006a41246a290200370300200741e8036a41186a220d200741e0006a411c6a290200370300200741e8036a41106a220e2005290200370300200741e8036a41086a220f200741e0006a410c6a290200370300200720072902643703e80320074188036a200741b8036a200741e8036a10eb01200b20074188036a41286a290300370300200c20074188036a41206a290300370300200d20074188036a41186a290300370300200e20074188036a41106a290300370300200f20074188036a41086a29030037030020072007290388033703e8032008420037030020054200370200200741013a0088012007200936027c200720093602702007427f3703682007420037036020074198046a41086a200741e8036a200741e0006a10eb01200741003a00980420072f00990420072d009b0441107472210b0c020b41c0d0c000411941dcd0c0001035000b200020093b0001200041013a0000200041036a20094110763a000020072802c80321010240200741d0036a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b0240200741cc036a2802002209450d002009410c6c450d00200110390b20072802d40321010240200741dc036a2802002209450d002009410c6c21082001210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b200741d8036a2802002209450d032009410c6c450d03200110390c030b200741c8006a41106a200741ac046a280200360200200741c8006a41086a20074198046a410c6a2902003703002007200729029c04370348200a4101460d01200741b0046a280200210d200741b4046a280200210b200741b8046a2802002109200741bc046a280200210e200741c0046a280200210a200741c4046a280200210c200741c8046a2903002111200741386a41086a200741c8006a410c6a2902003703002007200729024c3703380240024002400240024002402001280250417f6a0e140100000000000000020300000000000000000004000b20074181023b009904410121080c040b0240200141d8006a2802004102460d002007410a3a009b04200741003b009904410121080c040b02400240200241ff017141014b0d00200141f0006a200141dc006a10da06220841ff01714102460d01200720083b009904200720084110763a009b04410121080c050b024041002802d0a94e4102490d0041002802cca94e210841002802c8a94e210141002802d4a94e210f200741b4046a41b8c0cd00360200200741a8046a4201370300200741cc046a41d283ce00ad4280808080800c84370200200741c0046a41b983ce00ad4280808080900384370300200741b8046a4200370300200741a0046a410d360200200741a0d4cd003602a4042007428180808090183702d404200741003602c804200741ac83ce0036029c042007410236029804200141b8c0cd00200f410246220f1b20074198046a200841c0a4c000200f1b2802101103000b2007410a3a009b04200741003b009904410121080c040b20074198046a41086a427f370300200741cc046a411036020020074198046a41206a420037030020074198046a41146a42003702002007427f37039804200741c0bbc7003602c804200741013a00c004200741002802d8974e22083602b404200720083602a80420012903702103200741b8036a411c6a200141f0026a290200370200200741b8036a41146a200141e8026a290200370200200741c4036a200141e0026a2902003702002007200141d8026a2902003702bc03411c10382208450d04200841c0003a0000200841002900c0bb47370001200841096a41002900c8bb473700002007421c37028c032007200836028803200741113602900320074188036a4111412010772007280288032204200728029003220f6a2208200741bc036a2201290000370000200841086a200141086a290000370000200841106a200141106a290000370000200841186a200141186a2900003700002007200f41206a2208360290030240200728028c0320086b41074b0d0020074188036a200841081077200728028803210420072802900321080b200741c1046a210f20074198046a41106a2101200420086a20033700002007200841086a36029003024020072802bc04220820072802b8042204470d00200741b4046a2004410110ec0120072802bc0421080b20072802b4042008410c6c6a2204200729038803370200200441086a20074188036a41086a2802003602002007200841016a3602bc04200741b8036a41086a2208200141086a290300370300200741b8036a41106a2204200141106a290300370300200720012903003703b8032007200f290000370388032007200f41076a29000037008f032007290398042103200741c0046a2004290300370300200741b8046a2008290300370300200741b0046a20072903b80337030041002108200741c8046a41003a000020074198046a41106a42c0930637030020074198046a41086a2003370300200741cc046a200728008b03360000200741c9046a2007280288033600000c030b0240200141d8006a2802004102460d002007410a3a009b04200741003b009904410121080c030b02400240200241ff017141014b0d00200141f0006a200141dc006a10db06220841ff01714102460d01200720083b009904200720084110763a009b04410121080c040b024041002802d0a94e4102490d0041002802cca94e210841002802c8a94e210141002802d4a94e210f200741b4046a41b8c0cd00360200200741a8046a4201370300200741cc046a41e3d4cd00ad4280808080b00c84370200200741c0046a41c7d4cd00ad4280808080c00384370300200741b8046a4200370300200741a0046a410c360200200741a0d4cd003602a40420074281808080e01a3702d404200741003602c804200741bbd4cd0036029c042007410236029804200141b8c0cd00200f410246220f1b20074198046a200841c0a4c000200f1b2802101103000b2007410a3a009b04200741003b009904410121080c030b20074198046a41086a427f370300200741cc046a411336020020074198046a41206a420037030020074198046a41146a42003702002007427f37039804200741a8d4cd003602c804200741013a00c004200741002802d8974e22083602b404200720083602a80420014180016a290300210320012903702112200741b8036a41186a220f200141e8026a290300370300200741b8036a41106a2204200141e0026a290300370300200741b8036a41086a2206200141d8026a2903003703002007200141d0026a2903003703b803412710382208450d03200841cc003a0000200841002900a8d44d370001200841096a41002900b0d44d370000200841106a41002800b7d44d3600002007422737028c032007200836028803200741143602900320074188036a411441201077200728028803220120072802900322026a220820072903b803370000200841086a2006290300370000200841106a2004290300370000200841186a200f2903003700002007200241206a2208360290030240200728028c0320086b41074b0d0020074188036a200841081077200728028803210120072802900321080b200120086a20123700002007200841086a2208360290030240200728028c0320086b41074b0d0020074188036a20084108107720072802900321080b200741c1046a210f20074198046a41106a210120072802880320086a20033700002007200841086a36029003024020072802bc04220820072802b8042204470d00200741b4046a2004410110ec0120072802bc0421080b20072802b4042008410c6c6a2204200729038803370200200441086a20074188036a41086a2802003602002007200841016a3602bc04200741b8036a41086a2208200141086a290300370300200741b8036a41106a2204200141106a290300370300200720012903003703b8032007200f290000370388032007200f41076a29000037008f032007290398042103200741c0046a2004290300370300200741b8046a2008290300370300200741b0046a20072903b80337030041002108200741c8046a41003a000020074198046a41106a42c0930637030020074198046a41086a2003370300200741cc046a200728008b03360000200741c9046a2007280288033600000c020b20074198046a200141d4006a10dc0620072d00980441014621080c010b0240200241ff01714102490d00200741818080d00036029804410121080c010b200741d8026a200141d8006a10b8040240024020072d00d8024108460d0020074188036a41086a200741d8026a41086a280200360200200720072903d8023703880341002108024041002802d0a94e450d00200741b0046a22064200370300200741a8046a220f420037030020074198046a41086a220442003703002007420037039804200741b8036a41c7e5c000410610cb012004200741b8036a41086a2202290000370300200720072900b80337039804200741b8036a419081c400410610cb0120062002290000370300200f20072900b803370300200741086a20074198046a412010ce03200741c4036a4122360200200741103602bc032007200728020c410020072802081b3602a802200720074188036a3602c0032007200741a8026a3602b80341002802cca94e210641002802c8a94e210241002802d4a94e2105200f4202370300200741cc046a41d79dc700ad4280808080800e84370200200741c0046a41ab9dc700ad4280808080c0058437030020074198046a41206a42023703002004411a360200200741b4046a200741b8036a360200200741b0b9c7003602a40420074281808080e0e7003702d404200741003602c804200741d0b9c70036029c042007410136029804200241b8c0cd002005410246220f1b20074198046a200641c0a4c000200f1b2802101103000b0240024020072d008803417d6a0e06000101010102010b20072d008a0321080b200720083a009b04200741800e3b009904410121080c010b200741cc046a4110360200200741b8046a4200370300200741ac046a4200370200200741c0b9c7003602c804200741013a00c004200741002802d8974e22083602b404200720083602a8042007427f3703a0042007427f20012903582203427f2003427f524100200141e0006a290300501b1b220342ffffffffffffffffff007c221220122003541b37039804200141c8026a2802002104411810382208450d02200741c1046a210f20074198046a41106a2101200841c0003a000020082004360011200841096a41002900c8b947370000200841002900c0b947370001200742183702bc03200720083602b803200741153602c003024020072802bc04220820072802b8042204470d00200741b4046a2004410110ec0120072802bc0421080b20072802b4042008410c6c6a220420072903b803370200200441086a200741b8036a41086a22042802003602002007200841016a3602bc042004200141086a290300370300200741b8036a41106a2208200141106a290300370300200720012903003703b8032007200f290000370388032007200f41076a29000037008f032007290398042103200741c0046a2008290300370300200741b8046a2004290300370300200741b0046a20072903b80337030041002108200741c8046a41003a000020074198046a41106a42960137030020074198046a41086a2003370300200741cc046a200728008b03360000200741c9046a2007280288033600000b200720083a0098040b200741e0006a41086a220120074198046a410c6a290200370300200741e0006a41106a20074198046a41146a290200370300200741e0006a41186a220f20074198046a411c6a290200370300200741e0006a41206a220420074198046a41246a290200370300200741e0006a41286a20074198046a412c6a29020037030020074190016a200741cc046a2802003602002007200729029c04370360024020080d00200741e8036a41286a2208200741e0006a412c6a290200370300200741e8036a41206a2206200741e0006a41246a2202290200370300200741e8036a41186a2205200741e0006a411c6a290200370300200741e8036a41106a2210200741e0006a41146a2216290200370300200741e8036a41086a2217200741e0006a410c6a290200370300200720072902643703e8032001200741386a41086a2903003703002002200c3602002004200a360200200f20093602002016200b3602002007200729033837036020072011370388012007200e36027c2007200d36027020074198046a41286a200829030037030020074198046a41206a200629030037030020074198046a41186a200529030037030020074198046a41106a201029030037030020074198046a41086a2017290300370300200720072903e80337039804200041086a200741e0006a20074198046a10eb01200041003a00000c030b200020072f00990420072d009b044110747222083b0001200041013a0000200041036a20084110763a000002402009450d002009410c6c2108200d210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b0240200b450d00200b410c6c450d00200d10390b0240200c450d00200c410c6c2108200e210903400240200941046a280200450d00200928020010390b2009410c6a2109200841746a22080d000b0b200a450d02200a410c6c450d02200e10390c020b1032000b2000200b3b0001200041013a0000200041036a200b4110763a00000b200741d0056a24000be80501067f230041e0006b22032400200341086a41f0c8c800410710cb01200341186a419ed4c800411310cb01200320013602482003200341c8006a410410cc01370338200341dc006a2204200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a10830102400240412010382201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001412010cc013703482004200141206a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012001103920032802302202200328024022046a41206a2201417f4c0d010240024020010d00410121050c010b200110382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200136020002402001410f4b0d00200041004110107720072802002106200028020021050b200520066a22012003290008370000200141086a200341086a41086a2900003700002007200641106a220136020002402008280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b2000280200220620016a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200141106a2201360200200328022821080240200520016b20024f0d002000200120021077200041046a280200210520072802002101200028020021060b200620016a2008200210d40b1a2007200120026a2201360200200328023821020240200520016b20044f0d002000200120041077200041086a2802002101200028020021060b200620016a2002200410d40b1a200041086a200120046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000be80501067f230041e0006b22032400200341086a41f0c8c800410710cb01200341186a41b1d4c800411310cb01200320013602482003200341c8006a410410cc01370338200341dc006a2204200341c8006a41046a3602002003200341386a41086a3602542003200341c8006a3602582003200341386a360250200341286a200341d0006a10830102400240412010382201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001412010cc013703482004200141206a360200200320013602582003200341c8006a41086a3602542003200341c8006a360250200341386a200341d0006a1083012001103920032802302202200328024022046a41206a2201417f4c0d010240024020010d00410121050c010b200110382205450d010b2000200536020041002106200041086a22074100360200200041046a2208200136020002402001410f4b0d00200041004110107720072802002106200028020021050b200520066a22012003290008370000200141086a200341086a41086a2900003700002007200641106a220136020002402008280200220520016b410f4b0d002000200141101077200041046a2802002105200041086a28020021010b2000280200220620016a22072003290018370000200741086a200341186a41086a290000370000200041086a2207200141106a2201360200200328022821080240200520016b20024f0d002000200120021077200041046a280200210520072802002101200028020021060b200620016a2008200210d40b1a2007200120026a2201360200200328023821020240200520016b20044f0d002000200120041077200041086a2802002101200028020021060b200620016a2002200410d40b1a200041086a200120046a3602000240200328023c450d00200328023810390b0240200328022c450d00200328022810390b200341e0006a24000f0b1032000b1034000bb00201057f230041206b220224002002200010970a2002280208210320022802002104200241003602182002420137031020012802002100200241106a41004104107720022802102205200228021822066a20003600002002200641046a2200360218200128020421060240200228021420006b41034b0d00200241106a20004104107720022802102105200228021821000b200520006a20063600002002200041046a2200360218200128020821050240200228021420006b41034b0d00200241106a200041041077200228021821000b200228021020006a20053600002002200041046a3602182001410c6a200241106a10e0022004200320022802102201200228021810e90102402002280214450d00200110390b02402002280204450d00200228020010390b200241206a24000b130020004117360204200041f8d6c8003602000b3400200041f0c8c80036020420004100360200200041146a411e360200200041106a41acc9c900360200200041086a42073702000b3b01017f20004201370200200041086a2202410036020020004100410110772000280200200228020022006a41053a00002002200041016a3602000b8e0101047f20004201370200200041086a22024100360200200041004110107720002802002203200228020022046a22054200370008200542003700002002200441106a22043602000240200041046a28020020046b410f4b0d00200020044110107720022802002104200028020021030b200320046a22004200370008200042003700002002200441106a3602000b2e01017f230041106b2202240020024200370204200241002802d8974e36020020002002109306200241106a24000b3501017f02404104103822020d001032000b20004204370204200020023602002000410010ac0241002802e8c8484100200010aa020b2c01017f02404104103822020d001032000b200020023602002002410036000020004284808080c0003702040b3301017f02404110103822020d001032000b2002420037000820024200370000200020023602002000429080808080023702040b02000b3401017f230041106b22022400200241086a4200370300200241003602002000200210f0092002410472109907200241106a24000b7501037f20004201370200200041086a2202410036020020004100410110772000280200200228020022036a41003a00002002200341016a22033602000240200041046a28020022042003470d002000200441011077200228020021030b2002200341016a360200200028020020036a41003a00000bf60201067f230041c0006b22022400200042013702002002412c6a4200370200200241086a41086a4200370300200241086a41106a22034200370300200241086a41186a4200370300200041086a2204410036020020024200370308200241002802e8c8483602282002200241086a36023c2002413c6a200010df022002200336023c2002413c6a200010df02200228022821032000200241086a41286a280200220510ac0202402005450d00200541306c2106200041046a2107034002402007280200200428020022056b411f4b0d002000200541201077200428020021050b2004200541206a360200200028020020056a2205200341106a290000370000200541086a200341186a290000370000200541106a200341206a290000370000200541186a200341286a2900003700002002200336023c2002413c6a200010df02200341306a2103200641506a22060d000b0b0240200228022c2203450d00200341306c450d00200228022810390b200241c0006a24000b2501017f230041306b22022400200241003a00082000200241086a108b0a200241306a24000b8b0101027f230041e0006b22022400200241003602280240410110382203450d0020002003360200200341003a0000200041046a428180808010370200024020022802282200450d0002402002412c6a2802002203450d00200341186c450d00200010390b200241386a28020041ffffffff0371450d00200228023410390b200241e0006a24000f0b1032000b2e01017f230041106b220224002002420037020420024100280284ee4d3602002000200210bf09200241106a24000b2d01017f02404104103822020d001032000b20002002360200200241d40036000020004284808080c0003702040b130020004105360204200041dc8aca003602000b2c01017f02404104103822020d001032000b200020023602002002411036000020004284808080c0003702040b2d01017f02404104103822020d001032000b20002002360200200241c00036000020004284808080c0003702040b2c01017f02404104103822020d001032000b200020023602002002411b36000020004284808080c0003702040b2c01017f02404104103822020d001032000b200020023602002002411c36000020004284808080c0003702040b2c01017f02404104103822020d001032000b200020023602002002410636000020004284808080c0003702040ba80d01087f230041f0006b2205240020052004360214200520033602100240024020024108490d00200141086a2103200241786a21020c010b41002102024041002802d0a94e0d0041b8c0cd0021030c010b4100210241002802cca94e210441002802c8a94e210141002802d4a94e210641b8c0cd002103200541c4006a41b8c0cd00360200200541386a4201370300200541dc006a41f39fc000ad4280808080b00b84370200200541c8006a4200370300200541306a4113360200200541e09fc00036022c200541d0006a41e09fc000ad4280808080b00284370300200541d89fc00036023420054281808080b00e3702642005410036025820054101360228200141b8c0cd00200641024622061b200541286a200441c0a4c00020061b2802101103000b20054100360228024002402002450d00200520032d00003a002c2005410136022820024101460d00200520032d00013a002d2005410236022820024102460d00200520032d00023a002e2005410336022820024103460d00200520032d00033a002f2005410436022820024104460d00200541306a20032d00043a00002005410536022820024105460d00200541316a20032d00053a00002005410636022820024106460d00200541326a20032d00063a00002005410736022820024107460d00200541336a20032d00073a00002005410836022820024108460d00200541346a20032d00083a00002005410936022820024109460d00200541356a20032d00093a00002005410a3602282002410a460d00200541366a20032d000a3a00002005410b3602282002410b460d00200541376a20032d000b3a00002005410c3602282002410c460d00200541386a20032d000c3a00002005410d3602282002410d460d00200541396a20032d000d3a00002005410e3602282002410e460d002005413a6a20032d000e3a00002005410f3602282002410f460d002005413b6a20032d000f3a00002005411036022820024110460d002005413c6a20032d00103a00002005411136022820024111460d002005413d6a20032d00113a00002005411236022820024112460d002005413e6a20032d00123a00002005411336022820024113460d002005413f6a20032d00133a00002005411436022820024114460d00200541c0006a20032d00143a00002005411536022820024115460d00200541c1006a20032d00153a00002005411636022820024116460d00200541c2006a20032d00163a00002005411736022820024117460d00200541c3006a20032d00173a00002005411836022820024118460d00200541c4006a20032d00183a00002005411936022820024119460d00200541c5006a20032d00193a00002005411a3602282002411a460d00200541c6006a20032d001a3a00002005411b3602282002411b460d00200541c7006a20032d001b3a00002005411c3602282002411c460d00200541c8006a20032d001c3a00002005411d3602282002411d460d00200541c9006a20032d001d3a00002005411e3602282002411e460d00200541ca006a20032d001e3a00002005411f3602282002411f460d00200541cb006a20032d001f3a0000200541206a41026a200541356a2d00003a00002005411c6a41026a2005413c6a2d00003a0000200520052f012c3b0124200520052d002e3a00262005200541336a2f00003b012020052005413a6a2f01003b011c200541366a28010021032005413d6a2800002104200541c4006a280200210120054120360228200541286a41206a2802002106200528002f2102200541186a41026a200541c3006a2d00003a00002005200541c1006a2f00003b0118200541086a200541106a10c10102400240024020052802080d00200541286a200541106a200528020c109d0220052802282207450d00200528022c21080240200528021422094104490d0020094104460d00200541306a280200210a2005280210220b280000210c20052009417b6a3602142005200b41056a36021041002109200b2d00040e020302000b200841ffffff3f71450d00200710390b200041023a00300c030b410121090b200020052f01243b0100200020052f01203b0007200020052f011c3b000e200020052f01183b0015200020093a00302000200c36022c2000200a36022820002008360224200020073602202000200636001c20002001360018200020043600112000200336000a20002002360003200041026a20052d00263a0000200041096a200541206a41026a2d00003a0000200041106a2005411c6a41026a2d00003a0000200041176a200541186a41026a2d00003a00000c010b200041023a00300b200541f0006a24000b870e01067f23004180016b220524002005200436020c200520033602080240024020024108490d00200141086a2103200241786a21020c010b41002102024041002802d0a94e0d0041b8c0cd0021030c010b4100210241002802cca94e210441002802c8a94e210141002802d4a94e210641b8c0cd002103200541cc006a41b8c0cd00360200200541c0006a4201370300200541e4006a41f39fc000ad4280808080b00b84370200200541d0006a4200370300200541386a4113360200200541e09fc000360234200541d8006a41e09fc000ad4280808080b00284370300200541d89fc00036023c20054281808080b00e37026c2005410036026020054101360230200141b8c0cd00200641024622061b200541306a200441c0a4c00020061b2802101103000b20054100360230024002402002450d00200520032d00003a00342005410136023020024101460d00200520032d00013a00352005410236023020024102460d00200520032d00023a00362005410336023020024103460d00200520032d00033a00372005410436023020024104460d00200541386a20032d00043a00002005410536023020024105460d00200541396a20032d00053a00002005410636023020024106460d002005413a6a20032d00063a00002005410736023020024107460d002005413b6a20032d00073a00002005410836023020024108460d002005413c6a20032d00083a00002005410936023020024109460d002005413d6a20032d00093a00002005410a3602302002410a460d002005413e6a20032d000a3a00002005410b3602302002410b460d002005413f6a20032d000b3a00002005410c3602302002410c460d00200541c0006a20032d000c3a00002005410d3602302002410d460d00200541c1006a20032d000d3a00002005410e3602302002410e460d00200541c2006a20032d000e3a00002005410f3602302002410f460d00200541c3006a20032d000f3a00002005411036023020024110460d00200541c4006a20032d00103a00002005411136023020024111460d00200541c5006a20032d00113a00002005411236023020024112460d00200541c6006a20032d00123a00002005411336023020024113460d00200541c7006a20032d00133a00002005411436023020024114460d00200541c8006a20032d00143a00002005411536023020024115460d00200541c9006a20032d00153a00002005411636023020024116460d00200541ca006a20032d00163a00002005411736023020024117460d00200541cb006a20032d00173a00002005411836023020024118460d00200541cc006a20032d00183a00002005411936023020024119460d00200541cd006a20032d00193a00002005411a3602302002411a460d00200541ce006a20032d001a3a00002005411b3602302002411b460d00200541cf006a20032d001b3a00002005411c3602302002411c460d00200541d0006a20032d001c3a00002005411d3602302002411d460d00200541d1006a20032d001d3a00002005411e3602302002411e460d00200541d2006a20032d001e3a00002005411f3602302002411f460d00200541d3006a20032d001f3a0000200541203602302005200541c9006a22022800003602782005200541cc006a28000036007b200520052f01343b012c200520052d00363a002e2005413e6a2801002107200541c5006a2800002108200541306a41206a280200210920052800372106200528007b210a200541286a41026a22032005413d6a2d00003a000020052005413b6a2f00003b0128200541246a41026a2204200541c4006a2d00003a00002005200541c2006a2f01003b0124200541206a41026a2201200541cb006a2d00003a0000200520022f00003b01202005411c6a41026a20052d002e3a0000200520052f012c3b011c200541186a41026a20032d00003a0000200520052f01283b0118200541146a41026a20042d00003a0000200520052f01243b0114200541106a41026a20012d00003a0000200520052f01203b01102005200541086a10c101024020052802000d00200528020421022005418094ebdc0336023420052002360230200528020c2203450d00200541306a2002418094ebdc034b4102746a280200210420052003417f6a36020c20052005280208220341016a360208410021020240024020032d00000e020100020b410121020b200020052f011c3b000020002006360003200020052f01183b00072000200736000a200020052f01143b000e20002008360011200020052f01103b0015200041026a2005411c6a41026a2d00003a0000200041096a200541186a41026a2d00003a0000200041106a200541146a41026a2d00003a0000200041176a200541106a41026a2d00003a0000200020023a0024200020043602202000200936001c2000200a3600180c020b200041023a00240c010b200041023a00240b20054180016a24000b8d0e02067f017e23004180016b220524002005200436020c200520033602080240024020024108490d00200141086a2103200241786a21020c010b41002102024041002802d0a94e0d0041b8c0cd0021030c010b4100210241002802cca94e210441002802c8a94e210141002802d4a94e210641b8c0cd002103200541cc006a41b8c0cd00360200200541c0006a4201370300200541e4006a41f39fc000ad4280808080b00b84370200200541d0006a4200370300200541386a4113360200200541e09fc000360234200541d8006a41e09fc000ad4280808080b00284370300200541d89fc00036023c20054281808080b00e37026c2005410036026020054101360230200141b8c0cd00200641024622061b200541306a200441c0a4c00020061b2802101103000b20054100360230024002402002450d00200520032d00003a00342005410136023020024101460d00200520032d00013a00352005410236023020024102460d00200520032d00023a00362005410336023020024103460d00200520032d00033a00372005410436023020024104460d00200541386a20032d00043a00002005410536023020024105460d00200541396a20032d00053a00002005410636023020024106460d002005413a6a20032d00063a00002005410736023020024107460d002005413b6a20032d00073a00002005410836023020024108460d002005413c6a20032d00083a00002005410936023020024109460d002005413d6a20032d00093a00002005410a3602302002410a460d002005413e6a20032d000a3a00002005410b3602302002410b460d002005413f6a20032d000b3a00002005410c3602302002410c460d00200541c0006a20032d000c3a00002005410d3602302002410d460d00200541c1006a20032d000d3a00002005410e3602302002410e460d00200541c2006a20032d000e3a00002005410f3602302002410f460d00200541c3006a20032d000f3a00002005411036023020024110460d00200541c4006a20032d00103a00002005411136023020024111460d00200541c5006a20032d00113a00002005411236023020024112460d00200541c6006a20032d00123a00002005411336023020024113460d00200541c7006a20032d00133a00002005411436023020024114460d00200541c8006a20032d00143a00002005411536023020024115460d00200541c9006a20032d00153a00002005411636023020024116460d00200541ca006a20032d00163a00002005411736023020024117460d00200541cb006a20032d00173a00002005411836023020024118460d00200541cc006a20032d00183a00002005411936023020024119460d00200541cd006a20032d00193a00002005411a3602302002411a460d00200541ce006a20032d001a3a00002005411b3602302002411b460d00200541cf006a20032d001b3a00002005411c3602302002411c460d00200541d0006a20032d001c3a00002005411d3602302002411d460d00200541d1006a20032d001d3a00002005411e3602302002411e460d00200541d2006a20032d001e3a00002005411f3602302002411f460d00200541d3006a20032d001f3a0000200541203602302005200541c9006a22022800003602782005200541cc006a28000036007b200520052f01343b012c200520052d00363a002e2005413e6a2801002107200541c5006a2800002108200541306a41206a280200210920052800372106200528007b210a200541286a41026a22032005413d6a2d00003a000020052005413b6a2f00003b0128200541246a41026a2204200541c4006a2d00003a00002005200541c2006a2f01003b0124200541206a41026a2201200541cb006a2d00003a0000200520022f00003b01202005411c6a41026a20052d002e3a0000200520052f012c3b011c200541186a41026a20032d00003a0000200520052f01283b0118200541146a41026a20042d00003a0000200520052f01243b0114200541106a41026a20012d00003a0000200520052f01203b01100240200528020c22024104490d002002417c7122034104460d0020034108460d00200528020822032800002104200328000421012005200241746a36020c20052003410c6a36020820032800082102200541306a200541086a108f0520052802302203450d002005290234210b200020052f011c3b000020002006360003200020052f01183b00072000200736010a200020052f01143b000e20002008360011200020052f01103b0015200041026a2005411c6a41026a2d00003a0000200041096a200541186a41026a2d00003a0000200041106a200541146a41026a2d00003a0000200041176a200541106a41026a2d00003a00002000200b3702302000200336022c2000200236022820002001360224200020043602202000200936021c2000200a3602180c020b2000410036022c0c010b2000410036022c0b20054180016a24000bf60704017f027e037f027e23004180026b22022400200041086a290300210320002903002104200241f0016a2001108e08200241c8006a20022802f001220020022802f80110850402400240024002400240024020022d00484101470d00200241c0006a200241e1006a290000370300200241386a200241d9006a290000370300200241286a41086a200241d1006a29000037030020022002290049370328024020022802f401450d00200010390b200241b0016a41f0c8c800410710cb01200241c0016a418dcac800410610cb01412010382200450d0420002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a290300370000200241e0016a2000412010ca01200241fc016a200041206a360200200220003602f8012002200241e0016a41106a3602f4012002200241e0016a3602f001200241d0016a200241f0016a1083012000103920022802d801220541206a2200417f4c0d050240024020000d00410121010c010b200010382201450d050b41002106200241003602a801200220013602a001200220003602a40102402000410f4b0d00200241a0016a41004110107720022802a401210020022802a001210120022802a80121060b200120066a220720022900b001370000200741086a200241b0016a41086a2900003700002002200641106a22063602a8010240200020066b410f4b0d00200241a0016a20064110107720022802a401210020022802a001210120022802a80121060b200120066a220720022900c001370000200741086a200241c0016a41086a2900003700002002200641106a22063602a80120022802d00121070240200020066b20054f0d00200241a0016a20062005107720022802a001210120022802a80121060b200120066a2007200510d40b1a200620056a2100024020022802d401450d0020022802d00110390b200241c8006a20022802a0012201200010900820022802682206450d01200241c8006a41186a2903002108200241f8006a2802002105200241f4006a280200210720022903582109200228026c2100024020022802a401450d00200110390b02402000450d00200041186c450d00200610390b200541ffffffff0371450d03200710390c030b20022802f401450d01200010390c010b20022802a401450d00200110390b42002109420021080b200241186a20042003427f420010da0b200241086a200920082002290318220342012003420156200241186a41086a29030022034200522003501b22001b2003420020001b10da0b20022903082103200241086a41086a290300210420024180026a24002003427f2003427f5241002004501b1b0f0b1032000b1034000b9a0101057f0240200028020422020d0041000f0b20002802002103034020024190026a210420022f018e0221054100210002400240034020052000460d0120012004412010d70b2206450d02200041016a2100200441206a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41f0046a28020021020c010b0b2002200041186c6a41046a0b130020004106360204200041a8a6ca003602000b3400200041dcafca0036020420004100360200200041146a4102360200200041106a41f0afca00360200200041086a42123702000b3b01017f20004201370200200041086a2202410036020020004100410110772000280200200228020022006a41003a00002002200041016a3602000b3b01017f02404110103822020d001032000b20024200370008200242808090bbbad6adf00d370000200020023602002000429080808080023702040b130020004102360204200041ecb1ca003602000bab0403057f027e027f230041f0006b22022400420042004280f985d404420010a7062103200241106a22044200370300200241086a42083703002002411c6a22054180023b0100200241186a2206200336020020024101360268200241003602000240411810382203450d0020032002290308370300200320022d001d3a00152003200429030037030820032006280200360210200320052d00004100473a00140240200228026822044105490d00200441186c450d00200228020410390b411c10382204450d0020002004360200200041046a2206421c3702002000410110ac02200341086a290300210720032903002108024020062802002205200041086a220928020022046b410f4b0d00200020044110107720062802002105200928020021040b2000280200220620046a220a2007370008200a20083700002009200441106a2204360200200328021021090240200520046b41034b0d002000200441041077200041046a2802002105200041086a2802002104200028020021060b200620046a2009360000200041086a2209200441046a220436020020032d0014210a024020052004470d00200020054101107720092802002104200028020021060b200620046a200a3a00002009200441016a220436020020032d001521050240200041046a2802002004470d002000200441011077200041086a28020021040b200028020020046a20053a0000200041086a200441016a36020020031039200241f0006a24000f0b1032000b3601017f02404110103822020d001032000b2002420037000820024280c2d72f370000200020023602002000429080808080023702040bcc0101077f0240200028020422020d0041000f0b2000280200210320012d002041ff017121040340200241346a210020022f01322105410021060240024003400240200520062207470d00200521070c020b0240024020012000412010d70b2206450d00410121082006417f4a0d010c030b2004200041206a2d00002206460d03417f410120042006491b21080b200741016a2106200041216a21002008417f470d000b0b024020030d0041000f0b2003417f6a2103200220074102746a41a0036a28020021020c010b0b41010b9a0101057f0240200028020422020d0041000f0b2000280200210303402002418c016a210420022f018a0121054100210002400240034020052000460d0120012004410810d70b2206450d02200041016a2100200441086a21042006417f4a0d000b2000417f6a21050b024020030d0041000f0b2003417f6a2103200220054102746a41e4016a28020021020c010b0b20022000410c6c6a41046a0bdc0201087f230041106b22022400200242f4d2b59bc7ae98b83037030802400240024020012802042203450d00200128020021040c010b41e40110382203450d0141002104200341003b018a012003410036020020012003360204200141003602000b02400240034020032f018a012205410374210641002107410021080240034020062007460d01200241086a200320076a418c016a410810d70b2209450d03200741086a2107200841016a21082009417f4a0d000b2008417f6a21050b02402004450d002004417f6a2104200320054102746a41e4016a28020021030c010b0b4100210720004100360204200041146a42f4d2b59bc7ae98b830370200200041106a20013602002000410c6a2005360200200041086a20033602000c010b20002004360204200041106a20013602002000410c6a2008360200200041086a2003360200410121070b20002007360200200241106a24000f0b1032000baf0301097f02400240024020012802042203450d00200128020021040c010b41a00310382203450d0141002104200341003b01322003410036020020012003360204200141003602000b20022d002041ff017121050240034020032f0132220641216c21074100210841002109024003402009210a024020072008470d002006210a0c020b024002402002200320086a220b41346a412010d70b2209450d004101210b2009417f4a0d010c030b2005200b41d4006a2d00002209460d04417f410120052009491b210b0b200a41016a2109200841216a2108200b417f470d000b0b02402004450d002004417f6a21042003200a4102746a41a0036a28020021030c010b0b20004100360204200041146a2002290000370000200041106a20013602002000410c6a200a360200200041086a2003360200200041346a200241206a2d00003a00002000412c6a200241186a290000370000200041246a200241106a2900003700002000411c6a200241086a290000370000200041003602000f0b20002004360204200041106a20013602002000410c6a200a360200200041086a2003360200200041013602000f0b1032000b1300200041143602042000418cbaca003602000b130020004107360204200041bcc7ca003602000b860301077f410121020240024002400240024002402001280208220341016a2204200128020422054d0d000c010b200320054f0d012001200436020802402001280200220620036a2d0000220741037122084103460d0002400240024020080e03000102000b20074102762108410021020c030b0240200341026a220320054d0d000c030b200120033602082004417f460d04200620046a2d0000410874200772220141ffff0371418002490d02200141fcff03714102762108410021020c020b200341046a220320054b0d01200120033602082004417d4f0d04200620046a22012f0000200141026a2d000041107472410874200772220141808004492102200141027621080c010b0240200741034d0d000c010b200341056a220320054b0d00200120033602082004417c4f0d04200620046a28000022084180808080044921020b20002008360204200020023602000f0b200320054198d9c000103c000b417f20034188d9c0001055000b200420034188d9c0001055000b200420034188d9c0001055000b6c01017f230041206b22022400200241f8d3ca0036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241f895ce00200241046a41f895ce00200241086a4180d4ca001056000b6c01017f230041206b22022400200241c0d5ca0036020420022000360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241d895ce00200241046a41d895ce00200241086a41d0d5ca001056000be90801027f200341046a2802002104200341086a280200210502400240200041ff01714101460d00024020042005470d002003200541011077200341086a28020021050b200328020020056a41003a0000200341086a200541016a22053602000240024002400240024002400240024002400240200141ff01710e0a000102030405060708090b0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41003a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41013a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41023a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41033a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41043a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41053a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41063a0000200341086a200541016a3602000f0b0240200341046a22012802002005470d002003200541011077200341086a28020021050b200328020020056a41073a0000200341086a2200200541016a2205360200024020012802002005470d002003200541011077200028020021050b200328020020056a20023a00002000200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41083a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41093a0000200341086a200541016a3602000f0b024020042005470d002003200541011077200341086a28020021050b200328020020056a41013a0000200341086a200541016a2205360200024002400240200141ff01710e03000102030b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41003a0000200341086a200541016a3602000f0b0240200341046a2802002005470d002003200541011077200341086a28020021050b200328020020056a41013a0000200341086a200541016a3602000f0b0240200341046a22012802002005470d002003200541011077200341086a28020021050b200328020020056a41023a0000200341086a2200200541016a2205360200024020012802002005470d002003200541011077200028020021050b200328020020056a20023a00002000200541016a3602000b0bfc1405047f087e037f027e017f230041c00c6b22032400024020024133490d0041002802d0a94e4102490d0041002802cca94e210441002802c8a94e210541002802d4a94e2106200341d4016a41b8c0cd00360200200341c8016a4201370300200341ec016a4191d0ca00ad4280808080b00b84370200200341e0016a4189d7ca00ad4280808080f00184370300200341d8016a4200370300200341c0016a4111360200200341e8d6ca003602c40120034281808080e0e7003702f401200341003602e801200341f8d6ca003602bc01200341023602b801200541b8c0cd00200641024622061b200341b8016a200441c0a4c00020061b2802101103000b200341286a200010df03200341b8016a20032802282204200328023010e0034200210742002108420021094200210a4200210b4200210c4200210d4200210e024020032903b8014201520d00200341c8016a290300210e200341d8016a290300210c200341d0016a290300210b200341e8016a290300210a200341e0016a2903002109200341f8016a2903002108200341f0016a290300210720032903c001210d0b0240200328022c450d00200410390b024002400240200d2009200b8484200e200a200c848484500d00200341086a210f0c010b200341086a210f200720088450450d004200210b410021104200210c4200210d4200210e0c010b200341206a200837030020032007370318200320093703082003200a370310410121100b201041017321110240024020020d00420021124200210a42002113420021080c010b20024105742105420021124200210a4200211342002108200121040340024002400240200441186a2d00002206417f6a41ff017141014b0d00200a200441086a290300220920122004290300220756200a200956200a2009511b22141b210a2012200720141b2112200641ff01714102460d010c020b200641ff01710d01200441086a2903002109200429030021070b200820092013200756200820095620082009511b22061b21082013200720061b21130b200441206a2104200541606a22050d000b0b200f2012370300200f200a370308200f2013370310200f41186a20083703002003200d370330200341386a200e370300200341c8006a2206427f200d200b7c22092009200d542204200e200c7c2004ad7c2209200e542009200e511b22041b220a370300200341d0006a427f200920041b220937030020032011ad22073703282003200a4280c8afa02554410020095022041b2205200d200b84200e200c8484221242005271ad2208370340024002400240024002400240024020052010720d00200320003602b8012000200341b8016a10e5040c010b200a42ffc7afa025562205200942005220041b2114024020104101732005200942005220041b720d00200320003602b8012000200341b8016a10e60441ff017122054103460d0120050e03020103020b20102014724101470d010b200341d8006a41186a200f41186a290300370300200341d8006a41106a200f41106a290300370300200341d8006a41086a200f41086a2903003703002003200f290300370358200341f8006a200010df03200341b8016a20032802782205200328028001220610e0030240024020032903b8014201510d0020034188016a41086a420037030020034200370388010c010b20034188016a41086a20034188026a290300370300200320034180026a290300370388010b4200210702400240200a42ffc7afa02556200942005220041b0d00200341d0016a4200370300200341c8016a4200370300200341c0016a4200370300200342003703b8014200210c4200210d4200210e0c010b200341b8016a41186a200341d8006a41186a290300370300200341b8016a41106a200341d8006a41106a290300370300200341b8016a41086a200341d8006a41086a290300370300200320032903583703b801200b21070b20034198016a41186a200341b8016a41186a2204290300220937030020034198016a41106a200341b8016a41106a2214290300220a37030020034198016a41086a200341b8016a41086a220f2903002208370300200320032903b801221237039801200341d8016a200c370300200420073703002014200e370300200341f8016a2009370300200341f0016a200a370300200341e8016a2008370300200341b8016a41286a201237030020034180026a20032903880137030020034188026a20034188016a41086a2903003703002003200d3703c001200342013703b80120052006200f10e7040240200328027c450d00200510390b200341286a41106a290300210e200341286a41286a29030021092003290330210d2003290348210a20032903282107200329034021080b024020074201520d00200341f0016a200e370300200341e8016a200d370300200341c1016a2000290000370000200341b8016a41086a41003a0000200341d9016a200041186a290000370000200341d1016a200041106a290000370000200341c9016a200041086a290000370000200341023a00b801200341b8016a10c9030b200850450d01420021070c020b2012502014720d02200320063602b801200341b8016a10e4040c020b200341b8016a41186a200041186a290000370300200341b8016a41106a200041106a290000370300200341b8016a41086a200041086a290000370300200320002900003703b801420121070b200341286a41186a200341b8016a41186a22042903002208370300200341286a41106a200341b8016a41106a22052903002212370300200341286a41086a200341b8016a41086a2903002213370300200320032903b801220e370328200341e8016a2009370300200341e0016a2206200a3703002005201337030020042012370300200341d8016a2008370300200320073703b8012003200e3703c001200341b8016a10e80420032903b801500d00200320063602980120034198016a10e4040b200341b8016a200010b70520032802b801220520032802c00110e3012104024020032802bc01450d00200510390b024002400240024020020d00200341b8016a200010b70520032802b801220520032802c00110e001024020032802bc01450d00200510390b2004450d01200010d9040c010b200341286a200010b70520024105744104722205417f4c0d01200328023021142003280228210620051038220f450d02200341003602c001200320053602bc012003200f3602b801200341b8016a200210ac0220012002200341b8016a10ad022006201420032802b801220520032802c00110e901024020032802bc01450d00200510390b0240200328022c450d00200610390b20040d00200010db04450d0041002802d0a94e4102490d0041002802cca94e210441002802c8a94e210541002802d4a94e2106200341d4016a41b8c0cd00360200200341c8016a4201370300200341ec016a4191d0ca00ad4280808080b00b84370200200341e0016a4189d7ca00ad4280808080f00184370300200341d8016a4200370300200341c0016a4111360200200341f0d6ca003602c40120034281808080a0ec003702f401200341003602e801200341f8d6ca003602bc01200341023602b801200541b8c0cd00200641024622061b200341b8016a200441c0a4c00020061b2802101103000b200341c00c6a24000f0b1034000b1032000bb33201057f024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002802000e2500011818020304180506071808090a0b0c0d0e0f1018181811181218181818181318141815160b0240024002400240024002400240200041086a280200417f6a0e091e001e01021e030405060b200041106a280200450d1d2000410c6a28020010390f0b200041106a280200450d1c2000410c6a28020010390f0b200041106a280200450d1b2000410c6a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141186c210103400240200241046a280200450d00200228020010390b0240200241106a280200450d002002410c6a28020010390b200241186a2102200141686a22010d000b0b200041106a2802002202450d1a200241186c450d1a200028020c10390f0b0240200041146a2802002201450d002000410c6a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041106a2802002202450d192002410c6c450d19200028020c10390f0b200041106a280200450d182000410c6a28020010390f0b200041106a280200450d172000410c6a28020010390f0b02400240200041086a280200417f6a0e020001180b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d172002410c6c450d17200028021010390f0b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041306a2802002202450d00200241246c450d00200028022c10390b0240200041a4016a2802002201450d002000419c016a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b0240200041a0016a2802002202450d00200241246c450d00200028029c0110390b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d162002410c6c450d16200028021010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a2d00004102470d18200041146a280200450d18200041106a28020010390f0b2000410c6a2d00004102470d17200041146a280200450d17200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d16200041386a280200450d16200041346a28020010390f0b2000410c6a2d00004102470d15200041146a280200450d15200041106a28020010390f0b02402000410c6a2802002201450d0020002802042202200141f0006c6a21030340024020022204410c6a2802002201450d0020042802042102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200441f0006a21020240200441086a2802002201450d00200141246c450d00200428020410390b20022003470d000b0b200041086a2802002202450d14200241f0006c450d14200028020410390f0b024002400240024002400240200041086a2d0000417f6a0e1600191919190119190219191919190319190419191919050b2000412c6a2d00004102470d18200041346a280200450d18200041306a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d17200241246c450d17200028020c10390f0b2000410c6a2d00004102470d16200041146a280200450d16200041106a28020010390f0b200041106a28020041ffffff3f71450d152000410c6a28020010390f0b200041146a28020041ffffffff0371450d14200041106a28020010390f0b0240200041146a2802002201450d002000410c6a2802002102200141246c21010340024020022d00004102470d00200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041106a2802002202450d13200241246c450d13200028020c10390f0b20002802042202450d12200041086a280200450d12200210390f0b02400240200041086a280200417f6a0e020001130b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d122002410c6c450d12200028021010390f0b0240200041186a2802002201450d00200041106a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041146a2802002202450d112002410c6c450d11200028021010390f0b02402000410c6a280200450d00200041086a28020010390b02402000411c6a2802002201450d00200041146a28020021022001410c6c210103400240200241046a280200450d00200228020010390b2002410c6a2102200141746a22010d000b0b200041186a2802002202450d102002410c6c450d10200028021410390f0b02400240024020002f0104417f6a0e020001020b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d11200241c0076c450d11200028020810390f0b200041086a220228020010cf0a200228020010390f0b0240200041106a2802002201450d00200041086a2802002102200141c0076c210103402002109602200241c0076a2102200141c0786a22010d000b0b2000410c6a2802002202450d0f200241c0076c450d0f200028020810390f0b0240024002400240024002400240200041086a2d0000417e6a0e0d00011515151515150203040506150b0240200041146a2802002201450d002000410c6a2802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010390b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010390b200241c8006a22022001470d000b0b0240200041106a2802002202450d00200241c8006c450d00200028020c10390b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010390b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010390b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010390b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010390b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010390b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010390b200041f0016a2d00004101470d14200041f8016a280200450d14200041f4016a28020010390f0b0240200041146a2802002202450d00200241c4006c21012000410c6a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010390b200241c4006a2102200141bc7f6a22010d000b0b200041106a2802002202450d13200241c4006c450d13200028020c10390f0b200041106a2d00004102470d12200041186a280200450d12200041146a28020010390f0b2000410c6a2d00004102470d11200041146a280200450d11200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d10200041386a280200450d10200041346a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004101470d0f200041386a280200450d0f200041346a28020010390f0b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b0240024020002d0004417f6a0e03000f010f0b200041286a220228020010cf0a200228020010390f0b2000410c6a28020041ffffff3f71450d0d200041086a28020010390f0b024002400240200041086a280200417f6a0e030f0001020b2000410c6a2d00004102470d0e200041146a280200450d0e200041106a28020010390f0b2000410c6a2d00004102470d0d200041146a280200450d0d200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a2d00004102470d0c200041386a280200450d0c200041346a28020010390f0b0240024002400240024020002d0004417f6a0e050010010203040b200041186a220228020010cf0a200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010cf0a200228020010390f0b2000410c6a280200450d0d200041086a28020010390f0b200041186a220228020010cf0a200228020010390f0b02402000410c6a280200450d00200041086a28020010390b200041246a220228020010cf0a200228020010390f0b0240024002400240200041086a280200417f6a0e03000102030b2000410c6a220228020010cf0a200228020010390f0b2000410c6a220228020010cf0a200228020010390f0b2000410c6a2d00004102470d0b200041146a280200450d0b200041106a28020010390f0b02402000410c6a2d00004102470d00200041146a280200450d00200041106a28020010390b200041306a220228020010cf0a200228020010390f0b20002d00042202417e6a4108490d0920024101460d08200041c8006a220228020010cf0a200228020010390f0b0240024002400240200041086a2d0000417f6a0e03000102030b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041186a220228020010cf0a200228020010390f0b0240200041106a28020041ffffff3f71450d002000410c6a28020010390b200041286a280200450d0a200041246a28020010390f0b200041306a28020041ffffff3f71450d092000412c6a28020010390f0b200041306a28020041ffffff3f71450d082000412c6a28020010390f0b02402000413c6a28020041ffffffff0171450d00200041386a28020010390b0240200041c8006a2802002202450d002002410c6c450d00200041c4006a28020010390b0240200041d4006a28020041ffffffff0071450d00200041d0006a28020010390b0240200041e0006a2802002202450d00200241146c450d00200041dc006a28020010390b0240200041ec006a2802002202450d00200241186c450d00200041e8006a28020010390b0240200041f8006a2802002202450d002002411c6c450d00200041f4006a28020010390b024020004184016a28020041ffffff3f71450d0020004180016a28020010390b024020004190016a2802002202450d00200241246c450d002000418c016a28020010390b02402000419c016a2802002202450d00200241286c450d0020004198016a28020010390b0240200041a8016a2802002202450d002002412c6c450d00200041a4016a28020010390b0240200041b4016a2802002202450d00200241306c450d00200041b0016a28020010390b0240200041c0016a2802002202450d00200241346c450d00200041bc016a28020010390b0240200041cc016a2802002202450d00200241386c450d00200041c8016a28020010390b0240200041d8016a2802002202450d002002413c6c450d00200041d4016a28020010390b0240200041e4016a28020041ffffff1f71450d00200041e0016a28020010390b200041f0016a2802002202450d07200241c4006c450d07200041ec016a28020010390f0b02402000410c6a2802002201450d0020002802042102200141d0006c21040340200228020021010240200241086a22032802002205450d00200110390b2002200136020020032005360200200241d0006a2102200441b07f6a22040d000b0b0240200041086a2802002202450d00200241d0006c450d00200028020410390b0240200041186a2802002201450d00200041106a2802002102200141f4026c21010340200210c203200241f4026a21022001418c7d6a22010d000b0b0240200041146a2802002202450d00200241f4026c450d00200028021010390b0240200041246a2802002202450d00200241306c21012000411c6a28020041086a21020340024020022802002204450d00200441c8006c450d002002417c6a28020010390b200241306a2102200141506a22010d000b0b0240200041206a2802002202450d00200241306c450d00200028021c10390b0240200041346a2802002201450d002000412c6a2802002102200141246c210103400240024002400240024020022d00000e050400010204030b2002410c6a280200450d03200241086a28020010390c030b2002410c6a280200450d02200241086a28020010390c020b2002410c6a280200450d01200241086a28020010390c010b200241086a280200450d00200241046a28020010390b200241246a21022001415c6a22010d000b0b200041306a2802002202450d06200241246c450d06200028022c10390f0b02400240024002402000280204417f6a0e0400010203090b200041106a280200450d082000410c6a28020010390f0b200041106a280200450d072000410c6a28020010390f0b200041106a280200450d062000410c6a28020010390f0b200041106a280200450d052000410c6a28020010390f0b02400240200041086a2d0000417f6a0e020001060b0240200041146a280200450d00200041106a28020010390b200041206a280200450d052000411c6a28020010390f0b0240200041346a280200450d00200041306a28020010390b200041c0006a280200450d042000413c6a28020010390f0b02400240200041086a280200417f6a0e050005050501050b0240200041146a280200450d00200041106a28020010390b200041206a280200450d042000411c6a28020010390f0b200041106a108b030f0b200041086a2d00004107470d02200041146a280200450d02200041106a28020010390c020b0240024002400240200041086a280200417f6a0e03000102030b200041106a108d02200041d8036a108b030f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d03200241f8036c450d03200028020c10390f0b200041186a108d02200041e0036a108d020240200041146a2802002201450d002000410c6a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041106a2802002202450d02200241f8036c450d02200028020c10390f0b2000410c6a220228020010d00a200228020010390f0b200041286a220228020010cf0a200228020010390f0b0b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210cf0a0b0f0b200041086a108d02200041046a220228020010d00a200228020010390b130020004105360204200041d0dcca003602000b3400200041dae5c00036020420004100360200200041146a4101360200200041106a4194f4ca00360200200041086a42073702000b130020004101360204200041dcf5ca003602000b3801017f02404110103822020d001032000b2002420037000820024280a094a58d1d370000200020023602002000429080808080023702040b13002000410436020420004188faca003602000b3400200041f88bcb0036020420004100360200200041146a4101360200200041106a41988bcb00360200200041086a42073702000b130020004101360204200041d08ccb003602000b130020004104360204200041d897cb003602000b3400200041e1e5c00036020420004100360200200041146a4104360200200041106a41e4b1cb00360200200041086a42083702000b130020004101360204200041f8b8cb003602000b3701017f02404110103822020d001032000b2002420037000820024280c8afa025370000200020023602002000429080808080023702040b130020004109360204200041e8c2cb003602000b3400200041ade6c00036020420004100360200200041146a4103360200200041106a41b0facb00360200200041086a42083702000b1300200041043602042000418c81cc003602000b3901017f02404110103822020d001032000b2002420037000820024280a0e5b9c29101370000200020023602002000429080808080023702040b2b01017f02404102103822020d001032000b20002002360200200241093b000020004282808080203702040b3801017f02404110103822020d001032000b200242003700082002428090cad2c60e370000200020023602002000429080808080023702040bcf05000240024020022001490d0020032002490d00200141086a20034b0d010b200041013a0000200041086a411e360200200041046a419f8ccc003602000f0b0240200220016b220120024b0d002001200320026b6a210202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020010e080001020304050607080b20020e0808090a0b0c0d0e0f070b2002417f6a0e070f101112131415060b2002417e6a0e0615161718191a050b2002417d6a0e051a1b1c1d1e040b2002417c6a0e041e1f2021030b2002417b6a0e03212223020b2002417a6a0e022324010b20024107460d240b200041013a0000200041086a4109360200200041046a41bd8ccc003602000f0b200041003b01000f0b20004180023b01000f0b20004180043b01000f0b20004180063b01000f0b20004180083b01000f0b200041800a3b01000f0b200041800c3b01000f0b200041800e3b01000f0b20004180103b01000f0b20004180123b01000f0b20004180143b01000f0b20004180163b01000f0b20004180183b01000f0b200041801a3b01000f0b200041801c3b01000f0b200041801e3b01000f0b20004180203b01000f0b20004180223b01000f0b20004180243b01000f0b20004180263b01000f0b20004180283b01000f0b200041802a3b01000f0b200041802c3b01000f0b200041802e3b01000f0b20004180303b01000f0b20004180323b01000f0b20004180343b01000f0b20004180363b01000f0b20004180383b01000f0b200041803a3b01000f0b200041803c3b01000f0b200041803e3b01000f0b20004180c0003b01000f0b20004180c2003b01000f0b20004180c4003b01000f0b20004180c6003b01000f0b200041013a0000200041086a4116360200200041046a41c68ccc003602000b3400200041dc8ccc0036020420004100360200200041146a4103360200200041106a41ec8ccc00360200200041086a420f3702000b2701017f230041d0006b22022400200241003602082000200241086a109a09200241d0006a24000b8f0201027f20014180feff07714108762102024002402001410171450d00411f21034187d6c000210102400240200241ff01710e03000103000b41c100210341c6d5c00021010c020b41c10021034185d5c00021010c010b411f210341e6d4c0002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341c6d4c00021010c080b4127210341e6d3c00021010c070b4117210341cfd3c00021010c060b41b0d3c00021010c050b41262103418ad3c00021010c040b412a210341e0d2c00021010c030b41392103418dd4c00021010c020b413b210341a5d2c00021010c010b41d200210341d3d1c00021010b20002003360204200020013602000b130020004105360204200041fc96cc003602000b130020004103360204200041849acc003602000b130020004110360204200041ac9ccc003602000b13002000410d360204200041d0a9cc003602000b13002000410e36020420004180b3cc003602000b9d0801027f02400240024002400240024002400240024020002d00000e0a00010203040506070707080b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0620024198046c450d06200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0520024198046c450d05200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b0240200041186a2802002201450d00200041106a280200210220014198046c21010340200210a00220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0420024198046c450d04200028021010390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b200041086a2802002202450d03200241f8036c450d03200028020410390f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041106a108d020f0b02402000410c6a2802002201450d00200041046a2802002102200141f8036c210103402002108b02200241f8036a2102200141887c6a22010d000b0b0240200041086a2802002202450d00200241f8036c450d00200028020410390b200041206a108d020240200041186a2802002201450d00200041106a280200210220014198046c21010340200210920220024198046a2102200141e87b6a22010d000b0b200041146a2802002202450d0120024198046c450d01200028021010390f0b200041106a21020240200041d4076a280200450d00200041d0076a28020010390b20022802004126460d00200210c1040b0f0b200041086a108d02200041046a220228020010eb0a200228020010390b100020002802002000280204200110690b130020004106360204200041dcc4cc003602000b3400200041b5e6c00036020420004100360200200041146a4103360200200041106a41e0d4cc00360200200041086a42093702000bba0603097f017e077f23004180016b220241286a41047221032001280204210441002105417f21060240034020042005460d012001200420066a36020420012001280200220741016a360200200320056a20072d00003a00002002200541016a22073602282006417f6a210620072105200741c000470d000b2002200241286a41356a22052900003703702002200241e4006a290000370077200220022f012c3b0124200220022d002e3a0026200241366a28010021012002413d6a2800002106200241c4006a2802002107200241cb006a2800002104200241d2006a2801002103200241d9006a2800002108200228002f21092002280073210a2002290077210b200241206a41026a220c200241356a2d00003a00002002200241286a410b6a2f00003b01202002411c6a41026a220d2002413c6a2d00003a00002002200241286a41126a2f01003b011c200241186a41026a220e200241c3006a2d00003a00002002200241286a41196a2f00003b0118200241146a41026a220f200241ca006a2d00003a00002002200241286a41206a2f01003b0114200241106a41026a2210200241d1006a2d00003a00002002200241286a41276a2f00003b01102002410c6a41026a2211200241d8006a2d00003a00002002200241286a412e6a2f01003b010c200241086a41026a2212200241df006a2d00003a0000200220052f00003b0108200041036a20022d00263a0000200020022f01243b0001200041086a20022f01203b00002000410a6a200c2d00003a00002000410f6a20022f011c3b0000200041116a200d2d00003a0000200041166a20022f01183b0000200041186a200e2d00003a00002000411f6a200f2d00003a00002000411d6a20022f01143b0000200041266a20102d00003a0000200041246a20022f01103b00002000412d6a20112d00003a00002000412b6a20022f010c3b0000200041346a20122d00003a0000200041326a20022f01083b0000200041396a200b370000200041356a200a3600002000412e6a2008360000200041276a2003360000200041206a2004360000200041196a2007360000200041126a20063600002000410b6a2001360000200041046a2009360000200041003a00000f0b200041013a00000bc30603097f017e077f23004180016b220241286a410472210320012802002204280204210541002101417f21060340024020052001470d00200041013a00000f0b200428020022072d000021082004200520066a3602042004200741016a360200200320016a20083a00002002200141016a22073602282006417f6a210620072101200741c000470d000b2002200241286a41356a22012900003703702002200241e4006a290000370077200220022f012c3b0124200220022d002e3a0026200241366a28010021042002413d6a2800002106200241c4006a2802002107200241cb006a2800002105200241d2006a2801002108200241d9006a2800002103200228002f21092002280073210a2002290077210b200241206a41026a220c200241356a2d00003a00002002200241286a410b6a2f00003b01202002411c6a41026a220d2002413c6a2d00003a00002002200241286a41126a2f01003b011c200241186a41026a220e200241c3006a2d00003a00002002200241286a41196a2f00003b0118200241146a41026a220f200241ca006a2d00003a00002002200241286a41206a2f01003b0114200241106a41026a2210200241d1006a2d00003a00002002200241286a41276a2f00003b01102002410c6a41026a2211200241d8006a2d00003a00002002200241286a412e6a2f01003b010c200241086a41026a2212200241df006a2d00003a0000200220012f00003b0108200041036a20022d00263a0000200020022f01243b0001200041086a20022f01203b00002000410a6a200c2d00003a00002000410f6a20022f011c3b0000200041116a200d2d00003a0000200041166a20022f01183b0000200041186a200e2d00003a00002000411f6a200f2d00003a00002000411d6a20022f01143b0000200041266a20102d00003a0000200041246a20022f01103b00002000412d6a20112d00003a00002000412b6a20022f010c3b0000200041346a20122d00003a0000200041326a20022f01083b0000200041396a200b370000200041356a200a3600002000412e6a2003360000200041276a2008360000200041206a2005360000200041196a2007360000200041126a20063600002000410b6a2004360000200041046a2009360000200041003a00000bb60401037f230041106b22052400200542003702044100210620054100280284ee4d22073602000240024002400240024020002802000e03000102040b20054100410110772005280200200528020822076a41003a00002005200741016a360208200041086a200510b5022000280204210002402005280204200528020822066b41034b0d002005200641041077200528020821060b2005280200220720066a2000360000200641046a21060c020b20054100410110772005280200200528020822076a41013a00002005200741016a360208200041086a200510b5022000280204210002402005280204200528020822066b41034b0d002005200641041077200528020821060b2005280200220720066a2000360000200641046a21060c010b20054100410110772005280200200528020822076a41023a00002005200741016a360208200041086a200510b5022000280204210002402005280204200528020822066b41034b0d002005200641041077200528020821060b2005280200220720066a2000360000200641046a21060b200520063602080b02402005280204220020066b41074b0d0020052006410810772005280200210720052802042100200528020821060b200720066a20033700002005200641086a22063602080240200020066b41074b0d0020052006410810772005280204210020052802002107200528020821060b200720066a200437000020022007200641086a200110bc01210602402000450d00200710390b200541106a240020060b130020004106360204200041d8e3cc003602000b3400200041e3c0cc0036020420004100360200200041146a4103360200200041106a41fcfdcc00360200200041086a42093702000b130020004104360204200041e083cd003602000b2e01017f02404104103822020d001032000b2000200236020020024180a00136000020004284808080c0003702040b2f01017f02404104103822020d001032000b200020023602002002418080c00236000020004284808080c0003702040b3601017f02404110103822020d001032000b2002420037000820024280e1eb17370000200020023602002000429080808080023702040b3901017f02404110103822020d001032000b20024200370008200242808095e789c604370000200020023602002000429080808080023702040b1300200041033602042000419098cd003602000b3400200041f5e7c00036020420004100360200200041146a4104360200200041106a41c8a6cd00360200200041086a42083702000b130020004104360204200041f8b0cd003602000b2c01017f02404104103822020d001032000b200020023602002002410836000020004284808080c0003702040b2c01017f02404104103822020d001032000b200020023602002002412436000020004284808080c0003702040b2e01017f02404104103822020d001032000b20002002360200200241c0b20436000020004284808080c0003702040bd20702057f027e230041d0006b2202240002400240200128020422030d00200041073a00000c010b200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240024002400240024002400240024002400240024020050e0700010203040506070b200041003a00000c0c0b200241086a2001108c0502402002290308a70d00200241086a41106a290300210720022903102108200041013a0000200041086a2008370300200041106a20073703000c0c0b200041073a00000c0b0b0240200110ba022207a74101710d00200041023a0000200020074208883e00010c0b0b200041073a00000c0a0b2006450d0820042d0001210520012003417e6a22063602042001200441026a360200200220053a002c20060d050c080b200241286a200110bb02024020022d00284101460d0020002002290029370001200041096a200241286a41096a290000370000200041043a00000c090b200041073a00000c080b200241286a2001108602024020022d00284101460d0020002002290029370001200041196a200241286a41196a290000370000200041116a200241286a41116a290000370000200041096a200241286a41096a290000370000200041053a00000c080b200041073a00000c070b200241206a200110c10120022802200d012001280204220420022802242203490d012003417f4c0d030240024020030d00410121050c010b200310382205450d0520054100200310d60b1a0b200520012802002206200310d40b21052001200420036b3602042001200620036a360200200041046a2005360000200041063a0000200041086a2003ad22074220862007843700000c060b200041073a00000c050b200041073a00000c040b20042d0002210520012003417d6a22063602042001200441036a360200200220053a002d2006450d0220042d0003210520012003417c6a22063602042001200441046a360200200220053a002e2006450d0220042d0004210520012003417b6a22063602042001200441056a360200200220053a002f2006450d0220042d0005210520012003417a6a22063602042001200441066a360200200241306a20053a00002006450d0220042d000621052001200341796a22063602042001200441076a360200200241316a20053a00002006450d0220042d000721052001200341786a22063602042001200441086a360200200241326a20053a00002006450d02200241336a20042d00083a00002001200341776a3602042001200441096a3602002000200229022c370001200041033a00000c030b1034000b1032000b200041073a00000b200241d0006a24000bb91103067f027e037f230041d0006b22022400024002402001280200220328020422040d00200041073a00000c010b200328020022052d0000210620032004417f6a22073602042003200541016a3602000240024002400240024002400240024002400240024002400240024002400240024020060e0700010203040506070b200041003a00000c100b2002200110f50402402002290300a70d00200241106a290300210820022903082109200041013a0000200041086a2009370300200041106a20083703000c100b200041073a00000c0f0b200242003703282007450d0d20052d0001210120032004417e6a22063602042003200541026a36020020024101360228200220013a002c20060d050c0d0b20070d050c0b0b20070d050c090b200241286a410472210a41002101417e21060340024020072001470d00200041073a00000c0d0b200520016a220b41016a2d0000210c2003200420066a3602042003200b41026a360200200a20016a200c3a00002002200141016a220b3602282006417f6a2106200b2101200b4120470d000b200041086a200241286a410b6a2f00003b00002000410a6a200241356a2d00003a00002000410f6a200241286a41126a2f01003b0000200041116a2002413c6a2d00003a0000200041186a200241c3006a2d00003a0000200041166a200241286a41196a2f00003b0000200220022f012c3b0124200220022d002e3a0026200241366a28010021012002413d6a2800002103200241c4006a2902002108200228002f2106200041036a20022d00263a0000200020022f01243b0001200041196a2008370000200041126a20033600002000410b6a2001360000200041046a2006360000200041053a00000c0b0b200241186a2001108c020240024020022802180d0020032802042206200228021c2201490d002001417f4c0d070240024020010d004101210b0c010b20011038220b450d09200b4100200110d60b1a200328020421060b200620014f0d01200b10390b200041073a00000c0b0b200b20032802002204200110d40b210b2003200620016b3602042003200420016a360200200041086a2001ad2208422086200884370000200041046a200b360000200041063a00000c0a0b200041073a00000c090b20052d0002210120032004417d6a22063602042003200541036a36020020024102360228200220013a002d2006450d0720052d0003210120032004417c6a22063602042003200541046a36020020024103360228200220013a002e2006450d0720052d0004210120032004417b6a3602042003200541056a360200200220013a002f2002410436022820022903282208a741044f0d0241958bcc00411b41b08bcc001035000b20052d0001210120032004417e6a22063602042003200541026a360200200220013a002c2006450d0520052d0002210120032004417d6a22063602042003200541036a360200200220013a002d2006450d0520052d0003210120032004417c6a22063602042003200541046a360200200220013a002e2006450d0520052d0004210120032004417b6a22063602042003200541056a360200200220013a002f2006450d0520052d0005210120032004417a6a22063602042003200541066a360200200241306a20013a00002006450d0520052d000621012003200441796a22063602042003200541076a360200200241316a20013a00002006450d0520052d000721012003200441786a22063602042003200541086a360200200241326a20013a00002006450d05200241336a20052d00083a00002003200441776a3602042003200541096a3602002000200229022c370001200041033a00000c070b20052d0001210120032004417e6a22063602042003200541026a360200200220013a002c2006450d0320052d0002210120032004417d6a22063602042003200541036a360200200220013a002d2006450d0320052d0003210120032004417c6a22063602042003200541046a360200200220013a002e2006450d0320052d0004210120032004417b6a22063602042003200541056a360200200220013a002f2006450d0320052d0005210120032004417a6a22063602042003200541066a360200200241306a20013a00002006450d0320052d000621012003200441796a22063602042003200541076a360200200241316a20013a00002006450d0320052d000721012003200441786a22063602042003200541086a360200200241326a20013a00002006450d0320052d000821012003200441776a22063602042003200541096a360200200241336a20013a00002006450d0320052d000921012003200441766a220636020420032005410a6a360200200241346a20013a00002006450d0320052d000a21012003200441756a220636020420032005410b6a360200200241356a20013a00002006450d0320052d000b21012003200441746a220636020420032005410c6a360200200241366a20013a00002006450d0320052d000c21012003200441736a220636020420032005410d6a360200200241376a20013a00002006450d0320052d000d21012003200441726a220636020420032005410e6a360200200241386a20013a00002006450d0320052d000e21012003200441716a220636020420032005410f6a360200200241396a20013a00002006450d0320052d000f21012003200441706a22063602042003200541106a3602002002413a6a220b20013a00002006450d0320052d0010210120032004416f6a3602042003200541116a3602002002413b6a20013a0000200241286a410b6a2f00002101200241356a2d00002103200241366a280100210620022f012c210420022d002e2105200228002f210c2000410f6a200b2f01003b00002000410b6a20063600002000410a6a20033a0000200041086a20013b0000200041046a200c360000200041036a20053a0000200020043b0001200041043a00000c060b200041023a0000200020084220883e00010c050b1034000b1032000b200041073a00000c020b200041073a00000c010b200041073a00000b200241d0006a24000b8f0701047f230041106b220224000240024002400240024002400240024020002d00000e0700010203040506070b0240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41003a00002003200041016a3602000c060b200041086a21040240200141046a280200200141086a22032802002200470d002001200041011077200328020021000b200128020020006a41013a00002003200041016a3602002002200436020c2002410c6a200110df020c050b0240200141046a2205280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41023a00002004200341016a22033602000240200528020020036b41034b0d002001200341041077200141086a28020021030b200128020020036a2000280001360000200141086a200341046a3602000c040b0240200141046a2205280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41033a00002004200341016a22033602000240200528020020036b41074b0d002001200341081077200141086a28020021030b200128020020036a2000290001370000200141086a200341086a3602000c030b0240200141046a2205280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41043a00002004200341016a2203360200200041016a21000240200528020020036b410f4b0d002001200341101077200141086a28020021030b200128020020036a22042000290000370000200441086a200041086a290000370000200141086a200341106a3602000c020b0240200141046a2205280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41053a00002004200341016a2203360200200041016a21000240200528020020036b411f4b0d002001200341201077200141086a28020021030b200128020020036a22042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200141086a200341206a3602000c010b0240200141046a280200200141086a22042802002203470d002001200341011077200428020021030b200128020020036a41063a00002004200341016a36020020002802042000410c6a280200200110b9020b200241106a24000bd60202027f017e23004180016b2202240020002802002100024002400240024020012802002203411071450d0020002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d030b200141f1c5c0004102200220006a41800120006b104921000c010b02402003412071450d0020002903002104418001210002400340024020000d00410021000c020b200220006a417f6a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004181014f0d040b200141f1c5c0004102200220006a41800120006b104921000c010b20002903002001104621000b20024180016a240020000f0b200041800141e087c0001054000b200041800141e087c0001054000b0d00200141daedcd004102104c0b9b0702027f047e230041f0016b2202240020002802002100024002400240024020012802002203411071450d00200041086a290300210420002903002105418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d030b200141f1c5c0004102200241f0006a20006a41800120006b104921000c010b02402003412071450d00200041086a290300210420002903002105418001210002400340024020000d00410021000c020b200241f0006a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b20004181014f0d040b200141f1c5c0004102200241f0006a20006a41800120006b104921000c010b200041086a2903002104200029030021062002412736026c02400240200442ffff1f560d0020064213882004422d868442bda282a38eab04802104420021050c010b200241386a2006420042f3b2d8c19e9ebdcc957f420010d30b200241286a2006420042d2e1aadaeda7c987f600420010d30b200241d8006a2004420042f3b2d8c19e9ebdcc957f420010d30b200241c8006a2004420042d2e1aadaeda7c987f600420010d30b200241c8006a41086a290300200241286a41086a290300200241386a41086a290300220520022903287c2204200554ad7c220720022903487c2205200754ad7c2005200241d8006a41086a290300200420022903587c200454ad7c7c2204200554ad7c2207423e8821052004423e8820074202868421040b200241186a20042005428080e0b0b79fb79cf500427f10d30b200229031820067c200241f0006a200241ec006a106702402004200584500d00200241f0006a41146a4130200228026c416c6a10d60b1a2002411436026c200241086a20044213882005422d8684220542bda282a38eab048022062004428080e0b0b79fb79cf500427f10d30b200229030820047c200241f0006a200241ec006a1067200542bda282a38eab04540d00200241f1006a4130200228026c417f6a10d60b1a20022006a74130723a00702002410036026c0b200141b8c0cd004100200241f0006a200228026c22006a412720006b104921000b200241f0016a240020000f0b200041800141e087c0001054000b200041800141e087c0001054000b6601017f230041206b220424002004200136020420042000360200200441086a41106a200241106a290200370300200441086a41086a200241086a29020037030020042002290200370308200441e895ce00200441046a41e895ce00200441086a20031056000b130020004104360204200041f8b8cd003602000ba70203017f017e077f02400240200028020022012000280204470d00420221020c010b200028020c21032000200141226a36020002400240200028020828020022002802042204450d0020002802002105034020042f015e22064102742107410021004100210802400240034020072000460d012001200420006a41046a280200412010d70b2209450d02200041046a2100200841016a21082009417f4a0d000b2008417f6a21060b2005450d022005417f6a2105200420064102746a41e0006a28020021040c010b0b200420084102746a41306a280200220041808004490d010b200341013a0000420021020c010b20013301204220862000411074ad8442018421020b420020022002a741ffff03714102461b22024280807c83200242ffff0383420052ad840be50301077f230041d0006b22022400200241a2c0cd00410f10cb01200241106a418ce9cd00410c10cb01200220013703302002200241306a410810cc01370338200241c0006a410c6a200241306a41086a3602002002200241386a41086a3602442002200241306a3602482002200241386a360240200241206a200241c0006a108301024002402002280228220341206a2204417f4c0d000240024020040d00410121050c010b200410382205450d020b2000200536020041002106200041086a22074100360200200041046a2208200436020002402004410f4b0d00200041004110107720072802002106200028020021050b200520066a22042002290000370000200441086a200241086a2900003700002007200641106a220436020002402008280200220620046b410f4b0d002000200441101077200041046a2802002106200041086a28020021040b200041086a2207200441106a22053602002000280200220820046a22042002290010370000200441086a200241106a41086a290000370000200228022021040240200620056b20034f0d00200020052003107720072802002105200028020021080b200820056a2004200310d40b1a2007200520036a36020002402002280224450d00200410390b200241d0006a24000f0b1034000b1032000bbf0302087f017e230041c0006b22012400200141286a22024200370300200141206a22034200370300200141106a41086a2204420037030020014200370310200141306a41b69fc500410710cb012004200141306a41086a220529000037030020012001290030370310200141306a41f4c9c800410a10cb012002200529000037030020032001290030370300200141306a200141106a10bf0241002106200128023022074100280284ee4d20071b21080240024002402001290234420020071b2209422088a720004b0d00200942ffffff3f8350450d010c020b20024200370300200342003703002004420037030020014200370310200141306a41b69fc500410710cb012004200529000037030020012001290030370310200141306a41d091c600410c10cb01200341086a200529000037000020032001290030370000200141086a200141106a412010ce03200141106a200128020c410020012802081b2204200010d10420012802102207200128021810e301210302402001280214450d00200710390b41012106024020030d002004200820004105746a10c30941004721060b200942ffffff3f83500d010b200810390b200141c0006a240020060b130020004104360204200041b4c5cd003602000b3400200041bee6c00036020420004100360200200041146a4101360200200041106a41b8d0cd00360200200041086a42043702000bee2a04057f017e027f017e230041a0096b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e260203040506070801090a0b010c0d0e0f101112131415161718191a1b1c1d1e1f202122232400020b200241e0016a200141086a10ab06200041086a200241e0016a41b80710d40b1a200041253602000c240b000b200241e0016a200141086a10ac0620004100360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c220b200241e0016a200141086a10ad06200041086a200241e0016a41a00210d40b1a200041013602000c210b20004102360200200041086a200141086a2903003703000c200b41042103200141046a210402400240024002400240024020012d0004417f6a0e050102030400010b200141086a2802002101410521030c040b200141086a2802002101410121030c030b41022103200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e001200141286a2802002104200141086a28020021010c020b200141086a2802002101410321030c010b200241026a200441036a2d00003a0000200241e0016a41086a200141146a290200370300200241f0016a2001411c6a290200370300200241f8016a200141246a2d00003a0000200220042f00013b010020022001410c6a2902003703e00120012d00254100472105200141286a2802002104200141086a28020021010b200020033a0004200020022f01003b0005200020053a002520004103360200200041086a20013602002000410c6a20022903e001370200200041286a2004360200200041076a200241026a2d00003a0000200041146a200241e0016a41086a2903003702002000411c6a200241f0016a290300370200200041246a200241f8016a2d00003a00000c1f0b200241e0016a200141086a10ae06200041086a200241e0016a41e00010d40b1a200041043602000c1e0b200241e0016a200141046a10af06200041053602002000410c6a200241e8016a280200360200200020022903e0013702040c1d0b200241e0016a200141086a10b006200041086a200241e0016a41d80010d40b1a200041063602000c1c0b02400240200128020422040d00410021030c010b200241e0016a41186a200141286a290000370300200241e0016a41106a200141206a290000370300200241e8016a200141186a290000370300200241e0016a41286a200141386a290000370300200241e0016a41306a200141c0006a290000370300200241e0016a41386a200141c8006a290000370300200241e0016a41c8006a200141d8006a290000370300200241e0016a41d0006a200141e0006a290000370300200241e0016a41d8006a200141e8006a2900003703002002200141106a2900003703e0012002200141306a290000370380022002200141d0006a2900003703a002200241e0016a41f8006a20014188016a290000370300200241e0016a41f0006a20014180016a290000370300200241e0016a41e8006a200141f8006a290000370300200241e0016a4188016a20014198016a290000370300200241e0016a4190016a200141a0016a290000370300200241e0016a4198016a200141a8016a290000370300200241e0016a41a8016a200141b8016a290000370300200241e0016a41b0016a200141c0016a290000370300200241e0016a41b8016a200141c8016a2900003703002002200141f0006a2900003703c002200220014190016a2900003703e0022002200141b0016a290000370380032001410c6a2802002201417f4c0d1d0240024020010d00410121030c010b200110382203450d1f0b20032004200110d40b1a2002200241e0016a41c00110d40b1a0b200020033602042000410c6a2001360200200041086a2001360200200041106a200241c00110d40b1a200041083602000c1b0b200241e0016a200141086a10b106200041086a200241e0016a41980210d40b1a200041093602000c1a0b200141106a2802002203417f4c0d1a20012802042105200141086a28020021060240024020030d00410121040c010b200310382204450d1c0b200220033602e401200220043602e00120042006200310d40b1a200241e0016a41086a22042003360200200241ec016a200141146a10b206200241086a22032004290300370300200241106a2204200241e0016a41106a290300370300200220022903e001370300200129032021072001280228210620002005360204200041e4006a2001412c6a220141386a290200370200200041dc006a200141306a290200370200200041d4006a200141286a290200370200200041cc006a200141206a290200370200200041c4006a200141186a2902003702002000413c6a200141106a290200370200200041346a200141086a2902003702002000412c6a2001290200370200200041286a2006360200200041206a20073702002000410a360200200041086a2002290300370200200041106a2003290300370200200041186a20042903003702000c190b024002400240024020012f0104417f6a0e03010200010b2002410472200141086a10b306200241033b01000c020b2002410472200141086a10b306200241013b01000c010b20012f0106210341c00710382204450d1b200241e0016a200141086a28020010aa0620022004200241e0016a41c00710d40b360204200220033b0102200241023b01000b200041046a220120022903003702002000410c360200200141086a200241086a2903003702000c180b200241e0016a200141086a10d005200041086a200241e0016a41a80210d40b1a2000410d3602000c170b200141046a210841082109024002400240024002400240024002400240024020012d0004417f6a0e09010203040506070900010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410921090c070b200241d0016a41086a2209200141106a2800003602002002200141086a2900003703d0012002200141186a2900003703e00120022001411d6a2900003700e501200141146a280200210420012f0106210520012d0005210641c00710382203450d202003200141286a28020010b406200241c0016a41086a2009280200360200200220022903d0013703c001200220022903e001370300200220022900e501370005410121090c070b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410221090c060b200241c0016a200141086a10b506200141146a280200210420012f01062105410321090c050b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410421090c040b200241c0016a41086a200141106a2802003602002002410f6a200841236a2d00003a0000200241e0016a41086a200141346a290200370300200241e0016a41106a2001413c6a290200370300200241e0016a41186a200141c4006a2d00003a00002002200141086a2902003703c0012002200141186a29020037030020022001411d6a2900003700052002200841216a2f00003b000d20022001412c6a2902003703e001200141286a2802002103200141146a280200210420012f0106210520012d00052106410521090c030b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410621090c010b200241c0016a41086a200141106a2802003602002002200141086a2902003703c0012002200141186a29020037030020022001411d6a290000370005200141146a280200210420012f0106210520012d00052106410721090b0b200020053b0106200020063a0005200020093a0004200041086a20022903c001370200200041146a2004360200200041186a2002290300370200200041286a20033602002000412c6a20022903e001370200200041106a200241c0016a41086a280200360200200041206a200241086a290300370200200041346a200241e0016a41086a2903003702002000413c6a200241e0016a41106a290300370200200041c4006a200241e0016a41186a2802003602002000410e3602000c160b200241e0016a200141086a10b606200041086a200241e0016a41f80010d40b1a2000410f3602000c150b200241e0016a200141046a10b70620004110360200200041246a20024180026a2802003602002000411c6a200241f8016a290300370200200041146a200241e0016a41106a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c140b200241e0016a200141086a10b80620004111360200200041306a200241e0016a41286a290300370300200041286a200241e0016a41206a290300370300200041206a200241e0016a41186a290300370300200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c130b200241e0016a200141046a10b906200041046a200241e0016a41c80010d40b1a200041123602000c120b200241e0016a200141086a10ba06200041086a200241e0016a41c80010d40b1a200041133602000c110b200241e0016a41306a200141386a10bb06200241e0016a41286a200141306a290300370300200241e0016a41206a200141286a290300370300200241e0016a41186a200141206a290300370300200241e0016a41106a200141186a290300370300200241e0016a41086a200141106a2903003703002002200141086a2903003703e0012002200141f8016a2802003602d00320014180026a2903002107200041086a200241e0016a41f80110d40b1a20004180026a2007370300200041143602000c100b200241e0016a200141086a10bc0620004115360200200041186a200241e0016a41106a290300370300200041106a200241e0016a41086a290300370300200041086a20022903e0013703000c0f0b10bd06000b10be06000b200241e0016a200141046a10bf06200241ec016a200141106a10c006200241e0016a41186a2001411c6a10c106200241286a200141d0006a290200370300200241206a200141c8006a290200370300200241186a200141c0006a290200370300200241386a200141e0006a290200370300200241c0006a200141e8006a290200370300200241c8006a200141f0006a290200370300200241d8006a20014180016a290200370300200241e0006a20014188016a290200370300200241e8006a20014190016a2902003703002002200141386a2902003703102002200141d8006a2902003703302002200141f8006a290200370350200141286a280200210320024104722001412c6a10c2062002200336020020024184026a200241f00010d40b1a200041046a2002200241e0016a41940110d40b41940110d40b1a200041183602000c0c0b10f705000b200241e0016a200141046a10c3062000411a360200200041146a200241f0016a2903003702002000410c6a200241e8016a290300370200200020022903e0013702040c0a0b2000411b360200200020012802043602040c090b10c406000b10c506000b4105210302400240024002400240024002402001280204417f6a0e06010203040605000b41e1d1cd00412841e8e0c2001035000b200141106a28020021042001410c6a2802002105200141086a2802002106410121030c040b200141086a2802002106410221030c030b2001410c6a2802002105200141086a2802002106410321030c020b200141086a2802002106410421030c010b410621030b200020033602042000411e360200200041106a20043602002000410c6a2005360200200041086a20063602000c060b10c606000b200241e0016a200141086a10c706200041086a200241e0016a41d00010d40b1a200041203602000c040b024002400240024002400240200141086a22032d0000417f6a0e03010203000b41e1d1cd004128418483c6001035000b200241026a200341036a2d00003a0000200241e0016a41086a200141186a290300370300200241e0016a41106a200141206a290300370300200241e0016a41186a200141286a2d00003a0000200220032f00013b01002002200141106a2903003703e001200141c0006a2903002107200141386a290300210a200141346a2802002103200141306a28020021042001410c6a28020021052001412c6a2802002101410121060c030b2001410c6a2802002105410221060c010b2001410c6a2802002105410321060b0b200020022f01003b0009200041c0006a2007370300200041386a200a370300200041086a20063a00002000410c6a2005360200200041106a20022903e001370300200041346a2003360200200041306a20043602002000412c6a20013602002000410b6a200241026a2d00003a0000200041186a200241e0016a41086a290300370300200041206a200241e0016a41106a290300370300200041286a200241e0016a41186a280200360200200041213602000c030b200241e0016a200141086a10c806200041086a200241e0016a41f00310d40b1a200041223602000c020b41032103024002400240200141086a280200417f6a0e03000102000b200141106a28020021052001410c6a2802002104410121030c010b200141286a290300210a200141206a2903002107200141186a2802002109200141146a2802002106200141106a28020021052001410c6a2802002104410221030b20004123360200200041286a200a370300200041206a2007370300200041186a2009360200200041146a2006360200200041106a20053602002000410c6a2004360200200041086a20033602000c010b200241e0016a200141086a10c906200041086a200241e0016a41d80010d40b1a200041243602000b200241a0096a24000f0b1034000b1032000b1c002001280218418eefcd00410a2001411c6a28020028020c1100000bf10801067f02400240024002400240024002400240024002400240024020012d00000e0a01020304050607080900010b4104210241062103024002400240024002400240024002400240200141046a2802000e0700010203040508000b410021030c050b200141106a2802002204417f4c0d10200141086a2802002105410121034101210602402004450d00200410382206450d120b20062005200410d40b1a0c060b200141086a2802002106410221030c040b410321030c020b410421030c010b410521030b0b0b2001411c6a2802002105200141186a28020021070240024002400240024020012802140e050001020304000b410021020c030b410121020c020b410221020c010b410321020b200041093a00002000411c6a2005360200200041186a2007360200200041146a2002360200200041106a20043602002000410c6a2004360200200041086a2006360200200041046a20033602000f0b200041003a00000f0b200041013a0000200041046a200141046a2802003602000f0b4103210302400240024002400240200141246a2802000e0400010204000b410021030c020b200141306a2802002204417f4c0d09200141286a2802002102410121034101210602402004450d00200410382206450d0b0b20062002200410d40b1a0c020b410221030b0b200041023a000020002001290001370001200041306a20043602002000412c6a2004360200200041286a2006360200200041246a2003360200200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000f0b4103210302400240024002400240200141046a2802000e0400010204000b410021030c020b200141106a2802002204417f4c0d08200141086a2802002102410121034101210602402004450d00200410382206450d0a0b20062002200410d40b1a0c020b410221030b0b200041033a0000200041186a2001290318370300200041106a20043602002000410c6a2004360200200041086a2006360200200041046a20033602000f0b4103210302400240024002400240200141186a2802000e0400010204000b410021030c020b200141246a2802002204417f4c0d072001411c6a2802002102410121034101210602402004450d00200410382206450d090b20062002200410d40b1a0c020b410221030b0b200041043a000020002001290001370001200041246a2004360200200041206a20043602002000411c6a2006360200200041186a2003360200200041116a200141116a280000360000200041096a200141096a2900003700000f0b200041053a0000200020012d00013a00010f0b200041063a0000200041106a200141106a290300370300200041086a200141086a2903003703000f0b2001410c6a2802002204417f4c0d01200141046a28020021010240024020040d00410121060c010b200410382206450d030b20062001200410d40b21012000410c6a2004360200200041086a2004360200200041046a2001360200200041073a00000f0b200041083a00000f0b1034000b1032000b1300200041033602042000418cd7cd003602000b3400200041a2c0cd0036020420004100360200200041146a4106360200200041106a41cce2cd00360200200041086a420f3702000b2e01017f02404101103822020d001032000b20002002360200200241003a0000200041046a4281808080103702000b2c01017f02404108103822020d001032000b20002002360200200242003700002000428880808080013702040b2e01017f02404101103822020d001032000b20002002360200200241003a0000200041046a4281808080103702000b0d00200041002000200010e7060b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210a5090b290020004101360204200041086a200128020420012802006b41e0016e2201360200200020013602000bb20901087f230041c0006b22052400200541386a22064200370300200541306a22074200370300200541206a41086a2208420037030020054200370320200541106a41a2c0cd00410f10cb012008200541106a41086a220929000037030020052005290010370320200541106a41c5c2cd00410d10cb012006200929000037030020072005290010370300024002400240200541206a412010e3010d0020064200370300200742003703002008420037030020054200370320200541206a41c7e5c000410610cb012007419081c400410610cb01200541086a200541206a412010ce03200528020c410020052802081b2106024020034101470d00200541386a220a4200370300200541306a220b4200370300200541206a41086a2208420037030020054200370320200541106a41a2c0cd00410f10cb012008200541106a41086a220929000037030020052005290010370320200541106a41fce7cd00410a10cb01200741086a220c2009290000370000200720052900103700002005200541206a412010ce0302402005280200450d00200528020420064d0d0020004183143b0100200041086a4107360200200041046a41cad6cd00360200200041026a41033a00000c030b200a4200370300200b42003703002008420037030020054200370320200541106a41a2c0cd00410f10cb012008200929000037030020052005290010370320200541106a41fce7cd00410a10cb01200c2009290000370000200720052900103700002005200241017420066a360210200541206a4120200541106a410410e9010b20012802082108200128020421092001280200210a200541386a4200370300200541306a4200370300200541206a41086a2201420037030020054200370320200541106a41a2c0cd00410f10cb012001200541106a41086a220b29000037030020052005290010370320200541106a41c5c2cd00410d10cb01200741086a200b290000370000200720052900103700002005410036021820054201370310200541106a41004104107720052802102201200528021822076a20063600002005200741046a22073602180240200528021420076b41034b0d00200541106a20074104107720052802102101200528021821070b200120076a20023600002005200741046a360218200541106a200810ac02200a2008200541106a10a80220052802142106200528021821070240024020034101460d00024020062007470d00200541106a200741011077200528021821070b2005280210220120076a41003a0000200741016a21070c010b024020062007470d00200541106a20074101107720052802142106200528021821070b2005280210220120076a41013a00002005200741016a22073602180240200620076b41034b0d00200541106a20074104107720052802102101200528021821070b200120076a2004360000200741046a21070b200541206a41202001200710e90102402005280214450d00200110390b02402009450d00200941286c450d00200a10390b200041083a00000c020b20004183143b0100200041086a410d360200200041046a41d1d6cd00360200200041026a41023a00000b200141046a2802002200450d00200041286c450d00200128020010390b200541c0006a24000bfe0c010b7f230041e0006b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e2c289ab0610bd0220022802042101200228020021044100210520024100360230024002402001450d00200220042d00003a00342002410136023020014101460d00200220042d00013a00352002410236023020014102460d00200220042d00023a00362002410336023020014103460d00200220042d00033a00372002410436023020014104460d00200241386a20042d00043a00002002410536023020014105460d00200241396a20042d00053a00002002410636023020014106460d002002413a6a20042d00063a00002002410736023020014107460d002002413b6a20042d00073a00002002410836023020014108460d002002413c6a20042d00083a00002002410936023020014109460d002002413d6a20042d00093a00002002410a3602302001410a460d002002413e6a20042d000a3a00002002410b3602302001410b460d002002413f6a20042d000b3a00002002410c3602302001410c460d00200241c0006a20042d000c3a00002002410d3602302001410d460d00200241c1006a20042d000d3a00002002410e3602302001410e460d00200241c2006a20042d000e3a00002002410f3602302001410f460d00200241c3006a20042d000f3a00002002411036023020014110460d00200241c4006a20042d00103a00002002411136023020014111460d00200241c5006a20042d00113a00002002411236023020014112460d00200241c6006a20042d00123a00002002411336023020014113460d00200241c7006a20042d00133a00002002411436023020014114460d00200241c8006a20042d00143a00002002411536023020014115460d00200241c9006a20042d00153a00002002411636023020014116460d00200241ca006a20042d00163a00002002411736023020014117460d00200241cb006a20042d00173a00002002411836023020014118460d00200241cc006a20042d00183a00002002411936023020014119460d00200241cd006a20042d00193a00002002411a3602302001411a460d00200241ce006a20042d001a3a00002002411b3602302001411b460d00200241cf006a20042d001b3a00002002411c3602302001411c460d00200241d0006a20042d001c3a00002002411d3602302001411d460d00200241d1006a20042d001d3a00002002411e3602302001411e460d00200241d2006a20042d001e3a00002002411f3602302001411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210120022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021014100210441002108410021070b20002003360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a2005360000200020022f01103b000b2000410d6a200241106a41026a2d00003a00002000200736010e200020022f010c3b0012200041146a2002410c6a41026a2d00003a000020002008360015200020022f01083b00192000411b6a200241086a41026a2d00003a0000200041206a20013602002000411c6a20043602000b200241e0006a24000b3001017f0240200128020022022001280204470d00200041003602000f0b2001200241e0016a3602002000200210a4090bfe0c010b7f230041e0006b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41f0c2c98b0610bd0220022802042101200228020021044100210520024100360230024002402001450d00200220042d00003a00342002410136023020014101460d00200220042d00013a00352002410236023020014102460d00200220042d00023a00362002410336023020014103460d00200220042d00033a00372002410436023020014104460d00200241386a20042d00043a00002002410536023020014105460d00200241396a20042d00053a00002002410636023020014106460d002002413a6a20042d00063a00002002410736023020014107460d002002413b6a20042d00073a00002002410836023020014108460d002002413c6a20042d00083a00002002410936023020014109460d002002413d6a20042d00093a00002002410a3602302001410a460d002002413e6a20042d000a3a00002002410b3602302001410b460d002002413f6a20042d000b3a00002002410c3602302001410c460d00200241c0006a20042d000c3a00002002410d3602302001410d460d00200241c1006a20042d000d3a00002002410e3602302001410e460d00200241c2006a20042d000e3a00002002410f3602302001410f460d00200241c3006a20042d000f3a00002002411036023020014110460d00200241c4006a20042d00103a00002002411136023020014111460d00200241c5006a20042d00113a00002002411236023020014112460d00200241c6006a20042d00123a00002002411336023020014113460d00200241c7006a20042d00133a00002002411436023020014114460d00200241c8006a20042d00143a00002002411536023020014115460d00200241c9006a20042d00153a00002002411636023020014116460d00200241ca006a20042d00163a00002002411736023020014117460d00200241cb006a20042d00173a00002002411836023020014118460d00200241cc006a20042d00183a00002002411936023020014119460d00200241cd006a20042d00193a00002002411a3602302001411a460d00200241ce006a20042d001a3a00002002411b3602302001411b460d00200241cf006a20042d001b3a00002002411c3602302001411c460d00200241d0006a20042d001c3a00002002411d3602302001411d460d00200241d1006a20042d001d3a00002002411e3602302001411e460d00200241d2006a20042d001e3a00002002411f3602302001411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210120022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021014100210441002108410021070b20002003360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a2005360000200020022f01103b000b2000410d6a200241106a41026a2d00003a00002000200736010e200020022f010c3b0012200041146a2002410c6a41026a2d00003a000020002008360015200020022f01083b00192000411b6a200241086a41026a2d00003a0000200041206a20013602002000411c6a20043602000b200241e0006a24000bfe0c010b7f230041e0006b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1e69df30610bd0220022802042101200228020021044100210520024100360230024002402001450d00200220042d00003a00342002410136023020014101460d00200220042d00013a00352002410236023020014102460d00200220042d00023a00362002410336023020014103460d00200220042d00033a00372002410436023020014104460d00200241386a20042d00043a00002002410536023020014105460d00200241396a20042d00053a00002002410636023020014106460d002002413a6a20042d00063a00002002410736023020014107460d002002413b6a20042d00073a00002002410836023020014108460d002002413c6a20042d00083a00002002410936023020014109460d002002413d6a20042d00093a00002002410a3602302001410a460d002002413e6a20042d000a3a00002002410b3602302001410b460d002002413f6a20042d000b3a00002002410c3602302001410c460d00200241c0006a20042d000c3a00002002410d3602302001410d460d00200241c1006a20042d000d3a00002002410e3602302001410e460d00200241c2006a20042d000e3a00002002410f3602302001410f460d00200241c3006a20042d000f3a00002002411036023020014110460d00200241c4006a20042d00103a00002002411136023020014111460d00200241c5006a20042d00113a00002002411236023020014112460d00200241c6006a20042d00123a00002002411336023020014113460d00200241c7006a20042d00133a00002002411436023020014114460d00200241c8006a20042d00143a00002002411536023020014115460d00200241c9006a20042d00153a00002002411636023020014116460d00200241ca006a20042d00163a00002002411736023020014117460d00200241cb006a20042d00173a00002002411836023020014118460d00200241cc006a20042d00183a00002002411936023020014119460d00200241cd006a20042d00193a00002002411a3602302001411a460d00200241ce006a20042d001a3a00002002411b3602302001411b460d00200241cf006a20042d001b3a00002002411c3602302001411c460d00200241d0006a20042d001c3a00002002411d3602302001411d460d00200241d1006a20042d001d3a00002002411e3602302001411e460d00200241d2006a20042d001e3a00002002411f3602302001411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210120022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021014100210441002108410021070b20002003360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a2005360000200020022f01103b000b2000410d6a200241106a41026a2d00003a00002000200736010e200020022f010c3b0012200041146a2002410c6a41026a2d00003a000020002008360015200020022f01083b00192000411b6a200241086a41026a2d00003a0000200041206a20013602002000411c6a20043602000b200241e0006a24000bfe0c010b7f230041e0006b2202240002400240200128020022032001280204470d00200041003602000c010b2001200341e0016a3602002002200341206a41e1ea91cb0610bd0220022802042101200228020021044100210520024100360230024002402001450d00200220042d00003a00342002410136023020014101460d00200220042d00013a00352002410236023020014102460d00200220042d00023a00362002410336023020014103460d00200220042d00033a00372002410436023020014104460d00200241386a20042d00043a00002002410536023020014105460d00200241396a20042d00053a00002002410636023020014106460d002002413a6a20042d00063a00002002410736023020014107460d002002413b6a20042d00073a00002002410836023020014108460d002002413c6a20042d00083a00002002410936023020014109460d002002413d6a20042d00093a00002002410a3602302001410a460d002002413e6a20042d000a3a00002002410b3602302001410b460d002002413f6a20042d000b3a00002002410c3602302001410c460d00200241c0006a20042d000c3a00002002410d3602302001410d460d00200241c1006a20042d000d3a00002002410e3602302001410e460d00200241c2006a20042d000e3a00002002410f3602302001410f460d00200241c3006a20042d000f3a00002002411036023020014110460d00200241c4006a20042d00103a00002002411136023020014111460d00200241c5006a20042d00113a00002002411236023020014112460d00200241c6006a20042d00123a00002002411336023020014113460d00200241c7006a20042d00133a00002002411436023020014114460d00200241c8006a20042d00143a00002002411536023020014115460d00200241c9006a20042d00153a00002002411636023020014116460d00200241ca006a20042d00163a00002002411736023020014117460d00200241cb006a20042d00173a00002002411836023020014118460d00200241cc006a20042d00183a00002002411936023020014119460d00200241cd006a20042d00193a00002002411a3602302001411a460d00200241ce006a20042d001a3a00002002411b3602302001411b460d00200241cf006a20042d001b3a00002002411c3602302001411c460d00200241d0006a20042d001c3a00002002411d3602302001411d460d00200241d1006a20042d001d3a00002002411e3602302001411e460d00200241d2006a20042d001e3a00002002411f3602302001411f460d00200241d3006a20042d001f3a0000200241203602302002200241c9006a22062800003602582002200241cc006a28000036005b200220022f01343b012c200220022d00363a002e2002413e6a2801002107200241c5006a2800002108200241306a41206a280200210120022800372105200228005b2104200241286a41026a22092002413d6a2d00003a000020022002413b6a2f00003b0128200241246a41026a220a200241c4006a2d00003a00002002200241c2006a2f01003b0124200241206a41026a220b200241cb006a2d00003a0000200220062f00003b0120200241306a41026a220620022d002e3a0000200220022f012c3b0130200241d8006a41026a220c20092d00003a0000200220022f01283b01582002411c6a41026a2209200a2d00003a0000200220022f01243b011c200241186a41026a220a200b2d00003a0000200220022f01203b0118200241146a41026a20062d00003a0000200220022f01303b0114200241106a41026a200c2d00003a0000200220022f01583b01102002410c6a41026a20092d00003a0000200220022f011c3b010c200241086a41026a200a2d00003a0000200220022f01183b01080c010b200241146a41026a41003a0000200241106a41026a41003a00002002410c6a41026a41003a0000200241086a41026a41003a0000200241003b0114200241003b0110200241003b010c200241003b0108410021014100210441002108410021070b20002003360200200020022f01143b0004200041066a200241146a41026a2d00003a0000200041076a2005360000200020022f01103b000b2000410d6a200241106a41026a2d00003a00002000200736010e200020022f010c3b0012200041146a2002410c6a41026a2d00003a000020002008360015200020022f01083b00192000411b6a200241086a41026a2d00003a0000200041206a20013602002000411c6a20043602000b200241e0006a24000b130020004101360204200041f4f2cd003602000b3400200041e0c1cd0036020420004100360200200041146a4104360200200041106a41d0f7cd00360200200041086a42083702000b3400200041d584ce0036020420004100360200200041146a4104360200200041106a41d884ce00360200200041086a42033702000b3701027f024041e00010382202450d00410410382203450d0020004204370204200020033602002000410010ac02200210390f0b1032000b880101017f230041306b220224002002200028020036020c2002412f3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a4101360200200241246a4101360200200241fcc5c0003602202002410136021c200241a4fec7003602182002200241106a36022820012000200241186a103b2101200241306a240020010be40401017f230041c0006b2202240002400240024002400240200028020022002802000e0401020300010b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c200241ccbcc0003602282002200241086a36023820012000200241286a103b21000c030b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c200241e4bcc0003602282002200241086a36023820012000200241286a103b21000c020b200220002802043602042002200041086a28020036022020022000410c6a280200360224200241086a41146a4102360200200241086a410c6a41023602002002410236020c2001411c6a28020021002002200241246a3602182002200241206a3602102002200241046a36020820012802182101200241286a41146a41033602002002420437022c200241fcbcc0003602282002200241086a36023820012000200241286a103b21000c010b200220002802043602202002200041086a280200360224200241146a41023602002002410236020c2001411c6a28020021002002200241246a3602102002200241206a360208200128021821012002413c6a41023602002002420337022c2002419cbdc0003602282002200241086a36023820012000200241286a103b21000b200241c0006a240020000b130020004107360204200041e097ce003602000b130020004101360204200041d49ece003602000b130020004102360204200041989fce003602000bbf0302027f027e230041d0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02402001450d00200241cc006a4130360200200241146a41023602002002420237020420024198a0ce003602002002410436024420024190a0ce003602402002200241c0006a36021020022002360248200241a8a0ce001043000b200241386a41002903b8e140370300200241306a41002903b0e140370300200241286a41002903a8e140370300200241206a41002903a0e140370300200241186a4100290398e140370300200241106a4100290390e140370300200241086a4100290388e14037030020024100290380e140370300200241c0006a200210d8072002350248210420023502402105200241d0006a240020052004422086840b931e02087f017e230041e00b6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241e8026a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e2002428080808080203702cc0b200220013602c40b2002200041b8c0cd0020011b3602c00b2002200241c00b6a3602c80b200241e8026a200241c80b6a10f604024020022802ec022200450d00200241f4026a280200210420022802f002210520022802e8022106200241f0006a200241f8026a41e00010d40b1a200241e8026a200241c80b6a10ce09024020022802e80222070d0002402004450d00200441246c21012000210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b2005450d01200541246c450d01200010390c010b200241f0026a280200210820022802ec022109200241f0016a200241f0006a41e00010d40b1a200241106a200241f0016a41e00010d40b1a0240024020022802c80b2802040d00200241e8026a200241106a41e00010d40b1a0c010b02402004450d00200441246c21012000210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402005450d00200541246c450d00200010390b02402008450d00200841d8086c210120072100034002402000220341e8006a2903004202510d0020032d00004102470d00200341086a280200450d00200341046a28020010390b200341d8086a210020034198016a109602200141a8776a22010d000b0b410021002009450d00200941d8086c450d00200710390b2000450d00200241106a200241e8026a41e00010d40b1a200241fc006a2004360200200241f8006a2005360200200220003602742002200636027020024180016a200241106a41e00010d40b2103200241e8016a2008360200200241e4016a2009360200200220073602e001200241f0006a10ca06024002400240024002400240024020022802702201450d00200241c80b6a2001417f6a10e004200241e8026a20022802c80b220120022802d00b1085040240024020022d00e8024101460d0020024188026a420037030020024180026a4200370300200241f8016a4200370300200242003703f0010c010b20024188026a20024181036a29000037030020024180026a200241f9026a290000370300200241f8016a200241f1026a290000370300200220022900e9023703f0010b024020022802cc0b450d00200110390b200241f0016a2003412010d70b0d00024020022802e8012203450d00200341d8086c210520022802e0014198016a21034100210141002100034020012109410121010240200341506a2903004202520d000240200328020022014118470d00410021012009410171450d010c0a0b20014102462009710d09200141024721010b200041016a2100200341d8086a2103200541a8776a22050d000b0b10c50120022802e801220341d8086c210420022802e001210520022802e4012109200241f0016a200241f0006a41f00010d40b1a20022802f001210820052101024002402003450d00200241e8026a41f0006a2100200421012005210302400340200341e8006a290300220a4203510d01200241e8026a200341e80010d40b1a2002200a3703d0032000200341f0006a41e80710d40b1a200241c80b6a200241e8026a10d30620022d00c80b0d05200341d8086a2103200141a8776a22010d000c030b0b200341d8086a21010b200520046a22002001460d0003402001220341d8086a21010240200341e8006a2903004202510d0020032d00004102470d00200341086a280200450d00200341046a28020010390b20034198016a10ce0420002001470d000b0b02402009450d00200941d8086c450d00200510390b20024188d3c300411010ce03200228020421030240200228020022014101470d004188d3c300411010e0010b20024180036a22004200370300200241e8026a41106a22054200370300200241e8026a41086a22094200370300200242003703e802200241c80b6a41c7e5c000410610cb012009200241c80b6a41086a2204290000370300200220022900c80b3703e802200241c80b6a41ccffc300410e10cb0120002004290000370300200520022900c80b37030020022003410020011b3602c80b200241e8026a4120200241c80b6a410410e9014101200210d206200810e30610bd01450d02200241e8026a10d1072002200241f0016a410c6a28020022093602e0022002200241e8026a410c6a28020022033602c00b20092003470d032009450d0520022802ec02210420022802f401210841002100034002400240200820006a22032d00002205200420006a22012d0000470d0002400240024002400240024020050e06000304050102000b200341016a200141016a412010d70b0d050c060b200341046a2802002207200141046a280200470d042007450d05200341086a280200200141086a280200470d042003410c6a2802002001410c6a280200470d040c050b2003410c6a28020022072001410c6a280200470d03200341046a280200200141046a280200200710d70b0d030c040b200341016a280000200141016a280000470d02200341106a2802002207200141106a280200470d02200341086a280200200141086a280200200710d70b0d020c030b200341016a280000200141016a280000470d01200341106a2802002207200141106a280200470d01200341086a280200200141086a280200200710d70b0d010c020b200341016a280000200141016a280000470d00200341106a2802002207200141106a280200470d00200341086a280200200141086a280200200710d70b450d010b41ecd1c400411410d101200241c80b6a200310c00720022802c80b220520022802d00b10d001024020022802cc0b450d00200510390b200241c80b6a200110c00720022802c80b220520022802d00b10d001024020022802cc0b450d00200510390b20032d000020012d00002205470d060b024002400240024002400240024020050e06050203040001050b200341046a2802002205200141046a280200470d0b2005450d05200341086a280200200141086a280200470d0b2003410c6a2802002001410c6a280200470d0b0c050b2003410c6a28020022052001410c6a280200470d0a200341046a280200200141046a280200200510d70b0d0a0c040b200341016a280000200141016a280000470d09200341106a2802002205200141106a280200470d09200341086a280200200141086a280200200510d70b0d090c030b200341016a280000200141016a280000470d08200341106a2802002205200141106a280200470d08200341086a280200200141086a280200200510d70b0d080c020b200341016a280000200141016a280000470d07200341106a2802002205200141106a280200470d07200341086a280200200141086a280200200510d70b450d010c070b200341016a200141016a412010d70b0d060b200041246a21002009417f6a22090d000c060b0b41b882c300411c41d482c3001035000b200241086a20022f00c90b20022d00cb0b4110747210e50a200220022903083703c00b200241fc026a4101360200200242013702ec02200241a4fec7003602e802200241043602e4022002200241e0026a3602f8022002200241c00b6a3602e002200241e8026a41fc82c3001043000b418c83c300411e41ac83c3001035000b200241dc0b6a4100360200200241d80b6a41b8c0cd00360200200242013702cc0b200241bc83c3003602c80b200241e0026a200241c00b6a200241c80b6a41c483c30010850b000b41d483c300412741fc83c3001035000b0240200241f0016a41306a2203200241e8026a41306a2201412010d70b450d0041d8d6c000410e10d1012003412010d0012001412010d0010b024020032001412010d70b450d00418c84c300412841b484c3001035000b0240200241f0016a41d0006a200241e8026a41d0006a412010d70b0d00024020022802f4022201450d0020022802ec022103200141246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b0240200241f0026a2802002203450d00200341246c450d0020022802ec0210390b024020022802fc012201450d0020022802f4012103200141246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b0240200241f8016a2802002203450d00200341246c450d0020022802f40110390b200241e00b6a24004100350284ee4d0f0b41c484c300412441e884c3001035000b200220003602f001200241fc026a4101360200200242013702ec02200241e482c3003602e802200241023602e4022002200241e0026a3602f8022002200241f0016a3602e002200241e8026a41ec82c3001043000b200241fc016a413036020020024184016a41023602002002420237027420024198a0ce00360270200241043602f40120024180a1ce003602f0012002200241f0016a360280012002200241e8026a3602f801200241f0006a41a8a0ce001043000ba90701057f230041d0026b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241e0016a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037020c2002200136021c2002200041b8c0cd0020011b3602182002200241186a360208200241e0016a200241086a10f604200241ec016a280200210420022802e801210520022802e401210020022802e001210620024180016a200241f0016a41e00010d40b1a02402000450d00200241206a20024180016a41e00010d40b1a0240024020022802082802040d0020024180016a200241206a41e00010d40b1a0c010b02402004450d00200441246c21012000210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402005450d00200541246c450d00200010390b410021000b2000450d00200241e0016a410c6a22032004360200200241e0016a41086a2005360200200220003602e401200220063602e001200241f0016a20024180016a41e00010d40b1a200241e0016a10ca06024020032802002201450d0020022802e4012103200141246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b024020022802e8012203450d00200341246c450d0020022802e40110390b200241d0026a24004100350284ee4d0f0b2002412c6a4130360200200241f4016a4102360200200242023702e40120024198a0ce003602e0012002410436022420024198a1ce003602202002200241206a3602f0012002200241e0016a360228200241e0016a41a8a0ce001043000bd21103037f017e057f230041306b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024002400240024020010d002002420037020c200241002802d8974e360208410810382203450d0320034110360204200341ed92c2003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d032003410e360204200341e6d4c4003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d032003410c360204200341f4d4c4003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d032003410e360204200341a4b6c5003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d032003410a3602042003419fefc2003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d032003410b360204200341e8a0c7003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002200228021041016a36021020031039410810382203450d03200341183602042003418dcbc8003602000240200228020c20022802102201470d00200241086a2001410110c902200228021021010b200228020820014103746a20032902003702002002280210210420031039200441016a2203ad420c7e2205422088a70d042005a72206417f4c0d0420022802082107200228020c21084104210102402006450d00200610382201450d040b41002109200241003602102002200136020820022006410c6e220636020c024002400240200620034f0d00200241086a200310b20920022802102109200228020821010c010b2003450d010b200720034103746a210a20012009410c6c6a21032009200441ffffffff01716a41016a210420072101034020012802002206450d01200341086a200141046a280200360200200341046a2006360200200341003602002003410c6a2103200941016a2109200141086a2201200a470d000b200421090b0240200841ffffffff0171450d00200710390b200228020c2107200228020821042002410036021020024201370308200241086a4100410410772002280208200228021022036a41edcad18b063600002002200341046a22033602100240200228020c2003470d00200241086a200341011077200228021021030b200228020820036a410d3a00002002200341016a360210412a200241086a107941a8e8c000412a200241086a107c0240200228020c20022802102203470d00200241086a200341011077200228021021030b200228020820036a41043a00002002200341016a3602102009200241086a10792009450d012009410c6c21092004210303400240024020032802004101470d00200341046a280200210a200341086a2802002201200241086a10790240200228020c200228021022066b20014f0d00200241086a200620011077200228021021060b200228020820066a200a200110d40b1a200620016a21010c010b200341046a280200210a200341086a2802002201200241086a10790240200228020c200228021022066b20014f0d00200241086a200620011077200228021021060b200228020820066a200a200110d40b1a200620016a21010b2003410c6a210320022001360210200941746a22090d000c030b0b2002412c6a41303602002002411c6a41023602002002420237020c20024198a0ce0036020820024104360224200241b0a1ce003602202002200241206a3602182002200241086a360228200241086a41a8a0ce001043000b200228021021010b200228020c210a2002280208210602402007450d002007410c6c450d00200410390b200141046a2209417f4c0d010240024002400240024002402009450d00200910382203450d06200241003602102002200936020c20022003360208200141c000490d02200141808001490d032001418080808004490d04410021090c010b2002410036021020024201370308200241086a41004101107720022802082103200228021021090b200320096a41033a00002002200941016a22093602100240200228020c20096b41034b0d00200241086a200941041077200228021021090b2002280208220320096a2001360000200941046a21090c030b200320014102743a0000410121090c020b20014102744101722104410021070240200941014b0d00200241086a41004102107720022802082103200228021021070b200320076a20043b0000200741026a21090c010b20014102744102722104410021070240200941034b0d00200241086a41004104107720022802082103200228021021070b200320076a2004360000200741046a21090b200220093602100240200228020c20096b20014f0d00200241086a20092001107720022802082103200228021021090b200320096a2006200110d40b1a0240200a450d00200610390b200241306a2400200920016aad4220862003ad840f0b1032000b1034000b860702027f027e230041a01a6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241c8116a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037020c2002200136021c2002200041b8c0cd0020011b3602182002200241186a360208200241c8116a200241086a109009200241e0106a200241c8116a41e80010d40b1a20022903b0122104200241f8086a200241c8116a41f0006a41e80710d40b1a0240024020044203510d00200241206a200241e0106a41e80010d40b1a200241206a41f0006a200241f8086a41e80710d40b210320022004370388010240024020022802082802040d00200241f8086a200241206a41e80010d40b1a200241c8116a200341e80710d40b1a0c010b024020044202510d0020022d002041ff01714102470d002002280228450d00200228022410390b200241b8016a10b108420321040b20044203510d00200241e0106a200241f8086a41e80010d40b1a200241206a200241c8116a41e80710d40b1a200241c8116a200241e0106a41e80010d40b1a200220043703b012200241b8126a200241206a41e80710d40b1a200241f8086a200241c8116a10d3064101410220022d00f80822014101461b220010382203450d01200241003602d011200220003602cc11200220033602c8110240024020014101470d00200341013a0000200241013602d01120022d00f90820022d00fa0820022d00fb08200241c8116a10cd0a0c010b200341003a0000200241013602d011024020022d00fc084108460d00200341013a0001200241023602d01120022d00fc0820022d00fd0820022d00fe08200241c8116a108d030c010b200341003a0001200241023602d0110b20023502d011210420023502c8112105200241a01a6a240020052004422086840f0b200241ec106a4130360200200241346a41023602002002420237022420024198a0ce00360220200241043602e410200241c0a1ce003602e0102002200241e0106a3602302002200241c8116a3602e810200241206a41a8a0ce001043000b1032000bd00702067f017e23004190016b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020010d00200241086a4188d3c300411010ce03200228020c21040240200228020822054101470d004188d3c300411010e0010b200241286a22014200370300200241106a41106a22034200370300200241106a41086a220642003703002002420037031020024180016a41c7e5c000410610cb01200620024180016a41086a2207290000370300200220022900800137031020024180016a41ccffc300410e10cb0120012007290000370300200320022900800137030020022004410020051b36028001200241106a412020024180016a410410e9014101200310d2062001420037030020034200370300200642003703002002420037031020024180016a41c7e5c000410610cb0120062007290000370300200220022900800137031020024180016a419081c400410610cb012001200729000037030020032002290080013703002002200241106a412010ce032002280204410020022802001b10e306200241106a10d10720024100360288012002420137038001200320024180016a10b502200241106a20024180016a10db02200241c0006a20024180016a10b502200241e0006a20024180016a10b502200241106a41047220024180016a10dc0220023502880121082002280280012104200228021421070240200241106a410c6a2802002203450d00200341246c21012007210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b024020062802002203450d00200341246c450d00200710390b20024190016a240020084220862004ad840f0b2002418c016a4130360200200241246a41023602002002420237021420024198a0ce003602102002410436028401200241d8a1ce0036028001200220024180016a3602202002200241106a36028801200241106a41a8a0ce001043000bd01b05027f017e017f017e077f230041b00a6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241d0006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e2002428080808080203702fc08200220013602fc062002200041b8c0cd0020011b3602f8062002200241f8066a3602f808200241d0006a200241f8086a10980a0240024020022802504101460d00200241e0076a41086a2203200241dc006a280200360200200220022902543703e00720022802f808280204450d01200241e0076a10990a0b200241ec076a4130360200200241e4006a41023602002002420237025420024198a0ce00360250200241043602e407200241f0a1ce003602e0072002200241e0076a3602602002200241d0006a3602e807200241d0006a41a8a0ce001043000b200241206a41086a20032802002203360200200220022903e0072204370320200241c0006a41086a200336020020024200370214200241002802e8c8483602102002200437034002400240200241c0006a41888dc10010c50a2203450d00200328020841074b0d01200242f4d2b59bc7ae98b830370051200241013a005041908dc100412d200241d0006a41c08dc10041f48ec100103d000b41e08dc100412841848fc100105b000b20032802002900002104200241d0006a41186a22034200370300200241d0006a41106a22014200370300200241d0006a41086a2200420037030020024200370350200241e0076a41d1e5c000410910cb012000200241e0076a41086a2205290000370300200220022900e007370350200241e0076a41cab8c300410310cb0120032005290000370300200120022900e0073703002002200241d0006a10ee042002280200210120022903082106200241106a410010b109200228021022072002280218220041d8086c6a200241f8086a41e80010d40b22034202370368200341a0016a2004200642b8177c42b81720011b220620042006561b3703002003410236029801200320022903f806370370200341f8006a200241f8066a41086a29030037030020034180016a200241f8066a41106a29030037030020034188016a200241f8066a41186a29030037030020034190016a20024198076a290300370300200341c0016a200241e0076a41f00010d40b1a200341b0026a200241d0006a41a80610d40b1a2002200041016a2208360218024002400240024002400240200241c0006a4192bac50010c50a2203450d00200220032802083602fc06200220032802003602f806200241d0006a200241f8066a109405024020022802502203450d0020022f01542101200241f8086a200241d0006a410672418e0110d40b1a200220013b01e407200220033602e007200241e0076a410672200241f8086a418e0110d40b1a20024180043b01880a411010382203450d05200341cce0c00036020c200341013602082003428180808010370200200220033602ac0a411010382201450d05200141e4e0c00036020c20014101360208200142818080801037020020032003280200417f6a2200360200024020000d002003280208200328020c2802001102000240200328020c280204450d00200328020810390b200341046a22002000280200417f6a220036020020000d00200310390b200220013602ac0a200241d0006a200241e0076a10bf06200241d0006a410c6a200241e0076a410c6a10c006200241d0006a41186a200241e0076a41186a10c106200241f8086a41286a200241ac086a290200370300200241f8086a41206a2201200241a4086a290200370300200241f8086a41186a22002002419c086a290200370300200241b0096a200241bc086a290200370300200241b8096a200241c4086a290200370300200241c0096a200241cc086a290200370300200220024194086a290200370388092002200241b4086a2902003703a8092002280284082103200241d0096a200241dc086a290200370300200241d8096a200241e4086a290200370300200241e0096a200241ec086a2902003703002002200241d4086a2902003703c809200241f8086a410472200241e0076a41286a10c206200220033602f808200241d0006a41246a200241f8086a41f00010d40b1a200241f8066a200241880a6a200241d0006a108f0420022903f8064201520d022001200241f8066a41286a2903003703002000200241f8066a41206a290300370300200241f8086a41106a200241f8066a41186a290300370300200241f8086a41086a200241f8066a41106a29030037030020022002290380073703f808024041002802d0a94e4102490d002002413136028c0a2002200241f8086a3602880a41002802cca94e210341002802c8a94e210141002802d4a94e2100200241d0006a41106a420137030020024184016a41a09ec500ad4280808080a00684370200200241f8006a41f59dc500ad4280808080b00584370300200241f0006a4201370300200241d0006a41086a411b360200200241ec006a200241880a6a360200200241a4bac50036025c20024281808080a01e37028c012002410036028001200241acbac50036025420024102360250200141b8c0cd00200041024622001b200241d0006a200341c0a4c00020001b2802101103000b200241f8086a20024184086a41f00010d40b1a024020022802e8072201450d0020022802e0072103200141d0006c21000340200328020021010240200341086a22052802002209450d00200110390b2003200136020020052009360200200341d0006a2103200041b07f6a22000d000b0b024020022802e4072203450d00200341d0006c450d0020022802e00710390b0240200241f4076a2802002201450d0020022802ec072103200141f4026c21010340200310c203200341f4026a21032001418c7d6a22010d000b0b0240200241f0076a2802002203450d00200341f4026c450d0020022802ec0710390b024020024180086a2802002203450d00200341306c210120022802f80741086a21030340024020032802002200450d00200041c8006c450d002003417c6a28020010390b200341306a2103200141506a22010d000b0b41002802d8974e21010240200241fc076a2802002203450d00200341306c450d0020022802f80710390b410021032002280218210841002105410021094100210a2001210b4100210c4100210d200121000c030b41002802d0a94e4102490d0041002802cca94e210341002802c8a94e210141002802d4a94e2100200241ec006a41b8c0cd00360200200241e0006a420137030020024184016a41a09ec500ad4280808080a00684370200200241f8006a41f59dc500ad4280808080b00584370300200241f0006a4200370300200241d8006a411b3602002002419cbac50036025c20024281808080901c37028c012002410036028001200241acbac50036025420024102360250200141b8c0cd00200041024622001b200241d0006a200341c0a4c00020001b280210110300200228021821080b200228021021070c020b200241e0076a41206a280200210d200241fc076a280200210c200241f4076a280200210a200241f0076a280200210920022802f807210b20022802ec07210120022802e807210520022802e407210320022802e0072100200241f8086a200241e0076a41246a41f00010d40b1a2000450d010b200241e0076a200241f8086a41f00010d40b1a2005ad4220862003ad842104024020082002280214470d00200241106a200810b109200228021821080b20022802102207200841d8086c6a200241f8066a41e80010d40b22034202370368200341bc016a200d360200200341b8016a200c360200200341b4016a200b360200200341b0016a200a360200200341ac016a2009360200200341a8016a2001360200200341a0016a20043703002003419c016a20003602002003411836029801200320022903880a370370200341f8006a200241900a6a29030037030020034180016a200241980a6a29030037030020034188016a200241880a6a41186a29030037030020034190016a200241a80a6a290300370300200341c0016a200241e0076a41f00010d40b1a200341b0026a200241d0006a41a80610d40b1a2002200841016a22083602180b200241c0006a10990a200841d8086c22094104722203417f4c0d01200310382201450d00200241003602e807200220033602e407200220013602e007200241e0076a200810ac020240024020080d0020022802e807210320022802e007210a0c010b20022802e8072103200721000340200220003602f808200241d0006a200241f8086a10d40620022802502105024020022802e40720036b200228025822014f0d00200241e0076a20032001107720022802e80721030b20022802e007220a20036a2005200110d40b1a2002200320016a22033602e80702402002280254450d00200510390b200041d8086a2100200941a8776a22090d000b2008450d00200841d8086c210020072105034002402005220141e8006a2903004202510d0020012d00004102470d00200141086a280200450d00200141046a28020010390b200141d8086a210520014198016a109602200041a8776a22000d000b0b024020022802142201450d00200141d8086c450d00200710390b200241b00a6a24002003ad422086200aad840f0b1032000b1034000bca1b05097f017e057f027e027f230041f0036b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241286a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e200242808080808020370214200220013602242002200041b8c0cd0020011b3602202002200241206a36021020024180036a200241106a10f60402402002280284032204450d002002418c036a280200210520022802880321062002280280032103200241a0026a20024190036a41e00010d40b1a20024180036a200241106a10ce09024020022802800322070d0002402005450d00200541246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b2006450d01200641246c450d01200410390c010b20024180036a41086a28020021082002280284032109200241c0016a200241a0026a41e00010d40b1a20024180036a200241106a10980a02402002280280034101470d0002402005450d00200541246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402006450d00200641246c450d00200410390b02402008450d00200841d8086c210120072100034002402000220341e8006a2903004202510d0020032d00004102470d00200341086a280200450d00200341046a28020010390b200341d8086a210020034198016a109602200141a8776a22010d000b0b2009450d01200941d8086c450d01200710390c010b200241b0016a41086a220120024180036a410c6a28020036020020022002290284033703b001200241386a200241c0016a41e00010d40b1a200241a0016a20083602002002419c016a2009360200200241286a410c6a2005360200200241286a41086a2006360200200241ac016a20012802003602002002200736029801200220022903b0013702a4012002200436022c20022003360228200241a4016a210a0240024020022802102802040d00200241a0026a41086a200a41086a2802003602002002200a2902003703a0020c010b02402005450d00200541246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402006450d00200641246c450d00200410390b02402008450d00200841d8086c210120072100034002402000220341e8006a2903004202510d0020032d00004102470d00200341086a280200450d00200341046a28020010390b200341d8086a210020034198016a109602200141a8776a22010d000b0b02402009450d00200941d8086c450d00200710390b200a10990a410021040b2004450d00200241106a41086a200241a0026a41086a2802002203360200200220022903a002220b370310200241b0016a41086a20033602002002200b3703b001200241013b01ac02200242003702a40202400240024020080d00200241b0016a210c0c010b200741a0016a2103200841d8086c41a8776a2101200241286a41106a210d200241286a410472210e200241286a41186a210f0340200241b0016a210c200341486a2903004202520d014101210a024002400240200341786a221028020022004102470d002003290300210b02400240200241b0016a41888dc10010c50a2200450d00200028020841074b0d01200242f4d2b59bc7ae98b830370029200241013a002841908dc100412d200241286a41c08dc10041d08dc100103d000b41e08dc100412841888ec100105b000b20002802002900002111200f4200370300200d4200370300200241286a41086a220a42003703002002420037032820024180036a41d1e5c000410910cb01200a20024180036a41086a2200290000370300200220022900800337032820024180036a41cab8c300410310cb01200d41086a2000290000370000200d2002290080033700002002200241286a10ee04200229030842b8177c42b81720022802001b211202400240024002400240200b201142b0ea017c56220a0d00200b20125a0d044100211320022d00ad02450d01410221030c020b024020022d00ad02450d00410221030c020b200241a0026a10990a200242003702a402410121130b200241286a200241a0026a10c60a20022802284101470d01410021030b200242f4d2b59bc7ae98b830370029200220033a00284194d3c4004122200241286a41b8d3c4004184d3c400103d000b20024180036a41106a200e41106a2902003703002000200e41086a2902003703002002200e29020037038003200241003602c801200242013703c001200241c0016a41004101107720022802c001211420022802c801210002400240200a0d00201420006a41003a00002002200041016a22003602c801024020022802c40120006b41074b0d00200241c0016a20004108107720022802c001211420022802c80121000b201420006a2012370000200041086a21000c010b201420006a41013a0000200041016a21000b200220003602c80120024180036a200241c0016a10bc07200220133a00ad02200241003a00ac02200a0d020b201028020021004100210a0b024020004118470d002001450d040c020b200a417f732001410047710d010c030b20024180036a41086a200241a0026a41086a290300370300200220022903a00237038003200241b0016a210c0c030b200141a8776a2101200341d8086a21030c000b0b20024180036a41086a200241a0026a41086a290300370300200220022903a002370380030b200c10990a02402005450d00200541246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402006450d00200641246c450d00200410390b02402008450d00200841d8086c210120072100034002402000220341e8006a2903004202510d0020032d00004102470d00200341086a280200450d00200341046a28020010390b200341d8086a210020034198016a109602200141a8776a22010d000b0b02402009450d00200941d8086c450d00200710390b41002103200241003602a802200242013703a00220022d008c032101200241a0026a41004101107720022802a002220020022802a802220a6a20013a00002002200a41016a22013602a80220022d008d03210a024020022802a402220d2001470d00200241a0026a200d4101107720022802a002210020022802a80221010b200020016a200a3a00002002200141016a3602a802200241a0026a200228028803220a10ac020240024020022802840322010d00410021014100210a0c010b200228028003210020012103034020012f018a01210d2000450d012000417f6a21002001200d4102746a41e4016a280200210120032802e40121030c000b0b2002413c6a200d360200200241386a2001360200200242003703302002200336022c200241003602280240200a450d0003402002200a417f6a360240200241286a410020031b220d280200210002400240200d280208220a200d28020422012f018a014f0d00200121030c010b03400240200128020022030d00410021030c020b200041016a210020012f018801210a20032101200a20032f018a014f0d000b0b024002402000450d00200a41027420036a41e8016a280200210102402000417f6a2200450d00034020012802e40121012000417f6a22000d000b0b410021000c010b200a41016a2100200321010b200d2001360204200d4100360200200d20003602082003200a410c6c6a220141046a21002003200a4103746a418c016a210a024020022802a40220022802a80222036b41074b0d00200241a0026a20034108107720022802a80221030b20022802a00220036a200a2900003700002002200341086a3602a80220002802002001410c6a280200200241a0026a10b9022002280240220a450d01200228022c21030c000b0b20023502a802210b20023502a002211120024180036a10990a200241f0036a24002011200b422086840f0b2002418c036a41303602002002413c6a41023602002002420237022c20024198a0ce0036022820024104360284032002418ca2ce0036028003200220024180036a3602382002200241286a36028803200241286a41a8a0ce001043000bdd0e03037f027e017f230041f0326b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521040240024002400240024002400240102f0e06010203040506000b41f7cdc000413420024188086a41accec00041bccec000103d000b410021040c040b410121040c030b410221040c020b410321040c010b410421040b41002103410020043602d0a94e2002428080808080203702f40720022001360284082002200041b8c0cd0020011b220436028008200220024180086a3602f00702400240024002402001450d0020022001417f6a360284082002200441016a36028008024020042d00000e03030200010b410221030c020b420321050c020b410121030b200241d8116a200241f0076a10900942032105024020022903c01222064203520d000c010b200241b71a6a200241d8116a41e80010d40b1a200241d82a6a200241c8126a41e80710d40b1a200241086a200241b01a6a41ef0010d40b1a200621050b200241e8106a200241086a41ef0010d40b1a200241c0226a200241d82a6a41e80710d40b1a0240024020054203510d0020024188086a410172200241e8106a41ef0010d40b210120024180096a200241c0226a41e80710d40b2104200241f8086a2005370300200220033a0088080240024020022802f0072802040d00200241d82a6a200141ef0010d40b1a200241d8116a200441e80710d40b1a0c010b024020054202510d0020022d0090084102470d0020024198086a280200450d0020022802940810390b200241a8096a10cf0a420321050b20054203510d0020024188086a200241d82a6a41ef0010d40b1a200241e8106a2002418f086a41e80010d40b1a200241086a200241d8116a41e80710d40b1a200241d8116a200241e8106a41e80010d40b1a200220053703c012200241c8126a200241086a41e80710d40b1a2002200241d8116a3602d82a20024188086a200241d82a6a10d40620022802900821040240200228028c08450d0020022802880810390b20024188086a200241d8116a41d80810d40b1a200241d82a6a20024188086a10d50620022d00d82a210120022f00d92a210020022d00db2a2107200241c0226a200241d82a6a41047241940810d40b1a0240024020014101460d00200241b01a6a200241c0226a41046a41900810d40b1a200241d82a6a200241801b6a220110b20320024188086a200241b01a6a200320022903d82a20022d00e02a20022d00e12a2004109e0a200110cf040c010b200241013a0088082002200020074110747222013b008908200220014110763a008b080b410110382201450d01200242013702dc11200220013602d8110240024020022d00880822074101470d00200141013a0000200241013602e01120022d00890820022d008a0820022d008b08200241d8116a10cd0a20022802e011210020022802d81121040c010b200141003a000041012103200241013602e01120024188086a41086a2903002105024020022802dc11417f6a41074b0d00200241d8116a41014108107720022802d811210120022802e01121030b200120036a20053700002002200341086a3602e011200241a0086a2802002101200241d8116a200241a8086a280200220310ac0202402003450d0020012003410c6c6a210303402001280200200141086a280200200241d8116a10b9022001410c6a22012003470d000b0b200241ac086a2802002101200241d8116a200241b4086a280200220310ac0202402003450d0020012003410c6c6a210303402001280200200141086a280200200241d8116a10b9022001410c6a22012003470d000b0b20024198086a2903002105024020022802dc11220320022802e01122016b41074b0d00200241d8116a20014108107720022802dc11210320022802e01121010b20022802d811220420016a20053700002002200141086a22013602e011200241b8086a2d00002100024020032001470d00200241d8116a20034101107720022802d811210420022802e01121010b200420016a20003a0000200141016a210020070d00200241a0086a28020021070240200241a8086a2802002201450d002001410c6c21032007210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b0240200241a4086a2802002201450d002001410c6c450d00200710390b200241ac086a28020021070240200241b4086a2802002201450d002001410c6c21032007210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b200241b0086a2802002201450d002001410c6c450d00200710390b200241f0326a24002000ad4220862004ad840f0b200241cc226a41303602002002419c086a41023602002002420237028c0820024198a0ce0036028808200241043602c422200241a4a2ce003602c0222002200241c0226a36029808200220024188086a3602c82220024188086a41a8a0ce001043000b1032000ba90701057f230041d0026b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241e0016a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037020c2002200136021c2002200041b8c0cd0020011b3602182002200241186a360208200241e0016a200241086a10f604200241ec016a280200210420022802e801210520022802e401210020022802e001210620024180016a200241f0016a41e00010d40b1a02402000450d00200241206a20024180016a41e00010d40b1a0240024020022802082802040d0020024180016a200241206a41e00010d40b1a0c010b02402004450d00200441246c21012000210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402005450d00200541246c450d00200010390b410021000b2000450d00200241e0016a410c6a22032004360200200241e0016a41086a2005360200200220003602e401200220063602e001200241f0016a20024180016a41e00010d40b1a200241e0016a10ec06024020032802002201450d0020022802e4012103200141246c210103400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b024020022802e8012203450d00200341246c450d0020022802e40110390b200241d0026a24004100350284ee4d0f0b2002412c6a4130360200200241f4016a4102360200200242023702e40120024198a0ce003602e00120024104360224200241c0a2ce003602202002200241206a3602f0012002200241e0016a360228200241e0016a41a8a0ce001043000bf20202027f017e230041306b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020010d00200241206a10a907200241086a200241206a10a80720023502102104200228020821030240200228022441ffffff3f71450d00200228022010390b200241306a240020044220862003ad840f0b2002412c6a41303602002002411c6a41023602002002420237020c20024198a0ce0036020820024104360224200241d8a2ce003602202002200241206a3602182002200241086a360228200241086a41a8a0ce001043000bdb0901067f230041c0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02400240024020010d00200241286a22034200370300200241206a22014200370300200241106a41086a2204420037030020024200370310200241306a41c7e5c000410610cb012004200241306a41086a220529000037030020022002290030370310200241306a419081c400410610cb012003200529000037030020012002290030370300200241086a200241106a412010ce0320022802082106200228020c210720034200370300200142003703002004420037030020024200370310200241306a41b9c3c200410d10cb012004200529000037030020022002290030370310200241306a4188c8c200410f10cb012003200529000037030020012002290030370300200741016a410120061b2103200241306a200241106a10e80502400240200228023022010d0020024200370214200241002802d8974e3602100c010b20022002290234370214200220013602100b200241106a410c6a200310e20520022802182201410c6c41046a2203417f4c0d010240024020030d00410121040c010b200310382204450d030b20024100360238200220033602342002200436023020022802102106200241306a200110ac0202402001450d0020062001410c6c6a2107034020062802002101200241306a2006280208220310ac022006410c6a210602402003450d0020034102742104200228023821030340200128020021050240200228023420036b41034b0d00200241306a200341041077200228023821030b200141046a2101200228023020036a20053600002002200341046a22033602382004417c6a22040d000b0b20062007470d000b0b200228021c2104024020022802342201200228023822036b41034b0d00200241306a20034104107720022802342101200228023821030b2002280230220520036a20043600002002200341046a2203360238200241206a28020021040240200120036b41034b0d00200241306a2003410410772002280234210120022802302105200228023821030b200520036a20043600002002200341046a2204360238200241246a28020021030240200120046b41034b0d00200241306a20044104107720022802302105200228023821040b200520046a20033600002002280230210620022802102105024020022802182203450d002003410c6c21012005210303400240200341046a28020041ffffffff0371450d00200328020010390b2003410c6a2103200141746a22010d000b0b024020022802142203450d002003410c6c450d00200510390b200241c0006a2400200441046aad4220862006ad840f0b2002413c6a4130360200200241246a41023602002002420237021420024198a0ce0036021020024104360234200241eca2ce003602302002200241306a3602202002200241106a360238200241106a41a8a0ce001043000b1034000b1032000b9f610a057f017e017f017e097f027e027f017e167f027e230041a00e6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241980e6a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024002400240024020010d00200241d0036a41186a22014200370300200241d0036a41106a22044200370300200241d0036a41086a22054200370300200242003703d003200241c8006a41b9c3c200410d10cb012005200241c8006a41086a2203290000370300200220022900483703d003200241c8006a41c4c9c200411110cb012001200329000037030020042002290048370300200241c8006a200241d0036a10e50520022802482106200229024c2107200142003703002004420037030020054200370300200242003703d003200241c8006a41ecc0cc00410510cb0120052003290000370300200220022900483703d003200241c8006a41c49ac300410a10cb012001200329000037030020042002290048370300200241c8006a200241d0036a412010e60320022802482108200229024c2109200142003703002004420037030020054200370300200242003703d003200241c8006a41f1d5c400410d10cb0120052003290000370300200220022900483703d003200241c8006a418bd6c400410c10cb012001200329000037030020042002290048370300200241c8006a200241d0036a412010c70320022802d001210a20022802cc01210b20022802d801210c200142003703002004420037030020054200370300200242003703d003200241c8006a41c7e5c000410610cb0120052003290000370300200220022900483703d003200241c8006a419081c400410610cb012001200329000037030020042002290048370300200241206a200241d0036a412010ce032002280220210d2002280224210e10ed05200241c8006a41186a220f4200370300200241c8006a41106a221042003703002003420037030020024200370348200241c0086a41b9c3c200410d10cb012003200241c0086a41086a2211290000370300200220022900c008370348200241c0086a41c4c9c200411110cb01200f2011290000370300201020022900c008370300200241c0086a200241c8006a10e50520022802c008211220022902c4082113200142003703002004420037030020054200370300200242003703d003200241c8006a41f1d5c400410d10cb0120052003290000370300200220022900483703d003200241c8006a418bd6c400410c10cb012001200329000037030020042002290048370300200241c8006a200241d0036a412010c703200142003703002004420037030020054200370300200242003703d003200241c8006a41ecc0cc00410510cb0120052003290000370300200220022900483703d003200241c8006a41c49ac300410a10cb012001200329000037030020042002290048370300200241c8006a200241d0036a412010e60320022802482105200229024c2114200f4200370300201042003703002003420037030020024200370348200241c0086a41b9c3c200410d10cb0120032011290000370300200220022900c008370348200241c0086a41d4c2cc00410910cb01200f2011290000370300201020022900c008370300200241c0086a200241c8006a10ee050240024020022802c00822110d00200242003702b40b41002115200241002802d8974e22113602b00b410021160c010b20022902c4082117200220113602b00b200220173702b40b2017422088a721162017a721150b200241e0006a4200370300200241d8006a4200370300200241c8006a41086a2201420037030020024200370348200241c0086a41b9c3c200410d10cb012001200241c0086a41086a2203290000370300200220022900c008370348200241c0086a41f0c8c200410f10cb01201041086a2003290000370000201020022900c008370000200241c0086a200241c8006a10e4050240024020022802c00822180d004100211941002802d8974e21184100211a4100211b0c010b2003280200211a200241cc086a280200211b20022802c40821190b200241e0006a4200370300200241d8006a4200370300200241c8006a41086a2203420037030020024200370348200241c0086a41b9c3c200410d10cb012003200241c0086a41086a2201290000370300200220022900c008370348200241c0086a4188c8c200410f10cb01201041086a2001290000370000201020022900c008370000200241c0086a200241c8006a10e80520022802c008220341002802d8974e20031b210f024020022902c408420020031b2217422088a72210450d002010410c6c2101200f210303400240200341046a28020041ffffffff0371450d00200328020010390b2003410c6a2103200141746a22010d000b0b200e41016a210341002802d8974e211c02402017a72201450d002001410c6c450d00200f10390b2013420020121b21132014420020051b211420034101200d1b211d2012201c20121b211e2005201c20051b211f024020100d0002402019450d002019412c6c450d00201810390b02402015450d00201541346c450d00201110390b0240201442ffffffff0383500d00201f10390b2013a72203450d042003412c6c450d04201e10390c040b200242003702f40b200241002802d8974e22203602f00b201f417c6a21212011201641346c6a2115201e2013422088a7412c6c6a21122014422088a72122410021234100210d4100212441002125201e210303402025417f6a2101202120254102746a2105034020122003460d04200141016a2101200541046a2105200328020021102003412c6a220e210320104102470d000b200141016a2125200d21102024210302400340024002402003450d002010210d200321240c010b41002011201120154622031b210f201020112015476a210d410121242015201141346a20031b2111201021260b0240200f0d00201621270c020b41002103200d2110200f28020022282001490d000b200e210320282001460d01202621270b200141016a212502400240200120224f0d0020052802002105200241106a2001201d10e70502402002280210450d0041002110200228021421290c020b419cddc20041de0041fcddc200105b000b02400240201a450d00201a410274417c6a41027641016a2128410021034100210503402022201820036a221041286a2802006a2001460d022003412c6a21032028200541016a2205470d000b0b200e21030c020b200241c8006a41086a222a2010410c6a290200370300200241c8006a41106a222b201041146a290200370300200241c8006a41186a222c2010411c6a2902003703002002201041046a29020037034820102802002105201041246a280200212820102010412c6a201a412c6c20036b41546a10d50b1a200241186a2001201d10e7052002280218450d03200228021c2129200241c0086a41186a202c290300370300200241c0086a41106a202b290300370300200241c0086a41086a202a290300370300200220022903483703c008201a417f6a211a410121100b200241c8006a411f6a222a200241c0086a411f6a280000360000200241c8006a41186a222b200241c0086a41186a290300370300200241c8006a41106a222c200241c0086a41106a290300370300200241c8006a41086a222d200241c0086a41086a290300370300200220022903c0083703480240202320022802f40b470d00200241f00b6a202310860320022802f00b212020022802f80b21230b2020202341386c6a22032001360204200320273602002003410c6a20103a0000200341086a20053602002003410d6a2002290348370000202a2800002101202b2903002117202c290300212e202d290300212f200341346a2029360200200341306a2028360200200341156a202f3700002003411d6a202e370000200341256a20173700002003412c6a2001360000200220022802f80b41016a22233602f80b200e21030c000b0b200241cc086a4130360200200241dc006a41023602002002420237024c20024198a0ce00360248200241043602c40820024184a3ce003602c0082002200241c0086a3602582002200241980e6a3602c808200241c8006a41a8a0ce001043000b419cddc20041de00418cdec200105b000b20022802f40b212520022802f00b212202402023450d00202341386c21284100210f200241ef006a2112200241e8006a210d200241e0006a210e200241d8006a2115200241d0006a2124410021102022210303402003410c6a2d000022264102460d01200341046a2902002117200328020021112012200341346a280000360000200d2003412d6a290000370300200e200341256a29000037030020152003411d6a2900003703002024200341156a29000037030020022003410d6a290000370348024020022802b80b2205201020116a2201490d000240200520022802b40b470d00200241b00b6a20051085030b200341386a2103201041016a211020022802b00b200141346c6a220141346a2001200f200520116b6a41346c10d50b1a200120263a000820012017370200200141096a2002290348370000200141116a2024290300370000200141196a2015290300370000200141216a200e290300370000200141296a200d290300370000200141306a20122800003600002002200541016a3602b80b200f417f6a210f202841486a22280d010c020b0b200120051041000b02402025450d00202541386c450d00202210390b200241c8006a41086a200241b00b6a41086a280200360200200220022903b00b370348200241c8006a10f1052002201b3602542002201a3602502002201936024c20022018360248200241c8006a10ea052002201337024c2002201e360248200241c8006a10f005201442ffffffff0383500d00201f10390b200241386a201d10e20502402007420020061b2214422088a7412c6c2205412c6d2201ad42b0037e2217422088a70d002017a72203417f4c0d0002400240024020030d00410421100c010b200310382210450d010b2006201c20061b222a20056a211d4100211e20024100360230200220103602282002200341b0036e220336022c0240200320014f0d00200241286a200110b4092002280230211e0b2009420020081b21132008201c20081b212b024002400240024002400240201d202a460d004101200b200c41024622031b210c4101200a20031b21272002280228201e41b0036c6a21032013422088a72129200241c0086a4188026a2126200241c0086a41e8016a211c200241c0086a41a8016a2110200241c0086a4188016a2125200241c0086a41e8006a210620024188096a2108200241c0086a41286a210f200241c0086a41086a21112002418c0b6a2118200241c0086a41ac026a2101200241c0086a41a8026a2120200241c8006a41ac026a2105200241c0086a41386a2123202b212841002112202a210d02400340200d28020022154103460d0141022124024020154102460d000240024020150d0020024198086a200d41046a28020010de08200241c8006a200228029808222220022802a00810df0802400240024020022802f002220b450d00200241f00b6a200241c8006a41a80210d40b1a200241b00b6a41386a220e200541386a290200370300200241b00b6a41306a2215200541306a290200370300200241b00b6a41286a2224200541286a290200370300200241b00b6a41206a2219200541206a290200370300200241b00b6a41186a221a200541186a290200370300200241b00b6a41106a2216200541106a290200370300200241b00b6a41086a2221200541086a290200370300200220052902003703b00b0240200228029c08450d00202210390b200241c0086a200241f00b6a41a80210d40b1a200141386a200e290300370200200141306a2015290300370200200141286a2024290300370200200141206a2019290300370200200141186a201a290300370200200120022903b00b370200200141086a2021290300370200200141106a20162903003702002002200b3602e80a20022802840b210e200241b00b6a201210e605200228023c2222450d092027200e6a2115200228024021242002280238211f200241f00b6a201210e305200241d0056a202010cb09200220022802c008200e10e705202220246a220a4100200a201f6b221b201b200a4b1b2022706b210a202441002024201f6b221f201f20244b1b2022706b21242002280200450d01200228020421220c020b0240200228029c08450d00202210390b41d499c700413241889ac700105b000b4100212241002802d0a94e4102490d004100212241002802cca94e211f41002802c8a94e210b41002802d4a94e211b20024201370358200241989ac70036025420024281808080f00a37028401200241c09ac700ad4280808080f0068437027c20024100360278200241909bc700ad42808080809006843703702002420037036820024119360250200241f79ac70036024c20024102360248200241b8c0cd00360264200b41b8c0cd00201b410246221b1b200241c8006a201f41c0a4c000201b1b28021011030020022802e80a210b0b2015200a4b211b202420276a2124200241d0036a41186a201841186a290200370300200241d0036a41106a201841106a290200370300200241d0036a41086a201841086a290200370300200241a0076a41086a200f41086a290200370300200241a0076a41106a200f41106a290200370300200241a0076a41186a200f41186a290200370300200220182902003703d0032002200f2902003703a00720022802c408211f200241c8006a41386a201041386a290200370300200241c8006a41306a201041306a290200370300200241c8006a41286a201041286a290200370300200241c8006a41206a201041206a290200370300200241c8006a41186a201041186a290200370300200241c8006a41106a201041106a290200370300200241c8006a41086a201041086a29020037030020024198086a41086a202129030037030020024198086a41106a201629030037030020024198086a41186a201a29030037030020024198086a41206a201929030037030020022010290200370348200220022903b00b37039808200241f0076a41206a200241f00b6a41206a290300370300200241f0076a41186a200241f00b6a41186a290300370300200241f0076a41106a200241f00b6a41106a290300370300200241f0076a41086a200241f00b6a41086a290300370300200241e0076a41086a200241d0056a41086a280200360200200241c0076a41186a201141186a290200370300200241c0076a41106a201141106a290200370300200241c0076a41086a201141086a290200370300200220022903f00b3703f007200220022903d0053703e007200220112902003703c00720024180076a41186a200841186a29020037030020024180076a41106a200841106a29020037030020024180076a41086a200841086a2902003703002002200829020037038007200241e0066a41186a200641186a290200370300200241e0066a41106a200641106a290200370300200241e0066a41086a200641086a290200370300200220062902003703e006200241c0066a41186a202541186a290200370300200241c0066a41106a202541106a290200370300200241c0066a41086a202541086a290200370300200220252902003703c006200241a0066a41186a201c41186a290200370300200241a0066a41106a201c41106a290200370300200241a0066a41086a201c41086a2902003703002002201c2902003703a00620024180066a41186a202641186a29020037030020024180066a41106a202641106a29020037030020024180066a41086a202641086a2902003703002002202629020037038006024020022802f00a450d00200b10390b2015200a201b1b211920152024492124024020022802fc0a450d0020022802f40a10390b2015201920241b21190c010b201220294f0d0620024198086a202828020010de08200241c8006a200228029808222220022802a00810df0802400240024020022802f002220b450d00200241f00b6a200241c8006a41a80210d40b1a200241b00b6a41386a220e200541386a290200370300200241b00b6a41306a2215200541306a290200370300200241b00b6a41286a2224200541286a290200370300200241b00b6a41206a2219200541206a290200370300200241b00b6a41186a221a200541186a290200370300200241b00b6a41106a2216200541106a290200370300200241b00b6a41086a2221200541086a290200370300200220052902003703b00b0240200228029c08450d00202210390b200241c0086a200241f00b6a41a80210d40b1a200141386a200e290300370200200141306a2015290300370200200141286a2024290300370200200141206a2019290300370200200141186a201a290300370200200120022903b00b370200200141086a2021290300370200200141106a20162903003702002002200b3602e80a20022802840b210e200241b00b6a201210e605200228023c2222450d0a200c200e6a2115200228024021242002280238211f200241f00b6a201210e305200241d0056a202010cb09200241086a20022802c008200e10e705202220246a220a4100200a201f6b221b201b200a4b1b2022706b210a202441002024201f6b221f201f20244b1b2022706b21242002280208450d01200228020c21220c020b0240200228029c08450d00202210390b41d499c700413241b09ac700105b000b4100212241002802d0a94e4102490d004100212241002802cca94e211f41002802c8a94e210b41002802d4a94e211b20024201370358200241989ac70036025420024281808080f00a37028401200241c09ac700ad4280808080f0068437027c20024100360278200241909bc700ad42808080809006843703702002420037036820024119360250200241f79ac70036024c20024102360248200241b8c0cd00360264200b41b8c0cd00201b410246221b1b200241c8006a201f41c0a4c000201b1b28021011030020022802e80a210b0b2015200a4b211b2024200c6a2124200241d0036a41186a201841186a290200370300200241d0036a41106a201841106a290200370300200241d0036a41086a201841086a290200370300200241a0076a41086a200f41086a290200370300200241a0076a41106a200f41106a290200370300200241a0076a41186a200f41186a290200370300200220182902003703d0032002200f2902003703a00720022802c408211f200241c8006a41386a201041386a290200370300200241c8006a41306a201041306a290200370300200241c8006a41286a201041286a290200370300200241c8006a41206a201041206a290200370300200241c8006a41186a201041186a290200370300200241c8006a41106a201041106a290200370300200241c8006a41086a201041086a29020037030020024198086a41086a202129030037030020024198086a41106a201629030037030020024198086a41186a201a29030037030020024198086a41206a201929030037030020022010290200370348200220022903b00b37039808200241f0076a41206a200241f00b6a41206a290300370300200241f0076a41186a200241f00b6a41186a290300370300200241f0076a41106a200241f00b6a41106a290300370300200241f0076a41086a200241f00b6a41086a290300370300200241e0076a41086a200241d0056a41086a280200360200200241c0076a41186a201141186a290200370300200241c0076a41106a201141106a290200370300200241c0076a41086a201141086a290200370300200220022903f00b3703f007200220022903d0053703e007200220112902003703c00720024180076a41186a200841186a29020037030020024180076a41106a200841106a29020037030020024180076a41086a200841086a2902003703002002200829020037038007200241e0066a41186a200641186a290200370300200241e0066a41106a200641106a290200370300200241e0066a41086a200641086a290200370300200220062902003703e006200241c0066a41186a202541186a290200370300200241c0066a41106a202541106a290200370300200241c0066a41086a202541086a290200370300200220252902003703c006200241a0066a41186a201c41186a290200370300200241a0066a41106a201c41106a290200370300200241a0066a41086a201c41086a2902003703002002201c2902003703a00620024180066a41186a202641186a29020037030020024180066a41106a202641106a29020037030020024180066a41086a202641086a2902003703002002202629020037038006024020022802f00a450d00200b10390b2015200a201b1b211920152024492124024020022802fc0a450d0020022802f40a10390b2015201920241b21190b200241f00b6a41206a20024198086a41206a290300370300200241f00b6a41186a20024198086a41186a290300370300200241f00b6a41106a20024198086a41106a290300370300200241f00b6a41086a20024198086a41086a290300370300200241b00b6a41086a200241f0076a41086a290300370300200241b00b6a41106a200241f0076a41106a290300370300200241b00b6a41186a200241f0076a41186a290300370300200241b00b6a41206a200241f0076a41206a29030037030020022002290398083703f00b200220022903f0073703b00b200241f0056a41086a200241e0076a41086a280200360200200241d0056a41186a200241c0076a41186a290300370300200241d0056a41106a200241c0076a41106a290300370300200241d0056a41086a200241c0076a41086a290300370300200241b0056a41186a200241a0076a41186a290300370300200241b0056a41106a200241a0076a41106a290300370300200241b0056a41086a200241a0076a41086a290300370300200220022903e0073703f005200220022903c0073703d005200220022903a0073703b00520024190056a41186a20024180076a41186a29030037030020024190056a41106a20024180076a41106a29030037030020024190056a41086a20024180076a41086a290300370300200220022903800737039005200241f0046a41186a200241e0066a41186a290300370300200241f0046a41106a200241e0066a41106a290300370300200241f0046a41086a200241e0066a41086a290300370300200220022903e0063703f004200241d0046a41186a200241c0066a41186a290300370300200241d0046a41106a200241c0066a41106a290300370300200241d0046a41086a200241c0066a41086a290300370300200220022903c0063703d0042023200241c8006a41386a290300370300200241c0086a41306a200241c8006a41306a290300370300200f200241c8006a41286a290300370300200241c0086a41206a200241c8006a41206a290300370300200241c0086a41186a200241c8006a41186a290300370300200241c0086a41106a200241c8006a41106a2903003703002011200241c8006a41086a290300370300200220022903483703c008200241b0046a41186a200241a0066a41186a290300370300200241b0046a41106a200241a0066a41106a290300370300200241b0046a41086a200241a0066a41086a290300370300200220022903a0063703b00420024190046a41186a20024180066a41186a29030037030020024190046a41106a20024180066a41106a29030037030020024190046a41086a20024180066a41086a290300370300200220022903800637039004200241f0036a41186a200241d0036a41186a290300370300200241f0036a41106a200241d0036a41106a290300370300200241f0036a41086a200241d0036a41086a290300370300200220022903d0033703f003410021240b20032024360200200341046a20022903f00b370200200341306a20193602002003412c6a200e360200200341346a20022903b00b3702002003410c6a200241f00b6a41086a290300370200200341146a200241f00b6a41106a2903003702002003411c6a200241f00b6a41186a290300370200200341246a200241f00b6a41206a2903003702002003413c6a200241b00b6a41086a290300370200200341c4006a200241b00b6a41106a290300370200200341cc006a200241b00b6a41186a290300370200200341d4006a200241b00b6a41206a290300370200200341e8006a2022360200200341ec006a201f360200200341e4006a200241f0056a41086a280200360200200341dc006a20022903f005370200200341f0006a20022903d005370200200341f8006a200241d0056a41086a29030037020020034180016a200241d0056a41106a29030037020020034188016a200241d0056a41186a29030037020020034190016a20022903b00537020020034198016a200241b0056a41086a290300370200200341a0016a200241b0056a41106a290300370200200341a8016a200241b0056a41186a290300370200200341c8016a20024190056a41186a290300370200200341c0016a20024190056a41106a290300370200200341b8016a20024190056a41086a290300370200200341b0016a200229039005370200200341e8016a200241f0046a41186a290300370200200341e0016a200241f0046a41106a290300370200200341d8016a200241f0046a41086a290300370200200341d0016a20022903f00437020020034188026a200241d0046a41186a29030037020020034180026a200241d0046a41106a290300370200200341f8016a200241d0046a41086a290300370200200341f0016a20022903d004370200200341c8026a2023290300370200200341c0026a200241c0086a41306a290300370200200341b8026a200f290300370200200341b0026a200241c0086a41206a290300370200200341a8026a200241c0086a41186a290300370200200341a0026a200241c0086a41106a29030037020020034198026a201129030037020020034190026a20022903c008370200200341e8026a200241b0046a41186a290300370200200341e0026a200241b0046a41106a290300370200200341d8026a200241b0046a41086a290300370200200341d0026a20022903b00437020020034188036a20024190046a41186a29030037020020034180036a20024190046a41106a290300370200200341f8026a20024190046a41086a290300370200200341f0026a200229039004370200200341a8036a200241f0036a41186a290300370200200341a0036a200241f0036a41106a29030037020020034198036a200241f0036a41086a29030037020020034190036a20022903f003370200200341b0036a2103202841046a2128201241016a2112200d412c6a220d201d470d000b0b201e20126a211e0b2002201e36023002402014a72203450d002003412c6c450d00202a10390b200241d0036a41186a4200370300200241d0036a41106a4200370300200241d0036a41086a22034200370300200242003703d003200241c8006a41b9c3c200410d10cb012003200241c8006a41086a220d290000370300200220022900483703d003200241c8006a41d4c2cc00410910cb01200441086a200d29000037000020042002290048370000200241c8006a200241d0036a10ee052002280248220341002802d8974e20031b2108200229024c420020031b2214422088a72203450d042008200341346c6a212420022802282128200241c8006a41186a210e200241c8006a41106a2115200821010340200141086a2d000022104102460d0520012902002217a7210341002105024020104101470d00200e200141216a2900003703002015200141196a290000370300200d200141116a2900003703002002200141096a290000370348410121050b200241c0086a41186a2210200e290300370300200241c0086a41106a220f2015290300370300200241c0086a41086a2211200d290300370300200220022903483703c008201e20034d0d042017422088a7211202402028200341b0036c6a22032802000d00200341dc006a221c28020021260240200341e4006a22252802002206450d00202610390b20252006360200201c20263602000b20034101360200200320022903c008370009200320022f00f00b3b002920032012360204200341116a2011290300370000200341196a200f290300370000200341216a20102903003700002003412b6a200241f00b6a41026a2d00003a0000200341086a20053a00002003412c6a200241c8006a41840310d40b1a200141346a22012024470d000c050b0b41e0bdcc004139419cbecc001035000b2012202941a09ac700103c000b41e0bdcc004139419cbecc001035000b2003201e41b494c500103c000b02402014a72203450d00200341346c450d00200810390b0240201342ffffffff0383500d00202b10390b201e41b0036c22114104722203417f4c0d0120022802282110200310382201450d00200241003602502002200336024c20022001360248200241c8006a201e10ac0202400240201e0d002002280250210d2002280248210e0c010b4100210103400240024002400240201020016a22032802000e03000102030b0240200228024c20022802502205470d00200241c8006a200541011077200228025021050b200228024820056a41003a00002002200541016a360250200341046a200241c8006a10a7092003412c6a280200210f0240200228024c200228025022056b41034b0d00200241c8006a200541041077200228025021050b200228024820056a200f3600002002200541046a2205360250200341306a280200210f0240200228024c20056b41034b0d00200241c8006a200541041077200228025021050b200228024820056a200f3600002002200541046a360250200341346a200241c8006a10a709200341dc006a280200200341e0006a280200200241c8006a10e702200341e8006a280200210f0240200228024c200228025022056b41034b0d00200241c8006a200541041077200228025021050b200228024820056a200f3600002002200541046a360250412010382205450d05200520034190036a290000370000200541186a220d200341a8036a290000370000200541106a220e200341a0036a290000370000200541086a221520034198036a2900003700000240200228024c200228025022126b411f4b0d00200241c8006a201241201077200228025021120b200228024820126a220f2005290000370000200f41086a2015290000370000200f41106a200e290000370000200f41186a200d2900003700002002201241206a36025020051039200341ec006a280200210f0240200228024c200228025022056b41034b0d00200241c8006a200541041077200228025021050b200228024820056a200f3600002002200541046a360250200341f0006a200241c8006a10b5020240200228024c2002280250220f6b411f4b0d00200241c8006a200f412010772002280250210f0b2002280248200f6a220520034190016a290000370000200541086a20034198016a290000370000200541106a200341a0016a290000370000200541186a200341a8016a2900003700002002200f41206a360250200341b0016a200241c8006a10b502200341d0016a200241c8006a10b502200341f0016a200241c8006a10b5020240200228024c2002280250220f6b413f4b0d00200241c8006a200f41c00010772002280250210f0b2002280248200f6a220520034190026a290000370000200541086a20034198026a290000370000200541106a200341a0026a290000370000200541186a200341a8026a290000370000200541206a200341b0026a290000370000200541286a200341b8026a290000370000200541306a200341c0026a290000370000200541386a200341c8026a2900003700002002200f41c0006a360250200341d0026a200241c8006a10b502200341f0026a200241c8006a10b5020c020b0240200228024c20022802502205470d00200241c8006a200541011077200228025021050b200228024820056a41013a00002002200541016a2205360250200341046a280200210f0240200228024c20056b41034b0d00200241c8006a200541041077200228025021050b200228024820056a200f3600002002200541046a22053602500240200341086a2d00004101460d000240200228024c2005470d00200241c8006a200541011077200228025021050b200228024820056a41003a00002002200541016a3602500c020b0240200228024c2005470d00200241c8006a200541011077200228025021050b200228024820056a41013a00002002200541016a2205360250200341096a21030240200228024c20056b411f4b0d00200241c8006a200541201077200228025021050b200228024820056a220f2003290000370000200f41086a200341086a290000370000200f41106a200341106a290000370000200f41186a200341186a2900003700002002200541206a3602500c010b0240200228024c20022802502203470d00200241c8006a200341011077200228025021030b200228024820036a41023a00002002200341016a3602500b2011200141b0036a2201470d000b2002280250210d2002280248210e201e450d00201e41b0036c2101201021030340024020032802000d00200341dc006a220f28020021050240200341e4006a22112802002212450d00200510390b20112012360200200f20053602000b200341b0036a2103200141d07c6a22010d000b0b0240200228022c2203450d00200341b0036c450d00201010390b200241a00e6a2400200dad422086200ead840f0b1032000b1034000b9115020c7f017e230041c0036b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241d0006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02400240024020014104490d0020014104460d00200041b8c0cd0020011b220328000021044100210002400240024020032d00040e03020001030b410121000c010b410221000b20014105470d00200241e8006a22014200370300200241e0006a22034200370300200241d0006a41086a2205420037030020024200370350200241306a41c7e5c000410610cb012005200241306a41086a220629000037030020022002290030370350200241306a419081c400410610cb012001200629000037030020032002290030370300200241086a200241d0006a412010ce0320022802082105200228020c2106200241306a10e80120022802382203450d022002200228023022012d00003a00542002410136025020034101460d02200220012d00013a00552002410236025020034102460d02200220012d00023a00562002410336025020034103460d02200220012d00033a00572002410436025020034104460d02200241d8006a20012d00043a00002002410536025020034105460d02200241d9006a20012d00053a00002002410636025020034106460d02200241da006a20012d00063a00002002410736025020034107460d02200241db006a20012d00073a00002002410836025020034108460d02200241dc006a20012d00083a00002002410936025020034109460d02200241dd006a20012d00093a00002002410a3602502003410a460d02200241de006a20012d000a3a00002002410b3602502003410b460d02200241df006a20012d000b3a00002002410c3602502003410c460d02200241e0006a20012d000c3a00002002410d3602502003410d460d02200241e1006a20012d000d3a00002002410e3602502003410e460d02200241e2006a20012d000e3a00002002410f3602502003410f460d02200241e3006a20012d000f3a00002002411036025020034110460d02200241e4006a20012d00103a00002002411136025020034111460d02200241e5006a20012d00113a00002002411236025020034112460d02200241e6006a20012d00123a00002002411336025020034113460d02200241e7006a20012d00133a00002002411436025020034114460d02200241e8006a20012d00143a00002002411536025020034115460d02200241e9006a20012d00153a00002002411636025020034116460d02200241ea006a20012d00163a00002002411736025020034117460d02200241eb006a20012d00173a00002002411836025020034118460d02200241ec006a20012d00183a00002002411936025020034119460d02200241ed006a20012d00193a00002002411a3602502003411a460d02200241ee006a20012d001a3a00002002411b3602502003411b460d02200241ef006a20012d001b3a00002002411c3602502003411c460d02200241f0006a20012d001c3a00002002411d3602502003411d460d02200241f1006a20012d001d3a00002002411e3602502003411e460d02200241f2006a20012d001e3a00002002411f3602502003411f470d010c020b2002413c6a4130360200200241e4006a41023602002002420237025420024198a0ce0036025020024104360234200241a0a3ce003602302002200241306a3602602002200241d0006a360238200241d0006a41a8a0ce001043000b200241f3006a20012d001f3a0000200241286a41026a2203200241dd006a2d00003a0000200241246a41026a2207200241e4006a2d00003a0000200220022f01543b012c200220022d00563a002e2002200241db006a2f00003b01282002200241e2006a2f01003b0124200241ec006a2802002108200241e5006a2800002109200241de006a280100210a20024120360250200241d0006a41206a280200210b2002280057210c200241206a41026a200241eb006a2d0000220d3a00002002411c6a41026a20022d002e3a0000200241186a41026a20032d00003a0000200241146a41026a20072d00003a00002002200241e9006a2f000022033b0120200220022f012c3b011c200220022f01283b0118200220022f01243b0114200241106a41026a200d3a0000200220033b011002402002280234450d00200110390b2006410020051b21010240024002400240024020000e03010200010b200241306a200410de08200241d0006a20022802302200200228023810df082002418c036a280200210520024184036a280200210720024180036a280200210620022802f802210302402002280234450d00200010390b2003450d0202402006450d00200310390b02402005450d00200710390b200241003602500c030b200410ed09200241396a200241186a41026a2d00003a0000200241c0006a200241146a41026a2d00003a0000200241c7006a200241106a41026a2d00003a000020022002411c6a41026a2d00003a0032200220022f011c3b01302002200c360033200220022f01183b00372002200a36013a200220022f01143b013e20022009360041200220022f01103b00452002200b36024c20022008360248200241d0006a20042001200241306a10fa090c020b200241396a200241186a41026a2d00003a0000200241c0006a200241146a41026a2d00003a0000200241c7006a200241106a41026a2d00003a0000200220022f011c3b01302002200c360033200220022f01183b00372002200a36013a200220022f01143b013e20022009360041200220022f01103b004520022002411c6a41026a2d00003a00322002200b36024c20022008360248200241d0006a20042001200241306a10fa090c010b200241396a200241186a41026a2d00003a0000200241c0006a200241146a41026a2d00003a0000200241c7006a200241106a41026a2d00003a0000200220022f011c3b01302002200c360033200220022f01183b00372002200a36013a200220022f01143b013e20022009360041200220022f01103b004520022002411c6a41026a2d00003a00322002200b36024c20022008360248200241d0006a20042001200241306a10fa090b0240410110382201450d00200242013702342002200136023002400240200228025022030d00200141003a0000428080808010210e0c010b200141013a0000200241013602382003200241d8006a280200200241306a10b902200241dc006a280200210002402002280234200228023822016b41034b0d00200241306a200141041077200228023821010b200228023020016a20003600002002200141046a360238200241e4006a200241306a10b502200241e0006a280200210402402002280234200228023822006b41034b0d00200241306a200041041077200228023821000b2002280230220120006a2004360000200041046aad422086210e2002280254450d00200310390b200241c0036a2400200e2001ad840f0b1032000b41c494c500412e200241d0006a41f8dfc40041f494c500103d000bd311020d7f017e230041b0046b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241d0006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037021c2002200241a0026a3602180240024020014104490d0020022001417c6a3602a4022002200041b8c0cd0020011b220141046a3602a00220012800002104200241d0006a200241186a10820520022802502200450d00200241e8026a41086a220120024184016a2802003602002002200241fc006a2902003703e802200241f8006a2802002105200241f4006a2802002106200241f0006a2802002107200241ec006a2802002108200241e8006a2802002109200241e4006a280200210a200241e0006a280200210b200241dc006a280200210c200241d0006a41086a280200210d2002280254210e0240024020022802182802040d00200241b8026a41086a2001280200360200200220022903e8023703b8020c010b0240200d450d00200d410c6c21032000210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b0240200e450d00200e410c6c450d00200010390b0240200a450d00200a4104742103200c41086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200341706a22030d000b0b0240200b41ffffffff0071450d00200c10390b02402009450d002008450d00200910390b410021002005450d00200610390b2000450d00200241086a41086a200241b8026a41086a2802002201360200200220022903b802220f370308200241c0006a2005360200200241186a41206a2007360200200241346a20083602002002412c6a200a360200200241186a41106a200b360200200241c4006a200f370200200241cc006a20013602002002200636023c200220093602302002200c3602242002200d3602202002200e36021c20022000360218200241d0006a41186a22014200370300200241d0006a41106a22034200370300200241d0006a41086a220e420037030020024200370350200241e8026a41c7e5c000410610cb01200e200241e8026a41086a2209290000370300200220022900e802370350200241e8026a419081c400410610cb0120012009290000370300200320022900e8023703002002200241d0006a412010ce03200228020421052002280200210b2001420037030020034200370300200e420037030020024200370350200241e8026a41f1d5c400410d10cb01200e2009290000370300200220022900e802370350200241e8026a418bd6c400410c10cb0120012009290000370300200320022900e802370300200241e8026a200241d0006a412010c7034100210320054100200b1b2101200241186a41186a210e0240024020022802f80322094102470d00200241d0006a410041800110d60b1a2002418c026a4200370200200242003702840220024101360280022002428280808080193703f80120024286808080c00c3703f001200241003602e801200242013703d80120024281808080103703d0010c010b200241d0006a200241e8026a41900110d40b1a200241d0006a41c4016a200241e8026a41c4016a280200360200200241d0006a41bc016a200241e8026a41bc016a290200370200200241d0006a41b4016a200241e8026a41b4016a290200370200200241d0006a41ac016a200241e8026a41ac016a290200370200200241d0006a41a4016a200241e8026a41a4016a290200370200200241d0006a419c016a200241e8026a419c016a290200370200200241e4016a20022902fc03370200200921030b200220033602e0012002200136029c022002200136029802200241a0026a200241d0006a20042002280244200e20022802482000200d200228024c200c200a10f809024020022802a002220a4107460d00200241b8026a41106a200241a0026a41106a280200360200200241b8026a41086a200241a0026a41086a290300370300200220022903a0023703b80241002802d0a94e4104490d00200241dc026a412d360200200241023602d402200220043602e4022002200241b8026a3602d8022002200241e4026a3602d00241002802cca94e210141002802c8a94e210341002802d4a94e2100200241e8026a41106a42023703002002419c036a419ea0c700ad4280808080d0058437020020024190036a41f89fc700ad4280808080e0048437030020024188036a4202370300200241e8026a41086a411236020020024184036a200241d0026a360200200241ec9ac8003602f40220024281808080d0d0003702a4032002410036029803200241f496c8003602ec02200241043602e802200341b8c0cd00200041024622001b200241e8026a200141c0a4c00020001b2802101103000b20022802182100024020022802202201450d002001410c6c21032000210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b0240200228021c2201450d002001410c6c450d00200010390b200228022421000240200228022c2201450d0020014104742103200041086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200341706a22030d000b0b0240200228022841ffffffff0071450d00200010390b024020022802302201450d002002280234450d00200110390b02402002280240450d00200228023c10390b410110382201450d012001200a4107463a0000200241b0046a24002001ad428080808010840f0b200241f4026a4130360200200241e4006a41023602002002420237025420024198a0ce00360250200241043602ec02200241c4a3ce003602e8022002200241e8026a3602602002200241d0006a3602f002200241d0006a41a8a0ce001043000b1032000bb30301037f230041c0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241206a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024020010d00200241386a4200370300200241306a22034200370300200241286a420037030020024200370320200241206a41d8adc300410b10cb0120034184b0c300411310cb01200241086a200241206a412010ce03200228020c210120022802082104410410382203450d0120032001410020041b360000200241c0006a24002003ad4280808080c000840f0b2002411c6a4130360200200241346a41023602002002420237022420024198a0ce0036022020024104360214200241e4a3ce003602102002200241106a3602302002200241206a360218200241206a41a8a0ce001043000b1032000b8a0502057f017e23004180036b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024020014104490d0020014104460d00200041b8c0cd0020011b220428000021004100210302400240024020042d00040e03020001030b410121030c010b410221030b20014105470d00024002400240024020030e03010200010b2002200010de08200241106a20022802002203200228020810df08200241cc026a2802002104200241c4026a2802002105200241c0026a280200210620022802b802210102402002280204450d00200310390b2001450d0102402006450d00200110390b02402004450d00200510390b200241003602000c020b200010ed090b20022000109c070b410110382201450d01200242013702142002200136021002400240200228020022030d00200141003a000042808080801021070c010b200141013a0000200241013602182003200241086a280200200241106a10b90220023502184220862107200228021021012002280204450d00200310390b20024180036a240020072001ad840f0b2002410c6a4130360200200241246a41023602002002420237021420024198a0ce003602102002410436020420024184a4ce00360200200220023602202002200241106a360208200241106a41a8a0ce001043000b1032000bd40603027f017e017f230041a0016b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241d8006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024020014104490d002001417c714104460d0020014108470d002002200041b8c0cd0020011b2201280000200128000410a4070240024020022d00004101460d00410021030c010b200241c0006a200241196a290000370300200241386a200241116a290000370300200241306a200241096a29000037030020022002290001370328200241d8006a200241286a109d06200241c8006a200228025822012002280260109d07200229024c2104200228024821030240200228025c450d00200110390b20030d0041002802d0a94e450d002002412536024c2002200241286a36024841002802cca94e210141002802c8a94e210041002802d4a94e2105200241e8006a42013703002002418c016a41caeac200ad4280808080900584370200200241f8006a4201370300200241e0006a4122360200200241a8eac20036025c20024180016a41a8eac200ad4280808080a00484370300200241f4006a200241c8006a360200200241c089c30036026420024281808080b0ea0037029401200241003602880120024101360258200041b8c0cd00200541024622051b200241d8006a200141c0a4c00020051b2802101103000b410110382201450d012002420137025c200220013602580240024020030d00200141003a0000410121000c010b200141013a00002002410136026020032004422088a7200241d8006a10b90220022802602100200228025821012004a7450d00200310390b200241a0016a24002000ad4220862001ad840f0b2002410c6a4130360200200241ec006a41023602002002420237025c20024198a0ce00360258200241043602042002419ca4ce00360200200220023602682002200241d8006a360208200241d8006a41a8a0ce001043000b1032000bce0a02057f057e230041f0076b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc000413420024180056a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024020014104490d0020014104470d002002200041b8c0cd0020011b280000220110de0820024180056a20022802002203200228020810df080240024020022802a80722000d0002402002280204450d00200310390b410021000c010b200241d8026a20024180056a41a80210d40b1a200241bc076a2802002104200241b4076a2802002105200241b0076a280200210602402002280204450d00200310390b20024180056a200241d8026a41a80210d40b1a200241346a20024180056a41047241a40210d40b1a02402006450d00200010390b02402004450d00200510390b2002200110e00820024180056a20022802002201200228020810e1080240024020022802800522000d00410021000c010b20024188036a200241b4056a28020036020020024180036a200241ac056a290200370300200241f8026a200241a4056a290200370300200241f0026a2002419c056a290200370300200241e8026a20024194056a290200370300200241e0026a2002418c056a29020037030020022002290284053703d8020b02402002280204450d00200110390b024020000d00410021000c010b20024180056a200241346a41a40210d40b1a200241306a200241d8026a41306a2802002201360200200241286a200241d8026a41286a2903002207370300200241206a200241d8026a41206a2903002208370300200241186a200241d8026a41186a2903002209370300200241106a200241d8026a41106a290300220a370300200241086a200241d8026a41086a290300220b370300200241b0076a200b370300200241b8076a200a370300200241c0076a2009370300200241c8076a2008370300200241d0076a2007370300200241d8076a2001360200200220022903d8022207370300200220073703a8070b200220003602a407410110382201450d01200242013702dc02200220013602d8020240024020000d00200141003a000020022802d802210442808080801021070c010b200141013a0000200241013602e00220024180056a200241d8026a10e80220023502e002210720022802d8022104024020022802ac072201450d002001410c6c21032000210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b024020022802a8072201450d002001410c6c450d00200010390b200241b0076a28020021000240200241b8076a2802002201450d0020014104742103200041086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200341706a22030d000b0b0240200241b4076a28020041ffffffff0071450d00200010390b0240200241bc076a2802002201450d00200241c0076a280200450d00200110390b20074220862107200241cc076a280200450d00200241c8076a28020010390b200241f0076a240020072004ad840f0b200241e4026a413036020020024194056a4102360200200242023702840520024198a0ce0036028005200241043602dc02200241c0a4ce003602d8022002200241d8026a36029005200220024180056a3602e00220024180056a41a8a0ce001043000b1032000b9920020f7f017e23004190166b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc000413420024188166a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02400240024020010d00200241e80a6a10f50620022802e80a220420022802f00a220541a00b6c22066a210120022802ec0a210720042103024002402005450d0020042103024002400340200341880b6a2802004103460d02200241e80a6a200341a00b10d40b1a20024188086a200241e80a6a10a00820022802880822054103470d01200341a00b6a2103200641e0746a22060d000b200121030c020b200241e8026a20024188086a41047241d00210d40b1a200241e00a6a2802002108200241dc0a6a2802002109200241186a200241e8026a41d00210d40b1a200241e80a6a200241186a41d00210d40b1a024002400240024020050e03010200010b200241c4056a200241186a41c40210d40b1a200241c0056a200241b40d6a280200360200200220022902ac0d3703b8054102210a0c020b200241c4056a200241186a41c40210d40b1a200241c0056a200241b40d6a280200360200200220022902ac0d3703b8054100210a0c010b200241c4056a200241186a41c40210d40b1a200241c0056a200241b40d6a280200360200200220022902ac0d3703b8054101210a0b41dc0210382205450d042005200a360200200541046a200241c4056a41c40210d40b1a200520083602d802200520093602d402200541d0026a200241b8056a41086a220a280200360200200520022903b8053702c802200242818080801037020c2002200536020802400240200641a00b470d0041012108200121030c010b200341a00b6a2106200141e0746a210b200241e80a6a41c4026a210c20024188086a410472210d41012108024003402006210302400340200341880b6a2802004103460d03200241e80a6a200341a00b10d40b1a20024188086a200241e80a6a10a00820022802880822064103470d012001200341a00b6a2203470d000b200121030c030b200241e8026a200d41d00210d40b1a20022802e00a210920022802dc0a210e200241186a200241e8026a41d00210d40b1a200241e80a6a200241186a41d00210d40b1a0240024002400240024020060e03010200010b200241c4056a200241186a41c40210d40b1a200a200c41086a2802003602002002200c2902003703b8054102210f0c030b200241c4056a200241186a41c40210d40b1a200a200c41086a2802003602002002200c2902003703b8054100210f0c010b200241c4056a200241186a41c40210d40b1a200a200c41086a2802003602002002200c2902003703b8054101210f0b200921100b02402008200228020c470d00200241086a200810ba09200228020821050b200341a00b6a21062005200841dc026c6a2209200f360200200941046a200241c4056a41c40210d40b1a200a280200210f20022903b8052111200941d8026a2010360200200941d4026a200e360200200941d0026a200f360200200941c8026a20113702002002200841016a2208360210200b2003470d000b200121030c010b200341a00b6a21030b024020012003460d000340200310f6060240200341940b6a28020041ffffff3f71450d00200341900b6a28020010390b200341a00b6a22032001470d000b0b02402007450d00200741a00b6c450d00200410390b200228020c2109200228020821050c020b200341a00b6a21030b41002108024020012003460d000340200310f6060240200341940b6a28020041ffffff3f71450d00200341900b6a28020010390b200341a00b6a22032001470d000b0b41002802d8974e210502402007450d00200741a00b6c450d00200410390b410021090b200841dc026c41046a2203417f4c0d020240024020030d00410121010c010b200310382201450d020b200241003602f00a200220033602ec0a200220013602e80a200241e80a6a200810ac020240024020080d0020022802f00a210620022802e80a21040c010b200841dc026c21044100210103400240024002400240200520016a22032802000e03000102030b024020022802ec0a20022802f00a2206470d00200241e80a6a20064101107720022802f00a21060b20022802e80a20066a41003a00002002200641016a22063602f00a200341046a2802002107024020022802ec0a20066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20073600002002200641046a3602f00a200341086a200241e80a6a10b502024020022802ec0a20022802f00a22076b411f4b0d00200241e80a6a20074120107720022802f00a21070b20022802e80a20076a2206200341286a290000370000200641086a200341306a290000370000200641106a200341386a290000370000200641186a200341c0006a2900003700002002200741206a3602f00a200341c8006a200241e80a6a10b502200341e8006a200241e80a6a10b50220034188016a200241e80a6a10b502024020022802ec0a20022802f00a22076b413f4b0d00200241e80a6a200741c000107720022802f00a21070b20022802e80a20076a2206200341a8016a290000370000200641086a200341b0016a290000370000200641106a200341b8016a290000370000200641186a200341c0016a290000370000200641206a200341c8016a290000370000200641286a200341d0016a290000370000200641306a200341d8016a290000370000200641386a200341e0016a2900003700002002200741c0006a3602f00a200341e8016a200241e80a6a10b50220034188026a200241e80a6a10b502200341a8026a200241e80a6a10b502200341c8026a280200200341d0026a280200200241e80a6a10b902200341d4026a2802002107024020022802ec0a20022802f00a22066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20073600002002200641046a22063602f00a200341d8026a2802002103024020022802ec0a20066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20033600002002200641046a3602f00a0c020b024020022802ec0a20022802f00a2206470d00200241e80a6a20064101107720022802f00a21060b20022802e80a20066a41013a00002002200641016a22063602f00a200341046a2802002107024020022802ec0a20066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20073600002002200641046a3602f00a200341086a200241e80a6a10b502024020022802ec0a20022802f00a22076b411f4b0d00200241e80a6a20074120107720022802f00a21070b20022802e80a20076a2206200341286a290000370000200641086a200341306a290000370000200641106a200341386a290000370000200641186a200341c0006a2900003700002002200741206a3602f00a200341c8006a200241e80a6a10b502200341e8006a200241e80a6a10b50220034188016a200241e80a6a10b502024020022802ec0a20022802f00a22076b413f4b0d00200241e80a6a200741c000107720022802f00a21070b20022802e80a20076a2206200341a8016a290000370000200641086a200341b0016a290000370000200641106a200341b8016a290000370000200641186a200341c0016a290000370000200641206a200341c8016a290000370000200641286a200341d0016a290000370000200641306a200341d8016a290000370000200641386a200341e0016a2900003700002002200741c0006a3602f00a200341e8016a200241e80a6a10b50220034188026a200241e80a6a10b502200341a8026a200241e80a6a10b502200341c8026a280200200341d0026a280200200241e80a6a10b902200341d4026a2802002107024020022802ec0a20022802f00a22066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20073600002002200641046a22063602f00a200341d8026a2802002103024020022802ec0a20066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20033600002002200641046a3602f00a0c010b024020022802ec0a20022802f00a2206470d00200241e80a6a20064101107720022802f00a21060b20022802e80a20066a41023a00002002200641016a22063602f00a200341046a2802002107024020022802ec0a20066b41034b0d00200241e80a6a20064104107720022802f00a21060b20022802e80a20066a20073600002002200641046a3602f00a200341086a200241e80a6a10b502024020022802ec0a20022802f00a22076b411f4b0d00200241e80a6a20074120107720022802f00a21070b20022802e80a20076a2206200341286a290000370000200641086a200341306a290000370000200641106a200341386a290000370000200641186a200341c0006a2900003700002002200741206a3602f00a200341c8006a200241e80a6a10b502200341e8006a200241e80a6a10b50220034188016a200241e80a6a10b502024020022802ec0a20022802f00a22076b413f4b0d00200241e80a6a200741c000107720022802f00a21070b20022802e80a20076a2206200341a8016a290000370000200641086a200341b0016a290000370000200641106a200341b8016a290000370000200641186a200341c0016a290000370000200641206a200341c8016a290000370000200641286a200341d0016a290000370000200641306a200341d8016a290000370000200641386a200341e0016a2900003700002002200741c0006a3602f00a200341e8016a200241e80a6a10b50220034188026a200241e80a6a10b502200341a8026a200241e80a6a10b502200341c8026a280200200341d0026a280200200241e80a6a10b902200341d4026a2802002106024020022802ec0a20022802f00a22036b41034b0d00200241e80a6a20034104107720022802f00a21030b20022802e80a20036a20063600002002200341046a3602f00a0b2004200141dc026a2201470d000b20022802f00a210620022802e80a21042008450d00200841dc026c2101200521030340024002400240024020032802000e020001020b200341cc026a280200450d02200341c8026a28020010390c020b200341cc026a280200450d01200341c8026a28020010390c010b200341cc026a280200450d00200341c8026a28020010390b200341dc026a2103200141a47d6a22010d000b0b02402009450d00200941dc026c450d00200510390b20024190166a24002006ad4220862004ad840f0b20024194086a4130360200200241fc0a6a4102360200200242023702ec0a20024198a0ce003602e80a2002410436028c08200241e8a4ce0036028808200220024188086a3602f80a200220024188166a36029008200241e80a6a41a8a0ce001043000b1032000b1034000bbc0403027f017e017f230041e0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020014104470d00200241086a200041b8c0cd0020011b28000010fc07200241d0006a200241086a109a092002350258210420022802502100024020022802082203450d000240200228020c41ffffff3f71450d00200310390b0240200241186a28020041ffffff3f71450d00200241146a28020010390b0240200241246a28020041ffffff3f71450d00200241206a28020010390b2002412c6a28020021050240200241346a2802002203450d002003410c6c21012005210303400240200341046a28020041ffffffff0371450d00200328020010390b2003410c6a2103200141746a22010d000b0b200241306a2802002203450d002003410c6c450d00200510390b200241e0006a240020044220862000ad840f0b200241dc006a41303602002002411c6a41023602002002420237020c20024198a0ce003602082002410436025420024180a5ce003602502002200241d0006a3602182002200241086a360258200241086a41a8a0ce001043000bb20403037f017e017f230041c0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241186a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020014104470d00200241186a200041b8c0cd0020011b28000010ff07200241306a20022802182201200228022010f20802400240200228023022000d002002420037020c41002104200241002802d8974e2200360208410021030c010b20022902342105200220003602082002200537020c2005a741ffffffff007121042005422088a721030b0240200228021c450d00200110390b200241186a200241086a10c009200235022021052002280218210602402003450d0020034104742101200041086a2103034002402003280200450d002003417c6a28020010390b200341106a2103200141706a22010d000b0b02402004450d00200010390b200241c0006a240020054220862006ad840f0b2002413c6a41303602002002412c6a41023602002002420237021c20024198a0ce003602182002410436023420024194a5ce003602302002200241306a3602282002200241186a360238200241186a41a8a0ce001043000bc11f07037f017e077f017e0a7f017e047f230041306b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02400240024002400240024020014104490d0020014104470d00200241106a200041b8c0cd0020011b280000220410ac05200220022802102200200228021810e60320022902044200200228020022011b21054100210641002802d8974e210302402002280214450d00200010390b2001200320011b210702402005422088a722010d00410021080c020b200720014102746a210941002802d8974e210a41002106410021082007210b02400240024002400240024002400340200241106a200b280200220c200410b205200220022802102203200228021810f208200228020021012002290204210d02402002280214450d00200310390b024020080d0041b80110382208450d0b4100210e200841003b01b601200841003602000b200d420020011b210d200b41046a210b2001200a20011b210f20082110200e2111024002400340201041246a21032010412c6a2112201041046a211320102f01b6012214410274211541002101417f210002400340024020152001470d00201421000c020b201220016a2116200041016a21002003410c6a2103200141046a2101417f201641586a2802002216200c472016200c4b1b22164101460d000b0240201641016a0e020100010b200328020021002003200f360200200341086a2802002101200341046a2203280200210c2003200d3702002000450d0202402001450d0020014104742103200041086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200341706a22030d000b0b200c41ffffffff0071450d02200010390c020b02402011450d002011417f6a2111201020004102746a41b8016a28020021100c010b0b0240024002400240024002402014410a4b0d00201320004102746a210120002014490d012001200c360200201041306a21010c020b410021124104210102400240200041054f0d00200021030c010b4105210141052103024002402000417b6a0e020201000b200041796a210341012112410621010c010b41002103410121120b41b80110382200450d11200041003b01b60120004100360200200020102f01b60122112001417f736a22163b01b6012016410c4f0d062011200141016a22156b2016470d08201041306a22172001410c6c6a2211290204211820112802002114201320014102746a2802002111200041046a201320154102746a201641027410d40b1a200041306a20172015410c6c6a2016410c6c10d40b1a201020013b01b6012000201020121b220141046a221320034102746a211602400240200341016a221220012f01b60122154d0d002016200c360200200141306a210c0c010b201320124102746a2016201520036b221341027410d50b1a2016200c360200200141306a220c2012410c6c6a200c2003410c6c6a2013410c6c10d50b1a0b200c2003410c6c6a2203200d3702042003200f3602002001201541016a3b01b601201028020022010d02410021130c030b2013200041016a22034102746a2001201420006b221641027410d50b1a2001200c360200201041306a22012003410c6c6a20012000410c6c6a2016410c6c10d50b1a0b20012000410c6c6a2201200d3702042001200f3602002010201441016a3b01b601200641016a21060c030b410021132018210d2011210f20002117034020102f01b4012116200122122f01b6012210410b490d024100211541042101024020164105490d0020162101024002402016417b6a0e020201000b201641796a211641012115410621010c010b4100211641012115410521010b41e80110382200450d0f200041003b01b60120004100360200200020122f01b60122112001417f736a22033b01b6012003410c4f0d072011200141016a220c6b2003470d08201241306a22192001410c6c6a221129020421182011280200211a201241046a221b20014102746a2802002111200041046a201b200c410274221c6a200341027410d40b1a200041306a2019200c410c6c6a2003410c6c10d40b1a201220013b01b60120002f01b601220341016a210c2003410c4f0d09201020016b2201200c470d0a201341016a2113200041b8016a2012201c6a41b8016a200141027410d40b1a4100210102400340200020014102746a41b8016a280200220c20013b01b401200c2000360200200120034f0d01200120012003496a220120034d0d000b0b2000201220151b220c41046a2210201641027422196a211502400240201641016a2201200c2f01b60122034d0d002015200f360200200c41306a21100c010b201020014102746a2015200320166b221b41027410d50b1a2015200f360200200c41306a22102001410c6c6a20102016410c6c6a201b410c6c10d50b1a0b200341016a211520102016410c6c6a2210200d37020420102014360200200c41b8016a21100240201641026a220f200341026a22144f0d002010200f4102746a201020014102746a200320166b41027410d50b1a0b201020014102746a2017360200200c20153b01b6010240200120144f0d00200c20196a41bc016a2101034020012802002203201641016a22163b01b4012003200c360200200141046a210120152016470d000b0b2018422088a721192018a7211b201a21142018210d201221102011210f20002117201228020022010d000b0b41e80110382201450d0d200120083602b801200141003b01b60120014100360200200841003b01b40120082001360200200e2013470d0920012f01b6012203410b4f0d0a200e41016a210e2001200341016a220c3b01b60120012003410c6c6a221641346a2018370200201641306a2014360200200120034102746a41046a2011360200200141b8016a200c4102746a20003602002000200c3b01b4012000200136020020012108200641016a21060c010b201241046a2103201041016a210002400240201020164b0d00200320164102746a200f36020020122016410c6c6a220141346a200d370200200141306a2014360200201241b8016a2103201041026a210c201641016a21010c010b2003201641016a2201410274220c6a2003201641027422156a2203201020166b2211410274221310d50b1a2003200f36020020122016410c6c6a2203413c6a200341306a22162011410c6c10d50b1a200341346a200d370200201620143602002015201241b8016a22036a41086a2003200c6a201310d50b1a201041026a210c0b2003200141027422166a2017360200201220003b01b60102402001200c4f0d00201220166a41b8016a210303402003280200220020013b01b40120002012360200200341046a2103200c200141016a2201470d000b0b200641016a21060b200b2009460d0a0c010b0b2016410b41a485c700104b000b41b485c700412841dc85c7001035000b2003410b41a485c700104b000b41b485c700412841dc85c7001035000b200c410c41b486c700104b000b41b485c700412841dc85c7001035000b41a084c700413041d084c7001035000b41a583c700412041e084c7001035000b2002410c6a4130360200200241246a41023602002002420237021420024198a0ce0036021020024104360204200241a8a5ce00360200200220023602202002200241106a360208200241106a41a8a0ce001043000b0240200542ffffffff0383500d00200710390b20064104744104722201417f4c0d01200110382203450d002002410036020820022001360204200220033602002002200610ac020240024020080d004100210141002103410021000c010b20082103200e2100200821010240034020032f01b601210c2000450d012000417f6a21002003200c4102746a41b8016a280200210320012802b80121010c000b0b4100211a2001211b41002119200621000b200241246a200c360200200241106a41106a200336020020024200370318200220013602142002410036021002402000450d00034020022000417f6a360228200241106a410020011b22162802002100024002402016280208220c201628020422032f01b6014f0d00200321010c010b03400240200328020022010d00410021010c020b200041016a210020032f01b401210c20012103200c20012f01b6014f0d000b0b024002402000450d00200c41027420016a41bc016a280200210302402000417f6a2200450d00034020032802b80121032000417f6a22000d000b0b410021000c010b200c41016a2100200121030b2016200336020420164100360200201620003602082001200c410c6c6a220341306a21002001200c4102746a41046a280200210c02402002280204200228020822016b41034b0d002002200141041077200228020821010b200228020020016a200c3600002002200141046a360208200028020021012002200341386a280200220310ac0202402003450d00200120034104746a210c03402001280200210002402002280204200228020822036b41034b0d002002200341041077200228020821030b200228020020036a20003600002002200341046a360208200141046a2802002001410c6a280200200210b902200141106a2201200c470d000b0b20022802282200450d01200228021421010c000b0b20022802002115200235020821182008450d030240200e450d00034020082802b8012108200e417f6a220e0d000b0b2006450d024100210c03400240024002400240200c20082f01b601490d0041002103034041002101024020082802002216450d00200341016a210c20082f01b4012100201621010b024041e80141b80120031b450d00200810390b024020010d00410021080c050b200c210320012108200020012f01b6014f0d000b20012000410c6c6a41306a21160240200c0d00200121080c020b200041027420016a41bc016a28020021080240200c417f6a2203450d00034020082802b80121082003417f6a22030d000b0b4100210c0c020b2008200c410c6c6a41306a2116200c2100200821010b200041016a210c0b20012000410c6c6a41346a290200220da7211b200d422088a721192016280200211a0b201a450d0402402019450d0020194104742103201a41086a2101034002402001280200450d002001417c6a28020010390b200141106a2101200341706a22030d000b0b2006417f6a21060240201b41ffffffff0071450d00201a10390b20060d000c030b0b1032000b1034000b41002101034020082802002103024041e80141b80120011b450d00200810390b2001417f6a21012003210820030d000b0b200241306a240020184220862015ad840bcd0f02087f017e230041e0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241286a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02402001450d002002200041b8c0cd0020011b22032d00003a002c2002410136022820014101460d00200220032d00013a002d2002410236022820014102460d00200220032d00023a002e2002410336022820014103460d00200220032d00033a002f2002410436022820014104460d00200241306a20032d00043a00002002410536022820014105460d00200241316a20032d00053a00002002410636022820014106460d00200241326a20032d00063a00002002410736022820014107460d00200241336a20032d00073a00002002410836022820014108460d00200241346a20032d00083a00002002410936022820014109460d00200241356a20032d00093a00002002410a3602282001410a460d00200241366a20032d000a3a00002002410b3602282001410b460d00200241376a20032d000b3a00002002410c3602282001410c460d00200241386a20032d000c3a00002002410d3602282001410d460d00200241396a20032d000d3a00002002410e3602282001410e460d002002413a6a20032d000e3a00002002410f3602282001410f460d002002413b6a20032d000f3a00002002411036022820014110460d002002413c6a20032d00103a00002002411136022820014111460d002002413d6a20032d00113a00002002411236022820014112460d002002413e6a20032d00123a00002002411336022820014113460d002002413f6a20032d00133a00002002411436022820014114460d00200241c0006a20032d00143a00002002411536022820014115460d00200241c1006a20032d00153a00002002411636022820014116460d00200241c2006a20032d00163a00002002411736022820014117460d00200241c3006a20032d00173a00002002411836022820014118460d00200241c4006a20032d00183a00002002411936022820014119460d00200241c5006a20032d00193a00002002411a3602282001411a460d00200241c6006a20032d001a3a00002002411b3602282001411b460d00200241c7006a20032d001b3a00002002411c3602282001411c460d00200241c8006a20032d001c3a00002002411d3602282001411d460d00200241c9006a20032d001d3a00002002411e3602282001411e460d00200241ca006a20032d001e3a00002002411f3602282001411f460d00200241cb006a20032d001f3a0000200241246a41026a2203200241356a2d00003a0000200241206a41026a22002002413c6a2d00003a0000200220022f012c3b0150200220022d002e3a00522002200241336a2f00003b012420022002413a6a2f01003b0120200241366a28010021042002413d6a2800002105200241c4006a280200210620024120360228200241286a41206a2802002107200228002f21082002411c6a41026a2209200241c3006a2d00003a00002002200241c1006a2f00003b011c20014120470d00200241186a41026a20022d00523a0000200241146a41026a20032d00003a0000200241106a41026a20002d00003a00002002410c6a41026a20092d00003a0000200220022f01503b0118200220022f01243b0114200220022f01203b0110200220022f011c3b010c200241d0006a41ecc0cc00410510cb01200241286a41bc9fc300410a10cb010240412010382201450d00200120022f01183b000020012008360003200120022f01143b00072001200436000a200120022f01103b000e20012005360011200120022f010c3b0015200141026a200241186a41026a2d00003a0000200141096a200241146a41026a2d00003a0000200141106a2200200241106a41026a2d00003a0000200141176a2002410c6a41026a2d00003a00002001200736001c20012006360018412010382203450d0020032001290000370000200341186a2209200141186a290000370000200341106a2000290000370000200341086a2200200141086a2900003700002001103941c00010382201450d002001200229002837001020012002290050370000200141086a200241d0006a41086a290000370000200141186a200241286a41086a29000037000020012003290000370020200141286a2000290000370000200141306a200341106a290000370000200141386a200929000037000020031039200241286a200141c000109d07200229022c210a2002280228210320011039410110382201450d002002420137022c200220013602280240024020030d00200141003a0000410121000c010b200141013a0000200241013602302003200a422088a7200241286a10b9022002280230210020022802282101200aa7450d00200310390b200241e0006a24002000ad4220862001ad840f0b1032000b200241dc006a41303602002002413c6a41023602002002420237022c20024198a0ce0036022820024104360254200241d0a5ce003602502002200241d0006a3602382002200241286a360258200241286a41a8a0ce001043000b870301027f230041306b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020010d002002410036021020024201370308200241086a410010ac020240200228020c200228021022036b41074b0d00200241086a200341081077200228021021030b2002280208220120036a4200370000200241306a2400200341086aad4220862001ad840f0b2002412c6a41303602002002411c6a41023602002002420237020c20024198a0ce0036020820024104360224200241f0a5ce003602202002200241206a3602182002200241086a360228200241086a41a8a0ce001043000b830301027f230041306b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024020014108470d00410110382203450d01200341013a0000200242818080801037020c20022003360208200241086a41014101107720022802082203200228021022016a41033a0000200241306a2400200141016aad4220862003ad840f0b2002412c6a41303602002002411c6a41023602002002420237020c20024198a0ce003602082002410436022420024188a6ce003602202002200241206a3602182002200241086a360228200241086a41a8a0ce001043000b1032000ba90502057f017e230041c0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037022c2002200136023c2002200041b8c0cd0020011b3602382002200241386a360228200241086a200241286a108c02024020022802080d00200228023c2201200228020c2203490d00024002402003417f4c0d000240024020030d00410121040c010b200310382204450d0220044100200310d60b1a200228023c21010b0240024020012003490d00200420022802382200200310d40b21052002200120036b220136023c2002200020036a2200360238024020014108490d002002200041086a3602382002200141786a220636023c20064108490d002002200141706a36023c2002200041106a360238200241106a200241286a10cf09200228021022000d020b2003450d040b200410390c030b2002280214210102402002280228280204450d0002402003450d00200510390b200141ffffff3f71450d03200010390c030b2005450d020240200141ffffff3f71450d00200010390b02402003450d00200510390b410410870a2107200241c0006a240020070f0b1034000b1032000b200241346a4130360200200241246a41023602002002420237021420024198a0ce003602102002410436022c200241a0a6ce003602282002200241286a3602202002200241106a360230200241106a41a8a0ce001043000bcd0502057f017e230041c0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e20024280808080802037022c200041b8c0cd0020011b41016a21002002200241386a360228417f210302400240024002400340200120036a2204417f460d012002200436023c20022000360238200041016a21002003417f6a2203415f470d000b200241086a200241286a108c0220022802080d00200228023c2200200228020c2203490d002003417f4c0d020240024020030d00410121010c010b200310382201450d0420014100200310d60b1a200228023c21000b024020002003490d00200120022802382204200310d40b21052002200020036b220036023c2002200420036a2204360238024020004108490d002002200441086a3602382002200041786a220636023c20064108490d002002200041706a36023c2002200441106a360238200241106a200241286a10cf0920022802102204450d00200228021421002002280228280204450d0302402003450d00200510390b200041ffffff3f71450d02200410390c020b2003450d010b200110390b200241346a4130360200200241246a41023602002002420237021420024198a0ce003602102002410436022c200241b4a6ce003602282002200241286a3602202002200241106a360230200241106a41a8a0ce001043000b0240200041ffffff3f71450d00200410390b02402003450d00200510390b410410870a2107200241c0006a240020070f0b1034000b1032000bae0603057f017e017f230041e0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241c8006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02400240024020010d002002411436021c200241d2c2cd00360218200241206a41d2c2cd00411410e4010240024020022802202204450d0020022802242105024002400240200241286a2802002203450d0020022003417f6a3602342002200441016a36023020042d000021032002200241306a10c10120022802000d00200241c8006a200241306a200228020410850220022802482206450d00200229024c2107200341ff01714101460d012007a72203450d00200341286c450d00200610390b2002420037020c20024100280284ee4d3602082002410d36023c2002200241186a3602382002200241086a36024441012108200241dc006a41013602002002420137024c200241949fc5003602482002200241386a360258200241c4006a41b4dfc400200241c8006a103b1a2002280208200228021010d1010240200228020c450d00200228020810390b0c010b2007422088a721032007a72101410021080b02402005450d00200410390b2008450d010b4100210341002802e8c8482106410021010b200341286c4104722204417f4c0d01200410382205450d02200241003602502002200436024c20022005360248200241c8006a200310ac0220062003200241c8006a10a802200235025021072002280248210302402001450d00200141286c450d00200610390b200241e0006a240020074220862003ad840f0b200241146a4130360200200241dc006a41023602002002420237024c20024198a0ce003602482002410436020c200241d4a6ce003602082002200241086a3602582002200241c8006a360210200241c8006a41a8a0ce001043000b1034000b1032000bce0b04027f017e017f027e230041900b6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241880b6a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e200242808080808020370214200220013602fc0a2002200041b8c0cd0020011b3602f80a2002200241f80a6a360210200241a0026a200241106a10fa04024020022903a80222044202510d00200241086a200241106a108c0220022802080d0020022802fc0a2201200228020c2203490d0002400240024002402003417f4c0d000240024020030d00410121000c010b200310382200450d0220004100200310d60b1a20022802fc0a21010b0240200120034f0d00200010390c050b200020022802f80a2205200310d40b21002002200120036b22013602fc0a2002200520036a3602f80a20022903a0022106200241206a200241b0026a41f00110d40b1a2001450d02420221042003450d03200010390c030b1034000b1032000b200241a0026a200241206a41f00110d40b1a0b20044202510d00200241206a200241a0026a41f00110d40b1a200220033602fc0a200220003602f80a200241a0026a200241f80a6a1089050240024020022802a40222010d00410021010c010b200241186a200241b0026a280200360200200220022903a80237031020022802a00221050b02402003450d00200010390b02402001450d0020024190026a41086a200241106a41086a2203280200220036020020022002290310220737039002200241d4036a2000360200200241cc036a2007370200200241e8036a200241206a41f00110d40b1a200241e0036a2004370300200241d8036a2006370300200241c8036a2001360200200241c4036a2005360200200241c0036a4102360200200241093602b80320024202370388032002200241a0026a360210200241f80a6a200241106a10d4062003200241f80a6a41086a280200360200200220022903f80a370310200241106a10dc01210302402002290388034202510d0020022d00a00241ff01714102470d0020022802a802450d0020022802a40210390b200241b8036a10e20941002802d0a94e2100024020030d0020004103490d0141002802cca94e210341002802c8a94e210041002802d4a94e2105200241bc026a41b8c0cd00360200200241b0026a4201370300200241d4026a41e3d4cd00ad4280808080b00c84370200200241c8026a41c7d4cd00ad4280808080c00384370300200241c0026a4200370300200241a8026a410c360200200241a4edcd003602ac0220024281808080e0153702dc02200241003602d002200241bbd4cd003602a402200241033602a002200041b8c0cd00200541024622051b200241a0026a200341c0a4c00020051b2802101103000c010b2000450d00200241323602142002200241880b6a36021041002802cca94e210341002802c8a94e210041002802d4a94e2105200241b0026a4201370300200241d4026a41e3d4cd00ad4280808080b00c84370200200241c8026a41c7d4cd00ad4280808080c00384370300200241c0026a4201370300200241a8026a410c360200200241bc026a200241106a360200200241acedcd003602ac0220024281808080a0163702dc02200241003602d002200241bbd4cd003602a402200241013602a002200041b8c0cd00200541024622051b200241a0026a200341c0a4c00020051b2802101103000b200141004710860a2104200241900b6a240020040f0b2002411c6a4130360200200241346a41023602002002420237022420024198a0ce0036022020024104360214200241f0a6ce003602102002200241106a3602302002200241880b6a360218200241206a41a8a0ce001043000bfa28060e7f017e087f037e047f037e230041e0046b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc000413420024188026a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020014108490d00200241003602880220014108460d0020024101360288022002200041b8c0cd0020011b22032d00083a008c0220014109460d002002410236028802200220032d00093a008d022001410a460d002002410336028802200220032d000a3a008e022001410b460d002002410436028802200220032d000b3a008f022001410c460d0020024190026a20032d000c3a000020024105360288022001410d460d0020024191026a20032d000d3a000020024106360288022001410e460d0020024192026a20032d000e3a000020024107360288022001410f460d0020024193026a20032d000f3a0000200241083602880220014110460d0020024194026a20032d00103a0000200241093602880220014111460d0020024195026a20032d00113a00002002410a3602880220014112460d0020024196026a20032d00123a00002002410b3602880220014113460d0020024197026a20032d00133a00002002410c3602880220014114460d0020024198026a20032d00143a00002002410d3602880220014115460d0020024199026a20032d00153a00002002410e3602880220014116460d002002419a026a20032d00163a00002002410f3602880220014117460d002002419b026a20032d00173a0000200241103602880220014118460d002002419c026a20032d00183a0000200241113602880220014119460d002002419d026a20032d00193a000020024112360288022001411a460d002002419e026a20032d001a3a000020024113360288022001411b460d002002419f026a20032d001b3a000020024114360288022001411c460d00200241a0026a20032d001c3a000020024115360288022001411d460d00200241a1026a20032d001d3a000020024116360288022001411e460d00200241a2026a20032d001e3a000020024117360288022001411f460d00200241a3026a20032d001f3a0000200241183602880220014120460d00200241a4026a20032d00203a0000200241193602880220014121460d00200241a5026a20032d00213a00002002411a3602880220014122460d00200241a6026a20032d00223a00002002411b3602880220014123460d00200241a7026a20032d00233a00002002411c3602880220014124460d00200241a8026a20032d00243a00002002411d3602880220014125460d00200241a9026a20032d00253a00002002411e3602880220014126460d00200241aa026a20032d00263a00002002411f3602880220014127460d00200241ab026a20032d00273a0000200241b0016a41026a220320024195026a2d00003a0000200241b0036a41026a22002002419c026a2d00003a0000200220022f018c023b0130200220022d008e023a0032200220024193026a2f00003b01b00120022002419a026a2f01003b01b00320024196026a28010021042002419d026a2800002105200241a4026a2802002106200241203602880220024188026a41206a2802002107200228008f022108200241b0046a41026a2209200241a3026a2d00003a00002002200241a1026a2f00003b01b00420014128470d0020024190046a41026a220120032d00003a000020024180046a41026a220320002d00003a0000200241f0036a41026a220020092d00003a0000200220022d00323a008a02200220022f01303b018802200220022f01b0013b019004200220022f01b0033b018004200220022f01b0043b01f0032002411c6a41026a220920022d008a023a0000200220022f0188023b011c200241186a41026a220a20012d00003a0000200220022f0190043b0118200241146a41026a220120032d00003a0000200220022f0180043b0114200241106a41026a220320002d00003a0000200220022f01f0033b0110200220022f011c3b012c200220092d00003a002e200241286a41026a200a2d00003a0000200220022f01183b0128200241246a41026a20012d00003a0000200220022f01143b0124200241206a41026a20032d00003a0000200220022f01103b012020024188026a41186a220b420037030020024188026a41106a220c420037030020024188026a41086a220d42003703002002420037038802200241306a41b69fc500410710cb01200d200241306a41086a22012900003703002002200229003037038802200241306a41d091c600410c10cb01200b2001290000370300200c2002290030370300200241086a20024188026a412010ce03200228020c210e2002280208210f200b4200370300200c4200370300200d42003703002002420037038802200241306a41b69fc500410710cb01200d20012900003703002002200229003037038802200241306a41f4c9c800410a10cb01200b2001290000370300200c2002290030370300200241306a20024188026a10bf0220022902344200200228023022011b2210a7211120014100280284ee4d20011b211202400240024002402010422088a722134105742214450d00200241d4046a211520024188026a41206a211641002103034020024190046a41186a201220036a220141186a220029000037030020024190046a41106a200141106a220929000037030020024190046a41086a200141086a220a2900003703002002200129000037039004200b2000290000370300200c2009290000370300200d200a2900003703002002200129000037038802200241b0046a20024188026a10fb0620022802d00422000d022014200341206a2203470d000b0b4100210141002802e8c84821030240201141ffffff3f71450d00201210390b410021130c010b201620022903b004370300201641186a200241b0046a41186a290300370300201641106a200241b0046a41106a290300370300201641086a200241b0046a41086a29030037030020024188026a41186a220920024190046a41186a29030037030020024188026a41106a220a20024190046a41106a29030037030020024188026a41086a220b20024190046a41086a29030037030020024180046a41086a220c201541086a2802003602002002200229039004370388022002201529020037038004200241306a41386a220d20024188026a41386a290300370300200241306a41306a221420024188026a41306a290300370300200241306a41286a221620024188026a41286a290300370300200241306a41206a221520024188026a41206a290300370300200241306a41186a22172009290300370300200241306a41106a2209200a290300370300200241306a41086a220a200b2903003703002002200229038802370330200241b0036a41386a220b200d290300370300200241b0036a41306a220d2014290300370300200241b0036a41286a22142016290300370300200241b0036a41206a22162015290300370300200241b0036a41186a22152017290300370300200241b0036a41106a22172009290300370300200241b0036a41086a2209200a290300370300200220022903303703b003200241a0036a41086a220a200c28020036020020022002290380043703a003200241b0016a41386a220c200b290300370300200241b0016a41306a220b200d290300370300200241b0016a41286a220d2014290300370300200241b0016a41206a22142016290300370300200241b0016a41186a22182015290300370300200241b0016a41106a22152017290300370300200241b0016a41086a22172009290300370300200220022903b0033703b001200241f0036a41086a2209200a280200360200200220022903a0033703f00341d00010382216450d01201620022903b00137030020162000360240201620022903f003370244201641386a200c290300370300201641306a200b290300370300201641286a200d290300370300201641206a2014290300370300201641186a2018290300370300201641106a2015290300370300201641086a2017290300370300201641cc006a2009280200360200200242818080801037029403200220163602900302400240201341057441606a2003470d00410121130c010b200141206a2100201220134105746a221441606a2118200241d4046a211720024188026a41206a2115410121130340200021010240034020024190046a41186a220a200141186a290000221037030020024190046a41106a220b200141106a290000221937030020024190046a41086a220c200141086a290000221a37030020022001290000221b3703900420024188026a41186a2203201037030020024188026a41106a2200201937030020024188026a41086a2209201a3703002002201b37038802200241b0046a20024188026a10fb0620022802d004220d0d012014200141206a2201470d000c030b0b201520022903b004370300201541186a200241b0046a41186a290300370300201541106a200241b0046a41106a290300370300201541086a200241b0046a41086a2903003703002003200a2903003703002000200b2903003703002009200c29030037030020024180046a41086a220a201741086a2802003602002002200229039004370388022002201729020037038004200241306a41386a220b20024188026a41386a290300370300200241306a41306a220c20024188026a41306a290300370300200241306a41286a221c20024188026a41286a290300370300200241306a41206a221d2015290300370300200241306a41186a221e2003290300370300200241306a41106a22032000290300370300200241306a41086a220020092903003703002002200229038802370330200241b0036a41386a2209200b290300370300200241b0036a41306a220b200c290300370300200241b0036a41286a220c201c290300370300200241b0036a41206a221c201d290300370300200241b0036a41186a221d201e290300370300200241b0036a41106a221e2003290300370300200241b0036a41086a22032000290300370300200220022903303703b003200241a0036a41086a2200200a28020036020020022002290380043703a003200241b0016a41386a220a2009290300370300200241b0016a41306a2209200b290300370300200241b0016a41286a220b200c290300370300200241b0016a41206a220c201c290300370300200241b0016a41186a221c201d290300370300200241b0016a41106a221d201e290300370300200241b0016a41086a221e2003290300370300200220022903b0033703b001200241f0036a41086a221f2000280200360200200220022903a0033703f00302402013200228029403470d0020024190036a2013410110930320022802900321160b200141206a21002016201341d0006c6a220320022903b001370300201d2903002110201c2903002119200c290300211a200b290300211b20092903002120200a2903002121201e29030021222003200d360240200341086a2022370300200320022903f003370244200341cc006a201f280200360200200341386a2021370300200341306a2020370300200341286a201b370300200341206a201a370300200341186a2019370300200341106a20103703002002201341016a22133602980320182001470d000b0b0240201141ffffff3f71450d00201210390b200228029403210120022802900321030b200220133602b804200220013602b404200220033602b00420024188026a200241b0046a108307024002402002280288024101460d00200241b0036a41206a220320024188026a41286a280200360200200241b0036a41186a220020024188026a41206a290300370300200241b0036a41106a220920024188026a41186a290300370300200241b0036a41086a220a20024188026a41106a220b290300370300200220024188026a41086a2903003703b003200241b4026a2802002101200241b0016a200241b8026a41d80010d40b1a2001450d00200241306a41206a2003280200360200200241306a41186a2000290300370300200241306a41106a2009290300370300200241306a41086a200a290300370300200220022903b003370330200241306a41286a200241b0016a41d80010d40b1a200241d4006a200136020020024191026a200241286a41026a2d00003a0000200b200241246a41026a2d00003a0000200220022d002e3a008a02200220022f012c3b0188022002200836008b02200220022f01283b008f022002200436019202200220022f01243b01960220022005360099022002419f026a200241206a41026a2d00003a0000200220022f01203b009d02200220073602a402200220063602a002200241b0016a200241306a41e7e485f30620024188026a10860720022902b401211020022802b0012109200241306a10ff060c010b410021090b41002100024002402009450d0020024190026a201037030020022013360298022002200936028c022002200e4100200f1b36028802200241306a20024188026a1096082010a7210a02402010422088a72201450d002001410c6c21032009210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b0240200a450d00200a410c6c450d00200910390b20022802302201450d00200241386a280200210320022802342109200121000c010b0b410110382201450d002002420137028c0220022001360288020240024020000d00200141003a0000410121030c010b200141013a000020024101360290022000200320024188026a10b902200228029002210320022802880221012009450d00200010390b200241e0046a24002003ad4220862001ad840f0b1032000b2002413c6a41303602002002419c026a41023602002002420237028c0220024198a0ce003602880220024104360234200241a8a7ce003602302002200241306a36029802200220024188026a36023820024188026a41a8a0ce001043000bb70903057f027e027f230041d0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020010d00200241c8006a22034200370300200241c0006a22014200370300200241306a41086a2204420037030020024200370330200241086a41cde5c000410410cb012004200241086a41086a220529000037030020022002290008370330200241086a41a8d3c700410b10cb012003200529000037030020012002290008370300200241086a200241306a10f30820022802082106200229020c210720034200370300200142003703002004420037030020024200370330200241086a41cde5c000410410cb012004200529000037030020022002290008370330200241086a41b8d4c700410a10cb012003200529000037030020012002290008370300200241086a200241306a10f0070240024020022d00084101460d00200342003703002001420037030020044200370300200242003703300c010b2003200241216a2900003703002001200241196a2900003703002004200241116a290000370300200220022900093703300b200742208821082002410036021020024201370308200241086a41004108107720022802082203200228021022016a42f02e3700002002200141086a22013602100240200228020c20016b41074b0d00200241086a20014108107720022802082103200228021021010b2008a7210441002802e8c8482105200320016a42d8043700002002200141086a22013602100240200228020c220920016b41074b0d00200241086a20014108107720022802082103200228020c2109200228021021010b2004410020061b21042006200520061b2105200320016a42013700002002200141086a22013602100240200920016b41074b0d00200241086a20014108107720022802082103200228021021010b2007a7210a200320016a42043700002002200141086a360210200241086a200410ac0220052004200241086a10a8020240200228020c2209200228021022016b411f4b0d00200241086a200141201077200228020c2109200228021021010b200a410020061b21062002280208220420016a22032002290330370000200341086a200241306a41086a290300370000200341106a200241306a41106a290300370000200341186a200241306a41186a2903003700002002200141206a2203360210024020092003470d00200241086a20094101107720022802082104200228021021030b200420036a41023a000002402006450d00200641286c450d00200510390b200241d0006a2400200341016aad4220862004ad840f0b2002413c6a41303602002002411c6a41023602002002420237020c20024198a0ce0036020820024104360234200241cca7ce003602302002200241306a3602182002200241086a360238200241086a41a8a0ce001043000bd90402037f027e230041e0006b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241c0006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024002400240024020010d00200241d8006a22014200370300200241d0006a22034200370300200241c8006a2204420037030020024200370340200241c0006a41cde5c000410410cb0120034180d3c700410a10cb01200241206a200241c0006a10ee04200241106a2002290328420020022802201b420042d804420010d30b200229031850450d012002290310210520014200370300200342003703002004420037030020024200370340200241c0006a41cde5c000410410cb01200341f4d3c700410b10cb012002200241c0006a10ee0420052002290308420020022802001b7c22062005540d02410810382203450d0320032006370000200241e0006a24002003ad42808080808001840f0b2002413c6a4130360200200241d4006a41023602002002420237024420024198a0ce0036024020024104360234200241e4a7ce003602302002200241306a3602502002200241c0006a360238200241c0006a41a8a0ce001043000b41d0bbc70041fa0041ccbcc700105b000b41d0bbc70041fa0041dcbcc700105b000b1032000bad0d05047f017e027f027e027f23004180026b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241c8006a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024002400240024020010d00200241e0016a41186a22044200370300200241e0016a41106a22034200370300200241e0016a41086a22054200370300200242003703e001200241c8006a41cde5c000410410cb012005200241c8006a41086a2201290000370300200220022900483703e001200241c8006a4180d3c700410a10cb012004200129000037030020032002290048370300200241386a200241e0016a10ee042002290340210620022802382107200241c8006a41186a4200370300200241c8006a41106a220842003703002001420037030020024200370348200241c8006a41cde5c000410410cb0120084180d3c700410a10cb01200241286a200241c8006a10ee04200241186a2002290330420020022802281b420042d804420010d30b200229032050450d0120022903182109200442003703002003420037030020054200370300200242003703e001200241c8006a41cde5c000410410cb0120052001290000370300200220022900483703e001200241c8006a41f4d3c700410b10cb01200341086a200129000037000020032002290048370000200241086a200241e0016a10ee0420092002290310420020022802081b7c220a2009540d02200241e0016a41186a22084200370300200241e0016a41106a220b4200370300200241e0016a41086a22014200370300200242003703e001200241c8006a41cde5c000410410cb012001200241c8006a41086a2205290000370300200220022900483703e001200241c8006a41a8d3c700410b10cb01200341086a220c200529000037000020032002290048370000200241c8006a200241e0016a10f30820022802482104200229024c210920084200370300200b420037030020014200370300200242003703e001200241c8006a41cde5c000410410cb0120012005290000370300200220022900483703e001200241c8006a41b8d4c700410a10cb01200c200529000037000020032002290048370000200241c8006a200241e0016a10f0070240024020022d00484101460d00200241a8016a41186a4200370300200241a8016a41106a4200370300200241a8016a41086a4200370300200242003703a8010c010b200241a8016a41186a200241e1006a290000370300200241a8016a41106a200241d9006a290000370300200241a8016a41086a200241d1006a290000370300200220022900493703a8010b200241e0016a41186a4200370300200241e0016a41106a4200370300200241e0016a41086a22054200370300200242003703e001200241c8006a41cde5c000410410cb012005200241c8006a41086a2201290000370300200220022900483703e001200241c8006a41acd9c700410b10cb01200341086a200129000037000020032002290048370000200241c8006a200241e0016a10f108200241d0016a41086a22032001290300370300200220022903483703d001200220022800593602c8012002200241dc006a2800003600cb0120022d005822014103460d03200241c8006a41286a20013a0000200241f1006a20022802c801360000200241f4006a20022800cb01360000200241e8006a2003290300370300200241fc006a2009420020041b22093702002002418c016a200241a8016a41086a29030037020020024194016a200241a8016a41106a2903003702002002419c016a200241a8016a41186a290300370200200220022903d0013703602002200441002802e8c84820041b2201360278200242d8043703582002200a37035020022006420020071b370348200220022903a80137028401200241c8006a10850a210602402009a72203450d00200341286c450d00200110390b20024180026a240020060f0b200241ec016a4130360200200241dc006a41023602002002420237024c20024198a0ce00360248200241043602e40120024180a8ce003602e0012002200241e0016a3602582002200241c8006a3602e801200241c8006a41a8a0ce001043000b41d0bbc70041fa0041ccbcc700105b000b41d0bbc70041fa0041dcbcc700105b000b4190bfc70041c80041e8bfc700105b000bd30e05047f027e037f017e037f23004190026b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241386a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024002400240024020010d0020024188026a2201420037030020024180026a22034200370300200241f0016a41086a22044200370300200242003703f001200241386a41cde5c000410410cb012004200241386a41086a2205290000370300200220022900383703f001200241386a4180d3c700410a10cb012001200529000037030020032002290038370300200241286a200241f0016a10ee042002290330420020022802281b220642017c22072006540d01200241186a2007420042d804420010d30b200229032050450d022002290318210620024188026a2208420037030020024180026a22094200370300200241f0016a41086a22014200370300200242003703f001200241386a41cde5c000410410cb012001200241386a41086a2204290000370300200220022900383703f001200241386a41f4d3c700410b10cb01200341086a220a200429000037000020032002290038370000200241086a200241f0016a10ee0420062002290310420020022802081b7c220b2006540d03200842003703002009420037030020014200370300200242003703f001200241386a41cde5c000410410cb0120012004290000370300200220022900383703f001200241386a4180d6c700410f10cb01200a200429000037000020032002290038370000200241386a200241f0016a10f30820022802382105200229023c2106200842003703002009420037030020014200370300200242003703f001200241386a41cde5c000410410cb0120012004290000370300200220022900383703f001200241386a41e8d5c700410e10cb01200a200429000037000020032002290038370000200241386a200241f0016a10f0070240024020022d00384101460d00200241b0016a4200370300200241a8016a4200370300200241a0016a420037030020024200370398010c010b200241b0016a200241d1006a290000370300200241a8016a200241c9006a290000370300200241a0016a200241c1006a29000037030020022002290039370398010b20024188026a2209420037030020024180026a220a4200370300200241f0016a41086a22044200370300200242003703f001200241386a41cde5c000410410cb012004200241386a41086a2201290000370300200220022900383703f001200241386a41e8d9c700410f10cb01200341086a220c200129000037000020032002290038370000200241386a200241f0016a10f108200241c8016a41086a220d2001290300370300200220022903383703c801200220022800493602c0012002200241cc006a220e2800003600c3010240024020022d004822084103470d0020094200370300200a420037030020044200370300200242003703f001200241386a41cde5c000410410cb0120042001290000370300200220022900383703f001200241386a41acd9c700410b10cb01200c200129000037000020032002290038370000200241386a200241f0016a10f108200241e0016a41086a2001290300370300200220022903383703e001200220022800493602d8012002200e2800003600db0120022d004822084103460d06200241f0016a41086a200241e0016a41086a290300370300200220022903e0013703f001200220022802d8013602b801200220022800db013600bb010c010b2004200d290300370300200220022903c8013703f001200220022802c0013602b801200220022800c3013600bb010b200241ec006a2006420020051b2206370200200241fc006a20024198016a41086a29030037020020024184016a200241a8016a2903003702002002418c016a200241b0016a290300370200200241d8006a200241f0016a41086a2903003703002002200541002802e8c84820051b2201360268200242d8043703482002200b370340200220073703382002200229039801370274200220022903f001370350200241386a41286a20083a0000200241e1006a20022802b801360000200241e4006a20022800bb01360000200241386a10850a210702402006a72203450d00200341286c450d00200110390b20024190026a240020070f0b200241fc016a4130360200200241cc006a41023602002002420237023c20024198a0ce00360238200241043602f40120024198a8ce003602f0012002200241f0016a3602482002200241386a3602f801200241386a41a8a0ce001043000b4190bec70041ef004180bfc700105b000b41d0bbc70041fa0041ccbcc700105b000b41d0bbc70041fa0041dcbcc700105b000b4190bfc70041c80041d8bfc700105b000bfa28060e7f017e087f037e047f037e230041e0046b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc000413420024188026a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e024020014108490d00200241003602880220014108460d0020024101360288022002200041b8c0cd0020011b22032d00083a008c0220014109460d002002410236028802200220032d00093a008d022001410a460d002002410336028802200220032d000a3a008e022001410b460d002002410436028802200220032d000b3a008f022001410c460d0020024190026a20032d000c3a000020024105360288022001410d460d0020024191026a20032d000d3a000020024106360288022001410e460d0020024192026a20032d000e3a000020024107360288022001410f460d0020024193026a20032d000f3a0000200241083602880220014110460d0020024194026a20032d00103a0000200241093602880220014111460d0020024195026a20032d00113a00002002410a3602880220014112460d0020024196026a20032d00123a00002002410b3602880220014113460d0020024197026a20032d00133a00002002410c3602880220014114460d0020024198026a20032d00143a00002002410d3602880220014115460d0020024199026a20032d00153a00002002410e3602880220014116460d002002419a026a20032d00163a00002002410f3602880220014117460d002002419b026a20032d00173a0000200241103602880220014118460d002002419c026a20032d00183a0000200241113602880220014119460d002002419d026a20032d00193a000020024112360288022001411a460d002002419e026a20032d001a3a000020024113360288022001411b460d002002419f026a20032d001b3a000020024114360288022001411c460d00200241a0026a20032d001c3a000020024115360288022001411d460d00200241a1026a20032d001d3a000020024116360288022001411e460d00200241a2026a20032d001e3a000020024117360288022001411f460d00200241a3026a20032d001f3a0000200241183602880220014120460d00200241a4026a20032d00203a0000200241193602880220014121460d00200241a5026a20032d00213a00002002411a3602880220014122460d00200241a6026a20032d00223a00002002411b3602880220014123460d00200241a7026a20032d00233a00002002411c3602880220014124460d00200241a8026a20032d00243a00002002411d3602880220014125460d00200241a9026a20032d00253a00002002411e3602880220014126460d00200241aa026a20032d00263a00002002411f3602880220014127460d00200241ab026a20032d00273a0000200241b0016a41026a220320024195026a2d00003a0000200241b0036a41026a22002002419c026a2d00003a0000200220022f018c023b0130200220022d008e023a0032200220024193026a2f00003b01b00120022002419a026a2f01003b01b00320024196026a28010021042002419d026a2800002105200241a4026a2802002106200241203602880220024188026a41206a2802002107200228008f022108200241b0046a41026a2209200241a3026a2d00003a00002002200241a1026a2f00003b01b00420014128470d0020024190046a41026a220120032d00003a000020024180046a41026a220320002d00003a0000200241f0036a41026a220020092d00003a0000200220022d00323a008a02200220022f01303b018802200220022f01b0013b019004200220022f01b0033b018004200220022f01b0043b01f0032002411c6a41026a220920022d008a023a0000200220022f0188023b011c200241186a41026a220a20012d00003a0000200220022f0190043b0118200241146a41026a220120032d00003a0000200220022f0180043b0114200241106a41026a220320002d00003a0000200220022f01f0033b0110200220022f011c3b012c200220092d00003a002e200241286a41026a200a2d00003a0000200220022f01183b0128200241246a41026a20012d00003a0000200220022f01143b0124200241206a41026a20032d00003a0000200220022f01103b012020024188026a41186a220b420037030020024188026a41106a220c420037030020024188026a41086a220d42003703002002420037038802200241306a41b69fc500410710cb01200d200241306a41086a22012900003703002002200229003037038802200241306a41d091c600410c10cb01200b2001290000370300200c2002290030370300200241086a20024188026a412010ce03200228020c210e2002280208210f200b4200370300200c4200370300200d42003703002002420037038802200241306a41b69fc500410710cb01200d20012900003703002002200229003037038802200241306a41f4c9c800410a10cb01200b2001290000370300200c2002290030370300200241306a20024188026a10bf0220022902344200200228023022011b2210a7211120014100280284ee4d20011b211202400240024002402010422088a722134105742214450d00200241d4046a211520024188026a41206a211641002103034020024190046a41186a201220036a220141186a220029000037030020024190046a41106a200141106a220929000037030020024190046a41086a200141086a220a2900003703002002200129000037039004200b2000290000370300200c2009290000370300200d200a2900003703002002200129000037038802200241b0046a20024188026a10fb0620022802d00422000d022014200341206a2203470d000b0b4100210141002802e8c84821030240201141ffffff3f71450d00201210390b410021130c010b201620022903b004370300201641186a200241b0046a41186a290300370300201641106a200241b0046a41106a290300370300201641086a200241b0046a41086a29030037030020024188026a41186a220920024190046a41186a29030037030020024188026a41106a220a20024190046a41106a29030037030020024188026a41086a220b20024190046a41086a29030037030020024180046a41086a220c201541086a2802003602002002200229039004370388022002201529020037038004200241306a41386a220d20024188026a41386a290300370300200241306a41306a221420024188026a41306a290300370300200241306a41286a221620024188026a41286a290300370300200241306a41206a221520024188026a41206a290300370300200241306a41186a22172009290300370300200241306a41106a2209200a290300370300200241306a41086a220a200b2903003703002002200229038802370330200241b0036a41386a220b200d290300370300200241b0036a41306a220d2014290300370300200241b0036a41286a22142016290300370300200241b0036a41206a22162015290300370300200241b0036a41186a22152017290300370300200241b0036a41106a22172009290300370300200241b0036a41086a2209200a290300370300200220022903303703b003200241a0036a41086a220a200c28020036020020022002290380043703a003200241b0016a41386a220c200b290300370300200241b0016a41306a220b200d290300370300200241b0016a41286a220d2014290300370300200241b0016a41206a22142016290300370300200241b0016a41186a22182015290300370300200241b0016a41106a22152017290300370300200241b0016a41086a22172009290300370300200220022903b0033703b001200241f0036a41086a2209200a280200360200200220022903a0033703f00341d00010382216450d01201620022903b00137030020162000360240201620022903f003370244201641386a200c290300370300201641306a200b290300370300201641286a200d290300370300201641206a2014290300370300201641186a2018290300370300201641106a2015290300370300201641086a2017290300370300201641cc006a2009280200360200200242818080801037029403200220163602900302400240201341057441606a2003470d00410121130c010b200141206a2100201220134105746a221441606a2118200241d4046a211720024188026a41206a2115410121130340200021010240034020024190046a41186a220a200141186a290000221037030020024190046a41106a220b200141106a290000221937030020024190046a41086a220c200141086a290000221a37030020022001290000221b3703900420024188026a41186a2203201037030020024188026a41106a2200201937030020024188026a41086a2209201a3703002002201b37038802200241b0046a20024188026a10fb0620022802d004220d0d012014200141206a2201470d000c030b0b201520022903b004370300201541186a200241b0046a41186a290300370300201541106a200241b0046a41106a290300370300201541086a200241b0046a41086a2903003703002003200a2903003703002000200b2903003703002009200c29030037030020024180046a41086a220a201741086a2802003602002002200229039004370388022002201729020037038004200241306a41386a220b20024188026a41386a290300370300200241306a41306a220c20024188026a41306a290300370300200241306a41286a221c20024188026a41286a290300370300200241306a41206a221d2015290300370300200241306a41186a221e2003290300370300200241306a41106a22032000290300370300200241306a41086a220020092903003703002002200229038802370330200241b0036a41386a2209200b290300370300200241b0036a41306a220b200c290300370300200241b0036a41286a220c201c290300370300200241b0036a41206a221c201d290300370300200241b0036a41186a221d201e290300370300200241b0036a41106a221e2003290300370300200241b0036a41086a22032000290300370300200220022903303703b003200241a0036a41086a2200200a28020036020020022002290380043703a003200241b0016a41386a220a2009290300370300200241b0016a41306a2209200b290300370300200241b0016a41286a220b200c290300370300200241b0016a41206a220c201c290300370300200241b0016a41186a221c201d290300370300200241b0016a41106a221d201e290300370300200241b0016a41086a221e2003290300370300200220022903b0033703b001200241f0036a41086a221f2000280200360200200220022903a0033703f00302402013200228029403470d0020024190036a2013410110930320022802900321160b200141206a21002016201341d0006c6a220320022903b001370300201d2903002110201c2903002119200c290300211a200b290300211b20092903002120200a2903002121201e29030021222003200d360240200341086a2022370300200320022903f003370244200341cc006a201f280200360200200341386a2021370300200341306a2020370300200341286a201b370300200341206a201a370300200341186a2019370300200341106a20103703002002201341016a22133602980320182001470d000b0b0240201141ffffff3f71450d00201210390b200228029403210120022802900321030b200220133602b804200220013602b404200220033602b00420024188026a200241b0046a108307024002402002280288024101460d00200241b0036a41206a220320024188026a41286a280200360200200241b0036a41186a220020024188026a41206a290300370300200241b0036a41106a220920024188026a41186a290300370300200241b0036a41086a220a20024188026a41106a220b290300370300200220024188026a41086a2903003703b003200241b4026a2802002101200241b0016a200241b8026a41d80010d40b1a2001450d00200241306a41206a2003280200360200200241306a41186a2000290300370300200241306a41106a2009290300370300200241306a41086a200a290300370300200220022903b003370330200241306a41286a200241b0016a41d80010d40b1a200241d4006a200136020020024191026a200241286a41026a2d00003a0000200b200241246a41026a2d00003a0000200220022d002e3a008a02200220022f012c3b0188022002200836008b02200220022f01283b008f022002200436019202200220022f01243b01960220022005360099022002419f026a200241206a41026a2d00003a0000200220022f01203b009d02200220073602a402200220063602a002200241b0016a200241306a41e2c289ab0620024188026a10860720022902b401211020022802b0012109200241306a10ff060c010b410021090b41002100024002402009450d0020024190026a201037030020022013360298022002200936028c022002200e4100200f1b36028802200241306a20024188026a1096082010a7210a02402010422088a72201450d002001410c6c21032009210103400240200141046a280200450d00200128020010390b2001410c6a2101200341746a22030d000b0b0240200a450d00200a410c6c450d00200910390b20022802302201450d00200241386a280200210320022802342109200121000c010b0b410110382201450d002002420137028c0220022001360288020240024020000d00200141003a0000410121030c010b200141013a000020024101360290022000200320024188026a10b902200228029002210320022802880221012009450d00200010390b200241e0046a24002003ad4220862001ad840f0b1032000b2002413c6a41303602002002419c026a41023602002002420237028c0220024198a0ce003602880220024104360234200241a8a7ce003602302002200241306a36029802200220024188026a36023820024188026a41a8a0ce001043000bd317020a7f017e230041e00e6b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241a0016a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b41002104410020033602d0a94e20024280808080802037020c2002200136021c2002200041b8c0cd0020011b3602182002200241186a36020820024188066a200241086a10f2040240024002400240024020024194066a2802002205450d002002418c076a280200210620024188076a280200210020024184076a28020021072002419c066a280200210820024198066a28020021092002200241086a108c02024020022802000d002002280208220128020422032002280204220a490d00200a417f4c0d0202400240200a0d004101210b0c010b200a1038220b450d04200b4100200a10d60b1a200128020421030b2003200a4f0d04200b10390b02402008450d00200841246c21012005210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402009450d00200941246c450d00200510390b02402006450d00200641246c21012007210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b2000450d00200041246c450d00200710390b0c030b1034000b1032000b200b20012802002204200a10d40b1a20012003200a6b36020420012004200a6a360200200241f8056a41086a20024188066a41086a28020036020020022002290388063703f80520024190056a200241a0066a41e40010d40b1a20024190046a20024190076a41800110d40b1a200521040b20024180046a41086a2203200241f8056a41086a280200360200200220022903f8053703800420024198036a20024190056a41e40010d40b1a20024198026a20024190046a41800110d40b1a02402004450d0020024188026a41086a2003280200360200200220022903800437038802200241a0016a20024198036a41e40010d40b1a200241206a20024198026a41800110d40b1a0240024020022802082802040d0020024190056a41086a20024188026a41086a28020036020020022002290388023703900520024198026a200241a0016a41e40010d40b1a20024188066a200241206a41800110d40b1a0c010b02402008450d00200841246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402009450d00200941246c450d00200410390b02402006450d00200641246c21012007210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402000450d00200041246c450d00200710390b41002104200a450d00200b10390b2004450d0020024198036a41086a20024190056a41086a280200360200200220022903900537039803200241206a20024198026a41e40010d40b1a20024190046a20024188066a41800110d40b1a2002200a360294052002200b3602900520024188066a20024190056a10890502400240200228028c0622050d00410021050c010b20024198026a41086a20024198066a28020036020020022002290390063703980220022802880621030b0240200a450d00200b10390b024002402005450d00200241f8056a41086a20024198026a41086a2201280200220a3602002002200229039802220c3703f805200241bc076a200a360200200241b4076a200c370200200241c0076a200229039803370300200241c8076a20024198036a41086a280200360200200241d8076a200241206a41e40010d40b1a200241c8086a20024190046a41800110d40b1a200241c4086a2006360200200241c0086a2000360200200241bc086a2007360200200241d4076a2008360200200241d0076a2009360200200241cc076a2004360200200241b0076a2005360200200241ac076a2003360200200241a8076a4102360200200241013602a007200242023703f006200220024188066a3602980220024190056a20024198026a10d406200120024190056a41086a28020036020020022002290390053703980220024198026a10dc012103024020022903f0064202510d0020022d00880641ff01714102470d00200228029006450d00200228028c0610390b200241a0076a10e20941002802d0a94e2101024020030d0020014103490d0241002802cca94e210341002802c8a94e210141002802d4a94e2104200241a4066a41b8c0cd0036020020024198066a4201370300200241bc066a41d283ce00ad4280808080800c84370200200241b0066a41b983ce00ad4280808080900384370300200241a8066a420037030020024190066a410d360200200241a483ce003602940620024281808080b0143702c406200241003602b806200241ac83ce0036028c062002410336028806200141b8c0cd00200441024622041b20024188066a200341c0a4c00020041b2802101103000c020b2001450d012002413236029c022002200241a0016a3602980241002802cca94e210341002802c8a94e210141002802d4a94e210420024198066a4201370300200241bc066a41d283ce00ad4280808080800c84370200200241b0066a41b983ce00ad4280808080900384370300200241a8066a420137030020024190066a410d360200200241a4066a20024198026a360200200241acedcd003602940620024281808080f0143702c406200241003602b806200241ac83ce0036028c062002410136028806200141b8c0cd00200441024622041b20024188066a200341c0a4c00020041b2802101103000c010b02402008450d00200841246c21012004210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b02402009450d00200941246c450d00200410390b02402006450d00200641246c21012007210303400240024002400240024020032d00000e050400010204030b2003410c6a280200450d03200341086a28020010390c030b2003410c6a280200450d02200341086a28020010390c020b2003410c6a280200450d01200341086a28020010390c010b200341086a280200450d00200341046a28020010390b200341246a21032001415c6a22010d000b0b2000450d00200041246c450d00200710390b200541004710860a210c200241e00e6a2400200c0f0b2002412c6a4130360200200241a4046a4102360200200242023702940420024198a0ce003602900420024104360224200241f0a6ce003602202002200241206a3602a0042002200241a0016a36022820024190046a41a8a0ce001043000be01c07097f017e0c7f017e017f017e017f23004180016b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241286a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e0240024002400240024002400240024020010d00200241c0006a22014200370300200241386a22034200370300200241286a41086a2204420037030020024200370328200241f0006a41d8adc300410b10cb012004200241f0006a41086a220529000037030020022002290070370328200241f0006a4184b0c300411310cb012001200529000037030020032002290070370300200241106a200241286a412010ce03200228021421062002280210210720014200370300200342003703002004420037030020024200370328200241f0006a41dc8ccc00410f10cb012004200529000037030020022002290070370328200241f0006a41dc8fcc00411510cb012001200529000037030020032002290070370300200241086a200241286a412010ce03200228020c21082002280208210920014200370300200342003703002004420037030020024200370328200241f0006a418ce6c000411210cb012004200529000037030020022002290070370328200241f0006a41c8fbcd00410410cb012001200529000037030020032002290070370300200241f0006a200241286a10fa07024002402002280270220a0d002002420037021c4100210420024100280284ee4d220a360218410021010c010b2002290274210b2002200a3602182002200b37021c200b422088a72101200ba721040b200241c0006a4200370300200241386a4200370300200241286a41086a2205420037030020024200370328200241f0006a418ce6c000411210cb012005200241f0006a41086a220c29000037030020022002290070370328200241f0006a41c59fc500410810cb01200341086a200c29000037000020032002290070370000200241f0006a200241286a10fa07200228027022034100280284ee4d20031b21050240200420016b2002290274420020031b220b422088a7410574220c41057522034f0d00200241186a20012003109e02200228022021012002280218210a0b2006410020071b210d2008410020091b2104200a20014105746a2005200c10d40b1a2002200120036a220e3602200240200b42ffffff3f83500d00200510390b02402004200d4f0d000340200241286a200410fc07200441016a2104024020022802282207450d002002280254210120022802502105200228024c2108200228024421092002280240210f2002280238210c20022802342106200228022c21100240200228021c200e6b200228023c22034f0d00200241186a200e2003109e022002280218210a2002280220210e0b200a200e4105746a2006200341057410d40b1a2002200e20036a220e3602200240201041ffffff3f71450d00200710390b0240200c41ffffff3f71450d00200610390b0240200941ffffff3f71450d00200f10390b02402001450d002001410c6c21012008210303400240200341046a28020041ffffffff0371450d00200328020010390b2003410c6a2103200141746a22010d000b0b2005450d002005410c6c450d00200810390b2004200d470d000b0b0240200e41144b0d00200e41014d0d05200e410574200a6a41406a21034101210103402003200141016a220110f706200341606a2103200e2001470d000c050b0b200e410176220341ffffff3f712003470d0620034105742211417f4c0d06201110382212450d0720024200370274200241002802d8974e360270200a41606a2113200a41a07f6a211441002103200e211503400240024020152216417f6a22150d0041002115410121050c010b024002400240024002400240200a20154105746a20164105742207200a6a41406a412010d70b4100480d002016417e6a2106201420076a210141002115410021040340024020062004470d00201621050c080b200441016a2104200141206a2001412010d70b2105200141606a21012005417f4a0d000b200441016a21052004417f7320166a21150c010b201420076a210102400340024020154101470d00410021150c020b2015417f6a2115200141206a2001412010d70b2104200141606a210120044100480d000b0b20162015490d012016200e4b0d02201620156b22054101762206450d00201320076a2101200a20154105746a21040340200241286a41186a2207200441186a2208290000370300200241286a41106a2209200441106a220c290000370300200241286a41086a2210200441086a220d29000037030020022004290000370328200141086a220f290000210b200141106a22172900002118200141186a2219290000211a200420012900003700002008201a370000200c2018370000200d200b3700002019200729030037000020172009290300370000200f201029030037000020012002290328370000200141606a2101200441206a21042006417f6a22060d000b0b2015450d04200541094b0d042016200e4b0d02201620156b21052015417f6a2103201320154105746a2101034020162003490d082001200541016a220510f7062003417f6a220420034f0d04200141606a2101200421032005410a490d000c040b0b2015201641c4bac3001055000b2016200e41c4bac300104b000b20162015417f6a2203490d042016200e41d4bac300104b000b200441016a2115200228027821030b024020032002280274470d00200241f0006a200310b101200228027821030b2002280270220120034103746a22042005360204200420153602002002200341016a2203360278024020034102490d0002400340024002400240024020012003417f6a4103746a2204280200450d00200341037420016a220741746a2802002206200428020422054d0d00200341024d0d0620012003417d6a22104103746a2802042204200520066a4d0d01200341034d0d06200741646a280200200420066a4b0d060c010b20034103490d012004280204210520012003417d6a22104103746a28020421040b20042005490d010b2003417e6a21100b0240024002400240024002402003201041016a22174d0d00200320104d0d012001201041037422196a2203280204221620032802006a220520012017410374221b6a2203280200220f490d022005200e4b0d03200a200f4105746a22042003280204220d41057422016a2103200541057421072005200f6b2208200d6b2206200d490d0420122004200110d40b220620016a210502400240200d4101480d002008200d4a0d010b20042103200621010c060b200a20076a210820062101034020042003200120032001412010d70b41004822071b2206290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a2900003700002001200141206a20071b2101200441206a21040240200341206a200320071b22032008490d00200421030c070b20012005490d000b200421030c050b2017200341e4bac300103c000b2010200341f4bac300103c000b200f20054184bbc3001055000b2005200e4184bbc300104b000b201220032006410574220110d40b220820016a21050240200d41014e0d00200821010c010b0240200641014e0d00200821010c010b201320076a21060340200620032005200541606a2209200341606a220c412010d70b41004822071b41606a2201290000370000200641186a200141186a290000370000200641106a200141106a290000370000200641086a200141086a2900003700002005200920071b210502402004200c200320071b2203490d00200821010c020b200641606a210620082101200520084b0d000b0b20032001200520016b41607110d40b1a02402002280278220320104d0d002002280270220120196a22042016200d6a3602042004200f360200200320174d0d022001201b6a2204200441086a200320106b41037441706a10d50b1a20022003417f6a2203360278200341014d0d030c010b0b201020034194bbc300103c000b201720031044000b2015450d030c000b0b200241fc006a41303602002002413c6a41023602002002420237022c20024198a0ce0036022820024104360274200241aca8ce003602702002200241f0006a3602382002200241286a360278200241286a41a8a0ce001043000b2003201641d4bac3001055000b0240200228027441ffffffff0171450d00200110390b2011450d00201210390b200e4102490d00200e417f6a2105200a41206a2103410121040340024020032004410574200a6a220141606a412010d70b450d00200341086a290000210b200341106a2900002118200341186a290000211a20012003290000370000200141186a201a370000200141106a2018370000200141086a200b370000200441016a21040b200341206a21032005417f6a22050d000b200220043602200c010b200228022021040b20044105744104722203417f4c0d0020022802182107200310382201450d01200241003602302002200336022c20022001360228200241286a200410ac020240024020040d0020022802302101200228022821060c010b20044105742105200228023021012007210303400240200228022c20016b411f4b0d00200241286a200141201077200228023021010b2002280228220620016a22042003290000370000200441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a2900003700002002200141206a2201360230200341206a2103200541606a22050d000b0b0240200228021c41ffffff3f71450d00200710390b20024180016a24002001ad4220862006ad840f0b1034000b1032000be41203037f017e057f23004180036b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241106a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e2002428080808080203702142002200241d0026a36021002400240024002402001450d0020022001417f6a22033602d4022002200041b8c0cd0020011b220141016a3602d002024002400240024020012d00000e020100040b200241086a200241106a108c0220022802080d0320022802d4022200200228020c2203490d032003417f4c0d054101210102402003450d00200310382201450d0720014100200310d60b1a20022802d40221000b20002003490d02200120022802d0022204200310d40b1a2002200020036b22003602d4022002200420036a3602d00220000d012003ad220542208620058421050c040b20030d02410021010c030b2003450d010b200110390b200241dc026a4130360200200241246a41023602002002420237021420024198a0ce00360210200241043602d402200241c0a8ce003602d0022002200241d0026a3602202002200241106a3602d802200241106a41a8a0ce001043000b410021044100210002402001450d002005422088a72203417f4c0d014101210002402003450d00200310382200450d030b20002001200310d40b1a0b200241186a220620033602002002200336021420022000360210200241d0016a41e7e485f306200241106a10bb0102402001450d002005422088a72203417f4c0d014101210402402003450d00200310382204450d030b20042001200310d40b1a0b200620033602002002200336021420022004360210200241f0016a41e2c289ab06200241106a10bf01410021044100210002402001450d002005422088a72203417f4c0d014101210002402003450d00200310382200450d030b20002001200310d40b1a0b200241186a22062003360200200220033602142002200036021020024190026a41e9dabdf306200241106a10bf0102402001450d002005422088a72203417f4c0d014101210402402003450d00200310382204450d030b20042001200310d40b1a0b200620033602002002200336021420022004360210200241b0026a41f0c2c98b06200241106a10bf01410021074100210002402001450d002005422088a72203417f4c0d014101210002402003450d00200310382200450d030b20002001200310d40b1a0b200241106a41086a220620033602002002200336021420022000360210200241d0026a41e1e69df306200241106a10bf014100210002402001450d002005422088a72203417f4c0d014101210002402003450d00200310382200450d030b20002001200310d40b1a200121070b200241f0026a41086a2003360200200220033602f402200220003602f002200241b0016a220041e1ea91cb06200241f0026a10bf012006200241d0016a41086a290300370300200241106a41106a2208200241d0016a41106a290300370300200241106a41186a2209200241d0016a41186a290300370300200241386a200241f0016a41086a290300370300200241c0006a200241f0016a41106a290300370300200241c8006a200241f0016a41186a290300370300200241d8006a20024190026a41086a290300370300200241e0006a20024190026a41106a290300370300200241e8006a20024190026a41186a290300370300200220022903d001370310200220022903f001370330200220022903900237035020024188016a200241b0026a41186a29030037030020024180016a200241b0026a41106a290300370300200241f8006a200241b0026a41086a29030037030020024198016a200241d0026a41086a290300370300200241a0016a200241d0026a41106a290300370300200241a8016a200241d0026a41186a290300370300200220022903b002370370200220022903d00237039001200241003602d802200242013703d002200241d0026a41004120107720022802d402210320022802d002220120022802d802220a6a22042002290310370000200441086a2006290300370000200441106a2008290300370000200441186a20092903003700002002200a41206a22083602d802200241106a41206a21040240200320086b411f4b0d00200241d0026a20084120107720022802d402210320022802d002210120022802d80221080b200241d0006a2106200120086a22092004290000370000200941186a200441186a290000370000200941106a200441106a290000370000200941086a200441086a2900003700002002200841206a22083602d8020240200320086b411f4b0d00200241d0026a20084120107720022802d402210320022802d002210120022802d80221080b200241f0006a2104200120086a22092006290000370000200941186a200641186a290000370000200941106a200641106a290000370000200941086a200641086a2900003700002002200841206a22083602d8020240200320086b411f4b0d00200241d0026a20084120107720022802d402210320022802d002210120022802d80221080b20024190016a2106200120086a22092004290000370000200941186a200441186a290000370000200941106a200441106a290000370000200941086a200441086a2900003700002002200841206a22043602d8020240200320046b411f4b0d00200241d0026a20044120107720022802d402210320022802d002210120022802d80221040b200120046a22082006290000370000200841186a200641186a290000370000200841106a200641106a290000370000200841086a200641086a2900003700002002200441206a22043602d8020240200320046b411f4b0d00200241d0026a20044120107720022802d002210120022802d80221040b200120046a22032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002002200441206a3602d80202402007450d002005a7450d00200710390b200241106a200241d0026a1087062002350218210520022802102103024020022802d402450d00200110390b20024180036a240020054220862003ad840f0b1034000b1032000bd80f01047f230041b0036b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241e0016a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e2002428080808080203702e401200220013602242002200041b8c0cd0020011b3602202002200241206a3602e001200241086a200241e0016a108c02024002400240024020022802080d0020022802242201200228020c2203490d002003417f4c0d020240024020030d00410121000c010b200310382200450d0420004100200310d60b1a200228022421010b024020012003490d00200020022802202204200310d40b21052002200120036b22013602242002200420036a3602202001450d022003450d010b200010390b2002412c6a4130360200200241f4016a4102360200200242023702e40120024198a0ce003602e00120024104360224200241e0a8ce003602202002200241206a3602f0012002200241e0016a360228200241e0016a41a8a0ce001043000b200220033602ac03200220053602a803200241e0016a200241a8036a10f2020240024020022d00e0014101460d00200241206a200241e0016a41017241c00110d40b1a200241e0016a200241206a41c00110d40b1a20024200370214200241002802d8974e360210412010382201450d0320012002290020370000200141186a200241206a41186a290000370000200141106a200241206a41106a290000370000200141086a200241206a41086a2900003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041e7e485f30636020c200042a08080808004370204200020013602002002200228021841016a360218412010382201450d032001200229038002370000200141186a20024198026a290300370000200141106a20024190026a290300370000200141086a20024188026a2903003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041e2c289ab0636020c200042a08080808004370204200020013602002002200228021841016a360218412010382201450d03200120022903a002370000200141186a200241b8026a290300370000200141106a200241b0026a290300370000200141086a200241a8026a2903003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041e9dabdf30636020c200042a08080808004370204200020013602002002200228021841016a360218412010382201450d03200120022903c002370000200141186a200241d8026a290300370000200141106a200241d0026a290300370000200141086a200241c8026a2903003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041f0c2c98b0636020c200042a08080808004370204200020013602002002200228021841016a360218412010382201450d03200120022903e002370000200141186a200241f8026a290300370000200141106a200241f0026a290300370000200141086a200241e8026a2903003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041e1e69df30636020c200042a08080808004370204200020013602002002200228021841016a360218412010382201450d032001200229038003370000200141186a20024198036a290300370000200141106a20024190036a290300370000200141086a20024188036a2903003700000240200228021822002002280214470d00200241106a200010fd02200228021821000b200228021020004104746a220041e1ea91cb0636020c200042a08080808004370204200020013602002002200228021841016a3602180c010b200241003602100b02402003450d00200510390b0240024020022802100d00410121030c010b200241186a2802004104744105722203417f4c0d010b200310382200450d01200241003602e801200220033602e401200220003602e0010240024020022802100d00200041003a0000410121050c010b200041013a0000200241013602e80120022802102103200241e0016a200241106a41086a280200220110ac02024020010d0020022802e801210520022802e00121000c010b200320014104746a210403402003280200200341086a280200200241e0016a10b902024020022802e40120022802e80122016b41034b0d00200241e0016a20014104107720022802e80121010b20022802e001220020016a2003410c6a2800003600002002200141046a22053602e801200341106a22032004470d000b0b024020022802102203450d000240200241186a2802002201450d002001410474210103400240200341046a280200450d00200328020010390b200341106a2103200141706a22010d000b0b200228021441ffffffff0071450d00200228021010390b200241b0036a24002005ad4220862000ad840f0b1034000b1032000b8a1202097f017e230041c0016b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241286a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e02402001450d002002200041b8c0cd0020011b22032d00003a002c2002410136022820014101460d00200220032d00013a002d2002410236022820014102460d00200220032d00023a002e2002410336022820014103460d00200220032d00033a002f2002410436022820014104460d00200241306a20032d00043a00002002410536022820014105460d00200241316a20032d00053a00002002410636022820014106460d00200241326a20032d00063a00002002410736022820014107460d00200241336a20032d00073a00002002410836022820014108460d00200241346a20032d00083a00002002410936022820014109460d00200241356a20032d00093a00002002410a3602282001410a460d00200241366a20032d000a3a00002002410b3602282001410b460d00200241376a20032d000b3a00002002410c3602282001410c460d00200241386a20032d000c3a00002002410d3602282001410d460d00200241396a20032d000d3a00002002410e3602282001410e460d002002413a6a20032d000e3a00002002410f3602282001410f460d002002413b6a20032d000f3a00002002411036022820014110460d002002413c6a20032d00103a00002002411136022820014111460d002002413d6a20032d00113a00002002411236022820014112460d002002413e6a20032d00123a00002002411336022820014113460d002002413f6a20032d00133a00002002411436022820014114460d00200241c0006a20032d00143a00002002411536022820014115460d00200241c1006a20032d00153a00002002411636022820014116460d00200241c2006a20032d00163a00002002411736022820014117460d00200241c3006a20032d00173a00002002411836022820014118460d00200241c4006a20032d00183a00002002411936022820014119460d00200241c5006a20032d00193a00002002411a3602282001411a460d00200241c6006a20032d001a3a00002002411b3602282001411b460d00200241c7006a20032d001b3a00002002411c3602282001411c460d00200241c8006a20032d001c3a00002002411d3602282001411d460d00200241c9006a20032d001d3a00002002411e3602282001411e460d00200241ca006a20032d001e3a00002002411f3602282001411f460d00200241cb006a20032d001f3a000020024190016a41026a2203200241356a2d00003a000020024180016a41026a22002002413c6a2d00003a0000200220022f012c3b01b001200220022d002e3a00b2012002200241336a2f00003b01900120022002413a6a2f01003b018001200241366a28010021042002413d6a2800002105200241c4006a280200210620024120360228200241286a41206a2802002107200228002f2108200241a0016a41026a2209200241c3006a2d00003a00002002200241c1006a2f00003b01a00120014120470d00200241286a41026a220120022d00b2013a0000200241246a41026a220a20032d00003a0000200241206a41026a220320002d00003a00002002411c6a41026a220020092d00003a0000200220022f01b0013b0128200220022f0190013b0124200220022f0180013b0120200220022f01a0013b011c200241186a41026a20012d00003a0000200220022f01283b0118200241146a41026a200a2d00003a0000200220022f01243b0114200241106a41026a20032d00003a0000200220022f01203b01102002410c6a41026a20002d00003a0000200220022f011c3b010c20024180016a41c7e5c000410610cb0120024190016a4194b5cb00410710cb0102400240412010382201450d00200120022f01183b000020012008360003200120022f01143b00072001200436000a200120022f01103b000e20012005360011200120022f010c3b0015200141026a200241186a41026a2d00003a0000200141096a200241146a41026a2d00003a0000200141106a200241106a41026a2d00003a0000200141176a2002410c6a41026a2d00003a00002001200736001c20012006360018200241b0016a2001412010ca01200241346a200141206a360200200220013602302002200241b0016a41106a36022c2002200241b0016a360228200241a0016a200241286a1083012001103920022802a801220941206a2201417f4c0d010240024020010d00410121030c010b200110382203450d010b41002100200241003602b801200220033602b001200220013602b40102402001410f4b0d00200241b0016a41004110107720022802b401210120022802b001210320022802b80121000b200320006a2208200229008001370000200841086a20024180016a41086a2900003700002002200041106a22003602b8010240200120006b410f4b0d00200241b0016a20004110107720022802b401210120022802b001210320022802b80121000b200320006a2208200229009001370000200841086a20024190016a41086a2900003700002002200041106a22003602b80120022802a00121080240200120006b20094f0d00200241b0016a20002009107720022802b001210320022802b80121000b200320006a2008200910d40b1a2002200020096a22013602b801024020022802a401450d0020022802a00110390b200241286a20022802b0012200200110e003200241f0006a28020021032002290328210b024020022802b401450d00200010390b410410382201450d00200120034100200b4201511b360000200241c0016a24002001ad4280808080c000840f0b1032000b1034000b200241bc016a41303602002002413c6a41023602002002420237022c20024198a0ce00360228200241043602b401200241fca8ce003602b0012002200241b0016a3602382002200241286a3602b801200241286a41a8a0ce001043000ba80803027f057e017f23004190126b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241d8086a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e200241d8086a200041b8c0cd0020011b200110a609024020022903c0094203510d00200241d8086a41d8086a28020021032002200241d8086a41d80810d40b220241d8086a200241d80810d40b1a200241b8116a200241f0096a220110b20342002104200241c8116a200320022903b81122054200420020022d00c11141004720022d00c011220010d80642002106024020022903c8114201520d00427f427f200241d8116a2903002206200241e8116a2903007c20022903d0112204200241e0116a2903007c22072004542203ad7c22042003200420065420042006511b22031b2206200241f8116a2903007c427f200720031b2204200241f0116a2903007c22072004542203ad7c22042003200420065420042006511b22031b2106427f200720031b21040b20024188126a29030021072002290380122108024020022903c0094202510d0020022d00d80841ff01714102470d0020022802e008450d0020022802dc0810390b200110dd06200241003602e008200242013703d808200241d8086a41004108107720022802d808220120022802e00822036a20053700002002200341086a22033602e0080240024002400240024020000e03000102040b024020022802dc082003470d00200241d8086a20034101107720022802d808210120022802e00821030b200120036a41003a0000200341016a21030c020b024020022802dc082003470d00200241d8086a20034101107720022802d808210120022802e00821030b200120036a41013a0000200341016a21030c010b024020022802dc082003470d00200241d8086a20034101107720022802d808210120022802e00821030b200120036a41023a0000200341016a21030b200220033602e0080b024020022802dc0820036b410f4b0d00200241d8086a20034110107720022802d808210120022802e00821030b200120036a2200427f200620077c200420087c22052004542209ad7c22042009200420065420042006511b22091b3700082000427f200520091b37000020024190126a2400200341106aad4220862001ad840f0b200241d4116a4130360200200241146a41023602002002420237020420024198a0ce00360200200241043602cc1120024194a9ce003602c8112002200241c8116a3602102002200241d8086a3602d011200241a8a0ce001043000bed0703027f027e017f23004190126b22022400410041002802d4a94e2203410120031b3602d4a94e02400240024020030e020001020b410041a8d6c0003602cca94e410041a6d6c0003602c8a94e410041023602d4a94e0c010b034041002802d4a94e4101460d000b0b410521030240024002400240024002400240102f0e06010203040506000b41f7cdc0004134200241a0096a41accec00041bccec000103d000b410021030c040b410121030c030b410221030c020b410321030c010b410421030b410020033602d0a94e200241a0096a200041b8c0cd0020011b200110a609024020022903880a4203510d00200241a0096a41d8086a2802002103200241c8006a200241a0096a41d80810d40b1a200241a0096a200241c8006a41d80810d40b1a20024180126a200241b80a6a220110b203200220032002290380124200420020022d00891241004720022d00881210d806024020022903880a4202510d0020022d00a00941ff01714102470d0020022802a809450d0020022802a40910390b200110dd06200241003602a809200242013703a0090240024020022903004201510d00200241a0096a41004101107720022802a009220120022802a80922036a41003a0000200341016a21030c010b200241a0096a41004101107720022802a009220120022802a80922036a41013a00002002200341016a22033602a809200241106a290300210420022903082105024020022802a409220020036b410f4b0d00200241a0096a20034110107720022802a409210020022802a009210120022802a80921030b200120036a22062004370008200620053700002002200341106a22033602a809200241206a2903002104200241186a29030021050240200020036b410f4b0d00200241a0096a20034110107720022802a409210020022802a009210120022802a80921030b200120036a22062004370008200620053700002002200341106a22033602a809200241306a2903002104200241286a29030021050240200020036b410f4b0d00200241a0096a20034110107720022802a009210120022802a80921030b200120036a2200200437000820002005370000200341106a21030b200220033602a809200241c0006a290300210420022903382105024020022802a40920036b410f4b0d00200241a0096a20034110107720022802a009210120022802a80921030b200120036a220020043700082000200537000020024190126a2400200341106aad4220862001ad840f0b2002410c6a4130360200200241dc006a41023602002002420237024c20024198a0ce0036024820024104360204200241a8a9ce00360200200220023602582002200241a0096a360208200241c8006a41a8a0ce001043000b5801017e02400240200341c00071450d0020012003413f71ad862102420021010c010b2003450d0020022003413f71ad2204862001410020036b413f71ad88842102200120048621010b20002001370300200020023703080b3c01017f230041206b220524002005200120022003200410d90b200529031021012000200541186a29030037030820002001370300200541206a24000b6e01067e2000200342ffffffff0f832205200142ffffffff0f8322067e22072003422088220820067e22062005200142208822097e7c22054220867c220a3703002000200820097e200420017e200320027e7c7c2005200654ad4220862005422088847c200a200754ad7c3703080b3601017f02402002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b6f01017f02400240200020016b20024f0d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000c020b0b2002450d00200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000b0b20000b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5801017e02400240200341c00071450d0020022003413f71ad882101420021020c010b2003450d002002410020036b413f71ad8620012003413f71ad220488842101200220048821020b20002001370300200020023703080baa0604017f017e017f057e230041206b22052400024002400240024002400240024002402004500d00420021062001200354200220045420022004511b0d052002500d05200541106a20032004200479a7200279a76b220741ff007110d10b42012007413f71ad862108200541186a29030021092005290310210a4200210603402001200a7d210b0240200220097d2001200a54ad7d220c4200530d0020062008842106200b20035a200c20045a200c2004511b450d03200b2101200c21020b200a4201882009423f8684210a20084201882108200942018821090c000b0b4200210c024020024200520d0020012001200380220620037e7d21010c060b0240200220035a0d0020052003200441c000200279a7200379a76b22076b413f20071b220741ff007110d10b42012007413f71ad86210c200541086a290300210a200529030021094200210b034002402002200a7d2001200954ad7d22084200530d00200120097d2101200c200b84210b20084200510d04200821020b2009420188200a423f86842109200c420188210c200a420188210a0c000b0b20022003510d0320022002200380220820037e7d210c0240200342ffffffff0f560d00200c422086200142208884220a200a200380220a20037e7d422086200142ffffffff0f838422092009200380220920037e7d2101200a4220862009842106200a42208820088421084200210c0c070b0240200120035a200c20045a200c2004511b0d00420021060c070b2004423f86200342018884210a2003423f862109428080808080808080807f21024200210403400240200c200a7d2001200954ad7d220b4200530d00200120097d210120022004842104200b4200510d04200b210c0b2009420188200a423f8684210920024201882102200a420188210a0c000b0b42002108200b21010c050b2001200380220a200b8421062001200a20037e7d21014200210c0c030b2001200380220a20048421062001200a20037e7d21014200210c0c030b20012001200280220620027e7d21014200210c420121080c020b2002210c0b420021080b2000200137031020002006370300200041186a200c37030020002008370308200541206a24000b3c01017f230041206b220524002005200120022003200410d90b200529030021012000200541086a29030037030820002001370300200541206a24000b0bf0a90e0300418080c0000bc1a90e100010001c00000028020000050000006c6962726172792f616c6c6f632f7372632f7261775f7665632e7273c00010004b0000005c010000130000003300000004000000040000003400000035000000360000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f720033000000000000000100000037000000a800100018000000450200001c0000006c6962726172792f616c6c6f632f7372632f666d742e72732f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f636f72652f7372632f666d742f6d6f642e72736c6962726172792f616c6c6f632f7372632f7665632f6d6f642e7273292073686f756c64206265203c206c656e202869732000000068011000140000007c01100017000000fb9a1200010000000b0110001c0000001b0500000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000bc011000120000002701100016000000fb9a1200010000000b0110001c0000004b0500000d00000072656d6f76616c20696e64657820286973200000f001100020000000100210001200000033000000000000000100000038000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e6465782069732030303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839390000fc021000100000000c0310002200000072616e676520656e6420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468205b2e2e2e5d00940310000b0000009a0d100016000000d303100001000000780d10000e000000860d1000040000008a0d100010000000d303100001000000940310000b0000009f03100026000000c503100008000000cd03100006000000d3031000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f66206060dc031000020000002e2e0000120410001b000000650000001400000000041000120000000c0310002200000072616e676520737461727420696e646578206c6962726172792f636f72652f7372632f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff090096091000250000000a0000001c000000ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d0096091000250000001a000000360000000006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a84066c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e727300cc09100016000000e20910000d000000736c69636520696e64657820737461727473206174202062757420656e647320617420000003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf55500d100028000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f000000000500d1000280000004b00000028000000500d10002800000057000000160000006c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f6620603d3d0000f40d1000190000000d0e1000120000001f0e10000c000000d303100001000000f40d1000190000000d0e1000120000001f0e10000c0000002b0e100003000000617373657274696f6e206661696c65643a2060286c6566742020726967687429600a20206c6566743a2060602c0a2072696768743a2060603a20426f72726f774572726f72426f72726f774d75744572726f7270616e69636b656420617420007d0e1000010000007e0e10000300000038601300000000007c0e1000010000007c0e1000010000003a27272c207472756566616c7365202020200000b00e1000200000003200000021000000b00e10002000000033000000120000006c6962726172792f636f72652f7372632f666d742f6275696c646572732e7273e00e1000200000005a000000050000006c6962726172792f636f72652f7372632f736c6963652f6d656d6368722e7273207b202c20207b0a330000000c00000004000000390000003a0000003b0000002c0a00003300000004000000040000003c0000003d0000003e0000007d207d28280a2c0a5d617373657274696f6e206661696c65643a202a63757272203e203139000000120410001b000000e601000005000000940f10001b0000001908000016000000940f10001b000000120800001e0000006c6962726172792f636f72652f7372632f666d742f6d6f642e727330620000003300000004000000040000003f00000033000000040000000400000040000000000102004e101000260000006672616d655f737570706f72743a3a686173682f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f737570706f72742f7372632f686173682e7273496e76616c696420726576657273653a2068617368206c656e67746820746f6f2073686f72743300000001000000010000002c0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f73797374656d2f7372632f6c696d6974732e72734275696c6465722066696e6973686564207769746820606275696c645f6f725f70616e6963603b205468652070616e69632069732065787065637465642069662072756e74696d65207765696768747320617265206e6f7420636f7272656374841010005c000000aa010000160000003a636f6465000000386013000000000000000000ffffffff010000000000000082800000000000008a8000000000008000800080000000808b800000000000000100008000000000818000800000008009800000000000808a00000000000000880000000000000009800080000000000a000080000000008b800080000000008b0000000000008089800000000000800380000000000080028000000000008080000000000000800a800000000000000a0000800000008081800080000000808080000000000080010000800000000008800080000000803300000000000000010000004100000042000000430000003300000000000000010000004100000042000000430000003300000004000000040000004400000001a8010001605354524f424576312e302e3200008c12100054000000680000000d0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6d65726c696e2d322e302e302f7372632f7374726f62652e7273b613100019000000cf13100016000000000000002000000004000000020000000000000002000000000000000300000001000000200000000400000002000000000000000200000000000000030000008c12100054000000880000000d000000781310003e0000008c1210005400000091000000090000008c121000540000005e000000090000008c121000540000005f00000009000000596f75207573656420746865205420666c61672c207768696368207468697320696d706c656d656e746174696f6e20646f65736e277420737570706f7274596f7520747269656420746f20636f6e74696e7565206f702020627574206368616e67656420666c61677320746f200000008c121000540000007c00000015000000496e76616c6964526f756e6457726f6e6757696e6e6572436f756e74536e617073686f74556e617661696c61626c654e706f73456c656374696f6e0033000000040000000400000040000000496e76616c6964566f7465496e76616c6964566f746572496e76616c696457696e6e6572496e76616c696453636f72654e6f46616c6c6261636b436f6e66696775726564330000000400000004000000450000004d696e6572000000330000000400000004000000460000004f6e436861696e46616c6c6261636b00330000000400000004000000470000004461746150726f76696465723300000004000000040000003f0000004e6f4d6f7265566f746572734e706f73456c656374696f6e7300000033000000040000000400000040000000536e617073686f74556e417661696c61626c65506f6f6c5375626d697373696f6e4661696c65645072654469737061746368436865636b734661696c6564466561736962696c697479000000330000000400000004000000450000004c6f636b3300000004000000040000003f0000004e6f53746f726564536f6c7574696f6e536f6c7574696f6e43616c6c496e76616c69644661696c6564546f53746f7265536f6c7574696f6e00000000441610000e00000000000000541610000100000000000000000000005c161000010000000000000000000000641610000600000000000000386013000000000000000000000000006c161000010000000000000000000000741610000700000000000000386013000000000000000000000000007c16100001000000000000004e6577417574686f7269746965730000091710000d000000d3161000360000005061757365640000ac16100027000000526573756d65640084161000280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e205c5b617574686f726974795f7365745c5d417574686f726974794c69737400007f4810005b000000900000002e000000000000005417100007000000000000005c1710000200000000000000000000006c17100003000000000000004f6666656e6365006ca711000400000070a711000e0000008417100055000000d91710004e000000271810001400000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e205c5b6b696e642c2074696d65736c6f745c5d2e0000000000681810000a00000000000000c08b12000100000000000000000000007418100002000000000000004e657753657373696f6e00008418100059000000dd18100022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e7420697320746865205c5b73657373696f6e5f696e6465785c5d2c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e53746f72656452616e67650000000000006419100010000000000000007419100002000000000000000000000084191000020000000000000000000000941910000e0000000000000038601300000000000000000000000000a419100001000000000000004261746368496e746572727570746564587e130003000000edec10000d000000df19100056000000351a1000240000004261746368436f6d706c657465640000ac19100033000000204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e205c5b696e6465782c206572726f725c5d436f646563206572726f724572726f720000000c1b100022000000401c100031000000725c130003000000fb9a120001000000131c10002d000000725c130003000000fb9a120001000000d61b10003d000000fb9a120001000000611b10001a000000b11b100023000000d41b100002000000611b10001a0000007b1b100036000000725c130003000000fb9a1200010000000c1b1000220000002e1b100033000000725c130003000000fb9a12000100000073656e64696e67207468652048524d50206d65737361676520617420696e6465782020776f756c642065786365656420746865206e656f6769746961746564206368616e6e656c20746f74616c2073697a652020287468652048524d50206d65737361676520617420696e64657820206578636565647320746865206e65676f746961746564206368616e6e656c206d6178696d756d206d6573736167652073697a6520282069732073656e7420746f2061206e6f6e206578697374656e74206368616e6e656c202d3e7468652048524d50206d6573736167657320617265206e6f7420736f727465642028666972737420756e736f7274656420697320617420696e646578206d6f72652048524d50206d65737361676573207468616e207065726d697474656420627920636f6e666967202820776f756c642065786365656420746865206e656f6769746961746564206368616e6e656c20636170616369747920202800000000000000f81c100014000000000000000c1d10000400000000000000000000002c1d10000200000000000000000000003c1d1000130000000000000064101100020000000000000000000000501d1000010000000000000000000000581d10000d00000000000000681d1000020000000000000000000000781d100001000000000000004f70656e4368616e6e656c526571756573746564eb83130006000000eb83130006000000587e130003000000587e130003000000e41d10001d000000011e1000480000004f70656e4368616e6e656c416363657074656400b21d1000320000004368616e6e656c436c6f736564000000eb83130006000000bc8e10000d000000801d1000320000002048524d50206368616e6e656c20636c6f7365642e205c5b62795f70617261636861696e2c206368616e6e656c5f69645c5d204f70656e2048524d50206368616e6e656c2061636365707465642e205c5b73656e6465722c20726563697069656e745c5d204f70656e2048524d50206368616e6e656c207265717565737465642e205c5b73656e6465722c20726563697069656e742c2070726f706f7365645f6d61785f63617061636974792c2070726f706f7365645f6d61785f6d6573736167655f73697a655c5d000000561f100046000000725c130003000000fb9a120001000000271f10002f000000725c130003000000fb9a120001000000f21e100013000000051f100022000000725c130003000000fb9a120001000000b41e10003e000000725c130003000000fb9a12000100000074686520756d7020717565756520776f756c642068617665206d6f7265206974656d73207468616e207065726d697474656420627920636f6e6669672028757077617264206d6573736167652069647820206c6172676572207468616e207065726d697474656420627920636f6e66696720286d6f726520757077617264206d65737361676573207468616e207065726d697474656420627920636f6e666967202874686520756d7020717565756520776f756c6420686176652067726f776e207061737420746865206d61782073697a65207065726d697474656420627920636f6e666967202800000000782010001200000000000000e44313000100000000000000000000008c201000010000000000000000000000942010001200000000000000e4431300010000000000000000000000a8201000010000000000000000000000b02010001400000000000000e4431300010000000000000000000000c4201000010000000000000000000000cc2010000c00000000000000e4431300010000000000000000000000d8201000010000000000000000000000e02010000c00000000000000ec201000020000000000000000000000fc201000010000000000000043757272656e74436f6465557064617465640000e52110003600000043757272656e7448656164557064617465640000af21100036000000436f6465557067726164655363686564756c6564752110003a0000004e6577486561644e6f7465644321100032000000416374696f6e517565756564eb83130006000000987413000c000000042110003f0000002041207061726120686173206265656e2071756575656420746f20657865637574652070656e64696e6720616374696f6e732e205c5b706172615f69645c5d2041206e6577206865616420686173206265656e206e6f74656420666f72206120506172612e205c5b706172615f69645c5d204120636f6465207570677261646520686173206265656e207363686564756c656420666f72206120506172612e205c5b706172615f69645c5d2043757272656e74206865616420686173206265656e207570646174656420666f72206120506172612e205c5b706172615f69645c5d2043757272656e7420636f646520686173206265656e207570646174656420666f72206120506172612e205c5b706172615f69645c5d0000000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f0000007cc611002d0000004c00000021000000ba2210001e000000d8221000190000008422100036000000444d51206973206e6f7420656d7074792c206275742070726f6365737365645f646f776e776172645f6d65737361676573206973203070726f6365737365645f646f776e776172645f6d65737361676573203d202c2062757420646d715f6c656e677468206973206f6e6c7920307800f122100002000000000000002000000004000000020000000000000002000000000000000300000000000000200000000800000002000000000000000000000002000000030000004423100003000000e280a672656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b20716564000033000000080000000400000048000000b12310006d0000006a00000012000000726573756c742063616e6e6f742066697420696e20753132382f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727363616e6e6f74206669742061206e756d62657220696e746f2075313238004c24100066000000a30000001b0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e727300004c2410006600000074000000090000004c2410006600000085000000090000004c241000660000009700000009000000000000000000000000000000617474656d707420746f20646976696465206279207a65726f0000004c241000660000004b0000000d000000330000000000000001000000490000004c241000660000007b0100001a0000004c2410006600000069010000280000004c241000660000006a010000280000003300000000000000010000004a0000004c24100066000000720100001b0000004c24100066000000730100001b0000004c24100066000000d70100001c000000617474656d707420746f206469766964652077697468206f766572666c6f7700beff11006a0000004c0600000100000042616265565246496e4f7574436f6e74657874736c6f74206e756d62657263757272656e742065706f6368636861696e2072616e646f6d6e6573730033000000040000000400000044000000466174616c4572726f725265706f72746564496e686572656e74446174614578697374733300000004000000040000004b0000004465636f64696e674661696c656400003300000004000000040000004c000000330000000000000001000000120000008c2610006b000000ce0000002a0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e7273486f737420746f207761736d2070726f766964657320612076616c696420656e756d206469736372696d696e616e743b2071656400330000000000000001000000320000004c2710006d000000bb0100001a0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e7273486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b2071656400330000000000000001000000120000004c2710006d000000090100002600000072756e74696d6552756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e67000000000000000000000000000000617474656d707420746f20646976696465206279207a65726f0000006c281000670000005d0000002c0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e72735472616e73616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c6420657868617573742074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f7200003300000000000000010000004d0000004e000000430000003300000004000000040000004f000000500000005100000048617368206e6f7420657175616c41726974686d65746963330000000400000004000000520000003300000004000000040000003f00000043616e6e6f744c6f6f6b75704261644f726967696e4d6f64756c6500330000000400000004000000440000006572726f7200000033000000040000000400000053000000436f6e73756d657252656d61696e696e674e6f50726f766964657273546f6b656e0000003300000004000000040000005400000046726f7a656e4e6f46756e6473576f756c6444696542656c6f774d696e696d756d43616e6e6f74437265617465556e6b6e6f776e41737365744469766973696f6e42795a65726f556e646572666c6f773300000004000000040000003f0000004475706c69636174655265706f72744f746865724f6666656e63654572726f72748b130063000000470000001f000000748b13006300000050000000140000006c656e20213d20302073696e6365206c656e2025203220213d20303b20696e6e6572206861732061206c61737420656c656d656e743b207165640000f42c1000600000003d000000120000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c657665632e7273f42c1000600000006000000033000000f42c100060000000600000000d000000f42c100060000000690000000f000000f42c1000600000006b0000000f000000f42c1000600000006b0000003e000000f42c1000600000009100000039000000f42c1000600000009100000011000000f42c1000600000009300000011000000f42c1000600000009400000040000000f42c100060000000940000004e000000142e1000620000009800000017000000142e10006200000096000000290000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6e6962626c65736c6963652e72730000142e1000620000004000000012000000142e1000620000004f0000002d000000142e1000620000005500000032000000142e100062000000dd0000000f000000142e100062000000df0000000f000000142e100062000000df0000003d000000617373657274696f6e206661696c65643a20696e646578203c3d206c656e00009c691300530000005f05000009000000e42511005a0000008d0000003c000000e42511005a0000008d00000051000000e42511005a0000008d00000031000000582f1000540000004b00000042000000582f1000540000004a0000003e0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6f64652e7273582f1000540000006b00000022000000582f1000540000009a00000032000000582f100054000000aa0000003e000000e42511005a0000008600000031000000e42511005a0000008600000042000000e42511005a0000008600000026000000e42511005a000000870000001d000000e42511005a000000870000000d000000e42511005a0000008e00000018000000e42511005a0000008e0000000d0000003300000000000000010000005500000055000000560000003300000000000000010000005500000057000000560000000000000000000000c0301000070000000000000000000000c73010000e00000000000000020000003c2300000000000000000000d83010000e000000000000000500000077657374656e647061726974792d77657374656e64000000df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a05000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d0100000049eaaf1b548a0cb00100000091d5df18b0d2cf5801000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a8010000006772616e62616265696d6f6e706172616173676e617564690000000040787d010065cd1d00e1f505d85aae1ec0542205b0508f1f38e4750488467020d853e903603c5121d0bf760338323222a8591903402013236039cd02480ef423a82a8f0268f8d42470955c02b8dab525c05a3302d8c4962648bd1102e0b27727a855f601e8a05828e8fedf0180773929c0cacd01586d1a2af8f1be019053fb2a50d8b201d00edc2be0fca80138edbc2c48f2a001e06d9d2d80669a01c80d7e2e500f9501c0575e2f08b6900140323f30e0278d0148202031b0418a0108a3ff3120e8870120bedf32f0fb85013856c03398698401f0fda03478218301b8d87f35d8178201d8c26036183d8101b8223e37508d800188d21c38c8fc7f0168b5f93898877f01a829d139d8297f0120d6ab3ab8db7e0168ae803b389d7e0100ca9a3b68957e0157657374656e6453797374656d4261626554696d657374616d70496e646963657342616c616e636573417574686f72736869704f6666656e636573486973746f726963616c4772616e647061417574686f72697479446973636f766572795574696c6974794964656e746974795265636f766572795363686564756c65725375646f456c656374696f6e50726f76696465724d756c7469506861736550617261636861696e734f726967696e50617261636861696e73436f6e66696775726174696f6e5061726173496e636c7573696f6e5061726173496e686572656e7450617261735363686564756c65725061726173496e697469616c697a65725061726173446d705061726173556d70506172617348726d70506172617353657373696f6e496e666f50617261735375646f5772617070657241756374696f6e7343726f77646c6f616e58636d50616c6c657400580000002c0000000400000059000000590000005a00000000000000c732100006000000000000005b000000000000000000000000000000000000000000000000000000000000005c0000000000000000000000000000005d0000000000000000000000000000005e0000000000000000000000000000005f000000000000000000000000000000000000005edf1000180000000000000060000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000001900000000000000cd321000040000000000000062000000000000000000000000000000000000000000000000000000000000006300000000000000000000000200000000000000000000000000000000000000640000000000000000000000000000006500000000000000000000000100000000000000d1321000090000000000000066000000000000000000000000000000000000000000000000000000000000006700000000000000000000000200000000000000000000000000000000000000680000000000000000000000000000006100000000000000000000000200000000000000da321000070000000000000069000000000000000000000000000000000000000000000000000000000000006a0000000000000000000000000000006b0000000000000000000000000000006c0000000000000000000000000000006d00000000000000000000000300000000000000e132100008000000000000006e000000000000000000000000000000000000000000000000000000000000006f00000000000000000000000000000070000000000000000000000000000000710000000000000000000000000000007200000000000000000000000400000000000000dc971200120000000000000073000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000740000000000000000000000000000006100000000000000000000001a00000000000000e93210000a00000000000000750000000000000000000000000000000000000000000000000000000000000076000000000000000000000002000000000000000000000000000000000000006100000000000000000000000000000077000000000000000000000005000000000000007024120007000000000000007800000000000000000000000000000000000000000000000000000000000000790000000000000000000000000000007a0000000000000000000000000000007b0000000000000000000000000000007c00000000000000000000000600000000000000f332100008000000000000007d00000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000007e000000000000000000000000000000610000000000000000000000000000006100000000000000000000000700000000000000fb3210000a0000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000001b00000000000000b64f110007000000000000007f00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000008100000000000000000000000000000061000000000000000000000000000000820000000000000000000000080000000000000005331000070000000000000083000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000085000000000000000000000000000000610000000000000000000000000000008600000000000000000000000a00000000000000e0601300080000000000000087000000000000000000000000000000000000000000000000000000000000008800000000000000000000000000000089000000000000000000000000000000610000000000000000000000000000008a00000000000000000000000b000000000000000c331000120000000200000000000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000000c000000000000001e331000070000000200000000000000000000000000000000000000000000000000000000000000000000008b0000000000000000000000000000008c0000000000000000000000000000006100000000000000000000000000000061000000000000000000000010000000000000002533100008000000000000008d000000000000000000000000000000000000000000000000000000000000008e0000000000000000000000000000008f0000000000000000000000000000009000000000000000000000000000000091000000000000000000000011000000000000002d331000080000000000000092000000000000000000000000000000000000000000000000000000000000009300000000000000000000000000000094000000000000000000000000000000950000000000000000000000000000009600000000000000000000001200000000000000f8c512000700000000000000970000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000990000000000000000000000000000009a0000000000000000000000000000009b000000000000000000000013000000000000003533100009000000000000009c000000000000000000000000000000000000000000000000000000000000009d0000000000000000000000000000009e000000000000000000000000000000610000000000000000000000000000009f000000000000000000000014000000000000003e3310000400000000000000a000000000000000000000000000000000000000000000000000000000000000a1000000000000000000000000000000a200000000000000000000000000000061000000000000000000000000000000a3000000000000000000000015000000000000002cff12000500000000000000a400000000000000000000000000000000000000000000000000000000000000a5000000000000000000000000000000a6000000000000000000000000000000a7000000000000000000000000000000a800000000000000000000001600000000000000ed5011000800000000000000a900000000000000000000000000000000000000000000000000000000000000aa000000000000000000000000000000ab000000000000000000000000000000ac000000000000000000000000000000ad00000000000000000000001700000000000000423310001a00000000000000ae00000000000000000000000000000000000000000000000000000000000000af000000000000000000000000000000b0000000000000000000000000000000b1000000000000000000000000000000b2000000000000000000000018000000000000005c3310001000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000006100000000000000000000000000000061000000000000000000000029000000000000006c3310001700000000000000b300000000000000000000000000000000000000000000000000000000000000b40000000000000000000000020000000000000000000000000000000000000061000000000000000000000000000000b500000000000000000000002a00000000000000d8d610000b00000000000000b6000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000002b00000000000000833310000e00000000000000b70000000000000000000000000000000000000000000000000000000000000061000000000000000000000000000000b800000000000000000000000000000061000000000000000000000000000000b900000000000000000000002c00000000000000913310000d00000000000000ba00000000000000000000000000000000000000000000000000000000000000bb0000000000000000000000020000000000000000000000000000000000000061000000000000000000000000000000bc00000000000000000000002d000000000000009e3310000e00000000000000bd000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000002e000000000000006c2013000500000000000000be00000000000000000000000000000000000000000000000000000000000000bf000000000000000000000000000000c000000000000000000000000000000061000000000000000000000000000000c100000000000000000000002f00000000000000ac3310001000000000000000c200000000000000000000000000000000000000000000000000000000000000c300000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000003000000000000000bc3310000800000000000000c4000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000003100000000000000c43310000800000000000000c5000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000003200000000000000cc3310000900000000000000c600000000000000000000000000000000000000000000000000000000000000c7000000000000000000000000000000c800000000000000000000000000000061000000000000000000000000000000c900000000000000000000003300000000000000d53310001000000000000000ca000000000000000000000000000000000000000000000000000000000000006100000000000000000000000200000000000000000000000000000000000000610000000000000000000000000000006100000000000000000000003400000000000000632013000900000000000000cb00000000000000000000000000000000000000000000000000000000000000cc000000000000000000000000000000cd000000000000000000000000000000ce000000000000000000000000000000cf00000000000000000000003c00000000000000925111000500000000000000d000000000000000000000000000000000000000000000000000000000000000d1000000000000000000000000000000d2000000000000000000000000000000d3000000000000000000000000000000d400000000000000000000003d00000000000000e533100010000000020000000000000000000000000000000000000000000000000000000000000000000000d50000000000000000000000020000000000000000000000000000000000000061000000000000000000000000000000d600000000000000000000003e00000000000000f53310000800000000000000d700000000000000000000000000000000000000000000000000000000000000d8000000000000000000000000000000d9000000000000000000000000000000da000000000000000000000000000000db00000000000000000000003f00000000000000fd3310000900000000000000dc00000000000000000000000000000000000000000000000000000000000000dd000000000000000000000000000000de000000000000000000000000000000df000000000000000000000000000000e000000000000000000000004000000000000000063410000900000000000000e100000000000000000000000000000000000000000000000000000000000000e2000000000000000000000000000000e300000000000000000000000000000061000000000000000000000000000000e400000000000000000000006300000074696d737461703054696d657374616d7020696e686572656e742064617461206e6f7420636f72726563746c7920656e636f646564000000330000000900000001000000e5000000184710005c000000e50000001200000054696d657374616d7020696e686572656e742064617461206d7573742062652070726f7669646564184710005c000000e6000000120000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f74696d657374616d702f7372632f6c69622e7273184710005c000000d300000012000000184710005c000000d400000012000000717569745f73756272656d6f76655f73756272656e616d655f7375626164645f7375626b696c6c5f6964656e7469747970726f766964655f6a756467656d656e747365745f6669656c64737365745f6163636f756e745f69647365745f66656563616e63656c5f72657175657374726571756573745f6a756467656d656e74636c6561725f6964656e746974797365745f737562737365745f6964656e746974796164645f726567697374726172706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c657270616c6c65745f6964656e746974793a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6964656e746974792f7372632f6c69622e727370616c6c65745f74696d657374616d703a3a70616c6c6574706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d70736574000000000000bc4a10001500000000000000d44a1000010000000000000000000000dc4a10001f00000000000000fc4a1000010000000000000000000000044b10001b00000000000000204b1000010000000000000000000000284b100023000000000000004c4b1000010000000000000000000000544b10001e00000000000000744b10000100000000000000000000007c4b10002600000000000000a44b1000010000000000000000000000ac4b10001c00000000000000c84b1000010000000000000000000000d04b10001f00000000000000f04b1000010000000000000000000000f84b10001c00000000000000144c10000100000000000000000000001c4c10001c00000000000000384c1000010000000000000000000000404c10002100000000000000644c10000100000000000000000000006c4c10001e000000000000008c4c1000010000000000000000000000944c10001c00000000000000b04c1000010000000000000000000000b84c10001b00000000000000d44c1000010000000000000000000000dc4c10001f00000000000000fc4c100001000000000000004f70656e48726d704368616e6e656c546f53656c66000000d74f1000320000004f70656e48726d704368616e6e656c496e76616c6964526563697069656e7400b44f1000230000004f70656e48726d704368616e6e656c5a65726f436170616369747900944f1000200000004f70656e48726d704368616e6e656c4361706163697479457863656564734c696d697400634f1000310000004f70656e48726d704368616e6e656c5a65726f4d65737361676553697a6500003a4f1000290000004f70656e48726d704368616e6e656c4d65737361676553697a65457863656564734c696d69740000ef4e10004b0000004f70656e48726d704368616e6e656c416c7265616479457869737473d44e10001b0000004f70656e48726d704368616e6e656c416c7265616479526571756573746564009f4e1000350000004f70656e48726d704368616e6e656c4c696d69744578636565646564574e10004800000041636365707448726d704368616e6e656c446f65736e7445786973741e4e10003900000041636365707448726d704368616e6e656c416c7265616479436f6e6669726d6564000000fc4d10002200000041636365707448726d704368616e6e656c4c696d697445786365656465640000b24d10004a000000436c6f736548726d704368616e6e656c556e617574686f72697a65645c4d100056000000436c6f736548726d704368616e6e656c446f65736e74457869737400344d100028000000436c6f736548726d704368616e6e656c416c7265616479556e64657277617900044d10003000000020546865206368616e6e656c20636c6f7365207265717565737420697320616c7265616479207265717565737465642e20546865206368616e6e656c20746f20626520636c6f73656420646f65736e27742065786973742e20546865206f726967696e20747269657320746f20636c6f73652061206368616e6e656c207768657265206974206973206e656974686572207468652073656e646572206e6f722074686520726563697069656e742e2054686520726563697069656e7420616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f77656420696e626f756e64206368616e6e656c732e20546865206368616e6e656c20697320616c726561647920636f6e6669726d65642e20546865206368616e6e656c2066726f6d207468652073656e64657220746f20746865206f726967696e20646f65736e27742065786973742e205468652073656e64657220616c72656164792068617320746865206d6178696d756d206e756d626572206f6620616c6c6f776564206f7574626f756e64206368616e6e656c732e20546865726520697320616c72656164792061207265717565737420746f206f70656e207468652073616d65206368616e6e656c2e20546865206368616e6e656c20616c72656164792065786973747320546865206f70656e20726571756573742072657175657374656420746865206d6573736167652073697a65207468617420657863656564732074686520676c6f62616c206c696d69742e2054686520726571756573746564206d6178696d756d206d6573736167652073697a6520697320302e205468652072657175657374656420636170616369747920657863656564732074686520676c6f62616c206c696d69742e2054686520726571756573746564206361706163697479206973207a65726f2e2054686520726563697069656e74206973206e6f7420612076616c696420706172612e205468652073656e64657220747269656420746f206f70656e2061206368616e6e656c20746f207468656d73656c7665732e666f7263655f70726f636573735f68726d705f636c6f7365666f7263655f70726f636573735f68726d705f6f70656e666f7263655f636c65616e5f68726d7068726d705f636c6f73655f6368616e6e656c68726d705f6163636570745f6f70656e5f6368616e6e656c68726d705f696e69745f6f70656e5f6368616e6e656c7cc611002d000000cd0000000100000053757065724f66537562734f664964656e746974794f6654696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b00184710005c000000bc0000000d00000054696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b730000184710005c000000be0000000d00000054696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b00184710005c000000a10000000d00000048726d7048726d704368616e6e656c436f6e74656e74730028b61100280000003a0200001e00000063616e277420626520604e6f6e65602064756520746f2074686520696e76617269616e74207468617420746865206c69737420636f6e7461696e73207468652073616d65206974656d7320617320746865207365743b20716564000028b61100280000003b0200005a0000004a757374207075736865643b2070656e64696e672e6c656e2829203e20303b2072656a69675f6465706f7369742072657475726e7320536f6d653b2071656400574d110058000000900100001d000000b85210003600000080521000380000004c6f676963206572726f723a204163636f756e7420616c72656164792064656164207768656e207265647563696e672070726f76696465724c6f676963206572726f723a20556e657870656374656420756e646572666c6f7720696e207265647563696e672070726f76696465720000f8521000360000004c6f676963206572726f723a20556e657870656374656420756e646572666c6f7720696e207265647563696e6720636f6e73756d65720000f75310002b000000d2531000250000006672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61702f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e7273496e76616c6964207472616e736c6174653a206661696c20746f206465636f6465206b6579496e76616c6964207472616e736c6174653a206661696c20746f206465636f6465206f6c642076616c75654e6f74537562546f6f4d616e7952656769737472617273546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d6564546f6f4d616e795375624163636f756e74734e6f744f776e656400000000845610000b000000000000002062130001000000000000000000000090561000010000000000000000000000985610000f0000000000000094461300020000000000000000000000a8561000010000000000000000000000b05610000e0000000000000094461300020000000000000000000000c0561000010000000000000000000000c85610001200000000000000dc561000020000000000000000000000ec561000010000000000000000000000f45610001400000000000000dc561000020000000000000000000000085710000100000000000000000000006f5410000e00000000000000dc56100002000000000000000000000010571000010000000000000000000000185710000e00000000000000285710000100000000000000000000003057100001000000000000000000000038571000100000000000000080c812000300000000000000000000004857100001000000000000000000000050571000120000000000000080c812000300000000000000000000006457100002000000000000000000000074571000120000000000000080c812000300000000000000000000008857100002000000000000004964656e7469747953657400585a1000440000004964656e74697479436c656172656400135a1000450000004964656e746974794b696c6c65640000d0591000430000004a756467656d656e7452657175657374656400007a62130009000000035910000e0000008f591000410000004a756467656d656e74556e726571756573746564535910003c000000115910004200000052656769737472617241646465640000035910000e000000d85810002b0000005375624964656e74697479416464656483581000550000005375624964656e7469747952656d6f766564000029581000430000006c581000170000005375624964656e746974795265766f6b656400009857100047000000df5710004a0000002041207375622d6964656e746974792077617320636c65617265642c20616e642074686520676976656e206465706f7369742072657061747269617465642066726f6d20746865206d61696e206964656e74697479206163636f756e7420746f20746865207375622d6964656e74697479206163636f756e742e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e74697479207761732072656d6f7665642066726f6d20616e206964656e7469747920616e6420746865206465706f7369742066726565642e205c5b7375622c206d61696e2c206465706f7369745c5d2041207375622d6964656e746974792077617320616464656420746f20616e206964656e7469747920616e6420746865206465706f73697420706169642e205c5b7375622c206d61696e2c206465706f7369745c5d204120726567697374726172207761732061646465642e205c5b7265676973747261725f696e6465785c5d526567697374726172496e6465782041206a756467656d656e742077617320676976656e2062792061207265676973747261722e205c5b7461726765742c207265676973747261725f696e6465785c5d2041206a756467656d656e74207265717565737420776173207265747261637465642e205c5b77686f2c207265676973747261725f696e6465785c5d2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e205c5b77686f2c207265676973747261725f696e6465785c5d2041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e205c5b77686f2c206465706f7369745c5d2041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e205c5b77686f5c5d00000000354810000d0000000000000044e51200010000000000000000000000305d10000d0000000000000000000000294810000c00000000000000985d1000010000000000000000000000b05d1000130000000000000000000000214810000800000000000000485e1000010000000000000000000000605e1000150000000000000000000000134810000e0000000000000038601300000000000000000000000000085f1000120000000000000000000000024810001100000000000000985f1000020000000000000000000000c85f1000170000000000000000000000f44710000e000000000000008060100001000000000000000000000098601000110000000000000000000000ed471000070000000000000020611000020000000000000000000000506110000d0000000000000000000000df4710000e00000000000000b8611000020000000000000000000000e86110000d0000000000000000000000d54710000a0000000000000050621000020000000000000000000000806210000d0000000000000000000000c44710001100000000000000e862100003000000000000000000000030631000130000000000000000000000b74710000d0000000000000020be1200010000000000000000000000c8631000130000000000000000000000b047100007000000000000006064100002000000000000000000000090641000070000000000000000000000a64710000a0000000000000060641000020000000000000000000000c86410000400000000000000000000009c4710000a00000000000000e86410000100000000000000000000000065100007000000000000000000000094471000080000000000000038601300000000000000000000000000386510000a00000000000000287810001f000000386013000000000047781000400000003860130000000000877810002b0000003860130000000000b2781000260000003860130000000000f96513000b000000d87810004a000000227910002700000016b412000d0000006f6613000c000000000000001878100004000000000000001c7810000c0000001e7610004b00000038601300000000006976100056000000bf761000150000003860130000000000c5651300340000003860130000000000d4761000240000003860130000000000f8761000230000003860130000000000f96513000b0000001b771000120000002d771000480000007577100039000000ae77100021000000cf7710004900000016b412000d0000006f6613000c000000000000000176100004000000000000000576100019000000d1731000240000003860130000000000f5731000560000004b7410004c00000038601300000000003266100059000000867210000a0000003860130000000000977410002d0000003860130000000000f96513000b000000c47410000d000000d17410003a000000fc721000360000000b751000220000002d7510000600000033751000380000006b751000300000009b75100031000000cc751000350000006f6613000c000000fb7110004f00000038601300000000004a7210003c00000038601300000000003266100059000000867210000a000000386013000000000090721000270000003860130000000000f96513000b000000b772100011000000c872100034000000fc7210003600000032731000490000007b731000230000009e7310003300000016b412000d0000006f6613000c000000000000002f6c10000900000000000000386c10001700000000000000f47110000700000000000000f5511300150000003a7010002600000038601300000000006070100056000000b6701000070000003860130000000000366f10004e000000846f1000150000003860130000000000bd70100048000000057110005600000038601300000000005b7110000d000000687110002f000000977110000400000038601300000000009b7110002a0000003860130000000000f96513000b000000aa6b10000e000000f869100021000000c57110002f00000016b412000d0000006f6613000c000000000000002f6c10000900000000000000035910000e000000dc6e10001b0000003860130000000000f76e10003f0000003860130000000000366f10004e000000846f1000150000003860130000000000996f1000520000003860130000000000eb6f10002c0000003860130000000000f96513000b000000aa6b10000e000000f869100021000000177010002300000006fc12000c0000006f6613000c00000000000000b42913000500000000000000386c10001700000000000000d96e10000300000000000000f551130015000000426e1000470000003860130000000000656a1000560000009a6c1000290000003860130000000000c36c10003e000000896e1000160000003860130000000000f96513000b000000456d10000a0000004f6d10001f0000009f6e10003a0000006f6613000c00000000000000b42913000500000000000000386c100017000000000000002b67130003000000000000009b6813000c000000bc6d1000300000003860130000000000656a1000560000009a6c1000290000003860130000000000c36c10003e000000ec6d10001d0000003860130000000000f96513000b000000456d10000a0000004f6d10001f000000096e1000390000006f6613000c00000000000000b42913000500000000000000386c10001700000000000000a86d10000600000000000000ae6d10000e0000006f6c10002b0000003860130000000000656a1000560000009a6c1000290000003860130000000000c36c10003e000000016d1000440000003860130000000000f96513000b000000456d10000a0000004f6d10001f0000006e6d10003a0000006f6613000c000000000000002f6c10000900000000000000386c100017000000000000001dc2120006000000000000007e66130023000000000000004f6c10000900000000000000586c100017000000366a10002f0000003860130000000000656a100056000000bb6a10002d0000003860130000000000e86a1000490000004c69100056000000a26910001e000000316b1000530000003860130000000000846b1000260000003860130000000000f96513000b000000aa6b10000e000000b86b100022000000da6b100026000000006c10002f00000016b412000d0000006f6613000c000000f067100051000000386013000000000041681000590000009a68100052000000ec6810002100000038601300000000000d6910003f00000038601300000000004c69100056000000a26910001e0000003860130000000000c0691000260000003860130000000000f96513000b000000e669100012000000f869100021000000196a10001d00000016b412000d0000006f6613000c000000000000008967100003000000000000007e661300230000000000000039b411000400000000000000ec67100004000000c06710002c0000003860130000000000ac65100058000000636710000f0000003860130000000000326610005900000072671000170000008c67100034000000386013000000000032661000590000007267100017000000000000008967100003000000000000007e6613002300000032671000310000003860130000000000ac65100058000000636710000f00000038601300000000003266100059000000726710001700000088651000240000003860130000000000ac65100058000000046610002e000000386013000000000032661000590000008b6610001000000038601300000000009b66100052000000ed661000450000002052656d6f7665207468652073656e6465722061732061207375622d6163636f756e742e205061796d656e743a2042616c616e636520726573657276656420627920612070726576696f757320607365745f73756273602063616c6c20666f72206f6e65207375622077696c6c20626520726570617472696174656420746f207468652073656e64657220282a6e6f742a20746865206f726967696e616c206465706f7369746f72292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d7573742068617665206120726567697374657265642073757065722d6964656e746974792e204e4f54453a20546869732073686f756c64206e6f74206e6f726d616c6c7920626520757365642c206275742069732070726f766964656420696e207468652063617365207468617420746865206e6f6e2d20636f6e74726f6c6c6572206f6620616e206163636f756e74206973206d616c6963696f75736c7920726567697374657265642061732061207375622d6163636f756e742e2052656d6f76652074686520676976656e206163636f756e742066726f6d207468652073656e646572277320737562732e20746f207468652073656e6465722e20737562206964656e74697479206f662060737562602e73756220416c74657220746865206173736f636961746564206e616d65206f662074686520676976656e207375622d6163636f756e742e204164642074686520676976656e206163636f756e7420746f207468652073656e646572277320737562732e446174612052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e2050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e7265675f696e646578436f6d706163743c526567697374726172496e6465783e6a756467656d656e744a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d20604f285229602e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e202d2042656e63686d61726b3a20372e343634202b2052202a20302e33323520c2b57320286d696e207371756172657320616e616c79736973296669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e202d2042656e63686d61726b3a20382e383233202b2052202a20302e333220c2b57320286d696e207371756172657320616e616c797369732920536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e202d2042656e63686d61726b3a20372e333135202b2052202a20302e33323920c2b57320286d696e207371756172657320616e616c79736973296665652043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e20526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e6d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602020202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e2020202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e2020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2e202d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e2053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e202d20604f2850202b205329602020202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e202d2044423a2020202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f28312960292020202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292e2020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292e2020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b205229602020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429202d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060543a3a5265676973747261724f726967696e602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e00000000000000a55010000a00000001050000000000009b6813000c00000000000000cc7a10001a00000000000000000000000000000000000000000000000000000038601300e87a10000000000000000000f87a100003000000000000000000000000000000985010000700000001020000000000009b6813000c00000000000000107b10001400000000000000000000000000000000000000000000000000000038601300247b10000000000000000000347b1000020000000000000000000000000000009f5010000600000001050000000000009b6813000c00000000000000447b10002100000000000000000000000000000000000000000000000000000038601300687b10000000000000000000787b10000500000000000000010000000000000040dc10000a0000000000000000000000a07b10003600000000000000000000000000000000000000000000000000000000000000000000000000000038601300d87b10000000000000000000e87b1000040000000000000001000000526567697374726174696f6e3c42616c616e63654f663c543e3e0000330000000000000001000000e6000000207e1000480000003860130000000000447d10003000000028543a3a4163636f756e7449642c204461746129330000000000000001000000e7000000747d100058000000cc7d1000540000002842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e29000000330000000000000001000000e8000000cf7c10002e0000003860130000000000fd7c1000470000003860130000000000447d1000300000005665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e0000330000000000000001000000e9000000087c1000530000005b7c10002a0000003860130000000000857c10004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e2054574f582d4e4f54453a204f4b20e2809520604163636f756e7449646020697320612073656375726520686173682e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00000000b87f10000c00000000000000b13c13000c0000000000000038601300c47f10000000000000000000d47f1000010000000000000000000000dc7f10000c00000000000000b13c13000c0000000000000038601300e87f10000000000000000000f87f1000010000000000000000000000008010001100000000000000b13c13000c0000000000000038601300148010000000000000000000248010000300000000000000000000003c8010000e00000000000000587e13000300000000000000386013004c80100000000000000000005c801000010000000000000000000000648010001300000000000000587e130003000000000000003860130078801000000000000000000088801000020000000000000000000000988010000d00000000000000587e1300030000000000000038601300a88010000000000000000000b8801000020000000000000042617369634465706f736974330000000000000001000000ea00000059831000350000004669656c644465706f736974330000000000000001000000eb0000000e8310004b0000005375624163636f756e744465706f736974000000330000000000000001000000ec0000000f82100059000000688210005c000000c48210004a0000004d61785375624163636f756e74730000330000000000000001000000ed000000cc811000430000004d61784164646974696f6e616c4669656c647300330000000000000001000000ed0000003b8110005900000094811000380000004d617852656769737472617273000000330000000000000001000000ee000000c8801000540000001c8110001f000000204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c6578697479206f662c20652e672e2c207570646174696e67206a756467656d656e74732e204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4f20726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e20546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f722074686520666163742074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c20626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e2054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479000000000000134910000300000000000000bc831000010000000000000000000000d48310000f000000000000000000000071861000030000000000000074861000120000004c8410001600000038601300000000006284100056000000b8841000360000003860130000000000ee841000510000003f85100011000000386013000000000050851000360000003860130000000000f96513000b000000868510004d000000d3851000680000003b861000360000006f6613000c00000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e202d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f2831296029202d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e20606f6e5f66696e616c697a656029202d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e6e6f77436f6d706163743c543a3a4d6f6d656e743e0000000000004adc1000030000000000000000000000e5f61100090000000000000000000000000000000000000000000000000000000000000000000000000000003860130048871000000000000000000058871000010000000000000001000000000000004ddc1000090000000000000000000000c2b61200040000000000000000000000000000000000000000000000000000000000000000000000000000003860130060871000000000000000000070871000010000000000000001000000330000000000000001000000ef000000a587100024000000330000000000000001000000f0000000788710002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000048810000d00000000000000e5f611000900000000000000386013001488100000000000000000002488100004000000000000004d696e696d756d506572696f64000000330000000000000001000000f1000000448810005a0000009e8810005a000000f888100059000000518910001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e436865636b5370656356657273696f6e48726d7057617465726d61726b7348726d704368616e6e656c4469676573747300000000000000725010001600000000000000a88a1000030000000000000000000000f08a10000a00000000000000000000005a5010001800000000000000408b1000010000000000000000000000588b1000030000000000000000000000485010001200000000000000708b1000010000000000000000000000888b1000040000000000000000000000385010001000000000000000f8341300010000000000000000000000a88b100005000000000000000000000021501000170000000000000038601300000000000000000000000000d08b100004000000000000000000000009501000180000000000000038601300000000000000000000000000f08b10000400000000000000000000000f9612000900000000000000eb8313000600000000000000f09010001500000000000000587e13000300000000000000059110001900000000000000587e130003000000448f100054000000988f10000c0000003860130000000000a48f100057000000fb8f10005300000038601300000000004e9010004500000038601300000000009390100055000000e89010000800000000000000099612000600000000000000eb83130006000000c98e10003d0000003860130000000000068f10003e00000000000000b28e10000a00000000000000bc8e10000d000000048e1000560000005a8e1000270000003860130000000000818e1000310000001e8d100047000000658d100049000000ae8d1000410000003860130000000000ef8d100015000000b28c10002a0000003860130000000000dc8c1000420000007e8c100034000000108c10002b00000038601300000000003b8c1000430000007e8c10003400000020466f7263652070726f636573732068726d7020636c6f7365206368616e6e656c2072657175657374732e204966207468657265206172652070656e64696e672048524d5020636c6f7365206368616e6e656c2072657175657374732c20796f752063616e2075736520746869732066756e6374696f6e2070726f6365737320616c6c206f662074686f736520726571756573747320696d6d6564696174656c792e20466f7263652070726f636573732068726d70206f70656e206368616e6e656c2072657175657374732e204966207468657265206172652070656e64696e672048524d50206f70656e206368616e6e656c2072657175657374732c20796f752063616e20757365207468697320546869732065787472696e7369632074726967676572732074686520636c65616e7570206f6620616c6c207468652048524d502073746f72616765206974656d73207468617420612070617261206d617920686176652e204e6f726d616c6c7920746869732068617070656e73206f6e6365207065722073657373696f6e2c20627574207468697320616c6c6f777320796f7520746f20747269676765722074686520636c65616e757020696d6d6564696174656c7920666f7220612073706563696669632070617261636861696e2e204f726967696e206d75737420626520526f6f742e20496e69746961746520756e696c61746572616c20636c6f73696e67206f662061206368616e6e656c2e20546865206f726967696e206d75737420626520656974686572207468652073656e646572206f722074686520726563697069656e7420696e20746865206368616e6e656c206265696e6720636c6f7365642e2054686520636c6f737572652063616e206f6e6c792068617070656e206f6e20612073657373696f6e206368616e67652e6368616e6e656c5f696448726d704368616e6e656c49642041636365707420612070656e64696e67206f70656e206368616e6e656c20726571756573742066726f6d2074686520676976656e2073656e6465722e20546865206368616e6e656c2077696c6c206265206f70656e6564206f6e6c79206f6e20746865206e6578742073657373696f6e20626f756e646172792e20496e697469617465206f70656e696e672061206368616e6e656c2066726f6d20612070617261636861696e20746f206120676976656e20726563697069656e74207769746820676976656e206368616e6e656c20706172616d65746572732e202d206070726f706f7365645f6d61785f636170616369747960202d2073706563696669657320686f77206d616e79206d657373616765732063616e20626520696e20746865206368616e6e656c206174206f6e63652e202d206070726f706f7365645f6d61785f6d6573736167655f73697a6560202d2073706563696669657320746865206d6178696d756d2073697a65206f6620616e79206f6620746865206d657373616765732e205468657365206e756d62657273206172652061207375626a65637420746f207468652072656c61792d636861696e20636f6e66696775726174696f6e206c696d6974732e20546865206368616e6e656c2063616e206265206f70656e6564206f6e6c792061667465722074686520726563697069656e7420636f6e6669726d7320697420616e64206f6e6c79206f6e20612073657373696f6e206368616e67652e70726f706f7365645f6d61785f636170616369747970726f706f7365645f6d61785f6d6573736167655f73697a65000000000000a0951000170000000105000000000000bc8e10000d00000000000000b79510001600000000000000000000000000000000000000000000000000000038601300d09510000000000000000000e095100006000000000000000000000000000000109610001b00000000000000000000002b96100012000000000000000000000000000000000000000000000000000000000000000000000000000000386013004096100000000000000000003860130000000000000000000100000000000000509610001b0000000105000000000000eb8313000600000000000000587e130003000000000000000000000000000000000000000000000000000000386013006c96100000000000000000007c96100003000000000000000100000000000000949610001f0000000105000000000000eb8313000600000000000000587e13000300000000000000000000000000000000000000000000000000000038601300b49610000000000000000000c496100003000000000000000100000000000000dc961000180000000105000000000000bc8e10000d00000000000000da7613000200000000000000000000000000000000000000000000000000000038601300f4961000000000000000000004971000070000000000000000000000000000003c9710001c00000000000000000000002b961000120000000000000000000000000000000000000000000000000000000000000000000000000000003860130058971000000000000000000038601300000000000000000001000000000000007d8910000e0000000105000000000000eb83130006000000000000001a6f13000e000000000000000000000000000000000000000000000000000000386013006897100000000000000000007897100003000000000000000000000000000000909710000c0000000105000000000000bc8e10000d000000000000009c9710000b00000000000000000000000000000000000000000000000000000038601300a89710000000000000000000b897100003000000000000000000000000000000d0971000180000000105000000000000eb8313000600000000000000dd8413000b00000000000000000000000000000000000000000000000000000038601300e89710000000000000000000f89710000d00000000000000010000000000000060981000170000000105000000000000eb8313000600000000000000dd8413000b00000000000000000000000000000000000000000000000000000038601300789810000000000000000000386013000000000000000000010000000000000090511000130000000105000000000000bc8e10000d00000000000000889810002700000000000000000000000000000000000000000000000000000038601300b09810000000000000000000c0981000020000000000000001000000000000008b891000120000000105000000000000eb8313000600000000000000d09810002200000000000000000000000000000000000000000000000000000038601300f498100000000000000000000499100007000000000000000100000048726d704f70656e4368616e6e656c526571756573747348726d704f70656e4368616e6e656c52657175657374000000330000000000000001000000f20000008aa110002f00000038601300000000000e9f1000300000003860130000000000e48513000b0000003e9f10004f00000048726d704f70656e4368616e6e656c52657175657374734c6973745665633c48726d704368616e6e656c49643e000000330000000000000001000000f300000048726d704f70656e4368616e6e656c52657175657374436f756e7400330000000000000001000000f400000099a010005a000000f3a010005f00000052a110003800000048726d7041636365707465644368616e6e656c52657175657374436f756e7400330000000000000001000000f40000008d9f10005c000000e99f10005b00000044a010005500000048726d70436c6f73654368616e6e656c5265717565737473330000000000000001000000f50000006a9e100064000000ce9e10004000000038601300000000000e9f1000300000003860130000000000e48513000b0000003e9f10004f00000048726d70436c6f73654368616e6e656c52657175657374734c697374330000000000000001000000f3000000330000000000000001000000f5000000de9d10002e000000e48513000b0000000c9e10005e00000048726d704368616e6e656c7348726d704368616e6e656c00330000000000000001000000f2000000549d10002d000000e48513000b000000819d10005d00000048726d70496e67726573734368616e6e656c73496e646578330000000000000001000000f6000000279b1000560000007d9b10000b0000003860130000000000889b100048000000d09b1000470000003860130000000000c39910000c000000179c1000630000007a9c10000f000000899c100062000000eb9c10000f000000fa9c1000400000003a9d10001a00000048726d704567726573734368616e6e656c73496e64657800330000000000000001000000f60000005665633c496e626f756e6448726d704d6573736167653c543a3a426c6f636b4e756d6265723e3e00330000000000000001000000f7000000a39a10002b000000ce9a1000590000005665633c28543a3a426c6f636b4e756d6265722c205665633c5061726149643e293e0000330000000000000001000000f80000003c9910003d000000799910004a000000c39910000c000000cf9910002a000000f99910003a000000339a100060000000939a100010000000204d61696e7461696e732061206d617070696e6720746861742063616e206265207573656420746f20616e7377657220746865207175657374696f6e3a20576861742070617261732073656e742061206d6573736167652061742074686520676976656e20626c6f636b206e756d62657220666f72206120676976656e2072656369657665722e20496e76617269616e74733a202d2054686520696e6e657220605665633c5061726149643e60206973206e6576657220656d7074792e202d2054686520696e6e657220605665633c5061726149643e602063616e6e6f742073746f72652074776f2073616d652060506172614964602e202d20546865206f7574657220766563746f7220697320736f7274656420617363656e64696e6720627920626c6f636b206e756d62657220616e642063616e6e6f742073746f72652074776f206974656d732077697468207468652073616d65202020626c6f636b206e756d6265722e2053746f7261676520666f7220746865206d6573736167657320666f722065616368206368616e6e656c2e20496e76617269616e743a2063616e6e6f74206265206e6f6e2d656d7074792069662074686520636f72726573706f6e64696e67206368616e6e656c20696e206048726d704368616e6e656c736020697320604e6f6e65602e20496e67726573732f65677265737320696e646578657320616c6c6f7720746f2066696e6420616c6c207468652073656e6465727320616e642072656365697665727320676976656e20746865206f70706f7369746520736964652e20492e652e2028612920696e677265737320696e64657820616c6c6f777320746f2066696e6420616c6c207468652073656e6465727320666f72206120676976656e20726563697069656e742e202862292065677265737320696e64657820616c6c6f777320746f2066696e6420616c6c2074686520726563697069656e747320666f72206120676976656e2073656e6465722e202d20666f72206561636820696e677265737320696e64657820656e74727920666f72206050602065616368206974656d2060496020696e2074686520696e6465782073686f756c642070726573656e7420696e206048726d704368616e6e656c73602020206173206028492c205029602e202d20666f7220656163682065677265737320696e64657820656e74727920666f72206050602065616368206974656d2060456020696e2074686520696e6465782073686f756c642070726573656e7420696e206048726d704368616e6e656c73602020206173206028502c204529602e202d2074686572652073686f756c64206265206e6f206f746865722064616e676c696e67206368616e6e656c7320696e206048726d704368616e6e656c73602e202d2074686520766563746f72732061726520736f727465642e2048524d50206368616e6e656c2064617461206173736f6369617465642077697468206561636820706172612e202d2065616368207061727469636970616e7420696e20746865206368616e6e656c2073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612073657373696f6e2e205468652048524d502077617465726d61726b206173736f6369617465642077697468206561636820706172612e202d2065616368207061726120605060207573656420686572652061732061206b65792073686f756c642073617469736679206050617261733a3a69735f76616c69645f70617261285029602077697468696e20612073657373696f6e2e204120736574206f662070656e64696e672048524d5020636c6f7365206368616e6e656c20726571756573747320746861742061726520676f696e6720746f20626520636c6f73656420647572696e67207468652073657373696f6e206368616e67652e205573656420666f7220636865636b696e67206966206120676976656e206368616e6e656c206973207265676973746572656420666f7220636c6f737572652e2054686520736574206973206163636f6d70616e6965642062792061206c69737420666f7220697465726174696f6e2e202d20546865726520617265206e6f206368616e6e656c7320746861742065786973747320696e206c69737420627574206e6f7420696e207468652073657420616e6420766963652076657273612e2054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732077657265206163636570746564206279206120676976656e20726563697069656e7420706172612e20496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d732060285f2c2058296020776974682060636f6e6669726d6564602073657420746f20747275652c20617320746865206e756d626572206f66206048726d7041636365707465644368616e6e656c52657175657374436f756e746020666f72206058602e2054686973206d617070696e6720747261636b7320686f77206d616e79206f70656e206368616e6e656c2072657175657374732061726520696e6974697461746564206279206120676976656e2073656e64657220706172612e20496e76617269616e743a206048726d704f70656e4368616e6e656c5265717565737473602073686f756c6420636f6e7461696e207468652073616d65206e756d626572206f66206974656d73207468617420686173206028582c205f296020617320746865206e756d626572206f66206048726d704f70656e4368616e6e656c52657175657374436f756e746020666f72206058602e2054686520736574206f662070656e64696e672048524d50206f70656e206368616e6e656c2072657175657374732e506172615363686564756c657200000000000008a410000f000000000000000000000017a41000180000000000000000000000000000000000000000000000000000000000000000000000000000003860130030a41000000000000000000040a410000600000000000000010000000000000070a410000f00000000000000000000007fa41000140000000000000000000000000000000000000000000000000000000000000000000000000000003860130094a410000000000000000000a4a4100004000000000000000100000000000000c4a41000110000000000000000000000d5a410001900000000000000000000000000000000000000000000000000000000000000000000000000000038601300f0a41000000000000000000000a510000800000000000000010000000000000040a51000140000000000000000000000dd8413000b0000000000000000000000000000000000000000000000000000000000000000000000000000003860130054a51000000000000000000064a510000400000000000000010000000000000084a510001100000000000000000000001a6f13000e0000000000000000000000000000000000000000000000000000000000000000000000000000003860130098a510000000000000000000a8a510000600000000000000010000000000000054211300090000000000000000000000d8a510001300000000000000000000000000000000000000000000000000000000000000000000000000000038601300eca510000000000000000000fca5100006000000000000000100000056616c696461746f7247726f7570735665633c5665633c56616c696461746f72496e6465783e3e00330000000000000001000000f700000098ac10005b000000f3ac10005b0000004ead10000e00000038601300000000005cad100060000000bcad10006000000050617261746872656164517565756550617261746872656164436c61696d517565756500330000000000000001000000f9000000b8ab1000460000003860130000000000feab10004500000043ac100055000000417661696c6162696c697479436f7265735665633c4f7074696f6e3c436f72654f636375706965643e3e0000330000000000000001000000fa000000f6a91000670000005daa1000320000008faa100050000000dfaa1000190000003860130000000000f8aa1000360000002eab10003900000067ab10005100000050617261746872656164436c61696d496e646578330000000000000001000000f600000014a91000560000006aa910002d000000386013000000000097a910005f00000053657373696f6e5374617274426c6f636b000000330000000000000001000000f40000004ea71000690000003860130000000000b7a71000560000000da810005800000065a8100056000000bba81000590000005665633c436f726541737369676e6d656e743e00330000000000000001000000fb0000002ca6100038000000386013000000000064a61000530000003860130000000000b7a610007f00000036a71000180000002043757272656e746c79207363686564756c656420636f726573202d20667265652062757420757020746f206265206f636375706965642e20426f756e64656420627920746865206e756d626572206f6620636f7265733a206f6e6520666f7220656163682070617261636861696e20616e642070617261746872656164206d756c7469706c657865722e205468652076616c756520636f6e7461696e656420686572652077696c6c206e6f742062652076616c69642061667465722074686520656e64206f66206120626c6f636b2e2052756e74696d6520415049732073686f756c64206265207573656420746f2064657465726d696e65207363686564756c656420636f7265732f20666f7220746865207570636f6d696e6720626c6f636b2e2054686520626c6f636b206e756d626572207768657265207468652073657373696f6e207374617274206f636375727265642e205573656420746f20747261636b20686f77206d616e792067726f757020726f746174696f6e732068617665206f636375727265642e204e6f7465207468617420696e2074686520636f6e74657874206f662070617261636861696e73206d6f64756c6573207468652073657373696f6e206368616e6765206973207369676e616c6c656420647572696e672074686520626c6f636b20616e6420656e61637465642061742074686520656e64206f662074686520626c6f636b20286174207468652066696e616c697a6174696f6e2073746167652c20746f206265206578616374292e205468757320666f7220616c6c20696e74656e747320616e6420707572706f7365732074686520656666656374206f66207468652073657373696f6e206368616e6765206973206f627365727665642061742074686520626c6f636b20666f6c6c6f77696e67207468652073657373696f6e206368616e67652c20626c6f636b206e756d626572206f66207768696368207765207361766520696e20746869732073746f726167652076616c75652e20416e20696e646578207573656420746f20656e737572652074686174206f6e6c79206f6e6520636c61696d206f6e206120706172617468726561642065786973747320696e20746865207175657565206f722069732063757272656e746c79206265696e672068616e646c656420627920616e206f6363757069656420636f72652e20426f756e64656420627920746865206e756d626572206f66207061726174687265616420636f72657320616e64207363686564756c696e67206c6f6f6b61686561642e20526561736f6e61626c792c203130202a203530203d203530302e204f6e6520656e74727920666f72206561636820617661696c6162696c69747920636f72652e20456e74726965732061726520604e6f6e65602069662074686520636f7265206973206e6f742063757272656e746c79206f636375706965642e2043616e2062652074656d706f726172696c792060536f6d6560206966207363686564756c656420627574206e6f74206f636375706965642e2054686520692774682070617261636861696e2062656c6f6e677320746f20746865206927746820636f72652c2077697468207468652072656d61696e696e6720636f72657320616c6c206265696e6720706172617468726561642d6d756c7469706c65786572732e20426f756e64656420627920746865206d6178696d756d206f6620656974686572206f662074686573652074776f2076616c7565733a2020202a20546865206e756d626572206f662070617261636861696e7320616e642070617261746872656164206d756c7469706c65786572732020202a20546865206e756d626572206f662076616c696461746f727320646976696465642062792060636f6e66696775726174696f6e2e6d61785f76616c696461746f72735f7065725f636f7265602e2041207175657565206f66207570636f6d696e6720636c61696d7320616e6420776869636820636f726520746865792073686f756c64206265206d6170706564206f6e746f2e20546865206e756d626572206f662071756575656420636c61696d7320697320626f756e6465642061742074686520607363686564756c696e675f6c6f6f6b616865616460206d756c7469706c69656420627920746865206e756d626572206f662070617261746872656164206d756c7469706c6578657220636f7265732e20526561736f6e61626c792c203130202a203530203d203530302e20416c6c207468652076616c696461746f722067726f7570732e204f6e6520666f72206561636820636f72652e20496e64696365732061726520696e746f206041637469766556616c696461746f727360202d206e6f74207468652062726f6164657220736574206f6620506f6c6b61646f742076616c696461746f72732c2062757420696e7374656164206a7573742074686520737562736574207573656420666f722070617261636861696e7320647572696e6720746869732073657373696f6e2e20426f756e643a20546865206e756d626572206f6620636f726573206973207468652073756d206f6620746865206e756d62657273206f662070617261636861696e7320616e642070617261746872656164206d756c7469706c65786572732e20526561736f6e61626c792c203130302d313030302e2054686520646f6d696e616e7420666163746f7220697320746865206e756d626572206f662076616c696461746f72733a207361666520757070657220626f756e642061742031306b2e00000000617474656d707420746f20646976696465206279207a65726f00000000000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f0000007cc611002d0000003d0100002a0000007cc611002d0000004101000015000000636f7265206973206e6f74206f7574206f6620626f756e647320616e64207765206172652067756172616e7465656420746f20626520616674657220746865206d6f737420726563656e742073657373696f6e2073746172743b2071656400007cc611002d000000c80100001e0000007cc611002d000000d40100001e0000007cc611002d0000001d02000016000000ddaf100014000000f1af1000300000009aaf100043000000725c130003000000fb9a1200010000006caf10002e000000725c130003000000fb9a1200010000007468652048524d502077617465726d61726b206973206168656164207468652072656c61792d706172656e7420287468652048524d502077617465726d61726b206973206e6f7420616476616e6365642072656c617469766520746f20746865206c6173742077617465726d61726b20287468652048524d502077617465726d61726b20282920646f65736e2774206c616e64206f6e206120626c6f636b2077697468206d6573736167657320726563656976656400000059b010000d00000044b010001500000038601300000000007669130002000000696e73756666696369656e7420636170616369747943617061636974794572726f72000028b61100280000008c0100000100000000000000b2541000120000000000000038b21000010000000000000000000000a4201300080000000000000040b21000010000000000000000000000aa541000080000000000000048b21000010000000000000000000000a05410000a0000000000000050b21000010000000000000000000000965410000a0000000000000058b210000100000000000000000000008c5410000a0000000000000060b210000100000000000000000000007d5410000f0000000000000068b210000100000000000000000000006f5410000e0000000000000070b210000100000000000000000000005f541000100000000000000078b21000010000000000000000000000535410000c0000000000000080b21000010000000000000000000000465410000d0000000000000088b21000010000000000000000000000395410000d0000000000000090b2100001000000000000000000000028541000110000000000000098b21000010000000000000000000000932a12000e00000000000000a0b21000010000000000000000000000225410000600000000000000a8b21000010000000000000000000000c45410000800000000000000b0b21000010000000000000029b410001800000014b4100015000000ffb3100015000000f2b310000d000000e2b3100010000000cfb3100013000000bdb3100012000000acb310001100000099b310001300000083b31000160000006cb310001700000050b310001c00000015b310003b000000f8b210001d000000dbb210001d000000b8b2100023000000205375622d6163636f756e742069736e2774206f776e65642062792073656e6465722e2053656e646572206973206e6f742061207375622d6163636f756e742e204163636f756e7420494420697320616c7265616479206e616d65642e204d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e20546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e62617463685f616c6c61735f646572697661746976656261746368706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265642f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f7368617265642e727370616c6c65745f73657373696f6e3a3a686973746f726963616c2f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f73657373696f6e2f7372632f686973746f726963616c2f6d6f642e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261732f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f70617261732e727370616c6c65745f7574696c6974793a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7574696c6974792f7372632f6c69622e727300000000003c1613000d0000000000000070b6100001000000000000000000000078b610000d0000000000000088b6100001000000000000000000000090b610000e00000000000000a0b61000010000000000000000000000081713000d00000000000000a8b61000010000000000000000000000f01613000f00000000000000b0b61000010000000000000079b710002600000043616e6e6f744f6e626f61726400000033b710004600000043616e6e6f744f6666626f61726400000bb7100028000000e3b6100028000000b8b610002b00000020506172612063616e6e6f7420626520646f776e67726164656420746f206120706172617468726561642e20506172612063616e6e6f7420626520757067726164656420746f20612070617261636861696e2e20506172612063616e6e6f74206265206f6666626f617264656420617420746869732074696d652e20506172612063616e6e6f74206265206f6e626f6172646564206265636175736520697420697320616c726561647920747261636b6564206279206f75722073797374656d2e2050617261206973206e6f74207265676973746572656420696e206f75722073797374656d2e436865636b4e6f6e63650000007fb410002a0000003a00000001000000666f7263655f71756575655f616374696f6e666f7263655f6e6f74655f6e65775f68656164666f7263655f7363686564756c655f636f64655f75706772616465666f7263655f7365745f63757272656e745f68656164666f7263655f7365745f63757272656e745f636f6465467574757265436f6465557067726164657350617374436f64655072756e696e6750617374436f64654861736850617374436f64654d657461000000000000000000000000000000617474656d707420746f20646976696465206279207a65726f4661696c656420746f20636f6e7665727471202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b207165643300000008000000040000004800000018b910006900000051050000010000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e7273486973746f726963616c53657373696f6e73000000000057b41000050000000000000018ba100001000000000000000000000030ba10001200000000000000000000004ab410000d00000000000000c0ba1000020000000000000000000000f0ba10000d000000000000000000000041b41000090000000000000018ba100001000000000000000000000058bb10000d000000000000000000000009c1100005000000000000000ec110001800000088bf100020000000386013000000000045bc10001f000000386013000000000064bc10003c0000003860130000000000a0bc100058000000f8bc1000330000003860130000000000f96513000b0000002bbd1000410000006f6613000c0000003860130000000000a8bf100056000000febf10004d0000004bc0100056000000a1c0100054000000f5c010001400000000000000b42913000500000000000000d3fa12000300000000000000a16613000400000000000000a5661300180000006cbd1000380000003860130000000000a4bd100056000000fabd10003000000038601300000000002abe1000520000007cbe100059000000d5be1000550000002abf10002000000038601300000000004abf10003e0000003860130000000000c565130034000000c0bb10003c000000fcbb100049000000386013000000000045bc10001f000000386013000000000064bc10003c0000003860130000000000a0bc100058000000f8bc1000330000003860130000000000f96513000b0000002bbd1000410000006f6613000c0000002053656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e205468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e204966206f726967696e20697320726f6f74207468656e2063616c6c2061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e20285468697320696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e202d20436f6d706c65786974793a204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e2046696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e20776869636820757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e204e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e206265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e74207468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f316020696e20746865204d756c74697369672070616c6c657420696e73746561642e204e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e2053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c5420617320436f6e6669673e3a3a43616c6c3e00004ab51000290000007101000001000000506172656e7420686173682073686f756c642062652076616c69642e78c210005c000000380100000900000006c310003100000078c210005c0000003f0100000d00000078c210005c000000640100000d0000005369676e617475726520766572696669636174696f6e206661696c65642e000078c210005c0000005501000011000000d4c210003200000078c210005c000000c001000009000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e0078c210005c000000c80100000d00000053746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642e78c210005c000000ce010000090000005472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642e78c210005c000000d0010000090000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6578656375746976652f7372632f6c69622e72734e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e496e76616c696420696e686572656e7420706f736974696f6e20666f722065787472696e73696320617420696e6465782000fc0000006000000008000000fd000000fe000000fc0000006000000008000000ff0000000001000001010000020100000301000004010000050100006661696c656420746f20696e7365727420696e746f20747269654661696c656420746f2067656e657261746520686973746f726963616c20616e6365737472792d696e636c7573696f6e2070726f6f662e0000003300000000000000010000004900000008c4100066000000b0010000290000003300000000000000010000004a00000008c4100066000000b3010000340000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6c69622e7273000028cc11006b000000860000002700000028cc11006b000000950000003400000028cc11006b000000a90000002900000028cc11006b000000bd0000001f00000028cc11006b000000c900000030000000c8c410003e00000050616c6c65742070617261732073746f7261676520697320696e636f6e73697374656e742c20636f6465206e6f7420666f756e6420666f7220686173682000000000000012b810001600000000000000e4c5100002000000000000000000000014c61000010000000000000000000000fcb7100016000000000000001cc610000200000000000000000000004cc61000010000000000000000000000e1b710001b0000000000000054c610000300000000000000000000009cc61000010000000000000000000000ceb7100013000000000000001cc61000020000000000000000000000a4c61000010000000000000000000000bcb710001200000000000000f8341300010000000000000000000000acc61000030000000000000000000000c03813000400000000000000eb8313000600000000000000c9c710000800000000000000d13c13000e00000025c810003f00000000000000c03813000400000000000000eb83130006000000000000001dc810000800000000000000c93c130008000000dcc710004100000000000000c03813000400000000000000eb8313000600000000000000c9c710000800000000000000d13c13000e00000000000000d1c710000b000000000000001a6f13000e00000098c710003100000050c7100048000000c4c610003f00000003c710003e00000041c710000f0000002050757420612070617261636861696e206469726563746c7920696e746f20746865206e6578742073657373696f6e277320616374696f6e2071756575652e2057652063616e277420717565756520697420616e7920736f6f6e6572207468616e207468697320776974686f757420676f696e6720696e746f2074686520696e697469616c697a65722e2e2e204e6f74652061206e657720626c6f636b206865616420666f7220706172612077697468696e2074686520636f6e74657874206f66207468652063757272656e7420626c6f636b2e205363686564756c65206120636f6465207570677261646520666f7220626c6f636b206065787065637465645f6174602e6e65775f636f646565787065637465645f617420536574207468652073746f7261676520666f72207468652063757272656e742070617261636861696e2068656164206461746120696d6d6564696174656c792e6e65775f6865616420536574207468652073746f7261676520666f72207468652070617261636861696e2076616c69646174696f6e20636f646520696d6d6564696174656c792e0000000044cd10000a0000000000000000000000dd8413000b0000000000000000000000000000000000000000000000000000000000000000000000000000003860130050cd1000000000000000000060cd10000100000000000000010000000000000068cd10000e0000000105000000000000eb831300060000000000000076cd10000d0000000000000000000000000000000000000000000000000000003860130084cd1000000000000000000094cd1000010000000000000000000000000000009ccd1000050000000105000000000000eb8313000600000000000000c93c13000800000000000000000000000000000000000000000000000000000038601300a4cd10000000000000000000b4cd100001000000000000000000000000000000bccd10000f0000000105000000000000eb8313000600000000000000410612000400000000000000000000000000000000000000000000000000000038601300cccd10000000000000000000dccd10000300000000000000000000000000000049b810000c0000000105000000000000f4cd100018000000000000004106120004000000000000000000000000000000000000000000000000000000386013000cce100000000000000000001cce10000400000000000000000000000000000055b810000c0000000105000000000000eb83130006000000000000003cce100020000000000000000000000000000000000000000000000000000000386013005cce100000000000000000006cce1000030000000000000001000000000000003ab810000f000000000000000000000084ce10001d00000000000000000000000000000000000000000000000000000000000000000000000000000038601300a4ce10000000000000000000b4ce10000600000000000000010000000000000028b81000120000000105000000000000eb83130006000000000000001a6f13000e00000000000000000000000000000000000000000000000000000038601300e4ce10000000000000000000f4ce1000030000000000000000000000000000000ccf10000e0000000105000000000000eb83130006000000000000004106120004000000000000000000000000000000000000000000000000000000386013001ccf100000000000000000002ccf10000300000000000000000000000000000044cf10000c0000000105000000000000987413000c00000000000000dd8413000b0000000000000000000000000000000000000000000000000000003860130050cf1000000000000000000060cf10000100000000000000010000000000000068cf1000140000000105000000000000eb8313000600000000000000cd9712000f000000000000000000000000000000000000000000000000000000386013007ccf100000000000000000008ccf10000100000000000000000000000000000094cf10000e0000000106000000000000410612000400000000000000587e13000300000000000000000000000000000000000000000000000000000038601300a4cf10000000000000000000b4cf100001000000000000000100000000000000bccf10000a0000000106000000000000410612000400000000000000d13c13000e00000000000000000000000000000000000000000000000000000038601300c8cf10000000000000000000d8cf100004000000000000000000000050617261636861696e730000330000000000000001000000f600000046d610004b000000506172614c6966656379636c6573506172614c6966656379636c6500330000000000000001000000f500000017d610002f0000004865616473000000330000000000000001000000f5000000efd510002800000043757272656e74436f64654861736800330000000000000001000000f5000000c2d510002d000000386013000000000058d1100039000000285061726149642c20543a3a426c6f636b4e756d62657229330000000000000001000000f500000059d5100058000000b1d5100011000000386013000000000058d11000390000005061726150617374436f64654d6574613c543a3a426c6f636b4e756d6265723e3300000000000000010000000601000088d4100052000000dad41000520000002cd510002d0000005665633c285061726149642c20543a3a426c6f636b4e756d626572293e000000330000000000000001000000070100007ad2100068000000e2d210006000000042d310003b0000007dd3100064000000e1d310005200000033d4100055000000330000000000000001000000f500000091d110004a000000dbd110005900000034d2100046000000467574757265436f6465486173680000330000000000000001000000f500000031d1100027000000386013000000000058d1100039000000416374696f6e735175657565330000000000000001000000f6000000ecd01000450000005570636f6d696e67506172617347656e65736973330000000000000001000000f5000000c4d0100028000000436f6465427948617368526566730000330000000000000001000000f40000007ad010004a000000436f64654279486173680000330000000000000001000000f5000000f8cf10002400000038601300000000001cd010004c00000068d01000120000002056616c69646174696f6e20636f64652073746f7265642062792069747320686173682e20546869732073746f7261676520697320636f6e73697374656e742077697468205b60467574757265436f646548617368605d2c205b6043757272656e74436f646548617368605d20616e64205b6050617374436f646548617368605d2e20546865206e756d626572206f66207265666572656e6365206f6e207468652076616c69646174696f6e20636f646520696e205b60436f6465427948617368605d2073746f726167652e205570636f6d696e6720706172617320696e7374616e74696174696f6e20617267756d656e74732e2054686520616374696f6e7320746f20706572666f726d20647572696e6720746865207374617274206f6620612073706563696669632073657373696f6e20696e6465782e205468652061637475616c2066757475726520636f64652068617368206f66206120706172612e20436f72726573706f6e64696e6720636f64652063616e206265207265747269657665642077697468205b60436f6465427948617368605d2e2054686520626c6f636b206e756d6265722061742077686963682074686520706c616e6e656420636f6465206368616e676520697320657870656374656420666f72206120706172612e20546865206368616e67652077696c6c206265206170706c696564206166746572207468652066697273742070617261626c6f636b20666f72207468697320494420696e636c7564656420776869636820657865637574657320696e2074686520636f6e74657874206f6620612072656c617920636861696e20626c6f636b20776974682061206e756d626572203e3d206065787065637465645f6174602e2057686963682070617261732068617665207061737420636f64652074686174206e65656473207072756e696e6720616e64207468652072656c61792d636861696e20626c6f636b2061742077686963682074686520636f646520776173207265706c616365642e204e6f746520746861742074686973206973207468652061637475616c20686569676874206f662074686520696e636c7564656420626c6f636b2c206e6f7420746865206578706563746564206865696768742061742077686963682074686520636f6465207570677261646520776f756c64206265206170706c6965642c20616c74686f7567682074686579206d617920626520657175616c2e205468697320697320746f20656e737572652074686520656e7469726520616363657074616e636520706572696f6420697320636f76657265642c206e6f7420616e206f666673657420616363657074616e636520706572696f64207374617274696e672066726f6d207468652074696d65206174207768696368207468652070617261636861696e20706572636569766573206120636f6465207570677261646520617320686176696e67206f636375727265642e204d756c7469706c6520656e747269657320666f7220612073696e676c65207061726120617265207065726d69747465642e204f72646572656420617363656e64696e6720627920626c6f636b206e756d6265722e205061737420636f6465206f662070617261636861696e732e205468652070617261636861696e73207468656d73656c766573206d6179206e6f74206265207265676973746572656420616e796d6f72652c2062757420776520616c736f206b65657020746865697220636f6465206f6e2d636861696e20666f72207468652073616d6520616d6f756e74206f662074696d65206173206f7574646174656420636f646520746f206b65657020697420617661696c61626c6520666f72207365636f6e6461727920636865636b6572732e2041637475616c207061737420636f646520686173682c20696e646963617465642062792074686520706172612069642061732077656c6c2061732074686520626c6f636b206e756d62657220617420776869636820697420626563616d65206f757464617465642e205468652076616c69646174696f6e20636f64652068617368206f66206576657279206c69766520706172612e2054686520686561642d64617461206f66206576657279207265676973746572656420706172612e205468652063757272656e74206c6966656379636c65206f66206120616c6c206b6e6f776e2050617261204944732e20416c6c2070617261636861696e732e204f72646572656420617363656e64696e67206279205061726149642e20506172617468726561647320617265206e6f7420696e636c756465642e0000004ab5100029000000ec00000025000000bad610001e00000072756e74696d653a3a70617261734d697373696e6720636f646520666f722072656d6f7665642068617368205061726173536861726564000000000004d81000130000000000000000000000987413000c0000000000000000000000000000000000000000000000000000000000000000000000000000003860130018d81000000000000000000028d810000100000000000000010000000000000030d8100016000000000000000000000046d8100013000000000000000000000000000000000000000000000000000000000000000000000000000000386013005cd8100000000000000000006cd81000020000000000000001000000000000007cd810001300000000000000000000008fd810001000000000000000000000000000000000000000000000000000000000000000000000000000000038601300a0d810000000000000000000b0d8100002000000000000000100000043757272656e7453657373696f6e496e64657800330000000000000001000000f4000000cad910001b00000041637469766556616c696461746f72496e64696365735665633c56616c696461746f72496e6465783e000000330000000000000001000000f70000005cd91000420000009ed910002c00000041637469766556616c696461746f724b6579735665633c56616c696461746f7249643e0033000000000000000100000008010000c0d810006000000020d910003c000000205468652070617261636861696e206174746573746174696f6e206b657973206f66207468652076616c696461746f7273206163746976656c792070617274696369706174696e6720696e2070617261636861696e20636f6e73656e7375732e20546869732073686f756c64206265207468652073616d65206c656e677468206173206041637469766556616c696461746f72496e6469636573602e20416c6c207468652076616c696461746f7273206163746976656c792070617274696369706174696e6720696e2070617261636861696e20636f6e73656e7375732e20496e64696365732061726520696e746f207468652062726f616465722076616c696461746f72207365742e205468652063757272656e742073657373696f6e20696e6465782e000000eadc11000200000021da10002e0000007061726974792f6d756c74692d70686173652d756e7369676e65642d656c656374696f6e2f63616c6c5d20f09f97b32020736176696e6720612063616c6c20746f20746865206f6666636861696e2073746f726167652e00eadc11000200000060da10002d0000005d20f09f97b32020636c656172696e67206f6666636861696e2063616c6c2063616368652073746f726167652e000000330000000400000004000000440000003300000004000000040000000901000018b91000690000003d0500000100000008c4100066000000990200002500000008c4100066000000990200003600000008c41000660000009f0200002f00000008c4100066000000a80100002c00000010db100060000000450100002e0000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702f656e7472792e727320000000f8db10000700000070db100001000000ffdb10000d0000000cdc10000b000000a4db1000540000009f050000090000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e32302e312f7372632f6669656c642e727343616e6e6f742020626974732066726f6d2061202d62697420726567696f6e4572720000330000000400000004000000460000004f6b00003300000004000000040000000a010000526567697374726172734e6f77446964557064617465517565756564456c6563746564536e617073686f744e6f6d696e61746f7273497343757272656e7453657373696f6e46696e616c51756575656453636f7265457261456c656374696f6e537461747573536e617073686f7456616c696461746f727344656665727265644f6666656e636573d8dc100059000000740100001b0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f7472696564626d75742e7273000000289a12004a0000001a04000022000000289a12004a0000003604000015000000289a12004a000000440400001e000000289a12004a0000004d04000018000000289a12004a0000004e04000019000000289a12004a000000510400001a000000289a12004a000000570400000d000000289a12004a00000071030000360000003300000000000000010000004900000028cc11006b000000620000002700000096fa1100750000004a010000310000008c9212006c0000008e0000002f000000d8dc100059000000670100000d000000617373657274696f6e206661696c65643a20216578697374696e675f6b65792e69735f656d70747928290000d8dc100059000000800300001500000072656d61726b5f776974685f6576656e746b696c6c5f7072656669786b696c6c5f73746f726167657365745f73746f726167657365745f6368616e6765735f747269655f636f6e6669677365745f636f64655f776974686f75745f636865636b737365745f636f64657365745f686561705f706167657372656d61726b66696c6c5f626c6f636b706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65746672616d655f73797374656d3a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f73797374656d2f7372632f6c69622e727352616e646f6d6e657373436f6c6c656374697665466c697052616e646f6d4d6174657269616c94df10006d00000055000000110000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f72616e646f6d6e6573732d636f6c6c6563746976652d666c69702f7372632f6c69622e72733a6865617070616765733a6368616e6765735f74726965000000009ce210001100000000000000b0e21000010000000000000000000000b8e210001900000000000000d4e21000010000000000000000000000dce210001b00000000000000f8e2100001000000000000000000000000e31000180000000000000018e3100001000000000000000000000020e310000f0000000000000030e3100001000000000000000000000038e3100011000000000000004ce3100001000000000000000000000054e3100008000000000000005ce3100001000000000000000000000064e31000140000000000000078e31000010000000000000000000000341713000d0000000000000080e3100001000000000000000000000088e310000b0000000000000094e310000100000000000000000000009ce310001600000000000000b4e31000010000000000000000000000901b13000d00000000000000bce31000010000000000000000000000ac1613000c00000000000000c4e31000010000000000000000000000cce310000b00000000000000d8e31000010000000000000000000000e0e310001000000000000000f0e31000010000000000000000000000f8e31000100000000000000008e4100001000000000000000000000010e410000c000000000000001ce4100001000000000000000000000024e410000f0000000000000034e410000100000000000000000000003ce41000120000000000000050e4100001000000000000000000000058e4100012000000000000006ce4100001000000000000000000000074e41000100000000000000084e410000100000000000000000000008ce410000c0000000000000098e41000010000000000000000000000a0e410001100000000000000b4e4100001000000000000004669727374506572696f64496e5061737400000014e910003e0000004669727374506572696f64546f6f466172496e467574757265000000cfe81000450000004c617374506572696f644265666f72654669727374506572696f640094e810003b0000004c617374506572696f64546f6f466172496e46757475726548e810004c00000043616e6e6f74456e64496e5061737400f6e7100052000000456e64546f6f466172496e467574757265000000c5e71000310000004f766572666c6f77aee7100017000000436f6e747269627574696f6e546f6f536d616c6c73e710003b0000005fe71000140000004361704578636565646564003ae7100025000000436f6e747269627574696f6e506572696f644f76657200000fe710002b000000ebe6100024000000b8e61000330000004c656173654163746976650072e61000460000004269644f724c6561736541637469766525e610004d00000046756e64734e6f7452657475726e656403e610002200000046756e644e6f74456e646564e2e51000210000004e6f436f6e747269627574696f6e7300ade510003500000048617341637469766550617261636861696e00006de51000400000004e6f745265616479546f446973736f6c766500000fe510005e000000496e76616c69645369676e6174757265fce41000130000004d656d6f546f6f4c61726765dce4100020000000416c7265616479496e4e65775261697365000000bce4100020000000205468652066756e6420697320616c726561647920696e204e65775261697365205468652070726f7669646564206d656d6f20697320746f6f206c617267652e20496e76616c6964207369676e61747572652e205468652063726f77646c6f616e206973206e6f7420726561647920746f20646973736f6c76652e20506f74656e7469616c6c79207374696c6c20686173206120736c6f74206f7220696e207265746972656d656e7420706572696f642e20546869732063726f77646c6f616e2068617320616e206163746976652070617261636861696e20616e642063616e6e6f7420626520646973736f6c7665642e20546865726520617265206e6f20636f6e747269627574696f6e732073746f72656420696e20746869732063726f77646c6f616e2e205468652063726f77646c6f616e20686173206e6f742079657420656e6465642e2046756e64732068617665206e6f7420796574206265656e2072657475726e65642e20546869732070617261636861696e277320626964206f72206c65617365206973207374696c6c2061637469766520616e642077697468647261772063616e6e6f742079657420626567696e2e20546869732070617261636861696e206c65617365206973207374696c6c2061637469766520616e64207265746972656d656e742063616e6e6f742079657420626567696e2e20546869732063726f77646c6f616e20646f6573206e6f7420636f72726573706f6e6420746f20612070617261636861696e2e20546865206f726967696e206f6620746869732063616c6c20697320696e76616c69642e2054686520636f6e747269627574696f6e20706572696f642068617320616c726561647920656e6465642e20436f6e747269627574696f6e7320657863656564206d6178696d756d20616d6f756e742e20496e76616c69642066756e6420696e6465782e2054686520636f6e747269627574696f6e207761732062656c6f7720746865206d696e696d756d2c20604d696e436f6e747269627574696f6e602e2054686572652077617320616e206f766572666c6f772e2054686520656e64206461746520666f7220746869732063726f77646c6f616e206973206e6f742073656e7369626c652e205468652063616d706169676e20656e6473206265666f7265207468652063757272656e7420626c6f636b206e756d6265722e2054686520656e64206d75737420626520696e20746865206675747572652e20546865206c617374206c6561736520706572696f642063616e6e6f74206265206d6f7265207468656e203320706572696f64732061667465722074686520666972737420706572696f642e204c617374206c6561736520706572696f64206d7573742062652067726561746572207468616e206669727374206c6561736520706572696f642e20546865206669727374206c6561736520706572696f64206e6565647320746f206174206c65617374206265206c657373207468616e203320606d61785f76616c7565602e205468652063757272656e74206c6561736520706572696f64206973206d6f7265207468616e20746865206669727374206c6561736520706572696f642e706f6b656164645f6d656d6f65646974646973736f6c7665726566756e647769746864726177636f6e747269627574656372656174653a65787472696e7369635f696e646578b4e910001a0000008b771300030000006672616d655f73797374656d45787472696e736963206661696c656420617420626c6f636b284e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b2071656400003300000000000000010000001200000005df1000590000005f0500000e00000005df10005900000067050000160000004e6f6e44656661756c74436f6d706f736974654661696c6564546f4578747261637452756e74696d6556657273696f6e5370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d654e6f6e5a65726f526566436f756e74000000009ceb10001000000000000000aceb1000010000000000000000000000b4eb1000010000000000000000000000bceb10000f00000000000000cceb1000020000000000000000000000dceb1000010000000000000000000000e4eb10000b0000000000000038601300000000000000000000000000f0eb1000010000000000000000000000f8eb10000a000000000000002062130001000000000000000000000004ec10000100000000000000000000000cec10000d00000000000000206213000100000000000000000000001cec100001000000000000000000000024ec100008000000000000002cec10000200000000000000000000003cec1000010000000000000045787472696e73696353756363657373faec10000c00000006ed10002e00000045787472696e7369634661696c656400edec10000d000000faec10000c000000c8ec100025000000436f64655570646174656400b3ec1000150000004e65774163636f756e74000094ec10001f0000004b696c6c65644163636f756e7400000079ec10001b00000052656d61726b65647a62130009000000410612000400000044ec100035000000204f6e206f6e2d636861696e2072656d61726b2068617070656e65642e205c5b6f726967696e2c2072656d61726b5f686173685c5d20416e205c5b6163636f756e745c5d20776173207265617065642e2041206e6577205c5b6163636f756e745c5d2077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e205c5b6572726f722c20696e666f5c5d44697370617463684572726f724469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e205c5b696e666f5c5d00000000bdde10000a00000000000000ecee100001000000000000000000000004ef1000010000000000000000000000b7de100006000000000000000cef100001000000000000000000000024ef1000050000000000000000000000a9de10000e000000000000004cef100001000000000000000000000064ef1000080000000000000000000000a1de10000800000000000000a4ef1000010000000000000000000000bcef10000a00000000000000000000008ade10001700000000000000a4ef10000100000000000000000000000cf0100008000000000000000000000073de100017000000000000004cf0100001000000000000000000000064f010000a000000000000000000000068de10000b00000000000000b4f01000010000000000000000000000ccf010000800000000000000000000005cde10000c000000000000000cf1100001000000000000000000000024f1100008000000000000000000000051de10000b0000000000000064f1100002000000000000000000000094f110000b000000000000000000000040de10001100000000000000ecf1100001000000000000000000000004f2100006000000000000000000000083f910000600000000000000137412000700000041f9100042000000000000003af910000700000000000000137e1300070000001ff910001b0000003860130000000000f96513000b00000080f51000090000006f6613000c000000000000001af9100005000000000000008ae911000300000097f810003f0000003860130000000000f96513000b00000080f5100009000000d6f8100013000000e9f810001900000002f91000180000006f6613000c0000000000000093f810000400000000000000137e1300070000004bf710001a0000003860130000000000f96513000b00000065f710004d000000ccf6100022000000b2f710005e0000008cf210000b00000010f810005f0000006ff81000240000006f6613000c00000061f61000470000003860130000000000f96513000b000000a8f6100024000000ccf61000220000008cf210000b000000eef610005d0000006f6613000c000000000000002ef61000130000000000000041f610002000000058f51000280000003860130000000000f96513000b00000080f510000900000089f510002c000000b5f5100036000000ebf5100019000000312813000d00000004f610002a0000006f6613000c0000000000000046f5100005000000000000004bf510000d000000caf410001b0000003860130000000000f96513000b000000e5f41000250000000af510001f00000029f510001d000000a8f410001a0000006f6613000c00000000000000f38511000400000000000000c2f410000800000016f410001e0000003860130000000000f96513000b00000034f410003f00000073f41000190000008cf410001c000000a8f410001a0000006f6613000c0000000000000008f4100006000000000000009868130003000000000000000ef410000800000000000000587e13000300000097f21000450000003860130000000000dcf210004f0000002bf31000500000003860130000000000f96513000b0000007bf3100037000000b2f3100019000000cbf310001d000000e8f31000200000006f6613000c00000000000000b7de10000600000000000000137e13000700000034f210002a0000003860130000000000f96513000b0000005ef210002e0000008cf210000b0000006f6613000c000000204d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e202d20604f28622960207768657265206220697320746865206c656e677468206f66207468652072656d61726b2e202d2031206576656e742e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e202a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465722074686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e202d20604f285029602077686572652060506020616d6f756e74206f66206b657973207769746820707265666978206070726566697860202d206050602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a20302e383334202a205020c2b573202d205772697465733a204e756d626572206f66207375626b657973202b20317072656669785f7375626b657973204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e202d20604f28494b296020776865726520604960206c656e677468206f6620606b6579736020616e6420604b60206c656e677468206f66206f6e65206b6579202d206049602073746f726167652064656c6574696f6e732e202d2042617365205765696768743a202e333738202a206920c2b573202d205772697465733a204e756d626572206f66206974656d735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e202d20604f2849296020776865726520604960206c656e677468206f6620606974656d7360202d206049602073746f72616765207772697465732028604f28312960292e202d2042617365205765696768743a20302e353638202a206920c2b5736974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e202d20604f28312960202d20312073746f72616765207772697465206f722064656c6574652028636f64656320604f28312960292e202d20312063616c6c20746f20606465706f7369745f6c6f67603a20557365732060617070656e6460204150492c20736f204f283129202d2042617365205765696768743a20372e32313820c2b57320202020202d205772697465733a204368616e67657320547269652c2053797374656d204469676573746368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e202d20604f2843296020776865726520604360206c656e677468206f662060636f646560202d20312073746f726167652077726974652028636f64656320604f28432960292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e2053657420746865206e65772072756e74696d6520636f64652e202d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f646560202d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e6020776869636820697320657870656e73697665292e2054686520776569676874206f6620746869732066756e6374696f6e20697320646570656e64656e74206f6e207468652072756e74696d652c206275742067656e6572616c6c792074686973206973207665727920657870656e736976652e2057652077696c6c207472656174207468697320617320612066756c6c20626c6f636b2e636f64652053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e202d20312073746f726167652077726974652e202d2042617365205765696768743a20312e34303520c2b573202d203120777269746520746f20484541505f50414745537061676573204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f0000000000000094da12000700000001020000000000009b6813000c000000000000008cff10002500000000000000000000000000000000000000000000000000000038601300b4ff10000000000000000000c4ff100001000000000000000100000000000000ccff10000e0000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300dcff10000000000000000000ecff100001000000000000000000000000000000f4ff10000b0000000000000000000000ffff10000e00000000000000000000000000000000000000000000000000000000000000000000000000000038601300100011000000000000000000200011000100000000000000010000000000000028001100100000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300dcff100000000000000000003800110001000000000000000000000000000000400011000900000001050000000000001a6f13000e000000000000004900110007000000000000000000000000000000000000000000000000000000386013005000110000000000000000006000110001000000000000000100000000000000680011000d0000000105000000000000587e13000300000000000000137e130007000000000000000000000000000000000000000000000000000000386013007800110000000000000000008800110001000000000000000100000000000000900011000600000000000000000000001a6f13000e00000000000000000000000000000000000000000000000000000000000000000000000000000038601300980011000000000000000000a800110001000000000000000100000000000000b00011000a0000000000000000000000490011000700000000000000000000000000000000000000000000000000000000000000000000000000000038601300500011000000000000000000bc00110001000000000000000100000000000000c4001100060000000000000000000000ca0011000b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300d80011000000000000000000e800110001000000000000000100000000000000f0001100060000000000000000000000f600110023000000000000000000000000000000000000000000000000000000000000000000000000000000386013001c01110000000000000000002c01110001000000000000000100000000000000340111000a00000000000000000000003e0111000a000000000000000000000000000000000000000000000000000000000000000000000000000000386013009800110000000000000000004801110001000000000000000100000000000000500111000b00000001020000000000004900110007000000000000005b01110021000000000000000000000000000000000000000000000000000000386013007c01110000000000000000008c0111000a000000000000000100000000000000dc011100120000000000000000000000ee011100160000000000000000000000000000000000000000000000000000000000000000000000000000003860130004021100000000000000000014021100010000000000000000000000000000001c021100150000000000000000000000c2b61200040000000000000000000000000000000000000000000000000000000000000000000000000000003860130034021100000000000000000044021100010000000000000001000000000000004c021100180000000000000000000000c2b6120004000000000000000000000000000000000000000000000000000000000000000000000000000000386013003402110000000000000000006402110002000000000000000100000000000000740211000e0000000000000000000000820211000500000000000000000000000000000000000000000000000000000000000000000000000000000038601300880211000000000000000000980211000100000000000000000000004163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e0000003300000000000000010000000b0100000a0811003a00000045787472696e736963436f756e740000330000000000000001000000f5000000dc0711002e000000426c6f636b576569676874436f6e73756d65645765696768740000003300000000000000010000000c010000ba07110022000000416c6c45787472696e736963734c656e6a07110050000000426c6f636b48617368543a3a486173683300000000000000010000000d010000440711002600000045787472696e736963446174610000003300000000000000010000000e010000f50611004f0000004e756d6265720000330000000000000001000000f4000000b306110042000000506172656e74486173680000970611001c0000004469676573744469676573744f663c543e0000003300000000000000010000000f0100005b0611003c0000004576656e74735665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e0000003300000000000000010000001001000033061100280000004576656e74436f756e744576656e74496e646578050611002e0000004576656e74546f706963735665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e33000000000000000100000011010000d3031100490000001c04110025000000386013000000000041041100540000009504110051000000e60411003900000038601300000000001f051100530000007205110053000000c5051100400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f330000000000000001000000f20000007e031100550000005570677261646564546f553332526566436f756e74000000330000000000000001000000f00000002b031100530000005570677261646564546f547269706c65526566436f756e74c2021100570000001903110012000000457865637574696f6e5068617365506861736500330000000000000001000000f2000000a0021100220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c7365202864656661756c7429206966206e6f742e2054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e205468652063757272656e742077656967687420666f722074686520626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e00000000940911000c00000000000000a0091100140000000000000038601300b40911000000000000000000c4091100010000000000000000000000cc0911000b00000000000000d7091100130000000000000038601300ec0911000000000000000000fc091100010000000000000000000000040a11000e000000000000001a6f13000e0000000000000038601300140a11000000000000000000240a11000100000000000000000000002c0a11000800000000000000340a11000f0000000000000038601300440a11000000000000000000540a11000100000000000000000000005c0a11000700000000000000630a11000e0000000000000038601300740a11000000000000000000840a11000100000000000000000000008c0a11000a00000000000000960a1100020000000000000038601300980a11000000000000000000a80a11000500000000000000426c6f636b576569676874736c696d6974733a3a426c6f636b5765696768747333000000000000000100000012010000920c110034000000426c6f636b4c656e6774686c696d6974733a3a426c6f636b4c656e677468000033000000000000000100000013010000680c11002a000000426c6f636b48617368436f756e74000033000000000000000100000014010000130c110055000000446257656967687452756e74696d6544625765696768740033000000000000000100000015010000d10b11004200000056657273696f6e52756e74696d6556657273696f6e00000033000000000000000100000016010000b00b11002100000053533538507265666978753833000000000000000100000017010000d00a11002a0000003860130000000000fa0a11004e000000480b11004c000000940b11001c000000205468652064657369676e61746564205353383520707265666978206f66207468697320636861696e2e2054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e2069732074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f6620697420617320616e206964656e746966696572206f662074686520636861696e2e204765742074686520636861696e27732063757272656e742076657273696f6e2e2054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e20426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e63726f77646c6f616e0033000000000000000100000049000000f00c11006700000068000000100000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f6e6f64652e7273003300000000000000010000004a000000f00c110067000000700000000d000000f00c110067000000750000000d000000f00c110067000000890000003b00000000000000a80f11000700000000000000e4431300010000000000000000000000b00f1100010000000000000000000000b80f11000b00000000000000c40f1100030000000000000000000000dc0f1100010000000000000000000000e40f11000800000000000000c40f1100030000000000000000000000ec0f1100010000000000000000000000f40f11001100000000000000e443130001000000000000000000000008101100020000000000000000000000181011000b00000000000000e4431300010000000000000000000000241011000100000000000000000000002c1011000900000000000000e443130001000000000000000000000038101100010000000000000000000000401011000f00000000000000e44313000100000000000000000000005010110001000000000000000000000058101100090000000000000064101100020000000000000000000000741011000100000000000000000000007c1011000f000000000000008c1011000200000000000000000000009c101100010000000000000000000000a41011000600000000000000e4431300010000000000000000000000ac101100010000000000000000000000b41011000b00000000000000c0101100030000000000000000000000d8101100010000000000000000000000e01011000f00000000000000e4431300010000000000000000000000f010110001000000000000004372656174656400b913110031000000436f6e7472696275746564007a62130009000000eb831300060000004f481300070000008213110037000000576974686472657740131100420000005061727469616c6c79526566756e646564000000b91211004c000000051311003b000000416c6c526566756e646564008412110035000000446973736f6c76656400000064121100200000004465706c6f7944617461466978656400271211003d0000004f6e626f6172646564000000eb83130006000000eb83130006000000cd1111005a00000048616e646c65426964526573756c7400eb83130006000000a66213000e0000008f1111003e0000004564697465640000501111003f0000004d656d6f55706461746564007a62130009000000eb83130006000000137e1300070000001f111100310000004164646564546f4e6577526169736500f81011002700000020412070617261636861696e20686173206265656e206d6f76656420746f204e657752616973652041206d656d6f20686173206265656e20757064617465642e205b77686f2c2066756e645f696e6465782c206d656d6f5d2054686520636f6e66696775726174696f6e20746f20612063726f77646c6f616e20686173206265656e206564697465642e205b66756e645f696e6465785d2054686520726573756c74206f6620747279696e6720746f207375626d69742061206e65772062696420746f2074686520536c6f74732070616c6c65742e204f6e2d626f617264696e672070726f6365737320666f7220612077696e6e696e672070617261636861696e2066756e6420697320636f6d706c657465642e205b66696e645f696e6465782c2070617261636861696e5f69645d20546865206465706c6f792064617461206f66207468652066756e6465642070617261636861696e206973207365742e205b66756e645f696e6465785d2046756e6420697320646973736f6c7665642e205b66756e645f696e6465785d20416c6c206c6f616e7320696e20612066756e642068617665206265656e20726566756e6465642e205b66756e645f696e6465785d20546865206c6f616e7320696e20612066756e642068617665206265656e207061727469616c6c7920646973736f6c7665642c20692e652e2074686572652061726520736f6d65206c656674206f766572206368696c64206b6579732074686174207374696c6c206e65656420746f206265206b696c6c65642e205b66756e645f696e6465785d2057697468647265772066756c6c2062616c616e6365206f66206120636f6e7472696275746f722e205b77686f2c2066756e645f696e6465782c20616d6f756e745d20436f6e747269627574656420746f20612063726f77642073616c652e205b77686f2c2066756e645f696e6465782c20616d6f756e745d204372656174652061206e65772063726f77646c6f616e696e672063616d706169676e2e205b66756e645f696e6465785d00000000000082e9100006000000000000004c151100060000000000000000000000dc15110004000000000000000000000078e910000a00000000000000fc1511000300000000000000000000004416110002000000000000000000000070e91000080000000000000054161100020000000000000000000000841611001100000000000000000000006ae9100006000000000000000c1711000100000000000000000000002417110005000000000000000000000062e9100008000000000000000c1711000100000000000000000000004c1711000100000000000000000000005ee9100004000000000000004c1511000600000000000000000000005417110003000000000000000000000056e9100008000000000000006c1711000200000000000000000000009c17110003000000000000000000000052e910000400000000000000b4171100010000000000000000000000cc171100030000000000000000000000b42913000500000000000000925113000f00000000000000b51e11000300000000000000f55113001500000000000000b81e11000c00000000000000cd5113001900000000000000c41e11000b00000000000000cd5113001900000000000000cf1e110003000000000000001e5313001700000000000000d21e11000800000000000000da1e110013000000e81d11005b0000003860130000000000431e1100580000009b1e11001a00000000000000b42913000500000000000000925113000f0000000000000077d112000500000000000000f55113001500000000000000c91d11000900000000000000d21d1100160000001f1d110055000000741d110055000000000000007b66130003000000000000009b6813000c00000000000000b42913000500000000000000925113000f000000551a1100310000003860130000000000241a1100310000003860130000000000861a11006c000000f21a11003f000000311b110028000000591b110054000000ad1b11000e000000bb1b110030000000eb1b11004c0000003860130000000000371c11005c000000931c11000800000038601300000000009b1c11003d000000d81c11004700000000000000b42913000500000000000000925113000f0000004f191100390000008819110049000000d1191100530000003860130000000000241a110031000000f918110056000000c41811003500000038601300000000001b4e13002300000000000000b42913000500000000000000eb8313000600000000000000c01811000400000000000000137e130007000000381811003c0000003860130000000000741811004c00000000000000b42913000500000000000000eb83130006000000e41711001c0000003860130000000000001811003800000020506f6b65207468652066756e6420696e746f204e65775261697365204f726967696e206d757374206265205369676e65642c20616e64207468652066756e6420686173206e6f6e2d7a65726f2072616973652e2041646420616e206f7074696f6e616c206d656d6f20746f20616e206578697374696e672063726f77646c6f616e20636f6e747269627574696f6e2e204f726967696e206d757374206265205369676e65642c20616e64207468652075736572206d757374206861766520636f6e747269627574656420746f207468652063726f77646c6f616e2e6d656d6f20456469742074686520636f6e66696775726174696f6e20666f7220616e20696e2d70726f67726573732063726f77646c6f616e2e2052656d6f766520612066756e6420616674657220746865207265746972656d656e7420706572696f642068617320656e64656420616e6420616c6c2066756e64732068617665206265656e2072657475726e65642e204175746f6d61746963616c6c7920726566756e6420636f6e7472696275746f7273206f6620616e20656e6465642063726f77646c6f616e2e2044756520746f20776569676874207265737472696374696f6e732c20746869732066756e6374696f6e206d6179206e65656420746f2062652063616c6c6564206d756c7469706c652074696d657320746f2066756c6c7920726566756e6420616c6c2075736572732e2057652077696c6c20726566756e64206052656d6f76654b6579734c696d69746020757365727320617420612074696d652e204f726967696e206d757374206265207369676e65642c206275742063616e20636f6d652066726f6d20616e796f6e652e2057697468647261772066756c6c2062616c616e6365206f66206120737065636966696320636f6e7472696275746f722e205468652066756e64206d7573742062652065697468657220696e2c206f7220726561647920666f722c207265746972656d656e742e20466f7220612066756e6420746f206265202a696e2a207265746972656d656e742c207468656e20746865207265746972656d656e7420666c6167206d757374206265207365742e20466f7220612066756e6420746f20626520726561647920666f72207265746972656d656e742c207468656e3a202d206974206d757374206e6f7420616c726561647920626520696e207265746972656d656e743b202d2074686520616d6f756e74206f66207261697365642066756e6473206d75737420626520626967676572207468616e20746865205f667265655f2062616c616e6365206f6620746865206163636f756e743b202d20616e64206569746865723a2020202d2074686520626c6f636b206e756d626572206d757374206265206174206c656173742060656e64603b206f722020202d207468652063757272656e74206c6561736520706572696f64206d7573742062652067726561746572207468616e207468652066756e64277320606c6173745f706572696f64602e20496e207468697320636173652c207468652066756e642773207265746972656d656e7420666c61672069732073657420616e64206974732060656e646020697320726573657420746f207468652063757272656e7420626c6f636b206e756d6265722e202d206077686f603a20546865206163636f756e742077686f736520636f6e747269627574696f6e2073686f756c642062652077697468647261776e2e202d2060696e646578603a205468652070617261636861696e20746f2077686f73652063726f77646c6f616e2074686520636f6e747269627574696f6e20776173206d6164652e20436f6e7472696275746520746f20612063726f77642073616c652e20546869732077696c6c207472616e7366657220736f6d652062616c616e6365206f76657220746f2066756e6420612070617261636861696e20736c6f742e2049742077696c6c20626520776974686472617761626c65207768656e207468652063726f77646c6f616e2068617320656e64656420616e64207468652066756e64732061726520756e757365642e7369676e61747572654f7074696f6e3c4d756c74695369676e61747572653e204372656174652061206e65772063726f77646c6f616e696e672063616d706169676e20666f7220612070617261636861696e20736c6f7420776974682074686520676976656e206c6561736520706572696f642072616e67652e2054686973206170706c6965732061206c6f636b20746f20796f75722070617261636861696e20636f6e66696775726174696f6e2c20656e737572696e6720746861742069742063616e6e6f74206265206368616e676564206279207468652070617261636861696e206d616e616765722e63617066697273745f706572696f646c6173745f706572696f64656e6476657269666965724f7074696f6e3c4d756c74695369676e65723e0000000000000070201100050000000105000000000000eb8313000600000000000000752011004700000000000000000000000000000000000000000000000000000038601300bc2011000000000000000000cc20110001000000000000000000000000000000d4201100080000000000000000000000dd8413000b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300dc2011000000000000000000ec20110002000000000000000100000000000000fc2011000c0000000000000000000000587e130003000000000000000000000000000000000000000000000000000000000000000000000000000000386013009800110000000000000000000821110001000000000000000100000000000000102111000d0000000000000000000000587e130003000000000000000000000000000000000000000000000000000000000000000000000000000000386013009800110000000000000000002021110001000000000000000100000046756e647346756e64496e666f3c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722c204c65617365506572696f644f663c0a543e3e330000000000000001000000f5000000362211001a0000004e65775261697365330000000000000001000000180100009c21110055000000f121110045000000456e64696e6773436f756e74522111004a0000004e65787454726965496e646578000000282111002a00000020547261636b657220666f7220746865206e65787420617661696c61626c65207472696520696e64657820546865206e756d626572206f662061756374696f6e732074686174206861766520656e746572656420696e746f20746865697220656e64696e6720706572696f6420736f206661722e205468652066756e64732074686174206861766520686164206164646974696f6e616c20636f6e747269627574696f6e7320647572696e6720746865206c61737420626c6f636b2e2054686973206973207573656420696e206f7264657220746f2064657465726d696e652077686963682066756e64732073686f756c64207375626d6974206e6577206f72207570646174656420626964732e20496e666f206f6e20616c6c206f66207468652066756e64732e00000000f82211000800000000000000f822110008000000000000003860130000231100000000000000000010231100010000000000000000000000182311000f00000000000000b13c13000c000000000000003860130028231100000000000000000038231100020000000000000000000000482311000f00000000000000587e130003000000000000003860130058231100000000000000000068231100010000000000000050616c6c65744964330000000000000001000000190100001e2411005e0000004d696e436f6e747269627574696f6e003300000000000000010000001a010000a92311005b000000042411001a00000052656d6f76654b6579734c696d6974003300000000000000010000001b0100007023110039000000204d6178206e756d626572206f662073746f72616765206b65797320746f2072656d6f7665207065722065787472696e7369632063616c6c2e20546865206d696e696d756d20616d6f756e742074686174206d617920626520636f6e747269627574656420696e746f20612063726f77646c6f616e2e2053686f756c6420616c6d6f7374206365727461696e6c79206265206174206c65617374204578697374656e7469616c4465706f7369742e2050616c6c6574496420666f72207468652063726f77646c6f616e2070616c6c65742e20416e20617070726f7072696174652076616c756520636f756c642062652060606050616c6c65744964282a622270792f6366756e6422296060600000000076df10000e0000000000000000000000dc2411000c00000000000000000000000000000000000000000000000000000000000000000000000000000038601300e82411000000000000000000f82411000300000000000000010000005665633c543a3a486173683e330000000000000001000000f700000010251100580000006825110058000000c02511001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e000000e42511005a0000004d0000001c0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f747269652d64622d302e32322e332f7372632f6e6962626c652f6d6f642e727370616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c6970000000000076ea10000f00000000000000ec2611000200000000000000000000005cea10001a00000000000000fc2611000200000000000000000000003fea10001d000000000000000c2711000300000000000000000000002cea100013000000000000002427110001000000000000000000000085ea10000f000000000000002c2711000100000000000000a728110045000000922811001500000041281100510000009228110015000000c22711003c0000003860130000000000fe271100430000008227110040000000342711004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d654469676573744974656d206e6f7420657175616c48617368207461626c65206361706163697479206f766572666c6f772c291100580000004f000000280000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6861736862726f776e2d302e392e312f7372632f7261772f6d6f642e72733890130024000000cd030000010000005468657265206973206f6e6c79206f6e6520666174616c206572726f723b207165640000330000000900000001000000e5000000706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65722f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f696e697469616c697a65722e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e56524648617368565246526573756c747672662d696e7672662d6f7574436865636b547856657273696f6e436865636b47656e65736973000000009c2a11000f00000000000000ac2a11000100000000000000496e76616c69644e657756616c756500b42a11003800000020546865206e65772076616c756520666f72206120636f6e66696775726174696f6e20706172616d6574657220697320696e76616c69642e7061726173436f6e66696775726174696f6e50656e64696e67436f6e666967416374697665436f6e666967666f7263655f617070726f76657365745f68726d705f6d61785f6d6573736167655f6e756d5f7065725f63616e6469646174657365745f68726d705f6d61785f706172617468726561645f6f7574626f756e645f6368616e6e656c737365745f68726d705f6d61785f70617261636861696e5f6f7574626f756e645f6368616e6e656c737365745f68726d705f6368616e6e656c5f6d61785f6d6573736167655f73697a657365745f68726d705f6d61785f706172617468726561645f696e626f756e645f6368616e6e656c737365745f68726d705f6d61785f70617261636861696e5f696e626f756e645f6368616e6e656c737365745f68726d705f6368616e6e656c5f6d61785f746f74616c5f73697a657365745f68726d705f6368616e6e656c5f6d61785f63617061636974797365745f68726d705f726563697069656e745f6465706f7369747365745f68726d705f73656e6465725f6465706f7369747365745f68726d705f6f70656e5f726571756573745f74746c7365745f6d61785f7570776172645f6d6573736167655f6e756d5f7065725f63616e6469646174657365745f6d61785f7570776172645f6d6573736167655f73697a657365745f7072656665727265645f646973706174636861626c655f7570776172645f6d657373616765735f737465705f7765696768747365745f6d61785f646f776e776172645f6d6573736167655f73697a657365745f6d61785f7570776172645f71756575655f73697a657365745f6d61785f7570776172645f71756575655f636f756e747365745f72656c61795f7672665f6d6f64756c6f5f73616d706c65737365745f6e65656465645f617070726f76616c737365745f7a65726f74685f64656c61795f7472616e6368655f77696474687365745f6e5f64656c61795f7472616e636865737365745f6e6f5f73686f775f736c6f74737365745f646973707574655f636f6e636c7573696f6e5f62795f74696d655f6f75745f706572696f647365745f646973707574655f6d61785f7370616d5f736c6f74737365745f646973707574655f706f73745f636f6e636c7573696f6e5f616363657074616e63655f706572696f647365745f646973707574655f706572696f647365745f6d61785f76616c696461746f72737365745f6d61785f76616c696461746f72735f7065725f636f72657365745f7363686564756c696e675f6c6f6f6b61686561647365745f7468726561645f617661696c6162696c6974795f706572696f647365745f636861696e5f617661696c6162696c6974795f706572696f647365745f67726f75705f726f746174696f6e5f6672657175656e63797365745f706172617468726561645f726574726965737365745f706172617468726561645f636f7265737365745f6d61785f686561645f646174615f73697a657365745f6d61785f706f765f73697a657365745f6d61785f636f64655f73697a657365745f636f64655f726574656e74696f6e5f706572696f647365745f76616c69646174696f6e5f757067726164655f64656c61797365745f76616c69646174696f6e5f757067726164655f6672657175656e6379000000cc2f110028000000f42f1100010000003300000004000000040000004f000000500000001c0100004552524f523a20436f7272757074656420737461746520696e206368696c642074726965206174202f0000003300000000000000010000001200000000000000172b11000d00000000000000343011000100000000000000000000004c3011000300000000000000000000003131110005000000000000004f2213000b000000643011004f000000b33011005500000008311100290000002049737375652061207369676e616c20746f2074686520636f6e73656e73757320656e67696e6520746f20666f726369626c79206163742061732074686f75676820616c6c2070617261636861696e20626c6f636b7320696e20616c6c2072656c617920636861696e20626c6f636b7320757020746f20616e6420696e636c7564696e672074686520676976656e206e756d62657220696e207468652063757272656e7420636861696e206172652076616c696420616e642073686f756c642062652066696e616c697a65642e75705f746f496e697469616c697a657200000000000000043211000e0000000000000000000000da76130002000000000000000000000000000000000000000000000000000000000000000000000000000000386013001432110000000000000000002432110008000000000000000000000000000000643211001600000000000000000000007a3211001a00000000000000000000000000000000000000000000000000000000000000000000000000000038601300943211000000000000000000a4321100070000000000000001000000486173496e697469616c697a65640000330000000000000001000000f5000000203411004800000038601300000000006834110047000000af3411005a0000003860130000000000093511005d000000663511005e000000c435110020000000427566666572656453657373696f6e4368616e6765735665633c427566666572656453657373696f6e4368616e67653e3300000000000000010000001d010000dc3211005600000038601300000000003233110057000000893311000d0000003860130000000000963311005a000000f0331100300000002042756666657265642073657373696f6e206368616e67657320616c6f6e6720776974682074686520626c6f636b206e756d62657220617420776869636820746865792073686f756c64206265206170706c6965642e205479706963616c6c7920746869732077696c6c20626520656d707479206f72206f6e6520656c656d656e74206c6f6e672e2041706172742066726f6d20746861742074686973206974656d206e657665722068697473207468652073746f726167652e20486f776576657220746869732069732061206056656360207265676172646c65737320746f2068616e646c6520766172696f757320656467652063617365732074686174206d6179206f636375722061742072756e74696d65207570677261646520626f756e646172696573206f7220696620676f7665726e616e636520696e74657276656e65732e2057686574686572207468652070617261636861696e73206d6f64756c65732068617665206265656e20696e697469616c697a65642077697468696e207468697320626c6f636b2e2053656d616e746963616c6c79206120626f6f6c2c2062757420746869732067756172616e746565732069742073686f756c64206e65766572206869742074686520747269652c206173207468697320697320636c656172656420696e20606f6e5f66696e616c697a656020616e64204672616d65206f7074696d697a657320604e6f6e65602076616c75657320746f20626520656d7074792076616c7565732e204173206120626f6f6c2c20607365742866616c7365296020616e64206072656d6f766528296020626f7468206c65616420746f20746865206e6578742060676574282960206265696e672066616c73652c20627574206f6e65206f66207468656d2077726974657320746f20746865207472696520616e64206f6e6520646f6573206e6f742e205468697320636f6e667573696f6e206d616b657320604f7074696f6e3c28293e60206d6f7265207375697461626c6520666f72207468652073656d616e74696373206f662074686973207661726961626c652e00000000812f11002000000000000000c43c1100010000000000000000000000dc3c1100010000000000000000000000652f11001c00000000000000c43c1100010000000000000000000000e43c11000100000000000000000000004c2f11001900000000000000c43c1100010000000000000000000000ec3c11000100000000000000000000003b2f11001100000000000000f43c11000100000000000000000000000c3d11000100000000000000000000002b2f11001000000000000000f43c1100010000000000000000000000143d1100010000000000000000000000152f11001600000000000000f43c11000100000000000000000000001c3d1100010000000000000000000000012f11001400000000000000f43c1100010000000000000000000000243d1100010000000000000000000000eb2e11001600000000000000f43c11000100000000000000000000002c3d1100010000000000000000000000cf2e11001c00000000000000c43c1100010000000000000000000000343d1100010000000000000000000000b22e11001d00000000000000c43c11000100000000000000000000003c3d1100010000000000000000000000942e11001e00000000000000c43c1100010000000000000000000000443d11000100000000000000000000007c2e11001800000000000000f43c11000100000000000000000000004c3d1100010000000000000000000000612e11001b00000000000000543d11000100000000000000000000006c3d11000100000000000000000000004f2e11001200000000000000543d1100010000000000000000000000743d11000100000000000000000000003d2e110012000000000000007c3d1100010000000000000000000000943d1100010000000000000000000000102e11002d00000000000000c43c11000100000000000000000000009c3d1100010000000000000000000000f62d11001a00000000000000f43c1100010000000000000000000000a43d1100010000000000000000000000cd2d11002900000000000000c43c1100010000000000000000000000ac3d1100010000000000000000000000bc2d11001100000000000000f43c1100010000000000000000000000b43d1100020000000000000000000000a82d11001400000000000000f43c1100010000000000000000000000c43d11000100000000000000000000008a2d11001e00000000000000f43c1100010000000000000000000000cc3d1100010000000000000000000000762d11001400000000000000f43c1100010000000000000000000000d43d11000100000000000000000000005a2d11001c00000000000000f43c1100010000000000000000000000dc3d1100010000000000000000000000402d11001a00000000000000f43c1100010000000000000000000000e43d1100010000000000000000000000272d11001900000000000000f43c1100010000000000000000000000ec3d11000100000000000000000000000a2d11001d00000000000000f43c1100010000000000000000000000f43d1100010000000000000000000000d42c11003600000000000000fc3d1100010000000000000000000000143e1100010000000000000000000000b92c11001b00000000000000f43c11000100000000000000000000001c3e1100010000000000000000000000912c11002800000000000000f43c1100010000000000000000000000243e1100010000000000000000000000782c11001900000000000000f43c11000100000000000000000000002c3e1100010000000000000000000000612c11001700000000000000343e11000100000000000000000000004c3e1100010000000000000000000000472c11001a00000000000000343e1100010000000000000000000000543e11000200000000000000000000002a2c11001d00000000000000f43c1100010000000000000000000000643e11000100000000000000000000000b2c11001f00000000000000f43c11000100000000000000000000006c3e1100010000000000000000000000e42b11002700000000000000f43c1100010000000000000000000000743e1100010000000000000000000000bc2b11002800000000000000f43c11000100000000000000000000007c3e11000100000000000000000000009b2b11002100000000000000f43c1100010000000000000000000000843e1100010000000000000000000000732b11002800000000000000f43c11000100000000000000000000008c3e11000100000000000000000000004a2b11002900000000000000f43c1100010000000000000000000000943e1100010000000000000000000000242b11002600000000000000f43c11000100000000000000000000009c3e11000100000000000000000000002b67130003000000000000001a6f13000e0000008f481100260000006d481100220000003848110035000000000000002b6713000300000000000000587e1300030000000048110038000000ce47110032000000a8471100260000007a4711002e00000043471100370000000e47110035000000e24611002c000000b54611002d000000664611004f000000000000002b67130003000000000000005b4611000b0000001f4611003c000000db45110044000000000000002b6713000300000000000000987413000c00000097451100440000006445110033000000364511002e000000074511002f000000b44411003f000000f3441100140000008c4411002800000068441100240000003044110038000000db431100550000008f4311004c000000354311005a0000000d43110028000000000000002b67130003000000000000003068130006000000be4211004f000000724211004c0000003042110042000000e24111004e000000000000002b67130003000000000000004f481300070000008d411100550000002b411100590000008441110009000000e3401100480000008e401100550000003b40110053000000e73f110054000000973f110050000000453f110052000000f23e110053000000a43e11004e000000205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206d657373616765732063616e2062652073656e7420627920612063616e6469646174652e205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206368616e6e656c732061207061726174687265616420697320616c6c6f77656420746f206f70656e2e205365747320746865206d6178696d756d206e756d626572206f66206f7574626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206f70656e2e205365747320746865206d6178696d756d2073697a65206f662061206d657373616765207468617420636f756c6420657665722062652070757420696e746f20616e2048524d50206368616e6e656c2e205365747320746865206d6178696d756d206e756d626572206f6620696e626f756e642048524d50206368616e6e656c732061207061726174687265616420697320616c6c6f77656420746f206163636570742e205365747320746865206d6178696d756d206e756d626572206f6620696e626f756e642048524d50206368616e6e656c7320612070617261636861696e20697320616c6c6f77656420746f206163636570742e205365747320746865206d6178696d756d20746f74616c2073697a65206f66206d6573736167657320696e20627974657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e205365747320746865206d6178696d756d206e756d626572206f66206d6573736167657320616c6c6f77656420696e20616e2048524d50206368616e6e656c206174206f6e63652e20536574732074686520616d6f756e74206f662066756e647320746861742074686520726563697069656e742073686f756c642070726f7669646520666f7220616363657074696e67206f70656e696e6720616e2048524d50206368616e6e656c2e20536574732074686520616d6f756e74206f662066756e64732074686174207468652073656e6465722073686f756c642070726f7669646520666f72206f70656e696e6720616e2048524d50206368616e6e656c2e205365747320746865206e756d626572206f662073657373696f6e7320616674657220776869636820616e2048524d50206f70656e206368616e6e656c207265717565737420657870697265732e205365747320746865206d6178696d756d206e756d626572206f66206d65737361676573207468617420612063616e6469646174652063616e20636f6e7461696e2e205365747320746865206d6178696d756d2073697a65206f6620616e20757077617264206d65737361676520746861742063616e2062652073656e7420627920612063616e6469646174652e20536574732074686520736f6674206c696d697420666f7220746865207068617365206f66206469737061746368696e6720646973706174636861626c6520757077617264206d657373616765732e205365742074686520637269746963616c20646f776e77617264206d6573736167652073697a652e205365747320746865206d6178696d756d20746f74616c2073697a65206f66206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174206f6e63652e205365747320746865206d6178696d756d206974656d7320746861742063616e2070726573656e7420696e206120757077617264206469737061746368207175657565206174206f6e63652e2053657420746865206e756d626572206f662073616d706c657320746f20646f206f66207468652052656c61795652464d6f64756c6f20617070726f76616c2061737369676e6d656e7420637269746572696f6e2e2053657420746865206e756d626572206f662076616c696461746f7273206e656564656420746f20617070726f7665206120626c6f636b2e2053657420746865207a65726f74682064656c6179207472616e6368652077696474682e205365742074686520746f74616c206e756d626572206f662064656c6179207472616e636865732e2053657420746865206e6f2073686f7720736c6f74732c20696e206e756d626572206f66206e756d626572206f6620636f6e73656e73757320736c6f74732e204d757374206265206174206c6561737420312e2053657420746865206469737075746520636f6e636c7573696f6e2062792074696d65206f757420706572696f642e2053657420746865206d6178696d756d206e756d626572206f662064697370757465207370616d20736c6f74732e2053657420746865206469737075746520706f737420636f6e636c7573696f6e20616363657074616e636520706572696f642e2053657420746865206469737075746520706572696f642c20696e206e756d626572206f662073657373696f6e7320746f206b65657020666f722064697370757465732e2053657420746865206d6178696d756d206e756d626572206f662076616c696461746f727320746f2075736520696e2070617261636861696e20636f6e73656e7375732e2053657420746865206d6178696d756d206e756d626572206f662076616c696461746f727320746f2061737369676e20746f20616e7920636f72652e4f7074696f6e3c7533323e2053657420746865207363686564756c696e67206c6f6f6b61686561642c20696e206578706563746564206e756d626572206f6620626c6f636b73206174207065616b207468726f7567687075742e205365742074686520617661696c6162696c69747920706572696f6420666f722070617261746872656164732e205365742074686520617661696c6162696c69747920706572696f6420666f722070617261636861696e732e20536574207468652070617261636861696e2076616c696461746f722d67726f757020726f746174696f6e206672657175656e63792053657420746865206e756d626572206f66207265747269657320666f72206120706172746963756c617220706172617468726561642e2053657420746865206e756d626572206f66207061726174687265616420657865637574696f6e20636f7265732e2053657420746865206d6178206865616420646174612073697a6520666f722070617261732e2053657420746865206d617820504f5620626c6f636b2073697a6520666f7220696e636f6d696e672075706772616465732e2053657420746865206d61782076616c69646174696f6e20636f64652073697a6520666f7220696e636f6d696e672075706772616465732e205365742074686520616363657074616e636520706572696f6420666f7220616e20696e636c756465642063616e6469646174652e20536574207468652076616c69646174696f6e20757067726164652064656c61792e20536574207468652076616c69646174696f6e2075706772616465206672657175656e63792e000000000000000b2b11000c00000000000000000000007849110021000000000000000000000000000000000000000000000000000000000000000000000000000000386013009c4911000000000000000000ac49110001000000000000000100000000000000fe2a11000d0000000105000000000000987413000c00000000000000784911002100000000000000000000000000000000000000000000000000000038601300b44911000000000000000000c4491100010000000000000000000000486f7374436f6e66696775726174696f6e3c543a3a426c6f636b4e756d6265723e0000003300000000000000010000001e010000014a110032000000330000000000000001000000f5000000cc491100350000002050656e64696e6720636f6e66696775726174696f6e2028696620616e792920666f7220746865206e6578742073657373696f6e2e205468652061637469766520636f6e66696775726174696f6e20666f72207468652063757272656e742073657373696f6e2e0040cd110037000000a40000000900000073746f7261676520726f6f74206d757374206465636f646520746f20746865204861736820747970653b20716564000040cd110037000000cf0000000a0000005772617070696e67206f66667365742063616e6e6f742070726f6475636520746865206e756c6c20706f696e74657200c44a11005a000000a90000000e0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e32302e312f7372632f7074722f616464726573732e72730000fc0000006000000008000000ff0000000001000001010000020100000301000004010000050100006eb3110031000000100100000100000070726f78795f616e6e6f756e63656472656a6563745f616e6e6f756e63656d656e7472656d6f76655f616e6e6f756e63656d656e74616e6e6f756e63656b696c6c5f616e6f6e796d6f7573616e6f6e796d6f757372656d6f76655f70726f7869657372656d6f76655f70726f78796164645f70726f787970726f7879e44b11005b000000870000000f0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6f6666656e6365732f7372632f6c69622e72730000000000741b13001100000000000000784c1100010000000000000000000000804c11000a000000000000008c4c11000100000000000000b74c1100240000004c656173654572726f720000944c1100230000002054686572652077617320616e206572726f72207769746820746865206c656173652e205468652070617261636861696e204944206973206e6f74206f6e626f617264696e672e70616c6c65745f73657373696f6e2f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f73657373696f6e2f7372632f6c69622e727370616c6c65745f70726f78793a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f70726f78792f7372632f6c69622e727370616c6c65745f6d756c74697369672f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6d756c74697369672f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a6f726967696e2f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f6f726967696e2e727370616c6c65745f6f6666656e6365733a3a70616c6c657470616c6c65745f78636d3a3a70616c6c65742f706f6c6b61646f742f78636d2f70616c6c65742d78636d2f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74732f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f736c6f74732e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261735f696e686572656e742f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f70617261735f696e686572656e742e7273496e76616c696450726f6f664475706c6963617465644b65794e6f4173736f63696174656456616c696461746f7249644e6f4163636f756e744e6f4b6579730000009c4f11001a0000004552524f523a20436f727275707465642073746174652061742053657373696f6e4b65794f776e65724e6578744b65797300000091501100290000000e50110062000000c802000033000000705011002100000076691300020000006672616d655f737570706f72743a3a73746f726167652f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f737570706f72742f7372632f73746f726167652f6d6f642e7273286b65792c2076616c756529206661696c656420746f206465636f6465206174206e6578745f6b65792072657475726e65642061206b65792077697468206e6f2076616c7565206174206d6f646c70792f7574696c6973756261546f6f4665775369676e61746f72696573546f6f4d616e795369676e61746f726965734d756c74697369674d756c74697369677357726f6e6754696d65706f696e744d696e696d756d5468726573686f6c6443616c6c734e6f54696d65706f696e744d6178576569676874546f6f4c6f77416c7265616479417070726f766564556e657870656374656454696d65706f696e74416c726561647953746f7265645369676e61746f726965734f75744f664f7264657253656e646572496e5369676e61746f72696573536c6f74734c6561736573000000d04e1100250000006601000018000000d04e1100250000006701000019000000556e726561636861626c6553656e644661696c757265556e776569676861626c654d65737361676546696c74657265640000000048521100090000000000000054521100010000000000000000000000386013000000000000000000000000005c521100040000000000000060521100030000000000000000000000386013000000000000000000417474656d707465640000008c5211001000000053656e74785211000d000000785211000d00000085521100070000004d756c74694c6f636174696f6e58636d3c28293e78636d3a3a76303a3a4f7574636f6d65000000004c53110004000000000000005053110002000000000000000000000038601300000000000000000000000000805311000f0000000000000090531100040000000000000000000000f05311000b000000000000000000000048541100170000000000000090531100040000000000000000000000605411000c0000000000000000000000c05411000700000000000000c8541100020000000000000000000000f85411000b0000000000000073656e640000000073d112000400000000000000785211000d000000000000003d5711000700000000000000855211000700000074656c65706f72745f617373657473000000000073d112000400000000000000785211000d00000000000000f95a11000b00000000000000785211000d00000000000000045b110006000000000000000a5b11000f00000000000000195b11000b0000000000000030681300060000006a5a1100450000003860130000000000d95711004b00000024581100640000008858110057000000df58110063000000425911001a0000005c59110062000000be5911000f000000cd59110048000000af5a11004a000000726573657276655f7472616e736665725f617373657473005f57110066000000c5571100140000003860130000000000d95711004b00000024581100640000008858110057000000df58110063000000425911001a0000005c59110062000000be5911000f000000cd59110048000000155a1100550000006578656375746500000000003d5711000700000000000000445711001100000000000000555711000a000000000000003068130006000000505511003500000038601300000000008555110054000000d95511000b0000003860130000000000e45511005c000000405611005700000097561100160000003860130000000000ad5611005c0000000957110034000000204578656375746520616e2058434d206d6573736167652066726f6d2061206c6f63616c2c207369676e65642c206f726967696e2e20416e206576656e74206973206465706f736974656420696e6469636174696e67207768657468657220606d73676020636f756c6420626520657865637574656420636f6d706c6574656c79206f72206f6e6c79207061727469616c6c792e204e6f206d6f7265207468616e20606d61785f776569676874602077696c6c206265207573656420696e2069747320617474656d7074656420657865637574696f6e2e2049662074686973206973206c657373207468616e20746865206d6178696d756d20616d6f756e74206f6620776569676874207468617420746865206d65737361676520636f756c642074616b6520746f2062652065786563757465642c207468656e206e6f20657865637574696f6e20617474656d70742077696c6c206265206d6164652e204e4f54453a2041207375636365737366756c2072657475726e20746f207468697320646f6573202a6e6f742a20696d706c7920746861742074686520606d73676020776173206578656375746564207375636365737366756c6c7920746f20636f6d706c6574696f6e3b206f6e6c792074686174202a736f6d652a206f66206974207761732065786563757465642e6d657373616765426f783c58636d3c543a3a43616c6c3e3e6d61785f776569676874205472616e7366657220736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f2074686520736f7665726569676e206163636f756e74206f6620612064657374696e6174696f6e20636861696e20616e6420666f72776172642061206e6f74696669636174696f6e2058434d2e202d20606f726967696e603a204d7573742062652063617061626c65206f66207769746864726177696e672074686520606173736574736020616e6420657865637574696e672058434d2e202d206064657374603a2044657374696e6174696f6e20636f6e7465787420666f7220746865206173736574732e2057696c6c207479706963616c6c792062652060583228506172656e742c2050617261636861696e282e2e29296020746f2073656e6420202066726f6d2070617261636861696e20746f2070617261636861696e2c206f72206058312850617261636861696e282e2e29296020746f2073656e642066726f6d2072656c617920746f2070617261636861696e2e202d206062656e6566696369617279603a20412062656e6566696369617279206c6f636174696f6e20666f72207468652061737365747320696e2074686520636f6e74657874206f66206064657374602e2057696c6c2067656e6572616c6c79206265202020616e20604163636f756e7449643332602076616c75652e202d2060617373657473603a205468652061737365747320746f2062652077697468647261776e2e20546869732073686f756c6420696e636c7564652074686520617373657473207573656420746f207061792074686520666565206f6e2074686520202060646573746020736964652e202d2060646573745f776569676874603a20457175616c20746f2074686520746f74616c20776569676874206f6e20606465737460206f66207468652058434d206d657373616765202020605265736572766541737365744465706f736974207b206173736574732c20656666656374733a205b20427579457865637574696f6e7b2e2e7d2c204465706f73697441737365747b2e2e7d205d207d602e2054656c65706f727420736f6d65206173736574732066726f6d20746865206c6f63616c20636861696e20746f20736f6d652064657374696e6174696f6e20636861696e2e2020206054656c65706f7274207b206173736574732c20656666656374733a205b20427579457865637574696f6e7b2e2e7d2c204465706f73697441737365747b2e2e7d205d207d602e62656e65666963696172796173736574735665633c4d756c746941737365743e646573745f776569676874436865636b4d6f7274616c697479747269676765725f6f6e626f617264636c6561725f616c6c5f6c6561736573666f7263655f6c65617365556e616e6e6f756e6365644e6f53656c6650726f78796d6f646c70792f70726f78795f5f5f5f4475706c69636174654e6f5065726d697373696f6e4e6f7450726f7879000e50110062000000470300003300000000000000e85b11001900000000000000045c11000100000000000000000000000c5c11001300000000000000205c11000200000000000000546f6f4d616e79496e636c7573696f6e496e686572656e7473000000925c110034000000496e76616c6964506172656e7448656164657200305c110056000000865c11000c000000205468652068617368206f6620746865207375626d697474656420706172656e742068656164657220646f65736e277420636f72726573706f6e6420746f2074686520736176656420626c6f636b2068617368206f662074686520706172656e742e20496e636c7573696f6e20696e686572656e742063616c6c6564206d6f7265207468616e206f6e63652070657220626c6f636b2e4269746669656c647320616e64206865616473206d75737420626520696e636c7564656420657665727920626c6f636b0000204f11003200000055000000110000005175657565644b6579737061726163686e300000b75d110027000000475d11006100000072756e74696d653a3a696e636c7573696f6e2d696e686572656e7464726f7070696e67207369676e65645f6269746669656c647320616e64206261636b65645f63616e64696461746573206265636175736520746865792070726f647563656420616e20696e76616c696420706172617320696e686572656e743a203c7761736d3a73747269707065643e50617261636861696e73496e686572656e7444617461206661696c656420746f206465636f6465656e746572556e70726f787961626c65546f6f4d616e79000000000000007c5e11000d00000000000000046213000100000000000000000000008c5e1100010000000000000000000000945e11001000000000000000a45e1100040000000000000000000000c45e1100020000000000000000000000d45e11000900000000000000e05e1100030000000000000000000000f85e1100010000000000000050726f78794578656375746564000000f25f11003b000000416e6f6e796d6f7573437265617465647a621300090000007a62130009000000e95f110009000000d3fa120003000000545f11003b0000008f5f11005a000000416e6e6f756e6365640000007a621300090000007a621300090000004106120004000000005f11005400000020416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e205c5b7265616c2c2070726f78792c2063616c6c5f686173685c5d20416e6f6e796d6f7573206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e20646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e205c5b616e6f6e796d6f75732c2077686f2c2070726f78795f747970652c20646973616d626967756174696f6e5f696e6465785c5d50726f78795479706520412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e205c5b726573756c745c5d2e00000000000000cf4b11000500000000000000e8611100030000000000000000000000306211000f0000000000000000000000c64b11000900000000000000a8621100030000000000000000000000f06211000d0000000000000000000000ba4b11000c00000000000000a8621100030000000000000000000000586311000b0000000000000000000000ac4b11000e0000000000000038601300000000000000000000000000b06311000a0000000000000000000000a34b110009000000000000000064110003000000000000000000000048641100170000000000000000000000954b11000e0000000000000000651100050000000000000000000000786511001400000000000000000000008d4b1100080000000000000018661100020000000000000000000000486611001500000000000000000000007a4b1100130000000000000018661100020000000000000000000000f0661100100000000000000000000000674b1100130000000000000070671100020000000000000000000000a0671100100000000000000000000000584b11000f000000000000002068110004000000000000000000000080681100110000000000000000000000d76a110004000000000000009b6813000c00000000000000db6a11001000000000000000eb6a11001400000000000000a16613000400000000000000a5661300180000008d781100540000005c6911000d0000003860130000000000696911002b0000003860130000000000c5651300340000003860130000000000e3e912000c0000009469110044000000d869110059000000316a1100350000003860130000000000f96513000b00000044721100400000006f6613000c00000000000000cf6a110008000000000000009b6813000c000000000000008b7211000a00000000000000957211000c00000000000000156f130005000000000000001a6f13000e000000b6771100520000003860130000000000c5651300340000003860130000000000e3e912000c00000008781100450000004d78110040000000e17411005400000035751100060000003860130000000000f96513000b00000044721100400000006f6613000c000000f07611002b0000003860130000000000c5651300340000003860130000000000e3e912000c0000001b7711004a00000065771100510000003860130000000000f96513000b00000044721100400000006f6613000c000000157611002e0000003860130000000000c5651300340000003860130000000000437611005600000099761100570000003860130000000000f96513000b00000044721100400000006f6613000c000000000000008b7211000a00000000000000957211000c00000000000000156f130005000000000000001a6f13000e00000000000000b42913000500000000000000d3fa120003000000b07211004f000000ff7211004000000038601300000000003f7311001c00000038601300000000005b73110055000000b073110054000000047411001f00000023741100550000007874110058000000d074110011000000e174110054000000357511000600000038601300000000003b7511005500000090751100270000003860130000000000b77511003a0000003860130000000000f96513000b00000044721100400000006f6613000c000000f175110024000000000000008472110007000000000000009b6813000c000000000000008b7211000a00000000000000957211000c00000000000000b42913000500000000000000d3fa12000300000000000000a172110006000000000000001e5313001700000000000000a77211000900000000000000414612000c000000176f11002e0000003860130000000000456f110053000000986f11000e0000003860130000000000a66f110057000000fd6f11002b000000386013000000000028701100540000007c70110054000000d070110041000000117111005000000061711100530000003860130000000000b471110053000000077211003d0000003860130000000000f96513000b00000044721100400000006f6613000c00000000000000d76a110004000000000000009b6813000c000000000000003d6c11000900000000000000466c11000d0000001a6d11004200000038601300000000005c6d110058000000b46d11004a0000003860130000000000fe6d1100450000003860130000000000436e110043000000866e1100470000003860130000000000cd6e11004a0000003860130000000000e3e912000c0000009469110044000000d46c1100460000003860130000000000f96513000b000000666a1100190000007f6a110027000000a66a1100290000006f6613000c000000536c11001d0000003860130000000000706c110057000000c76c11000d0000003860130000000000c5651300340000003860130000000000e3e912000c0000009469110044000000d46c1100460000003860130000000000f96513000b000000666a1100190000007f6a110027000000a66a1100290000006f6613000c00000000000000cf6a110008000000000000009b6813000c000000000000003d6c11000900000000000000466c11000d000000ff6a11002d00000038601300000000002c6b110059000000856b11004a0000003860130000000000c5651300340000003860130000000000e3e912000c000000cf6b11003e0000000d6c1100300000003860130000000000f96513000b000000666a1100190000007f6a110027000000a66a1100290000006f6613000c00000000000000cf6a110008000000000000009b6813000c00000000000000d76a110004000000000000009b6813000c00000000000000db6a11001000000000000000eb6a11001400000000000000a16613000400000000000000a56613001800000008691100540000005c6911000d0000003860130000000000696911002b0000003860130000000000c5651300340000003860130000000000e3e912000c0000009469110044000000d869110059000000316a1100350000003860130000000000f96513000b000000666a1100190000007f6a110027000000a66a1100290000006f6613000c0000002044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676820606164645f70726f7879602e2052656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e202d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e202d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2e202d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e2057656967687420697320612066756e6374696f6e206f663a202d20413a20746865206e756d626572206f6620616e6e6f756e63656d656e7473206d6164652e202d20503a20746865206e756d626572206f662070726f78696573207468652075736572206861732e64656c65676174657265616c666f7263655f70726f78795f747970654f7074696f6e3c543a3a50726f7879547970653e2052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e204d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c65676174657320286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e202d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e63616c6c5f6861736843616c6c486173684f663c543e2052656d6f7665206120676976656e20616e6e6f756e63656d656e742e204d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e20746865206465706f7369742e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e205075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e2054686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d70746564206966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e204e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e20546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c2061732060416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e2052656d6f76657320612070726576696f75736c7920737061776e656420616e6f6e796d6f75732070726f78792e205741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626520696e61636365737369626c652e205265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f2060616e6f6e796d6f757360207769746820636f72726573706f6e64696e6720706172616d65746572732e202d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060616e6f6e796d6f75736020746f206372656174652074686973206163636f756e742e202d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e2050726f6261626c79206030602e202d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f2060616e6f6e796d6f7573602e202d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e202d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f2060616e6f6e796d6f757360207761732070726f6365737365642e204661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c79206372656174656420616e6f6e796d6f7573206163636f756e742077686f73652060616e6f6e796d6f7573602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e2057656967687420697320612066756e6374696f6e206f6620746865206e756d626572206f662070726f7869657320746865207573657220686173202850292e737061776e657270726f78795f74797065543a3a50726f7879547970656865696768746578745f696e64657820537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e6420696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e205265717569726573206120605369676e656460206f726967696e2e202d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f76657220746865206e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f20616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e202d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d65207472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573742077616e7420746f20757365206030602e202d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265207a65726f2e204661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468652073616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e204661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e20544f444f3a204d69676874206265206f76657220636f756e74696e672031207265616420556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e205741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e747320637265617465642062792060616e6f6e796d6f7573602c20686f776576657220696620646f6e652c207468656e2074686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e20526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e202d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792e202d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e2044697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676800000000000000a47911000700000001050000000000009b6813000c00000000000000ab7911005100000000000000000000000000000000000000000000000000000038601300fc79110000000000000000000c7a1100020000000000000001000000000000001c7a11000d00000001050000000000009b6813000c00000000000000297a11004f00000000000000000000000000000000000000000000000000000038601300787a11000000000000000000887a110001000000000000000100000050726f78696573285665633c50726f7879446566696e6974696f6e3c543a3a4163636f756e7449642c20543a3a50726f7879547970652c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e293300000000000000010000001f010000bb7a1100510000000c7b110048000000416e6e6f756e63656d656e7473285665633c416e6e6f756e63656d656e743c543a3a4163636f756e7449642c2043616c6c486173684f663c543e2c20543a3a426c6f636b4e756d6265723e3e2c0a2042616c616e63654f663c543e2933000000000000000100000020010000907a11002b0000002054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e2054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e747320776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e00000000a47c11001000000000000000b13c13000c0000000000000038601300b47c11000000000000000000c47c1100040000000000000000000000e47c11001200000000000000b13c13000c0000000000000038601300f87c11000000000000000000087d1100050000000000000000000000307d11000a00000000000000d3fa12000300000000000000386013003c7d110000000000000000004c7d1100010000000000000000000000547d11000a00000000000000587e1300030000000000000038601300607d11000000000000000000707d1100010000000000000000000000787d11001700000000000000b13c13000c0000000000000038601300907d11000000000000000000a07d1100030000000000000000000000b87d11001900000000000000b13c13000c0000000000000038601300d47d11000000000000000000e47d1100040000000000000050726f78794465706f7369744261736533000000000000000100000021010000f68011004400000038601300000000002b051300400000003a8111004900000050726f78794465706f736974466163746f72000033000000000000000100000022010000e57f11002f0000003860130000000000148011005a0000006e80110058000000c6801100300000004d617850726f78696573000033000000000000000100000023010000a97f11003c0000004d617850656e64696e67000033000000000000000100000024010000587f110051000000416e6e6f756e63656d656e744465706f736974426173650033000000000000000100000021010000b27e11004c0000003860130000000000fe7e11005a000000416e6e6f756e63656d656e744465706f736974466163746f7200000033000000000000000100000025010000047e1100350000003860130000000000397e1100560000008f7e1100230000002054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e20546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c792036382062797465732920696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e20546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c79203136206279746573292e20546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e20546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e20546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b6520696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e00d04e1100250000007600000001000000be4d11005b000000c10000000100000000000000fc811100080000000000000004821100020000000000000000000000348211000e0000000000000000000000a48211000a0000000000000038601300000000000000000000000000b08211000c000000000000007365745f6b65797300000000f38511000400000000000000f78511000700000000000000fe8511000500000000000000137e130007000000b48411003a000000ee841100480000004383110031000000386013000000000074831100350000003860130000000000f96513000b0000003685110015000000d6831100560000004b8511003c0000008785110029000000b085110021000000d1851100220000006f6613000c00000070757267655f6b657973000010831100330000004383110031000000386013000000000074831100350000003860130000000000f96513000b000000a98311002d000000d6831100560000002c8411003c000000688411002900000091841100230000006f6613000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e20202041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e202d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460202d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460202d20446257726974657320706572206b65792069643a20604b65794f776e646572602053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d20436f6d706c65786974793a20604f28312960202d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360202d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360202d204462526561647320706572206b65792069643a20604b65794f776e657260202d20446257726974657320706572206b65792069643a20604b65794f776e6572606b657973543a3a4b65797370726f6f660000000000f42412000a0000000000000000000000a48811001300000000000000000000000000000000000000000000000000000000000000000000000000000038601300b88811000000000000000000c888110001000000000000000100000000000000d08811000c0000000000000000000000987413000c00000000000000000000000000000000000000000000000000000000000000000000000000000038601300dc8811000000000000000000ec88110001000000000000000100000000000000f48811000d0000000000000000000000c2b6120004000000000000000000000000000000000000000000000000000000000000000000000000000000386013000489110000000000000000001489110002000000000000000100000000000000085d11000a0000000000000000000000248911001e00000000000000000000000000000000000000000000000000000000000000000000000000000038601300448911000000000000000000548911000200000000000000010000000000000064891100120000000000000000000000034e120008000000000000000000000000000000000000000000000000000000000000000000000000000000386013007889110000000000000000008889110003000000000000000100000000000000c54f1100080000000105000000000000a08911000e00000000000000f78511000700000000000000000000000000000000000000000000000000000038601300b08911000000000000000000c089110001000000000000000000000000000000bd4f1100080000000105000000000000c88911001400000000000000a08911000e00000000000000000000000000000000000000000000000000000038601300dc8911000000000000000000ec8911000100000000000000000000005665633c543a3a56616c696461746f7249643e0033000000000000000100000026010000e68b11001f00000043757272656e74496e646578330000000000000001000000f4000000c88b11001e0000005175657565644368616e676564000000330000000000000001000000f0000000518b11004e0000009f8b1100290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e0000330000000000000001000000f7000000ca8a11004f000000198b11003800000044697361626c656456616c696461746f72730000330000000000000001000000270100005d8a11002000000038601300000000007d8a11004d000000543a3a56616c696461746f7249640000330000000000000001000000f0000000368a110027000000284b65795479706549642c205665633c75383e29330000000000000001000000f0000000f48911004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e00000000000000b88c11001400000000000000cc8c1100020000000000000000000000fc8c11001000000000000000000000007c8d11000800000000000000848d1100060000000000000000000000148e11002e0000000000000000000000848f11001000000000000000948f11000500000000000000000000000c9011002400000000000000000000002c9111000f000000000000003c9111000400000000000000000000009c9111001a0000000000000061735f6d756c74695f7468726573686f6c645f3100000000619611001100000000000000b9fa12001100000000000000a16613000400000000000000a566130018000000c49d1100550000003860130000000000c5651300340000003860130000000000199e110050000000699e110041000000d99a1100230000003860130000000000aa9e11002f0000003860130000000000f96513000b000000d99e110047000000ea9c110020000000209f1100120000009d9d1100130000006f6613000c00000061735f6d756c746900000000cafa12000900000000000000d3fa12000300000000000000619611001100000000000000b9fa120011000000000000007c9a11000f000000000000008b9a11002100000000000000a16613000400000000000000b09d11000a00000000000000ba9d11000a00000000000000c2b612000400000000000000555711000a0000000000000030681300060000009c96110056000000f29611003f0000003860130000000000ac9a11002d0000003860130000000000319711004c0000007d97110050000000cd9711000e0000003860130000000000c5651300340000003860130000000000f4921100560000004a931100510000009b9311001c000000db9711005700000032981100550000008798110036000000d99a1100230000003860130000000000fc9a110048000000449b11004700000038601300000000008b9b110057000000e29b110056000000389c1100380000003860130000000000f96513000b000000709c1100150000006c94110034000000a094110050000000f094110052000000859c11004900000042951100300000000b99110036000000419911003f00000016b412000d000000ce9c11001c000000809911004c000000cc99110024000000f09911002d000000ea9c110020000000312813000d0000000a9d110049000000539d11004a0000009d9d1100130000006f6613000c000000617070726f76655f61735f6d756c746900000000cafa12000900000000000000d3fa12000300000000000000619611001100000000000000b9fa120011000000000000007c9a11000f000000000000008b9a110021000000000000003d6c11000900000000000000949611000800000000000000555711000a0000000000000030681300060000009c96110056000000f29611003f0000003860130000000000319711004c0000007d97110050000000cd9711000e0000003860130000000000c5651300340000003860130000000000f4921100560000004a931100510000009b9311001c000000db97110057000000329811005500000087981100360000002e941100340000003860130000000000bd9811004e0000003860130000000000f96513000b000000629411000a0000006c94110034000000a094110050000000f09411005200000042951100300000000b99110036000000419911003f00000016b412000d000000809911004c000000cc99110024000000f09911002d000000b195110023000000312813000d0000001d9a11002f0000004c9a1100300000006f6613000c00000063616e63656c5f61735f6d756c74690000000000cafa12000900000000000000d3fa12000300000000000000619611001100000000000000b9fa120011000000000000007296110009000000000000007b96110019000000000000003d6c1100090000000000000094961100080000006c92110056000000c2921100320000003860130000000000c5651300340000003860130000000000f4921100560000004a931100510000009b9311001c000000b7931100580000000f9411001f0000002e941100340000003860130000000000f96513000b000000629411000a0000006c94110034000000a094110050000000f094110052000000429511003000000016b412000d0000007295110022000000949511001d000000b195110023000000312813000d000000d4951100460000001a961100470000006f6613000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20604f285329602e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c7320202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c20526566756e64204163636f756e742c2043616c6c736f746865725f7369676e61746f7269657374696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e5b75383b2033325d20526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d20202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d6d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e2049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c602920202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d2c2043616c6c7320286966206073746f72655f63616c6c6029202d20506c75732043616c6c205765696768744f706171756543616c6c73746f72655f63616c6c20496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f6620746865206d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e204f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e202d204442205765696768743a204e6f6e65000000000000f55011000900000002050200000000009b6813000c00000000000000949611000800000000000000f49f1100340000000000000000000000000000003860130028a01100000000000000000038a01100010000000000000000000000000000001c51110005000000010600000000000094961100080000000000000040a01100280000000000000000000000000000000000000000000000000000003860130068a011000000000000000000386013000000000000000000000000004d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e330000000000000001000000f000000078a0110025000000284f706171756543616c6c2c20543a3a4163636f756e7449642c2042616c616e63654f663c543e29330000000000000001000000f00000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e0000000000000048a111000b00000000000000b13c13000c000000000000003860130054a11100000000000000000064a1110002000000000000000000000074a111000d00000000000000b13c13000c000000000000003860130084a11100000000000000000094a111000100000000000000000000009ca111000e00000000000000d3fa1200030000000000000038601300aca111000000000000000000bca1110001000000000000004465706f73697442617365003300000000000000010000002801000059a211005c000000b5a211001b0000004465706f736974466163746f720000003300000000000000010000002901000004a21100550000004d61785369676e61746f7269657300003300000000000000010000002a010000c4a111004000000020546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420666f72206120676976656e206d756c74697369672e2054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f2073746f726520612064697370617463682063616c6c20666f72206c617465722e0000000080a311000b000000000000008ca31100030000000000000000000000a4a31100010000000000000000000000aca311001000000000000000bca31100040000000000000000000000dca31100020000000000000000000000eca311001000000000000000fca3110005000000000000000000000024a411000100000000000000000000002ca411001100000000000000bca3110004000000000000000000000040a4110001000000000000004e65774d756c7469736967007a621300090000007a621300090000000ca511000800000075a51100470000004d756c7469736967417070726f76616c7a62130009000000f6a41100160000007a621300090000000ca511000800000014a511003300000047a511002e0000004d756c746973696745786563757465647a62130009000000f6a41100160000007a621300090000000ca5110008000000a66213000e000000a0a41100560000004d756c746973696743616e63656c6c656400000048a41100580000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e205c5b63616e63656c6c696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d54696d65706f696e743c426c6f636b4e756d6265723e43616c6c486173682041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e205c5b617070726f76696e672c2074696d65706f696e742c206d756c74697369672c2063616c6c5f686173685c5d2041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e205c5b617070726f76696e672c206d756c74697369672c2063616c6c5f686173685c5d626162653a65717569766f636174696f696d2d6f6e6c696e653a6f66666c696e6772616e6470613a65717569766f6361000000000ca7110007000000010500000000000013a711000d0000000000000020a71100340000000000000000000000000000000000000000000000000000003860130054a71100000000000000000064a7110001000000000000000000000000000000a8ff11001600000002050500000000006ca71100040000000000000070a711000e000000000000007ea71100120000000000000000000000000000003860130090a711000000000000000000a0a7110001000000000000000100000000000000a8a711001200000001050000000000006ca711000400000000000000137e13000700000000000000000000000000000000000000000000000000000038601300bca711000000000000000000cca711000600000000000000010000005265706f7274735265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e3300000000000000010000002b01000065a91100520000004b696e644f706171756554696d65536c6f745665633c5265706f727449644f663c543e3e330000000000000001000000f70000001ba911004a0000005265706f72747342794b696e64496e64657800003300000000000000010000000e010000fca7110044000000386013000000000040a811002f00000038601300000000006fa8110052000000c1a811005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e0000000000515b11000b000000000000003caa1100050000000000000000000000b4aa1100040000000000000000000000415b11001000000000000000f8341300010000000000000000000000d4aa1100030000000000000000000000325b11000f00000000000000f8341300010000000000000000000000ecaa1100070000000000000000000000c03813000400000000000000eb831300060000000000000047ad110006000000000000009b6813000c00000000000000ef5113000600000000000000b13c13000c000000000000004dad11000c0000000000000059ad1100100000000000000069ad11000c0000000000000059ad110010000000b3ac11005b0000000ead110039000000386013000000000099381300270000005fac1100540000003860130000000000993813002700000024ab11004a00000038601300000000006eab110052000000c0ab11004f0000000fac11001c00000038601300000000002bac1100340000002054727920746f206f6e626f61726420612070617261636861696e2074686174206861732061206c6561736520666f72207468652063757272656e74206c6561736520706572696f642e20546869732066756e6374696f6e2063616e2062652075736566756c2069662074686572652077617320736f6d6520737461746520697373756520776974682061207061726120746861742073686f756c642068617665206f6e626f61726465642c206275742077617320756e61626c6520746f2e204173206c6f6e67206173207468657920686176652061206c6561736520706572696f642c2077652063616e206c6574207468656d206f6e626f6172642066726f6d20686572652e204f726967696e206d757374206265207369676e65642c206275742063616e2062652063616c6c656420627920616e796f6e652e20436c65617220616c6c206c656173657320666f72206120506172612049642c20726566756e64696e6720616e79206465706f73697473206261636b20746f20746865206f726967696e616c206f776e6572732e204a757374206120686f747769726520696e746f2074686520606c656173655f6f7574602063616c6c2c20696e206361736520526f6f742077616e747320746f20666f72636520736f6d65206c6561736520746f2068617070656e20696e646570656e64656e746c79206f6620616e79206f74686572206f6e2d636861696e206d656368616e69736d20746f207573652069742e6c6561736572706572696f645f626567696e4c65617365506572696f644f663c543e706572696f645f636f756e740000000000000097511100060000000105000000000000eb8313000600000000000000d8ad1100290000000000000000000000000000000000000000000000000000003860130004ae1100000000000000000014ae11001000000000000000010000005665633c4f7074696f6e3c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e3e0000003300000000000000010000002c01000094ae1100450000003860130000000000d9ae1100660000003faf11003c00000038601300000000007baf110058000000d3af11002c0000003860130000000000ffaf11005800000057b011002d000000386013000000000084b0110054000000d8b011005800000030b1110057000000386013000000000087b111003700000020416d6f756e74732068656c64206f6e206465706f73697420666f7220656163682028706f737369626c792066757475726529206c65617365642070617261636861696e2e205468652061637475616c20616d6f756e74206c6f636b6564206f6e2069747320626568616c6620627920616e79206163636f756e7420617420616e792074696d6520697320746865206d6178696d756d206f6620746865207365636f6e642076616c756573206f6620746865206974656d7320696e2074686973206c6973742077686f73652066697273742076616c756520697320746865206163636f756e742e20546865206669727374206974656d20696e20746865206c6973742069732074686520616d6f756e74206c6f636b656420666f72207468652063757272656e74204c6561736520506572696f642e20466f6c6c6f77696e67206974656d732061726520666f72207468652073756273657175656e74206c6561736520706572696f64732e205468652064656661756c742076616c75652028616e20656d707479206c6973742920696d706c6965732074686174207468652070617261636861696e206e6f206c6f6e6765722065786973747320286f72206e65766572206578697374656429206173206661722061732074686973206d6f64756c6520697320636f6e6365726e65642e20496620612070617261636861696e20646f65736e2774206578697374202a7965742a20627574206973207363686564756c656420746f20657869737420696e20746865206675747572652c207468656e2069742077696c6c206265206c6566742d7061646465642077697468206f6e65206f72206d6f726520604e6f6e65607320746f2064656e6f74652074686520666163742074686174206e6f7468696e672069732068656c64206f6e206465706f73697420666f7220746865206e6f6e2d6578697374656e7420636861696e2063757272656e746c792c206275742069732068656c6420617420736f6d6520706f696e7420696e20746865206675747572652e20497420697320696c6c6567616c20666f72206120604e6f6e65602076616c756520746f20747261696c20696e20746865206c6973742e000000000000564813000b000000000000001a6f13000e0000000000000038601300f8b1110000000000000000003860130000000000000000003300000000000000010000002d0100000000000060b211000e0000000000000070b2110001000000000000000000000078b2110001000000000000000000000080b21100060000000000000088b21100060000000000000000000000b8b2110003000000000000004e65774c65617365506572696f640000564813000b00000022b31100230000004c65617365640000eb831300060000007a62130009000000564813000b000000564813000b0000004f481300070000004f48130007000000df49130031000000104a130050000000d0b2110052000000205c5b70617261636861696e5f69642c206c65617365722c20706572696f645f626567696e2c20706572696f645f636f756e742c2065787472615f726573657665642c20746f74616c5f616d6f756e745c5d2041206e6577205b6c656173655f706572696f645d20697320626567696e6e696e672e2f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f63726f77646c6f616e2e72732f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f636f6e66696775726174696f6e2e72730000000000de5d11000500000000000000ccb31100010000000000000000000000e4b3110001000000000000000000000039b4110004000000000000003db4110021000000ecb311004d00000020456e7465722074686520706172617320696e686572656e742e20546869732077696c6c2070726f63657373206269746669656c647320616e64206261636b65642063616e646964617465732e6461746150617261636861696e73496e686572656e74446174613c543a3a4865616465723e50617261496e686572656e74000000000000ccb41100080000000000000000000000da7613000200000000000000000000000000000000000000000000000000000000000000000000000000000038601300d4b411000000000000000000e4b41100060000000000000000000000496e636c75646564330000000000000001000000f000000014b511003b00000038601300000000004fb5110058000000a7b511002f0000003860130000000000d6b511005200000020576865746865722074686520706172617320696e686572656e742077617320696e636c756465642077697468696e207468697320626c6f636b2e2054686520604f7074696f6e3c28293e60206973206566666563746976656c79206120626f6f6c2c20627574206974206e6576657220686974732073746f7261676520696e2074686520604e6f6e65602076617269616e742064756520746f207468652067756172616e74656573206f66204652414d4527732073746f7261676520415049732e204966207468697320697320604e6f6e65602061742074686520656e64206f662074686520626c6f636b2c2077652070616e696320616e642072656e6465722074686520626c6f636b20696e76616c69642e2f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f68726d702e7273536f6d654e6f6e653300000004000000040000002e01000065b711001c00000049b711001c00000017b711001a00000031b7110018000000fbb611000a00000005b7110012000000e3b6110018000000cdb6110016000000b0b611001d0000004661696c656420746f206665746368206e6574776f726b2073746174654661696c656420746f2061637175697265206c6f636b4661696c656420746f207369676e20686561727462656174417574686f726974792020697320616c7265616479206f6e6c696e6548656172746265617420616c72656164792073656e74206174202e2057616974696e6720666f7220696e636c7573696f6e2e546f6f206561726c7920746f2073656e64206865617274626561742e4661696c656420746f207375626d6974207472616e73616374696f6e00000000000000524f11000c0000000000000010b811000100000000000000000000006b4f1100170000000000000018b811000100000000000000000000005e4f11000d0000000000000020b811000100000000000000000000008b4f1100060000000000000028b81100010000000000000000000000824f1100090000000000000030b811000100000000000000ebb8110019000000c3b8110028000000a9b811001a0000007fb811002a00000038b8110047000000204b65792073657474696e67206163636f756e74206973206e6f74206c6976652c20736f206974277320696d706f737369626c6520746f206173736f6369617465206b6579732e204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e000000000c51110010000000000000008cba11000100000000000000000000003b5111000f0000000000000094ba11000100000000000000000000009cba11001100000000000000b0ba1100010000000000000000000000ca5011001100000000000000b8ba1100010000000000000000000000db5011001200000000000000c0ba11000100000000000000000000006a5111001500000000000000c8ba11000100000000000000000000007f5111001300000000000000d0ba1100010000000000000000000000a42013000800000000000000d8ba1100010000000000000000000000701613000800000000000000e0ba1100010000000000000000000000215111000b00000000000000e8ba1100010000000000000000000000fe5011000e00000000000000f0ba11000100000000000000000000004a5111001300000000000000f8ba11000100000000000000000000002c5111000f0000000000000000bb11000100000000000000000000005d5111000d0000000000000008bb11000100000000000000f7bd110020000000cbbd11002c0000004e6f417070726f76616c734e6565646564000000a3bd11002800000078bd11002b0000004cbd11002c00000008bd110044000000c4bc1100440000008cbc11003800000040bc11004c000000f8bb110048000000acbb11004c0000006ebb11003e00000039bb11003500000010bb11002900000020546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e20546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e20412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c64206d7573742062652032206f7220677265617465722e0000000000c05111000b0000000000000038601300000000000000000000000000cb5111000b0000000000000038601300000000000000000000000000e8511100080000000000000088be1100010000000000000000000000d6511100120000000000000090be11000100000000000000c6be11002800000098be11002e00000020546865206d65737361676527732077656967687420636f756c64206e6f742062652064657465726d696e65642e20546865206d65737361676520657865637574696f6e206661696c73207468652066696c7465722e000000000000ee5d11000700000000000000d0bf1100010000000000000000000000a42013000800000000000000d8bf1100010000000000000000000000975b11000800000000000000e0bf1100010000000000000000000000e35d11000b00000000000000e8bf1100010000000000000000000000825b11000900000000000000f0bf11000100000000000000000000008b5b11000c00000000000000f8bf11000100000000000000000000005c5b11000b0000000000000000c01100010000000000000000000000675b11000b0000000000000008c0110001000000000000005cc11100490000003ec111001e0000000ac1110034000000c1c0110049000000a5c011001c0000005fc01100460000002ac011003500000010c011001a0000002043616e6e6f74206164642073656c662061732070726f78792e20416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2043616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e204163636f756e7420697320616c726561647920612070726f78792e20412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e2053656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2050726f787920726567697374726174696f6e206e6f7420666f756e642e2054686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e617373657274696f6e206661696c65643a20696478203c2043415041434954592f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e6f64652e7273617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d2031c5c111005b0000007602000009000000c5c111005b0000007a02000009000000617373657274696f6e206661696c65643a2073656c662e686569676874203e2030000000c5c111005b0000003d02000009000000c5c111005b0000002804000016000000617373657274696f6e206661696c65643a207372632e6c656e2829203d3d206473742e6c656e2829c5c111005b000000a506000005000000617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d2031000000c5c111005b0000009603000009000000c5c111005b000000650400001600000054c5110013000000c5c111005b000000a10400001f000000617373657274696f6e206661696c65643a206e65775f6c6566745f6c656e203c3d2043415041434954590000c5c111005b000000d504000009000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e202b20636f756e74203c3d2043415041434954590000c5c111005b000000880500000d000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e203e3d20636f756e74c5c111005b000000890500000d000000c5c111005b000000b905000016000000617373657274696f6e206661696c65643a206f6c645f72696768745f6c656e202b20636f756e74203c3d20434150414349545900c5c111005b000000490500000d000000617373657274696f6e206661696c65643a206f6c645f6c6566745f6c656e203e3d20636f756e7400c5c111005b0000004a0500000d000000c5c111005b0000007905000016000000617373657274696f6e206661696c65643a206d6174636820747261636b5f656467655f696478207b5c6e202020204c6566744f7252696768743a3a4c6566742869647829203d3e20696478203c3d206f6c645f6c6566745f6c656e2c5c6e202020204c6566744f7252696768743a3a52696768742869647829203d3e20696478203c3d2072696768745f6c656e2c5c6e7d000000c5c111005b0000001b05000009000000656d70747920696e7465726e616c206e6f6465617373657274696f6e206661696c65643a206d6964203c3d2073656c662e6c656e28292f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f72696e675f736c696365732e72738ac5110066000000200000000e000000e83013004d000000010600000900000020c611004c000000cf060000240000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f7665632f6d6f642e72737cc611002d0000000b020000150000002f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f7363686564756c65722e72730000003300000000000000010000004900000028cc11006b0000005c0000001f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000f0ca110054000000350000000d0000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f7665632f737065635f657874656e642e727354cb11005e00000035000000120000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f7665632f737065635f66726f6d5f697465725f6e65737465642e72736e6f6e652076616c756573206172652066696c7465726564206f757420696e2070726576696f7573206c6f6769633b20716564000000911313002800000078020000120000003300000000000000010000004900000028cc11006b0000006c0000001d00000028cc11006b0000006c000000390000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f70687261676d656e2e727350617261496e636c7573696f6e50656e64696e67417661696c6162696c6974790028cc11006b000000a60000001c0000008c9212006c000000650000001e0000004f6363757069656420636f726520616c77617973206861732070656e64696e6720617661696c6162696c6974793b20716564000040cd110037000000850000001a000000c1cd11007400000040cd110037000000660000002300000040cd110037000000690000001a0000002f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f72756e74696d655f6170695f696d706c2f76312e727372756e74696d653a3a706f6c6b61646f742d6170693a3a7631706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a72756e74696d655f6170695f696d706c3a3a7631436f756c64206e6f742064657465726d696e65207468652067726f757020726573706f6e7369626c6520666f7220636f7265206578747261637465642066726f6d206c697374206f6620636f72657320666f7220736f6d65207072696f7220626c6f636b20696e2073616d652073657373696f6e70616c6c65745f617574686f72736869703a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f617574686f72736869702f7372632f6c69622e727370616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f656c656374696f6e2d70726f76696465722d6d756c74692d70686173652f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d702f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f646d702e727370616c6c65745f626162653a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f626162652f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e2f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f696e636c7573696f6e2e72737365745f756e636c657300000067cf1100270000005b00000001000000436865636b576569676874000000000014d31100110000000000000028d3110001000000000000000000000030d311001c000000000000004cd3110001000000000000000000000054d31100190000000000000070d3110001000000000000000000000078d31100180000000000000090d3110001000000000000000000000098d311001400000000000000acd31100010000000000000000000000b4d311002000000000000000d4d31100010000000000000000000000dcd311000d00000000000000ecd31100010000000000000000000000f4d31100130000000000000008d4110001000000000000000000000094161300100000000000000010d4110001000000000000000000000018d4110014000000000000002cd4110001000000000000000000000034d411000f0000000000000044d411000100000000000000000000004cd411001b0000000000000068d4110001000000000000000000000070d41100170000000000000088d4110001000000000000000000000090d411001100000000000000a4d41100010000000000000000000000acd411001300000000000000c0d41100010000000000000000000000c8d411000e00000000000000d8d41100010000000000000000000000e0d411001100000000000000f4d41100010000000000000000000000fcd411001a0000000000000018d5110001000000000000000000000020d511000d0000000000000030d5110001000000000000000000000038d51100200000000000000058d5110001000000000000000000000060d51100150000000000000078d5110001000000000000000000000080d51100180000000000000098d51100010000000000000000000000a0d511001300000000000000b4d51100010000000000000000000000bcd511001900000000000000d8d51100010000000000000057726f6e674269746669656c6453697a6500000037da11002b0000004269746669656c644475706c69636174654f72556e6f726465726564e3d911005400000056616c696461746f72496e6465784f75744f66426f756e6473000000c4d911001f000000496e76616c69644269746669656c645369676e6174757265b2d9110012000000556e7363686564756c656443616e64696461746586d911002c00000043616e6469646174655363686564756c65644265666f7265506172614672656539d911004d00000057726f6e67436f6c6c61746f720000000dd911002c0000005363686564756c65644f75744f664f7264657200efd811001e000000c5d811002a0000005072656d6174757265436f646555706772616465abd811001a0000004e6577436f6465546f6f4c617267650092d811001900000043616e6469646174654e6f74496e506172656e74436f6e746578740071d8110021000000556e6f63637570696564426974496e4269746669656c640028d8110049000000496e76616c696447726f7570496e64657800000000d8110028000000496e73756666696369656e744261636b696e6700dbd7110025000000496e76616c69644261636b696e670000a1d711003a0000004e6f74436f6c6c61746f725369676e656400000086d711001b00000056616c69646174696f6e44617461486173684d69736d61746368000054d7110032000000496e7465726e616c4572726f7200000012d7110042000000496e636f7272656374446f776e776172644d65737361676548616e646c696e67dbd6110037000000496e76616c69645570776172644d6573736167657300000093d611004800000048726d7057617465726d61726b4d697368616e646c696e674ed6110045000000496e76616c69644f7574626f756e6448726d700018d6110036000000496e76616c696456616c69646174696f6e436f646548617368000000e0d5110038000000205468652076616c69646174696f6e20636f64652068617368206f66207468652063616e646964617465206973206e6f742076616c69642e205468652048524d50206d657373616765732073656e74206279207468652063616e646964617465206973206e6f742076616c69642e205468652063616e646964617465206469646e277420666f6c6c6f77207468652072756c6573206f662048524d502077617465726d61726b20616476616e63656d656e742e204174206c65617374206f6e6520757077617264206d6573736167652073656e7420646f6573206e6f7420706173732074686520616363657074616e63652063726974657269612e2054686520646f776e77617264206d657373616765207175657565206973206e6f742070726f63657373656420636f72726563746c792e20496e7465726e616c206572726f72206f6e6c792072657475726e6564207768656e20636f6d70696c6564207769746820646562756720617373657274696f6e732e205468652076616c69646174696f6e2064617461206861736820646f6573206e6f74206d617463682065787065637465642e20436f6c6c61746f7220646964206e6f74207369676e20506f562e20496e76616c69642028626164207369676e61747572652c20756e6b6e6f776e2076616c696461746f722c206574632e29206261636b696e672e20496e73756666696369656e7420286e6f6e2d6d616a6f7269747929206261636b696e672e20496e76616c69642067726f757020696e64657820696e20636f72652061737369676e6d656e742e20546865206269746669656c6420636f6e7461696e732061206269742072656c6174696e6720746f20616e20756e61737369676e656420617661696c6162696c69747920636f72652e2043616e646964617465206e6f7420696e20706172656e7420636f6e746578742e204f757470757420636f646520697320746f6f206c6172676520436f64652075706772616465207072656d61747572656c792e2048656164206461746120657863656564732074686520636f6e66696775726564206d6178696d756d2e205363686564756c656420636f726573206f7574206f66206f726465722e2043616e64696461746520696e636c756465642077697468207468652077726f6e6720636f6c6c61746f722e2043616e646964617465207363686564756c656420646573706974652070656e64696e672063616e64696461746520616c7265616479206578697374696e6720666f722074686520706172612e2043616e646964617465207375626d6974746564206275742070617261206e6f74207363686564756c65642e20496e76616c6964207369676e61747572652056616c696461746f7220696e646578206f7574206f6620626f756e64732e204d756c7469706c65206269746669656c6473207375626d69747465642062792073616d652076616c696461746f72206f722076616c696461746f7273206f7574206f66206f7264657220627920696e6465782e20417661696c6162696c697479206269746669656c642068617320756e65787065637465642073697a652e00001ed011002d000000cc000000010000001edb11000f00000072756e74696d653a3a73797374656d6672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f73797374656d2f7372632f657874656e73696f6e732f636865636b5f7765696768742e7273426164206d616e6461746f72793a2000000000000000a0db11001a00000000000000bcdb1100010000000000000000000000c4db11001b00000000000000e0db1100010000000000000000000000e8db1100190000000000000004dc11000100000000000000000000000cdc11000f000000000000001cdc1100010000000000000050726544697370617463684561726c795375626d697373696f6e000093dc11001a000000507265446973706174636857726f6e6757696e6e6572436f756e740070dc11002300000050726544697370617463685765616b5375626d697373696f6e0000004bdc1100250000004f637743616c6c57726f6e674572610024dc110027000000204f4357207375626d697474656420736f6c7574696f6e20666f722077726f6e6720726f756e64205375626d697373696f6e2077617320746f6f207765616b2c2073636f72652d776973652e2057726f6e67206e756d626572206f662077696e6e6572732070726573656e7465642e205375626d697373696f6e2077617320746f6f206561726c792e000000eadc110002000000ecdc1100360000004f6666636861696e456c656374696f6e72756e74696d653a3a656c656374696f6e2d70726f76696465725b235d20f09f97b32020756e7369676e6564207472616e73616374696f6e2076616c69646174696f6e206661696c65642064756520746f200000eadc11000200000079dd11002000000099dd110002000000eadc1100020000004cdd11002d0000005d20f09f97b320206661696c656420746f206f70656e20756e7369676e65642070686173652064756520746f205d20f09f97b320205374617274696e6720756e7369676e656420706861736528292e2e536e617073686f7420746f6f2062696720666f72207375626d697373696f6e2e424142454261626545717569766f636174696f6e736c6f74206e756d626572206973207536343b2069742073686f756c642072656c61746520696e20736f6d652077617920746f2077616c6c20636c6f636b2074696d653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e0000a1cf110057000000640200000e000000a1cf110057000000660200003b00000054696d657374616d7020736c6f74206d757374206d61746368206043757272656e74536c6f746000a1cf1100570000003e0300000900000065706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b20716564000000a1cf110057000000060200000e000000a1cf1100570000000e0200000e00000065706f636820696e646578206973207536343b20697420697320616c77617973206f6e6c7920696e6372656d656e746564206279206f6e653b20696620753634206973206e6f7420656e6f7567682077652073686f756c6420637261736820666f72207361666574793b207165642e00a1cf1100570000004b0200004600000045706f6368436f6e66696720697320696e697469616c697a656420696e2067656e657369733b207765206e65766572206074616b6560206f7220606b696c6c602069743b20716564a1cf1100570000005702000029000000a1cf110057000000440200002d00000000000000106c130013000000000000007ce01100020000000000000000000000ace01100040000000000000000000000746c13001c000000000000007ce01100020000000000000000000000cce011000800000000000000000000000ce11100120000000000000020e1110001000000000000000000000038e11100040000000000000000000000ef701300120000000000000062e311001c000000000000002b7113000f000000000000003a711300100000008ce2110043000000cfe211004200000011e311004400000055e311000d0000008ce2110043000000cfe211004200000011e311004400000055e311000d000000157013004400000059701300460000009f70130046000000e57013000a000000706c616e5f636f6e6669675f6368616e676500000000000072e21100060000000000000078e211001400000058e1110058000000b0e111005500000005e21100570000005ce211001600000020506c616e20616e2065706f636820636f6e666967206368616e67652e205468652065706f636820636f6e666967206368616e6765206973207265636f7264656420616e642077696c6c20626520656e6163746564206f6e20746865206e6578742063616c6c20746f2060656e6163745f65706f63685f6368616e6765602e2054686520636f6e6669672077696c6c20626520616374697661746564206f6e652065706f63682061667465722e204d756c7469706c652063616c6c7320746f2074686973206d6574686f642077696c6c207265706c61636520616e79206578697374696e6720706c616e6e656420636f6e666967206368616e6765207468617420686164206e6f74206265656e20656e6163746564207965742e636f6e6669674e657874436f6e66696744657363726970746f72205265706f727420617574686f726974792065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e45717569766f636174696f6e50726f6f663c543a3a4865616465723e00000000000080e911000a00000000000000000000008ae91100030000000000000000000000000000000000000000000000000000000000000000000000000000003860130090e911000000000000000000a0e9110001000000000000000100000000000000a8e911000b0000000000000000000000b3e911002700000000000000000000000000000000000000000000000000000000000000000000000000000038601300dce911000000000000000000ece9110001000000000000000100000000000000f4e911000b0000000000000000000000ffe91100040000000000000000000000000000000000000000000000000000000000000000000000000000003860130004ea1100000000000000000014ea11000200000000000000010000000000000024ea11000b0000000000000000000000ffe91100040000000000000000000000000000000000000000000000000000000000000000000000000000003860130004ea1100000000000000000030ea11000100000000000000010000000000000038ea11000a000000000000000000000042ea1100160000000000000000000000000000000000000000000000000000000000000000000000000000003860130058ea1100000000000000000068ea11000a000000000000000100000000000000b8ea110018000000000000000000000078e211001400000000000000000000000000000000000000000000000000000000000000000000000000000038601300d0ea11000000000000000000e0ea110001000000000000000000000000000000e8ea11000e000000000000000000000042ea1100160000000000000000000000000000000000000000000000000000000000000000000000000000003860130058ea11000000000000000000f8ea11000100000000000000010000000000000000eb11000f0000000000000000000000b3e911002700000000000000000000000000000000000000000000000000000000000000000000000000000038601300dce91100000000000000000010eb11000100000000000000010000000000000018eb11000c0000000000000000000000587e1300030000000000000000000000000000000000000000000000000000000000000000000000000000003860130024eb1100000000000000000034eb1100090000000000000001000000000000007ceb1100110000000105000000000000587e130003000000000000008deb11001b00000000000000000000000000000000000000000000000000000038601300a8eb11000000000000000000b8eb110001000000000000000100000000000000c0eb11000b0000000000000000000000cbeb11000f00000000000000000000000000000000000000000000000000000000000000000000000000000038601300dceb11000000000000000000eceb110002000000000000000000000000000000fceb1100130000000000000000000000cbeb11000f0000000000000000000000000000000000000000000000000000000000000000000000000000003860130010ec1100000000000000000020ec11000300000000000000010000000000000038ec11000a000000000000000000000020741300200000000000000000000000000000000000000000000000000000000000000000000000000000003860130044ec1100000000000000000054ec1100050000000000000001000000000000007cec11000800000000000000000000001a6f13000e0000000000000000000000000000000000000000000000000000000000000000000000000000003860130024eb1100000000000000000084ec110005000000000000000100000000000000acec11000b0000000000000000000000b7ec11001600000000000000000000000000000000000000000000000000000000000000000000000000000038601300d0ec11000000000000000000e0ec110001000000000000000000000000000000e8ec11000f0000000000000000000000b7ec11001600000000000000000000000000000000000000000000000000000000000000000000000000000038601300d0ec11000000000000000000f8ec110002000000000000000000000045706f6368496e646578753634000000330000000000000001000000ef00000014f6110015000000417574686f7269746965735665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e00003300000000000000010000002f010000f9f511001b00000047656e65736973536c6f74536c6f74003300000000000000010000003001000097f511003e000000d5f511002400000043757272656e74536c6f740082f511001500000052616e646f6d6e6573737363686e6f72726b656c3a3a52616e646f6d6e65737333000000000000000100000031010000bcf311002e0000003860130000000000eaf311000b0000003860130000000000f5f311004100000036f411003e00000074f4110045000000b9f4110045000000fef41100410000003ff511004300000050656e64696e6745706f6368436f6e6669674368616e6765330000000000000001000000f200000064f31100580000004e65787452616e646f6d6e65737300004df31100170000004e657874417574686f7269746965730035f31100180000005365676d656e74496e646578330000000000000001000000f4000000f0f111001f00000038601300000000000ff211003d0000004cf21100400000008cf21100250000003860130000000000b1f211003b000000ecf21100420000002ef3110007000000556e646572436f6e737472756374696f6e5665633c7363686e6f72726b656c3a3a52616e646f6d6e6573733e33000000000000000100000027010000abf1110045000000496e697469616c697a65644d6179626552616e646f6d6e6573730000330000000000000001000000f500000024f111004000000064f1110047000000417574686f7256726652616e646f6d6e65737300330000000000000001000000f500000033f01100570000008af0110054000000def011004600000045706f63685374617274000033000000000000000100000032010000d9ee11005700000030ef11000500000035ef11005200000087ef110056000000ddef1100560000004c6174656e657373eeed110036000000386013000000000024ee11004500000069ee110044000000adee11002c00000045706f6368436f6e6669674261626545706f6368436f6e66696775726174696f6e000000330000000000000001000000f20000008ded1100610000004e65787445706f6368436f6e6669670008ed11004b00000053ed11003a0000002054686520636f6e66696775726174696f6e20666f7220746865206e6578742065706f63682c20604e6f6e65602069662074686520636f6e6669672077696c6c206e6f74206368616e67652028796f752063616e2066616c6c6261636b20746f206045706f6368436f6e6669676020696e737465616420696e20746861742063617365292e2054686520636f6e66696775726174696f6e20666f72207468652063757272656e742065706f63682e2053686f756c64206e6576657220626520604e6f6e656020617320697420697320696e697469616c697a656420696e2067656e657369732e20486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054686520626c6f636b206e756d62657273207768656e20746865206c61737420616e642063757272656e742065706f6368206861766520737461727465642c20726573706563746976656c7920604e2d316020616e6420604e602e204e4f54453a20576520747261636b207468697320697320696e206f7264657220746f20616e6e6f746174652074686520626c6f636b206e756d626572207768656e206120676976656e20706f6f6c206f6620656e74726f7079207761732066697865642028692e652e20697420776173206b6e6f776e20746f20636861696e206f6273657276657273292e2053696e63652065706f6368732061726520646566696e656420696e20736c6f74732c207768696368206d617920626520736b69707065642c2074686520626c6f636b206e756d62657273206d6179206e6f74206c696e6520757020776974682074686520736c6f74206e756d626572732e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e29207468617420696e636c756465732074686520565246206f75747075742067656e657261746564206174207468697320626c6f636b2e2054686973206669656c642073686f756c6420616c7761797320626520706f70756c6174656420647572696e6720626c6f636b2070726f63657373696e6720756e6c657373207365636f6e6461727920706c61696e20736c6f74732061726520656e61626c65642028776869636820646f6e277420636f6e7461696e206120565246206f7574707574292e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2054574f582d4e4f54453a20605365676d656e74496e6465786020697320616e20696e6372656173696e6720696e74656765722c20736f2074686973206973206f6b61792e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f636820617574686f7269746965732e204e6578742065706f63682072616e646f6d6e6573732e2050656e64696e672065706f636820636f6e66696775726174696f6e206368616e676520746861742077696c6c206265206170706c696564207768656e20746865206e6578742065706f636820697320656e61637465642e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e000000000000009cf611000d000000000000008ae91100030000000000000038601300acf611000000000000000000bcf61100030000000000000000000000d4f611001100000000000000e5f61100090000000000000038601300f0f61100000000000000000000f71100050000000000000045706f63684475726174696f6e0000003300000000000000010000003301000058f811003b00000093f8110046000000d9f81100480000004578706563746564426c6f636b54696d65543a3a4d6f6d656e7400003300000000000000010000003401000028f711004100000069f7110044000000adf7110041000000eef711004200000030f811002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e2054686520616d6f756e74206f662074696d652c20696e20736c6f74732c207468617420656163682065706f63682073686f756c64206c6173742e204e4f54453a2043757272656e746c79206974206973206e6f7420706f737369626c6520746f206368616e6765207468652065706f6368206475726174696f6e2061667465722074686520636861696e2068617320737461727465642e20417474656d7074696e6720746f20646f20736f2077696c6c20627269636b20626c6f636b2070726f64756374696f6e2e7061726974792f6d756c74692d70686173652d756e7369676e65642d656c656374696f6e2f6c6f636b0000eadc11000200000052fe11002a000000eadc110002000000bffd110039000000eadc11000200000043fc110028000000eadc110002000000fffb110044000000726573746f726564eadc1100020000004cfb110029000000eadc1100020000002efb11001e000000eadc1100020000000bfb110023000000eadc1100020000003ffa110029000000eadc110002000000e4f91100370000005d20f09f97b320206f6666636861696e20776f726b6572206c6f636b206e6f742072656c65617365642c20646561646c696e652069732070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173655d20f09f97b3202072657375626d6974206f6666636861696e20746872656164206f75747075743a2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65642f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f656c656374696f6e2d70726f76696465722d6d756c74692d70686173652f7372632f756e7369676e65642e72735d20f09f97b32020776970696e6720696e6665617369626c6520736f6c7574696f6e2e5d20f09f97b320206d696e696e672061206e657720736f6c7574696f6e2e5d20f09f97b32020726573746f72696e6720736f6c7574696f6e206661696c65642064756520746f20000000eadc110002000000d8fb110027000000cdfb11000b000000eadc110002000000a8fb110025000000cdfb11000b0000005d20f09f97b32020666561736962696c69747920636865636b206661696c656420666f722020736f6c7574696f6e3a205d20f09f97b320207072652d646973706174636820636865636b73206661696c656420666f72205d20f09f97b320206d696e657220617474656d7074696e6720746f20726573746f7265206f7220636f6d7075746520616e20756e7369676e656420736f6c7574696f6e2e5d20f09f97b32020696e697469616c206f6666636861696e20746872656164206f75747075743a2000eadc1100020000007cfc11003e0000005d20f09f97b320206d696e6572207375626d697474696e67206120736f6c7574696f6e20617320616e20756e7369676e6564207472616e73616374696f6e0000eadc1100020000006afd11000d00000077fd11001c000000a9fd11001600000096fa110075000000cb0100002100000096fa110075000000d20100003c000000eadc1100020000006afd11000d00000077fd11001c00000093fd1100160000006d696e6564000000eadc1100020000003cfd11002400000060fd11000a0000005d20f09f97b320206d696e6564206120736f6c7574696f6e20776974682073636f72652020616e642073697a65205d20f09f97b3202066726f6d202061737369676e6d656e74732c207472756e636174696e6720746f2020666f72206c656e6774682c2072656d6f76696e672020666f72207765696768742c2072656d6f76696e67205d20f09f97b320206d696e657220617474656d7074696e6720746f20636f6d7075746520616e20756e7369676e656420736f6c7574696f6e2e7061726974792f6d756c74692d70686173652d756e7369676e65642d656c656374696f6e726563656e746c792065786563757465642e666f726b2e6661696c656420746f20777269746520746f206f6666636861696e2064622e5d20f09f97b320206c6f636b20666f72206f6666636861696e20776f726b65722061637175697265642e7375626d69745f756e7369676e6564496e76616c696420756e7369676e6564207375626d697373696f6e206d7573742070726f6475636520696e76616c696420626c6f636b20616e6420646570726976652076616c696461746f722066726f6d20746865697220617574686f72696e67207265776172642e330000000c0000000400000022000000d7ce110070000000f40200003b000000d7ce110070000000f80200002b0000003860130000000000d7ce110070000000fb0200000d000000d7ce110070000000fc0200000d000000330000000c0000000400000023000000d7ce110070000000ff0200004e000000eadc1100020000007cff11002c0000005d20f09f97b3202071756575656420756e7369676e656420736f6c7574696f6e20776974682073636f726520436f6e63757272656e745265706f727473496e6465782f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f61726974686d657469632f7372632f66697865645f706f696e742e727373756d206f6620696e7075742063616e6e6f742066697420696e206054606c656e677468206f6620696e7075742069732067726561746572207468616e207a65726f3b206974206d757374206861766520612066697273743b207165640000004001120062000000e60000000e0000004001120062000000c90000003000000050726f6f662070726f766964656420696e20746865206d6f64756c6520646f633b207165642e00004001120062000000cb000000160000004001120062000000d50000002c0000004001120062000000d7000000120000004001120062000000eb000000300000004001120062000000f2000000140000004001120062000000fa000000210000004001120062000000fc000000140000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f61726974686d657469632f7372632f6c69622e72730000e09a120001000000ee0112002c000000e09a120001000000e20112000c00000070616c6c65745f7374616b696e673a3a6d6967726174696f6e733a3a76365d20f09f92b820446f6e652e5d20f09f92b8204d6967726174696e67207374616b696e6720746f2052656c65617365733a3a56365f305f30556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e744f6c64556e636c65000000000000004bd011000a00000000000000ac021200010000000000000000000000c4021200010000000000000000000000e50212000a00000000000000ef0212000e000000cc021200190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e0000000000000020041200060000000000000000000000260412003a000000000000000000000000000000000000000000000000000000000000000000000000000000386013006004120000000000000000007004120001000000000000000100000000000000780412000600000000000000000000009b6813000c000000000000000000000000000000000000000000000000000000000000000000000000000000386013008004120000000000000000009004120001000000000000000000000000000000980412000c0000000000000000000000c2b612000400000000000000000000000000000000000000000000000000000000000000000000000000000038601300a40412000000000000000000b4041200010000000000000001000000556e636c65735665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e330000000000000001000000350100000405120007000000417574686f720000330000000000000001000000f5000000eb04120019000000446964536574556e636c6573330000000000000001000000f0000000bc0412002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c6573446d70446f776e776172644d65737361676551756575657300000000000e051200150000000105000000000000eb8313000600000000000000e40512002b00000000000000000000000000000000000000000000000000000038601300100612000000000000000000200612000100000000000000010000000000000028061200190000000105000000000000eb8313000600000000000000410612000400000000000000000000000000000000000000000000000000000038601300480612000000000000000000580612000700000000000000010000005665633c496e626f756e64446f776e776172644d6573736167653c543a3a426c6f636b4e756d6265723e3e0033000000000000000100000036010000d207120034000000446f776e776172644d65737361676551756575654865616473486173680000003300000000000000010000000d01000090061200490000003860130000000000d906120024000000fd0612001e0000001b0712003a00000055071200480000009d071200350000002041206d617070696e6720746861742073746f7265732074686520646f776e77617264206d657373616765207175657565204d5143206865616420666f72206561636820706172612e2045616368206c696e6b20696e207468697320636861696e20686173206120666f726d3a206028707265765f686561642c20422c2048284d2929602c207768657265202d2060707265765f68656164603a206973207468652070726576696f757320686561642068617368206f72207a65726f206966206e6f6e652e202d206042603a206973207468652072656c61792d636861696e20626c6f636b206e756d62657220696e2077686963682061206d6573736167652077617320617070656e6465642e202d206048284d29603a206973207468652068617368206f6620746865206d657373616765206265696e6720617070656e6465642e2054686520646f776e77617264206d657373616765732061646472657373656420666f722061206365727461696e20706172612e000000000000280912001500000001050000000000003d0912000e000000000000004b0912002a000000000000000000000000000000000000000000000000000000386013007809120000000000000000008809120001000000000000000000000000000000a0cc1100130000000105000000000000eb8313000600000000000000900912003500000000000000000000000000000000000000000000000000000038601300c80912000000000000000000d809120001000000000000000000000000000000e00912001e0000000105000000000000eb8313000600000000000000fe0912001400000000000000000000000000000000000000000000000000000038601300140a12000000000000000000240a1200010000000000000000000000417661696c6162696c6974794269746669656c647356616c696461746f72496e646578417661696c6162696c6974794269746669656c645265636f72643c543a3a426c6f636b4e756d6265723e000000330000000000000001000000f5000000980a12005900000043616e64696461746550656e64696e67417661696c6162696c6974793c543a3a486173682c20543a3a426c6f636b4e756d6265723e000000330000000000000001000000370100006b0a12002d00000050656e64696e67417661696c6162696c697479436f6d6d69746d656e747343616e646964617465436f6d6d69746d656e74730000330000000000000001000000f20000002c0a12003f0000002054686520636f6d6d69746d656e7473206f662063616e646964617465732070656e64696e6720617661696c6162696c6974792c206279205061726149642e2043616e646964617465732070656e64696e6720617661696c6162696c6974792062792060506172614964602e20546865206c6174657374206269746669656c6420666f7220656163682076616c696461746f722c20726566657272656420746f20627920746865697220696e64657820696e207468652076616c696461746f72207365742e0000001ed011002d000000380100003100000076616c696461746f72206269746669656c647320636865636b6564206e6f7420746f20636f6e7461696e206269747320636f72726573706f6e64696e6720746f20756e6f6363757069656420636f7265733b2071656400001ed011002d0000003a01000016000000860b12008f00000072756e74696d653a3a696e636c7573696f6e496e636c7573696f6e3a3a70726f636573735f6269746669656c64733a2050656e64696e67417661696c6162696c69747920616e642050656e64696e67417661696c6162696c697479436f6d6d69746d656e74730a09090909090909617265206f7574206f662073796e632c2064696420736f6d656f6e65206d6573732077697468207468652073746f726167653f0000001ed011002d000000430200001f0000007c0c12003c000000b80c120010000000c80c12000a0000001ed011002d000000e5010000280000007468697320717565727920646f6e652061626f76653b2071656400001ed011002d0000002e0200002600000056616c69646174696f6e206f75747075747320636865636b696e6720647572696e6720696e636c7573696f6e206f6620612063616e6469646174652020666f722070617261636861696e206060206661696c65643a204f7574626f756e6448726d7000003300000004000000040000003801000050726f636573736564446f776e776172644d65737361676573000000330000000400000004000000390100005570776172644d6573736167657300003300000004000000040000003a01000048726d7057617465726d61726b0000003300000004000000040000003b010000ac5b13005600000076000000090000007c0d12002b000000c80c12000a00000056616c69646174696f6e206f75747075747320636865636b696e6720666f722070617261636861696e206000000000002c0e12000f000000000000003c0e12000400000000000000000000005c0e1200010000000000000000000000640e120011000000000000003c0e1200040000000000000000000000780e1200010000000000000000000000800e12001100000000000000940e1200030000000000000000000000ac0e1200010000000000000043616e6469646174654261636b656400e20e120016000000c93c130008000000f80e120009000000610f12000a000000320f12002f00000043616e646964617465496e636c75646564000000010f12003100000043616e64696461746554696d65644f7574000000e20e120016000000c93c130008000000f80e120009000000b40e12002e00000020412063616e6469646174652074696d6564206f75742e205b63616e6469646174652c20686561645f646174615d43616e646964617465526563656970743c486173683e436f7265496e64657820412063616e6469646174652077617320696e636c756465642e205b63616e6469646174652c20686561645f646174615d20412063616e64696461746520776173206261636b65642e205b63616e6469646174652c20686561645f646174615d47726f7570496e64657800eadc110002000000c60f12002e0000009bdd110001000000eadc110002000000940f1200320000005d20f09f97b320204661696c656420746f2066696e616c697a6520656c656374696f6e20726f756e642e20726561736f6e205d20f09f97b3202046696e616c697a656420656c656374696f6e20726f756e64207769746820636f6d707574652000000000fc1012000e000000000000000c11120001000000000000000000000014111200040000000000000000000000341112001100000000000000481112000100000000000000000000005011120002000000000000000000000060111200080000000000000020621300010000000000000000000000681112000100000000000000000000007011120007000000000000002062130001000000000000000000000078111200010000000000000000000000801112001200000000000000941112000100000000000000000000009c111200010000000000000000000000a4111200140000000000000094111200010000000000000000000000b81112000100000000000000536f6c7574696f6e53746f7265640000fd1312000f0000003d1312002e00000038601300000000006b13120050000000bb13120042000000456c656374696f6e46696e616c697a65640000002613120017000000b7121200560000000d1312001900000052657761726465646d1212004a000000536c61736865640024121200490000005369676e65645068617365537461727465640000587e130003000000f311120031000000556e7369676e6564506861736553746172746564c0111200330000002054686520756e7369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20546865207369676e6564207068617365206f662074686520676976656e20726f756e642068617320737461727465642e20416e206163636f756e7420686173206265656e20736c617368656420666f72207375626d697474696e6720616e20696e76616c6964207369676e6564207375626d697373696f6e2e20416e206163636f756e7420686173206265656e20726577617264656420666f72207468656972207369676e6564207375626d697373696f6e206265696e672066696e616c697a65642e2054686520656c656374696f6e20686173206265656e2066696e616c697a65642c20776974682060536f6d6560206f662074686520676976656e20636f6d7075746174696f6e2c206f7220656c73652069662074686520656c656374696f6e206661696c65642c20604e6f6e65602e4f7074696f6e3c456c656374696f6e436f6d707574653e204120736f6c7574696f6e207761732073746f72656420776974682074686520676976656e20636f6d707574652e2049662074686520736f6c7574696f6e206973207369676e65642c2074686973206d65616e732074686174206974206861736e277420796574206265656e2070726f6365737365642e2049662074686520736f6c7574696f6e20697320756e7369676e65642c2074686973206d65616e7320746861742069742068617320616c736f206265656e2070726f6365737365642e456c656374696f6e436f6d70757465000000007cfe11000f0000000000000038141200020000000000000000000000681412000e00000000000000000000005017120008000000000000005817120019000000000000007117120007000000000000007817120016000000d81412002a00000038601300000000000215120033000000386013000000000035151200500000008515120056000000db151200580000003316120011000000386013000000000044161200570000009b16120054000000ef1612002800000038601300000000001717120039000000205375626d6974206120736f6c7574696f6e20666f722074686520756e7369676e65642070686173652e20546865206469737061746368206f726967696e20666f20746869732063616c6c206d757374206265205f5f6e6f6e655f5f2e2054686973207375626d697373696f6e20697320636865636b6564206f6e2074686520666c792e204d6f72656f7665722c207468697320756e7369676e656420736f6c7574696f6e206973206f6e6c792076616c696461746564207768656e207375626d697474656420746f2074686520706f6f6c2066726f6d20746865202a2a6c6f63616c2a2a206e6f64652e204566666563746976656c792c2074686973206d65616e732074686174206f6e6c79206163746976652076616c696461746f72732063616e207375626d69742074686973207472616e73616374696f6e207768656e20617574686f72696e67206120626c6f636b202873696d696c617220746f20616e20696e686572656e74292e20546f2070726576656e7420616e7920696e636f727265637420736f6c7574696f6e2028616e642074687573207761737465642074696d652f776569676874292c2074686973207472616e73616374696f6e2077696c6c2070616e69632069662074686520736f6c7574696f6e207375626d6974746564206279207468652076616c696461746f7220697320696e76616c696420696e20616e79207761792c206566666563746976656c792070757474696e6720746865697220617574686f72696e6720726577617264206174207269736b2e204e6f206465706f736974206f7220726577617264206973206173736f63696174656420776974682074686973207375626d697373696f6e2e736f6c7574696f6e526177536f6c7574696f6e3c436f6d706163744f663c543e3e7769746e657373536f6c7574696f6e4f72536e617073686f7453697a65000000000000d0191200050000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300d81912000000000000000000e819120006000000000000000100000000000000181a12000c0000000000000000000000241a120015000000000000000000000000000000000000000000000000000000000000000000000000000000386013003c1a120000000000000000004c1a120001000000000000000100000000000000541a12000e0000000000000000000000621a12001b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300801a12000000000000000000901a120001000000000000000000000000000000981a1200080000000000000000000000a01a12001b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300bc1a12000000000000000000cc1a120003000000000000000000000000000000e41a12000e0000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300f41a12000000000000000000041b1200030000000000000000000000000000001c1b12001000000000000000000000007817120016000000000000000000000000000000000000000000000000000000000000000000000000000000386013002c1b120000000000000000003c1b1200030000000000000000000000526f756e640000003300000000000000010000003c010000a81c12002b0000003860130000000000d31c120055000000281d12001b0000003860130000000000431d12005300000043757272656e74506861736550686173653c543a3a426c6f636b4e756d6265723e0000003300000000000000010000003d010000991c12000f000000517565756564536f6c7574696f6e5265616479536f6c7574696f6e3c543a3a4163636f756e7449643e000000330000000000000001000000f20000004a1c12004f000000536e617073686f74526f756e64536e617073686f743c543a3a4163636f756e7449643e00330000000000000001000000f5000000d71b12001c0000003860130000000000f31b12005700000044657369726564546172676574730000330000000000000001000000f5000000a41b12003300000038601300000000007a1b12002a000000536e617073686f744d65746164617461330000000000000001000000f5000000541b12002600000038601300000000007a1b12002a00000020546865206d65746164617461206f6620746865205b60526f756e64536e617073686f74605d204f6e6c7920657869737473207768656e205b60536e617073686f74605d2069732070726573656e742e2044657369726564206e756d626572206f66207461726765747320746f20656c65637420666f72207468697320726f756e642e20536e617073686f742064617461206f662074686520726f756e642e205468697320697320637265617465642061742074686520626567696e6e696e67206f6620746865207369676e656420706861736520616e6420636c65617265642075706f6e2063616c6c696e672060656c656374602e2043757272656e74206265737420736f6c7574696f6e2c207369676e6564206f7220756e7369676e65642c2071756575656420746f2062652072657475726e65642075706f6e2060656c656374602e2043757272656e742070686173652e20496e7465726e616c20636f756e74657220666f7220746865206e756d626572206f6620726f756e64732e20546869732069732075736566756c20666f722064652d6475706c69636174696f6e206f66207472616e73616374696f6e73207375626d697474656420746f2074686520706f6f6c2c20616e642067656e6572616c20646961676e6f7374696373206f66207468652070616c6c65742e2054686973206973206d6572656c7920696e6372656d656e746564206f6e6365207065722065766572792074696d65207468617420616e20757073747265616d2060656c656374602069732063616c6c65642e000000000000781e12000d000000000000001a6f13000e0000000000000038601300881e12000000000000000000981e1200010000000000000000000000a01e12000b000000000000001a6f13000e0000000000000038601300ac1e12000000000000000000bc1e1200010000000000000000000000c41e12001c0000000000000013741200070000000000000038601300e01e12000000000000000000f01e1200020000000000000000000000001f12000e000000000000001a6f13000e0000000000000038601300101f12000000000000000000201f12000400000000000000556e7369676e656450686173650000003300000000000000010000003e01000070201200200000005369676e6564506861736500330000000000000001000000f4000000522012001e000000536f6c7574696f6e496d70726f76656d656e745468726573686f6c643300000000000000010000003f010000e61f12005300000039201200190000004f6666636861696e526570656174000033000000000000000100000040010000401f12002d00000038601300000000006d1f120058000000c51f1200210000002054686520726570656174207468726573686f6c64206f6620746865206f6666636861696e20776f726b65722e20466f72206578616d706c652c20696620697420697320352c2074686174206d65616e732074686174206174206c65617374203520626c6f636b732077696c6c20656c61707365206265747765656e20617474656d70747320746f207375626d69742074686520776f726b6572277320736f6c7574696f6e2e20546865206d696e696d756d20616d6f756e74206f6620696d70726f76656d656e7420746f2074686520736f6c7574696f6e2073636f7265207468617420646566696e6573206120736f6c7574696f6e2061732022626574746572222028696e20616e79207068617365292e204475726174696f6e206f6620746865207369676e65642070686173652e204475726174696f6e206f662074686520756e7369676e65642070686173652e000000001a6b13001800000000000000dc8c1300010000000000000000000000326b13001800000000000000d48c1300010000000000000000000000756b13001600000000000000e48c1300010000000000000000000000630212001200000000000000a8211200010000000000000000000000530212001000000000000000b0211200010000000000000000000000460212000d00000000000000b82112000100000000000000000000003a0212000c00000000000000c02112000100000000000000000000002e0212000c00000000000000c82112000100000000000000000000001a0212001400000000000000d0211200010000000000000000000000750212000800000000000000d821120001000000000000009522120023000000742212002100000063221200110000004d221200160000002d221200200000000e2212001f000000e02112002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e3023120007000000372312005200000070616c6c65745f7374616b696e672f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7374616b696e672f7372632f6c69622e7273e29aa0efb88f20206465636c6172657320696e7465726e616c206d6967726174696f6e7320287768696368202a6d696768742a2065786563757465292c2073657474696e672073746f726167652076657273696f6e20746f2070616c6c65745f7472616e73616374696f6e5f7061796d656e742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7472616e73616374696f6e2d7061796d656e742f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065722f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f70617261735f7375646f5f777261707065722e7273000008000000000000005374616b696e67496e76756c6e657261626c657345726173526577617264506f696e7473457261735374616b657273457261735374616b657273436c69707065644572617356616c696461746f7250726566734572617356616c696461746f7252657761726445726173546f74616c5374616b65556e6170706c696564536c617368657356616c696461746f72734e6f6d696e61746f727350617965654c6564676572426f6e6465640000002c2512006100000034000000120000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f72756e74696d652f7372632f63757276652e72734368617267655472616e73616374696f6e5061796d656e7463616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565e02512005a000000d2050000350000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6d61702e72734e6f726d616c2065787472696e73696373206861766520776569676874206c696d697420636f6e666967757265642062792064656661756c743b207165648826120023000000770000000a0000002f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f6c69622e727300000000008c2712000f000000000000009c271200010000000000000000000000a42712001100000000000000b8271200010000000000000000000000c02712001500000000000000d8271200020000000000000000000000e82712000e00000000000000f8271200010000000000000000000000c01613000d0000000000000000281200010000000000000000000000ac1613000c0000000000000008281200010000000000000000000000081713000d0000000000000010281200010000000000000000000000f01613000f0000000000000018281200010000000000000050617261446f65736e744578697374003b2912003900000050617261416c7265616479457869737473000000fe2812003d000000457863656564734d61784d65737361676553697a650000009b2812005a000000f528120009000000436f756c646e74436c65616e757000007a28120021000000682812001200000057281200110000003c2812001b000000202812001c0000002043616e6e6f7420646f776e67726164652070617261636861696e2e2043616e6e6f74207570677261646520706172617468726561642e204e6f7420612070617261636861696e2e204e6f74206120706172617468726561642e20436f756c64206e6f74207363686564756c65207061726120636c65616e75702e204120444d50206d65737361676520636f756c646e27742062652073656e742062656361757365206974206578636565647320746865206d6178696d756d2073697a6520616c6c6f77656420666f72206120646f776e77617264206d6573736167652e20546865207370656369666965642070617261636861696e206f72207061726174687265616420697320616c726561647920726567697374657265642e20546865207370656369666965642070617261636861696e206f722070617261746872656164206973206e6f7420726567697374657265642e7375646f5f65737461626c6973685f68726d705f6368616e6e656c7375646f5f71756575655f646f776e776172645f78636d7375646f5f7363686564756c655f70617261636861696e5f646f776e67726164657375646f5f7363686564756c655f706172617468726561645f757067726164657375646f5f7363686564756c655f706172615f636c65616e75707375646f5f7363686564756c655f706172615f696e697469616c697a6556616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e457261536c617368696e675370616e735370616e536c617368546f6f4d616e7954617267657473496e636f7272656374536c617368696e675370616e73496e636f7272656374486973746f72794465707468416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c6572426164546172676574000000006c2f12000400000000000000702f1200030000000000000000000000b82f1200160000000000000000000000683012000a00000000000000743012000100000000000000000000008c3012001500000000000000000000003431120006000000000000003c3112000100000000000000000000005431120020000000000000000000000054321200110000000000000068321200010000000000000000000000803212001f000000000000000000000078331200080000000000000080331200010000000000000000000000983312001100000000000000000000002034120008000000000000002834120001000000000000000000000040341200130000000000000000000000d8341200050000000000000038601300000000000000000000000000e0341200110000000000000000000000683512000900000000000000743512000100000000000000000000008c3512001000000000000000000000000c3612000e000000000000001c36120001000000000000000000000034361200100000000000000000000000b43612001300000000000000c8361200010000000000000000000000e03612000800000000000000000000002037120018000000000000003837120001000000000000000000000050371200070000000000000000000000883712001500000000000000a0371200010000000000000000000000b8371200070000000000000000000000f03712000d000000000000003860130000000000000000000000000000381200090000000000000000000000483812000d0000000000000038601300000000000000000000000000583812000a0000000000000000000000a83812001100000000000000bc381200010000000000000000000000d4381200080000000000000000000000143912000d0000000000000024391200020000000000000000000000543912000a0000000000000000000000a4391200140000000000000038601300000000000000000000000000b8391200080000000000000000000000f83912001500000000000000103a1200020000000000000000000000403a12000d0000000000000000000000a83a12000e00000000000000b83a1200020000000000000000000000e83a12001c0000000000000000000000c83b120006000000000000003c311200010000000000000000000000d03b12000e0000000000000000000000403c12001100000000000000543c1200020000000000000000000000843c12001500000000000000000000002c3d12000a0000000000000024391200020000000000000000000000383d12000f0000000000000000000000b03d12000400000000000000b43d1200010000000000000000000000cc3d12000d00000000000000626f6e6400000000665312000a000000000000007e661300230000000000000077d112000500000000000000f55113001500000000000000ce5312000500000000000000d35312001f00000012621200590000006b6212002100000038601300000000008c6212004c0000003860130000000000d862120049000000386013000000000079611200100000003860130000000000f96513000b00000021631200350000000466130008000000566312001a00000038601300000000007063120054000000c4631200500000001464120013000000b15112000d0000002e4212000b000000276412004c00000073641200380000006f6613000c000000626f6e645f6578747261000000000000046212000e00000000000000f551130015000000bd5f120059000000166012000d000000386013000000000023601200540000007760120059000000d0601200130000003860130000000000e3601200580000003b6112003e000000386013000000000079611200100000003860130000000000f96513000b0000004e5212003a0000000466130008000000335f120010000000896112000d0000002e4212000b0000009661120045000000db611200290000006f6613000c000000756e626f6e6400000000000077d112000500000000000000f5511300150000004e5b120055000000a35b120040000000e35b12004900000038601300000000002c5c1200520000007e5c1200300000003860130000000000ae5c12004f000000fd5c12004f0000004c5d12003f0000003860130000000000a43e120055000000245412004300000038601300000000008b5d12001200000038601300000000009d5d1200260000003860130000000000f96513000b000000c35d1200500000008852120026000000135e1200590000006c5e12005c000000c85e1200540000001c5f120017000000335f120010000000e05212000b000000b15112000d0000002e4212000b000000435f1200470000008a5f120029000000b35f12000a00000077697468647261775f756e626f6e64656400000000000000bc4f12001200000000000000587e1300030000003a5712004b0000003860130000000000855712004d000000d2571200130000003860130000000000a43e12005500000024541200430000003860130000000000e5571200130000003860130000000000f85712001b0000003860130000000000f96513000b00000013581200550000006858120051000000b95812003d000000f65812005e000000ae521200320000009447120010000000545912004200000096591200080000009e59120049000000e75912002a000000115a120006000000175a120051000000685a1200230000008b5a120054000000df5a12002c000000d84212001d0000000b5b1200430000006f6613000c00000076616c6964617465000000002757120005000000000000002c5712000e000000a95612003a00000038601300000000006d3e1200370000003860130000000000a43e12005500000024541200430000003860130000000000f96513000b0000004e5212003a0000008852120026000000ae52120032000000344a12000c000000b15112000d0000002e4212000b000000e35612002400000007571200200000006f6613000c0000006e6f6d696e61746500000000a256120007000000000000006b40120028000000c75412004400000038601300000000000b55120054000000da461200230000003860130000000000a43e12005500000024541200430000003860130000000000f96513000b0000005f5512004c000000ab55120040000000eb551200360000009e5312000a000000215612000d0000002e561200210000002e4212000b0000004f5612003200000081561200210000006f6613000c0000006368696c6c000000f25312003200000038601300000000006d3e1200370000003860130000000000a43e12005500000024541200430000003860130000000000f96513000b0000004e5212003a0000006754120015000000ae521200320000007c54120009000000b15112000d0000002e4212000b0000008554120022000000a7541200200000006f6613000c0000007365745f706179656500000000000000ce5312000500000000000000d35312001f000000705312002e00000038601300000000006d3e1200370000003860130000000000a43e1200550000003860130000000000f96513000b0000004e5212003a0000008852120026000000ae521200320000009e5312000a0000006e4e12000f000000312813000d000000a853120013000000bb531200130000006f6613000c0000007365745f636f6e74726f6c6c6572000000000000665312000a000000000000007e66130023000000d55112002400000038601300000000006d3e1200370000003860130000000000f9511200550000003860130000000000f96513000b0000004e5212003a0000008852120026000000ae52120032000000e05212000b000000b15112000d0000002e4212000b000000eb5212003d000000285312003e0000006f6613000c0000007365745f76616c696461746f725f636f756e7400000000002b6713000300000000000000414612000c0000008c5112002500000038601300000000004c4e1200220000003860130000000000f96513000b000000b15112000d000000be511200170000006f6613000c000000696e6372656173655f76616c696461746f725f636f756e7400000000825112000a00000000000000414612000c000000575112002b00000038601300000000004c4e1200220000003860130000000000f96513000b00000029511200210000006f6613000c0000007363616c655f76616c696461746f725f636f756e74000000000000004a51120006000000000000005051120007000000f45012003500000038601300000000004c4e1200220000003860130000000000f96513000b00000029511200210000006f6613000c000000666f7263655f6e6f5f65726173000000c85012002c00000038601300000000004c4e1200220000003860130000000000f96513000b000000a7501200100000006e4e12000f0000007d4e1200120000006f6613000c000000666f7263655f6e65775f6572610000002c501200530000007f5012002800000038601300000000004c4e1200220000003860130000000000f96513000b000000a7501200100000006e4e12000f000000b7501200110000006f6613000c0000007365745f696e76756c6e657261626c6573000000000000001f5012000d00000000000000b9fa120011000000ce4f12003300000038601300000000004c4e1200220000003860130000000000f96513000b000000015012000700000008501200170000006f6613000c000000666f7263655f756e7374616b6500000000000000b74f120005000000000000009b6813000c00000000000000bc4f12001200000000000000587e1300030000008f4e12004300000038601300000000004c4e1200220000003860130000000000f96513000b000000d24e12003b0000000d4f12002e0000003b4f1200610000009c4f12001b0000006f6613000c000000666f7263655f6e65775f6572615f616c776179730b4e12004100000038601300000000004c4e1200220000003860130000000000f96513000b0000006e4e12000f0000007d4e1200120000006f6613000c00000063616e63656c5f64656665727265645f736c61736800000000000000aa4c12000300000000000000ad4c12000800000000000000f64d12000d00000000000000034e120008000000b54c1200260000003860130000000000db4c12002d0000003860130000000000084d1200410000003860130000000000f96513000b000000494d1200150000005e4d12002e0000008c4d120035000000c14d12001a000000db4d12001b0000006f6613000c0000007061796f75745f7374616b6572730000000000009b4c12000f000000000000009b6813000c00000000000000aa4c12000300000000000000ad4c120008000000124812004400000038601300000000005648120053000000a94812004a000000f34812004d00000038601300000000004049120056000000964912001e0000003860130000000000b4491200400000003860130000000000f96513000b000000f44912004000000011d3120031000000344a12000c000000404a120047000000874a1200080000008f4a120022000000b14a1200310000002e4212000b000000e24a12004a0000002c4b12004b000000774b120044000000bb4b1200360000003860130000000000f14b120054000000454c1200560000006f6613000c0000007265626f6e6400004d4612003800000038601300000000008546120055000000da461200230000003860130000000000f96513000b000000fd461200350000003247120025000000574712003d0000009447120010000000312813000d000000a447120040000000e44712002e0000006f6613000c0000007365745f686973746f72795f6465707468000000000000000d46120011000000000000001e46120011000000000000002f4612001200000000000000414612000c000000f54212004c00000041431200200000003860130000000000e3e912000c0000006143120044000000a543120052000000f743120051000000484412005100000099441200280000003860130000000000c1441200150000003860130000000000f96513000b000000d6441200380000000e4512000f000000312813000d0000001d45120028000000454512001c000000614512004c000000ad451200600000006f6613000c000000726561705f737461736800009340120058000000eb40120058000000434112003e000000386013000000000081411200240000003860130000000000a5411200400000003860130000000000f96513000b000000e5411200490000002e4212000b00000039421200360000006f42120069000000d84212001d0000006f6613000c0000006b69636b000000007b66130003000000000000006b40120028000000343e12003900000038601300000000006d3e1200370000003860130000000000a43e120055000000f93e1200520000004b3f1200260000003860130000000000713f120054000000c53f1200310000003860130000000000f63f1200560000004c4012001f0000002052656d6f76652074686520676976656e206e6f6d696e6174696f6e732066726f6d207468652063616c6c696e672076616c696461746f722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e2054686520636f6e74726f6c6c6572206163636f756e742073686f756c6420726570726573656e7420612076616c696461746f722e202d206077686f603a2041206c697374206f66206e6f6d696e61746f72207374617368206163636f756e74732077686f20617265206e6f6d696e6174696e6720746869732076616c696461746f7220776869636820202073686f756c64206e6f206c6f6e676572206265206e6f6d696e6174696e6720746869732076616c696461746f722e204e6f74653a204d616b696e6720746869732063616c6c206f6e6c79206d616b65732073656e736520696620796f7520666972737420736574207468652076616c696461746f7220707265666572656e63657320746f20626c6f636b20616e792066757274686572206e6f6d696e6174696f6e732e5665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e2052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e636520697320617420746865206d696e696d756d2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c656674206265796f6e64207468652045442e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e20436f6d706c65786974793a204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e73206f6e20746865206163636f756e742e204442205765696768743a202d2052656164733a205374617368204163636f756e742c20426f6e6465642c20536c617368696e67205370616e732c204c6f636b73202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c205374617368204163636f756e742c204c6f636b73202d2057726974657320456163683a205370616e536c617368202a2053205365742060486973746f72794465707468602076616c75652e20546869732066756e6374696f6e2077696c6c2064656c65746520616e7920686973746f727920696e666f726d6174696f6e207768656e2060486973746f727944657074686020697320726564756365642e202d20606e65775f686973746f72795f6465707468603a20546865206e657720686973746f727920646570746820796f7520776f756c64206c696b6520746f207365742e202d20606572615f6974656d735f64656c65746564603a20546865206e756d626572206f66206974656d7320746861742077696c6c2062652064656c6574656420627920746869732064697370617463682e20202020546869732073686f756c64207265706f727420616c6c207468652073746f72616765206974656d7320746861742077696c6c2062652064656c6574656420627920636c656172696e67206f6c642020202065726120686973746f72792e204e656564656420746f207265706f727420616e2061636375726174652077656967687420666f72207468652064697370617463682e20547275737465642062792020202060526f6f746020746f207265706f727420616e206163637572617465206e756d6265722e204f726967696e206d75737420626520726f6f742e202d20453a204e756d626572206f6620686973746f7279206465707468732072656d6f7665642c20692e652e203130202d3e2037203d2033202d205765696768743a204f28452920202020202d2052656164733a2043757272656e74204572612c20486973746f727920446570746820202020202d205772697465733a20486973746f727920446570746820202020202d20436c6561722050726566697820456163683a20457261205374616b6572732c204572615374616b657273436c69707065642c204572617356616c696461746f72507265667320202020202d2057726974657320456163683a204572617356616c696461746f725265776172642c2045726173526577617264506f696e74732c2045726173546f74616c5374616b652c2045726173537461727453657373696f6e496e6465786e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e5f6572615f6974656d735f64656c65746564436f6d706163743c7533323e205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e20546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722c20616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a204f284c292c207768657265204c20697320756e6c6f636b696e67206368756e6b73202d20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c204c6f636b732c205b4f726967696e204163636f756e745d20202020202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c656467657220506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e20546869732063616e206f6e6c792062652063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e202d2d2d2d2d2d2d2d2d2d2d204e20697320746865204e756d626572206f66207061796f75747320666f72207468652076616c696461746f722028696e636c7564696e67207468652076616c696461746f7229205765696768743a202d205265776172642044657374696e6174696f6e205374616b65643a204f284e29202d205265776172642044657374696e6174696f6e20436f6e74726f6c6c657220284372656174696e67293a204f284e29202d20526561643a20457261456c656374696f6e5374617475732c2043757272656e744572612c20486973746f727944657074682c204572617356616c696461746f725265776172642c202020202020202020457261735374616b657273436c69707065642c2045726173526577617264506f696e74732c204572617356616c696461746f725072656673202838206974656d7329202d205265616420456163683a20426f6e6465642c204c65646765722c2050617965652c204c6f636b732c2053797374656d204163636f756e74202835206974656d7329202d20577269746520456163683a2053797374656d204163636f756e742c204c6f636b732c204c6564676572202833206974656d73292020204e4f54453a20776569676874732061726520617373756d696e672074686174207061796f75747320617265206d61646520746f20616c697665207374617368206163636f756e7420285374616b6564292e202020506179696e67206576656e2061206465616420636f6e74726f6c6c65722069732063686561706572207765696768742d776973652e20576520646f6e277420646f20616e7920726566756e647320686572652e76616c696461746f725f7374617368657261457261496e6465782043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279207468652060543a3a536c61736843616e63656c4f726967696e602e20506172616d65746572733a2065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e20436f6d706c65786974793a204f2855202b2053292077697468205520756e6170706c69656420736c6173686573207765696768746564207769746820553d3130303020616e64205320697320746865206e756d626572206f6620736c61736820696e646963657320746f2062652063616e63656c65642e202d20526561643a20556e6170706c69656420536c6173686573202d2057726974653a20556e6170706c69656420536c6173686573736c6173685f696e64696365735665633c7533323e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e20546865206469737061746368206f726967696e206d75737420626520526f6f742e202d205765696768743a204f283129202d2057726974653a20466f72636545726120466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2062652072656d6f7665642052656164733a20426f6e6465642c20536c617368696e67205370616e732c204163636f756e742c204c6f636b73205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c204163636f756e742c204c6f636b732057726974657320456163683a205370616e536c617368202a205373746173686e756d5f736c617368696e675f7370616e7320536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e202d204f285629202d2057726974653a20496e76756c6e657261626c6573696e76756c6e657261626c657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e202d20577269746520466f72636545726120466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e205363616c652075702074686520696465616c206e756d626572206f662076616c696461746f7273206279206120666163746f722e2053616d65206173205b607365745f76616c696461746f725f636f756e74605d2e666163746f7250657263656e7420496e6372656d656e74732074686520696465616c206e756d626572206f662076616c696461746f72732e6164646974696f6e616c20536574732074686520696465616c206e756d626572206f662076616c696461746f72732e205765696768743a204f2831292057726974653a2056616c696461746f7220436f756e74202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e202d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572202d2057726974653a20426f6e6465642c204c6564676572204e657720436f6e74726f6c6c65722c204c6564676572204f6c6420436f6e74726f6c6c6572636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e202d2d2d2d2d2d2d2d2d20202020202d20526561643a204c656467657220202020202d2057726974653a205061796565706179656552657761726444657374696e6174696f6e3c543a3a4163636f756e7449643e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d20436f6e7461696e73206f6e6520726561642e202d2d2d2d2d2d2d2d202d20526561643a20457261456c656374696f6e5374617475732c204c6564676572202d2057726974653a2056616c696461746f72732c204e6f6d696e61746f7273204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546869732063616e206f6e6c792062652063616c6c6564207768656e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f662060746172676574736020284e292077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d495420284d41585f4e4f4d494e4154494f4e53292e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e205765696768743a204f284e29207768657265204e20697320746865206e756d626572206f662074617267657473202d2052656164733a2045726120456c656374696f6e205374617475732c204c65646765722c2043757272656e7420457261202d205772697465733a2056616c696461746f72732c204e6f6d696e61746f727374617267657473204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20526561643a2045726120456c656374696f6e205374617475732c204c6564676572202d2057726974653a204e6f6d696e61746f72732c2056616c696461746f7273707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e20436f6d706c6578697479204f285329207768657265205320697320746865206e756d626572206f6620736c617368696e67207370616e7320746f2072656d6f7665205570646174653a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c204c6f636b732c205b4f726967696e204163636f756e745d202d205772697465733a205b4f726967696e204163636f756e745d2c204c6f636b732c204c6564676572204b696c6c3a202d2052656164733a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e74204572612c20426f6e6465642c20536c617368696e67205370616e732c205b4f726967696e2020204163636f756e745d2c204c6f636b732c2042616c616e63654f66207374617368202d205772697465733a20426f6e6465642c20536c617368696e67205370616e73202869662053203e2030292c204c65646765722c2050617965652c2056616c696461746f72732c204e6f6d696e61746f72732c2020205b4f726967696e204163636f756e745d2c204c6f636b732c2042616c616e63654f662073746173682e204e4f54453a2057656967687420616e6e6f746174696f6e20697320746865206b696c6c207363656e6172696f2c20776520726566756e64206f74686572776973652e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e202d20526561643a20457261456c656374696f6e5374617475732c204c65646765722c2043757272656e744572612c204c6f636b732c2042616c616e63654f662053746173682c202d2057726974653a204c6f636b732c204c65646765722c2042616c616e63654f662053746173682c203c2f7765696768743e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c657220616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e20456d6974732060426f6e646564602e202d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a2045726120456c656374696f6e205374617475732c20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c204c6f636b73202d2057726974653a205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765726d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d20526561643a20426f6e6465642c204c65646765722c205b4f726967696e204163636f756e745d2c2043757272656e74204572612c20486973746f72792044657074682c204c6f636b73202d2057726974653a20426f6e6465642c2050617965652c205b4f726967696e204163636f756e745d2c204c6f636b732c204c65646765720000000000ec6f12000c0000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300f86f120000000000000000000870120007000000000000000100000000000000407012000e0000000000000000000000587e13000300000000000000000000000000000000000000000000000000000000000000000000000000000038601300507012000000000000000000607012000100000000000000010000000000000068701200150000000000000000000000587e130003000000000000000000000000000000000000000000000000000000000000000000000000000000386013008070120000000000000000009070120001000000000000000100000000000000772412000d0000000000000000000000b9fa12001100000000000000000000000000000000000000000000000000000000000000000000000000000038601300987012000000000000000000a870120003000000000000000100000000000000132512000600000001050000000000009b6813000c000000000000009b6813000c00000000000000000000000000000000000000000000000000000038601300c07012000000000000000000d0701200010000000000000000000000000000000d2512000600000001020000000000009b6813000c00000000000000d870120029000000000000000000000000000000000000000000000000000000386013000471120000000000000000001471120001000000000000000000000000000000082512000500000001050000000000009b6813000c00000000000000d35312001f000000000000000000000000000000000000000000000000000000386013001c71120000000000000000002c71120001000000000000000100000000000000f42412000a00000001050000000000009b6813000c000000000000002c5712000e000000000000000000000000000000000000000000000000000000386013003471120000000000000000004471120001000000000000000100000000000000fe2412000a00000001050000000000009b6813000c000000000000004c71120019000000000000000000000000000000000000000000000000000000386013006871120000000000000000007871120001000000000000000000000000000000807112000a0000000000000000000000ad4c120008000000000000000000000000000000000000000000000000000000000000000000000000000000386013008c71120000000000000000009c71120004000000000000000000000000000000bc711200090000000000000000000000c57112000d00000000000000000000000000000000000000000000000000000000000000000000000000000038601300d47112000000000000000000e47112000400000000000000000000000000000004721200150000000105000000000000ad4c12000800000000000000987413000c000000000000000000000000000000000000000000000000000000386013001c72120000000000000000002c72120004000000000000000000000000000000942412000b0000000205050000000000ad4c120008000000000000009b6813000c000000000000004c721200240000000000000000000000000000003860130070721200000000000000000080721200060000000000000001000000000000009f241200120000000205050000000000ad4c120008000000000000009b6813000c000000000000004c7212002400000000000000000000000000000038601300b07212000000000000000000c07212000b000000000000000100000000000000b1241200120000000205050000000000ad4c120008000000000000009b6813000c000000000000002c5712000e000000000000000000000000000000386013001873120000000000000000002873120005000000000000000100000000000000c3241200130000000105000000000000ad4c12000800000000000000b13c13000c00000000000000000000000000000000000000000000000000000038601300507312000000000000000000607312000300000000000000000000000000000084241200100000000105000000000000ad4c12000800000000000000787312001d00000000000000000000000000000000000000000000000000000038601300987312000000000000000000a873120002000000000000000100000000000000d62412000e0000000105000000000000ad4c12000800000000000000b13c13000c00000000000000000000000000000000000000000000000000000038601300b87312000000000000000000c873120002000000000000000100000000000000d8731200080000000000000000000000e07312000700000000000000000000000000000000000000000000000000000000000000000000000000000038601300e87312000000000000000000f873120001000000000000000100000000000000007412001300000000000000000000001374120007000000000000000000000000000000000000000000000000000000000000000000000000000000386013001c74120000000000000000002c7412000300000000000000010000000000000044741200130000000000000000000000b13c13000c000000000000000000000000000000000000000000000000000000000000000000000000000000386013005874120000000000000000006874120002000000000000000100000000000000e4241200100000000105000000000000ad4c12000800000000000000787412002f00000000000000000000000000000000000000000000000000000038601300a87412000000000000000000b874120001000000000000000100000000000000c07412000a0000000000000000000000ca7412001d00000000000000000000000000000000000000000000000000000000000000000000000000000038601300e87412000000000000000000f8741200040000000000000001000000000000001e2a1200130000000205050000000000ad4c120008000000000000009b6813000c000000000000001875120017000000000000000000000000000000386013003075120000000000000000004075120002000000000000000000000000000000312a1200130000000205050000000000ad4c120008000000000000009b6813000c00000000000000b13c13000c000000000000000000000000000000386013005075120000000000000000006075120001000000000000000000000000000000442a12000d00000001050000000000009b6813000c000000000000006875120017000000000000000000000000000000000000000000000000000000386013008075120000000000000000009075120001000000000000000000000000000000512a1200090000000105000000000000987512002300000000000000bb7512002200000000000000000000000000000000000000000000000000000038601300e07512000000000000000000f07512000200000000000000010000000000000000761200160000000000000000000000ad4c12000800000000000000000000000000000000000000000000000000000000000000000000000000000038601300187612000000000000000000287612000100000000000000000000000000000030761200150000000000000000000000987413000c000000000000000000000000000000000000000000000000000000000000000000000000000000386013004876120000000000000000005876120003000000000000000100000000000000382c13000e0000000000000000000000462c1300080000000000000000000000000000000000000000000000000000000000000000000000000000003860130070761200000000000000000080761200040000000000000001000000486973746f7279446570746833000000000000000100000041010000378412002300000038601300000000005a8412004e0000003860130000000000a884120058000000008512004e0000004e8512000c00000056616c696461746f72436f756e740000330000000000000001000000f40000000d8412002a0000004d696e696d756d56616c696461746f72436f756e74000000330000000000000001000000f4000000bd8312005000000033000000000000000100000026010000e9821200560000003f83120053000000928312002b000000330000000000000001000000f5000000a9821200400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e000000330000000000000001000000420100005882120051000000330000000000000001000000430100001f8212003900000033000000000000000100000044010000ce811200510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e000000330000000000000001000000f5000000758112005900000043757272656e744572610000330000000000000001000000f5000000e5801200170000003860130000000000fc801200590000005581120020000000416374697665457261416374697665457261496e666f0000330000000000000001000000f20000002e8012003600000038601300000000006480120056000000ba8012002b00000045726173537461727453657373696f6e496e646578000000330000000000000001000000f50000004e7f12004c00000038601300000000009a7f120058000000f27f12003c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e33000000000000000100000045010000307f12001e0000003860130000000000d07c1200580000003860130000000000287d12002a000000e07e12005000000033000000000000000100000045010000527d1200260000003860130000000000787d120056000000ce7d120037000000057e1200470000004c7e12003d0000003860130000000000897e1200570000003860130000000000287d12002a000000e07e120050000000330000000000000001000000440100008c7c1200440000003860130000000000d07c1200580000003860130000000000287d12002a000000330000000000000001000000f5000000027c1200420000003860130000000000447c120048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e000000330000000000000001000000460100008e7b12002b000000b97b120049000000330000000000000001000000470100000c7b12003b000000477b120047000000466f726365457261466f7263696e67003300000000000000010000003d010000f77a120015000000536c6173685265776172644672616374696f6e50657262696c6c000033000000000000000100000048010000807a12003e0000003860130000000000be7a12003900000043616e63656c6564536c6173685061796f75740033000000000000000100000047010000007a120045000000457a12003b0000005665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e0033000000000000000100000049010000cf79120031000000426f6e646564457261735665633c28457261496e6465782c2053657373696f6e496e646578293e003300000000000000010000004a010000257912004900000038601300000000006e79120032000000a07912002f0000002850657262696c6c2c2042616c616e63654f663c543e2900330000000000000001000000f5000000b878120051000000097912001c000000330000000000000001000000f50000006078120058000000736c617368696e673a3a536c617368696e675370616e7300330000000000000001000000f50000003d7812002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e0000003300000000000000010000004b010000c07712004f0000000f7812002e0000004561726c69657374556e6170706c696564536c6173680000330000000000000001000000f5000000817712003f00000043757272656e74506c616e6e656453657373696f6e000000330000000000000001000000f4000000fb7612003a0000003860130000000000357712004c0000003300000000000000010000004c010000a076120033000000782c13001f0000003860130000000000d3761200280000002054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076362e302e3020666f72206e6577206e6574776f726b732e20546865206c61737420706c616e6e65642073657373696f6e207363686564756c6564206279207468652073657373696f6e2070616c6c65742e2054686973206973206261736963616c6c7920696e2073796e632077697468207468652063616c6c20746f205b6053657373696f6e4d616e616765723a3a6e65775f73657373696f6e605d2e20546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e204e6f74653a205468697320747261636b7320746865207374617274696e672073657373696f6e2028692e652e2073657373696f6e20696e646578207768656e20657261207374617274206265696e67206163746976652920666f7220746865206572617320696e20605b43757272656e74457261202d20484953544f52595f44455054482c2043757272656e744572615d602e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e2054686520616374697665206572612069732074686520657261206265696e672063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f205b6053657373696f6e496e746572666163653a3a76616c696461746f7273605d2e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e000000000000748612000e00000000000000987413000c0000000000000038601300848612000000000000000000948612000100000000000000000000009c8612000f00000000000000ad4c1200080000000000000038601300ac8612000000000000000000bc861200010000000000000000000000c48612001200000000000000ad4c1200080000000000000038601300d88612000000000000000000e8861200050000000000000000000000108712002000000000000000587e130003000000000000003860130030871200000000000000000040871200040000000000000000000000608712000e00000000000000587e130003000000000000003860130070871200000000000000000080871200010000000000000053657373696f6e7350657245726100003300000000000000010000004d010000968912001c000000426f6e64696e674475726174696f6e003300000000000000010000004e0100005d89120039000000536c61736844656665724475726174696f6e00003300000000000000010000004f01000095881200400000003860130000000000d58812002f000000048912004b0000004f8912000e0000004d61784e6f6d696e61746f72526577617264656450657256616c696461746f7233000000000000000100000050010000b58712003e0000003860130000000000f38712005a0000004d881200480000004d61784e6f6d696e6174696f6e73000033000000000000000100000051010000888712002d000000204d6178696d756d206e756d626572206f66206e6f6d696e6174696f6e7320706572206e6f6d696e61746f722e20546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320726577617264656420666f7220656163682076616c696461746f722e20466f7220656163682076616c696461746f72206f6e6c79207468652060244d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732063616e20636c61696d207468656972207265776172642e2054686973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e204e756d626572206f662065726173207468617420736c6173686573206172652064656665727265642062792c20616674657220636f6d7075746174696f6e2e20546869732073686f756c64206265206c657373207468616e2074686520626f6e64696e67206475726174696f6e2e2053657420746f203020696620736c61736865732073686f756c64206265206170706c69656420696d6d6564696174656c792c20776974686f7574206f70706f7274756e69747920666f7220696e74657276656e74696f6e2e204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e000000000000408b120009000000000000004c8b1200030000000000000000000000648b12000300000000000000000000007c8b1200060000000000000094461300020000000000000000000000848b12000100000000000000000000008c8b1200050000000000000094461300020000000000000000000000948b1200020000000000000000000000a48b12001a00000000000000c08b1200010000000000000000000000c88b1200020000000000000000000000d88b12000f0000000000000038601300000000000000000000000000e88b120001000000000000000000000013251200060000000000000094461300020000000000000000000000f08b1200040000000000000000000000108c1200080000000000000094461300020000000000000000000000188c1200010000000000000000000000208c12000900000000000000944613000200000000000000000000002c8c12000200000000000000000000003c8c12000600000000000000f0de1200020000000000000000000000448c120001000000000000004572615061796f7574000000ad4c1200080000004f481300070000004f48130007000000468f1200560000009c8f120031000000cd8f12002b0000005265776172640000078f12003f000000536c617368000000a88e120049000000f18e1200160000004f6c64536c617368696e675265706f72744469736361726465640000987413000c0000003d8e120047000000848e1200240000005374616b696e67456c656374696f6e001b8e120022000000498d12003500000038601300000000007e8d120054000000d28d120049000000556e626f6e646564128d12003700000057697468647261776e0000008f8c120057000000e68c12002c0000004b69636b656400004c8c1200430000002041206e6f6d696e61746f7220686173206265656e206b69636b65642066726f6d20612076616c696461746f722e205c5b6e6f6d696e61746f722c2073746173685c5d20416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736574206f66207374616b6572732077617320656c65637465642e20416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e205c5b73657373696f6e5f696e6465785c5d204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e205c5b76616c696461746f722c20616d6f756e745c5d20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e205c5b73746173682c20616d6f756e745c5d2054686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973207468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e205c5b6572615f696e6465782c2076616c696461746f725f7061796f75742c2072656d61696e6465725c5dca90120005000000cf9012001d0000004572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f65726172756e74696d653a3a6f6666656e63657370616c6c65745f6f6666656e6365733a3a6d6967726174696f6e2f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6f6666656e6365732f7372632f6d6967726174696f6e2e72736861766520206465666572726564206f6666656e6365732c206170706c79696e672e766563746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d61783b207165648c9212006c000000780000000e0000006974657261746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d696e3b2071656400008c9212006c0000007c0000000e000000616c726561647920626f72726f7765643300000000000000010000004a0000008c9212006c000000890000002c000000330000000000000001000000490000008c9212006c000000950000002b0000006c656e677468206f6620656c65637465645f65646765732069732067726561746572207468616e206f7220657175616c20323b206c6173745f696e64657820696e64657820697320617420746865206d696e696d756d20656c65637465645f65646765732e6c656e2829202d20313b20696e6465782069732077697468696e2072616e67653b2071656400008c9212006c0000009f000000340000008c9212006c000000a2000000110000008c9212006c000000ac0000002c0000008c9212006c000000b80000002c0000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f62616c616e63696e672e7273566f74657220736e617073686f7420746f6f2062696754617267657420736e617073686f7420746f6f2062696700000000000000012a12001d000000000000003094120002000000000000000000000060941200010000000000000000000000e72912001a000000000000004034130001000000000000000000000068941200010000000000000000000000c729120020000000000000004034130001000000000000000000000070941200010000000000000000000000a6291200210000000000000040341300010000000000000000000000789412000100000000000000000000008f291200170000000000000080941200020000000000000000000000b0941200040000000000000000000000742912001b00000000000000d0941200040000000000000000000000309512000400000000000000000000002d2713000200000000000000eb8313000600000000000000c69712000700000000000000cd9712000f00000082971200440000003f971200430000001b97120024000000f596120026000000000000002d2713000200000000000000eb8313000600000000000000d99612000300000000000000dc96120019000000349612002700000038601300000000005b9612005a000000b59612002400000000000000099612000600000000000000eb83130006000000000000000f9612000900000000000000eb8313000600000000000000189612000c00000000000000587e13000300000000000000249612001000000000000000587e130003000000509512004100000038601300000000009195120056000000e79512002200000020466f72636566756c6c792065737461626c6973682061206368616e6e656c2066726f6d207468652073656e64657220746f2074686520726563697069656e742e2054686973206973206571756976616c656e7420746f2073656e64696e6720616e206048726d703a3a68726d705f696e69745f6f70656e5f6368616e6e656c602065787472696e73696320666f6c6c6f776564206279206048726d703a3a68726d705f6163636570745f6f70656e5f6368616e6e656c602e73656e646572726563697069656e746d61785f63617061636974796d61785f6d6573736167655f73697a652053656e64206120646f776e776172642058434d20746f2074686520676976656e20706172612e2054686520676976656e2070617261636861696e2073686f756c6420657869737420616e6420746865207061796c6f61642073686f756c64206e6f74206578636565642074686520707265636f6e666967757265642073697a652060636f6e6669672e6d61785f646f776e776172645f6d6573736167655f73697a65602e78636d78636d3a3a6f70617175653a3a56657273696f6e656458636d20446f776e677261646520612070617261636861696e20746f2061207061726174687265616420557067726164652061207061726174687265616420746f20612070617261636861696e205363686564756c652061207061726120746f20626520636c65616e656420757020617420746865207374617274206f6620746865206e6578742073657373696f6e2e205363686564756c652061207061726120746f20626520696e697469616c697a656420617420746865207374617274206f6620746865206e6578742073657373696f6e2e67656e657369735061726147656e65736973417267735472616e73616374696f6e5061796d656e74000000000000b0981200110000000000000000000000c19812000a00000000000000000000000000000000000000000000000000000000000000000000000000000038601300cc98120000000000000000003860130000000000000000000100000000000000382c13000e0000000000000000000000462c13000800000000000000000000000000000000000000000000000000000000000000000000000000000038601300dc9812000000000000000000386013000000000000000000010000004e6578744665654d756c7469706c6965724d756c7469706c69657200330000000000000001000000520100003300000000000000010000003d010000000000005c9912001200000000000000b13c13000c000000000000003860130070991200000000000000000080991200010000000000000000000000889912000b0000000000000093991200290000000000000038601300bc9912000000000000000000cc99120001000000000000005472616e73616374696f6e42797465466565000033000000000000000100000053010000729a120043000000576569676874546f4665655665633c576569676874546f466565436f656666696369656e743c42616c616e63654f663c543e3e3e33000000000000000100000054010000d4991200430000002054686520706f6c796e6f6d69616c2074686174206973206170706c69656420696e206f7264657220746f20646572697665206665652066726f6d207765696768742e00289a12004a000000c4000000110000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f736c6963652e7273205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e000000e09a120001000000e19a12001a000000fb9a12000100000072756e74696d653a3a7374616b696e675b5d20f09f92b820656e64696e6720656e645f73657373696f6e2829e09a120001000000579c12001c000000fb9a120001000000e09a120001000000249b12001e0000005d20f09f92b8205374617274696e6720746865206669727374206572612e0000e09a120001000000309c120027000000e09a120001000000d19b120048000000199c1200020000001b9c120015000000fb9a120001000000e09a120001000000949b120021000000b59b12001c0000005d20f09f92b8206e65772076616c696461746f7220736574206f662073697a652020686173206265656e2070726f63657373656420666f7220657261205d20f09f92b820636861696e20646f6573206e6f74206861766520656e6f756768207374616b696e672063616e6469646174657320746f206f70657261746520666f722065726120202820656c65637465642c206d696e696d756d206973205d20f09f92b820656c656374696f6e2070726f7669646572206661696c65642064756520746f205d20f09f92b820706c616e6e696e67206e65775f73657373696f6e2800e09a120001000000bc9c12001e000000fb9a1200010000005761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e5d20f09f92b8207374617274696e672073746172745f73657373696f6e2800008c9212006c00000055000000210000008c9212006c0000006d00000022000000d62212005a000000830400000100000000000000622b12000d000000000000003c9f12000100000000000000000000005a2b12000800000000000000449f12000100000000000000000000004d2b12000d000000000000004c9f1200010000000000000000000000402b12000d00000000000000549f1200010000000000000000000000342b12000c000000000000005c9f1200010000000000000000000000262b12000e00000000000000649f1200010000000000000000000000152b120011000000000000006c9f1200010000000000000000000000042b12001100000000000000749f1200010000000000000000000000f82a12000c000000000000007c9f1200010000000000000000000000eb2a12000d00000000000000849f1200010000000000000000000000df2a12000c000000000000008c9f1200010000000000000000000000cd2a12001200000000000000949f1200010000000000000000000000b32a12001a000000000000009c9f1200010000000000000000000000a12a12001200000000000000a49f1200010000000000000000000000932a12000e00000000000000ac9f12000100000000000000000000007e2a12001500000000000000b49f1200010000000000000000000000682a12001600000000000000bc9f1200010000000000000000000000b1dd12000800000000000000c49f12000100000000000000000000005a2a12000e00000000000000cc9f12000100000000000000000000006f2b12000900000000000000d49f12000100000000000000e5a212001a000000d0a2120015000000b7a212001900000099a212001e00000080a21200190000006fa21200110000004da21200220000001aa2120033000000f5a1120025000000cca112002900000099a112003300000082a112001700000063a112001f00000042a1120021000000ffa0120043000000cea0120031000000a1a012002d00000052a012004f0000002ca0120026000000dc9f1200500000002041206e6f6d696e6174696f6e207461726765742077617320737570706c69656420746861742077617320626c6f636b6564206f72206f7468657277697365206e6f7420612076616c696461746f722e20546f6f206d616e79206e6f6d696e6174696f6e207461726765747320737570706c6965642e20496e7465726e616c20737461746520686173206265636f6d6520736f6d65686f7720636f7272757074656420616e6420746865206f7065726174696f6e2063616e6e6f7420636f6e74696e75652e20496e636f7272656374206e756d626572206f6620736c617368696e67207370616e732070726f76696465642e20496e636f72726563742070726576696f757320686973746f727920646570746820696e7075742070726f76696465642e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e63616c6c65642060526573756c743a3a756e77726170282960206f6e20616e2060457272602076616c756500003ca312005d00000027000000200000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f61727261797665632d302e372e302f7372632f61727261797665635f696d706c2e72730000003300000001000000010000005501000034241200320000003e000000010000000000000080a412000e0000000000000090a4120001000000000000000000000098a412001500000000000000b0a41200010000000000000000000000b8a412001300000000000000cca41200010000000000000000000000d4a412001200000000000000e8a41200010000000000000000000000f0a412000900000000000000fca4120001000000000000000000000004a5120017000000000000001ca5120001000000000000000000000024a512000b0000000000000030a51200010000000000000056657374696e6742616c616e636500003da61200270000004c69717569646974795265737472696374696f6e730000000ba6120032000000496e73756666696369656e7442616c616e636500eda512001e0000004578697374656e7469616c4465706f7369740000b2a512003b0000004b656570416c6976650000008ea51200240000004578697374696e6756657374696e675363686564756c65005ba5120033000000446561644163636f756e740038a51200230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c7565204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c7565667265657a65666f7263655f7472616e73666572667265657472616e73666572636c61696d666f7263655f7665737465645f7472616e736665727665737465645f7472616e73666572766573745f6f7468657276657374426c6f636b416e6454696d65446561646c696e65626c6f636b5f6e756d626572003300000004000000040000001000000074696d657374616d700000003300000008000000080000005601000063616e63656c5f7265636f766572656472656d6f76655f7265636f76657279636c6f73655f7265636f76657279636c61696d5f7265636f76657279766f7563685f7265636f76657279696e6974696174655f7265636f766572796372656174655f7265636f766572797365745f7265636f766572656461735f7265636f766572656470616c6c65745f696e64696365733a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f696e64696365732f7372632f6c69622e727370616c6c65745f62616c616e6365733a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f62616c616e6365732f7372632f6c69622e7273706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f2f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f73657373696f6e5f696e666f2e727370616c6c65745f7265636f766572793a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7265636f766572792f7372632f6c69622e727370616c6c65745f76657374696e673a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f76657374696e672f7372632f6c69622e727350726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b2071656400000010aa120061000000570100001100000071aa12003d000000000000000000000010aa1200610000005e010000110000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e312e302f7372632f636f6d706163742e7273736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b20716564000010aa12006100000083010000110000000000000000000000000000000000000010aa1200610000008a010000110000007472616e736665725f6b6565705f616c6976657365745f62616c616e63657573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e000000330000000c00000004000000220000004da912005a0000001e010000120000004da912005a000000450100001200000007ac12006800000098ab12006f00000072756e74696d653a3a62616c616e63657370616c6c65745f62616c616e6365735761726e696e673a20417474656d707420746f20696e74726f64756365206c6f636b20636f6e73756d6572207265666572656e63652c20796574206e6f2070726f7669646572732e205468697320697320756e6578706563746564206275742073686f756c6420626520736166652e5761726e696e673a2041207573657220686173206d6f72652063757272656e6379206c6f636b73207468616e2065787065637465642e20412072756e74696d6520636f6e66696775726174696f6e2061646a7573746d656e74206d6179206265206e65656465642e0095a81200300000003c000000010000004e6f745472616e73666572496e5573654e6f7441737369676e65645065726d616e656e740000000028ad12000d0000000000000038ad120002000000000000000000000048ad120001000000000000000000000050ad12000a000000000000005cad120001000000000000000000000064ad12000100000000000000000000006cad12000b0000000000000078ad120002000000000000000000000088ad12000100000000000000496e64657841737369676e65640000007a62130009000000daad12000c00000020ae12002d000000496e64657846726565640000daad12000c000000e6ad12003a000000496e64657846726f7a656e00daad12000c0000007a6213000900000090ad12004a0000002041206163636f756e7420696e64657820686173206265656e2066726f7a656e20746f206974732063757272656e74206163636f756e742049442e205c5b696e6465782c2077686f5c5d4163636f756e74496e6465782041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e205c5b696e6465785c5d2041206163636f756e7420696e646578207761732061737369676e65642e205c5b696e6465782c2077686f5c5d0000000000000084a6120005000000000000002caf120001000000000000000000000044af12001200000000000000000000007ca612000800000000000000d4af120002000000000000000000000004b0120014000000000000000000000078a6120004000000000000002caf1200010000000000000000000000a4b012001200000000000000000000006aa612000e0000000000000034b112000300000000000000000000007cb1120015000000000000000000000064a6120006000000000000002caf120001000000000000000000000024b21200110000000000000000000000b42913000500000000000000b3b612000f00000077b912002700000038601300000000009eb91200380000003860130000000000c5651300340000003860130000000000d6b912003d0000003860130000000000f2b51200250000003860130000000000f96513000b000000c8b312000a000000d2b312002700000000b812001900000016b412000d00000023b412001400000037b41200250000006f6613000c000000000000002b67130003000000000000009b6813000c00000000000000b42913000500000000000000b3b612000f00000019b812005800000071b812002f0000003860130000000000c5651300340000003860130000000000a0b812004a00000049b51200580000003860130000000000f2b51200250000003860130000000000f96513000b000000c8b312000a000000d2b3120027000000eab812001a00000016b412000d00000023b4120014000000312813000d00000004b91200390000003db912003a0000006f6613000c000000c6b61200260000003860130000000000ecb6120058000000386013000000000044b712005600000038601300000000009ab71200440000003860130000000000deb71200220000003860130000000000f96513000b000000c8b312000a000000d2b312002700000000b812001900000016b412000d00000023b412001400000037b41200250000006f6613000c000000000000002b67130003000000000000009b6813000c00000000000000b42913000500000000000000b3b612000f0000000000000064a612000600000000000000c2b61200040000005cb4120056000000b2b412003b0000003860130000000000edb412003200000038601300000000001fb512002a00000049b5120058000000a1b51200510000003860130000000000f2b51200250000003860130000000000f96513000b000000c8b312000a000000d2b312002700000017b612001f00000016b412000d00000023b4120014000000312813000d00000036b612003e00000074b612003f0000006f6613000c000000acb212005a000000386013000000000006b31200570000005db312001c000000386013000000000079b312002c0000003860130000000000a5b31200230000003860130000000000f96513000b000000c8b312000a000000d2b3120027000000f9b312001d00000016b412000d00000023b412001400000037b41200250000006f6613000c00000020467265657a6520616e20696e64657820736f2069742077696c6c20616c7761797320706f696e7420746f207468652073656e646572206163636f756e742e205468697320636f6e73756d657320746865206465706f7369742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d75737420686176652061206e6f6e2d66726f7a656e206163636f756e742060696e646578602e202d2060696e646578603a2074686520696e64657820746f2062652066726f7a656e20696e20706c6163652e20456d6974732060496e64657846726f7a656e60206966207375636365737366756c2e202d20604f283129602e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e6520736c617368206f7065726174696f6e2e202d204f6e65206576656e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d204442205765696768743a203120526561642f577269746520284163636f756e74732920466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e202d2060667265657a65603a2069662073657420746f206074727565602c2077696c6c20667265657a652074686520696e64657820736f2069742063616e6e6f74206265207472616e736665727265642e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e7420286f726967696e616c206f776e657229543a3a4163636f756e74496e646578626f6f6c204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e202020202d2052656164733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e7429202020202d205772697465733a20496e6469636573204163636f756e74732c2053797374656d204163636f756e742028726563697069656e74292041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e000000000074ba1200080000000102000000000000b3b612000f000000000000007cba12002200000000000000000000000000000000000000000000000000000038601300a0ba12000000000000000000b0ba12000100000000000000000000004163636f756e747328543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20626f6f6c290000330000000000000001000000f5000000b8ba12002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e00000000000014bb12000700000000000000b13c13000c00000000000000386013001cbb120000000000000000002cbb120001000000000000004465706f736974003300000000000000010000001a01000034bb12002b00000020546865206465706f736974206e656564656420666f7220726573657276696e6720616e20696e6465782e4e6f7456657374696e67416d6f756e744c6f77000000000000ccbb12000e0000000000000094461300020000000000000000000000dcbb1200030000000000000000000000f4bb120010000000000000002062130001000000000000000000000004bc1200010000000000000056657374696e6755706461746564000053bc120056000000a9bc120046000000efbc12001600000056657374696e67436f6d706c657465640cbc12004700000020416e205c5b6163636f756e745c5d20686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e205c5b6163636f756e742c20756e7665737465645c5d00000000000000b7a61200040000000000000038601300000000000000000000000000b8bd12000d0000000000000000000000ada612000a0000000000000020be120001000000000000000000000038be12000f00000000000000000000009ea612000f00000000000000b0be1200020000000000000000000000e0be120010000000000000000000000089a61200150000000000000060bf1200030000000000000000000000a8bf1200110000000000000071c412002f0000003860130000000000a0c4120058000000a7c312001a0000003860130000000000c1c31200350000003860130000000000f96513000b000000c8b312000a000000f8c412001e00000016c512003f00000055c51200400000006f6613000c000000000000001dc2120006000000000000007e6613002300000023c312002f0000003860130000000000c565130034000000386013000000000052c3120055000000a7c312001a0000003860130000000000c1c31200350000003860130000000000f96513000b000000c8b312000a00000066c212001e000000f6c312003d00000033c412003e0000006f6613000c000000000000001dc2120006000000000000007e6613002300000000000000c6141300080000000000000023c21200290000004cc212001a0000003860130000000000c565130034000000386013000000000084c0120045000000c9c012004000000009c112003d000000386013000000000046c11200180000003860130000000000f96513000b000000c8b312000a00000066c212001e00000084c212004f000000d3c21200500000006f6613000c0000000000000017c2120006000000000000007e66130023000000000000001dc2120006000000000000007e6613002300000000000000c6141300080000000000000023c212002900000030c01200190000003860130000000000edb4120032000000386013000000000049c012003b00000084c0120045000000c9c012004000000009c112003d000000386013000000000046c11200180000003860130000000000f96513000b000000c8b312000a0000005ec112001e0000007cc112004d000000c9c112004e0000006f6613000c00000020466f726365206120766573746564207472616e736665722e202d2060736f75726365603a20546865206163636f756e742077686f73652066756e64732073686f756c64206265207472616e736665727265642e202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d2044625765696768743a20342052656164732c20342057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c20536f75726365204163636f756e74736f7572636574617267657456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20437265617465206120766573746564207472616e736665722e202d2044625765696768743a20332052656164732c20332057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e64657220746869732070616c6c65742e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e20202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c202d2044625765696768743a20322052656164732c20322057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d00000000000000f8c512000700000001020000000000009b6813000c0000000000000023c21200290000000000000000000000000000000000000000000000000000003860130000c61200000000000000000010c6120001000000000000000000000056657374696e6700330000000000000001000000f500000018c612003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e00000000000088c612001100000000000000b13c13000c00000000000000386013009cc612000000000000000000acc6120001000000000000004d696e5665737465645472616e736665720000003300000000000000010000001a010000b4c612003a00000020546865206d696e696d756d20616d6f756e74207472616e7366657272656420746f2063616c6c20607665737465645f7472616e73666572602e00000000000050c8120007000000000000009446130002000000000000000000000058c8120001000000000000000000000060c8120008000000000000009446130002000000000000000000000068c8120002000000000000000000000078c81200080000000000000080c8120003000000000000000000000098c81200010000000000000000000000a0c812000a0000000000000060461300030000000000000000000000acc8120001000000000000000000000014bb1200070000000000000094461300020000000000000000000000b4c81200010000000000000000000000ec431300080000000000000094461300020000000000000000000000bcc81200010000000000000000000000884613000a0000000000000094461300020000000000000000000000c4c81200010000000000000000000000ccc812001200000000000000e0c8120004000000000000000000000000c912000300000000000000456e646f776564008ccb120049000000447573744c6f737408cb12005000000058cb1200340000005472616e736665727a621300090000007a621300090000004f48130007000000e0ca12002800000042616c616e63655365740000adca12003300000065ca1200480000001dca120048000000d3c912004a00000052657365727665526570617472696174656400007a621300090000007a621300090000004f48130007000000cdc912000600000018c91200540000006cc9120037000000a3c912002a00000020536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742e2046696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e205c5b66726f6d2c20746f2c2062616c616e63652c2064657374696e6174696f6e5f7374617475735c5d53746174757320536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e205c5b77686f2c2076616c75655c5d20536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e205c5b77686f2c2076616c75655c5d20536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e205c5b77686f2c206465706f7369745c5d20412062616c616e6365207761732073657420627920726f6f742e205c5b77686f2c20667265652c2072657365727665645c5d205472616e73666572207375636365656465642e205c5b66726f6d2c20746f2c2076616c75655c5d20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e205c5b6163636f756e742c2062616c616e63655c5d20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e205c5b6163636f756e742c20667265655f62616c616e63655c5d000000000000007ca61200080000000000000088cc1200020000000000000000000000b8cc12001b0000000000000000000000f3aa12000b0000000000000090cd1200030000000000000000000000d8cd12001200000000000000000000006aa612000e0000000000000068ce1200030000000000000000000000b0ce1200060000000000000000000000e0aa1200130000000000000088cc1200020000000000000000000000e0ce12000b000000000000000000000073d1120004000000000000007e661300230000000000000077d1120005000000000000007cd1120013000000d4d312003600000038601300000000000ad41200420000004cd412004800000094d4120045000000d9d412002d000000386013000000000006d51200460000003860130000000000f96513000b0000004cd512004c00000098d5120033000000cbd512005a000000386013000000000025d6120013000000386013000000000038d61200540000008cd612004b000000d7d61200350000000cd712005800000064d7120052000000b6d712003e000000f4d712002200000016d812005100000067d81200370000009ed81200450000006f6613000c000000000000007b66130003000000000000007e6613002300000000000000c0d3120008000000000000007cd112001300000000000000c8d312000c000000000000007cd11200130000008fd11200250000003860130000000000b4d1120048000000fcd11200420000003ed212004600000084d21200400000003860130000000000c4d212002d0000003860130000000000f96513000b000000f1d212002000000011d312003100000042d312001600000058d312000f00000067d312001a00000081d31200190000009ad31200260000006f6613000c0000000000000017c2120006000000000000007e661300230000000000000073d1120004000000000000007e661300230000000000000077d1120005000000000000007cd1120013000000a0d0120054000000f4d012000b000000f96513000b000000ffd01200500000004fd11200240000006f6613000c00000038cf1200540000008ccf12001000000038601300000000009ccf12002f0000003860130000000000cbcf120031000000f96513000b000000fccf12003a00000036d01200180000004ed012004700000095d012000b0000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572202d2043686561706572207468616e207472616e736665722062656361757365206163636f756e742063616e6e6f74206265206b696c6c65642e202d2042617365205765696768743a2035312e3420c2b573202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374202873656e64657220697320696e206f7665726c617920616c72656164792920233c2f7765696768743e2045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e202d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069732020206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e6465737476616c7565436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a20202020202d204372656174696e673a2032372e353620c2b57320202020202d204b696c6c696e673a2033352e313120c2b573202d204442205765696768743a203120526561642c203120577269746520746f206077686f606e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2037332e363420c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e74202d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e000000000064da12000d000000000000000000000071da12000a000000000000000000000000000000000000000000000000000000000000000000000000000000386013007cda120000000000000000008cda12000100000000000000010000000000000094da12000700000001020000000000009b6813000c000000000000009bda12001700000000000000000000000000000000000000000000000000000038601300b4da12000000000000000000c4da120003000000000000000100000000000000dcda12000500000001020000000000009b6813000c00000000000000e1da12001c0000000000000000000000000000000000000000000000000000003860130000db1200000000000000000010db120002000000000000000100000000000000382c13000e0000000000000000000000462c1300080000000000000000000000000000000000000000000000000000000000000000000000000000003860130020db1200000000000000000030db1200030000000000000001000000546f74616c49737375616e6365543a3a42616c616e6365003300000000000000010000004701000052dc1200260000004163636f756e744163636f756e74446174613c543a3a42616c616e63653e000033000000000000000100000057010000e7db12001b000000386013000000000002dc1200500000004c6f636b735665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e0000003300000000000000010000005801000070db12002e0000009edb12004900000033000000000000000100000059010000782c13001f000000386013000000000048db12002800000020546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e00000000d4a41200120000000000000071da12000a0000000000000038601300b0dc12000000000000000000c0dc120001000000000000003300000000000000010000005a010000c8dc12003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e416c726561647950726f78795374696c6c4163746976655468726573686f6c64416c7265616479566f756368656444656c6179506572696f644e6f74467269656e644e6f7453746172746564416c726561647953746172746564416c72656164795265636f76657261626c654e6f745265636f76657261626c654e6f74536f727465644d6178467269656e64734e6f74456e6f756768467269656e64735a65726f5468726573686f6c644e6f74416c6c6f776564426164537461746500000000000000c4de12000f0000000000000020621300010000000000000000000000d4de1200010000000000000000000000dcde12001100000000000000f0de120002000000000000000000000000df120002000000000000000000000010df12000f0000000000000020df120003000000000000000000000038df120002000000000000000000000048df12000e00000000000000f0de120002000000000000000000000058df120002000000000000000000000068df12001000000000000000f0de120002000000000000000000000078df120002000000000000000000000088df12000f000000000000002062130001000000000000000000000098df120001000000000000005265636f7665727943726561746564002fe11200370000005265636f76657279496e697469617465640000007a621300090000007a62130009000000e4e012004b00000019e01200120000005265636f76657279566f7563686564007a621300090000007a621300090000007a6213000900000073e0120057000000cae012001a0000005265636f76657279436c6f73656400002be012004800000019e01200120000004163636f756e745265636f7665726564d8df12004100000019e01200120000005265636f7665727952656d6f76656400a0df1200380000002041207265636f766572792070726f6365737320686173206265656e2072656d6f76656420666f7220616e205c5b6163636f756e745c5d2e204c6f7374206163636f756e7420686173206265656e207375636365737366756c6c79207265636f76657265642062792072657363756572206163636f756e742e205c5b6c6f73742c20726573637565725c5d2041207265636f766572792070726f6365737320666f72206c6f7374206163636f756e742062792072657363756572206163636f756e7420686173206265656e20636c6f7365642e2041207265636f766572792070726f6365737320666f72206c6f7374206163636f756e742062792072657363756572206163636f756e7420686173206265656e20766f756368656420666f722062792073656e6465722e205c5b6c6f73742c20726573637565722c2073656e6465725c5d2041207265636f766572792070726f6365737320686173206265656e20696e6974696174656420666f72206c6f7374206163636f756e742062792072657363756572206163636f756e742e2041207265636f766572792070726f6365737320686173206265656e2073657420757020666f7220616e205c5b6163636f756e745c5d2e0000000000007ea712000c00000000000000f4e2120002000000000000000000000024e312000d000000000000000000000071a712000d000000000000008ce31200020000000000000000000000bce312000d000000000000000000000062a712000f0000000000000024e412000300000000000000000000006ce412001b000000000000000000000051a71200110000000000000044e512000100000000000000000000005ce5120016000000000000000000000043a712000e000000000000008ce312000200000000000000000000000ce6120019000000000000000000000035a712000e0000000000000044e51200010000000000000000000000d4e6120014000000000000000000000027a712000e0000000000000074e712000100000000000000000000008ce7120014000000000000000000000018a712000f00000000000000386013000000000000000000000000002ce8120015000000000000000000000008a71200100000000000000044e51200010000000000000000000000d4e812000b000000000000000000000001f7120007000000000000009b6813000c00000000000000a16613000400000000000000a56613001800000016fc120029000000386013000000000064e9120045000000a9e912003a0000003860130000000000e3e912000c0000003ffc12004900000088fc1200400000003860130000000000f96513000b000000c8fc120025000000edfc1200420000006f6613000c0000000000000012fc120004000000000000009b6813000c000000000000008fef120007000000000000009b6813000c000000e2fa12004700000029fb12001d000000386013000000000046fb1200320000003860130000000000e3e912000c00000078fb12002e000000a6fb1200470000003860130000000000f96513000b000000edfb12001900000006fc12000c0000006f6613000c00000000000000b2fa12000700000000000000b9fa12001100000000000000cafa12000900000000000000d3fa12000300000000000000d6fa12000c000000000000001a6f13000e00000008f712005700000038601300000000005ff712004c000000abf7120052000000fdf712002f0000003860130000000000c5651300340000003860130000000000e3e912000c0000002cf812004900000075f8120035000000aaf812004c000000f6f81200470000003df912002500000062f912004f000000b1f912003a0000003860130000000000f96513000b000000ebf912001a00000005fa12004b00000050fa12003b000000bff61200270000008bfa12002700000016b412000d000000386013000000000054ed12001b0000006f6613000c0000000000000001f7120007000000000000009b6813000c000000aff412003b0000003860130000000000eaf412004700000031f51200490000007af512002e0000003860130000000000c5651300340000003860130000000000e3e912000c000000a8f5120045000000edf51200400000003860130000000000f96513000b0000002df612003e0000006bf6120054000000bff6120027000000def1120039000000e6f612001b00000016b412000d000000386013000000000054ed12001b0000006f6613000c00000059f212004a000000a3f212001a0000003860130000000000bdf212004a00000007f312001d0000003860130000000000e3e912000c00000024f312003500000059f31200440000009df31200150000003860130000000000b2f3120049000000fbf31200090000003860130000000000f96513000b00000010f112003f0000004ff112004700000096f112004800000004f412003b0000003ff412004700000017f212002700000016b412000d000000386013000000000086f41200290000006f6613000c00000096ef12003d0000003860130000000000d3ef12004b0000001ef012004700000065f012004c0000003860130000000000e3e912000c000000b1f012004b000000fcf01200140000003860130000000000f96513000b00000010f112003f0000004ff112004700000096f1120048000000def112003900000017f212002700000016b412000d00000038601300000000003ef212001b0000006f6613000c000000000000008fef120007000000000000009b6813000c0000006fed120045000000b4ed12001a0000003860130000000000ceed12004800000016ee12003e000000386013000000000003ec12004100000054ee12003c0000003860130000000000e3e912000c00000090ee1200440000003860130000000000f96513000b000000d4ee120021000000f5ee12004f00000044ef12003000000016b412000d000000386013000000000074ef12001b0000006f6613000c00000079ea1200570000003860130000000000d0ea12004500000015eb120042000000386013000000000057eb120049000000a0eb120026000000c6eb12003d000000386013000000000003ec12004100000044ec1200390000003860130000000000f96513000b0000007dec12001800000095ec12004a000000dfec12004e0000002ded12002700000016b412000d000000386013000000000054ed12001b0000006f6613000c0000002ce9120038000000386013000000000064e9120045000000a9e912003a0000003860130000000000e3e912000c000000efe91200460000003860130000000000f96513000b00000035ea1200440000006f6613000c0000002043616e63656c20746865206162696c69747920746f20757365206061735f7265636f76657265646020666f7220606163636f756e74602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746f2062652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e20506172616d65746572733a202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f75206172652061626c6520746f2063616c6c206f6e2d626568616c662d6f662e202d204f6e652073746f72616765206d75746174696f6e20746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f2831292052656d6f766520746865207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205265636f7665726564206163636f756e747320617265207374696c6c2061636365737369626c652e204e4f54453a205468652075736572206d757374206d616b65207375726520746f2063616c6c2060636c6f73655f7265636f7665727960206f6e20616c6c20616374697665207265636f7665727920617474656d707473206265666f72652063616c6c696e6720746869732066756e6374696f6e20656c73652069742077696c6c206661696c2e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e20746865207265636f76657261626c65206163636f756e742077696c6c20756e72657365727665207468656972207265636f7665727920636f6e66696775726174696f6e206465706f7369742e202860436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732920546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061207265636f76657261626c65206163636f756e742028692e652e206861732061207265636f7665727920636f6e66696775726174696f6e292e204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f206765742074686520707265666978206974657261746f7220666f7220616374697665207265636f7665726965732e204f283129202d204f6e652073746f7261676520726561642f72656d6f766520746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652062616c616e63652063616c6c20746f20756e72657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2846202b2058292041732074686520636f6e74726f6c6c6572206f662061207265636f76657261626c65206163636f756e742c20636c6f736520616e20616374697665207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e2c20746865207265636f76657261626c65206163636f756e742077696c6c207265636569766520746865207265636f76657279206465706f73697420605265636f766572794465706f7369746020706c616365642062792074686520726573637565722e207265636f76657261626c65206163636f756e74207769746820616e20616374697665207265636f766572792070726f6365737320666f722069742e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f207265736375652074686973207265636f76657261626c65206163636f756e742e204b65793a205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f7261676520726561642f72656d6f766520746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652062616c616e63652063616c6c20746f20726570617472696174652072657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2856202b2058297265736375657220416c6c6f772061207375636365737366756c207265736375657220746f20636c61696d207468656972207265636f7665726564206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061202272657363756572222077686f20686173207375636365737366756c6c7920636f6d706c6574656420746865206163636f756e74207265636f766572792070726f636573733a20636f6c6c656374656420607468726573686f6c6460206f72206d6f726520766f75636865732c20776169746564206064656c61795f706572696f646020626c6f636b732073696e636520696e6974696174696f6e2e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f20636c61696d20686173206265656e207375636365737366756c6c792020207265636f766572656420627920796f752e204b65793a204620286c656e206f6620667269656e647320696e20636f6e666967292c205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f72616765207265616420746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652073746f72616765207265616420746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f283129202d204f6e652073746f726167652077726974652e204f2831292c20436f646563204f2856292e20546f74616c20436f6d706c65786974793a204f2846202b20562920416c6c6f7720612022667269656e6422206f662061207265636f76657261626c65206163636f756e7420746f20766f75636820666f7220616e20616374697665207265636f766572792070726f6365737320666f722074686174206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520612022667269656e642220666f7220746865207265636f76657261626c65206163636f756e742e202d20606c6f7374603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f2072657363756520746865206c6f7374206163636f756e74207468617420796f7520202077616e7420746f20766f75636820666f722e2054686520636f6d62696e6174696f6e206f662074686573652074776f20706172616d6574657273206d75737420706f696e7420746f20616e20616374697665207265636f766572792070726f636573732e202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c6572206973206120667269656e642e204f286c6f674629202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c657220686173206e6f7420616c726561647920766f75636865642e204f286c6f67562920546f74616c20436f6d706c65786974793a204f2846202b206c6f6746202b2056202b206c6f67562920496e697469617465207468652070726f6365737320666f72207265636f766572696e672061207265636f76657261626c65206163636f756e742e205061796d656e743a20605265636f766572794465706f736974602062616c616e63652077696c6c20626520726573657276656420666f7220696e6974696174696e6720746865207265636f766572792070726f636573732e2054686973206465706f7369742077696c6c20616c7761797320626520726570617472696174656420746f20746865206163636f756e7420747279696e6720746f206265207265636f76657265642e205365652060636c6f73655f7265636f76657279602e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e2054686973206163636f756e742020206e6565647320746f206265207265636f76657261626c652028692e652e20686176652061207265636f7665727920636f6e66696775726174696f6e292e202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973207265636f76657261626c652e204f284629202d204f6e652073746f72616765207265616420746f20636865636b20746861742074686973207265636f766572792070726f63657373206861736e277420616c726561647920737461727465642e204f283129202d204f6e652063757272656e63792072657365727665206f7065726174696f6e2e204f285829202d204f6e652073746f726167652077726974652e204f2831292e6163636f756e74204372656174652061207265636f7665727920636f6e66696775726174696f6e20666f7220796f7572206163636f756e742e2054686973206d616b657320796f7572206163636f756e74207265636f76657261626c652e205061796d656e743a2060436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732062616c616e63652077696c6c20626520726573657276656420666f722073746f72696e6720746865207265636f7665727920636f6e66696775726174696f6e2e2054686973206465706f7369742069732072657475726e656420696e2066756c6c207768656e2074686520757365722063616c6c73206072656d6f76655f7265636f76657279602e202d2060667269656e6473603a2041206c697374206f6620667269656e647320796f7520747275737420746f20766f75636820666f72207265636f7665727920617474656d7074732e20202053686f756c64206265206f72646572656420616e6420636f6e7461696e206e6f206475706c69636174652076616c7565732e202d20607468726573686f6c64603a20546865206e756d626572206f6620667269656e64732074686174206d75737420766f75636820666f722061207265636f7665727920617474656d70742020206265666f726520746865206163636f756e742063616e206265207265636f76657265642e2053686f756c64206265206c657373207468616e206f7220657175616c20746f202020746865206c656e677468206f6620746865206c697374206f6620667269656e64732e202d206064656c61795f706572696f64603a20546865206e756d626572206f6620626c6f636b732061667465722061207265636f7665727920617474656d707420697320696e697469616c697a656420202074686174206e6565647320746f2070617373206265666f726520746865206163636f756e742063616e206265207265636f76657265642e202d204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973206e6f7420616c7265616479207265636f76657261626c652e204f2831292e202d204120636865636b20746861742074686520667269656e6473206c69737420697320736f7274656420616e6420756e697175652e204f284629202d204f6e652073746f726167652077726974652e204f2831292e20436f646563204f2846292e667269656e64735665633c543a3a4163636f756e7449643e7468726573686f6c6475313664656c61795f706572696f6420416c6c6f7720524f4f5420746f2062797061737320746865207265636f766572792070726f6365737320616e642073657420616e20612072657363756572206163636f756e7420666f722061206c6f7374206163636f756e74206469726563746c792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f524f4f545f2e202d20606c6f7374603a2054686520226c6f7374206163636f756e742220746f206265207265636f76657265642e202d206072657363756572603a20546865202272657363756572206163636f756e74222077686963682063616e2063616c6c20617320746865206c6f7374206163636f756e742e202d204f6e652073746f72616765207772697465204f283129202d204f6e65206576656e746c6f73742053656e6420612063616c6c207468726f7567682061207265636f7665726564206163636f756e742e202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f752077616e7420746f206d616b6520612063616c6c206f6e2d626568616c662d6f662e202d206063616c6c603a205468652063616c6c20796f752077616e7420746f206d616b65207769746820746865207265636f7665726564206163636f756e742e202d2054686520776569676874206f6620746865206063616c6c60202b2031302c3030302e202d204f6e652073746f72616765206c6f6f6b757020746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f283129000000000050fe12000b00000001050000000000009b6813000c000000000000005bfe12003a0000000000000000000000000000000000000000000000000000003860130098fe12000000000000000000a8fe120001000000000000000000000000000000b0fe12001000000002050500000000009b6813000c000000000000009b6813000c00000000000000c0fe12003a00000000000000000000000000000038601300fcfe120000000000000000000cff1200040000000000000000000000000000002cff12000500000001020000000000009b6813000c000000000000009b6813000c0000000000000000000000000000000000000000000000000000003860130034ff1200000000000000000044ff12000300000000000000000000005265636f76657261626c655265636f76657279436f6e6669673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e000000330000000000000001000000f200000048001300420000004163746976655265636f7665726965734163746976655265636f766572793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000330000000000000001000000f5000000beff12001a0000003860130000000000d8ff1200450000001d0013002b00000050726f7879000000330000000000000001000000f50000005cff120024000000386013000000000080ff12003e00000020546865206c697374206f6620616c6c6f7765642070726f7879206163636f756e74732e204d61702066726f6d2074686520757365722077686f2063616e2061636365737320697420746f20746865207265636f7665726564206163636f756e742e20416374697665207265636f7665727920617474656d7074732e204669727374206163636f756e7420697320746865206163636f756e7420746f206265207265636f76657265642c20616e6420746865207365636f6e64206163636f756e7420697320746865207573657220747279696e6720746f207265636f76657220746865206163636f756e742e2054686520736574206f66207265636f76657261626c65206163636f756e747320616e64207468656972207265636f7665727920636f6e66696775726174696f6e2e0000000000006c0113001100000000000000b13c13000c000000000000003860130080011300000000000000000090011300040000000000000000000000b00113001300000000000000b13c13000c0000000000000038601300c40113000000000000000000d401130003000000000000000000000080dd12000a00000000000000d3fa1200030000000000000038601300ec0113000000000000000000fc011300010000000000000000000000040213000f00000000000000b13c13000c0000000000000038601300140213000000000000000000240213000700000000000000436f6e6669674465706f736974426173650000003300000000000000010000005b010000d60413005500000038601300000000002b051300400000006b0513002a000000467269656e644465706f736974466163746f72003300000000000000010000005c010000220413005a00000038601300000000007c0413005a0000003300000000000000010000005d010000df031300430000005265636f766572794465706f736974003300000000000000010000005b0100005c021300470000003860130000000000a30213004d000000f00213004a0000003a0313004a0000008403130050000000d40313000b00000020546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72207374617274696e672061207265636f766572792e2054686973206973207072696d6172696c792068656c6420666f7220646574657272696e67206d616c6963696f7573207265636f7665727920617474656d7074732c20616e642073686f756c64206861766520612076616c7565206c6172676520656e6f7567682074686174206120626164206163746f7220776f756c642063686f6f7365206e6f7420746f20706c6163652074686973206465706f7369742e20497420616c736f206163747320746f2066756e64206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a65206973206073697a656f6628426c6f636b4e756d6265722c2042616c616e6365202b2054202a204163636f756e74496429602062797465732e2057686572652054206973206120636f6e666967757261626c65207468726573686f6c642e20546865206d6178696d756d20616d6f756e74206f6620667269656e647320616c6c6f77656420696e2061207265636f7665727920636f6e66696775726174696f6e2e2054686520616d6f756e74206f662063757272656e6379206e656564656420706572206164646974696f6e616c2075736572207768656e206372656174696e672061207265636f7665727920636f6e66696775726174696f6e2e20546869732069732068656c6420666f7220616464696e67206073697a656f66284163636f756e7449642960206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e20546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061207265636f7665727920636f6e66696775726174696f6e2e20546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a65206973206032202b2073697a656f6628426c6f636b4e756d6265722c2042616c616e636529602062797465732e5765206465636f646520604e6020656c656d656e74733b20716564c00513005f000000c6020000170000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e312e302f7372632f636f6465632e7273496e76616c69642072616e676520666f7220746869732061756374696f6e6261642072616e676572616e676520626567696e7320746f6f206561726c795061726153657373696f6e496e666f00000000008c071300140000000000000000000000a00713001100000000000000000000000000000000000000000000000000000000000000000000000000000038601300b40713000000000000000000c407130003000000000000000100000000000000dc071300150000000000000000000000987413000c00000000000000000000000000000000000000000000000000000000000000000000000000000038601300f4071300000000000000000004081300010000000000000001000000000000000c081300080000000106000000000000987413000c00000000000000140813000b000000000000000000000000000000000000000000000000000000386013002008130000000000000000003008130003000000000000000000000041737369676e6d656e744b657973556e736166655665633c41737369676e6d656e7449643e000000330000000000000001000000f70000005b09130029000000840913005b000000df0913002b0000004561726c6965737453746f72656453657373696f6e000000330000000000000001000000f40000001b0913004000000053657373696f6e7353657373696f6e496e666f003300000000000000010000005e0100004808130029000000710813004d000000be0813005d0000002053657373696f6e20696e666f726d6174696f6e20696e206120726f6c6c696e672077696e646f772e2053686f756c64206861766520616e20656e74727920696e2072616e676520604561726c6965737453746f72656453657373696f6e2e2e3d43757272656e7453657373696f6e496e646578602e20446f6573206e6f74206861766520616e7920656e7472696573206265666f7265207468652073657373696f6e20696e64657820696e207468652066697273742073657373696f6e206368616e6765206e6f74696669636174696f6e2e20546865206561726c696573742073657373696f6e20666f722077686963682070726576696f75732073657373696f6e20696e666f2069732073746f7265642e2041737369676e6d656e74206b65797320666f72207468652063757272656e742073657373696f6e2e204e6f7465207468617420746869732041504920697320707269766174652064756520746f206974206265696e672070726f6e6520746f20276f66662d62792d6f6e65272061742073657373696f6e20626f756e6461726965732e205768656e20696e20646f7562742c20757365206053657373696f6e73602041504920696e73746561642e0000700a13002f00000072756e74696d653a3a70617261636861696e73706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7574696c2f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f7574696c2e7273546f6f6b206163746976652076616c696461746f72732066726f6d2073657420776974682077726f6e672073697a6500150b13002d000000c10a130054000000450500000900000073746f72656c6f61642f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e32302e312f7372632f736c6963652e7273436f7079696e67206265747765656e20736c6963657320726571756972657320657175616c206c656e677468730000640b130014000000780b130004000000c10a1300540000004109000009000000496e646578206f7574206f662072616e67653a20203e3d200000000090ac12000b00000000000000080c1300010000000000000000000000701613000800000000000000100c13000100000000000000000000008bac12000500000000000000180c130001000000000000000000000080ac12000b00000000000000200c13000100000000000000000000009bac12000900000000000000280c13000100000000000000df0c130024000000b50c13002a000000980c13001d000000650c130033000000300c1300350000002054686520696e646578206973207065726d616e656e7420616e64206d6179206e6f742062652066726565642f6368616e6765642e2054686520736f7572636520616e642064657374696e6174696f6e206163636f756e747320617265206964656e746963616c2e2054686520696e64657820776173206e6f7420617661696c61626c652e2054686520696e6465782069732061737369676e656420746f20616e6f74686572206163636f756e742e2054686520696e64657820776173206e6f7420616c72656164792061737369676e65642e00000000005fbb12000a00000000000000580d130001000000000000000000000004a512001700000000000000600d130001000000000000000000000069bb12000900000000000000680d13000100000000000000090e130022000000b20d130057000000700d13004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e0000000000a7dd12000a00000000000000ec0f13000100000000000000000000009add12000d00000000000000f40f13000100000000000000000000008add12001000000000000000fc0f130001000000000000000000000080dd12000a000000000000000410130001000000000000000000000077dd120009000000000000000c10130001000000000000000000000069dd12000e000000000000001410130001000000000000000000000057dd120012000000000000001c10130001000000000000000000000049dd12000e00000000000000241013000100000000000000000000003fdd12000a000000000000002c10130001000000000000000000000036dd12000900000000000000341013000100000000000000000000002bdd12000b000000000000003c1013000100000000000000000000001ddd12000e000000000000004410130001000000000000000000000014dd120009000000000000004c10130001000000000000000000000009dd12000b0000000000000054101300010000000000000000000000fddc12000c000000000000001c101300010000000000000000000000b1dd120008000000000000005c1013000100000000000000171313003d000000f312130024000000be12130035000000931213002b000000601213003300000038121300280000000c1213002c000000d411130038000000a011130034000000751113002b0000002e11130047000000fe10130030000000c31013003b0000008310130040000000641013001f00000020536f6d6520696e7465726e616c2073746174652069732062726f6b656e2e20546865726520617265207374696c6c20616374697665207265636f7665727920617474656d7074732074686174206e65656420746f20626520636c6f73656420546865207468726573686f6c6420666f72207265636f766572696e672074686973206163636f756e7420686173206e6f74206265656e206d6574205468697320757365722068617320616c726561647920766f756368656420666f722074686973207265636f766572792054686520667269656e64206d757374207761697420756e74696c207468652064656c617920706572696f6420746f20766f75636820666f722074686973207265636f766572792054686973206163636f756e74206973206e6f74206120667269656e642077686f2063616e20766f7563682041207265636f766572792070726f6365737320686173206e6f74207374617274656420666f72207468697320726573637565722041207265636f766572792070726f636573732068617320616c7265616479207374617274656420666f722074686973206163636f756e742054686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f766572792054686973206163636f756e74206973206e6f742073657420757020666f72207265636f7665727920467269656e6473206c697374206d75737420626520736f7274656420616e642066726565206f66206475706c69636174657320467269656e6473206c697374206d757374206265206c657373207468616e206d617820667269656e647320467269656e6473206c697374206d7573742062652067726561746572207468616e207a65726f20616e64207468726573686f6c64205468726573686f6c64206d7573742062652067726561746572207468616e207a65726f2055736572206973206e6f7420616c6c6f77656420746f206d616b6520612063616c6c206f6e20626568616c66206f662074686973206163636f756e743a5f5f50414c4c45545f56455253494f4e5f5f3a706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65742f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f61756374696f6e732e7273706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261722f706f6c6b61646f742f72756e74696d652f636f6d6d6f6e2f7372632f70617261735f7265676973747261722e727370616c6c65745f7363686564756c65723a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7363686564756c65722f7372632f6c69622e72737363686564756c655f6e616d65645f61667465727363686564756c655f616674657263616e63656c5f6e616d65647363686564756c655f6e616d656463616e63656c7363686564756c650000000000003c1613000d000000000000004c1613000100000000000000000000005416130011000000000000006816130001000000000000000000000070161300080000000000000078161300010000000000000000000000801613000c000000000000008c161300010000000000000000000000941613001000000000000000a4161300010000000000000000000000ac1613000c00000000000000b8161300010000000000000000000000c01613000d00000000000000d0161300010000000000000000000000d81613001000000000000000e8161300010000000000000000000000f01613000f0000000000000000171300010000000000000000000000081713000d0000000000000018171300010000000000000000000000201713000a000000000000002c171300010000000000000000000000341713000d00000000000000441713000100000000000000000000004c1713000b000000000000005817130001000000000000004e6f7452656769737465726564000000661913001a000000416c726561647952656769737465726564000000481913001e0000004e6f744f776e65722019130028000000436f6465546f6f4c6172676508191300180000004865616444617461546f6f4c61726765eb1813001d0000004e6f7450617261636861696ed2181300190000004e6f7450617261746872656164000000b81813001a00000043616e6e6f7444657265676973746572a11813001700000043616e6e6f74446f776e6772616465006c1813003500000043616e6e6f74557067726164650000003918130033000000506172614c6f636b65640000da1713005f000000496e76616c696450617261496400000095171300450000004e6f7452657365727665640060171300350000002054686520494420676976656e20666f7220726567697374726174696f6e20686173206e6f74206265656e2072657365727665642e2054686520696420796f752061726520747279696e6720746f20726567697374657220697320726573657276656420666f722073797374656d2070617261636861696e732e2050617261206973206c6f636b65642066726f6d206d616e6970756c6174696f6e20627920746865206d616e616765722e204d757374207573652070617261636861696e206f722072656c617920636861696e20676f7665726e616e63652e2043616e6e6f74207363686564756c652075706772616465206f66207061726174687265616420746f2070617261636861696e2043616e6e6f74207363686564756c6520646f776e6772616465206f662070617261636861696e20746f20706172617468726561642043616e6e6f74206465726567697374657220706172612050617261206973206e6f74206120506172617468726561642e2050617261206973206e6f7420612050617261636861696e2e20496e76616c69642070617261206865616420646174612073697a652e20496e76616c6964207061726120636f64652073697a652e205468652063616c6c6572206973206e6f7420746865206f776e6572206f6620746869732049642e2054686520494420697320616c726561647920726567697374657265642e20546865204944206973206e6f7420726567697374657265642e00000000081b130011000000000000001c1b1300010000000000000000000000241b13001100000000000000381b1300010000000000000000000000401b13000d00000000000000501b1300010000000000000000000000581b130011000000000000006c1b1300010000000000000000000000741b13001100000000000000881b1300010000000000000000000000901b13000d00000000000000a01b1300010000000000000000000000541613001100000000000000a81b1300010000000000000000000000b01b13000b00000000000000bc1b1300010000000000000000000000c41b13000f00000000000000d41b1300010000000000000000000000dc1b13001100000000000000f01b1300010000000000000000000000f81b13000a00000000000000041c1300010000000000000000000000801613000c000000000000000c1c1300010000000000000000000000941613001000000000000000141c13000100000000000000000000001c1c13000c00000000000000281c1300010000000000000041756374696f6e496e50726f6772657373000000071e1300250000004c65617365506572696f64496e50617374000000e61d1300210000004e6f74506172614f726967696e000000b81d13002e000000506172614e6f7452656769737465726564000000a11d130017000000506172614e6f744f6e626f617264696e670000007c1d130025000000496e76616c69644f726967696e000000321d13004a000000111d130021000000496e76616c6964436f646500eb1c130026000000556e7365744465706c6f794461746100b61c1300350000004e6f7443757272656e7441756374696f6e0000009f1c1300170000004e6f7441756374696f6e00008f1c130010000000711c13001e0000004b1c13002600000041756374696f6e456e646564301c13001b0000002041756374696f6e2068617320616c726561647920656e6465642e20476976656e20696e697469616c2068656164206461746120697320746f6f206c617267652e20476976656e20636f64652073697a6520697320746f6f206c617267652e204e6f7420616e2061756374696f6e2e204e6f7420612063757272656e742061756374696f6e2e204465706c6f796d656e74206461746120686173206e6f74206265656e2073657420666f7220746869732070617261636861696e2e2054686520636f6465206d75737420636f72726573706f6e6420746f2074686520686173682e2050617261636861696e20697320616c726561647920726567697374657265642e20546865206f726967696e20666f7220746869732063616c6c206d75737420626520746865206f726967696e2077686f2072656769737465726564207468652070617261636861696e2e205468652070617261636861696e204944206973206e6f74206f6e2d626f617264696e672e2050617261206973206e6f74207265676973746572656420546865206f726967696e20666f7220746869732063616c6c206d75737420626520612070617261636861696e2e20546865206c6561736520706572696f6420697320696e2074686520706173742e20546869732061756374696f6e20697320616c726561647920696e2070726f67726573732e561e13007e00000072756e74696d653a3a7363686564756c657270616c6c65745f7363686564756c65725761726e696e673a20546865726520617265206d6f7265206974656d732071756575656420696e20746865205363686564756c6572207468616e2065787065637465642066726f6d207468652072756e74696d6520636f6e66696775726174696f6e2e20416e20757064617465206d69676874206265206e65656465642e706172615f61756374696f6e617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f000000f86013004d00000042020000010000006069203c2034603b207165643300000008000000040000004800000091131300280000005d020000400000006069203c204c505053603b20606a203c2069603b20606a202b2031203c204c505053603b207165649113130028000000630200001a000000a81f13007f000000e11313002f000000a6000000010000005761726e696e673a205468697320626c6f636b20686173206d6f7265206974656d732071756575656420696e205363686564756c6572207468616e2065787065637465642066726f6d207468652072756e74696d6520636f6e66696775726174696f6e2e20416e20757064617465206d69676874206265206e65656465642e72657365727665666f7263655f72656d6f76655f6c6f636b7377617064657265676973746572666f7263655f72656769737465727265676973746572526567697374726172506172617363616e63656c5f61756374696f6e6269646e65775f61756374696f6e546172676574426c6f636b4e756d626572496e506173744e6f74466f756e644661696c6564546f5363686564756c6552657363686564756c654e6f4368616e676500000000000054211300090000000000000060211300020000000000000000000000702113000100000000000000000000007821130008000000000000006021130002000000000000000000000080211300010000000000000000000000882113000a0000000000000094211300030000000000000000000000ac21130001000000000000005363686564756c65640000004f2213000b000000587e1300030000002a2213002500000043616e63656c65640622130024000000446973706174636865640000df21130018000000f72113000f000000a66213000e000000b42113002b000000204469737061746368656420736f6d65207461736b2e205c5b7461736b2c2069642c20726573756c745c5d5461736b416464726573733c426c6f636b4e756d6265723e4f7074696f6e3c5665633c75383e3e2043616e63656c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d205363686564756c656420736f6d65207461736b2e205c5b7768656e2c20696e6465785c5d426c6f636b4e756d626572000000000000c6141300080000000000000064231300040000000000000000000000c42313000a0000000000000000000000c0141300060000000000000014241300020000000000000000000000442413000a0000000000000000000000b21413000e00000000000000942413000500000000000000000000000c2513000a0000000000000000000000a61413000c000000000000005c251300010000000000000000000000742513000a0000000000000000000000981413000e00000000000000c4251300040000000000000000000000242613000500000000000000000000008414130014000000000000004c261300050000000000000000000000c42613000500000000000000000000005229130004000000000000001a6f13000e00000000000000342713000e000000000000004227130028000000000000006a2713000800000000000000722713001200000000000000a16613000400000000000000a566130018000000b92913001d0000003860130000000000f96513000b000000e427130028000000d629130024000000312813000d000000a129130013000000fa291300140000000e2a13004f0000006f6613000c000000000000005229130004000000000000001a6f13000e00000000000000b42913000500000000000000587e13000300000056291300260000003860130000000000f96513000b000000e4271300280000007c29130025000000312813000d000000a129130013000000592813001c00000075281300500000006f6613000c000000000000002d2713000200000000000000137e130007000000000000005229130004000000000000001a6f13000e00000000000000342713000e000000000000004227130028000000000000006a2713000800000000000000722713001200000000000000a16613000400000000000000a566130018000000c5281300170000003860130000000000f96513000b000000e427130028000000dc28130023000000312813000d0000003e2813001b000000592813001c000000ff281300530000006f6613000c000000000000002d2713000200000000000000137e130007000000c52713001f0000003860130000000000f96513000b000000e4271300280000000c28130025000000312813000d0000003e2813001b000000592813001c00000075281300500000006f6613000c000000000000002f27130005000000000000001a6f13000e00000000000000342713000e000000000000004227130028000000000000006a2713000800000000000000722713001200000000000000a16613000400000000000000a566130018000000842713002b0000003860130000000000f96513000b000000af271300160000006f6613000c000000000000002d2713000200000000000000137e130007000000000000002f27130005000000000000001a6f13000e00000000000000342713000e000000000000004227130028000000000000006a2713000800000000000000722713001200000000000000a16613000400000000000000a566130018000000ec261300250000003860130000000000f96513000b000000112713001c0000006f6613000c000000205363686564756c652061206e616d6564207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c655f6e616d6564605d2e696461667465726d617962655f706572696f6469634f7074696f6e3c7363686564756c653a3a506572696f643c543a3a426c6f636b4e756d6265723e3e7072696f726974797363686564756c653a3a5072696f7269747920416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e2053616d65206173205b607363686564756c65605d2e2043616e63656c2061206e616d6564207363686564756c6564207461736b2e202d2053203d204e756d626572206f6620616c7265616479207363686564756c65642063616c6c73202d2042617365205765696768743a2032342e3931202b20322e393037202a205320c2b573202d204442205765696768743a20202020202d20526561643a204167656e64612c204c6f6f6b757020202020202d2057726974653a204167656e64612c204c6f6f6b7570202d2057696c6c20757365206261736520776569676874206f66203130302077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c73205363686564756c652061206e616d6564207461736b2e202d2042617365205765696768743a2032392e36202b202e313539202a205320c2b573202d2057696c6c20757365206261736520776569676874206f662033352077686963682073686f756c6420626520676f6f6420666f72206d6f7265207468616e203330207363686564756c65642063616c6c737768656e2043616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e202d2042617365205765696768743a2032322e3135202b20322e383639202a205320c2b57320202020202d20526561643a204167656e6461696e64657820416e6f6e796d6f75736c79207363686564756c652061207461736b2e202d2042617365205765696768743a2032322e3239202b202e313236202a205320c2b57320202020202d2057726974653a204167656e6461202d2057696c6c20757365206261736520776569676874206f662032352077686963682073686f756c6420626520676f6f6420666f7220757020746f203330207363686564756c65642063616c6c7300000000000000802b13000600000001050000000000001a6f13000e00000000000000862b13005c00000000000000000000000000000000000000000000000000000038601300e42b13000000000000000000f42b130001000000000000000100000000000000fc2b1300060000000105000000000000137e13000700000000000000022c13001b00000000000000000000000000000000000000000000000000000038601300202c13000000000000000000302c130001000000000000000000000000000000382c13000e0000000000000000000000462c13000800000000000000000000000000000000000000000000000000000000000000000000000000000038601300502c13000000000000000000602c13000300000000000000010000004167656e64615665633c4f7074696f6e3c5363686564756c65643c3c5420617320436f6e6669673e3a3a43616c6c2c20543a3a426c6f636b4e756d6265722c20543a3a0a50616c6c6574734f726967696e2c20543a3a4163636f756e7449643e3e3e00003300000000000000010000005f010000fd2c1300530000004c6f6f6b75705461736b416464726573733c543a3a426c6f636b4e756d6265723e000000330000000000000001000000f5000000bd2c13004000000053746f7261676556657273696f6e52656c6561736573000033000000000000000100000059010000782c13001f0000003860130000000000972c1300260000002053746f726167652076657273696f6e206f66207468652070616c6c65742e204e6577206e6574776f726b732073746172742077697468206c6173742076657273696f6e2e204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e14301300690000007300000013000000143013006900000048000000180000001430130069000000480000002a00000014301300690000008a00000018000000e83013004d0000003702000024000000e83013004d000000380200002400000014301300690000000101000042000000143013006900000015010000420000004475706c696361746520766f74657220286f72206f7468657220636f727275707420696e707574292e000000143013006900000036010000210000001430130069000000590100001500000014301300690000005e0100001e0000001430130069000000610000001a0000001430130069000000610000002c0000001430130069000000cb01000018000000616c7265616479206d757461626c7920626f72726f776564330000000000000001000000490000001430130069000000cb010000210000001430130069000000cd010000270000001430130069000000cd010000300000001430130069000000ce010000240000001430130069000000ce010000390000001430130069000000cf010000240000001430130069000000cf010000390000001430130069000000f3010000230000001430130069000000f30100002c0000001430130069000000f5010000240000001430130069000000f50100003900000014301300690000001802000035000000143013006900000019020000350000001430130069000000220200002400000014301300690000002202000039000000143013006900000044020000350000001430130069000000450200003500000014301300690000005a0200002b00000014301300690000005a0200004600000014301300690000005b0200002800000014301300690000005b020000470000001430130069000000650200002b0000001430130069000000650200004700000014301300690000006602000028000000143013006900000066020000480000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f6e706f732d656c656374696f6e732f7372632f7265647563652e7273000000a030130048000000780400000f000000a03013004800000078040000220000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f636f72652f7372632f63656c6c2e72732f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f636f72652f7372632f736c6963652f6d6f642e7273617373657274696f6e206661696c65643a2062697473206173207573697a65203c3d20726573756c742e6c656e28297431130061000000480000000d0000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d322e312e302f7372632f6269745f7665632e7273000000000000005b2013000800000000000000e0321300030000000000000000000000283313000e00000000000000000000004d2013000e000000000000009833130005000000000000000000000010341300060000000000000000000000432013000a0000000000000040341300010000000000000000000000583413000300000000000000000000003f201300040000000000000070341300020000000000000000000000a03413000b00000000000000000000002e2013001100000000000000f83413000100000000000000000000001035130004000000000000000000000027201300070000000000000038601300000000000000000000000000303513000e00000000000000000000002d2713000200000000000000eb8313000600000000000000bd3c13000c00000000000000c93c130008000000000000000c9213000f00000000000000d13c13000e000000df3c13003f0000003860130000000000db3613000d0000001e3d1300310000004f3d13004c0000009b3d130041000000dc3d13004a00000038601300000000004737130011000000263e1300660000008c3e1300370000003860130000000000a13713000a000000c33e130036000000000000007b66130003000000000000009b6813000c00000000000000aa3c13000700000000000000b13c13000c000000000000002d2713000200000000000000eb8313000600000000000000bd3c13000c00000000000000c93c130008000000000000000c9213000f00000000000000d13c13000e000000b73b1300380000003860130000000000ef3b13002f00000038601300000000001e3c130045000000633c130047000000000000002d2713000200000000000000eb83130006000000153b1300420000003860130000000000573b130060000000000000002d2713000200000000000000eb8313000600000000000000103b13000500000000000000eb83130006000000c4381300370000003860130000000000fb3813004100000038601300000000003c3913005900000095391300570000003860130000000000ec39130058000000443a130050000000943a130056000000ea3a13002600000000000000c03813000400000000000000eb8313000600000007381300440000004b3813004e00000038601300000000009938130027000000a0351300260000003860130000000000c6351300540000001a361300600000007a361300610000003860130000000000db3613000d000000e83613005f0000003860130000000000473713001100000058371300490000003860130000000000a13713000a000000ab3713005c000000205265736572766520612050617261204964206f6e207468652072656c617920636861696e2e20546869732066756e6374696f6e2077696c6c20726573657276652061206e6577205061726120496420746f206265206f776e65642f6d616e6167656420627920746865206f726967696e206163636f756e742e20546865206f726967696e206163636f756e742069732061626c6520746f2072656769737465722068656164206461746120616e642076616c69646174696f6e20636f6465207573696e67206072656769737465726020746f20637265617465206120706172617468726561642e205573696e672074686520536c6f74732070616c6c65742c206120706172617468726561642063616e207468656e20626520757067726164656420746f2067657420612070617261636861696e20736c6f742e20232320417267756d656e7473202d20606f726967696e603a204d7573742062652063616c6c6564206279206120605369676e656460206f726967696e2e204265636f6d657320746865206d616e616765722f6f776e6572206f6620746865206e657720706172612049442e202323204465706f736974732f4665657320546865206f726967696e206d75737420726573657276652061206465706f736974206f662060506172614465706f7369746020666f722074686520726567697374726174696f6e2e202323204576656e7473205468652060526573657276656460206576656e7420697320656d697474656420696e2063617365206f6620737563636573732c2077686963682070726f76696465732074686520494420726573657276656420666f72207573652e2052656d6f76652061206d616e61676572206c6f636b2066726f6d206120706172612e20546869732077696c6c20616c6c6f7720746865206d616e61676572206f6620612070726576696f75736c79206c6f636b6564207061726120746f2064657265676973746572206f7220737761702061207061726120776974686f7574207573696e6720676f7665726e616e63652e2043616e206f6e6c792062652063616c6c65642062792074686520526f6f74206f726967696e2e70617261205377617020612070617261636861696e207769746820616e6f746865722070617261636861696e206f7220706172617468726561642e20546865206f726967696e206d75737420626520526f6f742c2074686520607061726160206f776e65722c206f72207468652060706172616020697473656c662e2054686520737761702077696c6c2068617070656e206f6e6c7920696620746865726520697320616c726561647920616e206f70706f7369746520737761702070656e64696e672e204966207468657265206973206e6f742c2074686520737761702077696c6c2062652073746f72656420696e207468652070656e64696e67207377617073206d61702c20726561647920666f722061206c6174657220636f6e6669726d61746f727920737761702e20546865206050617261496460732072656d61696e206d617070656420746f207468652073616d652068656164206461746120616e6420636f646520736f2065787465726e616c20636f64652063616e2072656c79206f6e20605061726149646020746f2062652061206c6f6e672d7465726d206964656e746966696572206f662061206e6f74696f6e616c202270617261636861696e222e20486f77657665722c207468656972207363686564756c696e6720696e666f2028692e652e2077686574686572207468657927726520612070617261746872656164206f722070617261636861696e292c2061756374696f6e20696e666f726d6174696f6e20616e64207468652061756374696f6e206465706f736974206172652073776974636865642e6f746865722044657265676973746572206120506172612049642c2066726565696e6720616c6c206461746120616e642072657475726e696e6720616e79206465706f7369742e205468652063616c6c6572206d75737420626520526f6f742c2074686520607061726160206f776e65722c206f72207468652060706172616020697473656c662e205468652070617261206d757374206265206120706172617468726561642e20466f7263652074686520726567697374726174696f6e206f6620612050617261204964206f6e207468652072656c617920636861696e2e20546869732066756e6374696f6e206d7573742062652063616c6c6564206279206120526f6f74206f726967696e2e20546865206465706f7369742074616b656e2063616e2062652073706563696669656420666f72207468697320726567697374726174696f6e2e20416e79205061726149642063616e20626520726567697374657265642c20696e636c7564696e67207375622d3130303020494473207768696368206172652053797374656d2050617261636861696e732e6465706f73697442616c616e63654f663c543e67656e657369735f68656164486561644461746156616c69646174696f6e436f64652052656769737465722068656164206461746120616e642076616c69646174696f6e20636f646520666f72206120726573657276656420506172612049642e202d20606f726967696e603a204d7573742062652063616c6c6564206279206120605369676e656460206f726967696e2e202d20606964603a2054686520706172612049442e204d757374206265206f776e65642f6d616e616765642062792074686520606f726967696e60207369676e696e67206163636f756e742e202d206067656e657369735f68656164603a205468652067656e6573697320686561642064617461206f66207468652070617261636861696e2f7468726561642e202d206076616c69646174696f6e5f636f6465603a2054686520696e697469616c2076616c69646174696f6e20636f6465206f66207468652070617261636861696e2f7468726561642e20546865206f726967696e207369676e6564206163636f756e74206d7573742072657365727665206120636f72726573706f6e64696e67206465706f73697420666f722074686520726567697374726174696f6e2e20416e797468696e6720616c72656164792072657365727665642070726576696f75736c7920666f7220746869732070617261204944206973206163636f756e74656420666f722e2054686520605265676973746572656460206576656e7420697320656d697474656420696e2063617365206f6620737563636573732e000000000000001c4013000b0000000105000000000000eb8313000600000000000000eb831300060000000000000000000000000000000000000000000000000000003860130028401300000000000000000038401300010000000000000000000000000000006c201300050000000105000000000000eb83130006000000000000004040130024000000000000000000000000000000000000000000000000000000386013006440130000000000000000007440130004000000000000000000000000000000944013000e0000000000000000000000eb8313000600000000000000000000000000000000000000000000000000000000000000000000000000000038601300a44013000000000000000000b440130001000000000000000100000050656e64696e675377617000330000000000000001000000f5000000c64113001900000050617261496e666f3c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e330000000000000001000000f5000000d44013004100000038601300000000001541130064000000794113004d0000004e65787446726565506172614964000033000000000000000100000048010000bc4013001800000020546865206e65787420667265652060506172614964602e20416d6f756e742068656c64206f6e206465706f73697420666f722065616368207061726120616e6420746865206f726967696e616c206465706f7369746f722e2054686520676976656e206163636f756e7420494420697320726573706f6e7369626c6520666f72207265676973746572696e672074686520636f646520616e6420696e697469616c206865616420646174612c20627574206d6179206f6e6c7920646f20736f2069662069742069736e27742079657420726567697374657265642e2028416674657220746861742c206974277320757020746f20676f7665726e616e636520746f20646f20736f2e292050656e64696e672073776170206f7065726174696f6e732e0000000000c04213000b00000000000000b13c13000c0000000000000038601300cc421300000000000000000038601300000000000000000000000000dc4213001200000000000000b13c13000c0000000000000038601300f0421300000000000000000038601300000000000000000000000000004313000b00000000000000587e13000300000000000000386013000c4313000000000000000000386013000000000000000000000000001c4313000b00000000000000587e1300030000000000000038601300284313000000000000000000386013000000000000000000506172614465706f7369740033000000000000000100000060010000446174614465706f736974506572427974650000330000000000000001000000610100004d6178436f646553697a6500330000000000000001000000620100004d61784865616453697a65003300000000000000010000006301000000000000bc4313000a00000000000000c843130002000000000000000000000038601300000000000000000000000000d84313000c00000000000000e443130001000000000000000000000038601300000000000000000000000000ec4313000800000000000000c8431300020000000000000000000000386013000000000000000000526567697374657265640000eb831300060000007a62130009000000446572656769737465726564eb83130006000000526573657276656400000000804513000e0000000000000090451300030000000000000000000000a8451300030000000000000000000000c04513000d00000000000000d0451300010000000000000000000000d8451300010000000000000000000000e04513000900000000000000ec4513000400000000000000000000000c4613000200000000000000000000001c4613000a000000000000002846130004000000000000000000000048461300030000000000000000000000ec43130008000000000000006046130003000000000000000000000078461300020000000000000000000000884613000a0000000000000094461300020000000000000000000000a4461300010000000000000000000000ac4613001200000000000000c0461300030000000000000000000000d8461300030000000000000000000000f04613000b00000000000000fc46130005000000000000000000000024471300020000000000000000000000344713000d000000000000004447130002000000000000000000000054471300020000000000000041756374696f6e537461727465640000e04713000c000000564813000b0000004f2213000b0000004e4b130053000000a14b130046000000e74b13002600000041756374696f6e436c6f736564000000e04713000c0000000f4b13003f000000576f6e4465706c6f790000007a62130009000000064b130009000000eb831300060000004f481300070000008b4a130055000000e04a130026000000576f6e52656e6577616c0000eb83130006000000564813000b000000564813000b0000004f48130007000000df49130031000000104a130050000000604a13002b0000007a621300090000004f481300070000004f481300070000005049130053000000a34913003c000000556e726573657276656400007a621300090000004f48130007000000074913004900000052657365727665436f6e66697363617465640000eb831300060000007a621300090000004f48130007000000614813005e000000bf48130027000000e6481300210000004269644163636570746564007a62130009000000eb831300060000004f48130007000000564813000b000000564813000b000000ec471300330000001f4813003000000057696e6e696e674f6666736574000000e04713000c0000004f2213000b000000644713005c000000c047130020000000205468652077696e6e696e67206f6666736574207761732063686f73656e20666f7220616e2061756374696f6e2e20546869732077696c6c206d617020696e746f20746865206057696e6e696e67602073746f72616765206d61702e205c5b61756374696f6e5f696e6465782c20626c6f636b5f6e756d6265725c5d41756374696f6e496e6465782041206e65772062696420686173206265656e206163636570746564206173207468652063757272656e742077696e6e65722e205c5b77686f2c20706172615f69642c20616d6f756e742c2066697273745f736c6f742c206c6173745f736c6f745c5d42616c616e63654c65617365506572696f6420536f6d656f6e6520617474656d7074656420746f206c65617365207468652073616d6520736c6f7420747769636520666f7220612070617261636861696e2e2054686520616d6f756e742069732068656c6420696e207265736572766520627574206e6f2070617261636861696e20736c6f7420686173206265656e206c65617365642e205c5b70617261636861696e5f69642c206c65617365722c20616d6f756e745c5d2046756e6473207765726520756e72657365727665642073696e636520626964646572206973206e6f206c6f6e676572206163746976652e205b6269646465722c20616d6f756e745d2046756e6473207765726520726573657276656420666f7220612077696e6e696e67206269642e2046697273742062616c616e63652069732074686520657874726120616d6f756e742072657365727665642e205365636f6e642069732074686520746f74616c2e205b6269646465722c2065787472615f72657365727665642c20746f74616c5f616d6f756e745d20416e206578697374696e672070617261636861696e20776f6e2074686520726967687420746f20636f6e74696e75652e2046697273742062616c616e63652069732074686520657874726120616d6f756e7420726573657665642e205365636f6e642069732074686520746f74616c20616d6f756e742072657365727665642e205b70617261636861696e5f69642c20626567696e2c20636f756e742c20746f74616c5f616d6f756e745d20536f6d656f6e6520776f6e2074686520726967687420746f206465706c6f7920612070617261636861696e2e2042616c616e636520616d6f756e7420697320646564756374656420666f72206465706f7369742e205b6269646465722c2072616e67652c2070617261636861696e5f69642c20616d6f756e745d536c6f7452616e676520416e2061756374696f6e20656e6465642e20416c6c2066756e6473206265636f6d6520756e72657365727665642e205b61756374696f6e5f696e6465785d20416e2061756374696f6e20737461727465642e2050726f76696465732069747320696e64657820616e642074686520626c6f636b206e756d6265722077686572652069742077696c6c20626567696e20746f20636c6f736520616e6420746865206669727374206c6561736520706572696f64206f662074686520717561647275706c657420746861742069732061756374696f6e65642e205b61756374696f6e5f696e6465782c206c656173655f706572696f642c20656e64696e675d00000000000000822013000b00000000000000944c1300020000000000000000000000c44c13000500000000000000000000007f2013000300000000000000ec4c1300050000000000000000000000644d1300100000000000000000000000712013000e0000000000000038601300000000000000000000000000e44d13000300000000000000000000001653130008000000000000001e5313001700000000000000355313001200000000000000cd511300190000000a5213001600000038601300000000002052130055000000755213004a000000bf5213005700000000000000c03813000400000000000000925113000f00000000000000a15113000d00000000000000ae5113001500000000000000c35113000a00000000000000cd5113001900000000000000e65113000900000000000000cd5113001900000000000000ef5113000600000000000000f5511300150000003e4e130053000000914e13000b00000038601300000000009c4e130057000000f34e1300500000003860130000000000434f130056000000994f13001d000000b64f1300540000000a5013001b00000025501300530000007850130043000000bb5013005100000078501300430000000c511300530000005f51130033000000fc4d13001f00000038601300000000001b4e1300230000002043616e63656c20616e20696e2d70726f67726573732061756374696f6e2e2043616e206f6e6c792062652063616c6c656420627920526f6f74206f726967696e2e204d616b652061206e6577206269642066726f6d20616e206163636f756e742028696e636c7564696e6720612070617261636861696e206163636f756e742920666f72206465706c6f79696e672061206e65772070617261636861696e2e204d756c7469706c652073696d756c74616e656f757320626964732066726f6d207468652073616d65206269646465722061726520616c6c6f776564206f6e6c79206173206c6f6e6720617320616c6c206163746976652062696473206f7665726c61702065616368206f746865722028692e652e20617265206d757475616c6c79206578636c7573697665292e20426964732063616e6e6f742062652072656461637465642e202d20607375626020697320746865207375622d6269646465722049442c20616c6c6f77696e6720666f72206d756c7469706c6520636f6d706574696e67206269647320746f206265206d6164652062792028616e642066756e64656420627929207468652073616d65206163636f756e742e202d206061756374696f6e5f696e646578602069732074686520696e646578206f66207468652061756374696f6e20746f20626964206f6e2e2053686f756c64206a757374206265207468652070726573656e742076616c7565206f66206041756374696f6e436f756e746572602e202d206066697273745f736c6f746020697320746865206669727374206c6561736520706572696f6420696e646578206f66207468652072616e676520746f20626964206f6e2e205468697320697320746865206162736f6c757465206c6561736520706572696f6420696e6465782076616c75652c206e6f7420616e2061756374696f6e2d7370656369666963206f66667365742e202d20606c6173745f736c6f746020697320746865206c617374206c6561736520706572696f6420696e646578206f66207468652072616e676520746f20626964206f6e2e205468697320697320746865202d2060616d6f756e74602069732074686520616d6f756e7420746f2062696420746f2062652068656c64206173206465706f73697420666f72207468652070617261636861696e2073686f756c6420746865206269642077696e2e205468697320616d6f756e742069732068656c64207468726f7567686f7574207468652072616e67652e436f6d706163743c5061726149643e61756374696f6e5f696e646578436f6d706163743c41756374696f6e496e6465783e66697273745f736c6f74436f6d706163743c4c65617365506572696f644f663c543e3e6c6173745f736c6f74616d6f756e74436f6d706163743c42616c616e63654f663c543e3e204372656174652061206e65772061756374696f6e2e20546869732063616e206f6e6c792068617070656e207768656e2074686572652069736e277420616c726561647920616e2061756374696f6e20696e2070726f677265737320616e64206d6179206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e20416363657074732074686520606475726174696f6e60206f6620746869732061756374696f6e20616e642074686520606c656173655f706572696f645f696e64657860206f662074686520696e697469616c206c6561736520706572696f64206f662074686520666f757220746861742061726520746f2062652061756374696f6e65642e6475726174696f6e436f6d706163743c543a3a426c6f636b4e756d6265723e6c656173655f706572696f645f696e6465780000000000c85413000e0000000000000000000000e04713000c00000000000000000000000000000000000000000000000000000000000000000000000000000038601300d85413000000000000000000e854130001000000000000000100000000000000f05413000b0000000000000000000000fb5413002200000000000000000000000000000000000000000000000000000000000000000000000000000038601300202c130000000000000000002055130005000000000000000000000000000000485513000f0000000105000000000000575513001600000000000000b13c13000c000000000000000000000000000000000000000000000000000000386013007055130000000000000000008055130002000000000000000000000000000000905513000700000001050000000000001a6f13000e00000000000000975513000e00000000000000000000000000000000000000000000000000000038601300a85513000000000000000000b855130003000000000000000000000041756374696f6e436f756e7465720000330000000000000001000000f4000000555813002300000041756374696f6e496e666f284c65617365506572696f644f663c543e2c20543a3a426c6f636b4e756d626572290000001b5713003e00000038601300000000005957130051000000aa57130054000000fe571300570000005265736572766564416d6f756e747328543a3a4163636f756e7449642c2050617261496429000000330000000000000001000000f5000000c15613004c0000000d5713000e00000057696e6e696e6757696e6e696e67446174613c543e000000330000000000000001000000f0000000d05513005800000028561300520000007a56130047000000205468652077696e6e696e67206269647320666f722065616368206f66207468652031302072616e67657320617420656163682073616d706c6520696e207468652066696e616c20456e64696e6720506572696f64206f66207468652063757272656e742061756374696f6e2e20546865206d61702773206b65792069732074686520302d626173656420696e64657820696e746f207468652053616d706c652053697a652e205468652066697273742073616d706c65206f662074686520656e64696e6720706572696f6420697320303b20746865206c617374206973206053616d706c652053697a65202d2031602e20416d6f756e74732063757272656e746c7920726573657276656420696e20746865206163636f756e7473206f662074686520626964646572732063757272656e746c792077696e6e696e6720287375622d2972616e6765732e20496e666f726d6174696f6e2072656c6174696e6720746f207468652063757272656e742061756374696f6e2c206966207468657265206973206f6e652e20546865206669727374206974656d20696e20746865207475706c6520697320746865206c6561736520706572696f6420696e646578207468617420746865206669727374206f662074686520666f757220636f6e746967756f7573206c6561736520706572696f6473206f6e2061756374696f6e20697320666f722e20546865207365636f6e642069732074686520626c6f636b206e756d626572207768656e207468652061756374696f6e2077696c6c2022626567696e20746f20656e64222c20692e652e2074686520666972737420626c6f636b206f662074686520456e64696e6720506572696f64206f66207468652061756374696f6e2e204e756d626572206f662061756374696f6e73207374617274656420736f206661722e00000000585913000c000000000000001a6f13000e0000000000000038601300645913000000000000000000745913000100000000000000000000007c5913000c000000000000001a6f13000e000000000000003860130088591300000000000000000098591300030000000000000000000000b05913000e00000000000000587e1300030000000000000038601300c0591300000000000000000038601300000000000000000000000000d05913001300000000000000587e1300030000000000000038601300e45913000000000000000000386013000000000000000000456e64696e67506572696f6433000000000000000100000064010000615a13004700000053616d706c654c656e677468330000000000000001000000ee000000f45913003c0000003860130000000000305a130031000000536c6f7452616e6765436f756e740000330000000000000001000000650100004c65617365506572696f6473506572536c6f74003300000000000000010000006601000020546865206c656e677468206f6620656163682073616d706c6520746f2074616b6520647572696e672074686520656e64696e6720706572696f642e20456e64696e67506572696f64202f2053616d706c654c656e677468203d20546f74616c2023206f662053616d706c657320546865206e756d626572206f6620626c6f636b73206f76657220776869636820616e2061756374696f6e206d617920626520726574726f6163746976656c7920656e6465642e1f5b13001d000000c05a13005f00000063000000120000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f62747265652f6e617669676174652e727342547265654d61702068617320646966666572656e74206465707468734269742d566563746f72206361706163697479206578636565646564ffffff1f545c13001e000000725c130003000000025c130052000000ec03000009000000ac5b1300560000002402000009000000ac5b1300560000001f0100000e000000ac5b1300560000002b020000090000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e32302e312f7372632f7665632f6170692e72732f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f6269747665632d302e32302e312f7372632f7665632e72734269742d566563746f722063617061636974792065786365656465643a20203e2000000000000000ac2013001000000000000000e85c1300010000000000000000000000a42013000800000000000000f05c13000100000000000000000000008d2013001700000000000000f85c1300010000000000000000000000bc2013001200000000000000005d130001000000000000008f5d13001a0000006f5d130020000000455d13002a000000085d13003d0000002052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e20476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e2043616e6e6f742066696e6420746865207363686564756c65642063616c6c2e204661696c656420746f207363686564756c6520612063616c6c0000003c5e130015000000515e13001d00000072756e74696d653a3a6672616d652d737570706f727470616c6c65745f7375646f3a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f7375646f2f7372632f6c69622e7273e29c85206e6f206d6967726174696f6e20666f72202c2073657474696e672073746f726167652076657273696f6e20746f20706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d702f706f6c6b61646f742f72756e74696d652f70617261636861696e732f7372632f756d702e727370616c6c65745f6772616e6470612f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6772616e6470612f7372632f6c69622e727370616c6c65745f696d5f6f6e6c696e653a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e727370616c6c65745f617574686f726974795f646973636f766572793a3a70616c6c65742f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f617574686f726974792d646973636f766572792f7372632f6c69622e72736865617274626561744772616e64706146696e616c6974795374616c6c65648260130023000000586013002a0000008e5e130027000000be00000001000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a205f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e000000c060130017000000b35f130066000000590000000f0000005f5f49676e6f72652063616e6e6f7420626520757365647672662d6e6d2d706b496d4f6e6c696e65f86013004d000000de010000010000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f636f72652f7372632f6f70732f61726974682e727350656e64696e674368616e67653a6772616e6470615f617574686f7269746965735374617465526571756972655375646f000000000000fc6113000500000000000000046213000100000000000000000000000c621300010000000000000000000000146213000a000000000000002062130001000000000000000000000028621300010000000000000000000000306213000a00000000000000046213000100000000000000000000000c62130001000000000000005375646964000000a66213000e00000083621300230000004b65794368616e67656400007a621300090000003a621300400000005375646f4173446f6e6520546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e4163636f756e7449642041207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d4469737061746368526573756c740000000064631300040000000000000068631300010000000000000000000000806313000a0000000000000000000000d06313001500000000000000e8631300020000000000000000000000186413000a00000000000000000000006864130007000000000000007064130001000000000000000000000088641300090000000000000000000000d06413000700000000000000d8641300020000000000000000000000086513000b000000000000007375646f00000000a16613000400000000000000a5661300180000002e6713004e0000003860130000000000c5651300340000003860130000000000f96513000b00000004661300080000000c6613001900000025661300180000003d661300320000006f6613000c0000007375646f5f756e636865636b65645f77656967687400000000000000a16613000400000000000000a5661300180000000000000029681300070000000000000030681300060000002e6713004e0000007c6713004c000000c86713002d0000003860130000000000c5651300340000003860130000000000f96513000b0000000466130008000000f5671300340000006f6613000c0000007365745f6b657900000000002b67130003000000000000007e66130023000000bd6613005d0000003860130000000000c5651300340000003860130000000000f96513000b00000004661300080000000c661300190000001a671300110000006f6613000c0000007375646f5f617300000000007b66130003000000000000007e6613002300000000000000a16613000400000000000000a5661300180000006065130054000000b4651300110000003860130000000000c5651300340000003860130000000000f96513000b00000004661300080000000c6613001900000025661300180000003d661300320000006f6613000c0000002041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d206120676976656e206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2023203c7765696768743e202d204f2831292e202d204c696d697465642073746f726167652072656164732e202d204f6e6520444220777269746520286576656e74292e202d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2023203c2f7765696768743e77686f3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f7572636563616c6c426f783c3c5420617320436f6e6669673e3a3a43616c6c3e2041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e202d204f6e65204442206368616e67652e6e65772041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e20546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865205375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e202d2054686520776569676874206f6620746869732063616c6c20697320646566696e6564206279207468652063616c6c65722e5f776569676874576569676874000000000000986813000300000000000000000000009b6813000c00000000000000000000000000000000000000000000000000000000000000000000000000000038601300a86813000000000000000000b86813000100000000000000010000004b6579543a3a4163636f756e7449640033000000000000000100000067010000c0681300210000002054686520604163636f756e74496460206f6620746865207375646f206b65792e696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f6465000000c35e13005a000000d8000000010000004e6913001600000076691300020000004e69130016000000646913001200000072756e74696d653a3a696d2d6f6e6c696e65536b697070696e6720686561727462656174206174202e204e6f7420612076616c696461746f722e3a206361706163697479206f766572666c6f770000009c69130053000000fb000000360000002f7573722f6c6f63616c2f636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f736d616c6c7665632d312e362e312f7372632f6c69622e7273617373657274696f6e206661696c65643a206e65775f636170203e3d206c656e009c69130053000000320300000d000000c66a1300540000004772616e64706145717569766f636174696f6e72756e74696d653a3a61666770616c6c65745f6772616e6470613a3a65717569766f636174696f6e2f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f6772616e6470612f7372632f65717569766f636174696f6e2e727372656a656374696e6720756e7369676e6564207265706f72742065717569766f636174696f6e207472616e73616374696f6e2062656361757365206974206973206e6f74206c6f63616c2f696e2d626c6f636b2e496e76616c696445717569766f636174696f6e50726f6f66496e76616c69644b65794f776e65727368697050726f6f66546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65644475706c69636174654f6666656e63655265706f72740000000000106c13001300000000000000246c1300020000000000000000000000546c1300040000000000000000000000746c13001c00000000000000246c1300020000000000000000000000906c1300090000000000000000000000d86c13000c00000000000000e46c1300020000000000000000000000146d130007000000000000007265706f72745f65717569766f636174696f6e0000000000ef7013001200000000000000017113002a000000000000002b7113000f000000000000003a71130010000000436f130043000000866f13003e000000c46f13003f00000003701300120000007265706f72745f65717569766f636174696f6e5f756e7369676e6564436f130043000000866f13003e000000c46f13003f00000003701300120000003860130000000000157013004400000059701300460000009f70130046000000e57013000a0000006e6f74655f7374616c6c656400000000156f130005000000000000001a6f13000e00000000000000286f13001b000000000000001a6f13000e0000004c6d130047000000936d13004a000000dd6d130048000000256e1300450000006a6e13004a000000b46e13004a000000fe6e130017000000204e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e20546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f20626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e205468652064656c61792073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d6520746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f726765642028652e672e203130303020626c6f636b73292e20546865204752414e44504120766f746572732077696c6c20737461727420746865206e657720617574686f7269747920736574207573696e672074686520676976656e2066696e616c697a656420626c6f636b20617320626173652e204f6e6c792063616c6c61626c6520627920726f6f742e64656c6179543a3a426c6f636b4e756d626572626573745f66696e616c697a65645f626c6f636b5f6e756d626572205265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c20766572696679207468652065717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f6620616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63652077696c6c206265207265706f727465642e20546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c7920626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c20617320737563682069662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e207265706f727465722e65717569766f636174696f6e5f70726f6f6645717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e6b65795f6f776e65725f70726f6f66543a3a4b65794f776e657250726f6f66000000000000666113000500000000000000000000008c7313001b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300a87313000000000000000000b873130001000000000000000100000000000000456113000d0000000000000000000000c07313002300000000000000000000000000000000000000000000000000000000000000000000000000000038601300e47313000000000000000000f473130001000000000000000000000000000000fc7313000a00000000000000000000001a6f13000e000000000000000000000000000000000000000000000000000000000000000000000000000000386013000874130000000000000000001874130001000000000000000000000000000000316013000700000000000000000000002074130020000000000000000000000000000000000000000000000000000000000000000000000000000000386013004074130000000000000000005074130001000000000000000000000000000000587413000c00000000000000000000006474130005000000000000000000000000000000000000000000000000000000000000000000000000000000386013006c74130000000000000000007c741300020000000000000001000000000000008c7413000c0000000105000000000000647413000500000000000000987413000c00000000000000000000000000000000000000000000000000000038601300a47413000000000000000000b474130004000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e00330000000000000001000000680100007e7613002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e00330000000000000001000000f20000004d761300310000004e657874466f726365640000330000000000000001000000f50000001e7613002f00000028543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d62657229330000000000000001000000f5000000fa7513002400000043757272656e7453657449645365744964000000330000000000000001000000ef0000007275130057000000c975130031000000536574496453657373696f6e53657373696f6e496e646578330000000000000001000000f5000000d4741300560000002a7513001a0000003860130000000000447513002e0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e2054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e0000dc76130026000000b4761300260000004572726f72207375626d697474696e672065717569766f636174696f6e207265706f72743a2028295375626d6974746564204752414e4450412065717569766f636174696f6e207265706f72742e000001000000000000007061726974792f696d2d6f6e6c696e652d6865617274626561742f0058771300080000006077130020000000807713000b0000008b7713000300000070616c6c65745f696d5f6f6e6c696e655b696e6465783a205d205265706f7274696e6720696d2d6f6e6c696e6520617420626c6f636b3a20202873657373696f6e3a20293a203c73747269707065643e4475706c696361746564486561727462656174496e76616c69644b6579000000000000003c781300110000000000000050781300010000000000000000000000587813000100000000000000000000006078130007000000000000003860130000000000000000000000000068781300010000000000000000000000707813000b000000000000007c7813000100000000000000000000008478130001000000000000004865617274626561745265636569766564000000697913000b0000002879130041000000416c6c476f6f6400f378130035000000536f6d654f66666c696e6500db781300180000008c7813004f0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e652076616c696461746f722077617320666f756e6420746f206265205c5b6f66666c696e655c5d2e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460205c5b617574686f726974795f69645c5d417574686f72697479496400000000196013000900000000000000a0791300020000000000000000000000d07913000900000000000000000000001960130009000000000000007e7b13001900000000000000977b13000a00000000000000a17b13002f000000f96513000b000000187a130050000000687a130040000000a87a130023000000cb7a13002c000000f77a13004f000000467b1300170000005d7b1300210000006f6613000c000000202d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020286865617274626561742e76616c696461746f72735f6c656e29202020616e642045206973206c656e677468206f6620606865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373602020202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b602020202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560202d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c2020206052656365697665644865617274626561747360202d2044625772697465733a2060526563656976656448656172746265617473604865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000000507d13000e00000000000000000000001a6f13000e00000000000000000000000000000000000000000000000000000000000000000000000000000038601300607d13000000000000000000707d13000b000000000000000100000000000000c87d1300040000000000000000000000cc7d13001300000000000000000000000000000000000000000000000000000000000000000000000000000038601300e07d13000000000000000000f07d130001000000000000000100000000000000f87d1300120000000205050000000000987413000c000000000000000a7e13000900000000000000137e130007000000000000000000000000000000386013001c7e130000000000000000002c7e1300020000000000000000000000000000003c7e13000e0000000205050000000000987413000c000000000000004a7e13000e00000000000000587e13000300000000000000000000000000000038601300607d130000000000000000005c7e130002000000000000000100000048656172746265617441667465720000330000000000000001000000f4000000737f130047000000ba7f1300090000003860130000000000c37f1300490000000c8013004d00000059801300460000009f8013002a0000003860130000000000c98013004e000000178113004b00000062811300400000004b6579735665633c543a3a417574686f7269747949643e00330000000000000001000000f70000003f7f13003400000052656365697665644865617274626561747341757468496e6465785665633c75383e0000330000000000000001000000f5000000e37e13003c0000001f7f130020000000417574686f726564426c6f636b7356616c696461746f7249643c543e753332006c7e130045000000b17e13003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206056616c696461746f7249643c543e6020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e207468652063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e20546869732076616c75652077696c6c206f6e6c79206265207573656420617320612066616c6c6261636b206966207765206661696c20746f2067657420612070726f7065722073657373696f6e2070726f677265737320657374696d6174652066726f6d20604e65787453657373696f6e526f746174696f6e602c2061732074686f736520657374696d617465732073686f756c64206265206d6f7265206163637572617465207468656e207468652076616c75652077652063616c63756c61746520666f7220604865617274626561744166746572602e0000328213002300000072756e74696d653a3a6261626570616c6c65745f626162653a3a65717569766f636174696f6e2f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f6672616d652f626162652f7372632f65717569766f636174696f6e2e72735375626d697474656420424142452065717569766f636174696f6e207265706f72742e556d7000000000d8831300130000000105000000000000eb8313000600000000000000f18313001700000000000000000000000000000000000000000000000000000038601300088413000000000000000000188413000600000000000000010000000000000048841300160000000105000000000000eb83130006000000000000005e8413000a00000000000000000000000000000000000000000000000000000038601300688413000000000000000000788413000b000000000000000100000000000000d08413000d0000000000000000000000dd8413000b00000000000000000000000000000000000000000000000000000000000000000000000000000038601300e88413000000000000000000f884130005000000000000000100000000000000208513001a0000000000000000000000eb83130006000000000000000000000000000000000000000000000000000000000000000000000000000000386013003c85130000000000000000004c85130005000000000000000000000052656c6179446973706174636851756575657350617261496456656344657175653c5570776172644d6573736167653e330000000000000001000000690100001b8913005c0000003860130000000000778913005e000000d58913001d0000003860130000000000f28913002a00000052656c61794469737061746368517565756553697a65287533322c207533322933000000000000000100000032010000fb8613005100000038601300000000004c8713003c00000088871300380000003860130000000000c08713005d0000001d8813005e0000007b8813004f0000003860130000000000e48513000b000000ca881300510000004e6565647344697370617463685665633c5061726149643e330000000000000001000000f600000032861300460000003860130000000000e48513000b000000788613004d000000c5861300360000004e6578744469737061746368526f756e645374617274576974680000330000000000000001000000f5000000748513005f000000d3851300110000003860130000000000e48513000b000000ef851300430000002054686973206973207468652070617261207468617420676574732077696c6c20676574206469737061746368656420666972737420647572696e6720746865206e6578742075707761726420646973706174636861626c6520717565756520657865637574696f6e20726f756e642e20496e76617269616e743a202d2049662060536f6d65287061726129602c207468656e20607061726160206d7573742062652070726573656e7420696e20604e656564734469737061746368602e20546865206f726465726564206c697374206f6620605061726149646073207468617420686176652061206052656c6179446973706174636851756575656020656e7472792e202d2054686520736574206f66206974656d732066726f6d207468697320766563746f722073686f756c642062652065786163746c792074686520736574206f6620746865206b65797320696e2020206052656c617944697370617463685175657565736020616e64206052656c61794469737061746368517565756553697a65602e2053697a65206f6620746865206469737061746368207175657565732e204361636865732073697a6573206f66207468652071756575657320696e206052656c617944697370617463685175657565602e204669727374206974656d20696e20746865207475706c652069732074686520636f756e74206f66206d6573736167657320616e64207365636f6e642069732074686520746f74616c206c656e6774682028696e20627974657329206f6620746865206d657373616765207061796c6f6164732e204e6f74652074686174207468697320697320616e20617578696c617279206d617070696e673a206974277320706f737369626c6520746f2074656c6c2074686520627974652073697a6520616e6420746865206e756d626572206f66206d65737361676573206f6e6c79206c6f6f6b696e67206174206052656c61794469737061746368517565756573602e2054686973206d617070696e6720697320736570617261746520746f2061766f69642074686520636f7374206f66206c6f6164696e67207468652077686f6c65206d657373616765207175657565206966206f6e6c792074686520746f74616c2073697a6520616e6420636f756e74206172652072657175697265642e202d2054686520736574206f66206b6579732073686f756c642065786163746c79206d617463682074686520736574206f66206b657973206f66206052656c61794469737061746368517565756573602e20546865206d657373616765732077616974696e6720746f2062652068616e646c6564206279207468652072656c61792d636861696e206f726967696e6174696e672066726f6d2061206365727461696e2070617261636861696e2e204e6f7465207468617420736f6d6520757077617264206d65737361676573206d696768742068617665206265656e20616c72656164792070726f6365737365642062792074686520696e636c7573696f6e206c6f6769632e20452e672e206368616e6e656c206d616e6167656d656e74206d657373616765732e20546865206d65737361676573206172652070726f63657373656420696e204649464f206f726465722e2c8a13005e0000007c0200000e0000002f72757374632f376634616664663032353536303033303662663637343332646137323263376235643263626638322f6c6962726172792f616c6c6f632f7372632f636f6c6c656374696f6e732f7665635f64657175652f6d6f642e72730000a58a13003300000072756e74696d653a3a756d702d73696e6b4661696c656420746f206465636f64652076657273696f6e65642058434d2066726f6d20757077617264206d6573736167652e33000000040000000400000009010000330000000400000004000000160000003300000004000000040000006a010000617373657274696f6e206661696c65643a2073656c662e6361702829203d3d206f6c645f636170202a2032002c8a13005e0000002d0800000d000000748b130063000000710000002e000000748b1300630000009000000034000000748b13006300000069000000340000002f7573722f6c6f63616c2f636172676f2f6769742f636865636b6f7574732f7375627374726174652d376530383433336434633337306132312f316437663665312f7072696d6974697665732f747269652f7372632f6e6f64655f636f6465632e7273000400000000000000000000006a6b13000b00000000000000a48c13000200000000000000000000005e6b13000c00000000000000b48c1300020000000000000000000000516b13000d00000000000000c48c13000100000000000000000000004a6b13000700000000000000cc8c1300010000000000000000000000326b13001800000000000000d48c13000100000000000000000000001a6b13001800000000000000dc8c1300010000000000000000000000756b13001600000000000000e48c13000100000000000000a58e130042000000e78e13002a000000378e1300450000007c8e130029000000fc8d13003b000000cc8d1300300000007f8d13004d000000328d13004d000000ec8c130046000000204120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e20416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2041206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e2043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e000000748b130063000000ba00000009000000748b130063000000b300000009000000748b130063000000d400000011000000748b130063000000d900000009000000000000006b6113000b00000000000000708f13000100000000000000788f1300200000002053656e646572206d75737420626520746865205375646f206163636f756e7400000000ab7713000a00000000000000d08f1300010000000000000000000000987713001300000000000000d88f13000100000000000000f68f130019000000e08f130016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e0077901300070000005c9013001b0000007669130002000000389013002400000040040000010000002f706f6c6b61646f742f72756e74696d652f77657374656e642f7372632f6c69622e727342616420696e70757420646174612070726f766964656420746f2076657273696f6e0000889013000d000000657865637574655f626c6f636b000000a090130010000000696e697469616c697a655f626c6f636bb8901300080000006d65746164617461c89013000f0000006170706c795f65787472696e73696300e09013000e00000066696e616c697a655f626c6f636b0000f890130013000000696e686572656e745f65787472696e7369637300149113000f000000636865636b5f696e686572656e7473002c9113001400000076616c69646174655f7472616e73616374696f6e489113000f0000006f6666636861696e5f776f726b657200609113000a00000076616c696461746f72730000749113001000000076616c696461746f725f67726f7570738c91130012000000617661696c6162696c6974795f636f7265730000a8911300190000007065727369737465645f76616c69646174696f6e5f64617461000000cc91130018000000636865636b5f76616c69646174696f6e5f6f757470757473ec9113001700000073657373696f6e5f696e6465785f666f725f6368696c64000c9213000f00000076616c69646174696f6e5f636f646500249213001a000000686973746f726963616c5f76616c69646174696f6e5f636f64650000489213001e00000063616e6469646174655f70656e64696e675f617661696c6162696c6974790000709213001000000063616e6469646174655f6576656e7473889213000c00000073657373696f6e5f696e666f9c9213000c000000646d715f636f6e74656e7473b09213001e000000696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e74730000d89213001700000076616c69646174696f6e5f636f64655f62795f6861736800f89213000d00000076616c696461746f725f736574000000109313000e00000067656e65726174655f70726f6f660000289313000c0000007665726966795f70726f6f663c931300160000007665726966795f70726f6f665f73746174656c65737300005c931300130000006772616e6470615f617574686f72697469657300789313002d0000007375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963000000b09313001c00000067656e65726174655f6b65795f6f776e6572736869705f70726f6f66d49313000d000000636f6e66696775726174696f6e000000ec9313001300000063757272656e745f65706f63685f737461727400089413000d00000063757272656e745f65706f6368000000209413000a0000006e6578745f65706f63680000349413000b000000617574686f72697469657300489413001500000067656e65726174655f73657373696f6e5f6b65797300000068941300130000006465636f64655f73657373696f6e5f6b65797300849413000d0000006163636f756e745f6e6f6e63650000009c9413000a00000071756572795f696e666f0000b09413001100000071756572795f6665655f64657461696c730041c4a9ce000b0c4f8167f738601300281210000041d0a9ce000b08000000000000000000b5010c72756e74696d655f61706973df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a05000000d2bc9897eed08f1502000000f78b278be53f454c02000000af2c0297a23e6d3d0100000049eaaf1b548a0cb00100000091d5df18b0d2cf5801000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000ab3c0572291feb8b01000000bc9d89904f5b923f0100000037c8bb1350a9a2a80100000000de9e08046e616d6501d59e08db0b00256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3101236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f3102286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f3103376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f3104256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f3105286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f3106216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f3107236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f3208276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31091c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f310a1e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f310b296578745f64656661756c745f6368696c645f73746f726167655f636c6561725f76657273696f6e5f310c276578745f64656661756c745f6368696c645f73746f726167655f6765745f76657273696f6e5f310d2c6578745f64656661756c745f6368696c645f73746f726167655f6e6578745f6b65795f76657273696f6e5f310e276578745f64656661756c745f6368696c645f73746f726167655f7365745f76657273696f6e5f310f206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3110206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31111e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31121d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31132a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31141c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31151d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f3116226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3117236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31182a6578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636c6561725f76657273696f6e5f3119346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f311a286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f311b286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f311c246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f311d226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f311e296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f311f206578745f6f6666636861696e5f74696d657374616d705f76657273696f6e5f31201c6578745f73746f726167655f617070656e645f76657273696f6e5f3121226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31221b6578745f73746f726167655f636c6561725f76657273696f6e5f3123226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3124286578745f73746f726167655f636f6d6d69745f7472616e73616374696f6e5f76657273696f6e5f31251c6578745f73746f726167655f6578697374735f76657273696f6e5f3126196578745f73746f726167655f6765745f76657273696f6e5f31271e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31281a6578745f73746f726167655f726561645f76657273696f6e5f31292a6578745f73746f726167655f726f6c6c6261636b5f7472616e73616374696f6e5f76657273696f6e5f312a1a6578745f73746f726167655f726f6f745f76657273696f6e5f312b196578745f73746f726167655f7365745f76657273696f6e5f312c276578745f73746f726167655f73746172745f7472616e73616374696f6e5f76657273696f6e5f312d196578745f6c6f6767696e675f6c6f675f76657273696f6e5f312e206578745f6f6666636861696e5f696e6465785f7365745f76657273696f6e5f312f1f6578745f6c6f6767696e675f6d61785f6c6576656c5f76657273696f6e5f31301a5f5f727573745f616c6c6f635f6572726f725f68616e646c657231085f5f72675f6f6f6d3233616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68316132336663376337393139363163383308727573745f6f6f6d3434616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68393338303437653131626162613862313529636f72653a3a70616e69636b696e673a3a70616e69633a3a6861326632323964373737613138306339364e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831663931636534613935303464316132372e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a6837396238376337393438636266636165384773705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6d616c6c6f633a3a6834316561656436316531663638343234394573705f696f3a3a616c6c6f6361746f723a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a667265653a3a68633163643130343165386261363332623a25616c6c6f633a3a666d743a3a666f726d61743a3a68666461656432316236316532656133633b23636f72653a3a666d743a3a77726974653a3a68663666656333333261393663313035313c36636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68336661353832393431613334623136623d2e636f72653a3a726573756c743a3a756e777261705f6661696c65643a3a68613932366532323133363764636635623e3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68643335626539633533613639643831643f3b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6836376430616133373137383831636439403a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6861316164373731653836663531616134413e616c6c6f633a3a7665633a3a5665633c542c413e3a3a696e736572743a3a6173736572745f6661696c65643a3a6864333933363035636438306263386463424e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a6834396531323832636435613065643438432d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a6830646665313533656230656634353661443e616c6c6f633a3a7665633a3a5665633c542c413e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68373363636363613064333038633236384539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6834613236383063656665386537316239462f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68303735326232333462636664646132634711727573745f626567696e5f756e77696e6448313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68643534626266353930323938636663324935636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68643563353431393765363161346537634a43636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68643961363837663037383137313065634b3f636f72653a3a736c6963653a3a696e6465783a3a736c6963655f656e645f696e6465785f6c656e5f6661696c3a3a68393934653062346330613064383239634c2c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a68333631613138373166363066373334314d2e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a68393732653963626566313938646639354e323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68333633396132383331666339323534344f4a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683235663734353437363661303733383850323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68643331353933353166326637383436325147636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68303436383663636533376539333435345239636f72653a3a756e69636f64653a3a7072696e7461626c653a3a69735f7072696e7461626c653a3a6865353666643732336132336232386261534c636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a68373266666361613065336661393434652e38325441636f72653a3a736c6963653a3a696e6465783a3a736c6963655f73746172745f696e6465785f6c656e5f6661696c3a3a6864353736306364313833663261343761553d636f72653a3a736c6963653a3a696e6465783a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68366131303366663462303430616430375637636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65645f696e6e65723a3a683231613164363933323232353164373057303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683039653132346636373731383036626558443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683834306433316137636462306561393659453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68393564633139343134613238333164315a483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68636332363538656262633037323739335b2e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a68366163623636653531386165626134375c323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68306461623232646631333233323062665d323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68326635643239616163656564356566385e533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68633139343336313739636135373733645f3a636f72653a3a666d743a3a6275696c646572733a3a44656275675374727563743a3a6669656c643a3a6862303831666538386166393638646438602f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a6833396462356665373835333834353934612e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a6830303639633361313365343761646466623a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6839616534363963663864623664623039633b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6861396664313364313438653436366266643a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68626566313632333631393334346366326539636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68313864326366353136306139653436386637636f72653a3a666d743a3a6275696c646572733a3a44656275675365743a3a656e7472793a3a68343162313762623034663333333134616731636f72653a3a666d743a3a6e756d3a3a70617273655f7536345f696e746f3a3a683761343762643262353735616563393768343c626f6f6c20617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683332303537303835313661393961366169313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68353834663931303238353465643236336a4d636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f722075383e3a3a666d743a3a68663366326263373830373134373831396b47636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a42696e61727920666f722069383e3a3a666d743a3a68383333306134303636303134613037626c3e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68346361316166346136353631376533306d5a637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a746f5f62797465733a3a68643435326262333731303535366339336e9201637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20737562746c653a3a436f6e7374616e7454696d65457120666f7220637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a63745f65713a3a68623534616334373565653665353862386f24737562746c653a3a626c61636b5f626f783a3a68373830353164646562616438666230627057637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a706f77326b3a3a6834316230356539303461363133643634717e637572766532353531395f64616c656b3a3a6669656c643a3a3c696d706c20637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313e3a3a737172745f726174696f5f693a3a6833363236663163366330353538396635725c637572766532353531395f64616c656b3a3a6261636b656e643a3a73657269616c3a3a7536343a3a6669656c643a3a4669656c64456c656d656e7435313a3a66726f6d5f62797465733a3a6832303563343635373538303061623234735a637572766532353531395f64616c656b3a3a72697374726574746f3a3a52697374726574746f506f696e743a3a656c6c696761746f725f72697374726574746f5f666c61766f723a3a68316265353936613834373931373236337449637572766532353531395f64616c656b3a3a7363616c61723a3a5363616c61723a3a66726f6d5f63616e6f6e6963616c5f62797465733a3a683665383630666363353961356439366275303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862623338313237663464613731643133767b6672616d655f6d657461646174613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f6d657461646174613a3a53746f726167654861736865723e3a3a656e636f64655f746f3a3a6831303534626639353531363935633839774e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683765356232613162383237343138623278417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6831333564616331666332626162626331796c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68326437646666303162376135326238657a417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68313864313033313035333139353338347b417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68366335323036356130636563373061387c417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68383130366430653563646666303761617d417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68623538636634306263363464636432637e417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a68393335356362313935346266623438377f417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a686131303237636233356537646334333380015c3c6672616d655f737570706f72743a3a7472616974733a3a6d657461646174613a3a50616c6c657456657273696f6e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683937343035653764643262663863383581014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683539303130383161663464643331383182012e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68353465623133623136313438396635648301633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a68373134356535393862313538643766378401543c6672616d655f73797374656d3a3a6c696d6974733a3a56616c69646174696f6e4572726f727320617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686138313465626238326532376133653485014c6672616d655f73797374656d3a3a6c696d6974733a3a426c6f636b576569676874734275696c6465723a3a6275696c645f6f725f70616e69633a3a68663930623762366331633736633833638601206b656363616b3a3a66313630303a3a68643238613635613537366663353736358701383c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68636431616263613366653834656265368801343c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68343831613662623561646632303639658901363c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a666c7573683a3a68323333636365383637666235343066668a0131636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a68343939666664666363626336633065378b01366d65726c696e3a3a7374726f62653a3a5374726f62653132383a3a626567696e5f6f703a3a68636532363733623735366638346135658c01366d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6e65773a3a68373264313431306161333034666331318d01416d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f6d6573736167653a3a68373332386366653936376337663234338e013d6d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a617070656e645f7536343a3a68636235373061383266386538373166378f01426d65726c696e3a3a7472616e7363726970743a3a5472616e7363726970743a3a6368616c6c656e67655f62797465733a3a68353932363035366235393565623839369001303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68336239626164666232646536656434339101303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68633662366630303337623933626465659201303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68323330383465386339393538393364649301643c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a466561736962696c6974794572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68636565326565613963623230343463319401613c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a456c656374696f6e4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68663933383639636137653161613263329501683c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a4d696e65724572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68393165376637616133393364623438639601573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68353266313836306664343166326431349701633c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e3e3a3a66726f6d5f697465723a3a683930383835393130333337356133323598014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a686132363261356636323561373163353199014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68333130323139373139353366333266399a012e616c6c6f633a3a7261775f7665633a3a66696e6973685f67726f773a3a68323365653363363466333666323131329b014170616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a7072756e653a3a68363934373965326563366461613939319c01503c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68306638396364353332393932663163659d014e3c7061726974795f7363616c655f636f6465633a3a6572726f723a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68353035623636616432666631663365329e0146706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733a3a686173683a3a68323536623530316431333237646532399f014973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235363a3a6831316665666461633835646535633334a00146706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f745f72616e67653a3a536c6f7452616e67653a3a6c656e3a3a6864636530343362666433313033386634a1013d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b576569676874733a3a6765743a3a6863616462383565643131336233353762a201323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6832303131333935363731333339653036a301333c265420617320636f72653a3a666d743a3a4c6f7765724865783e3a3a666d743a3a6861326435346238363665613538643835a401333c265420617320636f72653a3a666d743a3a4c6f7765724865783e3a3a666d743a3a6838663763303864333038643537373865a501453c7072696d69746976655f74797065733a3a4832353620617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6861326665393163303461386334663238a601457363686e6f72726b656c3a3a706f696e74733a3a52697374726574746f426f74683a3a66726f6d5f636f6d707265737365643a3a6865316436636338316639656336303036a7014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6835653737303665363933323839343032a8014673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a6833366566336135616165386366666561a9013a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6864393736306433646363396439636339aa013773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6834366266383863353333333631616663ab014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6837386536383063356532346262383936ac014473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6834653661386437653437633631656630ad013773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6838303930333663393939386636616135ae013d3c5420617320636f72653a3a636f6e766572743a3a547279496e746f3c553e3e3a3a7472795f696e746f3a3a6863376561323730363539303563313263af013d73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c3a3a7371756172653a3a6832363630346539303961363465303731b0015a3c616c6c6f633a3a7665633a3a5665633c753132383e2061732073705f61726974686d657469633a3a4e6f726d616c697a61626c653c753132383e3e3a3a6e6f726d616c697a653a3a6838656636306161633731393235383030b1014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830353230666134313237376262386565b2014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6835303237613261353632666362626235b301653c73705f61726974686d657469633a3a66697865645f706f696e743a3a46697865645531323820617320636f72653a3a6f70733a3a61726974683a3a4469763e3a3a6469763a3a7b7b636c6f737572657d7d3a3a6839613132346233376465343934646333b4014a3c73705f636f72653a3a6f6666636861696e3a3a54696d657374616d7020617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834353337333831316134646336383663b501303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861663939333834613434613339616434b601413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839313531656265323334616463656233b701303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862633336393033303734646135633366b8017773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a46726f6d46464956616c756520666f7220543e3a3a66726f6d5f6666695f76616c75653a3a6866393730663264316334313835326231b901543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837383337313266376232303334623233ba017773705f72756e74696d655f696e746572666163653a3a706173735f62793a3a3c696d706c2073705f72756e74696d655f696e746572666163653a3a7761736d3a3a496e746f46464956616c756520666f7220543e3a3a696e746f5f6666695f76616c75653a3a6862316232343133636265313632376261bb014e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f67656e65726174653a3a6839336461616465656465323136393036bc014c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f7665726966793a3a6838616339336336643038666237343137bd015173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a66696e6973685f62617463685f7665726966793a3a6862626161323239393061383065653631be016073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6834666133326536313065616365303265bf014e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f67656e65726174653a3a6838363530353735353563613137323931c0015173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6836316365333437393135383133666134c1016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834393833326465616632343334633837c2014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6861623964383863663562393737343366c3014a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6862366561636462613831383036336431c4014c73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7665726966793a3a6837316539663531356661343764656166c5015073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f62617463685f7665726966793a3a6831333961303231386139626165663766c6015273705f696f3a3a64656661756c745f6368696c645f73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561723a3a6831306239383661663935366165386662c7015073705f696f3a3a64656661756c745f6368696c645f73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6765743a3a6863306638366534326433643262643835c8015573705f696f3a3a64656661756c745f6368696c645f73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6578745f6b65793a3a6864353262363931313266666233373630c9015073705f696f3a3a64656661756c745f6368696c645f73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6839626362383466386334363064386565ca014973705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3132383a3a6834396335646365396465633032656439cb014773705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f3132383a3a6834393965393062643237653133333562cc014673705f696f3a3a68617368696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74776f785f36343a3a6836316435353266323461333738613538cd01303c282920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835396239316566343034383531633661ce01323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6838653664373031666139333162323339cf015373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6839613036373439353037656634653237d0014573705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f6865783a3a6832343032353033316433333332393234d1014673705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7072696e745f757466383a3a6864356464363966643431363531316534d2014b73705f696f3a3a6d6973633a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72756e74696d655f76657273696f6e3a3a6832363332336164396364633662316664d3012673705f696f3a3a6c6f6767696e673a3a6c6f673a3a6832353565626635343735376532373463d4014c73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a69735f76616c696461746f723a3a6838396138326538356165393961373161d5015373705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f636c6561723a3a6861646332323336363636663433666532d6015d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365743a3a6863326161363133356365623635383164d7015173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f6765743a3a6835656666613037346433373139663338d8015173705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f63616c5f73746f726167655f7365743a3a6831646163316639636339356466346230d9014d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6834343936323862663838666635663130da014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6833306334303637383533343561336433db014b73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a72616e646f6d5f736565643a3a6831343863383039336135323761336232dc015273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6864376465326266373730303161366165dd014973705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a74696d657374616d703a3a6837356439393131363265376132353833de014573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a617070656e643a3a6836623533393264353739343433316633df014b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6368616e6765735f726f6f743a3a6861373537626330383639366439373132e0014473705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561723a3a6863363766363365326166306330643861e1014b73705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636c6561725f7072656669783a3a6839323136366435343063326336353361e2015173705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a636f6d6d69745f7472616e73616374696f6e3a3a6830666239643239353961343036663731e3014573705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6578697374733a3a6834653139313631636566646363653065e4014273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6765743a3a6834383861383035303831313832386633e5014773705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6578745f6b65793a3a6839393061373939633265386437383037e6014373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a6865646261393839613662663762353637e7015373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6c6c6261636b5f7472616e73616374696f6e3a3a6835326633306264663531313132303934e8014373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726f6f743a3a6834396136616165306136616337396533e9014273705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7365743a3a6864333335326531623734623436666261ea015073705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a73746172745f7472616e73616374696f6e3a3a6836323838373536333634313839313666eb015373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6866633730326237303935336662346565ec014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831633133396161613962663865346434ed01303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834316339363136633266393634393538ee01533c73705f72756e74696d653a3a72756e74696d655f6c6f676765723a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a6833656264326234623765656165363333ef014f3c73705f72756e74696d653a3a72756e74696d655f6c6f676765723a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a6837373538326231373861316531316631f0013a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6833656435373733623736333339336231f1013a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6835343832656465346132623031393061f201473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832333337643465316639333363313361f301303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862666233323261366235333665356633f401303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862646462336134323264626633633834f501303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832626433626435333466326233366138f6013f73705f747269653a3a6e6f64655f6865616465723a3a656e636f64655f73697a655f616e645f7072656669783a3a6862303034303035373031666432386163f7015c747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a64726f705f6c617374733a3a6863613663383837376334333962353335f80172747269655f64623a3a6e6962626c653a3a6e6962626c657665633a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c655665633e3a3a617070656e645f6f7074696f6e616c5f736c6963655f616e645f6e6962626c653a3a6833333131326237353366326163613630f90135736d616c6c7665633a3a536d616c6c5665633c413e3a3a7472795f726573657276653a3a6830653236343765623536356639393066fa0165747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a746f5f73746f7265645f72616e67653a3a6865306634626336623566376435643732fb01363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6836336438376430383162303030633261fc0160747269655f64623a3a6e6962626c653a3a6e6962626c65736c6963653a3a3c696d706c20747269655f64623a3a6e6962626c653a3a4e6962626c65536c6963653e3a3a72696768745f697465723a3a6866633261323536643136333534383365fd01417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6830393639306264323530346565613964fe016678636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a6465636f64653a3a6864636563346531373566313634656637ff014e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6861633361613462373339303436663836800255636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e373634318102417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a683039626661336662303133666663313282026678636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a6465636f64653a3a686163346336366466366662636266656183024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834386535663733383463373834343932840242636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c28293e3e3a3a68343332643937653239616663303733632e373634358502417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68313131363136613334306131373931368602483c5b543b204e5d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686137343635393762373764363562363987024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68346133366262356566366461646332618802417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68323139306639363339373432383661668902543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68656163346661623264626639346436618a028a0178636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a6465636f64653a3a68353030343064643966396464646162618b0253636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a6d756c74695f61737365743a3a4d756c746941737365743e3a3a68323333653736313532316332393139382e31333635378c026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68656535663535643363643439636664318d0253636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a68333034376337393933343331323231318e026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68353832383762333230623563383666388f02810178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4d756c746941737365743e3a3a6465636f64653a3a68626466396666333630313339633466629002417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a686537656630616566393666656565643091024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6863666435386633393636323461393666920246636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a6f726465723a3a4f726465723c28293e3e3a3a68656132646339393435323638616633369302417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a683239396530613166333139346431653794027177657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a683936633664326230303630386431346195024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830626435663063646536383535323736960247636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e373634349702417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68326131363965383562623239383764659802543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686566653062613434613166316137656199028a0178636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a6465636f64653a3a68396530346632323234383961376234389a026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68373734633562383263383630376131369b02810178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4d756c746941737365743e3a3a6465636f64653a3a68613863613733303461316130353961389c02417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68343038633734386261353464306639339d02417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a68353939616638636334663337393336339e024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68303362356166623734383130336534669f02417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6835656561656334306666663734613533a00259636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a6f726465723a3a4f726465723c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a6832636461616535366263396536303361a102417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6863623562316436643839663262386331a2027177657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6865323233363533636361333837323138a302417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6865333030663638323237656161323530a402417061726974795f7363616c655f636f6465633a3a636f6465633a3a6465636f64655f7665635f776974685f6c656e3a3a6866343864313735633731646438363332a5026678636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a6465636f64653a3a6861303031363861643330653935356663a6026678636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a6465636f64653a3a6861633763653364643832353461343463a702417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6830633831316666646362626536313632a802417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6831306433653033663438653330643533a902417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6832353433316164653966663865373466aa02417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6833636562376133376464383866353261ab02463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6832636330366338643330613066343061ac02437061726974795f7363616c655f636f6465633a3a636f6465633a3a636f6d706163745f656e636f64655f6c656e5f746f3a3a6838653961643031353334646563643561ad02417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6834633061373231323635353533373532ae02417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6835353839633265666336323433393638af02417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6835373466346633633036323735303932b002417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6836323364366530646531316639373864b102417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6838376638323632336266346434633237b202417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6839306138643762353438313434386661b302a70170616c6c65745f7363686564756c65723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7363686564756c65723a3a5363686564756c656456323c43616c6c2c426c6f636b4e756d6265722c50616c6c6574734f726967696e2c4163636f756e7449643e3e3a3a656e636f64655f746f3a3a6839643239633934633038376233373332b402417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6839636366383539633065386638336633b5023f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6833663639656131343231663133333939b602417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6864306164356235373061306464633339b702417061726974795f7363616c655f636f6465633a3a636f6465633a3a656e636f64655f736c6963655f6e6f5f6c656e3a3a6866663364306161333862626639363863b802437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6839313631613038633462643265666631b902483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6836323264376362346265656663356135ba02483c5b543b204e5d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835616332356231323938376237356636bb02483c5b543b204e5d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837623638346538636334396161633839bc02483c5b543b204e5d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864356265656436396636656262343737bd025c3c77657374656e645f72756e74696d653a3a53657373696f6e4b6579732061732073705f72756e74696d653a3a7472616974733a3a4f70617175654b6579733e3a3a6765745f7261773a3a6866643031613639356633373139393336be027d3c542061732070616c6c65745f7374616b696e673a3a53657373696f6e496e746572666163653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a64697361626c655f76616c696461746f723a3a6833306563303231633664303837653864bf02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833663039383964393632636130633138c002386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830343335633334386638663436306433c1023970616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a6835383763363161356236336639336532c2023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6861616130636463393633613161323732c3026d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a617070656e643a3a6861353435366662623537333464633331c402723c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a696e746f5f61737369676e6d656e743a3a6862393165333465393539623137613264c5024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831616538383134326339316461663765c6026b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830633164643734343764346363656239c7024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6865353261633030656665316539383734c802683c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6839333663393134333938623264383261c9024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6832636538323964396463343538666637ca027f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a6865333663323031383839353461643664cb024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830316466346531636466393332373033cc024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834353834396361363839346238663634cd024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834353939653735323263336433613135ce024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831363235663462303364633666653530cf024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834636138633237363062343561333061d0024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6861623639653364613130623833623964d1024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6839383264346365643234363833663732d2024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831303331386332313935363736353839d3024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6838646432343136306231646630653665d4024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6832613031313332313831613364313238d5024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6839363133376162613663666632663535d6024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6837323034626465633361363535336631d7024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6837666534333835616563633039333363d8024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6862656265643963316330653162623238d9027477657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722077657374656e645f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a6866656336643831313735333664616162da025c3c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6834663333383037346366633262356164db02713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831633737633663363062303864643833dc02940173705f72756e74696d653a3a67656e657269633a3a6469676573743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573743c486173683e3e3a3a656e636f64655f746f3a3a6864386533626365323430646139373566dd02713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6836653930386637656338393739396635de02a60173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a656e636f64655f746f3a3a6837613732633865303961666337646564df02723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6836393031646163393634343131663134e002463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6865366134366535366533393039363734e1023f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6830356138333233303438653035393230e2027b77657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722077657374656e645f72756e74696d653a3a53657373696f6e4b6579733e3a3a656e636f64655f746f3a3a6838613561333037303137373431616565e3028e0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a656e636f64655f746f3a3a6866303963333264643039353531313534e4027c70616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a656e636f64655f746f3a3a6838306638393736316362356430326537e502820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6837656133336534616339363434663438e602a80170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a526177536f6c7574696f6e3c433e3e3a3a656e636f64655f746f3a3a6862353538326366326233356538653865e70284017061726974795f7363616c655f636f6465633a3a6269745f7665633a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206269747665633a3a736c6963653a3a426974536c6963653c4f2c543e3e3a3a656e636f64655f746f3a3a6839336330393861373633366262643139e8029c01706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a436f6d6d697474656443616e646964617465526563656970743c483e3e3a3a656e636f64655f746f3a3a6836666330653765613162663838396434e9026978636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a656e636f64655f746f3a3a6834376434373431383064386264333735ea025c3c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6863653465346166306435653064366334eb028d0178636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e3e3a3a656e636f64655f746f3a3a6837333661623664383866666638663764ec02840178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4d756c746941737365743e3a3a656e636f64655f746f3a3a6838383363396364366663636539316238ed026978636d3a3a76303a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a58636d3c43616c6c3e3e3a3a656e636f64655f746f3a3a6831353762666436613034383033353661ee0237636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743a3a63616c6c5f6d75743a3a6863616230383361353366323961326663ef02753c77657374656e645f72756e74696d653a3a4f726967696e20617320636f72653a3a636f6e766572743a3a46726f6d3c77657374656e645f72756e74696d653a3a4f726967696e43616c6c65723e3e3a3a66726f6d3a3a7b7b636c6f737572657d7d3a3a6839643662666635303738313264633062f00248636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6839303135306564386331333065653737f1027f3c77657374656e645f72756e74696d653a3a50726f787954797065206173206672616d655f737570706f72743a3a7472616974733a3a66696c7465723a3a496e7374616e636546696c7465723c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a66696c7465723a3a6862333438303536636165306638633566f2027877657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a6864316466366339653537366435303333f302683c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838316530653737616332636539366163f4026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839653163363961353132363236343063f502683c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e3136206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863356335363763326134363063663934f6026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7531363e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861303266343535373231623330366234f702713c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a756e697175655f746172676574733a3a6865353162373435353432646366646362f80246616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a7365743a3a42547265655365743c543e3a3a696e736572743a3a6862323632313961653238326535346661f902613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6837306235313862653635303861393564fa024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6835363731336238303135316532623366fb029a033c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e313620617320636f72653a3a636f6e766572743a3a54727946726f6d3c265b73705f6e706f735f656c656374696f6e733a3a61737369676e6d656e74733a3a496e64657841737369676e6d656e743c3c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a566f7465722c3c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a5461726765742c3c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31362061732073705f6e706f735f656c656374696f6e733a3a436f6d70616374536f6c7574696f6e3e3a3a41636375726163793e5d3e3e3a3a7472795f66726f6d3a3a6865383632386364383730656662646161fc0253636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e31363e3a3a6835393531353134373632316434336130fd024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6833373964336137373338643332363263fe024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6833336133386533353065633233316263ff024e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683765393633323838643364633531376280034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683265653663303737663637666236356581034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683434663036303738663332393961323682034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683535306335663266366263646563626483034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683131373534326234346531363833323584034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683037613934303432323137373562363985034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683439636535356231626463303438396586034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683035323262656630383639623337313987034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683462326663396334326631366435363288034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683333356465303662323234313365363389034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68333335303833633864316338656161368a0348636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a68383738346234613539666533396561328b033d636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c28293e3e3a3a68343332643937653239616663303733638c037577657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722077657374656e645f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a68356530373232643864396461656634308d037373705f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a656e636f64655f746f3a3a68663062623133363162383137303132398e037f7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202851302c5230293e3a3a656e636f64655f746f3a3a68633035366532383730626639383730658f037578636d3a3a76303a3a7472616974733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a7472616974733a3a4572726f723e3a3a656e636f64655f746f3a3a683164636463356434613761663235653590037277657374656e645f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722077657374656e645f72756e74696d653a3a4576656e743e3a3a6465636f64653a3a686636303966613930333036613536646491037073705f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a6465636f64653a3a68386333336231623264383364646633669203860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a683933656239306464663434363161313493034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a686233313864663262396439343861303694039301706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e64696461746544657363726970746f723c483e3e3a3a6465636f64653a3a686437326635373234653431666461363895037278636d3a3a76303a3a7472616974733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a7472616974733a3a4572726f723e3a3a6465636f64653a3a683330363537646263363237356565653596034977657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a683838313330393564643939616664623797034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a683833353230613339616362363537633098034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a683235393466326334383336343533353399034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a68613237366436386664303862343937319a034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a68613339633633383138383834343236389b034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a68653931313138336162383565383632399c034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a68336461316432306235646364323739369d034d77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a68353466643665363936323436613932659e034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7574696c6974793a3a68363261303762346433386438383661399f034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6964656e746974793a3a6835383830373532616563373539663031a0034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7265636f766572793a3a6861326166666431653532303564323137a1034b77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f76657374696e673a3a6865653333653632303662346131336633a2034d77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7363686564756c65723a3a6865353864663037613661396561396164a3034877657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7375646f3a3a6830653263373739326134323130613063a4034977657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f70726f78793a3a6865613136613536333765643938363430a5034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d756c74697369673a3a6839323763633136353835336637363130a6036177657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a6861343434616162623533323937313932a7035177657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70617261636861696e735f696e636c7573696f6e3a3a6833613739643663616461313639376239a8034d77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70617261636861696e735f70617261733a3a6834333264373535643665343563346637a9034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70617261636861696e735f68726d703a3a6830303034326637616561616239316639aa034c77657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70617261735f7265676973747261723a3a6838613333363539353864313635656335ab034277657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f736c6f74733a3a6839363138363065303163643534646431ac034577657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f61756374696f6e733a3a6834613436306434666161633733366132ad034677657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f63726f77646c6f616e3a3a6830343062343938386563656638373539ae034777657374656e645f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f78636d3a3a6865316563306235376336356436643637af03f301636f72653a3a7074723a3a64726f705f696e5f706c6163653c3c77657374656e645f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a4f726967696e54726169743e3a3a6164645f66696c7465723c70616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c77657374656e645f72756e74696d653a3a52756e74696d653e3e3a3a646f5f70726f78793a3a7b7b636c6f737572657d7d3e3a3a7b7b636c6f737572657d7d3e3a3a6865313032343536363563346233656662b003753c77657374656e645f72756e74696d653a3a4f726967696e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a4f726967696e54726169743e3a3a6164645f66696c7465723a3a7b7b636c6f737572657d7d3a3a6865363031643765626238623532373034b10348636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63657b7b767461626c652e7368696d7d7d3a3a6837666361353138343335346466383162b203683c77657374656e645f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6830633861626534313930386264336165b303463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863373730643831313463383234323734b4035e3c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68323064333661636234393334643239382e3133323836b5037a3c78636d5f6275696c6465723a3a7765696768743a3a4669786564576569676874426f756e64733c542c433e2061732078636d5f6578656375746f723a3a7472616974733a3a7765696768743a3a576569676874426f756e64733c433e3e3a3a7368616c6c6f773a3a6835356437356634636662383938373561b603773c78636d5f6275696c6465723a3a7765696768743a3a4669786564576569676874426f756e64733c542c433e2061732078636d5f6578656375746f723a3a7472616974733a3a7765696768743a3a576569676874426f756e64733c433e3e3a3a646565703a3a6831636137326365613737306565343666b70355636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e35303037b803663c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a426c6f636b57656967687473206173206672616d655f737570706f72743a3a7472616974733a3a6d6973633a3a4765743c493e3e3a3a6765743a3a6839393330653963353439373161333463b903733c70616c6c65745f6f6666656e6365733a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6834393765343632343030356239653739ba037e3c70616c6c65745f617574686f726974795f646973636f766572793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6836366232643564353439303235363036bb037f3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265643a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6863346261386234346361646435376435bc0382013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6864633836623632393064373264366634bd0382013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6832623762336564663932653064386332be037c3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6834653934303238616538666663396562bf037c3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6832373430343533643732633666306535c00385013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6835353465356434376435636662653433c10342636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a6831623937633730373930383563616461c20355636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f7072696d6974697665733a3a76313a3a4261636b656443616e6469646174653e3a3a6835373237326463643832343634623132c30350636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a6862353131666231346630316534336163c4037d3c77657374656e645f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6834316234666661623863326163626232c5034f6672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6863653439623565316232646639373539c603443c78636d3a3a76303a3a58636d3c43616c6c3e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6861666332313265326534636135393834c703386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835356130343238646137343566623737c80356706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e3a3a71756575655f646f776e776172645f6d6573736167653a3a6864383361363139633964333834656133c9035e6672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465706f7369745f6576656e745f696e64657865643a3a6834383938356230613739306664303162ca039c013c78636d5f6578656375746f723a3a58636d4578656375746f723c436f6e6669673e2061732078636d3a3a76303a3a7472616974733a3a4578656375746558636d3c3c436f6e6669672061732078636d5f6578656375746f723a3a636f6e6669673a3a436f6e6669673e3a3a43616c6c3e3e3a3a657865637574655f78636d5f696e5f6372656469743a3a6834336465366531646237656332363935cb032c6672616d655f73797374656d3a3a656e737572655f726f6f743a3a6864313536613238663463383931306438cc032e6672616d655f73797374656d3a3a656e737572655f7369676e65643a3a6836333332303533373838303136613561cd03b301706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6837643330643865623838376162633561ce03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861346531616631626239353335643236cf035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838316235633739653036663166623739d0035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839333762356531313761666162383836d103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861396435353064666566313061383235d2035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861376132616133373639663635366335d303386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831613664353336643638396435623539d403d40170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a72657365727661626c653a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726573657276653a3a6832363562383862363664346464386439d503c901706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a46756e64496e666f3c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265722c4c65617365506572696f643e3e3a3a656e636f64655f746f3a3a6839313561393534343732336632326432d60382013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7472616974733a3a5265676973747261723e3a3a6170706c795f6c6f636b3a3a6832653536643038343830373432343536d703746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6831343464383763646638663535666162d803573c49642061732073705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3c543e3e3a3a696e746f5f7375625f6163636f756e743a3a6835353834396438626237313035643636d903773c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7472616974733a3a4c65617365723e3a3a6465706f7369745f68656c643a3a6837383133333963353031623261616236da037f73705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a7573696e675f656e636f6465643a3a6864383936663238323063336133613630db03553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a6838386232383635333130643463666538dc03bf0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7472616e736665723a3a6835646131323530386138623662396635dd037f73705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a7573696e675f656e636f6465643a3a6863366539303539313535326464666162de03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837313939616635633432653765613434df035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834383665376361633461376263313031e003386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838393735643066303661643932373563e1037f73705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a7573696e675f656e636f6465643a3a6864346464316664333734653038653335e2038201706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a3c696d706c20706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a69645f66726f6d5f696e6465783a3a6862326537643131346663323437623063e30339636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6865376438346463653061303833346236e403773c6672616d655f737570706f72743a3a73746f726167653a3a4368696c64547269655072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6865326338666264653932313236393832e503d60170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a72657365727661626c653a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a756e726573657276653a3a6838323430313533636535636433623165e603386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831333337383939303737353334366363e7036d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a617070656e643a3a6864396666326633613435613866663961e8037d706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a3c696d706c20706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3e3a3a68616e646c655f6269643a3a6832376237363866353334343233326535e9037d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a647261696e3a3a6863396238326166613030393135663437ea036e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839346430666465383832666330356162eb03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6866336233623662633636346663313631ec0348706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f706172615f696e697469616c697a653a3a6836643239633765306136313864323936ed0345706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f706172615f636c65616e75703a3a6862333461393464323665613030646434ee034b706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f706172617468726561645f757067726164653a3a6861363962316131633339643463336264ef034c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c655f70617261636861696e5f646f776e67726164653a3a6837366365323264666431653938613765f00352706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a696e69745f6f70656e5f6368616e6e656c3a3a6864613035303864633664356434616431f10354706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a6163636570745f6f70656e5f6368616e6e656c3a3a6865366132643166376362356331326264f203743c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7472616974733a3a4c65617365723e3a3a6c656173655f6f75743a3a6835376331363032396638393334363864f3035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831646333323433373239386332663535f403386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838613037613432633839643636393061f50348616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6833386364333662633865316135306332f6034e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6835303765363833633466623365323139f70353706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a646f5f72656769737465723a3a6834343266326561323966666434306161f80361706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a656e737572655f726f6f745f706172615f6f725f6f776e65723a3a6835376664303732363765653932356533f9035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836343130346634333330353062623139fa03723c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e20617320706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a7472616974733a3a4f6e537761703e3a3a6f6e5f737761703a3a6865633038316636353265663434646631fb03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830336339333166373763366161636264fc03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863633531336631626239313965303565fd035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833653961323366373439393631353565fe03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864666337386263646231613734396336ff035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683635633935653664653032653963306580045a706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a636c65616e5f68726d705f61667465725f6f7574676f696e673a3a6835646232306666373461353162353037810463706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a70726f636573735f68726d705f6f70656e5f6368616e6e656c5f72657175657374733a3a6832643466396239333034633335613436820464706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a70726f636573735f68726d705f636c6f73655f6368616e6e656c5f72657175657374733a3a68313732323134616635323734616435628304363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a683635363035353764633565643563336684045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68376331356165623930316361396666358504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861336363373936333263323661336636860453706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a696e6372656173655f636f64655f7265663a3a68646332333265373333336361313937328704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6834666232393632306639633034623865880450706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a6e6f74655f706173745f636f64653a3a683131646565646635623038633761373589045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68363532386335373238623033646331398a04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68356433633965366633393963393165638b0457706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a7363686564756c655f636f64655f757067726164653a3a68666265613061386265343239336533358c044f706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a6e6f74655f6e65775f686561643a3a68373162303231646330643332643638368d045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68333030356633636238303762633563668e04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68326165623562623530356631396430378f0450706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261735f696e686572656e743a3a4d6f64756c653c543e3a3a656e7465723a3a683630373138326232376430653461613490045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a686232613363643362643135313565353891045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a686330656364353163653437616330386592045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a686264646361356330373938663839313293045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a686266643531303366393535366436623294045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a683231666163613039363463663131623795045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a683837393834663864313062646533393396045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a683265643564616539353039373631363697045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a683263343363303430613365633163353198045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a683932376230396430326137653161326499045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68303230613235333834633336663862329a045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68613831306463303563356564346563389b045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68316164633935363534306333336237399c045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68363730633562656634653465346331329d045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68383565383166666666313961366231389e045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a68653230623739393561663337363364309f045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6833613531626130396431376533306465a0045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6862353162613863663734356235653065a1045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6861363238656666626330666666373036a2045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6834346433333537646531656362313261a3045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6862383166303464393931356239623162a4045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6837306235376238323438336339323937a5045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6836313263663430386336653462383135a6045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6832613334616231633832623561363835a7045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6835363934393030303362653231363961a8045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6831663063346363343432393236393731a9045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6839346438323463383239303364386363aa045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6839366439373732633334666138616330ab045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6865376332656634363932613735366230ac045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6862303037393636633139336136356365ad045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6832373565303937346335346661383433ae045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6838333662626563313139306239636363af045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6831626465323436646336336265303161b0045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6865363038353935643731356361626463b1045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6835303866626531356631306430353330b2045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6830653237313435393139386461333766b3045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6838333138353331343034616236623232b4045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6836646664656232613631613039663961b5045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6864313531336466663331316362653262b6045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6838363034623664373136383338383231b7045e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a7570646174655f636f6e6669675f6d656d6265723a3a6863316166336463376631663339376137b8049f0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a756e7369676e65645f7072655f64697370617463685f636865636b733a3a6866356334643733623536333065386634b904303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837626465626239353065663133633532ba048a0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a666561736962696c6974795f636865636b3a3a6865323236353534313935303662313062bb0447636f72653a3a61727261793a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72205b543b204e5d3e3a3a666d743a3a6839353239313363666531316539303839bc044d636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207533323e3a3a666d743a3a68343564363064623363623763333439332e3130353535bd04463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6835323662393763373866643137313638be0480013c70616c6c65745f6d756c74697369673a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6832613966373336666463653063383261bf0485013c70616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6836346337306230656566393939386466c00484013c70616c6c65745f7375646f3a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6863323537323436386662633233626231c10448636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e3132333330c2045c70616c6c65745f7363686564756c65723a3a3c696d706c2070616c6c65745f7363686564756c65723a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f7363686564756c653a3a6831643331383832623832623765643537c3045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864663733373664336561336261376564c404386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863356139626230356164323134616530c50447636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e33383238c604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865346437343030323061393235356239c7045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865613466613265303734376232626335c8046270616c6c65745f7363686564756c65723a3a3c696d706c2070616c6c65745f7363686564756c65723a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f7363686564756c655f6e616d65643a3a6837656165613265313338626338336337c9045870616c6c65745f76657374696e673a3a3c696d706c2070616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3e3a3a7570646174655f6c6f636b3a3a6862316262633530653837643537323537ca045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864323332363638393433323131333564cb047e6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a696e736572743a3a6831326237663363313734643663323165cc0488013c70616c6c65745f7265636f766572793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6834656437623762653734656262643739cd0488013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6836363463653264643234363261363561ce0447636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e34353832cf0447636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e33393439d0043b6672616d655f737570706f72743a3a73746f726167653a3a776974685f7472616e73616374696f6e3a3a6834313263613032643662363538383830d104706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6861323036636463353839376565636361d2046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6765743a3a6864303531383630306530653037336365d3044470616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6835393533383031356531363836323034d4045970616c6c65745f617574686f72736869703a3a3c696d706c2070616c6c65745f617574686f72736869703a3a70616c6c65743a3a50616c6c65743c543e3e3a3a617574686f723a3a6832303433383936646665383862626662d504cc013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a6834346135646136306132316565643466d6045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830616635313034303562313463346465d704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836396466343433306634626132393437d8045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830366266383163623065633562343464d904566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6465635f636f6e73756d6572733a3a6862643032656432376662336538363236da044a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6837333331616230313539363938353363db04566672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a696e635f636f6e73756d6572733a3a6839333465653034356661373636313839dc047f3c70616c6c65745f7374616b696e673a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a64697370617463683a3a556e66696c7465726564446973706174636861626c653e3a3a64697370617463685f6279706173735f66696c7465723a3a6831393439323039613234326166333766dd04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865326233393738306230666566376262de046a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6765743a3a6839613631366166323139303264326662df043373705f72756e74696d653a3a7472616974733a3a4865616465723a3a686173683a3a6862303138356536663264333636623637e0045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839666233333536343361353234373430e1043b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6839383863383036643161303239663832e2049a016672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703c5072656669782c486173686572312c4b6579312c486173686572322c4b6579322c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a6d75746174653a3a6838323039643730646663663930343530e304673c70616c6c65745f62616c616e6365733a3a696d62616c616e6365733a3a506f736974697665496d62616c616e63653c542c493e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6863393964353437376235613032313463e4046d6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a6d75746174653a3a6861653831383632666131383030373139e5047e6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a6d75746174653a3a6839353031393433373465396432663263e60489016672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a7472795f6d75746174655f6578697374733a3a6862313430633361383764393835393861e704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836646137643935323862646462613233e804553c70616c6c65745f62616c616e6365733a3a44757374436c65616e65723c542c493e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6831393062633762323938383034613766e9045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862313466343437623830636236623332ea04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862636432373437363830313538343539eb04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6863623166373865623965373664643232ec04e00170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a72657365727661626c653a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a726570617472696174655f72657365727665643a3a6832303464626362663130336465333536ed04db0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a72657365727661626c653a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a736c6173685f72657365727665643a3a6833396638393266313165653630633832ee04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839646136643962343665313065366336ef045d70616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f7265706f72745f65717569766f636174696f6e3a3a6836303433653638636433626666383363f004593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832313833386132316330333836636465f104543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839656161393738326136363231376130f2048f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a6834326464303833626264366665626531f3047273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a6833646339303830366238663634636366f404a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a6832356462646662333736306463376435f5046c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862303131326464393539353830356531f604723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835633931393039343832386138343932f7044e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6835623933376566313664633463303235f804543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839313230633366653638613338336137f904543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865623035376465363939303033613336fa048b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a6838626233326662633966663564616564fb04433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835326634643138393137343364353237fc04573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833613866376437613063373665396535fd044e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6862623962333764323861333665653739fe04593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836643637623130646134373461653937ff047173705f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a4d756c74695369676e61747572653e3a3a6465636f64653a3a683037353932623936306538346534353380057d7061726974795f7363616c655f636f6465633a3a6269745f7665633a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a6465636f64653a3a683734666661353934373666623837636381054e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683466363863323636626131303632393882059401706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733c4e3e3e3a3a6465636f64653a3a683838396339396464663330313133373583054e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683637306335316661646232323665323784054e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830383363306534363265656138346636850548636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e31333134358605593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68353565626165353234343236383237358705543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683437316233306463343163346430383888058f0173705f636f6e73656e7375735f736c6f74733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f736c6f74733a3a45717569766f636174696f6e50726f6f663c4865616465722c49643e3e3a3a6465636f64653a3a683665316237363638333962353764616689057273705f73657373696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f73657373696f6e3a3a4d656d6265727368697050726f6f663e3a3a6465636f64653a3a68323863373537303637623063366235308a05970173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a4e657874436f6e66696744657363726970746f723e3a3a6465636f64653a3a68316531636566306266353562323939638b05a30173705f72756e74696d653a3a6d756c7469616464726573733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a6d756c7469616464726573733a3a4d756c7469416464726573733c4163636f756e7449642c4163636f756e74496e6465783e3e3a3a6465636f64653a3a68386438623034376330386633343335638c056c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68353731663234373064313238376531378d05723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68626334386637396238306635363031628e05543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68356231313138336638356434623831338f05543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686534366566306539316635313131656290058b0173705f66696e616c6974795f6772616e6470613a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a45717569766f636174696f6e50726f6f663c482c4e3e3e3a3a6465636f64653a3a68336566333139636265646533613033659105433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68316633353334623933363265666533669205573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68356262373963343266343238336130319305593c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683665633138393564643838316261376394058e01706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a496e686572656e74446174613c4844523e3e3a3a6465636f64653a3a68326138653836616265663233333932359505ae0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a43616c6c3c543e3e3a3a6465636f64653a3a68303665323534646566316237663866349605723c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68383564313236346535346439646231649705910173705f72756e74696d653a3a67656e657269633a3a6469676573743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573743c486173683e3e3a3a6465636f64653a3a68626134386662366233316333323039319805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686638333338303863303331396637373399054e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68616139646465373534623165303536399a05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68303631323330326165363939393134669b055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68326136333165663538346136336437329c05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68386138623436633932636265613539389d054a636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a68363939646534343439613032343437329e05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68323537313963306131316337653965379f055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865356263373133313132383562326661a005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830366631373566393231333436366662a1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863663539633962626133346636343265a205386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866383032313238323136366339666333a305386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839316333663931366635613738313432a405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861623166363332626466613763623538a5054e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6836363632636663326165636132666537a6055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833333263396461663162633433376363a705386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861353636663731353938356536643164a8055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866313862613362393761666435343239a9055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839343237366463376134343033386534aa054873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6865633937616364373231383061396130ab05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830616239393431666262646338626162ac055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831386131363063316633336366633766ad055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835653039626239636163623966383464ae052c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6830373664313032333338623762363132af0553706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a636c6f73655f68726d705f6368616e6e656c3a3a6831353764333035363339653161643864b005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862366539333637633233643238303563b105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6865376665343566666530373839323233b2055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837346230303032636337343337346162b3055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835336235643764313263323963663732b4055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839326237663233633739396365396361b50555636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e33383239b6055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831313434646332366165306266366531b7055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833343261366136306234383434323237b8055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836323264333832393562616364333332b9055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834666365363530376532653139616164ba055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830333364666661653965656564316261bb057b6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a6765743a3a6830333034626635653938366434633466bc055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839653439613937313763356162306636bd057b6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a6765743a3a6832636563656136393739353266653165be05960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a6863623933313432306664353961663662bf055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831356636336161653766663936303364c0055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833323031376639633738313630313737c1055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832363638623935646532613438623865c2055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6835386233393730393837646338373538c30539636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830663334653736363336323537346331c4057e6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a617070656e643a3a6836336336316430373836313030663833c5057e6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a696e736572743a3a6834646136383138393566643135613932c6057e6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a6d61703a3a53746f726167654d61703c5072656669782c4861736865722c4b65792c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a696e736572743a3a6862343538313961653364343031643864c705746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6831616530373937623237323239663336c8054570616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6866366534663231643730663935633162c9054770616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6864363133366539353966303733306261ca055070616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863353432396532333036376132396363cb05a2013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785265676973747261727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835623835643161616536363765353262cc05a3013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785375624163636f756e747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863616339373436383935383933353039cd05a6013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5375624163636f756e744465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865343631383965663862343864363364ce05a1013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4669656c644465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865363966626464633632346266643963cf05a1013c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a42617369634465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833306331643830333834383634616466d0057470616c6c65745f6964656e746974793a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f6964656e746974793a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6863633638626664313062393237303965d1054670616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6839353462663330313638306261383230d2054870616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6838643461383835653761323131313937d3055170616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861656533613031626136343231303131d405a3013c70616c6c65745f74696d657374616d703a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864646463353732633231343635346663d5058e017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220284c302c4d302c4e302c4f302c50302c51302c5230293e3a3a656e636f64655f746f3a3a6865316332653832633931316435326435d6055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862383533626134313831363331303133d7055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832633438363636656133323565343130d8054f706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836316166353731323162613833316633d90551706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863376562336136373262633235653230da0589013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a5f5f4765744279746553747275637448726d704368616e6e656c446967657374733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833343563633833316438313133383930db0592013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a68726d703a3a5f5f4765744279746553747275637448726d704f70656e4368616e6e656c52657175657374734c6973743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838373363346461616638323662316630dc05433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6839393165373031653738613164303236dd0556706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865346132303337643135333762613663de0585013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f476574427974655374727563745363686564756c65643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831393739616136356337653062316334df058d013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f47657442797465537472756374417661696c6162696c697479436f7265733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832613738663664323631316138343133e0058b013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a5f5f476574427974655374727563745061726174687265616451756575653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866666263336232346334343162356663e105463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6831386365353761396633653965643366e20559706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a67726f75705f726f746174696f6e5f696e666f3a3a6864323163643030336631383666613063e30559706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a6e6578745f75705f6f6e5f74696d655f6f75743a3a6861633963376630643436633239663631e405386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832326465626339623935363530666536e505386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831616338393832646561663337656335e6055a706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a6e6578745f75705f6f6e5f617661696c61626c653a3a6864303965353666636432336362386132e7055c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a67726f75705f61737369676e65645f746f5f636f72653a3a6839323335383366623231633738323663e805386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834623935383166626565343366356365e905766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6863633631373232343161646362666638ea05766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6833343062346337303336663166306238eb05a201636f72653a3a7074723a3a64726f705f696e5f706c6163653c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c77657374656e645f72756e74696d653a3a52756e74696d653e3a3a617661696c6162696c6974795f74696d656f75745f7072656469636174653a3a7b7b636c6f737572657d7d3e3a3a6839353139303166383632336334633032ec0571706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a617661696c6162696c6974795f74696d656f75745f7072656469636174653a3a7b7b636c6f737572657d7d3a3a6832313134373237386434383137646534ed054b706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a4d6f64756c653c543e3a3a636c6561723a3a6831643063396366323737396136363035ee05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836623736636539313066363636653138ef05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861306433333633353230363336623239f005766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6838306538303134396563623036656264f105766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a7365743a3a6865313830393732386439303062343837f205303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835353962343237343735363633326337f305303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833663930323066653737323438336239f405303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839646233656636396666343635666662f505303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834323732313139663031323430316538f605503c61727261797665633a3a6572726f72733a3a43617061636974794572726f723c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864343137643232356334333330336435f705613c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7363686564756c65723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833633839363038333139373939356131f805683c70616c6c65745f6964656e746974793a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831623936666538613466393165653635f905733c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837383463616564373436666434633065fa0555636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e33393534fb057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830333963313866323831663865346461fc057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831363266393965303266616235636337fd057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832313964386261343833343763643837fe057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832373761646130373134383566396231ff057d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683364653634626661333262616238346280067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683437346435616536623765336363356381067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683461643539393064336435636163353382067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683531613034646563653665633630353283067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683537333364343631373539383932343284067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683539366264333039313762373062373285067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683636313063363435313034393066646486067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68373430646236313033656163623366658706433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683538616666376631363433306263656288067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683735613636376336623535643334666289067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68383633383766656133656661656262628a06483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68626537363033643333343633643561638b067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68386662313335663863666332656336628c06433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a68363438363634363633363037303431308d067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68393634633362303733666437356638388e067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613335663065343732343134326437328f067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613366613534666338343533343731329006483c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a683332376636353765373261363534363091067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686161366164333963643032353733346392067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68623066316231373562396634373739669306433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a683234613263353161663866313263623894067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686237313261353839383835396265323195067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68626161373638373265333238353430339606483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683336323733333162333265346633366297067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686438363838393634623932386339393798067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686463346363646639616665643234393799067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68656135343964353736626363316331649a067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68663535656634633765353537336537619b067d3c6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a4f6e456d7074794765747465723c56616c75652c4f6e456d7074793e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68666337643266663966323132323463669c065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68363466643635353531386439623436309d065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68366438633462613966616138366433649e065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68623633396231623537393164333962359f06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835346261656339313766376239376135a006386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6838396163376562343466623133646637a1065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836663530333739623236393662623463a206766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6865353266313366613235303439336435a306386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837656164613833396566343337663835a4065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834633937303866666330383466623639a5065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839316366613333653932643566333739a606386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6861383132363464646338646434323136a7066d3c73705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c2061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a6861643261363231373231613763646263a8065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831663434326437663636343663613762a9064470616c6c65745f7574696c6974793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6833613536653038636431663733316439aa06473c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863623732343231353637656538316336ab066a70616c6c65745f78636d3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f78636d3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6838653430633863353364323733383563ac066e6672616d655f73797374656d3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f72206672616d655f73797374656d3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6831636162653364326130303335616166ad066c70616c6c65745f626162653a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f626162653a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6833373661343835393538333236346661ae067670616c6c65745f62616c616e6365733a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a43616c6c3c542c493e3e3a3a636c6f6e653a3a6865353964646665383365336639613866af067870616c6c65745f617574686f72736869703a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f617574686f72736869703a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6832393262646165326263336232326431b006493c70616c6c65745f7374616b696e673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838396639616661306565346662333166b106493c70616c6c65745f6772616e6470613a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833656165353335623661323834333865b206463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6861356536366166646334636562373037b306463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832646333323463373463323463343963b4064d3c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68636237323432313536376565383163362e3131323830b506463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836323733323261336535353738653935b6067270616c6c65745f76657374696e673a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f76657374696e673a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6866313733343230626134346538353162b7067670616c6c65745f7363686564756c65723a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f7363686564756c65723a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6861616639323731636635653731626139b8066c70616c6c65745f7375646f3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f7375646f3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6864613636383662643763316232386633b9066e70616c6c65745f70726f78793a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f722070616c6c65745f70726f78793a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6838313933653866356335383866663035ba064a3c70616c6c65745f6d756c74697369673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863646332643764386233313937326134bb06583c77657374656e645f72756e74696d653a3a4e706f73436f6d70616374536f6c7574696f6e313620617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832653931613935383932616334663137bc06653c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830336434336661313665623437316464bd065e3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265643a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862396632343637663333316239393439be06613c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838303733623961316135346431313165bf06463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864646232333332663737373733663834c006463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863333462616133333133636161616137c106463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831343561646535323434396537616135c206463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834393731633633656363336562316639c3065d3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832626135663362396231613638356632c4065b3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6862396431386530363465373664333933c5065b3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834653566643336373335656230343030c606643c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863626434323734353032333338333236c706633c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835343861363561663133386236353762c806663c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065723a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864616466393064613765303330363163c9069a01706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f7220706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a43616c6c3c543e3e3a3a636c6f6e653a3a6839663933363663376435366637643436ca0684016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a696e697469616c697a655f626c6f636b3a3a6861333236323163363839303536336230cb063f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6866633866343834363764393835326636cc06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6831326331383233396663323265663330cd06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6831323130616139376636303139643263ce06783c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a686f6f6b733a3a4f6e52756e74696d65557067726164653e3a3a6f6e5f72756e74696d655f757067726164653a3a6835636337643537313566333533336261cf06536672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a696e697469616c697a653a3a6837363233393334363634386465663366d0067c3c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a686f6f6b733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6836393038653839313036646439346664d106686672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a72656769737465725f65787472615f7765696768745f756e636865636b65643a3a6830336666373163643137386634663832d2066a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6835663031333566666138346461616465d30683016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a6170706c795f65787472696e7369633a3a6830376633356135666334656139616566d4063e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6864356233626532613732623663646631d5069f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a6866336339313639306636663833623832d606386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6839616334616162646138633136663130d7065a6672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6864383938373732376238643966333363d8064970616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a636f6d707574655f6665655f7261773a3a6864623935326466623135613331636237d9069c013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a7061796d656e743a3a43757272656e6379416461707465723c432c4f553e2061732070616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a7061796d656e743a3a4f6e4368617267655472616e73616374696f6e3c543e3e3a3a77697468647261775f6665653a3a6832363964396233336466653036353538da063e70616c6c65745f626162653a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a6830623935663936623738323565646630db064170616c6c65745f6772616e6470613a3a65717569766f636174696f6e3a3a69735f6b6e6f776e5f6f6666656e63653a3a6830656536633636613131656162656632dc06733c70616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a50616c6c65743c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6837373731373761393933636666313663dd0648636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e3130323530de06303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864663763396238346662373438333562df06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839336164353665633139636338333430e006386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6836323666366330376338623664353564e106cc0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f696e746f5f6578697374696e673a3a6836306162623236303039373863646534e206c70170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a6465706f7369745f6372656174696e673a3a6832343464313066653237393162313637e3068a016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a69646c655f616e645f66696e616c697a655f686f6f6b3a3a6862663332646439386164303465346236e406386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835353939316237353237363663356638e50659706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a4d6f64756c653c543e3a3a6170706c795f6e65775f73657373696f6e3a3a6835383131313535653138393232653835e606463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837613863386364653735653362363666e7063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6833653532356335396535393064313035e806386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861383336623737303863336661343330e906386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835386266303065383963646365316262ea06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831383862643833393664663936363332eb06386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862656662323264346161393463396236ec0683016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c50616c6c6574732c434f6e52756e74696d65557067726164653e3a3a6f6666636861696e5f776f726b65723a3a6862386630626139373663363265373137ed06766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6861323931333839353165323736383038ee06a30170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a656e737572655f6f6666636861696e5f7265706561745f6672657175656e63793a3a6833353239643335663766633464363864ef06693c73705f72756e74696d653a3a6f6666636861696e3a3a73746f726167655f6c6f636b3a3a426c6f636b416e6454696d65446561646c696e653c423e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832316666323731316362326664623839f006940170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a6d696e655f636865636b65645f63616c6c3a3a6865653466623839356635626261646437f1065070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a736176655f736f6c7574696f6e3a3a6862306634356166363137313861666162f2068e0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a7375626d69745f63616c6c3a3a6830653039386262323564376339313638f306473c636f72653a3a726573756c743a3a526573756c743c542c453e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832353061393734356432656362313339f4068f0170616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a756e7369676e65643a3a3c696d706c2070616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a62617369635f636865636b733a3a6838313139653739346336336466616636f5063a6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6576656e74733a3a6839613230333764303665313330303439f60648636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a4576656e743e3a3a68626232663661656532373938643536332e34333539f7062c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6865636335653763646635343739376437f806683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6864383932646136653762316363656132f906583c70616c6c65745f696d5f6f6e6c696e653a3a4f6666636861696e4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839343364633239303362663434346563fa06a1013c70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a76616c69646174696f6e3a3a4b65794f776e657250726f6f6653797374656d3c2873705f636f72653a3a63727970746f3a3a4b65795479706549642c44293e3e3a3a636865636b5f70726f6f663a3a6831333834353335366161393332383832fb0681033c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a436f6e6669673e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a6834346537383564626362636136326263fc06746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6865306630383039653765633061306530fd06523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a696e736572743a3a6839646338626138303361633735366362fe064470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a71756572793a3a6866343436623237373462353134373662ff06a901636f72653a3a7074723a3a64726f705f696e5f706c6163653c6d656d6f72795f64623a3a4d656d6f727944423c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235362c6d656d6f72795f64623a3a486173684b65793c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e2c616c6c6f633a3a7665633a3a5665633c75383e3e3e3a3a68396133373862323766306231643565388007386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68303761373436313563363131656531318107366861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a6765743a3a6833373861643433643532333363346338820725747269655f64623a3a547269653a3a6765743a3a686264316562633862383264346233303483074b70616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a67656e65726174655f666f723a3a68623636326565323736343839353062368407543c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e20617320747269655f64623a3a547269654d75743c4c3e3e3a3a696e736572743a3a686134373137313233336230346465643185077c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a5472696544424d75743c73705f747269653a3a4c61796f75743c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e3e3e3a3a683132646432613664323330393364653086074470616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a50726f76696e67547269653c543e3a3a70726f76653a3a686535666462663734356265373533353887074d3c747269655f64623a3a7472696564623a3a5472696544423c4c3e20617320747269655f64623a3a547269653c4c3e3e3a3a6765745f776974683a3a6839663631373464353364643230616265880743616c6c6f633a3a636f6c6c656374696f6e733a3a7665635f64657175653a3a56656344657175653c543e3a3a67726f773a3a683931663938393334313661616333356489073c747269655f64623a3a7472696564626d75743a3a4e6f646553746f726167653c483e3a3a616c6c6f633a3a68653234366438623735616331613738648a07653c73705f747269653a3a6e6f64655f6865616465723a3a4e6f6465486561646572206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68333935373539643433393666346664638b0741747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a636f6d6d69745f6368696c643a3a68346332643462363130343431346330328c07633c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6c6561665f6e6f64653a3a68623632323932663763333436336235368d07683c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a657874656e73696f6e5f6e6f64653a3a68656233343630336436326463646136668e07653c73705f747269653a3a6e6f64655f636f6465633a3a4e6f6465436f6465633c483e20617320747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633e3a3a6272616e63685f6e6f64653a3a68326139616237656464626235343865668f075c636f72653a3a7074723a3a64726f705f696e5f706c6163653c747269655f64623a3a7472696564626d75743a3a4e6f64653c7072696d69746976655f74797065733a3a483235363e3e3a3a683436623536393262616634333937616690073173705f6e706f735f656c656374696f6e733a3a746f5f737570706f7274733a3a683563616134633537646361636534623591074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a686266666662346564633338653330336692074d73705f6e706f735f656c656374696f6e733a3a566f7465723c4163636f756e7449643e3a3a7472795f6e6f726d616c697a655f656c65637465643a3a683931643736313166626539313431623793074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a686165396663343536383566626437306194073273705f6e706f735f656c656374696f6e733a3a73657475705f696e707574733a3a683665366234366435663261633666656495074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6866316330643737393836356231653339960748616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6834646533333539306238633833623764970768636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a686137373536373163303037646135336398074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68326636363136316165666533313938369907613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a68333939616637626164383564376231379a074173705f6e706f735f656c656374696f6e733a3a70687261676d656e3a3a7365715f70687261676d656e5f636f72653a3a68316334626435393136383065643230359b075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68303732306535653361613930306161329c074e706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a63757272656e745f636f64653a3a68633666346266663534633965323662309d07386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68346136633165376466343332353438629e0750706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68316433313161323564636139643835639f0752706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835356463376333373865316361343463a00787013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617374436f64655072756e696e673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839613265626334663765316461653134a10784013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617374436f64654d6574613c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862666632336139326563336464373763a207463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6830306131313666376365353039663234a30782013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a5f5f4765744279746553747275637450617261636861696e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833343930303739633161333937326163a40759706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a76616c69646174696f6e5f636f64655f686173685f61743a3a6864363833383236303162653335623737a50753706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261733a3a4d6f64756c653c543e3a3a64656372656173655f636f64655f7265663a3a6839323236663731386434666631366631a60753706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265643a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836626639616333363838303437383633a7078c013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265643a3a5f5f4765744279746553747275637441637469766556616c696461746f724b6579733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863663166373063636565653765323061a807433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6862616135653435636561383032333566a90758706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7368617265643a3a4d6f64756c653c543e3a3a6163746976655f76616c696461746f725f6b6579733a3a6862313135396465303833373163343330aa07543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832646663653163313235313366613034ab07a0023c6672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a6f6e636861696e3a3a4f6e436861696e53657175656e7469616c50687261676d656e3c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e50726f76696465723c3c54206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a6f6e636861696e3a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a6f6e636861696e3a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a656c6563743a3a6837386561386633623738373238356435ac07d0013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a766f746572733a3a6835326534316361336138633266393261ad07d1013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f656c656374696f6e5f70726f76696465725f737570706f72743a3a456c656374696f6e4461746150726f76696465723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a426c6f636b4e756d6265723e3e3a3a746172676574733a3a6830396635666362613136363139663964ae072c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6833303733373137306130323937396565af0768636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6834616565396566356437353834323636b0074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6861656335306134386162646161373138b10745616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6839386463646638336136373539366433b2075d73705f6e706f735f656c656374696f6e733a3a61737369676e6d656e74733a3a5374616b656441737369676e6d656e743c4163636f756e7449643e3a3a7472795f6e6f726d616c697a653a3a6836396232653164343461323935356263b3074173705f6e706f735f656c656374696f6e733a3a68656c706572733a3a746f5f776974686f75745f6261636b696e673a3a6830386561636266316631386362336636b407613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6863323630623435316436366539346132b5074878636d3a3a646f75626c655f656e636f6465643a3a446f75626c65456e636f6465643c543e3a3a656e737572655f6465636f6465643a3a6839353561636537663037306236646131b60768636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6833623132356234316437313165356339b7076c3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c3a3a6836353366646434653936633431643832b80745616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6832633836616631323163363839356534b9074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830336363323064396564376234643532ba0752616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6835666135303738336339326638623463bb0752616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6862636261333731303264643139366232bc0752616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a656e7472793a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6864386136333134643766323731373562bd07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832643366626464613536666535313362be07683c73705f636f6e73656e7375735f7672663a3a7363686e6f72726b656c3a3a56524650726f6f66206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834636566353639613336353964636164bf076a6672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a76616c75653a3a53746f7261676556616c75653c5072656669782c56616c75652c51756572794b696e642c4f6e456d7074793e3a3a7075743a3a6833653733653138626537353265656630c0076f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6831626232643133383837333264666134c107386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862323264333362643064326333623238c207766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6861653430373032616132656464386235c3074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6866313466383939326533623238666638c4072c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6839393036356364356533623961323264c5072c616c6c6f633a3a736c6963653a3a696e736572745f686561643a3a6832393564333466356133633238616239c6074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6830613034316164393939373439356333c7073e747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f61743a3a6831353835303162653033666633343765c8073c747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a66726f6d5f656e636f6465643a3a6862366264396231323862393765616163c90745747269655f64623a3a7472696564626d75743a3a5472696544424d75743c4c3e3a3a696e736572745f696e73706563746f723a3a6830646362343563373030636637316336ca07376861736862726f776e3a3a7365743a3a486173685365743c542c533e3a3a696e736572743a3a6832316439353938633937326265396431cb0739747269655f64623a3a6e6f64655f636f6465633a3a4e6f6465436f6465633a3a6465636f64653a3a6861343436326664353131643136633236cc073e747269655f64623a3a7472696564626d75743a3a4e6f64653c4f3e3a3a696e6c696e655f6f725f686173683a3a6864616638386462643035373333663133cd07773c736d616c6c7665633a3a536d616c6c5665633c413e20617320636f72653a3a697465723a3a7472616974733a3a636f6c6c6563743a3a457874656e643c3c4120617320736d616c6c7665633a3a41727261793e3a3a4974656d3e3e3a3a657874656e643a3a6865656636613336653465383762646130ce07443c736d616c6c7665633a3a536d616c6c5665633c413e20617320636f72653a3a686173683a3a486173683e3a3a686173683a3a6830363062343166336362393662346533cf073e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6864383830666237303635323735393432d0077b3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6836323931393635386334623765316262d107516672616d655f73797374656d3a3a3c696d706c206672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e616c697a653a3a6834333034646230313264353033643936d207386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866346534646164383639633036653661d307426672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6831376339363633343437363733363363d407446672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6834373666623961663766623065626165d5074d6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6864343830636339656363373737353037d6079c013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5353353850726566697844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865666163333865396337396665346566d70799013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a56657273696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833336534646530343764623130356134d8073c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6861303061346562616435653331646265d9079a013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446257656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838336662643566303636316235643832da07a0013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b48617368436f756e7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863353634613536366162646262613162db079d013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832626163316165613532613539373563dc079e013c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b5765696768747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863323332373837626462616433663065dd07543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830633431656432306366393133343461de074e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6863366465393738393234643438643364df07463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836623237393631336466666563363334e0074173705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6830613838346335303939643032366564e1073973705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6835636335383039373336613735313932e207a201636f72653a3a7074723a3a64726f705f696e5f706c6163653c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c616c6c6f633a3a72633a3a52633c636f72653a3a63656c6c3a3a52656643656c6c3c73705f6e706f735f656c656374696f6e733a3a6e6f64653a3a4e6f64653c73705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3e3e3e3e3a3a6832306634613536663964333866323762e30758706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6833626333306638653366613465313335e4075a706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6862346465316464363335366436613036e50763706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831306664323731336633373838653039e607b7013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a52656d6f76654b6579734c696d697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833646534373930346434613662643564e707b0013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a63726f77646c6f616e3a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50616c6c6574496444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862633436343930323738316638396234e8075170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866663535343531383337636235376432e90755636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e34353833ea075b636f72653a3a7074723a3a64726f705f696e5f706c6163653c5b78636d3a3a76303a3a6f726465723a3a4f726465723c77657374656e645f72756e74696d653a3a43616c6c3e5d3e3a3a6831363161353562373566343930643738eb07653c6672616d655f73797374656d3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861376237333234303062663865666438ec073e6861736862726f776e3a3a7261773a3a5261775461626c653c543e3a3a726573657276655f7265686173683a3a6833393631303563323966666137663336ed07407363686e6f72726b656c3a3a7672663a3a5652464f75747075743a3a6174746163685f696e7075745f686173683a3a6832663963623337353736333030326661ee077873705f636f72653a3a63727970746f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f72653a3a63727970746f3a3a4163636f756e74496433323e3a3a6465636f64653a3a6837306433373561623262313162616464ef077b3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833623935373838353638366138336237f007386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837636331653436376263366239636465f107c401706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f7220706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a486f7374436f6e66696775726174696f6e3c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6839626136613430366630623332636336f207463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865643564363334356331653564666231f307386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6830623731363437346362336265323866f40739636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6833643564346363323335373361613337f5076e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832343733653831663339303635376261f60739636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6834306131316233306631643136623535f7076e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839323066643632616561623865393035f80739636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6834353234346662326165383836363436f9076e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6866343761633436383138313862313261fa07386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834353434393865623936626534336134fb07543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835316264373636336438393531343433fc07746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6835636233613735613163396362616632fd075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861333332353234623439653932373833fe07463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6834343963353432366634323063373438ff075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683532663336656131636361303964393980085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a686666316563313463663066393065633281085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683561343862633031636661626537393882087c3c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a686f6f6b733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a68626235326236363238363363616362648308453c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683835336533666631323434303763373684085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68633235666638343133313263376664368508463c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683131396439363832373835633561306186084e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a686463333961653666363439633336333087084d3c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68636237323432313536376565383163362e313233353388087c3c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a686f6f6b733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a683334346333313538353435366663303989085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68343135383336633633333633393736338a083b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68323362316239313037363862663566388b083a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68336631353961626639363830663639328c083870616c6c65745f7374616b696e673a3a736c617368696e673a3a6170706c795f736c6173683a3a68313232623962336461333262346665618d083570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a68626632373262373161666566633061308e085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68353062313165613839373366306663388f085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68373739313765323235333831623338649008386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68666165373563343462383530343932349108d10170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a6c6f636b61626c653a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7365745f6c6f636b3a3a68623762313139626532336330306535629208386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a686337313136353265306530383732623593084970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a683135643637646330623464383466303094085e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a683432336238313361663365653764633095085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683935373439626366356534336531336596083c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6836373132663864383765323137343730970856706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6830356130333564623231656534303230980858706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866653962636364646466346333313066990894013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e697469616c697a65723a3a5f5f47657442797465537472756374427566666572656453657373696f6e4368616e6765733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643462666261316364663938386630319a0858706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68353931323130316238303765383433669b085a706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68383736616537396133333231386639379c088c013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a636f6e66696775726174696f6e3a3a5f5f47657442797465537472756374416374697665436f6e6669673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68396136333338346438306338383164339d087978636d3a3a76303a3a6a756e6374696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a6465636f64653a3a68636236633037616461396139613165339e087978636d3a3a76303a3a6a756e6374696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a6465636f64653a3a68653065363335636530373339333462379f087c78636d3a3a76303a3a6a756e6374696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e3e3a3a656e636f64655f746f3a3a6838316462346661326361383565366636a00868636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6863393038653933653462393063616238a1084f3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a6765743a3a6837356138613635656266623132306537a208533c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a656d706c6163653a3a6838626637356632643364353663643361a308386861736862726f776e3a3a6d61703a3a486173684d61703c4b2c562c533e3a3a656e7472793a3a6832366535303738633661616335643936a4083d6861736862726f776e3a3a6d61703a3a566163616e74456e7472793c4b2c562c533e3a3a696e736572743a3a6830653364653237363336313061303065a508523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a72656d6f76653a3a6863326464316333323961376361303934a608543c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844423c482c543e3e3a3a636f6e7461696e733a3a6837383037616634333430363061636364a708583c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64623a3a6831653965636433343765363564313237a8085c3c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a41734861736844423c482c543e3e3a3a61735f686173685f64625f6d75743a3a6835303262393563653931643165663732a908523c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a6765743a3a6839643264656232623431306361613831aa08573c6d656d6f72795f64623a3a4d656d6f727944423c482c4b462c542c4d3e20617320686173685f64623a3a4861736844425265663c482c543e3e3a3a636f6e7461696e733a3a6831656432653432376462333263393162ab086f3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833383333356631616265643339326264ac0882023c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a436f6e6669673e3a3a56616c696461746f7249642c3c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a436f6e6669673e3a3a46756c6c4964656e74696669636174696f6e292c7536343e3e3a3a6f6e5f6f6666656e63653a3a6834313633646461653563633966373039ad08423c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830343361393966373534396666363830ae086e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6838626238346238623365623031346562af086e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6862663433623339613535343965353637b0086e3c6672616d655f737570706f72743a3a73746f726167653a3a5072656669784974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6866613935646432663538653331316135b10847636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e35303034b2084770616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a6837393862316335333033656532363466b308437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6862316230343262323432646232646438b4083670616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6f7065726174653a3a6863356330343866326362346665356665b50885016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f72616765446f75626c654d61703c4b312c4b322c563e20666f7220473e3a3a6765743a3a6833333266306233303434313066353062b6083970616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a636c6561725f63616c6c3a3a6836336232303264393763613066633938b7085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862643435616334313034616666383936b808386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833303662366666663837353838353863b908706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6832336638303737666466343835666235ba084570616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f72655f63616c6c5f616e645f726573657276653a3a6830303331336532636630663366343639bb0888016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f72616765446f75626c654d61703c4b312c4b322c563e20666f7220473e3a3a696e736572743a3a6839666639616635333936376263386331bc08543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865633662643530323334633463353739bd084e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6863343766633862386432303238306361be084a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6865303766626533333961613734373432bf084070616c6c65745f78636d3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6830663666656338313263646161623764c0084270616c6c65745f78636d3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6836306261653030396462623264643836c108443c78636d3a3a76303a3a58636d3c43616c6c3e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837386139613038386562643739613736c2085370616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a66696e645f70726f78793a3a6861376133646164396538653366366632c3085170616c6c65745f70726f78793a3a3c696d706c2070616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f70726f78793a3a6865636233663837653232323132323866c408386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831646132373364643536666331616361c508437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6831366130356662643535663961356665c608386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830383661666430373766383862356161c708386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837653761613963306163393131623436c808386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6834656266363830643235626463343366c9087c3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261735f696e686572656e743a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830393563333331373134653265383830ca0839636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6839316663653537383635613035346239cb085470616c6c65745f626162653a3a3c696d706c2070616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a646f5f696e697469616c697a653a3a6835303832353964643236393135333735cc08753c636f72653a3a697465723a3a61646170746572733a3a66696c7465725f6d61703a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6837613066333733663965636665383639cd08463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837656231666534346362383864313332ce08706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866313037386633643038303364316132cf08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837366330623565353662626233643738d008437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830396365363832393030343561336264d1089a016672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703c5072656669782c486173686572312c4b6579312c486173686572322c4b6579322c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a696e736572743a3a6834363361623531333863666266303936d2085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833653234313161386436313738336137d3085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830353935303533373866306435653836d408bc0170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a69737375653a3a6837363433373439656361383536383963d5084e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831343236633231383563326533373833d6083770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a6866333535386436633838306535656235d708386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a6837643332313462393133306236383334d808386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866393265653535646361326234386535d9083570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a6835383364613762646233386563633064da08706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6831636665616136353765663666316139db08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831633934356164656664383838626330dc08a1013c285475706c65456c656d656e74302c5475706c65456c656d656e74312c5475706c65456c656d656e74322c5475706c65456c656d656e74332c5475706c65456c656d656e74342c5475706c65456c656d656e7435292061732070616c6c65745f73657373696f6e3a3a53657373696f6e48616e646c65723c4149643e3e3a3a6f6e5f6e65775f73657373696f6e3a3a6831656135646436393530623262643133dd0857706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a70726f636573735f6269746669656c64733a3a6866313434366536346436306364333230de085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830306331336263356365653431323135df08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837623037623538663163623831346135e0085c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862326235613766383762623330663634e108386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863323230336535303335643032303133e20858706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a70726f636573735f63616e646964617465733a3a6861613663366534636236376639346266e308386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838653462383233636335396239353861e40856636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e3133313438e508593c73705f72756e74696d653a3a44697370617463684572726f7257697468506f7374496e666f3c496e666f3e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838376135653334323766303635346332e6084270616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6836396537356637663865633239356466e7084470616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6861373834306631343462653635383838e8084d70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6832656161373566383031303134393965e908ab013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a416e6e6f756e63656d656e744465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836333764326166643662613764613630ea089c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850656e64696e6744656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864643966326335323862363465613437eb089c013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617850726f7869657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866306261393533363533633734333261ec08a4013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863323863356563396466643332326166ed08a2013c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f78794465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830656432623561333161386630366262ee084c3c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68636237323432313536376565383163362e35313439ef08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830303036666435383838393838353065f008386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830336463323166623136616462393433f108386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830356663396336383430383162396265f208386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831626563383332363632646432333362f308386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831653432363164353039643965323035f408543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833663538626336323263383964646565f508386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835636263363638343362626530323133f608386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836373037616338636462633064333065f708543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832623630656665643836386461653863f808bc01706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616e64696461746550656e64696e67417661696c6162696c6974793c482c4e3e3e3a3a6465636f64653a3a6866323034363435336636303963613661f9086b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6834363332333866313831613865623230fa08573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832663033343664363766303736386131fb08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839306664323039613631353362353639fc08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861623064653364363363363436356666fd089401706f6c6b61646f745f7072696d6974697665733a3a76313a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f7220706f6c6b61646f745f7072696d6974697665733a3a76313a3a43616e646964617465436f6d6d69746d656e74733c4e3e3e3a3a6465636f64653a3a6835356665303762633337616162333366fe084e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6832613732383864353734646463633265ff08386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68636665323636636564666539653632318009386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68656135653233383635643435343366388109386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686632643435646662653264666163363682094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a68383733646466396666623633363238358309386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68313264383633306230613437376434338409386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68323663366462356435613461343039368509386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68363563663834663037623963373739348609386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68383061343535333030333534333737668709386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68386564633662363130656362306137318809386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68646537646238613961363939663462398909386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a7075743a3a68656363333436623161356333633065358a093c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68333564343631613732653265656630388b093e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68386637373332353331373338393865668c09763c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637444697361626c656456616c696461746f72733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68646561623834663363656261336666388d09713c70616c6c65745f73657373696f6e3a3a5f5f476574427974655374727563745175657565644368616e6765643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68383732383262333536303764643730648e09703c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637443757272656e74496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613437363261336337353261613162638f097b70616c6c65745f7374616b696e673a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f7374616b696e673a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a683230643266363135386137626466343190099c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683533626534336630303463306435373191094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a683632303630356133626233653430626692093d70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a686631626361656432316462386434383493093f70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683539616431636333666563646235326494094870616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a686666356363616163326437623363306395099b013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785369676e61746f7269657344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683066663433613861636534616164373896099a013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836336365303137383236336436373062970998013c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f7369744261736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686332343066333330333539613637346198094770616c6c65745f6f6666656e6365733a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a686533316432373435306462313939363599098c0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5072654469676573743e3a3a6465636f64653a3a68356539303761623036303664396235379a093c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68356331653431373965376136356432329b093c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68343164396633623061613731333335389c094c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68656335666166373838306237323934379d094e706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68343432643866653337323861343433369e097a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a5f5f476574427974655374727563744c65617365733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68303663363639613662353166353433399f0957706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6834663736396466636165383832343166a009a7013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f74733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c65617365506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862303061333933366666626235303531a10959706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261735f696e686572656e743a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837613034376639346163616236623965a2095b706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a70617261735f696e686572656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862636632316639346339316333363539a309ab01706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6834326539336533656333663561633066a4096a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6838613334383464653165323464636262a5096a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a6861376265633561313639663037356461a609633c54206173207061726974795f7363616c655f636f6465633a3a64657074685f6c696d69743a3a4465636f64654c696d69743e3a3a6465636f64655f616c6c5f776974685f64657074685f6c696d69743a3a6838616233623130396339643165643766a7095c3c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6833643561356134303362646237636266a8095f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835313933636535376335666537346233a909603c70616c6c65745f6d756c74697369673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861623062623438363831636361633461aa09633c70616c6c65745f78636d3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831646635616133646562623035306139ab09653c70616c6c65745f70726f78793a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832666234633366313535633839303034ac09aa02616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a72656d6f76653a3a3c696d706c20616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4b563e3e3a3a72656d6f76655f6c6561665f6b763a3a6864653961363063343238383932343738ad0964616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f6368696c645f656467653a3a6831323632646463326638306134303830ae095a616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f6c6566743a3a6836363966343937646230323533633231af095b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a62756c6b5f737465616c5f72696768743a3a6864663535313836663863353837363963b00960616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a42616c616e63696e67436f6e746578743c4b2c563e3a3a6d657267655f747261636b696e675f706172656e743a3a6832636663663966663434326166396263b1094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831313934616665333462393637383032b2094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6831616635623230623238363239396136b3094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6833646335313432333864376265663464b4094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6833646364393438663762653663333034b5094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834333438356536393035333733626362b6094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6834643666623162366334623066386435b7094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6837376334376566373732353531383332b8094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6839386164626564633931616339383439b9094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6839616336323864313061303866353034ba094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6862353338633663663732643965666238bb094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6864323430366134396530623566636132bc094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6864636133323338326465643036356665bd094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6865303066313931396437616137623037be094e616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a646f5f726573657276655f616e645f68616e646c653a3a6865353334646261616634396438376236bf09433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6830396362303238363134656661643365c009433c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6865656532643634393466353865656563c1098901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6838346332386139376562326564313234c2098901616c6c6f633a3a7665633a3a736f757263655f697465725f6d61726b65723a3a3c696d706c20616c6c6f633a3a7665633a3a737065635f66726f6d5f697465723a3a5370656346726f6d497465723c542c493e20666f7220616c6c6f633a3a7665633a3a5665633c543e3e3a3a66726f6d5f697465723a3a6866373632363762383136336465663133c30997016672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703c5072656669782c486173686572312c4b6579312c486173686572322c4b6579322c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a6765743a3a6862383063653239386365353035396634c4092b78636d3a3a76303a3a58636d3c43616c6c3e3a3a66726f6d3a3a6863323532316463343034623563366332c509463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832633935363330323462663966333935c609463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833323039396463323238316236323634c709523c78636d3a3a76303a3a6d756c74695f61737365743a3a4d756c7469417373657420617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835363931313130353064646562343731c809463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838363639613337303265336164363835c909463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865356631303833616334356538393531ca09463c616c6c6f633a3a7665633a3a5665633c542c413e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837376562373962666130323636663536cb09656269747665633a3a7665633a3a7472616974733a3a3c696d706c20636f72653a3a636c6f6e653a3a436c6f6e6520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a636c6f6e653a3a6839396536623633396633393238653334cc095d3c78636d3a3a76303a3a6d756c74695f6c6f636174696f6e3a3a4d756c74694c6f636174696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68323064333661636234393334643239382e37353235cd09523c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68616630633531306531663431366137612e37353236ce09543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831376534366662336434663136383635cf09543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866313265333539336636623966643833d009623c616c6c6f633a3a7665633a3a5665633c542c413e20617320616c6c6f633a3a7665633a3a737065635f657874656e643a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6866656463663831653537633163376264d1096c3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6862313839643865633534323737653230d209713c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861353433636564303633333766656631d3094b73705f636f6e73656e7375735f626162653a3a636865636b5f65717569766f636174696f6e5f70726f6f663a3a7b7b636c6f737572657d7d3a3a6831333138386463366434323839323861d409773c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864623637353566663362373638666234d509566672616d655f73797374656d3a3a657874656e73696f6e733a3a636865636b5f7765696768743a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6863616132303765353335356566393131d6097d3c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833323639343032383665346630333638d7094170616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6863383639333433336361306162356464d8094370616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6838373065373437346339306266656463d9094c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861613239343831313462633665373364da09a2013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838303662643665303962623633343165db099e013c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835323337623437376239353437356434dc095973705f6e706f735f656c656374696f6e733a3a61737369676e6d656e74733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a7472795f6e6f726d616c697a653a3a6837356362633438626335646635333338dd095773705f6e706f735f656c656374696f6e733a3a61737369676e6d656e74733a3a41737369676e6d656e743c4163636f756e7449642c503e3a3a696e746f5f7374616b65643a3a6838626535306534666439383935343930de093473705f6e706f735f656c656374696f6e733a3a7265647563653a3a7265647563653a3a6837633231646361383530373334623133df096b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6864633664333038653065386638616531e0095473705f6e706f735f656c656374696f6e733a3a68656c706572733a3a61737369676e6d656e745f726174696f5f746f5f7374616b65645f6e6f726d616c697a65643a3a6865376639613063646365646231623131e109613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6861656330623638383339303137653235e20947636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e38373736e30955636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e38373737e409706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6865613639633331306139393433323836e50939636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6830383232373966363863633031633031e6099a016672616d655f737570706f72743a3a73746f726167653a3a74797065733a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703c5072656669782c486173686572312c4b6579312c486173686572322c4b6579322c56616c75652c51756572794b696e642c4f6e456d7074792c4d617856616c7565733e3a3a696e736572743a3a6839336432356237623165336663336335e7094770616c6c65745f617574686f72736869703a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6831313361343430303837633263336533e8094970616c6c65745f617574686f72736869703a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6833373634633033353233666632623961e90950706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839326330616437643666643864323138ea098b013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a646d703a3a5f5f47657442797465537472756374446f776e776172644d6573736167655175657565733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863376462303939316666323134323530eb093473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6833326162393165346462636331383035ec093473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6864613934383166636134333266613430ed0951706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a666f7263655f656e6163743a3a6865313937326666613934326566663262ee0955706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a656e6163745f63616e6469646174653a3a6861366531313063653037383461653265ef095c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836613232316234303961643836353163f0093c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866376331333539643630306433343863f1097d7061726974795f7363616c655f636f6465633a3a6269745f7665633a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206269747665633a3a7665633a3a4269745665633c4f2c543e3e3a3a6465636f64653a3a6837393237363832386365643962663839f20956706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865316563386165353138303862643835f3098f013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a5f5f4765744279746553747275637450656e64696e67417661696c6162696c6974793c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865653835316233313437393935623962f4096d3c6269747665633a3a736c6963653a3a697465723a3a497465724d75744e6f416c6961733c4f2c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832393232623335626232643764613836f509653c6269747665633a3a736c6963653a3a697465723a3a4368756e6b733c4f2c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830316232633438303966326162376232f609673c6269747665633a3a736c6963653a3a426974536c6963653c6269747665633a3a6f726465723a3a4c7362302c543e206173206269747665633a3a6669656c643a3a4269744669656c643e3a3a6c6f61645f6c653a3a6833383063623835323762323561386365f709336269747665633a3a7665633a3a4269745665633c4f2c543e3a3a7265706561743a3a6862336463316266633663326365323234f8096d706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a43616e646964617465436865636b436f6e746578743c543e3a3a636865636b5f76616c69646174696f6e5f6f7574707574733a3a6830346635616163363364396630623036f909753c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a696e636c7573696f6e3a3a416363657074616e6365436865636b4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833303263393339343233313539633535fa0954706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a7574696c3a3a6d616b655f7065727369737465645f76616c69646174696f6e5f646174613a3a6865636664333161623135633731306331fb093473705f72756e74696d653a3a7472616974733a3a486173683a3a686173685f6f663a3a6831373131643666323039393838336338fc09303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830316663383837626534636464333037fd095a70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6832323764663963643333323930666431fe095c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6832376563306536636339373766636331ff096570616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6862616133646162373766363832363435800ab8013c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4f6666636861696e52657065617444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831326261343261323432633465666465810ac6013c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536f6c7574696f6e496d70726f76656d656e745468726573686f6c6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865626164363938633864393962636665820ab7013c70616c6c65745f656c656374696f6e5f70726f76696465725f6d756c74695f70686173653a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a556e7369676e6564506861736544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861383762333437336665393163643339830a7978636d3a3a76303a3a6f726465723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6f726465723a3a4f726465723c43616c6c3e3e3a3a656e636f64655f746f3a3a6864376164376535663031356138326437840a7978636d3a3a76303a3a6f726465723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6f726465723a3a4f726465723c43616c6c3e3e3a3a656e636f64655f746f3a3a6833383731376136653864663962353236850a3d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6832666138623938353564666233643165860a3d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6833633137303034323536656362316165870a3d73705f636f72653a3a746f5f7375627374726174655f7761736d5f666e5f72657475726e5f76616c75653a3a6839363831353965346437303863363936880a643c70616c6c65745f626162653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864623739313336323635396139363364890a6a3c70616c6c65745f617574686f72736869703a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68643134646366633063643733383864628a0a5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68663236313161356531643530633863398b0a3c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68383061313930323562656265623837308c0a3870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a68323162303634386539353230383939338d0ad40170616c6c65745f62616c616e6365733a3a3c696d706c206672616d655f737570706f72743a3a7472616974733a3a746f6b656e733a3a63757272656e63793a3a6c6f636b61626c653a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a70616c6c65743a3a436f6e6669673e3a3a4163636f756e7449643e20666f722070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a72656d6f76655f6c6f636b3a3a68386461356465643262323137393162648e0a5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68666566326665346533376264363637318f0a5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832383532343030393635633862353930900a6b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6836306666643137663635626466386433910a5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839616132666164396365303866303235920a706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6835326131383664366464323137393838930a706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6865623663306230333636363964323139940a3970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a6865653430376564623538393932303935950a4370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6830306630376562656462393731303766960a746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6863326538376265383230376262623831970a5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838386366393433353263663334396666980a6f3c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861303066323433303265653931376235990a613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a68653835316635633732346633316564359a0a6f3c6269747665633a3a736c6963653a3a697465723a3a4368756e6b734d75744e6f416c6961733c4f2c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68636630636164306131346633363565319b0a7c3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68613134623333353239616239316264389c0a466672616d655f737570706f72743a3a776569676874733a3a576569676874546f466565506f6c796e6f6d69616c3a3a63616c633a3a68343138666635613431303661333938369d0a56636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e31303235319e0a8e013c73705f72756e74696d653a3a67656e657269633a3a636865636b65645f65787472696e7369633a3a436865636b656445787472696e7369633c4163636f756e7449642c43616c6c2c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a4170706c7961626c653e3a3a76616c69646174653a3a68343439323538356230633932363863379f0a706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6837623562363061613432343666376535a00a706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6839663538323264336138663636663938a10a776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6862653537616539346566326234323331a20a3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837626431323762613931343735636239a30a3e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6837336335613565356664343236323730a40a723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838303639626338336630346663636364a50a6d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864346330626266323030663438313031a60a6e3c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374426f6e646564457261733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837303664653261633638316234363133a70a743c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374556e6170706c696564536c61736865733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861383566356330656561396265663836a80a773c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374536c6173685265776172644672616374696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830363735653131316463376437653033a90a723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864383563626436626431383833623066aa0a76636f72653a3a7074723a3a64726f705f696e5f706c6163653c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c77657374656e645f72756e74696d653a3a52756e74696d653e3e3a3a6861313936636364616664666430653335ab0a743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866333039616436396536386464376138ac0a763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866303734303863333563663130393265ad0a763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838613336363139623836653461396165ae0a693c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637450617965653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861623533396166346139383161323362af0a6a3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744c65646765723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862376231623035396132313932396331b00a713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374496e76756c6e657261626c65733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865343163363562663738343838623861b10a703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862636563623838343735643637363439b20a4770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6838366439346234363264383330623931b30a9a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e6174696f6e7344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864636338633638643032626638336564b40aac013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865666130373464333333376364613963b50a9e013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536c61736844656665724475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836656664373563393966623563353633b60a9b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834646235613866363335626632333430b70a9a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834306333636132626538333238643966b80a39636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6861353830313530636337363861376265b90a39636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6836623238306538306165383939373933ba0a39636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6863316666373830383263663836346139bb0a5270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f665f666e3a3a7b7b636c6f737572657d7d3a3a6832373439313264393561663030376138bc0a45616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6831323838326361633863326564333164bd0a59706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7375646f5f777261707065723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6838626436643633363432633636323337be0a4a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862333937383237356536343636366633bf0a7e3c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831626131333539336133386665383639c00a81013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a5f5f476574427974655374727563744e6578744665654d756c7469706c6965723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865316164333464366461623139353933c10a5370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6832663462363036366138616534653966c20aa3013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a576569676874546f46656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863363465333835656335316563393763c30aaa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839373237353239633633623537643333c40a4e616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a636f6e7461696e735f6b65793a3a6832393538306461333735643064643734c50a45616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a6765743a3a6834633639386434326235373838663963c60a47616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a656e7472793a3a6839306462623535316164613832303232c70a47616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a656e7472793a3a6839663961666535376563623333343833c80a5f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6862656366353834343133396265646431c90a6a3c70616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6839633734663536376464306264316166ca0a6b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6830386430306230313439393561613037cb0a31636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6863326535343066383636386233646263cc0a31636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6834623030643966633939383637393435cd0aaa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a6832613266626537333433646233646638ce0a5d70616c6c65745f62616c616e6365733a3a3c696d706c2070616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3e3a3a7570646174655f6c6f636b733a3a6838353839343664353435383133663236cf0a48636f72653a3a7074723a3a64726f705f696e5f706c6163653c77657374656e645f72756e74696d653a3a43616c6c3e3a3a68316239376337303739303835636164612e3131303738d00a56636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e3131303837d10a4470616c6c65745f696e64696365733a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6835376433616163346431336135376364d20a4670616c6c65745f696e64696365733a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6861323163386639356265366434613332d30a4f70616c6c65745f696e64696365733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6864343234323266316636306339656636d40a9b013c70616c6c65745f696e64696365733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866653662636631336464643333316166d50a4470616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6865303031353030663263363063396365d60a4670616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6865353631663532373463626234316534d70a4f70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863326231646331386436356365343234d80a4770616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6836383339623034336565383933396530d90a4970616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a73746f726167655f6d657461646174613a3a6861386430336537616566643764636435da0a5270616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861653334613464666639623836386437db0aab013c70616c6c65745f62616c616e6365733a3a70616c6c65743a3a50616c6c65743c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578697374656e7469616c4465706f73697444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835376137613238646234656634633339dc0a4570616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6861393730343538303837666530373961dd0a4770616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6864326339323662366138343835323236de0a5070616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831643138393161313838303930393035df0aa4013c70616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5265636f766572794465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831663866393534343539636461333361e00a9f013c70616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178467269656e647344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864376331633263346331663331666666e10aa8013c70616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a467269656e644465706f736974466163746f7244656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834623764346562303439373035653032e20a4e706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a736c6f745f72616e67653a3a536c6f7452616e67653a3a6e65775f626f756e6465643a3a6835313339626635303164316462373263e30a59706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838643666616263613535366461323837e40a87013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a73657373696f6e5f696e666f3a3a5f5f4765744279746553747275637453657373696f6e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833303136633966303430653665333162e50a363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6831343631323764373538373839316262e60a673c70616c6c65745f696e64696365733a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838376336613033333965323330336337e70a673c70616c6c65745f76657374696e673a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6834633237343762333762313632323136e80a683c70616c6c65745f7265636f766572793a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833643836346138633064346563383462e90a793c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837663765616666336438376163353066ea0a7a3c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832653639633933353537663335643861eb0a56636f72653a3a7074723a3a64726f705f696e5f706c6163653c78636d3a3a76303a3a58636d3c77657374656e645f72756e74696d653a3a43616c6c3e3e3a3a68623531316662313466303165343361632e3132333333ec0a303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836643065643536373738383938306437ed0a4670616c6c65745f7363686564756c65723a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6834653463383939663937306335643964ee0a4870616c6c65745f7363686564756c65723a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6832623136666464323465373434343639ef0a880173705f66696e616c6974795f6772616e6470613a3a6170703a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a6170703a3a5369676e61747572653e3a3a6465636f64653a3a6837656537353834626538386166383564f00a880173705f66696e616c6974795f6772616e6470613a3a6170703a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f66696e616c6974795f6772616e6470613a3a6170703a3a5369676e61747572653e3a3a6465636f64653a3a6833396135343832396337653864316639f10a3f73705f66696e616c6974795f6772616e6470613a3a636865636b5f6d6573736167655f7369676e61747572653a3a6861613131373661363331643430653863f20a56706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864636637346531303165366636396538f30a58706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863623861353366663538623736646636f40a61706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6833343665613439326461666566626562f50ab1013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61784865616453697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830643539353137356531353330373131f60ab1013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178436f646553697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832343266336630313436633539643934f70ab8013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446174614465706f7369745065724279746544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832336336343930323737346266666537f80ab1013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a70617261735f7265676973747261723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a506172614465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832383761646232303839303135343930f90a57706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a6861616562313136343730343435376261fa0a59706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a6831646331373662653137313938616433fb0a62706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831653934653531396165636532356265fc0aba013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c65617365506572696f6473506572536c6f7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836393832643061366163343837336466fd0ab5013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a536c6f7452616e6765436f756e7444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863646633643336326530336664616139fe0ab3013c706f6c6b61646f745f72756e74696d655f636f6d6d6f6e3a3a61756374696f6e733a3a70616c6c65743a3a50616c6c65743c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a456e64696e67506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863363330623564363064643532333730ff0a840178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4173736574496e7374616e63653e3a3a6465636f64653a3a6839313539303630313230663765396361800b840178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4173736574496e7374616e63653e3a3a6465636f64653a3a6836613237306437666264393339626531810b870178636d3a3a76303a3a6d756c74695f61737365743a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722078636d3a3a76303a3a6d756c74695f61737365743a3a4173736574496e7374616e63653e3a3a656e636f64655f746f3a3a6830383838663961336235633637393062820b303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831373037626131306330313638393939830b303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837643263393037303435336630646162840b303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838316635623034376263303237633063850b31636f72653a3a70616e69636b696e673a3a6173736572745f6661696c65643a3a6836316639633461373363323364666434860b693c70616c6c65745f7363686564756c65723a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832626639316136643262646261656235870b6b3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6863316236653835346531656434313962880b5c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830373538353139316562343533383935890b5a70616c6c65745f696d5f6f6e6c696e653a3a3c696d706c2070616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a50616c6c65743c543e3e3a3a69735f6f6e6c696e653a3a68616239643264626165663331393164618a0b4170616c6c65745f7375646f3a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a68633038383566383332633162376364378b0b4370616c6c65745f7375646f3a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a68373366333038396132656332623635338c0b4d3c77657374656e645f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68636237323432313536376565383163362e31333231308d0b7270616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a5f3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f722070616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a43616c6c3c543e3e3a3a666d743a3a68633435623331663836633732363164648e0b533c78636d3a3a76303a3a6a756e6374696f6e3a3a4a756e6374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68616630633531306531663431366137612e31333238378f0b3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837633466376433666136666631663839900b3e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839353136313563353432373432313862910b703c70616c6c65745f6772616e6470613a3a5f5f47657442797465537472756374536574496453657373696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834386434323632633933306433333465920b703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834323431336366316363646332613730930b713c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637450656e64696e674368616e67653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836353863373330323734636264353433940b693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835623131613031373933623833623530950b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6864326234326535326364633034393665960b6d3c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6831646138643635303533366565373865970b3d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a6831323538346633313839303262303132980b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6830343766306531373137353337333938990b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68666532303431383837393932613839389a0b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68396366393063616133323338326338659b0b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68623030306336353762623031366134659c0b683c636f72653a3a697465723a3a61646170746572733a3a6d61703a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68306135636337656230336139663835359d0b4670616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a50616c6c65743c543e3a3a63616c6c5f66756e6374696f6e733a3a68326335303833326663623335666565649e0b4870616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a50616c6c65743c543e3a3a73746f726167655f6d657461646174613a3a68363931363236333337386163313330339f0b50706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6838623331393838326334393864666431a00b89013c706f6c6b61646f745f72756e74696d655f70617261636861696e733a3a756d703a3a5f5f4765744279746553747275637452656c617944697370617463685175657565733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863626230356265626631333261343632a10b303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862663338656165666632366637363032a20b303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864363134656138643035353463363664a30b5f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6834636339663266623037326365363632a40b643c70616c6c65745f7375646f3a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861306437356261323565343134373032a50b693c70616c6c65745f696d5f6f6e6c696e653a3a70616c6c65743a3a50616c6c65743c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832353363303464613438363335366631a60b0c436f72655f76657273696f6ea70b12436f72655f657865637574655f626c6f636ba80b15436f72655f696e697469616c697a655f626c6f636ba90b114d657461646174615f6d65746164617461aa0b1c426c6f636b4275696c6465725f6170706c795f65787472696e736963ab0b1b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bac0b20426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373ad0b1c426c6f636b4275696c6465725f636865636b5f696e686572656e7473ae0b2b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6eaf0b214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572b00b1850617261636861696e486f73745f76616c696461746f7273b10b1e50617261636861696e486f73745f76616c696461746f725f67726f757073b20b2050617261636861696e486f73745f617661696c6162696c6974795f636f726573b30b2750617261636861696e486f73745f7065727369737465645f76616c69646174696f6e5f64617461b40b2650617261636861696e486f73745f636865636b5f76616c69646174696f6e5f6f757470757473b50b2550617261636861696e486f73745f73657373696f6e5f696e6465785f666f725f6368696c64b60b1d50617261636861696e486f73745f76616c69646174696f6e5f636f6465b70b2850617261636861696e486f73745f686973746f726963616c5f76616c69646174696f6e5f636f6465b80b2c50617261636861696e486f73745f63616e6469646174655f70656e64696e675f617661696c6162696c697479b90b1e50617261636861696e486f73745f63616e6469646174655f6576656e7473ba0b1a50617261636861696e486f73745f73657373696f6e5f696e666fbb0b1a50617261636861696e486f73745f646d715f636f6e74656e7473bc0b2c50617261636861696e486f73745f696e626f756e645f68726d705f6368616e6e656c735f636f6e74656e7473bd0b2550617261636861696e486f73745f76616c69646174696f6e5f636f64655f62795f68617368be0b1642656566794170695f76616c696461746f725f736574bf0b154d6d724170695f67656e65726174655f70726f6f66c00b134d6d724170695f7665726966795f70726f6f66c10b1d4d6d724170695f7665726966795f70726f6f665f73746174656c657373c20b1e4772616e6470614170695f6772616e6470615f617574686f726974696573c30b384772616e6470614170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963c40b274772616e6470614170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66c50b15426162654170695f636f6e66696775726174696f6ec60b1b426162654170695f63757272656e745f65706f63685f7374617274c70b15426162654170695f63757272656e745f65706f6368c80b12426162654170695f6e6578745f65706f6368c90b24426162654170695f67656e65726174655f6b65795f6f776e6572736869705f70726f6f66ca0b35426162654170695f7375626d69745f7265706f72745f65717569766f636174696f6e5f756e7369676e65645f65787472696e736963cb0b21417574686f72697479446973636f766572794170695f617574686f726974696573cc0b2153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973cd0b1f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973ce0b1d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365cf0b205472616e73616374696f6e5061796d656e744170695f71756572795f696e666fd00b275472616e73616374696f6e5061796d656e744170695f71756572795f6665655f64657461696c73d10b095f5f6173686c746933d20b095f5f756d6f64746933d30b085f5f6d756c746933d40b066d656d637079d50b076d656d6d6f7665d60b066d656d736574d70b0462636d70d80b095f5f6c736872746933d90b4c636f6d70696c65725f6275696c74696e733a3a696e743a3a7370656369616c697a65645f6469765f72656d3a3a753132385f6469765f72656d3a3a6863326431313463346632303534666162da0b095f5f7564697674693300550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e35332e302d6e696768746c79202837663461666466303220323032312d30342d323229", - "0x3d9cad2baf702e20b136f4c8900cd802878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0xf18c1c77657374656e64", - "0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x1874ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252dfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf088a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27114142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20494ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055000000000000000000000000000000000000000100000000000000", - "0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502ab3b5dddcee1b116173676e8014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x3db7a24cfdc9de785974746c14a99df9878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000003667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x07f00fa5d4e807f00fa5d4e800", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ae4de676650843e4706172618014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x3a6772616e6470615f617574686f726974696573": "0x0118246e3f7be6f048e264181b554f9c757d7dda482c9539fc3dacb6eaa23337acef01000000000000000c10214325f7202671017b9cdefb1d85f6dd478aa680405e2b1e242af057a99f01000000000000000fb248da64d4e817308eb0b3d7e79bd29381633670ac3a5728999abd2430065a01000000000000009ea8310d42b93ad9689215fd401107fd847b74923fc589730a28517f568ec5a20100000000000000ca9e4caabe03dd881fed12f6b432975421718a5c910434a0efec65b1f1bcacca0100000000000000a2ed6f765c15029a22bb26d01d1199d583a5996ec720f656238034ad2fd96d620100000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc60b97b56cbb2c018c82a0267369f766d574ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90cfdf910ff1816a4feeb880e83ff45188a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0x2762c81376aaa894b6f64c67e58cc650878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc65bc70584eafd6e66d28e5525fe7be5e294ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb38a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xca9e4caabe03dd881fed12f6b432975421718a5c910434a0efec65b1f1bcaccaf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500b6be79ef0b2647b626162658074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950965ab2263a70d7e36175646980fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x07f00fa5d4e807f00fa5d4e800", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204246e3f7be6f048e264181b554f9c757d7dda482c9539fc3dacb6eaa23337acef14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20474ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d0c10214325f7202671017b9cdefb1d85f6dd478aa680405e2b1e242af057a99f74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2710fb248da64d4e817308eb0b3d7e79bd29381633670ac3a5728999abd2430065a8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d39257350559ea8310d42b93ad9689215fd401107fd847b74923fc589730a28517f568ec5a294ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d392573505594ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08ca9e4caabe03dd881fed12f6b432975421718a5c910434a0efec65b1f1bcaccaf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659a2ed6f765c15029a22bb26d01d1199d583a5996ec720f656238034ad2fd96d62fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169037236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x0000", - "0xd57bce545fb382c34570e5dfbf338f5e878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe703669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe708a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da935788d89162342e8ee06da5d3ee2d974a0bfb0da95eaeaa88b500779b9d087b4690a1e70ca3622deaabaf6b6ce4f367a": "0x00000000000000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc603fa3ee2eba751e4b1e41c5720cbb89014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950954a3c254a8b41d26772616e800c10214325f7202671017b9cdefb1d85f6dd478aa680405e2b1e242af057a99f": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950b788c0873f55de606772616e809ea8310d42b93ad9689215fd401107fd847b74923fc589730a28517f568ec5a2": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x2aeddc77fe58c98d50bd37f1b90840f9878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195032c54674131dfa86617564698094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bfd147d4192200466772616e80a2ed6f765c15029a22bb26d01d1199d583a5996ec720f656238034ad2fd96d62": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000026f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x07f00fa5d4e807f00fa5d4e800", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x00", - "0x7474449cca95dc5d0c00e71735a6d17d878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xbd2a529379475088d3e29a918cd47872878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e38bff65dd0b1acb6261626580fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", - "0xede8e4fdc3c8b556f0ce2f77fc2575e3d9764401941df7f707a47ba7db64a6ea": "0x00", - "0xf0c365c3cf59d671eb72da0e7a4113c4878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da93a8000dff337e5d8a8345dcd998c8cecf0410a8bfb849214a1223f7c12cc9b54a5f953ff8a766eb036e0e97525b24014": "0x00000000000000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade983669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000007236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x0000", - "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", - "0x28209965b2f0bcaec2c2cb76ce61015e878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da910192dc549e74803430ac6fa47054148280765e264fc2b6df7a00356eeef0cf6fa7d9c177d41f146b5a5bce72bf69c16": "0x00000000000000000100000000000000020010632d5ec76b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20474ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xc2261276cc9d1f8598ea4b6a74b15c2f878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x26aa394eea5630e07c48ae0c9558cef7878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504a00134108f1ba14696d6f6e808a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade983667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950eb817273f28b61a26173676e8074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0xa05fdefb740500000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedcac0d39ff577af2cc6b67ac3641fa9c4e7": "0x01000000", - "0x1089acb60cf7c46d5f1dbbe708118d9e878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe707236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4aaa7f7882ccf0a7dca93dff431eb9099fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659070010a5d4e8070010a5d4e80000", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169033669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x0000", - "0x94eadf0156a8ad5156507773d0471e4a1e8de4295679f32032acb318db364135": "0x00", - "0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9826f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x00", - "0x1a736d37504c2e3fb73dad160c55b291878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195019a7b6960ee3cb1c617564698074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950324e20d31723090c696d6f6e8094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950189cf53a95b6176b617564698014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x5f3e4907f716ac89b6347d15ececedca878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000003669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x07f00fa5d4e807f00fa5d4e800", - "0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x18010000000500000004000000020000000000000003000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6aaa7f7882ccf0a7dca93dff431eb9099fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da903fa3ee2eba751e4b1e41c5720cbb89014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc4efe9126e5ca615bae91e2cb04495b513f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08070010a5d4e8070010a5d4e80000", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x0000", - "0x2371e21684d2fae99bcb4d579242f74ad47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20474ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195015cc49201c4e12706772616e800fb248da64d4e817308eb0b3d7e79bd29381633670ac3a5728999abd2430065a": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0x8970b20f9e5c79019eee15d7df90ec08878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19506825c163c04e9cef6173676e80fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xd8bbe27baf3aa64bb483afabc240f68e878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000003667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x07f00fa5d4e807f00fa5d4e800", - "0xd84ad3579da5beed16cea616d20c3c89878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509650383383deb9ad696d6f6e80f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0x5c0d1176a568c1f92944340dbfed9e9c878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20474ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xeada08cb3324cb2d601aeebe72eea973878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x06000000", - "0x94eadf0156a8ad5156507773d0471e4a64fb6e378f53d72f7859ad0e6b6d8810": "0x0000000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000007236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x07f00fa5d4e807f00fa5d4e800", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169038a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x0000", - "0x1809d78346727a0ef58c0fa03bafa323878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950196113b7ef840d1c70617261808a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509c854ad431a1009f62616265808a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0xcd710b30bd2eab0352ddcc26417aa194878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950dcf82b9e40c66b906261626580f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0xede8e4fdc3c8b556f0ce2f77fc2575e3878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002", - "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc60cfdf910ff1816a4feeb880e83ff45188a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x000050000080000008000000002000000004000005000000050000000600000003000000000020030004000000286bee0000000004000000040000000500000000000000000000000000000000000000000000000000000000000000000000000800000000200000040000000400000000040000b00400000000000000000000140000000400000004000000000000000000060000006400000002000000c80000000200000019000000000000000200000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0200907b984f02ca3000000000000000", - "0xbd8ca6bfa73e6c4ffe951833ec58a759878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501469402f70c04e67696d6f6e8014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x1cb6f36e027abb2091cfb5110ab5087f878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204010000000000000074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d01000000000000008a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271010000000000000094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d39257350550100000000000000f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf080100000000000000fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b80726216590100000000000000", - "0xcb772027f34ca231ee0a4890d0cd8182878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000026f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x07f00fa5d4e807f00fa5d4e800", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc403fa3ee2eba751e4b1e41c5720cbb89014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204070010a5d4e8070010a5d4e80000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505caf7de4328e83a8696d6f6e8074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc40b97b56cbb2c018c82a0267369f766d574ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d070010a5d4e8070010a5d4e80000", - "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20474ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690326f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x0000", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc45bc70584eafd6e66d28e5525fe7be5e294ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055070010a5d4e8070010a5d4e80000", - "0xcd710b30bd2eab0352ddcc26417aa1940b76934f4cc08dee01012d059e1b83ee": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000003667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x0000", - "0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6efe9126e5ca615bae91e2cb04495b513f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x047374616b696e67200010a5d4e8000000000000000000000002", - "0x3f1467a096bcd71a5b6a0c8155e20810878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0xf0410a8bfb849214a1223f7c12cc9b54a5f953ff8a766eb036e0e97525b24014", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169033667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195017b396fa516d9ff9626162658094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95bc70584eafd6e66d28e5525fe7be5e294ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000007236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x07f00fa5d4e807f00fa5d4e800", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500c8f42778d28e71c6173676e80f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195054864c2b13d375496173676e8094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x94ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0x2f630d6516d2f695670ea39046ec950b878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc40cfdf910ff1816a4feeb880e83ff45188a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271070010a5d4e8070010a5d4e80000", - "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x02000000", - "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90b97b56cbb2c018c82a0267369f766d574ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000008a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x07f00fa5d4e807f00fa5d4e800", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000003669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x0000", - "0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x1874ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252dfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf088a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d27114142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20494ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055", - "0xca32a41f4b3ed515863dc0a38697f84e878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950001cb0a818705c0c6772616e80ca9e4caabe03dd881fed12f6b432975421718a5c910434a0efec65b1f1bcacca": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x10cc0d1d899437204779440e0c2f9a653f4efe935b96661fa23a45c2be06339742d49250dae3967d60a98665301305b43ffd1c9d79a26503a444512aa9103b4f53d48719c365a552dd1bdb4ca6f19d683e595ce7960f5801e58885d9680ae18b15c6e91e92670760ad0bee3ad9340d19767d42219f7e17e2dbe5bfa5d4c12ece00", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000026f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x0000", - "0x5f9cc45b7a00c5899361e1c6099678dc878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x6ac983d82528bf1595ab26438ae5b2cf878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000", - "0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b6b4def25cfda6ef3a00000000": "0x1ff3ece9c45f81ecbd733b246876a22ccd8cc4bab14204b9ef212c7e10b63bc206000000", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7026f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0x3f2fffd5286bc488d30476fbc8623a92878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba0878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade988a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x00", - "0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x1814142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204010000000000000074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d01000000000000008a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271010000000000000094ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d39257350550100000000000000f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf080100000000000000fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b80726216590100000000000000", - "0x2371e21684d2fae99bcb4d579242f74a8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", - "0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c": "0x54000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb326f1ada21422d71274ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x0c10214325f7202671017b9cdefb1d85f6dd478aa680405e2b1e242af057a99f74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0x3fba98689ebed1138735e0e7a5a790ab878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x2f85f1e1378cb2d7b83adbaf0b5869c2878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000008a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x07f00fa5d4e807f00fa5d4e800", - "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x05", - "0xa2ce73642c549ae79c14f0a671cf45f9878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade987236835e46b36d4194ba99e24f8894828efee3d1f249a946c3b7719e4e93c54125dd1d3925735055": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb33669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xa2ed6f765c15029a22bb26d01d1199d583a5996ec720f656238034ad2fd96d62fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x246e3f7be6f048e264181b554f9c757d7dda482c9539fc3dacb6eaa23337acef14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c20414142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0xd5e1a2fa16732ce6906189438c0a82c6878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950426cad4d95ca7ba17061726180f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0x2b06af9719ac64d755623cda8ddd9b94878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9aaa7f7882ccf0a7dca93dff431eb9099fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950243d701e03b2febd696d6f6e80fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000008a58b1031f696b47f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x0000", - "0xd5c41b52a371aa36c9254ce34324f2a5878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e41eb8ebf726be447061726180fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0xfe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659", - "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000003669bc4e1eb08e09fe0b72e5b83fe7133f29390278d8aeb027ca8bcdf0e2d4b317ba4b8072621659": "0x07f00fa5d4e807f00fa5d4e800", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505c47c7e5d6ae41616772616e80246e3f7be6f048e264181b554f9c757d7dda482c9539fc3dacb6eaa23337acef": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9efe9126e5ca615bae91e2cb04495b513f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0x00000000030000000100000000000000000010632d5ec76b0500000000000000000000000000000000000000000000000010a5d4e800000000000000000000000010a5d4e80000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe703667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0xb341e3a63e58a188839b242d17f8c9f8878d434d6125b40443fe11fd292d13a4": "0x00000902", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb33667f24c5fd2e2418a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x0fb248da64d4e817308eb0b3d7e79bd29381633670ac3a5728999abd2430065a8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d2718a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000a23fddb395bc252b14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x07f00fa5d4e807f00fa5d4e800", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19504b9d39a850c9ed206173676e808a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950c22d36a0e1ddca9b6175646980f0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08": "0xf0b7c17d36cce99cf38682f1be65153baeaad26bd5ef26f4d82c52926b4eaf08", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19505c99f61c74bbe1ef706172618074ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d": "0x74ad69ea110e44718622cd00d3330d99333039170fa3c28918e986862a4e252d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195077d269ff5f69eec9626162658014142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204": "0x14142e35598a41c66b3d2c67c822c8ec4c1b9c5cce9ae29e47c806dfcfd0c204", - "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x0000000000000000000000000000000000204aa9d1010000", - "0x2099d7f109d6e535fb000bba623fd440878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950eb35bfc55d0349a561756469808a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271": "0x8a73809b840dd4ba9066226596531249bfc389417bf90f2ea41bac1f70e7d271", - "0x5f27b51b5ec208ee9cb25b55d8728243878d434d6125b40443fe11fd292d13a4": "0x03000000", - "0xcec5070d609dd3497f72bde07fc96ba098ef7dc060436e4ed803af07632b89b65153cb1f00942ff401000000": "0x1ff3ece9c45f81ecbd733b246876a22ccd8cc4bab14204b9ef212c7e10b63bc206000000", - "0xede8e4fdc3c8b556f0ce2f77fc2575e313792e785168f725b60e2969c7fc2552": "0x02000000" - }, - "childrenDefault": {} - } - } - } \ No newline at end of file diff --git a/specs/dancebox/dancebox-raw-specs.json b/specs/dancebox/dancebox-raw-specs.json deleted file mode 100644 index 938ab4f..0000000 --- a/specs/dancebox/dancebox-raw-specs.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "Dancebox", - "id": "dancebox", - "chainType": "Live", - "bootNodes": [ - "/dns4/fra-dancebox-boot-0.a.dancebox.tanssi.network/tcp/30333/p2p/12D3KooWLfKJTksB4ayLje6U5ENYwxomGcmY3hRoSYdhzVhf8BPr", - "/dns4/fra-dancebox-boot-1.a.dancebox.tanssi.network/tcp/30333/p2p/12D3KooWFyBHEWLY3eDHWWgCKEAhkbqhsWW62HftDCfM6uqxnJKZ" - ], - "telemetryEndpoints": null, - "protocolId": null, - "properties": { - "isEthereum": false, - "ss58Format": 42, - "tokenDecimals": 12, - "tokenSymbol": "DANCE" - }, - "relay_chain": "westend_moonbase_relay_testnet", - "para_id": 3000, - "codeSubstitutes": {}, - "genesis": { - "raw": { - "top": { - "0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x64000000020000000500000002000000", - "0x0d715f2646c8f85767b5d2764bb2782604a74d81251e398fd8a0a4d55023bb3f": "0xb80b0000", - "0x0d715f2646c8f85767b5d2764bb278264e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x15464cac3378d46f113cd5b7a4d71c84476f594316a7dfe49c1f352d95abdaf1": "0x00000000", - "0x15464cac3378d46f113cd5b7a4d71c844e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x15464cac3378d46f113cd5b7a4d71c845579297f4dfb9609e7e4c2ebab9ce40a": "0x08caaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b657682bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c4954", - "0x15464cac3378d46f113cd5b7a4d71c84579f5a43435b04a98d64da0cefe18505": "0x00a0acb9030000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef734abf5cb34d6244378cddbf18e849d96": "0x000000000000", - "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da913d9870050e47c2fcf0d3a4c2161712174650361ad542d48e68e6363b4c4b03587338ba2d375e73ad7eb4d0feebffd42": "0x000000000000000001000000000000000000f444829163450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9141f151166ca74a3f06b377f9d68548dcaaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b6576": "0x000000000100000001000000000000000000f444829163450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b36fb437d8b2779c97e58cb90b8f589e82bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c4954": "0x000000000100000001000000000000000000f444829163450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", - "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x91012064616e6365626f78", - "0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3a63": "0x", - "0x3a636f6465": "0x52bc537646db8e0528b52ffd0058e4bd04fe9b0518114d108067930e70a5d1bb4f3bff0397f3ff41f1995fcfef1b8e1b7987f288184aa1864a88c6ea1154adca8ffab4d8c2eac01acc33841c00d4a5b6b7d5a9f8804bcdacdd84ec2dc9965b4a99524a012b123c10451095afebb45e41d8abbd7a36cc875ca7753824f52ba90ff59f74b2c9c625b5b6ab88aa04d67c92de41acc426e743382739772def70de05f18ef4ce3136b13be79cab8dcb78f42445545d555d22511f4d126c9a2e85c6879f6a4673e71474fed4731d364dd8049b2837824d354fb9126cd2a77c089bf414032e9ea269aac562938e9f343f8978caf5825c72aec33a224b0acb66e1297e52194f79545e6d51cf8679a59c864dcd29ca29571b2ae3512f8d25aa12dedededdfd022edfddacad495425b075768ca443e10bd8785e5602636f124907d634df15501d65c1a675e5d9317692f2d877407402c3a28aa213585bd71b7004b14f41fdfd5df3ecde8e595ceac102402fd8c217a2c04216b628014b0f1dc5b4d27b09874d7a824195671f824dfcec4658399edddacc7a3dc1c08a6f7aea28513d807100a25a00638fa21fb4d7d30bac78cd11e70eac8489c31d86c0850b3dd48aeb6a3371e4c6dde6904b8c04c7a8d78f974dffe7505f4ce352367f3ae42436456fd7c1262a525595cdca435e518d4b189ba8cadb2325f763c525cbf7fa417a2b9b96879c92fa96fce9af3c2eebb68892fa51ea872aa95c72d51d53c76f369f3b6f8fbdfba4be03d6a1fc71bf59d4c816937fae72c2bef4c5ac6bbbd4c558ed94432e5159ab845c626f72eeab3ff9d3afbe12e312fb5e3b9ab94cbddd62d3babe774e0b6a2f298ffed03a1bb4b73c025b87ce21f60229cf4ed3729f04e5f4ec3a9a3c025bd7fdb64ca2728c6a01750fd1b9da4ccd22a15c5939f7d7637721c2cbb3db044184c3e18820824d931401364dcc089d369e1d024790da86733c282828a8077b109cd382828282a0f4601f4279f41c3df3f01a86efd9303f87bcbb7c681aef3c3eabaf1d28cda2a6380b52795605658bd8de3aa7ec5c0340e47ca43c5ca6ba63b74d009ba4676f6faec3244fe34b6cd2930bb43c7b10ad35cb2b0080dc3e2844ed00a627176079f77a8ac2cb6b8c19db1af6131d807569d4fb03d34b0240df5a0633dd85c0121e20c48c2fba55d9d952e7eb08a0e7d1acc7c9ab4ff655ec095198f17a8a828b9ff09b17e0f51405946f6f260cea32aee5ae2380befdd87f3e81fe6590e58c1ace63bb765c5f47007d3faf79998ffde72fdb579b96f16053a20378d6673befca9930ecaa8fa83f303635d7ec9cb537f77eb0b7ebb0b2a9c6077b7bbfe99ca7bdf97b0ed9c4ff4e517f60ed37835c6ade3c8e18d0e3e49b8a202af708b2a99dbdb9ea5e470035b9af577f202a9b5865540360edad8f2377cdbdfc4a9f7d76f696cdf5dae95927f5d482365e9f654b7d27af6639a9a728b8bcb2899baf4336edaff3b5b3d6ebe5a3659d4196406d178ca8362dd8d2386c9a46389bda8d6053f3f620d804bf1d2365b1f9b660e99b73b0bed1c6261ef6751aced1bee916a35cb2b8b4de5cb9b43ee1ae2b67c9d11eea169bf4d4822d5e7d2ff6e640d85bd6b8b4aec3eced6ad3198f9ed488ca515d6de6063d2b0a303d45e1e237e8d523e7a86c02e369d79f1bf4f3f514e58bdf5fdf0b8985e2359b1bd45ce592f6ea4d0619bd7a4b551eb3790d90d0b7ac67f4ea8ac6e3fcd4303fdb595f656c96ca8d025bdf575680fa5e3dde837d67242e6d105fe1f4a4ca93a09ff0d9dbf3741b88b1a08bf5d3fba7e50b14d566e20cc1f4b4822aafa715047d025e4f5088f17aed4c009b980e63189b9cb74727f55bee473500b6ffda72f2f95e3bfd5caf2380fec5bd80387fd974ee3cf2b5d3b8d45caf20a3771e9bd5723fb6f5a4f3bd944b93e6d763d4eb6513e89fb79cd079b79ced9feb706c3921f0ed512f2a9b4c9ef296534fdfeee4542e3171a289214a7cfb542ecd24be7d3a572ecd087cbb4e3ba94fc99e0e13260c9877de721af1cde35a2d9b3ba9af1712d4f7933dd4bb6cee77d6b361c28409f313e8db9b845c5aebf76d6b415425b6e000a62728baf8129ba6e56c9aa567670f026328ae78b679fea9c3475016dda1afc3169bd4d971d609512f3684a22a81e92928cb439215af8eb1494f41585e5d07cdabab8d2a0eb6aeae558cca26dd8fa3c62676f5b8313e82aa7049bf9bb7b3f3b5c3996e8c8f202b5cd25f6f1979af75bd5ad6a2b3944dfa13be7a6c8be53e5feb7b412eb5eb1501fdf56b875d87970c519fd9973903da0512d7574e009bedd9e13a84da39ca3713fbf589fd84cfded8c4bebb446f2fb7ebf07677f77af7323b7cce6a82b037e705b2ced9646fde1d23aacdf4678f2a0416d500987abb5e3bea7bf96012141404c56ba65c9af01b9bd8b4ca25761d6ed9b8c4be036b4e62933ec626e5d26cafce4ec3a67676129bf6d9f5dae9269700f14a80e0afc3dfac26c87af3f596fdec77a67aed6c36d786331e7f050050ef8611f5d56662cf1e219b660f336a60ebd37a2600b6deaeae1712eb3c9d2997d47538aee43ffd9277adb5b2ffb29487cf6ef9259628b2b5b2bde5e57ba85f227359a2256fa43c7c36e87b1cf0ebec7a01694141bf40b0a05fd7611db6d8a4cf1ed752e5b13edb1b97d4219be67ebb7a6c09b9a47e83b5abebf543b9a4de19e492ba0eeb1544c3fcba0eebb04ae592bada70c683bd02008897c3109567bef880942942335a66ce9899c28c14664e33549869c28c1366a23053652608334098c162e607333798c1c18c0e64ee20e3051933647a2093854c151928324290b1420607325ac80c4106093251c85c219303191dc8dc40a60a99293254c8d040e605323c9071810c0c464f64a8c8b460344524079923c84419b540a60832449091c1e80b232f8caa300263d48591969112465c8c923042c2e88b11154653185519616114c6088d111746678ccc181d616465648451114644186d311ac2488b91104656184961741a79318ac2080aa32e464f183961d484d1951113464b185119f960d483d10d463c18ed609483910e46381855318a327ac1288a910b4650446d1079116141b486688b280c5114445e88aa8874209a6244c56586ab0c17978b0c3235b8b47069b9d0b8b670a5718de102c3f5c5e5c575baa27051e182c23585eb099617ac2e5832b0a2b42f3435ac332c2e88a42c140b063241a8dab8e4101a2324c61507eb49e412bf8854885388558860442c585ab0b25865342c8466107510a222f620ee2052a9d250b151ada182434505992de00f5a19da192a183432c430bd450fa1f9c00aaace10ca820505af11db683da8ca10ed10ca52795145a12aa33a5553a8a450c5a079694c683a585a545a503d8067c03a886c50d521de6186081717ae2e5c62a8c054737864585b5817c026545d545fae2d4d03eb05950e2a1e545758310869a1da01c442e40637859301650655c6e807d4199513aa3684b02032c296a192c1d352d9e16ae38d2144836b0da22b324c8060ac31ae2e2a3988c05c58e8225435b05c2023455b7965342c46347861cc64213a02e740468ab5826a8df603d1192e29cc20c162818c95ca0d7d84ca06951432769069c349e1a25054281eb8a07786d7e599e1a1e195e1a9e1a5c1d1c051e166e0a63829ae06ae0ab785b381d381bbc20dc1f5c025c121c11dc111c119c1597145703c703f70387059b4373820382b5c109c168e8aabe276d0be343834369a1b5c0e9c0fdc0d1c164e084d0c6d0c6d8b68060e8a45c21e61adac11b6084b84dd6287b05aac10b6ca66b14158202c16fb83f5c1f660a92c0f7607ab83bda2819151a3a283a80cad4be5a59981af685c64c2d0ae08b5c0ca824546232334a5659131423545a42256d1b888759059421b41e6ca4c129a0e2019ac1634114261c02ab10691060d8a3865c68b0a0da1322a28fa09a23488d0308a0187e9271c077e03c381d9e815f01706b3666039b494aa8a2a0ed5944a0d55948a062c83110c2a299519aa19bc3164a67862342ad51b4640186111226334838a8aaacb8c0f446a683c086d4114a662c3db025c036443538388056d8de6459b423bbd336019e01ad00ccd0a4f0b8f0b6d871683be83c5032b0a8bca434324c5f382258505c59aa2aaf2baf0b2f0cc78596017500a100ad71a4c05df8069306305d7806dc033602b5807bc0311156e01bf80a170142233b00b443d5827ec94a5c382d9396c1ba225ac17443ed82fec95e5226a82a8cb6e61b5b0686c196bc6d60189cdc2da2089bdc1a661d1b05688ac887eb03028c1119e6984080524b04f8e60124448083690010c0039c1b6c0c70e044c0fe8f13a0d30a2081e0b50c046d91714a014c40034d0c888fbbab08d8abb8812222210e20491224d081112b7994052448890d00503d1f50255c0058509234288f81071e2046f4489122444308073b940951461220912213f49928800c7158512f921c28410254694144152840439ae16a812223e449cf021e2f3a3c408098a58c087eb892ab9b95850c4e7899f2746c0e35a81121142c4878813427c92f83cb18410234efc0f922225404202234a94bc4f92222e2834c908901811b2849024234002e4c891240ff859a2c89123491e50802b488b2c812409122144841871e28b2c812409057e903c91648925de072b0c13499628c20410d61d54c9098af00851a2e4044582204962448992221790961dd404469c789f223c3e49368084b4dad0223f4498307284c81221459e28f2440530c0441112908008060a60d54195f02c51a48925e8a04a7e9014f129d20412236ecd01899111d458607409234a9018f1f9615244c8098e38e10411213e45983862e4891e3c4b2439d24387250755d283150725224487f5454b2084c80f112688fc1499408cc5060a8c1c2162e4c7081223372c3828cf12498e884048919f279628c2a4888cf506f549f200cb72832a2962e4c7884f92267e9e203263795124498cfc10f1798209213f498e281162c48927e2f3c4dfd02d724404447e903c3102213f4b14f131c20412234284e4f8815203b5a50a4165bc02453d0505fd02758ed7b2d0b2b04e2cd5dcf5d0430feef83556b55e73e3d6dc1cdc5db59abee768de8310aa6aeb6e66bd98b5356e1036d81ad4a74fdd7bef69ab32c3eee6106ced5a9b029857b99b6a4d45e647c1668bd982b161105a577bacefa976ab3e7d8f1fc3a7aa2d07d4f7981b10f0bdf7b8b5be66eef6de53edd6dcdd54bbfb697337a8fd545bd31e823901dad5eb066184b0316c86ccdacccdccafb5ee6edbad2a6215ad0801a27680d6625465d8da75b5eb6aad636486b0c106193237f85af5ba62ec56e6d79a21845055951b772b6cd731ca0db5b1726b8b34bdbbddaa8af36064ab1b8cfd03e4e6e6d1683462eae96be5566d996ee5a7aa1a7ab1356eaafcba59a36a6b1a0845cddd4bbd568ab5356ed75c73aa8ebb991b776c6ee6667e9095757795216408616bac2a72adbbf9313fe5a7bcaddd54dbaec25608ad76e1680d7663d70db961dded1ac3e65c6b7de3c68d1b18d6cfa96abfbed11a338b5815881c39b6753b6e0d367754e6c7222174bc6edaddaf5bd3d6daacda549b45aa8ffbb5b6ebd6ee66556d55eda7aadc5ebbd7addd5a6bad21dc5ee6065b5555b99b3655e6ee0621d4f7de73aaae5b555bb5b9c6fb541b427d30f60f9476370e75eb1e736bdb1a2fb7d70a9bbbbbc17659b0450c5214c50cbb1fb7d89aaab23ee6eee6f60cf09e0f10f27b70d7edf0210847f3de73efe9280001d8d13407dfbbb8b9fbbdf71ef37b23f79ebe47716bb1716bcdfababb9beae61ef7d3992f66aad032ca27f0495282222578213d409125458e086142a40440dc9020c9112124406284042448722487cb3029c204122342901821d2c412231841926c08930f4c9298e0e707930210e0330838000990186942099126bcc444119f224cf82411625200028420a0080f9123221052c488cf0f01b604aa0728e23302213e497e882c91e4c811223a4a60e407c9133e990c1123f879c2071926459a10f283c4888f1342965062a4043e447e06109363d403cf12444470e44812020ca007d20fa41c333a2824498cfc2c41440912223e3f427e8c94a004494a3c643235488a38e104111d08008000f400457e88f814415284043e01a8140145942829e2e34409922c21c4a7c892244b14f111424409134b141172001e930210e0c4124594e4d48cc0884f912542167000052800014c141192e4c78913f82c0180041c3962840727004a0660a308f8499204004c1029e2533a41111e213f4c8a200982879f22241840a60750f2a3c408932204908a0026464650c4c7099c25488a748c1e400892244694f8145922c4874891234b08294202223e497e940861e28891269610f273e409222328c284901f26456e962029d225ab0cac4e80180808e8397102d415d0c8899306ea21403d04689d00f11075b240404e9c38694380d6891376d24314c889132740402e0e015a2027403d449d3871e204c80d512740403dc4095035c4c93a71121a02b440eb6487a8130682439c387102440d01da37046875889305027243547908d002010135501ba240403c448180807a08d002ed1005da21a6ae6255754ba0848806fe1cbee72a67d4a0a85d6adf6601527aede830f59cf2e754c64339fba42849c3254835d2430821840e218410565505f90abb1dd5f18e866fdc0ed60536fd9d8d9c51e33dbe18670c56b67802bc9eac048d61042f46f8e257795be4a35fa180f98852c07e8856532f3270056cc26f8cbd1d5a930402e74ddb7d814decdd72b726ecea345c02039ba367ec578c2cfed0df1ffc9b9181ad2b8ec537ed3a850995886aa3d78681351d6ede2810b502989e8af0e46d5e4f5b6c793dcca881d500692ee371ce3e1d251b97dedbd91306861dd8f8e76af3881003b964bd3bb0e1af6b84c1f454842bb3f4ea5d042b51d70e989e8cc0c537236cf1adf9165bbeb90ef6d71feb3eb30573ae5c9a41bcfacb944bbc042c8630e5f5a44595c75e4f5a58f171a4369457db056ceaa999d89b43804dedcd23005ff4e6386c0aad934818a62f886f229f43fce52129928d4bee722e4b5c5abf648cd292d0c655957355f3328c4beb0bf41455f3329dedd7a6c56d33a2b29735b60dd8d42dafae3b14cbc4813d261141fc24fdba2a8ff6fcfcea3aa5ced1934e0fccd003213c41c31ca6e851805fc73a87023770011b589c90052f43e8b11ed500187c7fbdd69f4a549bd9bc58572572f515834dd447cb9af982bb0d9b7c7ee0376f2f0581b35bd814f2f6e5b25d760d3661debe5e3a47c67b0836c5783b116c1a51b27d6c5790e6a36cfa5f1e232f17c97dcb8db2a92326eb2afaee22e9e5ed7d056917d4f2ecd041f82e1fd4536e49e84d2e810fb1f8d9627cfbdc369a0bd956b8d47ec9bed285ec1397da63647fc1a5f6916c2c5c6aecaf6cee5fdee4b4be79ac24f4aef2c35fe496cff6cd954d95bf2a9ba2ac46e430b3dccabaca25ca602fe919fde5a3262fa9df56bac062c696351acc13295754e1e2248696c6854dfced51463e2182c8a3f01e4468ed0a7279cb66f6cf31b96f3561175501f3227f5790c6229b345c6a176598d40f5d5812f80272edf8fcd0af1c93fca16b6794a90a319fafef15845de47a0551c13fef2a6c1279bb289bfccfdd15e4ca1a0b2eb5bf6c2ed90fb925b74a97670f5d4146bf6e49fdd04ecc7a3654c93e82ee68af1ccaaed274759b1335d99c92fd4f36175c52810ff72d6b2bbaa39780cda6f2edb3ad7c7b53692cd854854ddabc8cb8da22cef8ecea4db3d62e1f3e2280716bd900d7b8d45c6a7d97cdfdd99c845360ee87732d3dd79735769d7e94bb6b87da2b02fa2efbb982bcf67abdac0608bb7376972de16729f4f67677f77af732b3b756e308ce37fc7e2037b438630838478c8881f2c50f8e1891c66cbf3270dedafff0fb0f3f100e0a6af287dbafb705c3f2d51edbea61060d98f732b13b7aad73deae25c5ce7dedf06e1cb2e0b29b69fb4a4b2e81e9290b33b218e397c0f444c5ca6b1657f8767eafa72ca8f06cda33e02c14369a9b549a26e473e63f2d1bb8d7139553dfa8ab480fd09a6c02e3693e809f0ec839f9e6b39a8092e15d960574ae12ba934dba3e82971e300b5232a4349fd5b7eb749303f8b87a756000ef64811cb316541b8aef6c6e50f3964bdab776d55655dda1be39887a845580d8b3cf53da78cb9db354b2cfce5704f4ab8c67bd629fd51dce7fe0f768988fce970fcb43a1983d41fa1fd26fa6bac371d5a4b9b5c65b5e798ccee290572c27d0b3f315a4b9e57a01a9dc721dfe4179f495d12b69795f41a0ef4ece5677ac571ee5e46a09fc9ebe43d0cf02bd6535ac362fc0473501d6fcf9142efe3995841234d852d35df3dc6d4a439af002c40f6b3817049be6f392ea35815118fee8147a47c05262089b9c6239824dfbce718860939ea8b8a2e1b41ac5f2ce954d353f95cb3b9f1feb42c289a79cd57fdeb30d9b9cfbf05e41843ce59072562a530d42b36b87e7f97a0cbd68ede5e3f9cea59c25cc28f9e404fac73329577f17108a722a9b2a7876fd97cd7d66d91e97dbd983eccb82ac33894dd4a3c1957fd23d77be50fc84ae7a8272c268625f3fa04f1500597fd964281e7ad4a0a7fc4948c9f95c5da71f14bfdc5eaa19c46944cec82f57a76153c8555d87dbb009ba7a894dcf813e242f871228c6e83a6cc91ae855132ddffcf2a84e9ec72e519b607a9a01986f1e9bc708b4965755f4b8d17bfaa347e7a90942b96b94880a4289a8e8d0631572fd2a94f9805e7955e59b87dc8a6f3cceab6cee536e3994fb555f3e42a15028e3713e9b2b01424209d05bcef31c89e654369f5b59e53afd158cced2cbca6693b7fcc9d9fef9483647a17a80edf164e451a81ee0f9f6d0694b46673dd93e92da03ca2055c67379f3cbf5da99d9825dde2ffacbe6e531ab894eb90bd2fcca6a621604fa73189f0c39c503211504521048f32a9bcfa3c728a7e53595eb477fb2a6ca7c388f1e9febd300ca378f1ed9e20979cce6fe7c6e796c2b242d9ffb963b1fd12bd70b48cc5477cce8ed55a63b66e58d44f398cd903f8ffb6f7f5fdfcd218c78756d686d110cc5ab8b9487be3a0e114e1628c4560c6640a5b30049b9420553b49182f595fa629cc0743daaaaaa8adaeb12995755558c4b0b990891bdb15c8f4ed6385766e7fb648df37dca63b358ea8b693e806fa75ca573d6a74f1fb5ae6fd3f895ec947caed34fba8f4eaec75d82ad43d1966b967316cb75b7f304b61edd7ad44795449be13cb70ce3d200be59ee03bded31a2ee0ab0e6cd028c8df07ab2411d9e79f07aaa228d2fbd9eaa8802e487055e7e0275f17e3e31832abcfa685980f5145e4f5754e1f78bd7530e56f041bc9e70a0c55e3f42636cf99e21ef6507dfe344f4f3670c6a9078f0f3a70a0fe2187efec4600ceea7922e28a1004ec8f253c9952caf3028e855c3bcfaab7315b167bf6179f9f25b36573f80e9898a967768587b4da09db379eac11adfbcadac09e2d0f8e60e8daf59d76f57e79da904e89bbb963d1a264c182ebf6e0d1f4e3a34bec9253736fbe120de32325f3f36ccf76c1897d500596fffb1ded94fd413952effc3efb2c9be64bf1de8e5b794cf3ff1d581dcb29729a0fc8eb26fdff5c9ae5e849ce57a48f25c3fd8974d80e9490a300f9dfdc773caa19c94f3540e3db29c50d6446fdfce2d6f8f21c91e45b246e4fa13e8456ec9190a653da35ff2c32f72be648dc8f7471e9dd5ae20a330fc2e3a5f3f447ec9915b52e421d9d625dbc7665952bffc25fba3b32ca975f84bf2c7c6ab8e6a6fe43acc6e49b5c35fea969ba8268852214c9867ef9f405d04055952d3f8906419f291bc74f8924e79d8a1f711405e40d7ebc73a84d0753832bbfa5867df0b083bf42892d1e35a22a96cf8c89648ea1b3eb62592cac6c766856474915442fd127e12f8ec4777507cf4f8ae255874bd9ec0628b1ed5f56ee3dd0700517491c4f990d42f8256f091aa9ce3e5aa3ba878b9159afd955b9545551ea58f75855c87af905b95535528530da2ca28d76167577f312ec3b8d4b2ecafa5aa505555059df2aaaaaacad5a6228384f286d7bd78ca2b97587750eb94ebc5bc12ea0eca5932c104d6bc521e3bec14e550798021fed01f7954a952bcca2948ba43d755eeefa53b4696ee1839cb2530915f6e79f425b090570e9df225b0e76ec21ff9c82de5c13ef24b79e88f9ce5e88cd81e5b8e80bc1fedcf7598afca99a177e5b01b56f1416fb9641f427fabdca26eefcc5f8761c6039d72bd2600ab6c027db55513d8ddd075baa7c9f33ae49e7e86ec3a8c0463df38526f35edebed2c6bda5b4640e7558398946f646b296fa94f39057d7e2c271eba5e40863c74a83f2839a1f3b4531ea1cc7c7ad44b50d0ffc87cc8bb7fac0f3974bd9070e22bd761287d7a1cf0ac3bda7fde43fef64afa40ff791f72bd8208f9ca81f8caa1ec71c0afeea8baca548368bf7c386fdf6b0742b9ce25277fec774b8c4bea4070292fa2ba98761e5d7bdc8bbd47a4389b40cfdb845255754a7f654f935faaa75faf751d8ea3cd54ce06e1aaec6eeea1c28409d3c6432456f6f4c3aca79deb734a4eca97607fa40541f193bd876a038a30bf04ce8aa7793b74cd585aec4ba81e9f25d42b0152d76995cff9873fe4cf4359cfb6f1ad923ffccdb31a207bfa76be76da9fd4b9febce5127e3c9f67b3a7c93777b35d3d023db514cc669387ce729999a1af12a09ef6a1cefe7afadbb78ca783b420eb9df1a8b3560b69b0841d22118c2f29baf0211811e5b1ce8d6dd06b1ce27a1ce9eb60d373cbd515e72b0db9f2d8b7a40e36e1bcfa031265f4d83abc527faf9086bc1aed47bd76f4c5605c0a79e5ea7bed6c36817e5556520797d44332ca25fb73bff2954bf6abaac5e6ed166dd6d35fe3a37f7d33d71deafb5156190ff4e8edea81ff3c5a71a42ec6f2e695ef95046baf328d504ee855289b401fda9d50cc66938fbeb292cdab41ac4f090079f1aa41ac57aed33d4dbeab0ec99efe76ad24120cfb761d66a94fc91dff2449c6b5a09cced72959b359cffecb485f04057d019eda8783d852be79cb26301ee703f8e9b28dc2257d3d4139c58dc226fde64594870fce67a10ea466f075d5ec654fa2d8d1e33994991e51d844f3cd7b984103368ffc46e152739c3254407b3c79beaec323c0e646f9e653cbf0cd9ba8637df3e50a26f0800956b60405f578de7aac0c6a4390e2072bf001147a3c8962478f7528333dd49f44c13d2887d2801eeb4f4269408f2644c0c07a9324faa6f966f9e6cf9b10010394bfac894edf34a7b22644c0c0f3cd9a78df347f198e9e4eeb53b3681c5c70852cd6e0052dc4a005ffe6335d30ed0154851850d8c10ea4a0050970e8a13dd427ce37d70b031e14d463a3b06900df7ca530372a5195c7c4011a9942cd5d6b4ebe1d19be656e3eaa39952179d97c7ea48fe0e55df67c76369b7c6ba9644cf12fcb0246e7d3c91f01bae21f12063c39bdf3d9b2c9e41b899221e59d4f147c7b1912e5f22ecb52250a42a0318526c516afe3f52485141fd972328b26ea4e4661c284b9a2479545100f6a1c810568086abe3d1d26cc6711e4830c8030858a4f00a818014bd08f13cae5b30812028d29042d61c09313932025434a0ff5898277ae5a84aa10534f51aaf03ffb59ac40b9f4a8b220e5d243b326ea4e90eca0075d80a28da0a01e300b7a1214d4437d36f1cea613df0ea57a93ed7c69400834a410a687ba5e1a8811831a41b8030bc284e9a14ef3cd0f0ab15b93ce7729f89cf3762831e7f8057d39dfd753942a5eb9e4bcc9fdd856f39791b8e4b2b6df98cd5087caa3b7a177e54d793fefe7edd573f8dafb7977bb2371e9497db7c333d061f6e7fbbca6f93e7f4da3e2b9a33212975e93fb0dea0ee5334475de94c77375a73c9ed4c125e7822771c9b95e3d211192774ec89d973a27ba731c36553ab804dd3911cac3750774e751627c033d2421df401c10ba731d5dde390ee5b1effc91b804bd9f3ca90f7a7b0ccc78f675e83594f7f3d75059cf8679caf5142506afa7282f78e512f4d7d3beca485c829474ba435dafa63bd475f8c97d270ce4b8ab446513d5535c896af1e5a36573bf79cb7df7c3797376b267c3f8686f4e05696f0ebd65137ea37caf1e264f560045d0f74c13d4c10e61feb912a07f99122a9bcdd9c923f0c90aa0f8d82613be82c06c32897afd70defc5d3e9eabee988e92fb4ff66c985f773b2dab01d2debcbd653cec2deb69f2b3df2d638994c7bd76a25bee1ccacb557988fc7914491f403f2d8fae970f28e281ae6ec9097d3deeeb294ad03bddf1f8f2c1ec97841e92fb31ea3501f6aaf24b561e92ba959cfb9acdca2bb91f5d87a34acba3d48f7afdd06ceeab5b1ed98a3f42afba63aac7b856b45c87d58a528a00b33c7ae8270402dfca782ae72867d93ed11ded9674220dccda2e94077fbb25590a97a204019b5b45001e00d7e1da39365ee3da3900f01e7c081339bcfd498f1180dc09b2426ff475c800c89d202a7aa35f236de44e5015bdd1ef414ed20340ee0459d11bfd1cb205df4e923f8c43fafc604fb9d5bc9bbc5c2fbe22a0cfd9112382c440f9c207efda6128d5a32ceada6128b0b5e7cbf17083a65d3b3332cc4dcb962e5e5ab32411ddd14e4911ac10ed4e36c1a5988c09394477b42f1830d72dca529c7057824e415882b28c9ebb0c62b22688e3a1dc65d675e970e9ca7c7c5c0ea4fdb50597588acb38ca0f9b666983160a9ba66e71a2c4a449a904813059f446b5e88d3e956d8140982e8e725ffac87ced5c986c5ab27c24554b7a5d3fdaf734799128e3e27b0be592db2a6ac066fbb592ed16dee45631359fbb5b5081b52ffddc2a56aab0a9f4edbb059b9cb7148742da090ac234070261bce88dbe2b7d1cd2395ba56fda9d4f1c3f2146e170d9c4d11ea36e95ced11e3fd78bef1dcaa30cc94ab6ee700e65d31dcee98df3d6e1c58d777e59f9be768670897af50dc27f0a47e152331486c2a56e82091117d86428df3e75cbb773143659c1a6b955a83014364d296c9ac2a6b958f80a2d3fb9cab7f356e99c9d20307aa3417aa35f058ade68bb76ce0e1452f4467f6ed0afb3156779fae6440cd1066c96bef982b138884deb336a601ce43adb04e5c1df7cb190b6605a7eb3c0be8102a57c83567c835426ac8263a5f9e42bbf1306cbebe974fab95dbe6de5aea3c7ac2602fad17fe84707fa909cfe216f398754726ec8a1ebd5ce2b09f42d7fdc434ee35dc905012186b52e1bb0f609f9d4b8b0a9a666b5669db3c625c8a5b6b3d74e735d4afa50fe9ca1a424d41dce9f8cbac379a542385f2ab04972cb053649ef9a86a5c5a5ced4c6f50da2da4ce5c18eb4e33500af3e2cc19ebbfa0d3551263555ae8ea9498b68ad356fdeb2f9aa10cdf7f2c1dff4a6f91040ec2005c0876f3ea1d2280ffea69d53baac08c404e25dcb25f09f973a2789be717e954a59481f93e81ccd72e3d7b300f19f3cdf1e5997459cd1e88e754c4beb95b4146a2bd17c5bcfff9cf534f9ee2c8d7718b87692500306e5b588cab1caab9fb878cd7e1230721ef5dad1e1b1bd6683770d8a76b3d2394ab418680e132abec1d703936659dfaac05ac6844baef93a87a47ec86aeb2cab6141c599280fde065d8761b3b2cdca6ee6631d7a6b327a0ce560aeaf23b2e82189754ebbd237ce1bc9352bcd0a17b01cfde49d7710979c5bfe548b82d11b1fb47a1f7cf0c11d13ca62c2a618f2f51cbe5368dcb1c22b661073b7f89d9c25c7bb767a82f887321f9cf21865d42be42b9b87e48ff5e619f41769e4b4de071f5c8763a55bb54875870fae1bc4a48916ccf2e793b350d9cb87ec79a4e4be8bc126b7f12e87e7c8a86001c5711608318cb3709652e92767993872e43bf2f5b725cf61c2834dd12d53dc1adf6b47872bb1453c77de01e5d1dcb907d414ddfde013e600e113e331e3aa3994deaccf7894ad252174c704e2d781c0f1eb3f8cd692336a585c721e259402d3871e7a115a7bfd80be21392b2ba12b56b8986bc53b6e27556b059b9a8259293be5dd5ef14b250936cde7497029f228977ce0c24ab39259b94423ea074ac41bdb82127229fae049383f027af32882c225e74dca3b9f5683d237ce370b76c379701c4e6a5f6461bfc226923b6fa7f645cbc2a6e7387c5a3f9b95770dcbbb26460e103e9b19efde086b569a95c645bbd2319b47ace63da36f590e9f0a067acb785a06b323b8e443c6930514eff183ffec67f1836f3653056c362aefdcf27db250a2b009ba73263e78c382737e70e78d0a1092b1f48df3783d9fa90236150b941f3c4970c9f9cffe115c72fe329e16054ae73498be6950de7914b1a9bdf326dc6dd5896a82f03f6f3f55f08f7f90dc05dfb82a6ff9e42cef1cca8db2509e70c97983e91c267de37c8819981ee4dcefc15fc65fd4005baff11bce8333e99cede17c83d854e3cef7898c4f18e3137b1acc27e9695c95c6f5dae1c17558876c5664bbc225f72e269da344df38d702468b6aa9c91a175c728ec3493e9b152898b049b4488c7cbdaf202367c226913b6fb241ca43dfb9bb828c7a5a362f0ff520f573c82c7e7092c4219df3206f48e734726e94776e4930ef7c46fa504ac86413863c269b9862d924398f40e7fc904d38125959cc2684a16c62d8cb268934bdca6609e7d76136717e62eff4d79b971c3c8033a2da4cf6f2cfa30cc62517e39737672acaa3fd79e4ef8d335dc0d47518cb5a62be72afd474e6a31d73ac296fd9aeb089dae239890befe2dff3c95ffc738d8d5acaaf1889750e4edf3c87106b273ae7865b31c7b787fc865cbd69a789f9f619a97a332bcae98d190867b28943aa280f85c2c0564a67417089f226628c2b05f3485121f785a875695c4e22d16258b664bf592b854d93f295c2a5e76f9dcae63ee6cf9fb0c5b7cb7884305a3272bbe0d2739cced953df3c5f2d24d27bd70e95ed152e6098abcbb8f336790bafc1a6cd66e9d79f63eb8c85b3b01636c9f8733eb109f3e7fc059b62fc396fe91c1c3c043187e034fef9e42eff3a67c627a4c12193e89be7321287dab5a27378c86e904834d95af13359361b1b4ff9e83a020873cc63a4154f39e6a63c35e2eb07bfea8ecee6119bafe9d98ff125eddb7b46df323e844baf5d265bb21f93cd75ccf5f281656b3ce53c9b35c1a5e74c70e9ba66b080cd767acaf70c2c8aac06fd71957fa26e4ebb298fda31ce54180b3651fe5c75c2cb552f6fd9252e75f681919cfb23e78b92168c11b99e9ed0c5cfbdf2cf9bef9534baf07262d3d42c5f48592c6c9a3b85a9748e137df3aee8139bc2a6913f97fa2249c325e7979cf02753f9e7fbdc89b6b209b3896987bcfcf321cf3f50c92693600774710d15e25a0abbfa18fd0836e947ff40f4c8055be363e9a34f65e3e34685d09dd0c5eb1aafa72664f9b8d772f9953efdd7db894b537edd5d3b504ecdd2b629a59ea826c83ef4f6d3c9c3ac79e1d2468fae3086e6d4842e7ee27c74e77108364527824decd1751cb3b20921954d0cd36c9226f6b18ab8990e9722937e21e54a650e0136b98e73699df2e8169b6c62c6b3416f0a50b8e2150a535e15f0aa57b0bc5a1bb099ede5f903584c01c30d5c7ca539289f315afd0f5de73308e8d3468749b5347b8dd96078a6e19cbed237ec0d06bd61dff576edf495dea239bba56fd8b9bbb46c42984dacafbc6b87f28583969fbb85fadea20618e673b7406c8b732651d9c4beb32d9ded96e72eca6379f4ac979f8b86ef0b89ca7bcb72615317e511a4f27e586553b9645119c4696d88eff6728abb05f8eaa41cbfadadaaee854dd4bf192f6024df8b864bdceedcb9b50c070d437cd40dc2f4d4842d3ee41e522f5f45d76b87a3873cc45872e8e92b9f314fc4573eab5f5fcdc1e99bcaf7d7df108fd3973f2be493148ada311697a04f1c1c36f1573e049b8c38a272680696c65753b97c157d62fac557cea5ca5796b814331b2e552d66bd72e7d3bf721cf6ea65d5738d5e45bfb209bf8a6e6513fb2a7a289ba4afbcaf1ffea190470ff986bc437ec9a65eb8b1e7a43a239ebdb5e69c73cdb5d6ba5b73aaaaaaaa8ab92fd868eef728b7bcfbf1a364bfe79a6bad75b7d6ae5bb7ea8b827b4ac46859567b8fe2417354d5dccee16ca1392eedb5d35a4c135caa1c36e79639893dbe6be7b90a520af7dd811be69c15f3dddd5ab7ee66ee6edcccdc9c45b1b86eddddfa0bcddd73ee6e311fe0128c4e396cceee64c82dcb75d8d9e49c9d577eb9cbd9635f3b977397c42c4a762b64533fedcd669377decf5b9b969e9b71a82a5bda7b527507b7d6ae5b77b7d6029605367d42685c7ee8eb8e5eb7cd0ccb412c42c91e9b923efb5e73a3dc5d3b1467b041e81af504d5355a53d68dc2ba6d5968aecdf69e7ef1ceb9f79c73ed35d75a732d4bb76b1445513438cc70fdc6a597595c62d79a73cdb5d6ae5b77b72ec2b6ab8db66cb6e7964af681786378bb59bb19b2ee32afaeaa6acb66936fce7518e8fb475b97575755559575b1b0359d53587ae512e4d26c0f049ddb71b0b56eadbbc9d9be5154a39cfa71ddbabb65eabcb00430ea1c840f668d4b2d460c4c9f72e8ec122e018beee5263f649383506a33a18dd7d312bafc242d41cb5f89b2d7045cad264fb993b3bd83d96cd0df8f5e3b8f096bbc9e9490c64fd23727bd9e94f0c5b7e613362ead6a0ce9f2b1dfb814264c983bbccbb288cd9bacc13bd974077bd4abbb08a6a7297cf1d37a6ecac3ed0becf052b12faa9648709ea71d3633e5cde7119c0fb9f3189290061874fde71b144262c97e9521c1792ae369fe32d899c5a575c601ec1c20175c610c2eaca1066e9042193d10b081244c797f3d1d41cb93c7793d21610b7f042c5f80d793952ed678eb6f3863e1828b57c0eb29096d7c12c44802169f84343efefac879b49e5b1e633dc7727af0c95d46d9a4322af3eb0a127abe7e44e7d55fa6286f56b0e9daa19e0c651a2b7f94ac1c070f373a2634f218399b6de5c4be7bbd49e9e5b9dcc9b39cdd2fa21caec34c9ba916cdb41a6c11edd4fca1f1996cf25f4e934d7e389b154f3973cbb97fb54fa698993be3817e396b6c4baf1ffd93ca666339b1e70aa88993a77c33dea9827f9e0d8b9f953fc9d3eee429391b483fdc6d5ff963aa5d41edcc4582abca233ff4b99bcd66c557fec333343935beedb6ddb65b1e6a5633343e994bcd56ebbb94f793106218f78d9bc06673b39acb9f5724c7914d98c379c86e649344651388ef85043b35658ba0bc67d4c07ef8a9f9c3b359f1cfa363d78f1beda31b72eef3c3e13c6493c483e7c86e3829a3bc629fa4c73eabf71ee5a4ca45d70f769e7d7e5d4858cf3e641d4736493c644b79e53732a6fc5516968fd0bdbfa43ea428a7a0a49cf2ae5688d9a63ce5af92ec3a4d23475e237bf01989b9485ebe2a854b94778ef78d73f6099f4fac6560a4648cef3572ef1c9d1812e9659c3919298231a28c27e49bcd8d6cc950cd93bb3c6794c71e66c260859c7dfef4301306ecc7bd95f1841cfaabb6cae6ce1f08314c73546fd85fc86362b29aca2f9dce19d237ce49243df5cde939e53db4f6d0453e79cb5fd98c1ad8fc710f9d72cb31a95cba7c241b972eef4142beb9b2f9d3fe6d79cae1f5639d076697531712d6af0f814e224d0c66f3c76d79b7d9bcdcf226854dfa96b71a6c11fa96bf6bc76a567c94eabe92fabe9a27f890475d66d14cc1873ce47a01711faa80c48759abc10a4165ed37e806eba8126b9e3be5c194a55b04435159ba456cb4acc626e5d1afbed2824ac0d6a15b56884740fc00e261d603c45fd8f7ac97873dbbe5a1d57c3d278a21ef2ad41c4a07bc5e419c4f86d70f073ccc7a1cf0d0e3c8d28859aa3c1cbb6e4da4847fc90ea4a07521e1aa7d5d785e13e439ef6f1378736e988761be5aa71689e7eb1ccad1bf1fa37d206ab70991daf7d4ea0e76f2bcd354b65a7229f80b480bd2fffaf53b5f15c2396ff20ca4bf79ec55eee7327dcb4588dac0208396773d1da68ddfa07596990fe53ff07d7e301662b3d9fc016930532dcde6cffb42a24973df3e817eca75b8f95e4054e0ae20ed1b0c3260e9eb07d0b7f5487967939fb2989b579ba8a79f6a7f995e4838ef09b8ac51cb61d80a3498f74db3592a6073f4cda77f77e3508fa25c871fb551c0a63f456141b80d4639e9b98733072c6ed7b530d8310dd6e4e5839f337d02466aad3137de34b6b586056c62df486c6ade1ca369b039e73c0afb2c2e41be76b60ad824fd2bb1e939894deccf75389b9a3fb761930bd83b8f198419951d6102b63e55cbb7b7a66bf8766861aff91af1521a1b5a53f7982b77926ad04b066b9a3faf324cd634774e65249a101a9836c8bb5250974f28f2898d7c92a27be758ee7c2445f292daef99c1f5c67994aa37a10ac7896fbe980f719c1b5a9ca1c53bf87a392438907b0e94bff7bc606c9ace954b5710ca9f531710e8d4b5031f648a4a0c6074ce2984cfb95781b882ed022dec0a0eefb8e69c63d798a99fd686279447e13d9c15d0fea48d1130c75710e5f28ee2ddc62d4b73ce39d7bbce394741aa07d79a6bad39e6a625c402f7de7bf1bde79c5bf8ae7aa20dd2bc278e720ebeea85de734e79749473a10a3eca51cebdeddec212c34da72a7573c8bf8891da199c2359d9741ef288515790e6309b1e44c8bb10ac2a08b325ee5fc6e3b26e2fcf35d7da3bc759cf16f45d3bbbcf02c3b5dd2c381aacb975bbfba34d9dc348d0d19030d293cab952bece1fe55cbf3dc717109759ed823cc0d62ba9aa00e71c46435a6657451656f7b035bce66a106173ef613a4250bc2684a84ddadf1774b032c26673f57605697fce399e96618d067b6e77dfbaf796d90861b0815a0374e7f0bd9b079940cab9f7a8677dcb1ae625aacd6bd954a5b0a728aa65ef0cd87b5887b28955d984ff321df2cf9deb745f40fc5fd6b8c4415a83cd01f19cfd654bdc372eb98c0c516de666d1a96ed02d5d7a985103d330b80188caeb966fba8533c8066d50b784a06ed92c65346d247fc713730ab57a0e61e5a89fd606e795b753b226d341faa2fd3407840913a6b56f532857853cbaa3d08069c9d184a48559ade4dc119a96b56e359c2cc8a4676f99c5a5c6b01c9c4672030e3b0b0b24686124029ca1c519a4ef2e2ce0c142753be7bc8473f92402eb9b9ff794bf46b101a366bc549a9a05676a1622b0188f9987b2243a672693219162322c830f2b6553e5309bfe6e884339dd3dea5154f6f3828cc28409f3cebd0674b10bc3b66fecacd980066bedbdb72fa3611286b5462235ab292fd8f38961249ee6ce5fa3e48c1a58a32ce75ef36b87ca2e20cd1dbc82583bc0d627bc76d8dd15a471898664e9195a9ca145b3ac8cd879bb4cbd87193460ecbc196c9bd95bbe3d5af0f5b583615c6ad7364be77050dfb4436fd93c62616f805850535990e3a06fc7d21e355296132b9e3d1405d6fc49edc20497da6fa900f7c0f22d7b7e64bb585c6ab740f780d96ee91b1660dbe59a8085f1ee15a471518730e076f9c6a5ded2d8882a04f6dc5ba6833469deb909559bb39c4768deb9c70929199d2e4f9a679735aafad67c35a7d43747681e0d58f386a586a31ffd2cb97f19a63bdaab1660987b2f3b4293801b8861865603845b8684e6dd14dcb9c4ae834b190d156c7d969e4bb07320dfa8f3d434be35f881d65c89d692068a32a864814b1952b284e1b3600619562803cce3295a3869014a195acab05246978fcbe5e308ba7e4814e3d36c92b6b3b9a22b48e8df75fd9071f6d7faed4d891dc3b5b32cf5dae9f7a4cccb666b39b1efed7dae04b7af17c943e34efef58c33bfb76eb55bcb33d6ce7703092b9bfc347e63b9fc62a3972dcdcbdee534eeaccd28a026fba87d73bdfca45cf258eee457cefe77b912cf796e97bd329e6d963f8adbb3b95c9ef21fbebcbdfbeae7da358d76cbf93ddf6b0234eb9d3db9590d4dccf3cd26105f25d8c45bc47a5b6ecde5c2e5d965647cb419cfbae5a2c7371cdbd7ce03bfde1fcf792e24ac7f8ed33cdcc8de3ac76b2766533e5eee699e46ea5fbbed2ff94b73fd782e13e323df2deb2d299f91d17148928c94914ae0f0986cc2c79189b25136e1f2fad42ebf958b96339eca9fef18b688856d65d411eba3cf23d63cd21f339ee7ecd6b5965fd9b4240e7f22af7ce5146535d02da7dc3b07a76f9c1fb17e7d1eb19efdb2b2ee77d24f3f5bee5c368f5853d378ca27fc1d83e5d19588be6388deae9db85c3e54c1aaaa2ace760c2b0495c9f00d17f83333dc6c426f5042e8403c0fcca6cd7333419fcd9c416a9226066136a90c5281f9ebf3622d9ba4fec7aeb42e68645e4f63b431c50b618ca1c328c3a88830b25061a01163116404810c29c838c273ce653424897169c7a8f2aeeae19c237169a718430dfc85294ab481062c60710728d840075d10638d1931c2dc4cb1813904ad20075bb0c10614b488718a11a38c9a296e78a10c5260b1833310410d34c4c0418c184378efbde78a659f650638a0811842b8c2173d1e17c260430c16e008c0eb698c2a8c71042a3a9bcd5b7b73769e2ab076cbb5b666d8372d96f00a1b6410c60cc8e0c2066f3803423514200d38da207c3d5d610c58eb40cd5034b8e18a202b6db401c60b1f7891031dc0c18b2750318631b680052d57580387794a1842b0c250424f5151468431458e2a34244c1f85853acc8421c54e4161a14bc4021ce01445fc7431fc2cadbbc296774e43c2b9c2238182415436cdfea86a629fdddd9ded545753b77e1e1ffe662da23d0f67d067bf83689830caa37db28454ac3be03953a0de768194304ef084347c99421a8ab00617b4b0810d88e10d6d18c3182da8e28532580a1c293806405388810c2b82b41005146864b143758528201aa23290306d428d19dda0620ec80a22d4618b0d8a00053a8091052c2cc052030070010e6d0023075eb410c60c32aca065c60a6a2009a103155ecc800a5484918631acc0849115aa2083e3f574851cfcf57aba8214d0cac2f79e6b83346ca3d47b8e91bc5dc65060da1caa4da3c22c80d4835219890dac9ecd57217e8251aebd768e9e2a2a4362f32fe369eeb229cea822076670b103972a8881852620c10756ba00060e70d8a28786a1846a0c1e057540253f28c30f9a00c5138c10d483c2020fda0f682809a9caa98a7a146585294f554f5941074f710f8aa2180afe49f3ce55a106a4d7131877f899d713186a80dcbeb0c2932a58f1a48fa38544ec620c03cce688cd7a106ca22a8e82b5d7131867f875683da5e32957323cd583721aa6dc95873e65b3024c4f2fdb2169288317b8ec008a30b4a187bbc23b30c6f08ef46e532203f65e4f60a4f1d35b0bbd6ec341363aaeb8818b0d07e150e1091b5c4080359f504f5330e39dabc3768ea16b222aabf27216e22807892dc405e389956787c09af89fe814b268230e5fbe7cf9f2e5cb972f5fbe7cf9f2e5cb972f5fbe7cf9f2e5cb972f5fbe7cf9f2e5cb972f5f9eab0d64137b8c1b87f7de7b598cde64f437f289c17f974f6e52c49115e2043949f44dfbf31897f1fd82299764b2d9e4a9b0c6630f3d322fb748c6572653dd11e349740e3cb245d8ac109d659489b22b9beca3bfb92583e0523bacbcdd668b501522e4a4ae7c6255c827ffb4e18fab8d45d3c9f7f4b7acf406acc56c5a3efbb3f42c2ea91fb1a909823de5d8533f5c86adb383e8dd41e91c52df744e05a66fd8bd0a890a66c54b8110c34824f78e44b0c951540e16141404450f7772dfdebec822861633b6b434bebb70f9ce4e1596ce21912a2c159626452682046177e683dfb9ff14b8f876ff130ba4bc9e56c0e5b4822bdf8628b1b2b47089bdba80dcbc0be252d546c85a2fd8acc050d74e67a465039b2492cbd68079e91935b0e6e555045b1bd813f50a4c6505e75458fa861d52c1aa90ac3c5758ae3c575e4ecf2fbad2106298e8ca145dd1d2c0342d4d4be8fae1dfc0740e74963360c03aaba1a8cc076773c5f8f553b5272cff45e5a573b44705a6879503d6b8b42e6c9a1598a6854d734f9fc6960acc1ab0497a1ce5d1ae3e049b5cd3d237ec10621889e4b354b5c125d73ae80ef6998057278273424107d022aa39a810ecda5905e60dd8b47e9b0bea1ced416227824d4a22911e23fdf06f30e800e6150c3a5cf1b3c2f2ec057805630e5e7efdba5c269a91ba90a0c28409f3e5bb2d2e2dd0bb9931b0a628ca9fcf0accb3bf25fb5d13e45dc6d3ee3298fdecb71095ced11eec5164352f6ce26edc9dad185c5a176d797c03ca15df2e2fd34d7151dc93d6c6af373638076ae9f69dedf78a875a3a076ec137ecad0d984db8e509ec12e5675ff1f2eca6b86c4230bfc6fbb49f7da57ab26b85e73e3dfbac82f8b5d1a13dae3c810a8d7fc0ef0c56e1127b937d050e185c334a25ff25fd5a5864201c07a961b7965a55887695eddfdae5e5c121aaba29bb7ada6d5c5e7dd5774743e0e88ed15681ad376dd78e66595efde64b5c526babc0dc7a6bdd3aeed366caedaac77011b5516957b401468b195c5869291d658d2e58bec082a970501b6968b9c2c54e59295e8ea81811583760ca251b37606d755bb4ded34a0921fa4a5e65d9a470695b5b67f95ce52a7bb3e21b96d7e1d8d49ff2d5ae529f75feb46ffeae1df5187598f93d7ebcec5aabc10aa1def455ae372bb8b49a4da06685fe7a936ebf392244b5f127db574ea0dfb7ad2fc2c2fbaa69df28bf5dbc0ec791d415c2e28bf295da46bed7ce5e578ceb70f775f5e53a1cd3d7c37c1d1b5132f67bef7a6fafe72389addca7ae9d176526931f35f9918f2e8fa391eb95cd9f1f494047be519880553e57ca898a9567df13d3ccf852710e399592cd4a79f6c95d72f450e39334a486d483cc21790be7ac94bd7656af1baec32b45c659e4ec7b059bb6c6d99bd8a01bce9733fb11368d3c874ff831fa48ae18b24626d1393d64ca3796e7c894ad1b97df701ee4047a1e300cf31ffa58a6022c1ef3919cd88ffcc2e45c275d1247cc4892b2c969fc0dbf24d0afd48fc171c3759a07a95c82376e6436a7cec18134d9849835934d928cdcd7df1f988b649cba76642e9f38cf311e2367b660221fb97369bdba7656e4ef3a02e845aed78e28bb64b3a49cd8f44ace205ef70cd88490b39ffd9de7ac4ff5eb4c9d6d708678ed2daf0070d24038183342549b081c91c285966d83ca17dc258a15331a4cbb429d44c8ddda5acb66ebd62ba2daecaf81cdb66c6d7713a9eed8ac71a9f14d5b1c60ed24ef1cedb1cea4272140f939849ec244dd2ed8ba620f88db859df5fc627b11d8d7b57aa87c7fb7c1aeaaca817ee5f42150ce7de8955c87b231d5fcb575eada69ddecd4361f28818bd16c3f8f58ef9cb79bea6e27cddf46f9c97ac5c8ee325d21dadb85c4c260855877cd49418c93145e39677b584c8050df0e14854b3dd4f30492daa299352971b93d18b24498ae541a6ba512ecf914052d1f5f4f5110e3777777b9a300a6b5d6dcc32105b4288aa260c50310a2150a8542d10a3d41645dd77589460f8c180bc3302c4646260c1a6b66666686e686080c382c1e78e081071ca4a6861eac1c3972e4e8a126e6f5e4451b7cb0745c3baa3a72e80e761dd78ff5e18a3f582d49ba837d2513989ea2d0e5a7954379e857410c84b5a717bc6a0c55907aae35af5a22960953c62873e20c2900418a273fa84398066cc1036c0b236434244c5da50618ac408533bc210a6430c00d39b680c10d2a7bc019a4ac210a2dd4a08319186186b5258687d7531496f0a6d8205e5d7b4c237a34ef2158b580f231af27215cf17a35015bc7d649f308ce5255103d7f123ecf02c20ceb9bf5ed1c275b608314b490061734b8d0a3887f8e71f1cf69d834fa37042afc731d9cd33ddebf1e2f9b47709e66069862188d248d0153c0eb290a50fc8dd71314d6789bcd789ce296c33af7435f75479bcded9513962c50b63c2b8f667dcb1acaf75bfae06fdb648d8fd7c1ef240d97fa874afebd3ad3cd30989d20c0a63944124ae80c317130c0433cfb24e279070a2bf446a96455f446ade88d360ed22ded45c3ce7140e06feb0dfcd6a3f55a319a170aee955bd3700ea63a3887a437ed5aea2296c05f27fdfaa45e1d5a189b2c2d35542db5af542d357fec9de67c2181fd3cf2bbbb9bf534d9acf9eb090a5bfc1856be9f37abaf1d9f169271f5201a13436648bc94bb767c82e0d28e53e5115f7d798ba07608ce19d237edd3888973dd786d9f3a5ebdc439a5be698f21576fe551f1803ec25cdd690eec19d2d3e14d34c1bb8562a209dd32a409de2dbba5bdb94a4d0f399cabb0690b3651cf67bcfdd5f490234687fce1a7711d26dd701f19ff81cf830f61138db733d184f3e8a45eedd1b86b34ee681c4d8c71bd767030c97170b804844f227ef079001f7cdebc13f9943c329fee9deb1641f97cd2a7f503f01c9a434437e561b97392f2b8dc6533082771a460ce67e94b382e933d3e2b44bb943f5c6a77c9844bed03904df8a69d88e6edcd81c826103f6493e403112222beafa476a884ca15ab833d8e3ac710cdc8cc00084893144030381c108b060412a928cd3e14000da2b4505421cae32889511432c818640c216008080880c8006dd2002f9842b5032a86593006b2f28fba29e69e5e8faf0cb297c7731138c8dfe65ac6b7ea1fed60486b210c3b9102d0071474147fd840ecb79765ae4fb40fee29ec9bd12e0e6298852721090b14a1bc9ef1cd28614e7cb96d46f9dd4c294349663c4cc3ee863bac3ce341127875bf28e3aa42abca1ca73e90bce4404c12188222a02a890da88324fcd875c6c9e4c72b902365e6c0b5144d9aa1d2e21a0379a99bae3c4a932403e4647b24cf8e796646db02fabb26840dda16dd00cd97ba51f1202fa81d5b8370b0863f4b37e008d32880a185d04b2adbc68e6076560ef6a0c2e4d0550d78b225899c49b61fc7020c7af71f6c027fd3f92416dcf1e1379784de7fdb8be499f8bea23552703810c347e06d0567deb9027951523ae1447beceb3e9c195afe0e89d1011cbad7b47c253f7381f980bc2d9665fe35cc007bff463debf79a2f400e1cf6c3afbfe16f8d91280fc4b36060755beb68fa9d12a05009f6d06b236146e43bfd79f42d2dd8776697119d25eac5502687a2bc4036ae835b15bf13a11673eb96ef53b3dc09b7dfa80cf06612a943721386a0b45d6d88f59c32c6d67451dbfd06cba1523678f44d207bf52b2575e337a70717d6f57bb2ff2de1297e7891b12404b10a34001b4608270581c6b0973e66c7c841760ec1389468aa44b474a25a887c2617e158e45493c00cea38ae4afe94816701268037700fb869fe52abf40d54a64c41c5606c52d6e218710fe0c84990d61b256bb5c14aae146ad9495ee75bc13669b5b952fc1fa3621897224d28595ae95f15a0093c2b205d19259b2efb0777ff8cf6eb7c8f4d2604ae78db6e692aa9073f9d642c6b51bd1a3d2567c72c23c601395f66c7ea1d8cd9a6b340e3bc7da338c5a1fe8551ab7762f4f8cbd6f902eb5669eb3fb0dc3e91cec3446aac7cc526ba5c6255977cc9a402f07a6b1dc26363c2cd04ffa8f1b01e0494ce4348fd230ec788c6ee88c3937fe5617f6134c5f565c9e8293af09847870e8dcbd0835c18adbd8ca5d2ae85f8a93c9ef862c9633f42e417d6eafb39d3ed9ea175663eb3ac5aff44e058489964af979370f1d8ee9e704029a4f8f44d5aaa931ed8c8f8c1e03e16ff6cbd6344789cabc4dc49ca291ff3c82b71f4681b4570d7e2b773c84d69cdfa3797473483045d0c4ca7b7dea6793f561d1ad0cf0ff5cfa9976dd39f222c64ac4c2893ea001ab1f4ff35e93c428378768cb5e5aa541916f68e2a174cef08d55a36586a27683d1a7790fb6f5f35a8fda5a9df87b0af410e68821892c936e9e2c191ada2625723ec450ea047c36cfa99ed188eb70abf3320e6236150d9d869079e80ee92a3f04d96f3a52267e16d9813bb6cbf3b131e4c30684f147bdb05e5cfc135a3648007dfdbba35da5cf73699dc00c8742a745228f444a261e7213d8be92203199a00933ce73dd4b679728cdabd5b5ae1d4f8fdacf8524f5290f40ea9ff42a909317ccd33861dea263ad1fefa645448ac8dcb52683cca25e53a37b15a2a4151f8988b6822a717a331944e295fd84409671fbc13e82c1c612484ac3f9eeb575687212df84a33634c98c1b80360b7ee76acae26f02d3737d4de22d0ad998a9d41790ff97f98c0041a8d28c94139c3e3e5b709a12a27156b76fe2a8cfd537cf16faea3fe4b6ee68317679615b1bf48d917233a44e72b5396c351ddfa9fe119041b5129f28b26a70db1c5863a491bd5acdd10e1b2bb72183d64c80b7b94cb32fcfe1425b73004546e3620f775985d4e7b7330c46f829dc68fd5e61f8e116f107fb92e126840d17ba74a45f5ea67534597f3e69cabf369ba084fe035d542873aea9f5116eed47906d2014044676a8b825121b95282ffe40b7c1f884347c3d9c210c426cfb3f48117cde004024f55124b63c06507fc6ad45134a7ac638f6bdda5a3bdaf36b6e60d4d3d658982d8f6efc8cec847f3cfada9963c9cf952d1c4933aadb754d78027e9c48bdc3b295a0bb44246925721340251ce409e383ef93d2a3783577dcd6634d1f4e33e5a105c2d5e45e9c48aa2743a7b74edadda12842b77c46d50f4e867f817b994979d0c87b4dd054377a84f8738d52ff95b546042fa57f98fea3c1ac9dfafc2731d0c5273597a8e03132294494c3bc809c14ea86d519ce6a0f2b715b246d2b5983be5c65ee18f81723bd0b085036a4ecbf4188043be3cd5fb693da0f5247b66984ad845363e5d0e603adf4d3a8b780c4fbe55962cd4ea80d95d8115020f218857c25272acafe10cf2e042b46d44d7f846257ee3c5d85ee96486ae219cbf914acadc196debccd26689c79917167a3a87bed2d4002316efe84424bacf376178c64875c55c782a93610c0c0a99f1054eca0eba59ee842988b7a875a930e907ae44d4f3159f910bc03d717fd2f870a968d0adc4d597f29b08aa6ac91a58fccc5ff43bf7fcd9c242e2d225dd29fb79f25c120f6d7c4b1d945ae73ce156dece0693109b7143c530ed5cbb2fe6933a1c4630167b39117d3e1633f4ed9c742e96d50bcb87680dd61c9d89de89f3b847b7aa31a6eae88ce470938c3971ad5faedaf2fed0042ef1d9562b4e93ffd6f3dd1eb89da70565591ab642678bb16302ed98ef73337d08c3f11b55986dfdf741c20865d88bfcd2bbf04694028d854ab852cb5c4b8c15d4719d494a7c4aa28495d6906830b08286953551fd94397421df2e87f1889d14210de9c4e9a53f260ffc9303a6a88f895eb3ccfd12cdc78460b96f9aa18d7ce7bec207be275fa96049fbd482b5f52b5d07e5245998f84c52f0a9c7ba938038b3554f429b2a0bcb736db541a51bbc85e51cd2c41d6de44247de24d801cf38ce90ec2ad70fa14a8d17c28e289fb221e82d531fea4bf354f9a06050be3ea4b9e3a6983fb776bcdd45773a25f47a772b8bb73f5d796bef03b70a9b9f80ffa6efeefc624ddc1c8a8e4c7b3feafb1dea60f330c812e354dcfcc0f746764aae37a660a354c507635cfba3a43722e23db9f1394ec881feda171a1f19835b88240b6cc8b6989fec35c5af88d40395e380c4cc123a045a959ecbb56d4680c84ac38c06105d9a36c73c5e0565541eda94e7179a4c4ee1f47132c2b63a6e2c990e1ff5464af45cab5d446c43d2274b6414fc2532517b2697e2cac47e26600a0b37f0f3e09735cccd635da4698c4bfb65c93ffd887018fe24f5fe6439f289eb3970b92c3056d82d8bbec50027c1e3d69881de52a64794168b0845fc9ff4d8b389bd1d128463a22bb9e1dc30087cc67a3fdbe19f311ddfd0384238119606ad2058bebced813523fb58fd39c154dbb6c2c193563e9c93f754b3efb7bb41fe51c4f4568da7287c82ea1ef8974ec88ae68a85a343d18569d2e295314c4c47f3072ad0296d0fe763e2ed8f8f5422e0bc43ef21e323ba72961e5ca9047141e8a9859277bf464dd25760b936eb84dd15cccc06d30c11060cce9944bba542a143e9cb1b7517570ec7e495ae448219ab591b2d90c73038520daa7b3e7c6826191dc756a4e85ea5011c6bc23233d81fa243e6e49347e013527561c4754511a7b01c3ed4f8e2bb671c9214ac56bb0486b657277275cde22a2a652668fca98f4283827fad0ebb34b4c7b7a87267399e7039fc6a8c9fd81db182076624a57a5d32a409eb742b4fb0ec759c07cab66ae453e24861ac3f7b47e512f7c12c0c113a82619177c9edbcc73b7328f5515633db910cc331729f45231fbbead7af6d8a3608ed18e533bf96814997c77387cb71f8b16f33cb4fc32b5876f2a1521a13b13a7240a97405f4a4a5cb5f41f566a98b47251507e67d253c2b722ddd99d3934824016e1db97f6f46d32db8d31e2ede59231e65eb5b082231cef8c196d7dfed515f4108c918009b31637d6d9df607c19d1b21ce514df0341a83210b273434184c5bdcdcbbbd561a848b9c7286062907e494369a397658cc93146d3ee24d8c85a6c9493974fb8b6551e70d134b75aa862564dd2ee999d0ffc676030cea810169c2b81fde6826429f552f03d4aeb47db3390941bd0ce4719ac8013c51d2c82cbc39384448b8115bd1a442b099d54f317408b4eb6acc74079d9c5de2702b6eb5ff536258a51b0c425130bbc3f0216ef195cb5e43c7f25c26d91e651345c82aa6ef84b43bf80de16e1f71ddc16f1b5fa06ce5fc47da6de33b6dee0eebd5105dc8c45e314065eec60e0d5f016b609500a015f3dc610c0db1b28d022791be99f1e7733f119854a3e9b8a43e9a9ce8257c9a2ad64d54b63a63d3e0b3d4846e73928fe224c937f79021a7618b0b9e5fa8d35042c6b800ba4b7058878ef08b1a779f26cb4a142ff84574601950d34218d5dc6928a7f871e2cac3e1ec01715ed656e834778027c24ce6c905333ad65e024e9f29c16e2b1eef2512156ecde18586170354e28248494e20fd5cc2f8cd4db8d0af4ef8b84c08851e921cd242e610cd0143c5f18c5816cc6079a7a7ee8c4868e292a8010980b7f6074a3b628aa354c381fc2df74804ca83924e4ca1f6590b512b5c87256b189c25f707e4f5362314ecabe1758382a16f8a03b495707c8d11b8d7d6a77ba28959a5bd6d356003ba5325da245e65930479c60eb6ab0865d5ceb86c72082a5c472a7f034d17f9886296f4e7ecbbb3624c40ac933cbefbc306699d9f0057b26657652bcb6144c8f44611be9104e1f0d7403823fa0541a855d217691311d63203e73f743e21884dd14fd2ec67699282d110778cba1d727780626ea5f80c647b02c99987e8be4e5f05c0c25d4d11abef084abb7326a1a254c0a5cca90c09dda3cfd4328b68191eccbfc6ea301bb222ca267ebc88c8eba0c9ae447781d94ea7108c8ae18dd87d3dac99661a111d99aa6d259fa63c20b7fe543a02e6b72188fe578484d676100aac8f283e3fac97926436541d13cd906a4b9db38f3088dee1cfa6068546a20a4be1af5518179d85ce4768c32368f4e2fc6a215529b84ed999e9f2c75e248a11c4ab29894354b9afdf6f2e2f50121b62ca494e9a9af8f28fe0bffcb0f22feefeb15907f6dd8ca6b035aeffd4833bf1a12ad17df416c7d344f08813c4c93678a184bb6b2ad8f2fab649a431edd9059e3b80d116cb0c259e6a239b14bc4105c8466e02add191346950de10728a13cd9ce001831f744c0c61ccb3b7cce6a1622b8c9f5cfe49707c01c97cb91192e23cd5065394ae651bc64013806068840299d97892b6c31bb81473cedcbb2b8b398cabc1ba907f137fcebdbd02304e5448e29cb210b3b160b65bea8fc5e84e3c14c0d9e2ef16381be017e43e4a26fa7ee39777474670450837c6edeaf412c4f73b1ad84b63927991f3911254db22ee0f35c84d810ece9532ae026b5c30fbf04166b6ea3c0c8084b1cf72972a609b96f0bf4fcd6804af3eeb8205ac2b93cebe5f29327c83f7b7362988ee186ad04a21366dcbefb64d08e0e4d36133098d469f548bed186f5d4130dd5c3e7c45ff2a6e16d9e83c7a0804717f367f5020bc579a5ba29f1c1b7e418ff1ee6d65dda4ae280dd3701d761a6e7e4fe3cb9650a1882526a3fa344af08f5b6328075c6509af8f867c0c72236d32d8f956b3ba2c48900099507032aa92db530ea4bb4c509e7fddba751e35e85993303870004743f39fc08d06a5878d46fd0cd2e40dac67ce60a54ac83813a5d0654024c5ecc00cf61585f5acdae8f1c85852c50d120a2b251673bc7d31f67b11f61a63740416d9cad2bb04e1fee9821b59f33a8c11422ec950894ba3162ed8f902ce07385bf6d5e171b3dacc16bb94962acb388187e2dd99a9264975260e45d6ef1e7d20ca1b56d75ac72f049e64a98f85a2aa61ab4ab023c4523f702bca5042cd668c8cada2b8cc5c01f26e9c5659015a750ef1ae8b7daa11cd35228daf0295a4de2e89a2919d762152ceaa4d1708e6cbfb003d8dee0089c0e595329ccbdd976ba07473237783e845a647ca88d8bef5fc8f8a353aad0e78eb85e17cfe23b1e6dc5e13572b37d5c890d6a31d88fc6e32eda073c426f024ca4ffc8d9e3a89423676ee2b95bd2a463788f04bb2fd6a86f65b4fd3fa2c1233eb0d50feb0d5d35efa1de6bf460dfa39a8c43601e53bfa657f39fe697eb10b49065c6a5ba510a1f9c4b791d2f2cab4d81820e6b039aee8bd13749ceef85c59eca5a0b6fce6821acc919b914f832bbc9539a1aed206183c4b576827ce4aa9875927dc99e5aaf97bf81b3b1bb741409779a69959057f3ab2fd1f234bac5e0f9567871afefea512e86e0ee19fbfeb92c8d6d90d97c1e84b06794f285d363e9b214ff52eb67890b318ecf006398b1fe71272ef4c227b37fdc812e844b696314f6bcdb85de90212519adf32de18cbb79dab5ac6731bf863c09e3226cc69387069cadfb065cc6a63f694a5d981528b6d72751c47da518b79c0854fecd13147ec89cf7f92cc973725dfb046ba8de866ef56a7acec278d7060c475028b2ba0e70b8e3f8a4282000b03045286da144f648031e2ad683344f129b7904ec9ddef4e875cdd06d253507a75075e1d8ceb1f2bb504b098bc539ca079c1a9dbbe596753d2e6f1a0353a353b52f289d8030deb80e8d5870dd5ac4a4d2661017bed0c443cf8e8536943180e565ed2647334ac2b1da2d38d37b948c7816576037a64074b01281ff462fbf02170b2c01177c9ce2700dfd030ad233860795d662c7b21dcb93485770073530f4c0ffaa523c870a1ce02a131920502b5c4672d17874a1fcdc3e1e9183e130f1cbb829eb12ca8114ecf0f1f1b4ddfc926846617743488a5ec0f8eec94a811dc8a750c857a8e77b7226e35a07cf6e66b225dc8bcfc63562d028125046696e2b1525a273eaf5e9dd0e01561680d8c72ce9c21aa363b00482f53e26458fd23fc9579e6f544313c58b824d41aba0ad4536f5576062fdc955428dcf25a4314470d0ae51bc52b3714f488d4a14015c6a1702808eedc87ab8b0e0b4b306bcde8a47eb7940ceb2519bcd5320a9e96dcce197400e3a00b5fb4a43662d252a478856801db123a8f67f27275b3889fc85fae15cd4feca756c86e16f7bff4887d3fbdd213e37cbc1257ccfb7ca547ecf7d99638b1eae381de4fecfdfc4a4fccf3f1955eb1dfe7953a62dfa75beac4b04fa554d799f26dba272efa6d9d104b4b88939c3a37914a1ea7b852c72a95e206c1a0b310a059a2ff11dbb4dd6059365dbab4d73d5f809153d07e75007eadccd878e16da6dc1d515e760a24ebd24ba8080a38eba9d0453043a8dba6facb1db63eb88b751975e240a04e1c834eae7c10523cf0886f6255493ecd2bd1935f3bfb48d51614640d24e08eadbbc815df8737cc70d60f13739725f3c8056d1db79386a5bb53d5b61313782004068e4ed9c481fce2287932c46a375cc003d06f444fb5a2820e9604995e786b0728b9e4cd72e7d70e69abe5338f18b4ce5d48bc0b4b8cdc5b32008ceb123d4699d08b689c11b7ba8fb89609e8af935f0d0a2046198baa645b7c39359ce1c91a7857f547e06f2e26a89d8f03004f1fc0cfc10506212bee44a08b6119a721e238ee43da5fae27b86000d6550e6f7aa7b52565cb215506b99bc9eef4a0de8d763b53a83cb975b73c4eb81495a695f7e8fce9a06bdbd0c7bab681751f76a9c0bb81ef6ede20bccf9860d8dedb16b67e2a90754e4a5180a78c020c27f958fbf8c7fc5408fdaf509dcf8164b8647ada14ea548058c9ea2feccdab56c66a0346951a25377a4929880988b6e9bb456d19adeca95a848edaeec2fdac2ebef6492a66617b633bfc7491ade393fa5728622d18a74dd2043c9ed166a7126363b08eace60043cc52e56e44d4d4840e98c66abaa7a0cd6566812122e348471284c5c63790a857c2500bf44fbbc0290d159a3945954c6e0b562805ed10b73a9d43ced6bd9b6509f542d11ad934d702cbf4a98b5da5c1940566b1863ada5a659fa7a84d569bb28bf2d8a8f4a21a1c0582da3247e187398ba053d43442641e4951e4986bc74a20b8ae86b6923c8f0567a66e9a32564499390ae44402e20661a2c704e83a80b3b1b7491941cd650c0be0e8152a561c2e8e49e1ed807b1bb19c47901ae68897a5fc597432574e271e94914502e14d7bd422e6788e9aa2e6234c49a5ddd42a32d83942dda4e11d002d8b5ba0172c57e7a6866a5275f37e345a4b059bc2baadd25ed9b541e5a10a4fd6f0fa321a649a66c01330f5f35701739ffa9bc01cace5f29b273d3ae71f5478fe4d0e7847dbfe8ec75f10aec017f1e1efb2060f29d34b22ef8db8c132f1b9260dc5ccf1edd30de0995233938d90a936aac19180213d1e4ce353c9bd328946ab7904a350ebd11b40e34f503146879a15d971705fb8516a9d2f4e01440cf7afa21e4a37a425bec30db2336367b1115218ff1916ad82bf9cef3d6dce16ce57a4b88e3347f921094ad419dd6a419d93f43b7205eb473213eccff988e9592f24a03f3d777a66a044cf9a800f0e4cca0b1b1e7286ac36ea8abcdf81b6aac2bc322937bd21352b284a5cb9e0308791324ecb050d94992c1a2b980086b7c5fa14cdf31e4f7707a32b21f6f768481aa53e63568d1f19db28d1a7235c9b3d3ef4666e261f3862f07abc8c3c2bb8f65702520900854eded6ab728de9f8af45640a6db8982ab0b61dc4f828a8271011459046885b39d52d0119ff4120125c06b88760fcfbaf3982372464b63a6c54a2efbc0ed3d5a8034075cab9298e9115405c56e1f6890f1138c5d5c6baba0ef341d08470d2c81e6d55f71774719c4203ab42172ba085d5eb5fc7093aac025aac163a8d5bfd6145d06575d01356f6bc9f628c035a7f5cfa7edf81dbef56af2f6b1f1bf76118b6a30473e15ef2cd29df03270926039ebc682d2b7a1e017da9cb3fcf66c2f305c6fed0b10e97ea5cf89f37ce4c409b42c938ae8e451691789530816eee399d7b80c0aae7dfc5aa8183e69e75c66b3f69def1dbfa2eab86109a6776756c849fde1acc76d9a4a6af32f6e66a8527cfe7a8b8c94d67dd4bfb4cddb61f648eef03e5e639b325db7fe87626bcdac84d1357439faceb726ec305fac8908d0e5861d86c1221812866f5603bab5b9ca49c030f115a4e366c99e0aab699cccf131ce128197ffef7223f87d5e78716d1d49fe27473b7b034d97c8b4f552bc57d0b25fd6cb62567a45a917e0930d47c708827799488c2b880b3e41ef74db766ec36c240414fd1db7143d2872d0023791932108d3730b24b50fc8d69fb352d39a48d80446fccaf41a7a715f4152a39a76a32b2cbb96754540ca05ddadf0734497148cab63a0e1c66418438f825e32049ca2c6db57c526a5dca29734154e0ab94e4f06e435cfe37d17a858d4440dafb20f788592c2a8481b4bc05d37093ca5869a6344ac241e5a012bd6eef5931e94c695b59175b4a98555a7a056a843fd452ad2a9d7655fcf3ae61a996078980a759c05ee8ef18ba5bf3f936dc110c416663e85a2edf23a88b9595d5c833e97bff5752944e45817094f22651aa51323c52a3becb97f35aa8eab734b442c5a4fa7c2dd9e792fdf7f027cbf3583cfbf0f4ab68c674cc29f0139a7e3c4c38e950dce803c63e0ba94714d3c7a3aa38b7632817fbfe9978955cd19abf1978dc8c9b83163fe8eef2a7d2c18abc464daad8aa2ee5e152456aa88cda60e4e2b845a4a96dee2cad920399e554e9655f06e1efae9b0ddeee47dc81a32129493eda022ddb870ab180506e88979ef7a77e1db3a27f63263c778bd206ad570f74865570d9b78e230ffddec12867f73031e17e673932e18752a860054e35b34b6707008bc8d629deb0d1a0e7901a20449a3946c45f2d63d286aded741beb6bc0b8ae94f23ca97632deaf063e75fe1fc1172d98f93e9c48e8237330ef450ea275eab80ecd5bd4f0b6ac38fcc098f61c2dd00b5242711f9e5479432b160652af2096f506db1111d4445641df20970bba504e9c875063fe8db549a1fa2f38993d0ec5298b93e04e211bd620f32575201359bbf39deab269905b8155f15b96f45674575a7ff0153884a0e2a790e0f6180840c483b717e355e803f7e4bc810b9091e1a3e0b12508cb40aabc99d31b41dd86502dcf45b7511f66aac07b8f90a7a9122842147271d005fa5889133507a968bde42e441bb2cb306ee460d7662550b5845890baa19368f9f93d00d927be971a9f4e12adad884c01e25b875aec4ac05282d730ddedb428a114fabacae53040e9588d9f30095d9de2148545da56cf399b0fe82ab18bf5dcc66e987028697894e89cf4196bd5ec4c626df663280e5ea7f0fa3300549c0f7f36c83aa8663f49a84c0830a641099aef6a4193fc794ad4d88fae1653d6c51db29bed78d25f9a91ed11c9786164f65303f571900a82e8ff0dd8a6e80be55834c3d69d41898037ac69d34236f126e9ffc58e18263450492932ea9715e51efbefbeb8fdbe29a2b68170da3d2f369f68f367f3cf8a847b9e974f46e8836a5647535e40b258a7ff94e27bc29fed42f0309fb27323df20dddfbf27c2c438b126ca4498b866ba263fa2554e8c044e023f103a78ab92293305960f3816d7a38b41f300e9b17864a179e85a1f7412a81927b5fa1c31fb65bfe4770aac815253897cd26920f9b8520da2f23128ac7b1fd28c515b8d7e5e6923f0bd5a0351f33048597d08d380554b8f79726920f4bfa20542f165c8593b0aa291af56c57a266948f7b8a40002d5bac38e1cdc9f376270b4cc23ec466b6cd2b58d9ae4764607eaee46ea9508697a758555877b4c9b577c31f4a316237bf2f5d541f380b14eb675ee682f680067f34328c9c467b08d720e325213c5a1571ae04833a19522ae160b97542e5c798beb6f7fa029db92c130d405b4223db7064d5fcf7944b1ec399681d585a46bfd893793d33a1f0116b4dbf1474b6a66a5caa4e0ce50d283a5adc69a92acf0a179f9026321f4a5d03254dd281a6c82739186dfa8389246dae92f574c24ac4fb8e744c4838cb49036903c135d2e86b0182cbde099c174d706f09e074799e802eb02041be683a4b0c808281d950742c26af4897d1f6195ff20cd613d5763b298de0dcd41ed490a80d380c67797d744b72fd72d007f0d6ce7750f792349675b704d15d484380723f73ca0a154676c95c3d52c0dc4a1e4b87c8c228a70870b4604d6897dd0a8a2b178468755afe5db0a8f217a0dbbbf4c9e79453006903b8ce01d7ff32eaf9c9db0b8c8af17218c5f41cfac9d064fac794f4b67cded026609e22a13f0e75af543a5566d0db4df4e21410b481ac5481d3ed01ad7df9345f07353741fcaeff69a1f4f387c0bf7de1479b541e850c6ff43f534aba0d871b84fc8d5c25dbf42ca0cc90e3f42a6217a62140dcaeca3704270ab1cd38606b3daf35395abe5f31610b16659bd1a2980e87b2a641c62c7200cc9d87421fb3de33684f2f29a734561796bbe4ffaffed71795c33c21a5ff3e25d45d8b1e2f0491fd5abfe94af55a85d2b38a5c4676f8a401fe6115bfd170120b2476058a143396dc283674bd9b3dfddbb55fe8844260aedbf8d4d8ab19b101163b4b42140cd416a40cd3b048e1f15cd0778685e971004cc228e949c19d9e00bc49247d687d54dd2cdaf803e78861da837e84172232a04d04866a20ea5f7bb17d7f2969930b1ae44a18094129ee3eb5c9e68191e38b234e3668ee68301a779ef18a0a3908683891941b836e6068ddd606fbe59784475f7711faba5019b0d48dd847dcf1ac872599f6cbd7cbabff926b0e253df7b9d56606fbaaf0f76f5f694f36dea76a38729bdc491f1bd1b829edd2bf68e1c85282d7ac19b1498ac41f43ad45d8100d392bfcd5e6715976030f7a98e12a3270dc6b0e2ef589f73ddc8c4e7bdd8c5873e69af8e92036480837fbf53907004f676a5d667454680667d486ed799102ea0dd3842fc315a74e23be7889665cb79491bf38aeda71679319b3c6d228140ef3cb122065848601d2996f3924103ccb6a5e5589dcb0ea608d0ee0150fa2730b28a5a883ad9fc7e144c5f9b936411715729acc306a0566a051d206123ca4b690e89861256066ebc79b0ed674e1039b008cf8abed8afbd24f8250511e33672aee0e504c67c45446f11c049e1a00bdb365709014a5a7cc3741c2c8ce3be970c3b0028a3d0b142ae5103adbb172be2032b1130bb02e3207a6f56d5c3b3aa4cb7211e153d820a126a6c78b44185c41fb68e6f5aa8acb91172b524c7956bb24fa7cd8940612eb9dc782e673c19647077857cdc089b33d894744faaa4157537ba20bfff9a2d8bc80c0b7bb0ae6dc166c69a38b472ee32ae7d58d459101a8e5917b2b0ed7b016c1c1bc5676e4d6238202c62500d0573321a8e0382a9d460ea66a01ab98e6754d98a6d18f37e78755806b92dd825465e6b8d7309039ce12b0f98200e351ef974fd94b2207566468963c2c57f896388d1037c967d5804fb7228ce82c8b22250fd0537efd96a910ecc89275d40d19fbf94e988f6872dd59c80d7acf988c9cfe70e1681a39b572caab6a47312a660adb6a813e06bf19d908fa4d6d70126f6690525bb0d853f4539391c3b6d85049ebb9fdd57b96c85cbcad9127899773f56e17b000fc92828d01b17c8d4cd9317d16bb8216acfdae6434690681e978227511410ee8506a9d2bd2652d802510bdd921da95f7d6ff4b3d7eec470d63b8f1993f62edca598b5ea5a9ee1e1888b970e03f98803347fe27f1b1061cec393f754cd866456faa789dfed75a5f47cf9438ea11fef8cd1685e6a3a3a76a17992867bce7d2c0ced541e233696746d945c0871c2c61b290794a38b51061b6b2069dd67374c2c43668478cf6aabb218a45cd98cfa1aa4875a8e4c8680d7c8d2ad8983b0266986843d428a2450fe77335150c45ba739f37b44c8d8b967d2e664c4914ec2c71105cc5b327b8b6237715ab9ce31cb43b35d4b6a609da7062e2c4091ec0be85bf6a9f6f3daabeaf1d6e044712b990d4cffd1f3c8b1b5c433c5e68e6728ebd7dc759ad3edf853f5dd942bd2002a1ccb63baf6ce45a5a221c7191da744f93e05ca893843c2f6d4da6a1193a1a80965031d99dbb2917f9f2d9d86242e0115e1373d8844088fd0b17307edeb8fb34ac5a5b5e61954d75a248758670799afcbba3167cb65c4504d42469164d60526d58517d42b399a3a5f8e2a331c763dacf245b83f7e15a4c40a2f4208ed78b88d0e196e26bad2c5084fcb01827c28a60f6fbc55c56297041124d8cf5a5df2c90adfed0c3edbcd827695e6792f3ca49c8933b232201c93f8372c5a67253320e8983aebf14ee3f3adcee4d8e28e7040dfd9c6fc6bdc3a7c6a7fd30441db5d9bccbd53ec5c3db506922aa749bcd10fc219b4f25deafceecbfb845299c03775c59cbb69a5a2e6469f8d94be1c78b4092d80c1ef8fb13972e076f683c68bbb014fa2817b1aa4fc05187b55c54abe77be7126c947213db9b9e5d8a9c66eb1d70d23955bac25e15403c204330594b2dd1b4301a6b3f1838504e1f4a5171e018722625edf84ca952afea93bf606e2712408fb425f1da0e8e541216b78689608f7750ff303299fddc943c03b8a7d1cfc94c191b084183318d782dcbcc3a65ed33a36c8c170c9b1677f0caf9e4a69f64ac8b1956b2fd2af42f22bbc0528c8a8deed2ca0161ff07105b2ed6db7b0c0ea92a967aa4a11a2ac9419530319fe52b34c94c21e23c10dc092f917ebb02d838a42a98bb734c03e50544cb8b2cfd3559d9e0b4954d65ada30c650778b876c9fd2a5cab6e91cf989e85454aebd240cb772d34a742ae750ab8097d4048246a00f08f3e31cef97795e980f9d756fd6c91cfca688222c4d9c05bfffc2316827da1b007d0c8a6948e7703a928a5e7b6540530014c6cce5ae4f1793cb530be2969e803ea024f416eb90e17ef7d1524042537523e99b147f45916998dcea0daac8ad81ba13b30fcec62093842e887c7fa7a3bce1722e4a2a632d22bf13e1e006b38bd8da16ead0b0c4dcb8118914ae7aa166237a1a69c63fb8bb33fae2c8eea010f19b14c862417b4f39a87027de43d41a318ca8c80cf84b791fcf11e402f506f963ee2daff68cac12b8479b6c7111249ebefb9873c64c0e24d22778beaddee966f8cec66b6db7e1c80a5f3a8bb4d1939ddc08d964a31503eeeb59862c84b1966e4e49f7886d18518998f202bc0f114e43ca8f3581bf155f60e9f989fd6ebc1fca4fde498b01721c228d6365d01652febd3177e91f5c7be5997c20cdfb89bfde90d56f3a8e5b74fef34131056cd7e8e870616c936be222dbf03845235dd1cef4d96e8e0534daef7dc967dd7eaef4833c3c8a73c8d7bb58dbb1a1a421668e6189f7833e59523de0f27d9f8f7b70831ba630adbb8de97e7b7ae74db2621aa8e11c192d27d89b7c3e04121e24526d7080501128b468ff1e018b66f57d6d42019e8893c5ab141d0a0196c6cd386cfe4e0ec24d4381495ff1b7c8e87d898ec40234171e6e43d3237057013845b6665073ac509abde1b04d145f448c25661bc3ccfee1ebd096b8a6ed0f41e12c9faaf2422e97889fc877213276d143292ddb8062e2c9c3720ceb3063f622295a01f35757cfa5a66799c1d8c51114014eaf07ab607c225354213d304371fb509801739fd02447f854cb670041a9856c7700e6171b4b62fa553cf3be1dc0c32794f4b3d390f910667dfc0c99fe7821932aa8f77890dc9e3370c29cc74ddc5cacf6fba79958beac0633b0ae258179b395d4f802a3280a3e482b4427836f31c0cd6f98cdbfb18753964265eceb0d96378219213bb9da5e752f56d1eb44c8ccf5dd563d99c7d9b5a2f87b5b941687006ad3c581764de4e623eec8eb970339e03492ef71945fbc8e0fcc78093a0b3ae4ae63a5f1e39b751ca8d57787cd84c71f742dd3c4af7e4ecbd12d8636e5378cf5c1accc4796cddfc3e6c92ccacaf67c4d70ff48b748dfce5123df2ad1139b1580e3762571623eeb8b9b277fd8a4761e5d567ea6d1b13d1e962d081f1447e19315b939e5be8e2b9babb9b31ced3df53ec32d8b8df0e241b6c3d29720a325b781063fee21c9d39f8272cd29c24d00dbc608371b8171301299539c902add206c76ebac12b252d45b0d7010e130d737a17e89402f9b22e31cd96402bbc84b8bbe319079cbba498054fe85312c123c9ece99cd277e146b220c2cf899f6c70afa8d0488e49d691a118af086d62b3a4a18f84b9499064b705fb8f33e7078d6d3ab018114e6ccf5f3a901ef4dbb6b61a2b95d17f702a6cd06570d10b1fbe41e9b01d3fefdda6ae07246ebdb64e9a744561f6ecdc7bae36d5414f6f7f9291e823d2ebe6275d7821cfa6efff68e46983f2d294cf4ddf44a200ae57f9458d3557e1ead20302f118298c889991d7d1ee5a87884ce791bcc2b34feb1981448d5e34850b9088345cfb4549663bb4c52702776c4353e6dc179ecde58f1a93bd073c8dc8156503d59e2d91fd4b891a8df443c485e2b87e60a404f3542789eccbedf3f8d23e71409a0b6c97e7288db51365f92e0c9ba0add3d2d2f1b399fb5063fc377cf4a65a5e2b4beda5ce3cb8b7b10a6a5b0603b9fe9842bd2dc508e8c905f8bbe45d1ec8443a4c01d90885413f15e6b56a186f394ab40c5de24334a85717131e5322f76083395127fef8eb697a4270085e6104f7188ab680633e29c58a68f0a1db2a0d6a6933468aebb16da3540b3588a6bf826a5c718be55bce2d2c9bba4b2b6835a9fdb1cce90a0b4684a117e4b58d6586fc11824ce32969a009f3cd0d07609edc7b37fb98f5f839244a8481a14dd8e0a16d9c55550dd7da8ffe4b6033e1df873c1ca1b62073aee778ef3c89b9e422242f3081f50ebe694c52ea009fb470aee5e9c1da2834438d53d9ff7b69f45327216777e574c18bc9aae0d72cb99f5c648f4a74eb85a7da3d770475a16227595bc2e55aaeba8038a734c71554856928f5c1f9094f67a4236204e5bf233ddfb6d1d929af12662a869b3e3a5f5be257bb64840d85a1f694852d2617af6ea0b6d064588e0c80ce3f49131c3efa51fed402f086f664e99e8d6055b52a513148c901f917d4a84274e99100d0c97da00304bc08dffad28a1f26aee147b5fd8e49a0ed54cd0df578620b3947ae7fded001804565643445aa17123e5f3ca1986252352861f539acdf0669555469abab19bf7b042c41f7c7d5ded3b223aff337be9001bfa96d3e23e974b298ec263c992539ee688cb4e4afe859a8d13434501eedd4a63205c31ecae85dc7231217f8add18358c8ec16336c20a63e968759839dcb32ee51f935f2d083a12d76fb9c00948c163e48e2ca956066a8b0816c00c5ffbf8ee94ee1cfe5be893106f879cb18d9baf216c4e3b3db9114090597fbb154e5b2b4a3084a9cb60c8c7f7800a984a87eb6a769c9b5c2f7bd8462de43c2e9246e054a2d258ace37953e1354196f113ac9f66b4026662228414f4a117e5e243ad9333802ee7d482bac630deeb86ba227870d91c432443c91fe816d3cab24e0139a3bdc07ba8f998f3e5176bdbd8840b680cabf265b617ab46f91e61488d71e43ad1fb1a6384139e7c7c3fb621ea12046dab94d12659b24207cef39f69f9009f3af6c19c9707e7160fa593c413c3c838cb8df8d22bed0d1e4be90e5842a7ecf97e03574ee081f239fa14ae63b5046f637be035514ecaf121c5f328a6ea50d40421aaab202600c94eb2a91a1497b4a86a78c7e35863a0f6292ddde816582f4b228a0ed56c0bda9d3b4043e99ff90f579ca68e5506df42856c653e43446850c3429044793bd23c365626a9fdec4f54c638d3a705ad48c33a7829f6e12f5740faa0530fba6c4ca89ee88c13f16ee206564dad8022c38a51db6cd2b11b030d22c7b4f1a7bd81c3b6a4d6bd2196890e021c3de16c794d1aec4417ae4d90802d60d49cd555a458f2da8298083e622b4ff08b4f837764c1b991c031e711e671cb08e406c29094c5d27e27e3b6deab444286f2b71664c7c1edf36610b277ab94d2e7d69479d2f16b311859d62ccda4c198414b5b701804cb7ed00256bf26d3d972c1be81ec27f571490b7e4eb6def9ddf165c9fbf88c5a81c0f495c0aa59873efe17553453f73af98158d0bd0a1220c7ff9fdc2946e1ff10d0685df4e1fd2160a296ce7023454e3f31248984ae787f5118500439155747895329757e86ae2f0be8b497cbbf6649df46592c5000b6b083776a7ccaa27d0e7129b14f59b2280311884fb43180bae5febeeb941c283df086eae5dcc52ea08c02c1df42f12b7bf8209c033addc9b7495d4315a0b88085a039147b414a2b86741a74ad626555ac8ad0aebf76489dab5dbf0e16fe4822ecdec36dd11c82dd4c10aff578f65d5c57ac8b6d654ca383aacd9a88939be4023c06919c5a54e95842997560755c7da3e1203ccc01d94415fc4c0e78d24df73d12e7ccfc006a07702aaa0acf58db3693da2896b10171cda684cbb5043f3228d3889f026b1d11d783c00a473feac129ef76109618f6452c65d79ace5615954bacb78a84f93986b592be4ae68ab9fa15732fe89c9195b2c8c966c8996b1e69e9fe798a606718a0c137384d2c17fb55c7cf3c5c0ebc9d28512428e0e2cdd6bb5f18973069bf0fa82d04aa1e02db3745a6e8585163a8ceddc80bd22b78a1f9977afe0d0e022597296c9b23a268adaf412141f604767d0e9aeff546f605d6bcf679df270f6cede12e3fa0fb3dd659c5e50b32342a6e4f31354a94d5478ff9a2286aae5adc424a0a9bef837c0961a9139c05145be35f917cdb0cddc35140e962ee76955456b7d4a8336911966698021f6c992731c03a756d92e94a616890b019d137735b9077dbd974b80fdb8c07bf578545d3e75266a7dab0b175dabead67ad68b21ad164739b334048ba2f801935db835bf8c8beeac4ebd620a9f1c1a15ef3cc1813ef7634703276ef37214f9c6f1ce42dc791f4839039e87624a436dfde19a1b07e443b04af3a724be803eebf009108583034698eab31e4d533192f20914f498054c0da1bcf28deb2480041e945157a1274c70431456a35cd60ce6b15579744f0f78281911419eb5a3e009cd06b835d885905576aadeca6c2ce5cb3135b6e2f9dbfa8902de80ea7de21bc0bf660a17ac62885d83ffbed2ca228822e70caa6e1738ac73e4a0af62437cda591d885c34ac07c0bd00173925d445c1150c02e00915da63568ec2a7439a17284588368915d389f0fcce3b19641604301d2393addc3598dc4831004f4818002e1ce939c1d687a38b770b4262c377a62fcb6b726268de31ad5fb6bbb6c912f3fbea6b04fc772cb582e45dce478259a0bd02362f824e702ba9da0235fd41d4e83f9096aadbfcf80cda09a68f10e7c8a2dd411a9fc19d5ac6986d521bc0d0143f7cf5997d5ab4ca00faad6ae0c5220876ffb654caceca5b4b858e7702add1c0274ef7fe920c0161389159d551a803c7f82d940bf7e4ff4843a882a9f7afd2bedd5c65f6fa7a56da1b341b2ec384da29c7c54d9c097acf3d207b6d37058a1f5af011796951e1c4a8a0b0aa0607c0989e50596ae75193dd6d28780bfec133cdaac6904481a7f1e8fca628df3f3539fa1ab6d57f72fa1cd2313b5b29e7f0538c70cb54111e98ad4958fcdfb9c15bb46a96329b224d63a31eef260545f7df25f2c51708ff919cfd5454184db18d8b1719b4d6fbe3d4636e13f40ceae2a450ed7f10273d3fc4e2244bed7810e296348878710afb49c999ebbafc1032b2efe7998f5df90646f715a87248b4e974d9cd74bc96f92fe325e235c5cceb23c41995dda5dacd057096171b44aa21c8455f9dd07e181eb019a1f1f2c06d21e45058537e7f51634600f5dcee80c99304416ec4f0378cbf28761a2ee5d623670cbd4b90ad1e5d0c2619866a4e59aec203aade4c9462144a6340bc6ab4dcdb8a8a54b471a3f305cc54e71fa9820ffdd6f1ff57294204aca76cd245354b258caec4b77522e449b4396b71cbb95ae05c0c1e5ca6d383312cabff4f065fb346ad13632d4c2a5c4dcc81f4a7afac83fd69f19ad3031b35570dd3041c7b8aaa70a68a725dc7d410ffb94f08576f6a4dad135387db50a5bb5425d11397285cc61381ccf2ff27a394f51d99c7128cc28be8a3c71e97fc7790207625ca577d7d6f9d90fc09952362734ace453b2e6f8a911b8c42d3622997cfd12d9603cf932f181a03260edd608d901f5eee4c16c70b167053d7fa8518ff1329da020411d88e006fa7de0b07f1616de7b61b07e18a88ac505635a481d35e79d11d2c3c5dcfbce07fe380ae146a737551a4a221b82d92090581200c10f5006c61095b379a1ad55dba37e6e5c294c133c5c596bfe94636d49645a193e16398d208540066acdcf66ef56e837aa3022133f2ebccf674d4f49aafa11a9c4cd3eb0e7de7aed6153ae86bf4068f75b6108d0bde2e3af195666f59722879278d4f03bf42b8921a824d409f008798899ca11ea6a34143c12fbc7d599d14af0e0eb57926ce762f3633a54ef245c83f7fec7597b8a5bc80ce29cd5364d644ef9d20470aa68a09e0703679ca5725af5e93bcd3c827be381254c6ddd0a43405478bad9a648514d0d35aa2888260523bbd67e5192ba22df085cc9735cf010c4d00b491167e871d9af4c6afa85349674e59c9277ef3966767ae6e11c84b8ae29dae38e694033dfcdede14a8479690c68fc1649c9e178fedd3b6f06831084c42677a33439af8560ac64414aabe128408be20bdeb4d5192a8d4f8fec42ee69351b104ae6adcf7f4d5cce7003887db6d81a7ec3467b2e306ff795e32ae0a401cb42d24d283ecd8f678d09553f780f0961246342568b0394e4c008f72d0a209bf5ddd2481f4dfc95ec87e1cfb94d28acfb1d227f5094daa30048249402e2092ebf44b0676d1e402b728e7f213156cdc9dee19a11298bde7f18b13afaa0f6b2da170f5c4ecbbf4edebcfac411bdfd75603771d8c00490c15ac047881c7585d65dd05b46189eb5e4f85ba802775b3f356a615b981c0a1fb007fc7012538f3b747601f97111ceef2a1181a4190d90490b5093348c3f5aa1b65a732fabaac7ae39a6dfcb0e49508f303c6936ad8aa739bafbb006102f080b8ed7343254f4ae4d1dc7960f473a53a34bc7f4e37b4a8408f81d227a48bbde5bd9362950c46d307857b8c431f476c42ce45686a1cdd26b25aa2947219f459276a5a85cdf93acfcb544607f275ab4e8257ae5009a6be4d541d468b742e6179eedbb882255681967019056106ab9735a3540979595842153af5bdfb9b1ea08ad9ff7c0479e1088ff59070b9cf8bd399fab8d00f943ac3e7e30a38e2261ac0045121f519f586de41853828b7028649c50f82d633a02e2fbc9a578f1ddaac0ee03f4cb8dd927914a2e1574a5a8b6a289332dd4167d238fb15015df72830add5f068b6884c4a72f55951c230af01ffa7783d2c4c9508ed37d1f369220604ca34811a0229700c323d8a0326decc10d6b735ef618c8e6301e3146c313db147bf79afacc869edea4d5535d93915dc854f60e4ddc618a767a9a6474597468001d48bc4174fe0a78ff3bfc4ad78ec4b3395f96b2a93b12817bbb1489828b23140ed1c7a0dcc39a4b10b4ba5950035d7974d5325f8a5a1178443b62b56e0e8e0387137ac50b99ad89aaa3105e209fb9f840abfe3ca3eac0680f262e001e6cf886803bae6b2767353a652280970d2379187eedbfa2f1dff6e7228ddf243e7bbaae0a554a969053d70f5d14b31ed30aef25bb1fa695ed423cc55185c6fb71504a8367dab37a4720344d59c7c1e15718741f31c753b07cdf3d915ba96107b4bb672f217174f46e19a70a0abfb40a65ebe9c04ef9cc0ddcce9be79470afc7e9a9cc77b96044e6e0a99223acc22534d54ca95f65a131341e1fcd35cfca4701bd4f79f978d3f52440c7f795a5b80f62ae85d6703629e54309a4f387bede5f0797ce23c4f51cc202f8401df433654ebed5da1d01361c5bcf8fddb8a2c13457bb0167b6ec4569effe0a99de1f4f7ab55d5ec9ab28c53bd17145f597af0ed2e93f7b20ecf17b32185533e4b02c154bb492ab2aaeb7849b015352cdd39e69b134b2672ab61c60d1015608b7a241bf4fdc6c8fd0abb4b3031d0e6257c07b8ece3de12898a955a8fa4c2f6ff3bc311c721b55b8f26e38458ea79f5c89fa1bd8598af5e402c466c9f1e6f7993e04775c864faad23523ed879a3e23f0b04c3b67fb0b8d2f55efa4e654a6a5a8348b2a718a684d9fe6cc6b315b4d0c26a00469ab2cade39a5aba68924a4e9aeba41c97602824d7ad032011977af0c4166f61d2105ee8c224ab8c19e3d9012e13aaad67b65b7f9ce458d0a96c9a2470235c2f47a08d36388a2c9fea9c213111087151cd026d4304aa3f1b8338974a560fd8d25d3d44002ebf899a82c4eca6131aa316be874ad88784a84a684d5452258164e7a6d1cb46ad8820867ae0d83f555b366124c89083cc56c8bf8c3c909c6e86ffcbf4e604222b66c49e130cac6243a75ba81590c9369d8335f03c77f0672e33732564a71c66f72f06899108b4c995e41b9d3523b74330b617a57a9a190972cd85313654e99a2834b24f44cc4c2cbdd203c9e0923741b206e21869ccb3f063e77d7bab52543ed094d0f97fbaf340471b4ab0fcfdd70cfc0d3f06ef42cbb813cdc4662ccb60b717aef661764bece63bd6e888fb6c98d8568eb3065f37124505803c7cec1902737ac21b6ede24710c2c2b3024f4540845251f67db55d4cd6a5f74a3a99594fd7d071d36808c5a778b0fa89ab57691cf9be606b53bf590002fec90f0a3d5540347c68870f3949d4a003c4c3b583160cf188dc782b19c8ea05b71b0665675a8ed9e72a3d35bba81b9e9f9abcd3e7df682a7f6c746d4f6a2419ffb74fa87ce46fd31f29914c3e05518254f3401a9f79ce475ec47bd70c369e41f3660bd258e4dc45e66c5a15f50693b4ec069d53ee08a10b098bc5f01261c4ff7840e6227c9728489765bf7166ebe871904a45fb944770bfc81d481e0b970e14acf299c5c06443cc7f6d3d5aaec355407d98943e57145b6ce203c409ad175a8a53539505e24ea7a4e40c3660791549ea4ac9612e4a1673410569c0e82a3dc2ba73692b6f32104cfe9fa7ffaab811166856c59a7010f6809bb38c0ef4d143104b9f6f918dcbd6614dfde45440349d54cebe9a531f1f9c064ac88bff4e19dd55fbde69e3ff0c239f57e608cddfb9a64dda24d7c0f88126c6d5cd7660a0e76e84a73a344992a1bf7c89b08c0b54fccc1ec5cd788adbbafd150a43569dc253c5fc215cae55f0fd6c85fb10d0798c44325b5743e561daa0f3425eb352c6558fe60bf29cf253ea6d4b8d262875fb77dee0e6d4126defb25d2e94296ec537ef47eeda7ec0796a258f8b277378348f41c35efb365582f838d44f77fe63f13282b5b725777f885c58524eddc8a8e1ad0805a1b907134e1569567d3f01bbdba90322b710b65b8523228fdd932737ea48fcc1ceb41817cc1565ea4738bfff1cb22df2e48726c7c960677ccebdb9d5c3dc95cd4ee3e99e43241e35590c8c48aa22dbf57c1bfc4333ae4a7dade268e3978fc0567e586743e1b39ea4cdf87044dfe33e88f30e14735f48b39f7348cc6f191694cb175e0cb6881692ef557785ce6ba88a423c3340e25c31bb294380c3ac883e3744a0ac957ff603500ea20b153953343a1c1e8416a69296122d5b7fc34747339b223034e7215a39e365d8fac35916cacc2d40e6c3ebc4331345266be56ed32a029a3093f013c3f50e430e7c2d5782a54a841456419d362ad33c18d7a8fa36719290608d3598cdad5e4b61c4d9db0130fa779a1faf150a0ba07b2ad2e740c1791c6dfa137c1b6116bc38c31d3ea54cfc2c30dc288bf62d4cc92e58c24b93463ced0a499112c7b50fce74652fa1978d44a7b5fb7aa386c2c33ed412c1858dc12338431698e2e10e867e8fe4c8beed6053d6766c92d57d8a04018ffccad6308584a8c0346d242c20b45b0fea191a1bf670976460b2cb27c282255031e7eb5afe11a20fc2a04db0aa2fd15ab8209d310ed0a34cd57b4e7f70a286efa617c064e8a1f57f1469afd7c3c873bd28956e036e2e47935465416868e74a7549ac183d56aab9550f060b685e3e1d215671ac0a39f753d419bf6fced18267887cd9f66fe1b377931dec921464e1265bde3f6a074107da1ed38dc1ff679c3eeabda11a4067510fbd3da1f820cce97973e4ca4621d7c7765048ff4def6c4f37b0a328891c22a19101de6f2a2513fbf74330d378f925f89b922d9b1aa0cce666a17d268926daac1ec49cb3acd22a3ec63d83742c332b7d2940ec0380acdb85f740ba590021ca0df7f1d93bb933d688862c6801ac91e85a2d550cf000729c05fb6f54c1b5e5250d8d123230dc2bbf2e31cb216abb44f589d2ff5572875576550d99db386f7724225576fd060740a73fec8623676f513e995f3193cb37540cee026f34c166551719af48e32cff290c974bce504a5660276fb4c69ac24051f685476ed3a90f4f90c4440ab3435a3379beb3b795cd1caf952a8f237bfe6567c1921bd6668a4e0639492333215db9085ef043096240d8511da9f2702e38932a141f2ae8e44c190f6ed85d7c9c65ddcc7a517c79b5564815ff17e54245d7af326e869dfefc528879eb66a815349613e3062221a149ea98c3bdac5a1669d3fd2221252aa27a27326a82941ae320862b07534f9bb212ebcf815391e275664d2f8c5c52cda21d4c11d86c171a1f0dfb37d143ceb2883ce4691f83fa87789724a66439a083013b4f9a2b3cefa20f2d99314b96d7762966862036726c75366721a6ba122e9b25da607ded88e5cd9425373f1205f1572ef93c74b59df3f6505f17c2f0ab49c9d2946e1f822d7b3968ebe365cdcea01edc922e8ad024ac10a5d16cb8f0759eca0ad736852869f5091f0012400d3972b3ede2f104ea58ad2ccc9fb7611f65e01c4222786f2780270718695f9980a42f9b2bb8a7c945a48f0aa049eb94e95238ed75abed9bac009fd66d42cccb5d0eb7ec5f35f69c4898b867f15889379a72e4ff42d9aed975fbe585e02eb9b4f62b53c829137b8e401cf6bd4dc1dc5d4fe2b7c1795373b567333de91f8101812b3c70b42e74e0b99321400a187a5092d6348a3d235d29134a979a017f0c96589da58a9b1cdaec3c424cf57aa5983867fd3fbcd5e0caf1d9bff87a9def700a4e5bfa2ce7e741707e307778e3ee506c3c83852a08effbe4758dc69bc1b76e0bb88855cc834fd3fb125e1ef7e14bafdad141418bc1ea07c0954a49fd4f1dc3f02d4c7b66b713062a0abe67632289f15d849c758540cba18f9254dc6c8fd8ac429118f5743460ac2e00d8401c19555886119955cd36b97162e2e962a437f67647790948d8d68160325cbe731486787690b0f1f05742c94414b4ce8d1f703a8dd529428f81d21025fad017186df0d3f2ad6916cae14029d0d13c605431b7ecb18067e1f595dc817eb0ab0c687a0d83106c76cf08bd67917d1fa8cbe1a36906b413194e8cd3c4a99f6295afd73e342bca018d385e461519411580ace6b43efc33e965fda4458c932cf37102e9a3c5fcdd87eddebb7c80406117060b1666242076cef6828349d296557ca4f2330bd4c2ad59799768c4818d8e343c11f681b0e3ba08a54231e2b25cd5e210ff1ab43e0972b03c060e1bf014c12215e3f7f8f24951a515673dd7358b624973b95f565be5029a25e2a855d94c7b0b69ad1cb87ecc6b015d90c256f6ec4754bf567235ce1f2efd4fdc62903bae3e118a81fff3256e56f41ff8e1af09e1b3a9471cfb862a0d475db48c8a69e0c5d3c77bd9cdecc064e11c53282a321ac2fc6fde9271bfbee625a3f83b804c553efba593bbfb831d811f36903c7f701796c29e72a9aff02ada9232424535072647133197725a16ffd296be6ab038561fc39ec1a72654c0e501a8bd77b143d93714c67c559bffa96422a4a1cd93bedf58859735387497ed4b784a4c614d2cfa393efd01b93440230e2de879fa8b6ae7ea258d648997c8dc0afcf166414ba36d6e8afc54ed04b08d84bab6e6f328168c9fd146fb9831a90530e1bb5c38758db2b99f587ea5f51336fd4416ecd4a2a9d4205510ff52cba711bbbb9c31e9857fd0192a0892c9002648cf50be8447631e1aec0ad9008679182748b70cf2e75441609157585ac5c075fc4a3b28d0df157baf85da303b72c7fc036e3d688355b4549877c8b84979d8a7b11727a953d6721854f10c78707f89ea37abe1c87a960f363c67e06ce6e525874b1ba065da980fbde627f0a0f2da1c789373717e3fe3024c1c6a6b023ba7841009b6774c94b961fa6cc4081fff0a9b4bebe14a77bf49f74ffe87b3dcf08ca2acc5fd740b6802625b52af3606406e19a8dc3647f63017a5ab282d2699b760ca572550b8b02335cbca8f1bab3851357ca4cbf9a602ad27b97ea20c06f712d26326d33831f699dba267aba4faa00d9c93db44b1849fef6f3acd00609f561c8fd05df4ababc6c62662e418e46c00cb844498f2bfd4fb9a7e6313b5419bcfa182114c923994caa06bff287e923c1cdd370e1db18efb8a3f66cbe5aa134bff83cd1d82e5c0593b56d69eb70efe6fc5d01fe9995e460dc41868b6ae18a54aeb4740d815c703a044b17cae7907cc096921a88d9b2f0ce5358bc449116cc471f8917f866a43f3918f78f3eb5b493be90ebfdb7ddac7bd1ebba25af2a8119f169e05b958031168836f08d118ba257675a80a4e7db8a20a3d7d899e43eb30f75592ea4ccc0e9182e2731ae1ea0488f00a473d60301594938d071a7a034805073a1223f7bbafee9aa949eecd2077d8c6149f0a716e9d0f23b1620b41ff8032c831daf8bb305019b1ae1da4c7ddd00ef5f52e76f9ac6a6ebd86914971b2439e32e24109cc41ef4b8614a676dfeda155d1dd7d3e52d96159aeb95cd3c407ab4c5300c1d02d1bd48b01e84ddb3b71ec04bbf732cb8156c68c16936c9e7f4e82822c9aa68c5ba4a5278ac8c743cbbdf89b6d6425d2818d45721d738b5c7854f089c1d48e467ae9722f43fe167c44903816690969cbd06d2d090e6d4f8c6ec9adf1fb2f5f76f1d5f4238bc90bb81778e65e3c5d24d8e03ef95eaac920aa8e8b70a75e3d8492921f1a57c16aefda2546b794258f8c81c657f99f51fbcb87756ff62c5a4953add0a8b3b3bb13fee36a51091b8bc36fc2aacb096062e53bd99845eb5cb0d503e9860745d4ca0dba0ab9a36fe4574c9c7c1cd5f8e58aca56f4c67a43e6227da2957f4918e3b0025af13a155341282998a8a1caa5a83341ac7e37a5526a1cd95d6860e6a13b28ed86a0436870eb879a9211be6005fcd78f43c0c41dbf6497efd176114a5055090ef1705b90110c7f1db73b69102ee1ba12a009c607ff8329a9db909cb5412925819dfc198a6e3a9cb99b114621364861500169f4d5044ee92ab4975ab92dea86eb0ddcd064a64affc230131a7dbf48070cea2dc4f1e9d0a5b93446237933521eebed2c21fcad5262796bb0f1b725e02c5747351002dbfc06e33c314d5d92ce46660667c1d7e9950c01db5779b96032404dbb27c2f56c76a53ac85f1bcc7c0e40a3468e7d6f8e6cef05606117db74ef6abacd9ff8a60e60c530644b3bc50682bb37008c6f6069c35bcdf0f910cf760257dd63b21c15e2d5300ad7ace179fc240b8c0a405fb03b4d53d4f0c909d2e1ad9fa3c1b5ca724a867971b83b511b287e45421ce6c4501dc849e15de25e0dc285aaba9d96bdc56d36201e381da3fe72c099fab8647798336b4ba3000969f7324f60204f7219d6b8652a8a2e48b69c2c2ec0a2338f5b2bee9b1de984d316eab17235402c1bfdd3af3608430b41f4abc1471e49bbd43bddaf77000efd29e4aed7b891adef647d5a51ab3a9f4221ff1e2c93c1d7dab8076573b43739a200d15c7ea2d4b3a188f0e5e5f2afa0b7e69713f72358519161bd73f788d239d109f01df0674677ee1b29e3d99b9edf3db39fd18262c835753a0749c460e6878b80020f984dca81b1ad00db36588e5bfcded8e31723c2bb07fc35439fafab7371db21b8ea3cc70c07d823250ff65b0d2b220b087e9c64b5877ccf9aa2b99ca92a107ca4b8182cf2b3b2f2663451b589158490638c5aea538e1b56dc08ae79b089a3fd2b7df52bea3789eb8ca50aa42747bcc8f334e3e58e070876f1015d65214a0dc003f8bd7ff211e4877e8fb1ccdd3306901ff64f43b9f539f3a9c9f15d94d72835057e326ae710f695b7ebc1bd57b20b131ff5f73b9df745bce77e7210346cce1b3bcf65812fad06da44714d75715be69708fd9d0e9365c16a4c69e7987af265bad31b799a11646a345f9fb9aac7ee01127f1e4ea16d552675c8aa18a30ad9ee055802413d621a24135874b8e8c93276a342c1e0a990522a44a6eabe91560f38043197670b362d17b3f6b8db8611ef682860ff4360fcdb8870d4207ad1dbb6573ae485ac3e738b2c64bd26477c12ff13bb3a5c9f28d3bb04575b1307acaaa07569ff8992a513876b53a5a70c83a8d7797c8d8159cd32a5b8e81445a4cd6d848f6ec33b68e812a44a26c4f958d538c28b89a29bb2aede372f0c6f05d4f5296b5f4b9130569a26e83f1213b036dbaeb86170b9fa4d3cccb3b470cca741d383f0a44a0c2c13226fd384bb6f702dc9373c492ecc4fac3187805d343f23f9095c18400d391734717f809a36c416357f58ed4366ff0fc7a2c524ffd0383734e3241e636ad42651dfa5d40e24c62cfb0e81c65d83ebfbf1e18d1d2db866d0c814badc31b6b9fd1b8dd47006d2fc3e2e69619f60d1b0d1d87b50f3944cb8b42652e4a724f2c3acf96c84cbf41aa53927a2e609ca889d216e4222e79ada7888604019a397e20868655b1edd452da51293614dec8e17a0011cfd040947a547df354e7c5d7ee05195a959ec8ad8ef48165e4a7bb2954eba0eedd1747d3e364e94371861485931ec8d78c3a1c6636a5426aaa5471dcf73b82007afaa30b3c8473aa1b01b52c172ce1a42e9ce22847fdb8780129fa4de747e25fa7e676a99eced2a72b4e16e117da6759f56a032ea2cbebc106b11d5e4124ac4d0ccf852e73b6c0cc4a2bad15b1a1959d289220352b6b02b92919cb7cd2d6c0d4fd3160311e3c03d70dc510f43ba847ce5453a24a1ac603150e56c60459480f933d6e08939eacc7097e71e20f967016876b41ce268e70ec84954c7bdc4e238439310344062425e153d943cdb23328ae2e42ac5ceeb11aeb86ec7632f7927871dcfc649e68c450152ec14353ac10a8876a39f315185ac80a96bca46aed4accf2801b1591787fa0f8a57e9bc8b11f5a5af978170f79cdfc9a3e7876bb7ecc11b7f9c0852658a99d8b43aa019f03bea0028f9ee98beb561d68186587b2f6703c699ec2861f9b977949fa179cbab5223da5010954b1715a40f6a577fb338a0da5754a6ef802e959d4ed6d4ceac5bcbbcb3a27dc5bd51d51bdd7a7c8523ff8194568e2c0319aa33031868e6daaa2ed2420391a355eea2b2e6ae9eb2926aaa1a8cc2e91ee901d0e8ed6ba1ca6fd093f49337bd40f89d9b9fa34085093237898095310de186064d7f70fdca74d94638a39e5dff019d0a3dfc93a2162e37e1f000dc025f8e5a4f01055b54e28e27571ed66e201b00aa94abd4a151313d926320d2a43b6d73144861f41a77eb143f4076ea74ce2f1e89df2760b0d7d372bf71d2f310c5c625abac94e9599a1f624756db8f7ae9967613120be1d5f0c5be598acb3b1b0c25368234dbe1a4bec69b63b2cfbac8cf043e8e5a955f52b4e68e547593a14b29e1af1b4c5867dad7f8e344c496968cf8b669156302d9f36e469cca2f1d6d8e7aca874ef23a2d2d5ae6f1ec8c7f7c0efbacf30e1e3dbfd092a1b4afe2f2f18699bc750d064d1fe7fd053e613aca3aa8a246653c93dc30a5d84d78867670c1a685173ec9c1e60dd15193e59235cc2651012e5f1b2b0c0c40ba83f14d6197b69f4d0d316b96341afdf49b6f91d52ea0100df9833bb8687016505dbfcf23e8d450813f8f6821006536ced940c7c63d6ac8f4c47a2a22c20f22d954ec2746417b05a1c8399306d0f78487cfaf9989499f06b7a46888f22bd70d03bac23245d607bed412bd30b23000bb303ee5f241eadbf07f70c2d3c921421647ad75b4908f258393b01d310fa8d1e36adb854076e8f0702c88647a18a0b47c8e5702b1defe9dc5cec54db918d41d20dbf070e9330d19f102dba075f9c8552cdc6f0405a37e2888277c4240a42cd0ab167330f5f79199396d7fc1419f8da63ac57e273b2f7d994ad699bb2f1773c479a47431f3aea3b210801e4410707b90f38c13fda4201893f8a1ab9384220aeda96ce5b613d17fcf44f9a7f2a4c1696ae0c9d5ccab01149818468ecd199b4a239877bcfda29d55184eb3e5c75072f5dec2d30732985a1d898c3d6719857c8f31ebecaf5f335a7bd1b4090562427841f5a8dfb553cf67c335ab9661422ddc9999e66408cb575adeb85a76394e4d0c2a58afa97473ef8cae7f195830f4ae6b171346fccc1b106d8fd32427fb68c9098763243c85ce4975082c20a72c2efc2521b79cef17b446d12bdc2368c8313db106ec84ad1fc2b666e206a275f6e358ac20bab089395f532e192bd282a3dc57fb7332a81ddfd91e143844e6070049b6856e618f95700c3c93cffd036e44d91243bc78e04967278a6852800afd42be035b3877b3b1b338fb53a70e15d21fed9178615f2cd29e12c0bd040efbc8e5bc6e7c33fc89eb33ae6bccd4430f6c532c343f5014c485d56392f91d453a12b9ff4de4b14fa9d64cf5750df75244b0484b17a80984b46adcc4361582a814d7f34f605b08ce5834c08e02dd90daa48326c2359118ed09b77a038b423d7cb21c47571fbac576704d9bb9112923febb56b1e0246e0ea6179594b5b8654737ca9143a483e56ff6cdd46828fe423ad2dcef175a22fe7c2d7a23e9b575f4a0bcf66f5b4cda646bd4ce0417726688846e04a2082386fb2c3262d0a8595b74b3133a91cfe8c362416e209507256baf0fb281715d8c28f8f88468ab0fc31abcba8ceeb19de55b9d45e3fad22ea27ab9afdd7f7191ebd02cc5804baf29fc85b30523a4e079f772bbaad38af80039af732724bc95e7afb546b51922963bb8cdc3430c7c80353ec1a5d721940224ef6160a0f11900410443146eded1e86dd425d45f4c922d17888e772713723d2be9b90245beeb626f79652262903930bba0c3c0d279c59f776cc64a2596691c4d244f4ca53a7312a4487e8d0e52ace74c8c49ad01563d2467aed0a2bcc53d82796e1289c59b19610e76b630cce388428afd235a393beba0c9c598df4d557385f14ce7df4d54b1856dfaacff020b4995939845e721ade0c8fe54168637146b9368373ad2bacc2259c59299c59df827569654b8b330a0ba16fbd1de2cc3a7986270e0ba15808fd4bb1cec57ef2ccf9095f2c843e1642bff3cca9156a25f2b058a7a3564a1db54287be6e9ea96a1ebda832ead1f57e657df51acfad1a9e6f48f06a78351e8d47c39be1b13c6d93a618ab17e77a4f385f16cbbdc5c5d84dc439277ac3a4e75ab3d77c533de7340cc63ef39c9c9b9b56cb9dc5ca9c0573489337c31f0b1da2563aa6edc8f40c24f7a445295d172425484a90942029ad0a92d275ddab43a1e23d6928140ae5a9709612d4c128504a10ec3a2959adb5d6acd6ecd6eaf97aa5abae6e5de450d5b97af2ca71ed2baee3a26f1d2aa262874b5b962f2acb38acd39d3aac1363c6d55ae9166bacb552da514a71e7bd00ebe6f14b3685eb3591f1934cc965bc55e7cd7857da5ce95ab974b839d7b926937935cbaae6d57b01fe68b2f226321e579d4c69e5c558aa1ee7a52c721e3de9b57a4d25b14dfa3397489f561279268e483af3d95848e788447aad0e4b259c39935b6f9670e62adea0e6f32bd6d97075e14809ebb45b156ade69aca36914c36ee179394a27f532a7691fe05e67e279a35bd2279223488e203952daa133c32b6854f392675e49d3904024d183da9c2ecbbdf56ea48d9c93e21be9b2de50e24a87717a388b47a28ed943be40e9bc214ddd05112425488a2a480aac34e5a994b682a6c128504a90ca354f05a504c128504a1094326fbe96f035e72bce2e7052a0a3bc26337ebd263cfecdf8c6795b7665ba9ef1e89d7ce5cd78e695b08c07392f5f1f1b900b83c160dfaace78323f9ac8789395c7cc93f1aeb4a1f4ca1c92421dcba63c751825c331086533ca339c63509c99f10ce7927732e59bc39307bb95af67a713ce397f72d82e99190fb64de3ec02573d0eabbc7ae7a9b4dc127681fb92aa4b615b71f5f925acc3e1d2c41bf7f48475382fb986353f3987756a3de12c9a2c6be575be1082afae65507be17e867308be621dcd376df36d729c97f98cb7f293175dda12aeddd25cc6abc7b5f5b1b9e6ab2e721ce7d5cbdc731ead8fcd394d7a66b96ec555db04490992122425484a901454a37cc87c48e6594c65598cd92ba2504e7d0514ce3b8ff2ea655996d557d6434afb4a39ca4b05895b1c06a15caa97c94de32017faa23848b7a867d8e3f2eab31b191198fc8c873122f0fc26399a34bf48a4f612bf1e3df5208d43bd7a34c2914b7513a62ea574a9bce26c513ee3b97de5d5673c086deaf59a7214e4f213c3b64979e72b946b1dbe5e9df35229875e8a6b2c44be3db9f64327fa7c8b754e38c74739e5706672fa190aeb98dcaa40af4e74fa32c35aadb5b4f5e8cca99779eb69ad9e6579e52373ceabf781d5eb64aef25627afe4d7ab5cf5edb4a280ca572eedab8433577926af6e93e39ceb96b5abb75ebd687d9cbc926b2acf3c9bbd3a0fceeaa9bc55db44377935eddd9243b016b7441dd46946f1ed9bc4948f393c8c4901f4dbc966e9340d7dc3a7cd559baba2ca6394cd55423a39f3ea447ecb5438efbccacbf3376d8b532a7e41964c32a8d66dbec9b8ea74529d4e2aef21559bca653c1d4e754f2757a964542eb39df00bf265bc475f2f1379d5ccc9afe7959fb6532ad74fe17cd2644e9e4a9d7c9eb0cbc0273f69335848bf0cce23f0bcc242fa55f89e709ebf69de7997dbb637e19c79c969da2b8e52328a5751b3224bd213e0612ccb95df4e334b4da8ddcb7157ab79fecae36f5e9229bf1c7739ee7a0f794bd7539e8ee95a8ef37b4b9eba9e2a71f805f92922af13dde4d0ae60f2eb3d1ae55ce9749229cf273ce72787a752afe673528585f4a7701ec14e46e11cdf4f16973c4ad9bc1ba5441da58af36b4148993994d26a9a26e5fb36356b356b35ef2135e9d3d3a10eb54ed3a68cd33a7468b328881e010f63512c91c2c7ba143c5118596bfdfa3db9d57c43f935f9b43f74b4ae54c2b3dba46157ca4baef260db9470bef992c94d38e77ca984c217a73a6e3395b879bbf200a5976f7315eabc30e4abc397d073c41043b1e413f030567414051228b8fc266d7528b0fc001ec6a070f25b73997d558fd65bc6350de7936f5ab65e72d8ae95732ee3c1b6e170be79aef3eac19ce7507e9df394af3cd8361ace9dabbc89c2b05b77f3545aee09bbc0fdf44ea5e55accfdc83b3a13fbcd14d7844b9e4bb2629de89a67db94d8339f29a8294866b769ddeda3793a166edd3c5a4fd38844f36ca311c96758276e6d9d6e9147d3fa74a4b33f4e6e6d4724d6bea2f5a07d35952787a8cd5aeb91c7fa6c9e0e77298d3c9107f52df66cf6629ded48e4612fdd68476c37e7360ee7e8699ee2696b33cd4fd6fe40d9f89acafea0aed3d8743355298c2ad99716a7fcb66ddb96c2f696e707f59367995f4ff31ed274045a4bad67bb592fcf3f79f0a39591c11e8fd05c3f469d52e67eeb34cfa64fb7d83d4f7b637dbac5d9056e7e3c128f441ef0a52179d391a8239ba84e1565510a4925a78d73d983258ed6fea0e13566f0339f6da484b32f5963163d1abe6d3b43aaac3a17da5adb48f6d470595bd65c9abe4e63a59297f9caf89592c6faf5e8594a4d7aa649cfe44f6c27f2727259d646b247fa7cd632ceb354526978be52c96b6e259554d24803e78bb32ccbdc622134577a86a3976b6021fd56629aeb3ec3592e2385e8720523d9137948cf704b9596ecae79964abefac9fec85c621de9ed5db5e1330ee5caa14cb94c5233c7d566b83ad702b54102ae81a5d74de8374bff7af0b3bf524a29a5cb24d169b8a354322e658facf138a7f13a1aded6463370ae2a67e17c65e829cee0cc5a61550ae71a23defc748a265c93d40a61d3bf9e35eb1a7739bfb5af4c12759cdce4d13b619a9247d7625e7379cebb8ccb6b9e5199442669239984e3a4129924c26a220b8a15d7b319cddb5ea38cf2b481649e2f7167d6a5679d6d5a36a3c669997506ad6f5b27a5949da7c3c193945d77d21279486f9dce635c759bd1b7943136d6e99cf358bbb5debce8c86ccb52372eddc9cda866215d37a3d7bcbd71cc3aba0bdc16399e9f6ee95ea772cab577deb9c4341cdcb2b4949b516f465fddda95f46e5551134accda65cc345e3927034ab7ccaa56aee7b78ee33cf85dd7719b169bf21c7ba4ab7f54986e59bedbd3fc946d9ef232f728cfd69b238f91cfb0c96f9671df9c161ecb7977877532afde750ebbe3baecbac9332fcfbf9886a73909245df1470241301fbdf3539d5f3b309f5d80603ef393463dfe74ddd4e2d561f54d4bf5695f7533dab4441dda5445193f481a8f825e95a57cb39adb1c834cf34d26ac512e4a3179d0beb4cd358ff36d6b29a5906e4fa7c2ae599d4bb1b1abed31e8358f31e27af35af46cda19428466d1352af4397313954ea9c96394c883ba694aa6499a79aeaee11997d1b20bdccd6f5827e68a6f663c9720e339e735ac99285e49a06a4e314bc3349d9b3ca3946a1ea36852e6196e724e93d4143da3ac3c030ba9b556cca295e23c0293291efdd65de7c1efee8e8bf283732d7319def5196f7319efe4d633f9ca43790ff9a9a8f24e48357d55ced3ac3a3539c558a75425a0b909e7886bd3549e9fc234d54d9e7994127950cf3837390dce3bcff34d1dcef3b3ce3b3f79b55b1dce2e701c8e52a86f6e7268f228c5640a7a8d52aae12825eac8f0fc1d99a85a62084cb00c418910b860010251514f5151d1cf13484f0c15c162f49ddf4e3410620873c4bf3076ff8e8c24689fa75601052f7dca15e6ebc8a6e16403e680bef3f0a125a1460d0d8d192c1933322b550a754f9de53653a96a19cc017358e93d1a4a0c3f12893bddcd454ae9d4a7674a259452422925fc12694408278410423885bec41849ef09e79c73ce4967466946e33c8a10428833f40c3af59c65d033e83a198c2e9d7a307042e6472966cd3c531a9d7a539c743b561cea39ce186314a285ceee18a1a8f7ce03fcb4f9e9fd5cfd9c015d2c6903776899abc7095ad4cbea215d41a48d64b1029ec5a40b1281881870c9c10b2d92c4be227cce868a8408a30b0f1546880083c9973323a4cfd9d1b7e70c29fb4284ec082264486450b2a0ef6c8a51c6c428738294f520653e39fbf9765a245d3b38cc200c152288b60cd9e0ebe2333522d284109a34f9c107073f5fa6475c7ca64833578ea0a2073be0414f0f5fa65b7cce60194f8664082a8438047d820e51a26f8a25684a90d010051aa25068d0b74f24e982484fb07081133060c0e488cfcbe7990444c90e4044617c80058b2f5398169f29cf370d9820d1c3145ee830c597694f169fe9cf77a64c7ed8e2872ebe2796ef5914bf3cb34c2edfd3cb3793b689cde463fbe491ae9d1680818315580186085a80f161f179f6ecc8a00b162ca08118244750be3c7d8e3ecf1f2b6ad882e443133850028c2fcf2e9f279419a47d794e8933cc19e20cb3062f5fc07c4f239147167de4914691e7a3fc912eb8c5115cf88044123fdce089ef8af6295b82acf801081af4f06509c58acf32a8033ae8c1161e7c19c2063ff8b28c3d97cf72e8dbb324ca120b09640f5fc0401a9148a4926fb90486a424d8b7779074ed44a1e108606cf8a2084fb0f8aaf8dc3122a3232fdffeb9bf48a087804d10f1ed30375077946f874b9874ec169a8787095047f41c9b78139cf8ee31841bc6c8c1952494d8f06df91c8b8e92bebd3fb7911ca37cc729df51e83b5e7928394039d2267600f2b05047f4b65dbe3fc725d1878acfb167026340a103115782bed0f2e5c863d40a429222850f536a20f46598f453b47b40ba2017444ac4800a23b2dc8083afbd050e04e9f60844ef9c3e828b105886b044161e1abed6f2fd04971c243d2104d0151ebe26c2ce10517e2862842668d0c4cad759b630c9bebd7671251166c1cd9288684aa22d26959b3be9a3f79174c91e78f4d1a70b6e964132c224eef9e8b5cbcd4df4d139273777d0479f4337f7cf47d7a6449f46a24fd8cd11e9a3734044e77eb831231ff596e3d0e1a35e03ab2061c113e02521c48142a0c1cfe67a2e0cd22583669cdf570bf0b08a15479e7a097dc3479d059c5d80455fe5942f177e9641cfe5652c4803e26a31b8566ecef9e815895b23d14b231b7103486266b7e217a0a0ad91704823cc231c11dd1c162bdea04500aa40350be303bb2c9f9a173c219012264998e4913db78e298d8154d4435e098762345d303e4b5aa832b94e58513a4eb9ab064af231228279efdd386e23e29ac4b8508930448d933bc847568f3e39fa0439a95acc3739ad39656cb1b5183776cf39bb59252637fbec0f55703d206bbd97c53a329af3a50414cf7c0811ead3354c64669e39f5214f2c10b9188207b0affaf4214430911410d130ec9b3e3df358d2a67d7a50dac06eaeb34d88d21565b0620c940ffe00071dbd7900ca21e8eb26a2fc000a4dabcb07abd8e2f341ba687c7c081023e5e813127fa8874bddca10c238fa86949648e2f988c024acc880868ffaf486685a3e22ab1a7c14c33621731fa112528486be4d72d48341d0228cd80789ac6cc1f36d94a35e4c220597d837bd9b28df96d18c66a50e16d9c087a46f7a35367c5be5b429b680d205af1c4191f46d42f8a0dfc8a31f528981e7e38e1264183e6221f227cc117dc610c343afa8120d3776d32d5a2461b74451ab5042a3c1a988127442d50bf80d768c5166ee63ac593eb68cb1081bbc9129948f40425c881e0a550183460f85aae8e21b0adc21613087a5407f128ab411c28dde61a6f4c05808225da62f61c2b802fba2b7205d1109088a74755680c0839e20e9ea588c4957fca2fc01162008c1be088960b06fe873fda2e81e902e7914238f8c3d3e3f9128ba048252147d1ac11a8747baa20e8a14897dd165cf91744518953ef348ca20e9821f0e0f5f90be0ce7088b3c59fe4c9c638fc419266509a350b694c6dcfcc04916172061c593221f95e2a9df1d7c125508e56857c4a6e072c5668a5d0fa020230a8d03e147c9695ba64ba781ae895bd2463a8dfee1e69c975fbf7d8801903e220640faa6b74f81e5616c0aa147c0c3d8143dcf92ae08b48d74e9d136900ca0205d37413e3658e2054300e1cb271d47bbe0277d7a2c489b48c56da4d8d2088d25988cb85bd0d594b8d384c5d53c0bc92613b7c7031ac7e4d351689c92cf18fd476983152511210d1dc58c60319ea19ecc7d3ee6432da2cf60d147cfb24cf3cc333560cc1830bff90b364cf14bb80837df1ed2669ab4b8d4b390eca353f9c5cd443efb0c73dd9abdaa993350b99923d288a68069b9a29d4e973004d2a19d2e9b646e32e2e6ba6aafed35ab372ab8174b2e2e0d0c73fdab5c0104a26ec1f78f7595fbdb09caee6e1923155fde6fd4c42d48bebbefb70d3687336eb462e4e14a8985e805fbc690d00938babb5b4aef3a21c7494a69549893d22ccb344dabf5a6d482d064dab68d7bd51ffd13562dab1da57d84ab69f52743a376a18f7033476bd4916599565b0c08afd4b4ca99826eae1f3d7e949d579feb771110d9dd5de7853cdcf6ad72a68eb2cb3b3f610e58eb2d95ec4b7af79cb0bdcc498ae76632d9175c721b6f1bc7596b5f9d7dc153d4babc53aa5a292b95e8945d2a45d875c715d1c6fd4eecc8750ba260b7b86ec1f644f0437e8d3aa2ff38fdaa5b7027c6d8243e9cdb74c8c59b5dd85082849a058b729a904cc6cd232b0ee84693d603e5944c3983e930e6fa63e33426e2ac4237c2ba45cb6d26588255cbe884b2e3ed5e88639e4685d24bcf3e97e0256ed30bea8cde7de36b4c12e4503e603d90a8bd97cae8fa8f0783744d00da4887024605c4a2c7fb0c89a465a1513e60b06ec187b165c39ee2daad1974a157a32bbd8b70bf7e4ccb32e7ce6f2779773ef3e97007f45209956b09da549f0baf361ddff84d83f62d8b164a602fe774195d6631c69651de802d8803e294e21837323232da70c7e2185e68b175cca85bed25af8f62d21559ac8ec19a4b33b93551faa0398be57da6819f2e23ec0ec21c996774d2192e86d145adf7ce2a34d3b6d5d632c431bcd0a2d67b592cf77aa4d5521225138f6993c1c66d1cb771dce602ceca6d939ced4ea7ce72ee5babc5e9e03176a76d03e274872e6ae3b88de3b6245030975a06696b973b4fa9effcc6596e460dab5b526e74dbb11e76363669c166c0603019643c74972e0d472e6dd335f808c40b74b8c1e4a596bedc1ac17cb74d6e23df8e24fb1b756b72715133b5de3b85502915d735b4aa802e6da5b50c710c2fb4a8f55e16cbbd62a13a752b0877a41efad4aac8cc48812a2afa1c9863da302383337a2398a3c98d9ea3910cd6e9f4391ad57a6fd4a12d61cde0f24dcbc63dd60cadd37a055d43c9731cf3a6cd73ec62abd5746f89e5de6a7139cc50a56854e9d2340fda2695c98d59caaa207d3acafac84d9da6868bb02ab23ccca12d5153836319a11e462308631758b16b9e6318d573ece21bb786bdca8d5e03754fb7b3f7decb6dd754aa57bbf7de0e7499caaa209d7a2afae818ed95181bbc112f9527628f7a486508581e5a18cd324a9db8dbc3581559643eb7cbc2c5d594c8621715857ab9aa87b12a7e18badcc358153b10715349b4cbb55aec704b5b3215dc1ac50d570bc2963b9dc8965c9b04cde2961ec6b614f194897b7a18db4283cf80d8c2e4b3b71a07fa8dd67d189ba28bdf1e5229b2c467bf59420b131a679db3c26f4d529718461d994f8ff2fc9c786ab189a056b22cabb5d69dd7bcecaff5d49cee3cf584d09f78b26087c688a5bdf6e8c50dd3a830bdfa8fe915ef3cdd7929a49fb6f7907387c618c5066f14fd8c0d4350b734edc659c881252114afd0187a517e7ae3d9c3bbe956099df51577eeac2e8e4191c86b79678b5c5f71278633cb21e8bd87b1279404a188fbd55b67491bb9e118d42d1336f916f1eade284ab1e4759a47cc75960b83b4915e6b52d2363969e14b71754c4e3fc3a4120c929678906831c82706692515e6631c5eab5b72bb699cace3e79c9bc689e2c6cf3927448085c6d1a4e7f478000a44b899c3cfb0a8a5b8f1332ce23ec7cf1c689c185dba0b4132d042e3580d3e61a4e503634020fa01f3355e3a0cb12118c1e823334c8a52a28e68c2d3e70a94c69d1358d225398cb3697a9d31b68141e13ce4514ebd388342a15ea89bf2eb29a79ec22ba4fc7af5de5aafd7194f7933f75e25a82b95344ebdb58d502899a4876a45237599a4a2daa85bd4a9bb74c9c02c575516cef76560286daac79f1829d064227f7a89f4794aa592edb479c5592a81a55432a80cbd2bad663cca70c9aa3368f84db9c96978f73acbbb7e71d6bc4d5e519a6710e713eea8cf47619d8bf2dc79deb090fecb4526b98e426199c454ba5887522c93441b3dc292a973ae6b41ba62ad9c474ff3089311265db36d32e72aace633f7a08fce33eee4416f56ce5b758b25a5542293fcac3a75a452a9342fc571dcd6515c9deaf49b8b3605975846bf71dd2be5b21bdba4d3b44cd3a8c9a369053a449332a7312a44871a27766ef2ba58e35889910e69344685688c5aa14334e9238d691ab5d2499ffd481be9a87b6a815ad1688cfa0f877fe486e18ecc73ce4d4b06401af665de1e79eaa74108216ca2e14cdac0f0d35d4748ffc425900f5df5d0aa308087b8c90926ce942dc78c691e10c23163becc33841036c91c5a0b34e0cb309436124f2f9bcf6f391f4a29256ca8c429b751ee09acbd7931437d068297976e59b6651ce7c18f6e59463301eb9c07b1dc567a21c6fa417800cd350abf2d9b5e564bb804cd6d5d5d487da8437a9c9bf744cbe894b2d434ca7d0e7e5b73258e8b3ada6b471e7e23001c8e120ebf11003b4db01efc380ca1cd89e33c8b21b4b12a8000f5d33b9bc28d2678ea279b4295d5aa8082a77e53dcf46826d0b9f5201d6eb71e84739515f70598048f7ee7dbf97a73ce33c2b9f58c585765715f8049dfe6d1bbcd5eebc3c2cf84b22a240042186d5731c771a6d66052cce6d0db0414d09f72c310da4840fa54c104a59f3ad429fc9d97b5964a560272cc183a356fdf4c9b6f3847936f9e914d73080f90a9c9a59be8c671f0d33cf8a552851096362dcb7c949a4ad9a0743d99a529b5f9645a6d0e91d303625332417de90199251ca1091405737a41789ebc90f33a42e4576ffdce57f2ade41929390d4f5ec87921f20099471f3bff516a5550bde691761597a05f93306ab47124d67aca40e74c21ce2c55a029b44b6f88ed0bf1e5843be084393ac9463729a995401c1375b4cfe6228f4de32ae5baf5c39d9fb9f84de18eeaed9bc6d1cc358902cda6305f27736925206985b3d3ee0fd9c406b8e66083d2257b48028c1401fa88b80d5c3ed826dc00c9131f7cedc125ae7c5b73ed4128b2f8a437a46139a0a2e81b420487104af4e0836d029129e67bc20921e1fc8959304774e9c3822db87cedc5a222be9d48a43b32d9e08d564eb74a98b2082223c9420f141e40c4aa216211f90d22374202022bbbb1c32d699ad75a29a5fe233af59d9fd2cb43b82f5153bf09dfa85e4de3b811e16ce1681c202ce9ea0159373925742bbff00a413bf91c7f3a4d95b7ca96232f71c684d2b07d807b1de9f04b5e63d562f532eb23cedc97dce4bd203d0bf9fa01eeb390d789fe23e2cc45fb8a9ee58a33cdcb308df4f9f24e8f46e2f9e5b256520c47a239a4ddbeb5a739b4994629b414573a7fced78a5c7fd4c32a5488b1438dcfd54c51aa107df39daf9a67f2b692433b4ddece4fef46e6aae95885449367db4c46740bddca00abc66f74ab1dc923ac050eb0e0819c9c0754eeae72902e12120a11c8912e16723870c203e09516bad54e839db8255d405c6216bad53c48351e563912f339c290620fd56183374c46dcae31e2d254c8e5b9f62c4cdd1ec65aad13bad55ed3ae1b9fa3d1703db7661e56e962e533244a7d0b2104dd8a1376773786ee423c4a8ab1716e7d7bc36e081bf6843e6736b399cd99573f63ddcf4158f3b27d86d9e08d18630cb0c7f1904a11203cb437dd8a1d3bc699858931b3e1ce87548a54e9a152e4881bb4139ac518ae938b8a92cd00bba52d99925ba3a058ae1684a33b9d18d3840b42ea609b36a61512b4607577579fdd5a7133d07ca0dc0e736a3d8835762384a555d6d19090ae08d31e5229e203965a6bbdaceb955573e0d050f598d7d8c38246b07ad3117d94467cf46ce3a1d7803c6410d4b1e4738b870fa2c001080821241f3ee83570c7fc0fb45ea7fabc153a2c21f5300683c192502b9c78eab3866f8b5da2dcdc788ae3e6734e78ea3db2e8c243af14b500c5d318e49221d2539804c1c054f0d4618e469e7a44127d9678212607ea04ca538f41303605971be89548c4f21c8bb23cf5685483a797cbd3199e23f58629c96d8486e746d23d349edb67c98f189edc4c9eb61328414fbd63404f6f5ae8fbcad32f3751173da5522486a74bbedc5c9eb697a7317cb9919e765283790a84afa97114ecabe6059ff23bc5a77c95aaf1548a044fa552292a3023523652299f548dd41763963c7143123188c28b2f35668c06bc0dff615f366a8c31c2d7a851c37dd8578d284f82bfec8b8407d8578d03ec2b05a5cb041a50f141f2a3850db07cd6056fc54c797b3f6bfd460db7165a01737264062fa0e04084cfb6400c12129bb2d79260adb7607dec181fec115b63ad0d6bc580c16fc33ffbb251535353e36f5f3524381473e549f01ef645424da552296f807da56c7c0d313d7c0d67807dd558807d5958b9317c782e888fe3dca5cb396f354e8d738ea371fa39bf91ae560fc60003840f4537d8f0713c7060b4704cb81a1c6739c9f9161dae7479f2c40d903e8e055c982f38e76c70cd719e21989ccfdcdb7068c3dbf0d93825bc0daf618e781b7e827dd928c0931026862781048724380ffb22a1460156de7ab5e1ad5f3041bc1da3ca5bdf615f9655a3468d1aae00fbaac17d8dcf1aaf597ccd1180bec673ecabe6a652a994bbec2b85635f1cced388a1e569dc04fba2d9e169f81d7a1a34e6d360c147838609a08cf1851334fc40d1e5a3b100027cae49326200495488e1c3735e827d716eadb59e00fbb208b02f1a393f230c2f7e861fc0be66d4551857fc6ab5f2d56ab55a8521e5e6addf5425cf8521c4739c0c62a8c189228e2084101fe73a0c605f2b96c330767896e7b02f56edfcdaf0dd0e5fe7358d93f20ea9eb1c47e368dff98d74edd490c30e8ea0610ad8100d5fa74317460c9ded64d7adbaaeb32e0b46106f05f0d6fa05a3076f1d877d5956925f81e1c3af562b2f807dad58499c70c0129478ceeb97a2e7fcbae03967f90c9ef3d6174278ee8b0ecf3901ec8bcbc9e1535f56f0a954104782a082186c3182ca97721bfb4ab5ecab93e185152fc307605f32547e87f02aeb2a954ae5ae72a8f282c95b04bc7501d897e538ce21e701b02fee867da9661ceae0671c00f635d3f32823347914ca71344ee951be6ad70d0c0653f2a150eed2157b6030980c1fcac890122f78620656a488f2a11c8acfab9a207cbe61e3338ee74a78ce613ec1e63314e2220c1a5de4f09cb3bac8e23977241d3ce72d153ce737394f9e2b8298e71cdb176703175a9c60b9d8c27e86426f7d056fb9b0e2ad7596f51b5bc4932856e0032466c8010d9f75cfbeecd0bb7da164b608f3326ec3be6488d020c316249c3002165b3ee92ad0e2cb5fe935523a8e1b8983f4d283eca4942869857c7aa0a4480c54e0e09348e41631481d644a4a95940220c29120226c703204193e79c3e7e8c3c50abe1c99bc8c61ca162df895cf9593605f2b98fded163b7c6ebdc5f1d6adb5ceb2d66bd89775e2555e72f02aafb12f553df2292f35f854fd9450143de0b282313cc450c397721afb4ad1789417191ee534ec0b057df079f51c47f31ca7850ecf6941c57359243de733ec8b8b367c974517df755f6ae8c107084268518596af73967d7532ec4bc6627fb368f2d767ecebee0cf105185d7e72708324217c9af37491e2355f695ae79a0695280a93830e454a1c09e2d36ad0b0a081a6836635d7a4d682749d30031e207290454b94299f468396050b3e4324174a0363e4b5c873f37985c511cf711c16573ce732f6c5b1a87c5ee51a9b23242f9d75d444972a5efacabea4b5da5b87d655f66501f05d97a0ef3c655f1dcabe3438f4a72bbcfcc9af7d9db8fc30c50e4788f061c2ca97f90c9f597184cfb42fcbfc46ab7138cf32bfc981c16718c32183576cb603031e1e80e8e2891f4c61c39719f90c8fb2643d5f865f20981c619f651007df757eb2af4e862b9cbca6c1a00b174a5871841a74e0e5d3bcb32f6dc6db2b6878ebd6be6c0c5714f9cf801354a070620c248c80c5279de386f09c6ff6c599ec2bebf9d93806f8ed87dfbc645f5b6d9c58e44d7eb7bcc957edb29fc9e4374c8ea371e49bfc46ba56886941e28a31458c71c3678ab0cf396fb282052628f42678e54dd1648259de044411603d51aef46087cfe4b08bcf06f09957fbca1a07e6d58d97312d425c5af0f20b99d997091a3db52f0afb922783ba257d0b126775e9658a5d683df52a6315cb29599ae89a68a273a28bd24de984bebb2b92a86da2e78ec9f4dc39f9767b245d308c1b62536400460d487cf9c67cb648b0aea7f3716d5fee960c61ad18c276b1572c169be5db729141362896edd0b75b9874edeca0030f38c06e108207593e319f2d8ff5a1c9410c2034b1832e2d48f265fb13e6b305b250bacf368a0c820b2383e0c6705c382fdc17ffcc8191405cd13767f403858b0d5db9f29923ba9f392c12076e078903c7c3068633c221f9e694c89ea3ef0d49f66c50a40b623103221f14790104060e603e6f41457a48e2881833386209275fdec6f8bc0d9df0e40a133f465002ebe1cb1bd1113e6f45df9e3723edf3c6e58bedc9179b109b926dc9c68484cf9b93a40d96b4f124f57cbb6948ba6e161fe8008c0c36e4a0059f189f4d445d7091030f929e2a458ef8b2a928e9b3c9e85b284a1190ac28010ae2cba6303e9b904c49a8cf2630569894b0c2b484c989298a69cab76793501f997ebeb309e8db4b46d2e549c06ac8e205503811c607c6e7d25129c9c4d3a3c4e4a3fa6c5ad24489084d94a6280995ae94b07c97b21095a01095826a92748da0a7078a24ac407103a3ef8bcf25d80a6c30c4921c98b8e10b24be5cfaf2b9d463b344ec0b942554f040cc974b5e7c2efd9480b8cf2527437c314418354be5e2e573fd125487822a5150914f05aa41551cf95c63dbe72ad443c5a187ba822f60aa91cf15c98f66f473f483f4ed1a90749d7003269cc022c3921ac27c46f8ac41896944af157d7fd6b2b416446b4d34249a126dc9b7c6a4b3a4d660adf17c07edbd9938c96d14e84fc6531e0d90d4ca53bef3a93c1a202a97a1f29d6f5bad3c1a2033bef2191c9368385ff98ccb90e12cce6738199759e1c0d9ee74517e4f9db596f3769c5279f06bfbda4c9cca835ff4a6a7e08c59765b0614516a5440082bac2c56e57ab8345800a0b1715380ef1863f4fae316619cb22b954aa552a9468d87d80f2c8230044138e001178cc000c14425df0ee30c12bd4ad73351638c31760faffb89c5cdb0280884b0a8c83d001fe79c731605b90173c41f4d89168af245e8063f3c4c2649d9139360467890306928403e4b248cc562b1582c46e42eabdc6f0b0277f4cd77290637c3a258fbcd4d4e4ce6c89c9c1a7392e08e223026c11d32bebd6170476c1bbebd6352d2e973177d1bc11c910a68d31eb1f8f6eea50a6eeea22e823ba0c4d1a75b62409bf6224336740edf9e0473c424f9b04a15423c9de1b6c71f29b108e8e71a0288049192926ad5323a61272b48cc39278cad568cd3ebfe00704652d497a05cff5c5b5db27ced2e8a56a220bdbd253dc3b9568a23b4af2ccbb2562bcb660b47b768d4a2cc3927cb47373d16ccd1da0eaef4cc314bda746798c5caac9873c2092184d0be6845bdc4fc740b4619b1d4582bac393926cf381e009a6f5ee79c1abed12dcfd9e1009893834703208eac39393d98338359941d8d0fbbeed45a6a5587b654829d0307cc715342b762edfa859412c2182584167a843b6822eebe1fc618639c3312d11d64cbeeeeee1a2e9db35f7677777777777777777777777777774bdab36595ab69f5c744c3952e7bb6acd2ddadd512f7dddddd2dbb65f79472b694dd3da59432cb2e9db3657777af4a25fb92524a2927f7d2cb309db35bcaeeeeeeeeee880a93f27ecfd2abb39dde883a228b552bced483f74aeca93662833fb27da46c283e3f4c809c080df594c6f2ed3242283959e57694dd419a09f467f26d47f49bafe4d986f49f6ed23e6dd3a67e59e56e9b679df336975ec3e257f28cd0e09f111aee07e101129063986f8f624013dafb05461e06d0d53c5d04b6dabb7b9a7cc72f7a4dac973c9efa59879602fd95fadb3c1a20a6210c28c249d067f29d6f3379718806c8168768a29b7c73ebd100b1ceb9c59108d344df30d2b7277d2c79094723138e479d247b803c38107584812e0f489ba40603775478050c600d2893ede7ceed33710686a4acb397c01ced1e90aeee61b64fb78e2ec532dc1c8d7c8ce00e2a607bc522021501488c6f9749dc9e1279f84817e7ed1dd438b0ca0d47287966993c088f7471b8797892783a49ba62d22bd6abe17c7d7ca48b7677470e441e01803ada7b0057cc9b9b1bcf2d1f9f5a71465de2dc923f5aa3ae8044b452ea25b470b4d3196b8d7123ea3967db09d42da8827ca2c30fc67c13cda1c5c085c1604fa63f89b185a734dc923b3d3a4de63b9f4dea09a133c61863ad94c64c4ccfb66d2da0c00290201910123d00e3061dee303dbcd1aece5dd6833c3600fc0c885382ad9e73f6e82dc618a9573779fd1be53aaf04f54d3c5cf850c22108540085c803fe4005b802c491700866d1a0166547e3a768366fbf15e71c1fbd5d0565409c6cc3aaef581de71d6edb38ee37af96e3200a1c0727ccd16a1c304774cdbb29810598034890ad4d36983fb087daa8879aa8b1745167f9d238b0bd8fda8b34f2ed30abf55e8f3e3e40fdd10091f195aff09095cbe021db1423a08f48c7505484ef89f49d2f47a09b9b1ca1c49f8fd606377a0f99651f80465f250eb33befd13ed255ebbd2c96bb4fa9c9cdfe26fba23b3f261a6e26ed4bbaf78f9257bcf268543ee33b9f8c47737219bef36df23b7e25e2f610dc71a571262739ce259074d57a2f8be59a04ea1e09d4a93c202b9fc143667ce5270f888ccbc04364b88c6f335e4cf21a266d663c1a202c9f71168e49349dcf38cb6578344066b80c9f815b06a6e99c85fb0748dac48fa6c313e84f86cbc0dd835b05374b2009d4384ee08e93df4c1ac9927da9708edf6168245db3a670ae286c74f1c9eb8f3f6126d3849926cc04fb7689e42ae07de08ece3334ea3a0fc21cd57b48190f7ed5fb55ae34fa88807e96406ef23275011a9938190f7e73f5d22b8e3dd4435946a79c3fd94eaa594734118d94420a29bdd2551d3a0b9e5072e833200378ea575a004feb2b79ae71024fce57c23672a44debe909ba6c0ef0ed271f4ddccc62d5f88fee236e0dd1ea6fb588aa0c4e7017ba05dbcb3745b7dd859b2f1d61601e7a433136e83dda148694d0730d74c98328e364624a8f3ef39cd1e7ecda75c238e5ec39276e398e188ea692248bcf576aa1a264e8211525416fe32115253e1f6370878c65b039b18ffe294bb0085f22492e53c61859d2c53974873ba284d2d51e743db46967424eb93476df7a432017176891f475ce79434a18e3b3be11c9e9c115451fe7d62312a5f838fca4e44a7888742882555410f4f08b8755788c7c7debc56ff27073843d0f37e368b4cc2551e3644aa3499748d26544c67640f2edb248ba54463018ac486ca87120152560ae60691c2eedd24b9204d32e23938a0e46dfae65921e75416a9c4cc15030d44be34427df4ebf344eacc137ed0277502a30477b4cf38c52aa659ef4e49011577a96311aab5caec4d1e434665f254c531dfe0b72c8a3318fa652a122d769ec1bf659c68290eec97b468f3fd275c231266dda278e3ff227e2f8238fbad532266331198b751c925ec6c4ba8755aed0f211cf58c36d8f3d3cd2c20cf5120345c6663cac7254c46749d4ff421cd32fa5e4608e96413cb33c7be71b1993b152a976d5581467ff38716e653053ab8a5a31b66e4ac83901480b45df8ec2152edf1e296cb520acde1f11b70577c87cfb0ddc41bf2113df54beab02be0fc0c20242f1fd836fda10c28ffaa034cb70ed166db5b28cc21cad6e693f4418cc81303a0b28448003210802b3c02fdf0ee39c33c2e6e636b91863952e0fdab48d8c6f8f9ec5cd393939393939b06c8b083d479f18a747283e3f4c809c08110d054dc1f2ed71421f1f08e764dddcb45a3156ac35566375489c61084f601f91d20b8abeacce1fa00b069f1fb863b28ab837f819c4256d428f16e08ee90db944a06f7f01aca205908aee278e3e30c71237c3249f6dced9a3ad0a947ef419a756834ff58121faf8703988d3733c8ab16147485f92c0b492fe699f46d24cbe3dcea3a33967abd56ab55aadd9aaf55e16cbbd0518224cca392d0c70070ceed0dc88b4692f4094c106ea68cfb1080c700784b5dc081ab55af97e4643e20d6030a38f087704e9ab3e8d78906252dfc4a29217ab87a34d686ffba37b0db7608ef63a74733c6a9f258d9363d11f4957f4691ee92a79633cf151ab48ba4a98263afcaab469e9aa98e683d2c64b972d8e608e1b8ce32806c520b823fac01cededb108e88a2d8036ed2c160ae5936350c7cffe191ab5205df0db36685546d7ddfa981e4df4f8d169a2c3bff16822c6d1d260ad2a5504614a205691c44f8f47a687558e76f889f3fd78246b6d9ce9479f17e2184a29f7941e1d513a65d6291fdaf3f41c1d7a557a5c41ba4eacb5712286d046f3aa8d812dbcf428ab2b4a8ca35b6d99b80ff09745b2a584549244f1f9d6df4144ca224f96c51fe8139744691cd81e81a2930cc226aaf55e16abd5bab9d960e856a9886b7a2a3d1cbdc94d9e79ccb22ccbdc238fd2c316e08efef61e41e00e58a5ab87b469bfb969b59cc51ad22d185cfdb5a32071ae44dcc80377d47c7bec813be09b349337cd97e27bf23a2f7ac933fb8a2e4d1ea7e6a5e03018ec4d5ef28674ab5d62698ab0dac48d387be48139b22e6e3c8a5cbad52ea354b843bb2e2de710e264be39843ca89bae17a10d843a728d8f79c6479bce8b73f3322bd790f0128b207eae4286a000ee28c13d01e41171092a0c327af4453d7ada439b02b4e265b5726fdca8a959ad9afbc813792212d7271ca056dda2a10e85ba147da4a1d887d0d1d043bf91ae12ec8b9107b0d038d0c824ca70080a6901f39d4f3062919e40a1297ef80cb1f8800d79af305ebc5718a46ec1f701bbd22dd44b8c4fb7e06f1176775143c16e45af037aedcacd758310c2c8a3e499d71f3da88418a28ff6a5693b5043bdc41c750bfe64354e8b790d5b25aeeaa1901623dfa3a9d7c221bd9b9661852f43fca088162a1023091a5cc048101e16c8be2c3e40f1d3c3132f2f883348a280a02994eca089a219400114032805103536896e842084b0858a2e391cf9c2e406c66a398e1b415c4865869fcfac197a3e5796df68e1a0612173f8401af6693cf5cbbc7a4668c8f932e7a95fa984ab679ee68520010fad0ab0cb43dc8466fa1018fb4e90f909b4893365bb4fc72c683e3105e0379b5a8146e006c485548c203d15233f47548c20f90ea75da884eb576bab9c54aa46660001005315002030140e884463d168a289da3e14801083ae5464489a49c33087518a19648c3100404004000020980401015e5a0a3c5a96468aed8b2e872455a931cb79eeda92a070d1e7526a7adccabeedd7a5152aebbb976103732f608c1821e895cced254eb34179b606cd5b53ee75b8c238492d25ee4873b8f72f06f18b683d74a019310d5df9e28285819de34b417a0eaa6ff4c5279afb2ae5fe72f3f832b15fe0490566a34ee697a59d45d74fb35e421c385ea4d024219affee453a79f56e70cd637e7dbce105552a8144bb99068cdd13ace00e790573feb5a20d131e4cfcc451e6e89f8dd39d464ee294ad1e2463ca18fa0fd018453ea6e850625c4ad3184deb1b93049ea26fa5648b46f45179555ab16d1a424716986ddf2f21812c3457abdbcab0f69a19b3dcda2dee5b9faaf9e23faafe988fcff81e37c69001b3fa5ba2ce13d78a261df978e126bb697c8eaf40e097c715cce321010db1c2e12bec8f85c4cd4ddf1eee276b1e0b0eee9af7ffba3fc5b540d68996e3bddbcd5197d6f8df36fac084a145d47946839099ff11b31fc72008fb414b701d281b5c33d5fd4a12912ad7534388a154aeca9b669639d6749a7c24388bd7092352137a09e11a97dd5d2f149c266de4c64da4a3092969bad928bb4b635328e589fe8e4ed0b9de7bb2afc5244586404fa1608cd8501999f70693130a76af1a0a5bde91e025886f368722cca31332fe366151a660ef35dd3ce9f117960a240206e61b91fec29e5b6ad468a507e65fa1d7fe75df91654b950e4fd3018df5e19f608b6610e52b5db486c16cff216265830c0afbcb8345558d96a0ad1289eba1f40fde1c51cfbdf4d5a688cbc649ebbeab66b3a5b589c23b730e6e6e348a9d6349c78b44ef184022d5b1c3e89a39a76d24dac2e593ebb3c9c0ce0f009acffb4a0b542693bb44c1c2fd4c2367272f4bb53e3c2ce58291c845f572ce3a9851819a7c1ef54adefe0af9838de098c7d22537cca46f9a3cf42f804b8c2f86242937ecddb04ee12cf26b0f77fb0a2498b6129e31c3a3e1e618cfdbae670e12bc41a666081b9a6c61874351daaae5a7ca345fb291f17cc0261061949d7d2278daf6315eb6dae717db1afbe0190990e49ccdd662d33eb14e02fad6735aec62a425aafcd8ce3322e8d5107428d1e17c2028671f28ddc0399d6fe981b4112507fdf180284f6acd21b2eff0a9bf810c54605f90e7d7f0079b0332da1b9127265df2f1828c849cdc4ff21e96f9d405b5f9b14d2ea50c64f92f246544905c074de62a02d4c98c8799a4a00c9c2fd7e817293014db827ee6bc1420ca90af41f21846a1e641e5ea71b1299e8d0c07801f40a0d9680d9907277c86c0d2376e12a389e4c5143e1422b1af42cf2f1ab60e96a6b9b40e64bc471d956ead75664743db641c9ba1d54c321a63fd997637a2a11d34a99ebf60b1ad44110a873a423eb33a2981d85cb9f6d3f33eef5afd9a6f41126f050ee78e2e95ba3ac0ee54e911a4a398e4ddb46bf4be1b9b823c173f2a1c8216452d4195771b2fdf551555ce9b2e49ab0489d3e6212b95a210b0c38194751573708cd2c811edea6c0c8e7244edeb5853450a6cdd1d0472f558e06a4c7f553f256bae851be56da1ccebf45dab39430eb6a428d8ea228261b0bfd363faced6d9cb72fb59e24ba4c736ad8463dba2bfb2d5180f9f6ff921b4471c82bd856011e37349b2fd806a0837217e0b3b5f78b07d138f8d34def69ede9999122a94daaddbae33a30b522e036d1dd57615ddbbfdc1dcb84ec28ca7ade8675ff6a7544fd99a8101d6d8fb637a2cdab3a5a32202315c1df6040b05c4f25717cf30f0b6710c1c27e6dd94b5cb261951f08ef0be0a3e11bee03728e9a457f62fe06dad72f223016cd5c207e1c7de370460a44a02c303eec24a12e3939a809184fa6468235055c050128f84eb119ccab5fc3b75e5449f55a11732175825f5162845ab4b2e2e15422ca80325ddda4a57f370825700c5297b5cceb12a7eae28e3ecaf465d644507bde58c4441c94926fc6ad5a43949545f3ad0d6a3511d522ed9c98c9fa879a47723287d648867a81e08d4eb24c2cb8a6151209151774f32a4d2b5b278ed30da1aeb5f612e3a73f74de4f5b0cae65327455a82180f142742c4c84eefa69923a09478193c2a33685c2a134e2e6be479f65ccd6878e61466d0c4738824232ef4a1bcd8c37a9187325cea69b9ade5461eae8b3cdc0122a00eba3806c5228de5f06155b91d1c7a2f247d82a5151f5d25dab5aefbe8dec1f60b9f892a3294ba6538a2be88692c2f63d4da5c9d69c5ad50162e6b675e0580fb4610f145d19fd380adc093cb7a25792a40e22cf64c98206fb17d8a6deb4647926bad04586613f800a084c0784fbf61128489c72597590e33286220de8699d20f7b7dd6dff532628b23a3c66e3926945cdd1b31607c333b1ae7fb6d63c9438725aed836c2eea8daab4c3ea0d00ec87021cf471aac24976fe50a369644ca6909a7fea132822489d33004d5063f0f555e8daab2d61e65958b92b5a619f2c1b5b651f2f4778b82f4547bd5d1c0dd82bb4e78a3205f0b99999ca6f537b955fc80c386616de924b654296e32ba1b22d2468457250e78c3108abc9f71617af408d70c16b182868b1d9872f437a13158851937c8057db5f85e30a3bf88e6fab89b4fc35260f413158d101c7a445ab882803357e3ea449421a02690e53aadfa3d4d0cbd93c368caa10ecdb7778f428d18fe28ea0525e05e79f5a8eb7316f83fe9779f24f0c88ab920a46f806bcf3644d0b22266e123d27d80222fd29d2e931a41941bfe25e978cfd9a781df479fc1c791d277732e0fc767af7bb6b1b1c1f97f0494ca650598fdcd7c641698c69d6bdf365b09bddb37ee231711fc9ea35b6a9d8a888e67ddb1580a6fccd8f5ed826373cd6c5399511b3adddb514ce5f625fc3ab67bf1bdda403189f797e43acd1004eaf19b4532b484a2e3248d1c3833a0f2e40876e413d1b9acabaf42a7d162944d1f30d7802bfa7d938376d143fd0b0c7087282f08948e3e5b56121df2a7ee94af24d543a0a7066bab4e0933f15923164eb43cfca5bafec01c04191cb443445e536b36dfa4eb06ce184e3c2e7370c14921663f5db87470543440c26a32aefac0e97a34b34987ae4aab7bf9fda2e6bfd8cf139a1f5a9bdbd7480c9fbcc9e34399c723e02d48b01c05bdc0d4fb35985a69c0a560677a30015123739e7d9f282d76075b9f283b286d55302583867c502530e25829f640b35786a4600a9450d955919c4297f75c38dd55ef51f2f4beb63cd4a5b52f5e20da5c624b4fa8b765e335362bc52e8cb1915753b058c119637126d8d30a23e523cd683ef4293f138f26eaff3675456a25ffa942c81f4a835d095efe2e9a8e2b9aea7188b13f0ea13022bf6cc92d425e66b26cc97ebc692d6502f4e4f42ca50d2add7e9e530f0ddd5d7f71b8a52be4533282bd009d51584cd48c6d7f3c04a9bd7244fe8803a89c9b80bea8db4ab4a15dd6d47988c80f8f251af181acb61737e7b4d5174b0b7299177cc32c9868c6763e5143fa29e6b2255885f7bbb623dc0e5beafad74c2e42783582cbcd46abc89bdfa5ecfba6e826ec803ca39cba6667ed7c89ee148c66960d081c94845dd789bd8c7ba10ca0e9db71275ed977fc4f78e27b09f4b342434c409fd6d6cd22baa982440a4afb1b1118c762d8d4c52fce66a2d2bbcc9a82b5a0718abae8a374f6b773d30361ded43a4cbd70413a284cad57a49627caf67bf90400198e7ed9dc2f153eb0814a15dbd6f8fc66815e74b361729bb0645e7a0de58570d32bf28f3da7395217a236d9cb68219d2d22ad523ce628900615d8ec841f04a3f7f4672dc7e83ce1a31df13a9e1e55fa9a58cd981aa8ae1b1ba9ce17a80b31c6b6b534f1a916fb12ae069af1ce634a244a032663e3b2efcc82cf72b97b768939e9c34a52d73eb8c02b04a1e01f3dcada4a4187ba9e6e2e0cddda6169ca744794680de3910401c3c48c2ca63e9359a2c7a97ad08bd44e9a4e0157ec5d4e8ea4daed51852ac43cdd82d486238764f0bee56755905d966e74f22845a660d659dcc46da5db32ff237e398dd059b993738029df37611461f968e3efc6cbb2eeab890e4d927c6e4b384014e9193f5e3c66cc87696e5406670aa93f6d1f792e376ea8f37d325d438849db70870061d258c9cc0da0a3a5063724a2894c432e69dd2217478d3ffa7ec8a8b4e7842fa601885a7e69f485abe05e2f8b3ca8e0c97880b73ee46b951982da5d36b7e07f6b11535ad01cb67da716a64ea8a463355651555718dbc05624aa5d68647ee736d74e0dc0475562159e74cd3faa49fae89eab29af1036c67b4b9ba38aaf75518ddbd72d76a90f462e87688fc006c79529c655d7c48a4bbf8f6b3100a1879c4dcc401270e181c3938f2ec8b14100c5e26a62ff2b952a5f65a1cc6340138f813e972c68eba6197ed608ce5e8c52b08094152b955faf682690d24300fb319f20f11cbee36aafc7511383a08138b53ac7c65ca3a78c9db8c7bb19b0c920bb5477e87e2cb7d6849fdbfbe5f5e031c9a131e4d1154dad10abd1857c6a8c1d9e4c891b0e0d30028d80144c07a1475b3b5227048934d803a533c8dd7ba84e384102a555425e9a2fabcb4d8c9bb5482caa9c195a05e1b67059ea8f334dbeeb4185115a61bdcb996241e8007caed6b19dc0fb8753d4bb3b0c72c7d525cb081c570212833bcbee7435f29cf8b75f26b53ef193cdb4cb965c3a5c067fb4f3748527673cb5d2412a3cc9d88fa4cca1fe50b6941eb0de5d5924d4c7011c58240f058015f1083745f0cb811d49955d99ed8a0d56e97565bc613230773816924f670f19586dcdd5b1a57b0475e06c3cd50e9b20b3d68edda10db629313761380fb70176091dfc9805129c82241c9fac9edb061c08460886770c1a2fd2efd26cf13208b8e98b1122c642d659d92024b26d9c068f227af64db5ab544053e5a8e3176d313f6e6879c0b4790a1b49a579a7e8dee00e68c36cea91ac11bec143db7e44b610152361fcf5652ce56467a70d3f1eb92093574135ff18c3e340b4000d0753e74211ce83bd446e2fc7bb35ae75e3f8adbec5158cdfa5fac972ed23125b1b0f1c6fad13b6497ed4a1c5de307b6590da88db8abd2d6cb5d167ec85cdb830846723fbea65db1b2f838c9cd7fe5308ef8c0f57a500e8c3df28da5908148f578475b594e516a228938829a35b5d474304decb8e45ec900f38ab3f607eb14afaa8cc126b47cbdeb4404fceff246b04544152a83a8c663086ae9f2eef11ec7e1f4237fd3970a95b66049cad7423769d831782e0761d86507c6c1c03501c110a1e567a522cf58d1eb42275e7204921d4d3031bd89a83f67daa32d07ce360894b3cc1e39837179462cda6e50029533279612e77e15b813e0f7c28dd780c71a4584a5ba988d7e874109258ffafa7b2bb58cda416bbd2098c40e009b04825bd65ee819b5f168608dfd5a5b7cec32bb785cdced524d50ce1ca6bd14e81a2abbc7f17e2940fe79a2fd81c9a4edca30a56bc034eebb17ccfd162474c7fe4c8f55926856a57948a624830362e817a3324e92762d9dfb183a5c7a883ba514d9b075493c656b2d77fd65c2fe075066c6d066a3868a2d926dc310b81b4bc0dd0927135ab31d204ecee5ce9c6c657a93196751aaeaad950a39be43ddb6ae1c4f8c6299169c2c96f6643a83b1005cf257892ad6694fec4652cb418e105ef9bd3ca01768646463e3c78f22dfa5737826398142ba119de19cc2586bb8e63730fa90f0f1e031296c4a8def6c7bd61227048b14430bb92013b01b92319a0d40f7586469c96f82fa71422a3a56f87fec942dc311839cc9c628d83214a8cf558c7d5041e570f88c170d7125b33070131f69b4e26f2bf54940ba1a840c08a19e21525e355a40f832011101dbb6eefdd332ba4442e3c937f1b24c2430c98e766a1fb51bc06ef1a5cf33f7afad666d382470c1e0e464c70ce9c80929f6146a019a2bfd1c6d13de634d31a6419d88e4533a3e9c91075ea5e8524d633fad3a9224540079f54736555066d80bcd8c647502178d22c902a204ec264ece8cbcfd22cc10976bd08f6760828cee5cfb272d5409f674065df3bc7ec307c25857f2d412cd699f4920622763248baa349eae4e164a8b65811357a296b882ba6e351699b44acc5e0b419132e6f1f4cf7c129d1133e9fb4f9a5bb80690d1e30a823bac85284741376624da8b5db8e78cebad87cb2a2cc61239ca323346a55efa832885b57598fe0a5c701262c466494ea2f2d32839acbb91e25e53681282c25e098892867b3746b9fc6d54125f2a4bfe2cd2c8c24c9a855d26cbd664be35710668958ccf204e201ab2a4204d9c1b092eed2e796d68a206317d3744f2a72f76d838f080132aa1c42595d38fb4ab7ae2899450f149f86a3671242d198507f137a8cbf505d20f5ca096f71c58d29550a1bd6465b8f3d43f9ab98888a5667d82fc8d2260acd2ff53562f9d9ea211ef9991a1cea15eae25645385388492090af00364750db08fa05d055d53b23d4d12b8cd05bd6ced893ddf2b769430f1615ade19ef79741122f3f193cb19ada1827838c3dedd3f75678e19846de6eb0fa34c29c1a883b0e53a04d816cd8d8cf8fbb2be051afc4f9c1423227df547d46ac8fdec64f0406416ba55bb9431733da9b3f3396ce5cfc7c466c6248252bd7399e33c112ee6ae5a79108759d218e0d04f534e0573c930f9d195978d3831790921f045ff08dac51b0338a941d45741038067816606f41074e35f29cb2eb1e1694c7d96d39e137a3889d5bd373ed04776b9067c74b10898cfdcadd050b582ff02585446968cca0775fb64c685bb10153e4204bdc9fec6675be190cb9c367c349e476288ed063ef11b8756c882d9db7348dfe0e76b35f43741f99644213f8ad24b9d448babd98c5aa353ac1fae0008dedd630a3553668e4e4ddc7a6509b68accf88a7b1b814ed96d24e40d32630c1241b7d39b6103f1cde0a6fc2b70991e3208f259209b728b97fda2a27877edfd878f488cdf221d44a476df274efa85587ea2a4ce0b187bd843a19b584e167ebad4a3b86eb2c1ee734def85274ca1f808670e220f550fbc39acf5c791ae14482adb5313a12959fedb003772212a4744779838968511be8ce4fb6cbda4991326d6aa705b88ef7bfb50c39cfb810fec17fc3b9d863faf589a035e8fb136f218cac176d60c1c4b60cc20be4bf44ce602581f0603aefc56d7638478cdc8397ad240d0bf5c6c6c3993558d45951e8da868d0cd5991f6aecd2017c4ae310fea8b33797afa5c706ca9148d738ffe89fd25fdf9c52984bf401bbee45682a47f019459644724e3ec4667d73792c3708087b0e3295f93619bf1a5abc455d1bfaf56fc8eab32a0c22867cde3e1341c6d33925de4f87ef9fe62cbf95996cd3493992dcb01e6e25ecc88a565d31aa44d39feace770d25a19ecc88f5f0021a07a89d96d0e8d7490e654b59f2a50eb6e4b9b3ef0ce6f9f852868bc231c472911d13889361a72162bed0754e8e369302e2a73c4fe455475129dd2714aa786c94bc78702ab6f56a538b048c6b4410fcd8bd43619f054f15cf128b403b7d17caebb088805588bd217de1d15237e9acf3f031646035d1963b729fb543ce9542a413188c4591f91b9ecf0f9c0218c130bf3dd7edf7e51c2a2e5d5cc0d7928c2d793782b1d419edd09e01841e1197106f3e2ead341b2a1b4b8d522712049538765a10cecba75400ca70cb3615f1839d705d1cb920da236dba9dbe184b97390902b88a101adb34efa6d5f6e3303565879f96b638d386b40d13531c85ae41a5ce7ba849fbb1af4af08140155d1ac617bb2edbfb96d6b31e7c17db3d5230642a762e8f9a6ae5c2bfe3892f345bc3bc9dcb4fbfed40af5dee3acbfc83b967ef007d81852ef94fec921da9c274cec54ac775a9bc9e40d0d6d519e6614b515897f6b592fd8fea7f6dac054d3db8c9ac572eb9e401919b049a97184f0ae819428d46e8a15ac674a1c4ca2770de1d151b1cbfd88472083f84cc413fb1c02fee82b86b3e54d388a919183adefec184f2e036d96223a27fe4351f2ff000b591893db9e70bbcf0a48af0830193a617a3e69273a9d48ffd1bb61185a7486df309652699b46668c9efea330cd31534a7c8bfe2613dd491444ebbb0268d206f5506864ba56715b00eb559cad02a865e51b00619805a7c5404b0d0eae33d5c6138a51afef93f89995b4493d06c24a930c734865d23ee0760b87482afa175273eff4175f656b9508013a3248d8ea19b102c8b57173ee6d622ecc1fb8beef8abc0f09c31ec1321b78fd4af6f46d484b2dcccc81ccfc880785f51dc8a9d448d999a9c45446cd21244a147ae30c8394245c75073bf3354a79215a27364c155fc5a3026faa1cb45095451e6fb0107ba39d650e61008d4ec0453d62b41652ba0ea4951acb188ba4a8072e50983da6280e907a81ae2566016800bf45f5577e050f723844d493905608f7d532b49b522afdc8ebc9e280f0f99a718c1519a792b5635eb1e76e5d5980249cf3c741c8752a8e15fd6cee4bef39e000990765fe1f6657f5e0cd59c8237a8de81a519775280f9e774ba4cc974e95316ed64852ea7241d14786030dc1e9b29c4028d9d571cda3fdb4ff15415ba527cac4661ed24b4cae5925b72ec6f54771cb41668697bd13451d48b9df725efacca97c81d6604b805315dce69acc1d23d15c850d2ed201238a453d56bad21f717d1e7e78b0cd256e3ba4521de8321c63ee94689e9daab78d95e542f32e6e80d82d85af11fe3f1081cfdec65c7c564d2e848b84d160be982082fa4f308d86fed11bdfee6fa566d5c25abfdd89f5adfbe86b33bdb3ded8f88bd784511ed578a4c941faa3b76fd67b4d2417cde2f487e807a7acbf67ea77cffcbba3d8739a45dcf2e0e2eeb12fd1ce4f5bfe10764f7e29cf3f8d02d2377fae03efbcb9d768bcbe853f2e4eb0fb27ba04049af6ddb777d109a87eed1cb15df29f75470a373ccca49a00b8a7e1546dad38c9fe608b2457e91d0a4b58ad910798ec5923a8f06be0efcc441ad53eb87c9e159a16ca2e218b8faab76f4bf6911107d9aa23adb717044c5bd90e1213ac14f9e90d036b979ec6303b58ae20cdb859f19c7be198ad8b5bf52c0d87ade7c5ec9f00eef6a0c3914e082b70f2da92b998c13e1b463a40297f0c9ed5a6a2763bb782e06285a26aeb4de23d638b195e7f87a57a86f188c6d6bb4034b7d08e2ac40b2971ee2671179a8cfa297a19f7a84c43d6d69fc16460809d845972decddbc3a6af89dcf62d8f0786bcb319bc10fe62c50e6fb7cfea91d7e52f3d90276a558d8903d5c2e916164c5a5ca61a30d6fc37761317d2dd8d8a72821f312170458e3b8969d00cde7ed007df71a0a4b9b34416dfcc9baadf3cad8ec9557327face778f426839f1da85f9eac2388f7da631525e2f64af058c241c8742b6787241931f020bab0889f20ce2519572d38d424ee30a9e93452d6aec453a2de348cf67622b8b29c2ac2e5cea2ca9b095d1fd8570be82224819013455819c36b1416fb2454fff78dce2dc0648a8e002a86354982e3c222122fef8d8cc79c0de4fb23d3bddc8b3364e01fee11baad8f13bae15b0afc6f4a26ded0073cfc148137d58db3e93501520ec9cf8a6621bb0eb2f03aec0bd8de6a12254e41eeb68626be3fb1c0cb610efd96e70f4322f565788c36213ed39d60e37b6e2a0d66deb95e940381dbf63ba2bb0aec5862695b334ec9d676e639fcec1d72ad263709d6661ef7c6b199b5565381e0256efc5eff2c7f12661b7da67e049d198e88aa2e6cfad93e7d32d98249ef460a00b49ab3ef92e40ecc50d57d6e5a89b52e4a97c55b27bb8d2354fd243c0f13a1edba313cb39381c647d56f02cbbacd35d161b14e862b69b8792e7c66562e20786b2889f30e44882d3a90d510754fa4a9d48ec6ca8454c08fce797d56f0856324560b8bb5537547cd63f2c73c926b80855edb38125b9ffafdc1f05493598ec71ea15035fbe3c3a66a45febb026ee02592b748449eb145c268ecb1b76f525a7f740a65a401963d404c42a205892aac46c14d6e9113f2f2d9c019d2b478ba5836a69e360280aba6bb5f47e2baee1be3ac8cab14c0b04a4e600823ec88b1cf18a20e3ef580a706d4bb69acd767c10541831f4e495986772dfb60b486a9568c61885210410c03eb3f570d0535b85f1b2f1d3e686b599ca02b95ee4ca9dc256394006353c8b5ad88b61831d24a80698ebc9300a8caf218e5fb565e79e8e75fac934ffbd7e05174926ad86831a5aac92ff7978984f3a41addab65a7ca78e7c4e68b00669386d38d1b6db6bc475209eb8fd15bb9c8ff29a0df3b79222aa0a2a98e2bd8c74ac9f59f018a1242b61f7605d922ead5528acaacea8b4340c87c4003de06e6e12ebe9aad30d3ede4a8a4340d58f61c618befa87a0500c873f28c05b3563e87ec1a351c62585b818819a561cb97dedd8febbff004f28a73c184b787f817bc3d1356f30f98661a3f6bb6c24b1555382c459ef4630e87caa18838c0e64e663d524cd73651cd0ae00bcd7a9478400283f238242d2160bf4226b77ea178b8c84b17af57d7330424aea7b38f3d6f77c71bd92b7bcd7bba00744a9d9edf82e0a113eb874b09264d23bda04d8410342d1d87ca2124b1d45fb79ab37d8169b1a46f22a2251ebaa9cd926c0762ffa8e3262a3685a6417a46c880351d8a3ee5ed1096cc4f8c3e94e14512a1dd012139d3b85db456fbe1b201f781136f0b40a5a9892153108bb9089fbe045c4aec56fbc8e10c560c7bec8808242f826499d392482b35c0e6388e4c8f9f390d0bc7f23622f3c716a9746fb8f17b0dad2aedd94aaa4a27bec461f9b2248de0c85dcdf1e7b6d2aea4cf969dfb475912e9c977147b913391849ddeb49b8959d20563208002249aef44908205ab51e2c069237f76249c6252058600d13f23631e915d6d53163051314e8ae4fb40f5967bf40cf9904228ae7849cf91086f67b148b0428d519466730d3638b01932aa4608f3ea84c8814725d9f8b0590abd6af64fbb661a1108458ba00d4cc3468451a068c89f45313efff4eb6082e1da61b28fd258d16f150c248cc3db0f15883e340e259f1afad02a468598a446d2f0fa43ad2f2f6a57532c2efd1d164b2b887d93339211f0d94866897cc53f49959cf138d6a6751c6fcd8627bd6c866cd29bc9361809c63de851ed4b07841e61c6b8d45955ff8fcdbd36a35cfd0d427aea56efb6e4549945910b2cac47f646131b5eace1686f45fe8221973b1131c13d36c4bf28f5a4550732d7426b710a89990511d2ad63c4978869430a22497d86d7345575740c88ff020d6ffa700293d3cdc4dc11800188002afb2385ad07acf3200aa01cfc7a1c62305602982d2536e7871e2dc35cb4ded30232452749910e1e5385bb4f32aca78e045b244eab213cf47320484df598f48195fea47c9a7bf4e224c085d9719251dc671e0b75094b1e273a0df69ac8b16404601fe9c9a8b53433ce83c496411a7fa0df1118cbf4d9273df59ba868ab0e3dcd678189514560e5d3ff2fe55cce33acf80c2f443d0ed0fc1730a30799851609953d5337640674007b9125a152ce4da5024824cbea699c05bd5c7f7335d95eaacedca54e83e959d418c1fd8f39446446c10521f2c57846a79e9f5d34a2ca822228e353d3a5616044888c06b5b13c041d2e24ed37344a31fddeb552b9bc621d1ea300762d9b27bf40298cb489028cbdd64936bb8eeda83c6e09759453527756acb2bf2455eb416f735644dbed92f418aa4061ec6935a2684a410e8b81d9a608ec83493e6411cb0ebb5f819ba57db64c2451a02e2e7860d4b8e96dde3e79426aa319955ca89a1011c40a5017cf172b5a3e1e608c0943fec11f991cc9b1947e8bb7f8d0a158eac41f4317437065a0aed9889d960195de2090a9be4b3fc205be53f24a002b30f9d5f71b573f36be16a8262322f4855e64c3e24ea0380e0d088a00c21036c3d22a00abfb06570635a6b80e5cf62c82f5be5a2a352dfcaa84ead49c503ae681991c22eda1750de855f0fa4c704c79d52b5f10bf88fe48e3a0d8ffa2a4ac5e19f8490857865f53abfb6cac31d79daa034b8056167fb93db04ce82701fa7aedd4e55ed52633616ed6131d7a4fa9210492f21e180bc8499a3bc5e7386347e4f2b57da38ead9b0d3c6ede283050ccaa2a7450d61ea7727187c428473aa844aa8c2d39bf13317a620c9855521a8b40705debcfeeb9d385b82611750b080eb27536fa61a9be6b002f28bc454a4bb138f0a46301b178a0097be383c0a049c390dddd700c5cad53ff3a42348580558dd6eed16ef2dc77ef1c9e408defe85eba76fed4f697a39f567bd9510dd7107856d47be741307a67dd3b6e1276bf519e472407069859607c5cb67b8d32e8821bddc40c481443bf0211b1dcf1f571d147ccf7e00ce65ba1bc955914058699effcde0ab4272b138a2d545112dfa3ecddeba650eb48243b6200b30137d548c00b47fed2e7dc35780aed0723ac1605df4c4f23895d5d9967e898b9f999110042c382dfc17e1404a1417bca281bd41c144acb79808e0503b82aafa40238dd8867e541681e8ef7251f04d015427080fc9fd8d87e292d5f7db626c0481878f68cfe16208d2f3c2002c6567ade24590871ef9f556f094efde98f26ec0432e6dee0ca3e1310c598e6b9c9749698143598204d131c17fbee05653779de04e8d50b63cb20f478c2eaeaf2e4da03084d3c67c8df4390685f116b4e32daaa1b5c7d57ff6ad2d7803794477fd8fa5f86128af4861be0523a6baad8715ad07f0c3d01ff7356250d63cc6ee7fd8e10b80692294f324ff3d82d5887f896b2817d4ea755948944f80a88f1b14f1a5ff4555aae097b26361d100f8e65efdedd2210796d58efa79b949a40ce427c503b89c4bf0ac0ebed354748e008905ff67d55f0269fc5acddff9e1d3ba7237dfed656195ddeeb8b2f8a0a66109d20e5438cfdbece4ba629ba43918b4b933e913cb50ac854b798d0432d5aeb818a6c9d3630a3ca998936a985c9c1acddba98f22484133af57b57372abb1acd025a41c36305e09b550b4254262a62627c7474b1ef4c6a81b5a50694289b4c8c55276351043fc337491c81a525e857dba4c1327132aa302d70fcba86f3ab33e98fd98bb82b2ff13a04c41361100868237517e7279816f2e4b6620c4a856a4a3a8f16f076e4224e19884cdcf8b0abde28fb284551bf05f681ff8212af3fa705bb09f0b6af46138a92eeefecbe8e40b180c29970e836d3a161983a77b185249ffb296eeeaf1b1ae499bd4cc2b40912957a96902079505a91fbdfa2c732d1d6db9d866b49e24486e463fca4f0046b02672232d49d22ef2d8d48a17683a0a678314aaa052464d5ba53f262aa0a800b584a2b1070ddc91f329305a0bd30200242c5fec0ce114ec24034c57b8b764373303f4737f0a043613c4a0ba8f2ecbbe73150b2138f6dbaa62d2ebd47091ecb0c5ee9b10e7aebfdc96f81f1a92693f0174975bd23542ae38c8b090afb0bb6b2d12d207ff1954c0ecd4c7cc551324654bdb3cf1405cf65ce0989911b3da5bf67a8fb4db7c4f4b0c8185300d686557c2e8ee4d4e2e94c7aa1e2b092380bc4e91387d75badadb7e06d117e99698fbd5517bd28d0dc89954d370c0601aea2aa39e7bc10de1e73a5fd0edd2bc62063e401a5c7f71c0925192b0afafa067d702dc05094dfc7bbe821b9f9d2b6225d741fd86d26b10c0df753a350da9241d535d685b45efad1d45f9955b31932926ef619696d3751bbd7ed24171a1da472be6ce8892f12b8552ca4498b2ef66afc06cadd890bec0df2d461ac148a38f03c9488119b021cba06f4f6e7246b76b0a90fba83e77673bade80065f7de3f1121c3418e03bdebe223a4cfdc9dc4ea2501124902939557426b87726d2e9d6ff166e25fb452e17ad45ca0f1af9a0b42497281f434ac8ff2fc525f11a9f8211259bb54f39feab447c85675ce2ef38d17cfee59cbf70f8103a3367388636ac18c0e09358e25764ff19f05325eca56a5f599c501b179f27515880aa38537121886d3e198c48e31829232a0aa445bc31f1899bc5ba7c4e05b28c22567b35b270a1c793dbfcb953d65a6ec0da44e0f8e3ea55b6fb17d3ca210df68b5d1637daaa0cc8602b90d39d06dc1d0a2bd64ed4fe123615581cd9d1517caf64562d7ecd250af94d5711de6a34b33dbbabd33d99f4d44e4a7cb5ee7a91054f55c5459f1672e63fd469979edf3c24066d930d453ec53c1d1d16f68faad6a5e3b07d5a33a3676475d03cb9bd309b08f5701e92633c3645040e8b3ab58689166851244c986afe71652f2255955bfc9c88d585bf4517d02d8f08baab0bf31995aa7df8789d11b687471b48125c6eaa61cb66c8682ae4f76813635b0ca597fa685dc08d8d120412ba720abd06eb1bc0a156a91d8150762d63cdb3a5d4ba185ee32a46399240c12f4e5be853f395ef1e47b3412ce6eb59f2b97bcf9f7371cc89e9c4ba3bddc9ee359eaf6f8086b8d8dcd719fb1cf82f905e9b95cc18e211a33857b3d26915fa7937cc0248473f47faea5f905d057b67303fdeedb5f73a52762ba29e00214236e8cdd819248436882a2c1ea5720bf334536bf790d826936146bfbe5154bb0137111f28201776b67838508d8f42f2c665635e2a7759cfd287a5885afe4f280e340c7fbeaab939f46f79f032aa7766e5222ae93c91c2f56341a0c39a99a06cc9c60b4ec7f389d6fccaf68feb225977f4356d8890b7d833143b3cd655e0b03b9cda6ba8e5bebb749e0374c919b07c08877d463c36e5ad4c7c45a725e29731b73c18896a429d54252e2e04b97faf08d7fc5bca76b8816397598f143c028b1462b7aa0399e6b248da70badc2b4f76078629de2531efe2bfc33538fcd4731ab3deb6919e225ced9df8a88a07d959df78b3c5e620bc4623c03dcea69360785f443750fe298109018195f51e88cb8460033fe99cf848db2e2711aeba0ec44ecc0a60729c3099d24193e8db862a1c988f223437c10ee2137b232c765f9a9cb0a50f52f8ea411dde4f9ef2c883d3435a1c9664c92547c422e2195ce053007794ec15f99eed99a97588baf83fdc14812aa98e05141232a781ce9f6a43e703c93eb2c038155804580953964202e5167e446e486675d0bef888c20e575760b6a16d552c9c4d3caaffb01d487ced1c9f9588347de5bd3871c9626a4eba80177ffd2d6cea5f7d7747af90efcdb3d947488211086d2958738a9ed2af8ad2a91a30c9f45e61cfc12663430f9589b0a8f700e67cb6280c593c28c7b9d852d4ca3536af2af20288485400b4a75598ec4577b2b79c7e73f36114a3e0690e170e10707cafca1dc1b4089103b2569782739223e7b1088438e1d5ed04ced83973a9321a5c73fa675b49fead370408f8a0a0ff7e1a618aab2b190deaabb50af05e0e9aac533f44d162b0fe6fe0bbc5a161792cb52f15b2d070ab20de51c1cd64d20ff081360c454fde5e5e9f25debe57067b7644c430c2ac1da9861dfb691997c84971f75543f2fea203800f2b828aa6f6c712ae84be62ca617f572edac4ed436dba6e2b429d1201dd61bc033d1d86e5569abe2ca674572147ab8a8eb04084584aea40671a65d78d01564bc0f4d6b023879b9455152a2c25b02423b51fa1ba383b424f01aedb749f82f1eeb604a15e4ea7b5397aa0c5435fc6ddf3330fe8d10e8a2a959e3d37813b2e38910a51be0ea18a9787cc152ffb444715d9466780ed101edbbcdd6e8b83d63d409e16e7c3648b093883fea09d71bd53542e7aa882fe2c4a8185b2bdfb5e5724fe64e8687bdd63cf6a0aa55f3a0380a7efa2f00aec837c80387d1a3f21b9ff78921040a4f3b209f80c853e5ad5472391ee5f05221238de95a79939b50e63cf4445743cb1da6f47ce90e5721cc90d632e725372b0f81d2d2ee55c16dcbc7fe02b0476a33e1682aa1b0204ecdeb8b9cd29cc638c67fadd2f8b66008b76c847561f1ad16e033910e4bbe7366be593027725b74565f69e1d9865deaa3b876122ab1d4937327e75abeae58533dae0a9dc1a9ed81bd2f591f1b9f772ccceeeefdd8f02edbee9d03a3416c0264fa36f691bcc3dae04103ba45cfa0a3d7ec4bd74d73aa0ba445f65762f02e749a4bad755099f6cc13107dd2c58d1a3e0a1c193139e2f60e2f921e978aeddff307ebab7c7d45048bf5f9919d84d0bb66384456f80fded356470d155f7228907598ca4e66e0592768bee11e72becb2910d719854e546ee0bf70a3d74128f14e81475ad2f031419b05e3b44e1ab373d825927dead0948f52ca4b5500b618161b6e0a3fc6703598eb4373bb01dbb2496ace1aa0e1ae24b7e9f3b0791f390350b9828f76baa063a369e752a692cd8f9314197c4dbd025b8332cd84db32dab62445ce883c4d17d6142f1321e88f705f7862000ad7861164b45770f5fb975f50194b50d2c7169b4b5763902a34faa467b471a033d530c18a76f728ad33d7d4efd8c01ba496078c2a3780919f316e113c3d5ca82324e184b66859b06c7d50c94e78c0c29622fa669f2d5e8bc1cd153012853d8715a3fab29ee76adb2c662d0452167aa025e9aeb42da372736887b7d2636602cb2918a0b581727bb08c73f19606230a87f873f59593ad632d08ac5c2f8db2e3cbdd48214ea2761162987dffb4428ab3c41a025ef2ebbc3a2dfc4f0c7b0312ef6340f2b08e2f4a792fc545f99acd0b7891ba71eb494730f54d70abb3fcc21441635eafee6d5b5f6ecd8c8209a1f762ecd5cf94182f17c8da73712ddc48474cd4acb8fd3e1462c2a63848e58cba3e21c0ebe99e13834618d6c54adc6b106858468bc9b3caac97e0a86605e55d0e86472c0e6f13b503258662b492fe4869f3ea6563c96e0a4f67f1fbe5ad68817325bd4c1e590abe35a509dc5c5f2f5e2758c1ed60a5901ac25329b1a7853d7fcca3a0ffb41fe4a6c6f70a5f2b125fe610c1d1440a3a0f11ee6427d31287e475925b501b3c0104d2c02b393a58b0f48e940688e3c72c735ed5aef08ed037b1dddf5284b3e32efcf8ca29e69302c7f252b6d0538d2df04d5805d5b7efc0e1370fae8a89b8f28f64ffa91328befacee31543f58885c2bae445fe426a9aa1dae3fed75515022c6905988fa3b74fb85c6b1337160d408eda927fcc9054db9d16ef1fb275b8da7fd4367488f5bdc7133a2aea65cd5be769b27091359cfc14770387101fc60c119b1946c1d56209d18f5a1039d35694d010acf6e612d005d7987ce2edb10d60f2287730e2237fe070d9b887642c0c962482300dd78246db1b1215cfe17eaea601b0230b6902365d4e0b19a58ae4612daecc6bf32205c27e12e4a2c18f201a4f0c9d585427262e87c4a7e35206830666b41d5afbf27319104a28552094e25e3227a50a93d64fc6b227195feace17240b9ae917f6409497e4e09a21a3626ca9c35d98f5acb5fed2249a895747cb21340f274d25c1704f3120bc83d022bd36e894b176294e49ddb367137a15d90b94b2cc0cc40d7052c95b52174deb5093bb6757caa99fcb51ba2b3aedc8fff929c33f32b5c1e457cd5a02ba92a3332cf4ea798960de898fb77cfc53fb43257030cb14960938b1f436a0e08ab40a14ab0f2da049ff0676018584bcde9cd3b9e6ac818766821b7b8868093e7e8cdf202ded6010961b6d9729f4a9896b8b830ffb41a0d559c422da724208c6bbbc3e1b0969ef6ce721b5a29a589b6b9c90c3e68094ba899312a381d85cfa2702e9421b5bcbf532440330ffbb394e957f04844ff2af3bc1171cdb6f9168204f7a01f6793991d2c626d14076c5064a8ddd1bab0c2bb43aff78fa2c0e68f73dc6a31e1fd0b8eb19a406f58452ff8efcf861819078e4cf83a44b437cb44603ab67383c2583fc492c5c31f41e236a915a758515b5f9c2eb204e951ca3e8e607e5f6868ca546e0525be76e16754d566d7d4048ee397a7b93bc2245397690207772e70764a3dc9006adacc35e3bc85efc1c6678731214053861ce8024af3da95904495f7c0d24de4800d32d6445fed48c0fcb8fc6fa6853e72fce600b3d81f9890bb918cf73f806e9da8daa83a1a9bd7af75ab922b624e3d09a62aa893d8d267d6da6a87642fb52450e952b04cde1231887c81de8ccb657a3523094eeab90a5acda1315ef1f701d4e03d0966ed62b475c3226993c9ec3f166e5e75d8c58ee9a2280b50a034fc70770e0b3209aba7b664d444f33079d60d7c1592c5134702b2282b0dab548cef70c52a944042dbcaf15c192c7a17d22f82fc09ff657ced596a54e7c30320a19096a242a82b4a47c99a6441988fd9f8deaa5f45e5004303304ce491b68c6271a17e81cb89dd6c61298c8bb4f142f58381e187239b661c7b37f3b997b80f9bad2e4734d7daab8bc5c8eb77814711c56d82c115f925865c31b612deec6fb382c4a54a78abe4cf34130f15acc751eb3682d256efcf24e4347e60f24f6cf2c72274160ea806f58d823097094b9d7d1e1bb95dd6c26ad20bf24267b45198161c32a29257a2cca8cca55c43168a1968d297e26a688bf97e14c90dceaa503aa18eafc72a8ce5d1af5b96ea71a5fda1884f55d98a627015b32427321f2913a2b065472a753c207f32d39632e87eb50fa5800f01199c2c092ccb07b0353c2cbe48ab7936a6856f24584021aa2a84444e1312a7914b89e0c9cfc04165cd236007687ad1005277e499d67ba3fe6184f7bb47f8ffc3c93eef9b57d3f0c5792814cc3a076c5996a1e48b5702a34671bd4c8f88c303cfae834fea30fde3985157b5d40a1172317a5ab369d705403d1c871d1a7a508aea0fbf82ac7fa0ec4131e3460710d003a50fc858e180005fc3dc1c5f18ae26300927b444ed237be7c400b29a89a2174ad372051a3a4a1b1a8cb4851db83e67685fd534210d1dbffbe9ed2910d4d2986a6b55e50b85f8aa4d3cad1928614cf02b6d2805ea9b3d05508c6326d4ea5191cb9be1a131e73ae7dc708dab2ea30494bbe8888eada397ce659e60da79868a12557ab17d49a7e96abd78d48b6be361710ca763d71d4c6b24d52b41151e07b7211bb6e23a872749d6a26c9f1f9b018bc5a08c7a2ccb8591ea0bae2d908eb9db0b4913d9fae4d1ab4551725435e0f54553b00e3ba7af31fffb5eb82c2906732a2d1aa90cd9453bfcb72bcf23018bf000b90f57c62a4069a1f083e5f1e575f84c2a98e3916f4152e5307f3e8db7dce9a4cd9ae6f2422d4e69f01e285737c7af088ebe3bd76254d663841e3fcb4a11372a408bc6fc78e9183b8054187e72802a31a6913205fea315220163dac3ea7f15797e1bcdc435724a11a4735d949d932f1182ed25e5076829651e1b5d426050a2a0ba889013342c2372cb63de10887f16cad7756ccd0f95b1ce914c9e96b1645857d1694e8343a8a26e24b61cba6103e2723ca8b8103ea6905a8ce1ab88ead21b9f46a1aa0efc297cf0e47909725c62de3b486ad2255560291938f212f6bf8d37596dabf4ca9469d04d58d95245512f89f6844a8fcbc3137743e5843a4e4a668d63e5d2e1be3862e4366f952c0e0f33d2830ad41392fc3b36a47fa646c6f0964c08d31f720d59b2a8b016d8b785f67f63cd28d74140a551dce125e596d3127d72c7835bdc81e52fd8e1d5782a5fed7b2742a20494e9dd26f7387e8197cf53072ba60096646b51d327333f6dba93920e40f4db3e6c317063da054881e0f654e60e1b252021150d49eaa64c905c5f260e34c6d19238a68a6c37f626306094ab7018435d72d3bdfb2dc0d25284aca2c17913fe922233c804935998ea53dd8b829c3ff66cabc0fd08c8c01cf4bb09f41b70a54bfcd98c3b0231bc349c96b37a2b08c928646e5cd5cdb6a5d47e844fbc9bacd5204ed84602d40fe085af5b62ed003fb97d9cd61c8fb4114d69db828fb5edb86bf7e1426c8702738c49ebdac6930270d0d9051ce098b956c64314056086297956b9e78a88368e657057e9d26cf056aa6e9781da7cfd31b699411089fd806ea2374d4d032a0748b1ea153fbbc0ac48ac20142263e0b1bfda06db91afb6315c0b946449262d387c31ab1726e7afdbb624ed2608a915b6d033d6badc831554d35fdea78194e874af006e76a716866108d14e99521c2541452b2d01b32fe5d79c62c273bdef7db1f49db3b399a96b348f30e0cfc78d081cdbb91e719457ec37b92a68e258b2f4c4a49e94395b4222d7a5369468e58f2417be5b8d3e16eb22a521dfa4938e573d96c0592c828246d046b2ae0902aad8ca578584c8e44589ebc2ba7097f4dcdc2a38cb05c8c154438871778b284b8fc8b7a6997576ac7cdb544b8803354580bc52143de2fe589d665f5cb4bf15abe6f6b812eba5956dc6e4e66ce778363235c511ed005ec4c0954685957a255164d139cd5cff1247a6ff97c3b5cb674919503e92012b7101968af61c2080d20be1eec067bf56944a9c9cb54c898c13d5154937fd232ed4d5fe4e6d5381314d97dee7f718883269ae162647a21ec11c6a9128eb3deb46722aed69625e1f8317ba8251074f1dcf2386974e317eba39f58ae326f1d5d840f9804d7d144e420ffd438a6e05d207cbec403c85b3f47677e84d9dd12292d9d0cc455c39b869d02f162d95c5c0c19a176c286ffcc0a9e1c5227a82a9e21607e404c81e3b26e75a0335ce072a1c7eaf75ecc8ece7f2a88bd995b92603db3cb2ec81d65cee09c58ece4d920a6dae7598c749910ce131a4815c894e3fb547fff3dea44b334261ffada97e8a073da3004d79dcb4714d922792450f798d588fd9681d30777eb78e5a429c2bd5ecb3f39daffc2ae0c401e39d6b3f94d36f814113edb1a1365c66871527d2e038bbe3cc04a90bbb1d8cea4a8897f1521ba6baeac338128b82244c534854c496441f5d626526c670235bb77f0bea3105499a9e0e00743661ccd2cfe073e09a9cc9395a8663f3537b0d25f10a397d26291309895240298995583f595736931cf2b97ed5ccf9273e5ca8643700274e2c3a835bb1a6a585a614eca9ac26f4827a11f3a60ece767c5e614c58f726caae4c847213b91b2edb05c29bf12c9a237acca8ce66c6e1662292a2914993d058f0cb72e105d6704de44d622f7c2894992daf36152412c90b858fc3e04db5e148cf29218c0908bd97bd8ed3972d5d8c718e72e1f79866cf5254fa1125e460bd4905651a272edaa6c2de477a2a18ac2174599634235de61587fb6f8982bc74c73301f8acdac231db8c0cc9bb36486796371b40c884f425a788faeee073c0c7e1a66757f9e969a002000108b1215fc6d026b0964716183f735da2cfa0914b5511def8f9fe8a9e57adeca41e4a5ea5bf53544244b2561980c21fd60d2126294f88792185e4ee82c0811de1f77e4e8b3a54721dc8a4fc88b73d8ef6cfbf447451ae32c6777acd606576090f9ee417b78a3197cd3cf7c8f450c33ba45167118d33a008b061b614b2c750332a6af3bca40e2538192ea821e4bfa1c569606f809d82088d0525814708b43f8d5934d09803d2b8438a2165810ac7bf29125fac370c6c98c765b9952c64a4a23d2e1213c3f0101046cf22989f84fc3006623734b80728803894bf655cdfcb7e67623f5055164738829a48f97795456a354208e6df7431f6fc106823cec4e0df21aae7c2d72b26aa221effa128518408b72d963b12a94155682279e21906e6082365fc3d7b645626d3f4df09da959e7b348de2ce0ec1f44c856b646898d6051a4075dcf11fb050c519342287de73d08e5f18806eb4f884c0ddfa472316ab63362e86376681b814845bd4605531b801032c604441959e80f0f5dca522360718ecf34e5a9036fdcbc410500ecd988b740352beed811505c65a590e042fc28faddc32b9b1002b5f5bcb76db868748c2006dddada032a00a5225adb90e7dac56ebeb3accdc543c01f979fcad212919a00ddfe0814125d54aa7224d65e6d95ad78ad4ad5d66f6781b11ad2c78a9bd588f6d2babbf76235796c9cc3554d81710b4fd2dce69bc72cd4f450273d27334bbd99c543fccd690fe70e7d7f4ca28cca39cb200c0ae0f825015ff496c07a76bf8fa749fb284aaf7c222df4f627b955e4324b16cc6ad9735461aa89e4d79551e2a14eae10514bd34c35121b91acf2f67122249b205e95b08b16f2d156a1df3a99ff394e80c50c9fc836d8e562bd5e9b11d6526a7eb381285df9beed320d4654d79780923a7a5dc3d645687a2bb19b9cf10ff3c6feaeac802dcf639f4e9ffa765b2e5d7c7d95cd4d0a17f6b796f50dabbc84d03123e37c56692ab50067a4fec51a5e4a87885dca1f0f97e8564f80482c5c66b307ea3040b5523049f7945eb50935931ad5d8c6282a9e6ab5125862dc1cac4784ef74661d08afef575f4fdf6054896409373dae92ee9ee390275c81d54eedc77772c6fad8bf3696f931d0d5d583a94b3233619397047dbc816a8fdb8104e807b148134891aa5d267e96549ca71a76afe2157f42f032ec3bc06a93692ea31e03ead52b85be161eede63ade404890479dc5afb96326b2073dc41209a69d1c81ff13367f6b36c0199ca1215df4d1118fac80ca07f88c5c708268d4a0071119cc0bcdb7ba0f7bff20f343f8d75d4a5bc97cdd89c814dd7ac16e711ff99f0c2fcba8006a1478e37b924c099c1213afa82fdcb86aebc29145620f7f48857610f1073864c7f6e891206e215e9ec1c70a64592a090474c595f45c2de9bd060489e22768c2aed29bd314104b3c848362531d383966ab4d2433fb031c5180611072d574d5b2433fb44accd940cc70e5cb7bfae3cf8ffabd325a6aab6613e19b0ae923a87a0166eec4d5f4698edb2256dfa7607436acbc2e2c0833069df5375ff524378f208fc291b353b907092b7e4aa5f5dca715e455c5fb0ab97ef09ef5921600311403efdd7f8b8324de92a0d4681483e4f05d223c645d287940b0159db2c4969cf7b99936b77f58afa7fb22b962d6533fb797a1e998871f6a94639c6b646d2be2f7215c884faaded1300531e39c40c97bc15072777f77542687103d35d41a475eb6abd519c6deedd6f36b23c806a1b56bc79e37ac5bb945e308c613623595390df4e65d19711253bdf56e188dbd0014e284a2f2a96e7ac0fa1a07c51114b9e1ec14af30e9e482567b06d70205fd4c475108b63ef4b3a467937e3b46322b2d887dbaefbf2fb909002992e3140f2078d1463f44b2e5d102ba779b222a9c1c3dd922ae59cf82de8dc3b5135dc80b114a59f082da57c33705a4ef077448e26ae3fb3ed8e607a8cfb7485c423c7102d8df37dce80b31042eaf284df02d450ede3115532fce4cc0252f17207a101b40405c6c1c8aefb221dd779854cca7fa087ae68d374d9e20ddcb3d35f2880ebe88ea20f8c3d93619af08a1101d3021e227ff8cb45f5be56101bd8486a192926f6f603a2a11f4fce20b1d5eaf383b9ac3748e027a6b6ceca2d0fe88f859f7ee0e6f207c341c4439b0b90a70320efb09b0fc40125d620fb176e6c3a0dfd10a93cd4410bda708f3d4f7b33039782c3b4ded860ade4221fa4d585ecf7b0d538400ff54ac619a499e6207ff2d58e841927e9ca9430dfe514f0fbe684f63302f70e8ebce1a387e8165b42e95d4b65581f7f1d36958b3a7a7f01a8128dc28e255155f5e2e68ae31eb334df3c2ea40e4b7233c92f0f35430328c2d739e454cd4a1767d6274f0db082b0469ead76e7882204dbdc0d525a51d822352165162876c0424d058e7503b21fa40e09b887c893726685cac33e686f60abcdfa88defef4457b7b92fce56870c3cce8eaa80fe7d530e0bb882fac8e6eed6eb080bd8c477d545560f61064b4415fdf5827287a64c61fefa227a4620a405f894c7f8f3c26d5bf436dcbbe5779fc2e7cf47fb4037d54bf8b428151d8d9b16583275948c55ad3915a8ac0cec852c08ea437b729fdade9ae5bb6fd79eb12351c5144ca28e2a9b9c7f3bbd06c83248fe1adf0ef0223b5d077b1e857e4943cdcdf6fa5c54d6123f15fc64725952a72171f13271118267b4f4a941848e62c00ddc7d11e6d9c32af844d56f293b70b86a07d84bba95041bd9ce5c9d04256c90165570741c52772fd021294c4cf355c8fdb67ed6262ee41fb2f69d04dde71e44d75179547e020a0f0c0ddf7624adaa870f68a0b64533216c38859a5a575467260f03e1b6c6fa367ad5626c184767709ec68f01fb6025d9505a554ef1aa805f59d1cf1834946be3da380687a5ad86b8e9869ac073d28848881e47c0ff9169e41e91314b813ae481f8397b7cc70e57705cfb7f43e5e8d741cc6bf05c022086df7c70586c8e12b71404c3e5ef5380d79fb54d5545e3754738f64e33c56ccfdec717a7426e52c8c63a95256002bc235997c5bfe65d48101d713bed1cf56f309d7a553605958176b25d96424095823462086a516b17682831bb71674a096ed95d25b02c2fe4f2c6578b10a777c711b5f16cedbd702f187f518976756885d17fbcb26aaa112958e8013aa2091ad04f96c2ed081d641706d923248436d28f29e0f314dcb0dfb4965aa1bb78c71c1cac5c37bcc57885ebe31ce398e663196a9df95512b5579d26356b501511a0b80edc0d4e9e99935bba5fd1c5174b3756a40b0f6844a22347a81277cfdba4af0eec89a74296e34d9da292a36b56a33bed86126c8abc8960c85faca3bd7b62600c8945ca5f8b96d54b5c38300e70e084085935bf44c9161630c83457a032ce0a32eb85f2b7917f595376eac5c51e2c4d51df2c82af1b6d2c1e5864270aafc1faa2a1fa93e2a3e4dc371f69fb144aaa254afe4a25ec05825c370dbed4de5737aaf8983e5f0095633cd7d396d2ca04e4aa373cc85639e008ece346afe5ede10fd29bd378c6235f16925de77d23367b3e23d73f7c736e3741ab9c21d6719c72c81056d0f7e8b5c9fc93c69e3dc229048a41b45a3a74dbdfe1bffe008b3ff728d22ac6f6d8de566ade6dcaed979c6aba9e4d58868ed46817389bb76d5a3bca2034cf98966eb792712600590c4984aba51f5d1d14a23f92bd224eef428daab69d439abf8e3bf3939e94eeca41798d4a32095fd3bfb0c6636b89698454f8f6ba3d00f5e712d8b85bb1b4d243645ebe9201430a00684abb0bbd661d94524099d018d9e5577c7bb44f6ddfc5772b462cca3d3fe40a467890a0335ab92a6da9928b0b9ccdbd2be0430e212a17d29eb1eda63a37945831503c0da50fc9f6d80a8e14f841540b96f3683959fdb32102c2cb74ccaf70d21922810f7729b4db8ba756405600c7556db40535fce602119e04e2a2d8f51cb7f4d67769ae40bf086e97f99fa35e6a1b3ed5066fdc22ff7dc344eba917f67dc260d83ccf3529054e8b7af6c8bc86e018b34bfa4fe4baaa956223a927e5b11e18b31785e7088542dca388b0998adfe384386c2449f87f876d0280e10a4ed8b41233375f856e30404ba9ace0e78f56b9aaaac032ae5c08b1100bd8ea475ae227a268b485baa0044f2ce1b08ed00cb887a6b0f21664631a2cea498d3924dd54c22a0716d1b5994e3726c53e9f820cc570a416bdfed11e0d766d2e9cbfa9aa10c99f30a3827734123e0f433b4f0afc922267e5d6eeb46cfdae9610d820f2eb441385b311c59976d351eb85f30db15f6a385f3ff67765fb6776aa8c520dc17af37f50bbd8b5f410f902544e3086088fc0713b0db369ab8e647eb93d1ca5895db824fd68d3794771245a5bfef35e14050e18232bae09bf8449c6e6ad4cc52e1b8dcea2898316575500cb06f1dd469b2f02cd5c3340d3cdf0437cfb0086f8716b65aed921bc117226bc8ed92bd060962bd84d9efeb4575e2e87c05f492ac1c21293442624dceba1cca0952d20a3abb9454d7c6bb6b2dc8ba364e2ff04cadc0928d60d5e5da81e72a5a390c9a107b7ef3ada40d42c6c0028e384ce4b50ded508b4ad9369bba5d9a8070e78a20a029717383a471a072a430a3b48d868eb951913d42efad7b997cd459cf0eacfa32a6be43b17953bf502db36ba41f90030b14e70d1739d052fca58d8f42cd93631f7a9a3fa03216b9287b1a7ffa78ea4e0b4900f8f9d6a992e59a6a0b7664b6a1d6993dfdd2ac8c460a5cb6fb84c0d236f682355200cfbfeac4b7206fa3ba2357301c800ac8b95be0c58a0025b83a2b75de087a6972e118e2b1bc313386c683373d44379aca31541c748828d5b3a901e7bccb2342dda376e74423dfd477f61f42d6134002d5f8894826fdfa9fe2f47d2d0a0ae95e34534e02caa970bcf1771210ccff3ac3a8ffaefe4d782f9e6e3c5fc8ad02aed97006436e6e213e1be95756715e2221461744561b1557140e685f87fafa83114a09fbc91ed62eac19ba56d2672e564c8ec358d68462e557550dabf9fda967911682396c2e72c91d6f7c4c459cd65b31481565e2b7ea9538b55f557ecda8836f9dacfda86573e84f1e232feca40b1d34ae45146afa0eadb4ab74599a90914a47d29b2f35f28e033f3528c0f7ec05131a2022aba9097698f70a2da9c6ee0f91c70549b3d7b9c09a4ee8d6488644b13c6ee7b563a0e8692d5e44b8cbadf1d0d193bf6cff168d1491d1543f19225c9da1ffcab0a308a885a3f798bcda9f4f800027312f94521348da8cfc631ed2d4844b05b4307ce02182b810d433ba000b006fe08a047a0a6266e1ab984726b122d45e4c260202f5c237f0ce7d02f666ae0abbc920edb8106c18a805d5afdaff9a239984c5e692b6dfb13632a436134e78ba03bba12f1f3ad70088f1e41c18d45839a21c6307cfc17c19a0035a30bf01c17a1ec36f4880f5db6c6c308092a290efa6e7ed59ec3e1a1827a35a0f7e77fdcf8fb0ec52276f0fad7fa374e5cdf7a4b08af8d6eadeac564b4d4a53ece8aaf7b13f6fcecfe139f8b9c19d5d6c88ef3fc20c3e0d9a5f8efef1302778e5f345e1ed42031db420b84dfbbc3269d976cc1af8ac493eb68a39bf288ad3f42ba89f6c30f90d461377dadf3262ef851d9c5c5dfc6c971fd807a0f6923fa2409294b69ef33ee308b2f8461437bc56b62e30ddab6b995dcc80d4bf10735d81fe5a730e4056bdf5f1fe662a6abe99d38f2de4c387a706ee1970e700677d2502741d32f2cd543ef540247e4200971c58292ceddc485076ffb193c6c95f76b961a0b9932b83058cdebde58ba890ff069d763c399ce749d6c8fd7caa61f02571fabfecca8c4c96f34c8d4f5ca89a78bb2c445ac6df38b90810cec81f2da9ee11d7241344f95017124a7286600b4dc8d046e29211ba914477b9c6611d31180b1ae736391d8ae38b7de302b409e802a7737f22d79667d64e9aca01595bef83705adba66af58f2a491bbd59efba787d0bbd2232248c0e2b4bc8b715ee36de2d2ef7396cc77db742a9a9e43d101bc504402f1def9c75f9cd3e212cc580ce28535ae346f4c07732539403e6b3deaa32f8129b26216446704a53ffcaa8715d7e322bddb8d6128e015a4081bf73b8d3d9780e275f8824d3429d5721a087e9550dac8698c999f8b922aaaa655ee641ac839bddd7b94a596aef8da0634ee8f10aa04890fc39922432cbd53007a7493a9f2fb1a050a92f4662ce6fbcbd3b5bfe5529b028b77a0ca048abd90e0e7de285e2940e2b8d49eaf04b667c9652418dbc6e11b51f5d3dc2563d8c8c99e3d40216f4c0221cfe718629ef3ab981bbf8b1f1d4a050334f41fef5fb4c6fd958b3f2d163d6adad6457671ce5fecb08e9b6a21cd721c8aa43b1371f8af1beed26c343befafa49cc74319a0ec958582fa93c341ef91d6c882cfbd868c4b7e154673c42a01cfe8a13c3c50f7fc1b9e68570b6178dc59ba99a13f504e75aa34d022624308226189d9021950bab0caa28225b09f261733b6782278151e3dc800abfbaa3470dbcff30b89a4b9a0c99442d498fcc260303cee008555f6174446779485cead41dbbb6fb15fbdd1e65b452465801b1638e764898af380bf52d55664084980dc12e62e1da70c6add2a47d5ad49c1d68adc4d6fd7f298a7e847d27ca339220d126f836b783be58a33a39e45218894a2b84c6846df57b2798002a568d941d4229cfb7713711c13c7ad4b7cc1328d488e2878cf5b9fcb084cd84d2e70307cb481835c8af0072670ea4d74a91fe8429eb5cb27bd87890a65a07d4f860d61766402c0693accb9640a538f3619e1081d5040a5c2e03499e41bba762fc1ee109028338d5cb50981be497f3f385d03e27d213de074727771ca04d14ffff35cfc20be8ad5f44ed77d55f36f5648479b45409314c79d12446da70810925c7d2b3315a267a151a00b906575dc1a1e26a0a4201b126cc72719326144adcf99070aa5ac51500f205e1ce38dcc6b8cc50b95c7ff90a865b0d0242ca2411cc106af89d9919818bfe193798ac549561ea10bbf316f1e34574786835b24d33ad77ad11e5fb59e16af152c2027e8e66888e315ffde264a52f71cc10784cd91f63af0f297e505f6cdb20f81cd3ac88c96919beb81914a3681ff1e461862f2f960f941b3a8a8876e1ff70aee1c59ebf12e736624324e10ce8cc1418cf929c5595b038bbe33f37d4e3d4819a4b143613ccc0c512a7e77570be1bf1de7829c6f037d516ab3ed6152c44cd2aaa397eec0cafbd734398a666b3095a1ff0c1e3ce50579d004db59ba377b1f8e3418c00e27be43986b081e4a0de0761201946e105ea5491d87b3ce4f17fdfef615f298c59dc3a331ccb0d59d32a24f4b2e8f185877342e778b0700ba4fc441fcd52e35af2bd66f3f5b01f686063c8c4e6135aadcadb586b24ac71a0ab20d291deacab6ebc6b623a1b1b4d7e8e516928a6f8d16d7e1b13db79d9ff5db326e3d7e0745e552829c2f5819f18f472c2d758c074c44660020c52d463538a9de98a2677711f3642311246ace83ae78ecd56f3e9ef4d4e3b067a49135fdf389cea5633c90c98dbe58630b6d37e062f436ab5a7d5ab8ad8cbc5d5484903a25736220263e6e61d1e64795fb9345be17dca6d10b0d058235b98066f8852156af422f1b5eb357448275165e86da735d548775bc429fd024a9d76183e171f9ad2b0e7f83245f79c2974cc98c6fc48303fd3d6aca17211f08cd377c76d70e5df79364aacfccc2faa62c67b7fdbf5ae53e22edc0b6f0b05ad3ac49d4a690c660317135f0e24065a87853af3ddf9a8f868b845b6fadd0241112078b7c250cdb2e90e6253158837f52d3440d7cd970bf9ba703aebb64cb6192492920b4be22bf09e52dbdc3dcb6f92bd0127e63fcd3d99f94916b3e0cfaa3bec3f4dbadfd706dd95d2a4d78d19ec1c23eae9bc65fc0106e73ef55461566312213e9549cd618a1a409341e077c3f4de92502a533c949fe51ac9222db0e931e0e3abf673cb20fd63ac2537add31ad1908d66d992e4af22772e2865c086bf9e10fa6328b5342893ac6fbf2c9d790cf659ab3713d922f53bab3e3baaad87c8c0c68cd92aea837aecc1537aa885b8a0946b2046bf069479d45140af1e1282e777cfb03b04d23f47aafabaad1e50377f330a33a66bb505ab0c6822663a6c5a91139d919bb557a647bd4981ff240fd4e3f7e16528628ab6af3e76e3ee07e6b5d2b64f12f8a20a2839d2d9b4eef884a3ba66d52cf86fdab0504672ab18b51a4d1649eb0276066d4e0f4bb5a054b516876ef882bed382dd82e3d4ef36b55778e01a300dfbea15f416bcb80b06c95db41b99b9e740f42c9658dda8f6804176e319c687de14017b94ca28e775e4aab91d1b049e07a4f0abebd227f3ab909cabb807665a3d5bc0ba3db6fbd5621198e949b6ba93da1a90704a9c32763fbd16d0e7b68fea73800370d4b1c6c44b08847c2d60cbfcd3db58f1572d275d0bd4c87eba300ff3f735ae180b32db826e53ba2e240cfc041d48fc9eb5c61f79ad9383c069245d96463593c441614ad1b1dd3bdfb002c149cf67d0c7fd13f07f166b45426da0467796ab1f1a7130afd69c132e65f890496621045372723d9f80666e395e9e67b82679646c954f203ca268ea2f0ebce86eb86d8cb066c925a04169fdf9ec3a0e8163fb97cd2e8d4be0a8a1865c40922c4babcd00e53e2f14b9ca9208d0301abb6f377c4c8900b12ddbb8c43992c38745b7c6b26a91bf251138e446f6a92dc8e707ff0df2d25ef5e298e61d0ff806667b1639c0f12de5e135c16f80823fdc9b08383bd60659eb3ead4a6d5f8fd4380615461f3716af3f7ef7c90547ecfa879766fcf1c8025943d87a7473aec47a40f1f06ab076e4630274adb06fd0f87d40460b549367e0987d662d425eb31fc13d1f945a7a4ab0921cd17a1908a3482a230d400d94604f829ba3d50c78516bab4cfbbf9a89869dda9024499310333e1dcae0a55e38132e0a714bf6dc4ecf232024d8c1fc398880e914469f0b7ca10e1727e359261e0151319ba3f03b4c700c616dd692037ce70062f741449503048bbfcbc4386a7c0c94493e629d1d4d0f742a0f400cd81e91c6b67c40b9a9dd2233a7415966b294aff1944ac915c056cbedb6da47a85d6d5f1e62c73b88b09598905b7704df43d0f0654a42d1a6c528bfee407b65bb31227171eaca9605b12be1aa3365d8fcfab76d5440be8568caf671040b44f8c93e24f3ef8a074d54d09ceec598027bec81046d4325f88e68f539c1bc5c6f2e61d04e413aa110af50fe7509e2704a27741216ed5f1b23cbc1378a05b64ea17f3d15976140322df9adf98f9d70a330e840edb86fb8d161d846fea70f809d493ce93488bdd85dfb6b5ba8cecd1c82faca892b9846b5e79ea133173825ba6643df18c1487cfa6bcb9f2fbc2cbbc8f991e731d560d295b4bf1e518c56d952ed0d17feea1a780ccbc8b10f087429d93e040a677e08050ea3a8b9ec49ccae1a28e8f0d1aa2d7f4b21a4e8116924777568c4c70060df001d743ddd5fdf24d83b3b610f262e54754df8918b7be9178e0b8dba18a4f1b695c998493fd863bbe793c52e541eecd9993418b5f4e26a90b0e5a308bf4dd8a2daec262fea65f6c689036985cc8e492bc25a77d199267435d34a535bfed0afa99383e0eb3d1435618084b8aa8dc25c8c4e6c7164d2b28b36a6ed10b2171908fe929dcda9cc15af7fc6ee686f31ca615b6d407cad190572debde7e5ee0cebf48a5e2a7b9fbf3953ceb63dcabdc40897cf2136ceac50f61913360eda6b31b27b23a19de6cebfae56b01d2fc35e1da162f92b6120a4faf60c0f5dcf6b558ccc9ed62c37d00f108248463adc3f951668ff328905da79d8bd07eadad306c11f3b37634edb2eee0a24cafe47a37c1142145aea124abcde5c4f213f84a893fe45089d0d9a4ffb5ff85d77b6fdf205214d977cda4e57e46cdabbaafae94d79c95f924e9e71d0309e1ea2b3a2be77d59cdbb90cbde02fc960f1f484608fe4d699a4a82e2bc65f47f63fc1f1efaa5b3ff685613e71332b5fdeab2d38c2c4656f7b846ee90380c7baa829473f8cd78bedf38ae422b0f74097c6c97fc9d4d1885f77fbafdf1f57ecd5c4a8e459a0bcce6f8457653b6b2e71712ba7bd1286ccbb4dd900d5aa5b2dd7381735432006c674096c18c7be379eb614555e981103a3bd1807d6f0763ddf8abd88d032816fee748e9e0ffc49caafad4e6ed4adb1f062ab9e444a2c27a9204c1566b18626e18bcd92b774bb7a44e2118cc4ee81d0a3810832fc4b30a9ac7d41e4f455c580e1976d38f91716d7ae0d852f97b58393efb929857e2a01ab8a563a17679dc1469685f86a28f11a66dd61e029faa30469493e4e7cc0c332e4d964544714f000c8be96091816fe2367afc1a77cf77e018adf0da2439c8bb2cbe26f03a3922d48cf4869c563b2341c49cef74d0ee81df3b94b0c52cab93c1285d6c481202388c4732342a2bc5d322b3e45a23d404e6b1a996b6687f91b0183a4c810ca2a5e462eeb9cd444fd3771179fb246e2ee785b0ba1f4220eefd702a7ee8cf97351d2a4f1534a36e3ee18935f2182066ad05779014aba76051fe52aba39ea6c9fb17f9e7e9e0de69472457e2b4b1e336dd20f83d00fc287380bb2c8ec1980b66fe97837e88ae8f125ac8c4ceba83317fefa8bccd17588196c6bf77e11675d3859f6d24ade64bf68195eea45040cd405048ae01690593054b24a070d1f9090cce9b924c9a92a5ec6b5028eb1c36b7537208b2957db948b68b9e9fc69a66a17bc3a9e465e20b199090b083df8a2e58f24a690096a9a7eceaba8ee9eebb561df597a48397f652364efbde59652a694520309ea08d508d7f5e3078f9e5dedf7f0f8d1c3a377859e85524c4f6c941143144345dbd6a475bd9f14ce7ceeb8495fd795ba9ebfa719e8afebba3a066aaf497ba9f69ae5cb54932ed202a738c80ca478c509216429e1bc20ec79f58ed1b6fa59e81cf6dfd15e8f773d3bdf4e901efe2f723d3b9854ff9e96b173a00e83513f54fca2aafedbc6289cea320a35aa431c54672eb0a8fe318b07faf8b7d039d7fbcf911cb88d729b7a249152c2262923097b700d435cc40252557fc6d239ad2cac13207161a5ced9ea3a34e1315c5b9d2009f5632fd51f369b7af44962a9b3bbb8168a1c69cfb14739c6f1375b25c398132787b7a343870e160f45d40f351d08eceecf34f07f2aec689834ec8a31a71abfae837a7aa3fb3855bd1add0cb7edd1e83e0edaf6623a14b76e43bb6f4f9da9fba8d67d28aceb56c99d6db47359b8c2e181553faa84b635f3080aa1d46ff2a41485fa207632534e6417246bec1f6ed34f514a34d63559607d7ae41028ec26f401e56fa882e5ddb8d1f3628c31f669059ba5a935914515d0ffd1d42fd67e8fb08bb4728c90cb8113638c51caaff9a104a2ebe8ba949693b84b131510f7c5bcffff3f27a50fdf75dae7afeb59c7b539fed7f51bbbcfc63707fe858ad14dd716e7641cacceafcdd1f2dc8840ed231411e80f08b03a4ce436fd1301940128d42bb59f8996879370fd98e8e2a319a674893f0ed6a6ff0b22f0d13f8e0ef5a154d7a5ba54976a5ed79ced5d7cc447735e7b434495f8218b0f483c88521b50f78a175daa06e3ecbecb431ea6c0492d422405415d4cfd857e33130ed99b0dac4d3f11503b4941d49db9711142dda30eb3813a8410423804428802a02f3b3b7baa111b82aedb38f30e5976c062c39636c16efb7aeeb66b4e9310260950f2917fa9b8d41f2c1dbe54ad4d16581f299340ff871aecaf708152bf6d7927a03146ce76d05645465db4c2d2cac24529e9688b17dedd542ad529a33929fd6f1dbbbbbbe22a4b96a753ae33c46dfa8f3ad5a9f843261f356b75aee5b9d1abe5612fc2c275aeae8ba40bb90bd51eda9b16a289aea846d4fe66efee94d0a3b07bc2c7567a86e599a2f6770d5460e424a8a63a2e6aaf1b096f95bd41729d7e626dfa59b5b1681517455de44848483eb8a8c89d7d459dc0300cdbb0a961da864d4d7b617bedf4a679da4edb6b2fe4f4a6edb5cfc0a69d4cdb109bb675daa5000cebbe1d33c3b06c66599679ede5c0d1b183b536c392ab96bc8903791422177228549696868686868686865c67febf3f4c827ef239048b54b51750cf8446888dbff1363a1a7e7cbe1f677b1bdf955b9d5e62bf9d161ab261a36382d1e083297c60681da4c082680ecd21297569e9cb7545537c6ffed54bdaa338262f28b19cf041f5d2971b6fc29bd03101c03459a07d4c781b381e47c704c7db0000d7291c5c030180a31142f300789aae5334f401f0348f83a3111280c7f101e81a084747439fa66b2944d48437a16b2100743da41d1df996e5919931c5986a9860caf4d2d483060d98aad119c1948c8c9191511b4999a1251ca8d19ca1345032471e03fdda887e7f6b599e986f9959bd468deee3ba347344e348e688ebbad40326887e3c74a2947d603814a704083858f2b9c1adcfc9749424f66fdcd7abef67a85ef2e77b376c70ebc3a6ab6329593ecb5eea2566397f667a8606493a00b58a307f294548469155644bae2415e9cc7cfdd2da36ac4dff0e42384ce6677f714caec7b2d46eb55765a97ae9d2de4ccab8c5b869447de54b4ab5bfcbc5a1ae2da88a7e53880b0a6a98bb6f492cb24a517b59e8d7305490034b799eeb5caf4347fde40f744ad59cabeb07fa58eaa8f6c3d4bd024651651d8e73f1403f2c55fb77ec60a9cef97c683527a528d4bfe7c9b982d26a405d1614559dab169454579705c49615042da02e0bca519dab95acc2032ae43a12ca8c42e5144945aa90a80c6818f48340392c15412008e43a12882c2c20b040e91cfe58f70a1533aae69c7cc8cdd56cb5d7134b7bed5b2f19280fd8b35ae1473ba15a1e1bb55f0ad5a87b85cb51fde49090204f92eab29e48a99f543d69d5b9ba9afde4dfde4dd6de749dabbd6130286b73220f590c7551fbe7aa0afda46a45a4721d1f1a92aa26f5932a202fe807819ef54488a5022958a2105504d4c522a4a56abd4d2c7de54bd19524ac6a1559ea2755bbc2b2454691506abf0e5b8a346c83dcac9363beb8f5d9b6ac88ca214954a50a0b5781fc65172e8410fe761326622f9c5475ce4a2752a8b5c828b5ff93526abb93f6da9f3977e8be914b81076565507f3f9aabda9f997a78e75bda7324a0ee8640433816da6b6f01c28ec80d1402d5feaf409dc3efdd91ab88344d80068992f6fa7d7043fde41013a9f26e496b71276dd3df5b96fa93ba878e92a60ff552ea1da8e543b55f932aa9e226edf5c3140731507bfd43522555ee296c28b60166f08ffcce7da80a61e70233c77865810be12ee4dd7dded916b3cd00a8733bf6e6016bd39fa58a233771371dc01a80773b7b9305cdd1383b7207d41feeecc4c83af02277a3a2159656162e4abc659776f68ada437bc34210ed1546d4940b15a552dc2d29daf6c6c8c8c8a8a868ce392945a1fe3d6f7681102e5c086fbc1853eae76df03f9414d84d14d0bd71140a29ca32efae12ae40b8d2f809d80709ef54e84a85d2320ac5ccb07da0fc6fa2ea2551929bd59999d707728f6905c58142a15028144a69072a2ddbd9d11eb3d78f7782b84ef64914c99b45bca07d66fa4d4a6666be2611f4dbd179010921db9bfe85ecb57f61f336d1705701edb3cf40064c5d8f67da89423f4fc3711d1aee688264bf5588d6655d7f366968304f23e5dcb9a36376868465f6bcdddd36edd638d9c8b5e90fc07afd8f83f7bf1d2e728cd053e2a262a5a00b2b055d84f0f9364b8a258443fd960bbc7e5061b7ed4d2b680ecff33c6f0a41e349857e1356e6cfeab2808e2a2f77d1ee42f8104208712a335182a448e5162a3f0b957f480e7fef243333cf18b9eceeec32e77f5bc6255132eb9c5c92535532b9ad5a8cb14d299c326d5e8c7df6da057e00a1c0b65607cb715b63fb297e4f6f42742bd629e1ba7b23e99c74d249310cc3304c859dc04a0f39bbaf2f370b7b74651b8b928d10ba78a94bed0dc7a0e2226c1022e2367daade4920c2cd38737a0f654d48f9ef6999eb7566be1702356ef49c94a25033ff37ba1a5d6fcd44e65173f2c47288a6ff4766aad38f21ec4e860af52333dcd31042e84d9c1dd4bb4ba17dc5a0790fdd651a81d37d0397cb0bbfc111f602a2a52b128d51638d8fe2eab286b42002a30c9cee6b36c08b2c9640042f92a07c61250ac992748760b6a5d28b6c13034a1154a4604103173e57952ee491bce248098ea27e1f44149015040c5ce7c749d10c92404650134e66f0c1a1a9cb0ae249957559413899421a1ca2fb7b69eb3abd3e59d840cbcaa775a09204241d1d4c59f968be35c764070babc80706d8c310dc78fa7eeaea48b182251f18985dd0b6b5ad0b3906295fe0b0042a455815f5e0038eef7827250a2b2740c11432c4e0441939366a4d0f8815d19805844e8010d4407864f8d044106e404245430c9c80c1c3cc5b440e8056c0bc3638003103337248e2871960d0e281879f74d9c20536043184109290820aeb9a6004599f3da2db7297a15120d2d955ce56ef6e283b8ac060a458f7cd6e4e1a7da2148f4285ff3c3c31a180a2e213f16be4a40a1630b278815445133cd430331ce85709232e7c1eed10527652210c39a8e18a952e7eb0810e3e90890ab7547855086137fbdb5b89a86de74d9c1dc9c1efe9186394b35b19e5764960856e453e91af2814a5dfdc971de487fc2eafab4b026bec605b9990999fc6e368f6f1db14338e18f721a9de7dd7434eee60668e1ea3e3e8d8690f7241bf0db5f5673a1a7e58b9c3798994238ea1c312720a7aa32e4b87275ca84c5d960e40d10894d665e5b09483520e292535fa7a01215cda1edfeafa12e5ef205c7777775fdeb0d885fb665ca6e86ec510e5cf30cdb49d605ccb60e866d8d2987805e5f580c81973c9c8e27658771b82c2079255d8b1478fdbcb28148ebd69b9c3f70d15bd19c2285a961f8b63b563b786978d70d8104208218410723b74e724b7314a721d4af706c22128108913557b10a8497b7089bbbb3b93f620a7f694a5851d41e1f2f4c38f591dfec1dac0875834f59879ad5b6b4dd362b4ef355d185d9e53853f9d500aa245126cc11a7c6b82ba9ba125a93d279491921c3efc06729d39290dd21eec8e933620806c4a50efbed5c2469df3f1caef965276f4fa514c7e8d19f33d0db369efeeeebe7d9bbea7bbbb9b729625ca2d3937ec08caf5a36d4a41cadfe0b6753440b6e7f7b1b1fc8d930fd9249f5b9ca573e2cb8e9166e596ebec8a8d3ac788bb697b1f6cfaed7f2affc66dfe3127ec082aeb471b7b0debceb2d3b7a9c70949fdb457026b8c16b7187f0ceb780bd72b065ed29e4d311d23b5077f86e3a3f660c75b662411e8d313b73da1eb23458acf49a9c3eeee863f8145a1007b023ffc9bd5d915d23a371e3e0b445a681dd4c33f8244097c269db33d343d3c3d8479faf0631ec267a1cea1f170e6e1f350e7d47868e3e17b3996273ee4ff0c5045850fa8f0771b5021846e830bb2427bfe33dc8ff6fc69703c7a76ecb4e70fc3e9e070726c9cc7d57c7bfe188703c5d1b6d96e7035904607e0051a92f61e3dc618dffdcac1fff26acf807e1302a7ad3dd80dd83a6721779f099a4c0f500a1aa2c168476d4f7ddb82442c1a966062284d3d2e8afd37b3f2d90484abec9eabc101b998b968fc218d7c58e5631c8d77db8c7fc5e01b6a7a87da1a03822b8575f2d33356fc3872e0ec3051bf5df1c0b00947e627b249582a7f49b1ea056c5453a9540a079e427d3e262a9aabb33eb48724000a74a831f6123facfc974b75ef661d7a9a99a2a01639547b94a2da7376869319ce70342af0cfcdf3c79601147bc7b8af59a25cafffbe07e5778e79cef910d55ecf5c8d1d416b0a9809c88651b167ce2bfbe4f9f07dcc6edbcbe64fc57e72589558b753aff788f37fd119d40e0e45e16c5bdcdbddddddddddbddd27a546f37f6f3cf6f6cb735a1e136a572de8b723ffca716669e2bffcb9d571c0f3cedef8c319e8071d7b0d6ed81134d6efb90b081be187af3107a30afdd9fbe8cf3a254d02fe89dc7ce696eeec68dff1c8c12ab9ad3b11aab02e2866ec8c1714255d54148d41e3faa5f2a2e209192e9610a0d874603901064f87fc2eeca0ca105396d0831aba5862073328150f7e8440fd361a3ba8fdfdf3861e6ee0a2f643d400bec0324616473c996204510f419833123de882464367778a809ac48a1615d0a0053eb0a0081f57c25f4790e5d9661b4f92c0614b0f90b0658824c4e872dadaa3953f074e43cf6df87dba8e07aeb06a7005108ab0b4f27124aa7f7184ea9b2fd1cff35c87761f4ee5146f55c08be6ba1c42082184104208ff7278c1dd2ece053f5536a1c20aff213333f3b5d5ebeab6f620d4817e87a33de847a0b473a00e8435353870cccc40e8bbae943df173e74c4dc50104c64c8401d105548600201520e924c6630014e710a79e4151275490364103ebe0c4302a2d37f5b8e837311c15b3c18a8a3d6c9d1b3e188615816efda84f0c8c2e8ac221d665e190ca7eb03bea6eebc2e6635807b7889eeab2667012abccd0021bd0ac2e6b062888a0b32e6b062c3568c96db6ca65054df91a8f45831815d6650549b942cb8166b473a074ef3e25508b1ce5c6a0b19bb6d74baaaf923a55c8fce79671342ac09f3fbbaf2bec7eaa548236b5a0a6ad33feee9f339b5996653f298642016079835aa6699c6d270ea73dec08daf5436d9d8e18e85fe941171183f513c1cf07ebf65bc61939a36a59470324fbf93eb2ce9f043cffa7f6f4f51977bdef76fda3da931d8e6bcad724372f25d78504d6f8b2478cdd430ed55e531cedf513817e97ba2b139b8000b1d4922641513a87c8a53894ea7089bbef18bdeb9420063fc1fd54e1cec31c6109a7989841fba713d484eadb0aa85c5ae23f27a5a86ba793dfd345daf3256ee3bf23c5fb1db9048ae4487b5e06ede7257be3ef5fe8b48232f1775fd2391e71786b51b4497b08824962ed6046fda8f73473ff27b91f2cff5dc267962c5932e47ef060fed139ddc363b99999398775300a8ea0fdcbcccccccccc407c412eb20fab9e1f47957f8520fc4288f01f59c25169bf1fc9efcc7f31333333af0f3333bf8f1c02ed8e25129a08b8f2f368fd08d26ab55a4bae12fa180a03f590afc51f4196c77ff0c5d2f0ff544eb21f5f85a582b45aadd6d2fa2cb735fea47ca8ebac4f77b74f6b63c72abb7f3ddc5dac0832b44d4011e5f732169d92477bbd5d125895c87ac9b46896089441417b98a0fbb0e3e13faeffae6b3f39d073fce722715a79833dd348d019257fa1a28b18047ac242850a0ee84c5d16d15014442a2220258428ac3b55fe021f08c1dd7daea4460998c2c49426b53fa270fca9bbbb3bec19011c51c41136d4864e283f7d4eaace801ac8a02106583c490208ac241fb2274ea8fdcc5406094fb46e60850f5100e1e3abeaeeeeee1f65fa821f6a7f63566c52bcd8c0ac586946dc70635aa1941921048daba5c28ca03223af90328d686d57b48cd042ab5832824b6685ca88215c5700196104da227a010d315724354a09551242f4086c5e910cbad56505318510b4c60ce4104120c9206aa32e2b0832aea031755943404b1825b10258974574860eb8e365e66576bffcf2cb677e39175ceef25fcc5c0196bf5791222d740ef447a2e47ae6e71437e9b87012c748ed611d73b9323946e2a4f69a0aba7596c6b25ceac7484d8494e17777eec2dddddddddddddd5dd982f125babdeede7dd7ee767777acb0a67a55bdfb9602f9d4c34e873243b060b657978bcfddbdffa2fe1f84f0173ab721d12c74dd83df755dd7ee42b8d08d80a2cccc28e6607ba8f545390d232edcdeedbedddd08bbf367efe6dedd6d1e3ded412a351914d4ffb9c6d45512bd3981ad2b420624aa2976f2674d29f46fefa3b1187fce0d8b517a55ca087b73f7708c6e18525d29fa5294c4923254f74b5dd6105eea57a47ed81f41550da9caa7bfa624f365bea7a5a907d67d932bd4b898972102f5a1c58f79255db518ee5352b5ee8bf923a8988e2646eb6862623e4626666edf72b3bdf93bbbcd0bca158be168645efb985f530a3432bf4b1556ec392af33030f42185a11d8c4c07d37d45ea07f34750454175594e38a938755931f8a26abec5ccf932dd570455b7c7ec68646864be4d323f39188e663ed7f91b47337f7754f994a3a93ada93bf269c6b083a65601efb6d0fa31d0dcc92f6b0ff764986130157cd08aaa47ef37164644cb3a399ffc1a5991d9058e7cf0ee35aed795e7bf2db06f4f38c88aa94523e1331152ea23d9db313a7026d75360cc7261c55ce74ce46a7f6f26bbccec95e7b4de36dd390eab7714c4cccfbd81ad3d1c8bc91181a48944685989f1fe3c960dcc7514e26863bfd9a607e2a0c7764aba7ed31ee8375eb6debaec73ee3b059233b23bc54b3bb5a84744ee3c03c7dda3161020307b18589241f24ae8781a7a8c193940f1246b2bf1ee67f7c96fa632994c3599cf5d9692d719b7e6e7dae192836bfecf9b1ff6a3c25d0ec597a9df3fe0c832675fb0d092e75594868a946755948c8509774cefceeec37e6be8f79f8d1377d0c4739180e9a52e03f6dcf4ae2667acde4be3d6fcf4434662145bfc21fd4ac6361888a360df7119c7a7534fceb1dcd4fa913722c1069efaa8132d02ef1d3406049e7a4b8d40efa58ca9016380c053a0fe99c0f47edef27d23934b5a760a0a5ee691cbc32b52948db9a0f2255f85a64224621766cc42730b13cde71177b031f2641e36b5df73d46412655b7953eb5373076df1a51d761221cd7c11ea2e0e7b191dbc09f337610eb58c96de0c3a30a7ba909edff5aa97a516a0fc618e59c73ced85eda83bdd4de12d4e1b712cd944aa00f9520d2050477777777174218618411c2851d7432e847eb10947fbfbb2c05f4dbf71ca2a05052308b0ad10c06ae7c81e50a2b4ae54755a9ccdb1174ff4a82ee5f4cd07d6d4be5df426917c96fc78b8a1c4557b4881679d1aac8681681d26400bee0439381f9f265f782cf3eff10ef688430b93a26f11d76eb3643a4fcee6884f4c3871d13f8fd3f3e3f3eb37b4fd18f56eeb9c849eee27adc865b9fc8ad0ff4e91e41a8db7023d1464a715f40700bb805dc0226b1355ffccfeb7a2783da757bfd108951f08e577c0218cbc31d53b137fd5e97a67a8cda49b51b89e3100cd22ca2b0055b8d94421fed4d05da473e5274d239eca5bd1856270e7912a31085f884940d447ab237fd5f169f2ccf100cc2eaf00cd6468851e0164e54a27ebc8a433468f0aa0bf5ff606ba87e0f5bb5bf915a0bda4963505af74a154ed46fce4024f94b1522b90eaf28859206fac5a2464a42694d28c7d54462f6cedbb5f6f62bc26f5e97735757e331c1e54bf5cb07faf597cafff5f3547fc1c1d9719d3e721bfe6f9126a5a8a32144dc8629ce511f318edbb04f863d8631c91efb1f9fed7f7c346e763442a6f6f37f7c4cffe373cd409fbfd05253266ee370dc8671326ecda044da5b827eff2d1247b9d9020ad42485459333543caf770becdad0f8f3e08cb59995c63f7e73698fbf937a0b7f1f5d38d0e72b3df0a136c780767bdee6c82b7635512645a38ff7da8b2b7c33b5df3dbf7ab3a2553f4ea9a2ac8670c2cf2a4eb186e0e63e4e7a8ce325ed2959c2a43d4e6a8f0b765dd8f598ccb40ccbb00ccb300c6b0eeb38c905bfb88b0b8e5c6014c54994a0eb423a23a90a29a97a75df3f24a25f27cdeb063489125a3b0947884297d582a3faf5529297cabfb5973a678550aafcdea47338a8b96fc60542f5eb25164ca9fc9e7281aa729037d96de66eea63d7ebea261a4854be7f9d0faf52bec9c7ee0df6b2dbbdb91e0614ebbefef957f77552d6499dd349d98c824225e8fe84826a4950f96d54b1ce52b16e558ca862dd776521e0a4fac120548d5c2f3f1884aabcba8f93ea95024ced2524e8c729d7d19e8fd6b15605dc47ebbaeffaf819f74da37a849390b4c74a9043624a81ebee8d9b7c4087102e743e9dbe11d4dd9bcc0259f7f5c7c7da777ba93de6b701b5830a4c9cda1bf654d75fdae3f71fd0ef6789089c42d75534b2d0b6a6a1e6d7921f5ce337cb8c8b9834f59059966557d65fe370e1d730e30431837eb23b991efee93b6faea285ce5762d59c3a4a1866e431a9dab88162158a53ad62ec1161bea779255b1b57a9f130447cd6ac6dbed96ddb689fbd56838330f0619e523a33333333f33f35ce705ffc1899a7f13f3464603e86fb7a4b8579e7be36aa30dfe314a6ab692f487bfd266e080bede1e020e1aceb20a92e215fd08e1ee3ef57a39a698c88eb6a411044443d153e2f7310eeeedec129227429a14bb12c20222262954aa58acb8227c23428b2301069a1c891ce89cf1d52109f4714a91eb1513f1254cb553b2854c75aa450a3256222269a403a507dc5aae9144807eaabf03576d03484c4e17b84ffd588a441af454e7270e3f42744aaff3a4308fd83e8beee6edfee224ea74c9b59dadbb8d036caf2d9fb4f2702507979f8610e990ae8d7ad46426add4007dadabe75832c4747bda573b2efef1b2c8f8fd5b8b97492fcd245bdea2ab009fa75e597b0a9b4d79f7d237169025df0f7d1d53b888312597705bb87104208218410420821375fc2eca384db73c5c80803a9080cff9b8d04a5d4a2ca962a5c6ad735ca511ba98a976f2344ea9cafa9d47ed63281a6d2395209dc7d2847d2532abfcf895b1fa5ad615ea0653462452ad854a42eed6519f3bbfbb61dc1a9ae34c5336eb126ead550b75c67bf583551177595c6d246bda5935a4b2375178cdbda435128b0bd06636fff53b7199c46caa5cb8d66eb9c6cdb9052195097a0ecf98a97295cd4246ba32b4b19161cb2dfbc8932a641cd3419b1391fd3e6e4ae0d3369f0a73a8d18a8f4504769299d833547d3ff53bbfbb89db497b5aabdec0c8a751dd45ef6aeea2640ed6530caad4ddbc675aabdec2516347b36c2f26c9f3d97c128609f3d2f754effc75c069f90bd11ead6b1112e24e8d74435fbec9ba873e067df543a277ef65dd439f3b3ef2c556af65aaf3a67fbac55339369db1a4bcd7e4d5967c453a71b18edfca85e5f393c9ccee96bd52678e435aa426306fa4d7708217408a143e83e27973133d97fb4a51103858f9af03333a8b753519dd3d5ffc281facf71419c0a612aecaaf0a286ba261560aaf719dad690a1a341aeb1ff2184b0fb609c60683fbf99af2647cd5028aca3abb943c46da8d09ed5cab9d8ce1da1126c627a10ce298484eafe9aa987c314b06850dd3f9bb176779fa0760f56b5656a777777c32d0050bf9a29be547ff88451f51594eaab2054674151ddeb8652032250e181145ce870431761205d5218a1f6f7cf29b0d47e49fb4705442061093f08610a29ac7021460d3a946dfa61ff94228b9525d47e48298bd1459000ac6ce1031764d00acbd4c38559910133b282025946caca0ea6961516dca8660c5981c156cb5042ade80cea8a1006c5114f54f9e1092baea8a8587d8d070518545409c2bd50f6ee6d79fdeb2d0f5ca3231e1051a4047b6302b6d9810737b0cdc732684b6087e4487bddddbedae539f5861141635d3128ffae0ef6bb07581dace32e6de3cfddc75367b76df32da0fa634450af49e06ed211646b7f4009637a2c21a2d8090bb5d7526569a938cb57ef51646f7cb69859b537de32cad29e07817e5cd4ba80b0210743a8dd3f3c8646ae091605e1248e4a65a1c75687d7861f858a596160a4661057b888c10a1e6810829106b6b04050145a18e18b971f20214407ddc0a2a14a0ba298210b2d380b1e2861063084a881174e20a13f8045f58410103518020959626e18d3205735deb476c736667975d651a8ffba8f03353e9cec27d97107b9dad3bb359c030c6c7619cbd0daff670aa7899fa4a7faffec0d4ddc6ac45d002f80da2f8008c01d408c317e3f5d9de3336a731f0c3174aa768fdedf36b2bfabba1d3ca36a709b9dd33d9fc01af04b40c21997fb7879197e7bcb703d09777724ee41dc4d27189893c9bde787eb20c1d1b1b3e33b4e6ddbf63eb66edde619f7d19a4d8c7f6ac6f5968af935a7672d87b41d5a28129ff33d1a2343655031dcba0de57a98b18738ad03fe8ece994f1fa2e073ca6d20edd66daed534edb5d57a603f3db2878181818179ede3df4c7f3a99b02d188684214325b93e74c4ab08ee6c92c056b97534f560e86d069c93d29d0b714079744e9c937e8d9784bff58210faca054ed8bb0185ffe1f01083a86d96871845ed6d8541a0d3fde220f7c8eba7d94960fde684ee383aeab2628054d7bb788c313a3b3bf3e6f8daef0c5b0a6d6b66c7d81fdb488c1fdb48cb8ebb4614922899b5bbc6dfd8fc9c12aefd34b5e30ae8cee7979f6379e6cbd7d1392ec0f035def270956fb33cd9cbbf591eece5ef744e732ef0899e6affa9f60fa06adc5369b0df6a643ed6018140ed4ff293aab3a3510102b51f02b5ff678a1a0322892361b0ca094095bf334a95524a3f5dddbe94c137ff0dfe89c34ed8e97482f1c47d5f3123f0af28e99ca7ed4fa787276e629c8f9d271f14d51ea5800962dd87a45e9d91f8b28b7476cec6300b6d005a17a13454e4fac81d41711455a7da8370c94b4c8a5d20d2966814b5c016965814ab40228e0261d742a8a121a1a1212743320553a4f62fbcbeb923a8babb4aeb05267139dae246595658ba884a95d29e4fa929705d153b69cf63ddae81e0067fa37c1af8d7c5b18a06764062fdd2ddddff2d52f3a490a8789d81fc83aa432e8554ab8b520e5fa9ce415c67beff0a4054d81fcbd347da9b1d121e8c42ec40b027f8277546f6c609eac216591e1cd51fc9f2c0b7a1ba1fa17a9199242b04122bfc1f41926880304dfcc14125d0202bb810e8b749451c324fef50de656bbe66769496a4c790f9d4e382e4a50b1273972951fa5bdb3228a83b74d8dddd57ffd5539a4d3d92f418423d9c47a15a07c76d3228284f5982fe701de6a26387bd303373e4182377e19ec95de267505055d0469452c9140bed796cfe214386b426a83471cf91c78f2946954a6b48506a4a7bdfd326e64b9e64cb678e6dcadec42989958fdaf3e78e870cc746ac858a4d0afa71ebc3c9b259a19bbcb8380335e2a3f89e74bd11c75cbab4e74849f4e3c769cfdfd4e9882f3985454ae77c44f8b953213bf140b192e8f1a03b4e6da240f6d1772069cf63e89b5e5b1219297a4b18c992f6905c8787ba933490e813611acf9cccaf698b827e3ce43c74eafaea3ed48d0ee669702d2889b508926d0abafdc6a2d97f3859135d2af5c254ca78d588f3e154d7b135723933ca56859a3a1cff796af1b602961e86eaf5d74b26283faa3d7f53c7dc4c8d58839be1d8d4c32484b2e9d7244d3fb6ca4e0ab994a0f135ee22a2f133ee5a82c6c738bae5d086b8e2a87126ba4ec04a282ea2d29e3fa7dce5507bce484a3088c62e15d306a861b524735dbc46474900f99012628b252a9610008d75ec38b1f3cd6cfdfbe58840fd742c71348025cc60228bdaff2c267050bb89257a7af2807ed38338fcdc5dedaa1be38aaf733277d09d3fc6c8cc1005e1eecd0c5ab8bbcb3f5727465ae3b39138dd665f7275764eec1afe372184d063dd8fd09b379e686321b76b623134833bafd5362886b679b587d139b16ea660a8942d775539eb0c91000000009314002028100c8644229160402a9bc63d14800c84a04e724a9789d324878118a60c32c600020c008011119919691b0062b467c1d8c176e0c0bc10977dfdce85072c2818374e59c6aba93ceaab7b90783baef5cb91f06b106502742286c9d34afdf449095fa78f7d3d0d1de19d5f5bfc2dd7217630757d7032d93076ace2d2468e601855e624b97e1bb9ccdcf78108c5b33d312d8b20946783bcdb71aa59ccfa589f9fe8d9262a2874eefb2e7874cd53b73f6d756fafe25274d2bf1ca8a58a4a7bd553fa34c85dd9638d060ca9fba0779a1503c971f4fc8b9292f31f3db78e49e7d9d33020d010940a8e026388b86d7c9ebc11964409be6d8cedac64b4ede159a1df729a61130b4cb8bb8a5610a2d029b75ffd8a9acfe56c77f643979909030d1e9a2a6fda9b509d7593aa7c7d9e474f6c109b5f965ae7071971fa6b6c4a899465542c93c39517f39bece1233ff9f0a43aa9cd1d9ba5c227f51e20b421785cbadffdc6aeb039d752f9c1d70020aeee8cac0b5486b8e4302495d8822a03e6f0b4cb41d4c132e02abe0336bf79c2d752471194a6a4b4d7aaf534dcd3cbc7880218c4bbc28d4d3d916cc2d7ca7bea2a14ed34560f2a879962954648b6a2f3340c5dad68192c0ac5c3676aae7218d6e1fac518e766b4e08922b7e6e6f3f03cb47202012909d1a24418cd4f2e1b147cb4741d9bd40c754a1bf26ed609e179bff64b7f4468ce101f5c00ef7afbc17dbf3dac5be3d30efc9733ce6c32e1e0167e6b9d30334271bda6a967a1f9f2990773d755081eebd2b133773970944e45bbac6ec2746394763d299d7409c6c37ac72de92973b07337971da9dec42084c0dd777240f8945bdfbdac832cb87e6322ba3dda81decdb5cade33d2665191c7804abda41669d6841ea9c269cdd18c9bb0252bafd697c64dbd4ee25d1337cf511029435a489a6c54d931ccd4093e8bc235c6b79038a14178e49371bd7a2246403e5b855626a906acaa61944350064e01e33f2399f5db355514440a75ec1177a562517320f5adfcdf07538032a4e951560185e894a313f951e387944fc65eb3f01b934a4030ceb121368458e3c4aa88c30d0fe4f6dc18261701aa12627d0a6831937513f4918d2eb75d8210f666ef80521d3abd06fbfda191d2dfce73f4e05f39f080f83d099e7340dc8a13c46e8eb414dc1ca2b3d20dde62390824e72b60334da05a7fa7ff4afe5230a62823ec87e599e196560a1beece0a0877ef313f2c2a9b45fa739e4fb84313c609ef188a58ddb1918e3a59730de701dd2581c5796ce1ead4846aaa71fad39cdbd93c62e7d12d33a4727c52c03b795ea91fd07dd2006d789248b9f1e16dfc3d322ec05050683e82d85e77f3cb43a9e5b17fdebb66486394e4b289c5876c6b010a683901b620fbd3f0e2273b294058cfe24f5200c9d6cb61dc99974f32538f7746cb38918b1bab32c951ef28e3b785dc731e860f84e0fef4ae455479fbdc8b23a0673c506f80ceb46382304a9d4061d8e7cd025223569bb443f5e3e5f1feb7f9dd7d09894cba3ec3da13ead23f090d58946c97ca49aa6ce6e354e34b0ead41a74bccb88c89081bdd5f145d0fd00ada2087c40613fc08b0e30562a7f2a57db8c674a98d81427feaf505a14dbfa3844bafd244a2c53d34653f26faa960d882a88a45fb1d2dc6e1181083b70cea7d4f9e183019b5aedce7a62886d1616aed7e2b0a0484bb76f85aa9a96c3e1cd6bba6a2027ca7d6659d54661fc5a668ba701049878a21246b1bd4d237ceba0100b79c7dabd1964ae257ef41103267537ce3021f6a00e4010ae1fa1e001fae1f6ee07991e942876b6c856d267b2fd11c55ab4d650a06c91052d112bbfbb415ef83db74146351039cbc77a3a32f93657e3d5b4411412c25e99c30b3113844178ef97c97444dabfbbda8eb810419e2457e418bdf0922c00cffcd2cd414b9e3e583a558f7d6df01ae7ca69d5d87545bb4334eef4f35478633d71aa63c7ff2b001043c637e8a114d566ec6f1f1889608460981628b06197146ae7b3bb993fd06c45e28ac26e016689eeb9595c307c5f2e873757261fee762ffad7e6ce140e6c9b30b10c29c45eec3b42d6ebd8b8b58ac062a795b8c2b155d971c64aa0ea83e04e802a0b0601a2cc9dacf3522f5351faf35f06a88b6ca44172f995f526c5a966c64b13b89044227e9720c2f2950541ecb9a5e3c78039b20d061a8c36b40c93cb49229b14816c662f42830d3dece33408d32405c9d314f0c208bff62820efe117fc317e78bd2abea85b6df7b06ce916de2a600fb535605311df4ca2515a2e1281ed93b20970c418a9be692564624d0f0ca1a663cf5eb7f88ffc597ffed7092cb8df2ed87cc63e6980181c60a19a2f547e9d17bc5ead18ed73a5fa6543eeab8b3a8c08fc88ae98fee96494e6c2cfd7e7374215c03c195b768701c646363780dcae03950582a29f44f87385883a5536d09983078498d20eab049b4792c42049c6e327efe804f580f56c48d0bd575a309e707bf5b3063cdc8a65228478ec9e5fdd2e4b0f2cf0006023da169a6c6c0607c3a6d966e76f8c667cde4f122b4f90a25a570bd6c356bfe51a311b866e4e13476186f60e78806e122baca243cd11983bfda615b2ff83bf82a54ec1312c5fbd469cd08dba944d64603e341190480483faa1853a4d2be6eb0b559c0c28e00787288b975dc458dbb720a7f8c4222d09b6ce429146673b19d2139a61becbd373dee2e571e7060b2e757ae0fee71714781d86e812aec6e193f40f82ac0bc65bc0111aaffdd6afc12f48bd2fe9394ca379186d6bcbaf6b32846cb5c89ea25217c45eada41730978b1c1438dc36f0cd676f6e11504ec6222aa7d64a179cf0c2f6794404d0da9980edab0c3d07279fae54fe6a5ec440a34041b6f7f0582d3ed1ccd62158e78087ef5b8df585bf53d9d40410cafac5f6e7d3e472a33b77592f22d90a63b5d24f959398a12feceae063f98089671aeb4ea4bb74540512de8b11db998a4c7c793cc78b7ae525584bc6ecd441abce8a7a5189ae10c2756434e302b87640924684dcf2f89cfd9b34555c81e98f00414624e8bf66f4c724bc10ffde05bca298da971a9846edf34dbeaf48ffe7b0133f904369061bb52925269192b17eb9e4f9381449d23a363203d30bbd9796c0d52abebc2baaaeb959565630b3cc6490a57672c63aa714b1be89ffaa51046c93baa78bb98eb4e12f5e8addaa6cd77b79a8a55d4b439ee29abd84e49f9a9e2d79ee65cb02610cfc7eb8e27d85847f3793971f40cb5ae8cfa551920f7f1a2ee9785960453a9bf748ef632aab3d0bd029211cc1cfcbf93dfa9b680aeb51b2470e5ece8f7ac534fd393f78cd625d58bd05aac6f1f6931ab262fb89e97a3f5ac9e948bacd5a0a9f4d915dc58adea4259c361a4536692bc90fc7afeb06cfc3009d0c69bc175cbcb791230fc81bf5d0eb17c8d9bdc8965b26ec961bd6a004e7536da41b764e97c8b8b79f5d9e01502ff6b8ce474c3794341376b862d9f3fa742577a2a91d2de6bec2c86cc37fdee54a97fa3d219fe22b600ea67953a6b8b43187d08a3a48bfe191c6b6f9888a5a6cee621f70bfbb58097f11488eff3da8678abfe76f12ab8a22581ada0dd08825981558c6050a1a9645764cc8fa41db50b5dc0778e425899b0c32f7c089dc9fa79454b351168ca05cbb20b41cba3196793051da81e4aa610b9001b0a309fc9532af4ddaf4e38fdfebf75e1e3a80187940e985a29efae2fe2f26ef98470a5dd148b6372037dc461f6f2763b81a61f95b80f5018efc7bd0828fa1103d0bbec47aa6feb0ddbd28162d2c1c14d1ad0eafed20e1ad7a9e7a4794637ca8791f441bdb32127b2811b5bb197818aa6e0e447c20e111269044d3d345ff64d5ffb7600de1a7a685cdecd59ba8e38f8539292637d592024a0662c0c854751820ca5c304057f7bfa559269e40c4d559cdb9865a572af89b81589c74fe7ea0b011f380d4c02e3ca250522d4e824d9a2a1b3adde3d1667dbd51748b9cfd977c4d1a1170701bd548084348d9bd729301e7c04d54a149b122afb2ade022ca5a00910e7dc61aa4a5013204bb71802f7122085a8858d4266b364276ea11cf708e44e7e9ba91bad52797048e28a84cc10ed2d4642815c92795ac68839782a6204cdf396e4cebd73bb6ca34bf1705c324b25a4486f8b63a73a751e3680daf294b66c02f7e1a717edfec041c9fa388c0c8a44c2e52d6c2915840ca8160829685231a1e99e9ba60c903d06c2acc4d98d607434bd889d10dc9948d29dfe0238798b5641189c4141dbeea4b187ab4e5687825989e18b56773c13b5ccd0e20ec795ee6e0ce2ed2738538ecb781418dac68d8138a7f585c53590251a5739ced38147b2344f977499a93a9d9af82eb6930f9876ec137ef34bebea5eb7f012d9390ad357a96cb7c8b7953d56d0b39c64db5224b5591e53b2f3a16031710ab01a211577396266c1f303c0b02d6d17d7e99e365348fcf6793963df157fb2ff2f9fc5c5390a5d95fd10687b4375eb42af5417479aed4650d54514cd3441551767f83aabe40b7c03acb9b31029af3d3403dd5f68754673f2d9ac10ced404a07bef7ad681c2b6d3f68c04bc7ae275e0287731e7fb2bf2b642a5d1f2b4529009025b05eb5ecd112d83bf9a7b90005aa1ca48d68e4f60fe3b96298eb87883b659ee678c3f8b056c41d20a9c401f3a8d3b1bafe74d7b610bae4e2935ccd14f483921bfa83a399d64bc328fe612478790d14bd88279551371db54d8b10cb97e82a91be4242a4dd3ee3ac118327cc0b34435a6f6bd253b4749b0523aa85f5539b62a4c672f0ac8f9227a53475c40e0d2147c980a3d976aa89130c3425ef035e42ed08348681b7821957521e3d660b827b6fc187880a51af070be205889ad54ceced012f825a710da2a61b027f2a717a510ba8f42d478d208f9c0e113c2c75b90c25cedcdd2fe88dfcf7a22b4d177479485ed99430f028ca50af058cfb4f389c6abfcceda4429b4b6c16d89e8c52cacd0b90670e78983a3fcbbe892f20188c55734a10616cfa3e4a1021947f4690ae1103f4140b8d8a67dad67ee92cc223d8e4d6a1766be308e4f1cc87736275d8fd93c5dbfcce2b9e7b356915deac738e898808f82ba049706ee9a7079efac2340a08e9796d98f90916aee98a46b145aaef81aa5b267e153093d060e3f4942d9af466f9071bc281b47543d71b26f3549e8025d9e3451f1f1fe7290af7956290284c017b23abf669a023b5e4948cd11ddc9f18f12e69f7955a5fbd59178248a889277d44e85aa195edf7fe06841905d41bc2b734f3a72bd490ffc55b8ac07de387f3046f4141c54482e2329ed86c10ebcbad02c98c7a6596a53b918d694e71f7f420e8a335352690c2bd1033618b4845e6a04b11cb8d8b00e74340f3970653c074066def933633d60c422e512f400132bb4c8d8839e10705f89ae6b77e7a93ef7cadf0ed0d934030164d927b2e48bd3e7f29a1389418590a6aa0af880ba6f448260fa90ba98eea582c03c1d9ee520b88167848cc00eafee072d390b5d5f46d04c3e36476120cd1ec12868e6c481d3b5aaec162c8442e8c14981e6f4188403d5c4978257f30d02baf1d5dfe238fec8c451d60c43f72d98096e919d7415df90a44abc28eba7752d6baa8056ac781627d4171b8b79743695cc1de56931d38d681a5286d2f3869570e9c9fa3f92473a6eb90c42540deb6009815e48aa5e6b6034d95309c8aece58bd98f488951c091566ce2a9e1de203199750c3b75c49b97e8618dfdf700e1f06678b8db29f78a0f88b109c9cd93ba59935558e02c9c2ca2c0285bf2b138da03d7710ac4386df41043a3613d9386c0ad44e6d5ae2c898b4111040efd4d69e027b1fd1486896464fa0887a99a3b281c200a4e76f424f504338e4b0e8e8ea4fa8a174eb4d88e32d194debdcaaf787a9bf55c3e424eb3a990487c857a676349317a4aeca68454c49340f00da2658b8ff6fa994257f978a69d41c20da8efe040dad2d2accd9e208c802cd9df63d4bba2704a6d66bb80141dc9a99f5ebc3091123aa84a5ec59f2aebf8cede133522779838e92da11acf026c82ef7d993f4b0098084e47baaa485a4c71129c3942cff688f1f96fb2657ae2a0ccd1632c76b1f4cc20eecb421d293a8a4a4c0a9423fe748ab251447421d144b27a894db5efc2a328f7b116ea4a6be31ba342b27db9b49aede3eae691bef9f94b56f6a17f899c81c40f4aca47c1d8851350de9a7d337d9dbe8c6e6bfde8f0955c914028e9333a81170f3b16bb2181877a9677793ef86057276a3654c29a05cea9cc444c204c66115aac79950089b487c9354c7f4500736828442514cb20b881a805676e75a6bd6a61f0a1ec62bf5e78b2235805acc07cbc8ded5222c2932fd147927baf2b99947c3ba944ef4b046602636b1e690eb21b2dd8f980a4984935cf845b77d00ec0f1cd23c8b3c3e933a001b27c62388103f2c15d378900d34d9e1b533c4141df0e511fac99587d2999dd946af4db6b4e9255d4ada140fb782544816f9516d92bfa9a86ad3c5c77f28b9555f5d43d6ea777ccfc6f8b2073df0e036aa8c165c5ca26d3ad91d4154671aa906054c58b91f05564f3a84039fe809d1b3aa8cb13e25cd94735069d0b024b40e1a008b4a7b267bf45933512d86c735e7fcbe9c58b88f6d8155cac61b886738d4af0a0ad66d8f556c04f05e302b196abe790d50154eaf0385a5ad3552adad278f5e22d7707fe66f2c24e94244251ba8493c1007e67cc5fd34c4e78d32916609f9208d188a66e845e2141298a6bf4a163beca0c2983fe412667aee285b98e2b36af2f9ddee768607f66672644c3fef6a8eea2cbb973e259deb84c381898d9eba79e75ebaf424151bf67b712deb9c0da2bc5a745cd8ed9f3179870c5fe9957ec9d183f84cd1ee73ca3ec185c6e1aa0ec8aa47c3c52484ca6296ab0ce62a806155004b52124d0f1bff932934e9384bb1d3f0803e1edf00ef796652b5a36b664d9396a98dd0db65736f6cb17b5df5d7436745ac140210f37ac35264cf066d9ad96c8b4917c3a7e5445a760b7d5efff64e0b9fdfb96b68629718f9f5e6e8c26d7227f3a191e0a04e6cb8936096c80987929dfef831a21d2168c7acbef19b4ac794b92e2dc346a38b9763b2cf7d4f9c1e1f3474736bdea58b5ac44c4925e41939b6e9eaf3433c76ec21322e6f9ae8247a2204f49b30f1c644191c3481806dd373bce4bb80689393a241c8f22f50d4fd13b71ac7bd6ace5e8700e87f80f81ce67ba0e59cd1ac6b5b48b2a19dfaa4decd6ecca8ade97d072db7e32aaca685d8a485a6d84cdff77ef66d92c5a2c2c4ec2491e47c7f26663c0c4792ce103c3083312d95ad002a8f09c136d6d30010a00e410a85293eaf7037676cb718bcf441c87264e823b254a69ca70e6c8c7045fbd7e677a3b79fc67b3f30bf9cea12deaba3c230058de2e037fa1cf6af9480d34236515f47bfefb896a59cf2af4b0ffb8c55f4868e9c57aef812a1a51816e2d439a1923d0a19dbd530d48935fe707c1dc40b18026159fa573c7a3a07ab2b1864d4f003bbc15f63f6a9d620355a0aec407104d7809681f201477cd30dd7611c15131da06c243ddf08a7266d1c1cb505bfb5290fa5e456c230047608b224f22f3f505d73ef2b9fd29bff785bce08418cba3c7e4e3484108ac495cb605cfba53ab7923aea41cafb57344da7ee264ec8ab71bb7cb5b53be57fb803513f24f34c501962e9fedd563d734f00b7cee7106a48b36bebc6113c94b6b117e74befd67becbace8a03e04eab20e544dd7617f9c3e88505033b0088447b05200730ed5f8a8db83581d014b1f5303597c8a8a5a6a29878ac70abf13356449559b6e9eeabda2f4a3dc163622604b73a720fe624874359824d343a06abd69ce83e2e86b40afd406fa083ac08e6e8febd7a040af5deb522ca9d70f1e473f017609fa300218bd99336f8f1446184314eacb266f9402f8e5f202e902f0e63cf096ae462c99e22b1f44687a4c8494a78a1193bb125f16b748d09a129632c384ebdb1df37470829f9f4d701d983c9c44b7d41cc445eef8b34942b3383c4860e92e61abaaf0d6310ad613c1d1b1d1406cb89540e23073ea8efa0c8e873f7de41e0c4d4fea52f0be793a4ae0b6bcf6be3be59f23ea10ab6619da756b4c3a42c88fb1196ebf00489fb136216f82d47ab36844c087582118e5c4b080be2e9f44f9da742cc5a1433c5535bcb9d89a1ef990ba50045757fcc1b67850e2f40f93988cc6ae27026d249c74233117d040399a370688d5e63744edfd5e55eb4f8625d7ba8004a067669db444d1d2620cb0b53e5e4f0c86ace37a85a773c5f102f5dcf87fc373b649271c94cb5114de6b2c30301cbecdfdeb8ff5f1d1e7527404c45063649e2e28f6a0ddc6599e11d5e2da2e517f3ca8988886857e6df9713dad73f55aa4ec752add81254d7d8b51dd62ffbeada145bc1647c8aa8e3c541a229eff2915e8ef848cb4ac0ad1550a43647366d522ab16c51e1bf951a27821a5129a8a08cae3858281e2f3e9ebdd8fb7378517a03e62e59b9dcdf90e2a0e54030bacbb737c74dad25e0d5938a446603566ab3b6e9a66b16ca48c053472571fb71364201de4ea5d47277257837c0f18e04d1c921f1e60183accc2db348f0c9e8ab414955bdfc61a2cb1893bb0613be1cc1b09d4c7aa184639d4b23174a8292973b0d5167acf887e3b319eb651ae137ff344b8cae04ca836a7c88891a5c1a8eb2754c32df939043c76a7c88ecacee879e5c2b7815e8f34075cd10c43eb1c721bfea343f820188ad4c3e8ca504527403e99df737a7a04486f50a0811dccf8c9fa376eb5ce268076cc65112151d700ec4fedd31ff9d421228cf4de68c41b11e78522999b19f3fa2dac35519ebfe6ad8984c691775a534a5a3c664c95975c628b8eb3ddf6ad1bbd2044f4620deb7c1e8f4725ddfc1f94495e38d6e1c2e9dd07c871bab6c1530f99b5c3119a87341a391ad3bd2d7ce3b1b657e9e26b2bb30e0721adff9518f5aa8065b3766b9d20ad4ba2610db9cd6b3182905f410cb2afe39ab1d6170fa5d20b031af9ab1da00640aa65609b12485c5057f88c8fff41da393630f6591174d616c9f1f78b57ef9d61d7b305e7ed0158f8b25fc46821a63b08b5400e4c9f673afd058a0cfb6857f10cb19bff15c6a303eb3117de5cd0ec2b961f4ee950e512005f4aba4bf8d7cb61a07fc9ecb850aa98aa7a443e258fa8902443d0eeca30255f89ce9298f51bc4b20ce4a833d3ae7f30d01330804ff3d2fc8ba338e89f8168a4bac54d9d90286c88bce8b16874444674da2c41c615ae660f8520ab58b32860d89d1ce0b1859081fc842602ec8dc1cf9605e31c3531d7230169a1cd7541f5d01c3e5086840b47c494570eaa53d64ebfd55ba8dcc5c56199b1499f6352747fbdfac7122cb345aead63944a33d8cb8b783f252acd8db05d66930f4e81979c71e1c0c7e72af72c7933c3dc82a8d4144783bf20e99eb64f2042ba3de7e7763ada15880018a7cc11999eb8e3f9458a5384603500a149da56a4ff34ac09a3072f33e00971eb8a589df76079fcbaeda1f55276bd6a1e1c5bb8c20ffdd3c9f993f5a6d9a9c0919a9c55a2399305ecf02a22d76925873ee70233d29b00f31c5b75751624606c26ba3c310be1bfe8a1021fcd9ca3b3a31b4e5c78c3e156d4b5666a73b81e3866518d24b83ba2d1ee3f62f1c63998fdbf0f6b88371fba2fb94663f979056b996e04c73f61475338f50fcae618cecaf5104933eee5c36e97cf848422bd22300120312c19952e40f8cd74b8669dbeba60c14c4ce454a6a48c87d5300f834b075df384c871e1b32e01d3c043b282c63d72f5a5a6409f55f2ff2966fa97220e969c8435b4d0a7628087603d4967baf1a5cbb150d21109bd4823036fc641f6ae0f4a2f950b833376407647d9bab24dc00ded8a9bd232320ead91ca5886b721d56cc024217749de97e022b7505faa9a2e39dfa15b4a223d8cf3a3a43e87e28e13c1fd2c726c41a71ab89ab7c063d3ed24ece3249a5a9083e1e39c00d0ae196dbe0e6c6e1cd48329e2db54072363ba957cb1fb858c52d5e09f735431e5f3967faac97f8637679044f88b3cba6be8a1cfe570024b7155b0bfcdaa97eba04086808e2b92ef9fb1a07012d49dfd9491b318b7d6150050ad3e229e113d6a5d5c7e758193119e7b884e46e51697bf3bd22c0554e3a1e96fe296aa1a827e0ffdf6abac6918878090a90768858754b11568ee28ad93e9675857511e4f20b767810631026a496053f9d1f8ea8ecb040102aaa29750c2bbc1930eaef110119e8d3d9e9471bfacebf4e1fbf313858a2f76cbff26f33e041319b915cd0c3c341d32444def8c7fcd48b5032359c4f91a61011fc9cd54bf933415a87241af313f740d32986a698b8bb765658b4f7828e81905e0e3bbc529c61379afea2a912bf5f8b06e654491377bb0f3bbe16465a3f1ecb0d487ffe2007a1e0bb264196d6088b56edb94977a91a7632351c093e5a42f51032a455584d0bc7727f261bfec364a8d800b299830a20f26782d98bb52009a1b316dc8a38995eca0ff76c32277061ca0cb27c36ef1d777918db126e4f680a419abc4bf50b7a8f9fd6079b791118f3ef17dce5057ca30f40ded69f61f1d646306c13cfa62709b27790a36d5e6fb3eb5f26789618f62dd05022caeefe52f7ea6481857b5b9acc15692c3ab94f8fd5257bed90f5257a8821e349cb4941bd6cd12981beef9d40004db57beab7337aac1183947f10047d61a05845f9b4d76e7347e233d59dd7476a294aeb539c4293f59e116b2f71f33489915f8ad6ccb78aec18061e5434503116584f82a9a6876a41d0790ac637552a5a2cb3c61ca9bf1f96c82aeee06e21ac49e851da7803852b160120e4e46e969b6701e8056c5998017bac4ea15082bc39a0f10e10b4bbbbbd951d27e339525858a52a81a51a668bc394bf8d9f68691a288cec66e24c08fcb4c5cfc090ec04f9046d8c52bc7df9f3ef9028a2ac2aa828c76d8c53fc7252e784d01df4038542ac1ef435d4e350cbe2dfe4a3eed318d73811c3d0b2091a341a36bfc63738fa389b2f5837604e7212de91ae354f2546967002c8407b88e14d01d44f1e147e52b8f06cadfe42e9b50bd89704124eb8131405278cd48c6f5454a091c18ea01de8770b853ca6c1b958dcba7b078a4df8669f90313bca01936012cc7bd63e5874001f7c6c432cb80a272dd1019f3279df6a3915f27bb64e74e0238b130a2543b95f9a2281a8238463efb2f5b3879e8f2c29a4e55e290c4b4564f59b8b966a23e72811888540099cde668f5b959a9e4c9e2014908d1d3e00b551681194352b98cafbb0c5c57f7bb9f1f03654087a04f8e04f4671b3c3aa1ea56c9f58acf46d9d77cf864c3de01cd8f6aa121774fd199e4fac95843ef61af513b9e33eef073c7c081bb16e297d79bda1a03a4b7906b4ae6ff07f733ce83b485136c37369d5fd2b71cbc118b76ae81b70f81c7f003260313a32aa6b94d9b67176f1ce17459c1d04372fba1550ab5d234543daa4788eae2d08018f0e67f4158dd94a8e93af6422c252a431a8e48c661bb84e744addf725a40403c7cf4b304c8ad52d298f66fadacebb57e71d2b63d926bc384bf7b95eb535ff820493071a032cab7c80c450026f9a5d4e90cfaecefb6a20dd26e945f3b5b5f8d30a0699154aa0adb698598e4d3b47b4fab495494c741ba27c388337961e7469a84f9fcc6a4f4eba53aa1d797050f6edae52eab62a9965f2e1f2a86096810c92d4df4e492e783db257440fc189773273631fa0b6a3f376724eaf7306b3a647e02ccb29d614c89d9881e1309fb5aa97a23f5759725d064dec0b49596e1fe16a41cc3477a4d4fd678375c93ac2cb01dd72eb1c0fc9c423f0fe32b1e211414cbfccd1f18ba057c817e0e00324e05608b6c93732d922e5b64ea4fbdddabcddd82aed72fddfad4ab80a75540f474eb889f4046d47021b498fffead0a6565f176b1830a2eac1a2cfe72e11336c82d24594ca7425e9db2a500063230132f0fe220bed0644062b22a00b5b56a1a92105e9c839d2c7f33fbb7754ea1e286374e64fe71d82c69561c2d84d4560feb2cafecae2ccff0c3bd3805878b13e529d04b5a06652f3446bf237bf7cf6f7859a06c9acee61908778f25ca3d633e23bb1163c977782c8ebdb3c19808b66695c847e6d8741207a5c78b8506bc53cec6df93219dce5e0d125a1183f4afb13c5709d3129eed4c94b0fa27b6f336aa459e0dbd3839501df0dfaca7d2b1b9ea84bf68ff69af1e9972ced0e2878a945d18b820907826b8fd0379ea7353890050e6d24f2a490450558ac4fdc6a65b75c8b4c054fc6dcb2402e0804e658cc53cd6a0a4c4041f05a8613c10b193e321efe0925f98586641ad637a005a75b77ad11858692de97472f13d2bbe803fa62ef8fc2175e54210bacb2ffb238fa057de7933b84031953425fe16dccd896f71ce1ec6d930b0398389b65e188e8d17c9382885bc9e1db6c5ec48cbce827dce9927e215bb3a9b10eeb9c8754570b4f3cf1de768b088e195edcddd36fd3746b621a1a876b7dd5acc3a1c98b373fa2171f7118e67c95188766f6bcc679a2f17e598f1b0570b773a221b9151ec4b0763e0faeba08a2c3af2e8d01b529e59ac252a1a90df2edde1178dd1f06d57cd172db3bfa03958aaec0350394c9e2e9ee78987ee4142e97010a674fc3fc297bafe6818adf633176cd31eddf2fb0d204cfddc88102fa72fd2f84d3836faafe9fe7b956956b64d91693f74853929b628b257d4b83690100bf652e859bcb0df9f41bf42b9394a6c4a0892ddec9503510dd59d86041ebc1e83fa68a527fb05124d9942017ec6fbd8776b2bb45324b200bc9877ff473c330c5114e031fbc66e4c20a2cf5092d8c327ef669e1b001710536e99e9189a6df910f3f5ccae48b2eaa11fb474bbf65dfff8dc81c028e062c51c1666269b8ccc1ddb0adf838e1029709bfe4acc78474e998cf007e0d85d08ed470025bb77d00b029f5c3c7b20d48618170ccea1abad0ed4c8b3d7cf7548081164df119cd34767e9b59dc682a92944d32551df1c629e3e70220e02d882873bf8b91cd087848b0cd797f13d17165b5ef3aa604c8052076836e4408fab1bb3441f1466cfa20dc5e6f055073af249b1d77ac162420f6d757d2caec0a3ad230724af3ade3672ac251ad4f07a4d1c6f1f2c81749637aac7e42ad8cc59d628331ee6ab2f3d89766f3adb2263f7ff92a6b0fb41121c1592104ed56d91520b534da8b2f773d2afcb09ce552c58c9eb8742e758fd95d1ed443c7e07a54220a10d2535b95b1b6874711f5c04f05ecd9394f301001153fafd5647ffb20bc28497dc9c154761ce0c61a6d94725d936350f8085e171e13baea916e210396ff0925bb4bbfe051b867841e5e37be1533d0af381bf161b2a0ffc523b25f7605bf3da012b3b9fa265c24feafef3f4a14356a69bdfc2b5245222b080a9b92085f25d6e87563b7a476598fa3bdb94722027c680a43ac3d3afd7da05636489fbd2e166086c908db9c8c5962e6fd9685fc7e453a5755964566fb86f24265441c512c6c8ba48a5a6a5db519d9ea400e3237b93efa8d72c78d4aed8f0803262d75c404ace2cc6cc6b641104528d05350d7561a714522cac57b0bc5ff2caee0a9a829e2b1b36e48822b10c79252c8fa322b199ca593c6eb7c958bc0fdaa25a16107c4161d230b619d820407831a518c1aa5a3e622e6e9d30d05b98f470fe2da57ec568174fa1aaa2fc6db3e35cb87ae29f52505dbefbdd91eebcc09369b88a25c5ae381855cf3908766a8dbeff63daac7f574851644feaad03a4c2931f0f090934161a48a674e6377b5d67c32a47ad6fc1dc184961eeb223a8e18743c42035549cde5e5cfd255e439890f482c48a5365def402f42d213eedcdc7965e6a13ffb6dbf86faf2341046118121f9f753fa87dc235810a5444a5e00690e23960721f77cc47bd5bfd50b6acf3927c2008e53e0893aec1d55a93b2a2ee8a6f90b79d075508c49077ecba5e4c4a01e3c764776c48868279bd4ae0b6eb91ad089f523101373a52a67183a8ab19d1c5eb7834c472dfe7c4024cfddc692de0cccd4fcaedbc20476565974d947489535c5a862458bb07586fed8683c4a8d62a5d0f92c79ae30d17188851cbe281022ac706382222e899aff5fd24982a28380e50a145b020bd7a28958d60cdee146694b08e85c6fcc3ea5bb5544efdb50b736928f9bf1c4b42665df42ccd7860a3a5bf28d9af6600d135dcaf3e15866067e65b9abdcb2d070afac7d99653b2911c41c4cd16607b7fd824fe01ac1bfab793d74213e788056db1b2dc2f96013bd6e9817778ff6250b1bb3ac728b13ace8d5adeee2a05cef41614e2a2eabff52b0fc18ae0d2543491f35744aa6f8cd80c215d1748835ab977c6140dcdf2d947acd2ae9d004037b3762f5d256557245cdf2ba50e117860712a53597d527952910946e047c7528aa4aff451a7ea8ea5fc69bc52353894801a9b99c2ee541f4b43d220d20bd0d2fe9deab0566412980deb733b49d85e501dbb6bf2b47a28e3b29d9f23a0eb34d1590c6e6e56dad03fe94aeb97822c195b9b009a072a3fc7fc3a4da92f8586634858fa8036693e3f0cc98c23f7da9bbe7172490d4b64dff28c2471a1e184fbad02854b588d2f9524ad3b2e260fb7ff2aa5410c107dffa25eb3d84a23c4848dab13facd1f97106b9ff02b05347bb47ef0d5b2178a4d2a328d4d10ef2c308d6526c32c77e86ef4f0fec63d20680964b4b15aba46809a1ea32288720867976191484ec46861fda4e86f74f9a69f53b1253b6c48bd953f903553689fb46a2915e3d62e31968253fd90e3a9c538ef81f846585f186b4b806e8f7845017b21fb5bf9d5daaeff8c17ba58ca7925296aa1973903f2c3e35e59b6883428c365d8adef01f10d4f840f891e1c9672b64a4c290ed01b03c84fa487caa10c5171e27b45cfc9bf74b8cc02cec81214e3c281cb7f8eda5bb344081bbe4dfa4ddb58aaa64d13dae44693d3d0c928fa3d60332e6ac0d355cd9f4452d9f8e0ff8ac6cebdb53771e911f4849c955dfa96f4814542f4d82974d3ff5d6e3f7c050c260d1d3dd76072326e721b479d465052fa20f9b6fe54b78bf237c9569c1e4d99152ac4923adb9063423426b5534d7ff9c001573de93b8f1236ccf5af12fac43c1933fc8a339a0a593c85270a6825a4555c58b166cafca9cd4ecad4093abe8625ffd2c5e1b0da55edf4fcbbdc73ca0c3075ec2a06c0b37d04f1961ec846847235625c9087c8e26e738dd085154fca89f7bd43fd723303aacbc7124899037c0955d7d08355888a25cc94ad2fa24ed30c3cfb18637a86215a5a412f91a2f657262ac78b4b89cfb36950df4a5ecac815a00b47614ac200c6a154ee338bad6ce7cfbb54fb59590553d30c178d09960df0378edfe7256e0326073224c952d546f2c8fabd2bc870ddd3e08a8e575695eccffec78df2b31d1fc551f73693eb196bd2075387d4a3f40f5a579467b46fd401953f3e6badae5348f216ae155288fe3c2aa69cd6e58854ef7d4915e15cdd0f11c0a0869454a3495489da851403656107940095ae2d8231b79346b0f446f8cd530b0c0487b5dde2183684c13640a48b1cc72ad5139267066afe8a13166a549e3d80a14331f3c367076432fa60fb95b95cbb7897ba755abd0ddca32ca1492ca84be588bebdb39e50b9309e584ec88b4ee7e9e31fbd11706d43ffbcc2a0f5f3ef886bb586b955966417e6b2db686713c8ae8e4306675c1521124f196a2792f3ee9037b1b297a2f797e25bc930d776072df9ad6035f9171d73d025c25664a5ba716471ad8d10915212babe315d76272a2e7eb3a1764cd8423fdf8f509102980f7c2f4326a51d49aba42620e1c050d0ee6c43d316affa234477182697ae4a9a3198ebf337891c633d0c3f08f1b8b3bc4782bc3e9973a58015fea8f90f0edf162fff13dd74e161a0763a6009c93fbe6003ef70bee7c23ade2532139ddab554a9f0ca68dd75c8ee9815d00cb32d702c379bbdd0c0356ad7313e907234d33bafbbc9872740bdd4f9196bc47cd3d82e0767feec0fe0bc287a7cdcfd3ec411040a9ac1c6ec1f634404c8c827b154541a7ec35f566285d545d71d43a1bed85852b7e63f4375a30548608974c30f65e7665c03593f9ad8221753a01f5c2998f352c5c6cc917d3fea3a6556402c9654c2e45ca5a9c16128d8ccd18ee28758562eff26478496dfd70fbf335605231abdb3f682b00f966de706a25008cac58c48b6f912909ebcddc84d8dbaece8b28302ba93d555d22aae2639b4d7a30b03db2cfc75a027f113c76710ede8093aafdbc1b4079c8aca3b7723359847f0fed5e591224e328ed444dd22d0e3c92d0553e7fa8bb485e336d1933df75c35cde6b5731a8279e0c10f64eef2b8097b357cead93aed3d364f5f52208ae19bf498edfd0046daeefb4a68a57dbc3195df7020787d7913829133983f832bfc9c84ea1d7a54a902fced3450de7e0a7fd15ec3902ad3e2811bfda8bc2c8cb51c299c7440d45e7e0ef8fae1bd3165901099b1efe8fba64ded796a978839efb6d9d91ce64da95df090b8abb62f0fa4de6219ec779f675124772462873dee4a4d14f8682a15be8f6db946f27302eba37893aebaa2215824a142123f5d30d2b4db6dc05e3621ac83a038acf412103d1ce6e48829e2f3fa1d13e87dd700787f8306afded6ffcc4160121eaf2a2a101f311547522007629f2af65d9de42d5da835f3b535ff140a9e5dbb3b0ec1582e36c599ee91077582d264097f772216eed1576715e343abe66541077ddb982ff1637cf881030bc6dfb55673a0f40aa81d86c9a21c1e1269d0be92323062ef5fedc728d6b42d1345f9f91896523fef03ac5a9e3427495d91401336532f9219260e3974b42c43d3022b44718280e6ec76155a2af65e4a20ef09f0113315552d7e344f47db67114537a19239f464122a444f398bac416b728d4514e5c4553ad8ca34529efabb2d854260de774ff87b9b1702078f2b085c55577304a33d5bc0a929ef8ce2a0a874bd298b6f678851b999a97132ff1f68c4ad087f4225e21e8e06ade53e8bda9124b5def051cd018ae48de07ff0c11a6407f9d02bf2a4fea390b9128d0958a405d8a0f42bf7e3cfcead8a075b4c1e9f610e39ffa92fad32a2f4e3fb8b1dfe3528d9e46d8723951dc9d32fbdcaedcfb7df5f500fc44252961f84ac7397e3d9a791daa872daa62ca08281c7785de7496fc799ae40e095dd0804091759a16b5244404f6b0ba73e5e39f0079b4d0f0c4cacd0e8dc5afac48c8ec63230607018473fd4928fcbfb5672906bc9f231f9ce2cf85a5a3ea82b0ceeb5029945b508a545cbe48a598f638334895179331dda862ec592ad63d3487a194560396d59212c408b0d5eaf190e94c5bb526e2c51f575d4c3d297a0ff5f0121093154e48bb138e9f9b5c4005de47836b2151c1ea9f89470223e55685f6e9499eb39570179648a3b408603b71706655b91aae2751dd678877209ca9d8a5a4f206a30c81d7df1d0bbe08bcf2a8a15c574c391ff924e2fc496ac04d6cd52e1d760d8599d1994192f7004b7e81ac75ba5c1d5ff9a855d7daf546f468cbfe71635432b519d4639476034860cdb8411aabb9c6e5ba781bc66ecd184da7996ff315bb656408bb73940b78d26996931bd65aa721ca10e4d46312df55711e3836ba3f4b146c6bc7be29316938d62de6bc34f7c975f4381ec8795ce84e98e6c44dccbdde322b3ba6b3eb80de3a9df0a3907c647078938e61663ad87eb921aa224eefa49ce7ff3f64ea0b0412abee5977ce40c5a0b1161ed13da72199092755b250a8c299f52a9ee4a5c5a5480ccbe9124fb0085ee1d30393746c65236c84909dfc4b849f943a34ea8a6109250af28d2f1ddf9af82fba2edb084e5dada7b91493ee54d2edd5ae902c15c4793c20d5e42a8b37114848c6af591837f7109e40cac8137770088d678cb1d2d133e70b46c725cbd032bbbcf4ca1720081018c0cc664fd527e4f154f5fc714346c1310cb212e4b7043c0fa78934793c3a8107294fe34b1b8d222faac683f414dd05610a0d1e775fef6a7481fe631d14ba2f0dd543e9cd9b39eb217912f5201ad422c85a188655c4211505d8a6b74b1a46fc5f58e801afdb9be069847cb47a1a55b488738014629791e820856b80fc17bb78f8fab95dd65003d934d46a88959090e2648851677aa08a5dec82d230ceb629ac09fb485e02ba3fc5a82c11aafff8aed839d5bf645b511395454085e21852ba3c5d805a3f766ec0120a9e072263f4242b8dafa46e4c91467f293ce675d18e4c84a562f1818de90def397592f3976e91c0676a1a78d6c24a9c951be852d59c886554be8106eef1d64ed54abef59d47eb6c473d93308ff19e9ec94d1879e0ce2daeae76251f8f96a80ecd83e8ca63b8357b15962f3113ed3fd2f4b3866b84f6d081d44c0c6e4c91327628ec500b5f21f21629c3a201860e708cc2fc2949db73e4a86ed4a1f4d439fc94f2c3cc70be271e80e223c9272121d6e2d015590e4d8efc8a9133cc44408f4e896160730265523286bd6237015ec0604d4ac19d6e4027674c0b071927d6284fe47f4cd64b01a6f0b8194bcd4061bdfdf7fecf392ec8c888f5c9896b2c768aad59786fdf11f16b1ce9ac0d7a890d0500900b4da885d795d158c031b26c37b99e0b46eb8b184cabdcdadc7344946b629276231f109afcc237ca24277724c7ffe00b4c29036848a3e6c9bc867e8327b74d8b568d8c3a2dbf4631d2d54f12fab8b221d7828d2b79847d06f679be463b879751d3b20827b8033b5ab7f823c4e6203c1eda305143842eb681f051b1fd99fc5ac6e1a03ebb7deee228dd750af1dca0c55c9a266cff7351cc6306f27d5c00cc827a88c7aac48f9fe63baf52a4afc26cf4e7ba9428e4087ad8cce72d541bc84ed069cef4bde07b336a055c540aa8cf79dc527215a38be324873b3d7563cdaa39e0c61ed03802206c4394934fc9949d8516a569d156070c15b7991aa43cd48f5ab03ba73073359e24703ac63fa04f7f709c8268c0655f58026b7fa839121704bb26298c24f250d3642536f3c4ae38b0ff0e83632f7a8852163acc9eca009f4818623e18efdf06c736f5542b58b7296eeb534aaa1963d735ecb0e7c9c62fc3ddea664a8919066065c3f45251744b62f715adc5a527e2dc89bb9aaa1b5218d0a03056f844ac03f7a949ef4ef5a3cc96270b6aa0a37ee2a17a786bf13c81bdf64f633ac37f8d88e4ebe55a4542496f9c2d61d9b7adf74c0416c3059fe01b61bd51daac8d79d02f162145b0f13aae23e57cc8f01869f46c993b42d497d8c8afba0d1fd2c5345e6472b4149562d00ee9ccfc1a8e34aa902c916537bcc51668ac782cc74d003db40ca319184a3d8868a80f06c7a8ceb1b4537526601af08363fcec9e29e925344d58996d9b99736c8de7baab57c12ca5e341a7490c21dc3807740f98187a911a21a6cfb7d3b730d6d007addebe46ae44fa8971c8c30528f61c0f5a061218366436cb946a4613c60652983800615804ae48d50131d98b38cc79f32c8900f63bf35b0bef62e062b4e164e4f291d33f75172d8f708ff3f39bce20f26fbe97bc40559788b77b55c82e275e47d76ed2637bb1f17c053320f0a98c2066588ddc944820186254e4efe9021622cf312815fdc7d31570ae751b3c27668defb7bed4eaa1a0c11060e32e015ab56968cc3ad4c965b0c12434bdc9c117045a4201931a167c691c139c1ab593b859d02e5a3964b730822e20cbf03c05dcfc1d8a1eaedc32d5c8bc2b708c0c392365c437d7a2f72d033d42f50a109ce976af8e9f8c6479191433fbbb43929587ec4d722b6c135cd42ebd30130fdd1d35e85c64ad9e2b012b4a9466083c650958f136cca8f083d9b299edbbd565795a4172f54c5d29996f0c6138a527e2ce2c1a60ead09b9bb2a7469ba44f8cfed50220b15f4ad7f766cb6b1e580dbda52caa5267d161bdb3c7329099072cee2a7743389067faadee61b97cf4833a9e85b36067350541cdbc51b1f271999f397ce9192d353c1956a0c54e4f4dc06670ad97851b7821fd7fc0e00efa2b997089018a9336613dbd2665722a552c4508b3aba01e4b18734a318f7c0d81e93b96f4f5ebd7f8c65c9ab48ff668ef38c76194131b8de15cbcbbb42ed1861713e5394b4074a6eb019dab4d9c995a820038a224491787e721cf74317b3e165654c800d9c5623c488f38f353593fa8f75cbb38e7496ec2606e9d1b597f8240b019012722b925326949b96cd44f15685d19d0e820db97b174184a0568845f0902b393eed04ab3e2f2b0679511132d40839789148bab4291f4d416f0812611ac527fe02487805ebdbf3cb392e4ce045dfb60f0da2a2d6bbcc1b6f376e4818edc918350d48717b76b921717f5eb8cd54b1daa1c9702aba08ddcdeb64ea52aec09cb3368c322c1ae123d802e84f7d8e4dad8000b6724759493248d494fa4eb5c541df9c60a9625dfca12e26db2ca688fa3a44962083a6d85b6bd1c7fff09c821597d224e282f611b272390ce1684228d732a6b0b3263be22e40ae3c9ba72e5285e4e327694c47ed38a3328704a401a5808366bf4b09c32e06a40f2f1b7bab73360f481d4cf3bfceec84931f7e39fda7613fe2b6475a5e6de04fef0e6bfc9557be8f9789d7759198350b19668ab12053666cc8f2afe245de947346c023f0bd5309e950e9e62556a0a634d0303a49ab1e20da695e1d954cb79f4c23745674379e54210a6e7f5b134c6a286d7a2fc1ad599a540b29f949454cc5235d6cb286f4ffdcf99e5a1091815be29077f1bfb5c1fec73e649e3bdacede4d87d953e0c9e2882360ee3077931e36d8316fdfb296e9f0f90f6572fd319ebaf092c3a8723f900511dd93d7f303ea59672caa9d5c7181fc04e0e0c87966737ab9e5e01ecda3cb7a17ce5fc009bd207d040b11f1f367ec0c6db029d3696f2e7b5c665f6bf85833459879a2664e8de0354edea8785c4230968ed58be737700b4e8bf889af6807dd5261fbe3a00148b180dbcc102ab105505a39528f2d71f36e3e432290b6144dcc6e95bde2346fe772ad37d0f88200af2c30b8a7e2900a1dd32ce96fcb755b4beaaf4e7f510eb80b3536daf52995c6ca5ae28c0041ad144acc81125c0ec988eb9f4d1de34f9198cb6fbf456862327a83dab89ff1e29cf0d94d93611c0d90e8c83b6638ce0e722635967c4f7855ea7d097f1513847f147747bf091191213d98363db3522409a934573ede496b202543821e488d10607bde671ccd664f04c65ecd41752295ccb5ab84562503afbd4fd39ca0c4472818454560fa1c38a582f6e0c5bc732e64084c09fa18f2e49ff216b1802bc6d55000f9de53064f5ac0ffef9b36ae01fb2ab4cd0965e81468bdeec59a3648ef70ee2282c555c7552effd061547f781c3652451275a012e6b09c367605e96ac43353923e4e43a37fbc20ffc10913bb414db5a186b4c244d7f589dba9b9fba50d0853ee76681fcdf4abbb3d44eb4a2bf4cdef2dfec7445678ebfec29a7bd058799854ac2816e6bede92995db59efc50f771f434b5f59c58d24dce9089be46c720715b2d6a9fe113edea9b0d3c4d6e6eab5f11806d237208cca822742a8d3f8cd30cc179b9170937d0c9331de3d7334672f628007a66e93d02618ec267cfd4fdf7aa00ba28b4c3fe88f99817e776dd35023f810c0e6e328eb2a622bc7abaf335312e86246f2abcc2c8f2f51883fb5d78d1695f2dfd120eeb6032387c92c0f866d1fb82c55936d5bd3824938c3f0691e76b1a57c2d1dc6be6ec34b4fe386cc236f394bd80be82c17dbc06c46679ab7b08b42ad49cdda3589be85f01e3003303fe26a8e6c11d95ee7568d53bbd419c7eff4b22c2bc15cced027dc66acb1807daddc6a0d9c21a1c6a419745ea7e100013a98a6b4d616b154b6ac260dae4180fd89fba91ca03ef6b7143f8c0f2f833716d9371a11b085283fada55deec68fa92e561d19f5f7ecdb7db713b91fe85bc37abfaa2774833963f265a45c6ae45f3e97592e7d30a199748972bb460e86af6f0636b78aa87d4bea4dbf07ad9520c71b23c9d5761def83807dc5a96b9721e41a7e518ffb2cc2bd584d70e87b66e26bd6ab0d39d799f4e939352998b508fd277dd471b5b54b93ef5f71731d97beb9616bc7689c88706467ac567384168879039e4b08262661feebeb881d8b3839c4153de278c3075a846b1fef674cb878c82b217a820aa221189054b09f8c6d2123b588ba93306338cb73519997965d9ae1efdd2838aa365139223526b909d81c093c75692ed26813f7c53fe6870fdb9a582edd8422a7fd3d490a656d3dbf80995fce65a69af190d83f39794b0b6b978a9f364348d6710f5b6b0130301b0f9188c11500b02a1bf64617c843a5258f9a0551c36a69e0b182018274596973a9a788e73b37a43acf767512e7831702dc963f9f800015a835e9139a1e17430b1c115d5c4cb3f89546b14c0f8d113ccb9e501e80ff3462106733e450c8505b8f0a47485967d707618e6d3e7e9ecbfdc8f1c724c992dfba69dba406e508b2aed8a1a64b24d9e3dd0ab9eb30340a970e6684b904f049f1a293e4cb7547f120523f02c4aae2d369a526b4a26f910110ec6f2ed1700fece8a9df3532a8a2d268537f0458153f44b012f1402d6a508570a0aeadb20ccf29d9b278c5361a0eb2555486eba54d93494a4262084a975dc09ce68e510b6d5e5e3bce129d074bc27e916cbb6dc676e4a67a83db9dc732b644e711249f426c9b6c2f5f59089f8c84bdb6526621825808f94960dfac036f1ae7c75ccf35b0269f6fb1d421bf6d1aa8732753bc0b7aacc438cf1575248cab634cb02e9c889467a940831016b04a732a03062dd964bfcad9fb680d65b5ec754692e9b356f12d6336dc75ec8eda9bfab5dbfdbb97f49ee97734a0a04c8a5f955f26f4fdaeac3816f18ae1e58969172cf9c3550c611e719514326db88902e063e80aee9855296bf37363bed4f910a22d1f29868bbf3412c054c05d653585ebbffd61cb485a732f8da4489b8f44c8de0a753d31662d29651e608d05e46ca024f2553b5179ea218b6e776d942061338a37d4a034d070b6aea91a6dbd25ec84a27a47f709796803cd0720f3b05268eee9cbf9667977675ab5d0f44a2dd316211ebae14d5c47cc27d68bd17627887a549a03669f680009e299bf42fa35f53cb367cb6d1135d2db646e2d87fd47f6f3b2d8030d5008c8f30f353fb2314422c86644fc96e78925933be7f9398cedcb83480392205de9791d1821ad85e090acd6366d63725484b3e9ec25c02206138a25da9aa84b5a2829cc505aece868b7095f958be68978d26b30f957990ea52dd55141abf20ef203c4b11844a05396a5a691ffe63cc1c7b7f355e67dc0b2a60ef0922b34d15420b04840c85e04d2887f089de92e9a66bfced476272fba26a524fe86fb4ca7d5e6e4b04ca44e0e58844b37a94891be4aaa334a7d222551fb72cacbc5afc91908e1b69999931550680f68a86704bc080a2dc200fde061cc38c7eeff9782b7ab2a8575ac9fe2978213f9adad3ed4ce4ad6ec0232b59e3f5e0dea8a8386b8e0666217b2e8464859eb0368fa5120bf768bcc7d617e4470e08a7c50549c351a9aa0e6fb7f0505b5637a1ded660e81cb982d80a45f4ce1ff76b6230082b26a8ccb2b276070353714bd8b8582fd5dffc4588ffca28d77680b7c519ae098aad75e80c1945a143bd9969bb62a2c5c8ac48396b23e43f918a51a24879357388ae4f436c1be7c018fe32079383a7ecfbdb06f015e872e9962a983e3e5e6da0294192ca5a179e70715891516b559b3b3b014e4d5a6d250fd1d3a8b830268b63a589c49c2ac30af23c96d138a3aa0b8f9944a3d851b65d8410591de3a9e23702a8e3a95890d3fa1e52c1b974eb23b7b2f76e20b449de536ce749f5f4395ea7b3011554c6eea1df52d23b806dce91ffdfd4f23e92f6a0cf19b6c0d260b3a2a11318c661e5de11c9c0fb02697fd2132fce439ef77a90f53421f3c2a96e7b41cf38b6675d083f9b79b3dd60d68630ff6085f8fdb211604653dd2cf2ec1a76820e9c49dd920c2a7a3a2ab5e94e4717bdb826c0b9d61ce44f37f355f0d3d5ee8461b114a1ee050d6897458a11161b3da05c804a14a8032e83e4c860f4f65714cbbdf02d30ec5686e095513278a75e031ba6a98eb80c92354618070f34c241fa705ce45c323abc8547ee6b805668306a3b97abb892595f85273ad75f8cb96b8986f8f917300ba4ff2a1a63bc129468c81e8a7f21c28990639d98db03def39738d11a5099f02eb9c90bb8b930e26ae90411306b3db9dd4dbbbc050554fbabd1b410e086223108c5b86086f0a52a5776299c9983bb1413d82230e801241aa48a958b9fecc590c14396cc5b58cd20b71825dabc0e7a812294f2b90462de7ee2d0a3b51fa29d84fd1a889da787df9eaefeeaeb550a4158eb1af6802f6c5d108c028835492e8681f110f697a7993f346cb492558c3313454928f4311f2aba7503059761c3123aa97c3f651a8f7c2d2ca1f9ab636006c7a58bd4bab38cc794c608832933f4c2f3987f558008484757db5810db63bb7f5c1cf9e9a42ed4669bef28729e31b28da2f8038d848da3d7d25da431361b87ae76b1fa1884f4fa6ff8bc0b62c2529880d15f37213710d5f6775c31ccae5dc9a3edbd7869240dcfd3cb95713641f8959c1c5857feb146353eef913acfdeb996ed2bf36c198d787a78619e5aa4807380affc9488c723a3c740d933461c2e96410eccedea90012d6a9508f126415dcbd4e81dd911af9f8ceb760cbd92e4161a4e2ca862c5252f5aefdf49a80f220a1340070a2c8fccab436f81f958cc12d841c19552e8457c03c3c3251c59cb326af642bda8409f470cf0dcb36fb1f20c00403a78c654964e2592ba50ff3bc2c21fa05ff9bbc668983e2f8d445fd5f200307c8a581604091a4f92c89c1aba2c5138c169abd377ccbf2fac3cfaa64725823332a5e0ea4d1bdfd3c85c84292a4a59807e960bfed850b11934c9aafa83dd9796d6c2e5814eda8427085f1d0f1621b76dddcb88a0e438c8c3859bcd0be6727a26b69328b1d597e963fa0fdf6b23d2d45266a7f4039d1b8c03d9706eefe41bda7116ef9865d8deaa0f562d338014c439517445dc19aefeda871e11c0302d722f2d5d71009fbb66c0cbf7837e334d256b1331a6c82cdf208d33f65f6592733ac5611c74a1f331c10b1f5a45e9dea258f580586541d4e716339ec6cc767de19a622d8704bcc0ae9bddbf5b26e0fcd64638936cbe32c81ad429e40e07f270c6a01de943cb4c41b9cd0d3b083cd151b9cb58aa2b63d902a0437a734941db831adb3e21fcafb5dd5d18d4b904da1c2bdf60e09efa2216b9f62dc3436d42d2164e09825a2418c78a38c2d9525a410fdd6ef10a6144c25e766d7f862734f6713e297267da8d75e0edc8c977e5d02f6deaacc3afba942d9bfa21bdb73dc8478ed01540403b73da84b724ecc0180e40174aee22ad75e04cc0555aee9d5e68156478800de7f3ca57908d18fb9712649c91e3c14199fc21b47a35d10eca118cbe7fb1f21301193df9851abe2322e94fab022cf9952933df4ccd27d66404042351ea475cb21d792b5424e7b3614949071fe7378bda0c21ef95185d7fbe031a14ada0fdfa5fb41dac2c98bed29adb41fdb1cf87f808fe1236e49c62a50e239ce6d443f889b4251a8b420998a8b2bf35554f87feb1f3e3e79bfdd92a7d97bb1b56c038369aae6c8cbba49add1604ca6b5fb49776e9cc9131f34d63bf057e9d5086bbe3680bdbe2530069e04bfbdb6e4143b229ddc34d0d19a62c7f127d92f819c05379d85685cf6f2c0229fc7f62e710d9e486f13fcc484253de3d4d43ab43bffd9c0fdbe4fc58aa399f8d03c484dbbd2ef13717456d7b6005442d4bb4b85d6734be6dd644ede41f4ef803ef36783f4b3919398a15422d2f1a6bf991f31bd2f6a87dcdaffa6fbd12723f85c2b2b3883b80e67f12201e6d3962e25041530bbef059ac40aa490729ad183b41feac3e00a754057e3a3b09b03fa6005ad4e25846e80206985e246515c8dddf5c0d5225b94200d5a0f8a74aaa6b98aab17ea881c0d75c405edf8ad9fec5b4da935feef4dccd382dba1a44fb309317ccaf83d663581c37fb610780e0da2a320eaa519fa214d71986d574a616ed2e4a149d49fb922fe9475f8a961ed13d083994d2bc0ca3e613d19c855fe44fb7dd75f3383975a0f5943e31e93691e6f06d3321384416494ad65be86fceb0fd929b66a2ade0cb07baf90288f9c721523845667f07d8870c9a5db8c2a81a4534aeda87c34f0b99a6cd399d8bc148cc6529351ec122f8eda758f46c7b55d84fa92d8f8c72ef1c105ccb6f0db4a82383f85113dcb5030296330092a65a59a67fda22b27134f1aedd4c016c5eb4473d3d24074a386d9b70307f21a1ab0d2de4e48b77010b40f6db157965bf550f22a77802d62c3f0b212580cd38f2985acb1157aee74f28981919879427124d38e3d26027d1834a0ea0e20803852739a3ba6051e127c24998c62fa838473f3837a9f1b1a71383384361c54f1dcb2317467a576012d5ad6bb41cad19acfaceff5b4f771b6998275dc8a539544eff1ea03cae885a729d8ff90d6898d63f4671b9d3dc8bdff659c6472dc316931e55594b6f8ab78eff63306119ec671408eb4593b1e83ffc909644f72be4607f25394a4437c80ed712769d33f683c9ad91e085b35af86fae73a66e6e401088c2f1b48a2734889202ac26b76f2a2f485bc32a0128b1d9fc685c7af650ab541f7736c4d2596d4f611bfb7a0dafc50268296298efb700d2e8bdc983f55096b6edce25d0cbd9264b184d974e03c4b1ca725ea5b62eb5878964b948707ac353f5cfefb1236dd1ec081cbfb20720c248caf69c01f38c396b146d0180d4293f189b55aaa912d2df5e755b3ac2b75b8b9e75c07f76d37b606c1f7c53d1b4e4ee931871c56241ca8f1e5b04f3a84c785f781f8c0d4201d5dc1574dfdcafc8ec66da64806c6031b8d55947c75e93fa051419585353a6f8ffcf33a8591f8f4dd2afbf19ce5441d86b4aa0df5a72ba9ffed398733a5ed7ec1d43b6e5c343961b9560d627c1609c86d70749168a118d150080f7835316b761feeab695858048c82aa2f36d6711b1de31701af5b8dea06f7f1bed697f46b9c91b194e09dc747e5ce1428448c7be0438e95581ba43ff0ea4dc0e27625b85ec7008f25e9f5af4f89abd18ed078e8a7b8edd8dbeb0d300129ef63809d43122feee7a03b235e7ea0e3cf36a33dd377918697cc59cab305e5173d05a25b8f2fdcdf3aa117dd4d8155582889355441c25d1b81a9924853404a4f3321929c9b5dfb90f3dbd3b7b3ecac74bda759ed31142327cd7ec0c895ee90a0214eb4c933015e59d7f2c132002023b80d97aa20d98f65e078c5a78469a0acef795f48b0aa3b83eac34657f8522e5e95f199abbea213e3b6444ff9a65a59c0232689ed6892b1e0b9cfe49d48bceb59b3283f9069acb6032b45644b19af3a43853744b8287155aada344dc8c369045f75d722730efcb09c3bc7b02d47528182064a4ea5efb3bfaaa0cac8ba9fa61d529cab804078078064844043d9a3897ce38194c6d0b4387795c958a7f91957f3882e8144ef65166f4f494742f9936a8f714463a78f618c9785ad43f518b4ced40adf98869e47fc4b0127d1528ddd8773748e2b3a6a1dd0538d2481c40abff80016962cabc60c508dd99f449711fcc6c0ff0e03c9d118ad1dc94db0e8ef2463ced968cb730a4288e79179588517a48097307c5ff7878ed660b47a23d5350c39a5c11df0e5a342706725b3884ecc60cc5f439b5fb7628f04f876887bf3c8ad9e33c547bc402a9541b656fa00404878cc9264598b1b207da1c6834a9ea36404406ad38ef72f3e1fc0f14c6d519d14644ddddde910e3ddc5b65ff4e0d3debb075bb77f88fbfc3d8c6f8dd9f508bc3bc8d786d8e1f18b8139c55f9f7dfa710f2fda4d1f1c8848c5b9fe9fddddf1900903135f44c72fce8ff72d3ca57a417ef3dc46d433e354695246ec8f0473a7922cd0a50810ccd057fcb60153c57ab10b13f35354997a1a34f17a6eb3eac35210254f5864bc31b4567bf26636e2764fdf7b3ab8693ffac38d09f930f140043d6a0e6dfb39f22767149fdabfb10380cc7b1b9f6a6fab874e472cc48b542ff6003c6b383ea9b7d0964d82e9a903f393c08c640215c817ede217358c8f4765766ce79928d375cc8fda2fc299625371f387caed30b878f63a361a4d21bd7db02b5557d304188757bc1f7f5560ab032d7c6ba6b1d72115102ebe05b4e680a0ced0bb56e3618677308d0c05cbd6b677d2c5f33150c12042131daf25c56f60a0a8dcb51234f6f3fcbd44a963a205b9bb0d0871288890d7948ab354ec06da2640cef8886911e7f8e0adf6aa1d3f1b32fb8a586151cc6e894dcf3de209a3a8f6b2dcb047bd223a98f8ca094d543c618a6ef056400e41bcc772af72bfd1a88d3992e57ff2a1dcea14ec56f82ad608cf1924c21d051600a452a4b510862773d2f3e8fe487b74a164c64a09e14ca979e8aa3860767b68ca259e4886b093c40e8aae33d6bbc6a0d48e3de8a0886c01913e3a3cb289713a3c58530eaf77512e368c1b33db65d60ba5ddc16fdaef9eb5a1cc3751374aea84a40c60e12c3a30283cb9c026c6286d2f575ba2c86f05b5a1f0aac4dd8f5023bb0b411ff0594c69b724cc23a7e40f25445542f24caee7c5a217087ea25f1348c3bbdd4e048aaa20722943b928b24e3d97e6f5c8807f979e3dd775d2d8677de41d3a210b9616aeeb2c9482f21eb1d538312fe13237bbb3229730c849bf20ca1af105722aae2780884dddafaa2fa2656ee09d2f4e0b29bb7dba957572ee4fc450774edbe5b9a753dd737ca3cd468acc7dd87c5d26e2515376680da515c9122a1afd055aa384e98b4c7ab5e888deef5277456365b815a9baf457dbc5a892c37f62cdbf41a586f196a2234e83b55787bdb8124112c5bfc16656501073c9f6bf80312e3cda511e2bc34271493558cf39d63bee3ddb6534d399a4fecb0fe4e43c6bb01866a926d16e70f04fdc2b1393e02e42b14a129bfc40c5c2d1507bf2bf060e2bd57416d4adb031d561528e0b01c48ae9b07b540a1f8d191b44a3f53ad731df6efe69120156c55f7db02a1918bf6c05c94bf56317d1517629a07c778a15607a4a8faa3ea5d84b35a2281ec6b784eb94aa45521a0876059a6a107f16419253142ba979c0c1fa188609f4bd3f20b314615a040293d31a8325eaa9461a21e72b5b67417d967423a5b1cc75d8c49a3f3af8068d0d27cde9e90e81934459aaf1aaeb5a49d8783ecb493e934a8f52e5021fa653df6e1c3d83a38ae1c6af54b419db041c6546ffe866d68cff0d9c94bd24bac5115da9e84bf9517162fae99928815802d073d3a887679297b9e91565868f8fbc07a7ac7687531cf7597044a4a910ed6fbdd84cacf175477853001635db5234c06e865519e63f05c95fd665f8e3d262c13ec803e3179bce7bb5bc3af78130d01ba45225db67c992d832913e43575799ff61a6178a7be4c5950e9d6f2c03bc54aeb7ee68e1921348b9fceee9cf0a765688da56f591dd3e94179fbbd253ca76741923e0d1390b6363dbb2b7cf1f9a3f8308204d0218244b8cb69ea1a4f525b424063b1556d4d7c65213d3d44552bec919b6746a0432a0434411f71c23a03b24380b1c6a5a520aa9ba5c337bab39cc8bbe487bad6f66e252c611181e7f07a8a45fef5a91c71292f5102ac9f03e50dbde503cc3e590881ac5f3eae0e6d97cfb4c802985d8e77771d5f35e672fc45a665bf8d1929d73c646f2e90e7d19981dcf9938a4a00041c5347b9d8f4fe494b1481ae0965545a5a9e57567048e0c5cf733bc7a0f289e0acbf59ec85f378a1939d55b83d04c439ec2a850644af795f94138c4ce262b19b50084a7874ace3b149666134c14c8da04951a95e81ab46840d9cfabeb0eb03781ab0cfef89eef588ef23053ef093ec8f06e5e7a8a83dfacbb12142a11108d55cb4413c777e3f2b6bf96b0df0a7528afea4dbd7daa74efb95e4035d328ac5de362b1a237ec854af4a7ea27a7c8105fac20eb8cab5f9fbb1b2fb6abd4ff8e8e6049e0ea6388fb9baca11e63db9fa9cdd5dfc118e7f76081df5e1c3b079807fbbf78370ccf0408482dd8afd8f45c1b271ec9ae252b37c30abf0ae040c3ff2960eee10509ca2df7879db14ff762926463f0127c47c4766912abd349a36697411628512aac32d4a35b6cef0cdb931701aafaf522ccd33ef4e5130c4006371521dbf01d7d2130cb08fd14bf96c4f821b75c6714caa1238f7eae6c3e6c71b405c6f1d91e316e3aa75f69e6199a226c2706be7672b2aa1d2a3e13ca2d25209b73339c7759765145252e904bd8e6f998d404e0f700421943ed067251a4d1da70e32e0c831c0729feaa4abfc3b426825d720c062b18d06d258bfaf660e095ac00597e15fa2b284310a9c4ba72d0b37a168411a5c22bf83a4fe89a0c2704cd7462c40246b495c478798c8973dfee4db2441701256aee8d57c1bf02468e90ebc0854249fc175be93eb4cf4e9105022c8dfc336f8861989f06d2e0fcc35191386effbf48d2b4884a86dd90091c812a78891385b974e09db77414a65c3a5800f46eaf0a179d7457a4ce0098bcae7eadbe8bcdcfbf0e38692af19819c0c360ff455d641499962fe1db2694132da85975d69208f6f6b94350b64b97a2a36ea4fe7d8ada9634d2991175bcb68ab4662f01dbb6fe23791dc2877ccb88be20e52edd9395b3816f161f1ea826beab6738f9a6df56b1f745bfd91d15b25868985657061252272808f27c0b70c1266eb92944bd3e0fd1d0462a50b22d145404059961e1bc4f5a53b5153444555e162eef7da24d06cc54264145c4a38dd366b63d69be4771c9b8ed91691e37e9fb1fc30380a6a2bbe851c65bb66a0d6b1ecc6393cf0e450a42b61c1a4b07ee34fec52778a265b069d63b8bcf4a829b1ed6b8968d73a91b2c20e394d66d726d00f63c9dc6b55a1df6def940770560e65d133cb50229638e7f60a7667e033ea14173b49dddd650fd89c60cdc54df4826cf3c96c4f534e3b5bb0aa3ea3de257fcc804239f05979e4ff6b084b299800b22c8748fddc120ae6453c0f98bd9f6ac02e06485eee37ab4c306452c54e82ca5edb050d4ebfc1e46fb294fabdb7f18ef737a334ed12a78637310bd08b343cbb4a71736ace04741b24a0093ae9606a7ab4ecca57c8025ce303dc6334d56b85990cc78d0ed6a500886cc319e8cdf18ce8bbb378db5688e4089c90475534d3d9ea3e03f6b323b4b9661a59078060f5cbae3bc8335bb2fbc5c5be8077a7c3e318f31814e8b0492c3b7191c6e34c4d0b023138ca73dc5344b42669542f4a0d8c0463cccb979755386bd7180c1be9683670dfb9485f5a6cc3c9244345cc42bdfb57991a699284e077a261e7349da2e0f522f4dc920db728fdb06b5986a9d48c3b670040eb0a1d3a51660ef71e3392762df4b915acde97280b4a7db19f625f7a032d5780596053efd93307149485a20be8908b75c84798bf626f741b11e9dbe65e2a428149a44422338965d8f0f9fb459cd0e7a29d9945da91dd0b3dbea44ab69c8730bcae90e933f6f8380ea754ce621ac08568128c16cfc3687c116108ec654e319f1d88fbf3d1b3e434dd58f2d5c10950f97a125c357c94865d4b8b127c167a73e871f3203dd4367187177cddb6eea44bb40156223496f6269d74d74e7f802f3e37645e18c4694584795a0c961d0ebd6a5b25865ecdb235026cf7f13d4c1c00440d298434295b73898ec633b7ea52042a68bd0f2827b0083e4a2ef8d462e8d601ff1de2374365b2d0845d2ecc8c8f762fea063dfb3bf91b77610c94e36c5c74dff13b9b2c069733ac5739e7536d2aa24d78264bfe7f2bf64ccf9569861ad69dff72e3e81a135464db4e227696d03181dbb456a9d24bc1d07909fcb51191edc5b8ff15664b93c112ed0de34f2a78065f13ea03aa5178e07a05894e7a6d4fb8e86ec5a25a9ea0a5e45b96379fbc53f717eb908ec413b9bea5292520dc5838c973d707a286c2ab6cdf91ab690b6decd28bdd63ddd0c4d303da4d9ffb922021c8564a6a10836e40a0084f2fcac28a0710ef46fcba855235a068cc1c2e0205a542e04adb833ac1e4cc05921878172286715393a2bcfdc598dc7b3d2f505dbe9bb9fa17937bd1c212c414876d021ce62e519b59c2010a3e8f5c94ac917a17887ecbef572d77587d0b5e4b8cdbd24141688946ac5c1645a43145b2f7a5c2dce6c2b51e397818842f799d51eef4f05dc08c43fc86157bff08fbfdf4e4a6876969003c9df346d6368340f9eaf13397c1fe7bc1e5aa938b5a5e2d7d0037050f682eb9dca46809f3c9deaed25b2556f0a271114da35418d2992c5a2d0d6bb8576d2e6fae987ea4b794ddb1a729dc9e43406a61f9021f83d2a02263ed4f4ff7ca0fbbc62375ebd43d76e83edb36ca7c60c4f856cdf15970cd843e2e85ddd469fdb744477f99a1bedd1e28054845dd210671b41abdd476ee623477a5792db94e94ff64bb9ffc7fec4eebf9f39a37103cdcc519946bbe7d2c460ef7dbe412843e515e11580fd68deb982a8ba9d57f73758250254310db02cc63e6fb538215857bcd7b5d6d140d4bbc00ec887e22ccc35415a02ac4e6ed8cc47f99f533b7884cd093b6b9dea800452cc75a381b9e606cde4ffaa4fa29d8e689605981a5e08509cdbfcd81ae42080bf79a88134e4cf6bbff266d0cb4c0632460206d7e5ffbcaf4e2b33f681df75d835e9db9cf11d625f00d85d24bf1960e2c672281f226dc32549f73eb2d27af61dac14acb0c126c2ead5ffeff3480f06bdb6580681ad85a0cd04f3766f5766c755cc9d1fc2dcc3f871b47148b98cee6da2e8100cc74499de5f6af256d325739c9cde5b0413c9d2e181023332f8e12960882e459a059285358062151fe663b439cf3044a9a2605faeba6ee572b8d2888898d3d7849dab256d065d150dceaddbc9d4b7f5b684f9fc131b78becd7487b58422a1b74279dcd96139326bff87acae06514892767201515b5628c70645562c781568e7fe0dd44b37c4def56d9bd2cead2abfc85ebe38275f17f64bc8bcd628693e344baff2ba816fa8d09c4aec708139689105833f348c90338091b16c5f62aa49ce98500e86265a1ed75f507647bbe38a4bcb3617853c4d658bc86a8f63551d1156c6435feb6ac443ed707695effd7fb5fe9364123c46f3676f21c611f7b1ea5dcb02dfad55977b4974132fe163398adbb34a28c70640cc2ab12eadc4811364ab021a0286685d404e3a930e08671ecf0d378d95c43c7e9835593cad091600172dbcb20c586e5e1f26386d1e60ac0fa545d7d4401da05e2d6634294eb873c3e684cd97ca3ae671520083fb25b5239b331bb47cafb133a6b545106a64efbda59449ca24654b060b06f906d8bb11e4321741eebbe50167a3f36204b98ddbbe1005ed7eb4b660955617901964a44b5145155aae38970693c1bc7dd822473c6d628bd27e796debc79e0af86128c51f61f077e30f3ff5ea175effd769ac41835b4e83db080d6edbd63d970573b2fba85fda27a99e93ff2e57adf2e7f69c1558fbfe1067ea7e979a20ab175ef78c38a106b729eee554bfc2f6a19e24f2e41010de5e4e6dbe6dbefdf63a1908216e38797b0bf46bfb6d7bb91365c8bccdd83e4783ed352065c85b285fc8dbc750f6c89b5c216f3b398c4f54790b2396bc6df3ce2fc4dbdd9e36900b8e2aaad07255956febe7679f60fb9cb4decbbbc8a1da91104404d169c690d03e8ca702ccc7d870ca247c60e6202080f998290a3766c0d810603e989f9e168258a61a4c7d184f851b31242019cf4e0a38623356b831234e9b7abb06ef6df0e664d0c106db0fbc3d9705dfefe611ed76b14f5b3466b62f79a20cfbf79347cf492bdcfdbfcba5699d5dab3468b69f348a37f7392bb00ca511e65e244f785dbcb026b7381b2b84726a7a32e6a1d0e0fd2d08df9746f3efc5d8e5fac7fdd2fe3ece7591effdfb22441932df9b2f931351be9f81eb4a1351f28d49e4fb21f4abff3a35c9218c7cefc7ed0b2353beb7e67e2448ad5b3170b14992114cf9003926156194b9d9d1fade0d0eaac1f6eb4e9f7e516240a917724f534a942d9809fd93befcd9d388d1e3b81afc701238c4b4c3c1c9f4699c1e7e892778b64083f3456870becb090e5d330deacc7ecdf9330d424d177a727b3fe7dbffd79e6efedb73e0bffd8d8c4296af7547e9ccd86084f21f5cec08152565112ed66889a18958d5122c247e885996df61f9333f04549635593ad410554844a020871a6439e3b46982e3143b0ce5cf31c9e807aa797ac7a7fbf4e92ee74b2aabacb2ca193a9b07ed69b0e951ee26a606dbdde5745f427978e47e1acb74469b3071a7f699fbeca95ff21dc9bd2af774a61f9a8fd93d9ad7691ab1a00b2ef869d162c8e5da094000780000005b8e58b0c8c29a99299291098a89d9d203033384719397172a1717a656aba7eb8238ee69d6af6dfbd1b4a27b8fac8d82cab0ac251996d594a30b1771ce39e79c73ce39e7fce1e29c71ce39e79c73ce2bbb3ce6bc3c79ceaab97365516013689e5da4a6bbe4caae8f0b3518d4607be822bbbe504a1a017cd8654923802fe6ebca537e55c8eb401d6ab0dfdde54f1eb979381db0fb67778aec12cb649bf20e15a8c1fe3bbb4f17aafa34f8e3e239cec57b750e06ec35ba5a945b7e95e8080eef94d59d55abdc7f9ffa35bb50fdf2af5554b7aa62e1781aec9d06db56f52b962d54bf5a8bd9a87e49f95d2b8bc55ae5be58b9359e2cf836f52bbc4e4cfd0abb5fe1bd4efd0a2d54937ec5a4269edc6fa1fa157a949dea57786754b2013cfdd26476166544a8a92ab7ea576cc6192be08933ec4ebf62d464e89f783554b1e47e1a319f7e492b39661a8f46cce7e787460ca85f920539e60b3c1a31201ab1201ab1209f7ec92772cc2d3cd8169f9f1fa17ec9a91cb3cb836d111a1a8af54b3a91630e8007db12dbd9e1e99794ca3103c0836de1e1c1638b51bf64133966161e6c8bd196a32d475956fd925139e6190f96659585958545d42f5925c72ce3c1b610151501f54b52c931c778b02d4041415b64fd924ce498613cd816d9969e2d3d42fd92503966ecc1b28486869cfa25a7e4985f3c589653932653fd925272cc2e1e2c6b8a8a0aa95f324a8eb9e5c1b290989864fd924f39e6ce8365c97a7a80fa2597c831731e2c0b282868d62f0925c7bc79b0acd9d3934fbfe4931cb3e6c1b27c7e7e88fa256739e6ebc1b2888a8a8cfa259de498ad07cb323a3a82ea975422c75c3d5816545494217356142caba95f32891c33f56059b0ac25594991922158d6927813b34ecf59bf6294d13ea3569956653a95fba30be5762347ead09d722fedb8caa1c7ac668cd97d218e10f8e14c90ca6f7e52ca5bff7a1d982df3baa7417f6a9bfe0e7d76a93096dc8f95fb777838e5fe207a64724c0a229681a8ca314909540eb559ee7791639212a66c95c3399b4d0551959b2a7754ee590b30fdc297c91f389c339fb5cf7c1604520e7dd6afa97ef53b541046ee51b95f8859bec9314908a13ce77339c61baf40d7804309c4e30de4eae99fd06740ee6c3673439fe57ea419f534a33fe070ce66386d23fb15fda120a082a6dd32c6784267e944a4d2d38937746ad0a0fc2e4a4e0631464a9dfaa454ce392a81e243962d58cc158ed99960fbf2b9cdd3861adc347ce5ebcc4ddb5e7ee7e2fbb5e974d08ab1c231d7d799d7049a6513176b921852a227c7242576a2921c939238cab20593c9819bc6d018698c34461ae3f2f292c44f8e4949f0c8ed23c7a423b032175b30991670cbae5f308f5f3efeabb9c0ddfd182ffcbad5182f8c5badd5e3beb53dd78ac1f563ea0830d803a141f92f5e089e0819a851428327d84021e659c00996997ef39b3431f23ac94929a53a70fdedc9b49003c305d62a6b4b97de74b63c8293e1916101c74d04116ee79f173305eee700844ffac0456e07a70353ceb92dc65eaa0b8bf9db82d9ae9bde759ec4ea58ef34e8df2d693584bba7ef2d987c18f52c8df624747f5ffbfbf36dc77931bf4d79d42fd92e2e332f3d99e7e42c5219af7bf9f0e6396bd0b1c0bcb4c2ef2fb1f44bb3722cf208bbb4cbe4a627b3ec71983c6ad0b78ff1603c8994fdb117caa0ec4fd9ff02daaf28652e651cc85c0227a5ccc969d0e7277b60c022c8bfa0d39c854ed3683f3fb63e1a4d7b6d4e160ff62b6e2c3e5f407873e7ff24ad587c3b43e6fb8330387fcd73d1a0bb7c07bb7ce8829590d360ecbedfc152847e492ca5957d29b36a692e5e18b1647fb0fb2aa6d6e7f40b35c8fe5ce7c92c653386b49a36fe57cab0fae59d55f69e7ecd9f7e7552c6108163833a5d8f277fb2ac411fc2f467cb6052e0647460fa314b28168af37bc7fcead67fd3825de0edfaa55daa39bdf4baad1ea96c62356badadf9bee6c9ece0feabdd4d0b76815c679feb6ef7967bdb5dcb59ee6edad522f7f25d9aa6dddf3ebc2be08ddb6068c12e9073d1bee5b2697f5badd75c36ada5b5b60e276fb14643a20413a594d680e99c73cea6328b6b3a248588faf57494a9f47129e43238b06665c3a3958d19430a452b4e48480848fac81f2e4702d99831ae557d8aaff649a09f0629b5aeda82491f5abf9c7843dfde80e7dfeda5d0109111926cea97a6d3a073adbe554e69e5bd580ad916ac85602f4b21fa2e8a5dd4060a1e84f1d759abb149f62f3628d420fd1822b0b78c0fdc4fa593cb15471c5d9fb429a5eedfb7694ef6ebefeeee6f856034088211aa878b1c0fa60d4a2ed6c0bcf562668c1227444a9228fa613a6268e6d2b9b46030efd282c544f9d572b27bb9410720e84861fb32ef3f69eecf8fb7e57110f37d975607319360bfca7c4cccebb4cce438cd7a734a8f7b72e1a4480cb8ae05930fd3829910d3c9160758ca4ec673f9d88af1ecc378173748e963afc6e5a5d3d900088718e9a7dc5ab009c28d2033357228bf862bd3b460fdd1ccef03cff3e767e30bc2f33366be7bbb17cfc525a5ec56b7949d265fd37e7af2b56e29b5c71e6db560266c3f9f73e9648b030eb69f5b9099f0391839993a619d0d5a7e540acf6fdc2eb29828b8b98f1ec154ce6452c0fe31ba0bbcddc52e7ede70048fe97d2d500ea608b8766fd6e0780d17ed7e7a6f50299b702cb0a4cfd60d82e9538e4a49fda53bfda6b165f5ab04ee974d290332fd242198c41b3a9d30a1ca3189c9536632c4c99e13741094f12f95207d4ae98739993ec19920b304678c3b6de8531a9de567136fe8df19c300d2867e54ca54064d40a675880f46831406c61b2c3cbf4328c14609b07218b17cf36be80e77e7fceea55560fb55fbf0c658816983577b9914f0a671da7d17c8b5bc986fbfbcceda77fd6a7dc6df37a87dbe1a4ed6bee66437e7dff9838b1c0b98267e94e120e6f873d3663c9a4c85e0f0bf06b48932bcf8d1d97c3ce36aa17ddab66ddab5d5e9bc62e39e60d066ce8de3b84dbbb67a1369738342afe6744ac1b53be9fcb52863ebb8d7bee3baaee33e6aabcb2c3891522c047f0d6813299d6d5f4c013b0c6e30caf09f1f3d7abfbbd3af75cb2c678c31cbb9fdf49fdf22caa07f1bbcbf7d3252b0d62d0fb4efe75ab04d6a1fed8f3513cb9cafe5db294019e5f9dba4fd8a976b2178a65f2dbefbdadb0fb7e73e192978fbfbdbcff93173db47bf7933df3d2ddeccef2a29670bf6f2b7f39976c53cccc787d12fdc7dfc0c7234d08932643e3e27e3c578c3c9ccdde8066304efbd1198f97ef483ce33cfc556056efc20c2418509801892c494199c37f36ddef5c213f27d9d96f1624621d3bc7cccf7d7abd1659a9787f95c9f8b06fbe5c355021ed01cdec8335e4133321842a46b1a84c26058a3ab710173eadd1e388cbf01e906639003b8ca028455122322b02c01cd8903adb56b1f4f3ea2b0b54e67aca8d67a0b03b89282872ada08aad65aab6ca24ada2055c5a5a666f55a6badb5d65a9334d90e50e08311599cdcc0825212274f92847dc2b77a5b6b6d10260fb2c45dbb744751921e8e103992942d11a76c2d112ad95a6badb596478c405edddddddddd8b1015296244f6a40a8038051450b4009154801a50a58745151b58e0f8add55a6b6d0fa41e4d3d9c7acc7a40f598aa38330dd20652eaeebdf75a6badb5d65a6badb5d6fad20cb5d6ea8350ae7527c6022b515e38c2071c8df40350ae4a3fa82012d55a6b677168aa53d3346d869e3ac34f9d21a8ce30546728aa331cd51998ea0c4b6a0d0226885b651543ece94e97eab5d65a6b85916badb52a112919554a35002b28365012c969f7534aa943e59884252a530ad5546badb53211aba2a34894263c088104059d84ca131d952c2f3c3444a982e52212f9b81159a764e4a7c5b6b5138fac9344a214a92b2bd7bad5ec5c42a86d2291115293535e62f6623e129d4630b54d5cd2c48827d7578d10450505931d243aaafca08226909aa464784288f6818678c38c08149d8d3bb3ca13404cd139785c7346a99fb689415a961a72592b2407a800b2a305089591ac3eaaeabc2c2a7ea89832a72a9b551954954d5559559559d5aa5d6badb5335edddddddddd93aa9cb2bb0b5998acff759a9445083b13059515506cd14a94961796e8876aabbbbb672b33bfd2849d523bdc2d79b4194064d87dabb5d66abbb92582800487951204a91254a507291f01d410372aaa1e57fc8ae96ac95593aba7aba82b2a243dd4a4faa287eab5d65a6badb516d153c44f11413df3ca9fb042c375ebd5ddddddad8aaad551b562aa564baa55936af554abbbfb8b1b28e829dac26406240a2b3cf46832b0389215c8212b42694a0f41f8f40e524798dc7a75eaeeeeee5ea5a8ca5115a62a4b6a2d9a2ed554a58a983fe214a216385a88e2c29409a2b28c64dc0f1717962674a871214ed6b57a6b7c22d29e8cb42724eda9497b72d29e669a8693830ffd7921f4a2fead522ad45a6b9459db44a8a9aa1cc52ac693a5c890f450adb5d6e6e0437f5e2c3103451326f8eab5d65a6bad15ca0783cd061e2c34737787a2e274a9cc606aadb58ea064c8102d3f90805ad248727052922a1477c8ca817e34a0200d68c835dd7d48179e60b14fae684d1ce4e441d3dcddab928cc526aa94c20c06071e1c4a235475772702a86da210911112114d6d13a98f49159b48fcd88964ea05d6144454399a5635ab699ad5344d83c2a36d62cf4fd05051cd508e6aad33485a5451a564e5d5dddddddddddddd35cd9b947473a9a94ccda0e07c903ac28214540a31b40eb4892068584871656a0a4d8b4a4af44c80ca490d3b4aa05439c1110a85870513319eb6bbbbfb92115d426a9bc8441a014d9b78eb122f40b5d6ba512916183d71dfda6aadb4d6da9fb1d65a6b83903b9eb1d65a6b675c38fa545b6b9588b0c05a2d3246281e48f0439423435544144d0ec0e0c4105192f400c30e6dc4c9d4ada12514a3f98aec8a114ba3662e32f8a87284eceae8481761e24ab4ae754d5e39a9344d9b786bd59eb04b482362ba21216d08d2e35aab758d5e2a7338d27260ca6109cea189abd65a2b0fd2bdfda4e8c9d113a6274b5c4f9afc9327f04914ce13aa1ca4acd3da7582a145adb5d66aa0e414a43d6129148f534a51545800e16e009a5dd554ab25a7724ccae299ca61a483120e4554a082113948f1f97931820c45b126a834894535918e22ae03c9cc12ad5e5edcdda3120c42569249d1f6039da94202456dc132822a2199a99c60d8c148d312d6162d292002440b09bfe2e302a42545e4c1a1640504113d88780207287245b241014439d7bad56cfc416a9bd8749df0cc05f5536de33f556d135dbbd65a6b89f0eaeeeeeeeeee9e64a49484b475eeee350a6a839ce244149620ae1ab3e41a05932805905a6b5d129b303143a62a8549e12326c4ca49eaa88738dd49a44907146d269a5c609a0142e455ac7cac484571a3a4c1043ca8d4708563070c3d44832c26264729cb5189052cb9dec881e587152a40b102846a46bd2147952be5c8f2824adb1abcbabbbbbb4c767777213c720790eaeedecdaa9e5184a81631b24a4592d425a211462da028180ad55465c7e712333721545f8a893a61c2bacc10525583e8a248913293a47a9838b8deddabbbc84eafbbbb7fbc436d138bda269ee0a86d34ed86108f2045589111814288902cd9fd5d4564df66b83bad4f374caf606208918f272eece06186b70dd98166d97f46ca10d9dd7d267e3f8297ea9259c6fa5d289e6913b3e600a82baa0841c3d590262d64c396046564e6a9ebdffa98895cab521355ae345b29da447e8cf24b8e4c31602911a4a489503e408e4a90e0919528ead6fd9e9e7ab29227aa1c9540b1ca094f22754a9dca9e7911749070720848708c3759460a84123b8571081d121c82984e310495c9273b54c99d98049244461268a85f73ceea5436e50f883363745ae7ddc8792e8cc1d7bc1c9ceb75608156901a70287924cf87828d19c37e234c599d90010d54551a80cc399f1071e2d49d3a75a60f26a5d35a4add895377ea1a0c1c1817c8b526df9f11789137ed036dfd60504f670320d89f933d9be360d0175c11bbe2c5e077a084ef680fdab65a6beb9c317a907b9330dddbcd241f65f4c52f657713cb4594d1d42975eae2459e188818ccbf40bc993f04bb88329a12416a6fe6b6b5ad6d5bdb8b5dcbd68cd3a5bf186f684d907b67869ae91838bae818ae6823ffab530f68a6ddb2a343dd2d989c4ad429750acae91d343875be264c5f3e4729f54cbd10641164da82d10ff4948e032743503a95eed2a9ec0e52ab74318f14a1778324ec4fa93f894edda94f9c23b80883206c2079dc41184dddfd33c141184d1d84d1d4dd1da4b5043f9f70e1cf318ad0d835637cb4e9c7c99931743a00212c815249e37750d434782fc62ed73f08e2e0e4e4d4b853e010ccf30b62fbbb3066a8129cb59a1767cc39e79c73ce39e79c73ced0bc186bdaba68b0a33d9d2ce518e22066dab49b3a7d2c9b680c0a9e33d6cc0770b1c65ffa0c2ed6bcfc9c3a456934cb71c9a8291f20c725a39f7c7718ca9fe3d20e3c32d717c848c17e417bf669cb48c1f5efdb647fae76540234fa2dcd0760f6afdfa2f1a073ff07367023c73c815abf9f84fa519afa7d00667f30fb07d6cc238ea35d7fe17d7f1a238da2717a69bc691a9ebd4f5b34e69d80fdecd3ef3e98a9e6d1dcef0330db0f6c10a45198847ef940b8127c445102f61c917c5091652400d7712828d633943c4f0dde80c3e6894527e20d276b61c7092222309d8832e227a79aa74e55b9c4c2538e4b2c2cc9e1e4c9fd18e4b8c4c24f8e9e7c8a1b0b3db321e2f75166408e4b2b0c658eab3183002c6bcc8c5063ea02ad1034156737b6538593c3e6993df5ab9b727f28a77c668cede987d73fc438d227469b68f3f1586a018b4fbfa25296580b54fdd33d124704fb652d2cc905c87149852332273b0bb4130b2202d3ee08491c3fe3d73cf11b86f8c9afc6778c4f337dbc99061b68c6a8b22843923f4b2914e59811f6500a4c72d8469d530a5772d84cb97fca287dfad540e4ce25cc1825b44dfce2cb660780886b291f201d30231530dfc3bd80f95136204a0cc20bf2fcd025c7dfe40b00129c1f61c02ff146090e1f7ca9798932a2dca4f673932f2306526a3f734b29350fe807336fcfcd4e7a1fe8bc6df386945136722765a0f0cddab79dd97e928ac4807ef5a6e360713362802342bf7a22e9c4723f084b3a7c6c748c8a0965201d4d39ac4e73fad54a725fc9a106f30399e35723bd2016372ccba8c1199170f24ee77c308c74b52c472ee170caf237c852c98a9d2c5f0325489cf8d42965c5f24b36a0f1bfb2cc4036a09f298730ea14fc4c4770c8395936ee9794b1594384915a0fd846192d0a788edf5f08f166fe3dd203be39a439d28f4d32ca00e34d8c6103c27c1dc49b698553189df26c3969e88f35214e3f4c6c11bd28bb5bb09865ebc61bf9350a8e0dc66e49e34d943b5ccb8e526eadcd4bbfd68e37b1bfc879ad6ee99d5a6ff26e1ae7f2fed19baf0d3c74743a66d5c85594eb870c51f020e540fa49f294c4891b5e10b2f44209967ab05cdd43088b111d98cb51e9ea87fa036b392a5d0971046ee5a874754412ec392a5d4d51b2228628fed669affc661a94ae7bef0b432f33eebdae06937caa20408e4b311fd7466d9072aca215f0805d392e151d818261725c2a0a2aca41d335e0ff14a45975c02d725c3252f54666ae9a6702e941234e5e244a253ac25b8e4a57f4c858483873471d72050c4b982647a52b8c2029c20a0f2047a52ba84680a5c3458e4a2df0218bb5d85585e09ae3d28e28acd450a12deda0b2e3c90f554c9e0486c95169cbd31576e5a8b4e58a1496c97129b6420f9ae3120f24f0e682a8b34bc4b423988a5d509aee0aba293c4f04b0c46ce947151744996a59ed8e22b3517cb00966a42cfd0891791282800fa002e4b884a36aa98750eb894bca2b5a3409458c93f4466caf54d52a24762ded50ca38c7a51d459c894f294a419d61071f9c061c1753bdd75647c23347252c1f64c09da312560f433cec60ed905d384a5846660aea10eeeeeed403f1869e106574be1a68b0c113a20c779806aa64a0700b46a37e3f8d531cc80c68503e8c504b3db23cbdfbfd539e106fe447cfc2c5281e5380029a2ba874cc598b72a910910003000263160000280c08850322b15896e6d1ec0714000c73b454664e1488233190822088811886611804200c0300218610c41093ca920097d5e400d2189b873024a0ffa10b93ed6ba67598af9f23111a1eb244d65d13c32c213fb023f4df71dafebb3076f4c4cc9b7bfc6d75b3282f71d6ecb07550df3d0d941b78363702a8e79c1259ea8e98e25110a05f68acc1a25826797300bebabfdb14ee5f2e84cf8383ef2a872da9e9de3c0ccce883d09a8ed264a96d83c8c61a3fc8649e165f8a14265bc7cdb0397fc93c0406591b4acb0193bde845ed0e066c2d10b6ac35b5e91728e92b5c7650974351c016d2361012278198603ca640d85702200d3003cb3519b43772dfbf8faac9d7399d283f356d7319a09fddade9a1638cc5a1bd1bed15c395fbe85bec38c5098027d56dd4a5c1c92bc6eac513829bc1df228cc6a08442fd4918f816c79f516241b127d354b878d45cfb7a552a64dff88d7abeaae9f80ddfc6f631b71ccd22474add5ed582bc88157e6048db5224745057afe5569c64c4f62fb4e75924803c58a0806e98b0bf92dee9509901cf2fa65753e608f37da7105d77e4c84c674a21e30c141b0869df8d616a476c96469d6a5ca1dc2f543c1bd02fcd83bb8ea777bf4b85e2cf88c9a177118155956f4b7ea839142cc2994f316e98171e68d8734c8ea2b3c31eac3925bfa628321141cc0ddc84128a14d1cc943b3b8bbacad1295aaa55454ee6e37a12e705de10c2f1eb2ca4a46430d4067a7f3ac6997a47f1f10b7a379be9e4f81573f26d2db2cb18e11f3ae2228f0a8c014e8c69f9ed47ede36ea9d250837f35d2ad077fe2d0af47b6258b9691beb508434561a18024b98a64d8c230ad55cb84760126bc06d49ce06addf334d8a8bee3b0ba1a870a65aca9e6382737a597cd723a99f71f4eb93578b22302efa82df48861b873587f46c9c3e087798b256453dc3e3a83ce3d8f1431a442a5603708c31dff53d06b0278bac9a85419493925f1060997d44e7213ca937a17b3668c163be18da260929fe06ecdba518557878f9034375e2258d825017db0405922255e7aa75daa9e8a76339bd9adc1346d10a74866153358c128cd36f9cf96d6d818dc933ea06f5035be9896d9dd24bd87f4af0a3d614952bf82e1babe138874a891e4cec2fe6488bc3d23b97338e7a44a2c5c1f2a6b2f515836c508920a48874504dfd31ec83d43e8e7095fdcf833feca389e84e322a2ee6fa7a941a7a010e70fa14a4c957669e6dd4bbbad51debed2e24ecc26a00c53e7595bc46acff1b599636a35ca8af2fa45c9f0bcc3906ad65724aedd41b0fe04d2c87eec3ad4d441baaf63f49b0b15ebd63ddfe28e125ba247341eaeabf1597994a36adbc9a1c5225fb4817fc39642e2533e8e7d1f413cfe4fda0658016fa582a765b0c907d7ccb9b99506de9e38202d207ce9520a81a476c90e009178d6aa5af6399abf24b8c19b3c74e37a6cdcc4edd4e0633dca0fe423543e613c507198448f472c1fce6654d18cd871a78edd0576f3a4e1da83bcc92f4fc9169213f2d6aa171599e6c873a9caa319cb0d8d5713374c49bfea4d9768df7834bb00662cafaae30482aced70d68d301ae04f038200194c1a070820e74eb76ddce2121a2bdea290f888a2ff11cc3fef1d5217289a2655539ee9d2b002abce5bc8a4e1c1f501bb5c258656927295218133c501be1a871bc9714d1cfe00e972692d035d9598d7986de3b33e3a00b682f739fee0c5ff5ae0ce7a28a721e4002407c3da77348c5a77cfb9b6c70100829390a2f34a8583b9f33817523fd769a5e8016c376565bc3fd03a0962728149addaea423abc98cfbd10587cc0575c00d90026f5a690ca172a68c4b5b08525ed6614732b8e857a42e89272aa023e930c6ec05d8cfe8d56d455d6cb38360d1fe8bc655a35fe4c4ea30b414e5627c548fc2cf5c4134bddc3385a1bc6561071020a06472780ee735c4a92cbf6fde6e12f25b97f06aa171b4e9d5b1528bf5666e6f01fe3641d614d7ab6bf8128c8e7ae310f426c22040105dd9d19df1402339a2c49ffe38042fc062476b2983e6642c26152b46b5c2180a1ba0345b0994fea650923c69b19ee76077cdb55e81e64a0dbca6628c6533e605292112b936d3930273891e0d82eee2190b53b39bee754c8e5b1c101d8d231e1f29105606ee7b03c8fad4202b6f6bf85d7a27868a6c2ac34bad698af6e879d872a471224aa80fcfbd1cd03d138b244369b28aa78b76d54c754ecf6e3cbfd6b889454144ac000a80e542f5c4556321ca6ea1c30457015e00359335059b29c3fff599449ee59932de3ac760b5493abccccf9ddc7c46844272743ead4ae4b296f485e4eb5af24cadd87771a8c81fb8aefdd1e948e3e5721285006e30ef2ad58085036f87860b0ea0e33f7c6bab0abe3b8b234deb361eb1be8e32a6e1ba45d08d80230d4acc4a30f004a2ddd953899f69671153b22c938efd46e46617e2d885982e37c8786016e394e5020c904fa606a4b535c6e2e3a762bbc77a72efc10be02ec41cb6043a20e7176da77e4e53af93ab063b2c40f658771d2b3fd2823ffcc2023eff889c1cc918e26809cfe2f3712ddd991696ae4efec31b23be154308e86b237f307323bd730a85202588cc8a8e5cb67fbdd2eafed1018a954ed294a307aaaaf7791f01fdb2c182b6938fe092fa0a469f16da8bd8bdef7a0eac086e5281f9d722f9ac4a509f4236cfdea6ed4ce783cebd9dc4aad7fbeb60e03328542bd0f2645645bf8c64fb42aa0e6dffd187014d12bd96eaa2c1b96730c56991d16a399ca080c5d10901093a7496d3b36d84701c1ebf9d0024141df324d3f95a5876f973998102fd876b67695a09ce870ca97d48b33ab54668b109b740b055725fa14e3e57a88de6b8355bb9655a78a5aa547faacc1f7d73a54872aef709aa529f483cb025d12c8c875dde60d2c4b1833d3c414426e23717964ae3e864202650c4dd3dfcfa662206d20f46407cb87ad338e31a7a69ab958005b9c42ce64d77c572000d6c1dfda28978b8a70e5dec26240c5e649c7441d0621fb1e93be2ff64c215d558eb234eb8420d944921025f8f52bc6aeb3101c487d2939c4145aef498e594048c045911b7beaac3ab56c56cc458a21360e02f76201ccc1f20f9bf0ee827b2faaf41373818e597a6a95965848bfb9e1ee1d0fdc5b94e08e3c6181a105bb51909cba4208e1088d8dc921c1cfdf879ac34581fedcd2ef634298a6576c752961acbc47229ac2e37434f09556a3e47622e4ce5d9d62b02c9e8c42f80274ad1a2f41298124a43287eba546ed927dd8795df954925d268672c1f1062856a979b685205d0764e128dd08da45a1c17a3c9d6a6ad72ddae2d47a6669f03879ad82fed7606f2478240a9661e51aa03eaaf3eefe151bbf251686335d3813a75584d89cd319748a374dc58fa5c70a5cfd96da524828f739833bebabcf1408293a3ab3db89ea10c030cf15c7170328b61f18f7505280f2996ff68beebd912c97515e1b95e6e49f5d2430f29389f921d1f5bc2d2833c9939f594f013f8300dd1e40b0b11e21e35f49d05d09bb3c03b122a37f08f11a135a51fb14c696aa3a7dee32a1b3378b9e14e8f2254b32c470eb5dd44d79fbc71ad1cf0d4c61d2149c731b748de6068a5eb9964292c7f8777f2a73ec0f5d54c9d9490bf863c9f903f518149291afc61fcbf5f35d779285a80fc6c2e95c73bf78e41311ba304eb1d5b5e5a83b6589b6f5694c4160a9d5c8d3ecae77f25ca118dac2a298384b55c55eae71d4d313eab259f8b9ca37fba3898d598b819290afdf255f61adf15ae389a3279f018c3eb329ba4fda09a353cdc80289486ec61fea525376cc7c3f37908d8bfcbb57304cf53a7981908265d11d07de10695454e450d6475ef93f0960fdd950052da8d8a3310e3f7c4a9f8a2732664f5fd7af86a14fa2bef249641340f49549dc4e0489ca015027f96ceb3282d9a6f930f403f434839b57f06daf37a19fcc7a7c69d8d5a1cc837ee87479e6093b7f6d4534ae1945d727bc128801b9b98363b5de8fb9b41b3e2b9f0ca8e6d27bbab333de0ceb4b649ab009f843ce7b5421c564d2d448ae8bc75444852fe81c9d599571e0d8a68f6671c93969c9ede5710cca76643b8ad3caa40cca12321f13883ca90402adf26d08a453eb462a430a86480a270b9409dbf20363fb2b085bd0021a217d063f83b2957dc1cb7c638d47a67e66f3d1c863d001d97f20f27db1c734ac548cf6b55941e653c145e01236c1450c18d7b4d63dd230c6fffcb86ce5e56a8ac5d9d027634880c6bac96efa81f98d1523ddca03b7ae05fe498ec76e0cd80b117b0c7c8da8c541899b30f60131803c02dca28a193ddc6e357903faf92ec4032ecbba7d8da9c099d7b650bc140f7525b7f47ab34a6578eeae9de0d91b79c4ba7bf2ea300159365a883437b21972c3722e72c8409fb99deb09a5090d2a2ee109e59821a7135909f156ad3eadb3b54e5cd532dddf968a71027583cbb683705ab0dc0d77c8892066a107a7625e838cfc16ee50c81366779ef05691d7c358e31731c3f4ac840c12776a64a254c216d1e2687798320b82aba0fc7c340a8efb10308be9d74657fb85a1564d7f4e5978a8c008716238c925b26013bb31337333a3dc90b70cc1cfc5dc5cb25754c50986cf57b5295238bc5d0b74029a47b9b4f902efb4c656f399b202045bfeb61bc49d72af9ca5075424903187fc39c4cc09c61c30e0b9a8abd8c274ba91d3c1b7060b9c67c1ce7e70553d022e62e8885d5e34e9a3e916fb1d4a88d6647eaa27bb112445289d5a577b5f5064031a3cf57bb2baa6f704429dcc4b7457c34f4b0581c5a6ca161dcafddb3014608979a01a8438539719d77c27ea4a499c713e0cbf70caba406de8c782cc54f23d5a06ef618b44f141cd861125eb98d832b23f71053ee8fe23085256ee525ca8e60e0f10b13fab2bfdcddc8e394a123824943124638431b9b2a6ed103dfaee8679255c8208d2c907bad3ed1a0f604b8946cf14cfe8c1d980ed00338a0df0a946cd2a38eb0be8b4cd92e98d88bfb99e23ba647cdd05a4c4adb1c5b04e4d8233de402db8ca57d602f8b83f60a06f845956bd6d47a13edccc2326a1e4cfe31b7638207ea38a24e8bc608a10120b2f4512ac845257ee876a494bb659317ea596e7601c683793a09fd02ea71f2f32f13cc72a8f66b4410973500d1c569e900a57585e7f78d78cf982930cea8c064ebf60651f3c28f612d0f46c35e206f02d32f13d7ae12a430a48a30c3f8124eb88277c21334c6d8601c9f871705e4e5aab1b9bb6daa0f505c6dbf0fdc83db78443d70bce453ea51528c180c42248609dbb3ff65fd1f23140d873ed6450f49f0c889c5c371fa913c214a6e954c8d6b5a58d0a3d7487e00478970d51d83514b8f92bdb5240384f8f2c12235acc5b4f325fd4fe4886b7e97f1db583be6fb3a76fee04a7a08b54b8cf2b8595028739db0120e87b6ba95933da3589638a7cd5e53cfcfc45008662e7304d05ca5bc0773d29eac028e8766d87109d7eb3caa0025980b1122c2113472d5697f7a032542ed3501a59e55105fb64544afbf19c0dfb1a27d7299cce8f6e51c23d957325c59b25d2fb4439aa329960caa9df58c35ef9daee12f2f37a1940b15afa644e382ee4ad70cd66dba482744beea04b23348b3465fac11ae3defbc3a8d9c7aca83bb42fdab346344f4c6a1b12cdee67a0ecbac31805d070ac5b2d93beca7f5990fbbaad72a768e0980cc1b669a67b8cf5213350c4fad59c16d9e1cfe4e490fd51cca34c3933f55780535fb4780108c9761ab776cf400846020537bae0109500086c238090699045c54e97f0ccc3a480c71185ec9c813973067480dca5c47719bf34309a8559310f9c3fcc7a5bb8a75c16f9ecbe7ab9e8930466f15af609c6ce70f71dbb74c6f578dc971ae092fa7a8b9f3f20577c34fad5d4a86a099c3bac0f0f801c1456007f782cd1278071ac913e21d81821cb18bc542d7df7eb2b12b5946f6a6818e886cf1f7cc8d7f2227af130c5320bfdbacd0ea88f1f56e00acfddae5cf27ca21fe919f4201741cad10b914d89f5e7df5df10f403a1ace59e688d7bc6e584c6e8404c3d858a3dbcb4a945289080ef1201c8ff0131247e7c225768a6750451d01131c1248ff5840aab30b1ef4c2a167ecd6a1c0ec5df883b952cd6a1e7fbb13521ec29069d7593a460d0236e027bff73ca3517c0dee803be32cc67de4ede6be679a86aebbd5dbec041b7b261b2e70fa9256f2a66da7c40bdbb28589150fd746033fe141a0fc8f720d2bc1107af28369073ef92ed3a4490d984d569b91a926aae23f1a1e816e6c9b3fe6aa8988715ec028715660d4d09f62ccda887f8f6745e7d549f15b7049ff071ed45e9fcef4b0094533da5216c1b889a49f875da104729f9b0622a2b8a2510ebf4cbda5ecf06d9ddd9ff51d131468182c29cf8478e821a442aceac81fba66f0a17498d1933146efa406927d425726bc89767a5d95041a899762c34f044f937365032ac17d87bf63da66fa19916902239ff000697ec6c62d2776560dc0c9a6c4e7ebd14fd87ce9a13a9145b652803850b004aa849644ef1cc0cc793272c77ef5b3d79eda300a3db779018f00df16d56e6fb34fde7c9da31bdb9b3881acaef432a88c5004df30e4397b01991ee64ab500c0a586d2693db306a23c4de22a805c6d74f47329ccb070de846f456f3a6f018371f5a7c77ca686c8411a03543faea592ee61847f35dec668160755fcf60c4d97fd5c928d6e3996c6fe32c47cf026f5848121f03142f916be00d62e54fa05a0fec4362c9d5414cf9428cf9c1b083c505b31f6d8668e4961067b5459fff15e89d97d3a03c461b71ce50ccac1c5881e6899320e45170b99151820465f66d86cb65987db9bf7ce92c23d5850f8b59f20a50367eb4d6a50c717d4ddcf43acf339e41c709fd034be1de820c0590a392b0a718393865c83b04f067ab92ae96c0e17ed0b89685e58e057d0ec3a50e957665054d2ae919d09fae0c3c6ae1d315bf8e989ad86dc157e774c270417cc59634a90d2e4a7411cf89bfade467c062a385a464640eb0bc902ae0c86d3425389216932db9151741dd0c547347734b7aa704594dd5350c2a7f8bc3f0e754b24050bd8b953c09238ff30b9a7cc30c858424981b912a81c112ef4f199d984672f96a00fe023d0f4ff5225673307cc0b832209990c2430d087eb1ba5860d8e1d4a9272a99b6c0cf5145abd691810872b36f9274a83a9603943acc54d635d5875ed27ca5b7ce4236582c6c261b098f5e25521c6eaf3e7f1fba027ec8ed4a5799cbeff4e5e125d831f2dd78587b736cc46d6e1168ecd0e77681e57b6d6b38998eb850ff746f961206ab9c719e5ead48f6fb047dcee716b0ad4335b817e8f94721635625453787f9088d192928fb544e848a24d302f356f6007b56fb377602a4c1da0fb1351571fd07b245533aca43cc059ce5ca4da0838d5d5ab0014f75784f5b74113a1648fb4b6ada0fab42b661d1627e84e84e964632993b84066f51858c4f251afb31e59274d54bb548cd50a627799534636318c48000c0166910028e120583abb07bb4d28e1c3bafca048a201008317d82b165152a0b4465353e1462ba31033486d3bd69f896222af21435972cad96ceee1c754eb674fd131fb1e4736f9cb8f4b49018aff45ea6c6f4e3ad568d24e82e0dc92550cca64bc9cc1bccd5092b9c486a81242c890886891fa0a44e70eaa287d6b97a61286ff98a9a4ba1ccd27fd9ce6965d1bed4bdf28d152eb38d204896721880f212364b10f944c28bbf11338871ea7829843c9dceec69cd2d34b14301a0bc43cffdc6d7d490069660e2e48f45c3ffbfd1f747772c8a79c38adfad9dd541929285e5d64bc7317804b03bc807447bcdabe389834dd14538930fd15510aa47f9f3efaa37e60c404d47cdf7d1bc5d2839c291c175b800c55e738dbf6ac252b023c6d8132453c74343dd501bb070def1e63ec5feddedd87ea587ef695145e815077412932b4621c4089769467d3492fd5c2bd4e809b9a915c8bafe1807cc0e0bcd56347ad4c35663b16c06c58c37447a0e3332303aec4f0621aa518f0a3aa352ac95c3e621355b00a8a9ad36b5d76c84d89402b9d5476e90d380f1f554c7637c8d48a7c4420fe9191c34c9a97762e42766ec7fe5e34982be5584a3f715747be18144724e1ef9aebc85c80f6f7188ecc14b042dda7880cd37e3287eae6b22f5b35a0fb09500ce97b8f61d9ae6b5a6a0b4d243ba25f851d4b2afb2dc1a319c939b9132c6279034ec0f009141696aae094f30532175cb080c7d929c2edd214829d447883d43a306297fe643aa633e4b262494240a34bb2f3fdc8cb0d6208c6047714b0f29ea704b8d4ae272162385c461de9a9591217565611784500598906073b7a496d56bdcb5a5e4bf310b948c1ba08241d00be5ed4543201b90ba9534b1bc3e39a6bda6ad9647224272a5940a031fbc3868c53d88ee103fcfc11258857e70d5022ff4b86290671575f63791040e278090566d6786193246e6f2fc2c588f81a09bec9300188d5c1e47ce3cbf992c250039b23d0b391a071f216e00d5e75e8f5dbe1415e9222cc960a50a27075b55833171db13cb4009f8b01d25b0d222f8101780a86d37b99b0f7968815c05f5d482687a8cc828028ed5f48d228bf5391bab71432e6db2962270d62c83c78e5d9b13fbbb1c6fda05c6df0e3950cdbb50f48d7c8c1cd507a804b9c1c4779a4fff4ca3a7e61f9f6243125314fe2e38929a82949b2cebdb1a89cbb3a5e20ffc4e1c7fc101e023113512052af0158b2bde34d03b5f7b62173cdee18dc6d1ffec11787fa0a90d9dee53c966e474a4e524481f2c4900f2d903fe440c107b6d56db33ef84069d0a901e51f7b0b5a2fdbaa6184184d7f84bfe7ed6c2bec173b347ff1dcddaf778ff31ddf1391bf71116bd884b9ec83d2c582d33f38007e20688910612bfe469090b406704f225ee72d11a9e068798c03c6fcb074e3d8859f26d4f81ee450fc832f19507f705ffcaaca12806d1d8f2ca5008c5826a505b0e0b139dc08c3c71e41a45819f13a21025880e9bf1c497edc37f003ada151911ca865402a7778584bf1037e398a8a005c4ce6ae3172aa83c84d87d088d26bba2bc1fd8b0f1c704094308e737a4a89b439e785314442a08564501a40098a9cdcda43c4b03b7799aa9228751ca53181a25d35605d06451980a86f6c0477a58347ebb237c9ceae9384bf0473baee618517c7228fdbdc5c75b86e1c721493e2563c8a8c20f401d9c4b48f6940adfc79b6945c24553a6e354163c6f6a1e17ba20fab5993834399f8486661b951b28041505b0f0e475e36ad665fb65680eda217067a539d75c848ce9ae67990101cbaeffb31fa70a345f6c62394307f9681989ae5e84f4576565efc1ceb096feee15ed6637592532bf627fb50d2b4c82b543b6833016cca98de8f71e33afd6a2b6d903b9b3a01adf81d6c11cba64651955a06b0e20d47879da6f5800c172b0acad5829745b668c0ed9e13866aa66ec2e820067b422cd1a17a9a2d0bd6fe84238e595d9116ba2ebccd2845a656e426f1ed240cca5f8ab2df455a24cce4d37986de748c29e0b9d793fb8959292448666b140c5edb2869401e9ba841562389641de22276e27ec93a2e00cfdee1d34462c9eac9b0876759dc583aeb728e05a27ca341b1d25f81bbb2019672747cf3733d801295d35090e6247044407adfc134212979c3a64c686d16cca9103a5357268ad40210bbf6d446d1ce0a952f8f020fd74b9c858cc4c560dfe77683efaa520210eb52eca67e1f50a9fe8e37034b7d97703874ae166545586d1077ed75ee6c0c30e62bc18a2c266c4b782e3c9ef6fd3959611ce71fd624b853661bdc6f1f0725400f654d1db14d6ab701542e60d1d1eb7a43e6a7210a8f0afbe0a74edb2b6613750383187023b067a40f2b229663855631d03cdca05ccc6ed53500571ec8e4a6981dc1d1d85a2456e78127602043a33ea2658e64724c36813ec09201a36aaf738a4e074bbbecf39b6dcb46e310a58edd052c1027dc8d7e72c68587aa6e0ae1312b1253069f896fa057a207b511211e64c9a466121f45ec5b1b723d9b585c6db16913a4dc65e3a2740049a281aa8985f21b001afa322781a6a3c852442175213ac26013fc2d1968b9a31784cce5509e4cbacd749c2141c25296d566832067c5f52fcd4059bdf210a136a4de2ddec9fdfcb24ab0ae5c9149a8e2f63500fb89c83164419725c9e7a714df5829d7e0c6163fc991f9020f1533369944c0aa0854bc31e9ede44be7ff2b58715abb4f656ef4277166e4f44bbd26c0d2bd230e69f794c62a960703a82e1b56ed955c2fd106c8324142c46770b4e77cf77a4eec80331d5473a6df05a9d37d58189e4e87412ab201dd349a3bcda31e6b088dcd32002b398ba2d6a387d71cc5c8131c2d84ef1bb3287d0344c717c15978ed03f0f13c2a788cc46bb1bcd1a6f20640d77ce926e07a00e27d11c14e346fe56ff9a7e3b1ab6ba1f2e40ca6f3ef9aeaddabf97c032c26904bd0d18919dbc0d6e12c2518940e530234b32075ac143c258a1ee3e46ef8f0d2823dac692d3edb9507f8391f6a95813dd90a629ce2eca7915803cd4ff4f9db2c98a2ab39d5cd2ee3f2a9491d364c80c30d6c731006fa43b9074a38232a52e41b5ce5b25db0e711f0c38ea8dd034fc56e5053697405c34a212b73d7985ac2638fc8ec9dad3dbd00d0345fe6eb41811e12f8c4e0e3d8b206c03d376287b1cd644da467dd77d17bfa030b500dd0fd0e44a3bc0035d8cf0edb999f54740ab4b4cf254a7e68d2101fe552103b50a851823c9489c414f37c9aded3a0a00d362c76c6cee3529c103ca948ed160e7b46e29a8d28609bd08c5759ddd9fbcb449617ea42febd5b3f100f3840505c9c6c597cfcafe8cbeb2e91cfe999475c048323af47d1a2d011d307687ae1b4ac0d72b5dbfe33750fe714cb846937f20ef0c49bb1e0935a27ae7ba80ef1c2807fdbd98f3153ad1be651d32ab7730d1d0763f27ac891d6106d2e398ea653f87637a72b3cddd87a769b560bf826254ec65527ed8ec6ccd28c496952a502f740eec1908dcdc67a1c5e8c8105e9d760981a0e8d30434e06a780b0078608e2ea11841c674977ad52020d9f6955604fe9f8506bd0db52ea255eaf479eb93a03f705decc91c0d998759d4d44cfd674dd571c776bd4215885bfdab5012fc386073fe4298591fa2ac1f031d896ff7b595341d32816e89e96c55ece54b80e2d52af541d848d39103320fb45c66233f263686df047625fa8a1d4825cab3c7bbf99ab9c7aa53acf916b921aeffff4ecbc143cc3a91444ffa5bb28b454dd9b1be87ec8e6fa51c4c7687541ba2e3053621598ef38d198d803627f68f26101478a899550748d121c0ec39060b34949a03aa48db90fdf8e3cc4337659ad2c4216bd2616bb8968b4b1a7c78dfd3533ef550a0a897be55b0198457d73e2f1eb044557b41c2bedb24a59f868728dd0ec456d0480a7f0cdfe721201e5042574c81ffcc7276965d5e12976249c8f882f88fa4bf4b3833a623184e4937c04010709f61fa085e2ce38a5a0dc6cbca593f84c3c102e35cd9e6817001d55eda3c17f308158b526bdf4b38fcf52780af65c47c0b4f0af60508389a96ee996709772888d37ae34ada9002a554bf872e95565d190232d7c486188712ac00bca3b6638d10fcb54ed80c85213c3b4b990d2badf64f56a4dca0ea090954b4f3a4f5f45ae213223017c0cdb135c3ff7a31e1540ae864b1d8f75fe7721a47940b94e6730b3061886f21522438940a20e0192fb05ec52bbc83e5c82dd43d8a52be8e0840a306b877cbd2933446f7deeee005ff477c974297bcd6164d663d73d59668abf19a671a0022f2ed1204d4da4169f983600807d028b71c29a98d02ef3725900673fb963ab00eb6437a76d9e07fce60a6a49eaf0d01c8fa86ec74b9329eaf40f216fa6a35bdeaf5570b7d82f50d4dd3fe399032f32980aae81c925036d8a50b4dd55b95d0672c733e5583c47dda1c7539cd2d6a6a78d980908b893d1d56f437493592d6c90bbc5eeaf56814e1e2d8bb26dee23628c55b22eff363311a509e96d0b2c19b6973986aa8ddd0f55340848777003e607a22306a41ed7aa2120e121701d4d2653ea0592344818f9199d99e61e51afa79ec5bc5ec43b83627ca321b908f164966d97f4dba189411e3f5a573138e824920f4adeb20d0bc2e7d4c4538b77b2cb3836c483143edb1a2c5706f30ec65353feda8bd4b06f19934c056247f0e82bf3a7990abf3ce6a7eed73a1ddf1b2326ae004beb520403361cc783531117b5dacdfc1b206fd502cb1c2b0604e55e78127337ad80016a3ae25636e4fc1a1061c225b30cbe61d6d65d99c94a2a036fee510962c053fa200ec8e69e1fdf45bb1347171940618480c96c0abbbfe3198f263abe529d78db5a68ca40081c279321d06ddd21d6ff73277fc4ee2e4cf8ca492d60071f0c263432c9c6eee3d45997a9cf3ad52fa9b803508ad4656007a4815e215a5daab141f06ad6919cd0290ae260f7164aea08822d92f4c3fec044a00b40820da6f35473c2bfaafef45fd945f4c8a6f3542407e5eec32aa561472b7e2e1660310ef349dbc77fb5ccfc8e125c86815120393e8ddf5db5967d199b5f48a7dab3ac18982b0f35a950b1a6d19add2e376a0f1d5e2ba94eaa100c79f15bd75fa9f8abf5b82fc8cb477f1e1fc88d34d0107f3966c86fa2967a58611bf60cb46eeeea4e2d96bbefd14e2afe12a4ed702169b313aa96e7c2b9dfda581304408787d934470f93e6a80d5761b6845e344387163fb4b7f99bdc3df44b8a20792ed4e84de53d0f11a40f5c26ba702327a89fc5059f8f759ab50a50baa534a67cd31cbb1691fd7fe67e3d12d0bb0d74c3bb186abdde31f5e48acce9a350e4fa952c18892e0792cc21dbfdff25737f8321920e89e885d9460168966d56d31f191f4a21c98c1edd125a2b8669b01afcdf375f1e00ad21c0a476309aa8928802239cb7423bba476146164e6e021767eba33c7c65e6b56316fe40881e9c627248125c55967e62996f4a3bf5c9d6f6328f0c37f59d376386f34bbc804044ce58d2c71d11085fc251d279c0882ce045c5ad54f54aebf6fa22a62375d6e0511b368f867370cb7e1d40887094d28f1a8cf6b9014aa636339ba13497fcb30eb90663313d5f82a949998dccb5123cfab8742a67a2782ca89c6063e3752f4c84062d3837d0c44e854d6b3b2eb290eb2697423414452259dc2aa64e395160a0707eba0f766718df1b19113f22f68341952f6fac40be599fe407cc774a9212863332c8066b57309ffecc1d4b8574d8e790b9197a247f1a9f34761cbfb051fdd1897eff48ee47afe52430ef3c498f608c145fe1d5dd21396c658ebe89b1cab04a13e0c62ca6a7e97c19230f0c341d9344049a990958b9b94bed8db374a2157ed209688475d89e023be3c3b03499404cec85c36d3d8336f67f3423ac4f0472883858f4062ff6ab83b6c1a4ccf1ea2a5d69ec5c97bb2544c5650aa923b492cef8fe8b8fc66bd411fafebea84ea3a67248098971aae26448a6cfffe96501549eab4fdc76bc56ef75e12711326b3a6bbedbc3910c99ced5bc093dcbac659ba898a76fee5716c53be13918c6b2daa6cb2bac9744c96f7f548fd2379da282dd44b1ef9f41f6546310772f8d2b552b60caf584f827d8d96119a668a04c69863f22e706b209b7154a20db929eabc0a35c93438e9ec09d020f73b6bc0a2d8b504a3e5d6e1c6f51ecd863d0f232214147600a06c1922b247311985e7755e81a405930754315b182a578f8d630514638c87177ef49cf553a61fdd44493116ef83ac7372a5daab7001ca048ed1009789da22031496fd321272d472c364ded4639b520014c8e0cc62b8d4414971016ba13884bb6fb5ed50be4fb981417880029bb1a977e3032609344d6acba15af87309a396011bdcee86a7e724812d1f55b45e7c9636b7bddc7584e59f1b501e846c2071c432acde01bbab1bebc35312cf907bb420dabdd8bf0e7168a5416d432c77be6b33da307e111155f296d885a841e66737a54f40bc3fc90a2a0aa395dced42a322002934047c21e8436aa4501ade5628bfa3d157a73e2ff576807a1532534f5fa6d2bd18964c23f406468be0f8a002024707bffc27915defa15b4d4b9df9c9a485ea488909e5c3c87ac9aa11d8df606245b7920410e4797e8d92518602eaea0e46d8855f99d1593c67e7254d20980aad9ffadb0308c7f0a03b3db1dac8209ce2f96e630624009c1984547e43c50310092d56033eb3ad015067060e4e946a7458b4b9510430079e6885b1a72027773ce3d24b6baf005696b00b6b085a20036f202d9b1276bd49c1e463a8f2e0c05cb9317a8d7d147c18906192fa4519809461696d3d145efb64a4aa28d236bb36e044a275ab97f8b06eb2458e5e8ba03db05058f17549ebf120e28aa7ad598913d8934824286bdafe6865c53d100bc012e315189008188626f41943d52849aabd06d9d68b9b8746877e4c3f722b4e021f977ef3ec75a9bbe000631debd09a34c100bcde5e777a443219bf0075c28388ed5e250b98794e343fecc86dc2394880d483c1c5c5840e4ada1ef2ed0c384e250b8fbd2c4be24265119903d45d733d9f5694d00dc4d34366df1247e181c9c18e80f221c24f8206ef7cb974be592a902a11f428b06cf44d393221e6a18e6939d60b0ac2ecb280436914348f1cd2265704d23c01b00c44c394194bd5503d1eedc2b12b9aa7441f98e2e87de863d10aca646f07bfde0749397fc7c28c2eddecf3d3b82c0860fca64664be39b134b7f3f73edd3d54a72490d26474ecb781097f8f80f823aa34b66463f84b27b39b53e29bd4e580690810b94d243baeb4f8a73f06e3502748821cfc68519d182fe6b8f156794b9fe0a16695a6665b846b7ac72ebf343703060da7e3323813e7329a5606045960fe026558c0eafafe37d6463351850636215514c8eb27ec32c875588e2184a11764752fca1db5f70416549fc251603bddcb785dd5c1b0bf7040dfe61bf63be5f066df3f314667b9ea721797b30c6c1011aed68b800946fbc57cba3f108d106882884317e315fbc34fb5c66495424d4ed3844eb259f3ee1e289e6a4f4ddecf909e01469d72f0328b8a92d8c680ed72a4eb1dacf3964e60747ee9bd7cd08ed80c7b9d3c8566508a590bd87d3545270833770f070caf3fa2217bd80a903b26bacd124695577817b1fb07fb77e9c0c40d4c385d3f590aad28e7da4a5f8affabd745a54738772a86501266f9f41086f7d0c70944301d7828c97a49589a604371e2ce631a3a4e51232fc0d7ebe51a38b00c29b0223e063d9943f0f2b68622bffb9afff5f1bf0cfb0fd6049564584602c33f109313eea45aca3d0a37963c1b78947fd2dfc382f7ad3c4e35699a97961e1524f821c6465ae068694a7ff07fa1ca65fd0b1e8020bb8b5de53988e887037d586a2db24ed657f13bbc26cc8df9fd2b4b03a6ce891f0fe67646569cbd84dbe1d9afba2d3f7ccd1df3c890a4d82d8850268d887cda6435b087a2ca0e6ef3452674fd14918793572a1dc92735c2589885c4ffc28b599b1123ef6b0b46ff52291bbb1a33274200de71c89913a35e49d0bae9fa3bb4e8c2f397078b3ee709c3ccf65ec814767314c571ee9d9d5d9ca2264c255ec130ac12c1def532413a4debdf30ce50003b70b818c1a9702ab4f6549a02cbe648f50d3d6307070abef713e1fe494d5dcad102cf2536954c981f58f80098c9bbd11b6783dfe485bd03559d80982e4dcdeaae35bc0c9fd9519cab7c68e8f0d00212cc759720fb4ea108c76167758b54ba7be3f45fce01a433ea31657cf20cb1c259766199aeeb7aa1206424ab0c04164feb6784a00b5219387ea051b3352a7244f10d17cabb1e2837a174ae82d0d4e6a7982e9caf54019ddd09261ddb91cf7beda93b55b9dc6a0d9f4b0436bcae71901089a47a80d1e0e56efb488d036b7be9534bf90e51f4007feaafec460739f1a195d7b405520e0dcb10e731f8c26210a29a6722914c0fdf11564d4fca1d19e9cc9416def57edc5dc22dac13e65b8f3e4492ccd030c43b7491fc6bb101d7553a68ba75bd3db1eb926fb9478399f539e9c818301e30e4bc5021f7d52eb336c4f89fa06630c52ae3e13ce1e3b9195a8a00014b385e0eac9308e127d69a7f70d5a767bb86ed57c2ab53d33fbcf33007448912b6a3e0cb9087413c61b92465f05213cc40623a2d93f8e51fda763af2ead5ecb7571bfe15251a21ba47334cce710ef04b6efa10fb4fd465c09a71f578e716ce823423309fb3cb26ad706eb9f948c44637f118c74210d2e4f5fa4035b34d10d0214b30f0d194e10ba74ba092f6b65d25dbd14dd935773a9fa39779eaf10b93e0fb889d2535f8de75f13c7ea037189a41b470a62a6b796f785f0a3135cf314f4f83f84a199f7063e54425f431f97a25e5f191007a1472f20619d13b4e471c938d792c8465ff20c8ce53ea858fa709abba22c4a807ab58b995065802aeab8ac84c8776ff162bd74ff17926f091d3028c8e68f419027ae1faa5a1077c222a117db5cade4e2d6ec91a0f7acfb8e779cdcfbccdc4cd119123de5da17b78eaa2da16872ed3803e090ce99ca7c75fc026e05e127f522c6dd32519dba23345c8ca2454b1456a39d523a58b176e8b18c927560fa049b2e10b013c5122d32134c9fe56f4cd8d8b57802d2134a934125ef1b0d47262845ab97976c03191dc1bb5bc5c8f250d991d498da1e6d05edbd3df7bee91001100f0fb5dcb12d55917f22b3d4d9b0e8e02d1d694276f817ad89aac7ed60a582fbb3bac72922b2be9b91ebf0a2452e75987d6d4ade8aadb2e2481a3cda5f546ca5fc5b4c2ec10c5556fd1bf0ef5491fca511bf6a5287369e1804939e4063e7f3464fb2ab2d74a3f710aaa420fb6f001b4ca889840e73bfc31e8af4bcb0d78826b2a6965838cea6409b39f7e3959d221682daf12382f3807c36dfb1e858b898ce19620b3d3a7c20ad4c3ca5f68c1dd510039bd2301f0c9f3bb125433c542c5f370d80aa1ca23fc065ce7a8aab0d9c314341365aa70b3d551d92bf9d1d29a547c64cb033a955aa736a427756e86c72256942d0559fea80e5940bcaff3cb5fa3654b8b6037d28dd8a3f89f8c1d018dc950a7a0b143172ad5182593e42df2b76aac06bf6000290353cdef959cb85ef66767fb6603a0347d4cfeeba539e8287461bf3a56eea085e324fc3e0677ba289efe195aceb3f4ba437c5fcb4e3b3ede254d5f7b77d16c3ac87e00e822f7fd7eacf2a742d79b3a8df6b6686f2598feaeb215e4266fd806c53fb4048fccf625c121bf04110fdc92eaa0d6405ff0be1f9b36dba1e1b1fd3945be97cfc1b58dfe6542367e66c7858bbd7462420aeac7b0026100d6781ec7e52e384becea9083209c8f17f4a060740b683834eed8eb4a68e7f2f11a4f5b5f67ae4cc32abf06d5935be71aaaf03df50db6724d243c36e5d0f4bb4b0b809d3879eb62ceca8fd45369c2d22bef60730e562d13623c461b0b73854f0e720b928f6c0c66dbcd551213d2ae697202e41e4b7b33285d1403a90d866fc5352f901f6c43efd2b71b2b1a8ecf559bd319628629a62b295977899ad04d14cc6721f8dc50fcbded2c27ef45af7f55135f2507c365961c770ec4d6e5db400bbc59e61df283adcb9eb9dff0afb7611b939f9d6586ab34782c5eccea0a10d5e2ba36bb2bd40d1a8e9c8ac6c5121b45f59c70c75777d68a7821d162c5d875248f812a4df632a74ef15630253c7c1f1d09024e13c9f1b0454736f22f50a970db1941e9f4600bd60352e156b70f5afa6bcfd8500a31831a6fdd5e389a9eb978d27cfa4d6f14ceb4162280e76ae05196937d4592d6c9574054d48de1cf9baca2292e2d47a8e1072e1a21c6e015bda83349c6e3042c97ac1840cb9b10478ca68c0da191e6c387bd88a3fcb2e40c220dcb628950110f285b1c49ac4bee24d2a3d715546bbde4a04483a2d509d8b806c757891539cddce53e162759a3b870184f8881b4ae83780263a5c6168e8f33918d937ebc19aaf745c9e83ad02d1313c9148e2b940cb14c766732fa0558a85c7b7c69977c1311db872fb6bd10998b70c285164f6d77364c215f6d37bee8433d4c45284310494338bad08e0dddcfdb9390f3b0d406cf39e9f72a7526ff0aee5c0d01b35decd67e54811c0c5fc7481d1522899ed6eafbffef7105c10619c40d6950050a3b856e69aad73349d0aaff677978b156314acc1b2c9d5a1d91804f093f1d827475209cb5a4743d9dca5f94a9537bc9c7bcb3a95109602f9d425a9fff62ff597ed0313f1eac723a10d622d5161d2f3a6058d7dfce5c6d702fb9d1878fc6c5e4b9bb6544901844a07db0a8998f432e24cfff006dca0f48a15aaffe7a54ae4623e07580848fbfc00f513c28e2132f41f80745e1b7fc5bb1e7f086706d8c402eea1ab30f36928bba1294f7f92f109fd32fd0298058c4bc18e789292d1f905d253ed732bd498de141dd3c722cbbb6242ea2b0618908552e39844114bb7bf13e5f1f126d2f524c715dc5ab73b568e7099c02ecf19644529fa9e542e9e52a027b7cd58b8f9ee68a5f4441ff0eaa3437e7d77cce40a60e0a4ba7e77d0d1e703ba72213df8d58064ceb1e9d3f3a881c237ed3e9104a21f4cd0666881fb6e1750ca7a64499610e97a5974baed06c561c31e56a5a0b03b4bd8891991422089b0a9ecc882bbb9963353d5a0b6f91de57709d3f1b6578acfb4fcb72c69b9b5bceb527e84f6b6c2d9ee2b1437f555bba54fb12c2e5bdb86e1c6048cc49d30263164cadccfac2dd730f3074c0a4818f3815126adb7e8102b92d32cc6a30735e392e0f3d12a3d7e9ba10ae9ea6bc377f08c03a59028e0f6d1de91de63bc2e8eefce81b470e3152c01cc0a8685f08048c52d46039f266e91bec8ceb92581c98ea9147634dbc2e1ee17655ea4e796cd2e995ccae471b211143ac450f78c7749dec9129a888caefd85e935648b2d82932db2aecc6937cf9f801e9be89c87e859f81435e7b9dde46db5c9310d72cf50473c9d987a4f47605fe29ca9d10dc469513f0750789caef9368d6262bfc0c4e67f01b45ec8d494d5f213da280a1649838062ac17f041f2ae6b624a59706e84e3f4864244546bb50440bb9ac2f050665cd7be8991bbbcc00c95ca92b844e6cb38fbbf5695b339bfc75d238f6c43a9a7e7f5d9e410c8a2a26fe3c843ee142dc97672fdb3c310194c3ec728f610d06dbcdd6a5bd63bed21dfa2d46181e415785a7d22e910da8fa621bd058e68de99cde0a8a491b19774937278340c1f4644145912e59f5c3b9a66f3c5d26f0e868f023a913d8af9c26a93508451cf10d77a8e490d4a8efced370e69b81b9962891142d5f2484c3bc6e980ae7dc7123d113a37627bd77cdb153ee64bfb005427f24f7528c7ff578a5502aaa07e96045e924731c17f51aad5036a53827f24510fe99c52e5f102042be33423ddbac9b8bcf94a4106532c942306b34399e36c5a150320da82bad0c2dd4a72802eaa3b807789f648f6fe7e39f58ba5ae0ad1a02d6cb44290f847cb45c63c649691f9ca8db5901485436529dc1a8c0e6dbe8c5d84f26057c0c49a827859141264bc06862450822563ee9c85ae37cc8320ff06cbc5808b9a70f0098fba94703140054ac9c1381d1849a0181546bad47b0e23607368829f6b41d72eebd0260090684911fe61da9eaeb480737f613d30e518b994654c1764e20af931a3ead954c8e98843224af3a53e859348cd059af7d6fe04787d6be1242f9e777d960fc2d0959ab911cae1d427726890f1c52c1b43677bdf017506a00fbe32a402a076033e5baa50df29c79ca45105fca1085304bdd2821d06d9bc38c85e7cc2777361c3306f7cdbd6148601e1218533797fd8114633ca646da22586bb062f8b036897aa3a0d6a749178d9734c712bcc31d449f8debc52b6d60468549e034cf960f9220440ed10ee378f9615f367c6ef9016fe0dae254d58e796f5e13c300e4951c3d97fb637114d76f4112be81257a17cd50d6a3f20291107079786924d314281b57972a0acb82ecb1444b41d256138606a844716188472f95e9a539541c4cb0afe93207882babefc9d69485a692c050d37594b68c409911f9715fe5d64a3cdb5d97dd8540c0b6cd1cfec0f42314c29da958bb5503cf9eef330c42a1f115e826db4781e3115823be8065191f606a2a96f3f83ab2381881b93bf8bcb9639b59349482382cafdfb7bcabcea1c2ece1565f6267651215c9ec527878d1f18976b31d140f6aae171830605b61ad06072056c94b202c9b306040c1ad4689a0aa60f1a14986a387cd680804183025b0d84ee1a92b4682061a5a194418302530df0bdf254994aba76cf5e6da404867c0b07b3ff32d88119c3fb8b4b0ec63e795db89b22fde96918ae9c88ba8446d727e878951c1e3989241e1fa3561a3a9138e328405edcf9364890e1471b96548865979a5457e6133a39994c7be9dfbd86b5ff92ab7be8c20be3af6d1c2ef7763a8d1463663102fb6969f440e34deedf18762e89f8c131c6f571f7f2b52f71168aee1d76cd12ae4e62a6ecddf5cf4c0e9db6f11b0b99da5798393293949d9512a48f59ca48e6fe60a09c956b818590ae2786417cb9b01f3a0115a4e892ada12c87e1f7ff42a50a4e16f923365aaa801cddc170dd8a6f97f8c6d780bf8c1cefb95646c2cb8e21f380b479974545494ab8b233ef79237717b93e021c812682a752f92c1400cd22227b76a157b98d4906b7af364fb7188b65eb7c291b078eb86d7162610b1c10dc22c332f9a5d6be702c2a3ddbc17ecb69f4213a7bad591558ca44a0cea811d30bc920ed9157c5c62bbf60fb76ad036f4285b1bf8871269a9bb96163196e2f6316583b9c8d0f29dbd1cd06b0810839854906df8f7df10f856a14948352aee7329f1169830955a32433ac4d18fbb1bf5b3c643bca2a6fb1216847d400cb4dfc6c9250b0abe528c60d8f6b195f9661bcefbc2b50c5eef592dd1ab7c91f0605c5a6034bbcbabab9efcb4bf70de4acfe9d131edcd250f17e4fdf9a8401e82f7ce65f30019d934157b1c70dd47721cf6bb1f60d8fe82461188d534da467d05a089a81ff4b1d8399e1f6889c180cf0708c9da8cba1f81a7a81403235a5425d52440a541beea409d82c451d527be730355959b04697c7353f4ddea092c656c1cbb3768094ae9562590e801f244fbd14eb5a88cdc340ac7e2ea6d4664a70a4c564748bc11c81cfd476d49125a43e84c1309e1d2336189e9eba9d8e14eb01e4f5036a205f9d5b30542a6a3a165dca8cb5b37265ace9f7187c49403f46c8b557d3a075cb3a716e322cff1bfeeabc9cd11b4c133affab83fbdc8e0110bf20178f8c39c7039bf32f115e87829a70fb6d5336de10fcd15a6b6dbb89905113b2b7947b07d0099209a7092ab87d2b6f9440461180d00232a800821764210614921336f106d78005b7fb2006061242bc084056dc3e00381c5d2b7333bf72175c5c1e22de58411a000322820654dc7e8d7afe628c16bcb870c38d063d33a0c1eda7aa945284505fb8744b245ea4d119595280160e477fcdcdcccc43b8cca7cbcccc1c0e56f2430ccb19255851c9408cdb477138fa9b6925cccc4c739a2d2440063258e28cdb37354f369d61051a45423c68a20a164d2e3333f3e8069acfaa7b8924b7b1b8dddd2f71383a4a0d31fe767a39a301978f55257070f9df123e974f7a017660022014c185131534c142904202206aec41124097efe108824215510ce18b2ea878f2851041c4aec45a70018e908411975fbfab66925471f99c0d91158db0a4bb7be3704ca9c5100a70431b0888411948f020c910971f6300c5e56bb5c6a2e6beba270e580083234441011a2b5875106e37925577f76888a16871431b974316b678c1148e1082d01165c0c0490c5ef08222b856aedc2c99598c115c16028b3c7001116effc2267333334f81c1118963dab86005b72b83809b998170994db0e2add6c8b1d0822a5c00c46deea6f1e6045298207df625b3c1cb0a47b8e10b0c0b9618e1e787cbaf3f4a2eb7a0c8e55aaddbdc56f7b113481942dd7c2f27c34611525cfe645e4111978d3072998d90c2e58acd8021c12eaae1775fe8a6d5a0cac719fe32904b2576cd375349e984611869c3c212aad43e9d2d28c8fa418bf1868c32369a259552729442e7ce4961e0b969ad8d78949d66d89c673a4f93d0e20d29ad8c3273cee6c934715a325d8c321d83cad1a22aab42a9bf5c0ed306abbac63b6f31aa7ac3ed38a77a35eea14ad3badf740dcc13226c5c88c107907ac550c7c56d7238b451ecb6df06be6c96a585dff7f0cb11e3d90a672e6f5f5fd32e708258c61703e9bdc028e5462ea6ac93a067dbd086e32c891136c274602aebc2b2ccbab0cbba66aeea8c0bcb4617968d4672f69c32014543004dd912eb8ed896ead36be3aa3aa3c2240a265008ddde6ed03db1ccc2392541c8ed30e7f6283b69599c5ba77660dd53432c935936677e9c0809f1e4c82a8671ca6c528523e860698359f6c477e6da98f62201475f4f9feaf563ac05336470320862ca6c81c4875baf8bcf7c038a297a56c0822890008915f30f2e73779999f9571e46d5dddd2950c2ed208c04e1c5ed5f288825a86007b76d5a5630c690c2670820bcf80188af00830adbe644bd9495bcca8795144a0114972f23482965bcd594cacbb293d2d0cb9652528e3bc85a4669c3623c628c296793c83559452d76841136188d76883372f4ec631b44243703bd35ba05d6eb99668d2e391ea3d3536e470560ae15e43a7dfdb28de3719ddeba40b69a9849b4ec74bb6e184b1682e49e17565f606ca82e9fb028936dd134c4b9fd59856020d65bce95b4082d32cdece6cb36eff8c0a6490e478c32a1bc3a3a872525518c31c67e903ed63196160df39c6bc5631876591f05bbb12bef75335594690a84676951e3c338e7a4315e9b6a0b8377d95e792513b41d5af8011341333320cccc17861769706728b973da0627194d40c2ce8a89db510c816467351bbbf4c99132ee8dcd112972ab41bdf36271c318548528f4c518178b1ace5897b70931b0c70f5661e00656491b942059e018791766ac28d4b01645791285bc18e2f28d42536070d953828ef11c7a6186cc7f57450230a870ba9355f21babb43bb73b7a1c8d420ccb815d49a8a3875f8ecf9e55df0cf1d8e7a4bfc0d006e774e7693fde99eacf18f4974b04df9410dc3006cdf440e8872bae7cc4a8b872e39e507fe54fff4ca3c21192b38178c37b9c92c538149f6cb7c1353289d64cb70dc8c9e1788932d7036b44197e07ca1d56f565120cabdff7910d1f9d24e1ee1858756551b3a12a6ffd2a6224f2b268c7478265c8be9c2289e87b304c622ade36106f30901b58488e6c41c633675dd5353a62b7b4ae23eabc6c5a2f6b4cd0b49d332a534b36c12a0a83bc12a8054058cf3925a5b3cb78a83d9f52a872c7fa75cd02650fab78aa549d1b6be48ad25ca7172703cf60676ba3d798bb5bce393bc9f1269be018fa2842d94345bd02a3505437943bf41911aa90213d80843037869b17e26b1063e89fb89489151208685484108cc03acdbaaf4ff09ad79c935e745ad6690c3744952fef656d58182951c318d43571d5e3870d4030802324870807c2704c5f53a96058a5bafac42a1cbc6bfd639aede19c52a89303f372bfc03458a6655836b2a90cc37258051361546d59f33c698ebcf3748e7850c31844735dbf2f308d8fd465e7b54663d411675b14e1907f92c515a72274e1862cd028a51327dddddd6d250faba813ea44044f801822ea1141a58f973a49c2d209d694fe07c528e5f0437e60547322bbbb6e81f4d14994a197415a56513645064a75c418fa48e79bc6a24b651c22441555b45ab91365e8f95e47542020989999d94e8d6f5d4a2ab18debc12a3adf0f23d1931ea6a1a7077283904b2437869bd3778d05620c3da5cfe8b1295c6a592051865e4754bef4995230d54c90cac9130cab35ca29a3f4e91a1d51268921caccfb50a4cedf50fa14f96058fd5e609a49e79c8f54623d581a4c84c023848232eefc1b23f5677aa6a3ac136481cb716e46252f8263f2987c0de3ca9e1a6904d50d5f6e4b71fb7dcce7361062dc163a810e6e9f6b0c50b4e24b202ef644ac3deb9c72ce39e794323e3e976b90136cbece297b58cd39e79c9269602eff50c6e5967389d942dc53683246196e991151e51b636666e6d94527c14da834c4584ec684a8f233f66c6e19e501e2658cdc842adf3891a82d7980782b080cce399a53bbb023ae23aad4b48dbb2e277e3a3a29103ae29809755e6a9d775d4efc78dba4552a81c3310fa04373255d97133fa40ccb418c31c618638c31c618638c31c618638c31c6c8d4ba2ecc5e44a08cf44544ed1aebd1ba17a8bac52fa8f273ce39a9455fbecf9a77cec945bdb03e556e613e0779b50cc8122ab7a3fb00f32c5b90615cbeac01222f202d2b69e4c338c67d410641b2858b5a41d90eb46ed96cbd30bed90a662f7a31de68c9cc926377c796655f1d2a3905a42813678d325172129813d686556babb162768e9cd4f0fb5e6e23f5cdf7b470b64b2d168380c862c69aeb74b2f53ed8df57ab659b7bd0981f398e52ea20bbdb629865596f2bc32cb5a8d5943e9e5a16bdf5b6ba672a4f9fa8fa57432c89da3f08e79d4ca965bd50cbfa4e33d26a45ba61f39a6d5ddcdd4d03174059c293ce49a7e5644a8c523aaf3973c0289def49e9bcb0893563d4b22e2ddee1f2b42ccbe6604d8b4e6b5996456d965d6400bd108984e40c017203ce0e12c9237d64113f7c44285f8d4e6290c1051b95ca8685c30055b1a86559148b31d8c56188dc8cf0738a3758d5353dc3420c3e80c42be25094d2c3343e488c1c99bf2256714355031ab08005c8c8084000355a858a350d88312a17765043b9b3c3738a37f8871e514206979c0eed984de9909e0d4757d3c1926be346211d18b941344ec7e8d66b44e4b1288a3c3014726bbcf4c8352ff71e19bbde49af01468e21d910fbf6173072ccf69bde40ee1e18e6cc0ee480bcf5cce9e05b8fd56336d45e79845a77cd76f740920eefa49bae20df0d0cb75f1d733a6c6515d7d920dae5379b33af667b04d650c88d3b385c55aa5429ba397d75a066b623ccc0747777b7dcb86829041cd595ef962d5784d1c45545e9eeee96ac457777774b8ed2dddddd92b5e8eeee6ec951babb7bb66cc9b2bbbb5b727311049bd21156a0c0a668ba000811144589439a107280240ec1c829b3092a5c3125ca4700222851049c0f0a119420c21238dbbc1d83e616d6b574d49d9d9d236c3133e3c2edbb207b2ea12e9a70654f94930284b8428c139448342282124588445172a89c47b8bec09981c2916bc9f573b82d4e92eec8050da0fc200a4242d801c9940bc34767600333a314f9a346882bc208820a4f8cd1c54a4e286af8db52ca9be37419a497208ea6811ad01dbdb599037ff4225be09d8a3354c3991f37434192c6861f1dd3bf8c83a55c09e2d83c94d686557d1658d5383f1a488f822adf6e6696b40b712e0e00905c0ebe6c533510916300ad4c2f3d475e0aa422abba74792f5347850a95a0fe3181eef83a5782213624dc6e4792de23c7df5e419dcbdef60efb06662f8158c78cce200cf2ce28330a377047e79ea09c420347a1263d7700f7c42fb205b9c371c184ca0dc08d424c8670ab3471e30e6e6c92c612aee66559a61deb9a1b4e37fbd4344dbba16b3823c2317c7e668710d528c4c40777bbda310dcb1e5335944e7ac9a60c50b4226280a215e91615a884914a8c314da680e4aa6e6c42e5c96d32859e1b9b500192b9b109951eee900ec41d57f729a552a0c2ecd91d7b70cdc7abec32308df68ccb3206dc6c665716b6dceca458a37a961d8b37ba67cf620de999ad16bb9c50e3bd47023b10874419be8ae592cb5c30200e21c0b2617c12a984910a6b564681995143f9e43ca514cbb2ae7335100c87dc6c034d44b5491a61dc8f409d9b61318b3bc11ab9e3f1280af2a5e7a0895b7a778d71707777758fb36dc8e2928eb8f2d77370e4460fd42894032ab46c8b5c8e1874bd6b1d58facca202e918ebd623f78ba8d24bd2eb439cd3ed1e0fc43a67376e877ce91aa7a3be64c30e4765d23b30c710aae9dafbda8df51864d046e0eff55b1f62a587d5eb8e71383aacda10ab25ef26fbc5e1c878bbc97e71b69dfbed6c185ef7ac920d716ee95e27b91c38c82ab772e77890cefda6bdb07b7c090cd2599cd3bd6090de8e0ee794ba2c0cdbb9c73bb22ccbb22c0b0cf9da4d60106e07b79982a8d683f04b0ff9dcdbea6e7d639a5feb1ca7835faaa0bc31d6c4d875d7bd391c9d07fe7aefbc0eecb64641e440be69079f7b9703fb750e4ce9e05ecfbd5eab31ca788f51a65402c3eeda3d30ec4e7afd4d93c0ab82291ddeb7ce5edf36ab81313cddc89d7c27b722b408935907ad0ca4960a787e78b840c1a4b30c239e60d745af6d34fa28b33aab365233cbc2d0a71f81a3799d95968123307238b0530b0c677c644ff9c8b21138bace4a6775d338ec90817135e2f1ddf0862b757e2e46644379fa3652ad6971be3b47d8cda6c5aefcc5dc1398cc28bd2447775ca7d70ccc5590d787643aac4b7120d1f3d5e80c2231b23b7c2b25d82d0e06ccda41b15bc78ed14b4f2fb543a610dea3fc013479958d6bce0924caccd16f78e573e7e83309b1867d3a669e81180477ce39b2744ac7f419a86b6851387fea059a3f4efaeb4944ede16155d39d28d374caeddf89249c3fb7af273dd470fadc7e68f5dcbe12c9f4619a234c23af22235aed9aeb436e1863a457bbe6eb18699d3e768c021010eac4b880b88090c80de377547e0447bfb2784c042c2b1f76b80f44ae8fecd73172ce39e79c2f62b39a76071f745696f541086663c7902e531b2302e2f992db2153bd431c4a52051fb29042843494ac88ccfbb083cc146024d184094270c1d08adeb22ccbb2ac17b1595976071d248cc0c3194b10a10408b058f1f0f0f4d8ace87be83476563daa0b8d9d9d55cfb7a2efc1a3b2b3b3b3eac156f43c3c3d00a0085bd1f7f000a26f45cfd343ac12b4b35344b5a22f62b3a2d687699558d50e970e33e703cdce78099441e5c8652128822edb1cbe1bf86ece77f9aa92c6cecd41a391d311cf3648bcc58d3e6f363fe547200d62d99cec1a5d4609bf85bf5cd4ec334ac791cd9941329b33533aaca96dd20689973c67c8a79bcde4bd381d7c2ded371c32e59175977fd7aee96ce7f02d30e6cccb8dd92039f3c6471b84b113b9d988e3c02b0383e4dce6705836878370d94d4dab831fafe3bb613cff8c18036207de68264b36e30a41c17367b0ecc72a16ca81941b6fe48edf120d79c3801b117063cc6d8954687708de68df318d59abe7f56827abd8ba31a69f61a41bb9236d3f529e33d08454be51c8091c74db1bdcbabbeebcee9b474ffa7c763aba41d54ad0365da372a2881b73a3d00d8a6ee8c2953f5a5e9eae6e8c32a18da53c54f94916cbb2acebb2a4fcc0309671e9516088e3c2e5cbcb88cb65b1a8330b6a188786fc88ac2a7d03290fd57af8a97e304da7589e7de52430c572d2e5d536d074cd861b4e36d0638069b6739ca623642957fb080cfbdc774ce77e9ccaba81692cceda4081e129071ca4efc8be82ea4ea0090c4f25308c685c7a03a21bb3b851e80624efd57b771b5c1357d4058ea1e76caca27aa1309a508c04debbff601a4adf81db0c3030a4797a7c6ec99f8bebb61addb66b1b73a3e7d0705c185d03f9dd384656d41f376416870d40e8850c619a14669d64d581163517d428d4041ab73f9bda50b9fd687afb3144acd6d106d2ed86e9b66d9af58b6ada378dda5048107aeb36ac577b28e45a3667deb971bf6166410d6dda01dcc743d4c8aaed9876c9e1a0cf7ed37714462839f3ce5f46eadbb261bd8937e6edafdcfeba8601dda71fede6c16d9f216811c6eb6a8a7bbcdbe3eb29fbbca3c7abddfabcd753d75536a614f5543db076e0e9e28103e3b4aaa08d328bca77aa970f3d734f52156450d4794931ca4f2ab5a1cd0e1b166c5543a1feb68a86805eb630417023d6049035fcab640b5c24fc9adcb8fc281370f9fcf67977473426768533efb903fb4c23e3a2cab7256394524aab6b777fd69c735e16edd91c696294315e1d8683b0bb5b4ac9574da1fb4d29a5564a006073ce39e7ec39e71c35a972e3a2ca0fddf8ab07553ebca0a8f2e1cb8d77ce6931c14c69f7114670cf6e29659d9f94d2ee238ca01614aca29fbeae0b9b394d14fd60a392cbbd12069d7b7d82a1bd28a516bd3e2f8cc5e42495a3c50dab74c24d44a15ed64f16989cdffce6f77dc66646da4c39f344098f9999a78471f9bbcccccc1c9e6af0831e301191e80b2c566b1161817511828c480b8ca80ab40b1e287f71c357f1a3b5400408b66802186830810438d86e14aae287abdd2854054f103a7d1f6f4b4449b43efad3129927d2d731a2dddf744d6a251f43d7a4a24dd1406fbd86feb43accf72dab83121ff36d5d873eb5a9f8552d434a2930b86cc31abec1d8cc5c82cb8e251b9c247fa7b655f8a48c55f470e9016e14a2228b5bba5148a808035174356f631a0ecc1b444ee93174d33132064d1aa2d00c768296500146105eaca69db9335edcf0ebe2862aa21bda7071c3e824ca0de3106f71c33845c7081a572841892240ac608b958472e56bd7ec5882154f1811c40b80f0c34afe5da313021e402006932a20212ac24a52e901073340c110d0f0a107ab1f254c86ba88810e90b04214ace8a2ca119f21c658491f2c7a8002222c21c20d98ac64d1bde18984c47680827eb41843a34444586c455f40e976a85020265020b9a2ca04e5800a2639b882490ebc78e249155706e403841d2364f04513a4493481769050a21d28be688109030a121272a24888c9115fa460a3453f41f30912346ce70788c9cf92f9f3c304fa84490b80a052e29e90c1d11f263e38f1226b7952440550158d880a25472001cb8678d2e40ca0215c0f08091533f80172e2878a19583183c0662031e387c80c278accb8a209e7ed3499021abdd3040d228a9a4061e76255f59aaf68676707043347ae3c0b2e0415218390cc84140adac10da3942b3f9b0ff3318d158b6c909621a1c67949d46ace9a96f63cd34f9ba2737233b38f92ed5af6f43561f54fb52c86c48e25b1c7d5c783bdc8579517304f35a80bb8ac5f6f6ec707acb41ec48ea6041b02130213e23ac275046c084c08a127f868343045b95aa3c7f9ee95b24ecfe1b06e6d3cb209430cd19a1035c47894e420e98b7ca5e48a20664398f3ce6d5b6fbfeeb07373fa13631fede562a78b6d1b8661b761c330ebe5e36c80b101a67f70a485fbeef22dd569a513cb492b27dde278742ff140796008733dcff33c9b5ab13a50d6e4d5b37c377d76d5f340124b68c30cde4936b572d24defc0d4ca51ef6a2d3dfc6e2d3dfcada91513ca9a6c68c325bdd6ef37dcb1d8efd506f96eb2414eaf3061677160ee674f8f4f6d274e73d9364dd334124923915a5a5a9e812d24128944221df16a090c616ee91d18da703bd451decbf55e2e898574d477bdf074bd8fe47d36acd78bac5ab12890747ae7c577a005632a9148309754229170609cd800d311fdc423ebb2308bb1ecba7ee09c1e8513b098be73a47b1ac9f350af25ef0486a753bda79225bd76a7a326e927db7dbe7a383374af36857a4da15ebaf7959514ca9e5e7ae9a7934a27ed144f2e258fd4d910e7c479a6538e33994c26ef1dc97b67f248958585e519c872020f05c67abbeeb5ae7436349d7414ea04c69340eba6eda54afae9d67a3a9d5a98a3818fcfc6fdfac4b09c4b47d9374cb53d48f60bb36c88b3dd80b3e968929f98800300f06a4ee95d4e0ece86b3e16c26c8b9f526930a67dbb689b3e56c97035232c1270dcb9e7d6ad966433902439c3bcaaccccac171365c2e03439cfbe372361ccd6fb41b659163ac95e5188d2cceb58ee19cd8e29c34ee226e244323fbf6ecfb68e52397bb6c6f7997fa8be9d74ce0bc76026b35bd391ede4d3f81e1e99e4e61bda747ae395d23915eeb4d9214b91ca89baa693bea92f4d349a4a77c763c10f51358af6992dbc11d750fe7924ca45a2fe9a46b26b07414e8bd82a56b92e3610251a8470e06969b8ea383a5ded4243034dd3aa55c0cd23b674d51aa67796c281b2475d24d20cec9b338a7ebf253eaf12f5dca4e56b9d8d3936cd86227ab3a4b6d28efca0c2b1fad8c482ba351c6ed084fafde88f4d3ebca68b48d46a49fbcd167bf534e07dfef23f0ab7554eb353047de510eed23233525afe924db7d922e4fda826ccf4ccf5036d4b9a8ebfd048638f774927d09acb7b2b0d810bbd5862b3fbdf41a20c986dcbdf813687dc574ee28d3a3293b733a4ccf2c733c48e7c89709e4bbdd74cd047aa79740d4496078baa46bcde9281df5d36f180532a7a3fe344ddc31ef264e07e9f5c4aa4e3ee42ccee96e36d3c07a47a00d1c9cd3e580bc2cdad88a40a21801c9923e02cfda20a3542fd5c8c6c2b05abfef8ff1baaeacaf679aea5ee7bc184d8fd13ad91033d9b07ab6b3e12f67b79970c6e6dadcb68ebab9d62d9d1d2ba8c434c97b56b896b790fe9dc5e5a9fad26bedbabb7cf5e5f4d59713ea74d42d8e47e9d58638c4a0cb81965bbf81ddd66dddd66dddd66d5b67eb51af47bdbb078627d2bdcf1218d67715a5bd7483b229d3513fbd04a64cf75eea6a57bbfafa5075bbdad58736d5a64cf674efde4fefee9dc0f0e6a24e5d4923bdb34148f76c109777bfe1139863ddee2830ac36c7baa416ebba3c3ec5d29d391d2e76b2aac59eb2b06c1bc771dbbb6b1dd7a1b6d777dc86eabe752b2b2bcfc095aeebbaaec7bbbcdeb7edf2dbe6c140bae9a7d34b6078734bd7361bce5b8f42d9707be9dd2b18a3aab3e1f653bc377d02b99bc21c8be4799ee781dd3dcff3eab7d78defe671560cba09ba39b445763200b59aedd7855c7a59b4af6d20461f3908e8dcd468941dbb4e6fd1096407a993313b2972427dff5267f98a4be9d74aa5d25b4cafdeeb2d8ec7f6920d71a89703a9ab011d12896453dd8368f7de69f75eba6727ab6a2ddd04865eeada67c9923e5f5f2ee46a97dc0ca4579bea5e5326934d75967b10d3bb73a6773795de59cf7be9daf612e8dd2aa57ec32fd614a56e36f5920d92ba6683b478a55730dc52df492d8f775929b57ca8d3976cc8b2b2522b0a85aa275d23a14a276df5a59350f5a58df44a3a9d4ecfc0138944229148454a97b7f45a6ba982a190bbc2bbfac835de570023c7789149af41fa4d9340ee750339206fe9a5cbd2315b02bb4b0e023aa5d2b552a9647a05b793c0b05ed2bd07a9dfeed56fafdfac779325f1259540beb59e6427ab381817ee8898a2e71ae046211d0c5db066d8c8869131566198bcacddb2b05bd7c0c8f11072adb33cd3a00c0fe3a9120a6f3a7072b14b81c62dc08d4252005d794d7d3acb595cbe72d45b8274afefbe5debc0792d1291af52fcdcfacfa785a4d8b9318a9fdb5120b95247ea9e0d73a6c5f1a8ef78944e7a97e2ac8e9225d9eede37d253f19393c1e5da67b5a628b5fbf60df476a45e85ccb0ddb329ad8229eda5578eb329cdea88ac2abd644321b79e64432137dd8161e9560cf2bad4a7ac294aadd6e3e172920de272cd06f95e73e6ad36675e171b59c5f2ed7b7c0b18ce8b7a733be43f3b59c5624f5f6db86223ab509fac42799e0de53dfd740235c9691b18d66feffa468ec7bcd90ca1f7daf764431db02d0339f35e6d6743fa9cbe593859b5dd64439d9b59d3e94dcf40930de5cdb64fa6d1bed970db3e0273e49633738c9ef1d4d40e79ebe5adf72c1737094b2c274c30f59df243db0a1e6a34d78f8c1f32929001c431d7e7c756b080e5183e6320a92c64c5131e8bf1e48a31f441f981b2a3c100055320b17a92603245135a54ed46a129829e98c2074215bb51680a2fa4a8dd8d42538c3144b56e149a828a16544e77de28a4050ca60a849c5071a39093266ea82db9f2366e1472d2a3055d792018609a14cfcb31ce5cd5f7d58a3919aa193da14137b1064bf2a443ac8e9e9070a431747988554c64190aab6405aadcc9431a45210ff150d7c824a3256a3fa6ae5f1663d5c6440c8587ae1fda86d8922b531a0dea1a2c8918235f832bffc4959f1893a120e9e4cac7398425b19d44dbd17aba46c680685434a2c2345188073f577e8406d370575ee3619a4d5e2b826992c82018ede7ca51d195cd498c00f92c3912248493219e1051c4959794e7ca4b3ac59597e15506ef304d88218144bcc1973c850a99240b282edc502629439a31c60d251a5726e1fb549f6af4334a82257922975c6530cd557451b98aaea2abe8a27215613d57118644264992c4c6260627169135850605511ea6a13dd4a787f6d01eda437d680ffda13d14c8083becac46f647c78851e36af4187929abb8d21ec629358caed9548f55e47a8c6c2ab2ea8679e802754c928e91a74f8a00e2245ffd97e4433f5d135749ea1227576249681011f10673b74dcd1b9ee0102243c41bfd0ce044293be2a597725d2c50eeb0e461d5ce1422de90729118f5e055a992c6ce6af4c8d5e055a952a5ca6a647794f0778852564afad1a6fa96e3a272d0cece65309ed060e7f61cf13972c6651f2445b011a649c91f7944922b5b0b5ae10c2dc2604cd4c87fd16dabd9a80513f1631a691975998386aadc47265cc4808a007e187339a8637808642668115fe54ae1f217970cb08d3429aaa21422bacfe5c3dc28b4839fcb7fa1870b976550c721a60939a88d70104fb92cc60d59cae5ab2ecf30efb96031227dbc9123de1cbe28334f8a32f232e5e322729d95f4611d3b668960d759c929a1f4a95146dee68b1d93f281fdbaac05a67c60969d397d9bda8758fb34633dd0e45f6e8c3272678655365451463e72395eeea38c7c287da2b4e175d904ab2428975c57fc625b328a2ba3e401a2861288a56c422eb90422b2c4ca254dc8032d09ab4dc1d0f74a79b9237bc2d32926b690c503c4cbc34430d2c8a88a97b731136f5c9797da8d0f359feccde120abe478b938c82a29ec6e8cc55b20b5a4507fd956e1333268c41365e570e85c791f999ce0072f7cae64e24a98b803ed88da524ac631ca8ea8f3118c7b7d4620c6a4f8f2de398779eb2cbf97c3a86658b079013c4599fe0473b09b434ebd2c51a68f8a07e84a4950c338f4c306a629eac6428bf4ca976c50c31916244b1b1624b313734e0c06753e7e9b73e29c8a708e94d28eac8a43680cda985335e93472a70d2a8f7119da74a350155cdcf944ad8207b76f43c5447d4f1bd6969407dd363554ddd1f7cd1471fbb288a09b183e9faf2752d979128788e29458647d3d3eff7e63c342d0cc4d0c2f0451fab95c09fdf5b9803717b7fc6bb9d6625d2dd9dcb66f82b7c7ea8b40989715d483ccdecc67f319963d6bb9e12f08871670fbd7f146773b7597d790b2b1635c6c0abbcbe3aa86d831291ab6bbbc86ed2e5607253ebe6bd7a1c5c68e790dda5bde6275c06ef88b6188e8a6633ae8fb29e95ccc69d12d2f2fb38174779bbad45bbb74aa658f0b1857a8d2d5ddddddddb39bd2ee9e2c2d160bf8a36fcdb0bcbbcbcb6b5c035f5ebebdc6cbc562795277790a7b99dba6c9cadd17cbebe2eeeeeeeeeefe25b9bbbbbbaf88593750a07ff4f5f92bd3804c61b6478d97d4794e777906e2401110656e122063fada8d992c89ca379c49d150e32dfff1f2152eb91edff7812bb4fc8555f3ebc1d3f2ef2fa00edfb5d7007550825d8796a74096bb802baf016e7f01b56749d4bef2b23c751f2c4f59224aae136939cb2feb63e52e96c8f795472e4543cbb7fb68d98e591f97865dcd02533db66d0608d7dd289d8beb14a6aab1fafdb2e60c334f8b5a93f6a0d6a4ddcdf30c2dc2c81a3552281797c7cf7c4bfc00d235db6351a42277b4d28a3693c46666fe90f62ff407ab26101b58452d2a03cb7ae47a9894d05f3f3a665eb5c65d6a7c035d38cee5dc6b702ee7147de971a581297aed1ea883121f2d375d87d451ef401d5a6e7af6d45503638edb68e5d19d27d11ba894d4fe486136a34914a8d0440a4148a63da250c69d9741ce74cd17ce84f57e9f8cf392dc04a2cc3c0539900232667e8b43d10bccfec08e59dcf6c8a52edba3864b0e11882b9e959f9ed914f61abea35e03cb4db7401cc054dfe53aab1a60aaedbbbffde53aabd4e8918a294e6ef61b9866341232ff6352518222ee3c0670861c716708564bcc2726d8c10d4759472a4c50c49d67214503f71af7c1bd8625a224fb8b2592b2a9fe77d4b967d6c7665398a5e13beaa9b63e3ed4596e7aca07cb4d67b1a66f1ad059b1297ad2e30a6553f4dee38ae76453f4f57165b2296a7bbc749eee7105a4632615d903c695f6c3860556cd005d4c42625696ae85f47173ceb97dce39a7cb3c4d6fd678aa6b5e1e461730aebcb83af59c73ce39e79c73bef41bb64a735a734ed4794c2fbd823cf5a4b764a889bd04f214a92bd4af93c02275d5f20af6ccac50cfe6a421ae563877967f67f9067edbf67d3bcbf6f50a96a7c6579e1a69e72982ad7a9055564ae48bd4d537b3fa5ea4ae585882609499e70fb432665e33403fd3e61cd91e2cdfc602f214f92a4a0584dd950b080970a7661f65e63b8c3afba3fe28e3b3b07c8f1cc5a15f5ee33ca91630ae6a787f014b4f81a49fc0ed2ea0e9a91e5d57e3058cab54bc2e487cbf40247ab0d5f716b0a7ae588e02798accac58de5357dfca4196157bd379784ae7a9efce433a8f77ee7472f39d574925d3fc668aab49e734e960bc016d46d4be0c31b0aabb5f6055a413bc612ce673c8c12e0e39757becf96a7b91af56a240b9718b1b85b668c1fd1eaaaecd8db1a5e5f1331ab644a568a8ba661487666e68c372946602e38a2bcdfeea1757d46253aa605875333a25d6af5f34c495cb37062310573cdf5baef1c681df4760cb2587234583ce6af408e8ac469688ce8a88121f2d1ffdbb0f222f3852060856234b84c80b8e94b1b36a3983318708c4958be561f9ca531968e501fa129c31a36a405e2ac7a87c1c5299edf1b5fcb271fb51a6df61e0403f6f46cd817e5a0dc88bf513eafcecf17d2d2d13076a2310573c3ca8b39ce7f4956b40e75ab7ee04af1b391ae28ac787d8312cf72176cc5c6101bbaf80dc5160fd09f45e024737a57a6c8f405c6dafa1a19081822a2bedb28071b502c6150a8cab1318572630ae78787cd0219d87a79ea7fb761eef3cdcb5974055c7f4b7990ac65505e38a03e32a72387abc63fa6b31483a176b55669867749030c38c283d48620a255784d1c51056173fd61503dac512120a66308104308c1cc1c2c8ea02a30b9f14b8d0838c5e14f1410c127031022017aca81427e412160f33ccd7b16b123941ab01a3e8a8144df784410b15a21108000000011315002028140c0744229150341a080af90114000e839e486e581b089324877118851032c61842000140800cc0085169133998bc9d884aac5072b0f35a832e0590940e8deb236dfa88a93502355afe552f8ffa176d0d09ea0723f535f0ab2171fb2009b19a80439de966816bd4052474882ef5a390327019ff88efe5420c14da65c06c9d7ab52c317300924bd47f2fc8684775032a4c9a2b0e2f3c17d4dd97f62d37dab9cfa4fbc3a469a3fb2d81a39931b02d596946c3d615d0f5e2189642a6b6f7dea0f869607931177d5f6faee9415601884a0399ac6f750daff09e3ae68ade42ba11c9b34c0cd0d5a7fba52804d84601d5fcf239bede471768ab7408319768dfaacfd285804c7106a2434c83d3da709e2d7ad49869c5a3aca07576d229c285648ce9d1b593b9f8671ebfa9c34694b20f66fba8f582f03c00becf0c50f985542d964e8829213b730a147fb7e3fc75d5025e328db958e81b15a56b43e97be83906b6d95330e4f6615bb248f0f8c6c0765e638c4dee052bc2aabe2c1e6678ebc5cff94de4e918472419ba6245b0c4e347c4e07ec41b2b96fb44ba327e573f4c972d19910e63fadceb0bcdb8b87e2068d5ed87964f23b199dd469148a3f11b6eee241389beceaa15d486c10fca454d3b648a9e16d42cd833b71fd13e6a2c2181a57de79ce179c080791795ceaf9f8e36caee8c5e8c6c00f96ce3485318e57c8a295e0b930b3490f8c1c1bee8d74e3a9c7f3d02f52284bf6ba35583602ef9786b9d3294eff223bf7b336a873a9c2978399a456c7f488634c9891a2f42991d80cacc447f9689bfed03bc408fe426b5d8042b7e7d1255b01e2707da3ed9116eb0ae6c36e40fcf5c92fab9969eb53245b8d50305ce5982845697663c8e26d81dea64f3192a98df2c28e57baa2c661ea5a2629c8deee29ee7e16d71ec257c97fe04f31abc0606d72f30c2e05850f9825a0494f39efdfdd8082acd766b83c53806b5035779e8e79696dfafbfeaeb64944a561bdee4feb6fc1b72bb617f09ed447795488256b68453dee01cc24126b37f6eacfc7a48300dc979a0e6e2e661f923b214d5035bc22ddf6697945b05a129c5842b9eb7c25c228b46827d3cb1df4cf947dc1178a9402c6a04545c20c246091a4f145db6f640abcf8ba0d1d3138bc15f1770198e4831a50c4f14e321e9114cbd0549a9150fa5a5d06b7cb41943689244b95f46978dbd6ec18aac3262a18ff485becc9cd490af8871801a6deb176ee45147a5cf060eec9b5856c7d02b82c712ebdbe059e92a909f1ef6adac9a6e25becb58941761330fd810521e077fd3fc10fff782155a26c993e3349eea473a5e8caf50c8248100221f0c400838d8212438dd0b015f2d7f2b5e51a2b1ca4341cd4944785625948b38ea6a73f7955f064f818e71d563911385ece704f45fff49ccc2667fb134c65f711affb2cbc1af03d87718f9388029b517aefe15beea06afddde75a2325f801182beb61462537e059e687a8c608284dcfef1afe17706ed3271a1f603bf7815800795b8819d201f5fcca349c231bc623678d7dd78466684772a356992cb44edddca55bfffada281a20426f1bc8b3d19dbc6502ecb9b1f55d6f9c33fe4d3d7817cd8441efb8e955f280a8b09ed8c5a277c717cc446c7251d12845edd14304cd3cb5ca8c267ec2aadae3d5044a3adc7ab184194d8d8d2094861f454f336ca31660927b76f522aabbf25035316edd5e179db970f825e5a213f94212b372af9e5dd326a6e91c694607c899d798ba92c6bc4db90062a4dc907fd813e922f8606d4e3b59410bb3dfbd3acb5253c983588243048ceb7a1c29832d99f84d4cf5b30db01ccc9f3d1aa3b2cdd6e3ca78113153f621365e1f694e5cca1e0f14571d276d83de335029deb409b389894a99d80a2206b91b2d05055df52d83d270fd1102a5c2ae4a45a7bfd6b7d850299bc15cb9d5bfead518f1692b9dfb50180b63643bd47542a30895c1a5a5ce6fcabff617d50dd48a3cba2fc3a0ca7b6de8a607d28436897d3af4488029ca3f20fc75da8c81d38109346a325dafe85bff05d7f896272c89e1389ea68f9b09c20e19c33de4ed30665a47daf2e1140eb0d7143b50e6baf3f0d597683a6b2e3d256c5985de6131840c53a81e517b6824b8b33e71dbf5631684b74c41d8e6563a517fce83633e723b742cafb59271dd11c5d80a43b5481c11587d4bff7d362773a5425d1048bb5693be20e081fdae46c30a93a9312b31bd7618d8498910e641bd9d372aafaa340eb941866fae2d768073f36711543745d9e28ea18e8f4678590f2ab57b312084d04c9f5f900769323f4ea6a249211dd6f772bd845b189baf0d1324e5e15e7e6f08ba5d4f07494a20f3136579833d7b79ea5d655c7b62ecd78fc2b0655561e3da262c4560919726ca2523d724af032f7fdf83af44c57a4e2759323bfd3bea1b194e19a894e4665d76f98776d135a0704549bd89800c32b949088d12bb58e15a4a7eef682bf666e9f0fd88b989d23c5efa3614c49ae6a57ac4438421c78e1477b2df44419e0fc3feca927b506559abfe8fc92f52296edd596a910627b8f9e76d1917e6e9f6f9f825403eb53502f914ac1e1fdebbddb555e582a469c7023c5859c98dfefc470ae880486a138aaf3c79862361046bee636a9afddaa83af593764a17894f9362e87d7fcc1d451ceb412b292a80cd4089e2098e2cc43a3cf6fa3828a46a58ee3e07f9c5801d60ac9413f85591a9d8c4bd89c7e6afb499b3002adf985065e13c2808edd5ffcfec19f072634d6174ba70f9d8c68a038891f7c84cef77651c2e39dd607da714ab947c1ef5da93cc6f937c66c7078ed809fafa21a77e0cb3d1b9915090edd2210d63f4012110b7f62a1867d02552aeed4d540dff54c2d3c487bb490a469939bbf07d66ddd0e39b63c5bb621f0ac11e52cba5f5595a8d918535c75714802b3e93bf5a2e2c0a2d4170b36da5c6dea3c5bd25d2bc355cf36726879e66d3fea7c17197e017045342320ea2a9837c481c815c454188bf4f4e2d58eda1377dc45ed2fe1478902da684f0894e0338087e37a18731b55d521c2c9f7eb095cf039bda42c778002b6aa5d462664a039ae7f26993808f0b0485edd5173ad8e3b4cf8a2419e65668a0dd64386b1c05ed19d208c35d3e1420f603fa3a5e1dc15d47254a717bada11dfbb022670248a44d1de3bc193042c2f062d0a3d12e3ae485d019b01e0581d93747af7ecca940aa8dc67015b6aaa7b6d63d1aae990f4264181916e902c75ec22249cc1e4f5f300cacc8aaf40570baee4dd99ca02eb43dcf2d2383162a296ef62cfefc2724f6e95db011939e8f5b9474db33e99403560145077d08a57fa17b8e0e938b847855c68e1b4b2fc36728d7a1c3ea49aa1c6562107d912ff2bd326d00efdbc8b75995bc4382c626f2f4bfc550bbc72b009c4f9794693c7147fb8943f1eab9bbf048e42e0127b88c22004a097dfbdf216645b49793a52b9b644b16c9ee08222d0dadcbf4f5386a9ad3ef0623291160f0a233581367832109ffd41eac59903c6313e0a484d036a6b15618b50c73288d14b70a69a4f74d90d4d9ec57403413edae101a93e4560a07f5cd7d0be0fa4c1bf9e49f037328c973e3bb196d8f49ac34cb28c46ef6e621ada214c052b1b355c1e453506365f5d26c2686ef40330f537ff2ae1fd91f039137689881b1fb336ba866ff9442f44e9b61e100ed20fe8dd5f6809165f059e9883d627bc258e58cb6317865b612508a7ca2b203d1b92a9fc9fd657a18c7c82ed1419749b2a50bab0d30852d22318df9173f5d22cb668c2bbbc90917d2cec5cb8df629f92b40cf0a80db8c9bdd299072be0a6ef0b1c5b574854aee62e107a2c6c78aec04c61d06d6482e2517ec5236e28fe7497462b3f3716465aa00f7b97ee563af36f1f2ca99c2c7dbe064a9462b3bfd87141ec537f8412b966f6e8770e1d6b833da5d21c19ea33b3fe771f5e123e6990f9733e5c8d08d7172702ea4708505fac825b56f7c529b61e8721336849b1ac5d4058849dbaf34c533de58eb3e500dec29424a8cc186ac7a909eb64293bf07be59425799a990505a2cc1b4de19926a0538ad75420738bd1674ff41785183641bb42bec20785d1733ce501f55cfc3710918b5d10e346e61c16fedb09f43d645a62f4852c02924ba8fc33a3f13759401d420bf07635f5805bfe038fa57551d6aa00f284c7c489b9092650fa215eb9dfcb2233fc0789fbd806ba2b6e4b6b031f2059940f9deec00277d88ae701981e9d002cf22da502c2212a718db602415944aeb2f380cf1e63a9d1f834f5b4e399e7c99b31a44ec8420f49ef33f9b7018e399c8d2af202ad11c820337e6b2a66e614be930e3f97ccc509b9a59646766f6057359b6976acbe00445b848b73f880a333a15f121ebca9ae4043d43fd353246856ddd37ae4664e1c33b6de144cae7971c4800e2e1de83ba487faf648721dec730326907bb3ab857587a05ac38181f1a498ef0a50a3ea260bbf3a045be40b97f7076638087781cb23b05d100ff035e2451dc71b091314581094338262c771efd71ede5c09b77620f84d3201440be2b04d85a87dacb0cf0b1952442acb4b6906284776621a664303d4722057bde6afd58bcc4989ae466c65e3fa42009efb661dbb58653b6bca17c2f5933240c10d44f84a57803bf66d7714960b395ea55caad1900dd3c113a1ce844d1ee2ff2e6edd188e10c340aa2c0e2c06465fe94dcc18230df7567d40b3abd49251a1fcb7509681ec0a424e59d3d80cdb54aef60c3cecda6188b0659dff53303644bc839c5ad608840b59ca73fc87796a870dbc6a073ef336ea7728508edc4fcca7effaf5875c0dd19c517224a842ecc0e318eb025baea550bb7f3f0c2484a51a86716765381300ba7b65fd6b58735cf7d513d31ae4ddeaa6199b34d668098ce3d0622ea613d7f8dd26c7d118b228f03724469273d47d771a3d0c003355979c8f2c69f35311cd4d0d0527c42f2ef58af860716ad3f782143c6e0a8bd53b3627760a2963f3ab6f62275939f235dec5b54bca2963fb8cb6067c1d55daeecae91b86f69dd2eafbbff4fabc94a226651d694b57639a68c415730d374bda66443d748532146b2a35cc77f8c2d969826eac36b2e4676f5979dccb8f9421b5624230ef6e4f6d8f4d8f04ae4df67ed8decb5dca9751a33622a295632ccea2c63558fdb6135ad10b2477ff6726ffaeff110835b001257c92a15064046bdd09c737ef3a341c6c8de2e8fafdfdc66727ced564a4ba27c03116c433b8a68b301fe1c8a136a2bf79aed6d6da514a6d7a41cd73d722e4e370bcf9d9ac12d2c8e170cda858fd7751a2e13c65879e71376a2f6bbe7e655b13954eddf2da2dcc04e79e25cdbeb7e5c805b0e0a17a5a16df706db92b63910173feb15843f3cb5bf6e4012ed10c8c3b9d4383d534597ab7ba2b24f6d6d9a81471d5d7bfc309a683303f8d942a42970617ec90d3ae9edabd9cb5cec23ad3c2dea49d4d88ae9cdd683c379169288f4acdafa43c2f6a620157dbece2a3e1ca16d3eb91d96f31988c97a7a47a08bcab29897e5c04edd49bcbafc7bf381c687753d4584726c2d6b33a969ace7530d669cf2d2e3d0957411d11bbcca8f4f93b05ce5d2400eb8d7b3b50eca664057f2ae7d742230e747865dbf5728e9877d003e71f4324aede39919d8a0ac4c9193655f483979c36754300023a1de2f0830c3fd021a9546324f9af5deae3158e2fd6b557aae4478b29fbd90d4b95615dd82a6ddb24e4afa679db9c02ad41a02c6cc79d2b9456008f4f3d32ef4444c2cb13c2b9c1071f172de34bf2d48541187464654203f22e5ea9476e055dae95892d95d70ed56ae96a44e7358ce4f4d7feb170c60c990b01215166581ab84143b7b4ab8a8b7656b735003d2970786242224884210564eae06a479d8846b8629718ca01838ac00872c811fc813db72d2e252ecd910f56e40205fdd9a922b16abd630dec8fb4d1b6ae02b8485c649d6c07a877f09c0da6c15967d95a640cd9375a6b164a923a068988651f7d9df4fea6c1c70971102d1594fa2ac47865a373b02559b4288430fb005058505b8470ccc301650b5a79a0ceadbbaf8ad2463048719476e4fb14abbeed852c6d2de7e44296bf5df9908cc0463f16c230ee7e92680602012f6e66b8a5f838733aee928b2a3fe6d1c53725829ca3db3ef7fb87fec03909f84739a3d065c694032f859ad195cd841433a30790b3afab3b233885b11187d47bc5af79bc9df7658528fb6ca706fe2ec4f8dd7d2be2252556799804a1071a1e983ba376a30a3299609dfe94223248150d2ddd4b5f8cd943a404dc0a19736111340a7e5cba3b02704d57f03dd43691b2ed66e43a163adfe541285678c58d7dd57588e101bad2fb319589332f071667a22777b09a6ada73ac0b0ff92f205337585c94e8433a405d17b31c798a9a648f206387ad36d57cc94a24aa00bde0171d3452958e77da75a15e706c634cb954c455302c567d71c6c383b6882b1af6a471c75f88d016702f9bb0644232f4ea6876925db64005537fbc10a91ec0da4f89597d1fca0bf0f7f4527de3f32511d3d231027b7c10f9757147f102a624d13b14c8b899861a2cbf7d738e52da1c3ea817e0937f2849cf1765adbf3ccb270457b9cfc48c4ae14d8b3841ebefe75f09ccb9702c1a740e9e8a2ae2d18cc1c6bb189400ab1f73415500c4cec300f23133cfba5110b588020945093f87f40d58789d225e954e376ac4838c2b1d92699b4f70a168cf1149a4701586867b7223fc39c0b5dfb0f6e192248c127d4c07a9c1caf85cb33694c5ca31f541e0b8467b81ff5368bb89d3895e86ce3764e870fbe5c1b09a49fe3812723f4efbbd398af9417691b46d5f5414e3f6b3d79020a3f1c6a4ebdbcabe502fdd50afdd358196e8fd75b02a595761ee66858751f4a7c89f68e3aeb7ad52d77cefe6d34e0739b84626dcf0a846b35d9943a73feb07e830cf7f41ad59fb16b39e2efc0f107d79ab5cafd1a0b252fb8d441752dc3d9a1f36a23249bc560bfce9699be0405989037e54ee186005defaae8665cca13b9053fa806ed0e91a60213b578fca35860194c9abe4c0130ce064207a55f152abc9062287ef30f7e3810c865dd95abfc64d0cdd0fb0a6071a4c0484328a39340750e91dcf661a9a91da83601937e8edd04a0f516f076cc278ba78dd7f4207744a1fc0889a5d0e5460f60442caa15087c65b586b00fe29cb34b025e9e19578bb14c6f087e6c0947e9f09b48ac052cb611103bdab3f1fbadcb8be0c511dba2ca58c96f687de0094c696050d5ab24434f95bfd603bc08176d54916559baa03867e40d0a0b5d65c62d473b063482974dc3a161d0f84a3ea9d4f5b922f1b41b459a2a83e6116c5a8856f7ee8d9b2935a5e32641c0f4d6aa317ef371a43dcb0f1194846d5b2cb268893220fb0a40126b5361febedc22395fc4680fb65ef1d23f8e3264d37dbc559d5c44ecefe3b91326fe8e210fbb7377494a84d1fa27046a1c515d9aa3a72687bd4be2d438485538c480121444687dccb14e54b4c86845371e13b377719bee031e8f67ce3a810e306b7b3ae5c767cc61c602605a330a38819b4d865c13e7856d938d71d204eb82369e195594e36adf03d1cecf714132a70af1ee28f0eb08bfde8c505f742ace646184d356267bc7c28f05b94f733d8a340fa79f5343855703a54ba91f82a296928a2e0270cd0849618fc07f79adb067614445ae231ab2a3306061c5ed704c2578cbdef2b3fc4ab385ac7b938e6f4cbd2eb54ab2b27ac802307cf9357310f125923f31a0779156cd8034f84852f532750541851d02f4c190b7898a70ac15b0428405b628bb1868240b3324282a6f90d8681b5f1768d01ecd0e9b45308a21f2bd6ab2df7d6ea0d2bfddc8f5284ffcb87e50890d06fd0e2f663c57d64c5be597ddfacbc1f56d8172bf6cb4af763e5fd66f5fe5989ecf7597ddfac3afa77ef53ac910c1398bb8037a4ea95a7a701c67e6c9cfe6d7e4c2d48af833a00f4908ccde522b54d50003a1be6ce8629d3396c03cc8a949e3abe7d3bc542a233648e7081e0b2a8af1065d2425408c2aa029f78cc5cee8e5a0afa09ff81d5de055979bee16991197a1ffb4ca752d93cc556f4af32bb6adabd4e20e264d7935c721756ec97b5704e06cc6a52e4eb6f01ea626a24528269f651f6ea343e1d280ce8a38a18e24eb6ccab79c6448831abe6eecb37d41076e3e5de4b90d399d425fb011a1c2acfc0e5b96d99e951ae8f8da43cbe4a0075805e044729188ebd0b17679536af888eb58e407f389c263a5538241396a8f6c3124489257e20bd73d3183a4f476de4e92062c710cda9c1686658dae16bc648ae1134caa3ec6c4e25c3aa7d3b06eee83708cb418f8e5982cd1a2d4711178609b830d6dfb0fdff423a3c2e5a448dcb2c3da61b66438ff0c883e677236bf6e30ac9bd9d1f8da02e0c2d03806e5cbaca8c1a47fed26fd3864841eff31a3d2f25909d1d8882242c52f421b2940b62842f2e3080fba609cf0bb2f381d1f354f6b369483af4049924b9078ecbd96d9ea5a1a49925ca5d5301d890eedb222ea183586bd40373293a4f4fe46e548adb83b7085a0a00b093eab0bbbed77dbb4ce2837c1dfe247a8c41d9eda5eb1f97e56f35877c8893e6415e60599ca2fe7f5be0a341be7429fe6a5b0b4b532275d8300d74d5aef70d08af0bce561d327a013faa790b7dd589901fb408e8c81a1434323c5350183736856846db3af9294ef9169c1d121a10be0203815a8d9e591c57d47723805a419f68116b52651ad72c25dc91950dc56c04093cd465dca847cdc3c488057d8525c27e2450ba5dc2ef68055505eb15884b2210891faaa47b7aad50b32587a5aed1ea1c0368bd905c88755e4e92301d78db4f7fdc7c3cca1eb3116f30174d7d8e6e1088396bd8a9631c1c041c5596ad9a62ced5f8dfd391531985d81347a2ac81e93bd682bf2f57906824b863cd29e3779a216d927887a435fdb0871604d6fee41c18b1ad850bb955bf969a32192b691588789849a5677aa66983f26a5a83efcc4d5be4ca2c91d431e2ea8eff0d1c67a45e831c3c0b38ea1e6c3520c40ec8b1292a2b32a31e4db4723c05fc13fd43940dc0fc069a3f2f93bdaaf87134349ac6b18a600bff8cf61db86a540c43148a5a46f5a9f496da865ecd783bafd1762b65808c3a6cc57591674b38084a9a13adef6f8d50b118eddcbbc5480f6fe6f8d3120bb2389fa78926d74d5baaf3dc8a5e5fb6e88c36e636406bbd4d7766eb235265e23bcb39c49ac2218f2fff100978367f43dfc3fb2f4c2ae88adb1b173955ba8e0a9b3f663a7e613806e565c504ad1808cf0ef497b0cc3154f004087e8ce60d1d5460fa4aa0fb436388686dd59ebb6689d4264819a2616837888cfd1dbe87e294977e016eb44de62a0ea38baa4a9684691827bc5230bbc488db54a7907a9c641ada9b427b95a3278a6197e6096b1fc5a8f513e976fc61054efbf44308634a6f0186e09788238352a06fb173ed6feaafd68995073fd91b2230da3566b65bb8dcd174b047bf670e77904f7bd40a4f627f8131ae4052dcbf08e4750147866bc1642a54666b9e2632b11655ad7ea177d845e8a7a8f6c8cd09a1a40704b031040140c0c8eafa6eee5f99701b73c9509e8b4315aee115555b17e35673b6fff3a47febb2c2ac64c240136c86c60aea0452b65803a19cd2384e1d3cd5fa2289dd32b156bbfe455ba833431de0fd2215c8b24115bcb0db9b22e247f48ba61d2973ad7847ce87c34b9e410ad28022d244d0ec5823f24bd392c7971137fb6ed53756140d1252a56bb9f4c332b2e9129bc76ae4a8dccd21d748f3082ad0a138a8ed5be372eb445904c0120abbcaecda994052ce35cbbcdacb9eecd374c25077a6662307b86a78129e000f75d9a7b0ce334e1f754780da185fb6a8e7d07f7e694d4ffbcfa4192a01ad38e12c57b634d5a3d2811d10ae1465680d118bb62b1f15c27b1d45ca79a71f31cce6c965d05138c8449d9ccfb7fafe7dd4d435e73e1b454c6a1225d78492e3192297f8dac483da760f761212a130eab4f2dc03ef26c33949b58cb4dcd4fee91ef875e714fdbac14e02b3e7bd12a6bcf887c5f665852bd8d579b75c2cb807eb9a57fa34d64142ee0116f8636ca7876400277f83b5f412f7ac8d5f149b8700f021cb3a68c4b925d454087802f1bbbc57aaf561a317ce55ba48d0cfcf837beebb7e3e498506209ee95bc91e117f391c0f4d82fd9210928fcc41788059eb0cb937851c4c9a4c4ee4297373edd7a16111e806d8059baad5593625f0530e948ec7f510dd872301a69f5ffb877eaa9f5284b96293b1cbc3929614764a3c12f080c64610c25eb84238c04be9a1392ff64ebdcf966ef5158f4882bff205b55fab86e3f9aa99079c09ea4231cfd4d36a9315126b4fcf0040f7491a909968dab31e32e00eab271b02b1eba7e1411cf42ecefce7f2548c29292d62eac80288e6e981641c4f3cc99fdc717c8097d9103c4312f5db1b8c8c5a3ba5d8c1e8bcfaecac5752ea4c7383213eda5b1912138b734a97edc438e014192450dd96957e73a76a6d73d4e49977fea7f7c85e393c7ba1f5e44976737e927d2f1f2c0866424d4ab204205ce3c0894c6abff6c530ba59acc1c2821c765c3139d7b67500d28dbcf3466f69d73f56d63f8130ca87257c82855ded37848a5490bbcc0f30308381313b6bcbf2d5a7bebae92e5731305eac047e8714e371f80f6e76296d59d957f5417739c681196e79fea19b0c09e86da98703316956328c7a566b695a28dae91b87196e3b310c8cc403f4f3fc323897b41038d815953d7b6350412fd5988667580a3823204260b3002a38abd7b6b5732c58a4644894095a201a6fef3e8828efdd62516f6310bec188c3b44af731c83e45ceffb8c0ec9a06406711f3e860509ef7dd7745344c1e833a66ce4d58a07d9cd103d26b80eeb4e3219c645c16b9b446d84fae35594590fc4e38ce6f80fea8e1785ca7d145337e0890c804dce46cd3ffe3bf02dd64758fba343b533e2f16171b5493580b935ff6330ed63e9ad32dc6e09369923152df3873db3be5c8c5ffc30a34e91ec22f6b543bd748d7544e1c938c487bd22700e8588c2f4562f273ffb367bafcc109e86024ec91321df3c7c93f50536f39becbe6159605103ce41627d7085db362eb798e14535769687d01a486fe17187fcd6ec900bd1a0cc4a1d8d6b6bd058845b1b61240c80e966d0da7aa5807aead242dd2a0cca124aac73752acfa70522b7d4a0bdc923f3b1f1e38d02767c971a830c2b2b0b99fa4f268a71e1dc1ab5c8fa5968dbbcd201ca436821838f0c77b1438e631cb5f42ad862d12c43d198a18225f230ae1ba012e1f8567f499b51616bfcd80288c1a527913a6dd7af2b804e36409af63bac21a41db56c7ba1e023087e3bb6101905d327a7e679aca6fa0c86b169852416d4d5c5ad4f48e84ca34e4b8bbe0b696d1a1c2141243a38b8058ec77c63e9486fd12e96b5bb9a020fedcdfd43a17046cfc5f9a4bd79523ae68fb9c1f86aaa3a14e928d53cce80d570ac2808c6c44197a6e7eb6f02199f1f41f40b36305ea3bda731b6adeb7618e97f0bf171e809747691d580dfe155c187fe41659340457aa285ce8f4c69422139ebbffff7ca7682a6b34f915310e3617d4994df35d64562f77edaf57868eb84b11a99fbd1a47625ae1aefd3d09460492c0d405542a9811101176eefec7d740696e8d2ad5dda1840ca76b9414e7b69d89f3d2ed07092de0c59c8576a10da0c09c3b696b1ab6bc2cb5babbd854fa4a5578ad0c4c6dee1bca64549c7e537e999eb473454e78cc15e8a93ab3c80c1e78b532caa80c2534176c2aa96d63d3abfae41512112f60c5ee1f01176144e8336e06aeb7c0dee40e89a781ed9fe40adfe8aa2a631bec60a014895e022f94239b1cc71444de34f231a5cb8335cf0fd85277b103472a570d18a028fd44aae24712872cba73ecd042605bc2115ce131f129cd15d1eded2d598420287438a3d9ef5aa4dc11fc166d3157a12df2e7b39f9c1ba467ae21318368899ab479b537014b9641a00ebd8261ec151604ef886626462c6f5a63955d6bb3610c94f1bf8498d4e501bfe8847c419b34082faab8725414445675dd357d737c7507ca90f8afdbd0f1cd5832dfa4505a7d1b0ae8f7d8d67911482fd73336a8e73bc82d8fd809b2baa8dbade80a2342f4495a477d48a63bf0b27994dd81536ca8885ed9f61a089eb26bdd40d2a65485d5a82c3f562265ac9b9c461ac0c098297c66ddcc42cd22be25d980704cf2de36600271d357fd2e5db130fcd7ffff0b7ff5009e497f79abab61e2aded7787776d0923957e0a2da9c5be1832d957eae03ae5731e353a2a15bdd202e623cc5e6cc78eaa8cbf38219605f47b50419a7a09bf9067cc147460871db3e78d083965c24f1ffaf3f59939b14d4c6cf52665585b54dd6158d399b38666f5e741eadbaae8ec2a3d423fcebf2bdc29f0364e2e16d21993d057c7d16ad7bba15be177bdde6d938eae92087443e78bd7e53aadbc445af8042f95a707375842ffbde2dd337dd08154f46d96445807a0864b1c598b98349d21601c0586d7bb771003dcdf96b5720183941d4f106d10e1dcfd754cd199810dcd08ccdc48a0825db1b8570c8e5df175e0e3c0962c9dad9bd8e85ee2bffe19c7b4b096fbc67634660038de16ce32a07cf27e4cd80b3e1d58812118fac35364cbddac389796e3828c1b43803949cf3a18123b0c0bc9111bbc412e476ed56b3600f100daaa0f2ebfa2e022922c899bc7764e869d3fa19f57619c6750a16586cd136236e092eb5532ff478bf5b3206ed43efca700a0a5f83fa27fbbdb7879f3c78ac267f32663f438c0a484623271f3c5f45ef08aa06c9dade642cb1f7b2dda2cfa8ddea62ed71b7acacce3d81736da1bceadef6d64296d86d42514b9450bbf1b28d6faa64fa478875ea18771e75ef8d316f8d0e75e19abec2280eb3d11577567278ac91f7969c773b996327f177ef3bbb00f4b4cfef3c766298644137ae3176781cd3315f5f3c34b011bbff271f4c51c0ef0f1be2aa367acc87fb93c0af9335e288dc4bd8166e6a2960a6f8cbf315ff38eb9f47ab870c93509fb78034bdf5c899b4e56cd269249285ee23935997c5415848cd5e1244f5fc6f8a9a332b38128cc7aa32f80430e8e7330845e0b9900579a74dc20cf445256ef0a19de12bd19103739c4986e4e6bfcac5e623fb2db4ff73635953b87e842135e88126e8fe6499ac96bd1e2e9012caced5369c85d87ff0301a2fcea7caa38b16bb94709c9b25cb58616d19616b5ea78c346d5f7e11c22c0741cc4142b19dd20dc2cd90bbcaaf843a1db4634e750b10c645fda519b388cc659fdb0c84d0e54205acf6cd5798262abbaf154e8d271414f10df0226b763c28a0a6d1b60c0a6973bffb8e6e98f8a8a5be169e2aa58713b404fd2272a3668df7286d304478e0a0aed1fe64299f50fb4ccecc4a911edbc72f70192336566c7f96a860b72f94b63266f7fb5d2454f27423c09ee10c385f67755957bea65d214510bd48afba1fb0258f10b09040d421b90a4c27f8b6ae217d9d214598aa09961725cb573732247d61703f4fbcc5ebaaee4ce1968ae81c9416dec48bda62241660219e5866efc4172218b079c00a9bfcffacd5c4efbfd88c3f518f69f3caa1ed7bbc5b562874c045140bb592de24fb5c05dd9645ca54ddc4951436abb84bee8d52a6a6b632ae7cad6be1a1c85fbfbda570789cd7f66dc1e715791f5c2594750ebd53f50ba444e1f2d749625bddd86460fdc92954267bf04be0ead5ef19698a1ff426cbf500b49fe9ff19fc05978a9103e97818017298c1ec343256d9f5441673a453d0122f1b339e6ccf5bdf24892acdb1bdbbd2e69f07610d646ce910af7deafed799943121e2b70d0e88cf22ad02f4ee60472d7125724086f0242bcc67cd044e94bdb1f3155225cba30d9dd228e963125e9c88bccab244f51683f1c9ad160e7904cac5c7c4922345a6187231a7a5bf1df4897472fdc926ea11136f83917a1a099a6304c4dce69152b9bfc44b3ae6250b3098a789994a965be5b9440d545ef1bf4015fb44d09f40aa4e2971ae8f0b14eee9b70997e71383c889d68d2c7c9a2605a688f588dfd07d512ef13ae2523534efeea9b0ee56ea1c74145c0e6b09d254722073164895749059cf07b72ffdf8163f89501212d5193d7b34dd8b426791dd23975408d0a1eb895c5e17e87d5f367649284382cd859560b9f56afb24157375790c9a725ccc24a6b9789a31371565f01d7be095f690813010f344694d550dca934f8a639b87d2c147bd84a8d6d2065329dfd53764798bdc3001c96fe8527a40a545dce63faeacb6de4eda433287afe6eb7730c7bf8079b35507dc4d142a5e05a88d587e324b4012ae8a6142078caf9fa5d12f377ef2995ba1970cf953d95d04b61fabaced3e3c9c5240734d8f515eae087f3cc346fb33d987eaf80dbbcf418fe9bbdcea7c6384b7bd9aa606c6da7d5016cf3140f9400d6d909f06da4107dcc82e5ed0ca0b90f065c96407ba9555bc03dd3170806eafc3f1a768649d181f96b90cb575124f460165da00136f446f05b3083ec4b882eef72e804d1ee91ea5f52924e31b16bb69fcbb75dc0aa6d0fd9fd218a84115ccd667352ce57d9908e4df39b7dd60353c38d9b0c62150241845c3c779ecc65f32adfbdc95f4e3d05829dc653cb7955f8426b7f34274b6a6086d3d7c108320b9b92ab6a2e790e238add769da596a931e941ffad4b1a701a00c0c5f290ea8823cdc5ef616ab96c44c1b1744d867156a91a3682fdf719027b352c4a16f98193e0848664581fc3ecb6ff4b7a3946479e378bfa723a8e50eb74047b36ac6adfc710240543f7c6955f6b433e0e4bfd19e635d598da9d68305a7f637a65d62695bb3b20816f2dc433d79987c7067ae5cf9da467572154bbf1e2592455811e9ce7cf7d16099d59f00cf412fcdc15df2c199665666896a66c42a5c8c04f44f55e24c199eac17549c52b05593fc414cb09a7037a055814012898d43df0931a2b08ae41a4dbfd50f6e7217e94a40e7f6f4c1d38e28de6e56bbb4842612fcac892ea216b76570278c51e0c4069c20640b1f224d9c36421dcd066fcd5f490e1b02769a34ef3376670f883d0d77458ca9426b496919e2f1795d668e07e1a15b755725140f09d6dfaef220a1d7e103f6d6a679b10f463e0210ca2f0c947a60a0767bc43c3fe0c11cce02e8f648ea6ca658b65a6675a66132b9f96cb68e8a573095c7bb0ea8e80658114afa897f430e50a5f0329b8a3d8bd70c39ed3910f015555069b6b43c8082b3afb11be1da1d0827dfaffce2436b0ff910e48bdd7546a1c8027b25fedbfd0af05fed88c7bb5c985ccd98d3b600585765240874afb5f1f2b73af3f58aeea9fd901ee80279803f4de837e5da96a6efd1f0420c17a705bbb56e9f92b166e76ff7adc26663841c6666b529db3a78040d18d7c5d88f189eeff780f56f68d74fb0a69e775508a6c83f5228b995948705684b3939e5952a9a1c75d84b3c3db470e95e658dc7402d1cbec7caabb500cb40305c7a2060fb19d7127d33f70a019699e528a76c08af8f90b727a0c0c13cc44f4c5e912c2ed9d3e8f110b44a9b588cd28901b028346f80b8243d4c9535ee3ab46a469721dc934c200f7bb392cd8cd33147a3f076c77d3aeee66a3a4919d1f260fad1ed5ce6116c2013b8e4436d823212a9b6b9f2bf26f641290ac88192e039ce3531e9e6292e1b09672d3c8734fb3d98f667321e9a1ae68584e934fd4f54463ea260b206629b22685138d4f9157b915ebbc94e4a7dc38d4c9ae1bef3d2f514f285d622a2b1684c10edeee284e36662ffd8287dabdf3fb3b8eafedac3eba1cad3f70ce43e64e366511da169f7840c3190c437a44ea7926e80ddb3b1f3b1a16a6bc3bed5c9a4b14a3574a0413e8817973c1da6439468a69a04853f4271c1ffd0bb881dd02b76efae9bceb0aed6fc5de2447eeb277adad4507e04ffd50988568a3472421a9b611efbf93d4659b1b336e6bb9ec33eec55b8eff5dd35bbb0697165c8422aee61dda4a6c4c1c6e3bfcd22dac0417bfb06df39d1eddb3f7b020ff7abacf8f38304e096506a770814434e38352c5aed81f97e0839fccc4d72b49a278741e619c5a1abee77f39d0a05d3a6b385436efdb37d936f58da8dbd464c67ad2a080f03d4005f5ec003979b5b0dc313e1443d997ea03bf0a00f4c09d115fca2a129c5ec190e2dbc950d3a0d1b05c7d871d74e0c8c555f5f7163e10e8b10e57be92d4c81ae76924705da2528e3527bab2ccb97885840002f0463c35447054cc4b0ab71aa09cfaf54910b4a0142af1aa8db44318461870c8312381551cbdcceabff26c514466a0e2e52f35fc206379e333b7ff7a7974cc133f677f8d4abc3913e826ec57c1b225fd4a7357008ebbf0177b725aeb9b959202dad9709507e975b9de96be44b4806fb7be60e744fd512d3a500c47defc4c53c7c70000fd229c2f6328c90259311cdf1642a9fb6078f8f80a224d2c70056cd5340e47e8802e1abd65aa293dd13e2f093c34a481b2d9fd98c9d931002d49b2b0deaa40136c8a5bbcd2c4b157882ad8dcb8c4538a6331617d2c5ea4f6d11d0b4b8b8cb681c114bad2b23d5ab41ca4c976d3592edeae644619f1d64b6a81ca63d165364c45cba052262ad7deacd2882451359642194e154fb7b5bbc708491eaf878064f70aef123a0390b981762716d27d75bb9cd048c9acd9ce3bdd48e183b779e5a206b85e6942affd1cf3284b77e228a86efcec4b716f31e7f0a0679683af601ddef76350850c6a19f41fa64d5448eeff5708f7b52eacea0335bccbf26d89a4da89f90aea14cc9021bd89870e9736b702cba0d5f5e06dc412ccbfd2b940e90cedd8d6fdf1c1947466925f841176f878091507cfd4b1b4aad2f2df095c8930a81334cf4761c1036c0ede7ec40eb418104a0d2a0d3ff91f3c77861b06e364e5597801e002ea2d0b275fc373dcf80178f3e0dc2633042f4a3cf884da80ce3b93d15c4a10072ea97d543cd4b0b5d7f55c3fbd3f962f84b1a77a329e319ce0142849073d798a03f3dde8b611048b76465a882473da9d158dbe50f7c74d40a59ab4a3e9704c48497471e5073702c5b998de0f21dc12dab19363d79b582cf5db07913cd2d96be2715fcb53ac760851c6f94c8ea3dd9c48f368046e011a6cdc59d57b64a73ce797f088ff93eecc1c5a39ff06d2edc1aba228dfbf5bd88b8ba675fe8516ac294ad93535f06bc9da73012c0eb64b3b03b3e7b81f18a40652d9ff8395fd843d5f940c1c196c2e0e31cb12f2aba4cb4ebb5e03acb021fbf266c083eae890c0d3e1e071e2cfba2b1037b79ce87c7f31a146a49ef84106a577c8126ae2106e6e44725483c0a9ebd0a58682e133d3cfa55c503e16deec06e4d9e8d30a104e54e4c24887f36976a101fd7ead08d5b930a65845fed2e74942ae1f0c3785190b686642729c99dc79aa44a17ec039d6f28414cf9bbb2dbfc30f167e60f9ea2982ff819e002ee343f4d1d2fb3a7e11ffca83835071bebec610ccd6568ac7c170cf4564d3a03e72544930d89dc0b97c826b8ae29a0de573f5aafce18b6d7db61bf9ab57317f427e0f8919c27d20e225caaaaa9ab9ec8ddf2cf7c4ca21e5502844768c26c8867a7508b649154d0a9b1b2a53e48b49e611410f49f9e80238e20ffd488d5d8a8941edfc60ee19a848137cc041b6bf41322e05f9e37f8675a18eda5369ac9439a4a27d238c1509911f6fde4190e832c0847e3e19d2304ca376ff5a40123e799294520450b3a99b28bb01e0e7420c11d04c0f515a530e5957f0cdadce78415107b718f6c8efdbaa6833f26a52ccf9cc21516d50c717d4184d4a57f5100e56b992cccb2e7c4b32a0ab0a04f7fe441ffb4b040dad48de76c20330efa223b2b7b7082bb5bcd7996a1f8a7a83057bc7a18a20c32dd7ee3d0400163bfe0ad135538cf84ae71b49ba79ed19675df8bf611313938446f494463e7c60be115c1354d3c3c3c98ece8bacc72d7e24e3cd6c4d41a6b521ed7aefbcd94dcfbed94b8f0516c84e39671abc43beedc4e57d8a2ce3a5a60c5a1126b4eef896c38905cc83d95898c74d900871fc2d1847ca864e716c200a531e1df655a80e9957a35ec10ac4ebbfe0d67e5b76d924aa2c3787eda6d0143795443c6c6ae72092620e26531a2da1378dee3f88490e7adb42c512fa8131b209548e3a7426c9ddf1b0409d88304ab28c54801f4d8208789c7d95f89da384109af39ccbe9ca339f37f664f6c842a1a5c29f1c0c82805f7abb1a8340a7542611b78f4dd10080935b2f5a48bc003cca8502b500a0f3a1b17c194cfac02cc967808d42cf8293f79ca0f50dc68e69a972ee703158b7ca2373312085afd404eea2458b81fba78149902a6551582976e5de80c3bd88917941fbea13d232fd802347e8ac6be37e66b5db98588255b1afcf3bf40be4d3aaac173c717362f12d24dc1d9c6af9edbb9c5320c8deb54cb86504f0c0d9b0c7791978e08586a25920484e83f6c5a4a0c3ae1cbe32d18ecf074ba9817e36e869c6864253491820c50f5d853251760773b98822862537a849da75a87973eceef205b7f903bf401e1afdfdd8799462e4a6c171700464890a13f3c24b28aeef2858e553eb417868229468c1d0d82dc92637576c3764127a88237b549c3c721c286904efe687683f79eb9bb7bfee0d403a83f6a8cf5d2f5a9be623ec77ed4406f771f32af08c551b6b516e12054aba2935df817babb0d29a062a55d1ba0e8ff52d6d7fd8c16419e2595105481fe7d10211d387148c9413bf84e29f90aa3667b33483f5bf350952a675bb1c49b54b33c3052fdb7d056432e11c0475348f37fd0c5021e977d7f236c2ee14081198b0646b64fb70059f754458808e893e88a2154333a6ea2d99106ee80ae4b2ea2da7008aa2c33b89633efa7631b55a6072e3c69dd87ce1fe8e9a20bb083fbc1f1f6a66786082e65bfdebb013800d7dc457b035b9234d67200fcd7cf85f986bbab4c6939874ac2e8368f4207b409ceb6f6a4b8e677d37944c9909f110825b2614eb90eec084e15a79c3ed1e1197bcf5003d0ef5153843a8e7e16ca3e73290902054e621b79b04f078898aad0890a8808b7b6d1bd0e493f567f8bf24fb170568067df73d046cf0989ea47c313bb2baa6977bbf82b7e80612689fab404d0e7e7291f73ec932052d02e40a39c1e1eba275117e0c6b416543fc011c6a50299ff8956f09f269c4beafb046d09e7254539223b66908acf40fca1b018ccea39df9e0509843289fd4703d947974392be8f81d0f5b0142e5015e0de54f108a6a8b51ccab889c71b223b1b1523274e09ebe3c17446e700fa531263e841434bda265aea002537cad367f6fb17537517e9b886c68d621e5a268df8bf435e1d22175ed6c8d95262da21b432851147d02dca74a0e293e549f3a4bf370e35c290ede32dcf560c151074a7838223fd798f7ec8020cd7c1234310e3d966620dd2e437e0188be874b60c2098d93c80c648c8463fef19f23ee3630c6cc4ebe6f2404825d4f585d8302c6605d95bd136881bdbca3145967eddbd04c20013613a7016878a0fe1e21ff7ce4b03321f328cc45674cce22a051f9eccf890523acdc335891a8fbf08028037300e802d330acda1abc0c1492c621a8a3c84fc91409513790dbf226368d4487cfbe01f409589fb3407c997aa52943b8dbd3add93f900e40069569e8d4dec332abd2d74f13709146d16fc3520b211a4e424713bcedc16f9d2098c26847e1b9ff37c66341b586fe80fba76f19bd429bc60b3df340d65673909f32543daafd0488370532c85411d6b74e8c9536940aa36aa6439952b0b3d07b7fa7dce1b8d06640f6ad9ce8e5d81d462ffb96aa70183e36a14bc5d637b26371f2a0ecff19653490f8552a18af35c771a0ab1e62a01356a01eadb1ba670ced2b4618401fc19424bf5dc8df522e11fbc422031cf5193a74f35ffce6b575e44f07aaf33968663cf83802a5a97565b84ed6709556a631d3c8f04b83e7c2ca8d64f99bc9815fc294512ca1a32605a73dcee56b1b567d3b68301c2030918749279bebc5bc87cb5ff1465b9f2e69a60dedada6c020cad336370c8bba757efc2a79a3b051d79d34befbeeb0b119cf729fa1537231b55c836c14264f6f89a872ba570aa8b1900759c2e3a030bc6f60d878d659ead22dffaa2cd3bfff39c14b67d4c7cb39d44cc86232b37a3311985005ac0421cd6e2931dda0931021a4881f68c97d66cf6e7989cd2b648ff367a2befbdc54e62aee0ef2c27e1f21408c1cefbba94db23b094a2f3a92c3d037d489000997f9d73d0dc2520c323ba244c66947fd178ab8d7a63c069efdd602a19998a8ba36298cc0c3f08ff8fa9039c8cbb7738eba2027ec6a8466939b44539c89f6ecade6948058bed11a71059abf40568f4b5f24af892a336674e42f671a8afb0606d7eb5d32903df4a43c929d9a758a27b6203c4a385f4ec9e6dd36d150e3ae6a0482ee92844d01d0c88e9bdf3e88ee5790b2a1b54c8669f77af7db173b25a46dc4f0c5a96f29dcc46aa5eef22cd33ace1fe026fee71dd3163204797471143cf2d83f8209af7ea232467e6bbe9a8bf110c346253a6a2da98f9b948534c6f5a5b72e9a6855428e99909a1ad3e3da4ba956754d93b2127b94b2bf79357cb66fce1f5767f7ea3926bdd5a51fa6524be2813e41382bcaf5a3071452cd5a576483614409f344b1bf50a9eccc6f3265451545dd9b1f6b2ddc0b65526568c683cc49f931edd1ef2c9c420b104ba59b5698ca9ad398b55ed1aeca373dac753df9f54066fe60b0d90d50483b91487c733d2ad8a62c657ab742817a4c68205b9b6507bd9ca085afa1999360743474ea0e3efcd95ea721cc401c0d91025a0f9fc4c1ddaeb0bbbbb0122bd6adfb7bdc14a8b408c43280f2c8cc203b0da4638f8996a396aed30c3024825ea6ff0da98a394533258955e39b2a5665a8aadf2dac9fcfe0661612e002c26ed3a708a53695460ac283798d9accbdca559c82c522b1908ae62a6163b9b98b6b3db274558aced58897940f4a0889a111a507dd0ea61b86c5c6d3c29dcfdb6559bb2f611dc860b7e9610e5c402d6626adab7d5b6170875a9486ec0a2465774c0364c336894534b8b0cd2eefc4c79e361ac942e2211c7a795bde3c52dcabd2842214c660ba04929cf8691e82423867aab8bc9f10e26a3cfd224f8621762bd5ae5742440759b794f931d39723361e9310f5fc63204ad95b35aa2231a360cd6f5e48e5b3136315aaa72b0bc9efd365192d1d8ea6df70d0e724598a6486c66f9112080ab39a010ed9b7ecb5feaf5ddb80ec626003854edc66e789aae77a2f6ed64747e9a1ede3c9fc161499437462c59be8780fdbe5b502277754513b309c617b330faf7b375262e661f2d0b5616e82fcdf383d0e10247938cfaa1588106bda6704984a1022eb0753afa4b858e4e8e1e24917125ed73cd9b85d35bab1e6a6303638ce955ec6a77cc803ee0ac83ed8c96bea2d04183dee65b025660021578e633771f53c5e5e27775f07f0620a5c5b798ac3514169269b69329126640d24d086dc25a92cc3b6503343f72aedf8569bb62f9f04e37df229876057042ec1000affd840a4c7aa81370dde1cf8b750245b522e282d1a4480e6577864eeb9871b434b3dcec09d21fc8dda854f80062fe2aecbdf3657ae793da66d2b5527b767d41b3be78536de2f54231cfc63414788dafe9045db114e2dfec320504e488496c1f87ec9932d2a288b425ba0c5c33dde64f563cf7988d134bcf049163332fd751a01bf7f365bf46480db5f224a6abfc0226a60aefb1841776a0c379df6001a56251f35f3a0a65d5115e756b1386c1355b072cc189ca33522da0b01d3b4fb8273babaa3e52938a115019753fc1ae16c8e75a167066e004c6d27c6743543f6254736bae53a6b1fe994776c2b02dea536a140fc2cb452a1c1d1271b28e950eef4a457c3a1041724241c1bfe8964e89e74793cb173734c8f53dee8d12202ea844e65b7ddfe5816857850206b6ae214c2cd97ee6e2392334b1ff40d00ab5c96624334b14e0dc470ba80d13ba2e00294f9c27d48dd0aebc79846d51942b30ee29acb1a930786cc5c4c2cff2b4f84ab8a4b7697e8ff9d76208f9b0182516d07c936cf153f98396991e6a74e9f989c2d0f1cee27b2b8996fbcc379399115c8be8c9253e83bce96ab8ca185c6b7adb0bf002141f3201ef5836e3a588536c80dd9840ae4049a9ad75770e044e21bdd1ed32278440526bfa3d1652afd0cf4f462c0d28ef5cf5c7538ccfd62d842f983626b4ca42a3bb0980437ef05e1663449806f7cee12218f54d2a787b1a201e9f12561193ee4ab718affb1734ab123605a9d17a9e1c4b9f9233c035e548ebb4fb50e1231abf669830d3c562298f1f021da372625ad57d25e191dc246c39ac3ddf0f8537a37ae67c2b35496946fb79267d9ff830646e09dacb3410a21a62f3c0be367fd34b7824def23d527f35d5791fa69e0377afd74c7b2b60f0921196e6bec1ac833df2d7a63eae3b69ddde66027b231fc943548ead86b890aab991c4f2608f57a119c1d31eff7e7a2ff0b281316bef43ce82722bf2962903c7a1236e158f2f13aa8bd49ba596e74bb87cc18f5d9df6d7a93e9208da0173e18adfd951620f9c04731476ceb5d79278d06a9afd583b8a1f56ab24368e0998730a76f5ab8a67953a4b5bd6c836892d63b889729fdc4e60532496b209cfaada7e899e2d51aa832b8fa6d5854daf97edcfe2146c3a495d487f9b724e637c8d2981ed279bfe6f3d2b3d8d77c8540b723bc787b54a7d05b72fd732afe115ca61df6f3ba947e6c92207bb096296f5f53e0836a7286a6dd8cd6b15110455237c4ac28090af905d85aaf2f4d686df6ffb641998d3e5092bfab5352e16f38f00e920fe3ce95ac0cc68915f29ef792a6d464d313aad3b313e0fd7d125fa3108caa501c50ec363145dbd50acd2fab9257a492a2180b473c0db17f84cb9dcebc2df7690cb1268585691f0471fb17654e21af7ae004d4e4ad05694a8262e983bfcdcd2e3f41f3bf44ff81d8f5ca3cd26ec77e48d7a6cf806eb44e4883750f3dc6c41b8db1603101ca743124955f989205cb0956e86dde3760e0d9fb51b8e45c54b86dd1aee08e4a14e74b479aea3b0b7b2ba0403315cd3fb66897a82c75f89161a9c54934a55f9587252910259042e26c10e353fa90034685be3642912a9cfdbd46347ddf5f7b80fa0eef939418dc1643e6ffff01e3e9bb20dc1876ce21450d4816b9eb4e3cf70f10d7e85e06d0f41318899023c73a7521fa64ef084989288db6af5ac45ef301705e248a88c1f57a0d105239db668530c510b50ae35d3e1826fc13e7208ed5e1f14834ee56b5d8c09f6ecaa813ca036e1b8470266861eb942a715648ad31d727a5ed42393332ee79d7ea3d2478458348d03f0360340401380272feb4fb89a0612d57b7b665e149ff8f3a5ad9b52555fefa83135773a346c6cae387a94975d038c44e6f3859dfc2b4f3b03c809b0a26ad51569af5c14b125f85e7cf8087e345c963014d9b8b20491005902481907bae92dd0c18ac313f5c3531432a642dd3b068f06b21428eae45d6ec97536253313d12db3c490a0c0b11a10b430dc5992d201c009e18e3feb40adf0b6e221a22eb4fd2859738598528570f7b8bc1e8cccd7782cfa5b14a4f99304fe0813cd2034dca879439aea2764cfd271ec92fa0d491eead2757e4d968a42388c2dd7fbdaf00926a93fa9e6170844978faadeb36b1d5828e2cd1161c409bad8df1cdb828b286f93d6ee2bd210eb089e4f5032ce8e381d5001cc74a2079803c79f060b11b02aba384dd8eec2e312dd2988a027e1c40cb14d9ce8c976237060491814928dcd35713443ae1f8606638c779c646ca402cecaad58e8c3f4b3b4df5e10c11ffe7677c3add69f4c14b110b1040ecaadcb640897b8ffe7b1789d2ab83ddf9402142e67809e3eda6a4e2e674b367a154a762c0986b3495a2d012010e5c8830777b40a8829fb5700e50b1fea34210705e835138f1c1bfce28d55c13a03c4f6fc1b5790a1f88451933ad8813171c82e8d4204863c7e1d981778aa9652682105cb836887880ce50149671d9b32d0e5baf797e5cc5b1a10ef6fdab7081d67a0148c34a184a04e139c925cab672814265925ff0773dc2dccdd4b9b5145905c8a4e2acd2f31a11e6e3ccf5260ac40a21bd4dc6918ca554f9a8a933869695d4084a6d5498cd28968eb8eb106bb5556eba07291ee7fbd1b210a2656763ecac6240667d3fecb16af315a6ef70bff9cf06776632880739767ba3a0a183a8e13a34f34739681d474d265c9c955efed29c00c83ff1a441b033e77cbe82daba856e63e6c25aaf5fae3285ed439c3494aa786701f244e254241e08138683cc504ee335222274a67c742475d6a05a1858a398f3f903604d2e7a78bdcc74d813c020563be1c032268f01f65e53406933700f62eb9fee4783be81b189ec0f1f835e2f4909b9741ca7bc3092adbd98181abfd60bcc9b22d64844b9c5114cb94ff70cc1c95b16f42aa9031f36e84ca89daec2689241520b2f0095731ff40267674dcb01c39ad13940f7f29640d7723b6307d8ddaa15c20ef0c3d13dd00a47088dbbb302901f9fc94e4c10203bc4a0acf7c202ca1904b0a49d5e7dd0f345cec0f30b5d9e2e5673dbd2c6f43d2c5047102fdb8e0f514b3dbe71f119d522c18ab308c6946255b3d3f0091b203469725a9ad6bd4b7ccbe6e9ea96d575d3ebd919a72695332c3e2fb4fc2734335d134b093f58f04284479766c2e4ee41589dc6af4a15513e32e68b0c50f9a88f775d74d13e67cc2126ed3917312927022f8e541591d1beeb1ed66e4078ba78bd26d1ccbe097a0c7ae2af87fd95af7e8266c3c7f5b31e9a866d26e4dd0cbacd5ed5f5eaefa20c3e2e48d5a3202f1af864820a0688a491d60417bf434def417369bd5314731ccecc4e40df3e9fdc1761e62591658caa1012c5d30ed46a7369e2dabd788cb495b5ed51b2def986acea023a7dc787c1037d2cfcd7a6a56f3acce14bb1ba29f170cf24583b04e88e70bc22615937710a08f9964fccf3428231bdbc1e58c64c8af6c0ecc0df73c922245c66ed73cbf3a0c6cada239556731aa169c97581be67026af2fd255b2f21c9195610116d10d338a8b6680213a7964d0da7ab1dff4f7d5dc6e6911e762c14f883aa5212cc71fb8b995e27b46862fd1ef1415c72c848edad052a4ca86cf450bbf7409ce162fe35fe51ee27c704d2c31578bca0221fa7d7f3f6c4cce0967029c7c2e27846dc6970379f76a68230fbdae5a021072a75824247e45a8ae53b95b2384c7ad0298cc414d306401a418818ce31e590bf1b26fe4ac98b13e7411893d2b98a4027bcd4fbe0eae9cd24874f34849edce75921587ed39bccff39dff61b0942775b9f367a6bab86e245fca61f615b133ed7a2ae08895e6df0b098f2b91fd939ab17b308314245268923bb6ecfdb1bf30325743b116563b22be486cf5d36bbea3d040fbf4f05468272144dffe0acd099b560061f61842cf84f6e83256242eabdd26f5252fbbbf20f1dab588a7bd8226db7005a19b2c978f6ae820f895afdbfc00c8c99e4eb28339d28e4357517b522314f8f90bd601246cf1405199c31e50df8a0f34c876b01afa843e9a8fd23865e8cf004354c0d1331a79033b02b6481cda40c74678102b92982670199ceaf7ac8eed7475f376d35303bad8ba1ba5068a0f344cecee56eff2683b45d89f813dd3c8c5cb93552c0974880b64245a552e84845b1d5b5ccb400bcab926bc96c277d721460991b9e78618bf180482ab0f1e549423070533902b32259b73a5fcb235acdc72dd15f4bd3c77994f084c840db9cc390e1d6a7db489966e40d8a385afc5a1fabc7f5e4ce78b9395dcdd1dba992fc30cd878d53c32d6880dadb95341ad1e5418d63d88a42221ca8e3d913bdc75ec5ced1f4ca4dc24a23faa15f25b7ed326766c23080aab3a78cba3aaf276c726de2cb77408bc0c74b039a31c5bc38c9eaf65a519123870345d7ac93753753ba9369d23206cd97e54a69a7493350d0e7cac2163825524091bbada9cb69e8886ca58f2a07da2923ae2b99060494cb6efe776b21b8669718fbcf8bd126c74429cb76a265bc10e43936988a27f9da5bcbe018272c8fa7a1307cea18fbf2ac4d32388b9482c2f2914605dbe0350b4a08ab88f5dd3053ea13fc953ba3681dfb84f74fcef95b7f7fdbb1e8205d787f0993b48191d926d89a928125853496f4ca3ebfa51f6ee0ab326e78652c55a71c5f883515b10c27288cccddfd770bbf07c9c42543767c532aca312f688f812137dc61fd6b41c932ec6795c7b2b5761cbd3dea633e3fa9973873ee2d52d2668e3a08bf0457cc73a2c8415aec3c968631f181c38417ce6c19bbc730e172887230f27d73ee3c6f9f687beb51d54042220d7023d0a261e115e75d164cf1398a7d5ded717cb19034191dac78d15aa5b8bc30c0dba38fc1a253e995a9dcc7550f5be72f6c689740dcca04190ed95a4230b7bed0a1ef7ca154a30ae2523a1202cb720c15450a03d9410d5f9e0e9deff4ba8d80932e471bb28abc6196ac437806c50c834e9e6630e0852869ad0da54396d6322cca69a2c8f838c9d820051dae592d85a775675d83afa9898fc04cfa6ce88ea98f18be27acf64d98b0d54f8d442c51f1f12167844c77f171d8f93f93578e9dd7c2f29c4f46c712bb21aac2600c743b4f9bccceebb8587cd053a78a636262b36b264c717166bb875f9763c924bf2e3d924483a39a8da82e38e85b0140430e44b12083a714a6d8bc848e03ad839df9b35d5200a1075344050073e1e06df9089e9e43efce9a56b6a644cd670879f4942c75ff0785db15339a05d00570304d176fcf530385198e15cb1022c17e699cc50c603442b2cfec0878c808efdf4c0d723b7021435e920e84534a451107eb4c5edeac73a485372db946452f47cea4ac735be1418f6623d3aa49592bada49c26b821fcf4e9de4e8accc446659ac6da857cf2df39e7f22da9901930a5b9bc1c1c9d67cbecbdb460e6a108dc8625297931d4e7a023c28734724db9255f6acdf38a7d520a3f3af43aa3e38028d21db5900eb7b3ea85e14493f245762aaaf1e8f889eeea0eda20f2087607803208798439e06dde250b70ab3c2487f5194b1333baf76c861606919e744b15fdb1d40ebdb0fb260325f450ad0de183e534dc673957d2b9796a0231b6976f28cb19521e09480bf8335c4b7dfad2b20728b6ded131bb51791bb289673bf36e5558437a1661240f09ed2934950d76ca9e8914623ce2a2c7f928463ef01afc379f6416695a8f82b4612ac4642498727652c61f42d8a7f2fb8233b1cd6e1aa8642e2fb2732fd98e05076052e981b7b42cb73b91d7bb056f6f2cb71415805d70510a632cdc6ccdd7eaadff82a61da05719c0cf7f8b558cb9c12c1871e6912bb6237aade9f3fbae3410a3442647b202549ddc2939e2b4230dcb2d6afcc851e386b24060b2ec207fde70f7d7b4e04c660e6908a38da73a47a4d359a7f9b73d2dd0b5778594b44fcfe4186ad00b5d3cff898ac7fc157eaf20c69c7bf4e73176013246ce3bea39a1e912d62df315994b401627c387d13703f0e4628e2fa3afe4eb9b551291d3321a9e9d1d4782fbcb4a73764467b56359500dcbbbb587e8c52f9f6ddb1aa85f74878d540a056cedb5395b39a3cc80bd4823e84e506ca5ca29ad73f063d012d0ace79a1894e7f2998f369ae01205a770e6a118e8c6ebe96e9662e0f79a1b389b57f596814a243908fdb6fcd1df263953d99c2d8bbd9c77b71d41247f7475bc6c83eada9bece130b9f5766c71434471e68cb08ed6f18747b873783b34ddfc3313f7a67ee868a97af385e4237ec1490f60b81621eb418a1d9f8a5c29401bfcf1a0ea03dad9635e1e54617040d49b02f5d7924381540ea398419aa82d05ca12c6a3275aa5fee4c3a37e9380920fec31c12d12b09db384801484ca7f5ee8b4a60cae054191b1aca8802fe8cec84aa9cea6e5d18556f85a9416e855fca57021e62a4c2655c8391e8220facaa9877d3cff74b192c47dcdd0faa7bc6c5e2d64f3495c46dfbd03e115e5860e8ece062d9a18c7e1558bda1d1b08e3b0b6fec2b021c6e4ab94a46d23c9ebc732832096190d02e8ffdd662d6c2d980ebaa8303781657d97879da9f49c9db0013baf3c1cf41b936880fd58fffa14e9f27e9ddd816445e36e0b34b1968b23d9fd63c65eb6eb6b7dc10d316bb2cf5d930a9834bcc4b9398b2a72438c191effb1422fd450b11902ae80d5fcb4a72e16b94e2df0b8afabaf580f36754b32915727b5fc800ad76e62114b52080fd4f638a64d903eecd8d2a991dd3b075711103c5963b20b42ed0d17af361cfa31f38d5eff36aeae68586f29f7c360d10cf2f431e3123e0200f291e850d0164bb08950110b71d5102677fd7e0a0b950216d09aed3d3e1cab214cf6688646634d0f0dda55f4e4d2a3658b4393393f32ea084757ec602cba894fba4ae9581e35793564116859efadf0c667ea2713e6c2b4c5ae9511a9a9f016f3e414a1530c6591c2764abbc6d1317ff16785c3b9a3190137087ab1fad1a50b38775139375573c46169de69d3da6858ee91a5b788e3094096eec0822aef3dee36769d0f57a74410908125d8570444a8dbdfd18a4f6321550d103b89188ac5d2c4dad143567fdb7202135f1fc89bf0999fdcc40a3f34d463beacb810433328536d4c259401f759b6c6c904b16fde7887c62a0fabe467dd66c0a45b759c2bf78157daa80a765771503f04b6bc824ff8c6d3b27c18308abc7f4c775d72f0ec7833953d5bbccb4ec8711f7942485bd42858474a9daa0458aee93d581c7861b507bcbfd2e313313189f7b85bac3be364e80c1b74b0d68c5f670a80ffe0f04fbfbf88ebb2381003866fdd260a6f1057431eac9a6be2a8ab962f26cc396a917938f5a43d658af7a239de480a59e0cb49a6e9115ae23e63c852adb8204f02d527d93895228e41a1c03a458cd8566c833c2c9cd83bb7569109862bb0c54a849df1c40158cfa980789c9a29aaefe6d6ead893db8242632bb56721f339c40b8101c7c251abb8788dafc4f5da03e52405ecb401b94a01407cd2f800f788ccbb5afa686eacaa89a5136de4c94dd4471d72cd5582d7fdc537131cebe1078dcb0ac7fabbceab787a06afc18a0669281fcda755470f2af7f1fd8aa7a697bf6387d51725eb843feba22401ed1655b61480ec582b934baf2dfec9c656bd222ad8b7b83d478756824eba6de93b3ff64131608cc82e20741b89d532ce72cb7c6f6685bd723fe8cd594e7067ef36994778f4aae920a1c5f2ff04fe8a42c77d2a2f34d5eada8aeb32090dc22e711d07dbb68b833f39fd343b8f7111d41fed082b73f6c56435527f5d9a3d18ab89ee41ebd1a99463768a9889bb3e64a29aa7ad0768814e4183842ff8c8c1c2fc439c675acf1023a45a01ce5fcae5522c58b992df7b67332497e3f29f96a2f00837d296aace6faa2b88090421c69fc2b22ab14f4a2d933498c785e89402aaad90b99be2f6f2d67cf9dca1604b9a26cd02919fdd833cd763355a7179a11488b5e13f5df73bb09491b18930b75c19422ca5f071b054ceb2d38c9c8ccf012dadaab00c14702a7412b891ae5de56e625619e71e260e98566049f12b4d31460422bc00c087529b905ca04367049ec0f66dbac5dac9e3431ef094a5d4ff6e68bdf1a24bd8f534fd7a733febcdd64d7392ac1483a1ea82c84593001f917e707ecb38996c54ea5e20ad9920ba9cc4e7b19660e73395199729e44960e4ec2d8baa2034dce585116fb945847f64e4c62f9f57f29a8aa6d9329d9107c3c9affa9697ead9815cd06c40098fecdc7e52bfdaa1de5526e6bf5798288747679b21e01078d60704e4022931270543580a70005b63c38b9d66e085f3934a353ec93b8d0770dd183eee6008c7ca42e008a5ca2aff54e7d9ee93f8ef1d986e78fb3ace079d86a6d8b0edfeb0ef18aa73b61af9db96abb8f0aa5e7faa64da115285981e1ffaa445726d0f11693c3b83641c919ba35cf9c8c6cfc693a543aad532bf7957a193a9b74841307086c8d360dd7493c2d7176e688ff9ffd5c583848e7d591ad8b1b09687e6e795164270ba5221173c775551a26412691727f474ce40a94816e11bcc46efcd862c607462986baa27453bd3773d796efcc37c3867a0128ae032fde357826483a88ddd015b92d0dcb871864dea36322a49683ecd1052ecf2c1718e083b329128ca227572f3caff995137e8ecfd8d68bf227b56303d11edec3d4736c9da27d3101720448c5c29ad2344e47829c4df10d60b3922f44eee888c7071570397f2b009beb70a65110e499aa767863b3d510661fb27b86e681050d0a978daad73aa0e0f932645f6a4246c9bbe06ef11f4ad59ecfdb9876f26bcebf961093970ea94b165097f0cd3c4d9e50fd891675380dbf3289a0b93b258f7bc9bb915003b726ffe8cdcc7c706483f15f664c0655306e9257c779c9296253e2f9af985c97323a1b86a5ef1126436c74c1408ecb909c1ac1d4d893e2ee1ba4aec5348cbc35f8dde8af31569174113fff90f5ece9e662611e1b3a07bfb9a7fa9556522fc8dd6e3cecc4d0b1324d0bdb226df8ecbc537f09fce918b9158b15e4cc72e1bd214e4935f6070cb465f8fd41f213143c6b2260942a5de6ba3793db4875181ff8428927089611037d025326cc8a5d843cf669da9f083f04631aee7da1f8a4468c74fdfceca195d7ae2a4b54f6fe5be64d95db42817b15fb4ccb51dbefd2e7acfd42061abaef4726c08e4fb723792bab16cf78a802279e34ee395aa85d0db41cd5f9ba2844c1fbedf16cc03748e39b3c582e8a34c2ad4c9ef2bfe6322463ee477a00057002105ce0b54b5a1430fe0d618c257dc0c0b6762002348f47ba7949ae9a9a7e6d56b2298ef9712efac6a455133213fd45407c91659b58d5ce706fc7178f2b5212b04a9d7781de43c9feaf235976eeaf17457f5139861d4109410a04ca5610e66bfcb528fb11eb70f9241ac063658a526a6baa4401c7651b879a2199cbce78a614e85724c7224b667818c2941c74c586b93b6e0b157e3305c806ba5807f7edb9d48a39c53d4d2de2c2d32f5864a20391a565550ff87e59363a21b1376332d14d1a87cc9485a6ff27d8c56afbc9433520e865b8b48ae18d7c04fa449c8e0145d4ba96b9fc5b2c2a10ba392350ddde040b4083f12ac9024f1249143225328c176bc2fcb25493a53d27d92a783cb3d50e4033394d4f1be8552a6996f3b521ceef6277835bd1b0788d6463462e5539fcf81b4fb6eaed099515e344c3531e68723ce8635a83a1ae249129fe5344a78466852bdbff3e146071a1907c43b047a0263975a305816a503b1a332042405a3b72af673192e718b66e8566bfb7586e6e7c84f69872a53663f97d00ade76003ae0eef4907e03fec1da90379ec16c33eec10d9a2f0d606dcd57ff938b481481184fbabf247bef4db6dc52ca94a40c6d0968092f09155ee941295e977581ae50a19992b0ba9880e5075f48616d3c04fac10a08480918ad086da6677d5973ce39e79cd5b2a0052d6859d3aa90466823037db4431c38386ef4a327409451c2b2432833bbf911da580f7b78420c2e3e42cf4a81de9002dfd096cf21d489ecb15fdce9e8e5f03de8630625f60b007db4cbc003740fca63d4b4cf8c4105c80fda9ae5d8a497a45646a74fcbba1cb3aeeb5ad7e30ebd3dd863cd83819dae83bd76f6fabaaecba95fb785a845d8275006be03c6700265e05faec364ad91819f5e29d3ebcd0c45521316a5d4cab0a8b10391115840f103974129a526f6221ca3070f40f9d9218a099cc082c3cd64c24c001e0289f1c56f0f81c418ea2060190b2cf4b8024328843d082d0f507ca6d8ad44fe112818176ee6cdc96ea6db96810ed31e1fc608e9db49dff763f2478060deda3250d54b8001041bec8d822c7b17597ed252741184eeeeb6649d9556cbca7bd3bda28e31e5c8d469bcd305d007cd289da989c64c79fbc8eb74a952a9542aeaf207daec34cde6d46513d4e976278fb77f55bb5f8fafc77f72e7695bd2753fd3e7d4e314823ea88fb6b0d3694eadd632514a29f5fe691a1817362739e98a80e49b4329429dea21a2ad13010e9b5b5f622f8c0b22b04b36b7d76a48b65b3524b065220ca5d8e8aad42d4a290f11a956458da294524a2936ba2a758b524a29a5946294526a514a6b821441f242064aa887ced00652213eb1534a7deb98dc504a7d0a51146909ef3112a594d25a6b2d8213eca3d36a848f6e9b0891c4e8a3cf2304f9e040d608e48c15175888d83e3a77eddab5b9ebbaf8e8368533b23cd75ae5136cfc296f93efcbf7732e5361aec3b196ddb1793018f351540ff69b526816cdd444039ee613d02b6a9ad19d3c9f9b6c8fef21b36b5d6e612d2a8b620ad69d3cd209d086dee98279a7d0d5826f0a354dab5a467aadd69a4c2e85a47f9e943baace913b9247f6481f2945fe744ee7744ee7744e4be91cee6929fdd3429dea2122eee11eeee11eeee1a128c44344aa5551a3a25051142a6214e7b00eef304fbd6c355914c69dc8137ba24f94127fa04dacd6e4cff560bfc9f3d2797aa6cf94327fa690d704691a2637d28b2079a169e48df40c409b481903821710428fdeaf66de9a5d793fd363575e5a3bc21053e81b79f87a803ed8393b812d627d60689ac803b7a069e0cdea264a8951c2b03f164f1e1914f1381e3a2103d463a4ef5e3c567a271911c1644dff69e9e82357613ffb33ceac3018a301221adb32935ade2987a17bd6b853474868cc1a6746444c468982a3232c0c31c810f9147df3e91c16a38d8a4a8a08254281aa209a6b37e38660bbd8c3defca00a0abd13434fec7462a8889f731e992f5d5e18d89bf667a482043af144573e8587404788f2180f6cf5a84987a18be093e5f7abd69afc5556f783562ce64fed02833135553c019b889d7d0bd08abc8091989fe4f083f069f3799dbd6dd366bea66566cd8cd0f49ff3623c58e91ea5f0894ef9a1984f8f51a4f884f984c11cfec8a775d11e3ef9f0a906b97678e8c4e27482ece60c089097017bee358de528d48dbc4def11964f19636a843019186c49029b45ef1ff672284693bf5c6367a723d96e8dee479bfbeaab9338d02f29337867e658cd600cc219f4cb473ccc2397634a70326fcf2e84b2fb2a8c11e8d2e1950ead2b8baccffbb9cce2b5433b3b6c8e1c7710936dd123d25c34238f1e3d2600300519678965a08fba8c65a05f9d64199be9602f06fa803ee237007e8a86f5f7c28b97f7833f951b069835848d8108c685e9725e1b9d6b6c859019726439034c2ef919233bcfd98bec53d2c03f66e0e59c137abb7b900a20350fe5b5a4bc1c55ff4673e4a3111c75371a7995a351fbe8f668341addefaa2ee19cb2e41bc6b0273df7aec7c7ab0bd67167cf8b8931b2180d2184d0e7c581b772308065f0051203eb2a0d087becec1da4a90094618743ce26f6f885250ce53f86f2975f2003991a355c63f2bed6fbc530b37558fcc2b6cf2316183fbdb2e5f3b1da7d335fbd3a9dc12c9f5ad65820ecb10f55ae2aac1b8b418f991e485a30d137419bed85db027b3c33c3d90a903c4efbe558773966c520fd1d839bd87bd9d5879adcc1faccf34c0106994829a18fef1cece7c9c82616703f0430731a98bca8631da55edd2af1697421766bfc0af9845dd6c8a3767558ed5876951299413a08cfae0e29311945b66275cfb633a3f3765ff6b2bb1bc2d9724a18464d4cefb0a5ecd94d638412d6ed63f2232c9202a9e1a9710821ed8a5c6ef9256577416614582f209e6bc404cf088bc283655178326da46d5178366c547bc0607d08a486a7cbcc7210f6f8873623274dc2f6f0bc49670e6c8cbb259fd42e595bafacd61aea473eb1c327f582d0879452fed075e4b58e8028020aaa58ed2150119c9061470f818a80c3756b8db50a96afd84d8d5feb8da99de7ade61496f410a88a0a07d63e04aa32f45eaac70793a95666ee2277b76436996a656666869008084d44403a25b588aa641e5e51fad0ca47555cb1cf7fb1680b15fcc72812b093e7d4c73b33ca4729cfecf1278ee0bf2814e5bf988a547a989979a8076c026ec24e9e017086104b04c10309c008838cffe28e163dfc1779f827a66b18820e9cd041112410cae266f55f4d165bfc077f6090d7eec0113d6832c51543536eb8e125640183677619858eff625e6ad18397526ae1c54b2224f192086bbc84300502fcc82d6dc8e84d26202d82f8eb0252136516fb99e00f173bff999ac6644a0d3df1d5abf309935d271f47bac9f9246f6cc2eae7e693d7af0ef6223465f1c55b96e5a8e79f9805123f3523d88f534492c643a15038fcc8ae562cc888aaeb05331e13a558655196799e579b1031da98aa35b27aad4f287b61258b0920ccc5828a6fcf519dbf106207561c5c1658f8e08b6f376943bad62e863044bc71c51082f8761b4198e460080756d4008b14b88009ac842198994bf6c28105a2b2c477fbcb68d4ed26264f56b0bad2021d2174a0c54d7312be7dc04ada9076090053e12a78010c0406a59c3c911a42ca09554c618511cf3e63c5d01534b8e209cfce694338a5438216035061846fb7d637b7d5ad822244cf0f7ee0648b175ce9020794a40d690e02ff608682590a243c2029b49882e7790a2a5418c135d60762c0cafd603f1bc4964c5a13807c7b562d1024381999aa94b70499d9148516afe3db47b50b1de2e9923f8882886fafda900642280820285cf03c84bf7082ce84292bbe5dd6187fd4e071c10ca6d841e92005637041056396935a1ebd656057e0539022f47e1e677ceeb777bda18b95acb0b2018480c30fc14f08d93cdf1e4cd6561d54b249641191e41542d23a0621849099c22d8838e19cd2e36c2fa494527244346c66421c05d9766859dd3d95cc9f7396a28c692cddb0655f8155222b1d36f14dc01fd9dd3132ff7c737373737337df88c31c808731d007f414d8e87388a84de78e71cda1d7406bdab26601cd31cce30da661ae43bd89100123cfba78c31ae67c03f9445d56a7d8851001231f5d97566fe22bad34724dcdcccc5753f354f2a956e8c3a20e6fc964516051161030c8246a038c0bf1867abca13727bbb13c47de34a1ae43bd8110019f6c41de5857871c4837d4f9260807e166229284845e0811209d5980c118acd67a5d234d05fe7618b00c1645540cb419397418b2787b86586995b069224f04f806bb71a706166be22d264bfce0ad26e255b96b6a66663ccf9d6b57bfbc5ada11264c7c75abfb60136f79e354a78ec9d1e55775eaac0dd1f17d4dd78e4f8d128412428748a7a824c41a443a3a3a5246413fe8bc07ea27217d741a38e00945662801f4849e27ec64538d1e55161ea899347cde511f81d2e8f918b36af1c57cf1c57c492aa9a452b2e44efa85824520ba818e8da002ae51765d183ba5b7e5f79591e3ecc10957981d23c118292f3dc887d4cbaf06140ae516b4a4e5d2ba5f5f9cb6acce5a8371dafb719825901c1dfa2607eba6061e40fda05028217272b8616e24600a0a410861909a19af65a0cbc0a3adb20845551e0261593d140f81b0c0e0db6910122778f6a835b77cea94765fdf8f73b88461f9e23c955f5b6bf4e33494ef35b24f0a3443f9c31be89ed55ca89a0bd3bf38f42d1d65794a667a61e03379aa464fc93e58b019b2988fa63a7eeb07fbc155f78dda0b97ecf98c65184a8f69bac8ba5f0fcce9fd62feabcff37e3a8a743cdfaff47cb198dbe3b11496439217e6fd3c9344bd20a5b40cfb0e4c0b9a6fbedd2552bb5dd432cc58d45c802de351730122c91ccb2edc3c637293657749e6dbad5a0bdb27779eddbb48023102f146bb5e9096819e75302d541ff9a88efc822d338b28aae7479d14eaba5ad4345dabb526178a3c2dd434b2c7644d2dc42df4dcab67d9d332dc453d5dd4451d16218cbdb5478ff2b33dcf4d5394353008f010088d1dfc4684001e02155dc1e2a40712de664103881506a18d16330819eb1184f3a2f53f66662965db58cc16ad13c24b42d89d7c084f2cdb99196308b5f8105608b56cbb9880255b7291d179b4ece62c4794999452c2d890c6a0bb1443a91f474bcb39bb9fc4e84d2512705e4afd123e86cdccd4529a711d19ec7cabd618d572020c23d8eb21d0194658c2f643a033b640819d0f81cec08207961f029d41e50ca18c89338ef8ec21d0192af082eac049cc33504f6e6005edc9b962a6a85802082b681003594179969844311eaf98614c25aca831da48af28563e043a8388f73382b02cea0538038837019de1a40a21788b17f0a49ae084208c78c210ac065013b2bce92150137af018e908ccdb625a6b9d738e465d0d8e585dbdae0ab5de6f44a4f4f2c2705f8ff0e2cc4829cdf19656805d5b348df49625b2064ae0b9b1a176c13c38c8b9b10148102e30e3467a774b201a37364020dcc85b03c95e5401173f37361cc009393e7288347a6e6c981901141c6211767822083d37d8cc64b7249e40357463035fb981ac802f8b15d60d2681094f7c6ebac3a4b8e12e3ea34cd0760cba63c7181831e711604b0875984cd3464a63c77ec202e8cdd8b19fb0a0d6e9c3cc43b804421d320453722c597bd5b8453b3b6b59ad2665327a1c13c542d9d755a90f180c74f89cc14b0bdb0022a0327e3e89f51e900fa18fd3fc795a251231eaeb150ab3408f56a0d5cd9eaded33a53c6d3398c69bda5964930b633974c2579efaa8937c612c2b6a56eabf19d4a762d07f6dc653cf3ad544d4ba30d645bbad588fdd26628f665dd8ea17a499714afdeb208ea7f76b9198ea5a7d77d1d3cbeaae53ec0db1477da6699aa865a89b4cd6ce34b4d06b062b16b521555eb7a9c896f6af127d9d7aea553abd9a28a67039f5eea291001b0c4843724aba51fde3f15f1359b0a1570f507debaa6ba4af3e3efeead828ab5d57bfaeeeab59ebda55efbe88f85f57cf1fad086b46930efec12f810449bf3ac9e4c797c1f3106815b52130d5ebb59299f947369d9d7a97b177450e1376ae2bba6ba8e197f0097a5f77f21d33b517141e7a4d10120c90410b6a7ea0892880322d1f764729df5e43d3c0ee179ae60350a67d8829fd786be0c2b2cb5bd44e79544064143d045a65015a5db9a89018126bc8c6ae8961e6630a7aacfc17858660133d552446cabe196b550cc32e25ecc94f09464436838c3e5260f81e9932b0975d1723d89682c1d992b1271f3af1a344cc75b31103546508dd8c98dcc00bc68e3176a43ee78c497a8a21948087406208f158675610d6f9924c26dbf18be169952f9d5e18795740e2835dd5ce6259f5fde0aaf324742cb68488dc278d3fa9fe71a22b03a9f84329a594e6ecf4e40ce538d14915c14365d483ebd27142035bb236d59ca222e638d1a102da401dec4d8e39394444318728e61045b176d083c1982fa67c2ccbb28408a91cbd1590b460bdc6a690dc263528815a2205fa086102162d61c2b26aec415254c4454f786053b549b671c432ad86810829021d490d3d9826e66cf7aba699ccef0f8c088b09b1608c115eb67649e01a42a4d8d83377747666cc81f24e463ec064e4b99eb059ada169624e8e901d9cb05fdcd961e78a3b401b5862cfdaea2f685ca74721ad1de9b73cee70bdc04f8f46acc8c31ecbb8c35e11518ba320640ee1846901c39cc94dd6c1b4902da94c6ee0d6025de81b1817d835d7ae0830678737f1933d0f3515aa634a98fbc9d55db89fcefdf4208d33f239fdf2e9d7a5811fc772221068750502ad9e3cedb89781fb68390cacc7b4a8b729c89541ba221d049b1911e3bdf0ed31e602df1edd230f2fb0c76e03edac879338254e094263ca3354451e3e4d67336050111566332a641a84dbeb677a36bd607a189c6a47300081f6e956c350e17492b1576be8a2a14863dba3b7cf8b13a7f0495ecb5e2c41ed04550883311fc71d401ba19caa6377baa3ea47e422d7a3523464bad4863c005ef94f89fcf61ff6380ceb75f7f8ee9f58b1601d69e3d6b28964c952ca24bcf41f524a2965cb00fc6009582c4188670bb75019a103acd17128210dd9335727d81825573d6031e8670969d820d50e2ba6173b3bac8042092a2510f5c89e1ed788b05d08104208c7a8355a31c6fb59d3290602f0b22d2396b7d329671078ae297300e7bc5c1f7a324a3e3121c27efe3c80603f1e3cba76e41f7943f44cb58397524a296577a5ca330a6c74cee2aa635cd1e818686c73072b89686968ad1e172e99e27505f18f708f43397aa6bff8344366995598c67df2f01f928e9f5511214a64689a5ec579e5077b3ad8270acbd8f08f859ac425ec4d197a3545a2f854e71086cda1d1680ee5a877aa72f8375541d89b3a7caae66a9ac1a7e89c85a4657eb037ef0c4c27a5aa6990a4a62a3555a91c5736992a937f7292b152cd2b7345d23ccb543358a36e06694d9544cd201f492a45f3536badb556eb0786659ae0f44a05f110a40351d008cc081a0191a545f5b1a60f283a345133074853337bf828298e9f9ffe6d0f857efa67e361ef78f18f5f0a85584b699aebf3dedaddffd241e84528a3634555d9472cbed51dbbf82da5696a4c2d450bfbd1a287da90229a854f399ce60ed534cdbdd4926600c05eb9b73225aa79cbaa0162b9ec6aac2b23e7b1abe113e7d381f02987cf175af4966cb1ecf1a043b40890a68b5a460b787af129759a9093849f12e505a70d897247ee14ed605926618cdf709343178fe92294890e802efaedbac8e49fbd266b6a93e9fb01838010e97c76c43a5e7dc7fdacbbdc19e8459744f7fbb1e37e308a2b47900a368a7248de1ea90c934396bf3836aa235290902492433245922a69e587b4c91797422f9786686596cb21f6e667dd17e71cbba475c54cee340debb4ccf45aad09cb81ede81877c41c5a581562d398747462e4724833a017dd248b3efa749d8fbee37ea69c8f6e4dd44797565b81c97b8e18492a449824f173380df25f3c09e95fae1462efc5b94b43fc1cf7cacbd4cb9551b0375d8b7e05598c944529a36fda1019a52c755ffc12fdea0e877087bc32883d5baa2d28380ce261ca478774f8f4c9a09f3ebf9a1d2945f0e99343ccc3a74f56f959b3e3b3a62a7c2a3d0a5d893d1ebea31b8aa6eb72a5d07419c4a76fa2a4942ba50c354d4d5f1edece4ef9a1fcf47bc4758e1c39a2268ac7755deebdb8651a3a2473b829070c3cedf059df86b5b1e110d2585046ba0ddfd135f4a453ab930e00e957ca1c1dd7552f5eac35d5589f75613d47f7e570eab1734fbdbb3fb6d12d268a1e8162993b74095387823173e81025021dea5a634b9444b167371eae24fe6c325113c5e34a14e74229a55de794070f178ed443b1b7c377f07089ea2c3ba45eba254b5f07801b9303f4a67f33e6ce1da0ccf4398d480180883b7df84961a2e201260ed0c7f44fa23a9f9d7ff53b47752815fcbddd3ba7a597899aa8d964e66cd60e14fca343d22dcb71ac2b6f67e1712f5117dd706a854f2a3ec92b3b5c5a619aebd325119f78f8f4dbc52c2c33bdebd83bc6b8edab9940d89b2e7730972a94e8a7f3e862117b26ff58678522eccd59b3e37e75fae5b2c53751734aa29699ce51aee42e2e5f7cbe4c18c7d17df17138bc74c86150e8ba88bd99d1213a4489a895164b326d133573e8d0f40a73271dfa268a7231c4a75184c075791ca25528d1553d077c5377a31b9ac17aa19443fd74d357a7ed22cb63af077b3fae4aa1571f1498880e90e3388ee32cc7d92c721cc7719ce538cb719c75ce3a679d2b39c7598eb31cc7711cc7712d19d55498dece711cc7711cc7711c6739ce729ce538ce85b396736b2f4c89736b2f4cc95ace4b17c65ab7d685b31cc7718e6519c7719c47a80de138df36ee92388ee3388ee338c764b6752f2e3b92478db3f6858b96f316b7f7e3dcfa375746386fe1ecfdb2205d4a039b0e5d524821a51d0db65daab0ccec3109e92d16daa7ecba5d52e8137a4b17296c24626f46c83ce706bd95c060e6855093281ff330a889cea3ac951957ec67facebeb038903d8d083f843e5c84ec572b36cab421340bc37ea6ead42537ed7046ae247e0cde7b57c52c0bb332cb72ea3f622f0a1ae28faea964b992f874e4d5717e409bcbdb15006da627214daf3eaa4e90d1e43933329d7aa5217e8ccc2d23a4f3c2b0f38f917aa6f2f0e173f7b7d76ef6be3fd8ab3d620a088007609e4900f4c1114b5c4119f65806a4f9c1cc33d0073be6036b467b77315aef23daeac73f224d8907f8c0b77f35f04e93ba68654d829ef20e4fb99c2ded7eb6b3fb559e62d3fdd30cf43114a31b57d0870fecc7cc13f2d5cd10679095af7cf4d9317847482f6f248a3fffd5cf868f9eba9c804354d86b6f6959a2bac0905019aa77f12d87d5d7accea26fff328afaf6af24b76e9a8161501b72416127510ac76f0ee15cb574cbb46f5b8bcf21086c77569929172a2c8e5412bfb3b0d7ee4285c5697125f1377799c27eded2cd9f3985bd9ec2762537b578fbd6c52fb534c1b648613f5fc56e39b76dbb3388bdae1a11eb2315f6b6fbc510575e9bb2b05375a7158bc88aa582362d2d5d7c2b8c768b884f2d1786b31a0b9bb7b45c18ae05a685d4d2e22d2d2d778528ece6df5c11fdea5bba91b774f16516d6fa346316411bce7ba2d13e577ce22e8c0b0b9b73dc8571f9b9e2130ce7ae69463677b930dc3de23de7dc8d618ff33683bdf6edaec0dedf5e6dde5b37c9803e56d00714362807a287bf39a665ac0dd96456ea3e7eebbd6ae8a5eea5574153a8696c78fb4ce5e8e9223e71de7e39617f5e093fcc11fe1697ff89e05bfc9b3e57363ae669198deb90b027f9b4cd35beb76ddbb69b6d0565dab7cdb196aca5a5879a4a4bf735d16f5b0c71f52d1e571fe32d0d69b926f61a47cb6fd76fbfdd6c65401a24338d6feb5b2e17b1856d71cebf5ef58a4f251a8bc8a5bad5341651e9ce15d1e57289be3debc2b65c9ceddb9cdbbcc5b1ad23121f421fdcd6d2d249e73aae6bd932d688c0cd83f4d60dd1606a35a97cfb35575fa9f45faf6690fff5eadb855f76208585325af9a4e340861db98b26d36b3774599564921dde19e62b816c55f58bcc6c0089615e675aa653e871f9d7b5f6d57d06f8f65865f7799127eee444545196952a9ee08ff4e0695629e169babcba244b3e767f643224d6c03fbcb3128a3c4532490dd67f363cbbf5f47e4c608c37497f4c219a7a481c517c91c455c403940fe2e1c9c725827028eab6e894cd1bb0b08928a897d207838c41267ce68e4f9c3b49409a38d4833a77301f2b9f6cd13e1d8569664eb70f9f2ee72c7eb3f43347e7f9099fac5904cbb03f79beeedc61af0b1b6f4bf9e64efbec4c53cf9df6e18136b305bf337766117c6a6aa9b08b89a011fc4ca1a01238c1610a10282078e2ca142d8b88b72c997a72359184302ccb42138f8741374479d3c3a01b8a904a04dde0e4079e1f8476008d822cf438a7774b6959d27994a4fd6e1602b48110328c715e0899fb3ab31a199817528710427995cc9cca2748232dd95d94b0d67abfe914d24b6297923b26d306660e0ea7917933ad95a837541c68349959f628746b490c9eb098652325525e53ca96b24dce5eec346a59d685b9bcf4111b19c1b6b34529a5977559f6affbc9f0f5e2584eb18cc248875ebfc6800628a8909286166b9071c50f5da09ce0c40a9450858b287498091460b253860f2758811a49c8c941fb00c140220c1ff0d08227455198e0c8144efc00cb1541fcaca04b30050c88b072042424c1043170f242015c802e5ca0062730428c19dc8003227a903e280109283003063b569a041488cdc30b51881cb8c50bc4e0420825f0218582dee10524600c81058a2476508389d681021108130ced408c32700043088c1ec10b0ccb20b28117396050f1c40b9a5de8012246b7d5b9deeaf0a5ac2e25bd34e0f0eeeeee9b84e6b890603bbe55afb46eb5a2cbe99647eb26a1f788e89d04465d9b527644a6631ae657bd3cc9a85e1a70bcf54ffa758d2e8b39fced2a0231d7b09bb107ab6333937cc269b73c736b5d66b2c5c53f263eaf656b7c8b63f2af1e75fd951f731ab10e421fd0e61addef72cbc4e7b56ef324d3bf1a5e5e1a706c1e3523f5934cf700cee599e35cde321b843d3e79934cffaa97ea4d32bdfa26bd5e2ebbfaa5ebdb75938cee11d9122ce72edde63130f1f9ccb92e73f8a487d047cbfdb22b7d836f3b263ebf6dbef9477d73ea30ab4b9ac0359838c212b0a4a1c613d6b829790e11f5c3a393d304871b6e72ac9b1130b929f976c96b84ba8400f5eaad19b15eca4deb32f6a8671d4efb48fae85e9d4b1876e4718dff2ec72a1a462eaff71bdd234ace1a4c7df941604cf9624ad017431cb05833b27dbd4afaabcb2e7e927a618e5c16608cd49f1e83f534f4d3fbc5efeb9915d80aa41c2e47b030f51f139fa70e4d39505fc2e4867a8c94baec26edaeec519390849025b78c2bacf3afd564eac8cc10b293c9dddd94274beec855304829851d06a4f3339931ce00834bba633a4691b13b8ef14302284fddbf8ebc8ebc62588661b5320ff7f093352cfbd42294fa858d688436984b97359e2c979ec5531d22a385754964188d3a18abfae8c2586ed579d909cb7467577744e63473e913458a0f12cc3b2d237da28cbc9d7d1809683347f1d9b246b3856a692af0cb3baa1d6b26041f22a620964bcba5e5b28e32cd88cc079911da5cd99c46f8ea92c8303516a45bd34decb9a583bd7a8554c7a13eaf5a6bede0d3aed68b73d8090df1e9651df6aab01ff33ce1d33779a04d0ba08d749ce9d531395b63414aab4a24ec714ec65e77cc586e1f1316a2077b9ebbc96429122cf50f66e41766748f785f3f2874ddcfeb3ca842ccc2b2cf0c3018f3d5159f2c4beed8528b9482cd2cf397cc5f5e6c48b7a45bd22dea96e51986c20d7fc171e386dba05eab4727591e56f130c849cf6302708d0836002fe6769d8be37879f18c87762466d90ecdc88b67d68be59945802c421b8e36dc642387c96de4e8e2f330c0d5b9ef4001851cf22dcba365595687c3a41121402677a68928557dc2509988aa153ea96e6847a45bee82c35dbc52e1d397d5213ee1646ef9f49ae2937624be74f04b9a91ec86bf60d5a769a2caa769e04db559fc168d08ff8deb364c4ea1e4701ccb6f401b19409b179f8ebd7449489fc3ad0ee6c56f70f6f2e23008c3982e0c0df24d9e84f4267f797193c9db310364f100998b1496f491f67c10ec47777a5e1c9b7101c28ec94d97864864b378f864e5b81f0e1ca44d3382e3be74f06d742fce9a9117bfe13992c4b7e12f1d0df16db8d4e113773f1ccebdf8d454c0b1e14ae2df701c7487f2f0c9c6dde193e97e368ae0d38d8b63c36ff8f4ed866b9a111b37109045684304877325117ae70284cb258a497df8d473f9740a854f38d1eb11ead533cd48bcf562187784d88dab7aa13400a58bc25bdfcb5baa0cda646e61966b1656857a75e9e073b6fb51a324bef4da7db5045447e648279c33a15427d0c774ce699a5a0228331d06a6150cf173c4502814f6660f7b737a9d51787af5a93e3f5d56db03c6f2cf93d63de2bdc75e8c94ba655941da8a61a6abf91bb123823a46218514524867e80f3bf2fea11991f91af6208442b4211716b683f0693a752145828c5260b36fe671a27f48fe8b2e843d4a7d76953d6a5d9c763abb2042ac58f841d8a3de9a118d85abbfe993adee9bd6dce6750b1b39d5868c5460f25f3b5b4c3eebbe99ef945cee7046b7087bd45f087bb43b02d007ad43ae283daef196ab0071ae0b9185195d23ed4c5a608fbad48620813ea85f5a5887a9a62ea4480e7bb40596a19e65a5920e1d3131ff5998a28e640836ea6053603d1db3d6da0b83e4bfd6865cd88584bdcc663d387928c5c320124cf9eb9a9a46b2cce5ed97dbfb7924eddaae4bb8559f59507392ac4f221ba6937a28e26132c92718f89ff6579665d9c704d381c3c64ba9c4b5b4981c879d2d5b129275528bc6c2b66ddbd6b2d949d28e5823a48be5c8acb52412c99248fda4aeb207b90a1b4948aa8bb71b896f6b257d241c924fdfb423d6a76b9a11d29d17ebb239492492632d02292f22f493507e7e181823fd5f087ebbf5fb5aa15f7675478fbf62fe2ad5eb8abd9cce402b76d3866c50236211a5d8d90aab787acf0b436261f3392f0ce904335d33b239c9f3e6bc3da8f0e923798b370ec9537c3a129d4863e5976684e473db7c7698e9f297bfae00fc8eec72b9755ffc23db4f23a49f5bf520dc8f7166eaa825899f411f97bb4861a7477799c292b423a49f8e91ba20273b0fc77818d40394c776642e54d82f25f49bf3c85ca6f0cd95c4c7d938c2ae9bdb7535f356ef27825a6727d9a273ce8b611c2126b7ca9ed6cd50ad20f9afde1f1f5d764be491042c3ad60def0f3ed56a9bdbad2bb6bdbbfb43f231d05aabb52693c55ed35bf350562d6cbb63895752cf3f64143d8262e215198546426119fef15d85e3954f65b75e281bffe39f0a25ebb08cf922eaa5f4208473de1f5d0c3335ecfdf851abb5fecd7c4dbc1716b406f6248d1096919e65a5920e1d31312f7bf4083204db64583f3f1dc3aa945325650e9046862a7bf83a5570aab02c2a19624f056d78aee0aa561994c82083123e8d685233cbd04f6722ea44090b994c762543ca46a14162a1cc8e1d3b76f8678a539561239f3c9c36994c9db84c958b7fb488a99a59248ac78e1d2e3b76ec584dd5bcc2def4cb0a9ba186a66a87e4e13c86aa2099122551122565462291ea68aab02c078c2391c004bcd4956aa9543bcf24d6c111ad32f0143e59ef59f765192a9b28d96466c941a9daa7e9a2397caa534551b4c93bf9a9f3458a683ae48f44354daf241721d9161ecec3d6225606f6b86ccae003ab430ad1844f269f2e75a41092e7cb8ae8fc934f688b4449946c227374d45aeb54d55a6f1121ee4a02a752a8e4cd95753dea14d108000000009314000028100a078422816030249275e90714800b899c4a76561ac9c32887514a21638c218410430000444044682615bd27b34890edee086f4724790f9df91a71afeae35acfbcfe94a1df15380ca3ce64100b556f58b613bac85791ed8f2718aa1b27999a0495725222123a160e58631133259bdaac43d3c340a795209501ffff6a633fb631d94b2a65d122c406df0a7a4208b181b826d23356ea19b6535c50002ec4132b15ac27b82007ef17eb3ff90f5785b146fb1f9d2b8f018bb1d558b423732c42d414d1c104befdb65a15bfc34b952f993852e92ad7dc40671405927c4dc718629df19d4cef0002b1638135ffe038cb31199d169d9214da3c373bc7a423806c305ca0f0829a07cf10c20bf10931a94f6de7cb7158ed2b8397c3db19384888dab25b1c77fa989b49f18018dd1532d067dbc8bf43fff958e95aa2106300ab1d9438bf60137b63862f0b5463a5d44fb208a93a0f2103c9b1d28924c5b79d5c4234ba1fb824531115298fc487b09b8065d97d2e0c1210786d1e276289edf70dfcb121bd743b3f3530ad13918ca34d470111d8b66b0446abb11ece6b283af5384ce07dbf5ed2b9583550a2c8b2290946e955a4a4cbba43930308dd946ccfde081c3e6b31a204d2e0e35fa96bc2b18004a61a900ef241c79b10d33af06ff4d5fd28841302a0f317fe3419fd9f8813d38d3d189288b3625e581c78813cf227225d7caba7c4d890bb8d258629c7be06f334561c64ef497c4271c8994828baacf3ce2ff0a5f3975ae27842404131bc624423e3600ef24c89c7b45e363f5093f318cf6ebc65bda5d5f078e681ddef4fbebe6a2fcd4aa87b8c17ac569df81dad660606a1da5f49cd173779e71c042670c1f170de66f7c7e531718b594b07aaf41cd217798f2f0f1a0c71a634ded1857dba30822532278cf0db004ca8d2b01a0dd1a9a0f56a3c83e63c99547ae09048311bd4b8aac38835032c7a950ff04c1cf67afbd7af5c91ae7f914092a8891f0762e355121325cc1c1cb68a7ed9a6153a2cb2ce05ea4f7c80e6ee16711abeb9a95962468188a8bccae99b244ab534d1cd871824b138793de10433d6b0d5ae1b78b49616c663db468a7405b391370f6d4bcbf38cbe1ebc6992376f108ed3420bf145e5eab8f1dac6dddb4dcff0215626b1161268ef73180a59b482309cbdaa53d5547b6ea9905d9d7ae4cadb0f1e038245fc4dcaad7a5f08d9e9f7748d0c72668ed05c1b5e98a8042f5bda74c0f6a87437e5504c62c3ba0e9ed180d626ecf4fb172d785ba3a586cd5815d54a934409b52440c2a451b4ff6198aea1373fe80a0a0ca519a8e00a6920530faede3365d00bd4e2c06260b4fdf56be980f862e9de029a9207b2ca77d7b179dba4a7ac20a6216ca1b20c0003ad685625102e2c4073f8cfa23f45107906eb2bd9ea79b4ad43ab79d9e6bfb6bb8170947f83420d58d5b655e1d97fd14906c73f6e9a470bf08d131dafbc635550d00069b60f93dae73d454601cf260cdca124dec2fac1c24cbc830a149ca1dfd38ead0c868e7fd466912b746bc3cf84be753f67f7c181b4a5fc8eba66a298f7bb9e4a33d27ea25b36088d9b53bd277b71fdf3e1b9b65bd31b0799aa85ad56c88cd52f8ffc7212fafa8f112260ff597781a8cd942190c3ebfcfeff0a8487cd30d8b55082b79b4823da82a5c35de4dc7bbac7a9943ae68a02e726ffcfc9e6b1a68561dbbc379de46887d5fa4baac6ce793607d8819be44588941875100048b264c6233bee026461a0fee4ac2c7aea5a37add54a0d311f642421951de72812b757c432ac6f5ba87123b451754b91f1cf8206382a38622dc7a3e758f5126a59eeea6e1c3a121ca048e36a29f61c27b9276bf46691f36660351d99a1abad6f3788b93fd5ca0efffa4687c8da2f8f2e1616be1e487dc7684f7a16ad71d05c3d7971108ccabc41c6541e52a0d33fa70787932e0fe924be2b713bf864a34e4746c6f0e292de3c97dd353a780ecc9510e029ac510436172dd14922ad348b1a85849c5a9a43fe6a8ba53f03849a2277e58fa1243ac4dfc3e2c7b201f0ded2f01e0734ed781598d8622f9466521165d953ea01e8f1cee08754a27f0672918c3282228e100e88cbc26fa8fcab42f12bd49efc2b74157d81ab00f25802795a4557996af406360692244fbd82cf1b851d84b398a854ec766dd72c74b415294a7d2fc983c455a1ec6672bfc8b63d1b216ffe4675b415eb51ec1474a4407b6e774797fd05523569057ec0038b7bf24667ed0c1ad2674243fe85a65a8720b6295710315b027a3d7cb961d2ff1c1a418b4f6017e20819cde30b9885c4f1768fd6f82bf46747ee14c22d6a63391277848109e172e3726ee37f64806fff23a17ce4d1673866173a40ade2c8575e157a5e88954845e9672c0aad620cdc0a764c7cc94bc458650bcc417304fc8efc8c5bbcc886912b44aa561ab27f84d256e3a48dbb20b1a354a1d80841669dff3c63ae53772dd87dd67d364378ec113b5df025cae115181aba7342c84f648392fc3ede142ac5a81948f89cc2aba00b99099a0ddc2cd7e2bb3b66c008b60efaa52eb8d510e8871f09240657d5ba631c12ad2c7d2078c48f320b6711c3e7f303d4cfb134f7948a6028ff21db72ee74c647f9c04f0c1095382f170c0a9d9c14c088eba53a54798e4b8e1a234c42305b895eff7d30cb4305ad0f2962754975e5cafcbc6efb282fde544939dc7e4f38020945eb3bc68c284942b6c7eaca757d42656249224839d42c4278098de04e13620e83ad3b857bc85bc573894d35778f45ba2be90e8a5a130b9038a6d59bc92ee23c107406bd207eb15e71845e14fac1f271f77fff23f0f29bd6abe6a8ffe85624afe09835195ece85ba5b5231c78a985e44e0abb91377b7146c0c37a8326a804c4172f7a1a2f7be1418147a11e209ce882ab93b83fda806aa02bebd93796aa1393bf185d9379296272fa1a3d840bc924ecb65f079736897c3d2b05544aed6f4c2dcf3f574029362a4c185b597f09ecbad41917b157f012029a208f4875576b22f78b2d0fc673218ba2f1939604418a83e0461b312674fc73b487a4c58b9e0ba80ca56c4f5be5734e01a6acbecc73a91399e41cf7305ccfa7349826af78c92d2752530e60b271b513a195faeb108f6905ed2d87f91768d3fd539e1bdf64838fce05d20b95d19fb9524eb4532591c8004a358d40ba6fe52ee8dec5c8e9ef6ff131dad2d262634d9f7aea0aa3f3ea20b502a89c59b5ceaa991a523d01781c20d98f6ed2c3365b1ea5ab837f1690fcd90acb6f3c13869880f26184fe110c99138ab02b78226ad04cd0a166dd9ca41b4a14d947d9a47af630a3be99108254444d44b275bd44063d5b50a5698e16e10f1ffdc6b19046d8494885fb4456f2caff08b6bd4c4694a85506e324d717af3a1113048cc199e2f748e20181b0b4d15c67ad6a8c9ec4b159511357ed5beabeaad96b182df6474bc3fa361945c100250f9a5caddd0bcaddf9caf963f56e9e8e948204a5ed5f185ae0b57134f369c52071c494094c91f7af2eade16af86b55a20a869991c1c4cbfc88cde441f62711f8872ddafb3c79ab0e8743d7aa5574c9a968efa7a9c374326fef5013b8a661a5d84bbfa774ace4afd262542fc85235b022bbe5bb9c4ee302cbbdad8a95f672ba14ab2725acb541ab65f2d5f252c4b5b32e1bce7d6a198cc5714401bd99917bbff43b5db046a64f04abd6d1154deaf6d94ef0ace66574c50554e5d1e31e053a07f1b821599d397820feaf06cd32cfd52d5f8b89b9aad7ade86e4bde3996ed1270a09bb523b7cb0c3bfacaf4055d034143bb3e2aca613d6640ce5262d94b1ef997f04712a51966501c5bd50f11e1e419dad6f38d40b6951ea6d9acc47e50646b454ef03103761e46a40f7004d55e8189ed19621e307397dc196b24fd81e98a5d7315a85af6237073cd64e0f44ea9ebf73cf5c1b512881b50b1012f81b9f44d1b469105ae640814b76c1349875b919427b941412565bb93cdaaf218a464201b5385d07ac6d29afc006451fa6cdf95a48637da5bce4667b8db2e64c7558b50ca189ba73f0f18d525c4dc578a7a0d2040f4c58c2ba1d538d716ee7ebc1864f83c1a3df4bd095e8540810479e95680b1b98a061aac10afb040229bc5bdf62c30e191c641eb79a7930e30aae4d392782296f274dda0b1759150f9a198b2b02677c4ca4e143863d7b8f0963d72d448d356e32f42d63598745616cd3f8285e4e595d170a44a768a304b5466b11678e9a20570381ed9c35ba2361a2e009e241989764489a047aa413242452d99aa7305b9675d7f42f3db788f1dc720d40d5979fdfda6673a94e83b89b2d982700bbf5b83e6627a56ad6a52b6c2aa05059afeb6d29de87420e8f2a0567effe15d122092ae9f2305885967c1ecf18c18a60e36408e57f1f3b655311741d421438a917d05575428c0e36953768c8152f9d2a5a793ceca1096349331032ee31b7f384a116587612fadc43547f2e34249592b521516d455e312376ceb0b814ce30bec90b76f55b52237911b7f94711b06e09f258119cb521d0107a080081e942ac13e52866b70ec7905d1cca4ca779c10483c5f77b9bdf9d6a1dddd437f1cd55ca9143ca542b63ec5ad7f8434b7164d1200618391f52fc60bd6fa80174f9f85914d47af011460d7ed08474f41d286ca617e4a4172bda180c62d831aae5a35393d15af4b20682674239d85325a6916328271dbee946c83a137f2974bc411d3f49abded195c20fa6fc7e372fc44e00b1961ba3e3d3c76124a91c7071695a3ae27f23a681aae04574b5ad8a48b6135e758e72836de89239e6360197940d3bc889ec4625390183909910092e0d13ba36621072bf08b5290611c80d71fe6682765a4b9724589ec0ad1807dac54db1295d5972f5f57659c3405e49c6fc0c8a41a955ab5c2d9b2c49ed6ddc8360f4c476a8c3362aace38fb2cefb178da5aabea91475d80d316bdc4c973c1c4e612a68bdf099da71e8c1efed49c228f0e689d76e935dd9c832934592904ec78775b558aaf16780e5498516eab81ac8029e4db9d1d2cb280347cddc2f48904647c876e76b33d0961f8f9b5cdf3d0a532b593723646e348358416847807c1402f287986c7c4e6b0c24a8ecbae3d2f73676a155a362db027b79bdd62785c3b2a148e5a9faeb95c77458f323f5b260211423a5908607499cb1020e611bdc851137d664c2082907c16c52eac216bd9a84dd074130418a5e992bea0e341b4afef8587eb2b622667d0e395af279c5b43784c51ac27a71ab60f0fcc24f0354306801cf46b0ba291b9a5ef12af08b5c16bd062420e29b7b0e28b591641ffa9669247a1db77b93ab726c1d747d694bfbc8c87a309c20f47910cf75f39897030cd91031e53993b1cf73f43d45dc3af7b7e25a493a0d995c923f232e4c2cf6228f7a23227100a6af511abe6e04939464048f453877601de9a8ba80b7fabea333ea5018dc3ec5e2f251c72e1a1405754fabd5addda8c9c9feace178a52b99214809a775c1ee94c14671eda376243ece6777c5196a7920ddb978abf20ea709e885a090b5c5d1addb217c02bdc1e863d128cb8fc586d8d4c6aaebb3464902fb0764db060b3524e0ff1b23fcf6f069633bd2aa332bcd5b4cbd2d7e012193e59613211a477a1132cc5e0660a6b41a27f9f42efca1eb803951ef50011b8c49cc44fee618eb9c3400ca53919e77ce64836f4455f0dea57b924701c69b82ab4acea15c034f99360fd94c6553e4d569abf29ce3fcb2937af103e6d7991ba49a5e249a5ff460a0b123f5835f52f9e4b9fe47d34f56bca3fd7322f971d47ace83ecff1239d9be59ffd4dd14dc4efb5f3805abc9fdb7c00f9880b1b27a7a90be00e686615f9787e0d7021d2b74afb073ba8c15f76c22a7cab5278acf090af357c2c161b8f6470ce8d55f17443d580fd84768727f0973ab0c2a91a944d84ce6263f62918f100eace859e6079591806c96ca9c06027d9c28bc22f585ae1a9e59e0340d80a9767f3a94e69f78e4b3220c83df02904e56f7a101a3f032fb8be9a31856b9734840c743186f4ae685173e8b114d03c8289c18c0709f00311a95cdc2fc214cad3970bc1c2386d4fb02a537e521de1e23028b91af9ce18f5b1b86b01131bf626a9ad52af1d483966c63f3b12c14d556986c371feec21dd86f017dd9c0c33250d04b11fb93a45bbe865424e8b0ede6b5c2395fdf596922c942ac1b70820d2e2d19387c222541c6a637f9311f8f6b23223e4213c3e7cd1e8f3042170b4f5007e3d2c9a1a68f675009ec918353d55e80df5fb7bdc0a2afe7468f24c85ae9e09e40b51c060daf91f1f8cfab899e65b82d24e0da56da375b11d2127f13ac22a0ab5fce76cff752330898d87446fa6812961d579e423e0c1ee314f0b24021e1a654e85e571bb6515d74905a3a9a6db5a24664c760285d1e47dc7e34806a0f794279b7c5635118f687b3c5373dbda9a1730a03d976d8f310fcf34a9c180ca64689838930e96d0052225e9f98cc78569b1491624bf4862ef4dd2552e1160463e84366e66f426e3f4fd06d72cf5cd011ddd00539ab0000ee70365e92476f620d8649441b9ff89483c2495112373c9da3e6ab1fb8f49cdb21b3f12993c7a43cb8a7ef790f9a107e2cdf6e34a5e476dcbe9193c07433787a37842c56b1563bb8d8fe24576797904932d4b98da74d5c63a4f749262aae4458280468efb076a9beb2028969970a1a5c4e71470c0ca3eeacb635a576a9eb9e9a97e5c36186918826d602b050524faec2a8e5495aeb9f553abc76a932e263e57b6e91d151b527f031541bc99e824f95d46328ed5279447e245553aae83286044f767f230064d5f8be76f3275350613ec52855c023251af7c40b6db44b5947209a26cbac84321f9c4c1ee431cbeca3eafe0377a0512920f447fa1f96ef31c4e5f1ce580a8c03c2f5732ff7eb107921333f700ba63f5e3798a71b89907fc22bb7e7a0698505c1b8dd5787e6fe4e81c583646741bc179e8be5da7004f57840512b4fc7833a76a9335cc548a2219aba13575addcafb4feb31805577d8a5f40fdb4365c0b6380b471b6d9fefd314fd231f230899932c9e90c8958012ffe3095ec4e2b7d8a550c698bb2d313f8c8dfa21631c9775c9664afa4c33dff90f391365e15edd0f60dc74ba99fa0c01f9ee236e23c2ceb76ea62c898ac89620be372077f211dc98a9ac056c6fe2b36e48ce3a292c4500de962184c3e1fc9a435ac2241fe792c3c510e00b8640ddf06ae9a8ccf1e646342c01419f568943dbecff040c0e6020d29c410db9afeff09ec6b54ae3dabcadf1632b36e2f9e35aecca1f5ded4db76af570d5b2319e76c3013a7af5330ffcfe989ecd55d18b73de8a55491f9cf6d3f95645cefc0f1c17e45c43f9c9f1a36886984fe9e1d0c837106da40f5195690c13e92ddd4f75fa15d82a4abb4fb5efbf19b02fdea2c37b3b4cca49f651f1cd1b02d4a48094b7554eec21447dae74c2d3c526d236c89d689457f9dae67c663a7aacea076fcba22946d708898465e0b3e07288c7b104bc74ebaaf1b0387399c4ff40ec1b9c70b58c1e93f7b7e3d0ab2e67c434528c1d18e60b54c7c39cc339a11ba59132b6c07c971acf83557d487a4b2df29c441ef6190d685b67390662a5ca0a58fcc03c8cc10a51e82fc4e1554b875761f1e1f945eeafc2829a1c2ce34461835e834a6118ec832871b497567226cc10f1a8005ca5e54d02f47fa1ed132c4e9dcad91535062d30b2f7f12c6af211ca6627048a20d8304c1d5234dbe304cbfe871498809d89cbe678c2bfc85f2b0196feae4946b326e1c07f9167005d7f65d39ad5c65bd9402fd2a044359cd39c598a70ac486dd330bfa621557d72ef659612189ca9701fba031070184bf22b23344b093fb360fdd5bf38135e4e420afcf525244f0a167693791d198768a820621675552c594a3e6e9cb873a2f13589cdbed7d74d111ad565dd0f119728b7f21dd0947757147bfd12e2134d9612196b525de047151419186e74b258dc5048262cbc717e37987b93dcd6c75bc6a217d8642974bc563503df9295bc5589e8810f4e70027042704a20714beed45b26ee453037fbad00a2848ee49c9d307008e718f8f063db7d6bcf2e539a1306709d211b653e679ea9a1bee77042fc98f24e4cd68caf896c66892d0a7f37de5c7704b2f11f60d5ae6504743c7649f84e2623b80fb19bb5770532b28adb5d7ac800ae9404c7dac3bbf252323d73540ab1206a996680422fd8b1e4af26e4d56d63b315f80a98c1b69c2fb5692cd3450135f1a8ebdcf9144cfb9ec8b01cd5db426b14ce6c5d22888e0618c69a4bbd22184a75ef871271d3aabef4690cd15572bfa8d371b3f91f2461bcfb1770b84ffda9ebc8868baed4a835b4ff4870207a33452acf132e6e139b07f90db929d049bf104b39cf5280919bd6cc3c1e75e426e78f822c6f5c5f0ee3ea02134476b3c4a3ee2911fdca6ebe550c62450be0862379f4f36109c7b97f2a60be7a2a2b0f39d18b38a1d24b2af0954fa1b0925ab85b6267c9d2099d7a9542e197e7f701265672094bbc71d847c20dbc6a497ec15b5a8a8aee28f9eae60032c73df486e48cb89c964dabfdc8a42e259b0ef096d9e46995f9b286b81d14eae7db39149e207950aae592dffc13e7bea3ca218e4fd0618081bceb1cb16f6eb52dcbaaa68735e491a4216110c362f8b8d66733bae26efac155cadcdeb9682df534148f1fccb7723dfa543fc8d5de01d30d3006f5b4eeed9167c0b31b3ba038e41170bf4a2257b18848ba0ec1d1e837e7dcf7dfaf49164cd70ee655809509cec9dc516e350dd12eb8361e103646b5985832cc7f24c731a0c8539560673d336eb168779dad916acd00e79007bb9f88a90d38535187dabe940a52311080c10172210f02987efb12b7d3b6e97eeaea3494c70c7ec5055c79ac860db3be5cb8ceed46ff58ed33fb87d1e35d9b50c8ebbff3f5f242a5f6c4949bba464ab649507036ba33ec1d62ad5ece4d866b9af5bebeeb08217122382d1610429b075e4e2c09b7f5a7852b5a0bb890a68c4be570fbce59bf13537b095ad2016877d69e4686e717fc5eabbc0b55f7bfcd7439e4f2cf39ab3da0ab08af64b087b7b760bf7c28623995841a4246cf3be09c93adf2ee8e32f99b939408c625585120d790daf263af38d69166ba59996909285bcaf4df2917a8966f484e7a4e0e1494e18f4cd8ef93d6eb7bdb5d7f9f644ebf5c2cf3201cf8fa1a581f29b12915db55efcce4f368190639bc7c0e0d6ce47f9b28f1182da6fc069d83b9a3cde2f709c505432b21813f6fe08beebbb10c446072a3b2eefb649daf1406d53c47b4d49b6b616bb2674f15148816e7de12240c631db76c802da2fd1e579943133ed08cba7cde12e09dc42873e8a1ad1cd0487cb30d7cc84f347690ee1f0f8408ecdf47e9fd8d76850150bbbad5e82637d151122413518679f18bc2719fb08de5b1aada987da4130e2f10257e508c413fe90551900b1b518a82f2bd39b1ac232130c04732a67528e45fd9c0f13901cb5b2025b89c89914bcf26e285121ade5e9a0ee6fc63ac1cadd937575f98e2fbec32bca22a3135f83215b6c0955447403d78ed038e33f8066de93d63c024022a7c4672e9877d9d91b7f8534b09cff552e0a7238938a69844c022320c49a5cb313acff58585c943876c11c8ac8ca77332d5aca64a30ddf971224a46aef0a598ac39274ffbd6684bf26c5dbda4c13792444d45710ad6db340e9634c87a0e05b5fbede8bac96a7504b2d6a59842d524e621b4be8af55287158ca7ee7d08bb6cdd29c925ce915aca4f7134181596dade14dd13e2cda491b89c1ff316d6209bf3222f76609572bfa672f10380a459181b7f7c15582236d2fe3e42086599a2e32d2f9da8732e75550d94c80c206a490b232d6e8b7dc0a5bfedca32cb18dde8be7e03a3c32470b1301d15b724bbb7d861d24ba221cc7598a0fcf14242db56e74be10e57655619761d26a76c522c49d1c15e5417f22e43017bd5005bb014926137ca618381f460af6da4fccbc8c2e69493dfd828e4c5dd4e9a1757b293599dc2a43797d95040eb21bf5d4b7b454bdf05d986f2e472b6784825c73b78e616fa2cbe1aaf8a499ad673ef10fb7bac82e6103bac26b60bf500224a305f434702cdffa03b0261f094c437399ab259da06591d914cddfd12f82870a55dfa75b0f4442e0c9ba79daf232282f8bc0c0bd8fc804e9fa0f1c09fe050568030410b811c1950753099f06eb9590ce0a25e5add88111d4c1dd01dad36da0d10a83a94eef73ea11c6962f3e54d884b8098ae7b6a8ae96383091ddbb926b609cac08b787f0d26436c166ec80fe1fcdc52218278958b0d955c4ece5e40ddb12a8207807c635881713e714a8323d888583b7ac8c14410e471f7a808dd3e173e66ee47a73e478a85d2881ebc579907d3cdfabcdc40507b0e39253f30239f7dd9a403e2c103090ce3b2978919c2cfbbf51ec8750e6fb7c18ba404d5b2c14661918c42626cc8e61cd9a10c791ae400ec06268a5d59bc04a479ae263daaf33e0a6a53c1c5b0f76be1479f058ffc203f25841aaaa03c444413db65a81f69faae88d225401c9816426726f5d9e702138bd4da6d243553fe1b7a4432f9dac084f98ba5dcc481a95ff388f413c77402a003ef4c490024c731327b0019281162b40f1e0152a281c937be3df537227d3208d1c618858372d12e59531a673a3b7a9a513cda807097c8636c84a04a5d42454d910430ec62451dd39fbcd58659406a682eb26026aba3671f5b50af2e6069d463313fc6a94e6faacb207a06271ea2a6f24113dd84eff7d0a133cd41659c83d8001b321c4264c2c7dba8522248ec5b294864615153ca1ed121531253d4bc7fe950faa301393744185e82aafd598be016f8e43d279b81f24c1016261688207cac5b202384b98cf78e34c4ed0084009e00f0a8e70cf978f7ed00321a95440b69bb9fc3b542b0f1f2849cb6480083b9f638a0b2963e677b7d0252fb7426460f1ba609faf39b4019f8245930333ce34707604b0febda6f080ff1ad949c7d8c2600e23ae40858b7db821fe2711673f40acd80ae0b12cf98b5e3c39813b29e453ac1034ed8ef845dbad2a6611838e78236f82a152ac23c448cc9974e05166f36277acde102fd8896da3c2a08a13abb4fc1f64502e03a41a5747ae981048c46ffa7d34b1c7ea49818634dd26055d1cacd7139ffb6c8960f07499552ea1039ee2b3c662f92788d898c895b8e2faf2dce9f83b87f72ac63c101d24e4a459927695b2ea64873b74e26c816f123a92c59806890dc6750dade4715ce291617c5ba3fafd92d6d937d16af83fada84bddc1307d07d46579df61e06779204af5e9ad430c701f889673d4a9401c000f49b478b7f6d44a9fe7f64429d629fe4aacfec28e3bd9cc750bbb626ef1ece87e68e702825921e2a5b46cec36ad832ab60abaf47c58c0172bb89586a94aa82077f6432c9f32af4106c2251def38c1135cbe8c86d6f857c6d22dff0e83c8f09646391bfd9f3c9c5fd2d113009ea4063f77cf23c5525f8729c7f826fcfaa05007de6482fd84731c97f6491be9ccde59c878de24daeedaa6fb9a8745163152d98492f1207bc39f7969e3327c30a6f7bae9f7fb595d1891b4ffdff3e40e34afc99992e00d8fe1153a6b7c7a32d8dc83b3fb51f745f1d64abf58a20a6d7389582f3487068858e321587eb7296e1667b24b425d40af632c73c04e9a6f94c7c46a53808f18635784e088abeb352f510ac9999a864382dfe6903614dadd18205482f75a831dd6a2de74b05ca6e871f32d65a8eb4eb6e30d0e592bb50c8d7e5aed47300e085960a486d2d81df6c00fd8bb64a12d4a9ce71d2d3f6500436d8699cd0d61da014771629843a9229f2bc7e3c0c873efcaad651ce94d88c170132550e77c48dce3c9fd84a1139f092f007378dd5e583475c0f375d91a84693c86d27aab98ab459db1d5c41ec09e067768fef215126dc51bdf3b9643270ba0e22c840ed99a292b1248f98d53e7a54c524a0aa3dcbcd30b762b24183d3f120523ab6ff303da24e6632f25be76039eba6d6907e667f2e95e5d14c01f85a99a933d5d4ab8e6e8ff0203016b68b664763260803690ea6303e3b27812eb0e5ddf1895a57c39d18d24ce6a19d38cb9d250738f5579e54df689145c486bad4d24418d5907bb420e7773f8e71db3ee9b88383dc38606bf53c87c652966d01c5265562bc2eaaa73a40ae94f8fc5d0fcca14340c6dbd3c7d9dcd0f55ef1ff4f61da2f457af518919d1e55e967433d686fc647546fd389289acc44021754d516f0f489102cd9e14571a5ea88f2570d7c267e5a26710faaa7f004d02048b051e8e62884016c19a862ed1add0d8dbe5b0ef339f90452b2ff91b7350071a2218249ba83619aa844448020b02d194588fdf397e5a0be6dc1d1d8b2c5b6813dbccb992422a5de9c8175f712c5757d797ea421208b6a3d190193684039e9fa8871ac543f64ee8915655c34eac89b2f8bf3072ef9a8c854b2fada41f2499d83e9699ce5eb0dbfea207d2d83662eecdf80901a0224a6426993e490dabeda1b4bd084948584be5724ce7ea4a989f66805946b789691291ee370721dce72c838cda6b82f740f712d25849268253c8b5b75efb5768145054f22f32f17ab769a60cbfd55b315ab4d8ef081e27f72d3a9dbbeddebe24f64f2e2ef3c28af553d6f06e15d48b02a69e10d353f75103c6c6074181c2c336f084e71f48faecaa5bdee24dc9fc8102f62c6908e093367729e02e8f77adc6deb6327a2a5c111267cc20ae53896b62a0940de0d7351dab8cac1837a267330178fc61ca68d562c6e20971902ef6fc4a9e9dd294b60c76110e5036408e8621e187625b0f839d0a1be22d5c69e738a751b836a5615a44c182ce55edacf91179b258e560d5b955528b405b32b80066a9ec4dc0677a35aad85731bab45724e1e1450690e4edee83ad85e1a77f156437ec658f201556d72a5f91bdc646022aa19e490b21675578fad6ac6eba6d9a8df082136499296cd12a8a090c07e20faeda7c3921e4caa88e5a374b88c098cf12e9fd0fc50c98181d1d4f5a5c37925e403e3e423a47271e41124bde7bb487761cc3f5a29f7b5816ed25bcb1aec478c63d81c92545274445ca36874f7bf4d66348861751cdd04d48af2b424424910078d9c701de12814a9be43926ca28f79349e23719ff211189984cf45d9ac14a720a37cb7f7ff167046e16e650bff44546a7c98caab7151023b0ebdf55696d29edc8a62969e68f78124cc4b7f13372fc52b35224d46dad392cbf2713cdb3c795a75ae8ba44c4297a35b70dd059aea1240247a9e1aa226c6c24c8ca53f6469a285b44e7d267b9e96822e1cd9cdaccb23465f4a7bd005dcad18bd3dca6784d9516f4b6b5cf7145200834bdbb3c46dcb236a62adb649ee34045688003146982a43a5e82c070ada74756f817127f6452627dae35f27b9275be670732b7ad6a6bae138f9183a060f43fd1587a07ad387fbb9ee3d1b528416eea59bb5a5b84f8bdcef403634b81cf5bd07d646021907711f2db29a0897f51ad093364d4b346005109c4916e183eecfa1722720c74e56f0677d3110c3d2fb79f41777620f6bfe992742a6c53e612185f6a1afa615cdc3ecb1a8e69c443a9640ab834cc3845217a63ca1b0b29b550b3c5d30b175959934d32177a5cfb3186b534c5d559e922696f7cb0d1943df1586f774089287c1590403d529c4e929c87f5050002c31500e30d54c67c33df0b323cb7092a0b8c979f04dbd9a43d7e7c5fc1824e48a3a1b56aeee41b5dd90d595eaf168bc228e5f2e120b713065d52503253ea8771125919d2b81a29eb49031544d29f62884bc0ef69b56d6a476e172f53aad2fe566dd171ca98b4ade6ff60aa739855ee010f046bbefdfe14bb8358c4e499471758fba9939633c4e026fea2d60df7ce1a4d4e2d44091f58c1896613a3a1fb143633e54f0dcc86791a9d2450f898b590243fb1eb17a7c3e58aa4caa0816af4c9f4dd86471ba4446d55ce9f006fb509003ab12ffc1ff644a8045d79787788e49b7d2f10a84dd38c7c87cd82999dd8d5bcd5895331be2c261286ec44f40c147842cd14836a2146222633be34e48e89c4aa1d3fea0e0ea6f69dfb481b0e4d0c8195f8d3e1198661823f1d203a63e631eef8df7ba753479b66295cca8cdba6a7e4c084149659f15ab786520f2a8957582546630c202ffce3bbdc73bfbdd3579da9b1bb6208b11351f80de4e9ef04e479d58310a1aba15aec98218f11f8d7548a7dbf0ce0f81f68df447080fcdd1cee664cf36127c24bf62c48256f67d11604e64c01e50014f6e70d787963aa4003d0932926fc2e9c4f92f5c488e515547d28c26a907b14286fcf595981b34b279e98fe953d0a7a261486b39ac5cbc3ff6722984fd00c03062ca09c23ef68db5a604f6345cdd3a1a374b868f4ffdaf100afa5a746a2401e3a58bcee052e61ef691b190e87f11929fc149073867d53f8255c5cecca17e2e80000bb2a5e6a248af1a941bec45d1a8a5b0cd31b280522339ef7cf54da0afaea54652b1b8b1a4583c62478d04c03a698b724052b3fcb509308aecbb280ef4bf78cca0c5fd0da1a7142661698c739d965b8869c6e9f464017143651c7c965a88079e813a0ede4cfc10fd4308a4cc4f0946e3312349c4709dab0232f98440bfa3be38972648fc8c9452ce3dd63fb3af71f0713e8d987bc437e101dd4bafaad74555f3a4e95787a7ae663da78861385659503d25081e1dd37aaeb2fb23a421c627c49cab8b8303bef8d2b0a43adb604b5df884426e14b56f95f167944e0cf06ca8133ed1b1eabfd436342b41a8b23f786745b529c4a2f7e027cbe140cbb97b2abc49131980d75eb2001e15a90a09a911c8b7911fc6d3fd21a03eb322120db2b03249e0598a5d26f023ebe283001aeff21d7e19a724c3f2cdbb908eca05b6424199c5561017ad2308274a04655c6f73cd1f04ddd5bc9d1112eda427be0d094992279225128da5e6cfa749eb865e32119ab20e65e0cbc78f93888bd6899a5c8b68cfa102d1828b44c660324b4824b176e28ce4dd6cde93d94f8489564aec6e52c2301cb85193e80a795f846af8c82dd3e84587957f988fc37ac4abcefe0270c84c02ec7ebe13dfb08158a0144a40e7a18392dddaa9d34a952c62316d730c952534a4ae76a1e5042fc9f9a40e17d068134f4611f8912186879187da6111aae9ac8e45ce88abddb45336988ed249cfb59ed60c4064f02a3559c7540b7fb4abea9a48b3a5900e1edf624420e5eb6afca07d38fcc6f316a8a5baf0009f902c2ef1174d8e68a832d49df8aba420d406d1c90466041c9c49e67a086df242c941525a6bb3d2c29e6d00d7ab5cb02bf76085b198b8112f2bddae0632687981bdd10517786b911873eb2c0757a25f25924c0d0e014250f99695a185c1d39c64d888bcc658ae1e51f0add601a49b196fdb21256fc0dd17682f13763c679cc417eae617b54f7826a405340b1b01339e7206c43ec9505f3fa5b1b5b89d77a2f0b4f7ddd1f2a120ecc87286e25628b9717507d9be3913ee8574076533ad6146156fb28e23eead6a5d650912015ce30c62fdb4adad12bf771ca295715cd7d685f41cd0eb0f098c18ce02a6fc83b8393bd0aa0a90d9b5166924117975bf568c590a88a589b6c14e3e1b0ccdc259542c90a934b8d83347145a8306cfc3c796e59f9b3cb7cb42f5ef1798d0a635c66eecd2fe2437af2a5f654605bdfb7790e3d25f38ed0ac64dd85eaae2e4c042367be7ffe07aad1094171a41bc0e29b82b938ce4bf4ef0e236a3bab91cc9a88f9d8ecb39f6174679031bb6ab0bcf9c3c57f4cbb30238d00aeb74df82dd705bac42fca05f0764b400fee55531d5eecdfeb8b70cd2a52663c0ef9208ef600d52fb1e5daf9ccbf223c720e9c89efb94f4fd2baa2d9efc2be75fc0a5200f600f8257f7da6e4dadef0138e95bb0e48c4e08f12972e1b92df6c7428bd6e2a1d3ae2d32df081a8a3c3d1830d7ffd51173af05519d73d6c6633a8a3aeaea6c8fda728c64b4a20005d67159177d21db1bcd1a8826cb3418541ec7ea5af373f61d240f5b512c928374c4ca4a18b0291d2c3a3b509e36fcaa5e69fe57247622437e584624c7a0dcb28d098c72cdaaf66fdaf82c73ba3cff191d221a3dcb2879df2797e232f410f96aa014ecd5e3472da855904e73c323d8ba0f0158bbd2c8baa4f10fbfcea85a2d67ebf54d50c181fc77380a83b17069e76c0b7233844cc84b58310067e7e3bdd82232b4ebece278aa8a0b76f4743df60f65d89f0242914385d2a80475d5dc4e8cc6c9b76a0af2bd980a06bb9ee4ab375d475bb6e7fe83e45ce96e96011d82646fadf25b34d5e76b35f902181726292f34e2c7dd80491c2fa052b3de77ca23a5568447de49979bed831c29fc2845e152c04f0355b860bc359e1b2c41613d62ae3e0dc976bb8b2d98a93fdb51a0af1c0814e9b688f61e3faa5ea0b90a894a489f1ba2e5a45615961330d63a9686a86741f4e0b44f0f02557c95eb0318c81e52518e6b675b2c3b5d88e4b9dd8f3c5ee8fbf1863b06b725d041202f770cda4363be85bd8132b1c535fae8f3827a7b5601681d3ab068e4a5cebbff55f571166ff90d0d97d4c0623aea8a82e86caad0f7e32d8708ee85fc0296b5534949030e1aa34ae9f437b678d6e2216565bc8dd368e3003ecfd25a1f6d925867058d480669c3569a86a29295818d9bb9b10663def5958eaab7791fa966253f3c8801c17129877fea05d175ab5e6b2e2e0e5daffbd9fecae2e25108eeb9911f5db853e4352edef644b30c828b1d4ad7d4990380d87fcda900ad0a1fca4daee1d8d4cfe2ea19e7618c7e5c7c119750018dfa4265c14991b6aa721c1fb3e72ec6dc38d60749484a290ae85b0f09b29f3e5cd1a94e534205eb57bdfda4f73d29b8a8b3ee5f766912ea62fafaf267549f7d7871b1573d3ce66521122e7799a68e4f5fa4d5cfb7464f40a85f9f30385545f9d9e8358ee8c020053f072e0432e1be55d4812fdbc4458e719af708dcb18d6377454840ef0b10bb53ee7b41898052c88662cd1762147489e94db37139394825843bc3ea22697e596cd8fa9059354718b2a7623393fa2c2b1ebbb7365aeabda4a8fe1cbaa9e050c86934902a1974342e6fa645162b596e5210892fb3c96c156858f40c8114c33870ba4ec32811d1f98c20e2e4a0fdfde5550f9403c990b59d71bb92023002b75a8bb68043d4bdeff3d326488e66198585bdb2e68372a201f57112e54558d20f5080ee584c9e7075b6beacc1ffc0835bc9730572b7efee0b8eb8304c071025152a6c7c4c5db917f6b9467ae023ed1bf770399c44982f711ac76f46e25aa85181ff3ab8727dbe27ee813d0197f4d07cabea4abba28ae9ee5461356e955d5d8f4018d58466c2ba9a6a3e6df89c7ddcadd40b7787bef95c124e67a77f815c3a040a2bc56cef3f02985557bf0a501007457a8eada516506ead7987ddf7b93bbb625603f78edc25d0c3c405a730bee1e922c333c58fcbb4d0767248ac6cc3c8b46a56b4be56776faafb53e05dcd2aef3005ccec569368d384090180cb47634af4694f141ce5a4d37e5e6b0f3c486b952dca47a084fbbea70cf446c65520ab5dc7785e3079a05d06803d5d6445f2393b23177440d093c4328fa60cb66e225753f1f7f088ab0e922621bac524e7c1fe515a58f8a69c604f34e29752fd253c80c52d903910726eae5aff5940805c58c906cb8258fb7255d561c35682aa6f1a5c0fedceaa10671f9619dfa34a8c959aca279cb66fe27f6f2b5068ad653e2c8214cc7943aa8a59aa87faf989ad127226d513b23bf983a3d1d08e0d5c6113e276d125660d6e3378b8b31e9968d96267e2e33a6685bedde10233f00c7ea95e8d51e58195683e5092a7c438bafb2e908a52568b45cbb97eaed17feae4df5501831680da1f49203bec1acb0ef64a26eeff6814408f1a11f0dea94dfac72fdebae9789688da683d88983982e4b0059a4c28ab86953302722b5390a3c0f654c0e2e98dc43fbacc74a43e6d52be9d4fe01a057fdab7761732c250282911becc43b2031a4992b92bf1137e9b4823b813ca23f9f9de3e3a2e5e4e0ce80748533dd8031caf2e763a9862c0769bfac8243eca9de147f78d9efdb9062cd46117f0b681b45c01802caee1e4f7e45d8ca4b1e8fe7335b67bddea259f22fd9e2c4fc6560c45d72316528122f9bfb6700c067a0ef10920bba57108d0ec4a3a568a01fa482ebabc1d4f19a5d4448ee1126c25175b6469a607f378a1af9f515bb1ecc8b73f888b02e40bbfe18078b6a7d8f720212c1b7a48e773be0c05bc779b0cfb166b6679c444708dab0067ffaa6cb2183dc5d50a9c4e9991820dd76da184dee50b8732d2ec92d6fda7f4cc246d58d48f712c0bdda46dd0832c6ee04334cd643d7c08a7b0ece7acc9711fe28783318baec3c7c6e57644b234f2469cb414cb05fdb8ca87cd76fb4c3348304278e85c1d86c2ba87048575791755dcaf2541764b23339daa8248ab780fb3c4f3274c793c101003e8dff30afc16ae70f74c16c4c05555318835b370443420789aa510870d402e141028298193c8d215b082acadec1f98c7debb058268e4eb3a900e694df97de71f1944b448281d82d661a5c0ec2dc28975248327a70bbe327525f7e364c9f1747b1d3f9547d1454a2d4050ab11f7277d166f8ea54e37fab8fec9ef88128b99726893e0ef106a4d6f294541e5a5e2cd9f43982b4279be9a24135a247e6ce01de10d8a78cabe7c53ca57ed95af98583a8d2b794f3ea4a94094a7ef090a8d0e38ca4d84f774f5ad9ca5b2571a77485b2a7fc5e6d350555d782f02c030bf020b0331fa1587d06e9a9601bd610c0f745de82f1a8852dfbbba68833d5fe0d061b2b540514f600842f58e304b650c746cf01edf5891979d1ce8c5ceea87e7794f73f64d86aad92db567fdbb1fd026d2d5d5a5d443bf2e153949b386a2956f26142902f4a5c04957db9a0fdde0fd1cd912ff7d5019929b1d9a0d98653b06ade286395b1d40d4f3799d8e02c60b10c6fa7ceafa401f058d8ca3ef731dd7356850a105b14c6c6f3fd8efab658e834170ec89dd7ed897e86089e13388fed0b5ef701a0d4b87629d786e3e80a1ab4f7b1d9a80d8267a138a3eae2cb9a2185e9fb176258774d17bc015eadad5a67d84629f786e3ed7d183b71ee8d2a91480f5c698c168333b58756abf1d6f9bb248ccb53c6f647203bb4234951f5c2ca1610e045e4cd4169fbd30595cd21818202c0eb8c2201f437449e68cc694f1aa76ca402d80ece321eff0616d5acf7f485854fe03f455af39445962c14a6b87d013a006d58dcdcedea195ce202b01fbcb70fc8bb25b96cac3a709cace704f30c5a9b10e447a06a0d4ea2fc8c9bc727014b267bc5eaefe1ca85e905ed51a8342e1ac5dc28b9c069974e4f362ee84babaf6a6caf10b6c71de0d276599673f15a7929d77204cd3ac53c64355d358395b0b227ccf69e0db63ec667f123838920ef0d8153fbfb89f4101833848a23681e13c13bfa54bb3ee728e52a76cf7d4c7b340fec33a55a1025331686dcf183c96b6ab77531db9eb67683f692cb02a4396a0beca503692e8632b4de1adcd75271313d33b49b6f54e197283ae264918d8a1d4365e38ad72e3694e56ab725bb108c8f14dd77bf68c4f1e43aa609eece6d9ecba6f16243165313d385cfaa94f7312931aa4c8a5b063f02332c0c5e0ab4f787eb587389a133ac5f861a52a6011f270728adf92177045abba4505030d58b9d182676df18f5e034d24dcfcc32106c973b37772a7909d79eec3eb41494ac6b8ae6f3f284f383bccf87df2f053049a218504e2f2b56b1ca13aa31dd9072c06a446c7d901b87e13b282803e7b7152e44e035a77b0422480764ee03a512dac12ae6a6fb6d97c0c654f20f3933fd9718a7dd3b44a4904cd3b3afc666a33a7235bf1eadfe78141b1782aaf17b9e86ff508e7d61fef982f1845f058141fc9f8d504f2691006cef7f03ed731a9d29bb88dca9fe4911a251ca0769d7c65420362ccaa1d8e46c4281e12c0d005f0904f7af3ad119e6d0514681a7c34da8eaaad23b52f7d5a1527e28be2180dca36d8a4632919f4f10cd30e9c32ed88fa93fa7bb39304cb133a4032ae5085ae592b6988877bc057e1682bf360a7544d30cb9e72f335eb3186060ac27c4dc62bc0699847ee52ea154f36c6f4cdd64dee363ed2129fd0ffb73e5972bc626e7285b4afea085bc92c1bc54cbcfdc895289268b4e932ce7cdb11350859476db6bab076e958e9ca230016548a3ca24bb27e66fe1ac839cb89e3a7889473809269666828fda688206e9b6db8f4650bb7d76ac1b938e31562df68a3ab914c4f94436a511116a70050b8151baf5a654420ddf50c96a64e6a0f5672de2519998fdb836123b9475d2343a27b00504ec2355da58f93531a4b29c65050e36dd83eedccf46e696249148b4538c5623ed157c613849612c8a19088c319e72be39957bf621663a65cef43ceeae84072e1bb7aa3de90ace9e5453a74e7ddbea8c44dbf774ff4355940fe51372cafb0135920510767a3e02f49c69c4698fa141c926b18a0cc210a0988cbcef1c3b7d878aacfc5dcddf258cb72c2fa69cd810c45b2e9b6286d1552adfd3b166ab8bffdd97e0f99550ba0e12de6a038e2382c9bbbad1090eb4d55d60d495ac0f3962486d15f54e46923fe3951a935bc23e499012a3558aa5379bb37ab12beaf5ad8cf41aa13242d52dc5dc97fd132eaf2168cd5d55a4b8ca072b836ea8f7b63be0972e1bf2e1dbba30ad376dd745c00bd7d1c5ecd8070739e4f858a84c8aab500e001429c3641507c8fc6d4dd1f2d74416c64f2a19250c9c97fa5a57c7f85f55aae696751b58358ca477a43b82631c0e209a987892d5a1188db5353c0155ecf238f7ba9883141110c52e97e19bba93ac4b24165e65aadde21a945775a3fdb9c83f5e2efe4a0b09158f3281c7aa984ebe6323d3d03f182fed44ae9b7f061587207b6d2f4402747ecbd9aab7b20ec9eae17cde124c01b6b7fb8cc3878235f1958e62648ee023a4ab7f36f7579bcf3e8a0c92642021f9e15b907a7cb5775d241e3d28f840d6ab2d139fbc11355d0103e90697c64285a556f1c2f4755906b94f64754190e39a7fe20ede946aa0e0e3457c0e9651df47ef5a984f51fd95dc70b190554cf7617903dae82e055d5027bf316898f04730c179049cab7876b8a26144c5ef1d6efc8fcb5cf324221bf8289cc3c5470a172ff85aa997e1fc864cd1638d6fac70f41b4d4b9ac394570f8d265f16bd5fd0bb288a1dc54d9ca17508428d8c50d7c41d3ff4f06f2fefcad024e90cf300b3187de36625670603c28b16587c6cace82b4c33b3caa22155aca3c0d5db7af3b174136157fc217413b7119de30822cf4bdbbc0568097457800c350da2cb306a41211098eb119816420b3ee1a6a82b96610e285d7d3b6a00112b7403996483a0d6e7aa3cfe22d120338eef3ae107eae5ed6d3988eb6a500ca7d0a01545f4c700aa03ea7aa6a8cdfd7764ab8d5762523f46b8612d735278ed3cf218b4ad70389fa9e32e159313eccf764dc83f1bddb17b5cb14030b43375508fe82356bffea1f6cd56a48c44451743b56308ee268f6da008624501ba790c529a32edd63e30974b3f9854a2b122016d5441f575d7894ee8f19df728a4c550d668c94a73f7fe843fbfd8fc265e54d86c259a078b85dd36c8afcca424731cbe54aea779fd8b16dfedd5edb9d30bc99490697f3ce9a9b3c6da607eea809d87d74f24edfb2127ac8d22db9d350eb26786afd4e7f2a7b7e353139f137f22e3987a1923b15cf523c75a496fb3c89870782b5ccde0710b87967d3208871ea65ce9d35470dfff9bb2933ef3c619f97b367de995be50a03bd385bbc33fd085324d38427e6f8bfde808178b64031b2c3c23f9208004d8727d32428b4e8fed76fca2ca901d69f2dbc204a678a75ec6714df45a7e2fd5b2d9a0c9bde8c0ede57006f910a8d5804a4edb3831264d79293202722c6f252531ed88458436aff2f1a2fb95bf5557498457cf552ed9cf7b276fdeca1c2e09401264e1c8d0022a63b59af9292891e73fe09573dc6e50780dc68a5520f95828a11fffce307198c6079c955c1f155ca6fec37460365d62f54fec262ddaf4aa098688177fa0adde04f71d605d64a5976d5ef01942c2359cea84a83e8b8e2046c25942be36bbd85daff2348969f7a18adbdb05623f45c26fc2bec95902477291830b39025b9244e84e596dbc7a6c5cc300b6154972c1fcc78a20b1c009407c4826db205f908269cbd499d43f460b563b2a986ee7b73124feab214bb1168e25a71b1d072797c0f88cdd91829973016e290fa0618286acd1d62d9aeaa1ce57a7822f828160fde0cba4ba3a2c37299bc71a70256aaf3cd3a25b026051b42c18c16c8b99d3130036372f1b3497eb74da1824d45fef31c1b4b5a268c8defc0412706f824d7e896c884d94ae08c295cdac422138654d3edd1b861ff2ee415b6dc4eaf7697870a692dbb786c03599a3ad3df229ec6c626f7b17441fcf79b4005798916f05c5cb0b0a821a89aac8d38ff81f5f52133ded809e5a470e693db45ed6404182c317bcc754e6c035b1c712f3aa70411853f5c24a056b91e53944a5c93cf8039f296f4fbaa7bdb23969209e49f4789001e3acdc36537f09dca15ac9d51e98d50586318b68e6a355d03964abbc390ec5bfd007566918c55c1d8eae47ca8b2dd8266e579a7df6f0fa82b8893146b32e4ec3179415862ea251f134683f37b5d225eaccd9364adc59d2ca1901b72d8532a58c925311130e4df2416e68da388fa100501ac008abaa50f06c69a748af9c299a342813347b75c2a8e701a6ed64fbfde3baf0a4b65352792484c76c369199be528534e9da935077db1c298c1c430d2a762f9d3cf13fb91ed1f7ad0558b44d672e7616f475f1db4793aa34ad538f720e418407351199e9efea6a511c095e6cc9762e43ed1e3a31378f592558151e81f1bb30f4df1f055bcce1d167262b7b4026270d272c3d98f6127e23a4bba69a98011c506988551a75a12d7c0e0db30a43902c8d28f9b3ccb8f6d825ca452f7071701b673009d7aecd87f0213c14a279e47d5f371dbcb82ca5793d77877308146e06318a6012161c7ad62eabd69884543892e421c0c938b0ad46b29533ae2411ff750dbc0c565d96261114c41ee9e03049c0cdc2ca46020c7310416d9072f3c5c461409d6ca132698163b35d1fdf945c662e1cacef6b348f87ee400844f964a84460d68d379b1e05a83c302c8f9a130dbc47747ccc01cd30214e6eec99a921aee8450a14e5b86e8b8ecd607bcbce6defe45c0008cd209f3e28738b2ff71494a34301672f1d46c1ed097fe833316febd2c17849bc8004c010b89be532f3bb39045607f388684a117df45920c6fc7adeddfe57d1b1c7a5ff24f6e9639df05ac45bcc44c67b175b266fb52b165015015d337389d441949efbb5d76387ce578302a49e7077886193def858fcfd7d1af9d8ea30ae1237d1c4f1729e32e6f5223178d7b93ae1de373dc8a35a702c370c71007dc39f6b1ad1599cf3975baedc37cb524ec6bcbea9a8704d38b95aa5e092231427bf61c0ea173dec1999fdddedb131b62989d83bcfb3beeb04318126fa61a7b59fa93d8908f280b384f289a3c2dc4d4da83d752908a3b1b1c4484f6d1229008539b29af5108066c51089b29710dafc72ea5b49374a2c48ae3b8a7276e3b7188794205252301e7ed2965add61a3961e6baadf5486e628373f6229b04b0ed4150a8fc681c06d27f24ff064ae44a29d79f499e52a0a9ff112cab0a46fff602348b02e594eb4ed6022b8a2404d29f5392263edb5b91c6775a586c5a2a09073c6f64482d416bce0efcdb7a4910f7e45592573ae7dcd720cd7fdb4adc3e08b45ece951b21bb1eca7f5440cc1320dc8398d03e6d122531b45c39286a0fb80896ff807b0b0cbdd8cd95d4ba9a95a5e104b43788a9e2e1dad97f0dcf2eb674b47fc274b505fc51be758f7eae736ab2a06f38d7260657f844000414f8febab5601f7b41e88166b2d13aea4ce4a28a7beb404c95937c988054b5be4c53643b40a511f24a0183a8796a49186ce93025df86c4913cf9f23415b9718d75a1e68b16554b4feda40729042ac8679e5433c0283585274f12c83440e486ff4ee0130eb80764f02d89814433a2045990b092dc38ebda47cd85f1a2bde201aa469df2f8f49fdf232c347473838e6fb98065ddc0b8717a30169a8fe70dbcdd1b21b17bf316fd6778a806bc5eff7e6c0e485c30fd583e9f2f8eff038d85f3f5325d8137db0e511f61dd510c8aadf3d6250cd649cbff9911cac74e7f4b4f57d5cb9329c3548ba0dc052fe44672a5faa07c466f9464752c3877e8d8ba4893caebf1db00a4c16d1b2df25f2d5421bf691fb70612c180426b477690cb06c5a7c5932d3cc1a4e7d66837589ebd4d9216e9e73c05c8105414e45d8a5e5dee71c56d2b555ddf36b80aa3c872112dd5d6c76a17297d2d3eaa682932df2c4f5bf805445408ae75ef2822e290ad70efd037e3b61096d3afde4f3b1236c07f751870962a056d417f557d077230222c98a378e2fd44ad688c8ad3869afc2528b09d1701224d2eaff97acd063d91d38dba021ee5640282f873a92b9f5026a31b7310998aab3c26cec19c492941857e2053f2be86de83f77cba13f31f826f449a73d380664dc1b7a35c0fbe23242b2bd0c4141b62bfa1baa087f51aba930826eb98d0b104d4040f8b4ee8c3284033d385e495f57d1504882632e3b4164d7e17f1b56734401388bd40d2ee6fa1392140d88262043764bacc30d6f68c43a4f47c1c5452988fcdb79e569143234f572ab81f4d084e88d68c0b79a7828f0ab45f9dc48d4b70694c14efada0b4d966b042479476d4031ed0ac9cb6e059d833cbca14fdfd092b96291a5d1b32b008dbb193b1f7161ef650f80d39121325f94e7ae1f3780acd9e32535795bd4b0bfcb8476588f7b36df629d064bd089461407cba7792659f20984705b18c275bff80ae74082693ef5e25e6837a8203ce4b90db392432f3235080b247411e89b96d1176608897454c5ddcb3beb0670cfe8966ebfffcc00ebf13a31665763f324fa042b090812ccb22760230429ca2bd8fe9a490803cc2b478b5098019faac25031c50c9c1508cdd7ed0061830ef8c4a54a5609631f8c784a2f590549fa780d7b331f41848c9a34a729ce29bcfeb5e93452b5e546264886822fb911fa4510d55b2eda502645f60d08eabafb434a354f2296651892ea017314bc60a0109bca1c7199a7a9c81b25606cbeb9438a654e3e9f2dd4d2ae918ff54735b0d264c9e13aaecb110110f1da3cc0e02031ac3a0b396c33d1249c69de06e7c5fbc83dde7cc548506db72525689447a830589eddd085a1b412dffa5419383055cddab1f6a2149fc00eb396f1e49697db846cf87ce1b4a5d4ce4c92aa4a38afa1672d724082afeae886133121b9ce8e8c3d42ced37107a75654a4b100322ef48a99de9772c9923113331f014910b3a46c403f2a4b6baa2889c1689c1292067f66d62e99d04f0a648a3878db962c568295590e109c32704c87be603da0f631e0e3efecc2d89548ab5f45cd136c5853f9377f3e2010b38488e75466e0119981b01c7d42584a0e2523e0f444be600dfa47cf6ed77ca917527cba05821b47af58602edfd5f0a839f268bc13b45f79b5055e163886f6b468e54af8021954782d5a9a68d13b3f7b90c6e41e8f8d86dcc8cabaffcc45329eeeb8ee732345ac10d57d2965738a28c317979f07cd9c66300e5fe0c6b295b9b70848bc90c883a8623e8c7e9428bfc380e8b69c9262030bb190e8609512681151ba0066f95888bd2215e8261a8a3dd192fd5082113f4d8c4b21d4a75af8f4c603223f947d1542561cf77caefd3751a688f6a532547f302925e962d1fa640786f85b340096853e994e26f1dcb481e631b29a5e4971291e8ac5689fcd80f2800a424dbb35856c5620ba0c0b4ca7189a44153dd953d7b6ed3a575f80b661ed7fbc282a1f1babeca744ecd145dcd61a8a2f54a32439900af53d61e89ebe9c9eba688619be382fa78b7f43a3635ea119bb022b6a1cdb9ac3f69fa856c7a602e3a8a6d263014c7a2ba4137db6ffb9c7cc935ea19a01e864439a6c4c9d55c662814caade7716106ec573436bb325b809afa06e5f683915e1f8c410ed01505c584a3e2a5403174de75cf4e50991ef0a864fb1ea387c9c0efe442cdd99481955bafb78b36370aba3f4c383cf0d9c15189c749567cafcf1770f16a0e30c82d52ffc8ee2df0de3f44f5eaaf89f435c47003a8b102bf8cbc3dceba1ac77622c1c487f83aacb5f9dfe1cb13a70a8ed1fc5f9782658b5108d16869c99bda503924cb2352cbc0b9747253e2d7e5746fb631d798f1f569be0c7eed01c6ab9196fb2353ee4bf38fc3d8282f2aa2af833f87bba61aaf5b46035bc22f1a6d703cc5f7b6bc059e1a0e7cc8eb9e0fc8a389b3e1600f25ae38e63280ff2cbf24bdc7a08724cff0c0c3f9451aa27f425029e5a97ee017591b2c1a72b2d02d81a43b64ee8231bcb079d4235ef1a097e4899d06e1e107ffbce5dc80e920686150ca058c27016416224ab4c611e725705d9095781f3a1e42b652ab8ceace37830969f8324c125c3070cb812d0e77df69e50e3335123a69ae8a1fe667bedb720c581ef647e9b2a76b43d74043a4fad8d4391144eba6a40a0985a5926ba42750b1c8da99d3f0cbce77413944fee2921ab00186344221bbf4c7684c4bfac03e97e9b464aa50bdfa7e09bbbb7b52afa52bc03e795a45ba52701c81ff2e533d7f8ea50996c81f1b6924cc7680594057d62d37189299b4f4082890dd0f6d7f9eedadb4a44846e5ec341fe21d35bb258e6863ed33e9d37ad4e7596a51e447da341804f8cb9ab15935386027ba02a47f131f17b91be079e7e77fc3b34088c66e70f70d518be2cc979a1de0efa96451bf6d382b9ceffb52045c3eacfecc7b57f2a05fea2f14db1bd3238be5a35db830d78845d44e00c7ddd0854b4cfb360e908e6c52c7b1825ea3af2d32ff3c3eb3d998fe9c53a2b4f584f7a0f87ec7dbda90a983392eb6d7efe71105b55a1f2f95288c1f5914f451ad40d34595decdb1af4f7e0171ac3c91a06cec4836af4f210d0ee128421e00d7fd91173844ca5b106acc946b1c35c7d8a8397da539bd0025ec94071087198715831789b5469b6ed1ab89c72903de14946e02e51a476d9351162af5c280b0d38ef3e5398eb740d0295b0302f27d3c38e49cc1c44a970fbdd8be10928ec122cdf7a161fd1db084715d3eb8284db3cdda7a187e77c1382b2a96c60da9f0c5f98fee67b0363c20a545ade6f470c54243cc332872ae00e6a91b977fdb4497137d9073af2e85373b01264d3846ef3ee4030dabbd675611f77f2e7efa5ff83007767a0c6056bb9dba5c170ef8b50861d3f0dafeea9742e384d1431244020302e889628b9a880682119c30df36407443ae720017f087d6ddd046cfa64955c3aeac4a1142959394421ef12c18e6e560345186a305cba4df36d9243232e3da04472a392aba30ac6a606bbfdd075cc3c4e11902ec74b5985a0165589c92fab12f59e4e2e2169dcdb296e0b2fae84bd73312361ee853c16642e63c75da507d0a6047925a47de34ccf8cadc673d55ff132bd210fbe138c10ce9cfa0ca49724fd09b518c993a1932c2ddb8ba301b8ab121101e5154182b7bc486812032b1cbb1c4eea0fb1d6f1f9284d5907cf35dc2268ac742a359a5e6fe368282f117169535a79b75f51590701123f6b0a166f24aef07a223b82c18e8dcf571d86a276d46b9d915ecfdaeccfb303669de4f28878c01918586903094c8c34c3368f61fb23dfb81d112c9fc424af0fe07566bd8fb093b80dcc9b052dabc3ede0ec4bdfe1ef497a3600ffbb61fd1743927aa57cab48b5709085f159286f79a841c8487be5274392306a7965e681b2cd2c53d4c07e5eaae6a6f1159b8c2cadbcec1f1b02507450d03715014188570c4860a13b64ae382441232b0e2420cdf42eeebbdd639f450d014bf58842c8adb893188a98a6c6a05c3533b158e8d8f8ef1e2e082ed62bb854c1924f3d74794257f61bf97f9d3c491ae172e49a277dbd5c91a957b6507540af68cb0cdaac88f647b0224c5aafceaf157ef9cf4283a485fb7c7510ac5af3884fa42a226e134f6c0620909315eae80068878e475e067c1287587b89f32a1962d654560b0ba3c1c8118dc83173ede178765c7c6bacd92d18b7e1b6b0b81334016994458974d1f6719e5bdecceedd0d4161c07ccfcaf0169885986c1d59cce1da01d67402c86cd8607e8b70e4c12f0b7f0f494e04d5d2bc13fab4b46483e38f5606046e492498c26b70a5d821d4ce4982ac63731fb10fe6635d384db26d85900ef8a817fbd93f10bd877161b60b34996f9e1fa51a655dfe836307c5ebfd6aac030c2140b1af913b0aaba5e77ede773ee1962c7f9ae23e65c1c6e256e91a9c2d9e925fa484ddc1bc45827a3f1c9b4e102f1d6efca04a418f8edfe4d08765883435c31c0d1f1ca1b43a4f762787d7a6f14b558008428d1008d863ad61e5b237a43092d9178653b370393f5a278a39aa58dfefce0a8ebea1a5de10904d5caa190650aff19136b1f5350896db33f77acc49bdc6cc029620540deacf811f9444ffdc12e02a3f6bbc1b03515976ad03d1e96b3b80c96c79cff6d9610ca7920c8fd02302a8152c54ea02f68f20d91412bab3ae580541fcb12fe69c052377c7f4a6b100c919660b96fd167179052c015441357e13c17ca4b28d11049852a3787a01345c3b470c19d03b3b898a707f155f6389fa46070298dbc99f52156ae7d4afeb4c25a0006104572a0372ec3fbbc849a43039517bf4441bd1188d4848249d8393b03860bea6950c0eb11f957934759a86046d8b3e5b6db6f006b7199adaa27f495c369257c432090c3364c2cbc08ed60b9e1824f5a4ecf6022877854581124673a561d6ece8886fc656fea47c52f1dae5543961c11d52d4e77d8c90d0e0813bbbb1a479e174de4e58ed6730c72de00a703b03e68cb65dc7c8de63f3f2f82f6e02f357cc636aa86cbdd0f32070fe81fe23ee6073905d097c4fa5911ce8450dbbedc616a827a6e1d0d0de0bd686f31021e57f1bd0073bd63ae1818604bc71f19c4045fbcd7e9ca11c4ff82d93fef39c6145376009c3c277082695fe82f58282ab0f9f87f8da491efe4621663b9036ff261c6aa8306def495c9487edc234130cea65769226e001ea27b41325aa6d29fc972880c24a69c06d6aeeda96f529e9e008495a6f7b59cd41cf42cb1f297983b27b46363e7613f11e764b1fe810923efc6507236487c0055bf8605d9b07d615dfeb79af84e5bc7494fb7057277e97218f81f9d08d09b87806c3c979db36edfbbca635d2280cb24f34780ae776efbd45e0aea4d4a80fcda75e40df225ad4ffabedaabcf7e58eca33ae49af6e1beedbedd93ac7acd64c875659c93dae8c5c851fbda3713bddf94ee053a51454046419b1b8076cf88db41e290285e60c2db1153b491266aacfa4501d5992159ff77cf960e106de9b8a0c9675248034ac1a03b4dedc3ea82014cd5e94d987ae813c88e104c49bc875d29b7128c071db8dba74e6266b442e9c486a6963f414466ef43973aaf5c0c3b521e2453aaefc4771220857fd2816a8541141edbadba829898dca0b245e39d0e918c0a5c26ef417950497a713908404826abb992a341215b6137b0542bb715caad10e731b2d6d679b09b6cbb8403af9277414e3ba7adb0ce346cb4daac4df5fb4368a6b751ba6725651349bf34bd6ae42f5a06800ef0d410932e30826abcfb93dd2c36027401add2a7c69fdaeeb214aa8d0a559bc510890f75620eec7fc1bd5ca5c68f60b059d47dd34da8cc4c1239f9f9c0cff5574a0e90a8008db108b20a9f8bd217e15d5102935a05cabbfdc87b4481f00fb81e99f511298e4c90f446d783954218d15b5f1c7a6b0b671f00a3549ea059596da0e26a87507369d17a7705e045e922f4666c0f8233f60545e0ce71220831bcf83bdf08b4aa2143550acc43b7b7b4a11ad650f3a99036932fc0aafce8fe3205d482aac9172a77a439302b7f6e5135ef28758d60ddd4e46bf64085c2248bddebc2349fd8c4c3394d4e1d1d527a0526dea3cde40fbb96d3e46152ca5345dada15ee41a36ef4ab18a11746b164e7384f56888f0a5f320b09855294d541508d81068ae166ae6055eee01d6c768d9583b254a38c3177c28e8b00f5d2d5d83a769dfdb8ed2b3e593c6fba1ba2e8585f390757cdb0a4e6f18edeca86458c15db27c93e7a14702ff6f39b7058aecb8ce933aff7dec6f024537175e83b6a730c74e1ff9df3224beeeba0e79e497dd70c4edfb73a40a39ef742583af0008a57f05c7d18f11884e2135a26ada280ff4a986e75f903c45e28bec40a840f019811d7b19f2dac05156d90eb1b3864a0075178b99c05f5bf599267b5710ac3e9c4d2eb66149b7cce86c1c417ff25b9753bc34aaf0e2491665f9fa54d3ca43a6cdb631880211369d46c14e263e5acb01d2ce24df32185055a973308d81aef7c7e5214cffd3b0b78fdda5040af25dc21a879cf1b4a2db636416fa917db6ec4e000fc8437546235d8f3e6e8a2a64b2f70983fbf591d045099a22eedd76acc4a1202e8bc779248b0ca470d8fa7ecfcd2e779192a9e8030610fb733a04af63e034c36e68f411319bd83ea8824cda5911b73023bd0f6c7508349b770ba40d5a743fc17487b2eb65b31cd87a3073acd3df4a15fa95238a2070976c9fccc8506c495098a39e4f2309087ec0e4b3a56750fc3635fed181b7ee41fd321a59a9075bcd9688f4357950628b870d39030ab0829f237c5339f653c107bb0e16b43a5e7a9eefc85ce270dbba8306e2a7286389ef1020b47b1d5407bb83ad81ce130b6051cfa3c73e143dad7b476c68b31a0f35cdc58d44f8f0b0e0edcac6067927e9d78013b1e3f85264d646024d5c026d611755b10ef0ba7a2043f197d3f6892efb6d6fe3e00c669c2dd3eacde7d302159ea2f13d1929fe6e5fcfe9643e503f79b596490c62a7384c1dba864d4d919113702463c58a042ec9af153d5885dbfdc5dcbaf61561dc9965cc09734ffc8d64905738eade5b488bc0ec97a5dd97951c33bb66c5b401c62b0a1d8f3a21a1c5b77814d3627e3d0fbe037ef0a630788d301579cceb4d4e9684b25f7c814c1d6c3196478772930933b95d45e2c90421b1f6fb92510341bd5e8507e9b46171588be000a81094c784e3afed4825bd3353ac4b4e768c2710f313bbf617f4b86fc1b0b46a4fe36883bca3cc9d5ff7d5578db40a2f3851ddb96cc10a1989f98269d142653e6daabef9165f35b83fb198be488cd0d1a47c14a85afa09dce69b323d74ea852a8cd1eae4d313cee0fbf2d60ac49c2665dd83a1c3b862e338b0589b4f8926a309cd6d9d65eb627c3f6596edc4c72bbe8e1e155815163de599c5286b1f3f7f58904f063bf276f6e6c16375fb1f88b8189d65dc0da512e9d2400e11c80f0e52c827378a79a6391e5f85d2b165a276642a02f819df8b775add01b71c4a666c08377b02319ed6070ec020d761f4f66ec0ff2141eb119f586d29d6f398148ed0b864d55172b35b517340e9ac6c55ea7dc084121506d59b37eadb7c9cf6b00d9f5d17a736562fb381b1d548ef0190c90ead22ccd966ab6b1c8bcb0121363a07b6623a35e4242c979774334f7eaa0fc5da4c804484c7d920cb266fd784f1c7ef53158c26866436be5f0f30fb5ce07cfd9be56431de303638c1a3b9696055e3340c34a076cbc816157744993dbcd48cbabc60abb100b7374b973872dc51e763b4f5b8aac6e479927d07d9807ec921084daf42da898b1452af300b67ca12f9947be23a7b270e14ddc5cde99abebb9cdb85aea1c896e439aa2292705bacefec113d6879edc7dbdcf6230d10ab0de24c16ce20fe30211a00845c648aba94e64742065d1f928d325a2c5afdfa2b8ea73aec2011cb1cdb3232cb4766895a0703653841f4187ad11d92e165af44f5b26012214f4b29bde0b8cc36672cf57987fefeb5222837c10a28c85f3fbdedea55708273feacd79d046683232feceea1cc8989bd25d80d1203bc311615e918da6efa91747c6c4e5210bb1a6b473ff6934b77c79307004d4672805c8dccf11f00246f26b62e16ddf93bb3db6e618656c53614d07adf2522285de295890fc28f8981ec0d16d741d052f5829c9858d5401cef06d0fa83ac671cbe0e5cb7bf222cf6eb5290fcc0b547ccb8296922b6f56772ceb1a36a7c6db60f1a9eb792164c19bf6f668bd861285029582f10c377175295e2deb7b93e12d4d0aaac48c198617a6a6aea749ad051b89f66d9651e4696f81f4103b082d0afdd142c4a3d96b3ca559d6fbc82475b0ad97dc4e76753c3457539f4ff272ea65a3cae9866d4d40717c17421bc1d1cd538d39094e346bdb297ca970dd9abdd7ee57e1072921899b1c7ec590b31274c3d3db655600baee58515561fa61f28c3ed67c7e1d05565b8e8b6b704890dbe4f6aeda5194242403c23435e3421cee6a344e6d217c42df962c33f46dfa7c03cd7fffd2c3848fb7b1a28f730f62646b8e79a00312cdbedcbef040204e0d840a341202513faecbd7bf4f3831db509dbcfe3754ee07e49a970ec2b18b3f46d83e07793cd482bd324e80a4d8a38811dc9b7e6fe3d3a7edcca365aa56020b066668461425c1534607322ed9f5370dac06c31bd36a45c21a65d55666edb0a232c99a584195788b1a929f28d229ccc417a77db114a2e53d6ab6e7a69415349b939aa8beecbcace6b6bfdabec36fbd2e98b50f107e9e714e94b4684d83033896344d539fe3014aeeff07fb2908d5ceaa538464e2813451021c03b07e29bfca79570fedbc619cd9b921f08725fdd06d8d0638da63ac5089676c82af26d97787b1182049b48bdedd50a8ec46c1021cf029a6bb008ee47ae4d3ad31ad168ce04f851d912b4612db060a2da2687319014da58e4b7213650365787219741bbe9a8094a45b11efa99ecf7d005694c480b27f47b16abea5278d327d6dd8a962e4cf4e416dfed8328f448fbe9cc21776482538498680d6c85ac9e6bd2be991ab8df0bd2bf2f002c26dc0025c56b39c19f2622295f4b7736a9dcce82d9d460d85d13e0fd6a22b0f5229a2f31bdd86948656ecb7af6123f2382e8c3dd473289464d00cc803c0207e9127df83231cd2720870dd3e8b0b236da94c92589455da34ee0ad102d8b49514d22d793dc67ed0c9146a517b0e740f6a1588b6569366d111823ed4a8d8c25f450bfea3cc0fa43b2bc1f2c69cd4747377fbd37b30bc4832642bcfd09099e7676c19b1d54542e8c462d58317c9f59c2b2f09f42a127a9031c2300e1cc9122e1cadcb01953cbe1123ea4aab0788a352ff85cc25a7dc162e6606d2291e7bdcba07b8cd7c8025f32777d3e047a10d37e9b058d09e15cf3c62033b565cb3c5bebf6b6df5aa6755a6294d465a6a90d5513d8fbf2a41f73862f09e976d38e712a8f8703eb254fae42af1c351bf3c6164156e4e86222de4b2f6381ac3cda7d63d56a0a18959e6a692cb38a92a535f7aeb81caf5b0d18c741d98dede9d474237ff6591d5a05dd041e8a358afd67696c067faa9d8d37440fa8950f9786657f46000422a10c6c842c34dd8b789b72ce0224c1ad652d11ce52e489c2ce014df0808466318b9da7df8ba53906bc41aea27ba4907778e8f2e4a360893341e5341c503ea8853a56a04c363f3d69b600ceacca0d1067399f24c47be6e9866d6f2979dc0e7c66ab62c18199fcf5e354962e0d23bbae7b840298e2cd8133203c31d061c0a4a7163a6e23f1311afb72459010bbdb1b06c2ed79cd44b6cdde8620708ebeec5d8f116dd3e498413ea9b86058a54330b62b8300aece0c0bb201294ae20cbb89dcfc62afb3226b6e8282befd2edd6431e1c99d4394316e62928b07ac5c77195fdd06a4b74bc4204c3e6d612455f36f004f325d0c8c40e4fb3321b800cc08104fc2f90c01a9c6147680bdb19d8b778ee92b5c6881737216ce2c4a1a084c0c4f6700714ff49e510dc67059434a1b5dfa00ee49d310eb9864b04858170a543de8800c13cf41e224215145ab3e97603028c914c97fa719b66f4e6a26d03093699b22041deaaa7a1c72aacd3f7906769d6bb964c927f959fad447f96fd8932cf2d0db94c1c241fc12d64795717993c4d9a622b13054565ebba302ca63593178f97a8616b525eaf158346a256fe5489fe549942ca861cd6af9854ee8a8fbfcfb2002ef57d40f057252a9e9fad3ae9a9242f8c612479f8aaf9f8682fa0e89e5f37faf1cff6a9931d5cdb0f28ef959cde3d3daaca8795da363429f017b6c090a480362ff69b8114997656e21594a815d52e46dd125e2ba09c3fe3b9a0c4de7558cc6a2cefb1016706c7b2f0eac1a584cda90b108893c4af97303b15c6e03834569b5bc547176b96089a372aba6f843ebc66a418f0f68b0202f6d241c42dd5e28889399ad981b1869f057699dd100daec11081a12b234b71c193541eba8802c89949b52f2f4d86dd3d42e0e3322d1829bc24755ead95601dbf8d7ab747f7eb15943752adfd4bf418934c42c0139842fd9065b4308b5000e6b38809d5459a4a20660644a0f53eca5cab3e392614ed9d62b69e83a65bd889ee60f7648c38d78897676584ac89beb2eb64e09310eb4f120003de0045cf07028ed19fed548f3997c9044ce9c85b80a2f4584c86208999fd11ae9222460e6c988ae418c99379313c200d146d041342ee184793baa2b63bf3de6d15e1d77e139276b8085d8c46a48baa23ac732e46b6052ac9687d8532bf8017e444d1022fbad2d52fdd5b7655bc14e1b8c789c793e933e1d5343f1f8acc85783fed5e2448fa6de8df3444ea1884b86bd033f0a81eae5f9318aa0eaff9323ef37b0d427f22b166229772af2f1e2a79a5380bcfe2d605e664d34c3946f6ea5fad215be62f58e5078ff83416224a7d061eb29527656f157498eb563f0d19ce15f0d18409911b7dfdc405c098786635b0994d0794e42f1c565a352e78939091174c42035ae66d5d5b501616a5034df53b5c05def6a12304c076ff7c2c5fe8198b4f7004c7bd603d01ea228d3a71ff683034d2b85b407e108c83be3de65a0b31625133d5bae14cd93242263b656c33df6f347b29d8b3f8ad4e46237bef2da59429a594029005e405c3052c33623ffc9d775b7bd5a06e643f614d35b497ddeded8c251bd1608d4b7d3af55822acb17e319d076b1c4689b5ad85460b89357e618d05081585285e743db6968bb59689019f3f68886a58bcf7b5bbfbb9aff97e6d6e14e45e37881a6b3cc45d2fa41a9bf65c3bec853517481a11da0978346e42a643afc1a4171a73672bbdbb5cc46ab00bbf63bd232fd6788a88db763d4c32649950075965b19320b79f69ec07ffbe08ff2de71cbeeff7fc2d32f0bb77d98f652a6f065254612145400ec4e372428b8e0733d24b16790411f2dc579466636143b02dc24c652f4188b04cd6f845d9e6c228462947a37f4d1bc9eb0af27bbdc7dce2598b8ef73fdeec6c06b283c01fc86d34e10bc905a7fec2def206b08c6a6834b0909d6d3470a6743784edda14f5f1a26213472044727d8545eea6b2addae96dbd7eda52fda8af306d5e33d298314ad957265702135232b0302391097fe16a9326369cb018775bf66de676d7b0e174e28cb3d2976ad070d245164d5ee081cc999b9e4e72df490cbfaed190f988cce74f99e44ee92f3e6f967951144539c4aaecada52015d5432bdb7c27941a56c4727db092f1377ebc9e15c022c8840288408afd886e48646ef5ef9215c6d2a263b7a91618cd1fd53f6bbc355893167c91a5860886678dbf86e6a253af358df9bcff95c7cbbd5f2d306ad1d11618cd1f6e333b8617e10683eb8e9db564ded916e776ec4212991e647ab6f5e504b97367b8d241c2dfb41ad3c27ef47bbce4253986fa11859558d3585dd041c2223c310492216ea6a507903a9c15ad2f542f9111a4ffc617e74a992e62c04d97fdf08cb588160febafac5f04572084105aef4fb8a093a22a56eee2999502b530fb9da31ce5284ad326459a14b514e5227c76f019662d324c9bc9a365bc4c86caa88e5c6663b3e3b600a5920309b04bffd6c254192dc3b30bc846b4500aeaddab4321ddbe8560c81c308c58630ceefa531a130aedabaafa8b63e05b1545294f3bf6ac4586e9d98a5eb6f978cf0dc958a0903707e09395440d56c8c8250f43be309a2aaad9a4735e66973d7fdecfa359002a8ea062f62621f759a2d09f1a2a2bf4e744c57affe20d31e6bef78e41ae2277ba6ffc8e7f35734b37c7340530b52707675a31acbe6015d902df066bd1011fc62ab3407c4aa7a5bb37c0df879cc14b6136069d3f80c0a73e3e955900d6c0185ac6e0acf75e884f5598f73f73e73aa1040ffc01b3161daef3892ebda1d9a530ce66bead928306e67b087dbea73778bef962549837df84a1e7c632b2a1f609616906c472d7b71663d605e2ab5fa6f38a2a4c094291ee1b8af46c23b9e5150783facab658678e028bc7db528944d29692a9aa88b973ff2baad95ec89bdd4fc88b51a54a15f9b893a8aeebaa622cd59835a67eb38dc27a5a4a896aae289ac1e68acb14478e115995e87aebf9fa28aaa94433d860d466338a6a62bfb3aceb770ee8e30bd35b48e1379719bf6193e53701ccfd15d15fbf5df3653623a690652f603bbf593fdbfca3c360f087ed1e62405e98ad22df7ee7dd31d87fdcf7cf1eb3ff4188f1f76febf8d61822cea16d9cd9881e8f040a2157139c1a0499722a1243502c0f748f94b31e14e44e775751d187063915b2a005df7bef2da902eac2af0130483e7c07725b9c5eeee55eee5d1ccb8250308d38233decd8545b7db5a857baddd3c05e9e307a59c9b612691bc9178eb9815314d1b46a2757a3aa324de7989f29918c70190f2f9c42fb8951cafd51418cdfacb7076f9f8591fc676113f2a67e3f1ff235dbdec3f730557d98a9eabb4c818c249ba25bef55e7ee1c088fee9b839805410a99d06377b74620977e775f53778144c0aa7690700759ddc8ed9aba43d501206666e651c6429ad1831e77776571ce3910453d6c77c931d4ef7b6f9012c9f09efa28d2019fcab6eed82bd2d19943fde7362451ecc5312a037f9f7b97736edd6eb311cc2c7161cc14eefe2edccdbcfdfb9f035cefd4b3fce8fd5fe015c14b29e8a38c9ecc67a93003002d0120c0dc1627b210806c1b8d00906d520527c0a845ce50b5a6e5b09a1927ea59b2227347580a980c2c062652184b9db0ff4a3e820c21b23876babcf15530e66affb0b00a1b50e293905b89817a48cb687303a114a4542a953445426ea51ea5d2cc46a5925bf141245555c46c1907dc3c689fe2394d5d5e3632c048617220b71712896435c10ac2eebed0e23cb30fab79e4f69becc12efba58e3c2aef81c3476a416dc0ec1350c5fb75ff83a830bb03edd5c049cb689b0af96c2a34f480e63e5bf094e38445a8917c8c10d3302121211fffff39b4fffe1bc84d857cb44c8f263496b02499de6b12d2da855a71ce88703a2599feba64ba04f406534a22126a097504b5845a32a9281309b54453e68ca51c8d84b81a9ee338aee323701dd799ee33715c07e6b011e66c0332ba4e3757d035e50aba82a62867de5c415790178bc3ec6c84711867320fe37061314729d60a33ae901ac66497a32267ccb99dc5debd8fff5d9176ddeddcdd3acd0b67baf3c5eecdccbeda2bac458f29556433739065d781bd9d9f870fccdd4f90cdccccacedefdd6f1a8fc5e1d9faa036fadf8aa00a97f55bbe2685e9806c1d1eecb27fd2e1fd2f746667be5f7dc09f89c65757f59415b12bfe15afdd2b5e4f5dd75fd7478ec19ea8263a51cda531fb1bf5d6478ed92ecca74561913508a987d42b5f57062f0861554339dc4ce1fb1db15de64382f461036befb538e99012eb02fa42e2b64c5a64983d796a94a27bc3313231474e8c528e285d24a676719b33ddef70ced98c9c73ee2141ae924dc21a92e91c0a82445542b456081a9706a404e0e8df5a9089afed50988c06b5c11fb319fdc1e44cdb457946617c406a191e9e06c6185d1a0b273a4801a6e31f79cd196666d6d6864985289c944aa57d8142d3481ad318b5ebce683c198d7abdad88d1a5704db4ba40724d05938c794dfc16bcf6c1f709b237fc4230cbd12e4cd35024dff00ddff00b0b2bb0dc3d3ae75ca4c33d74effd0fedecd2a14992e7fc3997028465e21a61562acfb99c21c9c818247dd4501e16e5b978ba7b35be6a2ed2b40e24895df6fb33cc154744e5a4cee97bcf878f20de373bb4544e2039ca0eb1ab60879a203de4c70f1a0942185507563e90f38084783953a8fd4014d20a537b726c30ddd49e9c267a30da65e2848338528f3d403c312b248c200409585004b3ee28c1ed0008a19fdab333c5aca6f6ecf804e1de3c04c1f34282b9957a1ce5463037fd0982079b4699ae278818905a460484076e90051132e8a10434ee73b48c0d0ab0f8a109a10f50a1e2081af77a9aea519bda13840f3385a93d3a553c04ea85163948ac800723b2600284143b0328428a233368c28a1ea11cd3cb100540a28b26a0b4e005478e10418e63c0127600041b4c49c1153cfd030f60d093f3829e1c2376c78913259a28e1648d24611c36c220c8611cc6c171d6154970bfc3dcdd3977ecdcf99d5a2fc7c5ebb1efb23a124f7027c8650e5c27b91f35b6f328fa319d1a35db2216637c5ffd7c369b45172315630e53dd4107c5daf0f80ef38fd8e67aa67b3add90a9ef98f3d1f8da5d146bd7311e43e6f2ee36bff3fa6fd0e49cded35c1e1ca5f7b907f9730fda9eb236f6dbb73b288879f55f144157006109f2e1043c359002032c8c90b26455d937bb8e0862c2ed78a62dbeda017042e71cd45eed15e8d6c95ca1b9edbe31e784c0f79e7b0f49ef9939c275e21c74f072dc16c44e50046e7743d79f65cf9a4ddca8f3234588ab4eb7011f14fcc4e0aa9c9472b063cf5a00aa25e4a6bd9002e0cf3ae0d3153953fcb8ce99dd33756d6c8d3395f9643d518d3ac7fc9cbbf70f9de33ac73953e7441a3c04b9d1f81a1cb3eb1c5311c8af94c8ed9f65607dbc3cb68bc3672de456da34ed8564c3c29a4619a5b9aacac90d70760e4ede5b5f61d74c0be1b551bd63fd15d6ee785c064b2cd1ef7828063174bbc786cccca52a2b511d7734d7346571da793bd7ee31a88ed06023ecc29f1377267312e62593ade71dd9cfcfcfff48000cb9c5e42d14668a1caad2d34392fe14b65d93e25939eafbad76e9576679afb50b7f8b553d4aa452a9542a593050202a2415d2331e4040bbbbbb6e5dfb79a1e3efb9df5a48408ec5e1324c6df4b713400752baaf7c3bfa7b08251f39586add323b76c0e772c4809925b3bbb08e8e8e4f0e1d9f1c3e29180104242485a467ae6158cf180ef7738ffbb97e1c7e0fc2071f84eeb9a7ed3aacf5637e522cad11a978327f2acf13a089a4ba445f7dac5e86fb4ae4006b56a2eaad4a5453552b3256b019b6ac4b453aae2cc697efd8e6ee577e6f16878c5f5991211289b2cd92916d3b45325453946d0f6b43f4f0ad95df1e1687ce1528aa5919bde85756aa29f20adbe21aa9d91ed6067ff45d886de5855c23ac19992b7a4038923337d6d96272cf11234b924c7e4b5b2d15a9aabbaaabaa36d42122c9d49e12e4b030b56767095376bb5377ee4435cb046bec4eb490fc3ab5a7089fb9737326939fdb8763a278114e26bf3fe1189ecec49d700c13cec3319135a784f43bbd054535fedc6d13f4de6c6ef7d45f1da63a2db334fc8c2489eb7b6b125fdec118096bfbbc195455c2ecc49348d65adc9d776a40d3434493c9dade2caacc445863df223d2eac91c9cb03df544df862f686c13aec8475da95e8ec708c7f3b12d6d893b0c64b380ab208ce5e218374a27057e585dc514b671dee416b5757bd1ca6faadae2e34b95555553bd3a1514e737b7b7b6cea493ef35c5359a4e92ce48c0a45a1ab07373759c82ca4677bb3373d37aeaf09eaf3338418a58c33ead3a33e3f940fa320c9cfeca59e528c31899c23185a778d654238c409bb100ab17bbfb530f5b704f8f3581c2fbb416df8bbabc2758921ec9c9db37376ce3e438e28e4a65f2c0f0f69198d5dfcdd39e71995e40c3b380662ecb2cd91eceeee10b732a678c28991a94f2c8164099c490226614ced41b20515537b90e4400b4991a93d47a81c49325709c7b8f72cd38ad136ce3916169bc8daeee8fc0c5f5249bb30e1f7a418afbf4ad865e55b2c11162f2bb3be450e589306a6436682031526591c5b9369be8c799809c6fc7dd10e7590ef2d456eaba409b98da6fb646171180b17d2fd76cd4bb24ccf6c749af4e82499da338222fda3a93d4014615abdbbbb2b8241b4f39665596dedeeeeba5ebe382e70bd900bfbc5e1598fb5e1de7da63736a380c2b877a4e978d098e83e52be459c5bb1a1713fd33966d851038fb98269108d7ae4989fa222c42e26a02eeef7452cea61858cc2d57d7d5e98ae604ac3a218ac0bdbd94358732622110bd2a35d6254ddf3a09a7b77a330ae0ae9acf876591ceb8875c43a5271c1f2e36fc528e568f49ec35a2924d360bde855f480ea4d2d834395b5ec53df5203f554a6385859cb66342ccdf5a26fa9e1ad17652da796fdea15a865331a98c67a2bcbd12efe55b6e303bd01c9377a63dfb9909b2e0634f27c51e4a63d73e78cc25048240f2a13d987e91c041731fda3c9f56e671148f62b8fd6fba351bf9ba8ecdb8599402cda79ecb0d659488f97e4b11302d97f015d978c51e9ac8ecb56877a1931ca8c6a4ab42229120fb72c6b8b51d4db68a6af9fbfa78b1f159633e57cfce22972bb26cb8886c71d24c73cac54729a73a2cb72a7f8a937fd9f13d37f7fc889e8b1433febd3fd1d456e7aeab111f238912d93275608c82432139f8da598cc52f428c0dc4740bc31f775bf5d220c826471747683dae01e4b5813740f18f8f8f89c4ea7d3def83cd7e30ab9ad4f183cd44fa348949ee9b33edcac8404b43e9d6d2f535d6156aca8b4e81f5519a2b77ac5aab6c8dce2c332a0b96003102c8810226bc256483ee3afdfde637b5345ce30cdf835b13677565ac8cd97b97150187fcd9488dee02b6b27d80cac99608d88c89af12daa99c1a4659aa75dfc79ba09cf8c6f510dec6762ba93e9339a491592fdd709c76c6d9a3848e05b4213625b2f71f8eed77b8f104f6623b9b236c52825bcac19d80b6bfe174644617c063fdff8ab9010d63c086bfede6b174a5a07d6863f137c46c61c50187fc802d93b268eb9e118ee9c3632fd85e899da43029cb9b5a9870426158c7c00e118f9fe418470cccafb0f21a237aef7c72187c561bd57013d27b0868843f814d610f1884f61b160c5b44998bcbcbbbba7cd42f708937fc71999eb8acc853793a1092e61686a99f764a1694f10674f50674f10095cd2d9fbd9530be476e9ac10756080f3d2b97658463474e9704cbb4b674fdba533f945437b8a4f380606b10bff169dedc93de7ee2ba6e8024b6b6c6c9aadaaaa1445ed729427a7201d021aa2f2836503c7c4f7fde7ae2d12278fdcd664fd9a3886e716e198ebabef9cd995aafa30f9801433d390510f6485a68bd4ee02a9aa6ad94403b9e990698b0ddaa1a5d2bf42acf513b9e9d01cf2950e31e0cf11140995a2e052cefd1ae1ccfdadcc1d856d4226b5b9cda43020d78cedce9fb0fa65becc49fc7666232ae4369a1be962e118ebdd39b730eaab0a0372cdf48a5ea4591b6a1b0b177f73ce398ef005054d39f19812b43b967b4bb38d143f663286aa83dd30f30d0869babb77dfe498a008959e22dcdddd2fd7aba5b0942d01acbb108f2e5d21140865c7dab176a44c78929b02b9e7d13231aec552d3dd18736f4473e3dc6c03529afbbe98177263582872f746f78635f6df1b8f71069b09e3fe0c369ec9a04d7fbf769646236c5d074dc7c39adb9cca74ef2e67ba77c7baaedd5b796cc68ff3cc3785f8dee0328578d622c3cefd1ce6663e3467d89ac103a9829b4843edd8c056a1a17e861df52e2c0f0de86521fdb716f8faee3ddb1468b2866999ba6c65a25a6a88f16d686c783b0085c52a7269b809420cc144b33160ee3f03a0eace1f80baec777caec4920907d0a28785fc001c418a8986b3ed00730730d7f118b97123467a3062f303144ed8c0070a173f5dec70408ab5390289a09f26ec80c4107230840782c041131ef0420742fc10c10342b81d84900fc2a7432042890f4a2003308a44d141740f0790bbeff9077f11c9dcafdc4ca83cdb765f63fcde4c9fca2207edee425fc7dc47ff5d771fdd3d3e0cbaaa3a77e72d047708e17777b776b78943f09c6544fa3bf1c0d838e86def9ba22a1b8a8aff1cf6ac4cd706f55be3ccf75effb036debbb75ce7b0e61ef5e27b3a8a97ac313d733956ebaba8013d7fe83f8dd97675b750a2e3deb98710bec0da333f0febfc907cb42f8d48adc4c11448ffed0903452947cf3f499ca80662fd222cc6ef9ce19819d6dcce782f7b81b5992ee496b21996772abcebb7c8922d134e4420ff12a990f14f376119b94a5a866fa01b21371d9a01829b202de39e7f9a44d2b4ffd1484a966c8b33b24d8ab26de41e1a215d9f6cab64068e912f63e5bbefe1c34a017b2f037bbf33ac411f5698891e76efb5b3a165f58b325d1bef214629993022610d5247ac0d08e1a396ecfebc7edb2657dc1a10f32fcdbc40e79c50e25403b64936b173f37c836694c23c1da8aa6a76294c872149dffafd649e765709437ca13262ff2c0ecf1cceda98e2878ea6d9a418a5fc35612cd42e2d24b4c2cd90dc56888556e89f1b673284f333fb594403d344c8c3e4fdb44b3fe4e97e0979fa57b8804f9ed95c4887b3385e17ee07bdf196a030fd3da43050e4f67e7e5a467f66bf11b2984b501920eab28b630247d098f7fd9b048d71df42ba151772e1db6042ac87c2b8f59931824068ee66febd7b71cc721716e502c9fb5b640a45a1d921e8a137fa45eb59ed7e388448b8a80a8a445745c5d7b0050f320dbfe76afcb969325f3df486fb7d1b7c5cbfd9e9a7b54f5198fa13501c44d6067fd3c03497abb8902d82e17d8b0cfec37ff8ebe88df87c81e5828a868189bea0b2383867a930afa860e5550481a559c988e44023cafad42e5ff0ef17dc45da14066b5f70cee260309ea0304c2d91fb1b7f31830dd3a828069f376815c73e2dd36ee2400d0658879b4c96dae8d7bda12f50c319a55a3f3b07f8f4153956a3933d2a8ccdf49a161d6efabbc52c193551986e6e71ca247aa20fe4f6b385a6b3161afcdd43605f331cf4f75d86030b6ad0dfaca55f6970d8f7aca5df16fcf393473cc86db4a3c8be3ef34a81020508e84422917ae4462291787c808080482420128974aaa2d08b13854d104723f51a1787cb5cd406958d3c661aa34e915b299fe7a8c48fb5142d5533120010040133140000200c08878402a160342213a7cd0714000c7e88467c5a9a4aa3498ec3308831c418828831c400030c01303343443600345f7bc306d4f0f7680b6ad927abfb500c4c83df947adbee7e372b1fa8bda028a9a477a659f2c2e89a5aed57b9837ef2d3914f41f5a9a6aaba623d4860431818f9d2409062091f2eb92cc9683b6c71a3adf425466835f8f440dfc56bc80b0e9c5c76c2e32eaa9877ad64314e48c98d765c87292cf64f504b51830729796d524390a2a7265da13edf147da1c8780e20894644764a1873cd600f87408ae55d13af6bd04005e96a6c65612813a4286a061be5d30ded34851c158e7b63b897cf8ec1c0560d2b21ea4c81b17a3c052e87b1cbcc2d837d87fa1c742ab4dcaa0040eec4615704ac51528410dfc999f14ce90b184d579ffb90772e780e196ded11bb4ca65f059c0e415631064b4ebe4527cc818ae25a851738009089163e317ddfb8f7f9a8bb709e4f1e1cbd3ba922d5b9a82d0fc90a892d3cf69ca0841e54560fb00b3992990fe285379fc90fa60839d425f8c44be8857f68aa2f7724130482a6c2d687b2614cc5eb19fdd58fa8e7b84d95dcd1fc1d58000950d6c9df37827e05656dd8246be3ac602b14c383dd91402ea58e615abd729164087a67c7a5d1769c1806a2a20b4b9e2d33538bc1a80d02443b681cfe57171db8cc61084b20581c2060536e6b4c81331e08280e05c876dc5661de7a3ec44ea369e23404096f74d0be5ab42f7c500fdf040949f7933a81a161e0c03faeb81b21beea37f2ed3baf18eed045702e72b183c98f2b1f91c9d6b2a312f29d0d83a0b3f15880d190efebe282f581910b857445dba7a16402b05d07d7bd73fc851a92c73e4267d18a1ec2ccc4108402937912f04ee1b521efb9f996773f02183573a40885a98944983cfcb5342db1949880c61e50ef13705ff5e2e3bf1f6a5af6bb86af29618dc96c42751ce108dc0b28c560d1557a0a5d26aafd74e0acbf2f06455d1f9b171f10dc7f474d05e5be1693a8a07e186a3a4d980c77bec3b569622c276c9ff3c3bad02ffc75da063e020772920aa0c7667e8608ab4600faada0eb1000db96d5015d6cbd59e64054292d717870ce32a7376fab473e5ebf8395b21a9723e4027bac4a24f74680cbc2d9f2299cb0aa1e236cae19827edb58cbdc390d720496f9c3c141612bd6be675a4dc1cb7032c5727db6fd0c07acb669ed455633a6bc9fc81cf6413bf3cd50ae5a3559d56930dd2c2e12418ea38baeabd43dc7f24b3ee720298c54432732e22e5ff760ef85b72164533900a7e8cbc017c40c543ce4a9b933ed05b11edd542a524e2e89fbd32b25384e543755462b3c19aff00b8211d016a13aba297157279f5d2c6981bbbb271b1c108a2013527f7d9c93ab8f627940a292e921ca7041e323a5a2c539c27caab6db0756a54af9541afdc9b4213ade4c644c8ffd03ed2586a5695c53e293c81696d7ce8b84555ae4aaef363854986325511531ad57689cb758945d3f699f614d142edae21468ccc6d8ad9f7d1d854474e9b9af40c4fe9781d2d75a69a2f5c01061c04d341a4c1467f4cbe55b760b1f07040c9df492e21f757e8f0b3fd1afd8fe3d561d495fa2b01e54f45c42024f85304fccc0d4ba3a59bf270c885896d7a59503eb642b69412b820cd4d6782371fcf250a1fcccf18aab3ad7ae862ff5d8285ac757b5eaf4f02f7ee27e66600ece3da159f375dfca400ab8093cc57515042ad716b1121799e13ebd11086343f2b59b47292424774175abdbcc809d1926070ea03d4657812e31273c711e7d2b6fc00a35b30e3ff4841be1ffec275602c63b0d1446ad6fd31ed2d2d67e8fee81525b25143b2e90346501b169e97056104f9bc358456c9a1dc02a62d3ec1096884b9b431fab1f716975c0f4afef50ed60e90712f423fd53459c53507268baa8b7bdb7208d4c1c3be7d48f378b28538661069e17cac4e04b8e455fad472cbec2a7ceb5b79d05b352dc819f136984be7ab608cc29ed547c203b598fa36e1f0ad00c3adce6b9e06681003ad29677c83b0f2fe7bb41b25e17745177c3643cd9718d3b04f25d67ceff7914f74e8cdb67a622d80b45c53c626280986c81a64f70a9b00865832771fc038ad01aaefd7712ab2b7186ee2a54f3e1a86133208f4e22c8e1487404abe24ccfb6d71a8e5365ecd4cb370e905fa507600c65abc767538f8436a3a66011152cb3d0c95b07dc56e05e7594b8283fb1cc8caca791057492cf20551bb1998fe19a6f7f709f179cfa618aabcd18b8144b55344042e81c4e429026258f29216b6601ab8d56813f3d1263e5e673261863012270da941a635baae8b9356926568f0d3ec42a1f900cb505117e342b728a8ca191c461f323f9533151f4f06bfacf8ad3fbd079b6dcdea07548c3c35a2cd938adaceca9cc5b8b80ad82b56a955cb6cadbb724329eab9dc36170688ef17f97d5fcf3c608c4228b0eace7493e424649f52eaef48cdd60e06cacf95ce65454937eab043fff072e0b1bc1205286a2b5cb1198925259aa44cafd488ba6ec2bb5c238afd81e6683c780849ee67115566adcac8979686cd10dcd9502146b5c59d69f329f8134c746e004a66d670f1799b1a8f8302829d44bd7b3698aa64f1d1d7d31d609573c831f73ede49e6e3dd7c48f41c93e7cbe3ddb1dfad8aa82acb04e5e89c33cb1fa8bfe228d6a188d3eef2cfa6b968b35622d03438551860bc449401406739ed519fe848cde68ed02e79000561a55fc30e988840dab941905382d35286229c30e8150695f1945d517518210f2a2095b24b38cd0ab5ccddc1f9e3e0fd95bfdf58bae144b6123ea36801af5093db330245e356971af883aab26fc4cd155f1590c135b590ab9ddbd65182ad1127bd78369d442aa0aa3a7c1386867afaac82471cb69d574f4199db26ba3d39a7205f3e028f974a0009a65aa24d33ece9855030cace0e5832791041c934ae1e0890ba62b2eb6df17a2e6c44e4a3eadff990a4793c4aab5254bf25580e016dd123c87c4af7bfdf6df38241790e5adb782caf3f60d301e6dcca1ab72bdf4247d20c34028978c3fe0a496f68084e6aae996784747d61c7ca634b66bc96be41a6070947a6b52062592d46332b8fa1c7f4b24bd5995a08ef066baf11b2985023db3c3e41280d1cd5a85bbfa90cac43ce906f89e3344eec7b6587a7290cb301db7d1b7e54f1939b645bf224e291b251c2431d00b363513fd5b3d141e02c71d2b45b121afacdfe12c2f546699495eb132fd7c68a98576f574093adb92cd58055f3bc124a1bbd6c8d7376497521b8c60cc4df7c4a6194028d4dc6ad5c270045f9da930a11ddb19420d1c389250b0e755f26f94b1065a7692a6304c855eaeaf6129cc6b54883787e4ac8a09b514232588a1a57bd625be1cee71e1740c89cb4b0b96805aac9a9b5958aea8aaf448dc2c8e4dbda69ad202b450acac0f31d416424279f72bb4551c9f716cfeaa02aec66368eee34a9bdf65471fa07be7aafd29a5f59aa6248698a955f789fbd2538a19ec433691592e39f300caafb4476535e5a57c2fa10d48301e6649829931f6065a7f404c76b7b5ccfc8f5c321414ea31c4734b3ea494c1ac0c48ea834d2e357e768c9402545dfc5308caf0730193ddf234896fdcbb73b0260982f3b7a9e13a234b1aefa55b6f8d91726ef457902c3d17300017007e84ce0bab9c7d4571bba334841013609da432b03970f706b0f2f1e891c984067275f5eb5c3d4aaa9618eedf3723cc0c174031694f0545b773777c9a433a3aa948a8c118348351ca1ec59903ea8ce252b9cfb82cb5df9861c78028374c0723f5335fc38d659bce0bf473f4d694c850ab4820ce94ad03eaac2bf57a0f16f32a7bdbbf8aa16e496f57a04e5160390e61b28292641b7e02e8036b60eb64272c1b92fbf5797c88a6b8f63a5065f0dd1ddf3dadeacae547767dbb1103d07a9fc109fc9f538db0e7a327ecd4caf1ef23b9f098db5685d69f0104bd2f23bfd578512775e40265cca42c2e32d4169357c1ebf795914ff07a51117ce8bae87a50b1572288bb697e02d36254122f037df5a96338a73f0f2b9f5b8fb7b2b47ea5eac8b4c97aeeae16bedee9a17ec3c841752502d77ff4505b8d8b977eea5e4a3c9c02351bb2dba791cf1183cd7004ef555bd53ec95c59a5b1b7a3f5dc4b430d274420b98de81639972ac8b906127b5c146097e9335f900117ae580edcf586aa913d04f5b6ec2012c09a8dd335ad54b84aa48089b66a7a8e865eea591c17401f45b407d7827ebe5f486439940602ef4f84b768f3d52ceb5ca83abe69fdf09f1a2f7e4f91b7b93fba91b188e9ec9510613d703e690614511cd62463481fcf0b43c35c453d21605ee8205db9ac82fd5b37868a8f835a681c9c4d27086b019a57c5319bc5ccb0e8fb27c4a08b0374f7667781e4c2a0fc47458161387ae80abab8f97bba515109c1be17b84f333ea810b9b4342110664200b339e382f726653a94c9a1bbe81564836941078fdc9c739cb53efde2860f968b8307e303d91dc32be5e74e03c4c89ce4487dd3e25472d1871f9d2f4ae77805d2279289075f7aed5c353e19a194b57c270d712e0acf95025881d3be0bea8e55deb2dffcd73a642a96a2e9734535e18b906c1cd92a46a447eab3d8b89a6beae00a09905632f71ab837bd400fc92873510e786b51200ffaf8cd3dff8cdf0ef18709f63a3c065ed4aaa58ecb4ab93da3531764883fc5c7b8619ac86e1291a6bcfa7ab44bea8477d5661e1688c4bdb832beda910c38356b0846cbab5a264c3d3184d2f878e7617f3758f4d8b45dd9e323cfc82b6f3b28c2baed75f66d538632c22975fa6bc4681f9577a5fcc26cb01a4c36185adf9d7a779ece0baa369ace65c07f8de7219edd133646dc0700cb012002e69f9d259f486710fdf0acd3c0e52988a395b11e1186a656055fe22cca32519bd25ad6353303afab26279cbf4a8358477add0180bec0398118b8135d9372360a2610844da960b96b64f653cc26671101fddf72be2423bc68a2207a035a39dc37e5b86d9ae4f36ae04a4f87bd3bfdc3036972c0a48c31a72d25908fbc97205bf016d04a96694440057882561bbb928d95ac89f37d6d9cb5ea52f6da645a11e96639555d87e126b084f12616d90f39f0240dd7531994b71e727d3345171581b88521e2f905c0da63aa7b7557045db302552d7789002e34955a36fb348659f1dbb040f7ad25cc7a0b36e312a0afe44ccbc65a4114b1b190fabf799e52f6a54f65842b7a7fb44bee21c3b6a48ab33c0f944f71186551b94b2bc88586b20e568e36e86ca3d1971515b6bb36099b70b851124e6dd5265e8b817a5a5236461beef5f2d36050d3c8521787377b1bdd079c35cca47d7db46b8bef2d91aee23a1b957ee6424ce3efb0c125fa836b011fb62af3cfc542d73bc1af710dc5127b4bef20095014b8b028c059857d55b171412fb9d7f397acaf8f39b8e73f8ea238650907f745b5dee845a8da166a1239faee2503cc37d8fed269d628930ce181d137bdc98c9795b7a450c75a32b4eadf875c2b833fa42c3f7418b61448e7fe62e09bb92d0775bc42a0bb8be34843837542b4105bc35545b4f902cfa95915d6225045ab4a1b78be1dcebee193eb81a2f01a204dd129a7bd3e352261392fed4848797c9a337932cc7aa0c19fbc732013f6bf9fa7ff02f06192756cef1026273bfea8d803232b1cbfddc98badcd56484bb78c4011f2b1526d094ef88d80a8c587650114c7479948cb3c666fb785c49056001ec64686f9261dbb1f54dad8de7e7224db9d444c08a03c9be8a12d640bd3659999cd992d0f78bfd2bbbbc084fbb9a6ae3bc683cb47de4ba000032a8e5fc955061004b8f8bec57faa8165c13d2ccb416bd5d01e139fdcf7aea19218ff7ddbc7a525dd075c08d5e2310526d17e28ad9241340e4e2915bf5be6160c520157d49cb1cdd11b1b3e520f943408c00f8cb356f9f1e644ffe6fea329ddd1ec75f2f55c50dd3a4b5e5e8ce7e1ac6b0c8c066f52ac17cfb861aba870e25c509b895acb08b580942a07876619d0d59e306e7283d03b6f1772caaa6dd595b909a67d4abca39368fc58b528ef00492570c523a03b9b8e7de7c81cd508a2805a7c92c4cf1aa3de291ef04e8d87492deaa7cd455462c0c37769ed14b8d055c32d64998b7e4b638434019f6fc948be1b205f5f34ba7cda8af68d7c45d426574f5999b150a46f42fb702332b5f17af9fbfff6d7d57ee95a6b3d589196d9d0f2e3f8c8c1ca0535501bf9257cfbf73abae584d6e6616db0224a4b24228f73bef5c62261b2fb70f4447a5c3605a9bebb12490ac1c4335c96f08d8e72183b659353167a386ee0704d0c4e7c8a0de5c448597108fd6e004cbe449fa0529cf351aea9f3159e36a62f112262d67008e89800f449e919d45cc4939060b921c21d4d40dc678767902f129bbff545cd2a9665a60b81ea616839d810c206d8545f8e12e4caf9d880716dbc869d673bfbba9c67147d54977b313715143dac451c2273cbd19876a5b74fb3dccdc6b4a98ebedb69ac8a217963a33c7d3bbdfd4a5e234e1bbe979685b476d37ec5440238334a4233ec66bf83dd3e065182b3f7a6ba849b27270ad7fc96caf74ceae0097b566512260d94a056186d1d53ca9e29912056a57edb9273a47bd2969f93b1c5531a4a0fb6ecd005a4818f704bf57d5e4aea49b635826c42162342f883a90f492629ecfc5164e1407c2b92579d83a43d1666d29d81275626d75958c3312f8dd39d8d34940ed76b04d4ed3bb38afc75553d82744f9233698550eb2e8594524fb53f419ca6047f2bf612e6d69fa50c7e242babe5005c13fee20a662566e90866573a423782ca795c3a8c444fa1b61719074bea4a641ccf184d985bc74f20d20cb59775db89fbee7caae1043dc7efa4853ff9acbc47a250580acb3cb567071ad64220db37334c0d9564b5448b11d565f3bb0a229127e7b6c01b33920d053f665dc12a02cf115c418f82661713acb573dcaa7846bd3628aa6002b813b4ba75a0f42331f0e88669cf2b012a2e903e356c530555325059918c67da14710586ee5994fba0934716b8e5098d42c85fb9bacfced258c61e1485088b11240c3fbb2c7b18b6a42f7524d0639f0f696dc412257dd7ce3187e26ec3bdfa7325607f4994c5e1084f9a3e79979aacdf119cfc6f1abb9357d3f7d2a547cb3d0710d6fe022647f521a8ddf52a77bd8fa7cb849fc94ed5e360eca8fe7eef6718bc5e3d16a222e673d03d40eb46f73f18d5110e040b89275cbe04e02aed9233feeb4e1d2ad589d8021c2f6da8c781b47b15bc5f09fdd73dac410117dc28a2f2ba5256fefebf8e09b5801d122d6060bc899cbdfeeb22a354edf6b9101a01f8bbbe25b6cf1fa99a03e2af515e1469acd403dd404804ffafff977365948d164494fc851f12e4b32ef358ffbca06773a858a0bc6a64323755adc3bc6708e4b23d0b746a0198661c63fe1277b9c15029fedf5692638e4c784f8dc25431d53d782589bd2522a074e7b9e38e1614c4e375c8ac957bd9811b1a4c2154d2e4f6bf062122c836c81fa11905c9760469cbc036a82a019bff6792d83087b48e2480e2465dfcf50fe1d824e509de2c3d6b44f38c714befd285a072d27b568b71fa9840c77e405a908d03a25686ac31095e2ad8837a12dba3bdcf3b44f32bcf96f125071041b56f67075eab90c31f854d78dbc28a127328eac981ee6006af09a8e0245a458671fabda98e8841fe0b1b7eacfac30e997bb99d2f71904cca380cb37377dd3651af05b08f933d68b479b231d74da3dcad5ecad3dedf206ab0dc881454c47011056c6af37691242f9d27f74182240be23dd12c0d562a9e831b7e005dfe314d46aad84cc29500c38c29380a9fbaf5141d284b73bbf931884407fd48b0bb42c7530b57880e71ea22f7b98c162b369bf2f2352b24ac792b24780190105b2f05bed2d1732679a83c187a2f027101b7e4748f0ea6206fe8fc268ff80fce091c705bcfb7283a8bb41cde0683415a1aa215f9c30508d9e571d13ef4b9c7cb20c3225486fb32df26cc60768bcec5c88d8c59a612b224da6d879c2cfbb92d8316c9575ca6f3d3574e45c874f00ef7576ee0db3a131a66c8f208c685f0973ae7ee2df3d46db73fec75afee4b70a03cf5ce5e9b5df0233ed82e33471b8b316ded08ed7dfa35a5302f1e36df2f7f18367d8e770d291c3c8257aeb80cc0890555f655f79b5347f50cbecf2b8e395a06cc10082790046ef62eee79b09c65c9f82f3543472e7d23d29a6bdb4134fe60bb6909fd82ebc4c54e3ea9fa310b1de00fb9a9935194f8a1803d6a3dc0401f5aca641a3a732d518dea0e4d47a7ac5d188f7b8f1b635ecc4347c99c186756b699704c7c28abd47cb93f7d08c5aa2a0a739bc54c1b81052bcfac0c79c832099cab08c3b2971388b8bcde944925aa15c0076bfcc887c33dac4b48593f014744d4e14b7d76f08c6f1dfd8eb83c22a8f17d414ebf1b8c90881e6b163c6121dd049144b5b6461de021faad6deab06a357b2cf629a72b76269ab651c526ae0346b7879cf18f29f645e4326350f0cf9065d86e5a052719656c0102f9878c301a5999530743765446d915a06fe4478243a023276d8d1946a08acc758904d3086556bfb1ec7f84e540b6c910a3e33e24673040588448a7656a40a0d96396f9d0bd6334e873e4e639885c111f86c81861850984cef7d49196acc4d3794415838dfc0ac1faa4a3d3ba010ee396c05a1cd98fc9a94360432fdb0a7527decf741b2fa66ffcb0354bd1856f7ef88c2e291d974204a27ac66b7e68c8fafbe559dc89e3740704f714b99faae991b2cfc3399c94c489f13e5092654db44d49f0c6d53b50395f5992dc915e3057ebfedfb15e0773ebc0b32b63d570e06dc379dbdcd2b9ec08d4ee030da18a447233060d5be8d395208c6abcc5d361b920698a66ac4b884f533a285b1c94d705c760bd5c977eeea6713e9e1978f61dd66dfafbe9ec4f72b7ce723512567e7bc45c477be35d95e4a0060db96f9b460f54cce1770481392e49d7b821d5c7b12c234ccaccd3e70798fa9527795c630e2f8f1df07edfd4dd218803e1480b930c2a967958a48e0341eff6f630e0563b10f51e524a84b5eb21a9e88684fb424527727634bcf6d934acaf861b7396c5de52e1e1af1d34e085be521c1c61c0457d701a05b6b8825bb4a21e4d239713b2ef212d088966bbb3de2a8da0dd7581afa95c1df588d477f8cd05fb1af8e04a2b01a696309495485b373f74a564244c7a32f7452e02163bfef5426488f5299ea40f7806970525b12e2e5655962cc8d93fa1cd44b8683e0f10d80a380bc374a168f80e9e3babd04a5f692d5248da353b2ad40fa421d92e38f91518d30e840f15b25392b7d13c59cf1af76d900a4e0227521ef0c2bb3c5bbaa727e6688ef1aed3194e8c57dd09f65f30888106710223c4a1c74fbe78aed7c96283e8da3430c543822d7bdc0ce84b3442516bd7de070a8aeecb370d42aad9eeadf3b2debe6355c3bce4a0e884b535dc67449b02bccd08be95e05f0367b4e2855939d6bd15aa2d50e7c6a636d639847ff2b1bf996e0691a39ea20255ea7bc09a6d109988418e8cc936aeae3e51157e184ea7ab722d4b89761a3e25e2c8d0c4d54dd8067ab3a16a64e70b4a73344e968ed92afbfc9cda4477b40c517b007d29f30f522194fbb4cc002ff34413a030482e0c3b5b3523d8b42678179865bcd93b3356e7ff008ee4a823e39ab846fa44f25d8f192e8c572d710e57d09acde05f100b6de632da901cd3255159c134031c618d0956af116ec4f014068b8eec25b4007697604fef1b46b9146d622477569b880b2245b6776ada617e6432c13364dac9625c22a14ca23f8e54eaac5a59723ba87c1cb49c01b37da0fbae3febf91da261d16fe1de2927c38f3343630c03e44ccc036601964148a8cfd8e63548879d9ab270f57611c45a6e3dadc6b2497ac3ad02b4926317fcd4e85fbc849e4d1188e69e226c16f222eeb939787c556e6dde77918cfa8c0abb8e522fff5f908ffae936e27ca988b39e2005ca7bd98d14a28891fdde21bd3b37ca2faffb8c162726ce1a628df1047193b3400cad2a6ae8cfb36114279df04158db9f06e668d01c1f13b8aaae6f8356741b5de249f1e6069d53b759a606fa6800a30af293faff9fa666ae7624e0d0cb234649df17880d5a71b5284f3bf3e850a5c79800491d1ad5e914c1fab016a847cded6d10d23c42edf2753c3d2afc94cc110563796a6811eb06546339896f0eb7cc4860abfecd4f11fbbb2674b9d13eee658ef2b5128d3948e552d12cad9c6780e4db4df66d206f4fd5f2241703ea1ced75329aab6919e0cb0b5cd8cbdf0ddce55a2f93660756cbbb1939d60a77a3e5f3ced5d6e30547eab69f377ec0638810ba834c40350392f2978679edc12ba73c7e22ca3d4ad8feb2ba1e57bf4dc823dd2a15c53dbbe63afe7cdc8a2aa442147f9d231b01a70baf938fb9a64300d3cb1155c3b53f75b22bc40acb41786230d88094ce95e1591691d4b778a817aee804d180ee3a1a61bd5490d4b47191ee7a7879ead16e2e3dd9ff8f10dcc0ad0ee0ea4a1ccb719018bb38bd4df122af05f185193cf8486cf3d556c5c5365890d70f8187940b4d42224972b1cb4c1e45d3838376fef4323972676ede3401dcf1dc20f0e20e5dd5d283032c3133bc719a7407f230df9a2b5409325177283eb7dc2b2f40bf0b507ff40bcbb282c3d11bb62dc940a2a5d060a64cf649c18738942ac17430576b006c6d34bf7cb4691db7c7ec383dfb1ccb1937960383817ef144fbc3f1f753b0b8ebc7f0affc4e9adb1f50ef481cded66664b4779140fadd91b549c7fe9fbfb005cf1be6be21a6c4f81b9957e7fe0443a9aec7ff8909d10d590da3849ef1ed41affa2e90b772b33bba9ca2a09305f1c470de67379bbafb4300854c387143ac5125f4cc6a77e74885ae4b8846b976095d12d3858a1a6b8425f264f8dc9897b923a2fc4fd5848eefc478ac3f4c7d93085f9ea085054e05f4f632ceb1855cd0701204e051d6875849dfccbf05af38455831d9e5ce172689519c28bbbe235ce0b66723b04e6d9b923153ffe07851fc9866fd303b66645c10d986ca593a6f95b09f4efa829725c09a3ed068f47a694cdee195ed489dcfe7b185a0f73fa1bbbd378b86930961eb853a472bc56a3f7a20a4ab1314da0a7404b07c9a85c13946778e6ecf263aecbeed8a4dbec41cbada1aca4188d495ae748fcf311c2837100e76a18e36e1bdb92e0c5153c0f1d292f8825111e097a8bf64f3b312239012818f3620e06048ed06aa099e3b50f60b205953c98a0a2560f629b7a4934e7c5df6b8a1cbc684cf1b5ff3f3861c0b0e79609a9c7c809d926dadb1e506b55c17e76f1c1ab36b5aeed8f1023e74f17c5c74a02cb142910cef45a736d46b2b2f3acc4287ea43eab65c8001e601426866c8a2bdb7d57a069dcef0c4dc6e9533ab3454fbd056b1474dab986e5214e61f8075f129e439fcf4828e962a257e89935767d95d2d7ae9c22ac9faf373d5b9461940fbbe89960d61dc75b94835b68bc9d7d2e7af995faca3adb5ed28aa0a7963b56ba831f3cece3b1c14ade5fcaba95d22d2e8ea146f91bbda41858bfb759aa9bc98ab28dd25bb22be1f82d52385bed3a0ef78a3770241ecd61e6e6553b41be0af4700dc9b00c71e14dba22fda0f18801ee3704b06ab4e49071d7b71d0577981b074b4de2366e76e5319e86ed41aba6f108c36a71c154ab7685b4ef92bd9599310694e5bb8ee708e1627dbdf214157a47021c3e6be41443ee6cebd4dd445082aa2b747b2749d8755917c21d802b7ade3419cc1354b66e88edb5952bf6cff279e66d9fa6e0d0fe5226adc70ad66e79e6370bf4a326928e112d8a4233705b75dc1d91bcd6293f6670d4dc56242084db1a1613281b8f6459997422b5c9f68ae7e9099db54594fd8ae3fabaa5cc7003d64b6eb9cf08a2d85d8bd005d7d71475c20d1e91a2195d6b7dbe59828076134d286ed0def7bebc1c47845abbcdd388a1edc4de3fcc869cd1ca5605d5ebd4ba5c2276cf838c93382ee02940aa8d918ffd5ccf6213b774466aeec6881942417f130efd212d127193e84901a9923b6d80178bf462d24d814cf8ab55a03a1bb751d0225ec898fa96592212cecc3201d0af3a4da28021a7e7a27a206b32e1ce3b4ceb0f20d8431b864c730c24e0f6cfee56d2f4ce729e8269f4fd076dc5822f7a144b4e4a562b250f7cdcd997b7f6bb96b85a40f2a12436f72a8c250928edce90a4e76189e5e333c09333543f8d4671bbb939a330dacd7e2d26caac4f36e1e847af49d6382e60ecb84b32f44689d443675dbc26ea7bf70e4dd80cc44e0a558cd0afc9f1be1afa0ac3f5698a2f63fe621a257a8cf750c17a44f13411331beb971b1375bd3272179f8ec038c15eb2ea4bc573aedd82ecec57016956f19a1623729b53268a51118a5a5045397e6d0bfa9172ecd2cb3733b97ed2470ac6acc47e0bbb188efa75ba67ab7f0e16d151d210fe245b5959216ff3d0b14f39d1e612f71067a7f8a291783b54af17ff5d81e43f2459589fae7a4ede42b639defd39d72b6f98e9e89aeaaed0f9aece50cebae39d64d2bcd9ae3e7c05360d96f55e0000bd39fbfcacfe7049e58aec270791c1348372cd46e25d314697013eef15bc33585e6a44a4c5e794d490e508b3f248600331d1095585887d4853f97f62668a6604e8a597f4905f5f50db5d932e20ac29569db3b6f8a1b6478f4a22df0b50bed9bcb1ccb3c78f0ba8faca08555dcefefb2544dfe155bb49964cae84c26b3ef85a1811d5fdce70d132115e9dbdc9b482a36d61c544bfa5faadcab36ade4dbc4a71131099226cc5a70a63850e187fe94b4a613a2e06cf6f95dc9a1e2aeadbe1e80c135e23a5c673ef0e9a93cac64e604ce0a71a91be8cbcced92711c9e35c7b57d07c6c15e742403434d050caf674c76643e1ca0439e23f8e5fa88142042c3804d82149a0d1d3e577e6b0a8ea8fd6704c51816ff25e8724f1e46e02516f0c798ab1aa3016ae3c33fe62de5445fa0a74d791f8a49749deda0d8e234d1f137aa9a5446345a9155cc2e45da9f882ea308aa86524dd4b673cbbc1fcf3644befabbccda1023cc1fe3b5af7415839970ae568e30afd947f3e8528853d500ec748246ee0adbe1ded9039c6b9adab86082b8102544cc9bb889375f70a68c84959b1cdc8bd906285d068ebdb9044499cd220c2db05dd0ce50d0180359db23fcd403b6fe407cdd587c3f260885f3863fd5c1d476d2368bd58ae803c87fe048877ca24756a74f0dc840c4226f6150bb21fdb477b30703f606685d8a3ffe482e6c42870fe4605b3fbd28988f6381c6aedd160cd6c1519dbeefc0e05b62be885acc64781a59351fc2ddb78092558e5654a42995a97a40c8a2ac204d6830029d4af8e91841d5c4596d9cd63c3b1dfaca76466d063c17d5a8469b890d210ea7221e3f2bea19344c7ff3893590abb01d771d293429f72155a0529cb248d6df89f3f983a62407169c67ddf3ae52190feb92fde142bc67118f0966ae72ab687bfd3b7bf0b754d299b043df427131177c9d693267bf2bfa26c8a6faf851125a194672ca377a2d3aaf5a7484f7a490b2cebb82a6ba9e1ae596f3e34b9957cc2adadacae247b39225828667c735435353de9c173423d74b3d7ef7c9dd80dbac72159a438e5b962181cb241111fe7e6238e9e80bf2c61fefb3a2154a98a93a40632adf4d5881372274def36e40ce148993a107a411b048a202763755a55c58638b91d882c61c2406c1fcbac56df017bb9576b2f181e6efab5d8eb7ce964d7ae372c22c784dd7749e13f29af82d3ce2549fedaf92926c4603e81533fdb4bda7b596bb0e4546821b0fa92f9a26b460360fafb0c9b8ce3af7aa632194106cf101eea4f2ac5aad60ecaf33112f74c3eacec40abaa9a9832a824eef2dd283cfdbecf68ee3d50a453a359fc7228014ec7f9e5cea5e114cf3fc82c09ada74a697d9f7ed2f91435c141fca0f6b831a147126bfb5f4e4b0327664b50ce415b668fb806660594da8e442190c3d18bee0c6acca83bb4025bd14960e8b54b2a7c74dd158e4c0ebea2a1865a74109471285c2677aaa5f2bb96d2c5d6174d6c89e543ad8453044a2900e75749623fb6965fc63d5b3cf2e13b5e18609484ca234d16b7cb7bb80dedaa8758e8055129af2824292521c27dd6da0b774dec91a18f09153a0a049563503d4de93140c728cd9eba1a7fc7aebec90c8647633f178403b0d48664691824e40e9a59114fa514ec8d962b6dbbb62e352a020b523f7e677e01841311260f80ff547ce080cd0c29de90d0111b58229cc4a4d1c44bd2c9cbaeb2a0eb86f252a296609da268b98df8b054d9c5888bae2b56341e0c66ca2eed8c3864d65611e9876782f909a0811f51c803e8a53921276041afcac38dce05cd838d90ebad6421026ce1b0cc7dcba28414fdd476ce999023440a80c25d83bbfd30323467cef805d4b5e7a0ddcd1c15952a6b53496bfbdb917dfacd7e458efb9f92b94d7dccaa9a8625c5e03e437f440e699a060db78c6195794eaf5b7ad3c2205ae2903c0d1678a1f75c25703482846c4cfa70df561aa5bc92cf79c1dcc24baf4e481caf45c433a0dbf52f61a4d56e44ab87dbed25b1236316b29dab731961abf9e579f26618cadc72f0b33853f26a8709bbbdcf230a9f8a8a0c4e470abe0c04c3225fab6cf02d3fef557997c62faee9f0fe3a671cb16cebcb888e701984224c4a69d5de932a18cc514dc4a56f52d81176a4f8c0b74583fd4748f9155209b5f25a04937e3273f0ee51b15513c71593876eafea59fa179efbffa30d6945a7af15e05c0ca0f98a07c34d77853460ea5c24da2b202efa8c21ee9910aa6036010eb8f5be640832681048c1d806abbcf0263fcf753a97c02aa77f3a378c753e96e29f31bd19c63837fd4be64796feec6ed294bc988e46e4164b156de301a688e7f1b1479c2fa2c68e19569c39d11595162f150a8f997a220ca558fc73c0f7c146bc24b06877ebdbf731c172063c82cedc02fa40f743dfa93f05d3ceb336aae42a2d0daeb515ffb25a5379458381e2a7ea5693865ece5519eaf1fc4993cc0a7315e869851ddebdd6fd1b8f5d0545074476c5d5e16fe8103d8c1811e4218dac34ad1f2a0d2fe676a7ec3576004d4021a63e84d43ae6b2297313cdc60499514d7f79ce835d3e64bdb62ff1b4d8a63a71926c5bf61cf79d72fca15fee7f2ed739cafab7376a67059bfb426087d3c96b02a6b9a5558393653cbe2caa28e39c72554a6194e44c027a547804e99df19b2899702d04d56df3ea1ba98a80b0ebc5cc383eadf194450149b7b755b0bd6dc8ad8d503c91c5dc2030536a97f2ca33b52e3962e809a278447c7624df0bffc4995df6f9a4d27afd752ed4d1eafa36feb4e70904dd00c638219b6a4ba15184592981a31355701aba32ba1632c95824e645f6a2bc09e5e91687fc507f48d965493a6f4ee4e00061ad1dd89d801a52d4337dffa86d81b3b55532c992481d6deb71692d617253b9667f7681e2c44562c0548531266713fac560f7c421771d2368d8137228e888287250bb8070d0d916039ef7382b48bf12d101d5f7428a95000849c47b9c52a5fe7b17f28a85a470906303c7d6775718b7da863deb23ca2731ed133e11c1cc407e71e42b90c5eaf9e86c21dbb9c546200de74a35c08fccbe193e0f3733355c968b8544cd744246afd6a7e262463bc618225e73c93359a417d286cfead6f67924c537ab5389ab2bb12f2d387524213dcecbf932bc78dffa618ce1715abe947e3e6fa7c68a8e9682da0158985423d119f2b7a9c3a7c9858a03514fc54204db60770bf1a4effcf579931b0e0c89db4ae5ae2c2927a699385799bf56c6fa957769271e003fbbfa2e8d7d22a4c1cd9a54cc6d0664b9474111192f7275e46538790ecee7642eb588f9fec5c11b672bda36153ffa99f1101354ad97b5a52428509d4272cd1cc011816e930b3953db1dfc388b5351e28be2059b161020e396db0716a6176e7de5257aadb9d5516e379fca87dcc527c5276c87d8dab593b569b8b95872995204197cdf7b4c59a96079cf7746d58dc3b348e8b6d345756f47ba545445a6499e4650c3aeb7769ca91ccd2f062f00fb038917d56aa85ef946331aa8eab8ee64ea781ab923617ddb9559a2a527bad3b56c2f15141be273e861c826dfc901ccd3dff489730d2f19cd00a512466f34069c2ad3eab1278a636401f0047abd180bf0369be717566b52d6a8c2ff92f24defee936171e45c36446303179f1daa7eb52a32a062057b2d6099d1a83d8aa072c9645e10e9fa217fbccd04a44cfc9962e7f05fd3e60f114b33930d20a5ca33fbbc5b9b7f4337e8efe55e202237b5260431ec52c81f143af86c1ff1530e4b3731a5344604ff1c73a89deb3ad3ff94fd0c959e43f6220724e60b5a9abe7f89766a2b31961ca7fcede0177bc2314b85da60b1880bebe7d7a718517cc8186bc57608e43c67355208743c6610af03a5a5d4551cd424871636a46394fa97cc29cabd4c76ad4e34a4bef25f8b4d6e147f1e495afe552ea023c415338ab541b64715df6325de4dcda795944de432c3de4a0337e9c18c5fc778e35bd61778c648a3197b34cb93cb9b3e92549bb4b0947f83b8fbd5414f133eb504f7b0ece878175571ffc8833af676900a90ff565aaf934effdc7121da641c9fc9f871fba19a61bf6cf26c13e3478c61706fbcfd149ca979d141d8df2f0b1ac54bf4c55fc1bfb732817429bbe92858fd1b3a1241008f6b2b0818b6d7929d3efa620bebea902f41e42b15bd92b019627b0715fa39c2d0c987ecca6feb02800497571570b66d1f1a8c6cf194f502d1fdb99117a1cdd1451fbaaf99b1ffec54f6fd094da18b31d13945c49d6dbd912dab0a21331a82af1d05ab76b1649298e4da7b6b6566c6d630ed7e69be090d463da19560d182651ceab3d34212cc5f77cfbe5204395b2737305dc99d085d2c41e10ead3c2660f56954fbacac518920cf1c867a18aeceb9ab689901acba3e46cdeb12bf85b75d1cd7d8afe2290d8d01c6cc2623b08c28dd028efd707cd4544bbea4e1910921f6afb15f949ce4884c07798180dbf35aa47b0fa676066db982929f7a299483ff91baa913af85642f433564d5233d33430b9347b9bce9a8a459d430b3f1dfda9aa83b51734976d35fa4dc80869693e5d62b7a61733e41f738a30676e11f46281b40a14dd2ecd7a0d8c59d135f5847d505f7ee284ad6e867703b287097b0045bfd47bb8f6638eb16b7620175471b05dcbbbc6b36dcf90c39f21427ddbd790e1f995c7f5e4441376fc1eb59e63ab7c758536c5ecabec89d74fdb9f7aa3ef796977bf20be24367cf74380d5e489050d92cb1f6de83816f4597458fc663fef07218c2706fbe9a8c5db5db202414053c6d2a4ece569491ea0457722ae92d270faeaac4561fdd6f21450ee11bf800b708f8331e554417fdcd169058a7a5dc9c3481383cdcb0cb12d11a5cd024a236e52a30c97818d53cc4e184e55237da130b308befbf79ab37ca49bcae8975786e241bbbf169e7d5542a85178420923285e972d569d2ae16947f45963dce64e1273445df0c1c2583fe3d7d8ab2a0a4ad56caaa1b7b6b7a9800769c5d4963d3890b173ba277661a280f175c6b0e8c556960a01ec40a95b6baf31b41e6e43ff3d741486702aba46f781d54a7f9044eaa9555091dd6a7ea42fbe80a4c238688b6179673832f70f2cf72e9b52fd3169d7b9ca23530968d4e036bfe0c0c659ca782e8ac601722e9bdc2ff712c93108d89907970de2ce5a6857046bcb845f37b55b240de34a01976d19b7490329164054102538e10b40bffdd38b079f6ed7189f173c07f7bf46c4809d2977b514a6acecc3612341c8770ba809d11111ec832e443cf7a0c05d9f530583b67d762b8b90f465a5791ebd5d87820a53cf995c18e9719a34b2f5132eda7b4a27bfb9b0544e3a00bfd1ea959585e72e6c9007356db8a88f99d341d3c9a5ed274406c1ed31a25b58122ecfba1b75c9910efe07faa8f0277383002b4b042ade956396c40e93677a4ac5fd1a00226b5a757ae6784a85f9fbc940482eea9892c2e6b23ac223692e1b773c2cc2c3283fc25112414b98d860fe57a640170672f719f08d28fe4ac3bfaf21f204dc7396efb17d38d3bc45eb483af4c3fda61111f284204eb5304ac453ddd7e70867164dbbc7f8aca5a721f82136e50b48d818af58f75029b7e1fa38d48dd1757b2be1243a6cfe790225a48b729709e8576945bc4e58d28cec851a46e415c60c15128a1cba3944f4294991fad677628683e055262c64a1f09806b03f8026c3da52a2ecafa30c5ab183a01427b0d63a8f81b29de3e41157d1160496fde51903fa823e8bb7231e1fdff59ea6b48f4a13833a439646a8a5d8ab8947a15a9267b4dab701c4ec80cb7825e252810ae2792ec6f7c9ce4e1a75391d2820cb5315caffdb27e5435647c58dbf5ee5f87a54bb99a261719607410274d07ac4f3d4cd39ba0c514a632a66726eb003fbc64c373fffe70fb0976a9f4ca8db382893274098448a7512db78b0f04af7dfc460502442d64fb9307a348a67258632569a9286da78d43d5f32925e8529be21d821ef4d1257e4f6c030dc8fc1bf6b7858d2ba4f976d2499faa2fe6cf7b70d1ecadf69c36a24709871b26e9ec1c851f5b1fa2d58c07a7127aaac66f2f149f486ddb2d909aeaede6ca5ab04634d22844105d416571c8836c5b4d5b0e16bbb6305fd45010a6e7eb42056088a2fec4d7124192c80d60a7da27bd9a2442fb3f039ca03533830c6e1813eddd123e8f909aaf413da50f198f040d0173c27303388cb67816cb2e272be69cd4961dca43d97a8b37a26c1d182a1f5c21cd5b4d3212e496a382aedafc082d99c55f9a893fb563e9301c55279992291ea308fc1d20342e08a89dc03623ff8e750bb5f202a0081535b03a1628303a541c60b6ec5bfa7c7c7bab35522f7cedb849c4d18cb47a77749095de148b296ae2dad41223c499fac67aee4059d8b91e78fb36a37da3c4819b51914f6964cd9348788aa0d9a84b86f3e40d69bf5c2dd88898b6a101d80e5892736bc0f42454574adcfe23d408e5b0e5a53aa96c308fff1c678f018c539489a7fbd57bda211a3d6c6805498df163f704498935f04873bafed30b40ce38e786d3718e85061f47dfb93011d10a8e1fdfa7e76bcb98683092e7f0f57ea6a7330ff48822b2d6b5776f32864e243462a953d0d95513011daf4ef1fcf69ac38e143d2cfd61b43f85f0a876902780b3f150a664d63ab72b27b3321718c0465e7395b5faaaadd3b660cf041aedc9bafbe8caf8de5488da00b86dc9fc4e328254e78732c18b22a1c262e0f4c7bd020e4a1173efa8e17e2d5e0a0f95d54510987b65bb3bce126663dd966423cd4341086156998707244a0370045a3b66cf5a1f49ff2742f74649a2c1d17e77b542b288f296d3288a08f742f122be203719f51a4e8473d1c9457c6539eb38caf6c6bb46fdc315530ba2fabb4e5954d02e27364e07a44b5115b1cd89546ed6ce8e2f8cd6ccc3a07b0b46852a9fd7f3886595ff819ffba343239e8dddb324ecd2b0b5df7257a2b83d5e0ec256951facf824674c89e4cfbebd1c53814b026c640949f8be14688ddf3c24a7c7e51bb4d3cf864b9a5d73afd4717fe821d27d4f0a9d34e233fd6d9fb4cd20d10b1eeb75bba25608bdc20a70e5c5ca77bc2128dbe570776c22074feeb8d87be106e5ddf8a69ac0c6a5c23fabdf1d214a01259f6533915d4381b608b511cb05d808777f6e7981e2e85d62747680e2b21f6b6172ce63d3bb1d76cf2b92ef95d926c524a4d518453dc1aad2ec02c2adbd20f9c11f950645a859eb9204a8a49e1329f4315e5d01618e7bb4909362c92623033842495c956330b6283d36c2301b79431fb81db48e00ad2282dd79b097cff473c44acaf74007dfe5633b299149da32254fa063e641f1d3c4f7af1fd0d680785cbac6ac9c5a22992643f6aac58ff362143d9e82590c947861449fe0ca2b04630d210ab12dc080bcd4d1c6570bde6025517b5a0ced9f4aaa1c31e07bb750d8a9ccdff6bf6a083a9a76794bc52ce5bfebb5cba6181b17accec5312a2c357f9d8eedbab0a62a5e6e588acd8e67cfc5c69d8769f663314db7ea9e939618b6e01fa05bb490d1ff44ce05bfc8e3c96f0bcbb386fb1358d73aa3687267184f75a4d819c9119d226844226d1c1f1f2c05f501b98efffb9ad5a1bf8dd35b62995f4447880810360061fb2ef252cbdf136e2b21198be9c2915e537e1f5fbaf1a0cc45e642d64884f6f21bbdd6f50667116a4dab3595c75152c2bc5e6ac4658ea46498d1a75fe62646cd0f50c86e043183363a25da7014871f3d94b512ed41160bedc57ff19d90e3d97744990e1acd256f284c9f3fd07809b4d64a05f957a278d80159cd84e314dbd59c7f2823e4b80a42a576daa7a3daed959bf01f8da0a7217495324bd7607ead27f7e1d2b6ac67ec4cdf58564a672711276b49975284fb175b444993216550869baca5bbf2a2b364e96d4e969072918650514304e45e006dc8b6d34b75eb73641b7c638977a211d3a798c4086aceab932d974e8e0462a9fae3d9d2d025f4cf9e2b0a48104ec914286da6f2b81412e5ad15a2efe8f9935e7b7ab4acedab20dfd0a2f463abe6ef62a1df6685cfc583b7bc3f515ef1a1833336000881e6e96344d3ae249a9b36e23c80a1b0cc777b0299262f48465b9b613ab70d5c8c1634fb664bdae40870ca0e5b97a8b33825296c6503ce25a73f618299a9d97d47c79335dbb521442ad8efec491ad10d9e257af69f0ab6be14a8200d5821f5a1eb078d65567c63aac73177bcf9a751485b339c4675e62a42ea6d7287cc1e1d79caaf34c3885e85be0470f924d435b2fd27d811fb5168873f52977bf360e09574df42a086f21ffce086d9d24ee9f4948ddd440802c52e67309c077f7cfb1ca37619e31eb1b65271073c59c279500a01759dfd0c111030d80707939f0d7b4f68eba423620462cefcc76683ce3ced39d76459a40bce25fccc499f5f0e4a60bdb21cbcf218b6e4bb790c5f90be32c88de4ba34a9c05446fdd5edf3c2664247f5d0d1b157f88f89222b75bdf43030814c8c169714bd2d46235847a3a6d9e7ee2a98598133c4e1bff62d33d95c72f59d3e0eaece33d44132f94dc3b0f7eb0eb86b36c3b5c699fda4f99a191d480b409c1a1d5512389566daed374bbe08ed9e7d59f02d3192d51fca62d2f8acecbf02fd591755a640b5158e73b11e53aa28623667fcc15733ca1b2ee8225335bf7eb4f3cc46e425df4eeef0d05b187d10c2e8ab246dbf581ae552cc4048d3fe93c0bbc6827934675e70c93c4a07d33f10716842a48ad56467fb4f68a996edfd9ead5321b83501dcb8d32f91a0a865ed730ca6df646a802979dd7c55b3370f2a867aab6692de5f894e435275f2cf9714bd1b5c61657236b45be088b39ffb1688b5996ec8e45e7f72726bc4c7a50c704bf655455b3ac69d550d6eb509802dd15e169773cffd682652217eda0b1ab437d01160fc6d90d75f80099728ac7d570ae41de71118109aa45bfd03ee07f67998bc8b8d764c5df7e6de4502e2002e94fa204ff2a7b4db8f3e1899fcb20ab5d4900bebdb219188c29929745b140debfd24850f03fd01e1deceae48c807416dbf4ada92f1dc1faaa38f5c05f434a3b34ff628c98674006230fd01f9f4c9337ce8ef887667498c454389f090032343def1fd91b2e717b2f53d2c7941df1a34635a0e3d6bc70c0bf86f9814a829bba141ee4b6e38b4f4d99a0206f2348584d355f53a210c1d7a995be474c2ba2ee771a10d39a2685c609f3de1b0123a5c480bde017f0c36b2574fa1130afb08bf40a95ab914efadba3a969822aaa10634b4c6a4cfca00247ddf12f84fab42846a3b78f7062dc4b5dd2ef380f84b5e5032f37c2653e8093f0aec80804a65e9589ebcda85a6cc400deef61988f17dc03a97efc628dd620e3307ea6b057d7ab1ce5e8f9cfdd7ea5b2c43e834937b66381d8eafdc8783a81d95420e273b04e0961fbf9fe6eb9fe4510a981877fedf5d242491e1f62421d601a9ab2ae360bdc8d9f6c9e7160e170922dc0346f41c7c3a823457c4cfb8a30ae0d3e608f34e1a1696d2ce1053b80123a8422891a043b380314ac4abaf4a038f1bdea503c47dc6111f1fee48218119affc4f53504751b3fdb8be48effb59c5cc5fee26813554e0a9ae04390a4556218a6e3f9de34ca9601ef94cdac7f84234455f445d23b83f853b3f7ecee009a70b668c943173b07f433b7713e876c0d73d59b85398d490e2b1faead81c47b633d14d5eb03b66fd5a67356fc92499d8ea93d403b86f56626d97cd024d42ce0cde22161aa805e7e181bccc498d118c349e6331e4932a2939966f124899a5bb9a057128bca85dc22f40dc7e635e91f68973aad8b25568af364e27012318162d1b1129c4f5697a306519ced4d947c50ebc7b520d721c007bf0f961863422442dcc4f4ab8c871a038b5d4dbf8b6efc1efd0f14e599d844209fa0a705b04b926e65a93287a5f8ed8005f9658eafe23a747a0a0aefe49deb985cf7590752ce57d04dfbf3f9c151074ba91e67ced0b71ecbb2597d579f0b2fc01ef08c308f0788faceadb5ff00dd527e27ac6eec3167ad4fec8d588ecfa166a5f179fdacfda1ab069c144858b3e27374ae5bb50b398f7d68b44e03b7f212786c5d46ccd619f761d65c5a724b1c4d5020d22241d04a46a05fa98ef05313e0d23a1bb4d6b571079d7f68c49e8e3d0f44c70a9114ca7ce48bdf40e6d9fef4ce0108c666388dc8dab660a258864998c14cf17500fc12ae333b938230fa281c6bc65c128ca82dcb29f7c83933ec770d43d6c52f002e77630afdfdb5a9d14a4ce1d908ebec03e2a8e683d73c53971d5e8adf318639003c1a12cb5f8219ffe50e52ca0e3bdb351fc9802ae8d9e3a0fff517bf5a17c36563c4eb9b44d1d155602605a05868bccf3c4af14d770e8902ed8c2c3ff4c87a412924fa65fbbe78d39da0aefc5a5a3242f04c7ef3c1e5dbfb42ea12205574ed724234c3aef17c20d7686bd8042ef9952043da6890eb519abd98f2f4c7d64023f24c266a5d53fc8c864edb75c890938cbfa09699ff3c2bf7dd53e1fac0f1fa7ba51461c0f293612011993ad59419c1764610c9fc7972b03b9c9ba2469aec4696bba17b3f76d162d0d357d0dbb3ab75c588953dfbb49ba013c049e4ca9053254fc669715084e1b33e0a75fb728076381c02f28f430214406e96add4d50b1aab87788e56d3ee40f1877c193ad4695a90b5ac62e1a37f92019ab20ff41d6bd9aed7084fa8335cb702d0c94843aff9274e0be88b841f85f332c381bdc1514b63ba10672fda5c116f44cfa2b46c9f04f882f529780a628a764e0d97e84ffb43dc98779bd89cc7f00646cde95de1c130c63bd84be13542c95293f2e9dbf61d5c9752bfb3a9183aa89467c105677e1e523377f82687ef7247f62f845a1075954b5e87434d3751d9a0cc0e5a510a6626d2ad7c3ff6f0c2432f82a58a65ef188e12f622ab9ff84a54a370f0d9af08735f86b94c36b0a2bd694b485a3d606baa6873718fe818cc2a8357a398918e4b8e8cf68701ef9499929cad05b69c3d50382fa5eb7476a3b74ee16b0bdda25fbabcaace0c0f6107a449fae4223d977fa47470a7552fcc33c34f4ab5210735f57478e7cad2316612cb43a5c79cb2733386db639a1de7eba8d925542c8492b38ae1c4394eaa45769b29b6544d6c3d8970b915ab6371ec87bbfcf64623cdfe5e4cbb885466d4e566ed3f43dff1818f98a00ca5f258127b6380bc068d91e4d7e5fcc43cf5ed8585e126c71785f8a68e1a2d0ef79330b46048587899a8468fbcce1738acb3258ffd6a9760073a5512be2bfc21b6f8015b417ab528ed1550a087b066b9b4c7ea2761987b984419af1489ae7de2db862c1927bdf4993379b63cea39342ebcc20c2f0792c54655653e7e4838f7fb6583ccb594acf490e289b8418a260f721a64c3e608bfca588eb5f838c66ab157af79cc781d97c55eb56da10af623944698a32cb20c63a390d52c763642f4444f32a2fd68a17b30ddd35af70e2dbd4a365a2e8e35835af5d3e25e58094882007d537840070e0a69b881253a678d5ee9b79919d41143ffd64abc310b114d635dedc4c08a960120b63b73bb517be5dda3c8fd25c722baea6ee9732ff92550ea737719e73294c89291b7394134818b9afab8322a45696210430f16ca68ddc34f5ecdbbf72d0bedb1bfc8672e5f42f0d007cee40d9fcbf4c0c90f34e4ad004ea991bb0f4a5e9594821407f734acf1d40ba11ae3f1b3611afabea10b423613f275a3a5a4a19debf8d00e934360227df02a44fe88160c70b3399213c445c687e7bbfccba5e45f3ca08212972d4d8e75b9ebc53888451ea10d7f0d0d83fd263ecf679c04679ea9bc27ccf781222075e893e3fcb3b53ee4d2b5a9302bda7eb65b4e1257a137633fab1630377aed09a2752eeb0519d102fd96f1f654bd75d10aae4d496e27c438e092dc728c0362413bd3829fff6d8db32ff3673409aca36e5c44a0738b44659fee906fa81a60cec03597c2e9938571ce79748f1c2b547280d4edb3d01e5ccf5f83be6ed6fb2694c024991cd1bd2206754aa4a8341a8efd32dc7ed6232a1b8abb0b07708eceebedaa9ec4b30fa4b485d816106cc174bedc6ef5ea4b2b51831c4ddfa54202740e4744fd31bade70aa1d13d9eade690256915845d0db64843e4a6d200acbba20e3ac195c6823df89f7446532478f7c530b402a6f8b28a737a99ea1cd49448a666d05dbd032af04300954e555c65cd0d13edb968795f483233f3e8252da906b2448cd1118018740a9f073aeb3ef9793d7497202a222a69e61ed2927939863e367cee95e9596ba9e01beed99bb6e42cbb9931b6d56aa3299da7536243305de8c1f9d724d1b011f83323a286054f6be58a0945ce12b1269c734f803f9aae61a21536d597060f7649a2c7a43094a7c018c4b5c4518181a986f4989a8099206f9ca1937017e2b2896a81afa5f32dade88326d22b996159e30f1fd13ef840361d136b8e250e4ab159dd3b882ca7a1b61a160ac195461f468d3a28904df195048c764f3f0f99ba820e084c2e9ece3808292488b2d5eb968c215553225773802c9f23985e6b7d4222b9716ce9645ff8f792843f5201edc246aa4d67332be3de33d3b5f5b6766c067fbcc99d3e7acf01847d67c9fbbac13a1fffe93ce42f9aab6bf14e85fb703a9b23cf1c0fc438857f4c30eaa082a4c13d10a5cb203f757490c2d07850340dd8a609944f73808ae7659300f78890f38966fbbd0b680806d55b305f4b2f1d7d23fb7b43a53d7dfc43d736fde1094237386dc3ee5cef477fa4822194e349eb207e9f21d0704fd0f0ec4768de1ca0bf2e87c0c0a6a8e49c718ec5140d305ee67dc9d66b20bccbbc87ba6b599c545965e1d7e76077a03e62d632af07ee7c68dca9df8c522477f429a38c3816b6cbbdcb517916d052b5bf82e1790c6a65cf983c51c4736956cbd328db5958752becdbdd55ff788a13097a1f1e04c8df84d18c9825d5a961699fb978a15005fd64319da5d4c8271f5b0432c314dc8d1cf3e281f9704357feb143d49ed23047c1268b1d83a58bb4964110618ae691ab9594f280681e02d4aa3e9750ba9046bfbee7ded1aab968701728c4bca832b70da360a3e869a1164d62dd0c3d7d3ae067683e02f0f8d55496f4b5adecfad012b07d95c0e19fa050afe5ca47da67bda3fec636b21697c6758e4b96145cccdb9d674d94c9e24944907838034448a848157540ff943a8bb0c008e6a17279b6916dd71dbffba44349dfae2c72a37cbcae9367fc376fca3a087ecf60d44890445f60c763f3da55c504d0859d5a0d34125f3cf695723f5c60a70154ed3ca4611faae9e9aa599b44e7f21bff74f43dc4d09c79557e86412ebcefb90a0baf48ee21a7d1a5c16d1093e6eb413018c1547be482fd37c737ec187f2458cd8563f0af1e6c355815473fffb309a2ba662a36f9e63160780a60019b65f7b8c740fb99af2b208f221d09e86aaae413bbe06c7ae051835be2117968172e7c2149a8b995c254beed23c8526cf21b2949cb88a28ef13c1ac5eb970bc2bf3a63b1d16ab4119e9cdc11ceb71e27ae8a412b307a9430c73642ba829acb5de210be2814c660337dcb3ee74a9eb6907e1bb6184bcba3a8f33e074e4693e24f60a039999766605afac55e8c0f008e2242f69b1374eb6bf91145a46b73c9e64f00410140b4143d8aa961113d177a30960ef91f597f4be588bd38d98fe2629bc2eb7b52c78db88a54351ea2c3b7c4850f39163d550ddbff2309062a6f2ac26874b06c1cc8a804c5c83e5de33e0c8ac9c247c73cce13cf3308349a4c8e6f641b10bf0ca14f420c8c2859ecdbd0b50b25a414dc9174f005d1cc381a1bb17b8b4432ee0b41699f25258936508429dd5325980a2651af062ac57371c17c819bc4af121d7111995c717158d6fb2670402fb8e3cd777a28ae5c5451dfba31bc6ed3fe40512ec696aa2113fd046b2efc1d86808502ddc6cb77db027f1c4f2f7773de9fbf71678051a11b5f44e75eb40270c0a6ff60ff3ecc5f02418d20e7927ca7335055032f342650bd932ca3499741b3341beaf11f4d24afa1e4ab9710b1329e5619926b8b9b1d5039fd21429714d7f7d503ec6678410965e0e9bea8e8a1f5a40803ef4a3681a2ec8a38a6f70e9a72cb7bda69f2cbb1cb750f12e506dbc99a6d1a65fd7739064c73b67b2def72009c0e31acbcffd6892316a32ae8200aa3d81479918f39620a1ec680f3f76462589d2b4d5d427b741b4c4815a6629948daf14a41c521e6d8645b14e6fb49a9df4b23a55dd2b3f9110c7d41f321854954ac5b0644948c7adcbec2864073bdec990c7c7b9fff68ee2838feb7af69ceb44861927a7f18d448de50a75249de67d866e2aa4ad5a6dde0f7a5bac6185bc4af34c8e7d798955d6c8abef3c254a1cf2aa5f5ec80cf45328ec5ae091a785bea8152d34ff5c5a7eb36324a4aeb1cfa66068a56a78ad63715e8b38ae481c9aac6f55d59a65dbf0c00a66861f531a686109121c42d5e2d6df5802ad11e48027981e3108bbbf07bdabc82dcacc9700fc3348610aa47d72f285520dc946043561e2bb7c913a96f605b0a4784933c29210bd22f14fae0014c95d1740c2e07019c587ec6de426aa4cb73c6ebcd19bb7cf68fbe905909cdc741d1d09c28e85de4bccaa1c83e6ce0eb42190ad11e097ffdfe8b610a3e20079884a67c31b8a15189b8672e4266e90d7ae54adb32b0658e64389924aee7e531f79f35dd427ec9098976e4e477273393686a01b733418bcbaa542377301d5d51f02436910085f0ab17f17e302b4767f2741624d44adfe60652f20c6e963ff2fee53cd74a4035678ec4709ece31fccb5ece0f6c19d22a700a068f6736fa3a7fdfd53fea7115c39601f710049c6f3799b32d28911d1a616411a4782810042818499ad5143ae60cbffb532b47360e8135ed18acd6e79478ddc1e6d148fec5660b32ed6009661175beb51fad97149e8c6daa4bb6180f3763c7e90520ae60b7ace399d9c19033845c01b8fd2e47fd3e4709e237b922da665e04832bf1c00e187d560435e42574dc657239b43894b6678fb554b36cde27e3799e8ed7c04e3e26608afa5fe3d370ed2c96c6291e262471c8bfe7ad4552bbc22f8c375b8350c57b41efc76dcf753cac36aa246f34fdb7d9b325b31b1aae85e25d3c6c3abb4231fd4013adf3f53798e0ba7edfed06204a85ecec12e3c0d393819681b409acb33f8b4bc01f05132ef1934126e21f0835bfc65054447875d035be46cb087f1fa5e168553244a8f0dc29981182d0f7a5380906496964a1f3f38ed16bffd89e371552efa5d2d155a98fed6847b1a6154bdbd031b883206b3495775865db55b9c267eb9cac3d08150d116716c063896356a0ad3f8faa44615fda765fc509dc209430c4585fdbc2e048cf6bc3fbd94eca7eafdc933963a4548ca927bbce7b30292f03ec64c90ce4afab44e42d5155d66cc096fc0053ec076f818d9769c1480ea1a86dd1533ebb9a63690c0cf6f776ea5cef020b9f68ce0bd8bfc68e7bc5c1080ce3c533f3899aff656b9224be1d4a4d09b4d56aa1a0ff03a58ca352e34e765f60d5614301fed00eae041b170ed94488d51bf462b983d031c87277117667b44f01ae5792997ebe2b615cd87880837c1027354c713f5a78ab06fc3aabb5a08a7b4d427849fbb12c96b3b74b6526fbbed5eddaca79deb8d7268984d8918c2ad2a9a190cb0dde6748adbb24fc13dae7f64bf07d552f3191fdb13fb571d2410aaef180689e8b4631f19d54f661f71661f9d8f69e9378fc17354fa678b6ed8688d587e49cc1aa7fd06ca2cb00714902dc5c632aeaa3b9820d4fcb744d6a54b8feded609db3624bc670b0e526f98e3255ae63e358fba8248d07a5713dc89fc445df2751436a970c0445c4bf8ea22e6f7225824a06407a29914a0076c767c55b4d115774edbab951e218a07910fb049b22c8a761021b253e51aab4cad3c2db379c01463728bc3a6bd310f96e66c4175f7ef73fc312d6bab6cc35746411f06bf9b27f5e8962673190ae2147c09f4aa8f9f9f9a100f5e80a8a54cdbb8e81ab0df363565fffc4a7de6493383aee1d492e0bd4e2090c246c2a6743c29d63b0a138a33b6a6cd23f883f04641a8e309e196f22347e13c8363b97e514e6105e41eb5161d0fe82f27d6087b3722f5c31397039993b141fb404f1593d0d41c90503c2f1edeeb31213cee98d09926505a97c6c32554727339eff91eca80474af8132d5fb4c5b8a5cadade9f06f30a8c5e645ca98e4af83edaa0a03e8703e85c666f320a69644bd0ff5f101b24636acfa21dc251ec508d4e351518aea28cb76be25623998bb7fa3d20192bd6fa16dec1d803de8b0dd6644ec9d44d62f799a46ed31b4c0d93baceec4bb33720b7e50ca78a238cb132ba03c5004de4925265d6b00af9868f6e74d678efcc85f589abff87fda0a9282199388ee64fb6771838fe81cd298eda983c2858cc92722a24dd72694aa024a10a266595058554d0788dbac6f27869d9f1d7d973499246cc97735d67c66eb72fb205f266f2dc655c326f396b9ad0710e8da19adf81b8408ff00908ca4a953511b8d955e22a9306107e7fbbd08f2ab26e9d7bff6f7965b4a29a54c49ca790692062d063086ac21b1231436a6a652a9d44ffd812359a954aa250fc99a5a33aa232af2f3bb9854eaa7c65c34457f52a0d88082431332d00d271e1b4e28a7130f964fb289fc2ddd9aed96fe966ee9d660f9286ac0b83bba31db1dfd1dddd18dc1f2475c5c27a91f17a99354ea07cbcf5e5c1a4e3c2e4e27a7130f960f62616956c9aa61619534ab64d560f92226b68535b262585823cd1a5923f9588a5a92fa4995a466ea07cbbf565015279e14a792d33cc5d9a59a52a95483e55b2412851dd9986947d18eda8e6c0c966f6113b258533fa99aaa3f2336cbb26c6b5c4bb566d652974a58d61a5a45e29cb18e6a0cada33aaaa3182cff82e875814057639aa23f94a6224dbd15fad378daa9c306531eba486f7d44a245b4fb1c674e404eb106cf8fa556a9e1e747173c16ca83c3e708033c3fc6bc951b7e7e1cb588925a2229c2fcb48a0d64782c7466a60c3e6fe5795a34572b21ab9ed5109d567911e4b1501728e4bc158ea64513853aa16e502820adb2f1e0b1cc9e1e1f98decac9cff797164d93c9634c4898665ac5e4e77b091ecbc4c17113e0f9eef2566858b56892483e241f794b4fabb8d0c2639933335b50bd150da74572b5ca59f1ac84dcb4ca0a233c96e9325d98b0792b2d645a245128138a66b2f8f91d83c7227b7a668067c9cf6f235a244da67631f54b0c9e2466782c1207e70c3f6f4545aa4592a492a4d54cb1f358e4cc4c14f08c352d8aab95cd0a679583e7431af883c7225d600c20bc15142f8aa8124a668e7c0f0af07c78c463893d43b4fcfa6304c6f1029e8f81c712712029081f6f05444acd5f408b22c943320978be8ec71267600cf9cf26abb112f96a7e8eb7d22ff219073c3fd37af07c1b1e4b7441792b54e4a8d9f3f36dc06ccc13aee1c4f359ab41761c0e1c0f961f6f00d94049740685926aa0244aa233583eca8bbc5851975fbd58ada80b965f03876da89e47bd40a17ab07ceee43299269c93693299a669c2c1f2371aae8b499a3327936432497306cb7fcd5ab19a2eda6ac56af5a2856581ead1502b50a81e2c9f86924a224d3825d244224d539a5ca8a0292449ce9448128994a49338e14abac4d54aba60f92628e44844c51e93c64554ec71eca82ce24c4d382693e9da1620382797455ca0884b24c59948f2488aa43893b1e86e91517712fb4acba24be32b72d2e8c4863c6c48772817d593f74096cac39d1cd59ca34e52fec5b6ebe4a20bc6433c90e53ae2c5b84c9a26f3457a2b170a5e8aac3c371a5fdc457a29f22f13b2f81974af938b30958724e854ebbb705053ab644c454381b48a8c8661435ae424aca745a1ffc1f26f7749472979a2878d01cbc7542fd435a4de4991cb415477f273d8604e87e4dbad71e554a1ada443f29de4a293ce19094b6c0bef6160e0b95e5a74537e91ae94c47a3a245f6243b09c1c86a9300885d23908b7316c0c5150bac3d11864832495bd9702fffa4b69089d6043039d06dc247406ee7db03b141c16b8170471f803c11cc7707471060f0e88dd80183e8c09b9fa52ded348998e00dfa3d0f83d346cce211c818c10fc88809f8d4c09df9b840ca2aa65c2ed5fe14ffc3142e605c715be49a830dde920b35e2c1817cd8f375ef2104ec41e536f2a4e8bac52bd6995586f5ca6dee07eabe4229f7119ab847291cf38109dc8b98ccb58262e1421cbdd15aa70dfeffb7d7ffa170b197c7fead4a953a7f4ba763ea4269809c6ede8b0f7774e2f4a2fa5d6bbbe8421e3ad584f2d6a01e17f21b4acf7bfd65b5c07a3e3dc9fc409d97cf9506808ae5085ebe1f5f07af858c83e47ad59a64dd108091332f9cf0a59eef0341179116e4787ff7ee7a25a2b7caf8ea074673ffe84f132de4afffc1b003c39936e20e05f26f75b07fc8b33b9dc8e0edfbf5c77afb5751b17fb913841dae0bac7ebc6e3e8fe44f33d27fe75846d840b6d681073f2008410d60a657b2ff1025b9a443f004ff01b514bb574e564d9c74b552470f67171419ee40d963ed2469e601150c618e50d3441d3d37122b4ccf7b3e5f2a11de1f508b6dc94e5856e99d2e905f07cee438bde2dfe93025348c4f31f90c3f1fc530d19331a4f09f1fc6be2c9cd397d68f4127249d0f082b07f7f2ba58d598fd50e6b083b17816186f872d7635b8ed626df5f727b6f5df0c127e173917e6859d7b2721198da4ab7f816a5f13d2b52cb523a37932ee2823507a607303d90a1a24a64fe108e3c5402f2b8185a29b0b0aa841255090c034128820245a64466e18c834a6038b2a77f2566037e77dd7b2b05221cb8c1d6f7e0d8ad5102881234aacb830cd2d0d0c8c8e09c7101cc0e4c1f7f9f5fef988dfb97f68310d28019a0c165ebafbfd0b99c0305fc11f8d9bf071f9402c3177921f8d8bfad62ca5dee9bf528b68c03c67e64cb8fb1cfb6ac61ec415bce30f6225bae18d3b9b813cd070dfcb86e0112aa60046fe5611597cf353c047c35e0212007443ea03bd9bda63d2b64f5330ccec4723b3adcfd4b29a5d3bc18d2da4e7e7752eb4ebea4d9fc9fbfd3f8cb5aa5db3791d62ea03bf930baee648a97b544768a92ec35a594524a29c56c2481524ae99d0e7bc649bf8b7fd592ec44cb0fe306c4dae5ff6c92f0c1b98b40cdb44ec6cdffbb7bee4588f4c848082729a59c52ce296510a594327a8c1f657c8f31c6bf43c8628c31ca18a58ca517fc6c9270799de1dc20ce3509157e3649a47063f03d0b431418b6c0f09f7cf856ec0bc9973fdf4d5d22933fa28c08cc782b289c9c2f5d063a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3ad7e1088667b82f3ec4c99e4d0d74f0b3a9010ad76789706b8dcc46c321f1d8196328c3ebe0dbd3100cdfcf205d5c0462c07e9030f265d55d8e27bfac110c0bfb9744960a63f8671b997849781dfc1a6d308c4c883c6188503802869f2d19e3c9054f44c3019f230d1af039e680019fe30f16f0289e88023c3ec70e28e0731c01109fe3113f7c8e30b849823c116cd9f1d9a59080cf7e051d9f9d0b393ae3c11341138ecf1e841b9f7d091b9f1d0908783779099e08ea1ce0b3a7c087cfee02fcd969d0438b68e1897a6480cffd85027c6e3210e0b377a046838cf0442dc3f2b995b0f2b9830ce0734b81465fdfdf3178a246893eb70d543e370f78f8dc4198d198199ea87d04f0b941b0c3e72e41003e770a64fcce1379c943fe313e432a00e05360fced3ec39cd067a8841c3e4323e8f0f0074fe4371e7294cfd064c36768831b3ec318e0f0f08827f215e9add81a3e4317ee3304c1f6f999e18501f763e0f9c93f2ae0b7f3a25fc713c59387decafcfe1c6f85bec9e767d3e2330170b3f8cc03ee145cf28f0556f17904b7c5fd363c515479c8a3c8360daf0ee0726d803380060d6c4f3cb85c15c0e50c08ee072ebfc0166607976b02b89ce968b130d83f07975fac7070b9dee07266c3b4c2fe08e0f20baf3707e072f581cb19863afe3d409d918b6ac9005cae05e0724680518d918c8ba80f0b97eb0a97b301c8f8607f1a5c7e81294ac4e5aac2e58c07140afbcff0711195110097eb0e5cce02c0c9607f195c7ee1741483cb15005cce524afe306ea6c943fe3a70b9e6c0e52cc4656dea60ffce6f2a0e5caed90d5cce6ce0fc51b8fc62b6c4938b64aa062ebfe0b8ac6d300ff382cb95062e672ee2e9249eb07f54b948d258958b24c943fe265c7ea1b5e0b296b1e072e6afc5ba82cb3553c1bd28e1f20b9c2d0a1c5ecb624c8c7929f034051dd48d8f0fc9d618c5d6f86616060826195bcac9792970654d605becc8c7647a29b071769385940eca5ddce5a5c05a1a028d4946a57a298d2f9fba824aaa2d756463f352505e50a574bad4a597021b5b324c9c684c3f3f978e280c280c25d1161d9dadb1b535be55670c2b550a08106b62c2cd89069220a9f19db36526314b1366927a7ca4cee0b352e57829b0f1dc1adf480305d4cd29a358d54bf1972417592dbc905b2d3bb03a204306ecfe0528e0b835b6aa0b0553fcfec659ec09c6f0d65a45eb8691ab188fd8cdbd189f90f55b1576abf2b7276b84ddfaace0674b04192fe5ad34865f0afc5cc878dd3736c91332f85986c5003881204d38a1892041820409122448902041820469a289269ac8c9c9c9c9c9c9c9c9c9c9c969a289269a48d160854157ad99e6ee0b403def7e9cfb505ef31b50608cf8dd97d6655fb377f9ebe443811f5f4a94ab6750b8bf55b4589fc82004f22e1359f6c1a3b9d71dd7c34447fdfe3a25d72d21775136d61b8913ddde2ff7a164100acb7bbd0e347864e464af549251a4c84bed514e5aad752f4c04949df04541529242c50a8d450b93131734bcf8ab07d311c222db45376c85a9fc07bc8e7831b0215d32e2073221bb2ac75d74bb68ba93afc3765ddb457ae9d00c0d1258c6c85c212dcae1e55f944b87edbab68b84a9b27c91bc9469b888fcdc9a2cfb29d49f93087d632ae7b2c80b964ef2903cdde0375c3a6cd7c843f2e976b5c82ba443f22fd2fdd18664b7a7842f52f65d4d966b3d559b16e9f032f5485d8096f72187974fd244667d4e2287b7fe47c4f9225d3558a2e0704fa7d3e986cbc3b3dd52a954fa5b5353c31d7137c685954aa55227d6cfcf0beb743a9d68b0787858944a25cdaaa931b1462dac182b26854da552a912fbf3b3c29e4ea7930acbc3634ba552a96d4d1deaa7d1d27273b8ae8de2d018fad2216bc8f4993fddd19f61a0253af29beef4349a89ca5418d88dc6599030324696de8a632dab8eebd7164d5594303006fd5aef0b01ba6aa6596bffba6c97f33839aa6c54d97ff661b428aaaab5d78bcb627f3d7671195e6f2f1b4bdef6bc9c603a308e08884bb80cf1f5369e5e8a4d77f406b2c4255e8c9476ca8af052e8e7ee7171ddddddddddddddcd02b3d1776b81f1b0df1a76c3fafb5787cb1fa62f98d6eefe189ba2bab6c07874ed8edd4251b827c56e36fc576c533557ddd13aa4a98ceebb45c374c426c5f01a4f312e88e1689c05fa70d42a465499fe8a841693bd609aa70bb63ecf9999d32d5a3fec460febef7793da656ba926b5d6afa4d8fd8956925519344edacda3e04b771108a6df2f02e98e7e0f1d4901a85b246d31c2449387e8df888297423f1ef162c49819245a5a58a868f93be3f2cd714b09c95b5ac5390de3717db7b44abb9056603baeaaf25ab34cd3a6aa04bb9114492a578489a528134d34322e8f1288c0d3793add6efff1a8df95144977871d301d217a9190ed705ddbebced4324ddadaa549308217838afaa5231238a6559004d3e15caf5a724638efb9bbbf944ee269c9a1231c1f4c7dae30154d5587e83b0dccc3782bf7fdadbbbbfcead2a76ada776ef65c1d96ab3650e1fbf52f0f97f5af9be39a65ff9d35a794d224a5fcf724ce16cb575f4a29df5aa9c383cab9c13961fa3544d0d421fa70266b95ecad3c96872f863205c6c34a095f5a094df7ed67893334419eb728301d97cbd85b1ef2274704c4167de98ebea421781f721069f7af6946e8b79c8433987ead44446c5f0810b6ef7f7ff8a196a0d41f9ec82a57bbd4eb68a8eca63e8d164998190f4343c94e2efaf55fadf347301e75d677fdfc8b83b94645c9e183044407fed8bc957631e5b84f8cb15b86f1a85cf77044407cb9dcdfab91846915dafd533acaf7fd7f446c83e9d3c7301d18a7725d2dd0cf5305bfb71f436498e451fcedd35b29f9dc4b60118c07f64dd32a254f4f6fe561ec1d62e7728f143f04c42ade7fd6ce44402ab6eee955c9f6b6b8c916bc14fa2836c9821783fedde48a4dd278e852d1aecbb8fc0fe2b2a68970aa6caaf27d8c6b95b4301dcd11f1f7da7ad53ddb5542d6f252a884e913a62f59f0565e4dd397745e57d32795d0cf27f4334acb60fa19067d5f496c328df8e4ec7929f47d9b2a15a40fa940ebd367c1626484befb40b10fe37189a0df3d2a86a3723d2eae57dd5dae7b488e90e55661aafa11e38b49d38fa46ec9aaf69d8c964872d18c0ef5d7b0c970b41ccc7377b8e22661b6f82b362372103f04ef4324350f74c7f746449d3d1da24f69b8604a8de87e309d43489ac8329c53657199be3c1c311d902302e2ca51131d1b96947a7c52c4ab09032f70220b52908210a42047383ef6127b291ff6c314f66f26b2db6247f0e8c26c686ebaee9d422657ad6263dbc4969696882a599c0c19f13efce61a4877d7e768d3376fa51b09387e9f300c08f9589ffadf85e9908f59d22ab9597731febbc9600ff8df40ba8b906b9afbae2d6439922229beb428fb1c4fb88764f799916f02f256b01fbc1511d08b6c4280ae2d83b80c5d07620b0302bebc2c4c077c6979ca795ce53daa2b398b43b90885424554cf901f374273f9171caf906557bd28fb888a391d2a65efa28cab35cb34cd7b38aabbf84340ec38ddf90df6792b393235673759f61b14e5c99e4d0d46f8474cb58cbf95f611a7bb1c18bf87741723eaa5c4ab27ebd11f2329bef7b44a0fe82a5f0d71ec2f8cbbb80de28b01013fc3771dc9792a0a59f6924e44e1f839eab48a098ca58ea7554c204cb54a2c754e44b54aff0fd17a32219107b7aa4331b64f36d25a48251a2030e60cc2d20922014b5babfad45ddb08791e2d27c369c1ddd35d7c922664118956c9fea5b7523f7e8c81bf1020f98e0101bffb21f40823a784ea084bddf5b48ae560c49287e2c7eeb52c7abf7caf5ceee23757d2ddfddd65ddc51f11434c6ba101d1ef5c0f3d740f131dfe7ab89cc8f20c0cb919ddc18672f43157cb4430333c65f6227ded8464277b397e3091dc0df945601973b44a44691833ba86b55c942f38ce087bbe3945ac8d31c61863b4911982e3e76895f93f683ea7dda209cd4aac7d0d4fccd6ca09b1019c6ffceee6fc820a5e5d81ef3ff2561ed65cbe0823f780900219977821c466cfe60643f0add7dcb497232b54a460a18d8056a848c1e2adfc1022082cf2d9b2e657ccc69c26d3643ee847e677f8be35ef086844648b18c88e8c8c7c7c8aed181919993fa2bf38693eb6e52270e44ce4532cfe3c49dc2fb34a71bf4bbf2ef9447084a5187936e0474d33cfb95c2197b391c791cb38e00c4717bb6e17b28773d334cdc95bc95ebee6e289a08e297573b236e494cc030a969989e6c75bb12f71788c31466b3711bb6176bbec76ed66d9cddaad626ab7693769ad0f8be2c2fec17091824a1923d88d4b729190dc27a3860d4e0e4f8d4d0d1b9c9c97ee42df695fe588a86968348d89ff8f285f64cd934021b36995ec26c026782ba0972f4fad022177c2d2a64551e47a8d67251b07cb4873ca7294a41c25c9060727dce1678303187c5fbf07a3482e0267d86737024b0701969204e32369f2d15659abba5295c9faaa5081e90861ebaf90e8d29d4c75d7351088c90b598649927ce9914f73fa5e229ec009bc822751f05446208bf3c018f27576804a02cb2c1bb946e6cc326e066792fdfcec7d33c93ebefbbb8aa6b0fc2458bca75c488b58b8689fa3112b64f621a214cf8283a64efb5fa1692a382e5b41f1b9e4fdaf6fd0b4412052c84a8464d03fdb4cfce967fe1d26f912ceb91d1d26e1a04e77f23b1c7f805e88207e7438fb0cb1212206bda7b2cfb28fd9c748b9dcc3644777abf34016f862c497a7f83c11037dfd14d83bc96bcd324dfb8cc3c72dde884270c665149c61d006c230c6bc94fa200cda447c443068c372300cda2ed38541db75978b419ba5b23068b3361683b6daa58a411bfda118b44d9d89419b042231688b9004dadc470ec720cba1bc940ada20be10b43dfc6660d75623cfc052a705cb8e3e58da1b8d637d29dd82c489ec4d89ca1a02324b7842777777bb8b82f050fce7b3f26122732e470c9b87b777109916e91c2288a9b3f2f7ee5b4123fa757c2f1d83a5fc1c9b1b08c1cfe6063638431f9b1b00d1e92e2521bc3a599e71e96bc0e53ff7770879e2c88c1f445c7527dd61927b7344eb0ee52dd5134f70c12299155a87ee7e9f48775b93045abfb63e51adb5d65a7b2deb5a93045abf4f58d55e6badb5d65a6bad15f9eb45402222a06b59b26e10d72a6126b4b05a6dd56fababb7b5d65aeb6d551acbb22cbf9635afbd2cebde6bf9b5acb5d69a24d0fa13d65a6badb5ded69a696f5996655996653db6ac6a5996655996256289589665d53adda37b7477778fd0467c92e9b2ce6aa18cbe8527acb5d6d65adfaad5b2d6dab7d65a925959a8b8332eb8396eb12ccbb2aadd82b52c6bad49e2b5d65a21cbcb60d43abffeacb55a735ab53ec9f67cf0cdb1352debab75777777777777b7d61dbbde3fdbf70be3f25582f1b07f6b96fd77d3b2d656cbddddddddddb2dcddddddddddad3562598f596e79adb5d65a6badb5d65a6b9dd3ba3895cbb7879be6baeebdee088a0cd31ec548bc6e0612c1aceb5a55c2c4b44ab45bb0ac752d5b25c99683f89386654dbf40eac6ec41d81b6cd8fd627cb2bbbaf030bf93462393e11d7e1e63e722b0945c64e23e944c4d985ad67b7cd92ab3d6e7039dc774af31a3bb1ad3e9b74e8bdac743f447a99656510ad32d555717b21ca38f8ba28e87e86b5a4675a411b0fdec3073132208fb12e361edb0deadf71d56a4df13461d175de085fa573acf4785e96865c3c76128bca92d53adb2fd88306e578d1de5cf784e6438648df5657d595fc69b89d393e5e883e9435a7de85f39921dc0d1a755aa633cea4b197d7ee448564a4d4e5cfab70229fa1e7573ca3a5106e38956dc7faf3d510fefad5495883d96fe88efebea2e25bd5cba0be1c6ae12777b5dc6797aa655faab90ac877294a3ef26779defb4cf34a7ffea54d95cff72ada2988eeeebe1b428923a443f7643be471392f1609a731f7b21409fd55a6bc7f339b57d3a44bfcaa85d6b562b8f5af2d797d4da3e2225952281e963d85f5cab301d251c119062f73b3e8c47fffd1efa5e09234b351da27f654c2b64f2b3098933815c03f976712c926e846101c678c477527c89306fe5ed88efb987fd5ab3cc7aeb5aec36b6f16fc4712fcc7edf00099c037e3636f0c135dabfd7757df7bbd7b7f2a7fceba88addef958beb04bbd15c0f5b6fbcb81fd1a5a7a55b685c14afa629699a93a641691a18320299dba854ec18ab82dcb1990100404000f315000030140e0704e2905896a5b9b0f714800c7988525e603e14c8d22489420c016294218000600080000000c088d500a6d182d88046685481b355b5c7a667078778c41d31a9d1e90c089540e71879468606310a642da46f24ebf7617bb8257d3231d62b813aa1a8f91a332aff70b558c5ecff6931fe135b6151a45e19fff34f50abaa263a86c4e93e057d5a688175826220b2ef3c7abdfbf03de9e38fe836f19c12ac2b0dadd654cfdc8991ccb63868bf6b9d72990e39d85467925e781bf92d18f8c043d240779aa2bb7c9b4da9ffe834999001c2233905fce15f220145e04460f7bfd9dd88cfd459cf6af544aa4f3a26c108f57c9fec767046407e8d6fa58b1713695fb11e3440c255b1afd3a7c71bf67799746f2dbd4eac366412390364aac0a2e41223e53140be5272bbf2c2f9ca4776a26b8a96b2be0f936a035ef29f91be043c88949fa36b65f44488851944e8d0a593abefc82f12fc4c17de0db0f90b5cd28a510d94b460198720d758b57c1fa2cd5945cb423b6097159b3f6ad03c67aab77301bb25ad11de46eb6d4a68eeb9f9d33a9908366754da5bd1238a2299b742817c5236f49655c377947c46b5814ec003b8eda7a1abc46a76228d3365c02eac4454d5b1a34260633aaf396a9ec8c1baafda83cb969427a6c3350d53c23714bd85c9e86342e5e829be09d2c9bc48d2737c1da533f3aaa50fb2fdf5980e5e7a497f4619cc3fe238cd9be23d8dfd9a4817d4b1d610b5824507517e7a53d718d5b528a04316ed12398c1d70a6099b29f19266d34d1bedfc5250ab457443d1854e83931939a9442c43c00abef0f6a90fdcc3c6d0b921784f7692d04caf5e1c6ee6e1cecf0543ad79aa474be106f2c819e60024751759918e9c403e8e4ee7d3120351083493c60655a03e1afd8d2beec0eda19142a3968a4d9320dc3d8bd99b2a91dafee080f109823849f606f680fd87d54f24e5e8c25dc3b7ea9cae9aa7e8c810a209c4ac6cafe9cab38252dacb542d0a7684741b3362f74fc8935df3448dae35a2ad8249ab6eed64135cbab7a47cb53a17b228fcd1ed03245e4152535ca2eb03c55dce599be4d1a924c79a9c080f91a20c150bb02ae421778f8d8538c564c62fe9d5a8ec7e72b01a63efce5c835d16489ddd80d57a5b050aeb0f99dcb4642c06902afbd527bd2819771ccf40297ae34aa1d4c822f862478b6760ca1c3b44e44ff9460c4030137284a0fc2c785f7f1fb7b4b653653a84ec2a08d17964a6f19a94a0199434e965e815d961268e4a35108ed8951f936051e0e6b7adfccb1116ac2e4cbe770c7325f0b739cf550a27e049601d309a5a30f3fdc1d2251d43bf0c040433faf9dcd467ca6d1f07db78017a895a5e7bd56da795e8151a27e9a75cbdf348db6969ef82fcda3aeaabb8c9dea34eb970528f59c9daa0a179bb9b90655f76076c8de24d9f4d4ac9367829e3d6535424f9b34171e914d48d1aaeb1bb9f08c6c72a89dddd6e76b9eadcfcd7780db2ecb1a61c7651152231e2032d7765698f652b4abbde4a5f401da333d652daa0c132b8afd92745e8ab75987dbb74c5a47e4c739b9b028e8fb2a79d6c5bb1fd5a7878fd95f5794ebf6fc1874055349a807b3e5bc8db8c0bd67d1a017ecde2dc485db914b72a808730bec99192689cd88be72b754faaf4a0363996c99e71ee65b3a595a780fe6a6aeb04cc5ae58d5b580ee26e509b50d593b18393b41e59b221e17f65a6ac26d0f77862dbb581be181f78b2c725dfeb11b83bbe90d1f6596d45db402620a9dbd3e60bb4ab4e43f672ef87b116e68ae69012e475f0996aea2e1f276414d46eab031135d81c0cd90cdbdc59d05aa8c6c8b406d911ac5ac3e677e2d2c736cc161c0204280c5a437ed86a09f643e2cf2e07864cdf9269b36221d55d91014df7a0625ad5198db751f7d61052932de4d8ee5fb09a2a85ae0fa090b6ece323a16730799d045e034092b167ec39e199492fb7650163479fd0f11c7abf29af925ae65c9e2fabc6f006bb884a439664f40561ab0f9ca9c1b206aa9aa572c28f59fa4089772627c5cdb8095f909c953a900b811fb5d59d84931e2cf6d994c246df4a576c2741a2619485577b4b3183affe0982f28d601a1a38f0af588f0f7404cfc66a672b1659ba41df68573c7dac1a42f4e43d4aef00c26598a63961baa18ab2d0c6e2fdfa9686074d1116bb5ec637a5f4dc6a8b15a8c2b5f2887d44885ab643c94b07c2432aa791c1b7051f66ba176457ee8c6380802590f52e0e3fe4d9130eeacb8608225fc1bdf9d7850c040435970e4da3aee0fde08e4375945f9bfea117a28d209199d5c0aae0ade759d063b4ea9c21aae892a29ed9a799e42094a8c009ad25c3bd9bd528294dc10ae7f918b423f2b40a3232dfa9f9fd432e3506cc87fa6f45a79964c7b3d305e09048c3a9311326a9ed61e224b8ca4c4762f5fa6b1785407e0fab5244ac40d27877240895e7b8711c9733497327591afb5040f58027c1f16ebb24c90dbb9e2143c07801c720201f4dd8ccccb8f164b51bf8601a9f388548276e4179e1c940752bdc41bdabe16a8ab7dc737c6e51dd701e0bd7077277018795b416373c264769e346724ca9ef02d52c03a6d6781eb1543396f7d8704874a82db472cd6131984c89c7774765f6ecac553ad27d92cbdb259d953146e6251895258048f8f47cdc0670d849f23ea9551c6666ed42d638396a7139c5414630a4d1a144eb27db65d06a962382dbaed0a5f942f6b1a05bfc75ac67e865a93f9268924d1c4e621e096ac7ee1e514ed7ce2778a569224bbde8b49b664d508ba9cb415ca04d058d6668a0733f7ebb85a023ad5647cf34ca1c604f61e72bce086f282618840a1db2a4c81e8b3462ff2510259665accfcf3f3f42560e5d6280376f9d9cca04e7d066aa61102e8928ae4bdb618f5409b0c54582fcb92a8a28f0cc3687d7de397101543728236ebef2a1a4b4cfded906b11eda9cc8b60c245d6b3b66379732a28bc7eccbb23248d9768d894679c7eb9a636fc1ec4b4d1cbadc07c8f7ddc3fc726353c8d590057b5e8075b7db710fae422861c4359e144a6dd64e2243a624d189121dae4d4837972a477daec24dc4eedae5faa176298248ae31635e8aa967a547b8e171563bafd67dd1dbe4d748f9fee32046ff69dda9a46bf901f56424b703b096cc2fb83779b7f2ae06633b3ec392a7645176734959858cb14b6341d46c549a6bf7b1e8bed4c82064b15e968a587c79336b36490d82809c2bfa8d932eac3bd52a55bd5fdfcdb0eb1ed127477242ec49987f58773066776f8bf9552d0f379bf8f52370c61bee3f1f79534b3cb5ee16e9baa74d545541eca0dfae7178fae31a8663daa9c4f91fff2784090bbd3902f64b44b5134e8800d863a9c51c75a5cf1f807a927111a7ad15b1ee3357ae4f82e8817e30add1e232414e92c3473d2dbad316183decc5d37a8e4a83b8896e5189afbcb3e60258ab8bfa612933e739360623c8b191fefdc07b2cfbdc3cf619dfa10756a0fb6352d971d1afcea337346c2edf01b31cf5468c40826b91833208ef42147bb54a621ff23cb5b93ed699fa1908cdb0bf576d3fe61a97d8fd30727f75cf0ca542d3af6dcbbfb5eff8f4da81df77a2ad1c97ffb3275bc1280a2170c81c39e57dfba0d27e8ff3a39b42753b3f7cbd48f8e6cc7dedd93e638c86db95cebbf91794c4bbc46e42f8dacfad1943d29147f8df179669a70545cc56dc19bdfb9ea3d5f07206c63341a6c9a449f03107f95aba09732b09f41d4e1cf87831db3fe7a62adc9fa68e05653bc1551a28df7dd7829a42cefdb5fca5793e4c8d0f6a73f2553450eafaa7e753c0bbd6345424a0cb7747f7a3cd39c5142f8ce81d2d232b491190a6871c32f6c3b323b6dcd1d581100f960f546cf4fc8bd67778993270ea0ca1c22c22823b4906fa42de38cdf2c0d0a752bbbb51b9fc59af776e5d4a676be593f918993fb838800020d5db7cfac4a96e1f7dc8f3537eed47d6443c53ac1559fbb758b5fc6ded9f986cedc58fcbf3819f4f19ed91ea9f7d66e9dfb6e70715d7b66e220594eca7ac807556ff75112b9e87feddbafefbc35da9fbe3684f6f38d507fd54ed8f361617d216e6efcfea8f048550b14fef277f6e75533deaca26ec806d2d2271a39a5298139f12124b5c5376d1f0d079f2119e6309f301b14b091066c69a5748e681bf04dec859d9a12d303305d831f75e3953a4324fd5b887d9b5a7b613c1d1b780408a18e404f380a6ba4388e94cd010650337b6a520f5f002063d97873d40c8db4f83cf6fd0833922e673d24325773f75671dc173d2c7681ac0da780cc5bf54c33ac4a8c1682f9c2403fa244db290fa709ec611422feb4494eb88658ac8f6c47c29628e9681911733eca7f6605d6577a9c55f89b14abdc1a3e4f87df5a5aab0c5526ed801727b16d4baae2d6eb25a7eb8ab70805a0689124c64ae3b1bf86b3404fce5871a8c132e072aa1e2579ba94d65850e5d0daa24aa6d0e1dd9eebd9a55952d760cfc1e2fadb44e40ec05cc2a5f280e2e17167ecc11407ed51afcfafd46cb0892104987c93f3fb1035a3f10cd69e2131d607840dd0ead51b700db6028cad74cfad658e989d7e40a506aa6cb2adc560370694f6419be59d1790bcd9b101fee6d6d7303b76befe19c0f2fd28f2c64d042a51535743b606af0ba1fa03f37f0cef803c030905eccc877ace45612d6c3584f847ebe4e2efb55c560d2d251c56b5934efdc939a5379f60be608633d6e8bdd0d595ac678235dcc39f36cbf1ce6cbc14eaa76af3ac7354ff8f7b00cda968bd4b58ac6b6145c39ddb026d83603630a133762744ed43548a2609fcc74d343fc4a9982c0d84ea35ec3ce6e51b9128a6731885b71f626b7fd5c543798d7798660a71a3224a622b889108cf9e4ead9e7429255346b2325a105b5a4211e5d59b89533dbbcf56b8bbca8037ea958e8f1670d16625ca1147e595ea42e6014e332e9dd814c9bd6d3df90a7de3dcc27e4c916a32932d137c26f60035100e54bbb526f54e7a66db4a89cf16b1f56233399d4eddbe9cbc41f3d10d63e207e62c195b0ce3e949d0c5bff47255ccece32df845aa030ee66dd385a806bc5086d14ea3bc09004d645638b6408fd71d84dcb5591438a2c0645d64c7b7ac10c071938820b9b764f0a95133b0b2c7f462f4fcf7cb7d8b5e174604a91f6ebfae33ee81a12d04227336c3157e6e366362f488fb6f98e4c6c29c9a2c60cb367f071d386e8f62405857103e1ee9c0d4c6e47c2d859b7c0741000c75532b0311a967cc473a164f0e38323668e98fe0e4bf73ee043d2c107e1bce7782cf6463bbe337eed22c6264c2aa878f8edf081c08615495b27131d43a0c965377ee0d4b184e72d4112a9c138a90898b65a79901a254a62be8e02450ecd0ade2339d37d318c5b0b71f20c2cd09dd66d1e8060a6494da67b8ffcea800bb4c8f968c00a5e06812b48eb0b17b2fb9df38d74dcf7a97bbdbd59ba6ddf98b0e2733a5aa189bf1a82e3f5e27a5c23658e19a4c750c9480b52e2c3fa20b0215fdb9b1c467e797958ea67bf2adfbcb400020fdbd83ed38c8635a45e7aed4e4b524607268e63ff935b15c73ffb56dfaae483f9cb9cfa9cb3ae580afdc78eeb4cfa166297ada62d5710e45fa2146d31a6da260748859370d5c307264ea9f668af0fd8b05d1a4544beccc3e6bcd8336f4e1f86720721651f6bac17ca529372befc9f3a28b1c8b502ece2a0e4550e999db6a934ca4c6129108dd0f605a2803ff0fad349d15ee4f4369b0eb222dea255445e2b092b6713d014ffedcf6ca5924f9c000963e63c250bfd4c463eb8e136a271938924e4a75372b218766558ac19d0173f39aa39dc3b26fb719f9477a9f4ed9e15158ab92720f1330e88f4a7c375d3982a2694d7bd8827e8c3a725733d77b6d296f6aff91dcc02854cbed21febc93091776d08dbd3ee1732c864b3678a6af38580d940c4d65283ecc6737c4ebb9621374f7da80897be7cad281452be96610b3dd8e3eed6414841af9873ebc83b765aa15a49c4cbd7733bae1ebfb5b13113777e8a511856a2edaa362372af6a2dadb270d35e3bc0de000bfb3e632760114a83c463ff584eb69cd56612f47a1e5314227cee3d1ae722972316df25248cc9b371593277adadbb31081d03450ded676f3431090d4074e42b54ca0ffa58049fb8e6be293187ffe250fcc1c63cb0e8c1ac138a2a2a292dd7858f43186e2d0702eb628608ebbbec4d4a061f0ddd48e817487f859dad8f6b9aa254dbeed2c867901691045cae412561cc236dc72052e6a907b5aa232acbae4e74043ecc419a5c96d7560f2170f1f3a435a4fa5136240e87916bf15ad251a5c613b57443c3e95f3cc9ed80db11f102ebe2ee16ecaaf008f1e21b4f9c3b69dc452350109384c6d9b6d3d510da54e03a8ab2216200bbf1e226c820f264beb146654a418c2ca64829922e8b2e1d83accca273c02027202eb3791c4c82b86eaf44ffebbf5b9efececbfcd90b37b688f4d1adbed820786f5a6e45dd572978576ce1239890ba1a6574baaf525a091bcd4beea0ecad27087f994eea9007649a01c0e3b302c079e8baf055c8e60af659c8be53f77320ccdd6ab2751131fc0d8050ac43342bcc41cb8c51bbfb554c241edbf3e8feeeb4d9fb4ab6a93936dce5746e1a5768755b08d621327375d4db7b5c16ef4b4b5094d48c3a387aeae1588c8e05da3baa9b773a7bdc51fee0d92efa4dc3cb220fc56addd2daeb3e4dea8d6554796a60a72a1534dadb5b23a2cd573262e9d9f23ee046e21834588227b4351b63a208ccad40f2f73446e13acc8a225df9a44ec35253175f872151207155ab16bcfc50642637f5ef2daf9309989ed3b773908457ec04fd73a637002f3c28e57d484f5d8463655c003d754ba70a3150485a1f4ee1800943ca0a3861102366687de900b7ef547d7570ca0fc3410ec3e34c063565419a0cbf856d53cecacc5761edb546337f9305c8515706ac8575ddf5ab75c6e801d66229cf8cd4568cb7e541e9c08c2d44a700cee63f9b8d048a53bd690e878afc89579946a0817aa93fc820844557764d73ba67f62e5d727acc90e587e3f54cc6d3f2394accdee97ba6a103c13d03bb7ae519527eb6cdf8a59e4625314c13709b4097c66db7c271e39513ff9882ee9d85d837c146b031ab6f13888e521aceb22c96c85d9392919078847857cbe053198ac8bb5af2883e8dc97b9a0c9b527a367f8c96c8e4676bf766e4359bb1f13ae9c5317f72a0631477aa6f164128741709f004428bc1a0001a5cc83b5843eaaefd15bd1e83bd28892f5efc37f044bda6f2714bdf87e3fd45ae80a13c14d0d5c92d3f22cb852bf2562a028319fb91651186f0ed0c0e49b26412e306d590e49e6c670db63a2be24a8db712368d65918172ed866e202cf7e79b52f0c16d04606f731ebd61a8ae4505b5250d2bb5242ec837c1e5ee842f100d99d36a25f063d00d7abcf493df4fe794159bdd1d65c469d3eaf003850297961ebad0441c83654decfed54f24ed55dd353947b3987710633f5727cfdc377edaf2e22bdb15cf4d9a760c0e1f17cbb02030fc0cf6255a1b5e9513ffa72d7f2a1b01d7a9cbeecde80481b78aef10c8ef1b553a1904843f27202824bd0b45380fb75f40e393dc11fd392de633b9ebd384f9b289777c1b373ef143e40581b0c1123d60d0fb6bbffc71eef875e6055da6db2c409ee3bb1d03e659d6ee5b214044339b7c4f792258d1156dc29dd4c384feaec19754b1d8db3aa2539280c21f2ef0166c2057a5503536b35431501769393123a34c4135fc44014a7a0332d8ea5b9bee9893cde608282cd05b142e75dcfbd99eb0ee8476f31283721380943874c87403daeef1c0cd20b2550754ce86ac3b9cf3cfb982e117ec5d078cae70764853fee0777a1b28c32894eae81402032eb087cdf22b7db57ec6ffc29436705025caf57ff8ebd96675cc99f74081f4c28c562dc6a7da7f493db1fe432109c286bdb1c63c22eda87eacb1e39e6be40e3029761730fce681f9b431f47590f44c865db14cba8f39df13541d33281f46e527fd0e356ba586666124ba34a53c12b35a863413c86dc650971341dee41486b4ef98afad38d21b6effa0d8c07dbf4350d9e606154515c05a039ecdebb9fc5e0824ee14891dd03ff36c1ab4a2119f099f92b2a64a3ea4ed0248aa6dbb61b5e244f833d101c423b28f8d8186326f224784667f99cbb8a7ab71508c607f38a3648fbc671fd67a44be4189b145d6a05e17bd5a9a3e6d278227a1877a93223747d3b68f91d7d03c59883e69e34cdf664fbac0b8e97d98c37c9f623044c4ef846e32d0a48cb7312619f39d9f1c7dd0c75e889ce581a58cf31c6648e0ffddc35b192c05715b122bab897e69f7da89b8aa64e3b8c9784a7f012c8f052c539989ae837654c6c28e0fdc31598091849e128aee466f336007cf0b5922a3f9b17c146c028e46d986bbfb37585f6742ee684f1555c4664bcb695393d8930583a3e48be192b784bcb45cefb4d1c0d8c65f62dd8332cb413bb801197cdd280dc6843181f8b514669a0eb887856714a8082364fba40c97d18c9b3116cbb315a66bc234ffe0ede1ee8c6107af1d49c0206220ad725a1f60086879f244fdf826bcd20474caba1cc407e73a384c72ee23bbf36f71c59c6567337d6a192b26f7e0130aad2f281f8074688c013881925c4aea36e90289205f2d58e6105fea88f84f35059d91e2116aa0bb1fd05c6306d943654deed8d56122754c7bc67cef18e55f6abaa27f5bf767e6b09d2dc17e7d5224bfc61d36eae3db792e6d3fdd58a92c8dad22c7f54e1ab5c8011b87fe5a94533c25cb8bd6da528768991516be7cbb05ff032a9d00c2909c93222cb24afc6227f3a033e0a442561e7f74694cd3efee1bd301e88e15097112a8cc243042165415299fa6d805f4920ab76febbac10a987b3d7eef7f4d81820388be9866bcb6063e80d56af30b09ac94c6f3909032d007a04841d8518e0913c270f8c7716285d2f70af57e07cf7364741f70c9dc4d3aa4b58b83325e766c5932be46cadb3f8976369a8803b1e6a002a1cda4b2dcfe50749cac4eec78eda4f2cf7bde0ea757194b722a884f3f3b986709ca3d04399e4e7280ebe5f6b79447a864dd25b23aac9976edf77348698e07eefa967aefbd076752cf341dd6e35ba668887b1faab2e06676831cd0efb3611fac45527bebd4a3cecda47fb0dd78ecd57a4f1c6f22bd23e90bd1f3edc77faa1018b06a8eb6376dd93b11e6a78fa15f2e452b5acd83a9f2067d6a60394d1fc2dd6423e5097af1445ed36f7ffa64cb25a8c47e0c4f68638a0842a4c82c16ee8e821ed028fa6cf3d5db15fe0cd28c2af80a72a256318a7292a3a845dd026251821864514c7ce5dcd2da03e2ef453d0606c1f37c8a6f47b58b79747534633dc84b5832a381184a8b590fe90b6ff5d0bb34aa07526ef4305c475b60cc82c17006c6bbe266a1a3a068c008e37e51f9c72200e42eeafda367ab87645ab644c20e9f6def7fb032e29a9374b7d367894f04e5143f02c335483f653e374b50b522305ccb2c114a48f20d304bc0d10c1404464c8347497b080c9325b04e4e06984c22e25ef3033e5e53a40c56c9962809cb322823077dd987df74954e13cd6cdae28fad4ae70a8ef81c03161f1d02bfb2c5c825745b9218b9e004478392a19724f19b245efc1bc54d515d2a98bcc38dc2b7dc49d7956063df00021363e202a5b1367bc91cf0f550b5bc9a03ee3d63006ba892ad1cdb652cf2e81a3c7d316cb897e5a4a563205435b6a12bf246c5ea15c1ac49c83b0098eb848be3cb7b20a5080d092b3f60ad6428c59406cf495b9745975f4471f081e643263d902facf1fd108dd1429686da927080ebf33258ab1a7de4122fd9374a51babca55255f979c4c6bd58671f1bcb552d858bcedc7570702d3cbdd07f1f6b62111e3070592ce71c00a501be8147a848a36b0905fc032fd407076f5ed1e3a159553c1e8aa5b3d1e3003d07456f181575782ca618b5b4ccbba0149f8c5eb3a9baa4156137f4b3552e17313aef21154e96ed182a46774c2911f5090e698a88ddd3d978de5d60689d932763e117866e6cae5424d4e75059c1438e3af961df52d7a4486ab4916533d56378dc8614b3be101a203f210e0e666734e9c2d8ae041d868b43c975a2a295a086d64aff9f3df9cf439874b16501580db960277826fdf12d01a57d6a9e333f7cc6f65b02e168c3367bb7a11166c33121da9152addc2bb6e8a89d8e3667c968c0db10ae1b19a41178d9f5c78251afcbcef80eb6cdb6f2e6ef97ae33591c688b401e6a42f76d6b38bb38d6c3e052fc75a0061ef036b592572cac0bcc4128d8a5b3071c96998c310849278ff400ee5b7a09d1d4eac43a41808f4768c728183cfb73030c71f856e861c7d109f4d3a8b31175a8dc737e67068975dbcc8755214490452dd9419325453ca38b3085731dd8dbc24b433292303248a21eb6e63e0cee735a1ba183b75ba8ca303f4b6dc12cddd790c8eb509bc2268cc089f83f1e7ae180f8dddfc00e92e7744e0d5a2dbf29d86b05695f52e7900def595a9826c8b087a42b5cb8cecc43e63ceb53624320db3c12d09bf00c553f91ddf365f2c7368c8482442bb07071786997f340d72a2f991301a29be425400c2aa30f18f3e3a7d2a4250e2a3898fc8ac050228a7c88829bc226347ef723e658b480ac470eb45db5fdcf59195b1eec320ea1ce192c3b1b59b5ea369d38d00a7a51e55c67b0539d9abf298706279a21d08d25c787110699dada0ba35f6985300a1eb7ac38e8852939e6b04469d5df4bb07a819edea85c4ef4e4d3d3ac618341c485ea9fc77eaf5826fe246b7076e875902cd4b47b15995f97a6d0a63d912560c25fbf7870a443c683b9a9dc1fc2bda349f5812774f874e0604d50cf541d623a1e739e2b6e434001f8fd9ef8bed8fcefff71c8b50b116b3db5a42b6741773f8fb20272eb28eca0bbe5a2dc79e3e913f2456f0d9403ae98351fc81a6e8dcfc69c9cb8c3ffa6ece6b6db4b4b3fb1915aed2aff4e273a4ce814376ec694bf19ccc3d490119763d763978d5dbcff1b06f32e8319592670a62a2317b28b747187bbc9471515709426287f4773d2f08bc21c1566c8fc590f50d3b833a09d2fdb34c5881793c23465c4850616a2554a02d25ae4f060a3d542b0ab80bc9a84e0d14b36eaf928949a640d95a18b96bac0ae60e91bab7e5b15cc6bccdd1d77408bdc65fca5a600ef923da666481ca83d374061a688e7841505d6799e04262be40b0dee96840b58c213c71a18e2f7fcbf06b72423c501aece347dce0bb8fbb894b64d95fd5c5f021b07f510f954696c797ab0e42156aad00bc84ccec517e1213c12e5d983651372ece995dc95355bf2baf03159263bc6bbcaba20551a2ff0248a87d3b8b240e30af2991bceefdc25bc390da89556127c0631a99cb40d88ae647ce9b5e1ca0a1181871b640f74c2af35c7b088ca66b226c9a187d734933f696252205591d15685d5fac924b6674b19debd90e4b2f3f071685998c66cdcd001c26a3bae401d02b986410af3ee54db1d63045fd2d3e441641eeafb442fabc628d64a389796a1c92af61f4e66f082ec24d23152d151724ef38cf5695603c68556015dd9d668ba32b711f275af8015b9eeb701cd0d397f3e0526f555e11de983ce8b2956bde08abad14438b384f6659aac59fbe647571902e05bf890714ea7f891fb370bf842b655fe873ba0d40b7c5e606f9984dee2104770da1b0d497c540694e0b7509b06f14fe417e1d85806233400033ead1b4668573d052d783a9efc02e7b40ebb3773008c22e874434277c9b2f248668ea82af9393dec9aeb55dbff231ec6c53a4a71b99fbc4d7f389280f611ddd4d4a451fc02171bc767fcc1f4b5eabaeec29ba5485ef5ff0695885cd118ebadb084cc778282612a99aacc4687615b842ce3d768092b18a28a90cd00a270bc2d2342e6a21bd86e0c466ac76051c7e7d802f5ed17d49f891d311d2fb382772a55a1621e64887d73cd1e64df52697540c35e65bf6cc753ca80ee25630b371b5de193dd65a3981ba0f3cad74ddd40b2000698016b8dc7d8fdc4aa3eb353ce2a6afdc467fdc0200b0de232568fdc3906893681d7025faa426391f1296fa4eb2d750c3fe0b1d1e6bdb5fa7cd4618351da60604de026226b324c0e019430359f731119e8b3532da43998a70e61af4274be10f5cb152d847e16f7943c28c9f67be9cafd6fe76fc92687bbe25d32f095a2457fb0f6f54066c916344a205c729bc52cf53f57db1c476c03bbff74463733479686791bf57ac6baa44e81ebe0f49cd65144e5c2cbe36dc944484bfe82c4cc6664473c79370d04f7e7a55813f74329f6dfc946e39f0abbed45c892c2e8cc8c3ab5cfa9a9390e3e999f7ad9b4e52eedb5f61d8b30b811f40335d21c8d043019f681c0aebc7b13ec4fa414118460c8aec12d84de7d34afc89bc2f61c5f4f34eeeb2821e66b6e99af90b2d842388ace8c8833739d267cfb78ed355cb9d82ff0b30cdbe977ab1fda37ea930fa88297cef17b9c23d7695ec41d499870745dcce06daf35ad2336f68e7ff19e5744f119d18d032dc4bdcef5f77bf55bf2fefcc5ef929fcf25fe95ba7f7e31d7d2ef6b89f597d41f9ef6b7f7caa7f4fafac4ee25feef55fc2b797dfee277c9ffc716f794aa3ef4bb5e0cb79feb618a82a951acef4657e5a698a7d1602227aaa7ad6f1a189482dffb3483875609d320aa62d245679f205b741f0d2a85e88aeefc845d4b8c6ecbd4707ecbefa7dfa6ef61784f306dcbb9594abdb228f470aa3427ad4a379b57c40ddf165e749b6db2e778b7fc233ef0cf6935146831bb7c3c6d46e8e1c0c39908abb7109d7f7daf9345d494c326545900a63eb1936329bca420882435fb906a95540cc40fa68c07df252ca88493620e769d185198cbeb97166b524d09b7f42a430dc2ade7a26c27f2a8204a75e32978366bead542a9b1d454130ef9d888269ece5878b59c42caeeb8a0c792422f17b5eefefa4f7c1da6ee51719d11adfd53470cc9280d2b0688c7900f0189de687ccd826593c55cab36757129c84cd1f0f19db89e0aeae2d878ffe80d8f7e8df6e7481691db34e3579d782b2f22b7dba43278dc078c136aeefed9f5b8e1f853e8b8b5fe53afe4ae76bad302bec963465e9f70eadfc12d6b866a5b91f51ded8917dec15defbff748a5efa9ffd4adbdaba4c5f48332bdd893f70496dfe11a07fcdab9f2e79a0f6e058ee1832f1f93fffdbe924f9d91385b373c00d588fea2a1450c78fa78813193e7c9ab8933f7d079e22cd463fbf95a83dc9ca6d9a493887b5dc65f0970be333ed50b09198d222ef005f2a0c820e47caf0171bed6e014078a2b428a98438d055460db8817b5d67b62165ba710901ef0880c7efcec1330170137b2875c4aac7056e175646727c41578925b0b59316fe8f6a40938af342650165974a4b943c336df04f729b2c25ffdef7aa8310d8807580fbb794bd0500c3e8fd73e94f54b3e043475a1968a77c0b49edb2c06be50c95a07d0737ab7554daaea11b6b148bede2e432eb9dd1490d4df6caba2c30622f729906c4ba9d1b8014c5ae6c7430738b8d841813ffa6a9b80494511b27975d5358b8795fae0a0f4e93800dfe252d910e3b57876110960fb048dc6dae86029841725a09d0b074afb71a9b4ec888c65e72e891a5a7426ccfff11d4a5a67f89fe881bdd7526db0b1afaed98af047981f06659f4ed37ee3c231f8f04cb184b8dcc3c8cdea6902052d880c7f2e6f7df94e61384a3829a17e69a568e3af7c3fd45cc8eacaa2e755edc4d6adfb3c08cd9f545d64ac1fd02c79e1cace0371364a8f16ae5ae41eda411cf7b59efe1fad3c31b7124f051f49c20a4b64063c66b386f5b13536c17ba88ac6f34a3e5284510ef1a2e52304d30add6419d48990eb846cc761be0aeb07f8b1fccd2e01bf65debfc24cd62e0286aa29e9fb25fce011ccafebc0fc213c2cdaf67631a2daa0a9e944c45fbd5b056e8119f545f93e927b4ec31078c2e6978736839d3e5ba388c9ccfe2c59c226942813c1dfd7d95ede84f7af0033087dc3ff6e378e18322c5dc455787e198d873fd94d905b88851311fca767808ec12160aec8687f1bf6132deab4fc08e517c32c0ad0574363efbd2b3f2187663084de29b7d221497cff04de2cd847172bd02387ad0b89ddd636fe1a39ef0b20973a06815edd66e1d850bc0925eb6669147c51d8fd31217d24f33bc1e053134cf72182f212a78ba733943093d0941e785a5450251d1460111e29d85e94e24820a8b8722437374a7ba0db77917cdac0187ee4708b46de9069865be04c1865ce47e177241eb07a65faad5f3682f8845a7a6352e6d6f3f7120f90daaa89605d0f6281b9fb0302f3e7504ff8c2ee66b8c27eb258e59355e320e467e2d6f92040460c02250466208c5970122cfb344c022a5d20842218f76d900e934a878fb3010e5aacf83daab304b85db3d324d78ce82a47d90593bbc9962108db4e3a4ee61cd89e115066ed44133a300b595438599f455c3236d1fd0679f71d19120051e684c70c8d787015898fddbd922c71270374b9b97b4a4538920524288ef47b5fefb9dad5ee5254d0eba7731ceaacb1bcbbb58b0bba51dacb57e35f1ef804e8ed72ec7ff532fdffe3c2ed137b41ffffb8bcf98a5dd0d7b90d79efbbbd6cde2b4cbe5f88f9ad5cd0ff3f5edebee217f4be8fcb37bff8657a7e3707e985a877a4eb6555b82d928f43515f0c95ab05c1bf0e58ec030f9ed127d7489964bb1a182f53807170a632cda14b0f77774fa1e9e829264048ec293a15103d4ee1f7182c4c300b1a05f99f8222e24aac4c35027a357102bb82810803e3989351bd013b2131c1ebce396550b318478a71d7377737707ed912709cb76035a8bef848715d3c6edca660db9333eff21199b2c225333b129a3160ee7a13be84c25c891e49eb6ea782c0050213d7b6d51ff9818ef96da5919957caa88009e466c8e7c68f8c792ca7a88d82510ece57c55620a90ceb5a728602aa9756831a55c64d1f3e306dc6e14e14c0f9151dfc339169f756f59845381676d04f16df32bdd164dc97e5f39b0b8cb2649086b05b2439456407add5cad29ad2fdd679f3294121195053f413f51a88ea5ac5d7d73bf467f2a053dcef29133f05fcc2bd3140e29c2f9e8f9a890cfc133fdb65a3f8fc0f070189af3c6b1a0d26327f694382d2506c5fc11203b4b3ada594b1edb9cd2dc73bb6d97e72a44d58decd5288530b8e5ec01e7cec5d5c04bd9ccd36a8504ec417a4d2e1292f90ce156426d0876d3f4e7c16eef319d0f20e4d288f509bdfdd7ff01b63d28a7ee2e28721aa8a9029f1aafa990bfced64ad083bcdb06bf225cc8cd08218b0291943ae6525d32f0d982f138a873924786070b1f8e69d1480699fe66a70b585d9437ddfbef5e9b3cfbef8e6cb675f7da50f6a255b0b306cc787af7cfaea9b0fdf7df6dda76f7c81ef79f0712581d08223942a2649af6c4aa8bb907c11ec4e5633b1f4d47c3557d9b5246dbc375d03d27f3640a1772016e74ce9a159a0edcdcc030926f06e3a6a8c75e6628c402889d014bf1ae7c76b752b6b5d2b0617d1bc1ebb053942059c4b424a6baa6476919bf3e59c70b1d0ee453b207742821e7ae116a2a26c0c4d672e368769195cd10b3810d72758c72b24a3ff14970c1b0a0bcb15e35e577e7f0c200d14f0b38d3a1744fd6c46de3c038252461bd73b083ef7c5f029120f04c2b845b711ce886e2bce48890ea419eea69de3d5ad38ac461e4af99fa549d7646cec156aef235bbfa524cfcfd0a1a49a093033a9ff6b692496b45689ef9a97c713d7b5404a6a4a8c6b94acbee31cbfcc73c9fd17830ed2b71651d9a8260b3b721cf3decd96706469168588ef96bf5d0f9c0f25a0ff8c7fff69db7feec37a2838fa6fb9fb4315dc5f3fc86f86daaf25b01f0a8efe5bdc630efcc0694908645912fe9638cdc0fdc70d1a0f25307fc005ff64af7fa2e33f146cfecf38eda18af96f9ff7f743eb2f17f70f0567ff281eeaeafd57decc5f2bd17fe6d5bfd5d01fca8efe1af9e1192ca293905c6069da022c304d3b5cca0f65b33f2c85fec42fff22233c946dfacd0beda1a6e967c5f7ef4ffb2f17370f0567fe28720ff5fd7e593aff898bffe2c6f850b669c6eb249fe31a218440056b5379c08a0313458fd1104b2a02010ae79517e770c3c158eefafda1be72abcb547bf08cdd593f940006286f85675d265f3ad767621edf88a7fa4331b5ebe239b8208491e24ec075f67af37669acdcc10b12d62e300eedfac58f5a1437bcffa1268ea88a6b05a8eaa0975a04cc063c8ced5cebe302411c1ced8f8495e58e4e23e3425113c72d0c8138c16697e2654f17e07c7e287110d69299c9718b9db6877dfe9820da79268718f9a1c9a94605f7a9a42264d1e1bb936f6c27d6fcb210dc46427daeda1cb7b4fe7346ce94f232233b8aef6791aa9b4953f921f5ddd9eb1dd72789258eb33134fc31bed4553c66a84dc5a3c6843d19a7f8400a87e2277d48914890f1e8280d5a0d8bb08f7bb0700a0bf2c88940d5f4610bf8bc2c2caae688736227552e1116d29e28120629ec692a0060730e47189ffc3c8f24bb84ca10d25076200f203b743a6960e804a6e439b9af661104cd9dc65d05a4514db7ed89b52cc42c7b40c04b630d2c4fa928cd9667d760c7a7c107d3f640e5a5e624200ad24b517310461146097bc501383798a1608adccc8590cca048d881736d97273fba88f890e3a4be4cd354bbbbc80538d8517a221a06e73e6988e6a16cc6f73db61cd03c2835428567ce8a00c295fcb475adb0e6bf9d49327d1de85c25b9746119fadb4637877ebb7fc23f40814b24c63f4b0ea607e4dc070dd13c942d690784b1d1ae464cfeed5ae041501e38450c99c03da460579ac0d0d42a24ef02faef6f049fcacac7731a572bb61025ca4fa658701ac7557b484d411998d023162b9a6fe1df0e16622d3d781442972593ff7e3ef662f55b9cf112fd0ebb567d7008a48d02f38666d272eb0a6d5c93180c7eb8b8a03dc62e811a81a16d25feb10f8e00ba788eb10bcee64978b8ac62f6a08d3633ff895ff6ae92e7f0a4f9addfd789c4eb199e911bcb56b12d61c77754724109b03c39184e06ebd1818e76164ee7ac5872701409789080e88753e6a0189f897677156bfd3c50ba444beebc5be9f4cf19568a09cf60259bd85bf341c34c52ed698ce7bb681fcb3b62f95ec7bf1a04d096526f3726d62432d3053a3caf9839f5c18c71ded4cd6825c6fd1ddeab300b85eaf7da6080500853dbcfd78d161694fe61174879f7beff43ce2c1c718cf5ae40100dc6bbc71086f1fdea7d280178dc6d642b92a4e1f30683b6a85d2b170cb8b4a0275f824d7ae1e6d6722af4d9c0776237d52d6160d81c43cbc99c26f05a3c33234c9eea1f548bd7460385260c119a9b157bf84f8926b514a070733fcab506e22f063961ab211cf269ad6838bf60dce09e6ee190d3f65468ea1899d843f01e86d17866b0432b2a8289b267096e4b06841faba51f9b69c2555efd3984d693f454df5c0bc40404e52a488c91c253f79ed7301c77f8412d7f8ef4a1b20c6d916d613b8fbaff5a2496fc92c46d3f267ff2f11f2100a1236339d6ba7ce59c547e8e2939a20891cf1d5049e2b8e021dccc9ac16fe39b53e6d078ccadd6c364c6eb4f9c7110f56fd5e648b4dfedffb3d62798fbb1513940b4bd825dbb2f63776d063c81bcb2784e313e2449045b2eb3ec94f4758af6df08a7a095290a4db11accadf02070f7e63905d4e72c432a0dca0640b387ca86261256b97a1af0f32bad1ee540b260763bc821904f945e15d082e2978fb64ab53f452120a8bd66d4ff1f03e9fd9a0029fb3c9a575c146051a20bc27b609ad00622ac88e0c15a1857d3bb206149107583fd3d83777dbcb031c5e65260ecc9554276fa915ebf5668139c92464568fd96f84bb9374f5c6d417d4e20a39a72364931cb55c3a507e3729b42f4ef7a5c833c488160c928b9f57e27b25e3616fed102c38eae8fc045c432c45446c9d25e5095d3f4aeb85d5de51937482b7bb2df094a370a680c53fda5cbb95f95a87db178a62fb455a0ada4a6dbf092d4d25839cecfe14175d01060f72b31ce0efee46365829513c1af178da42e34be56f20488669eb3735a5c0c0c874685ed91e40f642a4b90e853fa54ccb5b985855ef385a9e412958036b8961f0b3d2a6458d1eab367addde14646dbed1465936aae1444044843b678da8ea12fb266f72bf5a22841388eb2b21e7619e96856cdaa1958ab31b0159c79bdf43e049939b7b32e6840c2be59c59ae92369128a5d6fc74d8757eb3d74290304b3de6828386451a43879996140292a13d62abcfdf4bce4d40fe0f753b7f6c4594eb1f03815b36303786d415edee18539a24b83064e4748da8639097ec0759842b446cb1026341c6ee3a7febc400e534d4afb45966ffa67172bed41738f06ce172d1c4453256e86abff3d74cbcc2d367679cc2341034583d21be39486dbcdc0912fec0278d80cce30731262b70563bec17aeda9370dd6dba4db7bffd403c6cf012e3c9dabd16b156fb26cfa9b9b2b025fd50db3998c146d3e904bc05fc174d50c1cf788e2e85d82decc5efd3ed794bb16f4d04b2d5b4c629423a98a36bbc479de3889c87a5ef92f85e458ee0e79c5a706ae7165871d0672fa398182383041a18058419ef21104f357bf6a2e44f932add1791c1c17731c29cd842aabb700779ba94a18a193e1623c79449079d55725efc50a71003d327ba8689ebb35cabf17150f2945b68e14802716e2656284792655a7aafaa790bc0b180f12119d1f6393fadb65c98335053e97da9b2e50c2af5f76bcf3aa1d9b7351edb886df6c4ab4365ac4133b19bd177b38ac66f0cfd3a16686879fecd89f2416eaa524ba025bb7f619a0989ee93eaba6e14b97fe2a146b020d79c8d4d48d9d14c09e03f97350144de5513cae9b12cfa95cbdabf0d0fed7c6e0b30e4b9ceaf6bff92809e77fbd723c53ca421d2199277f54c2cfcc462d878ccda9ccc84c744ac875da49cbdb741d06fe92547e8b0df241ed8cef55b99448831395741bbb4533511bcb0fa42d84c8cf762cb3aed0d2ab1f976011e0746c54eb20ffa0332da2afdd2cde86c645ddf1efcdc8d006dc9857e313a466ba8f14ba6f5696b0eb511190462c9f4396bf5b34b9fb09010f8e26954c67831b86347b08a589e57b282f5aa8d7666e9661934564c1ce22e89acc5568fef350bb32707d22b70a6cd432fe21bbaf636ec24570c861d122e09c35f4f05ecb2b487ad2143c289f8616a6401af1228321b86c29d3a95c18e601d189b9af51e679527e131377e6d415b74dddc4f1aaa614986f6c1dd2b177a246882622b71581161aaddbf5c316946c70686a5db42692d2898ce9766305711f69cb60fb6589821fd41e5a0dd347b6904620d3e6281384b4f96c9ac2c42ea74965ea4b5ba7f28bca16b5e1ba9f7e045e89832011add05939a5b8390f4b9d5d2fa328802f2333aefbf0b59e49a26d823b0ce65e88e160825175f7931352f0c973a5a1edd93b489d869e2d43c70395a428dc6d62d89e10dadc206caefa14b933041e7f148fad1f08a963f7da2e2f59c37b78c135a8ec7c39e11fc80c4c56416506343e0836fbe106d44cd12e47640f50e262406ea6281f4ec5e237085a1e632e4dbde7d26c4863557a6e89568f481ef385c04f98a7c663722ecd3efcf8513e85ddc62a4ce90824be69518427c017af9355e9b2fa8406afef10f4536f853af5758d274e00b9017ddaac325a16b6b681fcf1ae783d24a36f019a46b793d6d4b21783d67ae526aad287fb9134b2f540017ebd3104a088f621b5eae346f8cc24845d08d83cf7618f864eb31a05a8d9d162471c304bd4b23c373be9e0967e4068e9484a3bd1a36a3cea802236e74fc7c5e48b2414ffd7ea81fd302935aa6f013a8e1ad0d6e973d64f68be7ff5b3ea9d5bf5bf530bcadb8047889ecfdaa02c3d458d2c35a9904c36f529e15f5def1f4242d19355bcca0c4a43b1abcbe5140924ca0d3ee0ce6ab4f4515299171bc74e9a19483f901d9b5f5d137b6d6bf28fc1861c6debfb93d2831b27b844b1600981fd67ea645845f582985b8f557d3791f3224c9dad6f7860aa79f1bdba54a665c46aae0d6371076a64c14d05551eea32a83248dcbcdad6f25d55ff6fb3af414db08d7e039cea63471f8b0f5680f5155a876b8c90ab4e9a0b129c4d5c7f5af4a378a7713229a36b453019d12b3c972829d514fda5a1d11d00bcc7369181accb23e515b1c2ae61b6c9922d984d7097f534829ecc21bad528a7364e68f52643570b2abddd7823958709207beb2f9e3672ad4b4aa1bdfab5625043d80e2ac2e969bab8c9b36863c55e81bd7300d8b5f8c000488ec81cec160107dcff9be2eaa0111718b193c385096dce8a862c358f4c1926afc1d4952d3bdd6d19098a49771ca5fd6513045a09486371da9d5770fea94c61a94918f42b15c496ed7c365fe556eac1f97c23131c79d2593737d283b9efcf8889f3d7eb92ee27d99120a6ff07d68ed39682b64b088b1066e87b92c3deedf515e48cb926f22a914e261ecc1f78d280977a025516abb7f1d5008d0b47b315fafc35139aef76cd64685e05d78150e6183724198da60e11c0bcf28d1f7773eb8941eadf71b372cb0049efd56758f1492be897de2d137a76b1fa14667a674134107926c7190613d35544739ebd1dfac175e8a6db7ca8cea88d1428b1f0aa984172599d47b5e76401055d94df2a94f25c49b077d73ad5942133b06cb33145315d3152e3684cb781abb721d0e4488237e3768915910867996cb652edb4c869dd49b4fd03bbbe70b3d7fef58a1d3520ee3831e87c5bc788eaa54ac6caa58c4f8b37697c6a067cdceafe881e59d2fe2db934bbdfe018b9cd64bee389146cff0b56d61b19f97f78c1859ab0daa397ced418fe35c6dbd24d02ed0e8c62421e26cd856a7e86a806a87c6a6159a791518cc33e6d1393af5866981746719a5aaa5a0043bb0bbac9f6d8c4e44a341e2e4c8116d871886ef68609bae487416f923f1e77cc1829311c1c0cd4a7c102771addf08b8b2cbaeb433a7ba3afb2d7a2a9c61631e144f8ac27bb8ff6a456d4b6ad61d95c039fae39a20abb99af40e4e43ef1ebf47a789105d8445d323d4cc9bae0b5253d69130def58e999a71f4b1d3732a3e628f2fa25dcc99eee5adec381d7a2ae8c337cfa9c1fa5f1b463dcc971ef79f8f4e8018822c24c14cfb19909e28462ae2796ea88593e53903d5d85be284214f61c88199d0f6cf70dea81f51022a08b63c8e836f0f4d52110ba3d76d7360c2381ab63e16a7336ebdeba72ad0fe657eef44272b5930fc1877498e6494fa2ac2aad77ecd824f4c92ada7733d82c6c3df6f89c1e0f55bd4518fe9ede0ca901dc1d033a20fe6a5a305616a70301d67051ff34fd85bec116c1b9775d3cd78823546403853a010a5b6cc720fd46278141cee76fad3ccc437d28b8984f637bff7fe9a888aac2c823f02a3f1f1b106068ee333561a2b18db450237bef2da59429a524038506db066806ddeb62d7e77c3fef67ca29616f1238461080a6f460ca94f77e05127e604e128555cb3a683c32de0faa7f8deb20b401617f7ab5bf732e4783921c47c32a9e1d56ed2fab703c23d00edef44f94dfb54f5df8838731c77032de0e2c7b0cfbb97519d7adf35caf3acfcae83e72fb1a857839d621e73cdee3e339399e93b3c6911f94ecfacf4f16067d3f0cd34403ea188d7bbc7220a020eec3aafd21eb3c39cec38f7a1feac3abfd8e790d14748393246785f84ac9793936c8fb0edee8c430a8300cfc200f6f200ec3fc004bf0765c8ffdd56d4806ff57fb271483ff13b2b5f39cf52158b55b5389db56de8470ed3c4788b7633706def46a718cf024eafe5b67a246e1a6f23b0fde6a7f8550f7bd8cbaff360d2de43f2fc77ea643fba72ebc8130783bded4a9fb72e8ea7f06abc2702575ff35d740390c3304bb145e77e24cea7e03750cabb1bfbf405f97f0e83cefb8b74f7fc130ebdc101c58b58fb5bf3f5c509790d3a1790be23f5f6e423c7ae552ddedcfe6d4ed76c97bf7ccd91dc88bc1418df7f65f9605651fceb533b33b8fbea3a2177140deca99db425b435e08453884665e6397c19f9f3f1eefe9a87939de3bd737ac6235dcdba88f55da16d2fe31506886dfa763425c0fda13e1108dc6f9d61af3bfa66decd3abdef887559be1c0aa6d1cac9afb3828592238e7bdfd1de2ede05ff6655ff6758d57fb73d2dd8737bb5c3badee4e519788957289413bf6a9fb7dc367704c0369bfcf3f61304cd7bf5ea557da2f9fa0b57a0fb632c67113a484a0202504050529a14a1534f607676e8ddf19fe58f41e07e4e5989ff95b1675365545e57f5010a5a2dfb0f4ef753c0a33d248d4ff5e96b936b7ada28d5becc33f5db3a88944a2d1f7e87bf4fd1989760fa9ab2ccfee0d2a0fc35cde15e1edd0815632de0a479881466f87e8e10d9528546ee6cb423e3293497412a9c16fc7eb207a83c2f924a58d5b2c0ac35fbb73dd231a899687b4b1175c48e1e716b75cd84ae26ee0157c9c76b921e25a5ad091b6012355d4e23d6ab55aa46ee2e580cf33782a40e9d9a152b214a614e804c564081e8d87a74722d128e443f4dd43246a2e85aedab61e5bc4a305cfdb21a25fe2485cf3344ff3b428be5173dc6a91489b576798518bc6637cf1f2bce5ad8ee1253eaf4251d4ccb619fa2a150a25127d76d24adb02f52a48e475b7d0e2a9d0c363ec1773528a42b53a005a00b28c87ca4c34622abda205edbc45654e1e11cfcb7143d3b6ad74eb248dd3ab315805f472c06f36a3c2e73260184c85a930852ec04ae298ca11e883ab865751d7189e2cd01d54cf7fd12a83b6cfe8bbbe41e5f131faf6b7e3f5187123516bf49d0a8e46a3393bdb96aa54b081bc1c709574cd244f1675452ae5bae7e580ef5bf3a4c1bc649df0624aaf237d7ff6a56ddf4a341f0022911a22910e5e459fc3a88a445e3de423e39cd3612be53a0839c8ad6041e1331456f5845161fb300cb780cc243cab8457f08760429da0a4b4344a7ad842c1d69c949248a4e66115fc152c6890f8d74b2e08fd213d5fee1a0ca37129edb34f69557a28d73ca5ed06332a7cf9ca782f07b71a3edc246b5458a50597d0e659eec702453f58059febeebc1d18e7c2c50dd9ead3755cc8916d0393f832befc25157ec6ed52ee3616f2215bfe941c0e03714c77ceaa01039c3929c5a9f0f9b98b425b7552d08ee0834251da3012217fca0f857cccefd7423de6e419b5ae67704b8e3a4f6e6f42195bd41ee467385012687b8c025da00f105ef1334b5e09c920a503f1e667401ff88b037fde0e1e541f86893ee24b1ff805e45c3e4b9651ca2897501504a11184c648d3b83556edb2207b2e1df4c9c243df50bcfc0ab551009058d8e9f94247f74bf21c8aebc5b8935655a1be1d1950a93ed9d4e664290f87cb0dd38b8c0e0f2909c3709494e4281c855b6e5b30094cc2515cfa11e8d60eea401dfe02d543778048db82498542a10fe1a81d4cd2cd8b9bdcb6ba6d8dbe5b362afcf5f1a055e3835040545a2d14e9bbeb49cf41e1d50eedf9a2278a0e8f8ecf8f8aa9bb3fa5ee73c3403886a33c77ead4e937e5ba75ea73528a42b5b60635893e0f0eea18f6a056948e01e2cf835b37b0ca278d9a921856358b1c450a49890bb14c2c14dbc48369ad179b05a4bf74ba4f99fa6b4b919eb4a5481fbfc7b8fc072056411289143dc90f2d3f0283359664ad9f21d0cf0187184332903e044331903ea4da1f28514a148ee2ed203dbc74481ffa6b1b91489fb14622fd0bc5401a5d3a6cbdb80e6d2952dc56b8a03af8b57203ba2bbc3a7f9a433e9623bdeb54ff9093254954a9f4494a64e0535d6a311db346b608330bc1df861ffbde6c9ed4f0639c0df6b062726bf8e12e7fe6bbfbf76a3e0f9e1c11232c54af5e64607842bb79647efc23d763ef35fce89503c523d0497d32091861f943b1fd2ea0eeaaee4f25aedffd97cfbefb9f4c667979939c51f757891575878e991388be140d867d8a86eb536825d0f78ff452fdc2308b430cd510519cd4fd07d4f0dddbf1697e3b30cc136198b541ddcafdbdda8e0fe7cb23465e28028fe53bb00adbe5f1ddbd21e2bb0433d27ca9c05fcc111f9e251fe759f3dfefd35e0c0e5e394f8d6b32fd5fb805fe1bfa58291af8a99afeacc9367c53b2a8497c1e3c65e4881861c9f48a66aba1573e97a040b41742d1654844e6ef82a8ce1850fefd1a4234f17d5b9feb291ae6f8a3e46cf6257ffc1afef890abd9ff417bb5a59ca36920dde4df6fe629b2e7d2ad4e3ffec7009c67350b382facfe6ee5c144d8427f17ca61db988159fcdac7ad095fd7e34c96d6e4fab8fdc099acfeb91df14186d51cce645d9b61fcd98402c8f52c6a723547c408eb7b25c3a357fed8d6a29e8236044dc59fdf31a9c8a566e866e6b7b95c481432039f663ed6b53dd603e9953f94d7917e4ec5c7a157a9c8d100e9156b6e2a1756f1fbfb3b4b1464cf25fe63bd9fd9cba701c35e72364f6ae2636f233ffbc74ad148f9291a22041e6bfef2f2f6738866fecea539d23fe596ea4f412e3583fceb69883f399bf9f12fcee649cdfcf836d7b3a06fb457bdca2eb93d56dcdeec9503b98155cc0e257b2e2fc6db6d605594fd8f3e1cb8f62e694d085afa96e76f41a27d894b4924a56fe152926361e1883c91b279309490b31b2a7ff42a760fa8065609416d9ec0b729bdf636a46ff99d49cd507aed6b4a5c4a3ecbfb6b0fb91a12979a81e5fd5392ab6199a5ef4fd594bebfc4cd6ff91c8ab56c2929b1b7a298975dc5ef627db0be52cb3f56c6d5684f84e5352e854d59393493a229b17c87b227e2af7dc6d5949e8523d25ffa6b9b756e2b6120b5a4b0ffc1d2b614c6d1d03c804372a321a8596b72c3425019a7665093dbac3304359330ca29c264cdb04d7eb6a1d40ca2d79e02a2d7b8d4a440e853934bcda07de96bb42f71449ecc27425ffbc9b17044465f7a231b9ac9a1c7d6f910782c9697f25f8886e5b12d568c454e8cb37932dfc6bfc4d9f493642d7d8d7f894b6135fd298c4bcdd0f2a5a7a1e54b9ccd939ad2b3bccdcab73c0d2c7ffa1367537a967facd2961292438fadf221f058a71732833dcde953342b9f82c063ad7c8a86d297fe3a6d35f42a3ec6a4c697f12f1a1e5cda52f24dff582b5b4a72a91956fef43494dec4d998bef427cee6498de94b6f73fa957f2c9616d3a9b452ea27d5f8a35771b4bd5ed1f8a1edf54ab4bd5ec518a3bff635fe1a979235fd29c9a158dfabf867d03fb29a91c8f4060fbba96f6bd66c24501956f14b9741bb09849c0d0ff0e313a1c14672947be2ff58bd19a9bea520377bb5ff4234628ca0bfc832e6ddfd16f5f6de7b8f79db09de2ba0db9a09d6a5bb8a0521609442c839afeb8879447faf8c21e778c0cb91683f5a105a10726a2eabc5872d54bede0a2ccc1737181cc0cfcfc2ae501bf072f0772d541ecd74e35171e101eb951304ed1e9b0f459bc9f77be5f172a04123c3743ffc289fa06278e14a86b0440f2f0595b31a841b8a6ae2879a505034138c68a1d1440c40404ff5ed34a1a407eaf5ed3491a4099c1d26a060181d620132991b2fa6f75e781d6ae3163ab08227899b23d2f0a1a150f1a257f5ed3871a48a6a471fb52ba9a012a2028d11156b108024841554048121050ed4e826a86802a3620a0250e1443a45b574b6d0818fe9278a921e36aac0c14e33310233e008823012f0109f30e5a32ebf50a2084e40f9410828ac6f07ca4f35a156eadb51e209209891461049042571831f66e005cf0b0f5c0509a6d002091674b2a18426b041af230c8146a0287452f9019d3f3ff4f22207346a11051aad8060488150a013ca0ca87c12a5a02516c4233c40d88047043b14ab6f278b3684d00420b240421154d6b793059003a0f8f40a8b33769890e25d54b0be9d26a8c4285e1b4148f87084153e0c01856e5d91845eb1e46faad8092af1207a3ee801a2a2b6804225d5b7b38511b298a66698b78074c2f2043c43c084157a50bb514a198de088618421a200828d2a80582247b640ca1188a4136be0e08559ca388231a424010e2b414ac28925c80c98014510d668a3042dd082d54a0c41da7122083b4f00e15536882b74aab8e28b2a48e0e4891354d40e172ca82bf5ed7081b39346f6d83d03c2d1b00a8ddef783dd71e249ed1e90eb8035acf27e7939fc8697c37f2881ee6720880030f056b801c49d9d566ff86eb800aa7f2c019010aff15f8c51f58f42bd57f372c4a73183c6df238b53819e1f1df362c304de0a0f5815e2c7887a8adaf6653ffe0376051dd4fd2a75178cba1f3d2ba8ef9204adc1351bdcb91b2f70289b7f49e9466a777d8732dfa8499ba1a27f18fc513b4dc3b8201997ea4b04d41f10aaa77051a512a0be295c1cb91e753d0ad037a50b18d4adbe295d1ca9996ba8ccaff81737c42bf671ee80623160ef4386387c0cfac0fefa201817a4c7c50571ee06453dbf7183551d83a46288afa2a815f486e85be4dafc7f7151e94845886a1a149a12bf47be0204dadf30720719ad7733a7359b91654b0303eac3a357db338202f9f1ad6157a05eb61d338276a8da2614df781f986136861dbcf7de7bcb04bc30918642699073895df22f4e72fc2686b9264759659aefdf31dabf464d78c9d00c742850c9b27d5e04eaff62a63f777f3e39e7908ffd767fad45f65c366d07b4434d2d46ed613ba0fd2aecfb5f2ed3bce67505890f5fbeb60d81fbc286b2c7b6ecdaba1ff57a0ecd5ccfa3b1f813be8cd188ccff8557a16fdd70eb7e54ec0a47b9fbeb19c4f871eb601c02ebc36d5ba122b939045613ab9c6257d00e8552314cf4bff1385e5291f3e5913205a4f4290d188b22c617191d3b2f2ec826c3ac36dd7fd09478bdbb0e4d2f87d7eeeed73e9710687f8782b01f100d0aedf70ca0200e1509ac80262a04e49e21ee4864cfa5a3fe169aa8105977d5aee3970c65acb09f6bb7ccbc0f7eb7df10beefe47751caf8e2c338046ee5d1bc75a6e6659e0cf31ed53c08aedde0bff176f08db783fb9fd726127dca1bd8c539f52694b680761b6165b276c901235c914595284d30a2a79d20838c14bc0523d48317e79f548b22547e141595ffd9065b54dee2055a0051f99f136ca8f65f7835c28f1c0ebdda87dc0dbcda337488bc1c4ea05f9fceaac12666de1566e652edb899b9494eb3eeeeeea623debeee6e778bb6bb656832b3563b6e66be328c99b99939bbb41992a2a67104a93b3733939a375a9999999fbee6ee5e59e698087fb9eef7f035ad5cc7cccccccc625a2991e8487412e15862aef437047294f19d8e54bd7af0dd1db62a427e3e12ae4aa69378ae4ac27b2d3fba9cde10bba68cd8f5d32fcc1b62d79411bb90803d65f49c0bbbae5d1a2cc1302c8b0ee385ba3819423d34406b07819e9365a119f8996b218771a7fcf9d7d68ed073b4997ecd43226f885d5346ec4242d3b4d04c7c6d8646d41b62579413bb909051c699035b46cf117943ecd2322d0bcdf4534702bb9080ed39236d149ae91f39257943ec9a32621712b0a78c9e43b54c720a52ec725f4b7272b8bb1d4e9fd6e2ec0dbb0665ed1608e8adcc7831d8b34fc760dcb6560995df074a680756f14308a38cd7bb70a8d76fbd66cb377f1766ee0f13bb211f5c977bf0574a392ff7690169f2834a6d49199ae1d73493859dce00385e566f85ed5915f8e5b77868789ac010a14f8f8f4f4fe55fd9e269ed1a3c17774ce89f4e68d3b62c6b8242c96c4d28169af1c7422ff0f3f9d9bf48fa62d607be15b6b52a6cb34910abb8cab676852de3c8fe5436e3e5e087db5aa04cbbb08b9300a0e550c6392fedf2a7dcc295bdff73f7e897bb6befee9e39f6d835658449fc60181b18a6dfdd6fe23f28e56e5b677dab7eca2d740cf6acad84f3bbbbbb2f6cbbfa37990d067742b95bcb5dc6d3a141351bbdfdb94ff74d41b0f66f7cc7ecdc2102cef31533b891df2dce0f497278a8dd2ec1613989b23acb23467d61d4fdd72d50dd33b01841cddeb3c74233d9159ac1fcdab9424abd7e8666ae3a9f1555fe3bc28c31b5d32a6440853b4b5891840a13503b1702d40e476561d22927a8fda82964d4feaf628adaafb20205b5ff65c78a276ad7e0bd18e6d0cc06d56c27956c32ccee8b0c1dbd4a4acee96863e43ac839f7eafba55e8499815687ce1310c155ff2b890e0fa9ea3f81581e547716d0fd7751751a1562d40354af4192ead45195a2989ff2a3f89f5fc55364656666cd084ab3bb3c15aea9ba0b8eea3a58783b3dddfba29e51bdbe350250bb3d52fd57c932a9be4e6cf05e50fdfd2745bd8a0649547f191e30d04051fd6b88a208d51f080e6954ff1da288c2cd1a38ad24523491f384c91221de8e1434aa4fc1537d878a2086c044927e550ca1b653f775f7a7fe2f0ce3373737372560b9bbfb7c318f450b10658af94438da13d175045026853661806531924c965c3bc8a20b7ee6134268812f48229f5023e446f84424a536620954c10a47f1244ecb3a2249af3a66078a1a88584c7c505950a15abcf0c04b50527d3b4b1cf1049d50628b5229f00974d4036f40351fa86089224ca1a2fa76967882132d1cd8434df5edb48ad0229b0cf3de8bccab96a268ef21c0a594524a29a59452babbbbbb47777777f7081f09e75f44b694524a29a5b36f5bc72c6b3959fce792c235067dffefb32ee37c5856e94b333427ae87d31331c23a7de6da0bb9e8532355fc54e8fb696ac4f550d5d18fb8f8da6b1c0cacda77c9e1fa0ebe0e5d9b78e0f4afcea739713d1029d206ebf4488cb04e1c12d397382e87ebe3cb1cb68d2739ad09e94d5b911e5e1b2c1c00b0489c084e8fa4081223a81eb60dd613c89d1e17754f5be9743a9d4ea7d3e9743a3d71eebd1c274ef680f237d77d15410b0b099153a9542a954aa592a9542a954aa5d2fb20c32a71483ea005152a90420c348868b14cbff2488a20e900d0142769108105124c6095bec88943423a9d4ea7d3e9f43ec8b04e1c92d2affc20c61554583085083b2c7ed346df4a0554e4c0046244c10311b0f84b46981ce9e288113d6b0cc18735e2116943f960cacddc5235b034c6183a2c6884e55baac6896468b09ca3a22a9c501285e55b86068b998fb443c8ccfcdc7770751867e203bc6e7b0a6aa033dffdb18dceef5c87cdf78ce10b81bf9fed8b5040f7a78fad2e17e7b5fbb86b5edfefe5f0ad707b5ce79c73ce3983cc85534239e7c4306c47d7ddf85a9cd735677c2dceeb9a13c62bca94e6c91e917d5ea3f25f3e3fd4affdcfbf6fc76553afe76d5d846443b64af9d98b3eb6dacf63345103a8b1a5c6d177a31affd197f1fbc1348df3bdd7af6be4a8e85e3498ee050806de8eb7a31fc6ef06503daebc4807c3a456b81eaabaf22b1c0e5685bef4f065667c593f2f6913e2fe74846c1d4daf21eef9f6d458d5cf927f7937c876fbfcda08a246dcfcc97d2d8accef35812b82be1d5d771904fc03fabe7b0e90dd79d5612b7f67a4464e8be20c77777777772f9ca864bc6052fb5d182600950ef1542a530ad8a0ddf379f5559a8e79f1a137ba54ed98af521773017d3b5dfcd4f8a91b0cd35c6a560d3ee3f8f79018bd50826e6055d8b6cbb0dce306065128154ba9ee45b28f3b5e8451f9b3cf605cf98fa78761421c23fac7d10a9f3d24830bab26a7b18a53b511b4fb7dadbeb00043cd8fdddddddd156d479e64efc3b39e608b3d731d57e3873824834b67ca38153542c80b5bfda9d0c5ec39d4c3267bec338c73e974885ef4547ef976bc2a4712012f47bfe472a8cbcdbd50e41f371d2f61d0ee97832e521cc30656fdb82e5168060656b9c0dcf5dddddd82e0c1f8438c84b5305a2abcca5e46257b11642836f8c1305bdd610d36dcc0aad5e9d5591d1e2d64852c7693f50bb9a8861fa11f6ecaf839a7064677773f81fa6797068555ee2e440d8a0ab9f5564d742896a2c2eb998661baadf1612645b2c53d60a38181a6d550c41da99cc32ac8ac62c6c1389ce5705c583ea284559c8455f008ab604bed7fa1185a6068bbf19b1050ff8e6f9abb78e842a7fa731662f8a65799a6a1168080d5e6d9c6375218e7bae1baafaaca63b0ea876f76e8c249ed5c2a0c4de31c536a81f49d0bfdeec6e83b1343e99812477a142ad40585bfef1c84310b92e7b2051f809999d180bdbb3b27840f33c0a5b8d463e33d77f7e62f9e77779b80b66f375e0e32b2c730eeee6f9fbb91de75227bdc063b8806c66bc237f10c68953327e6f260d5728bff0a222ce9ca8fc3357efa44ed4c9591c4c4b8bf7f4770266bfe25ffcdbf361f645812a6224723ffd51aca9a3172398c5e9d72bb00648f2226e6bd8f0541ed8cd410ce64c5875b0d6f5d914e07aff05331ec920abdb9ae480d65c5efe0a762c02ae4721855e79ac4acf7a6c6edf54a8cf7789915e0457f4c7da9dd6ba376ef81c10f013739f019a23e0044c1a408264540590265893bc38efe2a24ca30bd1cdeeedbdb5deedde5eeeeee765f76863c59a69d4c2b2c59485b3195bec4bdfd53695bbe7432b59c4a5f3a7de9594edc34ad302942635244c6a408ed332d0b699cb32ae32693229814214511b3049968747a16962f9d4aa695169196612393e9997340f74f9bb32af3908971502afd89e5f74f2d9b4c8fd3b3949ea5543a99b69799152898363285a80e565d61bcbc6c320b6597b8b08abd5b14876a09cb4a28affd5f6826447a14cb4ae9b4637ff4ef6fbc8b6acab0c030d85f1a29a36f2ac5c02d576de900cbe64fd5f22d3b54d3afaae533798556585a58b88e4835fdfec9b4b2bdb0aa5492a11edb462d711e2251cdb3d1f6b2c9b02ac4e9a0d4f476f072a66d32d8f672713afa454687cbc780e2605906c3864ca6fb63f18a7884f2543d3e503bdf2a5996c20a10e810af438240f9d79b0b02bf1f7241588620120974b9cd79eebe7538d420435c06ecaf2c0619e27588c36d881b7918777d777de48284380c7bf83c786aa2e7c13d6a049d4da8140eb754350911cd0000800000b314002028100c06c482b148241a26a2da3e14000b7ea44276589a4ab42cc8519041081163082084000000203043422402004026234e3d4bff1342ddad17a4b2bdd1737d0b57c9ce3b4d26b53b76037053180c3d96989d664d2d132c754b58a2f72f9c4349841500b28e6c6403b82f5aee42e8303f3df46ad10b8c74fd324dead27d875f4bfe35765526c3f8d1e006021da757cabf04299c9e1a26c3d30b35ab67d27880834e3d8e1fc51afd9efa9f3d9755d1045c900e3e7f0a8eb1962ddbc294523e28b2a1fd8e954305b689ab510f542466f0f8bf847fc414ea0ee72c47f725819d70f5435384f52c0740ec751c935dc848e4ee06fa2e5a3b64f8ed9847ff5d803a5a79f761f7a117bb50f4289d20b65ef3a73ee149562213fae0c1afaef0cb5f4116e44aa48c473ada9afc9ec1713049897d1b6d3d68a2bb1acb8a5f44ddac37762556af915105cc3304d3d1b0525f536e618e63fa48e68c969b903ae4934024119a31446e77e006b5586326c394a8530f0081aa72ae2117f70d180a77321d8985e25c84e5578b4b40b4f1bd2db5f108befc2abb682050b96b6cafb1757e11690b2424e272a2da2e840e4b61b06cda8c244375fac828e2435e6d2d093506c4c3b5e40d509c0a98fd8ec47d980df2c99cec2fae807c5e2c7e8fa2125569f8fe328254913ac521c48f329624c5907a85a081c8fa59df0da7a801bdf5339921a6d6d9da5ffee8966433f270b5e12fce292d64c1900455df6a46ee91778105f1f2fd1680d242f5ecb5b53b7d3473e3da0f241f7abfdcee0dcda338b8ce1cfb81b5731471b0c8545fc061e6653a08da59f54493db8a23ba761809efa91b5a3ffab923100a88432a22503d6d1b78ea3c012afc987c67901ac5feff8cc7fe1ada771758f7c20eb60a64e8c6dda492a03111b683d81174572afec090e9c7e40404c46de82eba6614c4538677d119d8137685151f2f92fbc6458c9dab9589675da2813c3ba51c7cc5c210e0e7ea6e09ce784efcea347fa421b4fa6159937a92ea1456341173a04ab2f30b74114ee965b620c36aa6fa3f575dc56ea011252cec3fe3373b89c1e47f36f50dd262013970872ee0494e7d7c47417f59551966cc4c8fb27dad42a9966409f10da49dbd2a0987c16d3a6115f52acdc7c0e685519f91d320b723c9ed113bd5691a907719c2f69fb5c6d9d090902ac16272368e7a6a3de98f0e43394bd976c720140433a46e236f5f001c77472004043fa4faa6198d28a3af16e1af91ec26936e2983910476ad1aeff2e27d9cfd200afaf6e69a07edb60e041752d933bdd1a113b9e49a02d333fb4f46e12c2108a438b93a72880a37ab032f3c5dace0600746fdb50ed15b1ec43e11b5e9cac8ffa6be60861cb5b26e96269801b4158b18bb69bf129a7082a560937f846fba14bbf016e6c7e5fa8ca9eb698e293f41c20f3c8f685faf9bb18a3e6fd42a9687753171a40ad5db21eba0cd60336a8e677f2a9e66266c710354d096fd20f8c97c790690127392d31bdddcdd6b7b4fd1964364176b15a6e2640610abaec023783d021f91e51ffeb2c57f1438583b4f24bc8dc029aff859d1e4d90026022c72f8904d4858c81b009fa5464797a36b611f7da2e19ddbaefa83c1ecc1c44f42dcd1284a7c57383ac7e57da23f9601c9c6d8e71c18dfc2b0fcda5403a2128780b481ed7fa18e900ba8d9e46f14a7808a321b319fcb079e6d283e115e70c0876ed5a14980b8bda82dde4b3f638b49eeef1a7f7e844c59c024499f95e31c364ef6a9ff55d5b3a6e3999d072f665e7e648a69427b2c744646c4d50f0d2da2070c79bd612f92c4b3a6f734fdff41b01704f8d3593ee2838c70a6b4836c911ee387c19703587ca0718e45cad3b0cc47c7ef8e51ff556cc26b6edc56da3d2aebc1c3b872d3c69412a680c7fabd2df170a5e5deb0b25eb21c4109a0aa2093ec8681e17b81bcd1cd1c5099689e72fa5cff33e101864e666c487f3d617e015404d505765c49af123c760c8c7a773c8dddf8705e83509c2b52015e1b7413493d3fabc3a4f5d47914b058ebde4e0ba93e20dc3b786342838cd1e4d1f06bd31aa1d5949663de0f19358c120f598636d4ef6dfc64bf464531c60b37639a8f984d96166a19191beb77daa7319fbc2c428d6ed055848e4d28735527d02b596d7bd755f266390fb83de8e3e7b51cfaab84f371bcb25739a23eb6129597a4ba7d4593cd91dd82b11f932e07f610b36f321c9ae5a40a3bebfeb06886f7f3d4eaded9f40165b719794c97990c3daf1fe6e5b21531942ab93805fedd79813d8709a5ef1341db43da6e1333773e08b41f50508119b63785f319395acfe4e89cc80aee3d1a3de8aa8ff5ded6d53a7448cf763313f676c1fb31541e9d0ddf1147320f5598c606645b8b9641ed16c514f42aab8ce5210b881089a0ead0df8e6d67f5b7a825cc932b0dc5d8cf4e544bf333d9ec84dbc914770b5021b710867cc936f89bf0321d409769545e1a0cfd8531a864061c605060bc2c86b557814e37165d391f6d6c019f32a824fa4fd1c6eda03e5a4fc6619d3f1c231525b143a2b8c39d3f9d42976ceadbe18613397f8a56945555887a03a43192d34e004e4a1380b1b15c2a911048645ae1ef4fa1577cd39bad11c5a15606540b2f051265e47a581c6980cbd0330c08dc8d9fe8bf915989c2ffec393a80640ad90cb350814b031fadbd7f54d32334aaf645d97053b3878f3f858e4327a9d631ebfc0f95c657f991610141b7dc0a2ce2d6789c2e3291218c9ae98c92a4163d7f68ff988d6c28faf0972deeca5c0b8f435f57b0169f4b9832b04235197696a69f422bda5d9699e69166b7d76434a6eb706efa729b495649cd7ff6280c7d180f426ddeb27aa012aa063970b1e4c1bf7d6e0570a45b04adb895e0136697ffbd087ea3762c9547bb7ae0d614d0188ffd3bf0ccc6429750811fc77046cee01e386e85ce0b581a86361e1a3c80e5833dae469710bc7504a9f858f570cabbee256ec601af5a8814be81a14d3aaebe7e2d60a70682e91b4be6785610422c226f90f722940a21bab2632050b5bda0a12069f9c56075ad4f1a72c25a05990ff68e19ea7588ba7f498de5db52ba80c0725c6ef0280ffea302835058fdb7a173ee09f7783511976593c627482ad6019687664c1b3d401d9255eb5bf2550f02c17563154de421773fa7446857dea18a880cf89e1808b10b68bf4273e742e91033c4d87df4ae97c1c2bce4b347fc6884b241618b0ac492a90b673b4f7f5d28b7cf193681083a2499fd11fa141b6f351ff50ca559a259afa2334e8e9d7ff624ab93e261c198d5c43352d04066954cf0e84b82053b295f9ab985288185f2c80e18cc71bc0ddbeba9a727c4d02cc9287af216159c9eb64546c5e1945bca29c4f070ab32e378e87ab426ba1492714f98b14f9a99b433b7c3481afddc327670b742d94d0006253a9e8945d132521c4823f75958cb3668350c432201971e90df46c0a253a8a6fedd737dc296ea27e710d862ead4efe95ff745310a6333952854475e8a901eae169f4bf3335601916d72edc83c86a93058d067ad0fb3cb062a992932552342897c7751cca7400a768f4ad77963b9850c1c68c5559b1962bcd0470e4e84a1dd3eb9a4d275c9f0dce15bb0574c698166322bf2fb9b6555b9e7b1bed15ec4fd9dd71842e7ca0f13a2f2022f848ffcb873aea2f51ed1ce40205858be92b036eeee6136cee051a6adb72c3cd420d71258f28411194a542644cb94aa4113d21ea90cebe4748bd1c81f7ac8b25d11381f8de8558f0b76cb138fdb08f1c0f86607d4d98e4a020c5dea24def14fbac24726c0c0fca234d991b2ed96454a2d48f89dd078e8370f34a09887553f837f5a4fce7940c491f43993c90385d84060db33c8958f094553bc62817194564aa301b2f5141e6d6d095671dfc92a780ded0ffe98c5f6bd8e96192583c6236f20340cd909bac1ffd1b2eacabdaa8ebdbba9d7cb485cad7dd77e195783da3ace675b754f98a60b9633f381dc21bd4ba9ea405ade28fa775d95f3e2887c7bed0a5f5a0a8068febbc93365f17a06141c2961bb2bdc4752cf43d12d003100a695b23ba87547afcdbfbf2fa91c643ae19eb58ccfe0f2a0ba8921878036d6b625a834270aa1b319d3cc0b13759d15ea1bb63a8165ac5d61e0172f85479c2db0d46473a486a283405f442ebad68962889232bfbb03b1f0d2326a2cea1dcdaf0bc935572382f8b6cb0c115e51636b4642d4d43c3fa8d6310dcb8f315264b0a93a6d2fc5e0767be541fbb4b8d69a64340c4c434dbeffcc12cd33638eced99befa8d18d56bd9325f9ca3bac97c5305bea32dce27d735c31c10ea21000b2b883c65673770e91024e8acef8110431e22f6e00c8f2e80f2023d7ddc5a6467d7a6549ec8f077ce032cc0328fc5bf68e806315423ca6b26f1c8c479da7a2adde982f3b6022cc2e80b1517fc5a4868fe3813e0089d56c3fed0a061a5a9d81930c06051dfe6e1f9d1e01b95331483ffcc3fcc605879c4702f963debdaa2792748cfd2589f6554674ed98002528f5125f357769e8be7c82e6bb61708d44f63de3196300e2dc505abb4cfbd8d769e7dc82c9399b2c273460fc66f1bc47badb2880cbec7e46bfd8e86d89dddb16a1d43be803b32beaff3ca3f11266fa937c0dba5787d843b1e2725a581b2891ea3736e8c9ba3efb6140dabab523202498c13552cb0b97bec542826a336ca5b00c7ec1ab56da0b74fc76cc85facc047c4603e05cd30ba343a206982b793d7058e7df0d8f154487a37f220c5faba7dee3a7bbf1bd7243d14f1ca7816f9fcf0b4bcf05f9146b419e80950c34cfead05b3356dc2499eb460fbf73fe51abf181f1bfe6981ecee544a0992bcb168266e3720109586f82a3dadbd7886625bbc29eb987aaad8e2b7feb11d1f73b5628fad3f72aff57fdcbd75518647bc78c2b5bb0af30bad0ea5214c07a08bc8d479073807ffb6237fcca0300d16e5e4f4480c7e89ad6df40ef197889f5d4c83b0ede4a0edf793bc75a20c33d7529be7d3962d3abac63e11620976db363a884383f2868c28a329e00b37ad33b0545d9cb0bfe892ec155d90ea5a1bef6a0a81ec440403731c441d6188d227dc1b9b1b98769b0e22e8825e1f27b2c061525dbab28fc0271a2569be1e36ed989b21c69a0bb72230db4efb59424dca2fdfb10fb75c222aec9af1ab08e413fa655e2764e527b67abd35105bd98e8a10b5a88e57f0bb73412b1e43fb73b189083fdb694ad805dde0c4d119003d49f4753b3c7bd5207726e919f40e3c8b7e21286c64958e7a6e12eb4bf231cc739cb8ade01f64157975661abceb9a5c209ad097733b096751a6cc00efbe3dd7d440d1e42a741bdb34efd36a000249c1ada83112e5af8b1ec548770bc3c8a2941e9bb4e7a911bfab153a1e4042c892d602ca533a9445b29265062fe4d35129ab6cad863d971e2b370edf0e50f334e52760509146d79d9a12ca041194a8efc9102477b6b074c7a40be7e3359264d15a61654299809edb321dbf61ca72f9ad5def2c5965dff61710eb0e2434cf9d7b28ac659a055d09dba7d8dccb05a80a7ca7556f17c50c8379c6f69eb52fcf140f887f58374ba387b354346ee6957a356b75115b1911aeb547b4a56835883202150b07ef66b3d306fc5201d5943bc0305043ff7b8e9ea0eb68f2efabf927979c69e73df35d5a9c239b72a4c26566a75d2977b07280c315375380ca2ae844d0d9608eacabf7577791c3d61e980e86c8581cdcfb64a9ed9e16369b1eed583725fbc45230137d37ecf00ef8c6b46fe2ca0af1c4ce05e7ac3edec63e9ca4929fd26ace9ed2b78f00f56d4861eacfb7efeeeffc84d411afe49f78db383788e76041bf9783a18f2c671f6d621191ef5f722694deb3f6e2109d7b84ecbeea0a1fc502be1f03e20003cc4e24ca28567230454e709d9ac3f9a83bfcb27503db35c1267fde3824fca02f7ea59981e0b1000bdcfaa0780545bacde4de0e45afdc1bc3a98bca9978ef22a3c1df20a57d91de04345428d35dd33a87f7d01e91e25b4952419a4613a35401685f3bcaf4d03319ff82edcaba01d0d907698b4d5711a37243f5b23e4b0e827cfa8341efa5deacf334e1554fb51deedf0ca0b4ea74b62dc96531150acabda347f5662dd184dd39de394608cc6548cd75abbba6737416dca08c7dd55ade526bd59dbd36a47cd573f60e1897064c0507c46bb9d5febbd6322a8df3e5b5a01c8be99f5a25d67abff498e8b6de930b76b81e365f431ddea5a9f56e7c4f49171eb56d54b55cbfa0b80ffe69b827ab9db589c286d5d29533812974285912477975eb0f319ff7ff0eb220c0fd19100cb6d6c72b131c2b3bc55a8992aa1b29c83c2c5185066486ac90702d45203b742af6bd7c791e2423ff5e82ea8151d5f391c54f3e99513941abad0f6fa48d55294682643457004c88880a8c2379effb6c1b48b622f2042bce116603d4cf7171ad751cfcd6206814df9ab926feb2ff3eda0b9c0968e55e1782c7b43d25b9c40bb1a7890bae963485ed896a5cdf507bcc0cf5a037041e8eea28467a1a754ae0d0503c0884920a4cb91e9ffcd53a3ff9857fa0e3e605de5607d1365971fb58a702c198db4c4bd20757260704178005429fa4a6ec0b6fd81fe702c8d5a3c94c1065de26663e0c04b3e9ee0b0391c9958d80bf89610b0a80361bd08f9fdd4fec9d8f28e4b975f458c32056e37c8d1ac40ef017fbe8868f3214747b4276b45b8078ad0cf13f8bb46f721f08313520084b32355f0aaa4b8a22b2a51976279690268cbf3a671d2d633fd414505d02090a960d398f1eaac15d2fd9f1d0277342176006b471f2ea4dffa97bbbc18d6a5c3dadc8a2e8572363c721e0d798a87c5de4c5c85c6f75290c7c796ab44b1df1d4479f15a88708f8c697f2c92cc55582cb2d7a307d5c7eae63911d2cecaf33acac69ce050f7c73bb1556c90bb70eeaa915e78ab4105c801d79c5fe40b73194cb3367fa11d134df29742588292c20adf934d17d23a5635a4ecc5048d5147faf4fcfd918853172abb0db654556d888e80dc5c4eec9f07c4a8d6c4040d4407f0465ce93f419e047843e558e40d641ae389fea7a319dd05f0127e844935aa796287f74625836838b0e51b09af2c9e7616d4f56d2d111f97a759f5731db40e4057fbfd7377b65539216f2d5dfe5320d69d2ef3728b32b9d23dc8177a2e1301a07166b2eacb8b05de6530b5da9873e91b939907c03f46de7148f184ed2ecfbada099837c50ce5640c375b7f1c0fb49aff276504ffa163cd40919c3c265385694ac0a11487de03444a844b2322963cc1e1fe18a9514ec1eee472bb8e9f5df498ae6da04c2983c103f1e75180f18d2c9e238d5270b46c0319c95fa75331144252c6ef9f94243a5f6a26d37703d9b76824bc6f51754589e294b5f778799de85b36ec753c140918a92780821ddb51137ae4d9ec013368df6d63fa2a6ad1aa48756be02a1ba1378cfc9b1baf1d48e76b29b8044ff13a1cbcd8d75544da10fa3bb710b6689dd14caba7e266de36e15ec116c9df3eb5ab0ff0f0628bff3f109d1806b4e3fc6c19fd47ea5b4b5af3a3dd75a869afa68e708c060884f74e727eb3d3140bf5a8e97fc54c48f863b2a81d70233dd01669e094a27487073ee30321fe2f65194d2cf942fb2fd17a42a26f8c2c24a95aaa0c5663b8e5e64226b10aad8c9945e3eab1da43b15479f23534da15030fc15e80c1bd4999e5173eebe399c7551787aebd54529122448c604b1cdfa98a761edac7360e324699bdccb32476bd0220d1cf4c39eeec6afe08b7920b42188092de64c4659129fca9aa5269abf7809f29658f6c285474d5d078e6a9dc8fdf01061b59ac327ae1a1416a6fb7abd6ad31c828718e650bc9f38c46ca6d6790f586ac9e0f17681eeb46240017848ca410855c4057e11b24d869330a74c2cc8b0f02c2c01b025aceb333d0c6b629e3d2d5742f89aa25c22bc142cb54cb89ca4f955477453273249304a801bfdedad9892e420384a7297ad294c87feaf038a35790e8264431c25920d0ea855aead3a720aef1b6f909f3e1d540344cd6ad68b5456be673c03f7519c7b948180d63bfe7cc94118092753f335c53d4427204eb9d838a9797a5dc57075b8d9d282a6f7ce7cf67b7aacc06df381dcf6f127f1b39b8c907baa62714dd6877cf7c9452c2ea54129786cfb450cd149dd32c9c0142b1f755825d8126f4958370a74c83205c84da0b7e386c4493d57e1f43c60b2007801df55826ba309b5057287e939a7dad295d155d3a15595c272ec0f91a57958d000a8851371a411eab12824da11128db484f7def72aae309bb06eee222095c2ecf56e61fa74f40fe74af38dc5934277ad4630f2c6825b12bec9ba93ab7500300d542d1dbe99f7e0714066b75831e6c2dfda1885fac645b6b6282eeb6fac5b6180b2846610c9658b630059b64e5d70ee2cb8d879812586b9880a09b77cfde7e10cf9a9d2c13a300042ad8f9031857efe7505242f868744270c0b97383fb5ac18292b920dc40ff9862ee2d67d19f78f5ad14982c39213d01afdbb5fd9aba10c27970581b4e17bcf74a09d809ab3d46843994685c22c74a01a77b0dbf141b3d8c0e6f8c06122bdab52a38e5353333a9a464a43719eda6d6ea949af47756b0c5c8afb1333e15bbd86df9297f1a2731c6e0b32d04b070d73b466aee4d2610a0afb4fac4e878e88ea074b5443ecef843883043b9b8ac6a927e484de39061640a136ba936de23b60c3f8343eb9fbbb71fd421b7d2023e82dee4d3793a1bd42097ce075d75d7d9075cace579551ba15d016df344335afc4ac053ebc6d3d74610dcb85e4926a45cdfc8918069a3710807f907f4670b8716be08ff895814755ba28cdc1fef1d00290d9f1c85492ad2eb68997e083a1877e51bf4fb6d5ad0704b9b6802759b2f52f42544ec649386bb4afda2c09f522d6f04ac3fcb96b7fbb73039fe18aabfe65387d5451252a40e873a37dbd315a7a2a7eeb1c621fe07eb4a9abbf44b8609641f7dc08fd6abca0f87b0326b725f19c8b2b0d6bb5068ec599bb6d2627956dd79512cd55f4cc20999c2cfc87c9085522822e2b50662116a76496b727aee28dc4ca4451d97c8550b503f2863aa588e2aeb48e4630a07916c0b16ff03fec04be23da04318d839a2273ce006bd975a6ed0dc299bc28bcdd20f6c1e01bb046cfba9bc6f64a46312e0f3624c5ffb2be4074766099367663d4d396f51d216465e364802f3e15805e85041d78887613d10ee98954b32a1bc87bef2a7b4052f6300dcd6e872592fff8f908de0e3e350c0a283ea2e1ec137c7154a4c1cee182055e5e08f0e6ee77f73bdae2f13f809f0f934054fb4db58d938209376619121a2680dfd65f708dfb624bad8e957068ab4d0eee623500f586c5edb57eb14b10e4f64c6998458ead2b51ea0cd8abaf8c09f31b0956af94a291d80c3977addc54a9faae3a1953bf592d7e99a86fe079b0191560cf6d2b037d892fad895e751912528b1c4980e11228a4514e3e4b6e639e59a0b05cf878ee0bf10538fe88890058c6324570f20fe4b3f99358956fdaa16463872026d1b8967e104b73199ea0f1dfb753f84149c8134ee28f97861b952318b0494dddd708ae72bec554bf4b4cf9ccf7a01830f4b67079aa756536f0af2cea175a0dd10de86541c598cdb9d586ce60151ea31f901e0f8041a730b9bcebf65c0ee4c844c7f52837dd44f3cc3b2b66f06941027d1090e20b3bda7cb6813c6ad6b10febf84af0825dfbb6dba5ea7902380d17e64097f9421d0687f7760876f287d3bfec8842fd8f08bb684446ee05aa36e0b0a5dc46d10b4961f8908ef5fa129bfc1a8c33b2dc11587c001da1b00ffa004820564977f7e9320050918362e4c291a4b6b169809964fb15f6023d7570de6fa863dd0f49dcbdc6d2cee68cee5dcd6a0c3b99cd5771464d6aaf3a0d592da3b83f63e839e81297a41ad47ffd82b9ee664c31065b0893f452fb41574821539fc465dbdbb50e1654f486d4214bc02b091c8d8d63c72421fbb59bc7dc69e36a689c18af6d1bffb471677ecb681e11a03d7a6f480641e65e056565f0bd863e8a033688a1ea8f52874f69266134ba096e361da85bbc1a97a80d5941e20f3946fe01ca62548b2409d84c9f124419f0bde959681730ba0f2dcdaf3e806e9633de2f5caf791b5a93d80ccff29d1bd46d333a492fec7db4b2605a8a9de2012374588239dad848a2b1b39b291d704703a50f522a2758e32ffb99f81c3d08420649a98c9d06110267f2dbf43f29b56c72b75b2aef0f26e96df466174ff7de27a6a6e3b249ea8396a0205d2b434cc768406179c306ac4ccdc61e91c474133e19b9cea2f761f3cda640ef0fb70dfbc810aa1ccf40fb33d32d31ecf200a7ba0a5e06ee1ad4bef3e3f82ab52f34cdb1c06870d0a4296dd8f2d612fa4606d0c2fe78743e5c51083bf98627e159b0f700d0adda133a06560b16b5989ec86f3a8fd20ce05a6178b33bef03cb161e4f4f190e19b96f7d873438e24e5c03e77dd2e8c392b9abb945c143dd410c74270af753990dcacf6485ce38bd33be7a27812a9c3044dac9026f90ce0bd2434ad90cc42c9b2c384de84d6b30124f0250b90f09ea4c7da94f909f86a1280cb9b0bf7f766abea6e2428afc210dfe1ca09acee2ffa38aaf0010f1721dcd047fb4c8e6965ad08e9d89c31ef9f04c97e02afa2e80227fc02b50956e7f7f57df2a364c88b759b588229abd298be6862742aa2e2649a4ccc8263c3fe5900e209fc40d060b9d2c0d87f818a6fba7513a553510525d164c06c1c86444170472530c911a65d0344d193021b7efdc8fdb3caa72669429309d11b49505d4a73c624cf2852bc1ed2cd4bc958f2409fd890354919a8033c34d1dc07055f663ed9112dd60b5ece4e006fabc27c8ba66dac5e0ebeda2749d5e41b83f9b34f98a6cfb2cf872d42a18d1f9bf9d8646206ffb79a5723d10ce7eddcdbb8c125f1a35e569c332d1f1029b2ded838e088d94968ea0b962680fa62b8676000040a0e66106895a92b9d5059199b7b9e7449c46abd582fce218c2b8b841fce2664c7e2c4983c90098b99fb08f969224e40f24cab508af01e0ac22a331a1a750097959200f8fd63071d0c63416828531bb15940fc412d580efbf1f3289925729e7561629208063bf6500713245b518369b561b39895325f07560d03b2fbbd3f3cab251cfe102a1f57a35f4a34892a432d30b7f2ca90fdd948b7613285736bd5afef2dd00972ab54cee100bc4c7263667dfdff8033ad0c586a5bd729916c2a0bcf12eaadc0efee4a21ca1058567715cf1860a01beab3d2994a4f90ac805cd9cbe53519d2f3ff544315bb276cf4d951bcb970f9980cefc6fc5db57c49469d2bb732e9cd93d2ce3f7811589e0f9b241d1d3da828634eb8c8f362ac05d51a16725886d166ae35c5177d0a1f33483baf4132df0a68f667a93c04ab1d4c29e2868986690733dfd1a48c9c2355ee752fca5093a761637863840429ed1ba827f32c23fc363b6c98bcf3cf13797b919a3441642e5cc8c7923722ead321f2ac132b5d6d1f29cbf3c1744265fb100972233bc4560e9b3f7b9c38b95be185e835af219e6212428a031ca6db9723d22f907cfaf2f672ea0dc2dc1fa6f197cba62a68ed5957a42e46f339ad8d1088b2db1f3e93ebbd4324ed3590c7fba2a80ec8603cf3bc3e1e1c78e7a233358a841177030abd5fa6c3e77a808d299572cb4e260fb3952ad283960c7b890a70fc8db03446251664d2dd1bfaa318740c655bed8438952ccd508b68b54ac101da0f9eb3df8d80972a4dbe2f1601048fe81200a875bed91bbd7f1373322ae6773eeae3927439eb5f0d8ec493781fbf572ae1e574eb1daadd333cf6832dc058876667133ed72362871d83a6f5ea95d098f8b74ab39e6ecc30b9d625aaa30ea1a7c58ae9566242d5579cadf16c878cd1a4d8960e1e5969ce3cc98de2979aea72aa85e5bf5ae6dbb20569956c59c58b58ed5482b3f162491705f0ac703ea4a7f832c56727f953aa94297427e06d54fdacf303e49ae09797fcdecafd7614b789bad64e0b1c74b08043911aa11578bb5a0e25f295b6fc95aa8868cc641ebbf65fbd53880ae7f04d8d08838c503a92a240bde310466f843d5f31420b2d753da5172ee2d9403fc6dee74cd04f44fbb649e13140c69df65ec5f796b2b9a05e19cc5f3398fb9c56bc484b5901aec63c93b938b470d67ea57ee50bb250068df59f98c5be2d936a77dfcbd88f19f236837866199baeb05232b56b0e618b7840ff512f70aab12935a8076728d78ca3635260c24a8d7eaf3fc48be3b20db2fb7ef9679b199d385a3ce20376cc0976b356d0cf5674f34e185d9b9df3bfbd8f211a450b5f82918b211a6a871783cfd5f57f4b0b2d2aa310fc8a9ca33e8ce758e4e28a100833536c949b71ab4f32ab01e2bee1c54b62c5de740a39bd985f093fd2bd4a6e4e0243cfa82c42b08f778d18d08e3fc39a2778d1269be34d6226f4ae29cec5161f4510c77b9e53b9395faf839d233530e4a236230b5aa4ec74d3e2583553d06a1a4481bf30b496556eb0ea07b308634f77d1ca0dd9277f0a95691cd2dc34317016dd81be3615ca4475b87563803487dfd119d1833bcd4548d67f7da7cf2d76d11aa16b97befa66ffa0589e144880e6c8230efed1dadf84e84b5ddb7846f86a16219791129457617ea5632f0c7fcfda0d9dd86465c2b52933402469b30e31645ed92716354aea9847d759fe484cf56c64e4be84f3a49e83312a5db3c64280bfa159032a211704c0502c259c2c8f5a5f2f40340650e208c716c698756b085bdbb4301f941100eb1353ecc7949f3b103ff64cf19167689c05fa3b26fc00c7607c4029dfc110d4d9c89cc4cc469ae18c90a86860a84133ab40b80e7be25ed765755106082ee516e5e99a633322c9479b0881a2697c029d7be2178d45a0a2f69691398d36ff3ebee80690be06d2e9fa3cc337874ea02c46bbb28ea9c8aae34b0c49fe057e20cd4f09c325734556f3c0aa5e576520c03b906417f18484b94de9e0c144b9aaeacea5e517312f7e017e39cf62b5c71667a196d581474ac9b14c7bf036aaf257580af33f3e9816f107c842a90ddadd3d302dfd8fb372c2d926b19148d5c122213eab6e7258cc2be8666dcf75de96f68414a1233487c32f754f88840e7929ae84689137d2c86a584b997ef4abce8e41016d0694f6712fa70103c4cd2ccd3895c705ff59fc5fafa70377550661d4e29ae30c981b1b015979b06fc7c65c56f75969cc4f7d0468f17fc9407915e160b39a3fa0d8d1f1f2b9145070349f4ad6b58d9e9ec9787120c12521b3aea3e195eea276f194439c5d0da7a3b871f50ca91d276bdbf1da448c668673b1553df31947be995c124c450c3c912f9165e8ee996bae78f05f279b80553228fc6ff6a04b19f4131d119519d204cb57b9a1a60edc02143e94c02016407161a9078905517e0001006e411417936a2016a1c801210825c1e89b8123d3eadd8e28440bf5a621540a51b35544cd9bb4bd0b582678b24584563f7c3226c0151cd888e16c79a2d4fa47a2b469919851259d0c89f5beb22e5c10be9304b1351bf712433f72ae181397452001c44b3cc18611625ab29a595067116a8bef3fb0c7c64cd8f202cb03dbfa0405c6bad3ab86505f9371829b8252a653c4319339820f0c4fa8e8011ab2a2b0c4441b83d589e1d351a04210e2ebfce76e67baadfb6d4dc030af2217513b59d4870d17eeeb89f2e886187b9bef20c1538f0b8701788113e3fa278d634234e847278363dd46b673c2ac90795242c07637c0f77feb2d5def41dce26b81acc86d758e1ff132ad710df19a36c095dd8ed9ccc9270379e8f67e8aed06eaba5adfbb1aacb7913274f72e4b1ab8d6b607486073254b1457ed487057db28875dd6c1aad301b14290dc846bc91aff9f3c46f7072942589679b47eaf9a7af076195df7818eaa572616a7df3f730c4e230fd59b585f7387da869e67806776634d94f0ddfd3eae42399feadda8e4e9475b02f4051468bed38bf68e05a8665ad6d0ed0de9753d761b3db75eab8eed52624f9c1c1bf6cd4b1fa859d90941870fd43d4049c197804be00112c482875e5b4fe7332436a83e1765176ba66fad893ed1644b4f9915673705cc6de6f831bf2f97fa018ff0d8d93bb7b960a3a3b2740e780aa2197cd35926a93cb1196977797419ae07cde5549a35f47953c4306c2340c69cb5802c5d18251702de7d78c5d67c32d86395d1701205ca13c76cd28ccd5c762eefc9687ee3860e67324d788f361345aa6419b7e757066fe924e607414a590c7bc85091f1075f4119748e4901ff7fa44cee3265f8853f14deaa005e945c0578eb4790d3635138cd3810dfc49f09eaf4b364ab5a96f19717a6d922100a6c02953080aa742dce4559416fd95fc5461eda489a7bec9a1b25f56ba3c8b50ffa3a03b7e1c95299fd98f6025d624a0ad3f52b41a0a5acb9d4b1dca0b59d4b24da7f746be4c2c18567bce59925217dcd2ec19e5c0eeaa74c7826f68e9ea3b5ebb71920fcfa0cb06134597059c04348c3c527b09a6cb8d704a97e017cb77f7f01f278f53492455dab26dc7035a7a64392daee42b70f5484a2934604b6dc9ce57c5e2359373b69d8c45a0dd8ac9ce3170cf594196092acb7c4ae1c258244fba431a0ca9b600b60c6dc9465066536011746964db5fde2d1887845edb3461286e8c02b63663c7a49be262fcfb40d511b0e8a5327e4cf332511e860061b201fba340cf81915a3a68f71899fa806fa71a34fb2d6b03619e65b5c40329f614c71b929010be41c6d3c53e4163a00f925c127f7624eb110c7a816973a9b8fcc2aab24e96915988933779e261ee5f2eaadba7ed4ac47f4498d26b9ebb18e0cd970d1ea624f11bd6e6c2c549bc760618746fd05a3faa8d13e017c63a1be27b9383a1b0306bb08c769b7fa91299498856b0a78975d8910ebebe87e9ad12d2b73d17182ab72b892112a59be08a0c263113fcfab52989828383cbbdceebb0848a5a7f79cc4c7a63c15d91b100bc858bb6835907fa3726f305770ce8ac8aea6846733fda44372c20bc68dab5f9f75112721ce4d6ea44340d9543e27c89112fbd6b48da0d893a3f84fd13f8b065c3d1a25d8f81a0318e9f58e17c09119eff1ce7cd97e09e6adcb7af05c3d92f12a028ad2cde390aaed814c6c9fbe103521304b940efb8516d69995fc810a097e76f40c9abc74a82f99fc318233d70d5bd9d6d65a6a63b1c621939cac97f08783a5dd0c0f71156b31e15203cfe27b951c112c59fab587a48bfb58ab1decd537df85f629f0fead4b807fa8b26565e567e8cc7809a4aa360c4cebc28eb44258bf6b681ed91f8f751bd6448ddf66c936bad78a9d919c0e03937634ed066889e2bc999af1f6f09f0311cba505112e772f6df1f09bf06cf02bc77b86c91fc138b99be641177857f667bbd2d1327f20697b9a3ab2acfc58197cfbc12f63806bd9a8ac219dab154967e3a9a741b84ea74b04bbda5bec1a5f6ef7f0ef49a394f272a9b7492f4f603f52e2f9224e149bf590d9d010b9dbde96297702c8d35725e38a96a902ca1b3bb3a98f6ecee6650303e39b34d5493be53a394f0f539825b4d9a3ca27e2bba605bc47a01c96830d4497582423c0be93e60a6e0d9ca2bac27d88912e05a057acb53608307599374d889eb6ed6bc97ea7a3cc6b7e428ad631a7fdd0c8d4550818ed9596250a9dff03af4e4153c384ff7520d4beab4217406befbac2c77020fe524f4d4a0771c0c7af5f6f206624ea20581b5cd5df7888d1b7c99a101a7181fb02914bfc34187b6ca91b31b45f73ee7ec4a46332a888df9a1b05cd8ff5043dfe4ff1559b46d05bedd1963e8444244fd5a3e6c9274a3f96939d94c5b5e3c39d136bae25242eb06695f30b4d7e540ae06a423630ff2cbf330f46949f27adaef10545154d0bf50eb6a4321170802ad990618c313e634131a6d37b4bb0bd334cd4067b7df07365b0cb7f2e41516b66ec1497708c5b1e44bae4d9d10bb656468b687a477e772771a3d209f569097b4487f03103381db142987af96ac7c7897a64fa78145c2c864bbc13dabb24ef84c5825cdf41e24a6cc0141f0eb38e01b500b0df3480469b59990ab5c9e505316335073d94e4d5f6c569ed7128ab0a871afaa6d8b5b0aab5d9bddb595e14e9ac8b8aa6659554dfbfb204a4030ae3a3e8000c753c5eb16d1599315e93eac011f6c7cb44e5040b1230453f0abf7938ada3751f11abe1ceac5c42fd4f07ac811c2aa669d5fa0c527000f98a60d0d0eec34f51bc985182b983827ac5b108fe8a04333ca2b490d1be3f325d32862b5e81549c985d33538da8fe4619b7c57262e349edc21582fdc3678df9929de30eea2cfc6dc54e343c5c3f125befe55b7d6c42b685154f0e20705610691dcc697afd1900ab0e2ad6c1b5ee65bc670a80c4256c1e4d358ffc9f8e76f5f337ec77e699ca69b49eab1613dac587854e67d02c95b51a967a4227747a497b53503faf66dfbac1d155eac285dd7fb438d848a5a3b1236f6204e2a3bda1290ed22dc7bacf11917ecd9e986d86a94d685d3e37415af1860e200cf3c90d246f66557b6be2db35e71c751b0d1a4da39c8ccc32dd77947045107ed94e768364e9ac68cc65e1b40d7783179a50dbb863889685ab44b80aee990001b1f1735240dd2d47485d6ab0cc552bdd4e6f0f6ebfc3791400ff6e1809d314efd95dc8e6c930f5ef162261ea52e38f321193cdce66d37a458a6e77b12603584ac83509fb65434798dd7061bb261e2af93d469bdc6cd2760907dc205948db603b95c83e4175eba93a280532c01fab2a9200ec0cadee525f434d2160c6ebdf0dea52f0d6e3905ea8b67ee80103dbb476d9f40a94b8f004b7062bec42b22fe0e14ab43b288ed460702e6c7d9c7e46426d59d29ce58396315d80d5c7237bd16f124a2342ca05ae424021c45f779a94706e33fdba733e60faed293da55848ff0be38555ee1676467f6aaca3bf5df8899e0ad0562d5b6cafb4677590febc7f32455108fd3007693d310c448d0356950d39ea153557d3fe33a1b211ab6c70bd318cc8f50d26087fa12d6e0672ab41db26cf7bb85cc1e6fdc1fd7b543c8a36b75a22e03a25c6ae54dcefe44aaac3646bde442521bfe2031ac4140b5d2a1203d9b902eeb3bd58c2f1ec8a323774cfcdad32c92922dc2de3b0f63f1980fa6de2399799efd163e23e6955283019f07f5db58caefadcf45add8126c45eb54291f7fd89a6a2bdb07ff82c9fa147989eaee8a812698d80315dc0062b064086a05510e2e0532b7fca92acf4f6b626945787625e1dff4e4dae83ef156068c626c68f35e2bd8675aa68718e2523b1f1fd2dc557b3c23a6b1d0850d32e73c23c95ff027dd107ae61e8ddb5eaca9a19077e506e34f60b2d6336dbe19e85c765055d382333f41ded2997055344d92b58bd523719ff7953542847b96b7fb0a1d207521012e6f7d2b1a434bafe7c92da87214211a50a673a8f06a95223a62a205f4a0403b51bd0d58f4b912fa16544460c277263161f87fb32c2af31316d93ca998ba373f291ae6ae406b71532e9bc8413db23405d53aea70f9e90b061be9446907a0264132ae8ba3bad96aa40a61e7d088c191183f9112d3f83d404cb0e8688a2398a6cdc2d2ac4441f52e4929187e1c6c4b08f2437123f096252b5c72f209ed8065c6faaa541857da4808ec2b658e09ae0d1c32b0ca9c4c8cdcf1076d9d20aed9a58bf2d924c1bdc4a77b2dba4386d0982a0b96a836bdf2af8c9b67441c18f0be046d14bad0f08a4f09e383ed30bd111c0076a536149c380d126594d7f8dc8a16c7520b7ddb10b8108622d22901ebc009959aa2ff7f1b2b055a32da7f240091fc846b7f010fc2e4bfc37d7a5fbc96fa5b1c041677b7a73c8f67159d9f01bee699699ffa952ef790529ea9db187520bae7806169e75942962439342a029417fed8a61a51f3a29d200a982ea6f1ab3a6e6368da68f0ada4719b392329a8df6d11f572657a01cadc5715f13c30fd140c403028ab4577b29c85cbc2f4cbc3f43579368829d4bb064e69a421940f69a357a0d37996536cf1f685d250d98083e0a0dc3352d7580c58c7bc231edd42fc0dcfff62269ae692456e2b2cdcfa511183ca2f956f109944e61f0bc2246ad64c7c417f50b31376b3a794acc429c1ed7deaf56e8a00c4fbaba5a23bfad6491bcc41b6a21b2f4d280ad998147defbe8c54788c29c6a254c1dff669e20bdaf0e2cc1ba933d3d3e9df1fd3d12f37e8244f3c04f1c9c04d4517275cb1da57ef5a24ded3b1c644ba68a6de4e9a120a9145bc6718b9127e9426f925026b42c05b401bb8ae67da08dbfa0dfb41758d08f62f6356bda8bd68cf7dd88e36167616e00abb02999485f59910b54e68212873e35052eddbbc8e6424cecc13f83ca482d8b04c5a094d9ff6012ad5e7fd28b01c9c51002982a32c960206477545496c09b0b726662d680742b9c04fcd0da2aea670d292fdb218aef904bd776e50e92524d2b3d99927fa7795b30f8ae617273da753384095eb95fd1922a5cb55367d9caa045d40970dcb675da7954e6662a88e1be541f11d15030c9ff4c908ea9e765c229952621c286f2353562aba8c525efe506f274bc7bfd041138013a39eab9147f0a1ea7c30487879e081ae5c703d12347fd214bbb7eedf75d6dd40bcc83e22876776dca94a561465673a79aa54c10ab5f33e7ecb3e1a614cb1c094ddff71f0acf619bba6e0f881587fb3ce1725e0c7fc6b5dd84b546db4bb619be1114690b980d134f25f33bc9ec0a1d5c3d7c8aac87a5a6512ab6f5da9877ab7a4b5f5d143ecf28dbcd9988e4afe722b337e74d444a26d93cd1012d7327fe1375130315bf85cd34a4ec2d34d91452491d90f1c281c50b27a679463367264f442b317b78217d756596cc6724ffb1a5e79ba8a269fbfb9aa96ce10df7cbb17deedc6f80f6976e0c8ced6fa50233d28f85af2518d6b96654c980c3b4cc5bb6c2e5c14abbc98a4386a597d534a8c2c8c8b6b33586e3112b17aa3fb4a7b9cfc26f11b51ff1023af8726ff583668965671779ce5397ee569526773f04a43b4d4db54fa68dacd914ed0b41848f8840993f203723c0794dba9ed90c5fc4cc6cc8f027d55e08714ab575979123527e243ad4bc45528402cab1581fad63d40ed7630fc76813c3236baaf21b2b165c5c59a27f945123900abbcc538290652c4756c5f5638ac294ee5cd81f26d5c28a43ccc8ddb057491301440ec921295e8ab84f5d49727af435514e12001330ac4b6bb5de36e56192ea4fbd17e15307254842c23f4930b700d0746288caa1aadaa45a60e20df75b52a3ca02bf1c55aaed2c0b16aa13d53ef1edfd5d2e982df798b2c8ba478dba4513e2256930ed87c4e3d70ea645c5926d5c66b33e01a66222622e619431a461b148223ce552faf56ebe0b264c81f3c99ccb145b51d9273bdb0f235e724d067714ac9605047cc534669a4f2d20c9799f2800b0a0e9030b15b2b0a76ac848152f20a95d74d577606a118c3c8646f041c7d6e2a0e219d5040bd29c713acc9aa8ede02614887292a517c71b896a140f9480612d14be5508a7f744bd5253193c478a320a4f1bfe8d9d0dce98a58af18b08e011205025f2d24d35549edaf25d0fc16aa1898f3838a4ed72e1e7b4cd88bdeb337d939ee242a242ae462cb3fa4a450dcca7b4c61da33a93a5a11b66299584d3aa8530bbfeff2a60d37a4fecf92faa35b1584c4e299bebfaf2dfeddbf5c6c016ac0afd09ab302536a3494c5c05830530a8697a99bf5c0a183a20532da867c0131637d1db8ec50a6b7081f14e0a6f00ba90e75ec5879ac32747c006eac529f213bfd293e5a24595c736fc01ab87f765ae90f5643234e3b8adb182bcb98974e00c29e733acbe6d10583ef29281ec63bf71313c2500415c144f1c134f17de566e30be609c818567a763eb03f1d8eacad221af7c52b7867e9c090a5856554b41f0b8bdbc584f0a427ecf0d53233482c52f54e2163257f13c7fd64f6f6449e50fe2011ddb51ff7181bc89d53cd6a8371a01a918c91ea3bdadea64d656c29cf0a650522b095360467c4d6d309f54918bf20d8b4eb06c068d37cda8947005ddb2f47664ea246bc7c92bee08bf3da8f1879373d47c277e659e6849d131cd5321474b3dbf1ee162d01d6bc62145e30cf0b464d459def1be63ae1863549b42a19474a95c6e40d52f5721c31839c37b2090d92b3728247e0e7aecfbcfd08f7e09d52c93cfef292a7d054c5e59b5a90157d7b67faa20ee85482b4a359ad220890eb99285a7400a72c24ae871f738141d51184443e375e1c1f0f789948995bf3e2340375409e672d88843cb4f36aa5d95c855235389f5fdb0e970b8209caa6dca29437823d6384aab7c1ae2428644635026a16ca297bea338582cde5bebb74c2cf21e676aa3cec8ad7f58d6197ad628c42847dd60fab04633b192fb16dc40307e9582a77a48ae2511714767ee3ae135946b0592a4bc922b7048f06b060a6bd6cca42a84cb85c6dbfb17ecd4e08b2f2b10ff8837c85d5dd934c7f7be8409dd4aeee25ce258dca43cff309caa3d231e49c5ab8ab94eb4ab258fb0c8f95947bcf874df15f0d620c00fdc9d13d0e07de61651e0bed4fda5f8e10ebcb750855d869aa6b86e265896dc20f5ccd45ff9b09500f92643e99ab7f5d335e1527abed97e16c58abfd08a9bba719cbc1f852dac30e8ed155a11131fba3f4e2490165a117fd0f2e46ddb4b907970f01abe1b8f50b4fad20afab05e345fc608f8fff3d4b8c87e120c62e7a7e09550899b10835395746d1e767a74c748deb95064cc68cc57e93aa086be9f10fc11942c81b7fd57fcfdc4699014f5ea2b5316d048b4a1ec1f4e318bebb9e567e42afd10235bf5afaca96aec9a515949e3116ca99fceb347a9c9560e7e4b4498769737a0072c6990a548e4d9076497484ff560aab3e46160c368f7c7b44c40429f29400674cbc85f011f7ea46ace62b16ad940f08796017b7850845da526727f0913f902771eec36dd9c84051845178cfdd5402a29ecb9753249e2f04f3d9140e9f947e4479b962ab1efda477a64fde90171d7743dcdb490f0d005c98befcd48df5b1c8ea58245cc7e8325587c336f30ae0b38032c335064a7d08dd71956cbc44f320955806dc4a11418abb46bd4f8c35c087aad5c90e4cac315ea0031eab3e6deb02ed034e48801015686388acb09254ba3eb43a4e0a4e9a30879f97ec9ec395320ec84b3001c6448c8322c143565a2d3d6144a221bc144fea0e6553b4eea3aaeae5a8cfad7b8bf02ea43827d4abb4fa6f6994c7dc3b00f45ec2f11f4c9e86549f7c1da2cbfc25135eb74f86c5aac4e24de7134f3cf04ef91a1b4ddfa35824a6c1660491c8e8130c12081837858e5441f403101032763979e1a1a8f3eedd92034c49a592716139f67d5a1137564d56a4c39b7eed9deb96325d4fcea9ead1a7c2645801cd149cead918a78147569c6f6b17892b8f9a19b54abeba27a920480209d98dc423acdb7175285102131be1b78498549234a85b2a264c4658071ed64a40f996111610b6753580ba59f2758b921a03be1371872dc699dc502c80c9d97cd1f79343cea4956462debaef9e7b81b308ece2115e333dda886982924e9359bb17759870e8bdbace86556b8dbe28f2ad42d47271722866b0f0d97ee156b526daa1922f481a15dce9423be915fcf11a950e7bf4cc547ddcf7f1178da48d367fea484a9dff926a01947a844506e8ab8e3685e8d3434fad92d3d063c1c0fa8f229ede480298bec5acb364a16ae92b7da78c64197a1b7150ef30cb2d3978b7bb22d8e17215890d67fd70e6f1a2c75b44e652a9952a3ebdf694852aeba3a476b8bd52f881a0011a293422b274093c8cb3432785b4291c3bade55663cbfe0f3205a5076489d554ce5cee37435548bdc910e2b98962d0c8746ba4486509e1089211eb5c884c43b705ba2070abcda6d1fdb7a1f2898b34cbbb6f197b9b6036b6edd6e75f365b28c4bef30a7c0d4e1b5a4bc613b7691864d4d6dacd0d2691ad0450c5a0b7925ef8eb721890ce1a3b9d266fe22d4954fa72e35b3e9d99d43ade896abf2c75bb4855296017b19a2db4e52185b0f2a62ff308ed87d6643a4c513fa26f76202d649665990a798dd84bd0276e2d5ac8e5fd8e90f4ce3b4bcac449c277faa46e654addcb157d0a7dbb58d5fa52ea6e078366cd0d05ca0c73644678d3f0ff7e3a00df17318a58af77a591c9cde3dbf394ea65447e8c0b0b4206503fc1a460966e388fe596935043898384696fe6beb1a6514a8776829bf2611f8da8bdcc56d8bb14c1844c53e7265104c114abb5bb28f7ccb2a56abc06ced639ac4644091fbe46ad448c4d899fd7b7554b1265eede271f16faf919dec3ae3def9bb1131a2375a8c2dd6d9f89393e3f8fa852c9435254b09dbfb41cb4ea3f0e6326dc8290aabd538a2036166c0e65e90d01442fe763fc55fec47bfd517c9490abe0737c6d71d1e29d0acf03974091a442dc89390c8367768e7ce07014ba4fd370b0cb419701a180968198e5296a703a2a5a28066af31555e31f089d0146d61a2d79233fa02c07daa0db323022c84172d59aa031bd28fd348d507583655c0ceff03e40fcc85b40cc87c430904cadd379439cdb037ca4205724f8a80b5b28b9d331c1741ae420354f0a791b41901d3ce4c9467c89dadf1d21b863fd6202d937063706da7b60b96f0357b9fa5d44407ff33cdfe8c24584034167b0f1a0801557feaabf6fc0a42f4c86c9f7aa32127bfec7e9b0a19c86e6c43621ac08521386fba8f7d095591d2c3c82abd595d69c9a8cff1441973659a09b10d5353ea05ee665102ec5de00b452a22f95fdd5586e934869e74046598c6e444cdc9a9c83689f4a26f5fec997405f08788c731abab3103e1a833efd772d6dc0eee8249d719c76a987fe134bb2ef4613d3208a71b2f4870224815e801c34cadeaa4af71ad41ddca32570940062b61d3cdb89d66435d9d55461ae54e5226a4d6773afe15d6116b404d84d058066c5138a32a3ea86cc49fcefc880783e5d6ebc9903fd010045ab7e120f65ccb7f600928a93be791c39f7bb690dd9c90086a58b8e13ffa55cec36d2e79f04344c500f67e91ebb31f8281e776f720ea421810aa6cd3a7aa9297591b4c09335ad711f826f89b789bc2b9eb025aa8d245f2b7075ffa282d7641465420309f53a64f4ca00b7f0b49ccc6207b3df9a04ae3e7f5016c52bcc870ae31a90e30ad9944027eb119be7bf24dacb93e7bac43c55c9112818cdaedf2de8492afc386f47652640024f27b5a5631d50d88784acffed4bf7914c703b333b0821ff5490461f84f62392b5f2a31d7c9feb9bfbbedb2fd2cc6039583b7b0e46e81c3b37a0343333bf625313b1f216b534e8efd0612dbd0b52715f228aa65ed560712b75b5c7e652d14b177e50d3521085a8c1395a55499b2f58c6f561f3d008852b3e1edc30f64e9edbe65cb9d84a2e6fab7bec538816a425bc24b9098282b6d4a914fa9457670bcfe732bec9289d1ffb6497ebc4fd0fd126b1c6951f5adba2f2380bc21789e52c156b8154c78671456962944a0a39e5bd17972fb9f094e34df3f677dcc53249e35d3f7b9d7bfa5d1508bd9103d03f751ef1226fc0c8fc26f24b8f2be529921fecad31064de2c2ccf2c6327dc4af6d3f75b64a3fe47b880e37bab33855c80450b3a00ebf898ee34cbda4dc28951e283316cafac83e05f85009343663a62db5f5ab25dbd6009ad08fd0571532db2626039ace3a57b31e2eb0b0ea471ddc746586c3bb4945b3f5dd328514212d048a6a86a07c03ad9fb725d4361f1f4ea90511571933fd32938e1023e3896bd88f0f69c1fe0947618c4ca64e1fe63f98925540f204974df8a4437f8de09bd77bc0b38dbcddfa039d3db31a434e5ab80bf6e5a951b6e92ea336aa36dca2e5074313e5f55c1ba0784f2a8b037353216b4df243116133dd20b0e9b419b90f2993229f6c94989b07eb17efe2f16937ce162ea39853f162317f6e7be512a0a94ab72fde87d6a6b96baade533ee0cb26d855083396114d36fb237035db6b05011c75b857182d857b03c256e3ff82a8762fa8dc7db8d97e4a7cc7035435f78cc504ed9728acd44399434888f1949e52eb4b3e858a69b5338819f8df008ce6f35b1885d832724766a25783b05f12d4277bf64fa95264ed006872c805a95ae5a0a78f1665a8f2ed8efd2b75281d5f8fc2cab6e2d54aa0b15b6e93c4a55db322759218183e68da5c4e9af5f772e587052ad94b61cea0ebce6c9ec879b8d8216af41594c5e0e3f0ee900c0eb3820d94a514bfb0b123e1881ba288b68ab2df8ed5da8ce1e1c22d063321062e7d06ca358e240199660e05cfddd4179973b9318de8f0f33acc7f3afda40680d95b563e226ae68409b903ca0dc3dc257099101d674688bdf4ab7cf3e4384274bb1e18502f163ebe1c711b808e0448fa4d65e9c24a02145246035b8a413191845ca05a96d01a033e2d89ff4d13a699e32877842970eb569d3483e66015296073884841b46c73cd44144586250c30c882c32df25a06e332d7c5fbe8f5dea8f453e375a8874d31b953d38a9546b8d7cf507539ed2e04a7de020fd4481bea913f479afb4b49e3ddb84c34119758c1f3ae1cb2d12ce607fd51db7e8b689615adb38469334e04b497aa9ca8362396f08947241eac495aecdfc8d13d3d4341d0e9923b9c42fd8a70194216f73099f7bc0f20e01176ba68925d918ee96ac3e55fe683a401c2d8f2ab47ba18d3c9bb11d3fec3547e3de6146c2d7177c9b4616027c8ee7e3b92a89555917f47a94431affed5f5e3744fba7ff02473ed9585932ee2c04090ecd91bced965db97f6b9e81f93b716d7ccf1aef5a5139cc011d4297acc66a9ef566bd3c69d7de51bbe67cf61d767684c509c7094bd263f9cc2cc528c9ae35072fdfd2d31229553d5b37b6ff8861168b78bd747982af77c585c1cbc9cf35de104dfaea6414d75e829db3eba469a48e506ebc5b4083d9a0692bcfd7e4fe552c5e9c05b96dc9b2d38646c8bb76d9ff9e4306c79f0761ebceed481f82b81f8fdcaab8396287bca308867d833193f2a19dadd383896333a421ba4914921a1c7bd74d36f16c7933125dc563b16bf2f0780ae61dabc742ad87124a4832defc70585e1a989628f680b690087244017341b29540b2720d961524c67b3382a34ff02d44cc2e732284d08aa1aeb506b216207e7980e6bd714a4058097c6aa7b65272b0d9e1c3746582e42042171543e4e5553f3ead31ec6a9e529bd6ba9f860a5828cccce490e1dfba500a52bcb6acd2abab0987d72f041501375f6e33c85d542fc37a24fce3ea3f86cd80a6263e33ed0866651a0f01209b8e2ad6927544676d11b1c8a4520309eb423f6b52fdbfba54907de0b3c05e8e71c5ee7dd3d659aff908c63c418e911b558b640fea5b9b0ce610ab8f10c46d8345ca8a08da4420d8b0adbe47a1ff4021e0b94a32cebdd5eb5b842b2a5f0a4c4a900b61b179f21769eabff06f3baca2b5e0be98b9ec8ee1ea0a8b1aa4b1f7141eb3c52fc7664e7858a12cc638216bd0f13b5c3f28a22a6d949be0ef235c4418a617d36eaa0f0eb6d600fa96db25ee3b402cac08e41e87e7f746c90644c307ce7a914a1796b864a109c91e4f2efb36a96ac56a8c1ba7e0cb03839506ac12c654565b1b621e5351c26b314dd0e95ba5654432c47c83fb3c0084f66b3b38ebb2cfb807007549692853115725bdafa9f0f1aba51ec9be942039f5fa99919f2020337daf53457c32c8e27736a5dc45e290066cca200d7e269ee34f8acbcc4f8e4fff277af173631f42f8b4063fbafd0167320ff430158ac2ccbf965068e49666e838f2df0f45cd0a5d09760755f5dc304f288c0f2c0c7d7a8db2cf9f6d60ec1df9a61a15ee330f548b91ec9bc0d21b268b7a547e8a83cd752a6e281c0c20536898ab92385bb98be5992c6cb5a2d6a7e9940093b5c8c299e9c98bff9ced476258cc0610901b967062da720caee5d73ce5afcc1deaac6b5bc3471b5386bbb6057cc6a0fbc52a4398496fdf665aec6487ec4ae65e3141e767d2458f45610c3f1acb3a954279b84d905829e8a8a5e5d083af84d5a2697611f3e2e4ebd00e11f974633b9d24ac0f609facde58078e3ec9f19ea9d7223d1322bca50de2047c29b0d1aa1a540e27149d9eb69d3dcc9f25e242432c45f0205a8586ffcf37d88ad49a06ff63d679a3cabc323895060c4203fa1b726c5b3090ba4a07aad19f179eb76e0ab6bef1757a17631db4aceb8e3013e24b6e33887eead20ddf68af3fc9432c2963fa6fbb38ae8605007010e620cb580a0f4ce0f2af4b33540df015226aafdcf00231023549f6de9b6c29a59432a51490062407600619b87cc26520f7a3c0ce4dfda742100c5cfe3fd5b0335fe3fd55fe3538e0de738f6e5cec4533833d176bc659f7287dcbe5708f3e8a73004702770210c691e337f48475397a725852e9558c71d552ecf497b718d3bbb4b7ff7cf8ebc679f0c6fd6d461f6bda55f7e8577de28ddcd52e32cb5f7002274720fd80e449e830083b8ca3df88eb92524a29bd0ad5ee0994355e2d5c7a29e7cbd7a05cb43e1229a9bc24bd66d5526031207be6c79cca481ef8e1092f4bb78797e29d524a2927133a4f84482241f3c1f6332381f91226b61f674814ad074eba31426d0539d9ab4e601030c038fa9987b6fd975aedd8d9e1c19baf5fbb28f6b358f52ef71ed6099b8537ad9d362ef6cbb950c79ee08e94f61a0aece75d983d7c560e0f1dadfb6c322ccbba9e9c7b7aa899000395234ea2dc1e56baa7da39eef5b326143b567ed3cf1b17db6fe47d91b5ab27eb57411a4ef379e906b138d7667e0ebc99bf5561e36585ddb2b8cf27ea9ecc1aef8c5c5b3bed887597bc71b113caa90ef5e42b77d6ce2772968bf5d786982cf8b88e17bae8ebe1499bb4931c1eaee33a9dba1e4ebabd8225558a6e0f7b8997ce9f79449160fa1f84104aca524a16ceea334cf6eb40ae39e417f204c6c136aa2652f248d91b38c6aa99a05f7e5df2d126a6a03d02ed6587737a949c0f0e490c99995f13b2fd46a8b0e2a167d5e584a5a5f79d8fbd9ce09e77777737d7c392cd2347094aff15d8cbe5f10e5281718da4dd218c51cac951aa3584d2e774e6a1dac1726b22b0dc7d956edf0b5763814e52148c91ae77cccc6c7399eb59f1a0dec4799beeeb979dc3b118e956780463e1e45cef94ac57fd7a56979ffb996b9e1d0b6980c7d82cb7d55f2d9fc036202f0f9d1cf61303722f0c63e162dee51e960e94f1d9b1c961186693fdf632f5351decb3507fd9f7c7c9b9b8cc3dec2d57ddc3b097e1547e83fda67129f7b0ee7a1d28ff4279348aa8dacdc7b0ee63d65d817579e66b9ffd37bb8f85b163af116dd7fbcaf93720d6bdabeb31a1035882c0227465cc56605dd9f1c4ba14b1d06e98956b00f99bb365e4870cb51b341b6cbf15486694504aee8b3652cb41074a696326a5e42266d670d802e3209691a438ba8c648505b7009791a418baceee5ea36de2ce5c42124ef0a1029221ffa07f1b81fdda493b49c376773ed5bd6ee29ee7d52fecd74242f121d38d5c0bcd628e80922e9428344821d484490926495c8953255fbe7fe0cf9c8d11fba92e0f36feb0979da3ebaf42568584f6b6e1c15ac1ce53c1bd8c8a0d12a46f8a71f88e0a41768ad8202ab8478665f65829462634a28012d15862a340725d48c55ac2fac321cbec39cb93685292e37955ae3fce67fe817f73f6b3bf0d398e497cc0808ce4f3aa7e7310fac41a2d0eb36c98d97d5e700165c2626992c1c0d67a45ccf5cf8cba9bcbc017fb55e60e3241511b2d7367217751b15f853bc2188289d1d2cfcf0f518f58575e58862cef59700733b3d8f3feaf6071fd57ac1c24d6dbfc2ab23ed665a96c926808a6dc2b53e48dffc906db820f7e95ca5af73ac83da64c6a9802ccfd1bed23b60dcea4ecc510578a8a5cc7d74c5f64a42b4eaab5a991883dffe884a8bbbb217c19a58c2a97c238dc3ff0a744d8cf85a20aec17892211dc7145a226c67175b0c650690d3ab850854a940acb311e5124bc484a98287e841749c18abaa8c8a1b80eeefa082751fc03284fece745d7bf7e87e25e947e2f6aa328503e2f82520477b05f0b412710ca5050d1f52021ec576fcd6014790503329210f6737747a08b0f5b7ee08fe960bbabef9e3f8436948b6df85e8e96ebb1787847f6f32e099e8793c2e172c4e055369534817e80ac6a65537f76cffe39e9a493ce29e606c1c07ef6fa0b6c4c417581654d48c200834c570c0b6cd33d825360076d53135c82a2a89bfcc78d74d3a90bfbd917dc638171787c1defc8ddd74a4abd74ed94fb755304608fd8c1a30f422fb06690296e895008452e36617f7e7e70782fb261ae7f6a27087f51b2f19a62fd312d89758bbac21225b14f285dffd44e10fe824507f10ffc21a7420e5a12fbd969831334e862bbfe281bd88f9572b01f2b750f25668e1c397264e6ae95fa4a33d99f27a6b0001463eae315f75ce989fd7ae98bc0ba07af3e17c2d60e0af220234242ddc488fb65970528d6df7fee57bd9fdf89ae7012902780ae3f05aab549b93b0576fc03ff286609ee50c35cff4cf5382b23f8347c8ff89c0d11d622b15fbdeeee435c2794aebf5541b94e18b90ed4ab2d4b3d20ecaf2245d2f5f1eb42bc27991f3f47ee613a10ebccbf4cb97c7da0c1e43ab8f504ca8f9f29aea3e6ba0e580df489f408975b32309142cb0c5c7a88c1044c5298a0c794628c511d434436c604a7313c5c638ad834c46c69306534975b320409b1ad404985a5a1829a34ac606908755f56583a38aa4183e060682608346cd0d008825b10ad189462f0026b0288d543205840ac804012d38424a6c8a682ed07a43155c64ce181346609a431321082027c97dde71d8f639043414219a1841c0ab0a60438e4723cf0b3d81c4f7cc8756b5e7d486c2f036e2cb0dfe7e07cf13fb3b6335badcdbe6a7d89105b103e821040bf8c74c60c549871b4897106d31944361f6014627ee8b604c90c29cc6842664c2c6f4e2cc3186394726b1225333784666c3c38dce96e66da9c6c43ac2116950dc9868475707cd931b37308fe1f33333fb3b319db91e85a7f6b9504b6810402bb8cd4e4c30172bc521b2c6462c4fa65a4a6250ea569a89b94b09a7440028ca32f9e30c00f8077d803dc8edb0df40ab2d965a426225b117b3aa3b30f46832995b52a3188fe6d142a5f79ff5e923fdc61e14dffd3a6644cb994fe67c30c6d359021e5921145ca318618030a8d1282da1dc56082375ce79c53db62fda594320c29611c859174a50c03cb9552ca30a65c198615d8c5f8308dda2d372263085d17c432c6d01cc3876da341cb06b4626d402b2fc03461a9a6b4dd626019be98f2de1747f086af5c794c31606ac1fdbe93acbb3646c8014c434c444c46591a5b6c3f68a0b142a30b235f4870c65207b00c256019506ec032ba68a27501042c034c501764e4604653132b0c175fae94527ef1458996e6620b31be20814c5f8422d3971b982417645c7a19890b2629c200c38b95172c2fbc5825608b17f0164db488c285a42f253552821b84e0a208174c4bf0ca1650505a6c9174e765a42d68b0650b2f2c2f2c2d88ae97293229f76a1c7e8d773ffc5ab67ec32fffbdd595397e53fd66266de11a155a1252164264f184eff79fc50990b220badfb39ed0c0911821cc580246115313555c37b8d3468f39a7152690c86a70e79c9383cb48591429a3a9905252319ba7549625cb2e4c574a29a5944e74b922a58aa28b133fd8f704762030e237e2e9e9e1f76e85db0f021fd2fe03abaea3bbdbbdbbbbbdbb99b0a2ead6a6f0e16a2358d3a1a984d23987e8810a0f4eb044d1c50ab4d225a94b0baebd8cd405082c4c3431c5058a90c1071e907cf1c4161a5c71e40a26dc15355c56e69853971ea6e042c6c6b202e6daacdc688208a43186f83162880a1728342e4b9b152e486c5cac58e982c31401164b484b62909684b429a61559184143163d184181539e40242e41d4d0ac60610612165ec4a4ebaf5d59823ba697669a9d046fe68fd26c5a0a6aa11e7aa18895d323720f6f3e303f4aae26850fd48f9dd108740ffa323e9551cef950bebf7ff0d304b922ae2605396b5288d32dbcf17a93a8128cd533acedc040757cca681f9879edb9c7c46466e8920c538d0edec7130e64e6cc6bf431ed310deb6ae46fdd4f27cd6857d3edaf1ee4443ec4b5005fc3e8cffc4cf70199a7cf3db4dfa94961e6699ea6fbc0fc99e71ed88fc037a69e46e653f3693a08d3fa535c4dfc540bfe2ef415d282901dd4d7df39fdf63e9e5c2f240518b0cf1ef529c0a0bdd576649e7e6b3bf3671e0810fd99ece9cf7435f23b287a01def4cb703f35b203c2411725c53d4d3fb49c0adeb41017fa0a112201ee31f342766a5238710ffa3b3529a03ea03deab9c7cc8fc0323f1f6b2d851dede7cfd4f8d31fd203839a04b807d02905ec4fefda8ef6a8873bd98eed505d0dfcadd3f18cab27ae067640ae4e8932d57807e466480f10cc0c895e8fc0d867083c91ae38023a9993e7d4aad839bbca46c8ae5ab14c5403560d56ac1aacb688a92b23b63445a42d58b64cd9224553c2cada9146ad05f6f47c5996c013bf79e0d3a8f9a857d5a2e55221e63a1561aef3c0af3c91a73ebb072fae6b77ac68a4b9406a52ea454529a58c31ca1a398e3de98d7d69f775df9cf25d07c2cbe31f7c17867851a628214dd104978042d008a42c2c807003714c2f00cb8e253625a8a0c24a16416250a044962235cb91c82a42033338faa18a0f3bd84004b69a241a1aab8869c49d6fbfdc89a404c6d48ac82e234d6183044a4d21c3e564605f4c0d8b2fda320db36a6e730e56d22205d3656d8a9c48be9a736651e2ce8f734acd882c56b2501103c346e06f66661b8cc3f95b488f61a42c4e6cfc65a42c492ebba705c6deab2a342220841042d8fe55ace04a8b4644bdf0d3a29500a50561f9b72f6a308b983ccd8b21c4c12b333384f09a41c468430863cb0843cca076837ff15215564666e75059b02a8892524aa78c0f31a266ee8a2429f172bde4ae8ea60a9546024b999999bd78f1e2c5cbc56ad2c3a753125c023b9253d33eebeeeed39eb36f45f3df0bb77be6b9fb7a6e07b99d81db6f391e5c0ebf99e9fc65380b77c8bcb3c6dac6ec1a2a7bfa3a70ebb25f01417944813664bf3a39c975a7ba40d8fa1f2f05d1e25df92a2a1e57e6a8d55a564ff527d7cbdaf1116401a594524a2965e65660a5cb43bf7eacc44a393e2f64cfdd7d0135335f6302cd6b4ff3da6b1cc8fc0cf763c895e938e02cc783ea2c9733e462957321ceafb404fb73e9d74b9f5b10c24c3f3fd767e69e1efa64f7f4170b17d7427d9f79af16aef799f714e47471f5597b40ed78a64682ce8c1f677c1d98318efec8f9288171f4d71b3619fdb4da50cfda86925be72337c6d19f6d51f095b5f6ac7a6b08c63e8a66279bba36b0fbe8f51083a8b7cf1acafa6826f01894c6d9ec747192fa48290054c32e3740b9fe5e3f72b0b3a71dfde397f9c4ebde3042c7daab24adb08adc093b618f613eaeebeaf83467cf6a85d5aa72dfead60a5dc786859d8f61d8655b88f7f36219714b5a3dfdd93d66cc98a42b33bf692d2ad5122a6b2f8d7c6a6e1870f3d20a9e388c4f7105d6fd805c9ed3f3d0afb43170bbc747c6e354d7a3380b6fdcb10cc31e453fd5c5b0eef4d9c81b358f33407dc5be3ec60880d44679bfecb32995ed68dd220a0521c4c1b08ca3dc9457e39a71c09f7fa36a3eaec72eec59abd875692674072fe5e0c56113e322cd32aea548a9a2c0623f9bd37c5a2f760a7dbe00f3eb91ec95b29181fd520fafeb7a15763469e33a5a84a0efe122f8cbd34ba1be5927017f6dc8bdb8af7edcd7f77ac9d1af278e95e210c62bc8483f3ff77afa8e612a0e7e071cfc192e7229a24be9df78eac3460d661cb57290fbe217ff3ab221cac53e6a3e6c7ce43878c86d285c28601fb14d1b817eea2f2ef5321c0ff6328f9a99791aaec6c6f3edc07ee56a6cbceaf9d6dcf81aaec604ec6f3cf637ba1a1bdd8f2197e66b4c50bd7dd5dbb73d82981360735dd7ab389aef80a3790eb84ffbeb6b703c32cff77ad64aa09fea3eec2f1a6ea65bb927df8693e178aeb7ddf5f34f5c0e8fd671df908b75f421072cb76c48a251c6d3e95d38b9d024e8dc138df0bafec40911000b57c719e7825ce742df48b32ba176256bac18e4f34a76e057129837571756a750ba27a594d13fc218dd3d46b903e6631d420821840dad80adda92f091be654bc207fac02d31fecfcf4f17d1974728761d764e0ef5d8e9244f3eb04891ebe14ed04e1121885db2fb226df990fe8e7ce8e319c7b33d08aee43e7829d69fd1cf6820e68dfd36f372fb99eef38bd1741bc468c38e07fbed1bee50ba43e90ea53b9436811c4f1629dd811009cdb21782a7ede977ddb7753e7e4f1d9db4bf39a1941dedb06fb8d3411d42ff97faf9176aa3b03b1a2869d368da08f27928ec8727cdc7e968db32f9d74faedfb91a3fc3694fb9f932dce975a04459eeea4675877accb3af3fd6e23cf5e9cb86407715ee90a8afdfdc87ea6ae86f3fbbce7efee96bf8408db51429b253e4aab4d65a69bc33444144f72fb768c042e8b22eb74260c5a5e1ca3dc0e51691294d37bbfd92a886a3fbc1e5560d413748e97a975b41516e90978bddcad432d9fc8c29de8ffe9297e59d505181269c6e6bda08d83fe5dbcc94693ee8c4b0a79cff0d1b3503e07e458077ed0786d539e7e4782e46cd59bbef8902eac17408f31bfa470b8002aa2b40f7f9ad5f642240f779b0b4ea3e2fcb3b51d3d1ee46472bf6f5e4e8c9515f66436068a7df51ccfdfc7d9c07f520b8948b948b5f3a04f8d9e78d7ae893bd3ff6dfc5c4bae16cc8f4d793e3068d1576763cf4af6ec9cbf24e340837fe63350a725feda6ebb0f1f4ea2298ae6baf7900745f0d8000bee3722ef736dde7c1fd724a804f9f3efd32e767f3194a1ba151bf692864177e67aae7bacf83ef3e8f831740f77d00ba4f957a0074351d7def9afecfa683d061d65005bf030e9e618d67b823f50ce9d77434ad65cf603049745d28ff2f23f4633af006a7bd8decdb83fb755151518aaba8ff3cb8b27255fb1cf9321e78de7f4e0eeceeeeaeb99e2ff6d80d1a2b6466c064308319cc3257ca3ada93e35efff5e4b83a9ed39cdd97d112a6cc9fbeff8b57a6abb93e7bfa2c400f3cf0bc7f551113538e5bffebc971515fbfdf72b1ebf3a0ea7751b3a4b8b2e575bbfb7a727c2c301d428d60388299912982690f68772d0034da873fc2052e681189d202428241961691a3fa02d4e516900f375e6e011d39c1fa79d517ebbe3e214849070249b9fe2bcf75700ba8c9f5c729c236236c3f67987cf8d2a7cff9b5ce18afbfde8521f7eab8ef7a88cdbfaef9f9ed5bafbff8d24bca291fc3de85215897825cad177661d73308f5e763dd57fff43ab05ed7cff910fa359f3ecd2ccf10a50564e47e2c9da4eb9f33e53a8f8d08cbaa56f52b6f42e1723cb1fe1febba9cd0fbf6dd9ed88657186d28681548d992c1e84a29a5103301fd3aaee3177ded318ddbba7a5dd7d57df2670feb5e5f9ffe07e4d6d7718dfb6a4739da65dc0918ca75c8477561bff7bcbe7bcd914b244729a59452f294542bb2376d55380cc27c5fc1bb3cf157d7ef5c28e35fdc07bb1eefc28faad8a5dcb3611cfda82dacb358110986ba810e3f73edf7c1c3bde69f734e779e33ca2ea66c0e1418fbb16eb7ddbebe6e038ecccccccc313eb38f9ed811327f500f7eee1a72c1f9588b0a27b80e0fd374c546d52ae2389c720ad41394135cf83bbb5fefbcbb0a144fe64641e181db7456e854fc5c6ef1f073bfcbad2534b8ac95300b60b90118015a4d7e2e0eb61a40b7e254aaa70056ab002c9051e738827a02f54495f9f123c53d66d274fba29ab01f8a099be33a9a87eb8836dceefe6c07af5001f6ab37da3804f41a7f6e3161ba7c23772d207f7e0f892d299cb4d9bfd6468870b62b71eef2b3b7d3095f6a2654a0e350d09d4e6803c68eb1c0e48bdf9952a1b6586cfe4b1d8f5cbfb71740d13f801ca3943c927b141416420867e01c331925f6844266ee0260fd6b66573b156a8a95df0503808de5e75973c386ca72c43ab0aaf66794771cd8660056c3729c71a2a8d8949527d8a8aa50d52c458306f472e07856d8cfcbf13ccfc361cdd8a32603fbd1574606b396236ab31b66818c9a86afd7796491b9c32c9091ec52eea9fc0368b558ff2430b66cd97208dc1e58b68c033ac03df83c725055ec9773731ccbb12e42e40c9e5280fde87bd5905342f9ff22d4973665036b572d9011fdab5ecd3ae2534b9dceae064ae8dec2a805328af23b4c84f8fcbec37aeca6853d0256b9a2a85869e90319c9f9ab9a425cd9c81ca82aece75d593d0fc745982f9f95a566072d9011fc760f01f6a3afd730d172b9c5a4ca45c0e516932697662dbb8a3ac1d37ab11cfb2b17e1f4f43dfa36ae835b4c842eedda02195d9f3d9011fcd30319f5639c745d964190a7ae467e5f7969c7c38202630b64e4dfcf2a6c02d874e8fecfd34856ecf31489328bc87ec0620f91043175b9b5a48810a09a8060a9052e4862726529ca172561ae54d244802096f8d03d54e536d7426be8cbe5df2eb786aae87cb877aa352466e6726b89112c187b4b0916ad244d2c77549359a916424468e0a506199c600be462a294fc500d646b880636a56a0d25713ffbad245e6e8cd008af43d04bdfe0f65b13b230a285480c517e9002b340254125591a41922d5704556be5ce251a070b93cc008b27f4722bc91149508012821d13a8195032ececd00314384021fa2108293610a2a8303bcc7045102accc5b48816380ac232083244491722aacc70e4099626b828d99e586aedd0d4dac108ea86235c908008951c4ee064a9956404151583bddc42d2827b5d6e21a1b242fda07e9004898087342492212866e6720b09939b5d6e213142e38c33c6d8c430e3c811700bc3c6e5d611332ebddc128108a8681d81d2d2e1682b03892d8c951aa67504cbb585d12eb78e747151975b47aa008305c66ab581c1d281685e6ee9b0a45e6ee9a0838d127f3076ac6d902fa47f0ab1c009c8ed7ef04346e2def8868c80adb8b263c611fb5ad12187dbcfcc38921f725f7cd83d7fec3e186a7e70bc3a0e993d13fa63c7c30f3b213088203eecc920b4133362200335bbd5a708a7ff1ec296d969bbb2bab5e3966459f079a147622003ae4309dbcffdb0abdd3603cbb77fc660b625c474e9e5969016f7ab37d3180496b9dc1252ba2d1d7e2ebbe73e439cc0969dea24723b04a9f30cc2338efed4068595d27e2f119a72ab07a7b810b684a45c085d7ad70d9d93dfb2cbec460564b9929650d0e5560e4dae022eb770d8e202a140a3c058fa2d1b9feb3685ed2120b0566b55aa7fcf632559bfdcc2c1cb8d4f04063ed2513771afb56e9235a527af58adb562f633eeeb19ea26eef93737bbb932cfd94eae13f54b6928f576d7435baca59eed2078b37531d443dd500ed741bbb19edd596b9367775fed51ddf975bee3b06607c37b1b1396312218fb8e14ba7d2477848a08b550335314a62b89be6c552c131318a62885188439e79c57c270e7cbcc66dd97baf3b3b99395e588dbd1755d1704fcb3ee07e7b85717c1f0510b8a1ce5884cf14b04d3c241a9754395c81499300eceab6bff880f7962077d86bf3f712a45f8ab29b66f6777c68f15af8c36eeb992f3a6c57a59637deaab9bb5b3daa800f91fac9c2bb9d4c762d56a575eb5aaab9b9395583b39334ea81c7957a1096bf3ad457eb9e1880b51f13107b857c2c62034d5b1711df25b7e7d8c866b6dc6c675d428577e8d09f3e5a77ece7ce5be8d71c4bfbec6b78642357274b19f333f39fb3628c8a7d9ca75f08f2157e66db0af3f3f6a1fb99a99a779be5f83fbeac33fa51efb54179e87a8844e1655b1846a080040401000c3140000200c08874422a1582c9ae97a347d14800b839e42744c9988424194a3288a8218038831c410420830c6184490b2311b8f5af361318e4345861f60360cc5d4dde2f099a111964239b4118d4cf1a2d133f6e55b80b5944854d60cba23cfff25123c704d312f1b1b2ebb982cdd83653a345094dc7d428bcf23943d1b66aca40a55726463c9066549e0de832e2aa3670a0ccf8e0193090ae13eaddae2e0263b1d13e87742506406d04f1ec560162e17753bebe8a417efe830b795a42354ce06da51e1a9e6485b1246e37d568e7a0a07aca36f7863408334756a796e257670dd686f20f9fb63b45b84d248af970eda3fca0c9485bbef6275f025a4acd04a87b114b5190fa6ecfc8e850faab4ceb892968b8ab3635f5d4b51e5db34aee27614b6751217a40057d90d2930f152e10cecd01fcddf3b0891f2213fa6d3358e07fe172da57527f95782be845769c49551c5f7968b1091e9b9c5c7645f5a5e5c9c2b63e4391e145680bd859964d56cb8b890c22ba36e7815413d1a7a5a3ea6d4600b6de0e73ae602c2124121a6049363299e55dd058d84fa9feb4e2a458be7fe59665d20258752e1aae7c2a1a3d60d1ffb7460099a6de52bf20cc8956e646198fc018b571f5a65c75dc19d46425b3e947468a42faee8f3f26626ac50713026564c0f083aa261daf2e67a017da0bf74a9d9295c24491ba18118c04c798e47fd494c1e641a9a924c739fa06430fbab7b28f40c23f702faed2d3cb863d7ffeffdea003dfb48f214fc1a97f57c182d1e57ce4bd21bbb2ec7a3b50ee08496efb56d13b0954c94603ca1ef0fe4ca0a1689768c33d692aaf516c2ef17943a7db32cfb38d30010bd887fee72a6c3a7ee62855e396020cf1f865ed99403c4add37a6c17bdb263e3b556c159017abe7d578400575ff500ae1c7f42f04f2f92c34265a312ce298b3abe64e26087b7f8187a55c316f2d5ec561a23d549c09054f13e766dbd8cd3e52728042609972c3a1e2f3ab5fc4a767ade54df9549f5d8877599113c4b513ddcd18f104f3129fbd73d638a9357fdebea63882db1ad5214b07ac3231a99c31d63bed7b108c9a2cdab55d7e670320d15bdd272e1a52102a8ff3fb1fd3905d318e04d866b0d199636665ae66ef2bc82dfaeb36297868fd7cf9566b124fdf9266bd558015e9e983d3d4322407dfa6ceef35a0431b490f417509782fa37407a8935f2fc05e93dd5ff23af822c7b8197d0eb0d9cc688d0aa604cc2b825f1f34ee5f3228862db6449437e577a1888c769fe5340276922675ffc0267ccb79f31a83b3e6cff09f6e665a2c35306e9d13e936e846ee64e6d56240acf75d8822c8c91b355938d19b72a26920cb5c68cd56a99c883e8a863fa297c2e56fb3376fd34268745e05ac06e3d314ee45f0f8b82d1523d00c33df57b6ade6fecaec330997eef2ba9fb02ca803b1e5240b8eaa67c3610535c6bf9cfc72244360deeae27486e7b349413ffbe364d06b8ead1ec3ac36c42fde33279b8bdc5cab7c0d15a331c1d84b2c161a10df776b0b02609028d9200434ced632c5e7d4ed8fcf16116f386ee8f52d0d551bb261b006028dd9b8d21352c442e0ef4f2aae524b15a485bc9a41fa7216411908c6d3edc34fd90f081849ae652799f901a51b78925854b575ca4f481bc3a7c288c7a6fa78582595ad3e747c4715da3a305b2ab5a71ce68ee3b7de130c43284913ac57a846c05a4d4da98b24da4011d6cb3dbc90bad4fc1f954dd4535b3b1295908fa268b22723a40b85d24bec3539aaaf467c73cb53fe2db0efe56885ef6017965a8885826ee14d301b31dfcca255163302a9449e5d353f9090177c2c615291fc4b4149d7a27b8cfa567254e0fada348833a02eeafdf33c2ef44a1334c94706caf5f14863d56901134e155c6486d5ffcfe584372c1ee9149c8e47e1815cd8459d10c29be059e772361d88705f6be50029e90ab46444fc0d7ce6c0b0fc493d9f27238c7a85e58bbca2f90486e227502933106d2d782c999f8b8c836c0eb182909107c7fc7e5ce31659aff12dfb7444a0d3f1787c6cf6f825cda1e3cd189d2a634eab8a78a63de42e1892faa026040e2a2ebd89dc2a29104d89ed89c570b725ead05cc5a5e6ee0ef02730fdecddcd8d3eb5eb0f188539e265d5e3c4923047e55095986420f33f57c5120369aea195113d321b04ed410fdd89871fe8f4ce4600139e961d0fc6ce860dce6d6e2d4036b15487867ebf51684395e4cf142da7a26b7ebecbbe6f425549771e3d3f5fa0f53dcaab713f1c064a08aba002db030d5cc963d11d275fc9cab1ca4102a3476227969ecbcb249cc8b58c6ba3295cf504a20b841061a4e9ecacd74b725c5ac7dd85f97762f508315374f5dd4749c57c915c3c6514958637619efe93093bc5da22656d66a80468c001e13087e2d2b8df2f600f636c162f6d58e290b19b7a8ad34dab56ee434bc92dd415d2f2be60f56183a45383441382139fe041e946e3deb47b68314fa78a53167fbf30d29b6a003095b30feda179e7968c6605a61d681d0a8a3606a014506c96cd842a59600d5dc3149b486d1ce244d6dd2ea49100888983b71b73d5b7042290451cd7ab4080d89866047d17267bf59eb878655ac855c26b0b970c9f43ddf42105586e458f86ca9488f7a5e954a626ae79bf396258aa97eccbf802861bcf3487e0d36bcbc8d6e32dc54ba9970673c3e579a72c40c2714908280e2e9c9a45db85202c510bc0dc050448ed86f47cbbb10034e5140d136a2ac4f53343f62c0cb70cf0f812216110649d1ca284b88be542f9266d0645c4d501e54edce4037eeab2ede2c865c8ab18587e356da6981f2183405763514839e7e4faae7b30ab114689e7a02a0d70626d3539a23580941b9009e4167d467981f700df3d6e8a6b424529a71fbef21b149e5d074f97186a3dcfcc1cc0065ae0ce2aac1512c6cc00e224c6335bd0c6cd505770b57b4ff5081580a0decffb6e6f21f03852695c444499888bd53ebdfaf936a8c552a0a4afdf18f631fdc25a75abae7ca499bbc9895575d73cd9be6f73dc182e623e8ccae80253780c28aabdf8a3b202ca10852ef83b912aed67770bc0887c17a64f9e9c8c9d56f33cdf74659d5570cf930f38866e4270d23de87907b6c235ecb429351d86d69c6c06e1445ad312622e3f400c57f419165a39a232db422f53fa3269f72914144a4d681f4427cb6d93f3b862b028ac184b400d812ece6e81dc06a3fef44d9198db3882d0a3c944f23013f2b7d402998c1574d34a29443d55e0106ac5497c2b64c20d6469045156462242b23e7493fe76e9589c5dac1d996b85699ea56e34f7731005606abcf34ecfeec7ad66d24d3bb79ac4c9b782b8e17e672e61e43dd566e3b112c89788e2120608cc877125521ba72e645727f4dcb789c265ea82efae24a7b7edf6e1153ea2745ce5c150a697666546ca48e417ab6a6a4c452394353b3553a566375f9c7e842ac43d6add29d47b453318c55df0b579b98b035740b7e243efccab15fcdc99c3f68e266a8d449e8bbdb6f23f3442b86495af46039d8542f8b8a446fadd227ea0ccd52463f409beae99f2bb4f62aa18fe7163adba01f589bde737af2a58f7c7f3abc103caca82e68bd9314605e6ecc1e13546ff838de0430cb657f4701544f2778eb8eaa6147b60daf8f5d117422ad7aa5e97506f59d0834aaf7623d359154a67701a192de0caa8374c31752bd10b454f7ea193b085a04eadbc78c3f20d7af9657b32875285c393714da42078a50d2bde450dc70cee2dba717e637341ba9d92104b8a4750f903b9d7288dd5062bf1a721331e1e3fb507280a4d194c369c191f7395ace26b9cbf4eb41072447cc6ef08f18293bfe94eb8163b57660165452a358fee220448632164cfcf137d6e53f61c209dbbb3d6c6b25d87352ab29b0edb889f004960644e7b07544699822123babe7eafdb838c52b5e1b0b2cd31e91bfa7c85d94fc182421d1872a1fdc1e4b539d6e63620e04cc979a30edc016edb403a6b9581bc908188e22e3a36312788f4133a83ff517ed91c6afa139a9a3b58b98f899e2511ae83ee74142dd1a9da41c1673081531f1bdfec1071c9071cd11107ab8ffff10967fc5ba3c893151850d78e3447973f85caf821ea10be1faeaaf771caf2cb071f862acacc854f9309b2217636fce290067d388018eea38155c7d62506e4273343952a6faf0a8802dc3630cadcda5f40bc087c46e5f64b0965fa0b1423002dbbfe2ac85f5828ad6f8f85a0a617ceed26e6f6c4610397b2592cfdd8c178746aeae134a19599b6aa8bd7138f883c73b901fc5026b6c0db78dd92ce95780d37d08e25b3a283c92b56a733999a905884dcf012dbc492ed3bfd718ccbbf92a9e54612a7243b3d8a265861063750ce1f4f6c805046e990b398c4908055a18648fd82182e924467cd2b2a594244c8fa9009a9a75214c1134f6fd648bab417856694574da85a24d0a3e1e1c32b8502dc81fe72bcf5ce5855a6c24b13aca8b85b9467ad26e200da6892129f968320624e8e7638447788d13d86c62a8035d6fb31e6e13ed6d5dffcfa6536ac45a48bb2213af8a488153e98875e450040251185812954a3ba977b0365fff09024a4b08a3e92c8bc14c6d1e229d351c825ced62f1f9a3720651f3a1dea5b3948fdfb936af1711eaef30c1e062df670c523e821e806eeda0d3f513b09704667f030ca404a4d70a1ea789790c3eed76e9d6d71c12d86cbeef3794240459d302e4b50e6c78ec895ef7cd55ec52d5555d635352bd0adac411137e412fb12fc3aeaf55cb023f9946a62d84625b148774f253b845dc0143f65dd02b75761fe3d0d85cef5308ecff78406d605c00f21b34d7326662aefa8a58c548a412dae74c94d9ef893d13ddc58458c272760d62bf1c16cc0b25c31e870c2c14d2a5acc182ab3dd6254f2aeaf7f5593d6983fc9be093cb4d6a0a97f8698540b2343248b96b60703e48764fc757faafdbcde2b24cf31722d8b30988722b0ebda73d704ff67e95caa3d6c78562854e37679c8fa08888ff80265119442db908251ee5af8d193b85c034bffb17d249ae654fcb70010143178854948383e23ca92657c315aaaad30d1d46dbb9c4691a9595f44861a14860ee5378dd4b830cc457317844a44124c76ad688798903c49d54dab29db252a94660ae93857bbf47134a53747fca6454548b071f5cf2aa3376378cc43e81787db64a736bb0543f6ca0628292345945a3cd1be7a4a6307262269d344ec8ae269d510a82c3930fc310519785c36ef2e99cac26040645534e836d084ce1e971792f4e49eec1085d3e2e7d0269fb0651da22b62eb4a81f6f3d8980ee9e4072174d48c2477f21718d86ac557dd531944476e0d4c3229ef1dbae18893e33505d465d080986b7dff25d50aa1e51d1a1d0a8e3e09a078e02e144271b10211de148ee601e65be38c8e9f8cbb70489c6897b05f369a2da86b31cce3429bcb7cb01fee57349c7bd9d4f92cc4f74a8db1c1dba82b6d5ae1db240ccc5f93312295f7f7042af9c097ddf421b1f8835c2ad97fbf06a8946392e5ce2c967e54ee2652940d1d1d5cfbe87e5406402eb9ba9f015c7fb2ede131789838f1ce2523ca2bd1286a1e0b9f0d4d3d8d2252a19395c83dfdcc35df2905986f3634cca9d3a5a6c7a7a1c2a5b5dbb2256a63444b991b5c9cf4825807eb1e74c1e036c3dd52a9f4a55c632c8a2f55ea10e521dae8538ca3ecd78007ea0d85ebd3fd9a2ec1793aeb538c752d6505fb01fedbb0d7b5aaf4671a48890d226c29d3bfe05baa43db07a439aa85099a66b9ef70b3d8fa510a634e2580881940063584dbf00354765ab9e3df939573f9857fa36d120e9e9fd87be9718ad61309ee658de1317b89a0e7ea62ae8c64e6c2fe1f453aad1bc2a8d9733514b4ed08a968a2d2eb956b5c64016166682102b4158a9ee3867d5418cc9fe58549082b6aa79b458ede39ba6ab280e07e85db354a64ec3ffe583cb5b8fe97b2aa509ac03a65831de1ab175d4881a1a28457a26d596358be9ccaacc6ce84a5ad7235da353aaaa60b306c08169216b79fd0ad832f92b9944d95e2ffc22f8ac8aec9156a1c8702e985ddac1da007c81637788cf4565b8096179b1e80926a19076c4736af22c03716968cd833ebdfd366dfc3aa5ff05d618061475a37121958468c7e0f30c9f8986ae50e5b574e74963d129da78b61fb2d30f54c57db7ad785d7f8d15bdb4ea769fef3fec1cae186699a40175cc1f6ff04b531cefbed2c0cf13a0ede9c532692224021e0bd23ce44574cc4c1a757c99ba46180e505bb413486bd884b9df214f1742de4fda8bd81a5a5e5e5e478d4a2943988ddeae272a8b29271384439dc0cf01399e8b18c92892c73091cff9836378d352053013995a3c1654741ae5dace51acd99d557474f59a27dee08bf869e25152cb54a1064f5a071eda86c23cc997fc64438e723707fd12f5cd6a3150142f14bdea65fc9dc94061cd8594c52481bbdb8fa360ac937d2b68e9c73b4152c7038511af5e645a5ad8db9a091ed19c0ae3fb191f57ac04f8a4e79a9bee4416e366e1bb8c8157bcef47209b0a952fa78c074118a65048439908fe341d5e74a3f04c3cf3f00eb4f37d3f1ebef7794f220fd95c713729ba61c6ea4b96abeb621554393c726cfd7d4e1ce0a200f15f256b8587e57751b0a63333a6a3e00f9819eb0779f1cd49d4078eaff6e283c2378bc0b5cc169e6baeeb37a86ffe58d0e50d6c64f61afc919c382e8691d8951d46dc21c1bea52abba13fc0857a1b8d61a02eba0d7729d9a1790cfb19568fc1a045f7189213fed32d6285078c923dd1adfc49933521324c2b66e65177e1df6a8374189ae4dc8462765b01cc8bc73356347eef40b6adffd33f8437e584c24a47367749ad110b5fcd1f85d66b6b383543e8e4438d709fceae25d041085306dbb745d8beb503cf75d42f1d4f4fe9c8bd7905785b1b45372d702d64df66cbe52eb506a05a1a7ed594f9e26b4b795df0866dbe47c17b36bcf6b3e79b7af3b453e2baf9ab6215dcfa710ac51998f52c531f4ff40b017f4e7a803011b90ec2c4d7b5eb3db4b46eb837d127ccf77f2064b033a72018dcf01a557b0eb8ceca1c94c3e7758b687f6e40590470152c34debf887010ff026dc6662be9bc5e562b4a606b24ed363b6a675fb45740711ed03cde07be36fdf2d29080ee97b9e3f96eb065591d7196a2f11fcbe7261a8c65f44a87a7b6373dfa64487c069ba9a29e0b24b203cabb428c8e3081dd3104e309cd282894079651939f688e23c12d7308c1213a7f50f7194a2afbd4f4fbb5f1f1573b1baa58c9ae2762e215a221dee4383f4285dadaaa7fa14ed185f3c7b1f6e8314e817335ac2eb715fe83fb19ce7dc6c96ad28b59f55ec7636dc22ba43c2470db4fd34bac79300781d63d54783ddaeb0fbbf731253f91d2aa99294ba986283c89d669aa8e2ac2f2a3effef1cb0c86413a3e9b4ab9ac4fa36a05746ada428c5e6fe7d682c1eddcd75320bbc97558d4d113257f866c5784208eafa421cf05de0de32b7844ae50531699e168a0200f06809880677064110f669f2c8c45d8a7c4fa98a27eeecb6a70dee4471c3a16b37f35b26236a666562b940b2480353bfe96f308abd379063df321e291ad15f5960205fb0c9ddd50b8d01db7a3e639008aa22c7cc73b7d0c7a13fca312a0268b4200c73daa08366e18845b814c8c16ba16787f4c2361120a33271fb575b918df4e437e2f2981be1345e5bf2ef4498d1863d65e950d586627a3b874e8c257a15291af354e075487d359c6feb4732c6abd06f8b78c6132f8ab53a8bb2d2edd8d61599900d279f28ebf62370e256c6b41225b526b934473f94d13f1eee525acafb2a679f6698a3100649599b5b830a9b88bdd504f6fb61c8a7e3111aad4c1e1976870dd204f20eb9ef98b87a37b109b51ba30b6bdc33e9d030b9b59996dd7dcd45c6de608b6a8c69742d41ddebbe5dac396d2b7fed7161f0d79fb8d7ada47c1dd534f21398b7e2343a182bb58fd5ab4a8038383ce5900034bf2a14771afce6928a0dae062cad1d293d40a21ce27e3b9833acf480103a5d396b4f7eb730f29c2beae524cc4e275435c882482387d4e484ab9b35b6f444afed789cb15a3c0e30e717fd24cddaf3565fa35d8c2ec24e8d7c60c6b69412d273a9451c2f74801906085c863ae0fb447cae4f62c253b7bc788da6eb3064b440cd63b4a8398bb2f8ea5b64701d0cc4005936ac9da5f8e27ec15430fbee9f55efee454256f432e028f1e7daaa21956dc0074f8c22d639de94a0cd9e5cc77c120f6ed25bfbdafc88ec08d5ace4de659ef576a06e9bc065d44770f45b98d08f2b5ca6f87ba6a6959ee5a243927643d94dd5e3b18de9ccf9fb1da2a1d17e3531b26795098487094ec750a62298222e6906bdfb0e78846a56565fae6d3e5323027d933cb37e86643cf8408ae604d8d55d274da6cc36a781740c1b92bae6ce6ad62923ce59cdae941e17ab29fa033b9d017480b2589336d5d061f53c579884a2a52ae0602c95461950faa489da3052a789f82756f7bdd92734829588cf5b624a0567d6f654043092d761d6ea695f1d9b30251c6e0d2a62a01c7caf44aac86e90b84eb07f9d27c50f3e7487ec69fba032fc7e798f86e82b005222c92f0fd8fe01f4d62afbf4faec2ef33ca8e48486e87c643e85b2d1fe3e605675d7bb18b6dc444687594baff751e9773cec9d194d2e376b36f30944084a37e6e7553394dd1585630c0836b8bcefa1cfd1c4405ddc9e9370eb4da524d840f270b90e03c7ccb6b00d61a16d1d58e068d53f6a97bd431830da25f4eb7e4e06658bdf576306bbeff5dd31ac84942a5c8f1517f93586b649ce9d2ab95e38fedf02c5121d046bd110ea6195da92f6c4b18200f0cc8792be0dfa10f14a3b891f875798bf7459cdf56353b32917310e22ffeca2bbcdf64ffc1ffd4cebe9ce0da479401fea804e73ff8433c478e2293fff132a9f652184712f478f45411dd1b0125bf62a1eac766567a6abc6da2016468ce1965389557d561794b790986db4f0f0f67392aec31dc6ced89ef81cb5096468bde143324ad9dbcf177fff13f2cb468556f62bc216f87d97caeb0eaf93ccb0acbf95182c09a6678596b7ff86b4248dc110090b83eda3ac5ac282e938f2998944bccb2613c0571ca4646b34f3139a33e19f609f2ebf9eb455ed188da0d8dfcefd3566750cfaaa8035c892cd9b3ce098c20462e86829dc33dada5fa61405fe4a99684c6c589d404ea4031826e89a1df4057267d4e8ef61c39968b662f9850fcb06e325432f44488af8280688642fbf6579ea8e93628b25f8240cd62b84db2c14b03322cb40b0b36783ebfab211a958c88da8d7e7344becda8a7155acd4eb800aecfd995a3a124c41fc072a97712e4d2252e028d7fbf46ac68f5d71f1ebc9b5f3614c5219153d892572f9f887f3b4622f675560e7d33849165376fdb5e8bac99d06324fcf1461ff3ae818176c31660c287605a5685c02353c4ec63ee19be9e95e1b374bbdb89cabe4987672747dbdfd0930567930f0ea0b9f20466a615d955a583ea3415505192dce7292b88892526e67a0c2607a2d65aff6d5b9e3d0747554eacd1d5d0e674998c480ad572012c1dc14413174c38c8de369b01b2e656e0ee24dc82d1de9796b771b9fdfc46bd001b1c297bcc1e44d6dd1b5402ff122252861f685046401420a31c1f471ed35264bac38feac65774eac97fc6bbf5b6fec0777e8af286b4e73446e7021f9e2355779adc26eba6f42187cbdd583b677d0e987799e1420b009dc53a93c1dc3c8bd3dba7d7072e0e53b63d8f4745d75cb94443f4c6e8dc2f3fd4d27954404470966552df86ed2dcb949faef1409064cc2d33047175e404f11959713ecc302a44bfce2e9c8a62e9cd6d911f1d61a40ef98127536c06bcea870236fc97e2638b543ac34c4d25fef10f8c22626309be4bdb8ae253e64bc05146bbffac230553919608ba6b452bf0c59f286e8883db28695a1c4c22a23d38da056e680336654d689030137ffe27d93fff8e0a02330070413b5672d21e5e3e9a1bee8cf3d8f33fa99d3d67aadbb7370c60cd7ba924980c9bdc224a22507cc7fa42c508483bae8fb452ea4554a8b023a91d11b5da8ae59621c9aefe62591d60f48c8fe1302b1eb3b7610870106582b6a7dba7ca1db785f640b4c3bf3ef5b5b1303f86b59b838c02753bd709a07f104d073ddcc61f7cf66b0b35a30794ee01d40452c24afff7f196829cb0a98d073e45251cc2f9aaf7804620cfd46f35571a4a8a248001e5a1dd55a88810350ec1e0bec0d91bdc14e243e586fc3358cbec749062e920cb81f794c018a3aa4f123be8d69df05d784f22f5d0e6368a0b41f4893f89d9350211990b41104d645326e2e09a24f5d3a42fa17e5824c0e511600d48de0a60a38c8bb89a58057f417a97008f6720d79272bf4a54ce363dcf15ff9b88313d8aa04ce24449ee41abcd0a42f4df5745b798c4b39365e226dd250f7497199e5c44661bc71692e59daae4f5e9811ee0d0ffa1fccbbb0d981eea2aa01a043ad5183484a22fe168c7ac806f98c489d3686b813a0303a93206b13a9a1f26f1a2b1e87a80e9a41d935d83b8135d060584ce075d60068eba3d4a27bb29342f3fa7a76ab5f73b8846e36495999649ddb461c307c810553cbf482574996b6c51b416ae45ec49c76a1b5b6859c7823ba3f1fbce228204a8afe95beedab5c8234196ec0aaeabface4f9481787fc8336950ed40a6d9bd79253a00990667496d5c1baa95de2ecc1974373db599113688e810b2f34f42655a6932a940b7928a367e30ecf00d5639f94e27287733372ddefb2d3806ff1933a181c90517c489440011915f34b79d8ab90611195a0696e99b78cd49d2bea7dae96fbf4b4fd8a15b937fb2c2d42d1162b373f8efc00fc3bf206a28876e53955a8b580db0cb2f9e746b304782902866a16e32b64aecfaa9abb9bd1ea0606b7976ec18564b924eeacabd4e691d87d71b068803a2f4e664c1b0d4350c23975630406d5632de8798282ed46ef94411bd6fed86d33650f05595aea0b27d0047a5d5b6aa3c043a1b945484559cf2c1aaa3bd3aa459c70e450fa7470ff7cb429687ed014c72423fa669a7d2aba1147a2ada83211ceb63b600bd48a806c07284341724df43d56b898ee83671d17f478bb346e266fa847fe58be82a1b8babb8c8372f3f94501c1a1bad2e6d3c974917b6e27d32083d6a9db1806e8d2ec863b55a785184cf666112117dd1136655b7e65739bb0212678170381528ff8206415123eeedc186f16ab25ca59e27d4e752ce234fab74c8f9faf748a27161e9d0e6335feb5ce9f92318d78c33b451ebba161b0a6bf3de3f04d6485ed4f47f8cc2fac14f1384af430b64df0cff3a21600ad66276a53a1b2983084a8b91fa45c787cf90e82fe7b4af396a1595a220d0eb84dcdd27f34aad971dfae2a9d7e708bdbfcc083f5db5b47ad0893e916b3d1522a7a78502e347411317f8fa83aed3a281400693bf081183d26136f459472ce26100c360b74f718ee11f960b3d2f12aa934a720d555a6f822adec6d6f6c3f535a58dab5cca6e72c280fde9c4ee8dac333448dfbadac9022946baaf8458f9b3bdc21d6d3f94a9038d0bf6fe9f376f80c5b08787911b1259ec6d3a614974e168322d6715925069186776e5e7d8d81c4b4d8839ab5c1cf42fc0750b57a0d35985b27ae87f5d7e56a01d8ad9ddbdd9876a8e8ddce10b74375a087ca3c1987d595e57d8ae5410161446120c2cbf9da170506f30220df410246ed029b5063b58c8f11692907558c2e7c770d41d2ea7bcee0229104c7255d95db0927bad1ac3392f156595e8c8dfe1ea34c693d2ed28abd057b363e5b543ac3083ddee5937205a1970adab75532a218ae67c1a081ec413c247991bd974bfea3a0755fc7222e95c261e6db1ffa0b7f658b8e98d051a6e1cd6da55b6c936cf775af22cb3cb1bdd7373a006515e36c7aed3cfe6ee5100277b68a65c236b35d6732db6c67068b30d27cc945b12c003a55930043300bc1916fb8164be0fc5c6148f844cc4c8f847a145faa281e536650a91184569c6e3550063cf4c964d2d28f51353156068beb50498cf3007fe90ddf5f53c39846eb7e00689824aa2865d2887b89b3c9250d1323cecd619daa6e1309d02050c901592e1a06529db9957a034ebea7cb4668c8f56e942a83a5f71885366e0c12738c4dd448a830223842a75edd4900726ddad47d7d98e6683c69060f9b83645d8fccca80ae0c4ea75326535b217a68e20579f0c03761ecf1ccc0c4e934b4be62f8acf8c38dc80a0cef0f36f1e9b332407cdeeba51a1751dbd23449bf0777c91afca3bb1737033d9223e116218121b1410a6b89f4942281f6d472964fa7a226d5288d63030f3c8338e8391062c2d1a433345e2d66b43d0bd5641cd1e806d88ceea4cba533c654488d0da5e1e081c5a6e85e5e6044045ba1121b12e9a39bdf69346035f146367e1e0e6705c60232b5e1a094cd47a73f89c88cbd87369813023a0580a3116b0cec438980ab4e0a0e8d562b31fa5be80696e8bb67cdceced573f972488ea40355b1181ba54e0a0abfcb0ede32d70c4a6b9ab9dfe59e0a0b153634e3ff035444be3f5f5ff5bd77d2a4e0da3cf8d3d88700a48b70f3822120855cd2c2962a28aad95355e6f3ea7e3bf16f774a50727abf32ba6a0f0a09ff5cbea758223952dc01d5a3609898ba583d5b2f9d1770664ebc5188776812b5f8a70789458be59a597aabace517d8d7e8b7ee0e040820d86149a9c6d426e6bd8c0f8919d102d1985b309d3b8871cadcc4ccfaab30c9bdb89c1f688641d4d70742e958e47993b976c683c5602844d9f652e315f8f117ccfedbafd47025e327d271366e025884608814b199cce053fc3d216353d724a38f5c2a11b674ccc501631831484d53d020cf9bd78909e853bcc71ba6076e7eed334d8435bd39db0a87c7120a252d74746c61b055832c20a81d5eacc09ca9108f19b7af621eb1ef709b3ea10119d015eae8444ad4fa9ac2ac6d3c3f4826026afb60b0a180f6d0538a710dbf0bff6fa9734827d811911f89c64b02d6107631dcceec66c52d07a38d8333dd610d6cc12de9cfc3c6235cc25b0c993dc39bc32c0cd16199ff144bd0dafa33cd347b19c851e5149aa21927d1136d2a48d89e84a6e80d0f807630ded3d351fa8e4bf0732e0c424f6b14606f9a15b42d25e459f8698dde7db7a857af38eaaad8da62bf398ba00fd706f186918824b1605a1829c234c5f1287e806dcceaa7b94ebfb9fd9651d8494897bf23624f0e371237a016e4d913a55324e34c416b664ab76364c14043e602a2dfcc859688ea487564b6eb7453b582d733ba0263299de0476b44c84a4a8143391e40bf996be8b00ac2c825726242a35bc8567381289bce7965876926281566490ec49052fe2c272254b436072796e0ffc4fc462b3b560696d82f95ff8a0ad1ed6aae609349c5c65f6f93ffa264e621fce0d309a8159e02bf903097be9efaa345068b462875f27f45a3019c8714fb3c365dd2dc24f5a5586530cba6038715180d7b574f75c53deacb55e9869fae943c56b00b66a2e0431dbcbcfb3c1ed62014ad5dc57ea6be5d842ffc245b22d5d524cec3461317259ceca0adb1f3272a2944e0d8562a9c47a5a5e3e56fccc4be4036547499d2110bdd5d70322cbeda66056d2b282ded04b8447b9da2f2787d445098be6040b8f0e14e90f4246e5d0b9c9453fa1b3270846059d468d1dc554d82800d14daa2b16ac53a6826bd65635ce32a0c6060c159e42c559bce4f65a2af4873015c2795f8d49fa89a72240da5d86dd3eadf28b0a73252ff061befc741b62ceebb00b75d80ed9b283811f3aba561b83282266bfe911b24b4451fb7bfb5fea3124a3bf62e853d5bd35b6fa418bb93e8b0e33885f86defa1e0640abcd73908e0b421bfec23044e25ac81d0c3850d27dd9d66b378520581764c5c8bd5844ec5510725082e0a42d97cb7330ecb78cf682d04c0bcf4dcbb1028ae9eeaadf82c4e27259a91756adf4132beb014abf512adcc151c460871a8b25739a990c60c628d5142c357ec39f37e0e5ba28d0069e7eed12ef871805f142852597271adc28569378201edbce0baec843067594bda0ac0e09475092904447f8970c51570e2d0cfdb8008a6238cbc1c30f8aa33577dad0f6604502fc00fd80b255c02ed750c3cd4e3735b40c8c41c1af0052b06480845094b224fa774d50d4ae8ef78c93af1ab052bb671517643251f74ed95597d80eb3389fff2a5a31795d2891f200f5dadcf786935207d63a37a3937f22102eff27f8e29f0f06ee18e3feb8b6e2210544c05d37ca2192a673956e276f47979a5b9346ede3d5f8048ac2f09885f6bee9097e8a27b10ab2f74f4d74517897b45cc3c9eb6ab5dff42a78777f0756d1280bc6183d53f0464c045feded5dffc18bb48838263a5d48de817277d91d4e08b240fb7d8ba8aedc859d134699ec348999cb9b01b1cc98fe32dc0394f410fb0b728f57c01dd9b6705b3fc3de0b4810253a90894e04a8e6581d89f2c15dbbff8c0522f106a96ed086a1e979163441a2092fac35f1036be956044865827674267a8734160a75e1a563d401682508e1e060702117d19c67ecd515d340adfa289cf3395a5bc2d84cc3ffad80af49dd8f12991ec2fb7214315d456f090449800329f80994887458becfd0b2c68e74c10cf2a4a694b633ca3594045830503ecabbbf4d95e036214d486db66b384c2acbc05093088aa2c0f042473a859282e62154f78fa91ec1914da5e9ddb394f1928b325cd2606bfd39e1383b1f8e50d48f46e65ec4dc93cea19d714bff0cce3c52374db4ce8c3e8d7ff5a8a9ae117bc0b4fd63bcebce716606119e50cce17da601efbbad14c0529cd6bd57d866a68399b18bb175c813281c5fd7d3a8030225b1ceb4fe08dbc5cb0f29f5a14823c4381f59cac2cb0d8b730daadcfc3f7c0927f6c8c5dd2c24c45066f650b7a18bcb9ce7b4daa984aa3e093e33ab041729e491f861cfb6ca4e1e89c53cb7579e44223b7e992a51befd21ae2f859de09708d3c00fe364c99cf6a5f2a5b1524daafc4599b85b339fb2ec9244654a1ec79a48f4432eecadc2959547f464adba2cef878b0e02fb6c8d1e611128a61cecc136d436d8b7012968b9a6693bac9dd15af847660de88b9434143e9d05e63d1e1c83985d0b41bc39f30aec5f017ab9dc9e122fbc4c1a47d1ef3918b7f8e825c7750452827b30041c524e5bd68f7e1892b7d9f4e2dc86c5373e4a71227411137f2b02a1f1f6bd1c0834b7de234f94b6c696fb60814124fa3440e9e5e8f7e2e7a2d244e95ad185c9c9cd8d4e1924c541094c0fa066c5cc409d2262395d4ef905b18b8eaa10b942e4cee5b1dcfd6ac4830ac4bb2863267a041e48d8afd45051dc17c382ac45fd48925ed8e984e7fe0772718cbb4d2a79acc55364900ec8a2d48d3d600ca03585cdac99bed378e3c664829a850034162037468ca9d02d25250729b090399fa52ad15b4dfaba1bfd78bc48dca6c5c4dc37840013f532d40c08f7f9542a1b17af0d5769953b4416f91db2e46951345849f5bb6e3d9853d59208bab9a4e80fa4d31563f63f52bbbd319a6ac32db1bb93465ccc165cc79c54560f88d66de6c9e27c35f840c47d8fc641a68de4e63bc1ff465e86c34ec934172c9438d61940b33d0f9d82b1ecb6bb22af331ba117920c015ab901a8dd21ed5cbd8ce04094ec871b4220dcf5c7e96fe109bfbc66fc64d2bc029065b3d06f7a2ff05c4bb6e341203b1464eb120ac2e0d8999edaae98e488e00061f68919f05c487238b5ff36d24da2a662f65dc76854fea0e409bc00949a9deb98e4ff37773b700d4e9e075212601ac006018e3e92e0f6de91384b4e77192a17d77d09a85c68554cbfe14e708cf3cd46d47904b3294027c28150b9064105a43ffb824a3025f80a6b8b54f0cdcf4b594a0c66005d2479030a797519d500d4c31cc4326335b3a47943afd004cbbfb9098359c29a34ea4930d32314bea941a014027130b01194ead8a013cc355bea2260e8c28556b65ff1018b61d32231bf4acf4c47126582d29d82f9f01f64c20cca2931ccc59afae7520f7a8cce0e60e04f5d509aed1ac66ed7f6136a19a5e195054f8cd44ca9469692d6e623d6dc6e326cff31a2bbc2646a7b96bb2018619fe2a6225545d23e949f1aa0f8ae662067a346dfc486ce1fa0f88502ac334fa3673a8db0c6990a0af53163697c4442dc00f302d5c3fbd4b94bf5ef7508cd06649e4cce814f15b181be15a22b31ae7eae3168f4d3c6b198e8cff2c98d1dcc32b0484fe47de2f82f316423d7e72a3988f12035c98d131a655e38dfec808afc2f16391ec08d24fe821de8f97f5a03be10c1e433d7d60632e29f82523dde08b00425995c17dd0c4d839d2e70168e491818e8a87978f7560b09906952b2b5071415e824f83b0108e863d34f19c0d934b988e35f005d7fb2b5d98fbecf93ba33221429ad94892a3b1d5695a94e83726851c07e4a5fd8eb98d14a6e17907508e87f8aeba8201754e84acb38b5531d4da1b88879bfb8d70f90ee5b54369a25c418d925d8b93f1d64ed6b9ad5c7cb1aacb116f8090ea9376a4253cd086b127656ec2b6424bf9d04330a9b9bc811c7242cf09d2b159eb5fc37503aaf69df4131f00c8dcc5975f07eba492d2427caf845f064fc98672b21cea40c304a232d84d1d812c318a2bdb998753c324cc8d11b4271abefcc3659a91ab992a1e35ca18da86fb5a2c655b0ca5d391b0b00e259392d2c11a8c097d3e2a77e8d84ad50a197c0bb5d4b75c277c5237c993da4954d152abf9e8182d412042504bc6a5bd91bb046656bb41273f0c3dfbe6bb5764242e632ab0cc81fa77a89f12b3f7338a84428176f089027fcdc5e91199e561db4254aadc967550263201ae38a2dab50a5e13159dfc79aef71783ef6fc8f99d8156bed4be9abf03c6b988b5617a9290853c18adaee05411064dd9605a898f4256a468d92c9693a8e9774f62563a5b4c92e6e9aced0c787b821f63a6485555138d3b92e7dd013444a1d40d2cc50005a84ab089474a5ac5442eef799b91bbaf37322f6dbf1d263b1c983ef86c4de7346bcb42707b2a43c15b063e84fa3d6d1a106c5c7ee061ea0c99c2215caed44d8ed83ba59e984763385628482e48f9323a983cf4d39773806c3c293083d520ccc5ea1dba45aa12a616c6a49d7ca65eca9470c7053ce5c8d9e2d22160fd126c334e3bfab76fd87966e199238eac5ba8b56cdbad8e9e7b5761f5cedeba0da8ae103ee0c075eed604cd4a6c31536d5b2def70c13c36da37a784cb9d7be5b78674a25dc7e49cf30ba2e39d6cfb152c4a335c46045424afb1f4607d2f588ec4d9438b94e0551f74318a792bb33e78f281952556f6de57861e223032a6af3ee02c5301be83b2d32a2d560c88749f748025699cdda51ecbb4e92f967e37118f9529ffd118645680347085d409cc4a07927c834e6dc6823aced9e045ae5c85864e2e0977d92c6916027c0f0fef6d8d65ef4b72eacf815aa93940e55149b6c071a4187d0bfa464de6013c9e2890a973cb6efda84b1a07fcc56c077f532a982b0c77055e344087a068afeddba5848b834c440d203c418bfb0cfac0224f870574874528058e2f6a522c31d511b24326080cf52a693b075719397b84ca5e2c80bf16e975c12f9ce3740f11f8f3f246e7a7d20ea0a065ddd286f155212cd2a6ccd5bc9f89219409728bb4bb27089eab42b305541b1c4c3d8b7bc48807e7406f3dfc25d112f437ab7ad1f182930bec560ee0cc4854a484068b9133b9b700b9990a7fd4a8fe146373f2dd5d2f06cc6a71dcd6a7edf3bb4e9e828a8069cc447271026612ddb3b57021df6f317ac70cfab880f7955991cbebb1692fad13191a8f5596cb96474058dabf346f0cf80d239be455f2e8c519a9bfe292cd2daaf60c291a92c370683998dbf07ec74fe80e07962d0e6adb494e25d1f025c16c32979e5e0338d3dc94737580fcd65bf2a417f4252f71e78e466ec2ed85bffc086285ae28f371d637eb6f7a446f40005dca3b0e152a8ccb1b17b0d37ba66bbb1877c7d869a7bccb6478900b7044c3f2a7d199b6c4b912895805f45b5711dd6e345e722df3fbc56a1b1be1763760ec71b3411319b8e60c7d00f3f223857cedd89923accf0b3c18e69ff97aa8309ab22eac4a659fda4a8c781c8a48b65c3afb1ee39108c7b9e297003a8df4c1936138558a19ecf5f9e79f76fedad59c55dcbf7f7de4fd7d20125ba451bb95898108ca090c1e283b93e65cbd3d2b560cc6c93fea40e88638a45db083cf0f404e14e5d7bd6b2bb1c3645c3645101f500667ae236c1c3a734a501d1c867515867e00a935a353ec059cb56a00be71d20eb16c99361941b44c60a724700e46e2e3de3399af04cba3e1a20d65e4adc3560523ccc2d9060b25eb920e30d0fc83adbb47bd8e8a9915c3e3640a622175ac42d94e7f52b10a4a125b7b77b0360efd2371e0bd813b4d0b7996dc036a6d0fbd53c6bd174ae7d4c30487bd8160fe1ac04051bcad5647ffc134383974a20b5f43ab589d973f0157921b10bbb4b9d42c76f3ce2f4ddc400552607fbe1517e297b17fda94b4c69196b191f46073c9288beb488292eb41a30945cd119783341a4f1b970df459823d9ec0d5351e68490f2548d51457dd2760dc131a24d7a4fdf5a4e759dc63407643ea83759dc57447b214434107fd1ff251752b2fb9c3b3a3374a8312d95ce141d69ce543a913808ba35cadd6230faf10d7d7169c5a883227f9629d22d633527d977e5aa21fae2af800ad3eeaf807b42f2fc0e827ff6c6c02d251ab753ba6987eee59251acaf27a723af2ca2e5de13865029a725f2f509854ba0415c011654adfab220fa7adcc08154b0b57c99016eea33e8fd83cb4e5848b90879bcbcf847534666a8e4a6e1719483ae82c0d27b77b5c44817ca92bc7202f6dbd027edd4e914d511bb76d6d2a37c6d1c40cb80e47c94dd7ac9a41f96256a1960d46a7fe8b95798aff65de987820cd6815d559a81ffbab853063653568e6dc07defa7c10d68837707dff763265c09ff6abee86ced30bdc20860e18690cb8b59f3f9e2fe9b02d6444b7680f1038a70ec63d22084919481a72056ea1834e46f193e92e285c6d5fc7753f4480ddee633b13bd5f0307e55ccffcb15c9a42075b3eba88ed48bd24aa437b78f58a466331df520b26be904c8312e0807a1fab253924df88e5b56b513ad19a86e3a539ceec3d0dbe8e168166444b25055ed8566256750d2334c78935650a58802949016aa8dcea7b07455e6c39a6fcf0c9eef93b699527a9a02b1daa9b033fccaff5b76a76cc619b9ad5c1ea252bf89168785ae744f0d8debc1c9407575d658eb20c59339d1a4373e306e08fc083b5d0171728394693a7833c94c7e50d9774bcdf90962afea5d842900572c333463a2f7a204428b6300aad54097bc5c9e051ab76cd68aab4149a007490e97d164c9e1237b10b6d664b471ef9b1acbb5af38c7a6ad822b294dd6b8b86d39cc18915c31bdfe8a86911f61b5013987f1335b7df43ead9cab7d80551b2796c2682e6a11c39b06d7cb37e5253a9599ec46b93faf1e5ce75922cdde0253587ae8cbba9e26516638677e9efe48498e9813f572d7164209be7e25e61dfd0eadcddcc457bdf633dde69f06c5650c8ce1d0460f68f1ba5618b02875a65318cdae8db77f812aaf027b165f04b928abd7877363c8195943cdcbbab0fd8c57390e32862224b5bb0e76e6e36cbac0fde927e42038e4c2d0c0436b393f5257105ba1d4b32c35d34f64b944b73ac32fe5c46b497157f0c9f6646dbbbd82113cebc5d8e39c34e6d916fc93a81079c109908c08e033a3911b44e7550bdd927bf30062a7fc512c4b2ec76333602c52e6a18058e257722dda08c76cf767c8fd3b5c0a85cb117125eb8eb0e8056aec7e668622be66c8b5cb73d872139ba3b2566c75e91915b34b205baaae174dcf49d91e79ea7f250195af3aa370fe171cdeaa13d95e7603343522e61578a59310de788219dd804c31c88dff0e90841d8130bad85972c4d40964cc0875fce8f41bcb1e59f9013b5128957558d58147fd81cd141af41aa80a5e7fc87d05cbf8a71179ce6e602ea87d3efbcab6e64e34d847906a6aaa3d862c5ce724bfaf9aac695edfecabfb7967202e2b9e21bc648ca1fa5c8fd5d3d94fa17b49b57e7c17e93314db03b9fb0b14ef2814f757b14f754574e8961f630c0f57929bd4b87c1247cc29276360251c5d5701d60f561c357bd7017e87a15990fb0d9067c7ec75a16edf1086f68b3e61564a7f8d5997ab04da5eaaad4becd186598dfc654707d00508e6e98adbd55afaa86afcaefa5d55a1d6e5e2be0916866f879da072ec570477aba2b222b36d8227fdd6baf8419b4060554d6846f74bde6782642eeb310bd1f586121d7f36f2dda108be2e7182b5c0914513eb02351aa644323e639caca248358e8d6ee79905ee3307cd231607a894b87043eff7a3c91f113bf1040911a63bb52c40bf8749ff72fa050a5ca6e66d9ead40a4488602a542cb11119ac8b86760560e3e638c2cb5c3432c92496f2ff054233624d87ff5bc63d735fd0b29c9edab53ce0ca344f379ae9e78e0d922403ca13eaa6abac9c26b106a2edcacc307689cf0bfb86269c9f4ca964dcbeaa08d2d465f242e263226b28f0b85d8f8cb3ba98213bb81cfc99d81bb430ffd0615be184c3ebbe5a14f3eaddea11c8b788f1c428451ddee62084cde2477111fa219f84998f4f75a2125da2b5d6f5a58591ae8624901837f6fd684b94577322c587f9da75d1b0e90c20fe10fc5c2a36d24c847c7040d1472d054852d8a83a47ab2021f7c3cfb17deac91e657b2bf8c62e7d27f713000965233920f017c9a02838288a6272241d985f14731f83bd85f1e312a5a28e9da8ad1e7068a25656be8ede1b379370cc090aafc7eee7116f1407e40a860bf1b0abf2353b070910381616ad733a1a109c373b6b49c1414c81896de7b9ec19b2608ab34a08deb5d4e0c0946c80a3ace2d1d2908143c16412fdfcd50381404b9c6100e13d7f021ea334a5645bba416e15e91b5399751b310a8a1bcc36bd5739dd806ad255d1e27600032e47745b77fe890bb4804ba2d5c5e618d3af79a5dcc09fb90819c06e0088ae07b13c8a56dbf98d99a152687f19ea245edad78476e31909cfa25dbec18f358a2c1c2361913c2f2116ef749f0e47c6b4027cbc034401899bbb89576650ddc7defca591b6bef4fc4225c8d30c072f409d68d0bd23d11d7451aa1b493432c1a40b6b567e331b6503fe16c65ee54c29768a42c7cad57e1112e6356383691e36cb92e9b7315812d34ef8c15cfd7c22af4388627318a761c6f2ccc5fc7305505cca7ab0b012c6d994f6bee0202515bab8574ccbc2b9b928a10f0f133edb2252129848eb2ee751637b6fc646016020a182cc09a1f0ff0c56255abbe5cbb292023b2b879bdce284760b2053e9c256b75da61f88a108d98bc769d31aa5549564b0017c20811f6083c80d87e748f21788277048a9b90c13a944e2d64a7dd1998004b591df03de1028255417dd09098280630805c86ef81fff31e96fc7f962e0ae6a0ad133bc7568974afac8f7750dd138a64d84b798fa9e9e1437ff5a11f669360b342826be6638901a3ebbab0fc4ec92acf098fb1d42d131e62e119f2d40f3dde86b42c28d31bfd82327591ac5fe91cb8b2c56b796c87f7525e8425ec644e034a9d433ef0c6c1ffe905c41a506838ebc9e6ed3cbbb1737f0fb7cc262f37b1ca4f83afd22bd20c727c7de15f9c18f5806507050de8ce7180600e086637781e5e0ae37684fbce9d6d2795bdc61ec67d341320b549848875ad08991ef85591c11c29388ce9d678ba084e421bc298183ec7735a024ce233a9b8868cf906fc03cb0c2c65efbbb7006f1435adc203d483e4f9587e0e4efe9c5c5e0d5e8097d65e4009048231710d7fb236a3bead26ea4393d0006463cba090032f70dadcf22172015a72eb9a5ca2acab64c045a8d41d8eb4fd9f0f766d2d1bd05cdb32587758ef6156c67505eb6d88a6eef3082406fa18ee8ee0e9aaadb82d29a2ee379a6cdb838a712242202da190c7e060cdecf984816a348b1f1c44076f809f6b192933391541701c04f3af2d86a7808832b5c486220c4a61476d0d14cec57543512764b9bca5803478b60b779937e3c5bd102956125b02d2ab6ad569a354f898a12392b39575a2ac553dc391884a58b74956d103ce29d08357b7dddd3205db2ddd318988f0e44ece5a69d8b13fc35bff720b6f7c76d275ace060350e6d398fcb68a116d92c1a8340210b299945fc51e0d4a024856ffd233e8c8d66ec1c107470154fd8694697653206a1e2d40cd973e301ef4cdbea7cec418228ca8b5836a4c66b4df79289363d0444717f2e454c5fc4d318b045154874141b675bee8453bf836315970f3f88071e350ed680d7304ea1933f9627ae4ba0823bd4c3e73c0f4569ce9854cc873a34ee83181817f73e0fb57073c4c93711c9964c90981996df2cad2fe05e6176b0db17b5b2febc3c8333349037119f575aba3a81a2e6bf694798abac71a215ba88c6e054bbaf161759a2378575a99fc339cae1a8ddc405da26ff392df825a1715529be2c59fdbaea66d3ce23e7075e0c811e5ec257a037f06a4a66143d0e4889147f7023088140aaea4ec8d46de0452854e60e867d73e1fa5d386f2127d09715b78f33d2c6207e702d5de1168b45cf363956b77e85b247cad3204b281abd7409ad2af4f91b919a5e4041b93a5ba59954d01defa12bd31367e3aaf8aaa6d098cfd6abc5a055d204c9824d7c31801fb28353ac386286bf542b93ac3fb262df49a2cff499a7dd59c53d421bc9aab177db670113061da79fd4079b9dc8cc94531c15c05e062559fc97efd933f83f9094d40a26182350ed59ee9f1d9f173f095ef103928ca8fa1ec04a95694ef270b3c007e6f184a0b590b33fe31600143d198a0cdb4a7cd092bf1ca05ef7d8effb6ebc761902d387efc0ab7b48c54a2eeb06fcbb8bc283f1b7c37e5210c73f30a045209f2763ae169d736c328df38be97c4341dca0806d20d07e87f2bcff22823798d83f932433e0747dd750326c4449242cb29f33c70322f2c4119e095a0a5d217cfb682dd85ef2b2ede107a3f101450ad953bde6c1e65ab510317b61962cfa203627143f0cceedce73d4ebaac2bed6d8cb816d78c968bab3bd4306c088c4f3bcb74fc52c981c1f5a68be5aa76b14bd13577b8c01555e18351eac71f5b0099feffca4367d31fa3a5042b3e64b84f7645ecf127ca1e07df261b77cc24989e5285af643b4264136f462ce7fc72eed5f2c15058e612f4ad5802bd051808c71587ec1f74264fd61c017405327bf17d9073d2733232a7698d6801b15800ef1cc1ea80358c2364d0c02021fe43a08922ee6272d4313318e599158caa8a77104a9d1555a686f6252f54115504765b3c89479699db06b58cae9d8d61d9765eea4ac5b67b2e76c67f1d9106ecf0722a820ac8b3b093e67a7a073daf5375c963df18923e2211721d47a30660376013f07a45903a09bb0ea571d59ad7b3675f50e987436039c5d3cd182dfcb2ad0d4fd76a906d8f734708fa0f8383b8705d8c19d44e2ec11321f2b493e729788e929a37664e15522960fd910a5620ceccfd00ce2deccf0da887e6094c6620d81619568dcbdbe5318122a323bec4c82ba0f51596190bc144f27cf737885473f4e468662bf0f026f62af9f2af978bd18b3b51b62b465c0349869bad1c207e8a0987bb2e773565447801e9cd0eae44b20a00ea0406845cd33eb7918a3ab484235fb69823b0d913dabbd01a3c1ad8123c06ccf005a5ba30a0a86028a696fb5e325696e100872e70c0a713783cbdbe9b6f986e1cce83ab2fbbeb9917401992fdf6647b126571a39abd8496b31a34992bb73d22668741da476af2d1e4fd4fe0ee9590d18bc7c30cc85ff913f7c5155ef2797211b40260ddd9c4803066c91e1b611e5721f6271c211710d3379a47e8e70ebe7d5d2065cf1bb82dcaefc50d4b20b5a1688d2a2a05724bcf3cc91240e796725453f882dfa07b4d3259323ad1285ef0bb83de8640da88602c55b286c2ce7652e4071352a8941497bb7dca5974a563950ced118d70c3e3ed3e5bfbb63723a712bd1900869dc6ce2a68b939cfaa98313c8c80181db44368937857e1fddc5ad74f6152c55dbb0fb82bad1d7f3fdcb1d78ccc79272aa05ac010f2fc4a60cf82d0c414b33382491ece8d8e76e2fee958089be98378b6ef8cbc108bc70f6a1c8e15627307431a2d68750269416cc1edef04907ffd6378352f17986f696bbd04d9712374e9e0004c28fdd9a3a18d26105b191bfa7a3f59459d6dc54befead5f76075805721b89f2f77f43f2f20f79219579185b083bf7020bf1ffb612de58b002e04d06930b8927299561bd88e60087fe2ce27d700124ce92d3ca641b4e91b63fbb53e540c141055d07b2b100ddf132c8a079ebc7bbfcba84334180d80ce69ce77248ab117425ebb3ad3452bed65e51d6db2a399d1e15c725a46ee6529762ea66c56e9422f5a7873fe3b0957a27ade70208bfa534cb0e0f055c75f2d83584f324d072630ad594846bb2de8a2ac406f05bffeb5fdae210a73bb6c211564124e3cb3400c40d2404a0a7ff8014362152f30b915167f98e57f4e023fec2c0992e9502c02bb2b44a6fb9c50659e44a43f9cbab2a58a7cb3b3be73e8e0631d988c2abcc5841682dfa64b70791835dd9ba917c1407b20b473ec6b19e1bf32e181a02644d49fad9f69caf92aa78746c93925310ca373da661875f38fc7f60dd4e702bf19eb0ded0410c1ffa54712b713e533818f5c2ceaa56d4d5b7a0cec03d613191ef467bdac0e4bab65876b25c05a9f9cc89e5941a8f63d37ca8a0fe176316e2e72c98670f1c25edb1d5c8a05fd1387452279d30d8f8883980f298cf0b09641afd9e982aa3b2c81bae84a164329f3337584f4a4a3271b1442109221e824d5c3c5c24944cc380d4b9baacb3c13e3383ab9acc76bc85bc2045070690245c1b747e06a9b88c13ba4a2e2f6a0fe303058859c7d88022f501467262b32b2a301cc576cb7d2e2e557eef9b1fe08895ffaf92996498eb9ad0060b4f2d45634c8d5535fcde0330e60575e4ef593572fe1bd74702654bc8a1c4b8a1165d289ace2acf4f09e97bc711662b838c83a0d167b2afcda4c7863d84d11c9a9393d30738279a865a75fb5859d8ef32c2f284521c83c898649cc0749c9247119369e7ac8e5903c79d809b093662280975c49045edac9bd236ebccdc1dda73e1aa94222b8677a5a9f63c89718544d38288914f05fee5e4d1e3eb7fbd2611bfb5bfc445e11c7fb0ed22f56e6c9f7f9d111e4d1e2a641dee143ba177a96721e354f88a668dbc02756c7090e6753ed985bbac94fa0f94a9a1b9c32431e4f4f4d01bbbaba6286ffb92632ccede9395de19750018f044df87d4602b42369560b0c1e8e94ef9c6fb9af24d42798dd116537bc05f6d7472a575ba38a2e489ab710e3c19885bb3f40855834573137c1e3a34ea25c1e5efb32961ab2dcf119c7d5d2e5d1a78808978e18bd7fd09232e18dadf2c3e7fbfc6a7a8fb45b03d65c00c8470127c61b7be972c459ba5de7032bb47e468272e07009166d9b79021a298dd12347ae13093cc3ef06a1c9d7bd29fe29a76f6b49297db9f2d140172c31bdae684148f7e6be9507c693c2d1106496a316ece7fdcadfee5ae13f9191af7c59943b10fb19cff1e4690b623f542ef9c454016c9d51dd512559de403b7cb277ef0d07bbd7a8187aff50b1be9718c390fb2344a9df20c70d62b4b2733236059cf5c765332e9add6f5a73f306e1b1fee90120a0dc46b909fd17a04e54adcab2e2b3db58dd1126be405978814d772b670fa3085457c7ce72671ac5f738ef0fa0c52554b4408e52d966bc0c88390a783d6ae04dd7d4e17a83be402d41f3cebd4f7844f3a4229fba44fa7e4f7dc37f741cef505cce932e4fe5357377e665cd6b5080094b7b565e2ced52ba3ffc9a92506264d12cda4f17082204ebd2762bf630e58f37aedaa74ee66ba036c71c59690303efdab830283a6f899adb205b109ddaaabfa825d53a6c027530c337cd00f6570f35c02fe26f0c930a2ffb6c100296b1741f73428543f46938727438b8790d7844bd56b49d7b344f4d206cfcaf133eb1f075fb3209ead568837e293f81d2e9855d8b05a61521f0c640d674d552c44dc924a6e8f9e893b29609a4eb5ba604ade9f343d4530e2d195a318e7f0d87a82b62b1fd1126f89765a2e293f7a76e7711a8bc100d436206956587f7c4a6284d0df61a0de58660e1d4d994b009e37036a4c97b5164dc63da6cd7ac8b5586116736093268b6e45bdea96ca63a2ed88eeb7d0e045737f39730e08a7605f43d20fe4c0cda2c3126dc2042b469ae2567e50481be5de03d1248cd448b9af081850edd652c10f7089cc080204cca0d0278b0f10a3c98e124100d7dfc871de3f15216d56536a05d60a80cc288f7da0fb5524c08e77d8205b9b6a522f057e6b9cafdc688e75b96bf2926981e8ae3b9a1c3470873e60463b3112de47d102923cb4c18159dd97654e53e1854862ac8131cb3979197a6fcf9fbd1c3c5e6896f0eef66d14867ba9c81c0e825a0c3c0998d32d2a14a8bdb789b5f63930df82e744c4e4ba4d74e1a762418906496165b741593cc4e83c103aa6462dfe7e619ce89333ebafb7a75e512824719c9603b603612c7005442a3fc282ef5c8983fe60c25c2534d534e40f70b96a2609e1b70f99df9957bad5874ecb0db8c25111a1ef06b6c9f1b77fcd74d579f36665654e494ec1ebabd3165331d11c8d278aba9e1192d97aa8da20ed388d86dff64354af19f2321331c1136368713b9c7526c3ab1bca1037377071481a3ac3c39fc2ed349d24c1cf72041fff729d12cf3c94f44f4e9da056c9b1f3ede92e2500734521e014898a0d83b24d9e9c7db926de13f9ae8e29e71dcd88d84767c21ce9ea667bb76b4659334b5cf8470fb459496ceabc576d97bd11f54765ebca961a356ca4d684d6a709c30eb06469a5f168843da934e4856c41c27aba189baa5b9225b3baf9199e1b984633ea0d89e98ee260397009f6388d2b2db57f73dbe0cd109fb24168a9b9f545e83b4998563b61f23c28dadf341a23be984c19ba5b57a1123a5b8de81a68affb61f37d238e7123e9ea0beb9e33d187928184b1fa2d59c2a0c81131dcd6c5ddcb86378db952461a1b2ad2588c50eff96138351cf6d91a7112c0d96f48f04930e4673931ee5e22deb389f3f3a54ebd3ca033ef095a269a2e579d3613cac04b480ba42252dd3880e7b3fe976a2849a2eaae435d7f46a044db53ee459b7b183dd9065acd947aeb1fd8cbc9a4b44062bae8f66608e0118e704c36404cd080c7a3f96bef90c41b39e6d392a9694aec4cdaff7eb2cdb6e33e4b51420183e2f524dd451005ffbef9a36df9e34806a773e5741791790bdcd7e7c69962267faffda66073c9e7e2e9ff2a6644c44374a932d16527da6f399a64305a64983c6c2b5f55f6b630ea5fb3c6135859d235dbfad3b76350bdb2582c130aaccdd6ab156c4fa0110790effdb67815785e01ed558b463179b4d05781cd08a1e5f76d432d4e8153083b19df71cf611c1cba8bcd902aa6c02be5b032dc0556e8c6e72ccb80b1b1f1012890cb8c23cdd3cf1871997b8f99edabbb0d1c8801ca1d7d3d5d500cad930e54163deb7d0ec591e0383950e15e9f8d6254e2ea39a6272f233b724aa5e3fd961a42121cafc02184680760995713f0d92d007098c0b94df1325eb2a679ab66c175c711aa88f7b2922a582042a4dc64cb4db6dc726f29a50cd603340496032779a35828190304212006132f46c81469c15534448216e38644cc8e93e66ed43163394e4e232aa708354d67016e5f4e0cf60d572385b3c99593821b9315ce2e11a8c218634ce38ba142dd42af503082e5ac5259ce0c37ac0b2d9c544e05dcb64e120e98319d07b879e09073ecfc0a6b54006e740bcf59a456c5801b0d3bcff216e4d4c1b9713951244c092f2ad58815aa105aa54ccd82c08d82a9532a144dc2c2b9e4a4b80a9e1e30747647ca9c0090c08de81472d6a20d740cf639b58db3eb872ea926b059f6a80517270827ae49394e1bbf699d15850a25e70f51c7f9558377ab23bce779d8f33ccff33ccf3b697c20d8dd845e701b561fac0083430912134a6058211a6241b3a0769d40ce058c372824d029b9012ac808f9d1c3a74c9821b03146ed91514f508272dd68182595859401dca8578db284c2d1977a028da2e5443a29d6ccad5e1da15c88089d5dce6ac5c7f965e1f1f304a84690294f6074c98ef24dca59b73a289d08b899a018c8c8b5b82246e5e21412fa428bf1c476f81a3264ca0828cc0ba46df4e44cc08dc85973e795334ceb144008334e0c37373295057084a117634443bc7c6ce982869ad08e989c154c84934f28cb1ec5a834e890ea44bdd4146227cd52e1a4dd1a70ab5636b7ba8266013a2b571520a7ec66e56c71c24980dba56264742c9172a349891b26086d854a40b6fc1c79090aa3d1958083618276544da02920a9494e237c0c63f13267573b8b630ac61863adc90f502695279bf982ab33f3f6334031a8d134703758108c55b6597978f08f4fada8bf46ce903876c30440803f8b0a6f7224cdeffa67a469ebfa45d2dcbdf29894caa4594c1d0dc3300c3dcff33c2f7bde17865de8fdf77d5ff8e5ec79ba77192902afef74601f55d8a5ee9c80f9fe2d3ddbf8b54d0a660457c77e5d57bbdad5ae76b5fbdad9ce76b6b31d8ebde9ea52b7d8cb8d204952929eee7dee14a8142c370476200315bca2221487b6b9c7309b0cbef65c1dd977461403d0c39fffbbe939e3ff30ee3c30ca363705eb36b7cddd73befc401d7fae756d0ad6cd1fc1b6597b7ab2134ebef9e6bb33e0d0f3df9cf7b6d96ee6d0bdb7e1524b150fcf581d0cdf891fc0e93be2cffe6eb0cc24afa9799a9ae73524ed3414d83f9bfd1eff6dce076c7d87e6c1e7cf3f73fe333667e6f9db6c4eedf96bb03934cf3f0449db8754ac294d0f5490e66da4595382b0f59aa7792a7ea829dfde709a5283bde18f81a47703ff0be4b637fc67c8197bc3bf46daec0dff2a7ea0959934713a2ff77bb81eec262f6082e2b637a058ea8eccf606041f2cb197bfbb0aa9cda93bba5ffbb8534a81f79e57e69d3b3b6e5aad84f4da0c50247cbc008793ef95011c2ec03d01e9b753dc938fce99ecd822d0d82d8c780a414f52ec2b4f26583cf174f98242162d53827071a0ad2b44368b1f3e9caad8c01df510e2502bf8558f135ba8c7081b6146325a760a2a39baa89270135932aaaa9e78d88d4d256368885369b1913889b08d9c4a8c65c4286161481522392e640907e1848dc38d5ba246169a765252995b14d00b1e2348f10861439169c185fb84f1f0224a8127696d1d569bc4d4083ab296b895220ec484bdb58384dc8e9e1463bb86172f589ebe8e9cf41ce1238664a1da2778f0303538578cddf56253516144c709b6e810c19b80a9b1020b2a70ac272220f181250308588f1298b0909c606c29163f397c92e420b1c1b4c0c76c8102b65b80c279948029b26f04e12aa0a2e0e03283af201a7311d6f43386690221c81811625e564c444181891414760a42b4486de5e0a2c45d9c444a38c281220b8709b29431a1cbb672650f91c26f3421c1c826e18a17f998b1830c0d2946db4b10ff9242c70d13426ef0f02f51594e3085896b376ded1e223c841f464e3d6ca038e211fa5ab161309d80c134620cf3a385b7408523e9da2124396183595c6883554a50fb47d393127752a415b445c569e3c4beb24162a310c3c1c446b1301552f60a4e76942d1360f1ae2a8e032a47d3b882d2fe2ada5341231815fcac71c2043548f010b37188f984f129297b89931d66ab04160faa22821ac734711594c48ab698a02a15fc048d13586890d833c49c2026228c0529263859b2c599b03897aa9d046a97681a52e225149108da475470aba513bc6989c44d0c92d8fe12b65d48a1e1847b6d712dac3da26afc02c55f34f1294a4f8a3690a0201531944e385122c19dc48c11db40615b0529479c70315b3bb07654f11bd406a1698a5291222341dc868a0d25e9c4164b2281b4b39851ccce625ce9cad214abae2a4b7613ad3d3664d40284af00d537d78c1cddc4b938f7ce58eaf7decb010727014e34126824707046e0d86c3411b61b58baa0a02509982cdd8dee9cb1a80a69b7d696b4830eb6993b6b2d0742da6b22e4501db8a12b5a21b58f7405aceb148734c6041a8c2d8615844edfc3ecc8ae6f72e87727a436a4da00e8609b37485addb4e9f63964606343eaf6f31e12564a2b32e265acc3299302e8358353c6084e994dbba31d53351cfc74cf80115484312fb3f78c6d778a43fae9e6fe0f0a29848c24c23b6ae1db33b6a32affe1b18b578f71e4e46d6e6c9de28eaabaf9385961023cac002c4cb5fafb48dbfcbfcdcd518a6e3e8e0c8a13f2c1bd20a2197918e32313a06c532f35b0cb745bd179c686f708b8185f5b1c03e1de53ee7478d70696f1e1621875b818258c58d02334781f6820feec35dc6c90dc80f61b4a81a5145491b4a1dfdbd868f85e43af9fcde6989a56a22b7770b9cd5df7c50aa9c50d8dc111f5581062d7a7b6ae6a28365d9c8c6d66869339696e14acf280718a39eb14180e374a7541c5e1e5d6e3cce026e67506a95a681328e78fa2b8018da6f9fec24c7dfca1b8815965a20574b7cf41adb4d14a5b9a2100c50fa1a5ea21e79cef0a84bd7a3f7b4cd6f748fc2319be874bca7eb2d6de7faf759967b87b73770ce5d3ab632b3b0bc266eb3be07b5fc117c532430639b8c2f16cb6f0f3576a0e3afcf6c77bfde1db1efb83c50f210afb532bc0b99a9d9951a505a4441555158afe830b15588feabae307b98494c065e15e04e1825bea61afe0d2d5e25bebaf56f1ab69b9ba57ad6d094cfa3a2230095cb239d8921f36f8f62341adbac48a14b837e36c9620e7fa3984bd15cff033dd7c7f4caa1df20cbe3fe20ba569fb576bcd63ae3b37ef0f480086009dba097e08bb33cbb566225046ed50df824cb8da07bfc7f843d80ef25207314075e8052806171e97350bda72a7e2d97bb0d57a7b244d105f99617cfb605d42756caed64c04cac039e7a56ef1ac5ada65a2c90fd6d4dfc95ab480958701ba015fa6b2067c9af2325910e4eae11def1d67e0079255fc1932d73691a5faa88eb5e2dafbab78a9aca8ceb5a2b9bd9fe337692e37620e265d2dfb0ffc0f67101a2c7369662330291bf55d66003fffa775a9ae15d5a9a11b3cadee595cebda20688ee6741d7ff66636ba00a520d7fa355487d28c012d9a336bcecb466052ed50c1a45a011198042e8149b75631e4a06137b78d4a0915d6161b468c5a504519e3914203af7bea9e508eee09398d5438115dadb5d65abbf760292d9bf64cb5d783afdfaffa62f1d6fc815ad39bfa958a1bd87ec9dbc1ec0da53a7b28133fd81b3094d16a6f37bbb7c427ba5a73cd345bef76a479bfd64a3396e75199e81e060d3ccff33ccfe33fa84af0a5dd758aa3e2f1f1a5cbc6d2713e8ef8b8ba5852603e906ea931314ff9ec6fea059e42c2de140ddd6d3ad543df2ed33d85d35346a69e6c59a7b8292c615835323113a35cd88cc934b0198b5a02652b76914d634bf56cbc69594a01859e5411ef462fbb6ea92c502a89968ae2899de29e9a38d90e534ae2a24c84512eb4aee4d9a39682889de2a274d4a89cac535c1412994c260b751498282d5caaa7535a0854e3455cefbd37e75138c70530ab92ba539c54924e69f405f1c3850b176868c40fb79402c34945096f7c7d36635061505f3e2c748237c4830042561ddb3d6363f1e1a22dc2560215423777ee694cd629eea9cb13955c486d586f2d1266a0affbd733d0120715d6290eeaabd3054c81f141f4a4079be2a090f42f2baa9b3947a73828a3ee758a8312824ad16bb9011c1c6a01d579cf7666875e9f76e25c60395c500336277cda875c34da875cb4f0477247efe77b873bfc10d683db69efc172d22c41dfb4718f21f87b7fb4fde3b8c36e73be3f9adecfbfdbe558865d6157e9551463fdc688eebd57d34f14affed25e1f90c0f6e89cd62282facbfabcf5b93ddfed1567a2166de2672bfecca6bdb497f6d25e445170447043c0742d8af747ef4731ec7a501c47711cc5f77045507c4deec8c4d938be286af1f538be073b13df831df5833de2164d5ba28bafc5529ccdaeceeb32ecaa1580652ecd59fd7c8099ebfbbe8f34f70724a0215778e5937d1ffdc2af30f78da6f8597dc54f7fdff7d5de8ae2cff4ec69a5b9cbb1eba2fe001076e92e7fb9f7de7bdfe62c683fe8b9eb4030076ad9f19e5219087620f820b61ad31bd029ceeaea2a087895e3ca07046b50360e1f1c671becd8d2acb2eec76b45db692b6aadb5b5d68ee3d7466bc7b1346725085b9759518725083aa6dca9ff3dd61d0815e63aab73c8d585b930cc8df95e9673cf0c48ebd2026d9b7f939bbf26695ddfe5ec0b7f569ab507fcc250567bb40ebbc2aeb02bec22ea94009f08a6fe75f7c90a5a9d2fe8c1edb9342b0d61cd5a86b87fd52de81427644577c259a1c059f1f403748a13c244fc90bf8a40e2cf9e867fbfaf3c57c7028ddf6b1e266bbfb7405767ffc76b5ffe1aa591d46ee024b525fe5dcee8b73f0341c7f4ef75695a9f4bd6ba76589a206c57665a1f9bf6d25eb7639ad9cf47cd8dc68a2bf497c7637b6c4eee82d59cb597ddb56a2ffd657370b676db52acd656abb5f417c99d590d8baf732258adcd44ed556b7666675e2c67f457fd59beb8da669f31feb0de11bb8bb1ced50ef6b306fbf015c5b75ffeefeaaffe95f8624babd6c93a89597c73137530ab36ffa7735814f597a9bf7afe3d6aafaea6beb5e5128b38bf0661ab29cddd69ca2caee8e19dcd6aadb5d699586a2ffb9be8ead80b9568778cc94d864f23f30acf96b21f31c6597b599f997e6bad68ad382b77f0e7174551d4206c788fe3d5b24ed5e93a5dadfcb337ad4f174b9d451f27eba4bd7ab457a7bfb457ade02bbd998ae1873f8db55416450f47da65e2e779de8e0e3defb31eb566b6287acdd9f340d8bed0fb30675bedec6df53e528b1f6634faedf7591ffb42933bfb4bd0abb53dd6a776b0afed8a8ffffea91dbef7466bf5e66f51f49972f3dffc3dbbbd32c3feef39a0d5acb55f7d3cfcfd2c8f88a8a4aa9c135a876606404080a000d317085018100807464190a4301e6bed0314000c66ac385042241d8de270280a8320084118846110864110004010006118068320d3f3059478b1f5e8bd0a9d2552ba2220f0b353c76a468e7c95085a248945447c3b025e7a51e991a1d401768eeaafa6eee7fcfbe0b9931149aa188cf0b1bb8020014822b140af06ec7ceeef54d10a2ac44f9ed3dd27b70700b0d29bc01c012ddc5d39880f309f5dfffbba350aae0f801c13e446afadfdaae75c8c4d3d6e29e011bc9793ee6c42c563806b331f224b8d4cd02538631228f59c23f9330f585fca6ac7a8bb03c62d88fb485162168315f59786b7f7a13d659a9381d774042da7b7cf82f4405ddbee17dd3b8b2cf08926027bc720b7d2a766f552ba27a4d67ceedd4288befb79f17f16eeaf5f95a67a77065ddbbb5e198eb8f0281de7cff18f6d077c6259f3d1088f678eef7d9955d1b5a4bd2571d8507abdd924d00e4486d89ee365110b32b0d0a50559d3e5a2649a5aa18bb7c69ad31fa6dfd09c139a1ad61cf28cea758f664f02215a6051ab8e9ceb68c6e7381b91352cf236219f0d31c31a728b2d70b1825106f0c3cedd13e2b0e6d063c2a3cb87d5bf71d2db2b297309c01a60959b66e4ada6653e40150274aff0806052ffc635d5ac678a15c8c718eecdc9157387e496d29c0351ee9824a4e354147fb972f367a591853e9475541a7604373b5d5076de2d41d11558cde9e83311b4cf4150e76b6f3b0b640f60a1cb2c047269c602de2c0f940f295f83b74b27413ccad6d1cf89c1d8e16f13664964d59c75230d8291a7ec1b5300e724a676a503a33977971363f76bf3ba2301bb0c049c45b008f222d6795f9290d5f49b1c516fa6df54fe58c82cfd26912ecfab66207567a7efcf09b02da509e87023cf108ab26165406fd62f0a6e0f5902a94816f2cc0b055f99c2210e14ef7c3f8845b260981eb884ad65df4e5e7e89493aa51a57629ddb43be315fae2710da19e9fa4bffe0942a33e8ba2b69f9f96f6ac1a8e4498848242c02c22b06b8380ef0ae6e1706580e133b3af1933aa7bcab2a60686b034c4efdd683912db9414929d4630a0475d4101e5e39bc6e3caf4657701d40f9581f2dfedac740987e6c6c510bdb106c38835d5b48bb58ce7de2f16e4223bfe76c786d4aa08814309cfe92f0ca5c0913d581dfb3638b7da9b7ac0d0253ee3f15bd6e34d5bb00522c47d71b2b4d330e4090ba6f501a1e86ef1646bbfb15f187eef7fdb9413c643ceaa4ae69462a18f98bbf23e97dd0e6845b80526fad4a4a8f1e2b09b7bb260d4223d65026b93fae46072e460e02032a36b3bf1899dbaf689c5ed87a8d002eb24969644c70021570c360ead5db255f83b476e8869636d34e19a1858f29a5b39217a9af1d3d0e4b1ed1aa18e6b1b272e68fcae17437d15a2731a52a4a59b12a37334e35cc9247f867d1c56df18992825ad31328ea033b0e8d543ed96225eb28850602c148072d2783639ef0ab1f168e6734ece806bf22407973a8907da621162971105ce2cff2497262b47cce558dd6cff282fab5bc416e1c50c01d206198cad3376d1ce89c0842eac6bd52c3df8cdfd3f918fffbd90607c77d269194cad97537bbdd0f5a29f9ff5f0fc336b51767c21627d96c897871efa5a63d9f84b81fb4c8e9b240711ab70b927395c857c022057eb6a59c641f6dc5e9bcc811c296417eeb09eba6757b298952d68b597867805a59079273d097a71533830b44dfd61db565da23b4dcded998a2c3c505c92d7299991dc8edf845f03a6ee3776a8a4a2039f73fe417af50dd43aeeaebec11abcbf61e9f913593c9e936ab8f52d482cf5fbfc95f6eaa8004fe71ab86edaa1e06237fdc55b45c1771e9e170cb89e54594456994e3cfa90fd5313e5269331cd9d3a87abcacae9c5caf08e506e039749d5f91ef594319364b25eea0487cae7c3b1554cdbe47fc334fcc9aaf5ecb5016a7ab00ef730a14fab21d2edf3e8bfaee890f140a3e3fa1aafd8f0f5fe438bc52acd6878d785a6e687de3b1d7711b8b1cfafa06b2a87c7d138459d16ae2b8a0563aafe4c15c6ff79c72d159e438078fa65082a861457cd0c71021b75f56d9b73af86ecd746c4df4228d9d453933fd9a64cb8ac41b8a584dd214ee623f7c68024c6791de1df45b1f1457660258ff2ba999007e9a3d129e2d00ba1d4e00ad552284f4f936f3aa36dc80d219809396e47a483367472553600638da2057961b0dbd9f2413f11ff5cf00851f5e26e046b9206c781726dd987105acc10a0f4d3bba4d0eabe5493803aee08df5ae00e77246e92b60d75740fe3cc8a66856793ddb6afa83b1a16dc9200dd457e087f66ed0b1166d3d395e232c5c01fb4efb548bc2a106ad8ade4cba36e7041c58904513ec08a9377f19ea7e0118739368f513d333173b81959555833a07becc5407a2450446f13b2774bc030ee55dd4618f02739042deddfc37959e34aa9fe5dda7ce1aef69fd7c61002d11c0ccb941609c5514f9340ec27345629b49c4d3f1a4019b0f29ba38537a40f3a2e070f0b560e5a4cc07b89b11267756063837adccc771e8f75d681a063926b9067fe7b72a0d4a42f1f96f49fe70b0cc4eb4b3434140f449c747e0a9bfd9fe47fca01192355b4d5e05c484bc7dd531c4546870437caa8f665622d8d012c45403302d9d450d1671299c55d22212e12eb1274a0f50581f33b12f2a0c69fdef8909059d9a80a15c37465e4786b55153682068828958daa1760f373ffb3dc764fecff46e1721674b613f228b08094fc1b584002c5805039ec650d2b7e803cf0dd816d6cb1caa87149d85eee8f04870fa555272b290ebc1c00eb9d3817772894e411fa47f40ec4dbbc04f1e8b4aa6cec26fd27972714780a60ba3047f22ac41f5136ea9286a40d168be884141887b546ea06e8a9b283993548c11ac6afb84663a9e55f35d3500ae4d278348bd5003034367352a39cd215c8b0372954ed0fe9e811315a000d40c4a180c1b6039cd627a8a3156279a005b343edc57e4299a0b2604a0abe099973bfe8be1d8e7728412f2c5dd541f0e19c6c6c270afdebd0d5b3480b38e2eae93c6890b0a0c227b5501bcf71f87cdb0f4a88fead22b90d2b9ffe77899f518da9024a5b3fee564f41317980810093497db67419be90a6cd000c3c83d3ee9e9a27be880597efea141ca4a65f12802f1a2d8ab7f2b097cc0e4aafe427b2858c6ca439c53fcbc3d95d35cfb18e630c4d9424b8db2e32c66f226ff37615d21f1802056b948bc2cb443e757083362908effdefced196df886f977ce14dee0ee98dd5c32d2b5b3668ddb01d71c58c7079a247933f9b8aa3500ef6d4dea9a3ebaa9a9dfee00030031768add189b0e5db0a3a1b6aa4944d33ff4c37d399ab206047f047f18606e3e060a5a8ab9a340373aca5cd303df15bae0d702f55d78c13ef01bc60e3841d2cd42b395a3a1d0e19937ad0fce24d713b4d5b7512ce6a109a36ad34ff311e0b0bf213411d93dc073f984d5d70d83d4b759f8f2960e12eb9f2d3b625fdd677cc217478429ff709bef12561ee5734e2a92c3298a490043cee10937e46c8b8a96078a67cdf71a8d754a91588065fe9a680fcfd6e0e0c469b23ec5847026d79eeda6eb4a77ac6dc1a24bd5cc03449a380334673819e1ce5c09da25b87259a3610b1375b4ba1b71d56aa13094c24327de2bec53cd8686d861755eb7dcc289ea260c29431a810df6f5a57022133b9eecbc931bcbd03ace08eb20c298c4d12c8408780639015fc00c4733bcfba3be63642c4a375a3b8d0ebb371acae194ef18f49709ad552b469d56d09a7733910d7e57664dba290d35a276a716d80036033ed10646c03e5823b585cc71738987d04269a760207bab1d6106880bb704ce16d9b8ba917008787a1015cd2aa2d851ebb07c58f16010e3d058170a6364faa33f71d240e0d5cc25ab1bdbf6365fd64a5798f79fca773b03c8634a8e78f49b1d5ea13e2a1e55069a787af5362f8af96d3ab91ba3bcc56c71213b10806154210ee649e5d2277c6c97c4e7e388860407a7196f47dd6940811b2cd3692349b00012335db9f52d3d30b3768ebc1703e2e274d647f9f5ade3ea2767923b46244fab93cab4a08a8951aa3a3aac41e34628643b96fdb84fb055848653af35e70912932a64d5b1cfd55a88313668824906e1dbe0a5be9b805429424941d73539dcee614cc3c44791c86db881b7f3231541bd0339d325c7e90120bc0d6d9a2217209dd0288e903112e3dd0beec55e2234fdccb2f4f5d30234860500f8643b1ee78cd2f96b16bb8d088d06ae802df45088ed03e4341efc7028f0310c6e5d56c2384a403dfec22200563f502c8f576a1af9d04c3bcb9acbf872cbaa6611a50ced9ea87aea2fa587a62c6d68c493637c98edd6fe686a8f14b8fbd4254b7bf57d3592dd8c29b514a20a6449bc6307cf6b7b89dba7835bf589ba6695bb37458e17f3538a855b399b95d39f7673cadd0c301d6267add0d81f853eaabe5321e68d36310516a89a3482e8a5776a1e3958ab72183f32e12dce2cb584678de1f6905de325445c48f1d24ad3a72e1d090f2227cc89a909afaf72712c69efcec579b0856cd5f4041a83937ff204d8a4de2b9c6ea9a12f9dddc8bce9e756331a89a84afe7dc2156bc67e6340fdfaab9911b67e83d10ca4c9d58c1801759e2fa279452bcb5c256fd07b5dcd2c1c4f4683a6a928c546b7c4c0a22e80241dadc7e2f4d23900382052242b97c60e50d415c37a57cc5b42a2043f972c43bfdc63f81f696a7dc79afd4192a4ebe94ef1472e0973486c5216dd981bb5fe38e9ca38c0ee0f6014464ff5a8373d3b457a2c1934fd0ef6a59446ebf361d71521fd229c4c2a4d73b9cca90f54acbd0a872ada28c9ceb332f0532277c627cd3831c91e0b4c9b6f5db5cbdb88694eebb7a01ed5be768d7a3f4c73372d0338cf2883d1b409d3dca38cddbfb816a94047ee02c6a65abcefb8dbe6676950fbd663ddeae6e7a5afcb3881614b2e50d0a1f25d88500d2d31ee10a0ea5beddb372b4d9ee0797d69022fe3b195a60051e9ea34053ec4bf31980142c653069319c451a7892edb963a0d48910570979d545a693a6d663d4c77fb5da64c3e9ad08f57fa38a2d75b8c3b811ac997e45fe88220bc19d1a841e40f5a586d362b765a4b3d0e822dc412b8571316b43292a47c435da046e48835d3f7295530dee618ad279c53053e0bd18ee04aabbd5743bac0d653a986bfd69800da31c65f77b38bef223fc8837fe0537151d418beef9b6fd69bfe55a8ad8433a19a8b3aba6b84ec3ae4b9241b281f0ae7a46c16c84c45b2b2b4106498e4e98511f3d966579e621a20bb2e179b45d5f11d4757560b93c01816d7930801b334cc50bc10b3c80d7d5ee04fd2b6a6b3462fb5335384a9bf635f261b3a91876d3260c0e0fcecd9758ab2e9c05054a84cef926b469bd689af670d93755c9386b57c6105b217bc198d6b3a796136e6bcce10ba5236eaacd8ac0761af1a3c43a4d8129d04feb4c21fca11b0d5de2f1544f585b40cbf3214938440594f600cdfb2ebe155639ff614feeb68c9c37684841c4a32ae7fe78116315823aa3ddcc1c86909a318dba545a1bbca2aba502e80b85c7b2f3537f9d3631bcea7576b08f40c46558815b02bc6035c0ad808246bd9768b32c9725c0459c27f556c0597a84424afa6c1978cebed6a121235b09df9d96458007240d949af81ecb23240ffeb02209bcc3c20066a55574aa0048b40a24eaf906395933555fabf8e6117a68bf4a1e25bb1ef64db0b50d5bd66de46aa679b10f7fad78a01a297b82d556891ba2d354f088d33119f4c8c012a8c679921f8b14cf40648884d42640b9cd7e3575f72030094ca45797845dca31c26609f627f69ca53e7cc5af9297ba0bee01e17e4e967462c0902c962cdc4517a97cdda8cd91cff25d6c81d2a2cdafb039a9fef560b036942240ab1d8634d0520504e838933d8b949700e3a3d4d2dd659aebab1c323265398628cf67b5f4c5f8c3aa25a6635e423c62394d64baa91c74eccea4a94f6da4e58bcd79d6424890e6c8eb90037dca6cd04630363b81df7fc725f6fb59ac2a70b710123cd476525ec1024f5cfd6030a3a1dff2b94177924f6e8ce65eca4610e0bb26cb6b7b0f2941ebcd0228996fb972abc23ca8b023c768642ada86ddf14eeeb77b048f638443236cb6b189174b477ed1d4d5fcff316d59f900bfbef372c35ef1ec0389abe421b00e010c2a415cb9bfd3bc710fead7bc209088f06c3f6ff869019d6bac1176b245ef89c6eb500631db05ec02543d105525d7e1efd3b44a5f47a03d4c2badcc20dc33b962c9444bc7d1743f98353a7ab8b53327e3a45d0c5b3540022448142138eb625433c1f93a5f57b3deb67c99078b1219ac88158e0602bf477ad9ac54f8745e6c372c55cc8654dbbe7dd22364d347f6cc7fe9663033724ffa9b231fdb2227d97c3f58e94682c8adc132b41a202a207cbddb583e1e8e2388adb10f48c71f3cce8fd4043aa1529bef989df3f4cd63edcf50f711d69d3c06dc7f7e800df5fc5ec0141b3f2e905423fa03b249f8cbedd01f362878003f372f12612eb67ca0e1611c55a0e70bbfac0294c5159e0632f068a0dc7fc88370303310c33be0f5845ac9b44b80b5fc1350231a97b936168344c64355a04c4bacdda6c00417b3532c8827820bbd6bf11afc69c9711154a51e1125c4b6606a5f28e614f88c9689925efe2d414dd14c9b36dee5a46653d0e66be6cf8ac658c51e6b356d4d74d9dedc32281720050930f941181b1d220370a19ed7c908fcb4576e4c7b40c6136e085d745fb0308ee990a6ed0e435567149ada87f3bee29fe3bdc51f7f3c0c8d4e11c3b2df47ab164acccc328cced43bafb60f25f7f9efd76bdc2ede2e326c08f05f8ad5074f3b320a39ff130453bb55c0e3fbebeb6abd3e424080bd63a1b0f14fe005b56a9549adc0d51e127a4b8c64626ee3eeb44a77987070db45145574e6beb42fd403c1b94b0a47a5daf4776b91b537113a1e67e69dbd85fe29ce576eb7a4397b358a64f5a8eda3ded27be4b1b55bb7f82df60b3b6ae64274d326b449f33789454aaaaa571dee54973ee8eed739132ceee988edf248259ef923ac19f10e94d9693f3b5a2fb94c15131d66fcfb65fdfbb98d76b6b630b7fb51b4cee4cbd7babe58ee572100fab6e30d95129b393a62c6b76d7da76e8813dcefb73fa06bba1cd1fe9675bbd1bf006273b1525bba94c593bcdb6f4a775d79be6ac3d6ae1557e5a4a6f5a4dd7f54f64e02c286f29ec8d55eedf27ad67d53bb6767375d779dbcdcaa6e5f47eaea87e8a60d4b67ad37a7258ea2f3eed23752a92e7b1a70f2d839b92d29b5c9afc6edf722ffacc4113e8069b3bd2ef76f74d801b4cd648ba376bc31fcf8efcf8156eb87243d2dd5acd45bcfb4ca98de96fa1354a357365aaf7b74dcbb1f6b7b94b79a1c59ca198959d132ddb5aea2c87893f89a0595adf2477c7f4d9489da737b2627f52a437a926e39a1faefc9978f6d53b81378de0595adf94cbcdee9bc0d7d0a9eab7bce3e5b3ef4e6bfa509f8ca4791eae713e1d581fa2475252b368bcc70692789db0431f217ebb24fbc2393e8f2378266d121c8c8310a97cbc6f0c69ec44639ae923a9b6bc5983761e7155ecc488bef2285e2073be7235a43205b5b195a23167db46f5562e619dfbc864758b778d24ea021c7eb3b3c4fa35cebaeb32547ae2ccb439910af9ac5b350f0c5b9eb4e50337d3c6d550243c16890b0a3f835cbb58426cdd901d9889a5f3f704cd0439daf7c4f49ceceb4d3d6418bb60a136d8a1b01e85752c5f7c25640ebc34ea62c6e355c0827b56e92ad8741e1a5411185165ed37fc8fea8cfb47d1f9be1a42adda2934f1e9ca10ca9184c43949e8d1d3d2eddf572f84768db4cc8f7a97fa61ceb687dbcbc0bd1c98e568262d997e10489e9cfdbad0d40348a6489698257cabe1c63eb4877311c102dfdde96f934121ab574bd763ba9fddea9ee15f68e18e7e2f9e40f0964df63856c5fa243c52c30dbc498176602d9be4543ec67dc5250f86b65e0bad67e70d3b3e41977c47180a85bcd4193f37eb8cf509631e66e9d3f57471402942e7c7c473fb5e66328d89967cf524903468187bb7176977b488170d397e65352f1e19b5723363773a065243883c17b2b8aaf88f5102cd124e0e0adf07035db285b16f1ba03f747fd42c3a00347058d0b15cba8d85a3e6e689a7f16cf380cf13c20c84a15fef4ec97e570c752c854686da13a34bad8e84b2dbd07fdd4225a72a0685eb9fe9a4ee1d777b73410fdcb4c6fc85ca343a53617cb06831e67ac971b142d066b07cd0e3581011fda8629db0485d52710a0de4cc22262c948f863f7c81fa61af46f4a91baeace8b538fe495430c2758236cab79ce32cee6b791f4a29d07c4e71757e14aabc2f44d20a98ca34e2b68159f77dda431541297daeef818759161ac2ab3d15782ac334788353b586b1143012573f740f5775395ae044d2af291edd124852b28ad252ae70c13db9638ad3dd509240d188f6f40a83b1206ff7ff867650d71e280c2e9ba74732cb6619af610b2334f0a622cfd5c501f46ba62e9a407acd9b12ec9b111affa7cf655ae79fdd51fa38d69833602970ade27b12cb4dc218471e5c2d53a227313509591579d08c7d7c22288445e8c998f768dc3ce0d60657fae334e9a584f0d5992d29c4f48593250af15b4c439c815fea59b0a5442520ddb748cf8137ee9c62bc9c4a2cb42a6095ca7900175dbb308454ff50388d6bf8ab0687ec6f1e2aa69b0bf57c316fb857e8be218367410cf0e70610f197bbe49a56b88c035ab8cf19754b81aec1d7ca1769f7e9a9d47fb0f07bd96eb607308f12148a9b61ba906e17069521061ec5ce56afe13c88ba202529036bcae4305e2549ce64c829d6c35888c3b1e527cb8a13df427a9330eff0d21ba697d24a8813660cc7f8f7d94215f619b82796227d5f184141cd835fb44f103faa8c6484bf92c04935663b2c90a47039817cb8059de295ec1f6902b28493aac394049db2235354f769a88f489c295db2fbb85001912390b30ca254f1a7b09b6e3ba9b593269dd4ee440fb204adc921596ef6d4fb61fd411a209074a4be9b4ab829decb48baa9dd92ffe3f2a10df256be6e44eb46b646b46627077201910d90b78fd44ec98358f8d082b81f7005b16d9bb29f8b02492d474a37bb8fba8028d94e894d9aa053649bb5a5527729513e4c1c29ddec41600159a249d9a7a083b87da6622f4d0e3fd97e4f3a997a06e9d69fda4deec715c46d450a671fee2b6a399b326e9ed1651b4c57e934fde1f551015982fc0f72524dc192320e52db22553569624ed566d3077c10b7d4a9864f6cc7a98a4b13716ac527b44653f139fec0b2aa2d4db619c4a37faa76527f37a597c9c7e9f916890b88245f5251cdda3429f5b47d10f8a0ee43893fb55b4a1f446c2ca9c0147f2c40e0fb50424dc5937a8c0067843b84a0621eb6a6b6244d2e2926cd6a5fa748525b3f4c5ea9d5d441084074201e081544d1870f42015154d197263f3c10aa1fb8fcb0cd9fda273b3e2c7c68f8c003b2c4926ac0ac6d24154b8a3e1620beaa9dfc1e045b6b0a20c720a50489c43fa593c37d9858520b984b44a98a9f6e47297872ac8249711fca1fe8e17c06ca44555292a258c983b4753a16979a9d1cc8b50fad1fef07b7b22faf2b479f0c05600f532e2027b35369a712971427d97ea41924926eca2005da87c93395fd7ccb4de9911c48ba80e0d876ea36d31f75409458520029fab1fc807f95c9f6723f774aafe4ba960092bfbe7ebf06a53f41cafb31ce6ea1c01fbe1d9511ffeff01304d4b713da8f2cc2b43dd2aba129cddfd9bf48053363346bac457d24aeb8e4d9b983147be5d9815ddcc1ff707c4276f9db8d0900a0944716e4c32491229f5690e70ffac7e8217290e47158a984047d274a2710bf0f2a88d28ff382a03635155b8e401655f4e409e4df87db4a2aa62ce24301e28150832c407e3e2a7d5c01b2c49f6afd74db4de993e13f9458a500a428c8820f1f24ab204b96a9a84fdd4e297a72cd402cf9a5f472398b25f6de1a53ce91006c3f4813e5946067b64ea648b4ea419afb000d88499ca9d74b13eca6933cad749a3fd2c74f27de9a610f4d5ad538970f94c1634748298ea63e82b8ce989284a4ea234d2052ab99272fa90e892d094745e8492624cd29dadc5310b7bf945ef620b88044a24dd94a99fe3079a67693f3c3f2a1c151481e8ce5dda8763173009cd43ed903b980683feea18f6de9f81eae7dd0e604fbb1fbc3f7a3fac7920fe2839c545371258e8260ab482d4d9a9c524c934a4e295a32e60fb7fe291d92f3a358414eb6a9db1205822f8824d6d402a5c9680a36659c96545bec0c1ec437b726934bcb18e9a438ba4a2ae91610ea5b247a31b24388df34c69ff2567c17bee5e154c512135acfc65594983520573fe62012e1c7c9be114cd48920e6dc2af94a3839326d6c21c81cadb88c482dcd78181f87183809dda49b0f29caa7ab653c40b1444dc03a2d9900d4abb3d30dd87a89c4e94db968e15048e55743643a0fc276002571538ec827428dc57d79ff42eff64b8d6f52414bfe94530cc29e472bc56aa59a183a2699d9672487503044f9b6aea61a9a8056ec9aabe9948ce1eab81a008e18e0488aa6287f94f4725e8cda107ac03b3617d7d8ad3d2b4e61ee9a4fb7fce99b543fbeb57cdc51a93a04a8206b12999e153a5598ffd41ab9d2c2d1a21afdb20c5d9c585ed9930ca07ad0093673405bef3f118b69567599d142d614bc218939cc3c01a1e686ae90751a7e3469e8e4e48702572986540ae0865dc7f0b93888860f486af68ebecc30080d01273048a58bac2c42029298df85aa336688643e28ab07260b194b3404302305d26a6c97fee322f868e894cd3bc0324de8d198060928c031895f2448d2966a4b59dd9288fffa0e1cc7332696f6baf49f3cfe120bad5e3557de4900b45ea8009c8f2f2d818d8a4218b3804728ecdda230065ee1dba003e2ab3b7512c2ae2c80b211fff5bfc6e507bfaa9e7a68195601e86e71128f156145a6762a419b52568c391ebb4ea6655dc867686677eca2f5a699a5d28b59b9b3837c384277e00ded1e94f6cf2142412e9293fccf9af2c8e07dcc1bcb6d791ebc45e6b9b16f8be3df0bacd22f4db9792efe91ee980c78e13f8daa253d32ed3b6a6cd2e3faea373e55ef20e9983bd2610f19b5d408363a7cea9e320b4aac5a097e6d0d2d806db301c3da3e159e8be737b1330b79d4442d2cfcd288fd6a15f5ddb4791822ee6ab68299e142d6c95478c36b819a53db6620c59f2d7e81fbdab94e2cefad9034dc4cc6a9ac0f6031441909184d0499007992ff17dd85494cd7bb86d2e45f7b4de34abe1381e12e9993942e8e956267a9fe5346e3ae67b909e80d563b46cb5971b4402d97f3b03995687d584eb8a22d6068a9b05e3a801db6c0461580c3003f7a7afc883761521fff1668bda071cd93df065835e419df7a66b7b521f6841a9ec9ab6ef6a044bbb55701c5469f383e466730be558424599242ebedf15d8d93ecda12c6eb0aa2dee38b1ef39781b71e7acb1fba67f0f4c2dd901818220c275b512c1a405a79b7fe80c63f92c2b1315f77258e421e1a9d4588a13c52b97702c06158417101437f695a867b575ef23cb51047c093ab56203b65135dd3f4101e3c9946e72d51cb78175b1f81ec69fdad899e9c0f1e6094a6ee5ccc1d804e71b3e3189273af7be4a163fe00998efb93d16a199ee69c1891c5a847b141fd3a5a9df4756c16a62a6cbf32223191041b88a0cb9b8f8000183b55f7b3209b81185b4e689d25c3054e1e28a0a8243892f66179393a909d25d7a0e860215185c74f7beb35032d094044a5cd9720b5d380321e077d8304019867dfbe285d76352eecd4478bc70fbaafd1b8e6164e97d3020dd9ff1ec065389ad583cf788140dde1923ecc4994051119513034062a6a5e71c938e6c3fa89e8ba1dd804b3035e3bba58e8248dab7a5d1b6247e19fe28134443a9e30e46aa888e6b7a133ec5c735111a1603416adf656af915227f49085be1c3b58ed01c4fb04fe9084620f571048eab8398801991223a0f3ba2ac0b13bd2ce68d1ecfd68260056a3533323c9c838af93243914ffad6887c9da22b2630bed961447f4bf1f3f25f2e90c9abbfaa9f608eca091a6b0b56b00448dd0c3cccc766df7963205e30f1310730edf9b3ed507a6505fc71559498fbab176acca2a025f06a1517dee6bc01a90f571ef8fd3a26263ac9e53dfb4844611e3870696d1c71ea481637b8ab8c7f9ea618eb0be7f4dfd54edea4ac6c678d48d200d4a074daafb5649ea7f3f32a9e7ac505fe3bd3f953a16fd7ca7551314eba8c67b7797e93bb0ebbad3d71a4f8fea4e60ababe96af75dc7c2792d3d9862741b299c9a8efb9adae18cf5bfcfe8fb0a7ecad62c691915e99a25ad1695d66859389c0f29ee7bb0c4c81afd4b0fae1c7523151b5ef745a7effb8ac09af76c6a4cef817f62551cafe97068c0033446d7e85f7830c50fb4f8400d1c1cdbf2b4be7b0ef71cabc8731599dec3e1455847ff1acfa6c6fbd658e3b5c60ec773fca570fb1586efbb6a53d7189358560d907f7d189c65427d657156c66ef5c43359ee8b700eb2803e961167595649f5a7cf640241f7d5d7a04efea893ea039798de57aa140a47556d183c58624c3dd825d975ac8f038bd0b292d4b883df1f75a33f151ba3b354546a13907554b9d593ee9d65571c2b49759b9ad37fdf7daaae58200bc7b6585d68bbb0d6d6eaae2596d5753152b9cb5d5e06aabbbc4ac5461147e5c88a572b1429ee537e83981bbc28f23e050a476ddfd6938d7bcef8713645deef1a20ee4fcf9d5846a71c46b7293abd7ff71c50bd62e4be8b62b47ffa940df059e09b56309c6a8ebab13e151b6365a5be5b3d31fdc72ae29e78ef2c4f75f2a8d818b57b4ed1e9ed0ff7de511dedf8b18c3a234ba58e2c10553b255255ba2f4b4254e972e032826fea542018863434ff3b3b4b5a23ce088e453b27e00823a45277382123c75d31721cc779513bcf9f7c543cdb0179df31b132d6ca3232bde97de5ad80a8986c8eea58c350e9aa834338aac001822f673051811270f97206122ad8b1968a224c34671cf1e50c235e0d1e64b124c38d91030ec8172ad0c1063348010ca8d842032a2b76acb2f076e8401f4381d4980b741eb21086145b86a8c0170d9c008bcc982156282b0850851060a4f0001131c8d299000768a0705004941437407d5268e1c507031b385081fda4c041093a104c80062ab8228c0a0c6144163840e2ab00cb841ec00ce000cb0d8ca022073a7c528c29028783137c527cc98104461446ff92832f2a0e0e940087145b707400c71431d8c11041946105061e60022c7044b1238a2f3650e3cb0db2ec9881861908c09101af05a367832ba367032246c081011b5c618327ba5ce00236f0c8e8b826ca38a38c349c6082095365a20c2f3558c1133040714d745fca005306185c13238cfea50656d4608a2180dd154e848082236480801f5851011224310209f030f1031580014202b030310232d6e046ff42861a2e260c1aec0047125facc6b023c0914311422cf9c0044b636420820e74547c4ea824a0e2c8f8e10619467064ecb01233e624c6072b1c120873d090c10332c4a0b2d88203094e0c24686ac5110113f8755e4c5d0868b034d2d0c08cb128fc2f3328e2cb0cbae01082cb17190881c30121f83246145f66a0058e08789f690460a0810616214ab005039d15635c811a838b1b3818f045065e641045192693c9c43232e110020711a17f87c388b07b37a9727475ecfeb472d7975347d3bf30a6aaea6464facfe46b8cbef23a53e5261044173882d8c10144f7d6220156c06f7c2cb201e4478c21fcc65338b484258cbe0232c7da996c510963e5ac067064f1e7380e8c0a8c3fc8c57d73ae463d6bee0af21c1b26b6557d7c76765aad7f1a9a191584354bbcd1bf2a89710f6b186f07df989a7181184aa3ff20f4dec7a2ff6fe4beb17a5da7e42deff91183076ff958c471a3afb8f7ac5298188019fd4b0cbc8c2218fd4b186a8c291b30f8589ff0af6ab8abaa313a17e439393a8eeb29aa5c46ffba84bbea12a33f1a29fbbe634c183ebefa51f9cc0cc2cf41d3f958e4605433ae0421ace38c0ec222700bbb545569d8161a758b17b6359383107c0bc673eacfd4202cb24b616a15536dabfe67aa5966c8a8b5d65a6bad1e6b268db08e450ec6c88179c23d5b9f7862ac5d9e18fd412eb4adcab172705d8dfdaf63713a6c6b0661510b67a733bdeda9e1ea9b7e876d55dbbddbe7660063f430451e4618305e18d09b114268facff33ccf3b81e00954ede87a981942d8bd673fb43da9b7a8d5a3acc964e2b8d54a66f57d2ad473a8d4c99a56a8d357d367dae97600c31920849e7d1c3f84f543dbb3fa0f73a856200886322719d57faa55aaaa72e8f81d159c7950f533dc0c8e1d7664acf7006badb5926a994c3fbc8ef3b8b75df71dc7cd6c1186a37f89c1d2c8592394c231616c310384f071ec10fa73defb8cab1d67bdbbfde185d5049ee7799eb52a6badca86aa5785d65ad5b3aa4af52abbf22d54efa94cab37b98c8c8c8ccc7f32e01e5736645636564655caf4d6f4a82236f4bc54f14415297862f42f293062ec52e0c3189abcca01a9f2851c902ad50858b9f73ecbe8b17c8bce88508b94db108a1718d1a5fb31421f84ff1da7844990e79d52d5b32821a7933dbde97df5b3c44bb22dd368fac9b183460767524a99bc2e610ed4a33cd49faa51653f651f65e335a80751a847a13ef535655376c8f6787dafa8bab22c503506eaddb65240284e876d793463841f2bedc6c711526b6c116f0907a90ecc98d07e2a25c4e774b243577889620a99279630628b4a082d57b0acaa249db5123634c3164137088b7cbcabe96a4db22d8ec5719de77d0782a077050c4a05ae1ee579e07be01b799ee7adc01a8fd579415eca4b795e8dc70a02551e8a15d6d4781e97645b9c19619183f13ea84b7f3c568d07b26a3c963743100a7c84d808b22d0b8219a24108c6e46107e6a0f9950d2990eade7714552fa305f3822c63fd62f42f604431fae8755dadde779c6783c4b6a2a85cea12a11145d42c55cb8d4f29eda499b753be1fb22dcb3d0a89929366e4aa286283b068a746a6e3dcb63acb15b1ad199b1b364535cbcf8e8da2fa9cccdbf8a2991e702a6edbb1be973076654a153971278efb22f63956118e55c1d4950d56586305cbd8a48e35262b59c6993242ee4f2fe90fc7fae9589ecbfca83c256e54df63f9a9b329da6367aaddcacad8ad52f5ca98e2563f291612db72d4a9b294d8962d82440cc8715d0dc7ea6ab8ff4cde84896df9d72cf146eeb91bf58616333eb0336584453f7a32ff1e08ca14552c5344c1a20141f85eba7849c97c3232df5999ff4099e7563f32a9076d6a11de812adbf33deafb523654611886ac9a1b6f14fef737c2ff3e647d8f7a2ba38c4dd11e65be034770c55919656c4ed5b8628145b854eaf47d1f18d30a5275e974aa7faadb5661159dfeac5f3d9d6a4d81b556b0266553531f4cd5eaa99fcaaaf13fd5386b8937d6affed52669c68cb0c8e7f3f17c926ccbd3184fe0ca5935a92ff24e36607c541116f900638a30c45433ea18db937a4fc52a6a4d81c4b6569f4d11dbe3aa2ca34aa5fa3087ed49d551f59f5dc97ced62e3bdcf41a3e377d89ed48d97f9d0868d8f109b224894d830c911da8428088b7cc2d3af6c522f93f250ff3d92540a6553043c5553e75959551508c278b1e13b52decdec2034156d3b9a8af6686215f99f3463ad31f973dfcdb420aca37ff67b2f8db1ebacc91699fea419bf1f13abc6be9b5ab6e57554cc2c596b69686696b6f5b68dc11721f733390859df10358b18d5add7ea59e93ccfbf779bead6ffb3ee6eddba7577b7eeeed6ddddbabb65f9eaa75afb7df6b3fe5ef7a5acb56fc573eedda69e5680250b8dd52204a52f8498c181972d5cb6805bb66061a9c4781288c276b1ad276c8bcb962cc2a22a812d2357b3d8a22a818a82d0562f425c2166b419fdcb155ec622164b676b2a8c6d81ef1c98c562d1222caa08c052b168a908f84ea793e779d65afb166479d7715bb88ca9990f84453e46fb337040c2964f45a16c76b4701c64d95aa7589f625b564c8e194c10d6f7d1eb40ce7ed6cb32438507b9cb8efe341e088b688a76ba94559d703ab18a4ea7d4835cb68ca9baf2fed499bcf77ec0d5af560f838fabd59b5e66f5a65fb15c35ee3125b3b22902c713ea7d954ad99caa11e5fdc9f3ee0665a4b064c9e243cdd2d52c5ca4acb5598ab05aac16530c2cc8c5ae20cbe989148ca9358dd17e8e148c19edeba834d45a3ba7c2ad51b9d44c1861c701d9f131034668bf28f4c01b8e2b62bd7067a4aa8333614277771d52dc0c1aa1b547526e677ee0ff9ff7d68ea0caf69cfefb3007f881dd89491d777c76021588efefddb6be07dfbfefbefabb05c168b19fdb191884466f5733614214ca5740f6bfa8408df1f426d377faa28231a6f7c6d05d5c0ff85c1d43776d3b7663687b525bc3ea425ac76d4fde0a861aa00a5a30f5a9eaea89c9bd8c267fc15857271690c9644ddfa72a18265c998e6c13f03738723adf9b564db811fcaf03ede7011a9afad1541a30e90163c6a440cf5933678445a0ed3aafd6567b8394db2f5c7819fd0b175dbe70c1c3972e84f8c2051a2a55fd4e50599505dfb970ab1f905315e152a94fd9a86c3cc5aa493deabb9ad4fb7f2955ca7b2ec47001664c71aa9933c2960f0dcdcef8059724333830c1906281a089a6c6f4a87fa21ac14f994e363526d6126f043f96e9c31584a11790091418510472198b4e55f7e0162f29df91aa9f52f9780267b8084120aaefde3e0a7cd0da709f62815ef8cd741172dffd0e1bd026cc11aa66b8f8ee5b5b18b185104c06c0c447ef418fb356e63b0198b1081c69ba136431761d8e3021f83078b65a19ae8e2a6f4708298ee3acfc548eabf52bf28c3c16d783d4dbb09d8d9ad31bb17084094d6f65e46c8a547bace0c87d5ded6c8b838155e3f404c8eaba3f3df756c63d7e289b221bd35b193f9b53359a58a7268a70564cb512c186b52ef3291b944ac606061f6554ef2b275d27f3ddcbbcccc3e0a30c4be64d326f7a99d49f7e658352d94f59194f367601dc67b292aa560d2f586a673b96178e6597f0920a232546145374992941515d22479812a304a17def402f5e3511d1d5ce76acaa12635bdf586dd7b15adcc9066c85a93a6f6d2cd78131726fc3b0d5cb0c16a17d1dac229c7bf57398c122b4613c6b1a8112162d6365d198c23004a81a0664a9c0118445766969c92ed525bb54455097ea92edf1d050e3046201b934b83438354054fd22f6e4d52fc27962c29811468c19576c09634608b6700933824fd89e0ebcc24b1811784989e16d911233562f6c4ff57205078251649794c2d825259b8698ba54d3b04b76a92ed5a59418a93040f7b08c45768966c92ed9a591034f8f429d38559894184aa935b8d483e007b2dc5541960ab40205aa542c8fd5cd90202ce29438eeb9d58c97d0c8f428ab74c562b1596c0f4a085b04cac6eb8af04e60379ac02fc2559055c7a496aa1963966ccf67eb92ed29aa33562cf18498b10a2fb6c7e3525da298e24bf8bd8f5ec2ea85ca8cb13e57b3d8c2f680a960d81eef8a2e23a764b570cf2d31725fc758a52f5764e1943825ab6495546398585d47855b4329a5c4298d1c0afc548a55c4a15845da0af8d58cce0cd51855a76375dd16d5162b555461544b9fca0ccf4a158b451546b514a64295189be56d160e8bcd72427823a4a119c30f1fec3a1ad518aa315463a8c60093d0c28cb10631fa972cbc9809c3f0536184a9313361f8a55262c0d0e4d99899f12b91b326530bf5b5b3b6d352bb5a2daafac0d6937bb5b31caeb5c8d66ac128b6c6566bea6cc581add5646b0cb5845a390b92c0e33e994a42ad23805c3da2da6ab2b55aee556d873af9b0aa4a04acde0e6e48fdaced783894b5f5c6464f3540c7934ac20559efdc56a0765cabf36ce5dc73401da3baf5300cbd7aedaaad6754d0b250abf5ace56aed51752a5855d65a6b3a5257b0b6b375871353268002a8ab99132c11d5b326d4ae72d56d907d54eddc9a267f585500e73624a85e040bcb5553edbebaaa5c11d6822eaefa70d5daeeadead4aa5eaddf4ec7a3c24eb52813686badf5abd555ad850167aa27db714795656db57239f594b215fcaa2d6253b029581438e7bcdaa8266bebaa0bb9ce9a60adada6dac9ea69474d79b67a550648adb5d61a0bf4a54eb6c640d5676b0c15ac95b3b5ab4a2a0a3688d56153f6b35ee5aaad3665bfae721e572b90cad5563d5555add5859a8245715f05bb6a6b75d56a22c1e6a89dad5e5783a45039cedace763588b5f5048baaa70a76b6d6eaaa2858d4c7d50eec6aad40bed2b0000ae15af02a574fb5a3a9a7932b55434d0a15005db5d6643f5cc31176524a6ab5d5d65a73fcf39ad360a52e11e00c7f022461061802d8881923e58e7181283308e343362f70a1245280856e170e25892a8e8062939fc49044d152d0f55184491229f440c9d5b11324091a9d2057c609203358ed006283aa3d33a844e881ad8144cf17c145d81052c8812d6171c25820e3fc0e0b2d6cc1d1810ab057a9f025ccf8161c3638cc0bc2bfe3c19d739f121486a0bbbbfbeb54bcfb962fd31554004ea0f49dbe532703f67c270e05d5900e4e5860cb84027d3a958ddaa94caf0e895b71373a307880809249c67ea70e678582cf05945032a8ca0e474607eba3c68bd255939011280d6182e4060fb643754c6e80a054831d5800a343f55c375428a283ed4ee0726ad58688d7c2174a26930a415746b061e4001c0c3a2040c9849314550e558e1b928c500335ea074a42f609061803c2efc4ad3ca32e015974003b19130ad5460f1dca98c08905165c01d32042c6a6bc2237be20dd125c43971d70782d541294004c533a16be203b782009187668020812c29d2b2b92890f5728a56cb208f0b0e261a3caa08373e133a14707d417c4840265382040307028a092fc4009f501ad844025353f495027252aa1528807944ae8707a5026178e950995fa6115c0024a2850490ab11f943c2ef4aa290613ca73c1c402112329db6905508909f599b04272dad1393995904387004e208105b085255004a0030a14bf1eab1e4080823e55f79de0b9b89e93aa5be18b7ca70fd5e9784b3a9f22d5abe16c3c12764e20c905f971810644917002a2c31127291f60abdbd1ed3035a1c4824c87c46bc14be1b4a3d36183874361072551a772322ea7e33c03b00ad0002b328a810b80f1d205034d70f1c10a0e49da4886495801a6d030830c518482980c4089cba7474b000100c077587c59430763ca78814800582798f06d41c1164a5820869f175c288ca04a99aea8e203502ca104170a24b1e58828ad1574c408406048680d35d088d1a0833342f0ca371800842923e202ea5b22082d404e2e008389255c417a4ac89142819f8e9a0e70600a2e9f38190050921f2416900004cc84f901020c5ca0092b526400d24393a34b01981ec8406448cfe93365a0870f6860024334e00703480009248078e284880b2ba8ea103821d834baa53fc39ad1956167e085a92fb02db02c387da1f2c2a6c07661abb019e030608dbaa2baa3aa00a2e0e95899604bb023d41c37707833f6460d3b199bf250f60482f6fb3cdb55ae5693af6c70359c154a9d02943a262616be7e3ed021b48092e7a93e01bc40872e099eae041517274c3e28754c4e24a074d0f0a0742240470397426a9b546012d0c784e25ca04179275002a750ca3145871310ee081ea864a0e4ada1e4a94e6081926ab3ac503ad1c8d8cf054fc71302cb08291388d8a1cba264c3c6860d97734307a4b9b1c60e5e0ba0cf2784b3c10901b928714d78744c28d3134a5cca74428793e2e16aa7ea705049bc163e02984e30a14c45aa1caa1c279a13091f013822ec603a81ebb283978552008a3adabf028042e752d930dde82a97c31de982542598ec27e5abf99c7823c854538af33a15c77196fb38903ba17474dc17e59bb11184baf199beca7d9d8f4ea7aba0095c8d0e27153c2794649ed0e186a9ab0191ecd0c96007d6eb7d8d2294e102305200468b2c6c44424168f931f2c2102019d5c1193a2b8436c0af061a9e3859830b2f54a002103b4510510402326841172508410730a0848e2880216c1b089dfa60074b617ce1c51729ace450802934ccf0c4090c495448a10412aaa0c20a062e90030e2f14746454051919884185a6b4461180f08329359440c28d1694000b1184a0031cc800100b48c0ab000490f2c40950175c6081021014a104062fe8a2045f42608505b8fc70001e76b0d4822f426045151ab8a2844ba09f1bab2532c4c8408b2f547c200a268250002e5f0598528314a01f175c3737565d70a1c5111108e20a2e0b3000a0243f2eb864569d9321a60b2e4c8005151f8822034c306001576c1800d010175c407cf0dcccdce87c0d32c48861022db0f842c50732c0040382588002ae8cf1b261ca0b3aa21a4360b2c4864c0c7468c9f2c30c527626a0801f6e49509cd6e08a6089e00dc10a0174a26bc2326195a83c2c0fb753c5540ed702f724a86075d49aef04ce844ad395504938e19899e1c2ce864a265c9da03221a50375e3f481a6cf9a4c9ec755773fc11d15a290383e6377a3665ad3c165264dd486827bfd50346ef2f0740377073d3c8d119eaab8f9d63f2e4d8d9aafcddfe6bb704b6f7a67e45ff34f3e9c7a084f49eeb027424d3c43fa9b1f22e45b43843c6a12e1d84949781ae20e7b597e6dfebec56c1045b1869234fdd871f764607946dc5d050fc1295ca7229ae2bd6f4d27ddba050f411b0843cdad71f9bf33fa1ae7f26f5a984c6d5983464210c74b14effb3a0455258ac3ef055f163fdb44283e5f96ffd32c4befd68f89d09b52f98ad0a998ce481aa6e960d23c3509eea707b87b0aee27067c43589f57866de9be71f796bbafc0aa6404e179229fa636928520417c820009d213e447101f417a04e1118427c84e90203e3e3e407c7a7c7ef8f8f0e9e1c3c387c767c72708101f204080f400f901c407901e407800e101b20324488f4f0f909e9e9e1f3d3e7a7af4f0e8e1e9d9e909f2c3e707901f3d3f7efcf0f1a3c70f1e3f787eecfc08e2c3c707101f3d3e7ef8f0e1a3870f1e3e787cecf808d2c3a707901e3d3d7ef4f0d1a3470f1e3d787aecf408c2c38707101e3d3c7ef0f0c1a3070f1e3c7878ecf008c2e3c30384a787e7078f0f9e1e3c3c787878767882ecf8ec00d9e9d9f9b1e363a7c70e8f1d9e9d9d9da41decee351e9a4aa0d9509d4d93e1349336a0705aa8160e8fc31be01f07858332c0ffffbbbb00dc3d00eebe43e579f1ae2e301f422f07eff484dcfd5d30d8bb503830d8bbb60c9fff28d8cd9e1199e9ff96e1b3057b97be43860cb1d17846ee4b737700b0422f00de8ec7596185dff74b6c449ae8ada951832bec52107619f0d7e6b6c5feb589677bdb9aa4394d7f90729a662359dc45310d3ba3ae88dfbc1021cfd37a8c6627b047b3b96b4f3a1feece6ab9a33adcd3d07d779dfb4e1aee4953420e0c4e8cbb4f093930dc59317717f290b3e9548c99e74e73ecbafb08ee38dc1dc8bdbbd17133eea1bbdb707719575523dc3d8a877628b441768a77e912b5e5d8cbf26f5bfebc5fee9e727794bb9f76441f224f8e4e0f1e3e240e122b8304e1d14392982787964931669b6d93e8966e6d12e1542713a597d44971799ab6980ea6e599ce0f11f220111bbafb36cf9a7ed8be30cf899a4458b7b87b091ed614b87b0e0f2b08507cfe10218f635f9eb63cd37ff3da6c7d122e5133c51a35752a9699a643e2a31b77e7e15e657077133cacdbdd752a92e84d7fd876dea387a5e90fecd1fb687ed84dab765324d4e672edd3a63114d897f83c2fe9eeef6e4b77a7f1b0863a15374d6672f7ea694e53fce8fd12a3a96de374a39886cf1acdfc6dde743f116aee7d696996fd9580d723dcfd040f1de6ee2b0f1d08771fc143bfa1c4a77965aff1bec5fe65f9d16ceefb3a15edcadd7578e834ee7ec343f7e1ee48f994a5f828ff6d9be4ad5d52a722898f5e4837d52153ad43e6f3bc3ab7f4a631f374778febdcdd7a440093722f4a4aa37326a51ca48c589b1e7ae8ae60a9df030e1a801c902a5572b0cf7d0ef5bbaf7205cb1bf1864eef7d0ee0a3deabf4f0463c56951c4c8f62617923dc9f5839802c2c6fa4e66062792ceefd73305514470d84a47cc76a65633f55ab91150e39d807594aef4654aa3f7da8ee51f64af7aaaf36389cbe5a160e500c9dbe3e0e465436279b1e5e30c23dcae60a966a84fb1e5e30d275bffa21cec68da46c56ab47a51e4b3582baa2aaa7d315d5afbedae080fa7a42a58c78deaf6a927c6f32fa584adcec9b584adcb87f015cd9b8112c6f04f5a0cd95d5f7f046505f572c25ee0a0f38e4c03d8aa5c45dc1f24656cfad6858d9e09003f7299612f736066e887bfb281b2cd508ea4f3658aa91d3a76caef4f08211d463a946529fb236ab5ffdd4c4d0fdea69e05ef5a0cd9595142b46562c1ca0184a7d7d1c502a1b1c52291b377d3582e30621155f6334b18c94b8d957e2d67df741f6bd554d0cdddb1fe2de48aaae82baf75510f79c357920057240ecbb916a83050a2a2f8c3658ba2b583a1614545ee8010a2a2f8c4654dc8b9414f729cec6c8b32ce796a4dca652d6beeda4e8baaeab5646a35a04fef754b8f1f4a95495a2fa27537a6437f7553ccefb2a238a05fef75c6763e4b1a854194f2c23f0ed9b4c56ac14d93702ab8c5dc7715cc7755dd7719c0dfb6e54df6bad5c11984a9dde81382fdddd516743856634b2acb1b2a854515247b0a8fbfab1582613c7a2c28dfe1604291c62c6c03183eebbfd5b461f7d0c4298d1830066f4278296d1df44042f6347842e63f7df5157d3b1dc57ee364bdcbf497dff6fd5e463f93b5781ecd879f73d57534defaeefbf5593222b351f0e577f4c3535b576ff754538a3fb73e093fa1cf721104ea7afa7d3570e4cf5c2bd809fc9a8fee9f4a61550659d4c35891d3fbb5ac23dc8aa5e58157ccf8bed318d1eab7a1d68e43d08b23ad4fb58c426b163116b4793e9c12184a9c2bda765f4bc2a397c386acd8103c7cce994ba620455ddc2f670a33f09ab24d5cbe881609db96114ae80c037b16ac6142b891d8b70de16637d57d1ecd811a2640876265dd162441425782b95ea04d2a8dc1a81ef157d6f4daad592aac69671050486b6c5e26c579df3646a96d8221cbcd8f821653daff33a6b47fb1ba86f6d92a4dca601268d30df7736eeee7928140bac451c685347db327d8dc7aaf1387f2e892c7076e4003d15b87af20115a96c50dfd984608e3f25b1292a75b4ab272a564df745ad54ca7ba2320141cca8fa222ba357e4b17667a5a6fb55932293cab3313a3df8dedb9aeeffc98955d37dcbc45232764abc2feadeeb6c3abf193b568b6351a9e3a98c94db2f3e1833fa171f5cf98206184b5f7e00660056dcc87efd1d9c05be37d9a8dfa120e4de8dbcc7918210fcd377dfa54cd54dff99deebea0fb29862fc1e5c62f4f1075ec61446fff2832d63d1aea3ea8bbecfb3a9a91fa8b2e94ea95779ffa9beef0bf78fc4482e3ed3d706a721b6948331547e7818b3b9db9498bc670da79f773a94845dae17de179be90e6f16feae6d3e3ecd1952788f70f18eeeeee20d1bb5f0b01208d76e4337bc0476c3467f51a47c2fec8566587af149bede98e837d08b3332bd58ff2dbda819d3269e6d3c43422f99f5ae61237cc6ae364b4c9a250af4a25e01a3262dc51b6b3cdb8fa37f63fd692e4b7d676fce70ec895073a3b8349f346919cd24c6b674e845ac8f6e784989f725cdb36643a26f784976e2a4004adcfdee9c561f4c0123c26c6065792fd2bd9866d3361b4cbbe8672739b7d76d9b36e46cac31516aab01314588bbbe48e495e5a0f9516c74b7bd5103179d8a3b099f20ef1f77f726301cb93b91873464e13a155fd84c370d426033dd68266917a75bd3e0e326d0220b772f011622ec052bd1ebe2f15b67daeffba879377ac9accff1c55bec497d5fbf36ef36f7bd33f2e2c7b9afcd9f8107f7f3bc47b20c05825296239a8ddc48274818093b9172849414866440c33f09184f70dcfdcb15e7cdafb7f928264aeff9243efa12a7bf57402f896bf96b97f64af13e4d193e323189d3bf9d785fb3c4349af9373cdb0f83bd46f14cca8b69ce3bc98b311b60b01a700c97a62c2379515f262f3e9a6f4abc4d9a793ece6d9ba88d46cb64abc449a6ec714c8d8493e43c842265d4088d62d2521cb4b3138dde26390f01a5f99a64d67acc4e70e07838b4236aa47c9e17356f8a2403ee5470800242359d8a1b6b1d8d894a9c69393a479986d3d7e6d6f7bc27149ab3aed5725a7e895e34dfee99e2a3278f8e2194188450a27007c0effb8f845122d43c6334acf505420b422833b8fbfdaf5d40d931d3774a188319a299ee211a625842c80ec53073244c82d2707c648641568825def7b491a7a6e16dfed698c82c5f963fe7be824cd0f88cdd14a3a7ed0835f12e716a6a5cbe36d6259a63af1bb931f9d2f7b551bc51f3858f2e3e67fa2a71b94833c5282672b96a5a899334dcdfc500771f80874e8cd800ad0bf95be7597522ad432cf1b049923fce2361f4b393da80f3a244a6be9f89deb683076a11932e3d3c6462cbd1af255cdcb5517a693312c5b1476de9e7fd25c6a82ddfde055da2f748d26de2720d3d914fbab404844ba6b888cf9849649e1887870198d1d3c3878f8f9e1d1d1f9f1e3f7ef0c03f7a78f08f9d1e1e3747db6234131dc012ee33225b46f1cf88cc5989cdb356b309bd0be6bfc2019c0398c1df9665ffe310ee1ff0c0be1b054a005018348788874010b8fb22d958a83491682332334931de97498a51a42737bc44dff0929d849d944025defa3299e9abe4ee8be44793662d0f692837bd41ba3cb3128d6fc0384dc285bb130f956c777d5e73a3d846056b226536531c44b3d14cd46c22e4b7bef8fc7dff46db4249e73b84618bb2b6b58df659860295980897d9c9ced9c8913427415202dd99873078b7d8e97442e1afe1f16ce8743aa1c22407389d4e2871e3f33c9d4ea81b9d1cbd517c843599cb1cd4bc349d6c8aa22673a9a3e3d2b5bd672d1b740d4fcb5bdb8e9c4e27549ad3f4274c92e32ede629fe2da6ff49ae93d7a8ce6d7a879379a8f0c9de73de2ee463cfc89816f7d6bbac4a7adc43352bf7e22d47cd3486844826f3085926e13cd24e93691e5a4dbe4376acbb47b53e2a3146b9cbebe488f67bbf569de17a779f67f3fefa7fd7d1c5dfe8f50ced396646b9309916924e7a1bb2f1218642042cd12c54128d0ce4eb6a9730d2311dad989c644b756bb78e64242e3eeeee3e19116787a71f93a476c3cc5349b4633692b71faa8f9256ac3b5248c46214da2ccc4e5cac1b49bca5c2e235ddc9dc8a47d46ff00468ce1030f05088db45ce714df80cf526f33f61bc52669ca6436fd25de3273a6ab14772f3d1c77c2710bdfe951001e5ae3f3464bafb665f308a741b87ca559f6324a2fedb5b1d6a9b8c95ba365b247ec9143e2329339b76da6b766c348117733dcdddd066d6d2661f33cef91d2cc32a4f83cef11d42432d3271bc5473fa2a9357a876e6ee87d99d97a6d3e7af16cdf5e356dcec88d93bc2e718a7569fe4d6f4d8b294cc444e89d913b09a32f71671413a1dafcbc1fca8b69963dd2efbb4fd316331f46fe45b3899a7fe4cdda8849343b116faed16ddd526ca3f279e3d9d00b56028d3034a31806f28a66ed0a7d29deb0d1b7f04837d5e6f97a1189a479c66cb52f71994914ff0f93f188d097785f14ef4ba244a8996efd301fd9b6c1be3471cc3cfa12eb5c4bc28fd3bc4b9ce67dc34618ebf3bcf96f89b1366ba39427a259bb6fa4efce91c9f2e3d9167a910835532c4bb34c4c7199e6c767ccd43ad7fe865e13c768af35a699fbf15933f769a3d1d22c4b71ed71ec6f97f6e7b96f76a2ef6b13cf369a6b1a06db1a352fd17dad31ba499ca6999499293efabc1fa736fdd8e8d2f469de8dcb47d38bcfcffbcf9c6b6f948fca3cdb98f64adaa769dbe679519bec4b9c9a362a3835f2d2db88c4b3232f316f5a4e8f6e8a510cc38b266a26797167f4d3fca8f9252e6d2729335f63536692b8a6312d93dba66d27899a8f5ef176d66ae393a646cd7427e134cb34ac890883fd795ef2f37e74e845bdefebdf9663b7444dd9e7fd36c05c2ed9898560353cd6515ec429f14e73ad66d3e6c36032a017efef7b37a6e1341f1185fe96e2236cd6eec3709a8fc01ecf86de14ef7f8acb8b672f2ce22393e84794e5176f6abb3fdb26d2d7cc99bea5576b4c62f48182c617b17e522cb1b63d8efd799a48fffb3eaedd76691ee5b486671be7766e14a7a9edc88b37b58da586f244433b6728b5da6d82856edb2442cd9d9da479b66d638a6f30cf6b6e1305da28a68d694e6d1a93e83daf91db364f7347c9a54d28cb50a01aed6e8d69e69090bb5ba0025cdc9d02ee3e81239270f72d1270f75a77409d35bcae50022588b001498c31ee5e2760c3ed51e384106ae0eeb5042ad0d46a4a2ef083bbdb983924ef80060db881bbd7171850c3132d0938a20a77af3fe040859bd413e284bb5b263f2f90f1c30a3f00c1ddb91180007306114554a102773741c00169542f5c4528e2ee568c0f82a8a206113400e2ee5d0460df036627289281bb572f623cbe4c51009518f84bdff012218e8b3b1247d4683995fdcea74ecb8bd3df193de255880e12df58a779b66d3729c73089de524727006214153b41c2a817011cd029383843880cf99ba4d26c6d1966e282923ed932cce4ff1f9d62804f2acd17262af1cb88bce97e53909309f4826082214464f87c9567d6628890ff161ec5e7eb559e39b6f3445470f768c216668ecb8cfe6dd768b8051f5b8cb040b090e437667ce78d015add0aa9a3e69d1d31efbe488066fa2a214244080a2484c43208b95cd84cf7aba6efbe2512224ddbf7b551ac79f4b01de5da2be9d294ec9c53273b8820c392da6d82713a64c489121f472ed7dd174989b736758a83eebe48ca8b959417cf9c1891f93462945e5a8af7457ad568e98c470f1b8a944b32a73522b8cc4764108266f385845122e7dd68bec14cf38c48144c7b95e945aad988f8d884905806978bc4472e57b9f5aba6efbe6509b4516cd64c12a700b829815e38cde46be7f21a9db9866bb454c9b63dc1b42c84d1ec64a80aabf4261eb254ee6ea3831ec51869e3d8637d714aa2e6df4e23329fb17f335e602384121892fc203982007797e2e187e143fc19fe081e7e8d876f6392e59c06e1329318c946b18e8d33725f9a369bec9ccb8ba1dcd28dfe9cb7bc18cacea75079f16ccc3098e9d6180a2e6f4a548b4264cad07ca4bc580949a509151a928d02d568a992245ca2403f355aaac4dd47f7222fb810de770b11a126d1d51a37d979a66b17d52fbcefd62ed7ebf5ca41057084f1c50b13b001195a2ce10221358c60b2024a81ba214517413c153758b4071cd071001a4c11001b0760f2001b2d2b1e0e38228a2872784033040d175f30812407150cf930440c530583041ea200c66fe87df4cef6cff4c5329959fe7d7c74679ff7eb1263f467a439437a9ccf1b35cb9bcf126fd2966e8d66f26f279a5f9be27d599e69dbdf625fe2c731f492ee4172e8701b3c4481893b3e633113a59598cabbb0f7fdbb6ff9fa7691cefb25d6e66c7f89de9fe93b7b5c66f4c2b0edbc32b85c2546919ee092083567e4251fa7f7b11477ef29a223a86633caf90c75e8707f172e33f9f88cdd1979718adabec429de287e176abab7dc015082fbf5b0068b3b367a9d97cc4eb8f3b8054e18e33e441e912707fbe871c6eeb6d174dc6dca3671f797872720d997c83cba5c0cc2f0ce884fc7d6e50f19f2372d149f2299ea2dd60877afc1439a349ce7736427d63f64c8ef1991896722262ab14e455c669400434047c6a0f1c80bf9a4d2ac357787794843e43a156fe946b14eedd274304e774c47a3d9dc243ecf4cea90b1d227c6e3eef0607207cb786440767ef804b93f6e901e321eb2f2fee8297d82f8903e7c74c8ad6da9ce8f58e2bd4d1a2d93b5886844de584e1fc71ebde4ef3bdbff28aee5cf4e8610967065e79c3e26ba69de1a08361e96a024c5319a0dadbdffa0841ceebe02aa712ebfbc78f61bc5698e9287245cd1a9a843c35bdf748e8edef83c6f4d4756e298ac070f9d20d7a70cc2837d7ac47cf0f0fcf0d193a36da78d6623c58db5b9cdf3a229de49f8cfbb514c43736a1ea13f98c8cd911a2d555262a2d24c63e3e3944037bd412d212496419f1845ef8c7c698d5322d4c4379842d8866d31ccc85bd32692db3d31146cc3362aaf19b96f4d9be54c5f252e176ade19f9badd13a7e5c5b3174985f6a2422bf10da6e6d1c3f622424dd4bc349cbafb1077ef81f3c0dd09e0e1083eb1129be9e61181f010777262650e36d3edee3cee5e4b1cfb5b79717a5e1781bbd3e0610e28cad3b4f9883c72b20c3573f079495d6294c8d47ab66f90bbeb24b97b8ebb8bee7e039523dc5de6210e1db87b99c9172e336aa65b47e323739b3433ade900e121e321e3e1d129797cca1e3b3b3d7878e0b247cfedc9c1fba65bc76c5a476f5b3622f18cd4d926913b0b2891795e7c83a9b72ddf2e135f5282f947fbbcf36e48f56f4b2dbd1bf5731bd523a1ca54904707c43921ba143e0b825ec7d5ea2558d1add718ba17aa7f2e786ec354bdd6ea793e6cca7aad95b34a6afdaaad9533dd60abad9f25014aada6fab9ad0149c4ea8dd75b855517c2a88247dcc9c166baaf10f9da255f4818fde135090c82b8d71a9c8441971d1e912787c447e77969faa6b5f565c2598189d2bb7fc8904f6d2467e5a665945fda146ff457b9793d8e6e09a0cae3bc6eb1d74be4ca8d62a12028bac4657a496d22198592b820e6eea2cb05abe131167a11067b59d6e48f2f623423f97c640693082395e825515b46511bd2799a5b3f4e6f940f6a0245c98b2fa2e66b9c5ef2b559e2a37bf319cb481fcbf71ee113a7274e6919dfcffabc1b07274d37d633f3bc29a6e1598d08354ddad3f036f1b60106ab0186695908f6dad4659a51a017af46472ce5457c84d1231b60b01a64261246513307bd5fd3effa4cdaf083e4c91197eb759e18a9061b6a786ca648293eca488f939389343e3289c632ebf2c4a60c058a723352e27167275b6725423b3b29b393128de2bec48b0bee376cf41945818f6f21c6dd8950b3c498cc69d09f19c546398dbd36b7f0c16d8c883bcd1aa758dbd08b691beb2373236127604cb0c30635dd2b0dee950035ca0c5e3fe0ee370fb5d03a15318962adf1ab44b1117963a27e34db72693e4e923f63a646b1fe7b3b4f6dd328c63acfc84f6d99002f6a6ddb37bdb5da7d5b99d3dab3c0c245c2465ed4b5a7bdb031d19b485e54d2a50445f86c278dc206fb821256b8000b281c0b29a22ef179de984ddf6a6799698ed1ec64e70c05e942d1fa9e47521ca453514767a6ef0cb5b9ae1803fb7d4b9c8f4ce08a22aec852a31ce144421284e15ee2f3628d460112348504599c04a7fbbfa0df6508454073af526a14174b2027971c01195f629a79cf23259983d3dacf0892dcfdb5f9696adb1725328546a0c4fd73ed35d084049646b0f33b133d46faf3e2500441704fb7a6e16da217a7b5d7e663a1248c93b0084a10f191596223f2ce1e05f2d285970c78a9793161b0a387c19ebc78c3020b3f234d8dd37b92b8fc07620a1d6c81c018f755a258bf4a7c83495e145b2c42e025a6f22e14a126901e3d784c7dd3393be774bf76ce69fa63f4e467e8957451f3957469af8d75fa4a71eda55faff334655594b1b1c647e6be47668acb97bee7795ffabe5eafd93691c810330417c207946a949ddadd9a666e9d8aa436693aa436692e9776b95ee107d0d0d8a6b5a93323f1fe7d779a6b38fddabb50e214131199e9c647a646b10c977f3f20830f28e99436a12c438188e0080949f31973b950a5996570b95caed70bc56569ce5e66edbe6a5adb7269232264a3f8e8c7e5221254ab8d79282577bcbe9f0aa1d9d05789b5ed4564a6af121a3903155a9981d6d8258b2e5886ba04b98b59ffa36317502c319085f818d0e298cc692d070341ee62793bcdece4024b7a9bb39cd69ebcc0960be870811d11b59da789a4cd0f8ae533f63528c2b88b3522d4ccfba1c0624ba10872285070cf4ef0130e78c27ce286131f3079e844144e4c115f1fdd4e9c99beb319265153e8c55ca257af90e67bca2e0c0683e5b1091e34d14413474d0c35d13121c6454ccbe4be665ac3f9fb7adce233c104664266092fdc1d8a874becb044ce798ee2e3d946c2e81567a8ed35ce2df10d267a6f5a8f892ecdc4692d0897994cbab412cd3125c4b8bf125594c071f18cddc45a477776735b431670c2024c2c00ba8b25ed76913ea39b7c4c54e2dfb734f528e2d44664ca6644e68c44515b8a944f6d3bc9d657008c8b3acdadaf005105c2900b0ab824b98b1a06fbbc611a359bc06a392d359a1f1fbd4a34c74a930b8d2361d9e73c4481257f9402603405ba3805b4b86b0a24b93b0594b82301fa190568f00d09d053c0f10462707514222f2242482c439af18c4cf30494b8bb4f008cc93e3b49220b7717d13b944403922822e2949a755e9cb21ecbeea7d728cd4849a0b0c504ee229acd6dbbe4eb28a24ef1de5893d896eecf5b0809a35bb6b8fb96297863da4d6fed621b8af4c4e5aa6d27e769c6521c24811db2b96f5ab3bdeccfd31c5dae212237ad72a398969bb85c43481945820a121789d311203802cb114947b48ce88111481891007751846dac5f293e4bf4ce5e6886fd1bdded7245294d24b097e5d68b2d1bad442fcfe7dce0186c6321f409ac05833d8ec160b71846732d56a3dd7d67389fe21a1631cddc6936a2158125f7310260dc2350440d2fea3b8bc00c7a9b333c1b8a40e8585f24084ce1be4d9a99123dbec1d410082acd1202a197787c80149ed112e8fe9be910114d04c54cce340a8e8f4d08896530f200d028bd4d8a08e337162aa288225c28e25d3c4f8cf4fa3e0cb6cdc74799f63abdb46d8b8944082127c5a879314e65b49ccaf216d2362296f09cb11e8908324b9c9244843ec4d21059386a1b4249bc49b379746738a64dda103b2ede689148c42d078449f1bea7d9fa12c5356dd30e58c25d744052cc0133382074f7bc6d422c894274116f5a2f8496120b01dba84913028ce1f27160307d916c5a9b7fde9d871ae085bba366037e68804fedb64bd4b411a5f7cf8b9a49d04c629db74ecd06d0882546ba48420c28830145b8bba8753e7fdb32cecfb6c590749e213d0366387a06b472de3204b1e42ec24a4cbb68105edc45982c0ca20877318819dccf8b74d372b64da4db368368b9bb23dd6e4d474b185b993fe71d6ae99283d3da35495386516c448b122ce93681e9f2cc332218a7b2171246b7c6a5cb35f42acf7ce61cd3e24078e1e2d0932750fe163b22623276d12840dc00040b0bf86201195880100b484253db8cdca7799a48f93c517367f47c2ca5f53b3ce779f14512cb3c43827d8ed8e45d30d8e7840a108202b850800f0a18a200d0c534e3ecd3761f299f38f6dafc1580c4b44461496062c6a9ec4bd346c53cb35ce16298e5ccf2a29e6d34d3be07cd4cca69ad761f35f18953293173df9a8994836917c5b9e639fe90c30f2d1fbef0c18a0f527c58c187121280450272024ac02282108b92bb8b37d896eed6d730367a6c239aed7dd3bae4e3d8647f9efa61e7795fe8c567ceb11fdf95236e8d4b215124377e1c1c9de21b7a6fb1bf359cd6704ca3bf298e3dce0d0cdbd20dc347e6795f358c8d60ad4ff3e3e094d888cce7dfd0fbc267ecbebe46c37bdf4ba6e646f16399100fb1e40811f002048c0001a7088093b667a2e8b2e55b008204394fd3e8e2d85083508800253d2cb9bbb86b38b0d9beb87cbd522c83bdbe37e9a70703f4f0a4871c070881bbc35e984cb30c6683e467683cf20325e807c96bd30583132027504629226ce79cc25e9b2b68f3becefabcb14fef6923c26909a4a1e8149b3220233233294d14df90539926ba67924b744f19c6a9ec002edae73cd4c36323a2835cae212149d9c84bdff0ca0b57ba3fcd2b8b9d674ecf3c43a2e1bf9de7254d5ade978702f090e280bb33f17087a21d46d0c18bbb083bf2a74d96622419d0e3f2d2701e063423f735022bb136d1fb38432f6e4db391a949fe795ea327433a0040c90c250728c16065c9ca155680b05273f1c8e3f448ebc9e78837307d8db85cb05bbbc55ee3529bb3a1d68b44a8b9b52903126f50f334efd16d3dec3c5d1bbdf877465d307d9e97847dceae613209dfd05b361177cd96ee15d08cb4cdc781c11e1b99271a45d4b11c4e90c31339cce0ee33789883bb7b0c1ee280011c94706821ac8286088bd9f4eba52f4c5f1e3c2c041199dadca7ad098ce7559e79a6713adbaf97beb0bfd139319bce77a31729976fcb37f26e8d621c83dd92725a833dd6b64be2988845b385e619116a9658df58cebe3314cb805e3ccf4b6af412a1f9d4b7f638bd4944da0dcda50debda9738099733225b4e67fbef9728160aab38a014cb2ad600605c7ced9ca194d7004b78f906484202f44edc9dc64303cc201a007417f50d1b7dde34f3f50adb344facff8697dc00469bd7c90d446e3713b8fb9087b7a39b0a4926482a42a3e66fddda244ecd9b74a399fcbb5baf715a96f7cf4b9ab5db7ebd0212a0df293e423389635848cbe021920e90a840fac1dd61f010094988947277f135eca6a54bf375c3462e97bee1252ed7100ccd355cfed699fcf3da3639be789a1bb5fd26b14c861f1bdd9d491ccb665afb8df5e77d4711a66fd80876a35b376c2474de5b9af72dd14b1b3a2f2dcde8d04cdf99ce321428cb50f3759454bb381d6770c18e7cfc08bc9da74d86cfd116c6fd228db6291c7d62abc1050f6defeea20cb0343f0c66fe6cf2a63b0987dbcb9e11a5361cc3244e3fa7f8861c34a343e16eb9a7b50f751817312d93bf4fdb95e13207cd686992a64d4853a1915ca45d22376ce4a3c746042f114262196e78092e336994ea9934dc61373cad27b0cf11d32eee62ede2d9eb15fe36c6b0943085b98b305c6612764373f9db96c3d4479637164afdb749c346e9a5e114cd8f69b909152f9c96f5130fa9c4a8e4086b60dc5d4c6d24793fc76cdaf679ef9ca1e0f4b194678105d7cfd013272cb0202699329cd6f479de3f4f7349ed097717719949248c0afd10191242621936d6771684f59dd5f4dd17c9466df9880c43d137fd71b98688b85c43aff2cc3372bf7269d3790a99a9cdf2cc2edc4a3c23b789a46d9892e25cda740d531ecf8632161ba6d430e5c537ca79ffd6b6a231dfc7b39de212c542481825322444f6844909344322e27211797d7f488890a46ce43c2f893a81c2c4bc3fc5daf6b9b40995176f8d9a38e779495a18771777ce506844d090b848cb290cf6b36d22ddd798c69d3f084f129c24384370cedcc51b9ed693cfb96d33099f355a3ef2000080f8127ae1d99078c346b9b4fd0d0c09a3b0d697587f89de5cdab4de289e6ddb38d377db6adbf6c4e59ae94b240997288f1e36ecf078177c6c3518612f24b0c2766005a4cffa71f0518eddc71aa7588ad5806da20a40c43a9fe42791a44d63db466f7a89cc12cde4d772deb63cdba694134ac4e97966198ebd2ef1493e9af5c56992134aa3b856bbb3d73776f74df10c95fd79ab94385eb92a5485782521072f88addcfd043500ee750700dc2babdab8d777af2ab8d714dc2b0aee558787b322e1cc478d7b3d0134c1bdd2b8d712dc2b09ee75040f899642223135877bc531c607e00e44447a90bb1ba902205342c897262d7b2843b93b129d8a3c8e5cae57589ac1e3e8f3b6958f4b334df1d11329351a390394c7b37d6af4a6b631b0bb6fb9b186d519f77ac3bd86eed5867b9571af2bf7aa72af29f78a72af27f70a56937bf5dc6be75e39f76add6b5dc3dd8be0ee4470773584e0ee4170f734dc1d083e707734dcbd073b70f72577d781bb9fe1eedd18f71a09c6459cda4e33a5dda8340f0fd6991a750ca119111800000002d31200203020128b860322a958174322d70e14000781b65c864e1849932087510821838c01040001230022002332040e00eeae4fe4ff30f85709f6a95786ce65aad66700b727230dc1b487869140b2e6962b573de43e697d0a56cc5a39dcedd0bff3a3df70931f7ec27a2947f3793be5732dc34b67f788146358c7407515291f213da58657786607888631a585ed6c75343e1ed0fe84cfc9019b0fff1e9f853d935a63e466f3e7648bf996f3047d3c7a3a86a3bfd1412e48f41c2eced809785808791fb7e6328930ba2d3a661a54cd74702ad635de10f2fbc379614802bf176e1c3febd8684534dea36b906b6092bcbc38053259266cb08130ed919524ebc8edb66ac30ef961756b506202bf0ab0e18e59ca9ae11788df625b5692bcde22416cc587ca64fa923edf739803731084278b13c4f4194bcf21eb20b41c102f231257b84da762c06eb661ceb6c1d15bf4233aa17e84438a18c3c6ac32c6fe5afc1ab52e5eb1bf7b6195150a33afe01e7f44e7b66b6d94c45ac6c838b82624ad19be1507f589a26b34d11158e6ae1cd38cd6d99b6942e426a1e7ee638367156c1658a83c503f6814320fc002f64f42974cacb88bd38988d78140909adace6bd9fb1342f1a973ba92fcf72899e839962ef8e997531e5ec3eced9f6cba1d2f7630cd85302566d40d315f13238c972048fef7d3a6ae2b63f7f596f1ac7dad3e79ba1234cabf84e9c9d3eee455d31c9335ce20ea5717922436031dd5d49e6e431f92277941987e30c89d0d643c941fc4ff841aeb0d0e6219d8b00dde062d1aa0e9ad2e95394666a0ba066a480cdb64b2a2c7dcc1e4254c13284759719aca22098550f8637371265e815039498ced191d5b28d41caa10858277007d566a300985eaad90fda0bbc1918c87c82e31ce72a77ec47621f54438556a8f09fd3b805be1c4d1f245fb68de1fe97945c364d63d66047dae1204389672c74ba18494a6481bcc9726a6f77284876fff96a3e46ea0491e7ca2cac7c92aaa92d81223acb286b3220f8d0113043d231b8116bed096e5ebdae5d1993ebfb066cd675cb2f8872342d46b6709be9127410df49201e225fddb524d38e30d17363a6e5f76a61cac8ce9b0782bd6d5b27c780bfd4390381df324cef143a1982c6dd9c6a649d131df91fc561f22b383f6f6ae96c1a8436a9c36c298e9253dc49d1b5617f88ae7e41ac77cd6d7e0bf3e769547bccb50cde9658714a293e78a8c1893d2590cbad5c58b3500383fe703d78f6a0f5c87bdbae5fd1873520d13338103202a4f30202edf8f6e9df33c19a3480f708f034498cbe497bc51f423de35a1e1d3b552875f471e2dc255054c2c21b00b3df5b71e0f1760587d9d455ebb7c73d883ede746f5fc897ef79267c5d375dcb3fa402df1d2413be8444b9b9743a6243cf5dc86233d82cdee40354f60f15ee81258bf474118e04c3cb4b2ea346aabb44f35c164a200e2ecceff5dcdf8a3d24a7ec1f14cf376eb792a6207961fde0aaf033e6f5257356a6eb6653243921a24c6f5a445663f16d6e65c33281ff56d312e09daba1526702eb823255065247e24209337f5259bcdc6b5fae9972d513b5585d9587bba75a6b445f73932ffe551a4c09061c8afcce52df81f4e0464a34fa7bbe9eab13797767dde01712401f948de8c8a3e098b0ff500f686f2e1de60dac807a25c2c15f056aed605d392f6c2ec958687afb72e104a3b99485c68b4f08b8eca491554e5daf3610fb85d1acce66987d47179ed8fcfffda8ed9431836e016947e6198287a3cc41b37581cf3be6729328558e97ddc11ed22674b80d8e758a1f513b55da0020395c680b2c79200419565e90118eb3fb7fa37a33279a724153a13209c7e921207d66da6fd74711d13f36ce721350a3b093c42937980aff53251fe419f7fb29e5dbab4ab0f95d4902515a1ccdde1447d12b718777b0510734ff2258a8912c17add0afa9017cdb8976015f1def7f2a7ee1dcb8f81d89c10e2534522d412ddb860c6f27285c02252471d144f95dca9ae5d17a87e0241bbba683b6ec01af1386ce4669cbd3547aca0fe1065cc3a4e7db461cd141c8f6157f88cc7b6c515a4930c71e3f679f0c415f5184cf8fee39744e6089e850fbcb5d02457aeb98edde746fbe0df89f1f7d7c4e3aeea337754d7f7e3b3df7301208a1d2b58705f4adc064b187007a7533f4449ba7c3973efa59cc8eacba11530c2fa4e09f50d214a938afb8cdb9dff7c9cace2ee267536efe9848cea69c30957d6eeac62e073739113f1cb0363be2c69633997cd3c37401eee6305fa10af7c054476eb0d965fa36e4b520ad50b0c589bf8076cd1e120da2d166957104af02e8f5e04f8fe500b63dbf1068f097fe3c1b8c321f14d08b70df69b5b48dbf86a22f0cb1d01e112e05051dd8fa2d7ef8a1137de38cd039fe92e46d420473d54fcc9f5c5d307e9f8326383af468c8a1600b565e70c71dee00f143a59296816203844293dbf9c7325061a66cf42419b3bb653a75ffff21d7c3464a5ce9d92016165192f15553583d68fdc8842b08164082714e51a3023b489f729224bbeb8a85fc268d78e9870041a74d7da87eedb92c2f31a5eec6d9cd5b46d3369123a8e4d83c9e5d456eec8db70eb67d658e9edcae30edb5bfe416c1257da5572b56716d0d5fb71354f259d3908d9cf5d142f5be09315f3f9e3996db82d6220e7937bfca18adbb65b27c5f854c7e0f1e9f36bd9a8c4b580a03afa4c4efdafd49a21533f329717218f1746c00c935206164b71fb9cbdf6fbb9731366713aad39cfdda4c6c9c442f38414174e67de7d2add2aec048f1c5766bf6cbf2d3f7255dbf7a373e988a9b07f4376d8406ff26ab059e38308a92dec126c1e75b609e225f5d03a217247c90e8f63994dec97f66fc03a88de98a6812810bac7c0e26d96d43ab65d907745dc0b6ffb2a01c78f28a413f1126525b0c90cf6d2aba86fac559e7b36b20add743ac3d542770fe01e479bd36aaebc9f2f1be2d0aeb47ad0528d248aa9801f64329cdc870812eddf36f191217449aba29c7d2ade8425633672a4462964cd2175f285192e7b30499bd60ba51981c3275d683d8d17b2155865cae6f01303b10a4ada0aed1a82f1aa102dd170d0a0d2876e4d4a432a0235488e0da6172c56df026b523e01d5bd28f82c65f8e654d9de266f5fbcb9bcb71647edc132c9689969f8de519c711328cd79301fb257365e8b1c1a9818e32003c5912446301ded36c066e99e9fbaaaf94d1a9064e1d9ffa407d82743ddc58428c222cdd3b4d187b374c6e0dc46d24284df6c6c7930e0fe010eaf16d9d405762af38e5f1c7b4b24e25ce9ea32218471eb01cfb08e59fabf101fc29d9908d14f724645ea3b084f1638dda5f287dac3c4ffd143a419ce26ebeb39d02c569ce7b88fc6c7cd09c635f7f6ce50046e6870417e6b58c46708a6b9bd85dc1cf762a05396ce0aaa14206d58491e3a97e7705bd6c990ed7775e7a6f33038df81b470b278b6f2a645a1790f90920fd0ef6f9f31e3c9cf95da32f9638c105bb30dc4e03702a82ee445055d847818d2fd8505b566c24c180e72df4920628a094da270e9c1e01bc937cc3618692cc68bed78ed93b6808675f5b098973680de22dcb39dab7db4a98b058499d7a7c726ea291e8bd8c89a25ad3c999578b79ba1e2733cb5a3a5d0f68ba209d2653ee92d86a87065fad49d5a82af5e3aba33eb26786f691659d78220cab6b52b065b9a2b4490651216224077fafa84e35fb3a69ee587eaf78d8d8db5d43a7c8dc81b008ebbd2993b7c02bc2ce6376e1981792734bddd2e091ad3790684578aa7f81e8ff58abf64cb5a8ed9c82ab42f6aa20f3b8588574d7dcf1cc75bd3a6158de001467a9e02e5b450ffc7faf4435199f96e754dd8695f122da86c34b57520a16f6a8c63ec0e2062c3ea687be5cebd8a9feedfdb523624208d673320abf881addbc06d900968c4c49d6dbc020d37f332d2fab2f3204bfbb309d11637603dc9a99bdc571190beef88f68d40de64c7ebb8db8a69fab0394852674294fb92920b6faacdc622b2bbf7a91adabf4c556ebb8001e84273a3ab48c33d7eb4dae0a28c30cbdf7d11fae299c4e8fe8559551054487ad7255e3db6c1e44250975cd5bcd0f3c598a56faa5f7c27bee86301074e91cd39ab97d177adf9383310c2646779ce9c7bc1bd95f30c7f8e9247d3483ecda8a2edf291c17f4927365d74d6ad6e7913581890b097113f7458b60cf20bcaf1aea271a32985602657d25e35b9d39852c4ccf4c42c359f75c0af1124715de4c8cf1fc31a83822d3258d1188d9f5124435114824848a82009a649f0a9edd02ea86619ab03eeaa0ed0ed8f02380debca7ca4ebacae890e16765c273a59f0c5cc8ff5d795f4a76bce81d95af0f5ec1621c99fdd114c0873510e3134cf453b72c39152ba4d957d4d6c25f38ba92d0e0fad0e7d6325a92b316cfd7f3893ca693cf2aca83efca4818ee72c27aa493e7000a1d1712f8b415086cf6a222d41733e786d8ab7f922f6e02e454ea78e360610019cf78773f7478ab42f0b6706755920872a09e4cfbbac0d12be8ca86116aadf424d8623cc5d285ccb33d27b09580e348ec257c256a38fb5c774b023aec935d268b0ee757652d9e2665deb0fa762dbe149e320829d9cebb5d88150f8806a5c2928ef2eccfedcea262071a463396ff62ca14253e90613e4d03bcefe1c487c48f43a5d9fde5ad257dd2269dccd440ce722d46f6903ebbe01386a000f8519c10551369366c2025870b05936722ec3a7f43ff581570d02514184e44165340cba649c011599f9f21de1b54b4ad32567e5d8773ad6d250e8d30118d305c89dded361ce47bb7b84249a1c6aef344ccfe9b8315e25be5bb08f13060c0e80510018f05ddd5eb34d8eea1ed8bf77b06cd3b16e111197b418ecd8932f0c144f416fa49646f895942ef58bbbcc888189e6e139671008f46fb1f7cede730655379efe8d78d98543ee9f91ebf637a183693d796967bd570490ccb55dae048d3a6914ebf9b9cd0020ae5110e4036a92a661b2abf2528bd475ba3247b9d3e8b170d42bb85b43a165eb259b30933875a4ddf2d7ffc0911c44dcda9c294b3e27ea23323f8d75bc91934a77efdf7b1c9fa98de744cd58d42cd5379b49720aaff89272e25fe258c6cf446deab1b9fc28caafc986dcd861885ec62cf2079cfd4e1a42b8d84fa6ccb135d3190504b5471a053b988e105d131eff99519039617a936baba035be5b655e93c645069a2728f13a5e07e3d8a1e590a1516c6d170bba5b429cfa94f940869dc63ef472cc79b55726d86c4be4e180aa52eef409041ad31bc6bedd90c10cc3c2c2836c3304e40ac7ed337dc9b77abcd1b6b13c1ff6f0635cda81709f291cda6596b95c063a2ddd3b247dd51e2f19dadce113a68001c82ee9cd39c1cbee260af32dd5d907ae00aa1031e54d307e60205b2a7d30b40c81ecff4f8e31a2b993aa03f34725851babfdcd4d150a818651237cae8cf09d1ecfbbd0b748b3e93ca0d8562f8cdd389ce9a0533c5fba5cfcbfae4bed3791a1e5245406849aa70680a648ebd01ce7ccd6ba9e26480b89045736d01e36450dc0c55e8b5925d4c589635387c97e2ce8ca55ccc294c2fb0a435eb5add0e86346ab7a4c7483071fff9fb51473d3b20a8c3b05b4549ffe4d5ca4c26089b9b2a938d99e01793d8f1d21a10d979f6e5be71d681c3c22636fa2271d1bf142fafb3bf1dea45bfd205012e32b27ed77b7216f3d0d934ee3c345d3ede541ceee9eea2b9cb6002fab7068269236d45dfa19e2719342c469a3b76eebf10c862d629d40de98190304a1b50c0855d3a9ed47c1efc92e096c439080129352deb7c7420b3fa0654f8a57d037ab734cc3dfda043baedc1b0ff4b1dbb2343c70e11764fb6bac92c888c63eb95a651099d7d9871cffd3c1fdba29b290be6c69d4b1b1b1fef36039ead9efa5ca051f01f5962c922be6dc50c8007d7d1e86e3a4f5d26084abc2e0545119eddf81cab70584bb4ce9b990ad7b7b85c7469326d1c80ea1b0ae1646f1641da14dce1230ca2b01fb635e0d6cf477688429ad8ca12a0ff35efadf54903f7a44ec68952d3ba29ef369b6a30394f53de08f8fca3044e25dbe2404477167ffbe5c02418248d1d47804ffd0001d21878f2a5cf2ed8d2865c35785b08278a066d90c63a509f9ae31704e8f76dd003375dc787a458c46706f4b2817f5c3cdc4624d7ebbe69d8b4697e731a54e33e1976d550c345dcaf73eb8494ecfdb3d5ea504e6177fbaa124bec808b109981dff90c34b1534197a6d4e7d64b3c07f2725026aaad980ad2145015bb47c6210110e6ea6cc9d1c74abb2fea1733bfc97725e7be9d76f0ef93d392ff653a2724e379421011a5976cc5fade26d8c641c1bf4ae484e2d0a68819d099c633318757bd03d8cff5686fc1527b63becbd61ee0813e2dcd927442a17b5ea87daf30da4258900d1ebe962b868b9c5c55b5b54119bd96b1827e1ee61591b17a4c0e7f50b751d2aadd3783bb2122c8c3f70add81a425fa52330b1b00a06daf5dbb858e07b6feae102a0588aa73a956391976e7dacada9dc09111ff6e922542b4a399cf612e13588707177d1ed401fb90c107d631734eb2dbf0cb3f3e49f3e3928366b4e15e55e11d42910b018f0812b93b7076d99bbe604a225b015edaceec2aaaf3832a37c6549189d51d5da984321d31d765209121732aabfe026e813e17263a5436bab12aa5f6d8c16dcf8b51d3177acf5027ab3e327eb3a9022c6530ea2031dbc80bc37769a37e3e224875df5b98b22181fdaefbc173abd34cd7a2a2b97364769e2734a6ed4e63ca4c98a35d166726f4e8225be5da777a6928f29182ce7ea875176ab1a83e5bcc16f7ccfff7b2aeda60131df3330e079fba743d2e15c85aebfc040b7124a7e0a40ad82be22108380a4d4a4e0e64af5138b998482f3fd9cd212a9ba165eca675911d4b4223f54ace59c2c51005456025aa1790d3adaf9a6451cfdd17ccb4fbfce29cb17b50a432b0499a21bc930d223355a845c5f0b9d41192c4071ebebc34cdb8cc675c9646d1a35b1e8920ca8f971b45b5003022cfd14d82e5dac2708719678a2b332450ff6f3ac02e4a61a03dfbb02e6536dd65095cb55b6ecbd6a1477a291edb8042bc1877354d4dfb022e64531e29692fa0954abb8447e09a5618258613698d16c545a974309e64dd49850977b02e1e08ce80281f2f290c15bcf08870cd286d26adb124304258a4af0e3f996fc2e13b86bc2e52d2c9d036096c553c83b5b746520c1fceb0f2b526f778505c0d0f711267a4dffecb1aeb98b4e0ccbe0a93ff21e273d1801b6cedfc7d9e6565dc9c3431c90101dff9ad249a20310b6762ed1d4e55b7c09f82310d85f80d0d382b3f816f65f2f619bbd80f94ed11f568f18d6424db079ed9abda2f6b2800b98f59ba2ff406d29e31f4525726df2d5d6d2ff1097f9718abaff3e50609acf01abced9c1ac2c4a991023ea2f0644e7e4268cd1638c33157919bf38a59ce8f1e0d06e1b38a9f1e60586d1fe9ec8433c395d402e85f9ab496780fccd4fa8f5f4f8a7b9b76f2c8ac802fa6f9d152718983b1d712e03147900820cbd4fe457a389feedac2d4276ef9373d4302df95101d5975c09a1268bcbf0f6a681b276f981218d4d6002a0e5f346117dd11fa823b1c1d7bc14cd08274a8ea34aa76b6ac651ebdb9d9149d3826981dd4a5342712dbada7cd3e50fd4988cda6f0222161cdf5819b3c5067821594510f68e51e548195364ef1f4b3b9b3f8bd59070e698e76847cb5790f60a0477ea7282f9123d2faee148d470dab4dec232ae55327d86e3d9937ff45b80619a837de87c407d0bf42db3b5d7b9b11d2def3ed2dd43bef06078c99051a719771752a63790a670d80f298b99d6f66b0c20716e22717150736e5a5965130384be99dafa2d1ef931bcff71e09c4cb6aef619e81cf84a6af157cb8f63eefc974217118ca7bf97cd458404448c48b0040e8788bf7fcb6a3020a96fd75ffcbf1dd3b4dcfed506f9135a70dfa4d0c0c97cef9ad646677359a18ddbb7627e111ff9d72a0e98ddf44d6c9ab0083d70eda48add2fb9c29f700e03c8750343adb411f58092d6bb72fe9e501b52f5fe7a2fde7acfff0b29212a8292e9abdb0b1aab48b1a602c34348fa04708adc1321893eba2718d358cb819a3d71a78c1985b07f724a0bbb124a7d0c43ae23d72f0c044d2370fd834d3d73c3950b5ef791eed22a426eb803a9c1f8d17f6946471a5050d3f1cd45fbcac7de034dbaa0154ecfef849054de862fc23b224d741ac6af01f1ad39ef5b147ff5091782b8ff52fafd7eb29709d5b20d008aefe2981cbbd6b313e1d89710569eb4c048fdf1930101d759c1cab4fbd30a1dd84cd07e149d3983bbf851431c3202ff08fc74b8d21f311bad13bf33c1d9261acff7a0077b9d8703695f99360d9a0ff59fd925194e695cf2c4f3e145827af709a464e51f4c9144c4c46925326220251e6c55ba3f6945d901bc0b840612b837874846ab079debaed229c3d1bed8105142cc4a8b4d0f9b69eb1b9d338255a233a9e9f7b6b09d2c640339519c10aa5133b0c3517efe113c20fa8061354812fe73f1e544c2626e734814f93f70b340fbdfe40307f91ee681a7ac0b40d2f2764383d8662dbc60acd571286d1e330baeb02b60814a24a517b73b54ff981cc2b14ac19566da2e1ca7a0fb012c22912f43c3f8921a8f5351d819851536d9fc9eec0a86c1e11819ac1cbac522d68bffb27816581b87c7780fda8088701c2cb44dddaf06331478992a285cb7ad81df9668b1bc3a1491ffa871c656fd9542c007e02596c0b97b67e8b3668dbe5a63c70af0ef72ce48227b094c65b7e016a44527064cb69b43e5f77b5d19f1c30785f26bd7a0a3c468df3f3e1ca0ceb8ba1e021e72f3457384e1849deeb565e45e29c306bcba804448d9ae326fb8b5b67d2ac5ea41470634953c7da92d9c80790a71b0e3c29bfed9f60e98d301ac543e7c99490026fd83a3bf04cf96d686e130aacdb105a782ad57b2ec3b6e79ea339ab2719aae69abc4033b88cebb4b4519259f3d7eea1b9ea8e19380898bd3f16213967db1787e1ab64805c02967ce7dd8ccaec2a861203d9937d3029a788c3b2d84dd5492eac60fee5c9fdcc659f6c0b6644533d9c9419861919d6beeb61e34c867973e3aa2ef0b4478876433460c8967634d27abe35c2852baa5cf00609f8226429a701be5fd46dce4e8e86e34a62bed5ca8672bc14a86570e95d24fb935c7a6719594e61da62b14f48fd06af5c61aeeaa76f25713430df4c4cc3b6800237f4b4be436eb801c957e991b7e778e7de5a0a22e0c293bb64b7fe43fea3e20b51c4f6d7f474b0e9516bfdd967170d29ef497fa31c455d27e3b8651957f9396cff41300ada0199e1bdd304e2c6095301e75e5d06f2c4c6dc2c1f64684269c9e623db55cc61e91d9945d978545c45871b3a3d3dd748e0845b19ddb0c326c8a1b486efd21ed3652d138fe482532178d5d9f172cdc028e890958f4b6a1413aaa6c4372924e6bc683c3668901535f243407bda8bb92c164a77d228845d46ca0b1acc2a7f8df7e5e4c205e31472f1ba181f45d85b799a97dff0e8be6342ab9c820cd03fd3c9f8393fd66f152ed115d07eab978f2d2ebc0e534d5e9a98dbce16acb3d6b3e6a3f805df8b6d046b3192d0db4d86fa0e1727f4077c34bcf5e8760e7e0787ac211fa6b92527432404d4ea86e9005addced8d5fb65b930803f46482abe314e77fcfc1dfa9c999cbfb65fe4f2dee9df11e62eaa9ad369e68f755887d33c6a77822528c62dfd3a491143b528fc96242c9d7bb07832f1a0af051fe306e9b84c7298158e8e39cea80fc3ab30e591acb2fe6b59bc024c4cd29c915be38172b4b41ca57dd02b8c819bd5bfd800ac528f0e5f6bf9adac68fe9758fbd696f3d7f46db5f2b8ce48c4b741cb61736e011ff726f60752d23e38974e20e172e602482054369a306f8fd68ddfc8991d17b6412e9f78c33f3a283f02164e421f6d902ddc286129af82f54f4a0064962ff2283e849d81ffc09d629219ec3b538220abe70258a1632c7807c637aeefdc9a20c0f99c7e433c5f104fe3dcdf3f748241cde0efda02ea1ff8a4dea0b66ff55216a30c14dd37122dcb43000361f7a184168e4f215bde9bd9f8f47c0f2a8b49d8024c281298e5d69439d208717cc922bd4ff3786f40244f109363676bd2f765bb936198e855282c2e51ac28760ab1295d8db19776da0c25a620db0b7f9de79700b0d9f256a053a853161b6c6548673adbdb14f043ae65e66381d2119ad3e4969cd8587f26ca9b5bdc382714e5ffe43a9a4cd70709e6bdf5159d67a2ca4ad3d6cb1aa735270eb93824743cd0fbbae8770bbb8e2a32b1e2b028706efc950287be7eec355496df5f27463c0fa977402116eeb4f999121938637429fb7dc3579427c01465255fd425c6338ed1295b5cb3f5136285c7857da3cb38c392c6d96f8085c535a74fe47164b149f4fcf597e4dd65b92b34084b9fb7c78457a3e4545130073640758cdbc8255c7e65c56e8a7810c9828887729a893cac83ce0a15f5431d99ba361fff64a5d7ab11147d36ad0f3fedde02318fb84360d97cf0258f02de519bdc61f7521d21692341740d6b09284be0111ad57312e2b3e97292d183d113a93583b398b4b1a432d19383bbabe2b9ab1b3f3cf290431b7719a7a6b579c69dea298344068f87a19e865cc9fa32067909f8bf9640aba7dfa192491a199e6ba48e3217ecf016710d52e9d3312358c0efbddeda58cbe7615aa37b44af144094fd9332b7f04789c5691c64034419d5a03dff269927390210c5ec01e4ec7d2421087d47e2c1a5b84d55b42cbc02c3114724814bc6e38cdc19a9b95e3dcb3ff343ae4ca38a1655bf7b12b731326d6c709fd26fce29b798e4db9333a33ea30cbc32702caddf57acdd8e1c8452f2cda2fd1299c595ab6fa8255a0c0d903adf4355551247a6c47e3e71734a33ed529cc037d4abac2c087053f7dc7156f6ae445e1f1ddde456330d2ad46904d7bd4e1da9b6fa57da9cbf0e7910070375770590d2ad4ca5c039a9470f463b1e6d9081fd23672d4de18c8a836c9d2a8f9942bbca3529377fec0629fe2914b364c6f9fdc3bf6c3d0decf444129e5824800d97f58da70c0de906fac4c2e2a741318fedc522a2c73d302a6fe03dc6ec9f511b753f75a113a226f4126a660eef649f6041e6f2c110ebe0fc919d54fb5385ff3d38e0235c5657c27e715192e9a80c23ef996acf2b3db41cd1ce5c3b789047f54de26783d70ffd5f481a08fbb505905dd7d21ca409d5ab42a030e60ff2e6c088a700932fa4e26f64cb8cfe04e14fcb2d1d78c1cd34498aee58307838fbda04947a8af8636ffc0b7c322173f8888bc3f4a3c5aa8e21e8a89f33e7169c0e61d0cfdc14db45e77a4fed663b690eb2323f415156a061a99a8b5f6d3813ead72962af1ef4386cc2ec3720c80a9bdb53eb453b62274e7a80bf48c4353a8828ac80794a0452bb5991d51df1eb9507344063aedb882f42d39f017e28930bf58284aff646ceeafbf4ab0a34386942176bbe50d22369672893282361d5d6e5d02782d1b205f034f5cfe9d0e1d4ecf694e095581cb404705f1a0e48981b8d90da020a784bb32f7d7f130b9c678fc4c64226b456cc86746dded47c32ccf3a2ab3cf93aaf662437f58599c498e51864cf3a4f7e09725ab167ac562ac8c3f4a56346786b4fe3d7937d9e081b505d2a1786271d240538a6196d67d1a4a93b115939cd4c2e756ca9112af001cd21589b219fd776e46d597e7a2304c2a2e3f1a5021e5827169e6e9adbbf5939cdc5eb58e92e3f140e9122128b21730e1f0390db1f13e34bf3630bd9655c753840454567bb0dc69d12f89efd30e5ec80c12ea7285cba73e5a9a947ee102f342bc85b1373793c2866a419ce204f9b90ebc32c39002d683e2b4bc62a9e8f05763a59070c9b8a1505e0ee631a313357ebd02c590931f6433dfaa4c9e0c72590ddf2cf70ee5ff459169180b64a4967fefc0f9c90f918950054e58f5e9f58425714b6b7df434b1835e4abf60053c2d78d73519804f5d9de40c82d3ec3b0af38665d831a62272657bbb89ce8ee10edc2076f09de6a83e94a3d1ab786dd7e8bba3f71f4394fcc375855d899ee8e722166a247d52b083994124f83bf4de64f6db597f1819682f4fdbfc217e638b51d24392352b4706c5d9b98aa2146155baa73658e6baebbe07618f3146dfb4f1e858f93a1e24ad3877c9df066125e152e14c91e198a72127a8d491f16b0667b0a65100f0842c262ace40cc620677d0a4b5c28d03bfbd04422c59adafa4ced93bc4152e0c2ed1ef3283410e35995a591e1f426904aa74a2d38b30663caf1c9fd8eb57243a371f033018be4069b5821397ef8819bf41ac62efb451570b200f3e96410c470482d8577430072d28e11e1cc77d853dbf5b4f48ffb205ccd4f7825859c027a2caae2f488da75f73f1a9f2444a2237c2b61ba38362f20330515ef6a04c30e2061d5fb0061a6d5221fb27b702e6738d2cfce80a0c96e3c8b4f2ea7463bb57362fd13769d0b532952a3a7582395959fe83cf53958bbef09b13eafa356053f11ab4edf0bf264d47cbc365603729ddf050f486e42b88af4c4a89138c0b35194519700b9fbb748cb4501a4f495ed9cf73b44467a6a33a51049be97a1b27361b27c3b14d28606f1e37543d30641700a8445f690574d5a45c39109b60ece02eca486535d0df36fc6090a91a75a075f495408d28e9096de9f47c4d62ba0eb6b534807fb9207d1bbe6e23e5b60ccbd739055740d13936f530dc9097ee0a3d65e67f76f3aa97c13bf022872702c412b620186ba7b21f9623e95ee619af2a03894ab8cedd96e41690f863555764e9a2feabc373b51ee4c6a2f4f384069215f0e9c2926850aaf3466228811f335f0901f2476fe35295835ca6f8fae9f8a434a8b650342be80c2ad496f6ca8a24129f2fee98e885a33b539f68cbdbf2eb4bab2dd17642638b5d626db2d161f9c56ed8ed82c456efb05c99cec0bd650d5f1a3cf110196c0c457ddd63e615878ab0690904862c830cdb34b16c32cf83a33b2fb3f79cd690209a98335f030ff71fc518e9343fdf3f1f9f807d61dfdc536e997830d269f4b9eaac13f3f980a527152ef67210bf3800f9e304c02802fe526b09f8d286749141121920cbd448bc5df360fe85fb9ab2382a3e5f7ac834555b7e5b37bb35479b5e9f1ef1e55532e7dea7af8d304259406da4270b98adbb93644a705cbd22bb46b6acd469a38b25c33ff0852147c443862093ad09c671f42dd4eaacc21542deffd4410058d4f591b46e4178039145fd7ca22133e2928e8c2f2297e4bfa38dddf462e9077e1ad9cdd583bac087fd3a1983d078eea8455131956cefc8955e41400e92515af08816d04c65cb7337250046d422fb33d8a51bbd9f45473591ba8c99c67b9f8e65d1f586d1e7c28bffaa76d82e25835dacd34d20f54356d2ad86a65c807b310ae7f4e323853e5bb365749bee61f4d8f7f597caa2aa03b4bd99fa97fb4aa70d0510d4df02d4a89959727026cf3debad96257f0fa2eb3f2630ab3f7daae941575bf08f14f4e155b88de0b68180747b128e7b9e2173251749517be15366a0cbf47ff19298c4c00fe0d7dd02251e0c8e7c67197f7402fb7f58a9ac24c4bcb661954198fc6966e8ba420bd6e1fd4cafebeb2974d727a707ef64e8fa9fac4fa8738cb0e3a7fde4d9e7068c74821ceedde2eab2d0d1bc6b7feea829d0ac4423bda9c2cfffbc3e4a2e8db1955324862fc427d7d2eaca3e798f9eb3496ea88aacf3cbd7c681a84fb637e7b6f30d3991a94184695d9f8b9a7fa189463ec5db20e63d173619ae2a9f9721fd6ff9e6b9eb04269596911f4bce8d52f4139f86e4e0d0adbda6e9b04dfe787dea73daa5f0227b61ca7f9eebb2e1a8d9bf6756460091dfcb9dbece1aa2cd1ef968ce24421890b9744d7726030cb5cff01c358172c9f1753ce3e734df9dac252bf8bf70bdf3fca836c8f71cc2909390f8c35b68dea266ca7d128ad2b30b05b6d6d8e131ce4c6d6c8bb8e1ec1de3961b343f41dbde7876dd181961fb5d2cc37c9e262377ce873ec990e0e6a7d2e45c36d329bfcf863ac5f1a843ce0285528d5d47a1fa9ef68984f79ceb8f2b3535428a73867d3cab1f88f1740cc06f1bdf8d38669486f3e610e75e87e7ddb87c8e18eeb82e4f4f394e8fc71da24f53f3885ed3cf80bcb0286ed78690b93ed9d236c0f3621f2b6f0f179dc305084ff8dd7c4d9222fc04e591c47e7548ab7643db0c383863ce3c229f0bf3ecb0b90bc406b64f005d4d4721c815f083aa5c975057ef52b69e01a0d9a1c16cea6fc056c53d334645387c762072bf94dc80965f02874ce07a1ac8848ed6beb18d87e0d68c0670d3f27d1dee639690275d879b6cff9d150c285cd55034adeb0c42297b99fb8a8be02a1734b25e7aed917472c3d0f5c5641790d13d2922bfaa34a95339f8972d62cf4ddd14359bf5de22089809487fb623bd6df74f1cc179e6333b10cffff93bc3369c49737c600532add0e58def5cd60597f17366d6fc178ad5740599fbe76332c8c39df77ac353f5f6cce15b3db6086d7c59d727c39fab0f99ac7847d41e01f14fbe01962943d42787de75b35cba865a3eabcf44806716447add1360ca25a96a33312b9f702122c8cbaed2c4631a11b21561c20bf2c1162887c4461584e7f3b54c3fc0d34d64cb7a77bf90dad997cc585a58d7a8c8ce74405ca4b4aabb49757bd6205fa63c0cde44fecdf8ea2b0d3679b371fbffec7dbb9a9810058eda672dbedd97189178a8f17f215aac2cddb5bd7e3a7f4166cac69392969bbd0c65e5b23c8c0d7879d388de69f94f5b7f88ca953c1d3eefffbc55fc07a5dd90f730cbf721f19280b76f57c1bb6230e497198fea85f2c6db42f5d71ecc7ef21ac5ef016c8b3cdd7724fb12b75835fb2ab176d7a63997e5328a4c8b3600df6224600ea2707c1e45c16fb1dc28c7d9ef0307758232f79b83ac92278b21883e06107499cfffa8fca3e5ed68dbfa53b1f19ff0399de3fdb14d8ebfa0bfe5f72fb6bc48dd419bfdd4e768e706f1fc0065afe08d0645c0aa65f794cb5eeef6854912da913bd85f3cf8083ac99d0526c7c2a7e8e906ec9e4d2def7852bc9f39374267c8a5b00313c9dd712e8d09554bf9f37461248b5b0e465aae722fb60800ee64ef849a304c6e575ca2f0aba0b727d7da8388a90222f873407d901c23a132f1474c9bf701b675cc217d146d93ddfc6175b75fab4d3f81f67f83c15fd795adef600c522fd5e99d4cb93f0e161c56d3306a4058c83f0c041b978bbcb9870e1ed171e10ad264be2ffd4290faf43b012fdfeeb68c46274ace1ea07a1dccd627f4eae498991dcb06c877d00053937d547c348cc6ed77328f141f209f34ed5948b5aabf240017cb759e6ebd01eb9c55dfd140d34d2b26eebe2d1558cdccf1e680a37dd4befe4d6a047e41627b2a88639ea7a3753b0ddaf51e5fd1dbed655811681cba602dcd907ea03b64325209fd8cdfca784ab39d8950c36d8375d4faf246d4ff76f95a7247a372513c7e9ad0475d6a3b3950e82b899f8ffd6d45c9be784b297d95ebb76116e37b2bb66c5a1eb58cd7386f1fb14da513d3e3c9ceaed5ad715e03de01aad18b1a953962ccbc46d7d15d29f4d5b6cb917890dc9f7c20a1dfdb72fb3613b1660aed2c959fb55d1ae214519359ff3e9fa6263a291ec46af428b5438226357ba48e3e31e371d1c10530d1cc7fe93f7e1f2b01f2a62426f79faaa3cf6da0f329916cd3c1d55dd9ae25474350cf6210afb6fb4d961f24cc4c3d09340456fae184f24e1974f41186dfcbf1a3b66743d4df47fda3a37e1fa5f83fe3cb7b2689e08c34f6be4c094c4aa17fca47d4442206e2a20c021b7751758b49c6d2b11ec140f8a8885a2cea8443387e8c81b5044a161c42d0499c1007b713eeefb36da389a961622b553ce8bc9fc156b62ffd3f9539156c1636598bdb6c7aafdec5fbd907f36c1a93ddbdfea5a985b2e3cc08faef8699834c2d5f440c14aa6fb3d9d22f29964f3f8cc970deafc59fde2b3b2e02fdf77064c5128c26179a196b3808c7c3afb067f521456d734a1d8a62c357dbb9e0961a24c7fc53ab7939b4747a1423dbd177a2a93250206e876911dfbec28de70cd3c95db729c497eac055389d835a1b42ca88a020e2d529ea93626529ae38d24d34ffc9bc068966cbd9059a28ff056d1a86e9a6da84b72533a29f7681ab7310f6e1120d204b6a686745dd025cd4ccca3df06f050732361efbfec6ae0fd01760f12e6aaf7e902184c94b157c1b46863d67ca896ad0fd1fc854f429c7b1ef35f6c1c12d66bde96a7f8706259d8fadfc4f7cbe245c72c2a3b99fba27580a4c77ea20cd56de2052d53d47cd5ff4571a1fa130ce16d30a9ed5c1588ce4a5f5ad9b60c46467f75d60a5035cd618b096b4bf8d26df620b76e31b8ba4efef7a011c085ab52f0ed00ab11a2a8e4563b0ec0a4b522fe5b73fc3bd78e42dd19f4772e28ba0090bc3c850792497805a03a73e29a08b079acaa81b9f6556a7e7051a1d52b06519c58a5666ab4a4e86c542ebf8b63f99319a00376bd5728862a409402e309b04ba024b7c2fd013a8e1584e4b19933214edd71d8d66de9e0be396803bd92e5d0610f22c8394bf358fbb8fd98eb47094c378bbcd967f2411898483413cd8d603dd237c62bdcf3f34e088a95b028d1ad990e1e3c8113d76e5e9d73b8f8dce3caf245e198cd926d24d93fc98b9e3dcb7f51b3809da5e709e4354373d0609a3cc30765d45d5975f7eb69feb7f295825303cd52d25ca6ef509058bf5de1e17939727f32663324e61d8247134bc4dd86172b6fe9bd9a09c1db801dd985b74cf4650258ab0f733c14b9dd025ebd2069cf9ec54ec3eb52d21da8615fba37e777427df06adc7a2944ae503f86effed7852ada331a5ee7e04c56801fefdcb2fe06838baf34c1799a1ce4f64ea13477412c11579cbf1c37822ac7af022bc922fee0bec8e19e2b2c7c85bd58e46f3ba66c3c47935a66ff277ee47dccb1fe254ea7f6621054f360370f35872c40dc43ac693541f1fc17b16b8084380ca1257f1c4f9b2c2bfc6f8fbf5d9387dc0e528803cc32552421ef9df9978ed2c3d9ef03127fb14651366be892ab03383c815bb19112a8f3304c47cb5c2b4b16542da3a181cd07d9207e81b035edd509c8d026319829ae3faa138b85e9b5c252503311d817bc856da14e600ebbc1a3c8add7c8bf2277d827b4cbf7070504e0e7e731d9a77146860a0eda2f3cfaeadfd1b4712cb371b20c2a583b7aa7b44396a082db2299e1a9baf020e5d142f5068eb6c0e7078e66f0a7bb9f763572af180f55bfcceb6b4c4d6599d9121b304ca0c27966814f96d304760793591ca372f9f3bf20c4a13e90f311eec6888507691eccb2c50bec65f34f3474e8d405d4e627e38cd0a62ff18429359018e4a77a602d62218c247f2463cf0d1338e050573615cd05faa2a75cfb0617e86524811d9d364b85b0f52bf09be10f98e267e2b76cfba46fa344cfce42f3f4cad7dae7b054b1359c4a0a4524b34f906e78c2bbcc4c08219bd2f9ef265736f2ebad8e43a82904f16b855048c2a8421218e224c2a67916337b3149d97d9a541cda2f24e6e44da322bfd9af584242d80cdfa0e481d8d8458223f139208c8243281444d2273b0aecb881b3800cc8219c69eafb638b182a2a66cd00039dc20f90905b471539cddfae9c4ba4fd7dcecb176bc65093ac925e80ce056ae577e269222c9bbc5a262de5fddd520162b82eaf7aff2a2241c1f73dbe6821eee6fa476025ea62cc4e41a3db67813c5f10088de136ad9331771ae6cfa17bc0fe28a26648e1d92dfd7d3b3b82e1806482e3249a06719994c1f5f368cb93aa50d2ac24c2b0973fffe6d64b28eb78c49d8ac1e61aaa8822546d2e212bfe5227196f40bc1671cdfc254b9cf0d347055dc348939fe730efaaf6e93caaa76e61253c8f1754c7ef7f33a202cd105090a69939669df8360c16b5ebe3505114473dbb82a87249892fb93345614acfb33a04cde424f23acd766a4f1db9440525f1948966b034123427a184b401db03357576adb608d4440ed9478106d84e31addb940fcffdb174d35657fed99e982f9d4b434306b5481343cf08bc3fe64dfdb7249a581c3a1120aad60feb080eb2edce4961b9aadcf2448538d1f414d34edb1e12b876db313001077e1e96e897d8f528c476576fd4be60bf4df6a7c03127c1c3bf453327170d38a8449d217069b6fb545c8152a0c2fa31c040d290a8330c2918c3f63ffd04c754ee0affeb141044ad8a174f8b81a92256a4e32ddeb9502454c9ab1cfc54d798191c16c4fe64bcf7babcf4662bd73c443b55c38d5e85b9dd4571ab1999e6bc45c9d3e922e497571b4f740df6d083cf325c8a0a75b9ef47a25f62a9fed7390bcf9d4c532234e7a5a75fb446af299cabb272bb6e644a666ff393206f9f3843fb05475c1c39bf2f5c3b1de4cb0edb217a3995da7fe9b2153d6f9518234d291dc001f8d5816e279a71becf63c8eda3b2ef1e304f721d6c13b3088d6d287a8eeeeda6e7e12e251c6e754d55c5bb74607bbd48a909979e8d75ce9ecd8545e9ba3c6e2190e85728a6f6528ab6e46633f1db56fe66f1073cc1468f3fa7a1ac28636eb7bd84f57792f8fdfc21e910acd67ef28dc71c8a03bc41da17d9e01fa723deba5d93fd57a4fdc61425af48ac694d1c58876fbb004d8731d02f150a9a6bd958ccc3a840251a1d504929b1f8d627004484c937b9bec5265d1eb4e59c850e672b518427898fcece3529c2d1c4441e148455522b91edc4729fd69ac2ef071f54573ea76eabe5cb13e5a6d818e32b4b26ca15f1e0f216663e8b0ca8ec41a3aa312be6b9ee8588aa87b47b463b57ac59568e9e0d4f2765cc42343b5da9587763a4ba12684d89faeb0d42b439ea4b907222f37090f6dcb30a2d86041cd53f2879492ca6c1e9975982d34c4bd2c3767aca48860f604d9ea1c8fa4d168e5fb066845b83dbd1204830d3b397c43cf592403f5d69475dc6e544b8265cda50206d20b3840c24202e96098df43c41a1646848310ce804c2b9c58c17ee7e89da04c0a3632eb97eb9db3509ed864d80a8e9dbdd52c3ab3ad1500930eb7727e720152fc3f3d5931654053c8c69824ad6094a3d863e6f642966ba29a1c156fdd121eb2a302c33dd02b82ba92929cc204d243bfd66648620b3c65457cb39095ab04607ba51ae741fa6f2f8990f438434fae42a99397cabf7063d45b6f0c01d4e80774bbeaa1d26af347e1357ff265fc5c0c5a20d3e6bd5eeb0e8f4d681f17e52e1616eab36f376daad938c02559779a035f830b003d32e4a8a340907b1e6a7f7dae64a4ed2b3854b0b0b3081c043836d69c740effe75488eb06542e7349af04a057b583c32aa048ffbaabdb551321206c58badaf3552489c5bee821e6ac21834dafd4c8d42bb4a03c58bd5f95af86d43dc54171dab67de0c16ce9d4a5679275df68b0b11370769d6d01d5d61d7c5afbbeb75371d8760506c6023ed1e569eb8b2b84a6c55764746c65776bc5acc0adb26ae0c5a6837f922aeeb2e9fb40900219ef66ba1e34fa965d3c14c46395b313e1a142e0048fcbf582e7dd5429e5a7b727f7496eb8b34962ec03d99d68e0d92bece2a23644f952995f0feb30ff1ed3f0e02d674ebc55a5e1787a2ea6ec39dece7cf21ec314c15b3890f371b23ade2c1822f5b9518060f474c470e37bfdf4a697c23e185e719d4dd9e1aff93e3ace9b4d2471d54ddb73a2e3efbe14987c6946908f7c2be35beb7c4cd05cf9db05bed3583c12dfaaa53153704fde062b6b0a96a3d3bddc00521e7488e989fd623665235cf606fe0623cbf9e934d30052f7d120ac96254d49fe81f5bd0c1db70c2a90623f861cebbdc6882cb92210584cbc4da279d16b32196042fbc6028559dbf82df1e70422007c68d7891f651705b5f766882ca3d934497736f3c11d1cfca4a954e10ce98e1993e62e2f4d036ae2de5ada00cd4671bb90bda814a41242f35d5e81ef332e1d2229462a13a51cdbc18f66c08af369e87460c68661603709d26659ceaec9ab4ec54e565778b763ca38c561173212fd834c151768418c8b63c62f69923be8f09facd02b526c653dd4851681a7e04659c832d3d519c63b60cf5981a850934b1340aaed5471047c3495dd4838df79bdab38e3a11979715915e3923dadab782513a2cb9b1cb0f2ead63a568c30bba2497c2085225c4a380a4ec893e32909923bf3741bbc77c37c093f9d357ebd525a1de0885fb4947ab16aacd9fc248448a17b6ed7fdce4b54eb1f02d36aeea57867ca28e83f3e189547544aa354b3a9315002dd8c258b0c8e75fc9559a7a2b14b6fd600263f0d2e18c046c865e935ffe72d84a3836d4f1d85104c742b984af88393028169482aa1cc7b04f61d938f8e5c7b75850f8ff5fa83cb16b3cf821481b041e9630a3338bf7d20d475151d0d24d214011d3d6219cba9ee3dad299137274cbda1fb39b37b53c1676facf7f49d0dea5afc52e0f7dd04bbcabed686f4413c9b0c7340adc313c400d6d89066a253804adaf0a867f3a9bd11767c2a5ca952622f9d223513b58386b60dde5452532556b4a6132838e868a700235934b4e64c783e74fd4d637c2fa0aecc85ac0c8102993aa9fd58452f957beb51c3630d1b199fe8d1a7b084f6ad0677a351ed072dd915560a8eaae3d96aa075c144689a3d4180bfbcea855a78b964524b4167836670ff3f9678df27e53a416f0b919c31df27d1aa8395b2d41d703cf41f3877f199ffbcc15a31e5b9f3cc4486f4bcb30406e65460e715c279ceb51446c1a01a8936cc5758bfe4a1a1c333ee9d5fb672e965cb9c296a24938da41f645ab90151ed9620b6a4050a2884cabfd48001d2134de7602846c4aa3bd8eda796166237dba78d6e66a8bf144d6cb7817eaa9ab4cfddb9d106bd7271c9d7af0b3d5a4977a7ab3460480850038934e7abd1c2557bee0e983e85ecf73de97f63404b69645dfce6ce6380c68ba6c64ceab7339249866f0bec63587eda0301418471ad55b50331c36a5d704fe756cdf46965a9fe2cc10df87bab8167085ad97025eed3d0fd2a818d7c5c8566faefc86fbf6752316bfe6fe91775af2bf6195cccf5fcd7c34ecf101977329808a55a9acf484b73a2494b07a33d47ab173bea3a0ff6417629c7ed90271d1e982d47617bbc96bc49faae053734d276aec2d1d9a3a676026f240f24fddf4114ec333772d420576856a162655606d6e94cecf5270a28a232a61e8d82894f9d058a4f29c8cb8808846224077bc52a833f582f734004cbed584a7d281e9b99818aa5f487052891fd8be7465f1ef03aae3b06184edc244951f6bfd0c899eb6d59e06b9e70a0b5ff3761a7d53b57fcf5701cc8d1d9f58b4f1119f2c898d2d0ea6fdbc15039e0b8c4881165681be056097bb19d07bfb8aff9023ff19cef7d257e9b7a0ab26db3f9c4707e6704e94e0a2817910e2ff02338b13284fcd092a78a3a68a69a181430f3927e3c06a80ffb300c1114a8a0863a853ce40a383e31f0e7d8d1a556c1ab58d96df1192af9c613ca4c6a0c3f0bd8158a8d2ae891e8b443ffe9372b696ca7ace442b51f34f5a1be6ff3a3cd601d52afbe78fbaf938e5a6f6e62037408d212d51af18f87ee2d7a1655ef87dd4dfcc9e48d1e73a1a678137fa2a42bf403ddd2aebf886508975e3894600a472edb99644b06b4c51e15d79d5659baa0032f62b229a560864ac47d43a71e92011f57d4de89f7c2b55e03a123fb3814a51ec6f8b14c82142d370ba469ba1f83762d1cb1d17473b6a52625742a7fef89a61771bdb8ac77a09b6d1f42a6cf7e997321682bc4a0b7ba0a9a626dc9d65028dfe8834fa81a073233d41de59dad05c9ccfb5f1ee8c4a8ba4b97d8aea591a09a351caa7cc53848fb82584a74406cbaf80c5ad9cc8fce60d91878e0368b48fdc8469eac517cc281bcbfbf4151861b6f58f481d74969d3922597af065d9cdb43772c1b304a8b8e0bf4852a9a42043ef866d3ea9e09a18aa5914c9c4004c6c6f8ed9cd4c0c3d8cb8802cf08d6ead660634e43761c1fdb068195e43a56440ff91ec7c4368300370e9871140ded3c7b9691cd91f99b880359145112c6667db820d3977a1095530517363b005306dd2c11b5d6f8673ab34b42798f472c8a9e0989dea473c5d50e21ffd3e7fdd10bdcbbd8c1fb6aa9402c3141bc89ab0b0cbeec9d3aa826312b9ce41e5ad3d430c35b5847f1ffad037ce35df49b14b3f3dd5dd25909d373be1245d888754e99a11ef235b37f1cc82218ed2d436c387d6f8f1570a8ec4d64d23b4d8abc1152ea75d348e29ec639cef24569dd38b897c93c23672901c5044839a224ca071476a3d3bf0c278d0e096f75d2a0dddc0db9b5a34942238aafc5cb7e09bc7b127d7b8d53cc38b9eaf9a7a5e57276c47cbaa6002d7dd46c9e39d95f28edda6c19f7c4f7547a67e90dd6ff3fdc505738fe705a4ce62f03955b3bbcb7faf5e2185ba938ec547e92e416c74e84191d6e82e04aad94f0ce28ead0c12b05204e1c6fd70f3af11fd72b16375fd0dbc5dda719f49f8ad165606475b3e5fc85616e472f59c247df4d63833f61257f41c5d675911e1bdc18d30d1df61939f256d0b14d41d4031ab5af94abaebf57eb389b326624b0a4ea41c84823842d1550d7043dc393529a5aa125ff6d8981a28d1f0d556761a7cd1b86616598b49aea64739036f37e29e7577520d42a62954d7ebea641eb2a39e94948fb29be08c8fc5f0f9d47e472a36ef2ab45b55761565e58df809967cf63c203ffa4e48f3df5300aa9d4d398a538effb2ce8ed14ed603a3d093aa6f11cd225d2873e47811266cc467dede3f1dd27e2575c68203e21dad9157d9f0deeca2af62b1116b4b536f45935198d101d4813b927c46899a20029883a20ad83ed413006a81d8d4a2d0cc01897e26d306b8d13e5e7621bf8aadccd412d8dedcddf77f65c360462fed919655ac1bac575be98d1942ced41bab3b29d4b7626a9f6c9dd20ef587a6d7098bf0232eb061a128f879bae2b2f00c479e3b0d3aefcd78c124beddd6317818ed8025c16a5ad96e91007d23fd9901e62a8e0adabab9a24245c60fdf6cee2ea209b8f0dd04eb13465418f19fbf6bc195535b4d6d7f2d24c23ff238933d4d784a3947758aec1205ba0593827418e73a10fdeaac2fb630f5f21f5db35e709b565b1c15c7776bf569c99f15ca65572f886d9892eab0f0920fc43bf85bc389090bc1e87b5a64f8f74138f64e636200df6f6604c4f30b132ae7b27dd3169986eee6153ab0e912baef3e8207630d889bff370c024d8041d543191122847c181ddead054ccc246465a415b727f0f51fc731274233adbcf0e58de65d493d191b5a3269eb07ad4f1f337206d170879870bc4125b9717d7d23430a2561828d43c2de1adf021e3443c0ecdb3ab2a02194f99bc7783ef7e900d2f28049480b66d6604578e46d5bd0244a71ec23dbab90a369097a731844525a8a9c26b656443b6142a40d44097f3f12486fe7d814e24f5d87ec43997699b198235e7e7225f37711e54485a59f085b73fc11e063ed5dc247a2c5c2dee5dd73ed2650a92378cfa62058d0743d8d7901d3b03f9345d3508ed682118c915f09bd520b798bc8e92b213c68d1f61655198b7e67adf54c72b0d4229f4528120bd175acc5ad845a440993ae3a34af03b678ac51d169cceb1028bef3ba3b92afa22b1e09edb00dd90011b69ea851cbabdac2912b860c4e36ecba034cbfd31a037a88321b7fa51d2dc09cda38fb96d9c9ae0eb72887e4e9c05c8263fa3163ce32e4c896d4ab04b3640a3d5bfbeda7d160f26bd9f54f82cf44961ceaf19d6bad523bce16265b48cc69fcf82de48905ac30fa4aaa150d759d6cd2b47043bd22dec376fec52c74520057478987b0d6bdd423099fcaf08a4f3e2865e3e7b25c8f82b5180de7677d448fcf7318ff8ea2becb7a1f96a9355f3395108d077e7d44053a0a556c108794acf738acf9122f49e299afe6017344c4dfb436139bc54ed83b5279aa1c86aff0bea9b645fd000ab5740ae428040373fe42ef76ddd155f43b57002fe763c40d5efe926f1b85416b475009d4caf19f881540c2fd6eafabaf78eabbd08155f6d259b50bc882c23779849bcef84c0d6d01c2f3fdb70a66c09fa9ca068686f103d3f070b1ac2f73ce591d977b6b2efe3f5e1ab8f72d36fc53b067774de904c16334ae485687f537fb25316d1320d84b94a5ca9a5457095a5cc55f11d762f2d133eb9ad2148e4b88b93d3aafa5ef42808954538f48d486b64805cfd40e408da922beb0d118667c23e04cc6d2c88d23592801ef3b6fcf794ceb12d03ec0c8c8acc46c090e531e8efc8218b692fa6b04ec8248eee03e64a3c2a5bda3190c7088b8e6410c7c7409113b3b2ebde2ec43be7346021643c57a65907825a906086b8664c3186d62724775c9cdc6deeb528b99473ac60236f26e10e287f0a6ba5cc561111440031316b10dc1a218fbaeb293876a645c6bfa34828398045d25c3119cd6abeff177eee8bc2b1b152f9c6068fb407e258cdb2549e996d381786e7af1e3c91a3bc3f6cb3dd4a722f89be4f8d34c33220f63cfe61c224f7a73281f5238e1cedf84b69cdab304c67e53c4e2ba9acfcdaa488ea4b8dc7dcc9e1b564636526f5a9730f0a159b4aef79e09405112282277e63b8b534b5f99bc948d1b327b159696835d2ef9e894ccab77f7cb7c953752f34ebcde873202a325a7642fbb32d07273c23632b20716a618da40f0f282c4c5fd6282f2786f5acf0bd59cdc624c65f26f14f16a330dd00addd9f01f8c4a4c5a8b7ce47d43de3591b8ce50c72e695b4742469e35b1743c2fc1debb6264336c8053736ad7bda33b09012020dd7631c52c1c6dec337fa1f9686083e6eeea7678bcfa0095038a0de51a13768a82cbc1fe99aeb202d63e6ab6b605327072fe1cd9b4d35de92492870c18f530c3cd83364e02f838a0c1ee7ee587a39f13815b2d71551bfd6e744b43ac2f5af3f6179bf66eb6e03169519d1206a65a0976fd08dbcf5c4229a8e30cf28a96ba4691df95e94f822e2d571efe384a193a3aea418ca2902d1393b1ba3124ecb82934af7956eb8f4e5eada52915ac40187a5d4086a1bdb3af2fc961581a26132e6dd822be80ae5f400e2f364813b17f40639797afd46ef64f405fce99bc8f13f23d3a0560caff8dcf18ead6329ec89bea6a6f9ab06118f85cf6c81001be3ddb3c424ca2af85680bc85f5ae4436d049db469fbd8b803c8e5cfae7c03d815fa7731112f1b2016371873c721865ddbed6a30a11dc29382ead3ac838355e18c5c10f5858db62b24af2eab120771c6ddd3e48c12e087f53694c86285583bd78bccf18b0f97bd04b1ffad7c12c56933cdc734b646f4100729649ce991d502d5f5d5a726120a61534113dba035839d00fa1001d05f71444b0972780e17d08449222a1294c81c9d433e72d33764ec095476ecc36193eb986820c46d5e27bc02032920accaca7221fbd3d2940bdf742a47c0263c052e41ae7d33226bdba1705aa5cb14a19065dfa7f7002b2be239e38d9b76bb8b430ec53855f72a020af469b0ca7dae603baa83cb0b43152c40771a8ec78e10dbdcf2ef5ca6c49f825319ab7d8aa1ce932904ab5282f7c296a5694ace2bb4e19d021ac1bb359517c97b70a93ecd1c0ebfe2d592463cc43540b0e24c3d135823ede452a4144cb9e8bda796c199bb62492bc48fed4f8e91237af1be68058ca43f33b289830322f9991fa586fff06f35060f3a39130315052304f6b1914c0a9c06a47a945a2fad78d6aa30ae75df5daacbc7e23d26b13343528792c81ace165e3a333ebc42c7e1ab771a5cb05bf7b3bd47212741e8d36238e38c91054d338747d832ed7051932b47e2c2fd82aa6f3194e25f60da7559364358a1f4520cf6f2489e54e0537f71f39a6e5b61d49c2733893b1d2cfdae81bba7648d8b3f6a2581ece033eb15c41fb484ccaaf8e7dabe8d014141c4aaf44ed4f587315d75cab62b696d35a597a677425869a01ccde908c3df32803a8800a0df0354aa6c45c658d19baa6eddf401f49ed1db02930ac63138e2df40a38135723ccbdf2d80e201a923740279dcba44a3d44267a0c2f167aac4298d9d264d88707cceb190c90711d3ec67596d5df2a57bdecc4320f7be083e31534335e1c1c0314b40bf49b1d2aa1020661ef1b40d0ae33de202e8c0a40c4d0b9957811339b0a7b3b4727b222f4830b5ff9662044bc3f060c261ea916d51bca0fe27d7aedb25d019f3b2ee6df33804c4d9371c8656f1e6c297658b355684940e9f91141243ced7040a3d0dd77ab8359a8ad7da20572b4ca4ad4c32e144235c0f947af000a671a0afccf4ccf8a61148729b8f1cae55cb7df301e3e374de142d9919723899ce693b4d090ac2f8c19aa644c6b8a83d8ff9a5c75caef0efe1c49914b3aef1e3693041ac5f4da59093d11d5d2bd1c980a764cf44ac219d1e247df0f64ccf061e59849584185a2e18adad485276d2350389461e683a5f560e36022986b6603ca6411f39b75c92a8ead05aca8a68b84da6f5e7c9ab499a656543f2aeae0d4f1ae80a525aa47765e24783e238e94895b2b7b96ce4874f0623a68d55fd5af3401a6812cf9137f449820b1febdfc4eadcce24355c1c4d3c3408ed4ab73e5505e8ed36d82425e71222a43b2ac1433508866ed63ca82753446a3658ad764a679dbb962aa27b916bd24bca3882c69a0008ad00a458e9993f784d80924ac148c87db066adc42a011961fef604d141f4ab10f43903a192ede9236aa91a5ecb3e39c485d42c31c33c79d81f828450b0d5e566767ec429ff91034d09cc14abec890a54c38fcee7403a965a9bc0547248fa09cf241a3c2c1158f4ca5cc6e0f9e96d1e3d676ac41214316d70c703d60a907147b451c537486a31460a76bb23bffa6b8453abe5868dd4f88ac93ae2016c1a675f3b4b3816d8d0938842a1c00cec917880af0cecd4b851c8fb4364eea12f2b2adb3d5315417d1bee49540fac5028e5e06e5024190c13419e1d45ae8e89a5e31154666cf39bcb569356fff3cd9d34893700f6ccd7ca067b57f3186818c93aef2038f6a979a003ec46b012fb093c9404ae1767bda560fcba29333a4808f46c104521b1be4ed1e83aecd8d651602fa9b627d906646603e1e46508083f0d948211a81731689554e843020fdb5bc49e86270f38690c0bc11aaeddaf6580c00e55db364ed694380bfc7c3c5e93db76a6c2641f9d4040db0b5e6d2240f441e9b8ae7715265c0d33d3c070a99f593c1727984a2e762e7ccad35e782c321a181dc49ceebb3872c4d7c6f357fb9470df346c446710e719966de8898754cb148548fbf8d1f8cc4284473cf0df453fec38d3f068dcf8f930d4b4f715ce73922956a082eea996ae9c64d2f5c69957cc0131622a10c095f72f8aa9d615d2f2af46f3514180b0a9d7dcb47928a1c7aa2d2681960221883b294941e39ce079e429247dc2de4e0a4f19d66ec041163651ecf65326e0000186c2183336b6a718c85fbdd07902600efd4050f7e95bcb5107a6797493cad234b46914038911409ae605001d2d9480f17675461bcd15a7d7b854486b72f5207cf74b7dda9b81ffa6e080f81f11fedb020c971131dce7b5d0e3a875703a2fec4ce79387055c47fa2947926542a5a64c1a9089dd288ee9c13b2bfb621f8044c60a210076c588f63063eca174dff5e49e54ee2be8f2398b319091b79d95d11455cdbad5975a2d11c17f89ef3750ce6464658000ccc7ed8ec3a3d562e2bcb649812cdd2add600f6dcdac159db6ca80e4429633dcf053edaacc58ccc2b3de62c79b575522c3835877217f34dda6d591972d5de11e088771d696b1f9b0f841296d1d8562dd19b396d73b112ddd55ce53c1e0def1342a10bd0209e143c7d7a78a102020d3cf2045c7318b90d7266ca210b5a8535ad7fb5463d7a5a24bb60bee6dd92f7dfccccb0a626e662c309ebb64b476ca2e6d0890648d92df97c9e5e9a119121244fd8d0731ee86fa77c36817d97cb922c06fd54071a1a5a65528056c2f571b3600795cd61a56056886051e220752a6dae3d6de006d7595abdc08aef9b488007c55b0d066d15b72c11975d2fe0cd326a097c44343ed8fe333424e86f859cf5cf82c7711809401af43f89a5d88ca7929fe086adde3ff9d3e4df031bf5c8f4d11f4d489f813eb9ee25fde55abb96bd4611d275635d4d967e430d4908824c64c4b227e950516f00abaec10342535533306a2c9554ec6129ace50ea7ae1a59f0f435b65e139e4caea702d9114c5dd74a3cbca025595391a5d38c9ecebd63d7c8721641a67e3cf8ddf59894e64b09cf4895114fd4ea6cf6b872f652ab9ccf7d091462f21fdc357bff6d06e6809b652b69c3716d85a23595c6880b3035325da64253291b4f64a167f6bc47692f56fe4baad5bdca07c518ce5da75076272c7c7b67192c0df4fab594bb33bbb66607eefac710b6246946416290b7da4aff5ff45b34574edc1c94a3f01389d8185af261a08f38d4531e90cde454561c96d445f73fb7125bcb27d5e79742d995ae5771d81b527abd6644174b38603799a909044ab0cebb9cbb0f21b095b07d18ee2482838e35c1d8ea0371d5ceffab3f10f70f450ea31ac4af8f38ef97cce3408541e6d4c1a57d850fac93829edfaa850eb49336f2096d923b9bc8489654a182dcb2b901ee0796021d08d3a0f499a6853c7b019a078988a8323967e7b36aae45a7512d2518e1c056ad1f664320dfd86ca949789b93d3beaadbe51cd5b78570991672b0e209fa58c6efaa408bfeec35d7ce835cea243f526e6c197eeea93918c983587cc53251283d854583b8e908cf17141d11710bca604210c8e641e1ed186237cc3e0b3345306c64f8a55ffacb41ed549947ea735427b3d414058e47c67cc603a07d8b1dac50e8e8b19b1b78cf63fb06a4e896521a53e00f6072d1db841e951c95418049427bcfc536cfdc62e6d42031cfb610efb4e63a33def5c44d93263b4670956070e94a4973add6323e5276858d0a5bd528e7bb8f206477ce3efd8d619843418b03118e457228489de14d993107e02f2ff1f7c004f8b160d296f80122263d837fe5131b1f0aecc548cf33751eeb41390b6ea0f7036a2083e90da1edc38358500f3c3fd85f0ef0280033ccabe65ab5d75375c7ee2dac32098a630989ec423616cc385bd84fff281a00960275692322398ec73c072116c7832d8754c3e53d0add9e8bcbbe85dff0e12cf914da5f89233975f78e41ed9c50ce705c1b8bfee0fffaea817fb74fa5c53f6acb2f07f05ea6269a9b0c9013119886a4b89712c5f1ba40d53f9172ad777259f6364e597e3235cf880109da9791aa5df33f2c960863fc1592f1fa780fa42dea98fd3e75386acc1f3dd11a00f5e4da4cdc8ea94a171549c8c94e760a9b98623d8be2de3ef51ce1f09ce8d8891c74068cee02f69004c162a9e82b22eba2734a12448e067faf68cbb8232eb34dead3270c92b3706141d33c859921676add3268b969710c07cdc3e6b7a632cb2491855bde30c76eb95ec884fdb8cae68479589936367641194d06c9a2c04b6d0890b05aa34b15ed3a38b6ff2230c4ef16c517981a30829e93ea063e44e9cda6e013bf5668c06eb67fc0a72163c20bb652564d62841a5a70c297d363178482b5d4b37e7aecb13901d2e92ff40caca42b23843438647350643b81aec7828c2dfa51101db2011f03d6390d82b0dcd1a5ce3f11ca29d15e54efc85ead017a9bad560268d8f0a746f59c677b250a834d1291f14650396a398fe4e77a911c306b0ee35afe66908719c6b5933f1ed750d7242d3e2773edf12e9a3cd917f87d3d2b2027ce1c3b19a4a68eae2ccfddce4dee6d3ba6f8e8e26c0d773c33dc962df3097c67b0bafd251e5318b05328806b6a36a26fd38e25fca0fd50e52c18d0ef0cecc1c43e8312ab2201989b82098418d61d697aa317cc260cbca1c9b139a1fee6de03cd6bac4156f32c614924f67032de85330bd9b9a9f30e175ff86b9ddb4e998f4961ea2edf44bb1cd2003243d87db112e62bae718646908d8d1c1fccb790fa6564c5d08c80c3b367f05e310acfc374b5c85a5933532428d9d88ecf8beeaf43b00d4b479aaba75a90f88daded8405477407d8883243bf2db54563ae19c6bac44c33803702427f34fb8b2abba5728a4d09e3afa9aac3183dfbc1b49def832843c041d057b5831f609fa8de4776b656d66bf24f9f95bed6054b184dadd8066281b8c3abb8a2601b1864c39b3433116b21a54154377aa595a52756d87e14ac8a756034309146cbee02b91a04376aa6d3f9770a22a5c1400b89e57f859b7eb5d56b724a5863210414fd886ca85e915ee9874360b54bbc0ae40e6a328f550a0e1ce5f6d700039cad6445e1a7d8802965099dcf95650e80c05ccd693233d23ee1e80f5487d660af96270e2c2f15e7ed61ad9a0e39f9e958e8de19d1995be0ac0299324a5b35738d570b86e002cb1232a556f774dbec995eccf7342b5de6016520665a8bdf78483b7d76d044c9429bb8257106fc9726540eea2a9d4d7f593dcbf9c50e983a26b38047a9183064117f399035fcdfa43d47f7a6c738e4125a93b5f0c18ff5444dc0f6d4552a4cd4a3dec01320b1f6b7a9f54bdaff67c81707626afb531ab4d3683f45bd4d4d415503cf28c62e6a0f1fb1c9455e5e5b2260ae73368d8007353a1d92a05606b6d42408d3be5be5e3523bdde440292f3910dba99cb55e543290e7f59516eb269018690c5890444f223fba83531e29caadcb7801d15310d57c2d6fb580701ae4ae40aeb7325a5178c07e2e5922711321c11425dec0852a0caa8ca914052da7289f198621fd87c90a14933d9d142e232579fe987c27d11271b7258cf74a7882293a38f2d2426de43e9c974f0b8034b586042e169b1a139ef501fb9744a82470182ba922d72c8d28648b71645753cd6c1e63189fbd5d5c770d5f918cd33797b8c6550d824cffac7525744e1b5fe4d7c5ab232aa407747628161631581f21c69f586172360c1109365f1834ba21c54900e3930b8051e6fdefbe791a80ab0ee274453d49071791e14fa0dbd98d91de9a8bdfecdb0d37ac97f414ef67a84d3169355e9f28ac46b101bc09fc07a6abceb49f00bce0254e1db3ab1bdd63d056646872690cc0963765952a2ec7bb1ff929c5d6ac3e19495723e2e3b73ba57069ebb8c4d28d64840ff4e61bcf51e35a3d6e00890724cca0f969515609d49531fa874588d2ed837f25648df94149cb593c5e1b525edf644b4afba16bf1d6023a0b95f334f119d9e23a4be7c525871463919d8ba1b4cc4ade5c487b580e818dddf47db960e32a97eb3b3354dce91bcc605b6c2914d087ee24bea99f9d256254ca9bb4675521c1ffc1e37bfc7be75443d2a7b38f3b777502c58b84ab156351b9bbc45e4d7f76bacbdcf3216ba4b047935d72e7758216fa9fd3069bd866fd6657f5a1fbef57433b314179e1a49f4e6e2e276376ecf97c8c77a43162298792ab9db01bfd2b988fe588962f3609c6520372fef861edeba5e40b88a007cab19e2b6d2d13c403b9af67ea29bd99aeab23b95e06d4744ba9cd6274f1142bb3e494a0b2b2456cb6e27a5d47600b8315e2adab84038bb55169462970cb3116a47bdb912c8d9e1fe4cc81d7ace33b0a04c89cf0a03d51816cc91ba619da2860f1b575d7ea42a83430ea45384a79ce3d375261085b1dcf2264811cf0452206519d22dd7ae2a1a3cd6017aa47a4dd4e8fbbb95a8f6f1b3714d5696174b62fc63ce24c0fc0f0ff53a7651b3a254b53a746130892ebdc8bbd34adfaa7964b9d96a8a324e72493e1ed92f47d7d8d89cf1c47a48666cd2c175eb6f36bc6330fc4e516f8426a95a20c2c242576427d1e7ab065dd9da5d35fa4acee6d50b81e32033f43d5302ebef1890c6c15dd6a20656ceefd37e0dc2b560bb063d9112d2d56ddbfcf632c4251e454a40b1b399108a6075e5c843f1793e4c53ee2cec869b373d7f3be79ea6c6dd4c02986b56141d9d0bf9e4ec05505f537a6d066014f8339d8c8b7df6faa24a3a2d0dd74abb76b8b2e0d87017d3622b35a341b372545b3f1af0e04af961de5c2019f2d6a9a26b9eb5ee265b6b03d255dfda7203296dc97993d1cd9d73763a55a0e694d8cfb71b0dc4794b87e76306311767dbbc5a58b48ba4d14a61a513c1c77e23c2d94e41b4abe1cc1c5ca5227d319e6917764fa99587a129692d982619b2e34b5bf148046e7c2b76ed909caf6af74b1ed26b5ce38059090a8996b73b5b31f06a34101080db74beadf5f1314e6dae8a635c153e94e5daaa551930ea8302c1260a1e8a2b35e1109cd1306e6f841c11f4e626f2f7193543ae99282df7f840b1c81db5d6390b8f8cabcb6b20201b3c6d7f69609b19e41a92eb12e9ea3e267f0111a80af753c8e87074e4f851f8c331afd2cf1b2b72dfca8ae3f0aa19a1ab494da1ebad36bb9b0a8839e8cdbdad2c74406bb9e202b15763f32a2d5ad43b496594b3769b718cf17ae31f78542fc597063dfdca775480c0434dc3406fefb734d0129949a1493a67da84d7d87835a5370626301ce2325c69587f2dabf1266ed86f0191fe3268e25a20c85a6d829b56914f64f79e13d0b4ec89baa871126b4ba8ad230d279e2f4572802af2daa13dd6d9d9effd7dd13600bd55cc2539702db78366ac2d272f2ec4e8ccc38aa27110f238948dec17d17c61a4f8fd60b46e32648197587b32d37ad058804a1803a01b209901dd6e1ffec45233f251f9ba3f6ec63b8e00984dbb672d75bde8d8abf411451be0204bcce36f1e02a63e826ad1b46a0440b3f8da6f5ab47298976b774b706d3b9331611cc85bf7fdc1dca2e3e2b25037443ba3c3d12adc600510f91c86c74c54ddab660ab8a650adf1e6869338aa3fab44a3f10e5a606bd400f3e647d5c87136142e900d693027eee96b3982543c65231b70f10051b44fb971194c0bd84b7ec1a808edab4cc9c5b7fbf25a814ff64fe1a102af47c75c2dc14b1a9bbc09f9f8cc22193259b64d238a99c2bb530fc8eb5104885943d923628d1ba46fed3c05c44f08620c497c441a70f57053724934d15e5841a72508c994664442f5ddc22c775e1413430f4942e4755165e8a7dbb611d967f81ef19a218ec2decdfec939e951ed5f44dca8458a4d4cbd591ae829bac3d515f196009fe27796b53dc2509fefbd60d092cf82853d479f5dc02bc9b0ac140b4c759ac1ac9db65ce821b85f338462c4bab950d76719c64f082744f0281b8225aebaab8af53042ca43ab8e955484592a3425dd654bf9c2e36e85a5433fd1c309d377d713786fd4670747c9323fb06f119db9a62a020c7a122513a66e6ba019c1e119040e956b41235052c19ad68616aac9d938de6449cc832fb40697c518a16dc1e8d0a9a041b7c70f0a616bb85aa6219b22deb68114aeb9083f5e24f37c5205be7668d61ffeb33e9021288fc5524ef058b2dd474ac4840177df8293952667d90cb280207fb1ab2f27794fc758616fb161b09de090d91fb4d7f5645b973b86e047e7aac19ebf895ec0ccb286bb260c0e0ac2fd9d22dc89a383a45d9931d2032f6dafea15b1467a60db3ecc0467bf1cf638ad27268704d3e6482698f287ef679f71be36f0e8f0221fb771a430f73eeafec1bfb11874c5e6bfa14aed982f3ca9bd019fb5d876d17c0f28fe62d2ac2806dbc3dfa985efbac4952f3afd8352db6fb136e982fcd2165b5bc453191d59c06c6c1378b5db3c88b72133ac864d883ed4fc326a94fe1c0305dc336856aeac32cfa25edba72f3ce1e9f0055f1c1509736ea60db110d306c4945ade1f9df37e7a4c4b3490f49be9312388f2a06d227127699332251392d5099c2f416dd48f95250985071a12704aeb2ce1c08747cfb7fafb934b884c2a7c4b491b5439472405ea304c2f6d347b138211040e02ead1f9cdf5733c02aba52f436a21830279280ace6f14c804c4502f304986408f62787dc064b07779767eb31e95880c1ea6780b3fb74045df2e7e6131ed6499c498751c0192e05b60b8460c9f6fc0bc20acdb2a20e188e73bfb340beacab0c450d1311ada5d7719cf21d045efbfd7399f9564042aa1cd0a3a8bf6c3eb0173526743fe39da6076afcf69b733d069c9deac2e1cb524bad7eedd86ce1cb97bfc4cd1765f3c29c4f0c38bbada14185c0c17938dad40430014bffe1801452629b19aeaaa9dcd77cf0d50a15c2d67a40c1b380567886ddc73b6901446b4920a3e68c5f0f6f4709c85a1337e6ed9610c11f19f57a90ea22699cb12d90af9d8e8a6f86f9d745e5dc43953a597cab926ff354a02bc9eb1b7e0c65749bbcab668c24764b5f2f2554ff0d7297399e0ba25d7e4d5cbc18892a7b32dddf34594f7936fe35c8ea905fc41c7dd0b3e1094e31479d070530c4a969020495f86138734eb61139167d06ea616406fb340deaeeff1b657636ae92c19aeed34924a5e8afbfd65c7fd9dffa7250aa9edc405d3474c0da43bfc946a2e00dd804823573a00819029b206a6efdfa6a4c12d57c8bcc1b81a4cffba605b2cd71e5a3d9cd5773e332366bfcf25abe0a13e64588b18334c417a5d678a0ee31ac10f9b785701c6b2ec317271b5fee653529ce7fc24dfea844992be89c9c6c4bc7416f9969e51b84b273c84d9045e61b657296b38ac8d020c9744fff887a63b97deab3b126c5506a6c78d5f8e129e41f0a1b6baef9d6c88dda6c73e71e6b9c577ad87e69d11193bf5c66bc1f15f76e0b65ed3db395e87d50144406640c54baf911d0ca7360f586ac522e5fb3979d2bfb83b6c7c869ff99ec7020c45f38da05396caf34c03a7db3aa34bb5cb683197f0c4a8abeed911cb811f497bba742c0c5c0a1b6894b890476cf7c3101967d96cb2c5042bebb5fd35b8c2029fb58956ad1b2e5fd168149a2ccc3c75fb16a45bcfe0f514378fe990e0437967602aeb47bf0881d14ab3b309e2fc6922f2d6a5dd166c58d50f725220407d01dde37620f17124a0d1dbe27f77556ae98e1305710e3a6a09c0783d70b8ee0d5fc7964f6a4beafffffba1c306721da8d78062b607ea8a486290157e3fcca707db7f5e41f76d20efe0236d3b86a1cb33da81c04168652b9f8a19ec39e43b9ec1389b54d5c4fa568c75ba57dbc142df9e66408a587288679c3c63ffffe18d87316d4e6fa0eb6c4e06b06190a35a72c94037eb8840d0e4210a0449a3663033f3becb9a82a8ae2328c63d80d5dec03b175f726fdb1da5a72e5a608658cfd633a1e2a08c5d627a15a2f3757766fb60c5cc3b885dc47cbc5ffdf926d11fe0cc60c06e08e060ad004c8c000da12403545001889a20040850d1c28dcf923539c54569860b8d3e974484bbe8a69019150000d788079170fa12880067098a6a900d31bc488438e09020f70400318b00005646e240001073080000200001b28279851882214a0f884273ac1894daca186263281894b58a212d384590420a68cf3314d983670a200931b4281871cd3344d3a58308316b0604d0243098c2030653043660533b0015a018e00ac7840062a100d40003b52a00951a4400c1b6c08e307539024947104199041c6680bd267d2110a7d341d601a0d68420faa420f7a99256d989268428b35b060051d44d8810e864c5f7820a3e40893922b585a5c9ef4a3a5f3f2482a90bb7cea5bd64a9df8aa6a0b1610455d5e2a10455197d277aa4f6748f59fead34132a2aefd6c114b2e1ecaa2565b94aec8900a3165488f9832a44a4c19921ad3341980850401eb3f72b054d9249d948ea8aa2c5065aaa90a4dcaa53429eff22175ee8fa8685142a988aa58aaff45f511e5a83e223f1202895c3e239396a9c71628e84c59909e452408918f2f507e983a5586ba020943c04c7124f4b1410c30d58f302f1997196c400bd193429f17512d2f1242ad3c67e423ea924638063080010c80003a5e48a38fd5fc88aa5f720da5c991416289323248d609e2070c532c7d268f245c20860a52e0d19864314d4eaac83862462773ab304d9811987460ba3896641e8d69aa3ed4bbccf3605a62435e8d3819ca808ca391f1cd64c407f0314a49cb2371900e903fcb94310127a68c094631653a0698329d094c99ce1453a673c594e9c829d39953a6d3c594e994609aa600dc0080012a1b2af17801858428a140af83f4559523e48505513e541e44a256d6e83d2421d6754c93892452512b2a719a26939e2613384d134a88fa84bcb04fa25648144584f471f90019fd8b0379d334a198b8699a306c9a4c9a099b26af6c9dd347efa3f9de7bef3de79c73ce39e75a6badb5d65a638c31c618638c9999999979b1c5165b6cb1c5165b6cb1c5a494524a29a58c31c618638cb1bbbbbbbb1b4208218410c2f7de7befbdf79c73ce39e79c6badb5d65a6b8d31c618638c31666666e6b5d65a6badb5584a29a59452ca18638c31c618bbbbbbbbbb2184104208217cefbdf7de7bcf39e79c73ceb9d65a6badb5d618638c31c61863666666e6c532367cae3176f9314d138e693ac1946941c0344d3e7a2cea8744853e44ad4c93c97a178a659a4cb0982613ce34995c8183250ed364c2816932b1629a4caa98322c4aa0629abe0079a580fc6079217dbca05646d67558d741a49a1ed2e8a32387751d0f72120b8f212090abbc903e240f953421af420905aafeef8b8b34144913faf1a312896a3ca451c83521f72c798ec69f3a8863ab0e549f239f2af3c30353e6479029f3c30b01986c4a308bfc60e9ec983b84a8accc0e11214488ccce04e2c50e21413a21c811242585e4475c448d444092fc911005dae288b7bc903e2fa44fe891502d0f2a592a48dcc2e5493faa2314688b58faf1a1cf91d05459e1209698a62aa898a6699a0468a4114d992037aa11e78576aaca45260430190029e4a18fcb6754ab8fd5b89442af71a95c8986f221aaa6094389494cd3348949100139c9797cc1c58e0ae424bf208aa22f8e84da4283230b27b9e5820618483c629aec87fae24b2870919012b8071d0890c09a57b6dadf41a2402c9583a51f5498a6aa337a514a8a774455fd90dec543fa8c7278418dbec88b8e10f5a93e493e3b582bf9c883109569c21cc2101368349a950281726460c4f209324d98420c828c8c0f08f4f04c08e851856ac4f1905c84c50b891083a888685c8e7ca5f19072a4a4f0d8c4c4c3081a68a081d217b0c1051b50c8cc213bf0905181c194d19189498717f0311f3a26a06302d3347596ac1c69c831249363884b929272823ea0408259620e23e0801599f020430a30b187066861840e7e28441846d0a2116a7c200d3f28631159e4a00a230238020d4870c31404d0864ab42088010451893364620b22d50e08a1c5680837d844d5a40187480e2f984fc511ec0e2e240e5cc287087604c00d551a6ca0008716b2a046049a025a60ec5004373ce1086078205483314601c4c817544031b1031b350ab10c0b20821348a084039c600b0b748af002d80935f0c1027f70458091074ff8400338102062c08d15834510e20e272dd0a89145f5e2a0b7212594055154ed2c711797526889bbbc65adb48514d334b1a64510de522a2929182b64b2a88306b2b0992c8464b2e04c1a2db2d068528c18d1902a1725b1fe2a550e9727fda8481f303ad023851339322951c8a48440e347429f4a9323935295684626c2b256ca482764e490890302bd92ca35382ea559f22fd5eb88694c5326b64cd334659a113d84ea8f1c29551a1c5fb967a5af98582b4156ab4f907f1e55645c7a2ea048a297514d49716ab0e186699a884c99a689699a8c54a1522709121bf2cf8834a2ae78792492398eb3ae384281f6304d183d645a1df050a419619cc69c7545480935a29eca3d9996858f86c544ddd00f1e2d29295de01d4ca45a7d3a60a47e421d2357538dea80a1034b4a0a6ba52daaca41958396b84b6789bb6c91c51277f9cae916ac95b258e22e2d54665da01a71408ec503260e873305e94115e893544f49f91ff1083d128a540098e180a60e5c018ae949d5873aa3277d3a2ed4e862513fc91589c85c71c5151cb8e201d364449342ddd08f202017b2f2e243aa1701b5324d1836ac619a306a4843f5e243fe6fa77a71515539a86670604ea6098372b2850c07967080045386033e321c701c980007a6a9b2820f192bcc98a62963050ca6c90ad0344d560c99ac58931510983255804211531ca6aa8a2c4c53a68a214c992a54304d531546a62a8664aa885568a669aac200932625430528a60c158e98aaff98f8c850d18569ca507184699a3254b064a888138756291a8a5412853e1aeb3a30289802f481101b6843668a1d4c2b13060dd38439c33461cc304d9832a4a458d0c75353a6094306148c18261186699a261f6bca6c604ed374454744aaec73aa0f7d92d0e8935047284df59f91bb66f4e22e5589a2ecc88ffc4863a4fe174634fef1e418519a164d4be8c3a0463cbcb0ff36f4a9d513f94184454710100b1824173d9167215514105255da615f096543339301971f15c84ba1cf4b28b4c483705c3ea4ea3536f49a10f51995a8247e35aeb9a0afa81d9a940f7d401a178a44a2746838d4e8c3f86846a51777a9be867ef425ea8585daa119512770178d6b44a51424d567a40929a134a312f5a221b986aa34941d7d925742f9d0d8effca854bf0a7d8cfcd5bc27f49a90571cd4e8c3d05831b2e2024288cc229a951c3e5a3444664b8e49a48766ead0b4b0781144c359d17042389c2544695e4239349cca5f4021ca8891aa6464e42423d5bdd45b1fbd0b55d2a1e1183152a244a03162c48866051acd165b38c97768708c3438b270f97858441ee48fb8161a8d4693028d860a193162646a32a0e15c6a44912a90c8c597fc5b8d932a5289d25c8a53913ea152660210c84871c63471a6984293623f1d1cd5fd9186c80be913fa41dd865eb4641e097dfc7738c977e4a8320e30634ae9745684fc602132bfe8cc1e3988086961e974522617083ce0c7344d1fa2765439285b6279792eecc7965822b0880894619a26ca962aef50b644d95295894016942db18c3aa41115a4030279a7937980890344d3a44931099938009e300500b00000189c23216aa444430abd12cdbb502c1a4e454b95860a857ca403002500c00e3ea252ad94e6daaf4a153851001450325105159dea73810c0366608569c25441000110f212f2b714a92a810033058c14a6091305285421b30033a649c9af2421b3004fe8030a7dbe184366013738a01095871c181228a00a47320af84035e2904a2e15e84426d30691bb64080062021932990de6094e3003d3842b6412e0a66912c094b98185cc8d1b4c46a6290d4c5802901c2d2b428afc2022c487662a034609468278b1d2993d72b0b0cc209d1d44728031c48b4e08720431b2854c022a959494941428641060c65406911009c0f84cd3049a3207b0c1548d384828c3101903e861aa461c10c8554af6435e640a9086520f72902900035abe7efd828b17fab16e830e990164617ad2273380961b0600c08d33b230dd38a30cd38d33ce986e9c1188e9c6196b4c37ec7063ba6107074c37ec6045001e7023002da4e9464b0da61b2d4b986eb47461bad11287e9460b1fa61b2d8a986eb45062bad1a2c674c30b1b03104000a669624066013be874634792e9c68e1f4c37763861bab1830bd38d1d6f98a60901097880021a9091e28a29234507a68c143da68c145f4c19297cca48b164ca4841c69491420853468a294c1929d000800798608ce986096c30dd30010fa61b262863ba61022f4cd36480054c125044cb74431146a61b8aa0a61b8a1863baa188244c3714218651640060c6b485fd1497ca9564314d427821895c7e44ea00c8295288d25097d2a85625918622853e9db79831804223d77c128a8ea81f6fa9151d3bfe336ad1d890a7a45097d248c58c313e7e8d904a2e1d52e52023ff49a678252f19143c4cd58833a23063605a90394183664e4418174c13468c16644c2c26048f811f895ea806c3041304601291c18891c10099264d4a0332d31ea6b71893ccb4e9c3282c3115198518d3340a1cd311c2304d938946143ea669cae10920930b850aa6690a51d55f078902b16034118a042c21dd0005654b150604181684f1a9405e42c16bfe97b42cc69a1227627f2c791bf21c2b9ed8c3344d58549e98a6890107b8b10615d38d353ab08690e9861a92986ea8d189e9c61a01986eacf1802ed4a11354a081084edca0a48269c2a42005614c13e6e5659a304b944c1326890e12150ab98afd417a16ce152f238a547dbe22559e4badc1893556e001d2570e069123a18fcb937e90aad187c7881a8d4643aa1c240ac4f220ea96aa3654a278f8a8942344ad6050d4a8c2cb236143921d8658841642469103405441072c349085143f58421839365087421039a102c70cab00283883a57e920e127f252929957d24fe604c61f81106009a30c2344d2297918fb7944a5581217219f9083d900a04cab1a3aa1c88ca83449f510bd56273a8d8928e1d9503b13f4254e89f8544815848d57b8e7c7cbca554463f2447f5f25cd8ea47e8c7cb73118488126ac553b98f8a352fa8164baa1c48055a6209154c9f3759c08d4a54c288118d123820c212d334e93841639a26134c3728210a2c2ea051810a34f6355a6ca151810a345550517d38ffa36b9f887d10e8c385925fb16f2915164a5c41091b9390c234243e1616cee7863e25255408896b382fa4d18ba8914883011ef1551506e26361d1d87f1bfad01d1cafd5a53c95fb2055a34fe92d88a222886689bb80516952aa0d68381e9126447d3c467e44aa820acd5720e7a1e11861ad64c4c543f54595118d8643aa289087a459f254ad1f9112cdfd688c5481a3850a239eea2f45ba2ed527e49efa2e9a23a14ff5491e7405c973e403d2549afa21559ffa11e5c8e249f59368fc47546834aee190aa0f4863648b962c8cb858ff51887a17aafa5cea8a231a12155a42e9d0703e8c4f7545e8a3f12fa821a01bfa843e142595342317e1f0a1e11831a279d170385538c92d45aaa6a844ee428546c3a9441e04c7118aa421954420af22f4d17076fca81fd2c8459ad275f195fa22961f544b65ff57ea8b5826d5a2b22344add8b791821b68f098a66912254fe51e4bad1c218d18bc2849c3a601461a436ea4d1230d96c64a038b6912519a2a34408526458385a60a0d68343834a04911511a1c1ad050a1d1a4e0a8342518411a06480426264d4a1554bc88a81129f41d1f91429f949494946947547d22d40db58c7ef4617442542825a5127d3cf7521d24f583841a7d9110b5e224b7a00ee9abaf48214d23d030639a481525a242dd1a53a1921f4214534754914ad45beaab0e08f441d231c20636a0591a2d2ea0217d752f65630e36c4b0810d68b4d84263436f23c864c303362280d207143e40609a50f680f2064368a6a91a190265ca91e9220f53a60b4b4c19223c4dd303a60e4c5658608a69d24c99210c98324338306586a060ca0ca9c2941942872933448d29d3851453a68b9429d3451753a68b2553a60b2d4cd35481695a42cbc6086b837f98ec16f272ecd145db5ad1d30c3908c60fd32bf4089983ccd43e8c12d387d9e4b2104219ef37e8fe3ccd1dfb212554c73a05e270487f84c3d9b4f4e86c54f80b0e87c3a116b611307c98eed6f755e15b8ebe67ed47a58a02d54e649df754afa252070945819a6d5a7a6cbad8a86c806c5a806ce41ea66d8bd148af8df79bafa887f9d2bdaeecd905ffdbdbd3bcb15ddab87c3c1527c9867669b35c114c1ee68dafad4bed5367d44120af2ec48331060f1d637b2cb664091b530b57d7bfb6615c92dd11cc1d66f51619f4ef46e57aebda61d2eaeef3f62dd9b51ded1913520661a5cc9ab3cb415b87f98d7abccf7a3bd9ed2b1da6cb755ffd281b5b72d53a87f9e27b6b6c1d64f61b5739cc55235dec63abcfdb371a87e96ddd31f466973bba281c667ce9deabd6557a5dbfbf617abbb4e162dc8e3294d20dd3e15a2c63a3ac9b4a966d98efb5a6ebbe259f5fd666c3fc27abdbd5e4b2aff6856b988c5d4a172f0be95bad3935cce79a64baaaab5dddb9a561caa7addf72ef6898ac3e6387ad52f817327686b9ea9357be5b256cf66b8649dfe50557a39552eb5d8619bd57e3eed7cd0eaee569f6903e4a5cb36cbc52a4e303438679d9f3eafaf0b6b7af3786e9d27aa4d71d4b0a5d7d4fb3a448a11f2d2ed488477d110b87d3ac8011c3b4eff15586d0d2b5a873cb6b8c189830ccb8ea85967ddfc6da63d1d37c24f4a946a5faa30eff113baf3f902f362a1b2e362a1b5229088733ba4f84c3f1b198bda542ee319b1c01038649e3b34757b38ffe5ffd2db5c2e1703830ae14e924c17c61daaf2ec2f8e87377fbc3f83033b717266c2d59a394560b6bbbb00bf3bb2e179d2dabcfd1cae1d4b71c0e67710c305c984bb6c7d199e3cbb6f216e6b5d69d5c1fe9571b1df5343786028c16266d0e617578dbf9fba56d05982cccc64dbefc6f8edc913d16e65d4fe173fa1e4a569d5e617685b2b587f0bdeb166d2bcc48dd5b0ebed78d1f64d2d32c312ec054615edae0e2d7d68574c1fa5818182a4c67cba5d797ccbe7fedd514a67dd1d57ef571e5ee7f294c47e5a20e998bfe9c351685d9de6b5d66e1477f6f354f33bf60a03061bf961cdb49fb2c25f434b714609e30a957e62d3a64cceb7be8695e6d09c609f33ed628736bb7a375e79e66a630664cf94eba48d9768b923561c2b6e0bbed9a5b65afa3a7f9b10ac384b9a2d786f6978cab97939e6612452d6152efe7d5cbf5b291460661943063e507e3eac6a47d4cba60923021f3462dcb27ad2f08e1913226f37ab061755c1765a6156424cc66bb71bcffdeffc50b7f54519e662498234c59e1edda9a36b7ee3bc92d73ec98db4a91ce08638469f9ba77d132b9de3f7a3dcda43fd2fe336a7154608ad022b3738c179471adc6de92b1d2c8ecc77e0b616b77020c1118940d57e42761c7eed75657d7ac36fd68bdd5c79ee6f75457f9cfa885c35151d96c5a7abc3c179eca7da86c381c0e47c78e201c0eb59d4d0b90cdd4f19f510b87c379af8d48a21325608630a374f09dbbce9c652edfd34cdd901c4264a363a3b2c9b1190264c3e1542091cbe77516af14e99430429870b98d0f46f6ec796bcfd30cdf522b7231b5bd52a49305260893ae5bff42fb0eca5efea04a6e5a7a6c5a463918d7d04be5523040984f46e735be84cf1cd288f9c17cf1b6c8f2fe63f7acd9d31c7a50a77e12c9afd389bc52a4c303e383f99761bb747cabf477a108303d986e3d63eee0732abda3e4c17cebbd7364778e6f747007732db8ae83acaee8b14986d1c16ce6f6fe3df7687cf6d7d31cfa749ee4dc039303e8dc63f245c9e26a1d79ad462fbb8dd2ea7ced5b950b0c0ee63f675b84d21973b73ebec16c0a9d9514bad8da93ed3ab852a453028c0d1a33276b6576ddf7bcd560c2bf8dbd689d941fa9b3181a4c8e2c59f36fcc646bfc1cc4cc6042e71cf3824e4a86ec9e9f636450dd5256dbb5fd186ccbd3ec60636230573f858ed2dbbac92565fc2c791fa35742016126c090316fbd375678ddbebbf5ee0587438d3e8c1015e2705c4a21b852a443313098f1c5d7fdeece6cf16dcf615e30eb57d8fddefdc7a06d5462c698ae9b7bcd4227295f789fa759c987dae859462416e61e91aa8671c1bc90b197efb5752e9b9f4b27f4a0e61711551fdb57dab46ce82b6d247b8c18d3c15edd8cb6731d99744fa505d3d2d8dcf762d724b56cb10fb060b218ef85cf59eb5cb3ebf55cc17cf71b6496c546ab47f84e870a26b57e61536637aed7a07b9a49a38eec9182e9ac9456c6cb587449f9851ed4616f4718939f6dd77ebdf5a8b577351f2fb352cadc2d6708af94f0b967c994ce3d18238d12d6c6208f485553329b4a66a5b40e56e728ad9ee60f6399642e677fedeb632cd91bf43443dbf1d191c78c1b04a5f9a2bf7b8cad5a63bdcf922ad2fcd86eb9ad6fad3b75d7aa692f65e990bafa4f2ebad8834425d29ba359a1c75b63bb678edb524f73a7753a90a160d6c66f39266373755db63ccdd6458d239a91c1babe4adb6eb116d9d3cc7850b3ef82abf5837431ece69ee68ab28edf8854c1d0fcb6aef4eb2063b96c752f5ca6578efda0632c3e6bb51718a0199f4319edbbf5a1db5e4826bbf7c5ebd276574ad6609c60be5edda4735d2543e6e0fb4cd66273f78f70b5f6403e3af22e623c7a928c1ebbfe55f6c7d165d3f63447c6a50ec9e5c61e47e095d05abe2d1bf4eb3ccd0e963a5f8d5ce4d8a5146a2b375ad81c6b92b67b2d5a4ff31b7d28f4c38b9f32566bfdc577b2455bfd41a252cbb2d3b2634f9ff6aaef3c4a4ff363618e2497dbb2a8b3f2650ca3fbcb9155e93ccdf63b8ee1937432b7c6e2d3f6451fb698c3fa9008578a748ef8a44c5e1ba5b75d55c22a1bc31f51951999ccd2655d73cecd49c92c877c2b453a21e8cc77f4a3a3723d66d4f9656ea548a78709e67765eed96f165a2a2b931d28c16c6dd95acf75316dccd8d35c91602ee7901fbbb2595d4f9da7d9b63782697bb9c88dc67735b6bfa7f9e128327b3d8dd7d98774415ed6863e4a42252ad4892c82f9ecea076d6c686574ee5708a68c6f256491b95cd11b82311b74ed6f735ccbb61a99c8e5d3e81753fea5b5e37bceadb77d5e4c77d8ddad5764e958736ea548e747cba4ee9efb6aefd7df15eb8b8344d587baa11ff513f2211c4eaf14e95c9649ed85d6ada4b2b2152f3c12fa20918bc87c0ddd3b07a38db755868d21eb62d6c8b72e6edce875ef79832b453a2418322564abde479d5cb43669391c10e8eb822b453a2210329f19a3b479bcd29bb77b9aeda7f3a217526f5a7a6c5e4239389c9790b7c0b652a4335726bdd046f95e3fc9de7acbd3fc482e770341d6f5f70d5b6d2d1f3f6b2b0990b99abdcdedeaaddde0fa25f6c7919013e170389c4a4475b8578a742c178b315eb1217bf1318bfd9a7dd53d77b5dec7d7a3a779f4a41f2a1c8efd8f88aa1c4e357a92c8ad737810d9b0c5239208d304104cf86eaceb198cf2aef5d6d3fc3544754020aff26b484888078c95884af931995db6f8b56e12f67dec3e9186474af4ed23b9dc26f2315bbd922585d6fd5bb4454f73067a48eaceb031bfafba779041c0e3d55f955ec6d7ed82ced3dc18c85c92f5a2b7ad16e583b732e662077331cadb6095ceb2685f321195f8563e6df272758f3ee669b6548b8eff475fb3c75e9316365b4bb1e45896f6736dd11b1b6bee8be503b3dbb511526b9f57e7ef3dcd2091cba7637fe49e2ab6071cbabebeae85ecedba8c79b1c58491ddb32dae4a25b4d15335432da0d346ef77bd95e1bb4eb9502311b3962c267bb45e66abb4d1e55acfd32ca246965707e6b3767f97b9db28e5fa3c4d911aa7ccc7a87b0d5b4beaabdd799a3f44816aa77e484eaa18b39c2f57ece5d88aaddf5dd2d3ec428daedbb4f4d8c41287533fc9a605c8c6851af1e07074703872a548278c38e3754ce17bcf51c858d4d1ae2d66cddeb9d7d693ed690e87c3696f4412a1003ae7e083527643f79c64ac2153eb1db9c5d66f97b5af8da87ba4447f0748e4f261cfa5146a2497bbe44d5ad95db707994b17d7bb97926e324a19bdadc276262d6b9ee64e6308b97e921f6d365b994b69b939282f734f73873124b9dc06990b45754076d4e90c8067f3e7ccbde52bbf7565a451fcc09a34320a2f7df2217bcdb5a7b9d3118b69b92d2861bf7bcf5b5b4f73e4e6ccf7aefc9697c2d70d7e7b9a9550a3231d66574c19ad8c8d59179f84acbaa77944aa70cc764e32e61663feba5dea6926b95ce9050726b4fe5ab3acf263acae7a9a3b36e41dca326b115831a995f0bd2537582babed69f6542511ccb151d9b46c5a806cea7fa1c48948eeb752a403a48a09bfdf7a5f21945636c63ccd23f7d4ce227d466070382497cbe1fc88aa9583b159acb421955c363c886c362d40369df5568a74c0a0c2b5d50c3af8a4836d390763e3b824018138d3b63bfaf4f6854d4afa9ee64d4b8fcd87f1a94a9b16209b4ee8d31151230bd988246a3fa2aa5b29d2f1628a25ee62810d4440039a0d0632e0200530b0845242aac005e0639a23a18fa7728fc602764475e0631df6481c44ada8804b0528c0238ae413600c48112fa944010970e73d9d4ead3e2e13880069e4a4292010810748c001563440020ca8c00222a0800c773a54dcc04002a440c0040ec002d77e73d95c988b5b75b1bd06e565122e4ff3e85f1ce4217d94440679ebe2640b93ad75f7d576afeb93f46a615a0aedbd8c51186db3b65998b6353b6f0ebed778bb6261b265aeecedd6ebf835ca2b4c08bd59d95aab553ed36b85d99a8d0fbacbb6356b6f5598f1adcaf236e3e8faf13da1425708bbbabd0fe9c3c1c914e6954cbaebaf1b365ddea430bba165712daeee5a33e96e70128569bb6d8bac17636f4587c25cd479656ba95dfe905d64cc6470f284c992ddb7289f6d634c5a27cca7f4b92a57e42aa5fb6ac67455d26e2c1b6d10368c4d988fbfae789d834ec6282913e6d72abf46d9e48a10ba4d4b0f524914fac159c26cefb6bab17e2fe93fa984597b35cae085b19330dbbe64b4b2ed1bdb6a7652c66477efb53bae6fccb507817c9d2061aeeb1cbed8a275d0e5ad9e66c70870c6c911a65dcc2164eeaeeacc6e491269b5389c18614a7b1bd2c5cf9cc7b6aea77941e1a40833c6b89a4976adadaec1f734438e563821c2f4da72c1762dd20ba9b49ee64a72224e86305d3fea975d4a69abd55e4f33ccc48910267d67b7df3e75d9b8e37305d0c44910a6b3f8ced16a2bb44ede0abfa09df6891320ccd8cc5d6f2fa96bb55985f311796744dd0ea8bee5404600229cfc60f6f3f88b32461df566d4079335caf1dae6d895ec9f739cc1490f667b50f2ab4f235cb0c24f329d04c2090fa6fbc6d8d95b77c9f259d82f38d94137bb6d357bd6b28e3e1de60ec1890e66f5f7e0a28ea9c7c718b31ff282c3794638c9c1748d36da58830f7d39474f737c107516578a744827389891b675afc3aede247dda21fd9166d2f758273798adc66a99beafaef5add2069375b38b31c6dc56af8f35986b2d661d858e9de1b5349874317a6dbbdbeca2a46f069329b56c25f44bd9bbd0c960de6ff4461b6da3973ed96230a9db175f5c715d76b85c3ce4362d3d4ec890d47bf5bad07a658ec9d5861318cce69e52c8686c56b6c86f49e2e4052fda665b3f08a9c3d6cc7032c674da916fe3f7aabceed0d3bc184a324e5c306fcbfaf61984f65d3bf8a3f33d5e4ec498eddaff651933af8b3e1cc5bc5052b7988cb452cb8c7a9a1f7ffd1aa2421c920a87c3e1a86c36435ebed8b400d970385e70381c0e87c38cf14a91ce002e61228a49615dd4fd7a77d16a957ca8595e9408590d0b26a198b6c256f9e5bf6fd03b21af8b399c1620aec29860028ae96b456716f292ccfb2ee705450afd1862f289c96e49bb9e5e5f4f825c6509a583c3b1bf84a2af5d4c3cf1d5edbbb818a390def734af67d289285bbd945d56ef05a1a799c3e1703ad63a87f3f1514b4b66c208134ebcbcf17163f6ba50a3cbe180402d401c4484c9265884ce2e7eaf36f87c8de88eb5cb2acbea5a8df6ee9c5b944ceb838c64a2098e4baefbbf9a45e8aef534934a2e91540a12e2f1889864821932d6de73b0c5766b41c9f832d8ebfa8b7159ea2a262643762d2f8d8d5117997f607289e91847ca94bd48175b5f2d311d5648993ebe779a5462d65623d7daee3b2efa1625e692cd59748ebe3c4a689be481c924e6adef9a3e8f919932fa1c4e87a10c4c243199bf6366d9f7e3c5ee3dcd2e2e3f5834d9834924a68def32d7bcb15c0c5a48ccb7aebbf51b56d72e8bfd88f9da62d252472d7f2fd93ccdff23528779d3d2e3452f2d8efb60e28849f936f6b1b6dba27ded3ccd499044380893464cba9633bbe447b698adf5342741d2b9fea08e632e1e3339c38411f36594ee6ff963b5d9fe454c56df32a357bafb7bcf2a6246f7f4dac5be2ee9e28d694c262353479b3a3749632762763bd9b219741011f37de41a29ecdb2853c7d098f641f65fd157578ecc87989545c95dabed17b9fe0279682404ae616288d9eab3cc4eba785df21fb1ff2893424c6a3df2b2d059f7cf753a7f64f42ecc909810625e76f435e476ed94c5e56986d76410f355596d75cc59699b85cdd30cf227551d24a012252d795288523912fa48f6268298ee7957768cc10723c71b88f9b272ff65f41f2066c3f6ce4c32e6dc37977f980eba65ed6bd75ad7b7a11fa6b3bb188d9625ff77edc3ac4ce3bbeba9ac7e9d2e3ecccaacbcef9a1f8d2fe3a528fa568a748a98ec61ca2b258cb1d21859dfc8582be961be7be1fd9777313b7d340f939d47ead6d91599c9cb428087292d950f2f658d5257d77b9aa1074cee30bb3519a595d7dd65e76b87d95ee4e5d8fe6d77f1ab674caeb7e56dd8ecca97d0eb30d99594ca7e11368ffc920a75e8303bd2965232d95a5baf770ed3eb43ff27255b375ebf7298f0d5bedff75bbbeff1e330b9618db0dd66cbd9d7160ed3b9269da5ffd1d287ccbe61aed6d2576d8d51e855ba1ba665f0da6e261bc715dbdb306bad90dada987657f99c0d93fa5b0bca7e6eced9e66b9892a5c3c7cecfadd8cdd53021abf2cad7223b07a1956998d2566f87d43dac90ad44c3b4ef6c47cb6fad8d32ca334c091f5cb2a58dd4c505a519a6ac6fb931076f6beb992cc3bcb0a1abcd3519c930219551f6ebf5e0bbd2e31866836c2bfb33e8cc208c629836beb81e6dd5550bfd3b0cf3b9bbd6fa436fee923618a63b26ab6bf5b2a58f797f6156db71f9b3b2c6cbecb51726a4912d7b2d79c56b5b77615e76ab7d2dbe73830b422eccf8ffddd0f6fd5697835b98952faceedb532dcce75c993fb4972d1bfb65615aeb9e8bff96f95b7c5898b6d655e1738daf7a63ee0a935d76d7ea8af14af6ae15e6a3f0b5161f5f5859cb2a4cea915d85cef9b5b0462a4c1959add7df49db10f614e6bfcb1636075fd6fa1a93c26cfcf4c5e6288d77d58ec2841da55db2bd1a59dac750982dfb2d06dd2efa16fb27ccfeefe7cdcb7ddd569d301f752629477bff3f4a33e64b675f74e91c85ecba264cfaba5e66cdacf55779993061de1521bf6509ddbdf7f3f4cb88149aa49057ff223291bbb48ec912668d94de5721acb7d1e66ca284e93a5af9ac6df136b8dc2561ae05996d95b14beadabbcea48cc9efd6cba43f2b9d93af6e5a806c227fc10409939765ef9032b86094f7f60a83c911a67bb14677edb56c5d37c8e13077b8cb606284c9ed9abdd2c7a86cd7761ac31e264598d455f924956e51d768bfc565981061b2f7cfb963e4ef28a33419c27cf6d2e5a45d8b59fbecac3211c2bcd557bcec1bbb4ec2c62b1c8e4bc2e13077d8256195bc824910a6adac72f76567ce394592a1d912031320ccd8965b7071c31fccd8923964f46fbb66a5f5c1bcaf46b6168bd07b30dbbfee58bd59dbded7e6c194ceac95917aa32e5bac3b98cebea3ed4bd22b65a54d07add773ab575b8d636bc6d22de7b72275fe9ebcb76b0e663f664ebef6f7d6723bea7238b1c38dad14e9608460828369df7ddd1752ca9a756c9ee624fd45b3057d4a7487c90da6e4e6eabbcdcb72ad94da605e67ad5cb1426bdfd306ad605283f91adef5627ba7b735bf3498b74266e7abafe46f68673025f36afdfdba4996cf4406d32b6d671784ffd14219372d40361c0e5cdc61c7a6601283b9eec7caee28d70b9b371926644c673032db775fef68bb3098343adaac511b5d5bf49d084c5e3057437619f5d5a2af4899c91893b1c6ae5ba3f231d97101317141c3c592637c91d7921c598454c2caabb1275f8495ba8918b3b2e86e6cec8fb98bf68e6272f7ab2cbed7bc41475d1413f2471b5bf63fb6966da1a8add955d75ba61132c73ccd3c886c9a818101c5b4524209ddfd18e1631bdd0fcc27e6a3ccec6a2623abbceef30447e91a63ebddcbe42f0afb39d8e0bf4eccbba0a30b46f9e46b87cc8949b9456ef1c9fa942d4837c11fcc1acc5163ca45252fe86efdfae4629e660ba26ee765448a3c362a9b1f6c310d309a98cfcb2185b1315deda5a5428ddf522b2e623231a55c3056eb7edd466614e9f1e21c184c4cebec41b61a5c4c1ba4d1d3ec2e31fb3a6ceced32be30727b1a326da50d87b31a3b016389d9b13666f6b98eedb926a2463b381c1135b239362a52566256b6f6effd05698c2f521f3e389cc80d03090c25665bcc576dce3ab5cc79a70339f4f1917d2f3e1af9c34c82bd06e15b0f4a8eadf9b1e5dea3fddead8ed956a1a7193ee683c3d9b400e196c48cd15dacce6c5f7785d2d3dcaf2d063912d3d9eb94e3aa4ddf6ddd3ccd710c18484c495b37da6febafa6eb7a01f388d92ce36fde1cb59575631f9eca7d782af7a86c54363e362a1b16b7058c2366bb16ada3b53af9e0bb251f729b961e1b0e674491bc05c8a67a792e381c91bbc465034c23e6b37cefca964b5e771de54a910e0b308c986cdde891c2e8acd91799850b8159c4bcb62595f6b6f6984aa71c0e87c3b8c384c02862bef8ac65636dedbacfae10f5e14606268dc94bc6fb2a5c6cb10b61f534773ad491c8c6c02462f22f261f8c8e2374f7295015c2206242c9fe578431dab7ba769c3534e65df54548fd3519d782ed69c95e8039c46cb44a8fb15e79657b8e2ee6c11862d687cf7e9d6b11aeeb5e88492d64b72e79a57ceecad6b1fea3c58b1162c225e572eff592363a78ed0f0e87c319c494d73a8dcd7573475b938298ecef51c28f1436db2a98404c776b5b944687d1692f8f8098b05bc7db642b453a9818d858c264587d7d57a7cdf2a90bc118d850c284cf6dcb96ad554f12265db0bd8b0e9b32e81c3a18d82863c2489d857c976bae7efc0a09d3b1585fbb97d6772575a4ea037ad2c7a3a443fa234798cb1d7f6dfcb0b27b1bda30c2ec87f1a1adde205d6d6111a66b8c4a4a9fd15f163ae61e22cc4adf7b776bf2d105596563d818c26c6fb1d5ce5d68afc725860d21cce86c73efe5955e9d84cbd908c2a4cb3ae7d87a64f421b59dca175739e20a6c00614a67ddadf7ff22a58dd11f4c67bdba76ef71ac964525367c30bdd12b61fbd6544adbac07b39ff4cb5ce518d9657436783099e575ee46caf6237cd6b283f9b15ac8d873285dfd6697d8d001b7d6357ea40eb9daa6031b39985e9f39c91dab5c3736670307ce2ef99a3a8eecad641d3b3035b07183592d7bafd6b6f771bc71ad14e9886cd860c697b2de663f7e0de6fb62586930e1937fe9377cc9e87a368369adf3566574dbf82eb798411b329836feab9071c70bbf99c76032f6505edb2cdb39d67112e8ed5b36c898d0aee89ed57fb057ede732a2eee845d71fc86b241b3098b475d776a3b377b9d965e30573b10adf7afd2095d11b76469463466d8c21e35a1d9fadcdb149e969fbd5452c2fcf45b31b840d17c8f75a94cbc105a1938c312abd9f956ff16ace19126c8831e5728eda68ff5aefa7cd9230398af99edfc8b1bae48ecf177b5044312374f74e3206bbdd5565282693dccf77b5df1a9903c55c122eeacdfcd1c8ccdd4f4c4b2bdf4561950fc666f7c464afd2259b17575edc4519289d609c98eca58d314ac8ea5bdcb8196513d3c92b2575b66c638f1dd2c7e5037a0c3269c9b722286bcce7166debda067bf1954150d4982edae72dba7decf13717289a98eb490ad919f5f6975ada32319dafb34d726bf2c17a9ba7b93a48d45e808289f9dec248d98d5deb4be6c613e512f3fa72fdbabefbdad25208390e289698abb56b4e5eba16a3b1c14accc7e0751dbdd25bff61a3c4ec77f599bc72bde6a0af2e5026316f940e9d578df0358c2e8180228959bdb9678d29dbf60657eca04462321b29f7575f0ed9b9e769ee50b6416236ab91b167ed46eab743597e8e1f3159b35fe14b7899c6f7ac23a6ac8f1bed455db4b4a96dc47c37c26f0ca575b8bc3d46cc57ab47f86cb3d6b9bc741193c9759bc5db1cb366ae288a98cec6dbd683b6e5732a174a1a933d7a6d7532b6dbad399888c9ee73d99735eb94c6ee705b8898912ba414befacbfd3eeebcd0ce62238ac432bf23aa7c4c0e87b4e4878082c6fcc897c656ff9ba4ed2971fca29796d18b443e02836180728849b9c6c7baf5938698dfed8cb674b16dbd36bea01462f2adaf3d5be365d7ad4688d9d1dac562ff65e7fc7b09ca20e68bf645fade49f6b1fe0b62b6c76c41fb1e635436b3a7d9e55b094a20668cdca4937fafa3ad555aa100625eb6fc6385cddeb76621ca1fe66d0fef751e9f834b3288e287f9f4d1d7d0d5effaaaab287d98cd3afa22b3ed777edf7a9a5dfc3b25143ecc55d95ad8b497bbf6d4908f6887f1a6a50789a2462efe2312cb1e668c1fedc7eadedf1d3b143dcce7eed539d8f2adaff6795ac608474ffa38943c4caff03d8c8f52479974cdd3ac51f0c01c0ae50eed4ac8d82563fe12daf734f320b2611e91447698f02e6f7e1536af97573c63b6eb7c51fba47366d7500ab1014a1de63fe8f7da159fba7e4f72381c4e259b062874986f97b3efbab3ac5effce613ea7f0f5b5ce297b5b921d4191c3942ec6d7d872d4d9852db238ccc6cb55269933679bb50fad800287f9d8b9e6db17d2fb7e3531a0bc6142585dac94b26b4ba57c6e988dd9abf49994fc5e9db66132bfb4edcb186983313e364cfbe253eb20ab94b2bcbf8679efa3957d5f6ff659c66a981d295f08995deb1c6c9686c91a640ebddd46eba3cec929a0a061467ebf90b27b1faf67d6f13b98b3807286f928f3baf43af7d772a56698adedbbbfa2edf81d252cc38cf151b958b375fdf37f6498d45659fd998dcbc1281dca18e6bab26d5ccfcdb6de97629892717c97f5b2174616e122b251d9ac2e362a9b3564a3b25942362a9bb5b251d9ac201b95cd02b21902640351c230e3659063b7c81546d7ce7b4001c3e4ae6d55daf251ebafbe1c1d08942fccfff8953df7cbb8ca053dcd2ff7632917a8c28b6533c60b285e60ce42e9c274de8f51fa683f9755361ff19007c1030a17e685f64a28df6adffe2c7b9a179302ca1626950deb830e636d7665f5346b613a5abf61636fbbdd7b47c902c755e36dacd98657bea71909457940f6c3581b50b00097938ffb45c89ae3171994285798ffea5dee1a6b90597e66a058613a755e51ba6ece51e704942acc77edda3d8730367be5f534b79010150fe903460502e5d8a86c362a1b958dca66d3026433dde287428509bba3ec2be57b8e5aba7c48c7059429ac7e081db3edc6e869aecc5415a254383cb890c27c6e8cca0a97934c65fb28ccdadea30cd76df4ca261d0ab3b207dfabd732d7ce7d2df6059427ccf79e4a485b8cce0973dd77db2f5a9b5d93fdcc986fdddbe2f37ba1a4dcdc84e9eed376a9dbd63d060a13e6b3565b3bcb7ebd9df56f5a8030eebc37a02c615a5a296d75c9fb60fdf4c254014509b32f43f70e5a46ad940c791081cf052509332ef71a4a47a3db7a232b024a19cf74d965dbe5adce9e080509b352b61a52c65a94cd5e877284e9ff5ebf486f7b3152bf4698703509d9637d1d7d686d1126740be9b2beeeb7a4b5126176536f571bbcf7fd7b3a84191774aedd17257bab853099e3bb986db1da96ac7910a6f3a6ee5db6e2af0b2304c2a40f9959b76f19e5f3f783d98fde8f523287f4d1eb83596b738c4f3e8f909fbb1e4c76e6d6bb6fdf3f28bff16052db2e74f9dc6d7635c93b98503e37bcecb183d4f2722f23526872389440d1c17cd6b152864cf6b3f5c91ccc96acb6bfde125a471f0507b3ddbbbb187de75845fa1e1d1189516e3057bfa6cc3c3e7defc64b04141b4c78e13f565dba6a3dd2f804941acc0a2b8cecf13bba207d4f83e9f6bef5f75fb4f2dd628b9b80328369ab74cd592b193719a5e47064a3c860ca67b4c9e6b0c2080294184cdbcf2dfee8a075905d0e519d112c010a19935b7db2e56bd6adbb375630984faf85d256c6efae850ee5059349c8d892b429ecc6307a9a1d1b01ca1853fe6dff2a6cdc92bd1a3b09282e984b46a62d177cca1732f43443161431a6dbee15a95f0763a46e14135ae768b7ea5a648b6d941d229c88627adb4a5d325e0cba844b7630433809c5a48d3a66f432b3ed8f8162c67661b37bb951dad15d4ff3e2c7414e3e315d75def1babb1f6b6b90fd7442543fc8fe0809e1702a2414e5e1399c7882bde75e5cbffc42f7eaedc484cfecbbb7b8a3f5773fe144336395d547ebfb26a67db860f46ef9ddd8754ed69832c2663b421adbe3a7c6f4e6dfee2c6b1a9f77d4c464dcac6d6d5d94f269cbc4b4abd68efdbd9a739121266637ebae75c8cfd9597e9798af9b933132cbac64ad710f4e2c712bfde71aef6375797c95780fdb737ece46d64d09c9b6b165f4b1636b27316b65cb5ef98ca30e4e24e11ce54b9b6dfd667e3712b3698df09939fbbc6b945dc609241c7b11527e7139a7cdfe11b3c2eabcd1fb2efe7af51dd1cf36a5d1c155d9e2464cd756a36dffb5e5dec5cecb88b4788907d9a86c5e4822971912b251d9d8d0878b97d197bad8a86c362a9b97e762a3b219bda7721f1b95cda605c886a3c85dda3b61c4a48e5bb6e5968b8bb67a1731adad1eefbb5caf22e6f34b393e7865fdbe7dd398fd8b798bad35e9aa6b3711b3391adf65d4356be8da2362c6e59ae46ae13f49237b34669490db73cd61c367d01e627aac17ae4557e5db9ab38698f1b58fccf43aa6b47e2dc4bcd73ec9ad23ad8498f6f6bbe5ebdec59ee43a886979357fedb5c8ee965241cc0b1d52d87e5d77ee4e0331ad74367aa58e0262b6e8986c4863b3acabfb1f6685fdd6a2ec4f5fb3bb1fa6ff95cff175bf2efde67d98cdb5b5eaecfa47eb5fc9870917b44e295bf6c5cbacdcc3bcce35d8dce5eb9e5d1bf5309bb9585f7b755a5d76ccc38cdcac4679b9c258218c7898f5bea597327aaf6df5fb0ef32d75d25678d9e57b6ddb617aad12decaee765b7ecf987dd7bbe78b3e5367611da6b3f04967514268e33f4887f96afc76abbc1ca9930ece613e18b9cab73552cb96a11c667b8cedd7627d21a3efe230a573de5a65f623a3963a38cc2aa32f67afc7e61152f78619bba5ad95d2555f3275c3bcbda4bfb6f4d2fe2bdbf0d830293f93f23d5899adfe628f9335ccd5a05db455a61242e7d430ef377fb7f12fd91c594bc3741feff3df6f8c9faf86865f5e23bbf6606467984eb294ed9fb1fb983333c36cb5ca7617bbda7f177b4f7338ec25e1a40c8b042764800fd9fbdaf039bf1fc364f1beb7cec1870cfb8a614a8f0fd97a6fc99ed3304cb764bcab2d18e5bb3718668b12327e8d59e8cd1f7f61b60b656df4997387f07aa175bbc71e5b51b628d97a0cb22adf99b2a7f9e5917444eec26cb1c85dda8822b95c72d28579a56d868e03963ba8b46f0a968196c4208661100461383a561400d312003030241c8e0583e1c060bad741001480035a76688e4430910883b1481c885110043110043108c2200cc3186310a252aa2c01903818806871e0f6174a1616e2dc770fb2b46b108be0fe8ad569b444f565f6091572642a294281e8a5d12cc30c796c6e722650099a0d5a162d4bf013095f6765c2e1f607659505dbfa92d16bfa0eb9b71e5d148f4860d34f267afa7f61ce8e526cc548e4a80b02a5d9e3d1b0f5e63269c12c3bd0e23d777c41f017aee53b0334ba2a7f463f9dfaa872d764d4620bf14417403942f7cb0e8fad10173816c398d1b210bbcdecab2c0f96952177a9a88e46b5c8b5aecbf17d5a90dcc5da29d30f3344cec1418f31893a7a348f8ecbb291850bcf232872f6252632f3c5fa18c4787584e629e854e60a80731af03d7d434a211203b44259c9c18e8a5df54c0935996864c18a8380032324f3dc48e468d318fe710d130f5b545287b91aad9516d05bb14622590dfd160e8d683d34eafe6171087d6a98f324bfec94e0b36d4f3cbcfa472998ad298358470617d07096f41c9cbb8f7312ff8b64e391c8d0241f34dbc516c48ad9c1847666e602cfd3adc0057e69bda9fb4825f021c6349b21c0e618ff2a5342fcd050b7ab46c9377120df02802288cc8e60c0d63316813c571d31be201302a6eac39798dee03403828bb9d1f58c0313ee7c35d5807fcff39a0f284234e0e82112fcb5d2d2e6c26c496e69fdda0ecdd18dc2cbed1b12c625451e98463d62ceb555f8a099b142222f211d26f2107847e2e22691086f12253057fc52543990c62d464075ccb9f46cc68f6572eeeb07e04b7d23db9ecebfdb2e4075cf2c96213581814c8a4a3961f9a85a85691d5288fb78852fcb13a7863e2b1a2331fbd3435a2f8bf080c6c31d074e2292fed890c58669d21a8908f70d7e42549d60e8b2a949f1a47acf9c4fecaacd0d2d9b61755cc692966d3dd755c697b3263d923bf5e657c3ff54e063b31640c45fd0e2a1007c863234d8160df2808cb92beca661dc27c477abb0cbc15857bb28c496f67f14595a38e8a99a87bbd51d7c3ce0621a7f764a4e28dcc3baea514fb1d24d63352b868d3d028a7974184160180f68713d66455e17fe7485d7bd99b57b19a9d70596fe5a875653a3a151f2dcdfb59a833090ab97f0d32964fd4d5eacd6bcde546cd5ed49815f95e2c6a0e97cef4b918009660251ecc891dd696ab4d714212f23639b7cbb6c7ae63773331be6f48144e505f9ce9e9cbc5b6721cc2ec8a7db05d8d233dc22f0efc572a2cf4d313f015e9eeeb73f704364fb8e854c5a5062536f0736e1637a1f4dc57775c81db191f36a7ca2d4079a7bba1fa73b4fe94534778736b2547f2ed5775bd4ae37952fda713a8b7120aa7fcc05a0ae71791b37001cecb2d904126218573080a2d7c7670bad75ea9dd748d394ce80b78b19b826417fd580893294ace030d8454bd4838d185a5824226c6c000513ac40d34b63c380b0ef1331d6ad1cb9b1d434c78b9b31a9826c5b8956b12ad299c113abb2a263f444b613f34325eba78a1377dda413429538dee55e019a29e199c0cde1504e8b6badb356e3ecc652f9ae64e58a90e52865c58f01f7a4bb5ee4cb0cfd6138a91c930a9c9edd8086546f10120fdf942fd2cfa621fbeb2d3bf36aca0b26dec3e75662fe6183e8125a1a8ce8473ea02d995d044e1c67489d0819b710684b3c71e631987b95a41e0e9eb926c562546cb5f3f028462e2c0c9ab41f153f4a98c27b452d6a87f88607d9c7a314a64c16cc63598d7cfd3fd2a54fb0669000e036251833e5e87c4269bec805828af33d11b520b4be73b409a880510c12fe252024fc8da5e7e5d338aebbc1e3cd200ce78745080b306336711b4f6dd2169c840e9b2a5fa7d93dcc60d577f3b0be018155e99fc7941230b367664571ba033c1869e32e5f97235da7b11c8b272088b02ac9f33b222eef51a6e99460a98d66e056c2a38e9978ce76657062cd2d9c91a327f6fc9aeae35f7d3a99c094aafe5da39ff617800d108ce537e141a4ec9272550f3a80191c75886637be4f7df0394b6798806c20e675bda3b8fbcac31b669302f0ed385960c3f7b81b065b6633fc9638249b1537fdf298c4fa8698f0fa86cbcbdd68e35d6ba44cf0935787e712f2aced1b7dd04773e8b1a47afad48a7adee97f62391de15a87014102d428a552536938a379cf768cdf49b06b3a0ddaeefedfe8aeb18aaf0d63cd3995626c102064e1235db7f2f54dd9f104154b7caad529b822b9a6bc2116f58ec693526af6c997022352d46aa5447aacd4bbb53c202666ff5a359ada36957b3b96a6ab3fb216caec544bdd228e88fbe1c604a7a7ec10c05ea6d92082243ff17334df64b869beebdc7d78c0f86ecb136eb1f440caba48f4ddc44b6172ebee1d25df53369b923573657b88d700409ce8028fa017710c1c94279135a1db03fa9669b88a45bf2d1fef78b9b4c5ed733e2f0c3788f72fbb8b39d4330466748f04cb5f4326769ddc7a9b1c6f9b9638f10f0976140bebdaea22b24132a93d2364264386a7205d7aaeeb5eebd69b75dd03df7a56d7bdd2adc7eeba07bcf5acae7ba59b3dd6ad938e44299fef791e921a5ab74f53c1fe4b3c02349049ce1b8ab130c7c15082678e1887e0bb0967a6d6ec639b2c54d9c0bd5058122604d8d927d6642615ef5ec887a4f41caee32a2614b1f14922b3224456796680fc89fe74035b2392663262b48b17f93e4eff6b14b58a687d19d687517ed493e0acb0b891817e7812956e44291246de031c7cc87c48eb327f50cdb859ebe363250381be1c4168248bb73dfec9bf7aa81c8bda19c7e6c2f2c5684497889b2cda5c78d53b0bf8e4a070ca14c7ff93463310dfd64b060acf55a5066847fb9fda0a043d6c67c107acf907c70e7067dde74e7cc597f588559884f8f83a217d6021e08e556fc57daa9de863ae46aa6e96a302ff3b58c11f78be94ea4c2be79adbb74882bb926d6e3fe3f1b481cf86c2fae673f0fdb35eea34d0f65a9ff5e59e48723f9aa19239a15086feb63025272f5dc5c59ab0f8c76405b1a67b69bc7c6808a1646cb73f12199ea7c7fb3e738f8646d00e740164ae8c42ef2d9ed2fe664e416a42d40cb7c62859d0ed0330a34c7ef3b8b8440d5b0df82517905e0b64dae5288d41d5a1e843acf4fcb2e7d31506685f4aca552ea6597047484999243451c791abdc124455dbd81e6bf4a775ecb824baa47780860cf52b655c8a59b07b0754a03528f7c456fab4dd141067535230e9db7d7678a3761e9aeaa0c9b15d3476161f059d683f5be095bf2f9b5b665f5eb72cbe8cddc8e6a72cce94dce2dcb5f935bba9975f2f7bb778befbac7bd976d9f1b2eab2c8cbbacbb6971d97552f8b785932b4096003bcacb92c7bd97561c5ffb1b82f4b06d404a6b1b17fd74fe3789f2bf90deac1d02373a3f4ca03045260408f7031ff5505d85bcc123772ee50a11d57ef360b60ba0e60044d47683eef8bc4a44e6f5ecdc22d5d23559794dd23c6533c4b054f96d574ea82dd22d8b481460d6b0e90c6fc4b591548b1eb52e1041608da33e30dc7f2a331171d71e53b7a7467c2c5d0839235b3526b5b584e14688322db786d04d107e17b81c051bf8d0aacd101c7112e8eca86839fa9bb9bd89dfe0d1f9bb13ba6d8f313aee0caa15094a5793083fdc6860d51a538b34fb8fc88cd25a7f75a33b5ecf79d00157efb5c87728ba2d67dc38089caf8a9c441f8980be6b171c8ac5a2ce0af0a3d8e7b931418b0e60948132a6dba6593c1f76ae96e1a113ce01ea0656d58f7c04663551b7327451dcd9d951ab93f6b4ba19024d4b062c8d4dbe6445813e590aa16042bfab226c0e039c0e8a9fbad78fe0cf3742799c23bd37c7e11a73f7fc00d7c17a6b1131c9bbc1c45b169034f69708ca00cd4923a237cd174e910ce44b28b4883684a3fc43a687e93205c62ec46b887c678c67738912e700ec18a76c466bc342b24e1aba680860dfd7a680a89aae08d88789b7ee1ef3f89f67ee0b6df6c13d5b077cb309645370f290b154f18f2d17700cd3d49ded1d6fca8c4da19620a0f0093c42fa244fd6dcc3b8684ccaa481ab90cca1982fd6e97b4177e7cfd47b2fe3675816a876d685c5baf1af5d82225f057eb457a20c38f32315d4f751a1541f2cdb1f63d16de62dc5c4b2c0748eddd8c7c0a010ae150a0c7bae60ba5a8a757e87aa6911e3e7d55cdeeb4ee00f5b749423cf01bd8371bd0c765286b7f5c19d77ea51af854dc5e0ef36bc685c82a6f6a663326c8ad1ed0509cab21b2b52178748cb75cc441da4bccc2ebbe93433c9c0586c3aae8822837b698336ea49d3d19a2364176876d3974ca97677c8037a5f24b22b38406fbfbbb98988c8dc38a76b67cc1eaf1268409390e168c8cc967288bf326eb5e4c2b37c5bd7542f3b22143a07eb8e88f247f04fd09643e5c04f8a4909a909a084435d4ddb63e6fcc64a8b1110f0fd197a7fca76175ed0a3971457ec62ea9a2d1fcb244ab5b278b4395aa18af9403326a61794c796045bedde8b7a6a25dac92d90cbc65e781817fba9c2e9b102265bb2cd035a25549fe3166b47b71a7f0832508996da6bfa6485919da9283c7ebf34478a091a5c943e0d09e2663375b38ba0840539c62bf1f5e771d5be9b8d873f169b5bca915f14e7ab2391114310b2cf66d7da100354e0ae8ecd9b100a8627071d0f7402131f2598413f03c721a3df5566021ca3e673c184f3d626879bb0a2464ef0b67378a6fce1b94228d6d40e233c24a64d67aaeeae7418c98ee1f02abecb88cd36e1754959395278be49c80324d02d57457c4cc47ce32709a91d49a4a329a96b80eeffadaf00fa7d0e1373947e32cd217654486aa26ce4dbe85dc4a44c25dbe293bea456f8ab7a242cf6558110248c8ca4db9e2b84241b5c0dbba1dd6937a41868dcd063c1bb67107a55c40d39b4c1b81374876d4495bd74b6d1348e39336ee2e4ec7e3e90da5c56ff5d750081b4e533ce7981437f83d2f4f1847b522da5b90858b042bf147ae9634e2c024c881980e410d12f23bd0fc32b13938938f74c003faea9418d87bb7dbe9848da9642c666300b6403a86f4e8c587ee7c45065a774e8f027700610021b9b4690ef44f17934d26860d32d02f0ff1ad18851147bbeec0fe115eac4fd85f6217501786c89b9256f824676021c8106a2618e0100cebf4214d37fa79690f4059edf1974b4158136cc1da19e814a6621b22667a0b28e6e9cd486617ec4ae9ab0ea257f67d2404008ee3b7aaa67073a8dffda7674a54302bf41088521260b066d509c5263e4a56e413422884c6a6f67a384d893abe32f5bcaa9b14a01227536e4d40151278d95f0199d5252dac404973600098e8ea18606d4830251766f32af3a576943ac29b4a92492408e5297e0cab265ea56a957eaf7463a70fabd5da5cb90d9e24cca52fadfa12068a4c84f4774f36f99677ad9552ddd45745d7ff4ae4665e8e0b2b04bb6d94d06637ca57e91d5942d215e4c41e2d23cb4ddb2cbf2697f03ae546c173482f83c8c1899fa92930f818f4eb46b5d808af4c8a2e1c5520e83dbd49e4a72c40e0624413c8cad353993dacfc3d93723c691c85c853b97a517e7a50eeaf6e713a4c8058a8867fe6fb96310876c765865e10f005378934b97492a6c64575a420da136c00ba68f5ec28e24bad36e798ffd862a09822700aa9b050b72c2fb3da281321f4caaef03bcf32bb1d6ddda28ccdb9a05e2bd8e916e9cabc3048bf4308b6b090ff6c81ffcb85faff6018f97fb3a001f8ef1e10a0d48c36189c4c52b2e2e735819023490a6b149c1126067499013552c54b29854aef83d0d5d8bed256b6bddb46b7d22db7103447261e4993e49db2f13f4f56a9906c83147877b1ce5184b0daa254628b87bac2228c6a82a5025a38d6358a0c564d23bb05a5d7d2856984a5162d12eb1e8a14566394126c11509ca984c3b73385522d0239470a4224b5d34291cb22b4b856227ca28592022505b974a10569976aaa4ca9e8c6839491f7694cea192ac983198388f69f0aa18f7ea4396594397b1d3f23bae0d6fbf23a55a513484c6e8920eef67adc8c52491ce83be00f23bf7ae7791adaf230cf1f46596f9130409c7bdc001b5a4778aa74da02263d4b963a6fe9a8894d48a6d4b3e45b24e0c55ca43baa89706e19234f93de815430cf272738992d0510b150b8c0d5b24ccbc4c7c16ee54f4877b35c4554288262a412f12441208b865e78414f0ce1f77b1233d50f377c309b756c2dbc647e63c5148e8e8a78ad8e556ae20a155c0fc44cf876eb381b9c1ef12d3cf30fc5a027d1f5900034dd80c35f0294e00870d56f36bdee5030a1b4ddadc69ae3e1581ee50e88b795f305ad9571b4b5ece8478d877cf66c25122878d61e1c5ad0556e846d2cb727e8f81d183ddf4b70b44a4bd27f5c9087ec473e8fd371b1a034a648e8bc1981d1ff00a17e79704e8e2641079c35fcef26bbafb8f862b0b4853c2bbb1cc34f62c5489456c860913144dc0c515eb286cb616daaafcff9f25b29424f36e33f07083a2157bc87b56dd0c60eba63133d81685bba56a17817d6c84f37dca65d7606ca7951c00fd1296bfc7c682e0d206c6f58cdca4d42ed1600f7d63b1864934f37750f70f47e0000f67d14d4288134e6b0546d3fb211a6da6430ba2ae8818306363eb7d640e2f098d4394e447f51355232ccabeaec0a73967666e82edec05396e1eb43844ac6425dcaeee89f7538d84167ae3539c8179f30117694b6c621b04ea1d1372662777479eacc2322a40e0357c2b003e2dfa96974a02050cdbb421fa8211e0c554784f580454bf63560ab8c47ca6ce3686aa8f86f6d30ea183b8c1fac63551df218a783410373c029cfd61ddc25a0d4027c30eef500cc06e17c3d367032cfbd5039c40413c7c76d923e1e6d68f536e05cead29273008ad4b602ea333409274c2ecb40c346642d548c1f67825f740e7149efe22daecf15014cf55759b578ac01ab2b8b37f4c93ec2418a4e694ab7f66df48c5f572089b14076f5bbae570f5b7d31e6cc45746400db6b1522fe63663d9782dc69a7125a073f4527eb2960473378513b444febda13d2eb84e433a108fdfa66f71b0f35c8259ced7a0267d835a1c8a7029aa7ed82cda0a5e00ac2be594ce0a2d7217c5ca11f2dfc6dc51469567c0ea3ba2816a526330b453ee818290443bf6466c77869bb8110c706535283a689ead5a7b17490a53c086f4893f7f99e30781b16bab475ea68370c80c03835dbe38bad450c2467c6733c8dc7a9b54c559bdd46bbc83629244b0e7fd67967a69989b5e6caa3927f2dce93bc644c4e2cba4637732ff230658016b6779d12d4242f6704a5a8197686c24894b65a8cf535aa346b9c441cbb4cff5814c4c4f2cb42705d0bd851c9229dfa2cab4d931d33e3b43e4f9a608fe0d80390499e6c3d78eefb98bd0fe38feb10796266e203ad5ada79c2b0cc208c25e4c666d8a20983f27c54ec65b94ed80e7388b135e6a86517c239cc468cd3984d2d57083b87eb97c35b7928fd42d675ed0ba2f64e8954e855a43f0cde39ad3ac70db5c0bafb2cd59bc69ba07b51f94aa11e9f4c686bc9b1ae250140d73a8a2e8401dd539486e667a0c48a1ceec064702094779afc7c9b1df0e1ab1a20e771c9b7077051f52e5fad2bdc2c675adf1f590f4dbb3c94accb59f3dc02da0acca5009f2220844a8747fa5ff4180823089de3fa4abdc285ab35630030c42e8a972739c6e7c854812fa02fc2cdb5b14e9d4babce5bae5107e1d5da464940b0ae1160aa0317a7cd5d37e0214e8ccb384ddccddebde17abbe1203a5d7a5fbcba5e97226eeb426858228df0ef57a3e3a10906c57faacdfcebb8352e94eea7a5454f0b9f434bbaedb442fc321fd063760f22f9a210aa878dc9b795de6d7ec5231c1ba61ee1382570355731d5a904ad6492e2eb7147893066b151c6a1296cf57df249abd65567c0c5582d22065e113fe395b4512153b22b29dd9d9bf8b9d0c228e5863461b3c993110981cd4dad8db11d6d6e143f14165c773819f991c08dce7e7a2c55df8f00bdfbc68c2d9c46d3df32113da4d6cb6b5a827ab314f50148e90b3b53812efc2a18cc4eea1dd0302ac410bf8313c04d9aa06502712fef7cd2a24773518347f87d03b8f1075380477d9a64dded08ee3622a63966c622c3fecbbdb2fca9e49c328fab3840a47d644706fd22f10fb41e5dc594d30079cac187a95523aa6ac209a85321d701bb9ae7359299d9409b6e80fc34539a3f9c8c5164abfb259536f1f9be23e57fcee7c122122ab9fc493a99ee16bc46dc0690131e36ad33ca4c361330918e5ba688ee1b2b707bd69d0630b1dceca87d0c5f5277ece96a44e4cb73048412ca6ee4513f49210ad143c55fac7e58dfdca5579444025fa1eee2b4d6045720b1b6d1bfe8124200ffb17ff147e03a5297db997ce8cbcf0f37c7e758c62f34b83ad8662b872aa3f38b47148b0c85f7d40d16e68381df41597b988b8151a9fe504b8b369786f40ef1305569f19fd1529befc5fce635626c44fbab63f1afa040119bc3bd9961ff510417154992450edc3f0a2faee98710d73084132771ecc31289869a64c9eab92563fbf784e0e83d5930aa4d3dfc18e653165c92f04bfe097701f9b778df6a05d7c8d817e59bac055a896cab2ae929ec09414ec9ed73edea12fe48c5fc6d335d3b59f237327a42c8982593736d5474a446e0525a4419cb26ee28f9157961e17671d01cff16a4d5da0176f35e7b5bde2c141d4453b7a814ff2dbf7ba048062b9c3382129192875a0ad70427ea6e50e1513bf08dfbc3102925444762bdf7194611072ea1ca00c7a3360810ae0aa0a098e4e3b09241464cd1cec739ad039fea8e405ee23dc9648b72ed756ac8ce79564292675780b75a41eb3c5fdf8df866f501516f64ee03a5c03b353de8e24628f1c79204734cc0123c68325fd019cc6b8eaf586b9f6c0aa5b4108788820524d2b5926dae8c8d3218623700c00ac5ac222545e15baa5515400971423f458d054af86738d894d2de246052e339f0c79368c1f37fb4ece5cfcc5cfcf5db8029abbd3e9df8c1fca4b89fa30dffd8132851c6ba79123dc826c8e3f80cae85e2d4e345f46a4a0654a54b9f608e5fcfd024f3011de108201fcff04c3750e28230455e8e9349e84a60362d56ec5f2986c2a4f88da6bae3314b4548042b56a88dd4413cd43bf6d67ee384fbc6e89f0c3f1f26ae835ff59ebadf83889b86cd5cc233b297d3bbe467f7dca264b78065af70096a92ab5b63332bc0e8e95e991f895c32f40b1937fd6a767c8a26ed394e0100f37d86c37e8dd04e0ea6cc24a58c16d3ca68d12d4d6accdef97be3b1634eea58c9a46d65c5eba11bcb4f2e49ea5b0209c9c704e4080c295536e6baeeea6eed6560cfd8113a75abc36c6e61ba084eaea6018977c8a23bf270cbdb49700c500f22519ad5702c7a50e90851b2dd201a69c91d640987e47561b9f59a5ef1fb353fb96519043133cdffcf827dffcff5695f8a300c24dcf5492f862144dc4be5c57221988120325b30429638f9d6621b645bd8eebd9f76c2c5838d31c6dce7074dc245a1075d89ffeecf96ed9fb22307b445adfb662fbc173efffa4711de0d9198436d1f6d585d1c796101f83bc330f9c3c8d14665f20be2d8745594f009a5eadf3aec8a4f9de008d7b1e271e138aebae197829b51e24b2f381c6899c5ca772dde83e970831a0b09106962c1e296d140a5b7c7110221118e9a3c451cd42b2631064ba6a1a3f7f9eac28a8c2495349d2878cae54726736e12d3b945137725131314f9150f14494178813ff784951d36a4666b0e46687e0d5836770477822f2a2055d285c2b1a9812227260df00f48600bb5163598f3df1a30d6660bbfb04a5a1e12bdad73bb49038ec89b3bb4202936c289283800ee809bcbf3a46203c2785d47e40a00a95a9ef8279cc811ba49695fff0fbffc5013c6db711d14e0e3095fb4cd6402968418b40c680c8bf70578fa6a081fd7f8461f1206d6eb1f2692827df5212ad6560392b1b10435f57fe208c24618113ae97338c75b1fa1c87391fb4c92506465bc9b49a4570a12a98c1551069a2b0aee0ed484b6a4017b22d747745fdd7a22071b8c7eb1177859eb9009e5e17fea127ad913b93bf7c376ff899c423bad82f1cb5a28b42b59bb4abe9584112f28addcaf5c7d9f7d69e61a6afab5bb1279ac1f5a12f956350af2a3a0d247b38b799ff466fe124cfa253712fc913258c9445426f39272ee03d25d9f92b916d3e4fe9762d10e9c639b9163378caafed1ef2270c8ae2c52f621145ee8170e9e964e295c36f9ca65d41b42160c88dd333fc25edf5bfad9fe174fb70d4eef27c257f7ce267346ef272404ba7e56db7f297d00227bacfd037b8ab7a9b02863531a3b792c235db75fe6706570c92cd44d9f678f3d2ad13128e614dcddf098fd5166ce72f2eb60e5fa305afb46fe6a1816d698dcc2c7edc633e450739c6b654712b2afeb7d6333c31931c706e450bf403156fb990372f0ee4aacf4e6aa45c24500cc2df5d84645ba47d0a7004986146e437e1b33d094da3953f395631b1d1aac1bff8a868366031fc54bf161e09e9d7f1e6b2803cdc4a95821cb11004bba21e1d876132699381226f574522e30f0ab09f556690068c57bf994901cbb533169a8220010fc9303c6b735ba6c03bbaab6a27246c60c13b5edb72c456aad1106d8619d0297021554d02934b3c13fc93662bd20ca2f3a289bcc005a34cc72cebdcdf24fb9660b881402a7ae2856f353c9243f0e20ed52ca23c06939c18e181f29d67d6a65e6c09902c105b27740dd8584b3cb4847e554a7e956704dd5594feacaaf5199dac3f2166d2c474c7c5955a3b1bcbad9ef0e1a17bacdfcd476bb58c2635af38fe6fe62aa2e2b026f7f0f39f7d2f345f1b5a4a0dc8e4d735358a23667af0e58488d752b875c30061019fe5cb70694bb246e4cbeb1a041de5ac434b17e82306141201311b02df5a095c24e585798ef69753dc1ef23bc054f05258c514d8a0a4172e7c43168c174eac7188d5885bacf30c975ac8237cdce381a52fb2a4f95f190e6b709bb960f043156ee207a9b096652a40793c635c6e8bba25876cfad3a1ac5111b029a41c57a18bd937d10aa7c28e2fde5781809abfbd25b0e5cba191e8f38276597b6a2a2ca817e1b135ec08a5a331526a9b7f1ae0d60b0cdfec2d93b69430345d6fa357be064fe2e6bfe1b3dfecd737014e7b7815c3876cd84308119ceae7c1e4c273c62f49815fee27a116ecd46e82b99480c068162075916f2a17b5b0bac93ae0def80f9eb0f8270952103357eb431dbd62955490361602dff245048b9f4001a7a114d3e52026d4684c2eb9347e7de5189abcebf7d6052131bbed85a69d31718c73c2a65ac7eef7215c90f5f7c8dc619e9efb0d00f02ed10eb306aed122beeed18137d2bc8f7d08c8b66b2c30a7b31f2457fb902f0e3c5ec764f7909fb085b2690ba8ef151f8d8843bb23360257eb2b99b7a3d4d3474bbf3b4ae466d76760599f68a0ebc1babdbbcf905b135690cdc56004ad0a983c19dac4ceb0a7871f9eab3ba42d653a6d92d0ca55d59b8503179ede6eed8d657208df37e3cf6661f9f3bfbd3e26af89def5a9889b50aa9f48f94dc3af4da5122a69c1f0cfe72afacd1d308ffd4b333001ecc5d8a6a85f6cfc0a3bff630dedf30e613883389ccb87f4325b843ee1c3591e09d5226077e315a3257cb9b375e447b1851be574e6294f14ded3762c7823284fcf56a03530cbf47fb89fc33a5811178d88355c35abe206385dd759dd138200bea0c9f7aa1c9bb5700bf4eb5544a5c26b10e06400c1fc2e8fd07b4eb091818efa81523096fb84e4eec1baef38a5c12ca749e47a9bee1ae545a931e66ae8f108d037eff98cfedf19734ed4aaf211e271fac4b80a37a704f7f93a077c18d120debe3d5b6f9ca0feb9b3ebf7dd8623f0130724dd1210addd3ee589ecd22dbf8f6adc4993d2185ad275abb8ab6615abf076537ba24386121b33ddf14361a7d9d014d592cd7c14d9f44a307f5430a520e4cd69d60359bf970f81031909341d85012a073b1f3b14980f0237362f3309280f3a1736373b09003f3427361e4b09381f343e39882592ea491e10f890a4e16144a08793a1a1c8608ea18793a7a0c2668ca28721a9a18e628ea38720a3a78c648d4189214fa38e668d4083274da58cc281411f234fa78cc085470d254f4380c11d431f274f4184cd09451e4343431cc51d471e41474d0bb185d0268c97a6ee86c1b5edbc7d9b684edf5b56dac3d596d97d47637f09048e00fc59c8f34011f68c65ca449784230e7914ec60f81099f64227e280c39a493f84363e62085cc1b12330f8904fe50ccf94813f08166cc459a842704731ee964fc1098f04926e287c290433a893f34663ca6a0482f4774434a7a4076fa6998c84458de6f6051125a6bb3ed384116440bc869ad4163cdbb1b78cc2957c2cfed12f01eb5d5022c15055c1b12963f8fc1daee7e74e787ce76d0fe49ca753e7fc7efbad5d36548b426534c1db2ea6616f0b5ab925bf363b1334dda6356c4f6c6890e00d2186d2cc1e4e9ba976fa0e72d33a108f9d8a3018de93d4e7e61242a8a2d492f189a8767d3da0209ec92fcf56ea1d38638ce1e897fecb5d69a151f7111546dc7dec1bc0e2e9642de0dc6e5525b042838b1acd55d321fa5a6a69f7ba4d2fd8a768b9366d38d05d068d57fed841aec764e3bfc93512797aa2e2dd60220c5cbc4974f0fd8a75476b0e8b11d3a5312bb1a5bcd510c92903ca72ff427e768eefdabfc8d2370111136252fb60a563b27f42892ecb5d91a5f85f2920f5fb952f81d813d270c76f6c2a95993e2bf53289ca636d23f92fe45027833623f17363303e3d51daae2d7337d8ae005974d094e8606884a14a2dfbaae25a440e17d8614df6e9f504d51080caa8f454b3cb47155f6d0436afab6897ae88d29fa25fa8b3a0f15730295c38c958da24bab264277fa9102a455ae1b710febc77d93354e5eba77333d8430b2af95277daaa3e16e593d64531922ecaa63f15c09237f98ebfd1a2e4c6750e0e0b680cf72cd0bc6f9c4fcdaa906f620b0f9746bb62006e47b225a472d12b7de2c22f19cc92d2eae7c89500d4b11100bc02652e4d99573f31aec7c80cd93c6aa18e3d3b74696e36c281dd826c45f8b8fbf580608a0a6c5c470b504c08a96cb0bba423f2a5d888c708bd0112d411fcc1990ea2867691b8bdafb857b8b105c5421bc88d803cca88955dde9b760e452a416329e025e6cd481545b9b2b75c183539d4b72fa0b5a4d05607f7dbe753425c7401ee8a53f75f9edd88ea25c9cdf005c1a5b2ef405797ce2dfa5915f6e156e87f9f22dbafdc1e7919ab70b36219f237ef9b4c57dabc94560e681ba3b32b6024ee36ded195c660c0eab0a1f96ec5c77a99282e39a4a154fe507f0793bbc282afda193fd54f0e9c048c4527e7b7af2e19e33ada5dc3f30c3e8f885f67d3d85649947c7d1ddf40e58e3c6ee87c544dbaff365c097f683e93e8bd35a76edf3eddbf80dfe34970f6ef8f1c7e850f314a9adee4e9b0a0f197d3b6408583a5ec4a6ca522ccbb7ad526a077ecfd4036a03e507072ef20851ce16b9bcf753665f8d30011c082a3d01f3f43f39f3b57ece71c721e263bd0e08c8dbaa449cf7d18bf0f654e3f969785896f7859c0c86e49f408c3f76c2bac7f502d2207a9f9427908310260761a77460435a3f773c4523768e171eb38c7459188a7af4864c1a48db55aff54b93d8494629ecbc8e57a35aaf7c1207dc0995eb355ad1716c5a4391242e8af0c03bb73ab3b152943906b7e49ffeb0b01b11827b4a43c3ce92ab57701a8c189259bfc0f09804feb5026ee48f087838f6f17acbe652ed0d7dee8ba1563ee76ab51c642b133a76d34122b9fa63b0f0317f004d1e6b67a2b8f6249ca81a184e8cf09ef782ebc7050a86e2b6d35364f368cc87438f20a78c791ccde21afe78ecd9d76049f91d1c8b8b571fb0c40969ed2709a8ed5537155f12aad631ab230ed630c60129d853e20c482c90157c6996786f435c64c449835f2be9b4f33216908a90783bce1a6d5059ed648652a3efffb5989f6bf22f9c8eac5bb126d8121ade447f1ce89ba81abf82596195ba6b0de374a99802778e6db8ab5129b72c142a76c1ff95af407412874f41b372411e30663405a997581ecd8409871a1f2738dbfd5fd2b1e2cb949f2f4a8d8fdf5fa02332a41f4e1d0116d2ec5c990c8effaf8ffc5dd9518b7f27ca63c9f5cdde38ee71bb865fdc6b245ea74e98374463a9c23674a7c0b9b10c538fe94e46d4c95d360d5582697c0b310d9a9686b0f486121a50d8f6145272709f51e4d0473121e9990451e020e5c940ddf4ce49a6a870f9ef88e43cfeba8652bbfc155ad45da82eddcace2c641c50e713e846f5bb1ba1fe1212abe1e5589c21b74682c3096fb05be022b41c0f85ef3045bf3be2bccf059e110f904285299d8048182c74626660eb4fffc1f80440bc6707a0c08c5462df084d99dced067207527d6954d29196eeb07afc0528b91fb01064d573266e179c980a61b34aefc32963f4665c9376499bb0dfd7a4aebf2f19326de16055fe94171af697cee9aff6105544209b140f1c1e11d0c26693d80830fc50d5cd3789ec76b6b547358be578d6c4a5a1e09c6f9c2556b7d9eb4a99daf6a7466c6d6f0cb0af3a5b3466328d986036aa7c3bfd125ff156b9d4d00ef4f704485b86ac5396843f821054dbe42a014a49414af7c8bc668684809774a34f9c5edf468946ed4976ebf1e86b414d5838bc26212f1be87cece589b239a96b46f5021ade82c7ac0eaea1e2d72ac9fe2cdbbaa6bfb1db1cc6c60c144f2822fb3b9cf23384dc175dcb3183fa7e846dc6287484486b247dcb05cdadfcae97e88c04f010d85851570e67a32a16556910959066f657041388ddc5af7d262d9bb4697af198a2d9d50583877f19f7ee10c354d075a0ab4adeff7148607050bae785e65b4a44963febd23e80ebfe0ec59eb7c7f49e96ed345272e7ecf1b5d6e8404366ea3c945f9e047ebb59378fbd06c6407a4c427ba419fbdcdff6d7f5f4d1cf69c98c7bf378a2ddef3b33747a4d3a3379cea68b3b90ab088ebe37e1440d515755c77d64c9978be80a96a4094f6ab58fc16fae302d96e6dbb79dcec577b4f8347a191ef2a69fcca52b9e3e37718b8c52f4ff176957b0d22013877c670bf1bf67681c74b3015ea6b8e2fd697a286ac476fbd1a721deb9bcfa27f2be1efb0387e4556d7ab389d15c851d95750bce448a2a4bfe83c65fefd42e41cac8b3ec9036082667325c5897a0c8e8e021ee394a23eb6c82b3d9f7fa009833cdbdbced72f135397369eef8c67319e0a4918fbf418687e5a3ce943d25bcb12584ff974ad4673be6776d62048de8c9d282fc6f2f70bf402908d7c85e64998134bfa3c672d63829c0325887e4cca908b36dcbc47a3f81868b43aef21ce7a55f315aedfa066d23e42984abd2d5954ff60e0d60b385672fd9f7097df7eb1ba4077ee33da7ec412e140820bb8c6b061c8f4efe4a98ab9c9f8452dd369f52b77f30f660f1fcdb909d139b72cdb90a72b2a8c82ff29ef3e4719939627c161d2adbdbbd17bdadb0f18cb248ab9c360e0cde937f075a9e22392387bc988387d81169fdb8e8ef39c695f8deb81faee47a388f231005185be6114edd97da03d9500ce71939a5c0dd3872c434660d8217724e44da3689d8f06c0778275be48d49126c23a15108e42b58107187c255d1f93fbfc6e21ddad09bc6dc1cc8a320cf0b9296ad94ceb117e630c506d089c28a49bc6fc23461f5a7184f064430472d4739dac6f9604f1d74c1628938e8b9473cc31507823b43592694861793ffb56afd74ec371cd233878687ab3d97401c3d991f69f1b6cdcc5ab7448c629774075a31baead12343d6c092e7534472233663467c24942cc02873e5cf156f51128519e7e2ac10ad3672db1204b4007b222968c9ccb9716f4749902e5d8f55626254bd25c61b3466a47f1556728478506913b42c05e3e7e251f4d0e3075d2b1170b5207b372bf4ad858756ae82636c1da4f68122824c57da522ee40c637df44f636272313c18f7262f38f377625dabd8780c1b6f725f7cff88cece00ce3d3987617cbf384a0bde2c9a5bb23d03a81bbaac7827ed3ae3254cd8c2f57d73a11bcc48e658285ab17768482b4ff0021f38b599f994da6739a955038ad3dce289f5e41f06c024b00a9df5dc61370ecf48644d75574a15e21ad5f6998b00d2d51bcc85bfb42e86518ce7bb084c404f6c21017453f856ae1a97ba4894c9c337c17c410c4f51049ddeaedf292932455930976603096ba895a70280e47bc2bad9f6414f4f46b9788d5ba8b2a88d191fb22a4fb01366cf31aaa006685d1d517155ae80138d37b6d34a4b0166dba4e67b269f4c0af0a52348b572ce0a4c5a4478d98f0ba38d154409091241ba6536ea49ccdb99aa02f280d64ac84caa7938ae123e66953c5f459b62842403e8b7bdc760b9c10aa7ffd2b5551a8e74c586e7d11ec1bd7917f71d6786cd10101c4f9a2aee523ca0bb5ce63cbe468b6fcfcea966118663467fffdbfbf62a638aed776e6b5eacfd94e4ea92684a33cd8305b37e14de6421b90d718ce25d5d8d0b606c80702ff54e251134212782d04693528f45e2e57991d8ef6162ffa454855b4e9e51bc223636da3c4f0139414448a6fda438b4b408d052e5c922d7067a400ada14528f97b33acf8f4e8a51def670a5e5db8cdfe4f427e9f90ef1fc0c6020fe3bb431de433a84d0adaba049ccdbe81d6746be1f40fc81addfbd940f56ac3ad91609d69543848eed6f536442f08dcbdcc9c9b4cf9087571768f2df01a7706b99748af373c7ed0f767fe640a10ea7f9eb01a47b2d98835e12471a2cc981a823323808e7742dfca80ba3a0b0371117c7fb95f8b59f117b2a4377f8036cfe89fbf969b556660c25a2b21844b6afb321f83a7d75582c5326c431e7c1ff8eb30fb115ffd60e2e0d3bdd331be63d08854f4803c7e397b0997fdea7545ec458e1f3e1f860556d8d8564330852fb967bdd66c6e7fa90c1a5d16f7a64eabb49a11b33e97f763ecc18d5e6203cbef75a86571bbb96270b736235c4293630bef1fe0a71fae8f1bbeb84c73d6c74cf215677bcd875dfa3111f008b0de2f4d8903532cad608203878f0149180a73a9f76a0e24e7aae4d07516723b2c09c3ee6c466e661d8a3bcdc25f2297406f1fa7458f3c06c1d3f8fe5902a6141f7d99afd1a92a08a15d4bb3de8d3a90fbc5dd509600738ea96f5664e05e5e4cb4a5b5b926e534683d59157ded1a992334e18b583d6301df15b1050fb3c32ad2e539d93762a5bc396adb5751f55d0c486c994e5fef8096ad46a480215472344c14a4a7955cca2581754dc454ae5a68061a13487d3a6b176d3c78433df8147890978225d69f2eda333f0f980790a791ec48ffcafe5e4bd023fec818039a5e00b057e36a08c3e390442d40b6601aefecd0be8166b415d66c95ad541e1f12aa895072c12329ea29a8fcec087c8ce70889eea910e5cecac29cd30426fbf5381faf12a8587172b6ed6de50096c8486f9231dcbb77464fdb7e0ee4874d9d2f336f375af7c68393f6addc1eb466b80eb4a25b2e3f3d219247b9d874e1317e740ab7d16b47f8879641a179fe9fc53c2dd851db69f2ba2c387b7d9271c6e32a01c1f0fec604274f1ec12d44322641ed1ec5826b73ccf6e9d03fe072c7d8787b69e8a1a698a7f5da9f2ffb23c5c7f8f541743cf33f91d1fdcd4194f72c3466743145057bd9d63aa3f023733bdbb3761ba99edf52063f7745d0b44864a43f32b39a5522d2d6acdaf7065ab56960b765c9e2be271b7949164791a51badf94742494c4c059af7d228b420d13e63b73e96072f297882a9fc8f8045d86193f14d39361679d98a1cbbcb0599730f3c4351766ade59cc7294b780d13f2045ec7af315f3192741cfad234a212a61dccd3ee9afad51aab6e10522c93b9d86ef2bf4ec9166e225dc9f6758d3a530d3cf052b42734fad50495ff9cc0c80cae556039feb35433bb7f66d6ecc6e010e55c0d1a0c4c1808dd39643bf5beef8186ce3cafe7390609e43be27408192a043bc61dba0f06fb6d1879b77e66633128e73e9fa2ef3293bd9011240f3913d7e5ef8599fa9b375bb440bc95af83dddecf9764af54ce58f5f37af24aa691990999124aee8af4b58dfc284843752a19b737c95921c6dc50bfa2a6f0138fd8a194a14ba6012ca8146f1b8f0728f0948744f24a3ca068115bb0770fad976355a8ed95947451a8b4fb429fdbd5d2b1bcdca43bb97398910dd005493aa8bd89e02450b35777c2c903855c0d600e706bfc9d3358718c60ef11771f64dc42fe04414519e5879da386ccc28b945f6cd5dff2974dfcb9573737bca34d9b7e6142370042589c0f0f34740bb4f67ea51cf7ff2376954e31cf88ff6b8db3337deba5be980e8fd7e535f7fd095b6e1fa626dfb51592efe1188c29b667e31047dcfba393cbabf1df3f5cb04fe1bf59a59b31f0df732b8b331aee13c8f15fd1be43c398c9c28c66150cc62a8208b6d52f6e0077845ee51b0a08fa8d12e871869c0592104d15c9c296eb5723750e6261806bde641f5cec5f5e074070fa254666a53886d586bb5205b47b4f113829efb10318683ecbc1e9a97ab5b96d8638e8fe8b1871f8a5716c6414a71c1d3eaf2c9ae760e60a68f626dd00c22bddd87f6bec522d5f776ce39cf6026ed02f70ed347245606c3619c05ead35b45ad5ea1e6f554737cf41c43d51e984677ddca039b61023bd63f09c4410036fb5d5d0500d8ab321aa0a01057454596318df4267885f59a14fd9bcf2302e92de6913c0228850d54bab6fc3961979758af73fe8416ef0bb0042ea395d590e6ccdc9040499462b1d057b9c9edb3f3de9c6ea27ab58a9e9ce1747ce634a3ca31283ac49547ac19c2c6519ca395581cab0d39f997daaae24f6b3317e66ad24136fdc82ff3879cf7ca0767ac5da59e8e334f278ae631d074d80d639ad9a3bd1d32735449caa8c7eef0565b77947a6efe3953ea018f945335e78ed70726fa6f0f5382da898b4f3b58f111bb77feabeb0652990b5389ef4226832ca264a3801d20ec93f44c99375d248458ba8396e2e790291d9523fe84401c60be79e8069af24793e667ef2d5a096e9db40ebd4b7db7e4cd906fb3bd0fef92dc4b0f43c0a72b0b1d84e34277fb87e423dbb9006d34aecd25dcf1df8b34b6213a402961e08cfe8b132657fbbe1766efcdbdae5159c9321209fa78f3357fc91f0d233faa748788d59f44920599deaf6ec9f89df8960b0e6d5603a49228f1c867608d8762d50ab7ce83890dd561624a1647df199e9e0b9dc51c588a012cedaca429ada5be7acee1a231dd93a4fbe1145ab8e9c909eeb2538c4b4c5f68f7c0ce35b00d96a2c083c8cf8fb9516c432508eea9e0026c01e733c9d1a41b5e09ac0423c28c30d19b6d381e74d31de2e8b7d8addd4b66bdc296dd4092970afe22821ce145fdd0687c9ae1909ba27634537386cf8990d9412f53260c700b55dfafe5ba31ad5a2a4b34d350a22f3a48f9c901c6528b16bf6817ca7bc30d324b9d6399d368afae8fcf86e08f52c9d5d70f8449b1a9688044290a354de01194beaba827e95b8feb10082cb1cd296a026d8881db24eb106cc7b618129bff110ab36563d3d85a6240c75b8d0e9950a4e5beb14884a0e36713017a58569a9c70a129f23af4201da95b4d07dad0b08c7d646304784a358904d139b41634e1c4f99f0866daf11683f8fd134b17f8cc7858f68e0e17452dffea94402085a7383469bc44941e37e1514f5334d19a8c5fedd89a6791d832225e5461f9e7f2bb12d89c81b1b19bf37c7d670ca4d25586f479afdf8451b5ae132ed689201ce8f4e425c49e69556d4d297715eef9700fdab2d844ea964e13c6d08e63fa1a0c5d6b2be22bf6ee1b064427b433315371266c41b40ed7ad3115f1b2ecbbcc8f9295624951478b7558837c8f1bf3ebd1ef455b9e626f215e41bbc49e282b75a73570e5f3c2f47bb602eb56429705785f2a426939d4680ef5305708c7af3127e3c66231d4cfdd6e6c8a020173378df57225b5b5001f04e000129e540120a0320e140309a45939badcdd148013078db28c9e1099f7538733e0c14407bb3c4e38564acb909eae6666425c11d8fd03c1b232987e0adb87199459fd64c1e813117eb5430399759872e2115608f838de8f17373480f9f0942d5766c0085092247f27444b4a313d7a7f4a28721513acb8ccd686929560e05e19d0b5b012616e486c6aae36cf4c15f3f81111dd148b86ed9b6b46d5a874abbae7cfac9bae3fcc4e9c8898e65215412d0271468c6fbcae1b5fed82b56f68a668331dd06bf1f681f63431134fab40780f71294e925ee545000a1a68740314fb61ac885a69608df37c0c24c779b34dd7fb71343408fe785296e82f2cfa18e7acc4d7a936923fa55c02af79053752394c1589ab1b1c7c59e44b2ba7e9f1540d9dd05cfc37a773d2c2ddbcd46da1db86358b7e1bb5e59ef289eddf7ae61170bcba24405518ceca14968e8d959ca0898a3f056d64ace1e66b44462edca62088ed5561d228afdd7dd72c1180d74e77ef8c368fd4e2317f15d35950a86d980496b343cec7775cf58a020b64d5309e2a103104849ec3a72247eaf6910676adfd95d6286e90c6e6203c23ed0de4cda7e16f0e8d8820b0f83e07122eba9e7bcbb07073b9adeda8d611d8da136be37c90acc8d252a488c50b2f803d5b497bfc4af5cd06c95c6e6648293be00436c755bdec10e11d17b9e02bce7b4034f44fdbd1de953617565c259921817fcd7d88ed33dda63c6427afd1c5c7dcfd39c36ec25c4ae7b6bb54bde07856b2c32f91bd786d2f22892f8ee1bcc68edc1d41c48ffe2d3153c49f906684d9e64479c545c07a5bc992ba7893a924082fb2c0ceb02ae15453f0d3330b224c301fcf33ccff33ccf6c11b6b56e6da394d65392920437ecdfce8c4c29a59452024f0e2ed842efaebc8b90d61a69cb40d20c510d140dc7ef4aee6c003288c91553540a537a16ae8e018820269bc9d0cfbc74d97805022410933e8ab6f46ce1bb322026d928a59a49ef868ea99e1f40fe30e1bfb2bae6b6e0278603881f26c6ec4be272adab96acab0d207d9818d38b29e51f6de402e1c364d359f571c53264be8709f3fda7497c06440f93d29a879753e59af46705481e26758890de5632a795e34605081e26b65c6912f1a54cad7c87091e7db42efead83ad101620769898adb4e70f9a846c5575b021a702a40e1364435a55ec946cb532429009103a4c30593d15aaa162121f1d6c3e303dfa0c90394c7e5dcb58254c420091c364db94f19f531e719d128789197a3b6eaeb2f1b4eb60438347c95d49010d4a0a081c26a774e62f3afa67cbdf30614ef7068b25654c95fa07206e98184349770fdaeba54b3ad8d007481b268fcaf8d5ad6e2cd3f50061c3c4b42d6ddd65a62e1e9035b8eed9f3a8bb3853cb9e00a286c96955dc5a3c9625d741d230c9b20955aaf69dcde40210344c3c11a1d2642fdb550e72868972975edcdff3ca46206698349a9ac39798111be53d80946192c9f124fa92ca296d7f01840caa9ce66e7b8a40c630a9db53dc26d3570f253194011286491a3dc82035671cd3591940c030a934a8a9576567c7fc1d40be30f9347e4aee57d9cd7a353a80786152f2cf984b1b0f3da2a501a40b93dfde2de8d001e1c2a490f677236bf26384b63039695719cb6b9a73f86861f29d580d5234f785ca65617272bd8ea33f3a36645898a049c7fa93931119bac2c4a447a82c551ad776a991861526e9f8bbf93fc9efe95f854941f75eda6ef8c6cc5361c2de66d158a96365f6a730f93bc8fd2437466a3e4961f2e6195165e79d2f9ea230299acd864d21c4e6284161928b7552a925aa3b949e30c9e72dadc8b69d8c11881326f589c8778cae49af08a409135bc6e4472f2dd4e9803061626ae9d455dfee2d1f90254c92af4153dec2cae706440993fcd46a5afeafd68d0149c2c4d0b77b253ee77db8802061a2d5d8e894f2c163b0801c61d2d7bac8ca999a626910234c6c0f4f692ac3f446bb1893d3a6a8fe4e15634e333126dfafa8c89a664ee20e63628d06bf5231c6dcd80a637227f19753dbe738a30663c27cbc5915bd29a5508131e13b8c907e41b455a6bf98983993e927fd6762a52f26c76b05d34b41c73ed88b499e3aea7ca710352ff262e25b1e1d2aabbb98b0f237ebfe7d4187a88b093af297d37d6e6d291713377b2da6bdf9aa302e2607a59d5fc4e65c66de2d26c7e7f74f627a4997668bc9a6624e9b3ee50bdbd762f2d98c701f4d8d7fa2c5048fb1ef3a09d13fcd62a2bd6af614f59ceb82011bb29898e9f4eda85019a23799071bb198bc276edc3b658edb7e1d6cc062b2f5c58bed39765e2ce160e31513e6624aa142f3f89cc615134e680cda44648c1b9b564c304ba662eb7dc91d8f1b6cb0626269d751e9a99f28aec1c62a2685e8ab1c2e7c56be468f1f666c9d021a9474c0862a26e9d45149e87dccd9f4e307be67f4e8e1010f2433cc3067b88084046da46262d072d713bbdb40c5e4fe4f657662b6a3889c8484046d9c6272aecb1ec6342eac646d7e18109c65c08629265d901f1ffeedb7c7d5c1d6038d921f9e83b416818d524cea0d5f4298503de3251e68349e0d524ccc973a849d4af80c36463131494fb151fb37a58974b0798f34ced64a60431455697bb6e9943c3524242424672556170a1ba170ae2c6e77106efe9e9274b0010a4ef43367587f7a12ddc1c627f4b4e7a5694988951a61c3138a8bde6a7fd7f6f41c6c74a26441688c5acab3d95640d8e084d62354e5a4749b8ccf113636f16b6e130f1d849b8e6ac2183bcc56523632462c7db09109744de5ab343fa1ba3fd8c04442a724d4bdde96ec0661e312cd8895d4b794c3fa6a091b9668cf4cd4694ea39aba848d4a7ce2d4a7a8691a64481036289110ffede09e49fc61ed57f9652e352c094db75a4c2a382121c946838d48a015166e65a376bfc92eb4c9cf569d09093620315147986bb2ab5ce25d128c41c61823f0b1869bc0c62326a7ca9db9cc2a4d6fbeb660c3111344ff957d3ea596c9464cfce895c9d26f8c9864663a7a8957dff39984e487fb10838d454caa2cd72194bfdbc61531514ee3a9d659651d2562f28652d7497c565023444c4e414fe392ae88cf39c464771172215afde3c61093f2252527d4c57b2c8598787a26ad576312c24288891f4c6684e5d6ab7b101354f7e8a6cb79cdb52026eda6d2a2db435d85033149dbe6491dddfe4e1f1093d337ef7597f6fcf3fff05f507aabd2f87e98a054e5acabae6994f77d98146762edefc5a4f7ce8789ba31a7aab3915672dfc3c48bf119d4d7c3e44d42fd464b5ad14379989cc4be46efc4f37898fc39ffccb4b3abcc3b4cfc8bb30d592d42c90e93d26ece6032cb446a5e878931c3e8aa1ead29e97498d4e1297ea96c9dc2660e1353e674bd267a99c27298f46b3e9e2a2995f58cc304ebb764da419cc5c061a2f7bfec8dce8cf7a5374c0e77ad53a5cf32e86e9868567a3a68b92cb2d3864917346307199456870d13b5dcb25b3c11729a354cda1435f5a6fcf99caa61527cda68eda12bba9986099653cef5aaa3d68886c9b3bfd1b35aae3f4367982ce3192d5ed54df86698a0e7cad246bd8af6946172521fbb4fbf2a76860c13e3a5e05f7254d0e78e61d2a6f98b5a1653a878c430394c2e28a1f2a3a96198f0f1a73f3fe79a8bc130399b985d4ca71ba22f4cccb55cb52393fa07bd3049c7f8eed03851cb7561925273412c69860b933e74e738eb6f6152ba955fac5315b2d7c264bb1e0feaa3d7b69e85891e233489cae7bfa96061920ef15d9debd467a95c61d2799dcb67d8c9382a5698709fd4268fdd9f2ea754619276ddf2f8176fe929549818838d10ab4d95fd2e53986c37d23f88b74861c2bebba90d428adab2446152d49817e5395e0aad406172653d0de641648e5779c264eb0c17537cc9a8be1326a7cb251f3d9b2cf94d9860ba64f3d52d87da99305165c4c7feaea598b384494267f17cbb1db63b4a989cf395544cf14ae68d8d244ccc1b4fdc57f818f2b6818489dddb6dea435f7bb46d1c61525ac70b139ff25e6c1b46989cbe764e25a173a4d8c59820e72a4ed36e36af26c62437114b19b149cb1fc644cda93775ea5ac95e18132f5a853f332163e3c19864f1646d35facbebc0987c7f2a53c77ccf64fac584db9171c763c79425f6c504cb1d9e626be8783adc8b8916d65a54ca34f923f362b206ebb8e41e9f31c6bb9878bfa9eb6488fbe97531713e6d8a9dc3e8517e2e26d77db250e9eb4e29e16272ea74ca3f29d91ed32d2668f4a0e5e5b16332b698a095c1d2a49d7fc7d462d2c7a03a6f105eb11a5a4c748f9933bfb4562ab398e829f8ab29cfea7391c5e4ca62e96b2ac930e2584ccc74b51e42bbb09838aa84659419cb7bf715933fde89de12d91a94eb8a89da792b7ffa13daaa6dc5e4ed8f57afbfb26282a68c5d9b66d0b9d7554cd0298b7efa9919b1ab2a269c3475cdd983aaa0d6544c303d39221f4f884eaa6b95dfb5b29f9e62a25ab652e2ddb1ce53534caa710bf1decaa2342dc5e420c3fe6f2ccd1bf224c5c4247e4dad77097142398ac9e174a70fe926b746298ac929edaee6241e6c44198ac9e6162dcbe54fd2521214934568aa1457e5f2cff98949a13c67833c95d3c3e9894917fe397edecd94b2d989c9353ab36c99c98989669ba7c7634c1dc7dcc4c492a393250db91cb2d4c4c4aedf54b174f7b7321393934adea59a82b6f99898a825c4829887f8e87889c969643ccfc9d4b394d01213c6736a95c75432365889499e530cee39a6602a8394981cc54a54944b19cac6494cd2a63ea91cc462f8244a62d28b85ee0b26aab38891986c69d63af89cde8b212426ed68a67cf78e21ff2326c688506bd1eec474474ccee729e5f352232609792a5b509569468611136399341db4c7a8df8b98943e9f88bae8663aab8849274ac60aa97f9eda444c4ea39469ecf7107d1e2226e96c0bf23d2665b5dd21260755ca73b07fcd959d21267d6acfffec176262c9ce14f5c6c2f884981847887a05b96cb60f6292262d163abe4710934a9d6eead4046272b66f9b9dcabf4f01c444f74f5a2dbcc28ff40f1375644c1752cb2bec8749f65be939d4cdd3b33e4cb2dc3c977fafa2c6f061e2b8b6fdc558a54bddc304cba2512e5f92a7af02c100f4303198263bd931ded60661007998709b39d65a4a953d9fc60e1fe41a03c0c30495a46cb8d322bc73a383cd07cec30db730803b4c6ad9d15176fe3ae3371606608709aae1f23958fed1a8af15065087895966540eb329f4664a8749e7ad61d9b9efce74e630e1f35bf410bea6173a3ad8fc070f93033d394c4ef9f3c587ac282ac9253fdc87f788c3649f4fb74ba52133dd278501c06172caa4a6e12f95cc49c87dbc6182cac9477d8c224f6bbece0d93ea2a6aae0e3e52342c4f18401b260519e3c56c39572f364c8c9ff5774496a998476b989c829035a51fb4998f3a58080350c324957e7b7355ceaaf849c304b7dc49688f55a924d44e18001a269567fad8aca52a6e8a0eb69264bcc706f8811b8c98983d62714195d6cb196e869b3139c3cdf014d0a0c4dc58c404dd0bada69d1642ae1b8a98144bce4735dfcd20a6149c7123113710c1a828d9abff63ed8d434cd6f06eef701dd3ad628849f35b3d4abfcc6975370a316184ce15d393dcccbbdd20c4c438af2c62bd2fd5656e0c62727fb68e6a59fbe2dd0d414cdab8cf1b5a9d2eb988370231b942a5ca6e15478a99484804710310934c27f9a93ce482ba0f1771e30f78eb9cd8b8eefb6162d08c11f7e1fa27a73e4c3c3b8b2966faadd5880f1364c818a3c56ff63049564ca71972ddd1d6c364ad0a4ae7b4222e453b0f13b592b9a62d35f5cb72e0061e269db8147eb782a89f7a87093a9ef4bb70b1cf9cba6187c96973d2422c8df5e5d370a30e93be728aaacccc5f4aa7c324f5538d974653a5b24d8f090989e9e13d87c9a5aa6c345b94ad3857708231e430d14c8cb6285e5f1e6ec461e2694bb7dd4ecb15d437e030292f7fd0199fc6e4b86f98f06e77bf97923819c2e7b1430b37dc3079b4084f5a4e7edf466d9894f364570a1b931c79d7e1061b26b67b9c86f35842c8c620630f37d63029c9a7dcc6ec21ca46250e37d430a96486d5a5c7f0539d848484c4c79ae1461a26568fe588cac98a8c4652c387dd4043164368f2203f2c682413c28d3324f3a12e1b1a5b964eb6548816cb350f5576091a49ed8c70c30c93d205f92db36f213baf236e9461e2a65095f1640c1fb2bc41dc20c3e4e431a6fca57466bb1a0094b83186497b498ffebbbb5441e863870fe7e1394033c40d314c50b9f7fed46f140d2a146e8461e269dae0dd771ff66b46dc00c3e47c216ce47b4c452c5f986872233f7552e1b99398881b5e989ca2c98a789dd595339d95d8d91f6e7461b26d1491fb0ff273495c98ac7e318731e9e2297eb630313fae5b8aa62b5ff86861928d97c891bfc9c22465a5ebb9b7e1556d2c4c122d5172845caf302946b914ab4255c93dad30494d73ed858fad53aac2a4304d1944d35f7d462a4c2c5332ee5486aafa4c6172c816712d52bb2185c95ba19e396cfe46142679ce12ab94fc6e33e7061426cf5c98392f7931b6cc31ca10c118659c608c1b4f98707149873a931971510bc620630c12a8a1636f38a18eb12dc9fe2caea730dc68c244dd3621e37312a16195c20d264cce3d4296ed7bc8fff81226c5cd7062a2f3e55327254c6a15713105f70da393242429a041c9106e24c1542584b0682aa62e75b0edc0ddc78e1e6564e1061226aec9e8e83ab7dc49d329a041098f1b479894d3e78bd9efaca74d253dd028f181e951821b469854b5f221563c438aa983cd4c6d4110528c091e44a8d0313eb9954e083126681a6556fac47b4c091a3fceae0421c398988487aa0fb27342f531ca1081efe851460a685072468830826152192c06a572574907ef1d42803139e7ecce56a7bcd69e2884fc627292156e61dab4d98d21be9824a2f4de3a7cd0df790bc00d21bd989c6f4e83904b9dfd2abc98e01f47546aee2073cbbb98a42c75c49d0ad24e7dba989c1d93b6b7f01a478ed8cccccc4a3386e462e2c6a8b171dd3a2d615a89b52204179376b6bf4c6f8bfbba3ece40630710769cb1e3471a2a2021492b5145c82d266e4ac2e752a720457b684761491a3fca08b1c564f14d49e434c6ac612d268e8f75c8b8fc7ee9c46b08a1c5e47059667f2d257721b398703256959f58d55e912c2657c5a4c3ecd9de58bc0e21b198d8495d8ac9437db654e810028b49a6b5f4c985ccbbe8bf62729d68cdf92ca718d785b862a2e824eb633cc568ff435a31b9b5d5a35e4e0d57613d43082b265ef2ba9c69c1f33243c82a26783ca5b39baab9ca56079f81468ff7ef1ba30c11a86282ce9ac62b7be80212121212b3125b2b880849c5c45ff1787719ce923485a062b2c5cbd39b65dc7d4321a79858b6fe25378c70b778882926a8979b51a7f3524cd030d256afe4069fad1321a498a439c92463e8850e8f6252fa1c62a4a5203b86525b224414132ef49fa959cd911609492826bd78d9698e36251ad6c16a8062a229af132242fbcf94cc3029190645c82726ff8f85b5a7cb542a26f9f8b16335f13611e28989a54536878e4be2a23d929d877462828a4965dafc31e70d171f6b3508e1c4c4205cbd3fd9f68db42d641313af2d7f4c9fc794165b1393e3ec7c7e0a9dabc433a310212413932d9e6f6e527a4c4cfc94d3e9dbd020c5d24b4cd05155ac63cf7e55ce12134b763445ebe8b91e0b4248252686d20e7239e9e6943125267d4ed9d0b8aba52d9ec4e40cbadc2deca5247394c4a47e53cb2b32be95292331d972521ff152276ac210484c8a8d49eb794a19ba368f98bc27f3570c66b59b76474c507dc9d43b880e9573ae861966558d10d288c9e3214d8ece695e469b9c0b421831296aae5319d7b4bbb42e48438de4202021499e861ac9931b421631b9eeae637c101aeaa73184286262e836993e63a468192562c29c50a7312ab4093118421031a9c2a50edaf99dd44787986c677b265236b3e6a821266d34195f2735fff32c8390424cf258d1ee7425cd3f2a15841062b2a9d31b76cde22b840c62525bb8f24a7ac2ab355d628510414cf4d4a1d48ffa55ad7310128849c2763de6f89ff297fc41082090446f10f287097a5b33ca7b90d649bec38c1f68f0b81e84f8c1926dc94e5ba60bbaab42481f26a54efefba7427dc6071f26e8243ea382c8da74090f836e0f937452e6295a8ca999a3614649b21d84e861f2a9ce65b23bf617b23c4cf40fb23a8e163972ff103c4cd0b7a59f2eb63affd7c156aa83903b4cd21d599b1733bcc4b7c3a41322638a19b493d66c1d26c6ac6f9ad9e930416a7acdedab7398307696eb493cbde4268709f25fe39cb48d2d220b89c324ed2383bd76587aa8c828497901b043081c2607d9cd41da77506995718231a410f286c9ae9fa396e9642a9e26230c216e9874aa2e84d230dae1038d15b461729ff6a082da2412e4c0534072c60e1292351009491642d8306183e6dcafeecc719b354c3cdb987da1d2e6cd8b9d0f3b4e84a86162a53a770b8da783672218838cc918648c010232d23029458f0ebd1576695d23638c9a8cb182138cc1851034f462e9d4c5d4a225952dadf2da98ef6d7dce5bc34d508690334c50ebcd0cb9742a299961b2ae962ab54c9f3289ca30414cc7daed9dc8cf9261f28dfcac329d6474ac8c618270cbf135c8e8bdba629818630a21bcea52fc330c216098f01a44764e6a09f9c224b31cd4ed65910db2f4c2c416dba45fdbb7a3c527847461527ad0fca972cbfcbe5c98f4e3312b976a152de51242b630d95cbf3c65f6f525bd16264951f198f3a8f4523d0b9373b8f668263dcedb8c8549613496ecc892d7ca5c61b286916e9eab4eae9bac30316b8ea5ab58315f5faa304187fd8ad9f92a3f9b0a9343eabaa8ffa09db53285c9751ab7e584ca18942f85c9f967af72ee8baa89a330417d99d69c3c15335b5098147b84be98c97dc2243fbd14b36a5e2f7d9d3049cccccb5f90f92a089b3059c4f88a9abb1446554c986432c518d956edb4dd122625d97413ea3efb06fd0e1d3e4af4429430317555865b2caf344d0797fde881868fc490244c8a1d4da329cb4d3c47c244b38d416e6f336b8b8e30316d928d79497c77428c30499f0c3d3a77f7337e8a31595356ba12a366bcb3c4986ca93f5f9ebcbd0bea3026ca668911391ade1a614c5251e33a9f3f68a83218935332699db6eefd5a604c30a5947be6f37e61d4f8a26377683300f1c504d11173c9de6368cef762e2078d26458f9e93edf3629205ada0ccefecebe4bb9864f6164ea5cb7531c9423ba7ad97abcc995c4c4c95d6c9820eff13362e262835259efbb7e3c5f8169355df5764ab34dd5d5b4cdcf4945274ef9cb4b8b5985842b4b99ab7b498e0a33adb299d925ecc2c26698d153eafdd195a594c509f31e8206ad23aa5b198d4bb393fba9b105181c544eb8ce3fa1fb428115f3139f5eac9e8e699db9c2b2668afcf9516c34b780ca415933c9dde9ea7ed782a564c4c6eb22784ee515a2fab9864d95385a57f20aa28ce2aacc62b7caa956896eecd31296b329cdc405231c154d0d95bd468a6f006010415132de9242e1fff9f34cef6830909898f534cfafe0e9b2d6ef85b560110534c8e31a9505121ee5f84850a20a5989c5b54e852e51aff2510524c4e29538a0ed18cb3c30c33ccf3d851140019c5e49231c5964a325f324b4948d00011c54411f55031fa73a524ea602b31c30c53a2e3471a9e3614933e2799a246fdf8ef9c2421d1e1c3e8b8010828260753b7cf39e7dda0fc4f4c12ca832ce1ab7b971f882726b6e9d9d3761dc4830dd28909e26fcb7352421d5cd2e3471a85468f55104e184f680bb571d4e7a9403621803280686272f8c79e2ca53cd74a209998a0eb17e45bff209898a44f99987dce74d66aa68006252500b9c4e4dd742ac87dcecb94a82526b5c66d8b8ba7f54b4a78ec2841acc484d338522e54eed89f1840283171a4df7ce58bd7607eb20b03c82426e9ff8f264b31494c362dd2de3678a818ad2c02241293bd5c378a5a101be6d100041213537ed0a51facf7d2ab0890474c181d326c37e8bedfee8809eac3fa5f76f110208d98248436fdf1e29afd630e08232678c5f0aa5395ffb6641d208b985cf267d644aaa8ae14454cb0e09ddc4c8487f03611934d4c8ece7abb3df500100710444c5042db4dd9d527312303728809e23b9ee51a399a4dc7109394de98e9553385987c9be123aaae1ddf26c4e44d9ebb9b13a69828a3f227ab59cda442a598a8a7d5416cf4d1319d0e36524c4cd1f367c76ccb8c3f8a89e12b748f6d2d8a09efa69a215573c3b7504cf6ccd5df2f16f3c82b4131a9a445d3da61f6f6b14f4cf2b7b9d0164f96b69e98987584d7ee8c7ceeb12e4727266f10173733ba3e4043737062827d3e399d152d65ab3731418a49f34bf27d6445353141baed579d4c2984659998ecd1ec2b2c635e67c4c4e418a7255450ad9d93f01213cdda74fc2c7d562a93725862b2e97835ba37561aa33dd028c91c95989c662e5e365341f86618821c949858e2924c6aa29d8491682087242e472426e5d834e3fdede1534f4242881c9098a446db98526f711935ce21c72326886cd3fa152ac5d45476851c8e9854e964ae5329e9eb20aa5256c8d18849593b8e8e317f68eace88091f9e355588d02673d0222678b40eae5b29c50f5b1113ace6375ccef1d259ac1231292de9744973ca68d9cb8188cfb483c8137abd5b1e42f78fcb1b36a8bcdad920e430049b4126d36242b7e8af10cc7d875bf80a5b793bd9c9b8caafcfda4a0e424c0af6b341797a8d1e65a8a005c98c1d3ac8a830e418c4c46c0d2343ebe98cc952e3871a67e41084a24573b52dba8198a436febfc5ce396dea00629266a8fd245a95c2687f98f862d79f92c6dc748d1f269e4831bdfde6a6953e4c189974129d5b4c3d3e3e4caafcadd2eee81e26891276e32a2ac773580f93a2069da4dda514b4e575b0f1c0793031c3ecf891c619880839f2809cd3994b68194fb1e02195c6df4be9f0563ee6b8039f43a8ea942bc70e93b2e51c6d479c14f99a3a4cf68af52054bc72d061b29570dbcfd50feae91c73982046d3c5b2bc95d965394cd8b4a3e2db395badcd118749fa4e89eeb78bbfa60287099a4fe9d47542e5777ec3c48f376671a3328b582f0d7306ba616298c76cd2dbadf2670a0d72b46182e9d173973d4469ed73b061f2fec854ba43a920e5b38649eadf4dd3540a799ac9a186c929de972ea7a827c39c230d935c83e5fc33d24cd5cd8186491d93b4b863a56264ab83ad6c0e729c417990c30c98a30c4cc84186096a263bc85a86fbe8ea3036e4188391f0c82186499db95247e964a32fae214718269f5fc74e1b7352297fc03029c5a447f74c6b300de6f8c284b5dc4cb13a89115a04831c5e98a0a278eecb5126b4b847c8d18589a2d57ef45acee0b1c385c9b5eda93abb786592d9c2a420f4e56e7d95fcdc6961729229a974963b7fbe6461527c569528d9726061626acf182d2b491d95bfc2e49cbfcfa89ee2417f725861b2c60d239e645215267878526526cdd4e81c2a4c186b1de9a1bedbebe598c264b5b6cb261afb622119724861a29528534286afa0b652468e284cea11ff71bcefe63bce821c509830b7f147c5aaf8274e359e4f90e309451d6d49e9943d399c3039872a937739d9859f04399a30c953b213623578d82462cec18489dd752a8e5e5163dd8f51c6091891630993e42779231fdbcba34707db2a61e2e5550ab960e1b25d9230e9dd937872cbfb569ae640c2e4bf4e7a639aebcca0961553418e234c32a5329b58532e52b43af8053c5470c6438db23ac8618489a64c9a28edad5542a818937334dd5619f3c744881893ff83a6a9d22f4a86d13026c5a433a52077ba33b73026e6baa5b6763b1813637e9c8eb752cfa505c664df509ff2fec7ae93fe62f2e9d03042b467c8487d31c92efd9f9a98f410f782113e9a2ba6888abe0e36357c9460e1c5a413f2367a645a3a7b1793e4462b3d79ca52705117932c79e8754af596c2b998ac1f3ccba8fa89380f17932da5790ca57ff52fb79830ead6d76cd5adc4b698284265f577cb21c5331cb598546bf22b3cb5fea9be69318b496a54466a9b4707db1a66a4918651321a0e3864313987a66cc17af6468c6291a915cb6efa16584c30e16bf2de76e388f91593b2bec5d7a9ed6863b9c248ac1513cfe3b3573c356255736ec0c18a092a9e8f850ff2727f3b49e058c5e48f9f846cde30aea5531a8143159345d75c9890931a4bdc8cc0918a499a328c4c2583ccb91b151373a68bce1cec534cce16737acd0d998faa2926c690ab646f61292687b4ac17d3e8f6fe478ac99efba77696a125b7cd028e514cee52326f68cd5732653844519ac9b0697f3bed2de008c5645116646dd78b75e5120c384031b9839d3a2f95bd92f0f010383e3131e5d5bb943d8bc9aa0a81c31313a4eac7ac312756fd5a014727267998efad5998f5e5f4f01f383831c93384af67341921706c02dda7bb631635fb10133834b17a30213bc675cc4a940e3832312969f4a87375b25e698939e281060f03040e4c4c50b118eb0a16c2e74b4c92f51f96ed94eded8fc31213c4a74aa5ebbe4b28d9052424c87b607ac05189499ee6343506370da28d41c61863903106196378408dcc030e4a4cf20cfb4deb15bdd79ec4a4be7abdb22447ff75929864dea77d93e5d7fa446292585ee508f37c251b0e484ccae055a6fc4409b7ff119365b393ea775d11e274c4245d15c47d4d6bc4e4b81bd579f53c87db306272b688ced23eb526dc8e028e454c52226326f19dffdabf222686e658dbf4522226a72d2194525aaa83ae88989cec72261fb113fa8355c07188ccea5bbc2ed679657c6b881425a677b3868e7570b71a75b6071c8698187b2b352fefe9522126f67ccc974257fecb27c4e4d1dcf32e25dd84380731298bba67a7cf143d85829814838895e6b4285f6e2026df8d758da514d197016262df58a8fb27fd61929c9e74d37299c26f3f4c124b29c7a45a2a3ae5f461624a5ad9cfce2acfc292020e3e4c8eb14ed28334ebfc6139028e3d4c520b2153ceae72f3be82138c81a687496a9945090f0f171482103c01471e265a945ddb31931b4d7898e8c12ceb2e77c5667f8789f1f57492a941dd4db7c3c4a0738e5b99647ef3d461e2664adf1bdbf6150f1d26669e1a7dcf3c59770e935f37f89e769dfd530e133ccec79ca28a0e3fc661626a0dba465dc5061d1c26a898d07a31eb374c0e9a4e6e98201a3b6db89c8252b90d13b55277f4a227151fb36192f5c9dd74e17bd6d7354cd4d1596378d453e7a61a269f9f4ad1fdfba1f36998983754bda7a03e2c44344c5039857cf6bceda4de19262513efb9e96fe53a6686c95167bfb26aca789fea25e028c3c45331e9bf8b315f6e850c93336d4f65e60d312b75b09120a582630c13b77ce654ceae18269c0e1d840a52e3c2a36140dfa25c6aed5738c030316abe106293b7653ebf3049f945111dfe3bcb09bd3039ac3e67a6745b5aefc244ab9331c80bf27397c685495fe277155b3ac6a0521e6898410609091f1c5b98584137bc7be4e6cc5d0b934cfc08adb13159987cb2925d50bf41665eb0303964d2b3ad97a1bd3fc5718549d69f34e916ddde745a61c2beffc96cd9a0e37872c051854972d7296dde76c36ba83039cec96a8de175ddcf42031c5398dc963e4ec5c9d8e727294cfcfb1c3fe54c0c70446192678eeaa8be4261927934cb6d398e8f18c71326aa762e65495b8e6977641c4e3812347034a1cbb49af996afbab04ae160c22459313b66fd1435581cc71226a8f0b9d377e4e93d351970286192fcfda483bc9fe66c4ac2e42a93b7299e060913bb74bce8f3b4496f0e038e234cf6a8761dd6c3a6e6128711267556d0d15254f5ad541973b8518c49fd9532e4c6b534b2f4821fc68c109090f0f01f3f8c196f57b8418c49f1fb944e3e3242587e18133525b3709fa2f39f5c18937d54a7fa948fa3a20763e246bbec31a662d214040c947ab5cf2f2655a5da1cf3eaa8601b5f4c0c1d949a35311d7335bd982c76aa23944ee1c5c4d19f596deab7c5527631e194ce9c4e7a59525bd1c5a4ccff1bb763594d6973314153ed4c3b6f6a36171793e2675690b3911f1bbdc504192b8ea8368b6952b5c5a4bcbd315fa55feda8d66252bae6c8fc8c689b498b89a73276d61e51f11c9cc5a4f7201ec6a3288b499ac5cfabb4c5f8a6584c3a9db3d4c65d2e2cb098a4e9e42e2b5a7ea8eb15133b837f68c8efd056b962f2e77feafcbca8ad632b2659b2a4d135e6b67efa062b26fe760a274bfbaefdb68a49e952b8ac7bf2732da88a4959a3851db1c97e73bc475a193e302db0f381e9812505342839c18d544c4e91295d64aaa433ed1ef081690109890f4c0f121222dc40c5644f51538a29299d62a2e8d3dbeb71a1b2664c314196e6bcbdf041886b78a31493ae435ab87dfc6c6e352926fa9e10eb32e128265bc6ccdc9d84fdbc278a096a79f4c9dd7413312a29b8118a896bea662a78668d870d8a09e22a9a2db77a49543e31398d18d720ec2be1e13a7e949c2726e893312d3e8ab976af83ed0c3417dce8c4e731334d7bdebdb97e831313fe343723b8b189c9c1bf72f6d7a06eabfac0799cf9c0b460af05373431d1456f2f3529713a8a373231e1c2b45be5be0d9bb437303149f4a9ccc510a7ebb51b979818c459854c41c10d4b4c50338baf954ccebb7246821b9598a431fb76f3eb315487121347781631961fecf81f253a7ca89146c6e0c624269658d1cfc16395a5c8cab82189c975a674d86469fd35a8d80e90f9e1821e35b8118909be3132f73aee6ec5929bdc80c4242d96aa31572c75dd3e62a2088f232b85ddcc4e1d3141af55347e89c7abaf1193ecbd76f436b9ed5d253cbee40c1fc60725fec3a0f12369342f2609992d753c55b7e5e02e267fa84ffb39881c2d972e2676df8bfe980da1644e2e26fa8a10428379b5b68b8bc9553ac58ec9bcc24db79898449f88d0497a5ab86db1976d978b8de54a9a6d9639c36c86b0f872a9450fffe1438d1e25250b18a1c584df0cb71742c6e975cf1899c5c44a63bafa2a0793fda1b12c26ed9e3abb1cda584c4a3a52fbfabd3c6d051693c72b4c498fe1ed41af58adc4b5ee52f8740f138d9f633621736ed1962b2626791b6e2f5a1a252529a04109c9482b2688cc623945661f957b335e4b30c28a4923273ca4c84b5a5fc491554c58ed2036a94ce96063344ea08ae382a53417b56c9a591d23b3e439c8011a2748038d149090e4000d33465231a953c63cfef55723d342c5c4cfce20747b1c0a23a798b8a7438cfc0e7389ad31628ac94159cc7396196a9c81659c600c1d3f76f43024243e769c1ebe02121212924e010d4a7a8c946272ec12eb736aecafec11524c38bbf974aac43dee1bc5a4aacaf592d6a2f9623d3c0d23a29824aabd9f7b6f7ce4291493c2fd08fd56ba29b6058ac9695b54fe9a29f9a3d4914f4c90714d45b3dd51caf28d85114f4c90f65eaaae736736d331d28989a3ed84f018d3122a8c706262f57be6ac3651bf4d47b94d4cd2a5739f0e363e3a9a779a28da76acab9a8787bad81f4c5d78b5c78f3446323141e7cdb649774eb1fb1cc1c4a4f6790b266a2ce3bf914b4c1a153d2a2cbebbe40782114b4cb8fd9c79355ce72b712526fea8e8eda03c7fe91c2526cbc6119f229bff64d024265a8838cd5f2a49a01de25973612e7564dab9ee9cb3660c8ac4245d32bae8d0ae6cd9847cec38232131e1c2c57dd249c7ab74461e3139bb7a9e48cd9563741c31e95f4c6e68596b1077a41193537d98b90851632b7b4007192424238c989c5aaff99bfbb2278f2c227b9175cd0a16d5c29db85fecacf8734a9e8e8311454cb4f39279547ba98d29111383fc8ece39eee1c23d828809b2bb3aa9982ad3cad65b1839c4e4ab903353155e633d1f3e8c1964142e8c186272c58ecbf92a9d44e99815146292cad01c947daef734eb602bd91378e0032a388108f6c70f7c2d042384e02dee52ba5c5cca19171ab2f715e3c8a90c37c760641093464fa552c2431e8c0862824ed735df4ed5ecdaf5f891066e60241013fe454ec8b8392c59081093cd3fc9502d7ff13bff30c9a29b9acbf1b09fa9198cf8616289b3d213ca5f348546fa3039e71a19d253ac877df8d07a58ae2cee6e765e59b34e463bb28749f529bad9537d76ac237a987c793f260b6fa199b22b8ce46172ce54df9c63bbacc334d628638d1f1786113c4c2af5396cb72ba9a4fb1d26eb5bcc4e1dedd25fc60e1374f231f5f5eb3059ee4cc92816bbb66b3a4c8ca9fda2baa9349dbe91394c3cd3f1d6634be8aa6d440e13cbe34ec97efeac1666c66162bade4de953d99f2865261c266a85b74d1bb2d4bf9f6f98f81b5be12294a94a31996e986ce97664b49167b661d2e5269d55f7c2f7fd996c98183c594c135596845067ae61c2db9b8cac53d9b22a354c0e669964731849c3a4bdb70efd39c74df61946d030b952cded27bf6ce23d248c9c61e256fa980fdbecf28a0eb634d07ef4406305531831c3645139e5988ffb6b27abc1808c9132783a93b4c930c1b562baeb108e6172e5dcab76a354c8edc8583a8c88616268c9f025c3b633c791304c50bdb7efa6d332d928a1a1a3ed30028649aaa4a9654fb284acd88e343ca0d603b51e201c46bea026b1957cbf7e2f4c8ed1cdaadf847e8c7461d2c950e9c55299b44c3d47b83031c5c596f5452f4f6f61529e86d9e09b44674d5a98fc9bbd9fd4b2c62d95912c4cca9eb1333bbf53e5828589d94bc89dc64f297a1db9c24451cd182b663c3d971bb1c2a47e0df120df2fe55e9219be23042424b76bfcb8912a4cb4fdd1f671e5fbf4a83061840a13c3c63c2ac6adedc32c8591294cb00a42abb568ab2c4a242424246bfc58e3c7b161440a135369c6790b32744cf191281060040a4f28a911272460a4090a186182034696208111255c6024092518184142c904468eb0230d0f38e2e18011233c40a41811102146044486218c60f8808008301820f20b5f2c40a4170d10e145014476a10b0388e4424404173e7cc701446e518200115b4cccf14d5b54f7cfdc7007e68c928639c30222b598a43986d528f35da0c38719415f1ae68c1288d06272ac3efb4d95d9ad6f8982c82c2666fbb79ace9dd7d9320411594c4e1be39e8eb4d1a8a6584c94b3f9ec21d455fe0a2c266c5d6a9dce9cefab5f31b1d4766336f64f4675c5c4af2e6d49692f71a1e9604b25c50922ad9874a37332993ea76ca693491061c5a4bfdb5cef278350c1d4c1b68a89f923eba28408f1b1a3832dcd03aa985c3aa58c66fe6959f7011a649090742a267f2ea153e6d8b3978731230de4090d328c20828a89494fa8204a9bcf870191534c92a2395fb74cec2619534c5057ddd9cd35c5bcb1244d22a5f83389cf34e90e11524c10d5b41e993c4c636820328a49c973ea96d5a02ae9491493b4f7c5f4b1c356be522414ffaf752a5d326693078a80a2b4219418b394ad71ca3e6124c51328d2096b5c4c0869fa652b129231c858c109c658c109c64853887062f2a8983ce570f9eb9eea60e38584c826269e8ce94da1c3848efc0c357cf8306b2ff0b3864141dd8f1d3c76f050a3c4cf1ae68cb333fc0c4d4c908debff994b5db83749209289096a937c25f91e3a8a1226269bdc2a9379a621ba738989969739ae3a366f6f8909eaef2ae5c58ffd4195985ca3bc32858c31061b2931a9d4c99416e384ceb4894ca2d5106e4a276991c4c40c0d0bfab427792d4762920a1553cfc7f47b175d44884062d29cca161df61f36fb43883c6252d26e9e46e75f11b271c464fd0fa517ae3f68f41a31296f460bf5a71d21441831e9faad5c43732521eb454cca316e87de17ff52314188286272f8b4cf164f530d1e380890c3c0ced5e081a712e43d282b1049c4a41c71cadcd4e39c8d78ec287120ece06172d0030defd1b90411444c4a693ae5aa0e627df2cb22881c62925c7552a539da59471d6c6998336220628889ff1e4b2f58eacda8a01f78491182482126583ebd4a7193b007228498f495a76494b29847cf3ad8cc3063c717fa1019c404a99e638f34d5a8a154c26347c90f347894f8381e88086262321d534ed73c4a9c78ec780cc404e19d72da909fda2e0810933dfadf7d72517352a383edd1284bfcc324edd6b4efb1dd4bfc7e981c9bbf63c692f16f4c7b10e9c3e49099d3ae67efd816c3874939daa9761cadcc20b487c95db799f16e453d66433d4c7afbd614e2cf46bd9387094ad64f9bb2b4193fc5c324b9a7741cdd98fa73bbc364fddc9742f62b5eac44ec30d94d8c69554b273bbb0eb67422759874328999dd4ac92042878939f85bc59eee9becdb0f227398a4fc4f986d6db6ac4fcb6162aaf6382ac3498b72d984481c2687d3492dce4ec7b55d84081c26c6303dff94f5a4825cdf20f28649313ea7731efe2c343788b861e2cfa84fa69ac593d2db306993afc6994d5ea5b46b1061c3e4cd9c2e6738b3287a74f8226b98ac29325db218e3a2e7438d5492031e3bcc483c8c8e923e226a9864e665a984252269981ccdcb44c9b69cbfbb081a2669b93cfd671f0c44ce30b9cbbb5c2c63701da91926696f5b12c2f5bc52101844ca30d9c288ae1ed9e023ce3a889061e285d3298898d13958c020328689dea79b4ee54be7316a450c13fc2bc9cfdb7a2aea0591304cd6645bfe66161e06d91aa8073ddc87dd1844c030b172adfe64b7c8d1da8f1d3d7c80a805912f4c9ab1b7fb5caeb231e3b09180848484e4d002b005112f4cac109bdf4f4c7eb053075ba36099871adf2f10e9c2a4149b63f7e94e4686da20c28589b3611fb284b093262d6210d9c2a4601ad3e64eca7ac3c7b4304186fa6ccac3ea57a9642145b030b983d0569db57371bfe205912b4cb8befe746ed9e3bc4b81881526e9f936f156fa648e6e152668f84e4a7c76896ea6a9204285fc46a586b374b0fde0b14347890361878f62079129b432a231166e49abd634538a4a792309891426670ca7647552d9a7216584481426c9b0319d3293ec8aa7c70e3a88406172858d33b2476dbae5659cc0d020f28489f9457b181955613c6c551071c204f720a3e812b39be66fc2e4d0f6bf792acce563c220c2848923bf7bcc824ed1a32121b91359c2c4133bf2f3e5b449a7b412268da60d29b2e4244c4a1d95163f734c0411244cd2e027eb6129d89a505283c81126786f0c163479c8d4a588112676a7789d53b34c5ae728c6a468c92a85695019a45868c8418c4929e75b182997f73e6b011f720c63a2880e997f4a8a4efac9218c09b26763cdd55cb8aa3982316946a8890ef292ee130363f2689ecb8a6b1396dc5f4cd022cc36c5f8cee6275f4c2c2154d3c56ed6794ee6e8c56451a7931293272f267638df7097639616ab7731496658d3e85fed492eba98f0fd271fb67a6a73cfc5a4acf99e2547be09ffe4c0c5a43c2a6a835d76651edd62628a99e3278dd9a7ea638bc91a940c2244be69f0d640a3c70f1f9ef804578b495a3617abe1573bc51fecf8428b0917f46b56367932a1338b4949854c4d29b33f2523872c308f49279db36562312906d19ee6334b3c5d603141afeca8a6aa351d7532038d12b615e4784542096f8d5ef525537090c3151383bc94fddeccbd49c3078f1dade8b4ae734a5a4e6659b1c88f7d3f97ebb28ac9e61d3a7fa342db663a72a822ade8a95f6d639f6d5261c5530b4fe9c38672a062825ab8fcd9579e3da64f31e1824c722906ede3e6ea60f3d136c8118e64a824b0e522491c0c85026140281004840ad73393130000100c1c91c562c17038aeebec041480044b342a4a302c1c28221618160b04435130180a058381302014040542e130203014920229eb0012c307016016acfd0c7a6bf56af70fa651118756e2e128cee5dce639dfda20b30bf32e17d728c3155137d521bf2eccd16a38cb1bf598e609998953fc10e7a366b104d8a3728ecfb961da64b911fd8428cd1117620d4d6d4d2ca8e1b2ca210f758e832dacfb764838471a822ab2c068eccb208a56ddcb55d0b94917d3511af47fbaacfa026ad6468e259aaa08a144f028c7198b0deac8337ce8467eb7d0b7d133efcda0540a829f17b58a77ff25578b3903d93441f6de27af25420d39976b9f31e73f0155a261d3ee408a48b5674b1b8ce246c9b92d6dac3f08279f5220bae4be3d45ab2bd1be98001ea018fd638243eb08daf94dd0efe1a5a0b324d46c85a92c291ff3d4d69486c727402a02f015c6d9dc521cc887fdd365186d93a8bef8c414e860115080f58c423fd6418d21d7902377ac5811104716c5a1a5b40adc8a1f301192a024ce1d94ee0e570c54706b694373a4a951f2c2ab50788983e7c2b7d472ba3b3739be3a917d1bbc27b9e20080d574ce80482e22710d382f2f58f0a487a28600cb8e7dcba51c68ca87ba07d3e80cfc5244cdce367b0f448b13e20aae268ad75ac024448c2cec19ebc487c13a7793d9149e9d33ffc4cb6afbae3f4f2bc2ecf5f89c52592e2e00297d61a00b8e3d2ec5533a0f62d3808e2cef91c7152ae06ac7eace25973b49ba5eb068ab510c3e3d295c84da8ab22ec5a0dcd8b174d0ba336f660e28a2589e5a249b58883254e1b7d4612d231c5921f08b3949a08af3d5039e73a9386738b4e8dde470ad0d6ba92095232cf8ddc1d50c900080da30f99e16522a974acf7a18d1c12c4cdad42135dde29c46f5c8909de5ab60bbe8c760dc837503c80f1853e1ad28a57c312a9ba25e524674f7ddf24ed2895613b72b5c2ecb516a79081af3751a283655eca4de0016a99df5aff9c4e3e1aacbcb8cc81b17ed3b4e46291e10ef4a75be43db0b408a1c3c9fef794371dc95d4575f70edd2a4e5eecc7d6187b2d3a4e590173570fa58a118c92f31503122f435077f060e9e3106efefb9805302300a610425b79618af9f6fe94b84688183425c061960ce7ed0dda7cd0737179c13f2a7037fa2a429b4c2835700ddaa185106f2e7d850fb44857f31cc44ef391067a0c05cb031be8346c785a182c3840459d4ef594a942f36720d8708144a06bdb8cc0539ac88da2358cadd410a23293debebfaae29066532bb63890557f9a0e07739f38c51cfec994fa38f6a6fc0f8b8a63a436876cc42c2b1e6333f11efba6e46e0861cc63a2ff71799f7a876859e1eecc4bddc516aa43c46f70104fb4eba6c77d1aece09c40185ba49b611f6438e5e31b4019b4a3b323ae8e3efbc6f1bb76e1254cbda8dc338b5e2d7f402fefdc0a2f941228379a82e48890322a85a3851657cfc551e8f631fe113cb7343d4b52812532f9f4e8061080d58ffbb7dcd6074c8455b20e0c117fdd04ee63c497621e84e2cf42943d70d9a3995cce589bc1aef2efa63f0ba83ecbad51a74b185bc392699641fd9dab9f3383c0c2c79c8ea6a379d90802964b986d6fcc3e012a292d268b04d89cd2ce96a507387f6444eab614242eb7ced5d8d113e2f786a24b08508e54397048ca9a895753bc0af5f72e1f8a1fced98c54c7a8a4b02c905a84866a3c8cb4597fd2ba9aef04cf2f4ee8cf48744683c476b091bd0cca450bd7476b9dc5c58f061db4c436a83a8fdaa020edb2e9f49fabbad9f9997b68c89de827ee7a3fe2a93a8f9581a056a34ad19fe69a6ca9844511183e28c49805823d7e49508bc614b7108506d765e41e829152f2dadd12683fc42bd21d87abb49f403c5c38abceee5b3b6ba6f9c9225190b7dd22f1e3097b6f8d0d0eb36fa2b0a6dbb5cfdb033d38ce089486c7201b46dc254e1767eb0089c1231e84a81684271b6cb10b3ef9cb262c1cabed1021e02c81af8545b03f4656cdb65657270c25350e12c26868ed55713858b87b5fb12d1f2394767df2af3506014c91f841c01a30c1b238418092ab1b6c00a29c0e5993dd25e22010ded11edaf1e4e7ec4e2951afa1e6c725a92fc3a9580b0afbc2e93eea6abb9e63ecab46b32da74482437ac508348653f423ffceb90b5f0ea8961e83bc5331c492ec4892d233909f8d69b3774a5a0bc697ac203e4439d513410f08d38893386a920502911f5f34b14ac50c034fdbeecbae22d3b6cfa158be7ed20cdf5fdf8a6275900478acfa0a9cf97dc3290c0784e95a57cb52b7745444db7aa250ecec77a231ce64486dea3eb40241503c86171edb79d9ddffc3c387aa4e84408eb754945d92e0bf9513ab4989467571be7ffe5b8921eb3e0a4d1d405efecfc0cec064800d2348fe6318e137583a83069d3d4c33303e70b3e0fdf6f2030a30ef99425fefa019370b421c3218de32082fbb3ad5fa3c36257784b29ddc3765e7474d721d79ef58a6ac98bc0f42047687acd2cd0ab7d34a6a8caa7876b09099aa208e9dea74a9d40305e3ef2f58d4a3800860979b232ccab59b3cbc43ad93ced1ddf0b49c44dd6ac2f39ac7790b1743a7756a6dfab531560b3d36086235ead32540b27c6a3b4e4c0e201d83a6273b7a961d684e590a7c65e55da29d7a40d9492e368dfd92fb526963f62c9dd519281c1629fc0229854f669964dd6a9d50b70542dbdcc56d18cf5f4625f35e5cba748b9fca786a8a34f6a3524c58f496052a585c1aa4ed641a03070446b78c06363fa0f00a5b2bb79939ad01c2c47f41819d69ee25bb4b87df15b98a77a2ad733b71be564dfc25d81c8f4ef929bfed506c19e4ba33bdae31730d366a0c8cb0f0db8d07078c8aa6adb4f4a3a79b437075510019c884f1f6fc8523eaca36aed07834224448dfdddf0e70359fd017af4517649bc021c79ae139ec5a77e236eab5a249e3ed0f6de2b190953975032358b3f0eafaa4e11525990acceb7009b365ea5603f21eae021710bde1ed9f610e0483143aa70550ddaf01208f1040a39b18387cedf7a68c1ff496a2d911f4d6deb71a3aea366017769ba2b8d1fe28a7716b44a8f9b8e4f7222a4502166642695d5562133710203ea758712812907aee1edaa3812bae53f80bcdd1ff0296c4aec8ad711e13cdbfe581e707dc0082e1e4499d905a0b0a2f2c831532beea556d4350e1bc4286038fa119d87faca8f3ba26338274561f18272c29d8c60892f9eb8d2efa49c6854e4ddcda08df4656983d7406c0c8d00a581c9efaa0e6a5e801330961450c1693e8be43d883c5510636cdcd98d4a01892f4a937657c64f322687a07a4100128cbac98222c74045ada2e6a95f7f8fd17a0b2652d0b9eddeb610e6952b2f98440b42f33ab4e3c8a94b9c1ba589a72c93ddbbeaeff0b5abaa6d27d2eb0fa71c6c7f36ce3b7bc9bc964b40d72cfc642539c4b63c080f7909d33da668ab24d06f02c00f2c255b9cc014c1246078a3eb4cde4b8b461239500c74816c87b3c086c3ff078ed141fb6e097258a89b602cfc7bd71b210d1de4195afe494f8b79110edd0d2194cd3418374c66c868b96df89a3f340e0d20b1fd1ac3f5aea0d58cc10f5af0bc2cd66e01246c823a3a9fd32b1756d0fa4c0e7f2e186485a6ad169d3c9fe2411862636e61a66b07b14716b601c76628562eec1c65c2f94f730b2d9132ce61b13f18f06a422ba83b7333a81201143a445c6496229770bc0ed964c8b4020e97912b5699d6247e0cfcbf6670a62886d0b85127b3a17f948a0168057b12eea846af66e24635c06d0cb23e68fbddd674e9239ea9295043afec0bba0c3408b5846a85ef82ca9347b702bb395a4f6ada0cbab21918e253756b4507e8ec1e95308c45154b40fc3410d990662e95395cf65de624b709a030a083ca5126692bc222e3216bceb32e35424f96c871171ab8003b0f791126b54b00ede2cb34e518e4472745b138b5654e65362b9a7320560a10ea0f4d14c453d65b925f16d9c884ea2e28d18e0980e7308d616a699d5134541ebc28a5364162385d046d45c5298f7acd3182e7530392f032424fb7c7a71f9ed83d0413ce27722119190f0a62ff804b5c3afdc979ede3c09e92571436b2b7d86fba508d6a916b564e28825cc674e915583d178cc5cc0c8d20a6672bbc72400a24756f63909110c75664bc96ec112144043046c091d71d136901fd60641c88bf4f7d4a72117acde01f68446c2bae34b95e8b40db9f7f1e1d20e575d70b5f635a4ad5b1b648c88faaaa343a520873b5d663f56f67aaa8b5a6b073147a138595d8923577aab8410ad65e369e30a7f74d70f58494400a4ee2fe080dd650bdf7cafa58f6e6330e2679fe4fdd763cbc6f333641d84e415f902e5c5946c68628cf7f032653642ea8852a5d1aaa63e71ad41347453af6957f467bd6f79c8253528535e485c1abe6b08922f973dbea16ae5662af5fbd248cf57f7a356c5089a182544b1972dd6e0f0d30277026d716b3ec08ee91308501a239a536d438e61fd6d7d47fcf8cfd41c697f6721a304f6894e0b5111c34dd4d0800f35a29c28a5af15b790301b48302725266924f16b1c4bfc9647387884c545a793a8072dad9ff8789961329ac2a2c1b4344ed2b9a69ba8812e0f48a28c6ac1043319e314efe466eec57a6cd518adfbc217df264f6d73c844c349640aa4f6937830f05a65ee66d617c068f3f2fc99a63914262d989da9d9966063243020f729a74d2de1f1bd6f2df71523c0167b3196c878830a4cd63553af605172d8f6145d0d076dcaf667db9b875db53a7c7727bbab72f2199204b2c063b822468a434758265102c2ea8b44dc202b234cd000dd2c97686459996aceefe57e5426b08ac21d6e160581aba6fe480449896c44465ad2f15e82d8a8c132468e61cfdb9a6cde84e20fa4cce12b6dcf461485a7f5f11ee99766aeca0319f83bd5804e1835cf13045e7636fc60606c322615173e770db08a25d2959ea3222d6694833883c3044a170ac1d2e773ae112119776ff8e1fa588fc41b150bfb19fc889c5f52ffb2da8baf534089b169b0bcdd0cc8653d5c4a77053346b85712f0b2ec24ea95c650b443439318b434021aad02d5bd30312a152a80096c2cfe93909589574640fa4eeaff6848370027529ae498135cc8816b071b403608d042da893378cef99a54a9d1ddabc12e78dd91c8788df7c49b208dfcd2e141ce1e19d8599739dc4e6714f7f018e8645b5e1db45a435bdec30b24b47382e4c0f5ca42d0045e9b39f9a38f17af8b33afeddd140761875df243c42f3f763b4fe1d8b9a35771d9c904d77da811353dd3eedf38a102e88ef3616132918e289b7d03ccbbcc62157b8af8cff2eb9cac2e63b0119d961a43e8fe4aaa49d89101594a38be042af5151648ada9a898e274b9a256dc0828dca0a90a0d419041007f84e42fde69a7015c8cbe5299d14e1e1c51e58a9341149269c20ebaf5f153f6de455e47f90577875032e8c797243731acbad7079df866b73c88d0e967b22a3599153bb090f286186c54284b1395861b280c89380f538a89158668a572c539b28a4bc056018a5c52266345e364e55e324a06031f1cda0b787a00933e4f21e75646255f958740a3602c2ca65b8993205a5b46049cd813161cec4c5b57495d539e68140c790264e18530163b6e1eedcd1c92f462ad550dc8a235cbdb73d3ff004227c90ee139fb501a648366c9440123f2e4272de869174f89cce2dba82bfda55d05ddcf2d6eccbc51dc5ad1e9b4b12791581c884a784faecfea08a426d7577241672ad0b507113a07260084f11bca13a841ea6bfe87636c29643e42151184f75fa8ca3f637631ba6d5586b9ba5cba6a5e952cc2b97f1ab0c1784233e54916b6a8b91c15506e938ba3cd79f7c03a2abda4f91226317ba5de3c77b63224497680ed06294bb3720d0be481f27d651e56505fc478f78fd8253a2a368a2d3fc37175caad161c13163c719cd0a5f07a228ee4fb57b7d55466863f1d33e1d3dde52ec0431e08001ce7882bdaa20c6c7f96a887a027122d07ca59d81a4d05006063f19732f8f4c318eafcc68590b8a002e11a44c4dceef75a992e20367c7ed608ea1f018d84c4549c408f030bb20bca059e95dcc8022911448eb5b91c70b86be14ec73410d05794fe032db6ee224279a649969bb7fd35c4038561b27014cdbdd104d437b3b3eb8e21be74b8b9e85d942eccb72737d12790a82dbe2b0b9d31b87316e610d4e8ac787d482fc060aee32a7517832d84ac7942aa347bd68b55aad77196ab5dde7f85beff2980b40eb3c3c220e15b1a2d4acb49aee837bed3353cdcc9fa480b6934bbc4b7822d24e7ffa934518b8d9fa559f043f4b4265a47ce30fb2c384c6fa8355bf8534b3348be2dbd6bc26b33d46d388dc276daf7bad3e8a20a10f716ff5d4b1683fe011851ff74802d564fd541c163db5f5d193f0b619a18a2d82ab362ca5e0b38a15b1ae1f5c4d4401c0fa67b08f71470d1aa27f430b384ad6954109a383a68425f87f8714a14c1728318a91f89d44b4a404291489c18e38c8ba496a3e051779f5f1e7b7c45b028e93f4a92dfcdb3a08193afd410ada0c244143f34775642b8a6ca8463a7591606133dc7c25425990998e8aec86d86803226c66776383b3b81af6bb421024d3b3c1c19dc4e84984488f6c901b99efa0f2d3de89218deefe7d90650392e00c5826f2a79d6c3cb491a9bcb6d280d42bfa346f37f52bf570c68fa24a8acdd5aa354861210d096fe06b948aed4d5a2e25ecf5f829f4d831b4186f3681aa3a8ce131a5c3924da89c9f7a102ae3d4abda1429166bf35e657fd54b56867750d109614ca9b991096033fcf0b4ee544b47eba0c0907648d5474d46a583320c6da717a7d15db0bd7edbb6ab305fb40e8baee1dfadc15a4736dd2c06adad79efc62afdf2f4c64026ed36fa0bbf0c03969639086b372bf476f208212445adb69e42a2fe9f18bcb28ef4668801743b8428ba76807a9ff10c3b47e41cf7ce34833e5543838b7b6853861c030493fafb22e6a4ff4e96f570fdab9ac1489bd9f76a2fba70a64151e36d31c9a181074b9d46f6e92941a9b5b6c3387570f6bb82cea6c72d0d32c846dfc91064ff90508c7e4801b1eaea5c32ef8234504a52fad15034f4fe2e89dd12779c1105fd956649ab4cb45f33790508369da413099083827f5e6ceba21c0b7c94a1956081992c015ea8115a21cad7cdc19a4e21caa523313d3f0786235961920420ba3734e468308359984ce06b43140ca69996636c8fc2d9ed0dd44d436004837f888ad68e818c908e017ee11858d577040ddd797b3c133dd57b8fc0baae69f829627b1a3da1766fa5d4c20e78eb25e7d5f5ca7b65f6ba784f799a3c33bdcaf67bc40fe5d27b7eea1a160478b8216f70c7b344e38f7e47fa5f608c73d5c102370124a33b693b09fe3a1bf9effb4ecc27577606fc387eb5ec9a2740bf0182e19d0f47dc9c54f497482696eb3b61221890a6c453136891f84b5cfc21aabd9bcc0d47046bad94eeb770c8849c76184532d59034a92668441c250fa360fdf4cf76a5a9c8c525029fc7c000aebcabac934834052cd6a02919a87c53e01c22618b46f238970f13b17a0c9fb4f5ad911a403638a927df3e8439fd9f98652a58674153954e61399fa10403bc33510b2497bcafa03433c4a1480e8d36ebae1139264410fcfd3f15af11b38499f7928075958493100446930aca5ae46f2b50081d5b6135bdfaa44c09215aaa9101bccd0f0845119949f12cb571dfa883e964164121334700f5abf884e5a283c2d3326df829f261f493176e5ea4994c6ac197f88338581220ecf9167959f4af82e8be913dd8c1098ec9d72ccecb85706a5f75a17dc4241aac561ce03be2980f8a5751701f603524a44b5901506805a8f492813617616a3f60aa4ebe6834202602bc13bb5f8ebf502add5e0e303e746ca6ae2c1a0a1905fee26e7bb32cccd6fc91fac09397161b40c8590294a626ca5de95359495771939e7907ed248ed851069bcd19a8df4ec0e216a329c1ffe95698e2c95aa4f19d5e2531db1642a218ed876a79ee41e7501bbb0c90ad1c697fb2a4f3e3bf58d8c18b65af02c89fb543ca88b5293e27fb72027b2fe70d7b9cc3d32cf1e838ba3e034dc3c2c473a74bff39261a4bf1bb1bacb48f4ad500ada1c169d2e7ff9d12f1fbb0e31f890920c908517e603893fc54a3224cc54bd883e23811bd4e09ede5efa720c27b25ec558c31ce1863902ff14b0e6f145f79289092ef011b12909df04a098e3be7b37ef82d245dea6bd2e2118501b2a4047a0041db050e555fe8a005c3689c6d36a284b0a81afe93ead71f01d55a2cea4129e0803f9800989204220c8ef9c8b4c84d19da063c30335754ba70c963de3ce82d3db95d951c2c4b9c5d987d7937ad14e6804466a85aeeb1e51423a2301bfb68bd6177bcaac9578af652cde3ade175a0569432db90a9a40fa740dcfaf3851e818cba3baa2ebae1b8145c1730271403ec1b118cdd88d93047720864cfb76a2b6e68bee9bc73067f2677a89b189e363eb84474f094f7bad4dad086a65ca0f6db9257ba96f6ac0f89f4a48e22f8310f23b9adf1344a2cdf975255b3a8a4961c2d60e647214f5124d28c3175cccc003f2a46fa182de4f5fde19da7356b273f1e1a584cf17f049fce767260a4a0b13f2811a1003ea8c4c4bb8b1da9b7b0ba043034d35d13cf089202bf3225be986c106dfee45865b6a22bd4fc963100861303effdc01d815216e1d48dd0fc68a8f80fe8ce1557ad342dd7b28ad655e8b09bda8abb6827d1b211add8e48d043da8b098c24a340a22ec426930354395492a37af0c8f958b5ef04de4ed5ff4e5ec29b01f94c8051364050d88cd1dbf82dfcc22912111ef0a7e0e69795cdf05a30159c7979cbf689558bcac651fc3213c27bca7ae7b638f08599633f7d21f4f38bca04afa768c2e6d18c4a09e6c0e953b015d7479c7dcf891885a12aa95ccd6a08f21f449fac5d200d8093bd15cefa442db3002c4457f1fda373db41efb1caafaa6cc2444de4e51b984bb96772d7a3f6ccaeb958b91a5e4e344d605b55d53229b98a7163012fba59a0e91c5dfff3304b777a24aeb2b53e3320c9563a4702967b73caf51739bd9c20131366b5507139f97e0a810f33d82e5ddb082a5564e68a4a4188ad4aa6549bf7dcdc7e2f970b56ba317651c145a4a57393193bc555dc5468c6a77c2be61af72d4b1b8a8a2577f55837f515db7de6e201832e13d0d846746e087fe24f9e737e4d340e8a536b797c91557009a9bf56babb7305a55a8498cd69ae75e2d9f2cf9a1ba9fd3bd27c948420225a465d6324499612b2151ccda485a6829b5ec517917c2d7ec35ac9cc3ee9af25a558a3aa2f0b54359ad0c2568168abf12ca68fa8a561966e729220c938fdd4f3c229b9a0fe1eb78201b861491362848b62b7fee26107c3b29d4eef46e71ccd6817ae10025eda29808770a2942bd853a53b2b6498d3d76023e993d19d765063a3037668fbf7fcd7213888a2d940aee4efc3e35f49331ccf7f0e979aa31971a0d58f429db9cbfd2f1b6e3bfa044738ba2f3f41e9e7ef620f7bb39405eb7465cf37720116a77c9e211d88e493921694514b8c25f3e6ccb9e11aae00fc88585ff035776f1b7d2c8e030da278db6d2e36302148c14f6af93531a7d90f3019d993c8de6427b8615177493a9521d2660e25ee6055ece82ae9e3df8700b27c25f8e8ce771dc62e991bf1cba754f1afbd09ca1488000f6e22edb6b8b04a5ab58ea6d79e10077945213949f942e0ff7553e13eb447e9219cfd407ff3b846702a3b7a503185268e5859d747df25c388b4cc131189876f63c74ed8ffec707222cd0aee79452581e6bc5de4d3f0786a53fc88a72214d334610927ab577185d8c15a5c9e7cf56a4167e980c996b2fcb0d9b577117176b03035bde9306c1c5ac23df5aefe8a8d93d7ff9344eae1ae620feffceb077dfed6f4f454768685e39bdea07a2563505e328f1f456c62bd594e03b4d03774dd0f01aebb014341c0c05821039b5c051a3eddb7b3b8bfab319f7dc63844bff22363c878f33ec3e09b29f288ac441da1929608302f126d14c6c0c16a62675a8cf181faa7f46dd4385aa770b355770ddbd7798d588e2bb52149041184535adf1d2b80f19b88b02fc268a64602ced6f64a25b4184c9375cd9c918c2ac0c511d5aac9ba7d7d949454120cd277c4dccd1792c39cf39156b1ab726848526bb49bb6c0793cb80ba18dade7f792d811f84831e9ffc5ab39b3fd544889dbe8f6c1ead7bf8f27f4e9d06bbb8f20f188d51606c93408f0739b4ceb956ae76c5eaf56b1b6acf5c7d3d1b4a853832ac194f07c0ec23960a9cca1eee36eba5170b499b056d2624044fcb651f84181c8d68c266944c5c41c0a2ff77b1fa4255ea198fb1ae859ff2f929474dbfdea78a1400ea11ec0a8b89c31252d22b52db8a9ef260413caad43ab0a4a1548485d086c6052b1f06f90d8ac419d68e5120df00d6f9796d287f4d4fbd98c18b3930f5cc7bb47156a69f9aab9af95070a9b851ef89fc58f8896dd365fe13409441512bd5da30a808735d4a7bd13775dbde29d49acde79638974d7cfcff978f1b9f38e5c86c97406e70aefb5b6ce7e366fc9f8fccfe958f0c944e0051c902711018fff2ce1258aaf38b824cdc0b1851048402e536ddf44b6a1c4cede4b12cf3c748c28004374c93aa8abfbfd020731f8c3565251d2dbbc1e3cdb489888635dfa79269471f5d74ea9be845376443c86bcf162f7586d2e7f784027c90231447c393e0f804e0b8c668203b660368fa9ed4d0bfa0d37de1b018602e22c5d80a6aba0f15460e288f0608d2d7d273413a3f8c1f995ca050933b502778e3173a05a59a7f5a84e4938813cc24081a6bd6f0be050f0638694145070d42893ffb963f2bf79c164d94fbc9d8bcb6bfa070d32418765b7b043005d6a466e23f289f3b267a6d183715339c836b36330c5ebd0db50c6a53f500aa861d093e00efc37acb26bb56a05de2b1e444a2352f2307421c915c1b2ee562c8d5e5b5c537719535582ce7b8041313d3c513ae60c806134ec229863c656404b1691629363f53727f2ed0581dc2831f4874c34069d4184848c320c1160008b08682ae41a5f6e8df5ca0084582d2ee7e8269e7b33de1e9f23e5f1c67a3994d4126e5fdb9af45506d12bbafa7ac3be684d3f98dd975d5bab6f72281ef7d3219f8494a0421fcbfefeedcfc75481b29b100a30ea11a28eade267a409368fda9273440321929a92216d141ed321b35038f8c16536ac62633524624c550cc448bd8c778321fb8daf4fb2e575d1d65744927458c2e603109743730288f46023b8213faa6a3d122200e08466a32127f9b66d52689737ec2be7553474d0d5cc12e9df7f88e44be4d9079a17617dc3c50fa0792f543df18c3437ec99140c6991c4170715bba2b867df3978782de60584b83c9886f0702757cdab68a315847938845a5dbb25de456df43699d44a7a0e892a885cfdc9ed02b7ae6d5af345a7ec6e1e44166abe995641709e2992105860d0941b8f0b8d2f9ece9b8bb2d210058f5896725912d2582c5a1397d7eddd7a3b69f53ba261a2c2c82a64203bb14f5231a3de37e472d3c93590d6c3f725766ba110a1af2c5fa1d2069d97759068ba478eb915780dee19143df7af2220d2cfa7215435d5fe8e6a61a4fea4fe06571da6588377ba86f7c5181215bb6a967444507f0444f82454e128e9005762030dcd7b05292edf3265d9942f28d33e3d6f399c2447fdd09cafdcb4a527b17202841d27cc092331fa8c6dcb9bf943064ea10ab2e98cf44e8bc516a9dbb934dc4da44d1c887e19ed444f220f3ef257322d60ffaa64d8a9700d1509a0644e1fcf78ef1888e87319d9d4686b9a76daefde6fc5877c2a359ec3ed256749af6f2fccc1d2290d169cf2d05c28e85dce65cc2bbb3583b544515f9b5b24b426a573ac3738bd391d5c6588a421e6f43fd5cc0c05387cf4c5a7f01ef0393c414dbae94bcc596b13710173e9728bf7d18910c16c8009c9a198946a70ac0fadf0db5cb4c4e2b40074c9935880272f49204671fc483c9ba469970b75ac8bfaa2dc41c2dddf9713e36a41e4259910030a4b17c5c9cfb01592f818294c55b3f96177877c0a4fa2700d1985cbc3d644a253313c2d9d8382b120ccc35d2d4becf15047016e454443766c31d6296b9af92544d8147251a66f24e4f84ec26816f37ce03ee090684286a76291c6986368b4203e69ab3a770b8663fef7b853ac84f1dea9c10dac34e8b7b29bc8cdd0e470b5ad0dc37bc23dd5c8dd7befc687443103e2025b29dd102b60dd944baf747217e73f918eef9a8d76a8f82e39503c4101b3b0e2da7be8c75b388f5f969efd011f9a2cc0894b8511a142bf8ad79ce64d3591bf4ccdbf5b6b980eb91fab731705dea7546fdef8cb2d51719d41d39225616097ebe59e0a994c748a5de78c9a6240b5c8fe6c9507ca71a7303e5e8fbab27caea03359cd95a9ea1e4024c4bcab49c06e8206c1882dbc1db358c259bc9f04ca9b11aa32f821e191eac39b6cf0abaf016e79e4da51a25c4d9cd18984024d9ee5229865f87aafcf2ef7a164e5e3b3aa5cb8d9ce3f396d8244f2a352375e00a1fae49eb5dcd16675425594962ca6df224a987ca2946dc164f4545ac9ab0c306f58c5491d5244e6e5427848a5a498245c5a8e1f7c49409a6b9ed7a9ea9894a563cebe6a9673ca01625c6d382b3ad0dd17a07086ca5184e752f8d6d086cc3f274186aadbf4abd4d51114e2482a89028b68005550751aa81407a81d49610d42e1c2f6b0f501ec68225aaaf0ff4b99fe36833672c7c9587f8f97611865a394ae7d12ce0997600788722a099259dc040692b6a00eca53852fba90ec23aef205d2206b561e596396e9207358760a38cff4edd1f061b372cbdde11243b958cf0e26063119c44d4484db524627b21cc9409a421ea06abe7cbcd3b06848333f938c74ffe7721231b72823172346fb583d19232e6e41288db4c794e0274100f111afb35a1b57a07b65afb99fff7804347fdc705eba8e097d84f1130e12abe8993803ed25c5d21e9d2ccb8d9d80afddad7172d6eb81a6459f470fe99f3fd0f0d8dcb88847557055e82d9ce2163da50b44caddf544271deb8cff9711300ae6048e7ebab0aa4c361a668c049c15cb59e3733cd1cbdf4b2da705264d3cfaced5988831e9af56434ce8e8c210b73a53a98ab990c864623480fadc149a19b8d80633731641a56e24570de11663cbcc71098f350fb92e5aba36ecfd448d97c6e96ceb7db4be8d4d8d36612a66f674251c029cdb7525053051c85824f653a5ea27b342926b24a6fd87437e94468c61caa1c948d92133d9095ba154a94c78fc043c6f641030276be7fa4b3dae2e8e9c1dbb62ada5146d21d3882156b476930e6b90ff321c5f8acb189943bb58360083dbd5ee22887e056600c523dcfef0a189b589b43cf4edf6bb2b46050d3a5c9a8cbe91af5554b27b6d5781fc2a37762279854efa418c807ddd5c947764ad9556098ab74f89c7527af94989f69e35f7c8d69a3fa2315e0f1b6aa7b748763fcfb649fde40aa8f6906c95d9f00c862298ffcf1429932a504fa8d97ae9b5a6ca87169535ccecee8d3652104183271e163a98d82da3d4e9922c0101f3e9287f3d1904e27437b5e0bb5ce365a68ddde9b0d9fa56a5fc9dfbd866cc0cd1595d050ae1b88040ead97a5b4ff64151e5d19a39a463292581623f6b9afa204d08c358eb24219e073d559150d7ddf57462ef2bd6e9eebd510687829f6e949feb5791339794ecfebc901e79a79064d35c9501f5112fbcb1b0126f35423475598408c24c5ac60d3c676dfc860c34bb5e7f2ac799ab72e084e35dbb9d0244dd94e87d7eb01b5e62d234edde7fe59b1cc89b3594c3367bafe84c25344010341dd240838e1ad6cf612b996164d75503f1a4426a4a25fc922e8b9ad4e17443b75ae4e7c869c5aafe1a3e46a254f256a4c8e3b8aa8a0bd7a9e3f4ff067c68c293db1532b9496e7cd13fd9971ed3ee85f99a793f3cf0924fb88e94e2d517a4372d4bc90d9ff4bd6d24c49a81d455149b530f0ff9d065105724b924982f4501f0246cd48825d2c541c3d4b8d56a34cf4719934c39482d8a825d220af249a4c502d3e42d2761c13d8548d17b20bde55e45c9a649220f599b0fdeb2496254b7c960d4f310a0b65dea2bf0918237d5d89af158b8aa5a83c6e7fa610020843dc8e06c1c4e15c361bc78eb8ff92782d77227b33af321035ffcdb282289ee972da4dc720d55f147d65236f5bf49638bd36054a59f2d8f57b6a1415569d8817169da4cd75d20dbee7c8632d6bba5713b9d7f089097cebb279c73d6f0d054fd5c0235bcc12918e14916345d0f71334c920b07c5349c63fbe7c299715a14caf2a211eeedb442b0bc52466386056dc2322ade16e6a34087c9c71a65de2fda6e45f204e61fe6c33347562871d41c072438248b3d0404d749dc601aa74478b3150b46439fcffffffffffff7ffa681b21b4b5f63ff9524a290dfc910b0130a594524a2989851c2820380a1c05ac14090b11a1088c08670868206b558cff59f2ddeca2841a672068ef78fbecff1d64c70c24ab9c418651a15c6fd6518218dc60418d3290b3c39d564fc91c3bcca8410682bf068de52a6eaf7e8d3110dd4aa7bc2b5b5b191203293fbf766f78e7fd648d3064d5aae376d575752df71ad582fa13fea983b20618884195fe34796ab939ff05826778764f31c6afd87881d4623908a5f63298a8ba40d4cc274fac63dc1e6d0d2e1054ccbb297c4ae12d7c3a6a6c813c5b49c54b32460be4f2a472be28db1df35d230bc9c69bdd858c559d6c8fc64ddd9dac8105722e9d4187cb1c6446194647076a5c81a0d4d8088bf51e535e6d05821025ecd2ad378cb90a2415c3d8c94d953dc61b46192dd8316a5081943d6a55ceeb3bdfe686eda0c6148899454c2d99a9644aad2105627d8c6b9bc35f230ac40f9b728a6e4af75d43811cd552b63d7dc233c71a4f20ec5edaaab05976b2ade10482ce49e733ffd1b69de621d4680261e66250624188f253592610de3c9458df9adaa52c81e041695e8a4fe9b5ae1248aa42a533ab2e09e455fdf4bb626baab51a482079b4e8d16310376a2fafe398d7710cd220d43802c93ecb6707eb914109f98631ca518629420d2310db47e6f7e27a6b4d452068faddca0faa1a4420e51cd43bfb32358670bcda5bde5988fb865f3115db4de57e6a0881606194c62af5dbe9461b36fa86e9d85186183a3a1824fb54ea3b5ba6a89a0106c96adddfefb5b35af30b52d21bdd4399feec5d7db1e79a7d8a7bdadd888cc6bcbd7e626945d90b62ce716e93cc7c8db6f382a052b8d0fd723a9e0777414a398b79cb4e31a55b57a0a10b62cf5cc7ff4caa53ec6dd840cb0539a61ee56726e382b4d616cc326eb720c54b6eb2054989d7e0df994c33f9b5c0bbf64af45ed7339e0a23c2a60551349d28e9b95fd4fa1ba0310b62b25c612d6991c1feceb1c30c1ab220c75461a62a367aa38905c1f46a76d3143a6592e160d311469b0e31c2d871c60568c0829cc2e575ca4e29a724939a5f41faf8d8ca27e2d8f127b06103c78ea7e10aa2ba65d4d777395d523783462b48426eea24e4e26767b082749b79bdaea6393b691584cd584967d80a6247a50aa22591b6a13f73b79389031aa9208baa8a51974b96d80dde80062ac839945225bfa583a7bc18344e4134699a9314139e84f6942006378240c31484d139b558ba9db35c39430c94c30c6e1aa52077770ad10aa9a2298363c79f2071ec7833b2073b2e699082ec3d2a5f4386fe8d4138d8d07ad03d0ad29977f6fdcadb5d07529063871918a0210af298302d9e414e2314a40bf33859a5331b54344041de19917f39a5afa6c7ac05343e41aad3548b5d59faaad2f004d12ba5d8a449a913840b9ea925bedb7e774e9052f0321b0b6a5f41bd89ea3565b65e652cf3d425d9cf167dd79f200c31cc50418e1d3aa8404313a4fe9cb49c5096ec3c2813c4a0e278be24b21e4bc70451ce47afadc6f3caa57109829cbcc55eebfb26bd25489b629836f5384aa86954226dd9d3d0394b09f2fb89ceb43c1d2ed89338b7f49dd4312541b44e9f2b7856519d561a91207bead81d45b45705758e326e909103812007da4146185d021a90e8cf33e4f41a238c1c3bda76e8c8b143078d47647397ad597bead516a653273d17ff479438d87294d1011b36c6c85146a2e108f2f96b4aa22abd77541a414c4a75d690d9971e761a8c20a552b1daa243e6accd2288a15b4556fc1d6d9f2b82e03946c7884b1341b4cd2ea3920e2208aff1a9e635e3e54c691c8298a25cf8ba8a22366a340c41d650a26285fddfac0a8d42387662aef56d737a15175e1e67f92704f92ce67de58b53319d41104e2c83f85872652143431024fd9db675e3d6193e21a0110872852c1d96ed725096d30004517c4b7dce16c7ecbb3f90d6ebbc8265b83ae5f981b439940c77f162bac9fb806b9698decacdaa89ea7fd0ac0d27d4e69d980f84b5cd1d745754cf2b7cc394c61e48e1ed794cd9669113b51e084a2c96ee9c364c28e9962006376240230feb9eecc5d9c69b695ee8a5f4d6abd9c7034999bd7878667720bbfdbffab5de4691861d487b7df6a5e53aef65eb409241e613cafc928c15e940503bfa4509ad7481c61c086f32ffb4ececcee85ea0210782e9603a5594fba02d038d381047cbe866da2f8f331c8849ebe9d79768d898de40ea8fd36f39b5b3ace806e2c7062d9b11d36803495dae3b37a45ea6990dcce79ccc8b869597aabb7eb758bb87b6ab7b0da42aff9c6ca3a592416a20652c4b9b55ea83b40e080e8d3490bbe378e8c9e750737b80061a4855a35b6e2b895ecd6720c68e121afaa7ebe19981fcbaf19d2986ecac8d0b34ca403099313e8a578cea9403023290f737878b564f1b6fde00a381c618c829e646bffeb28c861848ad9d66f467883ef1d10803c15ed44b3ee457560c18081674c9907e5fe234c942a0f1056286076523535b633e34bc407cbbd9a443fb67be0d8d2e90a487e9a8f9d35c20efe6b8ed15933ef9b6e085966dc6e9597baabc28eea1a1054ee3b6e2c4e34264bfbb1dd0c8024958eeeb2533d1c0023985d2a9c29a4e2a5e9ac6158815df37fcbbfc5f6868588194dcf25db210aa42b91a5f66eb39b35e6a59f93672c4a70249a746cd689f63eb6f1a5320c99ce4e6deb88b5b3234a440b090a2997fd22df349230a441f25634743c5bdf04181e829b5f489a9ae54d913c8959bb25518a5f5dd710269d74c3f2c460f919b26903309a13d42b762559609e45013eda6354b20ee09f7fca91f3f8baa0482d29f4c279f3b09e4a4dcd466512efb1e238194627fca1a61d13882b21b679727b7e2b1ada2ab7a664e75cc9f2e1a46208a9ebe319d53c798e6041a4520ebfaf7d675aa6893d12002716dac9356eab0bc680c81704ac3890f4def492e1a4220781297d6a45bb0e049c120a825ab3425ae3ebd0718cbd6deb59c897ce9be69a6b80a6a83d4b0f8db2f88713ab6e6f81fb165b161c317a46cc952462b28a5b3ea05b1c3087fd13969cfed2d8017c4ff1fd3ad60f62a320bd84517da36229697762f2ba7c327ff1d1dfa82122e4017a4a0728c2784e657d150734110a657aaf368ecd24a281f6141bc0fa1cf5e6bb487af20e60795ed84e90a62cad56e51e72534d6ad2059f8aa6c90a331b76605d1c32b5aa87421b3f52a48625b7bc5ad56054964beb647d3aa724a05d9e4a7e89829cdae840af29f70f5ec6b0f3b3a05ff396578bd1c3605e982fd59ceff2553864b41ac30234286d117d6675210d62d7a4afd28c83955785c69670b6a51904a5fa5f58a99e3ee5010be62f0ca29e74c5a8382b8e13e46f52739177f82185f3393c620aceef50429ff6732937edfef7682301e84124f19756d9913840fb2e972baa99447de04697fcdace48ec71cb22688fda2e2dad2535f5226882954e83c9e35878c30418cfbb9a7456c2a9d7309b2c91b39d7fcf1d45882e06adf9963a5a9299520c8d33397944ad3ed2941106db9935d5e52393e0992dc8fcbecd962329704318edd77fe9fd10e4782f81ddbf52a3b420712e44a9793867f0ea6e323c8162b894817d318454790eb627dd430f9bc6123c8e963e6ba7aee4a3a4690945017fa25b6b6bd5d044168b79c0c4de2baad228816e64da7b5dbbc6a1341f2798b6fbd9d849f1041ca4ce2c6463d7d45872065ced9826b8e21881b976a1a834aa93a8520e9f9939984cef0b1210429956ba5ec964190469a59dabe8bf7591004f78f13b11adfd31b085218f9d6df317aaf0404f9936593ba41fd03512f63c9d94ffd4036254fc34658e9a7b40fc412eb413cecfd9d0e1f083faf41a708ed2f327b20a82037f7b9084d16a30752095d2b624488cb9b3c107392cb973fbb992d782097920be9ebdf81202e6bdfb949d7743b90ab3f2de572111de43a103383d8a082698a1d3a1073523b42e32799f73910b398502ac588d7be722058f0534a261d7cdf8d035936a518ebc9840349edd2896cd09b17cc37906476eda50dd30da4ca7696fbee82d230db4012a1dd5dab979e64c906f276854c2afa8a2c2dd7400e2294b4f016b6a14a35907df5540aa5b784bc320d0415b363ee3a95a229a1817c1bbaf3623a077d3ac357325bcc40ce52b32454d8f46c2903b96b5477cc3168bb9d0c04997db176acc28e3e06c2ecc9517247e93f898160b9327e5c1af7521848d23acc7ffc092f81614f514db78ff80bc451725d2dbea5c8b01748a29dd13ff7977fdc85b54b54fcb0970bc498797b2d9bf539ba05628d9ca552132ad3a90572a798dfaee3e4a55c1648a333865820a656eadb0b9f572ebc02b15377e76a9215085b7769957925535405520cd2c52dad9499880ae4b97462c1448b8cce1448e282ecbbc926551f2990348732ad59bff22c51207ed2a7ee94a966f6a1403c99d42bcfd7abd54f20e90dab331fa11b94e704527dd6aa5b3d99a2bc2690b3928fbf6613cbe731812c3b76b96437d5c52c8124eddf2e6b58f2d52881147bba1594ccd9722609c4242ea2b33b9d8a1e09e4ed5f532be2520efb11c8de39a6984fe7207b1b81a8e73983de60429f5c0472c50efdf01281705626cead32e56f8740dc9ccfbd43c94c390c1002d9f29be524aa0583a0c4b68a9bd28041ac4d599747553a0dda2f88a2fcd2ca25b5a39df9821cbca4a96be95591592f48a5f5b5a496cffe8917c4ac90d1948ec7bca05d90338ecaf67c7441f6d31aa49bf437cbe482dc39f232a69839ff820b92894f3954ecfd2cfa2d48ee29a518276f616f5b1064c8e6d554f5376b41ea3c3273a724358f490b523aa5e2c68be17fc45990ad374b368f96af260b92ff975e0fab6ac482e8a6662e5a29794a896ac082b0664105d1a76ac243af20a53e6da1956bf4738e2b0842a626dd55f242e9b9462b48669af40715b58386d70d355841329d7654f63259b3aaea2ac85164fa7391bbb894515505b98494751baba86a2a485fc9de33ddbd841aa8206516bd2908dbf9bc1464460f56b07da8710af2b788bfeff9f250c31407719d6cbe0482341d608d5210e664b75d33c69955728471c30c1d5a8314841375c936aecfb4b23546413c9933d6a8c92f65270e3632ca0863c7231be428231ddab9413a405110553b548bca5b28c8254b45d3242e28c89e52d23e410cb2e2ca765f770a660d4f90e2a8e5f7dbf5d0b970b0792708be6327fb2784eee8e104697e6c2b79b08b9beb4d90f4e9146c842c21f3c5344d104b8a509de4cbfc9d983341cc983f7df11f0eb6c60431988e8b79e98466ab770972ff885319a7f2d6dd3226410d4b90b4e89c862ed32574528d4a90f36fd060313aa7dc4975841a9440598aa834d1c11a93386484b10332ce68400d49747269c47fa8fd4b8718e8468e326e98f16398698d4858379e29ae6a72bb6ff331774751415d9017a3e3d76b4082a43d765e0c31c210810d1b8f20a6b81e4d76ae7e31d7118a2ee5f93adebb17d46844a35e37ae2b9af6663a9b1a8c2056500bbf3fa65d3d9a3106087aa0011d3afe042bb0618b20dbffc8dbfbd3274f1c464a372c022bf000083ad0011b361a994f578218dc0840166a288264f93e2d6b9b924b271c6c78288c1c3b3211c4f9ce1ba72dd66e632c2208a229af5ad8da8a3da7f44390e37d83d775e610a92188b7764269790799e5c3c1d669c71937769051086226cdb9a18257c68671b0392188e3d53d172ce665466c8320c7d3298cc669cbcfa00e41102ce4a90b164e81206baef7dc1bc48811963a409092265f51dad2dea9ef0f047529c9588a0ecd7f0a410d3f90fb2d7e33ee09cf4d498d3e90366c8aae1cbbf877f94018911df433fb8b4ecade0349aa7f4a0f2733a8349aa0861e885967ffb13ddd864bf34092592e67279dd1a46b707ca0061e082a7bd2ee40ce8d9bae173738d8d60e44519772c76473856c70b0259e1a75209f8e97f5e1945049c938d8d24e50830ee453f6396473e9d089214618389803412ef7660ce219c4e33ae440f2917132b86ce240d2a63e43ad563b6d0a0762aeab909bf46273f4bc812c42d75ddada379dc42ba8e10682f2e4497d861242e8db0652aa9c9e573f76e97234a8c106d2d5c85322baf4c75eaa838c1c6757461837ccd0a16b20857295fd1c8b4fc19220a8a10672e5179984a8e637ff6ba4816caa544565f6645edad183c2811a017c95d0c94d1e8220569c676df9be51da1308928aa573e7507b008234b7efef6a494b6ee70f240b176161a27bd5153f90a38e6dfeb7fb404e2d91aaa23f5c4ae203d982ccee0565571f97c71e481e4bff29f739e1fdde6082871ec84985f860722c2f7cd2e681a0296326695a5c2c78e081a023facf938870b089f167e400fd1939207507528e97a762b395acd6c30e44ffd8b5f42253d2f19202af034127f17b9f225d4de77478d08198830a526df3431f78cc819c5e59f5525d2078c88194e2f87a4e9b845f7ee2403c5d328576edf7f028113ce040b2db7c3aa4f67c26e50f3cde40ccf119b744838a878f1b48172e3e29d1becd39ba1c3bcc40f7c0aba2c55ccac0830de4b6d26071f59f6ede359043e991b649c7cef6513510e74f93d29e4d9e8a671a08fe9baf835059ca941d86071a48ca4f2da6a47d96537c06f299f2ecaf1ad4779bcc4034cfd1bbe36f32eb4f1908a6bf26472cef2b671e6420596e53a9927e9259466320e8c7767b6eb2f0581203315daceca4be3d2d2c048f3010347cf89c6e0bf9f13cc080b6a4262ea54cbf677ea18fab242b488687178c72b79d7281191e5d206fc6ec60961f4bdb3a860717dad5ead6bb6bd18b2217be75746ee0b105c25585774e3372c366b540ac14eea6ad1973683d081e5920e6756a655262c1b4a6021d677860811cdce5dc844a3185dd208f2bdc99a27d505f3f0ee36105b2bf8618d94d55316a038f2af076e7e956bb56336a7d364b6d8cbd9318b73df0a00249c918d39582a5e6a948f09802295d928d1e63506bfdb137784881d4395f8ed21cc2546e70f08802d17c2e57af26ef94497e070f2890f2e36a3f669e4c29f304e28efc8c665bd2b2bb3878388194f266aef4a297da1e911146d92674497bfe4d7b3081242b769eeaac1e4b20dc7ebc145a1e25aca2316e77771adb19847ffc997b6ae63d9240fa8d3953aca429933ccf031e4820987e9a3919e29276ed7104b2f5e6bb549a6404623cb9ed9f520462771825f4daa768211381d8d93a446ae560e0310482f6886aef4e692d4f1e42208599f8e6fa6b3d390ac6afe9f442c79806462b9eb2ab99bb32c9725393e9e406fc8220ee2d9c88922f48eee1d30b52a9743563dfe3b9c30bf2e8e8f5f556c9c9ec82f41f2e958b4617a4b1eb993bb1dc319f0b72a8141dd3775c10acce42c9e4de821c2a5a3acd3dfd31b620766f46af64d782304a8f0671e1440b528fe5741535c6eb9b6641121f9496454d16e4141da45b9b5c2ac582f8dbfe19bbf492a7122c08a3ae4ca8bfb47153e915c45821f3ea76a5a2c915c4dfab20a383a813b582706741a992b18298b13c7655a55029b40ac2fe06a54e374815a4ef3896446a5241f4dcffaf1c2dd75e50415efb7a4fd96fdbca29889fb38af90921572ba6206d7a96e78cdf98f2a520ebe56790f9f573fda4206f79d298c9beaaf75110635a1edbe02d6ad3a220ae5e5df4707939ee5090f7e4c3f666c5d4362808e2525c2de9ceee35fa04d9ca7de474d01232234f90e47ff894ea595d4cd40952f2e8d9269425e91be204596457cdacfa76676813043b1d6997939ecf499a20a67cec145e3d9920a7d8b96c478eaee51c4c1094c85137bae3c97dce25c839c5d6cd5599bd3dc71264358d2f1e42e69bcca98426d3cfdbf5851204cdcf25525b43e9f8244837dad566ef36942e0982a727cf734dd3518e0471c4837f3e5f0b7f0f24489d4f5e5b52e741b7e711a42e994188f7b358cae308729bfaae709d36779e46106eb7832e1fd3e1aac308821875bd5749eb98d22248ea54bdb6fc3e63491164534af9e91e1d64092582b8e1cc4f9f5a8ebd410431645e29cb16dd4a3904316554bcb85e7ab4c51079c5ca66ca2c8520ef26334b227ac72b84207718dbfcf2b98afe204879639e8b97ba1e5d10e49cc33589ec547b77204849a998ba740d08f25a0a2f565939a56cfe407acbfca47230bf7c8d1f48d26434cae75376afe90371ddb275d39b34530d1f88215fdc639e133206cd1e88ea9f666d96212e68f440f09c9ec17293897b260fc4f32ef139fb8b9b67f0401471fe21eff1e362e60ec41b3bfdc92fcc95cad88128fef9cdbad63a9082ac8f17eac26f99e840b64f9741bd6ed2219a03793454ffcb9410ca2307a2cb8c50d1727ecc9d38107f4ccbc8afdc7a1d3890634d8a98cf73d1376f20fa78da32ad1fe2326e205a2afd11ad9747e74b1b48a7d5e242788ac1d3850da4511e5b6a2684e8b9ac8194fbc37c9cd5400e5141b3b46af0cba581186dcdf3da7bcaff153490e497995c291519ad9c8118326e10a1727ea8cd4014fb0ca75b623c7cca400ccbfe4105615ae743065298cfb9ae326320e6d5ae921ec34da58881784ae6660bd23090cf36252174c040b6ec39e8ccfa1708272a8ccc4a7b81bca2c2ef4f5c6cdf5d20ef98caab9cafb3662e102fd7bc7baf5b20758ecb3db283e6586a81a449f474965bca1b6681e8a232cd665a933d16c8dea647e5a0fd150897a5e674566f059288130f9b6a8457a80ac460d983dc9dee53a20239d5e724e45f0a51cf14c8f7dd9e5cae2bcb2305e2d89ff6e8d141a89828105bdd620ebd4081987264b00bfdf8227f02f14ad6c4e53881943278894d99dfa2de04a275ce8eda99f3142610d34ada876edf9c2590ac84b6eddcfc622b8170d5766d51473bdc4920899e7ebc8bd3be3012c83b4a8695d09c2e7e049250163e64f9a56c6b04f25a7decae9cad294520767015993ee5f89d08648bf1d380211066b3fde58c58106303844096cd9131fd563e633088a7762d6f79c020a53131e3a5631f32ff05a92e7b44cfb68a8ab92fc8ebd99e437e6ef594f782a8a27e45a68717a4d0dcb141a9d4b92dbb20d7fd6c78970a42fbba20fccbfcd7c67341ea2d9d19932994d7b82047cdbcb4ad7ea7730bd27d54ad8f36a231db82b02a17e7b1ac2bc9b520c7b9202c4527518b69410c5d31860a3a5f5f741604b9a55dec4243cf2a0b62921b327f4cc68294722a514aa81f1358a3401605f0ea20200108940d5f1bf600b343c719390a10801e140a2800003b749c9102020400d9e0cfb001192f060204a023470248008000d4481d6198f10a08c01700a04347b1410001fc8e3f360a1080dff1a78c1c360e00800138200139d00e32c228c38c1b3830bf43c78d1b350010008f0360183bc4c0a1e36fdc48c0072b76201dabc01b08f8500586b14307619c336edc48c0472a08e639778cf6d9196763a01c377410c6b971dc769011060a3e508161ecc881438718376e24e0e314a4f69cfa336fbac91c3605c9d377ef6e4e3a530c9782b041a8a6ea98adc98270b03129886a71427650d3e4ef18680cd44146183b72f0c728cc1843144807658c31061ae3001fa1e88119660c3486013e4041ce9a6a7b1dd64f10ce3c739afb180eb614060e1daec38c326e94053e3c41f42bf51961a5728e260e325e8c13a05346091a9d32c848fce804613ea4058d9fdab3f4388e136fb2f1e06bf9a9c0c726ce8c990d0d3b2d3d31bb9c8276d4f87a32b5fdd00429fd948778b9e8297b6c3f3241b07caae93db3ca9955b981138c20021d484104d428f18189ecc35663b3b23e3d34e48267fdb79c33682cc6c725b88cffef1643e9c312a491a684aeec21f4f742347c5482146c74525afe7f75138618661c25c8267619329889381d4f23e3631224d58ff9d38bd6df491f9220460bf23e9b2da7a263878e17e3061f91205c142f1d4e5bd606d70c8404e97a54ce94a37f32a53f827cb795479bb78ba5141c6c668c613087093e1c41fa1eb5cdbb612d4bc3c196037406b560052360c34723c81a3d2629175784ee0c07eb600469b553c6ea1811da33f9b108d25850fba9d66b7fc62ae34311a48ae9640ca7d5be52348c8f44102ec30599836c5229bc649431c6186518b41c1f88a8f228dfd8cd8e8f4390b6b52e4d09a17184ba8c30c45041096cd848b30f4390e3e97a4aad417f58f6081f8520e6143f6fccaf0c55d707214849ac866bbad478b1f22008be566e59435dcadc6dd830c38720c87e7fa7a4d8251d99b2c34720c8a7772f63f5bdc7530f1f80205ba655505671c45dfee30fe4dbb7647a1f3a7448fd404cdf9462a8ab0f89ce5a9dc428351f881d375708e1eb1e88d92e7b9f3b490f246dfb1984e7364b419907d2dbeaee676f37dd3a1ec821835da80d219389ee0ee6686e88cda7abbd8b6bd5ca956fcc93e5871d0832d577f450557ab1b261c3061f75205dcc2664b3b29fe868c386193bf43ee8407ed760427e64cafe6d0ec498f696b3452607f28585ba2c9f9abfc538649e63dbb629eb9d3627fffa15564e750507e2aa9fac704047103ede405a15b51ee38fcc3cb61b88393735c7fa0719bed306e2595dcc07bd61c3595d6e573aa7f3b9d996dd3abf4f68b556790dc4d02f3b428c9bf9591f6a208f1aada4da5d9e47c8860dd7d1848f3410d6b49b107d2a572b060de4ecf51a7674f6576ff28c8f3310c4e6adf89959b79e310339f6426d52a7fd9779113eca4058cf1bbe9eb44567f74106f2e72cb19dc2eae3f3632046cf6742dcdee694f46220c98ea146a9a9c754fa30b0eb6ad5d536aaba15b31d1a97f43cef9fe6090ca4a4459957698a0b1f5f209afabd30274b1f5e20dd26e962aee2471788a29bbf348bc79aeb1f5c20cf8d87cae29df373f4630bc4f2cb18b389de4a26aec28716c8156b669e357dae941f592028154f327cce3947d32331cc8c0f2c90abcd7ece93ca1588a5ecc3ce86d23955b30231ef343deefa2a9062c576c76fcd0715d4198d9bbbbc8adb4fd9d0aa3dcd4c81986354fd84d29182a76bf3b17317eade56665ef91f721408527378adf338eda6aa2b23910102af0d7c4081a04fc9dacb89bbd3dcc713b4b7abce92134b0d5d3a26d5fbeb54041f4e20878b6153f666ebb8eca309e47dcd9572fc1cd48288090413fea1c2725c0c9783832d07da41065a02f92f956bd8e96acf4b09248b330d519e56799f8f2410445ff26cf1ceabc38b04f2e5a02b54d40f0bbd74f938027ae164c9ca5c9a0f23103b6cbfd9e9f70595ff8f2290e67ccd7d2ca5373e88405029d38c4a8be1927932f81802d1f44396997d4c75aa197c088120e4fcd3ca3d75478f832d18b68cead9a899bd5d6549b3749d6a3fd69682073088174c86ca631e33ee2278fc82549b52ccb9a92ddd8c0d1b366cd8b05146f0f0054184b8b25c29aac3757a4116a5ab99ff49638b72201c3b30eb83072f14b9a4c3bdbde5cdcc2eac0ebdb220973e423aca10c3b0e9133c7441b424d367574d6b15747241eed8737a2bf9be65453d7091e77dbae7d7ea5bcc7cc94d4c89865a80e7710ba279c8bfc5602a77676c41d2ae973d7c6d521bde5a90523491b65167f5928616245deb173c5e389d5cf49885a93b5befaef532737b9774e5cba97ec64316a40d3a536890f94279251644773bcbe49a2e69ccc282b849c924747f12422cfa0af275b0701beb7a357d1eae30ebb4333f66439412d274ae506be196472b481b4eac5a16dbbc9e610539b77a646c2c1553dd559043b5ff7a0e16be16ab82a4640cdd694448f73b5341feafee94d7cb0315e46ebf99bb7ca54e994e410a52ef52e74a8bed6e0ab2bc75ca9f7c93ccd5b60a1ea52056a5dc88e792a6239382ac6b4129b1eb3c46418a26b4c9e738eada7c51904e8cd2499cd29fff9c1a7884823c361f32be066dd8f00045e11b9bbb4b3d1940dbc103841bf0f8045136fd85cd7625476f3c3c41d4961f3fb55362f38fe3b075c0a313b56866796856858a4ca69f47e40439ca693751a794d79b2028537e4af6dea6d81d1c9ca38c1b8d56020f4d90c4f2273bdf93d1ce3241eaa0e3c9cf47d399392688a3a219eb4ca8e88a5ee26eafdc3dfdae3699ebec64df5fb121a35350ba2548a9bb4e860a565de3f1a80431a70cee3967a90a9d44830725c8ee9fb3def8c679e636388404627c0bce121e9320a71caea6734a398a1ed9808ccf61bef090043149fb2b51a999e663669871462408235d3c94da7293699303eda00c31ee74ac0724c89b7a1d1e45e811c4984233ef7a0c99c3c611c4ce49678dfda5971e6f0441b6be5cde548c9eae0723081b33eac535953ce8bf08928cd0530f99fe22b5ed84872288956b41872e8d5a979308927693bfb92befed6a8ff04004c96409d9316f0e41d84a7d39b4794c716e2dc3c31004a5eb972da3688d415c08b2dce58ca354d6f574e2c08310249deb4c5dde73b3940e8270b70587a8a8434659240e864118044110822068ec93b406d313482018441e0a46839158a00cc31f1300c1c942e17828100803c180301488621808411004411004411888411888023e6ace03a5dbbb37da3f725f8067eabe0715fab254b7489227e05a2d1545452d227409074e754e9880e749dfc9005b27c3baeb2d13d6f68c0b8b8cc7076266bdcd5987c0e238a4f8e830ed8e779f3463e91d9a92c5bb81e4548c6d42279f56e1d97a7a766a8e0a560a51fe58bbe9189cc622fb6014b13d90ec6fd5028ff64626d1cafc68e801327a1e014c41615e23af516d73d95c538e98ab6340b962ec7668494c0370408049996c1b18b045b7d03bcb1c491e81caebe98efb64705a1b38050ef7a0a7417d3e5bb024b7fd42d5185913c80babd75b2de9af94501b9ce7c80ba59c57fd9680f6a188ab716834eeb5dcd169c6bef4981904b9e52d104cb7a551dce8f709b29316610ca8f69b3f477f13fdccc80bc1f27f7203341a0483be959bbd6a0a63ea75b95ef5a44cca05a2d12d52c5d2cd65716eadbd47b5efcea00073c6874dd59285df9454f5d91d2a56b5645950ea05aebe00f62e894f48bac647aa5c885b57f01a90ce65a666838041c820ab33860f060bc022ab2c9e360618208c5603c886785c11188b236993336ba3b27e4b8e33c82669ce49438d15aea8bc0804e24ba96f93010e67aa47ca7c84656347a75c94ae7ac08c616fc1947f2075e029f0318391603ad4cf5804cc7e0a9141f7aaebd95c804e043de100e1f9d3c10adae054da1639cdded8e9ab8a01c58a92551bb6940d900591aba6c5651a6cf93d917fb6bc0399a6d8871816a1eeeeabebaf528d646b69a357943e12cff355912ff7c7de540deccd5ff31193fd0819c4294e3843b5e29ffb0417fc38607cce8a75814237c46afdfb12350b60db1a8756ef8be4c2424e1d4488e0fc637807aafacd85fff0763c4038fed97d61daf594fb24159e248c6a31c7a6ed613b7dabd0397deec1224dacb41b63c4a3f51a37f5f0b5217740f09b3f5e1415317370f1c4b1c0a6186f9077ee0427efed32629ab90d2def1fde8f82fc685e787f18f6da57116eb386b14b86a2a90b00928c1d1a54a13cd21887ebe99a9256a165a8284cc5d494b8f1c7d41dcc75e405717b8e34d2c8e24f79806200660eb5635c680ab092ca9e4df5fd91a19401ef0a40e487868b4e3b1c1d3f6a21273f2e4131141544370029ed67d6bcb73251a5d9e45f3c2290ec8c0df90c30a9a4c974192fbdefc3b9e6b72b8bfa03187d3825e1546eeab8c87271aca009fb6ba3fb52cd97380e8246b3ec072b3bd3e8c54bfbe1c13e734eac95609d4bb8291ed9cddcbab19f8b83865e14815230be0634bacfc33235f44225bcb321b9a8350a526381c96a40a9f765ba2344d18e93465579b3dbafb2e43ea5c85bea0984e28d0e92243a61133941ec63f3b71f3638b348aa96ee6e185fb76e8eb429ece01c8decdf641e4931e0e930a9d92775807f6ac8c2a44bc8580b83b6a1011d2611665054eebf76a29d600e666de74f6fe8b353fb50997b1939a7bc856582c532a76a6d3973398b28cdf313d63c271f0c6552f20694e5f48e47d34f23670eafe48965050e1844b404df2602cdecc4c9e228d96300689369bc43ba8c7c0e21650c1475098c95bdf7a72878ae182e49a391231053651c604b49fa00eb2f20b397f0b7c71af5aaf290a5005c417d813534ca22f6cf39adcf9d5e62d4c146e49ce5aa16d5a0bc7bf5bb54fee61115488e064f9252257c22da165870b487a90cbf5c10a6c08a7350be804c0e4238cf5d7182b91af5e8c2e7547b422353f26cd6b5848dd5b86820424113eb628304c915831ce00e5f0e90370676fda37ffc9b15d5920832411ae80da5fe759f073b1e8e0a48a2d224f1f83aa5a67adccd740a85f698866f4904db811beaad445c197d410cc1c10db1401dbccae69f7b1ce2e676407338af46abd584814269c479784c2be30f58d036828c42a05962b8a5ab7a597ec8b333a0c10589ce7e3d955e89782632fe9777be3e74ea412b4e8efc0d0d985204eddd493db1e21cfa4c2bdcc22f0c010a8c78b0f295d7e00f4d24c35be8852d9a9760b22d38770abb7d60a150f2e2a2704f3a93937cd907cd421d3133869e5fbf295f98ae47bcf4f6209ab47f670a6c2a49b14f0411adf1f4777f9cc23f317d9135d04affced3e3d469269f9463404fdd56f36a892b521148908239b3489ddb4a30a8ead68ce4912ec67876f98476dca532483b646b952aba0149dcc4784bde51136a02c57ade9e2813771020a4d0ba8777fa9ee72f1be6cedb5ba0a6d040200e001f9baca6019d129df88034b479dd85e46c5fa6e7865e7fda34b337f39a7475c743184d7321ed30f315ac6dd851bb02b5ab6bf434b6596801f8e2f8f61f1cab184bd2252b2384671b6a1e1a32ae937ae7ba81e805a2e940e4d2e95056768a0e2531a705b3433a7f6586acf6371f7bb78fba1ebb293c54efd2411b5bbbfad2aa294fda3f4bd7b04ae4be3d09e54858c6ce4d8a9b18742b2262aff974c3c90e6efb06cd9c40cffa3857f3ed38d3b7b7b805d1952d0cd1de101612ec42ec22869174b9821bac1d03c228b92bb29b098601fb06d6d2350fd596bfcb971ced8a122032a2bd645ce336d983175b5f4fa6dc7d6136d557692b3774c0024ac6fb81442acd8b6c4ecc26e644e2597974436e687bc006fbd130630746c059797507cd3a5f258f6007006dda3bbfe48024ce223e1339f4d3ff4c5b3f59bc70d168533dbfef8e59c24b6b4321fd92d4d63ec907638289a9c15638834f765823845997f96f499b035531bbd1f67f9e42e4811ad7765fa3484424130e0e69413123e67c403711ca479901a206b09dc68681899165e544b8187f3a72720bc53ace2a7c49cd441bd683dae174aabf08f77b38fc8a68696d1ba02d193f0346c4261010e495e7577dabf809c2d1b4c6d6c6aafa8c37e099eec3fa94c269d6780750d57df8a2c17c29fe85c271171c5a8c7453d34ff7f2afef70eec7b52634ed97b90e0c2f1228ea067406015d2a519c5fa8d28e5a300bd20a8f7d0f3a4065b415ce0ce74e199cdfbd944f242070d70d05fc4136382804712e5d5fda11950985e76220da53ae5b1e9c4a32c3506a5b24aa8c8c1c343035ebbd32db4e427ad24b15193401962462d37cc74da1cf249076b48c47ff7d2e72593576b0544e58dbb88dabec08b6a5bdde1290a622a655fda2282183c720c716cf9d3efeaa53166bb543d8a7386cd5110c5ee41e4137df7a548fab313ecd54024a866c15e3d813982d6201a295a7b0941c28ca6137394d89c4edbc034004b53a6f7de70f6c063182712666cf75f9f31462917e39c2b1db362f32da8cc176c476ac0840300da0c4bf6d3eda78770782282580ea624eb2266887d5950ec0782f8f8935b993f033efe63f58f320ba66fa489cba5414ec5e8371022bdd51699434e67a3ade38ca9fbd91324af7143ea7f4c2dc9989c0ccabdd35029eb2dee576321f54e4a25392dc4792a9053de83495dd6ceb789da46adb40d318fa202724a91a2c63505b71885115aff78bd9303781a5562c1bd6e87e63246a0d0073c9d7478bc8b7aebfdb29dc146eb2662a2317c1e5c44a2c8454fae0aefd442dc23665961a9a0e6a958de2fd3b83471e2555d74a79467cf7f15f49793e25dc515544437338e95e701ef2395cf65a1ee3501fe3a85ed390a94189d4a2b4aadb99a92295864d3fa2a114552716e016e08aea2d1dd7752d8f4294a728e5a8c8e55ef0655cf4ca393385458978bda073baee353107316e785dda7a49411584221a42113b658986ca3841f4d5afdaabfd8cefe3bc97f902876b10c2218612fdf87b28fe3a0123511e4533f315e822d66c8caed415df297cd9d19b9cf21f1b22f99d4af7728215ae61a7e7844b7e9a336ffbc0a9b08183835f63a3219550ac6af39ed49a1bbf2d45a5cc37990fe328c52230e7d0e75f661a447d685bda65876527a92a22d95ea65164b65560d9a8583d0762f722e4284976781f5794444763dea4a02e21acb081f06b877ceee8766439d7773e186b4fe6a370dd437c351ad6c21cfd99c774bdd23eeaa23d69db1237d5b03ed4486f6e5531cf71a51e7687144453e88796b11c90d288f579dec0512ff3052ef722964101caaaa8cbbae865bec0e55ee4655cb46564f4325fe0722d423914aadc2bf2b0f6a530ecfee4cf4fef03c4a3f8fef3b9da23f314f7e2af06af44ffc3f81838d5cad6a18ef6908f158d7e889dcec5433a2fe322e6041c7359e400a6c6d83420da81d5b115f5e4a43594214a4a55ed95397a5d9602eed4d73d4e71ae976c0dc84556129bb31c93bbdea723b50fedb63fffbd4667ba7a5b64a7061a3cfc310fc26105e405c5d0af6b38ebfb38ef65bec0e11a847088a8720ff2322efa322e7a656658a3935b0d09693d608a8e3f36e0ea6aed3b30fd430f4424aee2bd703e41464bd369bcf931bec6a55a67265cf795a029fe6a06834cc3b6cbff3c596ad71f40dc9d234660266b1bd56333dba5e69105d114a337985318b57d62a2948370e7e35c691884e1b4d2e96d2492aa286b98acffceeec7d2b8b6cd2084e3b646d9c0f510383e4b3cb77c8d539a3a759b9edf05f2cd903b67e17d20187d083e271ec29065f56a2e62273c0ceb7450787128472b00645c17068901122cdc95b71651410c7458c91ae43e971a80d3c2dda24fb67942c66840cbc5e37511281fe34f0d800f549f1cd89d4c5d381f715e7f35bc2dd2630026803b80ff72ca84bc689b4ea5b590f726f4448c5989602c481dc5c7de0b1ed511c262af093adc02ef92f68bf4801eafb69b2030dd0a6e12041b5ca165c455ae808fccd64b1f10fdced19a1c5dc533b9feb5dd1c636d2125778e05a802919339914ee4edee1e79ad509dc523f5ead43fd6e8676a41b7f936e336468e363353e00aa851b5fea299630e7d4b722a2d33a40b108ae38310c30afc1dd0e404d6b93bc5983f26b3b5a6cdcae434181e43ff5d0ad465aa4db4d85246c3fe2acc5f6acc4962f0ac7c4b32f4aeafa2135ed745acdac05ca53889c854d7c65b283fc36c28063d1ae69f8743f7dd7c4a89301ba6c484c302eb6dac5b5624fe29ba229bad12adaa2f71a50e8198186f4474b8bc866cc734994501a5ee0d8f3ea325045e1cc300e0fae83eb9e1872f0808d47757f7b87de270f05d88d76b750c87d41b11838a55c12474732740026017a60d9dbd45fa45150fa4267679d891d2bbfc62634b496181b71cbb708e955f8bbd8eecb473f01b040c5bbe2b9dd8e15b1ba80ffe74d231f4c313d000c26c1dd8c084c68071b6094de8dd0cbbf6565d77ab4a526e2063d727c0de5770c97c3a47d8a34aa69628712534c1da9c4d0a3973af8444d80d8f42c9aa08e9c4d839fcc5020ab78f8b48609042ce93840a91572699a1da7871d534187cd9fc897d68c8de7935fbc364c0429429e09bf5c5d154885b6786cfe290c967265c4c322709e340774a9b861160859c58d8cbb512c02db43b2771fdc9ee5938a37debf74724bc26c422c8a6b7b274b7860506c5136bd840b3e63b9f2ea3940fc8babd7e4e23ee772d0e20544cc55ded9159229e250109ed887ca61b68e5ed1d9dd2597184cab3140e525ef0fe3508819fe8313ee665918845d05700c8fb732b8477173123b05c47700cdf6f41fd1ba2fab9a6252cc484e63527ec8b2e088b2c2f90738a62df64f927520e46e84731172c8850000b9f4a1b0169088a43fd1ab9d6022b4cd728c0c0fa71193fac169d201833dc6de888358036c9f137a320647c5388a8cd59d3bab294bceca6aea1334570988d4681e329bc79fd5580ff59a29389e07a40e889f350c98960082f7037146396b7938bb1630744512d8131a1dc5202fcd5c5a40223a42726637d58203b4a2e41e4c900a3afbc21570c17c4fc0919663b77109a330962d7dd0e02ffc9177b1d7a0c390ac6ddebfb3ffa1052f9fc3a115513471762d615050bf4e43587000eed9b9ba2b36b95533873d94975ffecc88dc2f8ec7cee4c13447de888c2d7a26c3263067db1c405a50471f998881e46705df4ac19c1087cc135fe5a440a743f641df9f68e4a897feff56094b00443425420045409d32cfd66266a6364cadcfbf8fdd86d0eb21eb044f335eee9f1c8a9aa42c338dc23d86879f5c2ad541ff15d4429c07091279ac99e9903a7958b035f893b990b17c96b6685948d432b0e38d3a0117578502b207a9e26e6013d0c8dc1cce1aa18a83c888a278b45b5de7ee7e142d0bb0e27f0e0752159b88674faddf78d0f2eac879dc4f863ef81c79118c824615cd6de3c4470e4a77a7be1819819ef4633eec3fe6c2964f334cbdfa5da7348704d7b1b8f901ebb7f51bfad8d31d82ba2bcca48daeb9d59102024b59c5d3c1a4f8cd385fedc345d872340e8af02e1d97b8dc82ce3d3af2baae0ddd139bcdb620dafe144eb0d0827a8c35d4945ac961c481dd511102fdb56296831c9690a9a6916fab974c04e1927249489b0129260cc01d24d7fcb2145664636df26d86baf9b4e18828c2932612205e82e0263fcdc94dad3471929cbe3a8ed02b660f01fd18b0052d9aed07aa129b145092bd27227124824830e8a0425d5d7abac81eb12bae6fe284167a5f4a4610cd2dc85c1280de296abe64800bfb5c65f29f77a444056d590480d7d84a8f832e5fee758acfc2c407d91cab4221cdf04a68d0fa0ab67c63002f5c24b04a34ab185b2eb893b150e928aa6b12dc25403baeb60bf5ec7da879bc2569c86a6e8c82ab89c009af99f0aa14addccdcfd861763a4db73f3b038cac94bcaa06bbe647916cd9e899cb3b354e61bd5221f87ebfb41f3b2bc0ad83b763ed903b21d827f0b3a96a93f5f7fb707c3b2e357d1919f8dca779eb1cf5ef84bdef719e0d8c46a7bb54c0113e3902161a7f2662dc6d1e6cad4df05b923d37dc945e0dd40f7f9442171a1dc289f8c8f8788340cc54737c4b1ea19093f6b598bb86082c5c2c8bb5c0139a016dc7c485c0a12e38ce34577a79f44365108e7838a184d31b364adc2e798d8bd940038a5f9b312b3311c4270c4ab5e063e3875031c08dd213e584dfc52d82b4b5d177e0ed901f7128262559965d7afec2fb152757cd952bb5116d3658477b8db87c3a881249dac8fbd74b494e08d581cda74210e5f168fb877a62892ecda07f3a459eda7b0553257632e817f65cb549b10a6787e5d543f54bfafaa5a4d73358bb2fb0845714b46f3358c55108850ee4b211c095447072be404a722e5ec0313494505b41440a5e16b1a74ddd0b3ea756201032c80163da5ee81e11d71b4e84322fe549288bd868077568aab2e380ac1e7b74cda3a3514d89cf4156d5117a92e5f6edd854e0075fa412bfc205f520c9ee1bdb76988493d04095e0a80c525242c1f72a310c76707fd9cee23d48c253604dfe5b169ecd4d19fb24afb2201e3ca584c3af4c61641e33d001f59923ba95ed7278ee79752d22a14fa22bbe2e053681ff6f94158681db24245e5e2dbb59ebe9cf24d0fc8bd89f5ecb6269c263650e05221f0362891c2a460f851b17912960ddad978d6c6a6d4675779785213111855bfd5463f782f5e20def9eb284c1b3fd515a0063fd4d7f09de5f6adc2da3f38d0655af9663a5b05387a55f2e6128d21fa67a77f3cc46fb0587f442a2e5c25cba4d33cbfd0e554900d49a466cdf488e42af8d315ce0d19e2226392423c9c4e8529839946e86503b7c9396ae10f924c827e843533db1e53c3856d90307444c8aa12b2dafdab2562461739e1810f770d944702c262e438c752f4cd1da2b8e8cc704ac1737e2d820fad91d6bbc1a7ee8ad7b783310bef39fd0974de1626f8c1a19663a3e99868e2160da86ccce471b15017cdd015e4d4d5fddf0390eeaf500e0d04dbf287dd18", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3fba98689ebed1138735e0e7a5a790ab6339d4183899cf4f5efccdad995b795c": "0x00", - "0x45323df7cc47150b3930e2666b0aa3134e7b9012096b41c4eb3aaf947f6ea429": "0x0200", - "0x4a97b7c32fd2bcd103026654b3408079170f16afec7d161bc6acec3964492a0c": "0x08caaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b657682bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c495400", - "0x4a97b7c32fd2bcd103026654b340807939ad9de5715849a279b16b9e76b8401f": "0x0108caaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b657682bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c495400", - "0x4a97b7c32fd2bcd103026654b34080794e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x74650361ad542d48e68e6363b4c4b03587338ba2d375e73ad7eb4d0feebffd42", - "0x837adc8a2ac1180ee049d9a9f6a5a6c74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x95596f1b740d5fa4fbea161ae9c3a7574e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xa9d3f5076b0686b35a7efd279279cff04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xa9d3f5076b0686b35a7efd279279cff0b85d2af5a00eeed2e0a17e451c667069b4def25cfda6ef3a00000000": "0x080eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a82bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c49546865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464ccaaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b6576", - "0xab2a8d5eca218f218c6fda6b1d22bb924e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0000dcce86b42ad00000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39db5f4beaf66f77acaaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b6576": "0x6865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464c", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3feef77b17632c18e82bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c4954": "0x0eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a", - "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501b58ed2e4bb6c6ea6e6d6273806865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464c": "0xcaaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b6576", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195030e704457a6ae5f06e6d6273800eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a": "0x82bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c4954", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x08caaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b657682bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c4954", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x08caaab99ad0c8af9564a3d836cbed35c8dd470db7cd0236df410d58c43b2b65766865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464c82bf75ef86effdbedccec5a337de96b05db806f7b20b63e4b390fb45673c49540eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a", - "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xebe78423c7e3ed25234f80d54547285a170f16afec7d161bc6acec3964492a0c5153cb1f00942ff401000000": "0x086865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464c0eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a00", - "0xebe78423c7e3ed25234f80d54547285a170f16afec7d161bc6acec3964492a0cb4def25cfda6ef3a00000000": "0x086865bee8b944e74f21d0e9527bf308145e5f2908c39098b8047f0b55dbdb464c0eefe1981c422ce5c70459914cc64fba7e96be20173640e6bced06a07991654a00", - "0xebe78423c7e3ed25234f80d54547285a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000" - }, - "childrenDefault": {} - } - } -} \ No newline at end of file diff --git a/test/.eslintrc.cjs b/test/.eslintrc.cjs deleted file mode 100644 index e3d6aab..0000000 --- a/test/.eslintrc.cjs +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - "env": { - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "overrides": [ - - { - "env": { - "node": true - }, - "files": [ - ".eslintrc.{js,cjs}" - ], - "parserOptions": { - "sourceType": "script" - } - } - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/no-explicit-any": "off", - } -} diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index 8fe168c..0000000 --- a/test/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -tmp/* -*.sqlite -*.wasm -node_modules/ -**/compiled/* -**/specs/* -html/ -wasm/precompiled* - -moonbeam -polkadot diff --git a/test/README.md b/test/README.md deleted file mode 100644 index 1406217..0000000 --- a/test/README.md +++ /dev/null @@ -1,197 +0,0 @@ -# Moonwall integration tests for Tanssi - -## Setup - -Install node and pnpm: - -```sh -sudo npm i -g pnpm -pnpm i -``` - -The expected node version is 20, check the CI workflow file to find the exact version as it can change. For example, this works: - -```sh -$ node --version -v20.5.1 -$ pnpm --version -8.4.0 -``` - -## Running tests - -Before running tests: compile rust binaries - -```sh -cargo build --features=fast-runtime --release -``` - -The "fast-runtime" feature is needed because some tests check session changes, and without this flag 1 session takes 1 hour. - -Zombienet tests automatically execute some scripts before running: - -* Generate chain spec files -* Download compatible polkadot binary, and store it in tmp/polkadot - -Run moonwall TUI interface: - -```sh -pnpm moonwall -``` - -Run tests: - -```sh -# manual-seal tests, only orchestrator chain runs, container chains are mocked -pnpm moonwall test dev_tanssi -# zombienet tests, all the chains run -pnpm moonwall test zombie_tanssi -# smoke tests, checks the live stagenet/testnet -pnpm moonwall test dancebox_smoke -# chopsticks upgrade tests, creates a fork of the live network and performs a runtime upgrade -pnpm moonwall test chopsticks_dancebox_upgrade -``` - -You can find all the test suites in `moonwall.config.json`, or in the interactive moonwall mode when running -`pnpm moonwall`. - -You can grep tests by simply appending the pattern after the command: - -```sh -# using the exact test id -pnpm moonwall test dev_tanssi DT3301 -# or just a prefix -pnpm moonwall test dev_tanssi DT33 -``` - -To allow better debugging, use `run` instead of `test`, which will leave the moonwall environment open after -running the test, allowing you to use polkadot.js to see all the blocks, events, and state: - -```sh -pnpm moonwall run zombie_tanssi -``` - -## Where to find node logs - -To see the logs of a failing zombienet node: - -```sh -cd /tmp -ls -ltr -# cd into the last zombie folder, that's the most recent zombie network -cd zombie-3aff699b8e6c41a7a0c296f056a750a0_-87975-Ow0nVobAGIPt -# list all the logs -ls *.log -# follow logs -tail -F -n9999 Collator2000-01.log -# nicer interface that allows search -less -R Collator2000-01.log -# or just open it in any other text editor -``` - -To see the logs of a failing chopsticks test: - -```sh -# this is not /tmp, but the tmp folder inside test -cd tmp/node_logs -# find the most recent log file -ls -ltr -# open as usual -``` - -## Upgrade pnpm packages - -To upgrade moonwall or other dependencies: - -```sh -pnpm up --latest -``` - -Remember that everyone else has to run `pnpm i` manually after a package upgrade. -(unlike Rust where cargo handles that automatically) - -## Debugging zombienet - -You can enable zombienet debug logs to get more information about the commands that are being run: - -``` -DEBUG=* pnpm moonwall test zombie_tanssi -``` - -# Typescript-api - -When changing some pallet interface or a runtime api, CI will fail if you don't generate a new typescript-api: - -```sh -# make sure to compile the node before running the create-local-interfaces command, because it spawns a local node -cargo build --release --features fast-runtime -cd ../typescript-api -pnpm i -pnpm run create-local-interfaces -``` - -# Debugging with Chopsticks - -Chopsticks can be used to re-run live blocks locally. See this guide for a more detailed overview: - - - -The Tanssi Chopsticks config files are in `configs/dancebox.yml` and `configs/stagenet-dancebox.yml`, depending on the network. - -For example, to re-run a block: - -```sh -pnpm chopsticks run-block --config=./configs/stagenet-dancebox.yml --block 6490 --html --open --runtime-log-level 5 -``` - -You can override the runtime WASM using chopsticks. This is very useful to add some debug logs or asserts. -For example, you can add some logs to a pallet, like this: - -```rust -log::info!("state before: {:?}", state); -``` - -and compile with `--features=force-debug` to get useful debug information instead of `wasm:stripped`: - -```sh -cargo build --release --features=force-debug -# Do NOT use --features=fast-runtime -``` - -Even with `force-debug` some data such as AccountId may not be printed, the workaround is to convert it to hex or call `.encode()` and print the encoded bytes. - -Remember to compile the correct runtime version. The one in master will always -be a future version, so it doesn't make sense to use it to replay past blocks. -Check the version of the runtime in polkadot js, and compile from the corresponding branch. -For example, for runtime `dancebox/600`, use the branch `perm-runtime-600`. - -To use the new runtime, you can edit the yml file or pass it as a CLI argument, either is fine: - -```yml -# configs/dancebox.yml -mock-signature-host: true -db: ./tmp/db_mba.sqlite -wasm-override: "../target/release/wbuild/dancebox-runtime/dancebox_runtime.wasm" -``` - -Or simply pass it as a CLI argument: - -```sh -pnpm chopsticks run-block --config=./configs/dancebox.yml --wasm-override ../target/release/wbuild/dancebox-runtime/dancebox_runtime.wasm --block 1981800 --html --open --runtime-log-level 5 -``` - -### How to find session start? - -Sometimes you will need to replay the first block of a new session, because many things happen on session changes. -The easiest way to find out the block number of the last session change is to use a block explorer, such as: - - - -If testing a network with no available block explorer, you can either try to guess by finding the highest multiple of the session length smaller than the current block number (so with session length 600 and block number 10_000, open python and run `10000 // 600 * 600`); or you can add a log somewhere in the runtime that logs the next session start and the session length, and calculate the previous session start from that. - -# Spawns Tanssi and container-chains with zombienet -You can directly use the zombieTanssi.json file and pass it to zombienet to spawn yourself the network. From the test directory you can do: - -```sh -/path/to/zombienet spawn -p native ./configs/zombieTanssi.json -``` diff --git a/test/configs/dancebox.yml b/test/configs/dancebox.yml deleted file mode 100644 index 50a02c5..0000000 --- a/test/configs/dancebox.yml +++ /dev/null @@ -1,14 +0,0 @@ -endpoint: wss://dancebox.tanssi-api.network -block: ${env.DANCEBOX_BLOCK_NUMBER} -mock-signature-host: true -db: ./tmp/db_mba.sqlite - -import-storage: - System: - Account: - - - - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - - providers: 1 - data: - free: "100000000000000000000000" - Sudo: - Key: "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" diff --git a/test/configs/frontierContainer.yml b/test/configs/frontierContainer.yml deleted file mode 100644 index d46637a..0000000 --- a/test/configs/frontierContainer.yml +++ /dev/null @@ -1,16 +0,0 @@ -endpoint: wss://fraa-dancebox-3001-rpc.a.dancebox.tanssi.network -block: ${env.FRONTIER_TEMPLATE_BLOCK_NUMBER} -mock-signature-host: true -db: ./tmp/db_ftrcon.sqlite - -import-storage: - System: - Account: - - - - "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac" - - providers: 1 - sufficients: 1 - consumers: 1 - data: - free: "100000000000000000000000" - Sudo: - Key: "0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac" diff --git a/test/configs/stagenet-dancebox.yml b/test/configs/stagenet-dancebox.yml deleted file mode 100644 index f1efe88..0000000 --- a/test/configs/stagenet-dancebox.yml +++ /dev/null @@ -1,14 +0,0 @@ -endpoint: wss://fraa-stagebox-rpc.a.stagenet.tanssi.network -block: ${env.STAGEBOX_BLOCK_NUMBER} -mock-signature-host: true -db: ./tmp/db_mba.sqlite - -import-storage: - System: - Account: - - - - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - - providers: 1 - data: - free: "100000000000000000000000" - Sudo: - Key: "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" diff --git a/test/configs/stagenet-flashbox.yml b/test/configs/stagenet-flashbox.yml deleted file mode 100644 index fa1f675..0000000 --- a/test/configs/stagenet-flashbox.yml +++ /dev/null @@ -1,14 +0,0 @@ -endpoint: wss://fraa-flashbox-rpc.a.stagenet.tanssi.network -block: ${env.FLASHBOX_BLOCK_NUMBER} -mock-signature-host: true -db: ./tmp/db_mba.sqlite - -import-storage: - System: - Account: - - - - 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - - providers: 1 - data: - free: "100000000000000000000000" - Sudo: - Key: "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" diff --git a/test/configs/zombieDanceboxUpgrade.json b/test/configs/zombieDanceboxUpgrade.json deleted file mode 100644 index 0ac13d6..0000000 --- a/test/configs/zombieDanceboxUpgrade.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "validator": true - }, - { - "name": "bob", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain": "dancebox-local", - "chain_spec_path": "tmp/dancebox-raw-spec.json", - "collator": { - "name": "Alice", - "ws_port": 33345, - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--force-authoring", "-lparachain=debug", "--database=paritydb"] - } - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssi.json b/test/configs/zombieTanssi.json deleted file mode 100644 index 65c81d9..0000000 --- a/test/configs/zombieTanssi.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - }, - { - "name": "charlie", - "validator": true - }, - { - "name": "dave", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec.sh`", - "collators": [ - { - "name": "Collator1000-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2001-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2001-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2002-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2002-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - }, - { - "id": 2001, - "chain_spec_path": "specs/template-container-2001.json", - "collators": [ - { - "name": "FullNode-2001", - "validator": false, - "command": "../target/release/container-chain-frontier-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9950, - "p2p_port": 33050 - } - ] - }, - { - "id": 2002, - "chain_spec_path": "specs/template-container-2002.json", - "collators": [ - { - "name": "FullNode-2002", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9951, - "p2p_port": 33051 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiKeepDb.json b/test/configs/zombieTanssiKeepDb.json deleted file mode 100644 index 8a4cc6c..0000000 --- a/test/configs/zombieTanssiKeepDb.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - }, - { - "name": "charlie", - "validator": true - }, - { - "name": "dave", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/warp-sync-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-warp-sync.sh`", - "collators": [ - { - "name": "Collator1000-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-01", - "command": "../target/release/tanssi-node", - "args": [ - "--no-hardware-benchmarks", - "--database=paritydb", - "--wasmtime-precompiled=wasm", - "-- --keep-db" - ] - }, - { - "name": "Collator2000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-03", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/warp-sync-template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiMetrics.json b/test/configs/zombieTanssiMetrics.json deleted file mode 100644 index f146f6d..0000000 --- a/test/configs/zombieTanssiMetrics.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - }, - { - "name": "charlie", - "validator": true - }, - { - "name": "dave", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/warp-sync-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-warp-sync.sh`", - "collators": [ - { - "name": "Collator1000-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-01", - "command": "../target/release/tanssi-node", - "args": [ - "--no-hardware-benchmarks", - "--database=paritydb", - "--wasmtime-precompiled=wasm", - "-- --tmp --prometheus-external --prometheus-port 27124" - ] - }, - { - "name": "Collator2000-02", - "command": "../target/release/tanssi-node", - "args": [ - "--no-hardware-benchmarks", - "--database=paritydb", - "--wasmtime-precompiled=wasm", - "-- --tmp --prometheus-external --prometheus-port 27125" - ] - }, - { - "name": "Collator1000-03", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/warp-sync-template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiOneNode.json b/test/configs/zombieTanssiOneNode.json deleted file mode 100644 index 0c75cd5..0000000 --- a/test/configs/zombieTanssiOneNode.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/one-node-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-one-node.sh`", - "collators": [ - { - "name": "Collator-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiParathreads.json b/test/configs/zombieTanssiParathreads.json deleted file mode 100644 index 49a5d99..0000000 --- a/test/configs/zombieTanssiParathreads.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - }, - { - "name": "charlie", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/parathreads-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-parathreads.sh`", - "collators": [ - { - "name": "Collator-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator-03", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator-04", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/parathreads-template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - }, - { - "id": 2001, - "chain_spec_path": "specs/parathreads-template-container-2001.json", - "collators": [ - { - "name": "FullNode-2001", - "validator": false, - "command": "../target/release/container-chain-frontier-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9950, - "p2p_port": 33050 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiRotation.json b/test/configs/zombieTanssiRotation.json deleted file mode 100644 index fed57b9..0000000 --- a/test/configs/zombieTanssiRotation.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - }, - { - "name": "charlie", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec.sh`", - "collators": [ - { - "name": "Collator1000-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2001-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2001-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2002-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2002-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - }, - { - "id": 2001, - "chain_spec_path": "specs/template-container-2001.json", - "collators": [ - { - "name": "FullNode-2001", - "validator": false, - "command": "../target/release/container-chain-frontier-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9950, - "p2p_port": 33050 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/configs/zombieTanssiWarpSync.json b/test/configs/zombieTanssiWarpSync.json deleted file mode 100644 index 2b0fe68..0000000 --- a/test/configs/zombieTanssiWarpSync.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "settings": { - "timeout": 1000, - "provider": "native" - }, - "relaychain": { - "chain": "rococo-local", - "default_command": "tmp/polkadot", - "default_args": ["--no-hardware-benchmarks", "-lparachain=debug", "--database=paritydb", "--no-beefy"], - "genesis": { - "runtimeGenesis": { - "patch": { - "configuration": { - "config": { - "async_backing_params": { - "allowed_ancestry_len": 2, - "max_candidate_depth": 3 - }, - "scheduling_lookahead": 2 - } - } - } - } - }, - "nodes": [ - { - "name": "alice", - "ws_port": "9947", - "validator": true - }, - { - "name": "bob", - "validator": true - } - ] - }, - "parachains": [ - { - "id": 1000, - "chain_spec_path": "specs/warp-sync-tanssi-1000.json", - "COMMENT": "Important: these collators will not be injected to pallet-invulnerables because zombienet does not support that. When changing the collators list, make sure to update `scripts/build-spec-warp-sync.sh`", - "collators": [ - { - "name": "Collator1000-01", - "ws_port": "9948", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-01", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator2000-02", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - }, - { - "name": "Collator1000-03", - "command": "../target/release/tanssi-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"] - } - ] - }, - { - "id": 2000, - "chain_spec_path": "specs/warp-sync-template-container-2000.json", - "collators": [ - { - "name": "FullNode-2000", - "validator": false, - "command": "../target/release/container-chain-simple-node", - "args": ["--no-hardware-benchmarks", "--database=paritydb", "--wasmtime-precompiled=wasm"], - "ws_port": 9949, - "p2p_port": 33049 - } - ] - } - ], - "types": { - "Header": { - "number": "u64", - "parent_hash": "Hash", - "post_state": "Hash" - } - } -} diff --git a/test/contracts/solidity/Batch.sol b/test/contracts/solidity/Batch.sol deleted file mode 100644 index f24c614..0000000 --- a/test/contracts/solidity/Batch.sol +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @dev The Batch contract's address. -address constant BATCH_ADDRESS = 0x0000000000000000000000000000000000000801; - -/// @dev The Batch contract's instance. -Batch constant BATCH_CONTRACT = Batch(BATCH_ADDRESS); - -/// @author The Moonbeam Team -/// @title Batch precompile -/// @dev Allows to perform multiple calls throught one call to the precompile. -/// Can be used by EOA to do multiple calls in a single transaction. -/// @custom:address 0x0000000000000000000000000000000000000801 -interface Batch { - /// @dev Batch multiple calls into a single transaction. - /// All calls are performed from the address calling this precompile. - /// - /// In case of one subcall reverting following subcalls will still be attempted. - /// - /// @param to List of addresses to call. - /// @param value List of values for each subcall. If array is shorter than "to" then additional - /// calls will be performed with a value of 0. - /// @param callData Call data for each `to` address. If array is shorter than "to" then - /// additional calls will be performed with an empty call data. - /// @param gasLimit Gas limit for each `to` address. Use 0 to forward all the remaining gas. - /// If array is shorter than "to" then the remaining gas available will be used. - /// @custom:selector 79df4b9c - function batchSome( - address[] memory to, - uint256[] memory value, - bytes[] memory callData, - uint64[] memory gasLimit - ) external; - - /// @dev Batch multiple calls into a single transaction. - /// All calls are performed from the address calling this precompile. - /// - /// In case of one subcall reverting, no more subcalls will be executed but - /// the batch transaction will succeed. Use batchAll to revert on any subcall revert. - /// - /// @param to List of addresses to call. - /// @param value List of values for each subcall. If array is shorter than "to" then additional - /// calls will be performed with a value of 0. - /// @param callData Call data for each `to` address. If array is shorter than "to" then - /// additional calls will be performed with an empty call data. - /// @param gasLimit Gas limit for each `to` address. Use 0 to forward all the remaining gas. - /// If array is shorter than "to" then the remaining gas available will be used. - /// @custom:selector cf0491c7 - function batchSomeUntilFailure( - address[] memory to, - uint256[] memory value, - bytes[] memory callData, - uint64[] memory gasLimit - ) external; - - /// @dev Batch multiple calls into a single transaction. - /// All calls are performed from the address calling this precompile. - /// - /// In case of one subcall reverting, the entire batch will revert. - /// - /// @param to List of addresses to call. - /// @param value List of values for each subcall. If array is shorter than "to" then additional - /// calls will be performed with a value of 0. - /// @param callData Call data for each `to` address. If array is shorter than "to" then - /// additional calls will be performed with an empty call data. - /// @param gasLimit Gas limit for each `to` address. Use 0 to forward all the remaining gas. - /// If array is shorter than "to" then the remaining gas available will be used. - /// @custom:selector 96e292b8 - function batchAll( - address[] memory to, - uint256[] memory value, - bytes[] memory callData, - uint64[] memory gasLimit - ) external; - - /// Emitted when a subcall succeeds. - event SubcallSucceeded(uint256 index); - - /// Emitted when a subcall fails. - event SubcallFailed(uint256 index); -} diff --git a/test/contracts/solidity/CallPermit.sol b/test/contracts/solidity/CallPermit.sol deleted file mode 100644 index 8747a4e..0000000 --- a/test/contracts/solidity/CallPermit.sol +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @dev The CallPermit contract's address. -address constant CALL_PERMIT_ADDRESS = 0x0000000000000000000000000000000000000802; - -/// @dev The CallPermit contract's instance. -CallPermit constant CALL_PERMIT_CONTRACT = CallPermit(CALL_PERMIT_ADDRESS); - -/// @author The Moonbeam Team -/// @title Call Permit Interface -/// @dev The interface aims to be a general-purpose tool to perform gas-less transactions. It uses the EIP-712 standard, -/// and signed messages can be dispatched by another network participant with a transaction -/// @custom:address 0x0000000000000000000000000000000000000802 -interface CallPermit { - /// @dev Dispatch a call on the behalf of an other user with a EIP712 permit. - /// Will revert if the permit is not valid or if the dispatched call reverts or errors (such as - /// out of gas). - /// If successful the EIP712 nonce is increased to prevent this permit to be replayed. - /// @param from Who made the permit and want its call to be dispatched on their behalf. - /// @param to Which address the call is made to. - /// @param value Value being transferred from the "from" account. - /// @param data Call data - /// @param gaslimit Gaslimit the dispatched call requires. - /// Providing it prevents the dispatcher to manipulate the gaslimit. - /// @param deadline Deadline in UNIX seconds after which the permit will no longer be valid. - /// @param v V part of the signature. - /// @param r R part of the signature. - /// @param s S part of the signature. - /// @return output Output of the call. - /// @custom:selector b5ea0966 - function dispatch( - address from, - address to, - uint256 value, - bytes memory data, - uint64 gaslimit, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external returns (bytes memory output); - - /// @dev Returns the current nonce for given owner. - /// A permit must have this nonce to be consumed, which will - /// increase the nonce by one. - /// @custom:selector 7ecebe00 - function nonces(address owner) external view returns (uint256); - - /// @dev Returns the EIP712 domain separator. It is used to avoid replay - /// attacks across assets or other similar EIP712 message structures. - /// @custom:selector 3644e515 - function DOMAIN_SEPARATOR() external view returns (bytes32); -} diff --git a/test/contracts/solidity/CallPermitDemo.sol b/test/contracts/solidity/CallPermitDemo.sol deleted file mode 100644 index 7c5b588..0000000 --- a/test/contracts/solidity/CallPermitDemo.sol +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -import "./CallPermit.sol"; - -/// @notice Smart contract to demonstrate how to use Call Permit precompile -contract CallPermitDemo { - /// @notice The bond amount is too low - error BondAmountTooLow(uint256 value, uint256 required); - - /// @notice The bond does not exist - error NoBond(); - - /// @notice The bond already exists - error AlreadyBonded(); - - /// @notice A user bonded - event Bonded(address indexed who, uint256 amount); - - /// @notice A user bonded on behalf of someone else - event BondedFor(address via, address indexed who, uint256 amount); - - /// @notice A user unbonded - event Unbonded(address indexed who, uint256 amount); - - /// @notice The fixed amound that needs to be bonded - uint256 public BOND_AMOUNT = 100; - - /// @notice The total pooled amount - uint256 public bondedAmount; - - /// @notice A mapping of bond per account - mapping(address => uint256) bonds; - - /// @notice The owner of the contract - address owner; - - constructor() { - owner = msg.sender; - bondedAmount = 0; - } - - /// @notice Bonds BOND_AMOUNT on someone else's behalf using a signed EIP712 Message - /// @param from The real signer of the permit - /// @param gaslimit The maximum gas limit - /// @param deadline The deadline for the permit - /// @param v The v parameter of the permit signature - /// @param r The r parameter of the permit signature - /// @param s The s parameter of the permit signature - /// @dev the request is fulfilled - function bondFor( - address from, - uint64 gaslimit, - uint256 deadline, - uint8 v, - bytes32 r, - bytes32 s - ) external { - uint256 bondAmount = bonds[from]; - if (bondAmount != 0) { - revert AlreadyBonded(); - } - - CALL_PERMIT_CONTRACT.dispatch( - from, - address(this), - BOND_AMOUNT, - "", // transfer - gaslimit, - deadline, - v, - r, - s - ); - - bonds[from] = BOND_AMOUNT; - bondedAmount += BOND_AMOUNT; - } - - /// @notice Bonds BOND_AMOUNT towards the pool - function bond() external payable { - address sender = msg.sender; - uint256 amount = msg.value; - uint256 bondAmount = bonds[sender]; - - if (bondAmount != 0) { - revert AlreadyBonded(); - } - - if (amount < BOND_AMOUNT) { - revert BondAmountTooLow(amount, BOND_AMOUNT); - } - - bonds[sender] += amount; - bondedAmount += amount; - } - - /// @notice Unbonds BOND_AMOUNT from the pool - function unbond() external { - address payable sender = payable(msg.sender); - uint256 bondAmount = bonds[sender]; - if (bondAmount == 0) { - revert NoBond(); - } - - bonds[sender] -= bondAmount; - bondedAmount -= bondAmount; - - sender.transfer(bondAmount); - } - - /// @notice Returns the total bonded account - function getBondAmount(address who) external view returns (uint256) { - return bonds[who]; - } - - /// @notice Receive funds - /// @dev This is needed to allow the contract to accept transfers via call permit - receive() external payable {} - - modifier onlyOwner() { - require(msg.sender == owner); - _; - } -} diff --git a/test/contracts/solidity/ERC20.sol b/test/contracts/solidity/ERC20.sol deleted file mode 100644 index a9bbbea..0000000 --- a/test/contracts/solidity/ERC20.sol +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @dev The IERC20 contract's address. -address constant IERC20_ADDRESS = 0x0000000000000000000000000000000000000800; - -/// @dev The IERC20 contract's instance. -IERC20 constant IERC20_CONTRACT = IERC20(IERC20_ADDRESS); - -/// @title ERC20 interface -/// @dev see https://github.com/ethereum/EIPs/issues/20 -/// @dev copied from https://github.com/OpenZeppelin/openzeppelin-contracts -/// @custom:address 0x0000000000000000000000000000000000000800 -interface IERC20 { - /// @dev Returns the name of the token. - /// @custom:selector 06fdde03 - function name() external view returns (string memory); - - /// @dev Returns the symbol of the token. - /// @custom:selector 95d89b41 - function symbol() external view returns (string memory); - - /// @dev Returns the decimals places of the token. - /// @custom:selector 313ce567 - function decimals() external view returns (uint8); - - /// @dev Total number of tokens in existence - /// @custom:selector 18160ddd - function totalSupply() external view returns (uint256); - - /// @dev Gets the balance of the specified address. - /// @custom:selector 70a08231 - /// @param owner The address to query the balance of. - /// @return An uint256 representing the amount owned by the passed address. - function balanceOf(address owner) external view returns (uint256); - - /// @dev Function to check the amount of tokens that an owner allowed to a spender. - /// @custom:selector dd62ed3e - /// @param owner address The address which owns the funds. - /// @param spender address The address which will spend the funds. - /// @return A uint256 specifying the amount of tokens still available for the spender. - function allowance(address owner, address spender) - external - view - returns (uint256); - - /// @dev Transfer token for a specified address - /// @custom:selector a9059cbb - /// @param to The address to transfer to. - /// @param value The amount to be transferred. - /// @return true if the transfer was succesful, revert otherwise. - function transfer(address to, uint256 value) external returns (bool); - - /// @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. - /// Beware that changing an allowance with this method brings the risk that someone may use both the old - /// and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this - /// race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: - /// https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - /// @custom:selector 095ea7b3 - /// @param spender The address which will spend the funds. - /// @param value The amount of tokens to be spent. - /// @return true, this cannot fail - function approve(address spender, uint256 value) external returns (bool); - - /// @dev Transfer tokens from one address to another - /// @custom:selector 23b872dd - /// @param from address The address which you want to send tokens from - /// @param to address The address which you want to transfer to - /// @param value uint256 the amount of tokens to be transferred - /// @return true if the transfer was succesful, revert otherwise. - function transferFrom( - address from, - address to, - uint256 value - ) external returns (bool); - - /// @dev Event emited when a transfer has been performed. - /// @custom:selector ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef - /// @param from address The address sending the tokens - /// @param to address The address receiving the tokens. - /// @param value uint256 The amount of tokens transfered. - event Transfer(address indexed from, address indexed to, uint256 value); - - /// @dev Event emited when an approval has been registered. - /// @custom:selector 8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 - /// @param owner address Owner of the tokens. - /// @param spender address Allowed spender. - /// @param value uint256 Amount of tokens approved. - event Approval( - address indexed owner, - address indexed spender, - uint256 value - ); -} - -/// @title Native currency wrapper interface. -/// @dev Allow compatibility with dApps expecting this precompile to be -/// a WETH-like contract. -interface WrappedNativeCurrency { - /// @dev Provide compatibility for contracts that expect wETH design. - /// Returns funds to sender as this precompile tokens and the native tokens are the same. - /// @custom:selector d0e30db0 - function deposit() external payable; - - /// @dev Provide compatibility for contracts that expect wETH design. - /// Does nothing. - /// @custom:selector 2e1a7d4d - /// @param value uint256 The amount to withdraw/unwrap. - function withdraw(uint256 value) external; - - /// @dev Event emited when deposit() has been called. - /// @custom:selector e1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c - /// @param owner address Owner of the tokens - /// @param value uint256 The amount of tokens "wrapped". - event Deposit(address indexed owner, uint256 value); - - /// @dev Event emited when withdraw(uint256) has been called. - /// @custom:selector 7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65 - /// @param owner address Owner of the tokens - /// @param value uint256 The amount of tokens "unwrapped". - event Withdrawal(address indexed owner, uint256 value); -} diff --git a/test/contracts/solidity/ERC20Instance.sol b/test/contracts/solidity/ERC20Instance.sol deleted file mode 100644 index 61795fa..0000000 --- a/test/contracts/solidity/ERC20Instance.sol +++ /dev/null @@ -1,193 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -import { IERC20 } from "./ERC20.sol"; - -contract ERC20Instance is IERC20 { - /// The ierc20 at the known pre-compile address. - IERC20 public erc20 = IERC20(0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f); - address erc20address = 0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f; - - receive() external payable { - // React to receiving ether - } - - function name() external view override returns (string memory) { - // We nominate our target collator with all the tokens provided - return erc20.name(); - } - - function symbol() external view override returns (string memory) { - // We nominate our target collator with all the tokens provided - return erc20.symbol(); - } - - function decimals() external view override returns (uint8) { - // We nominate our target collator with all the tokens provided - return erc20.decimals(); - } - - function totalSupply() external view override returns (uint256) { - // We nominate our target collator with all the tokens provided - return erc20.totalSupply(); - } - - function totalSupply_static() public returns (uint256) { - (bool result, bytes memory data) = erc20address.staticcall( - abi.encodeWithSignature("totalSupply()") - ); - require(result == true); - return uint256(bytes32(data)); - } - - function balanceOf(address who) external view override returns (uint256) { - // We nominate our target collator with all the tokens provided - return erc20.balanceOf(who); - } - - function allowance( - address owner, - address spender - ) external view override returns (uint256) { - return erc20.allowance(owner, spender); - } - - function allowance_static( - address _owner, - address _spender - ) external returns (bytes memory) { - (bool result, bytes memory data) = erc20address.staticcall( - abi.encodeWithSignature( - "allowance(address, address)", - _owner, - _spender - ) - ); - return data; - } - - function transfer( - address to, - uint256 value - ) external override returns (bool) { - return erc20.transfer(to, value); - } - - function transfer_delegate( - address to, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature("transfer(address,uint256)", to, value) - ); - return result; - } - - function transfer_static( - address to, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = erc20address.staticcall( - abi.encodeWithSignature("transfer(address,uint256)", to, value) - ); - return result; - } - - function approve( - address spender, - uint256 value - ) external override returns (bool) { - return erc20.approve(spender, value); - } - - function approve_max_supply(address spender) public returns (bool) { - uint256 total = totalSupply_static(); - return erc20.approve(spender, total); - } - - function approve_delegate( - address spender, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature("approve(address,uint256)", spender, value) - ); - return result; - } - - function approve_ext_delegate(address spender, uint256 value) external { - (bool result, bytes memory data) = address(this).delegatecall( - abi.encodeWithSignature("approve(address,uint256)", spender, value) - ); - require(result, string(data)); - } - - function approve_static( - address spender, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = erc20address.staticcall( - abi.encodeWithSignature("approve(address,uint256)", spender, value) - ); - return result; - } - - function approve_ext_static(address spender, uint256 value) external { - (bool result, bytes memory data) = address(this).staticcall( - abi.encodeWithSignature("approve(address,uint256)", spender, value) - ); - require(result, string(data)); - } - - function approve_delegate_to_static( - address spender, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = address(this).delegatecall( - abi.encodeWithSignature( - "approve_ext_static(address,uint256)", - spender, - value - ) - ); - return result; - } - - function approve_static_to_delegate( - address spender, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = address(this).staticcall( - abi.encodeWithSignature( - "approve_ext_delegate(address,uint256)", - spender, - value - ) - ); - return result; - } - - function transferFrom( - address from, - address to, - uint256 value - ) external override returns (bool) { - return erc20.transferFrom(from, to, value); - } - - function transferFrom_delegate( - address from, - address to, - uint256 value - ) external returns (bool) { - (bool result, bytes memory data) = erc20address.delegatecall( - abi.encodeWithSignature( - "transferFrom(address,address,uint256)", - from, - to, - value - ) - ); - return result; - } -} diff --git a/test/contracts/solidity/EventEmitter.sol b/test/contracts/solidity/EventEmitter.sol deleted file mode 100644 index 9dc5ad3..0000000 --- a/test/contracts/solidity/EventEmitter.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -contract EventEmitter { - event Constructed(address indexed owner); - - constructor() { - emit Constructed(msg.sender); - } -} \ No newline at end of file diff --git a/test/contracts/solidity/MultiplyBy7.sol b/test/contracts/solidity/MultiplyBy7.sol deleted file mode 100644 index afd60ce..0000000 --- a/test/contracts/solidity/MultiplyBy7.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -contract MultiplyBy7 { - function multiply(uint256 a) public pure returns (uint256 d) { - return a * 7; - } -} \ No newline at end of file diff --git a/test/contracts/solidity/SmartContractPrecompileCallTests.sol b/test/contracts/solidity/SmartContractPrecompileCallTests.sol deleted file mode 100644 index 65c48c1..0000000 --- a/test/contracts/solidity/SmartContractPrecompileCallTests.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -import "./Batch.sol"; - -/// @notice Smart contract to test precompile calls -contract SmartContractPrecompileCallTest { - function callBatch(address to, bytes[] memory callData) external { - address[] memory toAddress = new address[](1); - toAddress[0] = to; - uint256[] memory value = new uint256[](1); - value[0] = 0; - uint64[] memory gasLimit = new uint64[](1); - gasLimit[0] = 0; - BATCH_CONTRACT.batchAll(toAddress, value, callData, gasLimit); - } -} diff --git a/test/contracts/solidity/XcmUtils.sol b/test/contracts/solidity/XcmUtils.sol deleted file mode 100644 index dd4afbe..0000000 --- a/test/contracts/solidity/XcmUtils.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity >=0.8.3; - -/// @author The Moonbeam Team -/// @title Xcm Utils Interface -/// The interface through which solidity contracts will interact with xcm utils pallet -/// @custom:address 0x0000000000000000000000000000000000000803 -interface XcmUtils { - // A multilocation is defined by its number of parents and the encoded junctions (interior) - struct Multilocation { - uint8 parents; - bytes[] interior; - } - - /// Get retrieve the account associated to a given MultiLocation - /// @custom:selector 343b3e00 - /// @param multilocation The multilocation that we want to know to which account maps to - /// @return account The account the multilocation maps to in this chain - function multilocationToAddress(Multilocation memory multilocation) - external - view - returns (address account); - - /// Get the weight that a message will consume in our chain - /// @custom:selector 25d54154 - /// @param message scale encoded xcm mversioned xcm message - function weightMessage(bytes memory message) - external - view - returns (uint64 weight); - - /// Get units per second charged for a given multilocation - /// @custom:selector 3f0f65db - /// @param multilocation scale encoded xcm mversioned xcm message - function getUnitsPerSecond(Multilocation memory multilocation) - external - view - returns (uint256 unitsPerSecond); - - /// Execute custom xcm message - /// @dev This function CANNOT be called from a smart contract - /// @custom:selector 34334a02 - /// @param message The versioned message to be executed scale encoded - /// @param maxWeight The maximum weight to be consumed - function xcmExecute(bytes memory message, uint64 maxWeight) external; - - /// Send custom xcm message - /// @custom:selector 98600e64 - /// @param dest The destination chain to which send this message - /// @param message The versioned message to be sent scale-encoded - function xcmSend(Multilocation memory dest, bytes memory message) external; -} diff --git a/test/helpers/assets.ts b/test/helpers/assets.ts deleted file mode 100644 index 54262eb..0000000 --- a/test/helpers/assets.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { u16 } from "@polkadot/types"; -import { DevModeContext } from "@moonwall/cli"; -import { KeyringPair } from "@polkadot/keyring/types"; -import type { AccountId20 } from "@polkadot/types/interfaces/runtime"; - -export const DUMMY_REVERT_BYTECODE = "0x60006000fd"; -export const RELAY_SOURCE_LOCATION = { Xcm: { parents: 1, interior: "Here" } }; -export const RELAY_SOURCE_LOCATION2 = { Xcm: { parents: 2, interior: "Here" } }; -export const RELAY_V3_SOURCE_LOCATION = { V3: { parents: 1, interior: "Here" } } as any; -export const PARA_1000_SOURCE_LOCATION = { - Xcm: { parents: 1, interior: { X1: { Parachain: 1000 } } }, -}; -export const PARA_2000_SOURCE_LOCATION = { - Xcm: { parents: 1, interior: { X1: { Parachain: 2000 } } }, -}; -export const PARA_1001_SOURCE_LOCATION = { - Xcm: { parents: 1, interior: { X1: { Parachain: 1001 } } }, -}; - -export interface AssetMetadata { - name: string; - symbol: string; - decimals: bigint; - isFrozen: boolean; -} - -export const relayAssetMetadata: AssetMetadata = { - name: "DOT", - symbol: "DOT", - decimals: 12n, - isFrozen: false, -}; - -export async function mockAssetCreation( - context: DevModeContext, - sudoAccount: KeyringPair, - assetId: u16, - admin: string | AccountId20, - location: any, - metadata: AssetMetadata, - is_sufficient: boolean -) { - const api = context.polkadotJs(); - // Register the asset - await context.createBlock( - api.tx.sudo - .sudo( - api.tx.utility.batch([ - api.tx.foreignAssetsCreator.createForeignAsset(location, assetId, admin, is_sufficient, 1), - api.tx.assetRate.create( - assetId, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - api.tx.foreignAssets.forceSetMetadata( - assetId, - metadata.name, - metadata.symbol, - metadata.decimals, - metadata.isFrozen - ), - ]) - ) - .signAsync(sudoAccount), - { allowFailures: false } - ); - - const evmCodeAssetKey = api.query.evm.accountCodes.key( - "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF" + assetId.toHex().slice(2) - ); - - await context.createBlock( - api.tx.sudo - .sudo( - api.tx.system.setStorage([ - [ - evmCodeAssetKey, - `0x${((DUMMY_REVERT_BYTECODE.length - 2) * 2) - .toString(16) - .padStart(2)}${DUMMY_REVERT_BYTECODE.slice(2)}`, - ], - ]) - ) - .signAsync(sudoAccount), - { allowFailures: false } - ); - return; -} diff --git a/test/helpers/eth-transactions.ts b/test/helpers/eth-transactions.ts deleted file mode 100644 index d7a8f11..0000000 --- a/test/helpers/eth-transactions.ts +++ /dev/null @@ -1,51 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { expect } from "@moonwall/cli"; -import { EventRecord } from "@polkadot/types/interfaces"; -import { - EvmCoreErrorExitError, - EvmCoreErrorExitFatal, - EvmCoreErrorExitReason, - EvmCoreErrorExitRevert, - EvmCoreErrorExitSucceed, -} from "@polkadot/types/lookup"; -export type Errors = { - Succeed: EvmCoreErrorExitSucceed["type"]; - Error: EvmCoreErrorExitError["type"]; - Revert: EvmCoreErrorExitRevert["type"]; - Fatal: EvmCoreErrorExitFatal["type"]; -}; - -export function expectEVMResult( - events: EventRecord[], - resultType: Type, - reason?: T[Type] -) { - expect(events, `Missing events, probably failed execution`).to.be.length.at.least(1); - const ethereumResult = events.find( - ({ event: { section, method } }) => section == "ethereum" && method == "Executed" - )!.event.data[3] as EvmCoreErrorExitReason; - - const foundReason = ethereumResult.isError - ? ethereumResult.asError.type - : ethereumResult.isFatal - ? ethereumResult.asFatal.type - : ethereumResult.isRevert - ? ethereumResult.asRevert.type - : ethereumResult.asSucceed.type; - - expect(ethereumResult.type, `Invalid EVM Execution - (${ethereumResult.type}.${foundReason})`).to.equal(resultType); - if (reason) { - if (ethereumResult.isError) { - expect(ethereumResult.asError.type, `Invalid EVM Execution ${ethereumResult.type} Reason`).to.equal(reason); - } else if (ethereumResult.isFatal) { - expect(ethereumResult.asFatal.type, `Invalid EVM Execution ${ethereumResult.type} Reason`).to.equal(reason); - } else if (ethereumResult.isRevert) { - expect(ethereumResult.asRevert.type, `Invalid EVM Execution ${ethereumResult.type} Reason`).to.equal( - reason - ); - } else - expect(ethereumResult.asSucceed.type, `Invalid EVM Execution ${ethereumResult.type} Reason`).to.equal( - reason - ); - } -} diff --git a/test/helpers/index.ts b/test/helpers/index.ts deleted file mode 100644 index 3c98932..0000000 --- a/test/helpers/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./eth-transactions"; -export * from "./xcm"; diff --git a/test/helpers/xcm.ts b/test/helpers/xcm.ts deleted file mode 100644 index 8405987..0000000 --- a/test/helpers/xcm.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { DevModeContext } from "@moonwall/cli"; -import { u8aToHex } from "@polkadot/util"; - -export function descendOriginFromAddress20( - context: DevModeContext, - address: `0x${string}` = "0x0101010101010101010101010101010101010101", - paraId: number = 1 -) { - const toHash = new Uint8Array([ - ...new TextEncoder().encode("SiblingChain"), - ...context.polkadotJs().createType("Compact", paraId).toU8a(), - ...context - .polkadotJs() - .createType("Compact", "AccountKey20".length + 20) - .toU8a(), - ...new TextEncoder().encode("AccountKey20"), - ...context.polkadotJs().createType("AccountId", address).toU8a(), - ]); - - return { - originAddress: address, - descendOriginAddress: u8aToHex(context.polkadotJs().registry.hash(toHash).slice(0, 20)), - }; -} diff --git a/test/moonwall.config.json b/test/moonwall.config.json deleted file mode 100644 index 57c4d69..0000000 --- a/test/moonwall.config.json +++ /dev/null @@ -1,596 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/Moonsong-Labs/moonwall/main/packages/types/config_schema.json", - "label": "💃 MasterConfig", - "defaultTestTimeout": 120000, - "scriptsDir": "scripts/", - "environments": [ - { - "name": "dev_tanssi", - "timeout": 120000, - "envVars": ["DEBUG_COLORS=1"], - "testFileDir": ["suites/common-all", "suites/common-xcm", "suites/common-tanssi", "suites/dev-tanssi"], - "runScripts": ["compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c dancebox_dev -a='--mock-container-chain=2000 --mock-container-chain=2001'"], - "multiThreads": true, - "reporters": ["basic"], - "foundation": { - "type": "dev", - "launchSpec": [ - { - "name": "tanssi", - "binPath": "../target/release/tanssi-node", - "options": [ - "--force-authoring", - "--rpc-cors=all", - "--no-prometheus", - "--no-telemetry", - "--reserved-only", - "--alice", - "--tmp", - "--chain=tmp/dancebox_dev-raw.json", - "--sealing=manual", - "--no-hardware-benchmarks", - "--wasmtime-precompiled=wasm" - ], - "disableDefaultEthProviders": true, - "newRpcBehaviour": true - } - ] - } - }, - { - "name": "dev_dancebox_specs", - "testFileDir": ["suites/dancebox-specs"], - "multiThreads": true, - "foundation": { - "type": "dev", - "launchSpec": [ - { - "name": "tanssi", - "binPath": "../target/release/tanssi-node", - "options": ["--chain=dancebox", "--sealing=manual", "--collator", "--dev-service", "--tmp"], - "disableDefaultEthProviders": true, - "newRpcBehaviour": true - } - ] - } - }, - { - "name": "dev_frontier_template", - "testFileDir": [ - "suites/common-all", - "suites/common-xcm", - "suites/common-container-chains", - "suites/dev-frontier-template" - ], - "runScripts": [ - "pre-build-contracts.ts", - "compile-wasm.ts compile -b ../target/release/container-chain-frontier-node -o wasm -c dev" - ], - "multiThreads": true, - "reporters": ["basic"], - "contracts": "helpers/", - "foundation": { - "type": "dev", - "launchSpec": [ - { - "name": "frontier-template", - "binPath": "../target/release/container-chain-frontier-node", - "options": [ - "--force-authoring", - "--rpc-cors=all", - "--no-prometheus", - "--no-telemetry", - "--reserved-only", - "--alice", - "--tmp", - "--chain=tmp/dev-raw.json", - "--sealing=manual", - "--no-hardware-benchmarks", - "--wasmtime-precompiled=wasm" - ], - "newRpcBehaviour": true - } - ] - } - }, - { - "name": "dev_simple_template", - "testFileDir": ["suites/common-all", "suites/common-xcm", "suites/common-container-chains"], - "runScripts": ["compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c dev"], - "multiThreads": true, - "reporters": ["basic"], - "contracts": "helpers/", - "foundation": { - "type": "dev", - "launchSpec": [ - { - "name": "simple-template", - "binPath": "../target/release/container-chain-simple-node", - "options": [ - "--force-authoring", - "--rpc-cors=all", - "--no-prometheus", - "--no-telemetry", - "--reserved-only", - "--alice", - "--tmp", - "--chain=tmp/dev-raw.json", - "--sealing=manual", - "--no-hardware-benchmarks", - "--wasmtime-precompiled=wasm" - ], - "newRpcBehaviour": true, - "disableDefaultEthProviders": true - } - ] - } - }, - { - "name": "zombie_tanssi", - "timeout": 600000, - "testFileDir": ["suites/para"], - "runScripts": [ - "build-spec.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/template-container-2000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-frontier-node -o wasm -c specs/template-container-2001.json" - ], - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssi.json", - "skipBlockCheck": ["Container2002"] - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - }, - { - "name": "Container2001", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "Container2002", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9951"] - }, - { - "name": "ethers", - "type": "ethers", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "w3", - "type": "web3", - "endpoints": ["ws://127.0.0.1:9950"] - } - ] - }, - { - "name": "zombie_tanssi_keep_db", - "testFileDir": ["suites/keep-db"], - "runScripts": [ - "build-spec-warp-sync.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/warp-sync-tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/warp-sync-template-container-2000.json" - ], - "timeout": 600000, - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiKeepDb.json" - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - } - ] - }, - { - "name": "zombie_tanssi_metrics", - "testFileDir": ["suites/metrics"], - "runScripts": [ - "build-spec-warp-sync.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/warp-sync-tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/warp-sync-template-container-2000.json" - ], - "timeout": 600000, - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiMetrics.json" - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - } - ] - }, - { - "name": "zombie_tanssi_one_node", - "timeout": 600000, - "testFileDir": ["suites/one-node"], - "runScripts": [ - "build-spec-one-node.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/one-node-tanssi-1000.json" - ], - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiOneNode.json", - "skipBlockCheck": ["Container2000", "Container2001"] - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - } - ] - }, - { - "name": "zombie_tanssi_parathreads", - "timeout": 600000, - "testFileDir": ["suites/parathreads"], - "runScripts": [ - "build-spec-parathreads.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/parathreads-tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/parathreads-template-container-2000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-frontier-node -o wasm -c specs/parathreads-template-container-2001.json" - ], - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiParathreads.json", - "skipBlockCheck": ["Container2000", "Container2001"] - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - }, - { - "name": "Container2001", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "ethers", - "type": "ethers", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "w3", - "type": "web3", - "endpoints": ["ws://127.0.0.1:9950"] - } - ] - }, - { - "name": "zombie_tanssi_rotation", - "testFileDir": ["suites/rotation-para"], - "runScripts": [ - "build-spec.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/template-container-2000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-frontier-node -o wasm -c specs/template-container-2001.json" - ], - "timeout": 600000, - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiRotation.json" - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - }, - { - "name": "Container2001", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "ethers", - "type": "ethers", - "endpoints": ["ws://127.0.0.1:9950"] - }, - { - "name": "w3", - "type": "web3", - "endpoints": ["ws://127.0.0.1:9950"] - } - ] - }, - { - "name": "zombie_tanssi_warp_sync", - "testFileDir": ["suites/warp-sync"], - "runScripts": [ - "build-spec-warp-sync.sh", - "download-polkadot.sh", - "compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c specs/warp-sync-tanssi-1000.json", - "compile-wasm.ts compile -b ../target/release/container-chain-simple-node -o wasm -c specs/warp-sync-template-container-2000.json" - ], - "timeout": 600000, - "foundation": { - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieTanssiWarpSync.json" - } - }, - "connections": [ - { - "name": "Relay", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9947"] - }, - { - "name": "Tanssi", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9948"] - }, - { - "name": "Container2000", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:9949"] - } - ] - }, - { - "name": "zombie_dancebox_upgrade", - "testFileDir": ["suites/rt-upgrade-zombienet"], - "runScripts": ["download-polkadot.sh"], - "timeout": 600000, - "foundation": { - "rtUpgradePath": "../target/release/wbuild/dancebox-runtime/dancebox_runtime.compact.compressed.wasm", - "type": "zombie", - "zombieSpec": { - "configPath": "./configs/zombieDanceboxUpgrade.json", - "disableDefaultEthProviders": true - } - } - }, - { - "name": "dancebox_smoke", - "testFileDir": ["suites/smoke-test-dancebox", "suites/smoke-test-common"], - "foundation": { - "type": "read_only" - }, - "reporters": ["html"], - "connections": [ - { - "name": "para", - "type": "polkadotJs", - "endpoints": ["wss://dancebox.tanssi-api.network"] - } - ] - }, - { - "name": "stagenet_dancebox_smoke", - "testFileDir": ["suites/smoke-test-dancebox", "suites/smoke-test-common"], - "foundation": { - "type": "read_only" - }, - "reporters": ["html"], - "connections": [ - { - "name": "para", - "type": "polkadotJs", - "endpoints": ["wss://fraa-stagebox-rpc.a.stagenet.tanssi.network"] - } - ] - }, - { - "name": "flashbox_smoke", - "testFileDir": ["suites/smoke-test-common"], - "foundation": { - "type": "read_only" - }, - "reporters": ["html"], - "connections": [ - { - "name": "para", - "type": "polkadotJs", - "endpoints": ["wss://fraa-flashbox-rpc.a.stagenet.tanssi.network"] - } - ] - }, - { - "name": "chopsticks_stagenet_dancebox_upgrade", - "testFileDir": ["suites/rt-upgrade-chopsticks-orchestrator"], - "foundation": { - "type": "chopsticks", - "rtUpgradePath": "../target/release/wbuild/dancebox-runtime/dancebox_runtime.compact.compressed.wasm", - "launchSpec": [ - { - "name": "db", - "type": "parachain", - "configPath": "./configs/stagenet-dancebox.yml" - } - ] - }, - "connections": [ - { - "name": "DB", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:8000"] - } - ] - }, - { - "name": "chopsticks_dancebox_upgrade", - "testFileDir": ["suites/rt-upgrade-chopsticks-orchestrator"], - "foundation": { - "type": "chopsticks", - "rtUpgradePath": "../target/release/wbuild/dancebox-runtime/dancebox_runtime.compact.compressed.wasm", - "launchSpec": [ - { - "name": "db", - "type": "parachain", - "configPath": "./configs/dancebox.yml" - } - ] - }, - "connections": [ - { - "name": "DB", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:8000"] - } - ] - }, - { - "name": "chopsticks_flashbox_upgrade", - "testFileDir": ["suites/rt-upgrade-chopsticks-orchestrator"], - "foundation": { - "type": "chopsticks", - "rtUpgradePath": "../target/release/wbuild/flashbox-runtime/flashbox_runtime.compact.compressed.wasm", - "launchSpec": [ - { - "name": "db", - "type": "parachain", - "configPath": "./configs/stagenet-flashbox.yml" - } - ] - }, - "connections": [ - { - "name": "DB", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:8000"] - } - ] - }, - { - "name": "dev_flashbox", - "envVars": ["DEBUG_COLORS=1"], - "testFileDir": ["suites/common-all", "suites/common-tanssi"], - "runScripts": ["compile-wasm.ts compile -b ../target/release/tanssi-node -o wasm -c flashbox_dev -a='--mock-container-chain=2000 --mock-container-chain=2001'"], - "multiThreads": true, - "reporters": ["basic"], - "foundation": { - "type": "dev", - "launchSpec": [ - { - "name": "tanssi", - "binPath": "../target/release/tanssi-node", - "options": [ - "--chain=flashbox_dev", - "--sealing=manual", - "--alice", - "--force-authoring", - "--rpc-cors=all", - "--tmp", - "--no-hardware-benchmarks", - "--no-prometheus", - "--no-telemetry", - "--reserved-only", - "--wasmtime-precompiled=wasm" - ], - "disableDefaultEthProviders": true, - "newRpcBehaviour": true - } - ] - } - }, - { - "name": "chopsticks_frontier_template_upgrade", - "testFileDir": ["suites/rt-upgrade-chopsticks-frontier-template"], - "foundation": { - "type": "chopsticks", - "rtUpgradePath": "../target/release/wbuild/container-chain-template-frontier-runtime/container_chain_template_frontier_runtime.compact.compressed.wasm", - "launchSpec": [ - { - "name": "db", - "type": "parachain", - "configPath": "./configs/frontierContainer.yml" - } - ] - }, - "connections": [ - { - "name": "para", - "type": "polkadotJs", - "endpoints": ["ws://127.0.0.1:8000"] - } - ] - } - ] -} diff --git a/test/package.json b/test/package.json deleted file mode 100644 index d96d781..0000000 --- a/test/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "test", - "private": true, - "version": "1.0.0", - "description": "", - "main": "index.js", - "type": "module", - "scripts": { - "start": "moonwall", - "fmt": "prettier --check --ignore-path ../.prettierignore '**/*.(yml|js|ts)'", - "fmt:fix": "prettier --write --ignore-path ../.prettierignore '**/*.(yml|js|ts|json)'", - "lint": "eslint --ext .ts,.js .", - "lint:fix": "eslint --fix --ext .ts,.js .", - "build-spec": "./scripts/build-spec.sh", - "pre-build-contracts": "tsx tools/pre-build-contracts.ts && pnpm prettier --write ./helpers/compiled/", - "download-chain-spec": "tsx scripts/downloadChainSpec.ts", - "register-para": "tsx scripts/registerPara.ts", - "generate-test-ids": "tsx scripts/deriveTestIds.ts process suites", - "sudo-register-para": "tsx scripts/sudoRegisterPara.ts", - "zombienet-restart": "tsx scripts/zombienetRestart.ts" - }, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "@acala-network/chopsticks": "npm:@tanssi/chopsticks@^0.9.10-b", - "@acala-network/chopsticks-core": "npm:@tanssi/chopsticks-core@^0.9.10-b", - "@acala-network/chopsticks-db": "npm:@tanssi/chopsticks-db@^0.9.10-b", - "@acala-network/chopsticks-executor": "npm:@tanssi/chopsticks-executor@^0.9.10-b", - "@moonbeam-network/api-augment": "0.2801.0", - "@moonwall/cli": "5.1.1", - "@moonwall/util": "5.1.1", - "@polkadot/api": "10.12.4", - "@polkadot/api-augment": "10.12.4", - "@polkadot/keyring": "12.6.2", - "@polkadot/types": "10.12.4", - "@polkadot/types-codec": "10.12.4", - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "@tanssi/api-augment": "workspace:*", - "@types/debug": "4.1.12", - "@types/node": "20.11.30", - "@typescript-eslint/eslint-plugin": "6.15.0", - "@typescript-eslint/parser": "6.15.0", - "@vitest/ui": "1.4.0", - "@zombienet/utils": "0.0.24", - "bottleneck": "2.19.5", - "chalk": "5.3.0", - "debug": "4.3.4", - "eslint": "8.56.0", - "ethers": "6.11.1", - "json-bigint": "1.0.0", - "pnpm": "8.12.1", - "prettier": "2.8.8", - "solc": "0.8.21", - "tsx": "4.7.1", - "typescript": "5.4.2", - "viem": "2.8.14", - "vitest": "1.4.0", - "web3": "4.6.0", - "web3-providers-ws": "4.0.7", - "yargs": "17.7.2" - }, - "dependencies": { - "@zombienet/orchestrator": "0.0.76", - "inquirer": "9.2.16", - "ps-node": "0.1.6" - } -} diff --git a/test/scripts/build-spec-one-node.sh b/test/scripts/build-spec-one-node.sh deleted file mode 100755 index cef5a13..0000000 --- a/test/scripts/build-spec-one-node.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Exit on any error -set -e - -# Always run the commands from the "test" dir -cd $(dirname $0)/.. - -mkdir -p specs -../target/release/tanssi-node build-spec --chain dancebox-local --parachain-id 1000 --invulnerable "Collator-01" --invulnerable "Collator-02" > specs/one-node-tanssi-1000.json diff --git a/test/scripts/build-spec-parathreads.sh b/test/scripts/build-spec-parathreads.sh deleted file mode 100755 index ec14ebb..0000000 --- a/test/scripts/build-spec-parathreads.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# Exit on any error -set -e - -# Always run the commands from the "test" dir -cd $(dirname $0)/.. - -mkdir -p specs -../target/release/container-chain-simple-node build-spec --disable-default-bootnode --add-bootnode "/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" --parachain-id 2000 --raw > specs/parathreads-template-container-2000.json -../target/release/container-chain-frontier-node build-spec --disable-default-bootnode --add-bootnode "/ip4/127.0.0.1/tcp/33050/ws/p2p/12D3KooWFGaw1rxB6MSuN3ucuBm7hMq5pBFJbEoqTyth4cG483Cc" --parachain-id 2001 --raw > specs/parathreads-template-container-2001.json -# TODO: add parathreads to genesis when supported by pallet_registrar -../target/release/tanssi-node build-spec --chain dancebox-local --parachain-id 1000 --invulnerable "Collator-01" --invulnerable "Collator-02" --invulnerable "Collator-03" --invulnerable "Collator-04" > specs/parathreads-tanssi-1000.json diff --git a/test/scripts/build-spec-warp-sync.sh b/test/scripts/build-spec-warp-sync.sh deleted file mode 100755 index 6fba634..0000000 --- a/test/scripts/build-spec-warp-sync.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# Exit on any error -set -e - -# Always run the commands from the "test" dir -cd $(dirname $0)/.. - -mkdir -p specs -../target/release/container-chain-simple-node build-spec --disable-default-bootnode --add-bootnode "/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" --parachain-id 2000 --raw > specs/warp-sync-template-container-2000.json -../target/release/tanssi-node build-spec --chain dancebox-local --parachain-id 1000 --add-container-chain specs/warp-sync-template-container-2000.json --invulnerable "Collator1000-01" --invulnerable "Collator1000-02" --invulnerable "Collator1000-03" --invulnerable "Collator2000-01" --invulnerable "Collator2000-02" > specs/warp-sync-tanssi-1000.json diff --git a/test/scripts/build-spec.sh b/test/scripts/build-spec.sh deleted file mode 100755 index ef30558..0000000 --- a/test/scripts/build-spec.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# Exit on any error -set -e - -# Always run the commands from the "test" dir -cd $(dirname $0)/.. - -mkdir -p specs -../target/release/container-chain-simple-node build-spec --disable-default-bootnode --add-bootnode "/ip4/127.0.0.1/tcp/33049/ws/p2p/12D3KooWHVMhQDHBpj9vQmssgyfspYecgV6e3hH1dQVDUkUbCYC9" --parachain-id 2000 --raw > specs/template-container-2000.json -../target/release/container-chain-frontier-node build-spec --disable-default-bootnode --add-bootnode "/ip4/127.0.0.1/tcp/33050/ws/p2p/12D3KooWFGaw1rxB6MSuN3ucuBm7hMq5pBFJbEoqTyth4cG483Cc" --parachain-id 2001 --raw > specs/template-container-2001.json -../target/release/container-chain-simple-node build-spec --disable-default-bootnode --parachain-id 2002 --raw > specs/template-container-2002.json -../target/release/tanssi-node build-spec --chain dancebox-local --parachain-id 1000 --add-container-chain specs/template-container-2000.json --add-container-chain specs/template-container-2001.json --invulnerable "Collator1000-01" --invulnerable "Collator1000-02" --invulnerable "Collator2002-01" --invulnerable "Collator2002-02" --invulnerable "Collator2000-01" --invulnerable "Collator2000-02" --invulnerable "Collator2001-01" --invulnerable "Collator2001-02" > specs/tanssi-1000.json diff --git a/test/scripts/compile-wasm.ts b/test/scripts/compile-wasm.ts deleted file mode 100644 index 164e988..0000000 --- a/test/scripts/compile-wasm.ts +++ /dev/null @@ -1,120 +0,0 @@ -import fs from "fs/promises"; -import path from "path"; -import child_process from "child_process"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("2.0.0") - .options({ - OutputDirectory: { - type: "string", - alias: "o", - description: "Output directory for compiled contracts", - default: "precompiled-wasm", - }, - Binary: { - type: "string", - alias: "b", - description: "Moonbeam binary path", - default: "contracts/src", - }, - Chain: { - type: "string", - alias: "c", - description: "runtime chain to use", - require: true, - }, - Verbose: { - type: "boolean", - alias: "v", - description: "Verbose mode for extra logging.", - default: false, - }, - AdditionalArgs: { - type: "string", - alias: "a", - description: "Additional arguments to pass to build-spec command", - }, - }) - .command("compile", "Compile wasm", async (argv) => { - await main(argv as any); - }) - .parse(); - -async function spawn(cmd: string) { - return new Promise((resolve, reject) => { - const spawned = child_process.spawn(cmd, { shell: true }); - - let errData = ""; - let outData = ""; - spawned.stdout.on("data", (chunk) => { - outData += chunk.toString(); - }); - - spawned.stderr.on("data", (chunk) => { - errData += chunk.toString(); - }); - - spawned.on("close", function (code) { - if (code && code > 0) { - return reject(new Error(errData)); - } - - resolve(outData); - }); - - spawned.on("error", function (err) { - reject(err); - }); - }); -} - -async function main(args: any) { - const outputDirectory = path.join(process.cwd(), args.argv.OutputDirectory); - const binaryPath = args.argv.Binary; - - console.log(`🗃️ Binary: ${binaryPath}`); - console.log(`🗃️ Output directory: ${outputDirectory}`); - - child_process.execSync(`mkdir -p ${outputDirectory}`); - - await fs.mkdir("tmp", { recursive: true }); - const tmpDir = await fs.mkdtemp("tmp/base-path"); - try { - if (args.argv.Chain.endsWith(".json")) { - // Do not generate chain spec if Chain argument is already a chain spec - // Generate precompiled wasm - const command = - `${binaryPath} precompile-wasm --log=wasmtime-runtime --base-path=${tmpDir} ` + - `--chain ${args.argv.Chain} ${outputDirectory}`; - console.log(`🗃️ ${command}`); - await spawn(command); - } else { - const additionalArgs = args.argv.AdditionalArgs || ""; - // Generate plain chain spec - const generateChainSpecCmd = `${binaryPath} build-spec --chain ${args.argv.Chain} ${additionalArgs} > tmp/${args.argv.Chain}.json`; - console.log(`🗃️ ${generateChainSpecCmd}`); - await spawn(generateChainSpecCmd); - - // Generate raw chain spec - const generateRawChainSpecCmd = - `${binaryPath} build-spec --chain tmp/${args.argv.Chain}.json ` + - `--raw > tmp/${args.argv.Chain}-raw.json`; - console.log(`🗃️ ${generateRawChainSpecCmd}`); - await spawn(generateRawChainSpecCmd); - - // Generate precompiled wasm - const command = - `${binaryPath} precompile-wasm --log=wasmtime-runtime --base-path=${tmpDir} ` + - `--chain tmp/${args.argv.Chain}-raw.json ${outputDirectory}`; - console.log(`🗃️ ${command}`); - await spawn(command); - } - } finally { - if ((await fs.stat(tmpDir)).isDirectory()) { - await fs.rm(tmpDir, { recursive: true, force: true }); - } - } -} diff --git a/test/scripts/deriveTestIds.ts b/test/scripts/deriveTestIds.ts deleted file mode 100644 index c28c40c..0000000 --- a/test/scripts/deriveTestIds.ts +++ /dev/null @@ -1,126 +0,0 @@ -/** - * This script is designed to update test suite IDs within a directory structure, - * mimicking the default behavior of Visual Studio Code's file explorer. It reads - * through a directory, finds files with a specific function call (`describeSuite`), - * and updates the suite's ID based on the file's position within the directory tree. - * - * The naming convention for suite IDs follows these rules: - * 1. A prefix derived from the directory name. - * 2. Directories are represented by a 2-digit number. - * 3. Files are represented by a 2-digit number. - * - * Note: The script's sorting logic prioritizes, to match VSC's default behavior: - * 1. Files with special characters or spaces. - * 2. Files in a case-insensitive lexicographical order. - */ -import fs from "fs"; -import path from "path"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; - -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("2.0.0") - .command( - `process `, - "Changes the testsuite IDs based on positional order in the directory tree.", - (yargs) => { - return yargs.positional("rootDir", { - describe: "Input path for plainSpecFile to modify", - type: "string", - }); - }, - async (argv: any) => { - const rootDir = argv.rootDir; - - const topLevelDirs = fs - .readdirSync(rootDir) - .filter((dir) => fs.statSync(path.join(rootDir, dir)).isDirectory()); - const usedPrefixes: Set = new Set(); - - topLevelDirs.forEach((dir) => { - const prefix = generatePrefix(dir, usedPrefixes); - generateId(path.join(rootDir, dir), rootDir, prefix); - }); - } - ) - .help() - .parse(); - -function generatePrefix(directory: string, usedPrefixes: Set): string { - let prefix = directory[0].toUpperCase(); - - if (usedPrefixes.has(prefix)) { - const match = directory.match(/[-_](\w)/); - if (match) { - // if directory name has a '-' or '_' - prefix += match[1].toUpperCase(); - } else { - prefix = directory[1].toUpperCase(); - } - } - - while (usedPrefixes.has(prefix)) { - const charCode = prefix.charCodeAt(1); - if (charCode >= 90) { - // If it's Z, wrap around to A - prefix = String.fromCharCode(prefix.charCodeAt(0) + 1) + "A"; - } else { - prefix = prefix[0] + String.fromCharCode(charCode + 1); - } - } - - usedPrefixes.add(prefix); - return prefix; -} - -function generateId(directory: string, rootDir: string, prefix: string): void { - const contents = fs.readdirSync(directory); - - contents.sort((a, b) => { - const aIsDir = fs.statSync(path.join(directory, a)).isDirectory(); - const bIsDir = fs.statSync(path.join(directory, b)).isDirectory(); - - if (aIsDir && !bIsDir) return -1; - if (!aIsDir && bIsDir) return 1; - return customFileSort(a, b); - }); - - let fileCount = 1; - let subDirCount = 1; - - for (const item of contents) { - const fullPath = path.join(directory, item); - - if (fs.statSync(fullPath).isDirectory()) { - const subDirPrefix = ("0" + subDirCount).slice(-2); - generateId(fullPath, rootDir, prefix + subDirPrefix); - subDirCount++; - } else { - const fileContent = fs.readFileSync(fullPath, "utf-8"); - if (fileContent.includes("describeSuite")) { - const newId = prefix + ("0" + fileCount).slice(-2); - const updatedContent = fileContent.replace( - /(describeSuite\s*?\(\s*?\{\s*?id\s*?:\s*?['"])[^'"]+(['"])/, - `$1${newId}$2` - ); - fs.writeFileSync(fullPath, updatedContent); - } - fileCount++; - } - } -} - -function hasSpecialCharacters(filename: string): boolean { - return /[ \t!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]+/.test(filename); -} - -function customFileSort(a: string, b: string): number { - const aHasSpecialChars = hasSpecialCharacters(a); - const bHasSpecialChars = hasSpecialCharacters(b); - - if (aHasSpecialChars && !bHasSpecialChars) return -1; - if (!aHasSpecialChars && bHasSpecialChars) return 1; - - return a.localeCompare(b, undefined, { sensitivity: "accent" }); -} diff --git a/test/scripts/download-polkadot.sh b/test/scripts/download-polkadot.sh deleted file mode 100755 index 3d03892..0000000 --- a/test/scripts/download-polkadot.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# Exit on any error -set -e - -# Always run the commands from the "test" dir -cd $(dirname $0)/.. - -# Grab Polkadot version -branch=$(egrep -o '/polkadot.*#([^\"]*)' ../Cargo.lock | head -1 | sed 's/.*release-//#') -polkadot_release=$(echo $branch | sed 's/#.*//' | sed 's/\/polkadot-sdk?branch=tanssi-polkadot-v//') - -# There is a bug where moonwall saves a html file as an executable, and we try to execute that html file. -# To avoid it, delete any files that are not executables according to "file". -delete_if_not_binary() { - if [[ -f "$1" ]]; then - if ! file "$1" | grep -q 'executable'; then - rm "$1" - fi - fi -} - -delete_if_not_binary tmp/polkadot -delete_if_not_binary tmp/polkadot-execute-worker -delete_if_not_binary tmp/polkadot-prepare-worker - -if [[ -f tmp/polkadot && -f tmp/polkadot-execute-worker && -f tmp/polkadot-prepare-worker ]]; then - POLKADOT_VERSION=$(tmp/polkadot --version) - if [[ $POLKADOT_VERSION == *$polkadot_release* ]]; then - exit 0 - else - echo "Updating polkadot binary from $POLKADOT_VERSION to $polkadot_release" - - pnpm moonwall download polkadot $polkadot_release tmp - chmod +x tmp/polkadot - - pnpm moonwall download polkadot-execute-worker $polkadot_release tmp - chmod +x tmp/polkadot-execute-worker - - pnpm moonwall download polkadot-prepare-worker $polkadot_release tmp - chmod +x tmp/polkadot-prepare-worker - - fi -else - echo "Polkadot binary not found, downloading $polkadot_release" - pnpm moonwall download polkadot $polkadot_release tmp - chmod +x tmp/polkadot - - pnpm moonwall download polkadot-execute-worker $polkadot_release tmp - chmod +x tmp/polkadot-execute-worker - - pnpm moonwall download polkadot-prepare-worker $polkadot_release tmp - chmod +x tmp/polkadot-prepare-worker -fi diff --git a/test/scripts/downloadChainSpec.ts b/test/scripts/downloadChainSpec.ts deleted file mode 100644 index 3dee997..0000000 --- a/test/scripts/downloadChainSpec.ts +++ /dev/null @@ -1,74 +0,0 @@ -import fs from "fs/promises"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import jsonBg from "json-bigint"; -import { containerChainGenesisDataToChainSpec } from "../util/genesis_data"; -import { NETWORK_YARGS_OPTIONS, getApiFor } from "./utils/network"; -import { convertExponentials } from "@zombienet/utils"; -import { hexToString } from "@polkadot/util"; -const JSONbig = jsonBg({ useNativeBigInt: true }); - -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("1.0.0") - .command( - `*`, - "Creates a chainSpec.json file based on on-chain data for a container chain", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - output: { - describe: "Output path of raw chainSpec file", - type: "string", - }, - "para-id": { - describe: "Parachain id", - type: "number", - }, - "chain-type": { - describe: "Chain type", - type: "string", - }, - "relay-chain": { - describe: "Relay chain", - type: "string", - }, - }) - .demandOption(["output", "para-id", "chain-type", "relay-chain"]); - }, - async (argv) => { - const api = await getApiFor(argv); - - try { - process.stdout.write(`Reading on-chain genesis data for parachain ${argv.paraId} ...`); - const encoded = (await api.query.registrar.paraGenesisData(argv.paraId)) as any; - if (encoded.isNone) { - process.stdout.write(`❌ parachain not registered\n`); - return; - } - process.stdout.write(`Done ✅\n`); - const onChainGenesisData = await api.createType( - "TpContainerChainGenesisDataContainerChainGenesisData", - encoded.unwrap() - ); - const rawSpec = containerChainGenesisDataToChainSpec( - onChainGenesisData, - argv.paraId, - argv.chainType, - argv.relayChain - ); - // Add bootnodes (they are stored in a separate storage) - const bootNodes = (await api.query.registrar.bootNodes(argv.paraId)) as any; - rawSpec.bootNodes = bootNodes.map((x) => { - return hexToString(x.toHex()); - }); - process.stdout.write(`Writing to: ${argv.output} ...`); - await fs.writeFile(argv.output, convertExponentials(JSONbig.stringify(rawSpec, null, 3))); - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .parse(); diff --git a/test/scripts/modify-plain-specs.ts b/test/scripts/modify-plain-specs.ts deleted file mode 100644 index efee586..0000000 --- a/test/scripts/modify-plain-specs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import fs from "fs/promises"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import { convertExponentials } from "@zombienet/utils"; -import jsonBg from "json-bigint"; -const JSONbig = jsonBg({ useNativeBigInt: true }); - -const ALICE_ADDRESS = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"; -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("2.0.0") - .command( - `process `, - "Overwrites a plainSpec with Alice modifications", - (yargs) => { - return yargs - .positional("inputPath", { - describe: "Input path for plainSpecFile to modify", - type: "string", - }) - .positional("outputPath", { - describe: "Output path for modified file", - type: "string", - }); - }, - async (argv) => { - process.stdout.write(`Reading from: ${argv.inputPath} ...`); - const plainSpec = JSONbig.parse((await fs.readFile(argv.inputPath!)).toString()); - process.stdout.write(`Done ✅\n`); - - plainSpec.bootNodes = []; - plainSpec.genesis.runtimeGenesis.config.invulnerables.invulnerables = [ALICE_ADDRESS]; - - process.stdout.write(`Writing to: ${argv.outputPath} ...`); - await fs.writeFile(argv.outputPath!, convertExponentials(JSONbig.stringify(plainSpec, null, 3))); - process.stdout.write(`Done ✅\n`); - } - ) - .parse(); diff --git a/test/scripts/pre-build-contracts.ts b/test/scripts/pre-build-contracts.ts deleted file mode 100644 index 74f011b..0000000 --- a/test/scripts/pre-build-contracts.ts +++ /dev/null @@ -1,172 +0,0 @@ -import solc from "solc"; -import chalk from "chalk"; -import fs from "fs/promises"; -import path from "path"; -import { Compiled } from "../util/ethereum-contracts"; -import { fileURLToPath } from "url"; -import { dirname } from "path"; - -const sourceByReference = {} as { [ref: string]: string }; -const countByReference = {} as { [ref: string]: number }; -const refByContract = {} as { [contract: string]: string }; - -// For some reasons, solc doesn't provide the relative path to imports :( -const getImports = (fileRef: string) => (dependency: string) => { - if (sourceByReference[dependency]) { - countByReference[dependency] = (countByReference[dependency] || 0) + 1; - return { contents: sourceByReference[dependency] }; - } - let base = fileRef; - while (base && base.length > 1) { - const localRef = path.join(base, dependency); - if (sourceByReference[localRef]) { - countByReference[localRef] = (countByReference[localRef] || 0) + 1; - return { contents: sourceByReference[localRef] }; - } - base = path.dirname(base); - if (base == ".") { - continue; - } - } - return { error: "Source not found" }; -}; - -function compileSolidity(fileRef: string, contractContent: string): { [name: string]: Compiled } { - const filename = path.basename(fileRef); - const result = JSON.parse( - solc.compile( - JSON.stringify({ - language: "Solidity", - sources: { - [filename]: { - content: contractContent, - }, - }, - settings: { - optimizer: { enabled: true, runs: 200 }, - outputSelection: { - "*": { - "*": ["*"], - }, - }, - debug: { - revertStrings: "debug", - }, - }, - }), - { import: getImports(fileRef) } - ) - ); - if (!result.contracts) { - throw result; - } - return Object.keys(result.contracts[filename]).reduce((p, contractName) => { - p[contractName] = { - byteCode: "0x" + result.contracts[filename][contractName].evm.bytecode.object, - contract: result.contracts[filename][contractName], - sourceCode: contractContent, - }; - return p; - }, {} as { [name: string]: Compiled }); -} - -// Shouldn't be run concurrently with the same 'name' -async function compile(fileRef: string, destPath: string): Promise<{ [name: string]: Compiled }> { - const soliditySource = sourceByReference[fileRef]; - countByReference[fileRef]++; - if (!soliditySource) { - throw new Error(`Missing solidity file: ${fileRef}`); - } - const compiledContracts = compileSolidity(fileRef, soliditySource); - - await Promise.all( - Object.keys(compiledContracts).map(async (contractName) => { - const dest = `${path.join(destPath, path.dirname(fileRef), contractName)}.json`; - if (refByContract[dest]) { - console.warn( - chalk.red( - `Contract ${contractName} already exist from ` + - `${refByContract[dest]}. ` + - `Erasing previous version` - ) - ); - } - await fs.mkdir(path.dirname(dest), { recursive: true }); - await fs.writeFile(dest, JSON.stringify(compiledContracts[contractName]), { - flag: "w", - }); - console.log(` - ${chalk.green(`${contractName}.json`)} file has been saved!`); - refByContract[dest] = fileRef; - }) - ); - return compiledContracts; -} - -async function getFiles(dir) { - const subdirs = await fs.readdir(dir); - const files = await Promise.all( - subdirs.map(async (subdir) => { - const res = path.resolve(dir, subdir); - return (await fs.stat(res)).isDirectory() ? getFiles(res) : res; - }) - ); - return files.reduce((a, f) => a.concat(f), []); -} - -const main = async () => { - const args = process.argv.slice(2); - const __filename = fileURLToPath(import.meta.url); - const __dirname = dirname(__filename); - - // Order is important so precompiles are available first - const contractSourcePaths = [ - { - filepath: - args.length > 0 && args[0] != "undefined" ? args[0] : path.join(__dirname, "../contracts/solidity"), - importPath: "", // Reference in contracts are local - compile: true, - }, - ]; - - const sourceToCompile = {}; - for (const contractPath of contractSourcePaths) { - const contracts = (await getFiles(contractPath.filepath)).filter((filename) => filename.endsWith(".sol")); - for (const filepath of contracts) { - const ref = filepath.replace(contractPath.filepath, contractPath.importPath).replace(/^\//, ""); - sourceByReference[ref] = (await fs.readFile(filepath)).toString(); - if (contractPath.compile) { - countByReference[ref] = 0; - if (!sourceByReference[ref].includes("// skip-compilation")) { - sourceToCompile[ref] = sourceByReference[ref]; - } - } - } - } - - // Compile contracts - for (const ref of Object.keys(sourceToCompile)) { - try { - await compile(ref, "./helpers/compiled/"); - } catch (e) { - console.log(`Failed to compile: ${ref}`); - if (e.errors) { - e.errors.forEach((error) => { - console.log(error.formattedMessage); - }); - } else { - console.log(e); - } - process.exit(1); - } - } - for (const ref of Object.keys(countByReference)) { - if (!countByReference[ref]) { - console.log(`${chalk.red("Warning")}: ${ref} never used: ${countByReference[ref]}`); - } - } - - // Forcing exit to avoid solc maintaining the process - process.exit(0); -}; - -main(); diff --git a/test/scripts/registerPara.ts b/test/scripts/registerPara.ts deleted file mode 100644 index e487dd2..0000000 --- a/test/scripts/registerPara.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Keyring } from "@polkadot/api"; -import fs from "fs/promises"; -import jsonBg from "json-bigint"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import { chainSpecToContainerChainGenesisData } from "../util/genesis_data"; -import { NETWORK_YARGS_OPTIONS, getApiFor } from "./utils/network"; -const JSONbig = jsonBg({ useNativeBigInt: true }); - -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("1.0.0") - .command( - `*`, - "Registers a parachain", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - chain: { - describe: "Input path of raw chainSpec file", - type: "string", - }, - }) - .demandOption(["chain", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv); - const keyring = new Keyring({ type: "sr25519" }); - - try { - process.stdout.write(`Reading chainSpec from: ${argv.chain}\n`); - const rawSpec = JSONbig.parse(await fs.readFile(argv.chain!, "utf8")); - - if (rawSpec.bootNodes?.length) { - process.stdout.write( - `Warning: this chainSpec file has some bootnodes, which must be written manually using sudo: ${JSON.stringify( - rawSpec.bootNodes - )}\n` - ); - } - - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - const containerChainGenesisData = chainSpecToContainerChainGenesisData(api, rawSpec); - const tx = api.tx.registrar.register(rawSpec.para_id, containerChainGenesisData); - process.stdout.write(`Sending transaction... `); - const txHash = await tx.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .parse(); diff --git a/test/scripts/sudoRegisterPara.ts b/test/scripts/sudoRegisterPara.ts deleted file mode 100644 index 4419461..0000000 --- a/test/scripts/sudoRegisterPara.ts +++ /dev/null @@ -1,285 +0,0 @@ -import { Keyring } from "@polkadot/api"; -import fs from "fs/promises"; -import jsonBg from "json-bigint"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import { chainSpecToContainerChainGenesisData } from "../util/genesis_data"; -import { NETWORK_YARGS_OPTIONS, getApiFor } from "./utils/network"; -const JSONbig = jsonBg({ useNativeBigInt: true }); - -yargs(hideBin(process.argv)) - .usage("Usage: $0") - .version("1.0.0") - .command( - `register`, - "Registers a parachain, adds bootnodes, and sets it valid for collating", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - chain: { - describe: "Input path of raw chainSpec file", - type: "string", - }, - parathread: { - describe: "Set the chain as a parathread instead of a parachain", - type: "boolean", - default: false, - }, - }) - .demandOption(["chain", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv); - const keyring = new Keyring({ type: "sr25519" }); - - try { - process.stdout.write(`Reading chainSpec from: ${argv.chain}\n`); - const rawSpec = JSONbig.parse(await fs.readFile(argv.chain!, "utf8")); - - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - const containerChainGenesisData = chainSpecToContainerChainGenesisData(api, rawSpec); - const txs = []; - let tx1; - if (argv.parathread) { - const slotFreq = api.createType("TpTraitsSlotFrequency", { - min: 1, - max: 1, - }); - tx1 = api.tx.registrar.registerParathread(rawSpec.para_id, slotFreq, containerChainGenesisData); - } else { - tx1 = api.tx.registrar.registerParathread(rawSpec.para_id, containerChainGenesisData); - } - txs.push(tx1); - if (rawSpec.bootNodes?.length) { - const tx2 = api.tx.dataPreservers.setBootNodes(rawSpec.para_id, rawSpec.bootNodes); - const tx2s = api.tx.sudo.sudo(tx2); - txs.push(tx2s); - } - const tx3 = api.tx.registrar.markValidForCollating(rawSpec.para_id); - const tx3s = api.tx.sudo.sudo(tx3); - txs.push(tx3s); - - if (txs.length == 2) { - process.stdout.write(`Sending register transaction (register + markValidForCollating)... `); - } else { - process.stdout.write( - `Sending register transaction (register + setBootNodes + markValidForCollating)... ` - ); - } - const txBatch = api.tx.utility.batchAll(txs); - const txHash = await txBatch.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .command( - `markValidForCollating`, - "Marks a registered parachain as valid, allowing collators to start collating", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - "para-id": { - describe: "Container chain para id", - type: "number", - }, - }) - .demandOption(["para-id", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv); - const keyring = new Keyring({ type: "sr25519" }); - - try { - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - let tx = api.tx.registrar.markValidForCollating(argv.paraId); - tx = api.tx.sudo.sudo(tx); - process.stdout.write(`Sending transaction... `); - const txHash = await tx.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .command( - `setBootNodes`, - "Set bootnodes for a container chain", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - "para-id": { - describe: "Container chain para id", - type: "number", - }, - bootnode: { - describe: "Container chain para id", - type: "array", - }, - "keep-existing": { - describe: "Keep exisiting bootnodes, and append to the list instead of overwriting them", - type: "boolean", - }, - "mark-valid-for-collating": { - describe: "Also mark the registered chain as valid, if it was not marked already", - type: "boolean", - }, - }) - .demandOption(["para-id", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv as any); - const keyring = new Keyring({ type: "sr25519" }); - - try { - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - let bootnodes = []; - if (argv.keepExisting) { - // Read existing bootnodes - const onChainBootnodes = (await api.query.registrar.bootNodes(argv.paraId)) as any; - bootnodes = [...bootnodes, ...onChainBootnodes]; - } - if (!argv.bootnode) { - argv.bootnode = []; - } - bootnodes = [...bootnodes, ...argv.bootnode]; - - const tx1 = api.tx.dataPreservers.setBootNodes(argv.paraId, bootnodes); - const tx1s = api.tx.sudo.sudo(tx1); - let tx2s = null; - if (argv.markValidForCollating) { - // Check if not already valid, and only in that case call markValidForCollating - const notValidParas = (await api.query.registrar.pendingVerification()) as any; - if (notValidParas.toJSON().includes(argv.paraId)) { - process.stdout.write(`Will set container chain valid for collating\n`); - const tx2 = api.tx.registrar.markValidForCollating(argv.paraId); - tx2s = api.tx.sudo.sudo(tx2); - } else { - // ParaId already valid, or not registered at all - process.stdout.write(`Not setting container chain valid for collating\n`); - } - } - let tx; - if (tx2s != null) { - tx = api.tx.utility.batchAll([tx1s, tx2s]); - } else { - tx = tx1s; - } - process.stdout.write(`Sending transaction... `); - const txHash = await tx.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .command( - `deregister`, - "Deregister a container chain", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - "para-id": { - describe: "Container chain para id", - type: "number", - }, - }) - .demandOption(["para-id", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv as any); - const keyring = new Keyring({ type: "sr25519" }); - - try { - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - let tx = api.tx.registrar.deregister(argv.paraId); - tx = api.tx.sudo.sudo(tx); - process.stdout.write(`Sending transaction... `); - const txHash = await tx.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .command( - `pauseContainerChain`, - "Pause a container-chain from collating, without modifying its boot nodes nor its parachain config", - (yargs) => { - return yargs - .options({ - ...NETWORK_YARGS_OPTIONS, - "account-priv-key": { - type: "string", - demandOption: false, - alias: "account", - }, - "para-id": { - describe: "Container chain para id", - type: "number", - }, - }) - .demandOption(["para-id", "account-priv-key"]); - }, - async (argv) => { - const api = await getApiFor(argv); - const keyring = new Keyring({ type: "sr25519" }); - - try { - const privKey = argv["account-priv-key"]; - const account = keyring.addFromUri(privKey); - - let tx = api.tx.registrar.pauseContainerChain(argv.paraId); - tx = api.tx.sudo.sudo(tx); - process.stdout.write(`Sending transaction... `); - const txHash = await tx.signAndSend(account); - process.stdout.write(`${txHash.toHex()}\n`); - // TODO: this will always print Done, even if the extrinsic has failed - process.stdout.write(`Done ✅\n`); - } finally { - await api.disconnect(); - } - } - ) - .parse(); diff --git a/test/scripts/utils/network.ts b/test/scripts/utils/network.ts deleted file mode 100644 index d3f828a..0000000 --- a/test/scripts/utils/network.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Options } from "yargs"; -import { ApiPromise, WsProvider } from "@polkadot/api"; - -export type NetworkOptions = { - url: Options & { type: "string" }; - network: Options & { type: "string" }; - finalized: Options & { type: "boolean" }; -}; - -export type Argv = { - url?: string; - network?: string; - finalized?: boolean; -}; - -export type TANSSI_NETWORK_NAME = "stagenet" | "alphanet" | "tanssi"; -export type POLKADOT_NETWORK_NAME = "kusama" | "polkadot"; -export type NETWORK_NAME = TANSSI_NETWORK_NAME | POLKADOT_NETWORK_NAME; - -export const NETWORK_WS_URLS: { [name in NETWORK_NAME]: string } = { - // TODO: set public endpoints when they exist - stagenet: "", - alphanet: "", - tanssi: "", - kusama: "wss://kusama-rpc.polkadot.io", - polkadot: "wss://rpc.polkadot.io", -}; - -export const NETWORK_NAMES = Object.keys(NETWORK_WS_URLS) as NETWORK_NAME[]; - -export const NETWORK_YARGS_OPTIONS: NetworkOptions = { - url: { - type: "string", - description: "Websocket url", - conflicts: ["network"], - string: true, - }, - network: { - type: "string", - choices: NETWORK_NAMES, - description: "Known network", - string: true, - }, - finalized: { - type: "boolean", - default: false, - description: "listen to finalized only", - }, -}; - -export const getApiFor = async (argv: Argv) => { - const wsProvider = getWsProviderFor(argv); - return await ApiPromise.create({ - noInitWarn: true, - provider: wsProvider, - }); -}; - -export function isKnownNetwork(name: string): name is NETWORK_NAME { - return NETWORK_NAMES.includes(name as NETWORK_NAME); -} - -export const getWsProviderForNetwork = (name: NETWORK_NAME) => { - return new WsProvider(NETWORK_WS_URLS[name]); -}; - -// Supports providing an URL or a known network -export const getWsProviderFor = (argv: Argv) => { - if (isKnownNetwork(argv.network)) { - return getWsProviderForNetwork(argv.network); - } - return new WsProvider(argv.url); -}; diff --git a/test/scripts/zombienetRestart.ts b/test/scripts/zombienetRestart.ts deleted file mode 100644 index 4d3ca02..0000000 --- a/test/scripts/zombienetRestart.ts +++ /dev/null @@ -1,182 +0,0 @@ -import * as ps from "ps-node"; -import { exec, spawn, execSync } from "child_process"; -import { readFileSync, writeFileSync, readlinkSync, unlinkSync } from "fs"; -import yargs from "yargs"; -import { hideBin } from "yargs/helpers"; -import inquirer from "inquirer"; - -const getEnvVariables = (pid: number) => { - const envData = readFileSync(`/proc/${pid}/environ`).toString(); - return envData.split("\0").filter(Boolean); -}; - -const getCwd = (pid: number) => { - return readlinkSync(`/proc/${pid}/cwd`); -}; - -const targetProcessNames = ["tanssi-node", "container-chain-simple-node", "container-chain-frontier-node", "polkadot"]; -const pattern = targetProcessNames.join("|"); - -const fetchProcesses = async () => { - const cmd = `ps aux | grep -E "${pattern}"`; - const { stdout } = await execPromisify(cmd); - return stdout - .split("\n") - .filter((line) => line && !line.includes("grep -E")) - .map((line) => { - const parts = line.split(/\s+/); - const pid = parts[1]; - const command = parts.slice(10).join(" "); - return { - name: `PID: ${pid}, Command: ${command}`, - value: pid, - }; - }); -}; - -const execPromisify = (command: string) => { - return new Promise<{ stdout: string; stderr: string }>((resolve, reject) => { - exec(command, (error, stdout, stderr) => { - if (error) { - reject(error); - } else { - resolve({ stdout, stderr }); - } - }); - }); -}; - -yargs(hideBin(process.argv)) - .usage("Usage: $0 [options]") - .version("1.0.0") - - .command( - "restart", - "Restart a process by its PID", - (yargs) => { - return yargs - .option("pid", { - describe: "Process ID of the target process", - type: "number", - demandOption: false, - }) - .option("edit-cmd", { - describe: "Edit the command before restarting the process", - type: "boolean", - }) - .option("wait-ms", { - describe: "Delay (in milliseconds) before restarting the process", - type: "number", - default: 0, - }); - }, - async (argv) => { - let pid = argv.pid as number; - - if (!pid) { - const processes = await fetchProcesses(); - if (processes.length === 0) { - console.error("No matching processes found. Exiting..."); - process.exit(1); - } - - const { selectedPid } = await inquirer.prompt([ - { - type: "list", - name: "selectedPid", - message: "Select a process to restart:", - choices: processes, - pageSize: 15, // Increase this number as needed - }, - ]); - - pid = Number(selectedPid); - } - - // Get process details by PID - ps.lookup({ pid: pid }, (err, resultList) => { - if (err) { - throw new Error(err); - } - - const processInfo = resultList[0]; - - if (processInfo) { - let { command, arguments: args } = processInfo; - - if (argv["edit-cmd"]) { - const tempFilePath = execSync("mktemp /tmp/zombienet-restart-cmd-XXXXXX").toString().trim(); - writeFileSync(tempFilePath, `${command} ${args.join(" ")}`); - - const editor = process.env.EDITOR || "vim"; // Default to 'vim' if EDITOR is not set - execSync(`${editor} ${tempFilePath}`, { stdio: "inherit" }); - - const modifiedCommand = readFileSync(tempFilePath, "utf-8").trim().split(" "); - command = modifiedCommand[0]; - args = modifiedCommand.slice(1); - - // Delete the temporary file - unlinkSync(tempFilePath); - } - - console.log(`Command: ${command}`); - console.log(`Arguments: ${args.join(" ")}`); - - // Fetch environment variables, CWD, etc. - const envVariables = getEnvVariables(pid); - const cwd = getCwd(pid); - console.log(`Environment Variables: \n${envVariables.join("\n")}`); - console.log(`Current Working Directory: ${cwd}`); - - // Kill the process - exec(`kill -9 ${pid}`, (err) => { - if (err) { - console.error(`Failed to kill process with ID ${pid}.`, err); - return; - } - - console.log(`Process with ID ${pid} has been killed.`); - - setTimeout(() => { - // Restart the process in the current terminal with its original environment variables and cwd - const child = spawn(command, args, { - stdio: "inherit", - cwd: cwd, - env: Object.fromEntries(envVariables.map((e) => e.split("=", 2))), - }); - - ["SIGINT", "SIGTERM"].forEach((signal) => { - process.on(signal, () => { - console.log("zombienetRestart: got ", signal); - if (child) { - child.kill(signal); - } - process.exit(); - }); - }); - }, argv["wait-ms"]); - }); - } else { - console.log(`Process not found with ID ${pid}.`); - } - }); - } - ) - - .command( - "list", - "List processes with specified names", - () => {}, - async () => { - const processes = await fetchProcesses(); - if (processes.length) { - console.log("Matching Processes:"); - processes.forEach((process) => { - console.log(process.name); - }); - } else { - console.log("No matching processes found."); - } - } - ) - .parse(); diff --git a/test/suites/common-all/fee_balance_transfer/test_fee_balance_transfer.ts b/test/suites/common-all/fee_balance_transfer/test_fee_balance_transfer.ts deleted file mode 100644 index 11eb4f2..0000000 --- a/test/suites/common-all/fee_balance_transfer/test_fee_balance_transfer.ts +++ /dev/null @@ -1,280 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair, filterAndApply } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { extractWeight } from "@moonwall/util"; -import { extractFeeAuthor, filterRewardFromOrchestrator } from "util/block"; - -describeSuite({ - id: "C0002", - title: "Fee test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - // Difference between the refTime estimated using paymentInfo and the actual refTime reported inside a block - // https://github.com/paritytech/substrate/blob/5e49f6e44820affccaf517fd22af564f4b495d40/frame/support/src/weights/extrinsic_weights.rs#L56 - let baseWeight; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - baseWeight = extractWeight(polkadotJs.consts.system.blockWeights.perClass.normal.baseExtrinsic).toBigInt(); - }); - - it({ - id: "E01", - title: "Fee of balances.transfer can be estimated using paymentInfo", - test: async function () { - const balanceBefore = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - // Estimate fee of balances.transfer using paymentInfo API, before sending transaction - const info = await tx.paymentInfo(alice.address); - const signedTx = await tx.signAsync(alice); - await context.createBlock([signedTx]); - - const events = await polkadotJs.query.system.events(); - const fee = extractFeeAuthor(events, alice.address).amount.toBigInt(); - const reward = filterRewardFromOrchestrator(events, alice.address); - // Get actual weight - const info2 = extractInfoForFee(events); - - // The estimated weight does not match the actual weight reported in the block, because it is missing the - // "base weight" - const estimatedPlusBaseWeight = { - refTime: info.weight.refTime.toBigInt() + baseWeight, - proofSize: info.weight.proofSize.toBigInt(), - }; - expect(estimatedPlusBaseWeight).to.deep.equal({ - refTime: info2.weight.refTime.toBigInt(), - proofSize: info2.weight.proofSize.toBigInt(), - }); - - // queryWeightToFee expects the "base weight" to be included in the input, so info2.weight provides - // the correct estimation, but tx.paymentInfo().weight does not - const basePlusWeightFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee(info2.weight) - ).toBigInt(); - - // These values are: 1000000 for base fee plus fee coming from the weight of the extrinsic - // We allow variance of 10% - const expectedBaseFee = context.isEthereumChain ? 1000000000000n : 1000000n; - - const expectedbasePlusWeightFee = context.isEthereumChain - ? expectedBaseFee + 1525568000000n - : expectedBaseFee + 1525568n; - - expect( - basePlusWeightFee >= (expectedbasePlusWeightFee * 90n) / 100n && - basePlusWeightFee <= (expectedbasePlusWeightFee * 110n) / 100n - ).to.be.true; - - const expectedFee = basePlusWeightFee + BigInt(signedTx.encodedLength); - - // Caution: this +1 comes from the fact that even if qeryWeightToFee applies unadjusted - // but when we pay fees (or compare with queryFeeDetails), we do it adjusted (with multiplier). In our case we are using - // a constant multiplier, but because of rounding issues with the weight, we migth obtain - // a +-1 difference - expect(fee >= expectedFee - 1n && basePlusWeightFee <= expectedFee + 1n).to.be.true; - - const tip = 0n; - expect(fee).to.equal(info.partialFee.toBigInt() + tip); - - const balanceAfter = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - // Balance must be old balance minus fee minus transfered value - expect(balanceBefore + reward - fee - 200_000n).to.equal(balanceAfter); - }, - }); - - it({ - id: "E02", - title: "Fee of balances.transfer can be estimated using transactionPaymentApi.queryFeeDetails", - test: async function () { - const balanceBefore = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - const signedTx = await tx.signAsync(alice); - const feeDetails = await polkadotJs.call.transactionPaymentApi.queryFeeDetails( - tx, - signedTx.encodedLength - ); - - const feeMultiplier = (await polkadotJs.query.transactionPayment.nextFeeMultiplier()).toBigInt(); - const feeInfo = await tx.paymentInfo(alice.address); - const unadjustedWeightFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: feeInfo.weight.refTime.toBigInt(), - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const baseWeightToFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: baseWeight, - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const lengthToFee = ( - await polkadotJs.call.transactionPaymentApi.queryLengthToFee(signedTx.encodedLength) - ).toBigInt(); - const multiplierAdjustedWeightFee = (feeMultiplier * unadjustedWeightFee) / 1_000_000_000_000_000_000n; - - const expectedFee = baseWeightToFee + multiplierAdjustedWeightFee + lengthToFee; - - await context.createBlock([signedTx]); - - const events = await polkadotJs.query.system.events(); - const fee = extractFeeAuthor(events, alice.address).amount.toBigInt(); - const reward = filterRewardFromOrchestrator(events, alice.address); - - expect(fee).to.equal(expectedFee); - - const inclusionFee = feeDetails.inclusionFee.unwrapOrDefault(); - const tip = 0n; - expect(fee).to.equal( - inclusionFee.lenFee.toBigInt() + - inclusionFee.baseFee.toBigInt() + - inclusionFee.adjustedWeightFee.toBigInt() + - tip - ); - - const balanceAfter = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - - // Balance must be old balance minus fee minus transfered value - expect(balanceBefore + reward - fee - 200_000n).to.equal(balanceAfter); - }, - }); - - it({ - id: "E03", - title: "Fee of balances.transfer does increase after 100 full blocks due to slow adjusting multiplier", - test: async function () { - const fillAmount = 600_000_000; // equal to 60% Perbill - - const previousfeeMultiplier = ( - await polkadotJs.query.transactionPayment.nextFeeMultiplier() - ).toBigInt(); - for (let i = 0; i < 100; i++) { - const tx = polkadotJs.tx.rootTesting.fillBlock(fillAmount); - const signedTx = await polkadotJs.tx.sudo.sudo(tx).signAsync(alice); - - await context.createBlock([signedTx]); - - // Because the session duration is only 5 blocks, 1 out of every 5 blocks - // cannot include any extrinsics. So we check that case, and create an - // additional block. - const block = await polkadotJs.rpc.chain.getBlock(); - const includedTxHashes = block.block.extrinsics.map((x) => x.hash.toString()); - - if (!includedTxHashes.includes(signedTx.hash.toString())) { - await context.createBlock([]); - } - } - - const balanceBefore = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - const signedTx = await tx.signAsync(alice); - const feeDetails = await polkadotJs.call.transactionPaymentApi.queryFeeDetails( - tx, - signedTx.encodedLength - ); - const currentfeeMultiplier = (await polkadotJs.query.transactionPayment.nextFeeMultiplier()).toBigInt(); - expect(currentfeeMultiplier).toBeGreaterThan(previousfeeMultiplier); - const feeInfo = await tx.paymentInfo(alice.address); - const unadjustedWeightFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: feeInfo.weight.refTime.toBigInt(), - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const baseWeightToFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: baseWeight, - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const lengthToFee = ( - await polkadotJs.call.transactionPaymentApi.queryLengthToFee(signedTx.encodedLength) - ).toBigInt(); - const multiplierAdjustedWeightFee = - (currentfeeMultiplier * unadjustedWeightFee) / 1_000_000_000_000_000_000n; - - const expectedFee = baseWeightToFee + multiplierAdjustedWeightFee + lengthToFee; - await context.createBlock([signedTx]); - - const events = await polkadotJs.query.system.events(); - const fee = extractFeeAuthor(events, alice.address).amount.toBigInt(); - const reward = filterRewardFromOrchestrator(events, alice.address); - expect(fee).to.equal(expectedFee); - - const inclusionFee = feeDetails.inclusionFee.unwrapOrDefault(); - const tip = 0n; - expect(fee).to.equal( - inclusionFee.baseFee.toBigInt() + - inclusionFee.lenFee.toBigInt() + - inclusionFee.adjustedWeightFee.toBigInt() + - tip - ); - - const balanceAfter = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - // Balance must be old balance minus fee minus transfered value - expect(balanceBefore + reward - fee - 200_000n).to.equal(balanceAfter); - }, - }); - - it({ - id: "E04", - title: "Proof size does not affect fee", - test: async function () { - const refTime = 298945000n; - const proofSize = 3593n; - const fee1 = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime, - proofSize, - }) - ).toBigInt(); - - const fee2 = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime, - proofSize: 0, - }) - ).toBigInt(); - - expect(fee1).to.equal(fee2); - }, - }); - - it({ - id: "E05", - title: "Base refTime pays base fee", - test: async function () { - const fee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: baseWeight, - proofSize: 0, - }) - ).toBigInt(); - - const expectedFee = context.isEthereumChain ? 1000000000000n : 1000000n; - expect(fee).to.equal(expectedFee); - }, - }); - }, -}); - -function getDispatchInfo({ event: { data, method } }) { - return method === "ExtrinsicSuccess" ? (data[0] as any) : (data[1] as any); -} - -function extractInfoForFee(events): any { - return filterAndApply(events, "system", ["ExtrinsicFailed", "ExtrinsicSuccess"], getDispatchInfo).filter((x) => { - return x.class.toString() === "Normal" && x.paysFee.toString() === "Yes"; - })[0]; -} diff --git a/test/suites/common-all/pallet-multisig/test_pallet_multisig.ts b/test/suites/common-all/pallet-multisig/test_pallet_multisig.ts deleted file mode 100644 index a5933fd..0000000 --- a/test/suites/common-all/pallet-multisig/test_pallet_multisig.ts +++ /dev/null @@ -1,123 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { blake2AsHex, createKeyMulti } from "@polkadot/util-crypto"; -import { u8aToHex } from "@polkadot/util"; -import { alith, charleth, baltathar, dorothy } from "@moonwall/util"; - -describeSuite({ - id: "C0401", - title: "Multisig pallet test suite", - foundationMethods: "dev", - - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice_or_alith: KeyringPair; - let charlie_or_charleth: KeyringPair; - let dave_or_baltathar: KeyringPair; - let bob_or_dorothy: KeyringPair; - let call: string; - let callHash: string; - let threshold: number; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - // This test will be run against frontier & substrate chains, hence the accounts used - alice_or_alith = context.isEthereumChain ? alith : context.keyring.alice; - charlie_or_charleth = context.isEthereumChain ? charleth : context.keyring.charlie; - dave_or_baltathar = context.isEthereumChain ? baltathar : context.keyring.dave; - bob_or_dorothy = context.isEthereumChain ? dorothy : context.keyring.bob; - threshold = 2; - // exmple call and hash to be used in tests - const example_call = context.polkadotJs().tx.balances.transferKeepAlive(charlie_or_charleth.address, 20); - call = example_call.method.toHex(); - callHash = blake2AsHex(call); - }); - - it({ - id: "E01", - title: "Creates and cancel a multisig operation", - test: async () => { - //Multisig creation - const otherSignatories = [dave_or_baltathar.address, bob_or_dorothy.address]; - await context.createBlock( - polkadotJs.tx.multisig - .asMulti(threshold, otherSignatories, null, call, {}) - .signAsync(alice_or_alith) - ); - - // The multisig is created - let records = await polkadotJs.query.system.events(); - let eventCount = records.filter((a) => { - return a.event.method == "NewMultisig"; - }); - expect(eventCount.length).to.be.equal(1); - - //Multisig Cancelation - const encodedMultisigId = createKeyMulti( - [alice_or_alith.address, dave_or_baltathar.address, bob_or_dorothy.address], - threshold - ); - const multisigId = u8aToHex(encodedMultisigId); - const multisigInfo = await polkadotJs.query.multisig.multisigs(multisigId, callHash); - await context.createBlock( - polkadotJs.tx.multisig - .cancelAsMulti(threshold, otherSignatories, multisigInfo.unwrap().when, callHash) - .signAsync(alice_or_alith) - ); - - // Multisig is cancelled - records = await polkadotJs.query.system.events(); - eventCount = records.filter((a) => { - return a.event.method == "MultisigCancelled"; - }); - expect(eventCount.length).to.be.equal(1); - }, - }); - - it({ - id: "E02", - title: "Approves a multisig operation", - test: async function () { - //Multisig creation - const otherSignatories = [dave_or_baltathar.address, bob_or_dorothy.address]; - await context.createBlock( - polkadotJs.tx.multisig - .asMulti(threshold, otherSignatories, null, call, {}) - .signAsync(alice_or_alith) - ); - - //Multisig Approval - - // This is only needed to get get time point parameter - const encodedMultisigId = createKeyMulti( - [alice_or_alith.address, dave_or_baltathar.address, bob_or_dorothy.address], - threshold - ); - const multisigId = u8aToHex(encodedMultisigId); - const multisigInfo = await polkadotJs.query.multisig.multisigs(multisigId, callHash); - - await context.createBlock( - context - .polkadotJs() - .tx.multisig.approveAsMulti( - threshold, - [dave_or_baltathar.address, alice_or_alith.address], - multisigInfo.unwrap().when, - callHash, - {} - ) - .signAsync(bob_or_dorothy) - ); - - // Multisig call is approved - const records = await polkadotJs.query.system.events(); - const eventCount = records.filter((a) => { - return a.event.method == "MultisigApproval"; - }); - expect(eventCount.length).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/common-all/proxy/test-proxy-balances.ts b/test/suites/common-all/proxy/test-proxy-balances.ts deleted file mode 100644 index c05ce4c..0000000 --- a/test/suites/common-all/proxy/test-proxy-balances.ts +++ /dev/null @@ -1,110 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock } from "../../../util/block"; - -describeSuite({ - id: "C0101", - title: "Proxy test suite - ProxyType::Balances", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let charlie: KeyringPair; - let chain: string; - - beforeAll(() => { - initializeCustomCreateBlock(context); - - alice = context.keyring.alice; - charlie = context.keyring.charlie; - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - }); - - it({ - id: "E01", - title: "No proxies at genesis", - test: async function () { - await context.createBlock(); - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([]); - }, - }); - - it({ - id: "E02", - title: "Add proxy Balances", - test: async function () { - const delegate = charlie.address; - const balances = ["frontier-template", "container-chain-template"].includes(chain) ? 4 : 5; - const delay = 0; - const tx = polkadotJs.tx.proxy.addProxy(delegate, balances, delay); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate: charlie.address, - proxyType: "Balances", - delay: 0, - }, - ]); - }, - }); - - it({ - id: "E03", - title: "Delegate account can call balance.transfer", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.balances.transferAllowDeath(charlie.address, 200_000) - ); - await context.createBlock([await tx.signAsync(charlie)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - }, - }); - - it({ - id: "E04", - title: "Delegate account cannot call system.remark", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.system.remarkWithEvent("I was called through using proxy.proxy") - ); - await context.createBlock([await tx.signAsync(charlie)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.not.be.eq("Ok"); - - const ev2 = events.filter((a) => { - return a.event.method == "Remarked"; - }); - expect(ev2.length).to.be.equal(0); - }, - }); - }, -}); diff --git a/test/suites/common-all/proxy/test-proxy-cancel.ts b/test/suites/common-all/proxy/test-proxy-cancel.ts deleted file mode 100644 index 746e96c..0000000 --- a/test/suites/common-all/proxy/test-proxy-cancel.ts +++ /dev/null @@ -1,216 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock } from "../../../util/block"; - -describeSuite({ - id: "C0102", - title: "Proxy test suite - ProxyType::CancelProxy", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - let dave: KeyringPair; - let chain: string; - - beforeAll(() => { - initializeCustomCreateBlock(context); - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - dave = context.keyring.dave; - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - }); - - it({ - id: "E01", - title: "No proxies at genesis", - test: async function () { - await context.createBlock(); - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([]); - }, - }); - - it({ - id: "E02", - title: "Add proxy Any", - test: async function () { - await context.createBlock(); - - const delegate = bob.address; - const delay = 3; - const tx = polkadotJs.tx.proxy.addProxy(delegate, "Any", delay); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate, - proxyType: "Any", - delay, - }, - ]); - }, - }); - - it({ - id: "E03", - title: "Add proxy CancelProxy", - test: async function () { - const delegate = charlie.address; - const cancelProxy = ["frontier-template", "container-chain-template"].includes(chain) ? 3 : 4; - const delay = 0; - const tx = polkadotJs.tx.proxy.addProxy(delegate, cancelProxy, delay); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate: bob.address, - proxyType: "Any", - delay: 3, - }, - { - delegate: charlie.address, - proxyType: "CancelProxy", - delay: 0, - }, - ]); - }, - }); - - it({ - id: "E04", - title: "Delegate account can call proxy.rejectAnnouncement", - test: async function () { - await context.createBlock(); - - // Bob announces a transfer call - const balanceCall = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - const callHash = balanceCall.method.hash.toString(); - const tx1 = polkadotJs.tx.proxy.announce(alice.address, callHash); - await context.createBlock([await tx1.signAsync(bob)]); - let events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "Announced"; - }); - expect(ev1.length).to.be.equal(1); - - // Charlie can reject the announcement - const tx2 = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.proxy.rejectAnnouncement(bob.address, callHash) - ); - await context.createBlock([await tx2.signAsync(charlie)]); - events = await polkadotJs.query.system.events(); - const ev2 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev2.length).to.be.equal(1); - expect(ev2[0].event.data[0].toString()).to.be.eq("Ok"); - - // Wait for the proxy delay - await context.createBlock(); - await context.createBlock(); - await context.createBlock(); - await context.createBlock(); - - // Anyone can try to execute the announced call, but it will fail since it has been rejected - const tx3 = polkadotJs.tx.proxy.proxyAnnounced(bob.address, alice.address, null, balanceCall); - await context.createBlock([await tx3.signAsync(dave)]); - - events = await polkadotJs.query.system.events(); - const ev3 = events.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev3.length).to.be.equal(1); - }, - }); - - it({ - id: "E05", - title: "Unauthorized account cannot reject announcement", - test: async function () { - // Bob announces a transfer call - const balanceCall = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - const callHash = balanceCall.method.hash.toString(); - const tx1 = polkadotJs.tx.proxy.announce(alice.address, callHash); - await context.createBlock([await tx1.signAsync(bob)]); - let events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "Announced"; - }); - expect(ev1.length).to.be.equal(1); - - // Dave cannot reject the announcement - const tx2 = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.proxy.rejectAnnouncement(bob.address, callHash) - ); - await context.createBlock([await tx2.signAsync(dave)]); - events = await polkadotJs.query.system.events(); - const ev2 = events.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev2.length).to.be.equal(1); - - // Wait for the proxy delay - await context.createBlock(); - await context.createBlock(); - await context.createBlock(); - await context.createBlock(); - - // Anyone can try to execute the announced call - const tx3 = polkadotJs.tx.proxy.proxyAnnounced(bob.address, alice.address, null, balanceCall); - await context.createBlock([await tx3.signAsync(dave)]); - - events = await polkadotJs.query.system.events(); - const ev3 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev3.length).to.be.equal(1); - expect(ev3[0].event.data[0].toString()).to.be.eq("Ok"); - }, - }); - - it({ - id: "E06", - title: "Delegate account cannot call balance.transfer", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.balances.transferAllowDeath(charlie.address, 200_000) - ); - await context.createBlock([await tx.signAsync(charlie)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.not.be.eq("Ok"); - }, - }); - }, -}); diff --git a/test/suites/common-all/proxy/test-proxy-pure.ts b/test/suites/common-all/proxy/test-proxy-pure.ts deleted file mode 100644 index d72a51e..0000000 --- a/test/suites/common-all/proxy/test-proxy-pure.ts +++ /dev/null @@ -1,106 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock } from "../../../util/block"; - -describeSuite({ - id: "C0104", - title: "Proxy test suite - create_pure", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let charlie: KeyringPair; - let proxyAddress; - - beforeAll(() => { - initializeCustomCreateBlock(context); - - alice = context.keyring.alice; - charlie = context.keyring.charlie; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "No proxies at genesis", - test: async function () { - await context.createBlock(); - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([]); - }, - }); - - it({ - id: "E02", - title: "Add pure proxy", - test: async function () { - const delay = 0; - const index = 0; - const tx = polkadotJs.tx.proxy.createPure("Any", delay, index); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "PureCreated"; - }); - expect(ev1.length).to.be.equal(1); - proxyAddress = ev1[0].event.toJSON().data[0]; - }, - }); - - it({ - id: "E03", - title: "Pure proxy account can call balance.transfer", - test: async function () { - await context.createBlock(); - - // Send some initial balance to pure proxy account - const existentialDeposit = polkadotJs.consts.balances.existentialDeposit.toBigInt(); - const tx1 = polkadotJs.tx.balances.transferAllowDeath(proxyAddress, existentialDeposit + 200_000n); - await context.createBlock([await tx1.signAsync(alice)]); - - // Transfer from pure proxy to charlie - const tx = polkadotJs.tx.proxy.proxy( - proxyAddress, - null, - polkadotJs.tx.balances.transferAllowDeath(charlie.address, 100_000n) - ); - await context.createBlock([await tx.signAsync(alice)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - }, - }); - - it({ - id: "E04", - title: "Pure proxy account can call system.remark", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.proxy.proxy( - proxyAddress, - null, - polkadotJs.tx.system.remarkWithEvent("I was called through using proxy.proxy") - ); - await context.createBlock([await tx.signAsync(alice)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - - const ev2 = events.filter((a) => { - return a.event.method == "Remarked"; - }); - expect(ev2.length).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/common-all/proxy/test-proxy.ts b/test/suites/common-all/proxy/test-proxy.ts deleted file mode 100644 index ad81140..0000000 --- a/test/suites/common-all/proxy/test-proxy.ts +++ /dev/null @@ -1,217 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock, extractFeeAuthor, filterRewardFromContainer } from "../../../util/block"; - -describeSuite({ - id: "C0103", - title: "Proxy test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - let dave: KeyringPair; - let chain: string; - - beforeAll(() => { - initializeCustomCreateBlock(context); - - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - dave = context.keyring.dave; - - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - }); - - it({ - id: "E01", - title: "No proxies at genesis", - test: async function () { - await context.createBlock(); - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([]); - }, - }); - - it({ - id: "E02", - title: "Add proxy", - test: async function () { - await context.createBlock(); - - const delegate = bob.address; - const tx = polkadotJs.tx.proxy.addProxy(delegate, "Any", 0); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate, - proxyType: "Any", - delay: 0, - }, - ]); - }, - }); - - it({ - id: "E03", - title: "Delegate account can call proxy.proxy", - test: async function () { - const balanceBefore = (await polkadotJs.query.system.account(bob.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000) - ); - await context.createBlock([await tx.signAsync(bob)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - - const fee = extractFeeAuthor(events, bob.address).amount.toBigInt(); - const balanceAfter = (await polkadotJs.query.system.account(bob.address)).data.free.toBigInt(); - - // Balance of Bob account increased - // (balanceBefore - fee) is the balance that the account would have if the extrinsic failed - expect(balanceAfter > balanceBefore - fee).to.be.true; - }, - }); - - it({ - id: "E04", - title: "Unauthorized account cannot call proxy.proxy", - test: async function () { - await context.createBlock(); - - const balanceBefore = (await polkadotJs.query.system.account(charlie.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.balances.transferAllowDeath(charlie.address, 200_000) - ); - await context.createBlock([await tx.signAsync(charlie)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev1.length).to.be.equal(1); - - // Charlie receives rewards for authoring container, we should take this into account - const fee = extractFeeAuthor(events, charlie.address).amount.toBigInt(); - const receivedReward = filterRewardFromContainer(events, charlie.address, 2000); - - const balanceAfter = (await polkadotJs.query.system.account(charlie.address)).data.free.toBigInt(); - - // Balance of Charlie account must be the same (minus fee) - expect(balanceBefore + receivedReward - fee).to.equal(balanceAfter); - }, - }); - - it({ - id: "E05", - title: "Can add multiple proxy types to the same delegator", - test: async function () { - await context.createBlock(); - - const delegate = dave.address; - const txs = []; - - // All proxy types that do not allow balance transfer - // Frontier chains -> NonTransfer = 1, Governance = 2, CancelProxy = 3 - // Other chains -> NonTransfer = 1, Governance = 2, Staking = 3, CancelProxy = 4 - const proxyTypes = chain == "frontier-template" ? [1, 2, 3] : [1, 2, 3, 4]; - const nonce = - chain == "frontier-template" - ? (await polkadotJs.query.system.account(alice.address)).nonce - : await polkadotJs.rpc.system.accountNextIndex(alice.publicKey); - - for (const [i, proxyType] of proxyTypes.entries()) { - const tx = polkadotJs.tx.proxy.addProxy(delegate, proxyType, 0); - txs.push(await tx.signAsync(alice, { nonce: nonce.addn(i) })); - } - await context.createBlock(txs); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(proxyTypes.length); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0].length).to.be.equal(proxyTypes.length + 1); - }, - }); - - it({ - id: "E06", - title: "Account with no balance proxy cannot call balances.transfer", - test: async function () { - // Dave has multiple proxy types, but none of them allows to call balances.transfer - const balanceBefore = (await polkadotJs.query.system.account(dave.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.balances.transferAllowDeath(dave.address, 200_000) - ); - await context.createBlock([await tx.signAsync(dave)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.not.be.eq("Ok"); - - const fee = extractFeeAuthor(events, dave.address).amount.toBigInt(); - const balanceAfter = (await polkadotJs.query.system.account(dave.address)).data.free.toBigInt(); - - // Balance of Dave account must be the same (minus fee) - expect(balanceBefore - fee).to.equal(balanceAfter); - }, - }); - - it({ - id: "E07", - title: "Account with non transfer proxy can call system.remark", - test: async function () { - await context.createBlock(); - - // Dave has NonTransfer proxy, that allows to call system.remark - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.system.remarkWithEvent("I was called through using proxy.proxy") - ); - await context.createBlock([await tx.signAsync(dave)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - - const ev2 = events.filter((a) => { - return a.event.method == "Remarked"; - }); - expect(ev2.length).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/common-all/test-maintenance/test-maintenance-mode.ts b/test/suites/common-all/test-maintenance/test-maintenance-mode.ts deleted file mode 100644 index 52f6491..0000000 --- a/test/suites/common-all/test-maintenance/test-maintenance-mode.ts +++ /dev/null @@ -1,187 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock } from "../../../util/block"; - -describeSuite({ - id: "C0201", - title: "Maintenance mode test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let chain: string; - - beforeAll(() => { - initializeCustomCreateBlock(context); - - polkadotJs = context.pjsApi; - chain = polkadotJs.consts.system.version.specName.toString(); - alice = context.keyring.alice; - bob = context.keyring.bob; - }); - - it({ - id: "E01", - title: "No maintenance mode at genesis", - test: async function () { - await context.createBlock(); - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.false; - }, - }); - - it({ - id: "E02", - title: "Signed origin cannot enable maintenance mode", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev1.length).to.be.equal(1); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.false; - }, - }); - - it({ - id: "E03", - title: "Root origin can enable maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "EnteredMaintenanceMode"; - }); - expect(ev1.length).to.be.equal(1); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - }, - }); - - it({ - id: "E04", - title: "No transfers allowed in maintenance mode", - test: async function () { - await context.createBlock(); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const balanceBefore = (await polkadotJs.query.system.account(bob.address)).data.free; - - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 1000); - - if (chain == "frontier-template") { - expect(await context.createBlock([await tx.signAsync(alice)]).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - } else { - await context.createBlock([await tx.signAsync(alice)]); - } - - const balanceAfter = (await polkadotJs.query.system.account(bob.address)).data.free; - - expect(balanceBefore.eq(balanceAfter)).to.be.true; - }, - }); - - it({ - id: "E05", - title: "Transfer with sudo allowed in maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const balanceBefore = (await polkadotJs.query.system.account(bob.address)).data.free; - - // We need to use forceTransfer because transfer doesn't work with sudo - const tx = polkadotJs.tx.balances.forceTransfer(alice.address, bob.address, 1000); - - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - const balanceAfter = (await polkadotJs.query.system.account(bob.address)).data.free; - - expect(balanceBefore.lt(balanceAfter)).to.be.true; - }, - }); - - it({ - id: "E06", - title: "Signed origin cannot disable maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.resumeNormalOperation(); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev1.length).to.be.equal(1); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - }, - }); - - it({ - id: "E07", - title: "Root origin can disable maintenance mode", - test: async function () { - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.resumeNormalOperation(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "NormalOperationResumed"; - }); - expect(ev1.length).to.be.equal(1); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.false; - }, - }); - - it({ - id: "E08", - title: "Transfers allowed again after disabling maintenance mode", - test: async function () { - await context.createBlock(); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.false; - - const balanceBefore = (await polkadotJs.query.system.account(bob.address)).data.free; - - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 1000); - - await context.createBlock([await tx.signAsync(alice)]); - const balanceAfter = (await polkadotJs.query.system.account(bob.address)).data.free; - - expect(balanceBefore.lt(balanceAfter)).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-all/test_basic.ts b/test/suites/common-all/test_basic.ts deleted file mode 100644 index faa6eba..0000000 --- a/test/suites/common-all/test_basic.ts +++ /dev/null @@ -1,65 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "C0001", - title: "Dev test suite", - foundationMethods: "dev", - testCases: ({ it, context, log }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(() => { - polkadotJs = context.pjsApi; - log(`This chain is ${context.isEthereumChain ? "Ethereum" : "Substrate"}`); - alice = context.keyring.alice; - bob = context.keyring.bob; - }); - - it({ - id: "E01", - title: "Checking that launched node can create blocks", - test: async function () { - const block = (await polkadotJs.rpc.chain.getBlock()).block.header.number.toNumber(); - await context.createBlock(); - - const block2 = (await polkadotJs.rpc.chain.getBlock()).block.header.number.toNumber(); - log(`Original block #${block}, new block #${block2}`); - expect(block2).to.be.greaterThan(block); - }, - }); - - it({ - id: "E02", - title: "Checking that substrate txns possible", - timeout: 20000, - test: async function () { - const balanceBefore = (await polkadotJs.query.system.account(bob.address)).data.free; - - await polkadotJs.tx.balances.transferAllowDeath(bob.address, 1000).signAndSend(alice); - - await context.createBlock(); - const balanceAfter = (await polkadotJs.query.system.account(bob.address)).data.free; - - expect(balanceBefore.lt(balanceAfter)).to.be.true; - }, - }); - - it({ - id: "E03", - title: "Checking that sudo can be used", - test: async function () { - await context.createBlock(); - const tx = polkadotJs.tx.rootTesting.fillBlock(60 * 10 ** 7); - await polkadotJs.tx.sudo.sudo(tx).signAndSend(alice); - - await context.createBlock(); - const blockFill = await polkadotJs.query.system.blockWeight(); - expect(blockFill.normal.refTime.unwrap().toBigInt()).toBeGreaterThan(0n); - }, - }); - }, -}); diff --git a/test/suites/common-all/tx-pause/test_maintenance_mode.ts b/test/suites/common-all/tx-pause/test_maintenance_mode.ts deleted file mode 100644 index c0b7b5d..0000000 --- a/test/suites/common-all/tx-pause/test_maintenance_mode.ts +++ /dev/null @@ -1,93 +0,0 @@ -import "@tanssi/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { DANCE } from "util/constants"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { Result } from "@polkadot/types-codec"; -import { SpRuntimeDispatchError } from "@polkadot/types/lookup"; - -describeSuite({ - id: "C0301", - title: "Pausing is compatible with maintenance mode", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let chain: string; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - bob = context.keyring.bob; - chain = polkadotJs.consts.system.version.specName.toString(); - }); - - it({ - id: "E01", - title: "a paused tx should still fail during maintenance mode", - test: async function () { - // Pause Balances.transfer_allow_death - const { result } = await context.createBlock( - polkadotJs.tx.sudo - .sudo(polkadotJs.tx.txPause.pause(["Balances", "transfer_allow_death"])) - .signAsync(alice) - ); - expect(result.successful).to.be.true; - - // Check sudo was successful - const sudoEvents = result.events.filter(({ event: { method } }) => method === "Sudid"); - expect(sudoEvents.length).toBe(1); - expect((sudoEvents[0].event.data[0] as Result).isOk).to.be.true; - - // Enable maintenance mode - await context.createBlock( - polkadotJs.tx.sudo.sudo(polkadotJs.tx.maintenanceMode.enterMaintenanceMode()).signAsync(alice) - ); - expect((await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON()).to.be.true; - - const signedTx = polkadotJs.tx.balances.transferAllowDeath(bob.address, DANCE).signAsync(alice); - - // transfer_allow_death should fail - if (chain == "frontier-template") { - expect(await context.createBlock(signedTx).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - } else { - const { result: resultTransfer } = await context.createBlock(signedTx); - - expect(resultTransfer.successful).to.be.false; - expect(resultTransfer.error.name).to.eq("CallFiltered"); - } - }, - }); - - it({ - id: "E02", - title: "a paused tx should still fail after maintenance mode", - test: async function () { - // Disable maintenance mode - await context.createBlock( - polkadotJs.tx.sudo.sudo(polkadotJs.tx.maintenanceMode.resumeNormalOperation()).signAsync(alice) - ); - expect((await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON()).to.be.false; - - await context.createBlock(); - - const signedTx = polkadotJs.tx.balances.transferAllowDeath(bob.address, DANCE).signAsync(alice); - - // transfer_allow_death should fail - if (chain == "frontier-template") { - expect(await context.createBlock(signedTx).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - } else { - const { result: resultTransfer } = await context.createBlock(signedTx); - - expect(resultTransfer.successful).to.be.false; - expect(resultTransfer.error.name).to.eq("CallFiltered"); - } - }, - }); - }, -}); diff --git a/test/suites/common-all/tx-pause/test_pause.ts b/test/suites/common-all/tx-pause/test_pause.ts deleted file mode 100644 index 0c84e05..0000000 --- a/test/suites/common-all/tx-pause/test_pause.ts +++ /dev/null @@ -1,120 +0,0 @@ -import "@tanssi/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { DANCE } from "util/constants"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { Result } from "@polkadot/types-codec"; -import { SpRuntimeDispatchError } from "@polkadot/types/lookup"; - -describeSuite({ - id: "C0302", - title: "Txs can be paused and unpaused", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let chain: string; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - bob = context.keyring.bob; - chain = polkadotJs.consts.system.version.specName.toString(); - }); - - it({ - id: "E01", - title: "transfer should fail after pausing it", - test: async function () { - await context.createBlock(); - // Pause Balances.transfer_allow_death - const { result } = await context.createBlock( - polkadotJs.tx.sudo - .sudo(polkadotJs.tx.txPause.pause(["Balances", "transfer_allow_death"])) - .signAsync(alice) - ); - - expect(result.successful).to.be.true; - // Check sudo was successful - const sudoEvents = result.events.filter(({ event: { method } }) => method === "Sudid"); - expect(sudoEvents.length).toBe(1); - expect((sudoEvents[0].event.data[0] as Result).isOk).to.be.true; - - const signedTx = polkadotJs.tx.balances.transferAllowDeath(bob.address, DANCE).signAsync(alice); - - // transfer_allow_death should fail - if (chain == "frontier-template") { - expect(await context.createBlock(signedTx).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - } else { - const { result: resultTransfer } = await context.createBlock(signedTx); - - expect(resultTransfer.successful).to.be.false; - expect(resultTransfer.error.name).to.eq("CallFiltered"); - } - }, - }); - - it({ - id: "E02", - title: "transfer should succeed after unpausing it", - test: async function () { - // Unpause Balances.transferAllowDeath - const { result } = await context.createBlock( - polkadotJs.tx.sudo - .sudo(polkadotJs.tx.txPause.unpause(["Balances", "transfer_allow_death"])) - .signAsync(alice) - ); - expect(result.successful).to.be.true; - - // Check sudo was successful - const sudoEvents = result.events.filter(({ event: { method } }) => method === "Sudid"); - expect(sudoEvents.length).toBe(1); - expect((sudoEvents[0].event.data[0] as Result).isOk).to.be.true; - - // transfer_allow_death should succeed - const { result: resultTransfer } = await context.createBlock( - polkadotJs.tx.balances.transferAllowDeath(bob.address, DANCE).signAsync(alice) - ); - - expect(resultTransfer.successful).to.be.true; - }, - }); - - it({ - id: "E03", - title: "sudo shoudn't be affected by a pause", - test: async function () { - await context.createBlock(); - - // Pause Balances.transfer - const { result } = await context.createBlock( - polkadotJs.tx.sudo - .sudo(polkadotJs.tx.txPause.pause(["Balances", "force_transfer"])) - .signAsync(alice) - ); - - expect(result.successful).to.be.true; - // Check sudo was successful - const sudoEvents = result.events.filter(({ event: { method } }) => method === "Sudid"); - expect(sudoEvents.length).toBe(1); - expect((sudoEvents[0].event.data[0] as Result).isOk).to.be.true; - - // force_transfer should succeed - const { result: resultTransfer } = await context.createBlock( - polkadotJs.tx.sudo - .sudo(polkadotJs.tx.balances.forceTransfer(alice.address, bob.address, DANCE)) - .signAsync(alice) - ); - - expect(resultTransfer.successful).to.be.true; - // Check sudo was successful - const transferEvents = resultTransfer.events.filter(({ event: { method } }) => method === "Sudid"); - expect(transferEvents.length).toBe(1); - expect((transferEvents[0].event.data[0] as Result).isOk).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-custom-policy.ts b/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-custom-policy.ts deleted file mode 100644 index e497103..0000000 --- a/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-custom-policy.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION, RELAY_SOURCE_LOCATION_2 } from "../../../util/constants.ts"; - -describeSuite({ - id: "DC0101", - title: "XcmExecutorUtils - Custom policies", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let chain: string; - let transferredBalance; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - const createForeignAsset = await polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - // Register parent asset as 1 - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - // Register grandparent asset as 2 - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION_2, - 2, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create(1, 2_000_000_000_000_000_000n), - polkadotJs.tx.assetRate.create(2, 2_000_000_000_000_000_000n), - // Set custom policy for parent origin to only allowing grandparent asset - polkadotJs.tx.xcmExecutorUtils.setReservePolicy( - // Origin - { - parents: 1, - interior: { Here: null }, - }, - // Allow only grandparent asset - { - allowedAssets: [ - { - concrete: { - parents: 2, - interior: { Here: null }, - }, - fun: { - Fungible: 1_000, - }, - }, - ], - } - ), - ]) - ); - - await context.createBlock(await createForeignAsset.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should accept grandparent asset from parent", - test: async function () { - // Send grandparent native asset - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 2, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - const alice_asset_balance = (await polkadotJs.query.foreignAssets.account(2, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_asset_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_asset_balance < transferredBalance).to.be.true; - }, - }); - - it({ - id: "T02", - title: "Should reject parent native asset from parent", - test: async function () { - // Send grandparent native asset - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Parent tokens should have been rejected, so asset balance for Alice shouldn't exist - const alice_asset_balance = await polkadotJs.query.foreignAssets.account(1, alice.address); - expect(alice_asset_balance.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-default-policy.ts b/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-default-policy.ts deleted file mode 100644 index afe3c02..0000000 --- a/test/suites/common-container-chains/test-pallet-xcm-executor-utils/test-default-policy.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION, RELAY_SOURCE_LOCATION_2 } from "../../../util/constants.ts"; - -// This assumes that the XcmExecutorUtils ReserveDefaultTrustPolicy set in the runtime is AllNative -describeSuite({ - id: "DC0201", - title: "XcmExecutorUtils - Default policies", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let chain: string; - let transferredBalance; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - }); - - it({ - id: "T01", - title: "Should allow native asset from parent", - test: async function () { - // Register parent asset - await context.createBlock( - await polkadotJs.tx.sudo - .sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create(1, 2_000_000_000_000_000_000n), - ]) - ) - .signAsync(alice), - { - allowFailures: false, - } - ); - - // Send parent native asset - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - const alice_asset_balance = (await polkadotJs.query.foreignAssets.account(1, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_asset_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_asset_balance < transferredBalance).to.be.true; - }, - }); - - it({ - id: "T02", - title: "Should reject grandparent asset from parent", - test: async function () { - // Register grandparent asset - await context.createBlock( - await polkadotJs.tx.sudo - .sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION_2, - 2, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create(2, 2_000_000_000_000_000_000n), - ]) - ) - .signAsync(alice), - { - allowFailures: false, - } - ); - - // Send grandparent native asset - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 2, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - await context.createBlock(); - - // Grandparent tokens should have been rejected, so asset balance for Alice shouldn't exist - const alice_asset_balance = await polkadotJs.query.foreignAssets.account(2, alice.address); - console.log(alice_asset_balance.toHuman()); - expect(alice_asset_balance.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/author-slot-prediction/test_author_slot_prediction.ts b/test/suites/common-tanssi/author-slot-prediction/test_author_slot_prediction.ts deleted file mode 100644 index 7518b1b..0000000 --- a/test/suites/common-tanssi/author-slot-prediction/test_author_slot_prediction.ts +++ /dev/null @@ -1,87 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; -import { u8aToHex, stringToHex } from "@polkadot/util"; - -describeSuite({ - id: "CT0101", - title: "Session keys assignment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that authority assignment is correct on genesis", - test: async function () { - // for session 0 - const assignment0 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(0)) - .unwrap() - .toHuman(); - const assignment1 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(1)) - .unwrap() - .toHuman(); - expect(assignment0.orchestratorChain).to.deep.equal([u8aToHex(alice.publicKey)]); - expect(assignment0.containerChains).to.deep.equal({ - 2000: [u8aToHex(bob.publicKey), u8aToHex(charlie.publicKey)], - 2001: [], - }); - - // Session 1 is the same as session 0 - expect(assignment0).to.deep.equal(assignment1); - // Session 2 is empty - expect((await polkadotJs.query.authorityAssignment.collatorContainerChain(2)).isNone).to.be.true; - - // Check authorities are correct - const sessionIndex = (await polkadotJs.query.session.currentIndex()).toNumber(); - const authorities = await context - .polkadotJs() - .query.authorityAssignment.collatorContainerChain(sessionIndex); - expect(authorities.unwrap().orchestratorChain[0].toString()).to.be.eq(u8aToHex(alice.publicKey)); - }, - }); - - it({ - id: "E02", - title: "Checking session key changes are reflected at the session length boundary block", - test: async function () { - const newKey = await polkadotJs.rpc.author.rotateKeys(); - await polkadotJs.tx.session.setKeys(newKey, []).signAndSend(alice); - - await context.createBlock(); - // Check key is reflected in next key - // But its not yet in queued - const queuedKeys = await polkadotJs.query.session.queuedKeys(); - const result = queuedKeys.filter((keyItem) => keyItem[1].nimbus == newKey); - expect(result).is.empty; - const nextKey = await polkadotJs.query.session.nextKeys(alice.address); - expect(u8aToHex(nextKey.unwrap().nimbus)).to.be.eq(u8aToHex(newKey)); - - // Let's jump one session - await jumpSessions(context, 2); - - // The very first block produced by the second session should contain the new key - - // The change should have been applied, and now both nimbus and authorityMapping should reflect - const digests = (await polkadotJs.query.system.digest()).logs; - const filtered = digests.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("nmbs") - ); - - expect(filtered[0].asPreRuntime[1].toHex()).to.be.eq(u8aToHex(nextKey.unwrap().nimbus)); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/fees/test_fee_burning.ts b/test/suites/common-tanssi/fees/test_fee_burning.ts deleted file mode 100644 index e30c34b..0000000 --- a/test/suites/common-tanssi/fees/test_fee_burning.ts +++ /dev/null @@ -1,80 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { extractWeight } from "@moonwall/util"; -import { extractFeeAuthor, fetchIssuance, filterRewardFromOrchestrator } from "util/block"; - -describeSuite({ - id: "CT0201", - title: "Fee burning test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - // Difference between the refTime estimated using paymentInfo and the actual refTime reported inside a block - // https://github.com/paritytech/substrate/blob/5e49f6e44820affccaf517fd22af564f4b495d40/frame/support/src/weights/extrinsic_weights.rs#L56 - let baseWeight; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - baseWeight = extractWeight(polkadotJs.consts.system.blockWeights.perClass.normal.baseExtrinsic).toBigInt(); - }); - - it({ - id: "E01", - title: "80% of Fees are burned", - test: async function () { - const totalSupplyBefore = (await polkadotJs.query.balances.totalIssuance()).toBigInt(); - const balanceBefore = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - const tx = polkadotJs.tx.balances.transferAllowDeath(bob.address, 200_000); - const signedTx = await tx.signAsync(alice); - - const feeMultiplier = (await polkadotJs.query.transactionPayment.nextFeeMultiplier()).toBigInt(); - const feeInfo = await tx.paymentInfo(alice.address); - const unadjustedWeightFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: feeInfo.weight.refTime.toBigInt(), - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const baseWeightToFee = ( - await polkadotJs.call.transactionPaymentApi.queryWeightToFee({ - refTime: baseWeight, - proofSize: feeInfo.weight.proofSize.toBigInt(), - }) - ).toBigInt(); - - const lengthToFee = ( - await polkadotJs.call.transactionPaymentApi.queryLengthToFee(signedTx.encodedLength) - ).toBigInt(); - const multiplierAdjustedWeightFee = (feeMultiplier * unadjustedWeightFee) / 1_000_000_000_000_000_000n; - - const expectedFee = baseWeightToFee + multiplierAdjustedWeightFee + lengthToFee; - - await context.createBlock([signedTx]); - - const events = await polkadotJs.query.system.events(); - const fee = extractFeeAuthor(events, alice.address).amount.toBigInt(); - const issuance = fetchIssuance(events).amount.toBigInt(); - const reward = filterRewardFromOrchestrator(events, alice.address); - - expect(fee).to.equal(expectedFee); - - const balanceAfter = (await polkadotJs.query.system.account(alice.address)).data.free.toBigInt(); - - // Balance must be old balance minus fee minus transfered value - expect(balanceBefore + reward - fee - 200_000n).to.equal(balanceAfter); - - const totalSupplyAfter = (await polkadotJs.query.balances.totalIssuance()).toBigInt(); - - expect(totalSupplyAfter - totalSupplyBefore).to.equal(issuance - (fee * 4n) / 5n); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/issuance-rewards/test_invulnerable_rewards.ts b/test/suites/common-tanssi/issuance-rewards/test_invulnerable_rewards.ts deleted file mode 100644 index 77811e4..0000000 --- a/test/suites/common-tanssi/issuance-rewards/test_invulnerable_rewards.ts +++ /dev/null @@ -1,112 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { fetchIssuance, filterRewardFromOrchestrator, filterRewardFromContainer } from "util/block"; -import { getAuthorFromDigest } from "util/author"; -import { PARACHAIN_BOND } from "util/constants"; - -describeSuite({ - id: "CT0301", - title: "Invulnerable reward test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let charlie: KeyringPair; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - charlie = context.keyring.charlie; - }); - it({ - id: "E01", - title: "Every block created should reward the appropriate amount to orchestrator", - test: async function () { - await context.createBlock(); - const author = await getAuthorFromDigest(polkadotJs); - // Fetch current session - const currentSession = await polkadotJs.query.session.currentIndex(); - const keys = await polkadotJs.query.authorityMapping.authorityIdMapping(currentSession); - const account = keys.toJSON()[author]; - // 70% is distributed across all rewards - // But we have 2 container chains, so it should get 1/3 of this - // Since it is an invulnerable, it receives all payment - const events = await polkadotJs.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - const chainRewards = (issuance * 7n) / 10n; - const expectedOrchestratorReward = chainRewards / 3n; - const reward = await filterRewardFromOrchestrator(events, account); - expect(reward).to.equal(expectedOrchestratorReward); - }, - }); - - it({ - id: "E02", - title: "Parachain bond receives 30% of the inflation and pending rewards plus division dust", - test: async function () { - let expectedAmountParachainBond = 0n; - - const pendingChainRewards = await polkadotJs.query.inflationRewards.chainsToReward(); - if (pendingChainRewards.isSome) { - const rewardPerChain = pendingChainRewards.unwrap().rewardsPerChain.toBigInt(); - const pendingChainsToReward = BigInt(pendingChainRewards.unwrap().paraIds.length); - expectedAmountParachainBond += pendingChainsToReward * rewardPerChain; - } - - const parachainBondBalanceBefore = ( - await polkadotJs.query.system.account(PARACHAIN_BOND) - ).data.free.toBigInt(); - await context.createBlock(); - - const currentChainRewards = await polkadotJs.query.inflationRewards.chainsToReward(); - const events = await polkadotJs.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - let dust = 0n; - if (currentChainRewards.isSome) { - const currentRewardPerChain = currentChainRewards.unwrap().rewardsPerChain.toBigInt(); - dust = (issuance * 7n) / 10n - 3n * currentRewardPerChain; - } - const parachainBondBalanceAfter = ( - await polkadotJs.query.system.account(PARACHAIN_BOND) - ).data.free.toBigInt(); - expectedAmountParachainBond += (issuance * 3n) / 10n + dust; - await context.createBlock(); - - // Not sure where this one comes from, looks like a rounding thing - expect(parachainBondBalanceAfter - parachainBondBalanceBefore).to.equal( - expectedAmountParachainBond + 1n - ); - }, - }); - - it({ - id: "E03", - title: "Charlie receives the reward from container-chain block proposal", - test: async function () { - const balacharlieBalanceBeforenceBefore = ( - await polkadotJs.query.system.account(charlie.address) - ).data.free.toBigInt(); - - await context.createBlock(); - - const currentChainRewards = (await polkadotJs.query.inflationRewards.chainsToReward()).unwrap(); - const events = await polkadotJs.query.system.events(); - const receivedRewardCharlie = filterRewardFromContainer(events, charlie.address, 2000); - - const balacharlieBalanceBeforenceAfter = ( - await polkadotJs.query.system.account(charlie.address) - ).data.free.toBigInt(); - - // Not sure where this one comes from, looks like a rounding thing - expect(balacharlieBalanceBeforenceAfter - balacharlieBalanceBeforenceBefore).to.equal( - currentChainRewards.rewardsPerChain.toBigInt() - ); - - // Not sure where this one comes from, looks like a rounding thing - expect(balacharlieBalanceBeforenceAfter - balacharlieBalanceBeforenceBefore).to.equal( - receivedRewardCharlie - ); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/issuance-rewards/test_issuance.ts b/test/suites/common-tanssi/issuance-rewards/test_issuance.ts deleted file mode 100644 index 18728af..0000000 --- a/test/suites/common-tanssi/issuance-rewards/test_issuance.ts +++ /dev/null @@ -1,35 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { fetchIssuance } from "util/block"; - -describeSuite({ - id: "CT0302", - title: "Issuance reward test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - }); - it({ - id: "E01", - title: "Issuance is the correct percentage", - test: async function () { - const supplyBefore = (await polkadotJs.query.balances.totalIssuance()).toBigInt(); - await context.createBlock(); - - const events = await polkadotJs.query.system.events(); - - const issuance = await fetchIssuance(events).amount.toBigInt(); - - const supplyAfter = (await polkadotJs.query.balances.totalIssuance()).toBigInt(); - - // in dev mode is 1% - const expectedIssuanceIncrement = supplyBefore / 100n; - expect(issuance).to.equal(expectedIssuanceIncrement); - expect(supplyAfter).to.equal(supplyBefore + expectedIssuanceIncrement); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-collators-per-container.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-collators-per-container.ts deleted file mode 100644 index efebcc8..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-collators-per-container.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { expect, beforeAll, describeSuite } from "@moonwall/cli"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0401", - title: "Configuration - ActiveConfig - CollatorsPerContainer", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["collatorsPerContainer"].toString()).toBe("2"); - - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.configuration.setCollatorsPerContainer(5)) - .signAsync(context.keyring.alice) - ); - expect(result!.successful, result!.error?.name).to.be.true; - - await jumpSessions(context, 2); - }); - - it({ - id: "T01", - title: "should set collators per container after 2 sessions", - test: async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["collatorsPerContainer"].toString()).toBe("5"); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-max-collators.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-max-collators.ts deleted file mode 100644 index d303c53..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-max-collators.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { expect, beforeAll, describeSuite } from "@moonwall/cli"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0402", - title: "Configuration - ActiveConfig - MaxCollators", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["maxCollators"].toString()).toBe("100"); - - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.configuration.setMaxCollators(200)) - .signAsync(context.keyring.alice) - ); - expect(result!.successful, result!.error?.name).to.be.true; - - await jumpSessions(context, 2); - }); - - it({ - id: "T01", - title: "should set max collators after 2 sessions", - test: async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["maxCollators"].toString()).toBe("200"); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-max-orchestrator-collators.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-max-orchestrator-collators.ts deleted file mode 100644 index 192ba8d..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-max-orchestrator-collators.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { expect, beforeAll, describeSuite } from "@moonwall/cli"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0403", - title: "Configuration - ActiveConfig - MaxOrchestratorCollators", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["maxOrchestratorCollators"].toString()).toBe("1"); - - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.configuration.setMaxOrchestratorCollators(2)) - .signAsync(context.keyring.alice) - ); - expect(result!.successful, result!.error?.name).to.be.true; - - await jumpSessions(context, 2); - }); - - it({ - id: "T01", - title: "should set max orchestrator collators after 2 sessions", - test: async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["maxOrchestratorCollators"].toString()).toBe("2"); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-min-orchestrator-collators.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-min-orchestrator-collators.ts deleted file mode 100644 index 9bf9af1..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-min-orchestrator-collators.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { expect, beforeAll, describeSuite } from "@moonwall/cli"; -import { initializeCustomCreateBlock, jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0404", - title: "Configuration - ActiveConfig - MinOrchestratorCollators", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async function () { - initializeCustomCreateBlock(context); - - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["minOrchestratorCollators"].toString()).toBe("1"); - - const { result } = await context.createBlock( - await context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.configuration.setMinOrchestratorCollators(2)) - .signAsync(context.keyring.alice) - ); - expect(result!.successful, result!.error?.name).to.be.true; - - await jumpSessions(context, 2); - }); - - it({ - id: "T01", - title: "should set max orchestrator collators after 2 sessions", - test: async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["minOrchestratorCollators"].toString()).toBe("2"); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-origin.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-origin.ts deleted file mode 100644 index f5a4a31..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-origin.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { expect, describeSuite } from "@moonwall/cli"; - -describeSuite({ - id: "CT0405", - title: "Configuration - ActiveConfig - Origin", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should fail on setMaxCollators if not sudo", - test: async function () { - const { result } = await context.createBlock( - context.polkadotJs().tx.configuration.setMaxCollators(200).signAsync(context.keyring.bob), - { allowFailures: true } - ); - - expect(result.successful).toBe(false); - }, - }); - - it({ - id: "T02", - title: "should fail on setMinOrchestratorCollators if not sudo", - test: async function () { - const { result } = await context.createBlock( - context.polkadotJs().tx.configuration.setMinOrchestratorCollators(2).signAsync(context.keyring.bob), - { allowFailures: true } - ); - - expect(result.successful).toBe(false); - }, - }); - - it({ - id: "T03", - title: "should fail on setMaxOrchestratorCollators if not sudo", - test: async function () { - const { result } = await context.createBlock( - context.polkadotJs().tx.configuration.setMaxOrchestratorCollators(2).signAsync(context.keyring.bob), - { allowFailures: true } - ); - - expect(result.successful).toBe(false); - }, - }); - - it({ - id: "T04", - title: "should fail on setCollatorsPerContainer if not sudo", - test: async function () { - const { result } = await context.createBlock( - context.polkadotJs().tx.configuration.setCollatorsPerContainer(5).signAsync(context.keyring.bob), - { allowFailures: true } - ); - - expect(result.successful).toBe(false); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-configuration/test-active-config-target-fullness.ts b/test/suites/common-tanssi/pallet-configuration/test-active-config-target-fullness.ts deleted file mode 100644 index 8d3ed96..0000000 --- a/test/suites/common-tanssi/pallet-configuration/test-active-config-target-fullness.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { expect, beforeAll, describeSuite } from "@moonwall/cli"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0406", - title: "Configuration - ActiveConfig - targetContainerChainFullness", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["targetContainerChainFullness"].toString()).toBe("800000000"); - - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.configuration.setTargetContainerChainFullness(500000000n)) - .signAsync(context.keyring.alice) - ); - expect(result!.successful, result!.error?.name).to.be.true; - - await jumpSessions(context, 2); - }); - - it({ - id: "T01", - title: "should set target fullness after 2 sessions", - test: async function () { - const config = await context.polkadotJs().query.configuration.activeConfig(); - expect(config["targetContainerChainFullness"].toString()).toBe("500000000"); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-identity/test_pallet_identity.ts b/test/suites/common-tanssi/pallet-identity/test_pallet_identity.ts deleted file mode 100644 index 0230d1b..0000000 --- a/test/suites/common-tanssi/pallet-identity/test_pallet_identity.ts +++ /dev/null @@ -1,146 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { hexToString } from "viem"; - -describeSuite({ - id: "CT0701", - title: "Identity pallet test suite", - foundationMethods: "dev", - - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let sudo_alice: KeyringPair; - let registrar_bob: KeyringPair; - let general_user_charlie: KeyringPair; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - sudo_alice = context.keyring.alice; - registrar_bob = context.keyring.bob; - general_user_charlie = context.keyring.charlie; - }); - - it({ - id: "E01", - title: "Sudo account can add registrars", - test: async function () { - const initial_identity_registrars = await polkadotJs.query.identity.registrars(); - - const tx = polkadotJs.tx.identity.addRegistrar({ - Id: registrar_bob.address, - }); - const signedTx = await polkadotJs.tx.sudo.sudo(tx).signAsync(sudo_alice); - await context.createBlock([signedTx]); - - const identity_registrars = await polkadotJs.query.identity.registrars(); - - // Added one registrar - expect(initial_identity_registrars.length + 1).to.equal(identity_registrars.length); - - // Bob is included in the registrars list - const bob_exists = identity_registrars - .toArray() - .filter((registrar) => registrar.toJSON().account == registrar_bob.address); - expect(bob_exists.length).to.be.equal(1); - - // Registrar addition shows in the events - const events = await polkadotJs.query.system.events(); - const eventCount = events.filter((a) => { - return a.event.method == "RegistrarAdded"; - }); - expect(eventCount.length).to.be.equal(1); - }, - }); - - it({ - id: "E02", - title: "Non-Sudo account fails when adding registrars", - test: async function () { - const initial_identity_registrars = await polkadotJs.query.identity.registrars(); - - const tx = polkadotJs.tx.identity.addRegistrar({ - Id: registrar_bob.address, - }); - const signedTx = await tx.signAsync(general_user_charlie); - await context.createBlock([signedTx]); - - const identity_registrars = await polkadotJs.query.identity.registrars(); - - // No registrars added - expect(initial_identity_registrars.length).to.equal(identity_registrars.length); - - // No addition event - const events = await polkadotJs.query.system.events(); - const eventCount = events.filter((a) => { - return a.event.method == "RegistrarAdded"; - }); - expect(eventCount.length).to.be.equal(0); - }, - }); - - it({ - id: "E03", - title: "User sets its identity", - test: async function () { - const tx = polkadotJs.tx.identity.setIdentity({ - display: { raw: "0x49742773206D652C20436861726C6965" }, - web: { raw: "0x68747470733A2F2F636861726C69652E696F" }, - }); - const signedTx = await tx.signAsync(general_user_charlie); - await context.createBlock([signedTx]); - - const charlie_identity = await polkadotJs.query.identity.identityOf(general_user_charlie.address); - // Display has been set - const charlie_display = hexToString(charlie_identity.toJSON()[0].info.display["raw"]); - expect(charlie_display).to.equal("It's me, Charlie"); - - // Web has been set - const charlie_web = hexToString(charlie_identity.toJSON()[0].info.web["raw"]); - expect(charlie_web).to.equal("https://charlie.io"); - - // Event triggered - const events = await polkadotJs.query.system.events(); - const eventCount = events.filter((a) => { - return a.event.method == "IdentitySet"; - }); - expect(eventCount.length).to.be.equal(1); - - // Currency reserved as deposit from Charlie's account - const charlie_balance = await polkadotJs.query.system.account(general_user_charlie.address); - const charlie_balance_reserved = charlie_balance.toJSON().data.reserved; - const expected_reserve = 13010000000000; // Basic deposit (1 item, 301 bytes) - expect(charlie_balance_reserved).to.be.equal(expected_reserve); - }, - }); - - it({ - id: "E04", - title: "Registrar sets fee and fields", - test: async function () { - await context.createBlock(); - - const tx1 = polkadotJs.tx.identity.addRegistrar({ - Id: registrar_bob.address, - }); - const signedTx1 = await polkadotJs.tx.sudo.sudo(tx1).signAsync(sudo_alice); - await context.createBlock([signedTx1]); - - const tx2 = polkadotJs.tx.identity.setFee(0, 100); - const signedTx2 = await tx2.signAsync(registrar_bob); - await context.createBlock([signedTx2]); - - const tx3 = polkadotJs.tx.identity.setFields(0, 2); // 2 as fields equals Display + Web - const signedTx3 = await tx3.signAsync(registrar_bob); - await context.createBlock([signedTx3]); - - const identity_registrars = await polkadotJs.query.identity.registrars(); - const bob_registrar_on_chain = identity_registrars.toArray()[0].toJSON(); - - expect(bob_registrar_on_chain.fee).to.be.equal(100); - expect(bob_registrar_on_chain.fields).to.be.equal(2); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/pallet-treasury/test_pallet_treasury.ts b/test/suites/common-tanssi/pallet-treasury/test_pallet_treasury.ts deleted file mode 100644 index f35da99..0000000 --- a/test/suites/common-tanssi/pallet-treasury/test_pallet_treasury.ts +++ /dev/null @@ -1,183 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { extractFeeAuthor } from "util/block"; - -describeSuite({ - id: "CT0901", - title: "Treasury pallet test suite", - foundationMethods: "dev", - - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let sudo_alice: KeyringPair; - let user_charlie: KeyringPair; - let user_dave: KeyringPair; - let user_bob: KeyringPair; - // From Pallet Id "tns/tsry" -> Account - const treasury_address = "5EYCAe5jXiVvytpxmBupXPCNE9Vduq7gPeTwy9xMgQtKWMnR"; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - sudo_alice = context.keyring.alice; - user_charlie = context.keyring.charlie; - user_dave = context.keyring.dave; - user_bob = context.keyring.bob; - }); - - it({ - id: "E01", - title: "20% of fees & tips go for treasury account", - test: async function () { - // Gets the initial pot deposit value - const initial_pot = await polkadotJs.query.system.account(treasury_address); - const initial_free_pot = initial_pot.data.free.toBigInt(); - - // Executes a tx adding an additional tip - const tx = polkadotJs.tx.balances.transferAllowDeath(user_charlie.address, 200_000); - const signedTx = await tx.signAsync(user_dave, { tip: 100_000 }); - await context.createBlock([signedTx]); - const events = await polkadotJs.query.system.events(); - const fee = extractFeeAuthor(events, user_dave.address).amount.toBigInt(); - - // Gets the new pot deposit value - const new_pot = await polkadotJs.query.system.account(treasury_address); - const new_free_pot = new_pot.data.free.toBigInt(); - - // Division operation rounding - const rounding = fee % 5n > 0 ? 1n : 0n; - - // Treasury pot should increase by 20% of the paid fee & tip - expect(new_free_pot).to.be.equal(initial_free_pot + fee / 5n + rounding); - }, - }); - - it({ - id: "E02", - title: "Create proposal locks minimum bond from proposer", - test: async function () { - // Gets the initial reserved amount from the proposer - const proposer_initial_balance = await polkadotJs.query.system.account(user_charlie.address); - const proposer_initial_reserved_balance = proposer_initial_balance.data.reserved.toBigInt(); - - // minimum configured bond > 5% of the proposal - const tx = polkadotJs.tx.treasury.proposeSpend(1, user_dave.address); - const signedTx = await tx.signAsync(user_charlie); - await context.createBlock([signedTx]); - - const proposer_new_balance = await polkadotJs.query.system.account(user_charlie.address); - const proposer_new_reserved_balance = proposer_new_balance.data.reserved.toBigInt(); - - // reserved value should be the minimum bond - expect(proposer_new_reserved_balance).to.be.equal( - proposer_initial_reserved_balance + 1_000_000_000_000n * 100n - ); - }, - }); - - it({ - id: "E03", - title: "Create proposal locks 5% of the proposal from proposer's account", - test: async function () { - // Gets the initial reserved amount from the proposer - const proposer_initial_balance = await polkadotJs.query.system.account(user_dave.address); - const proposer_initial_reserved_balance = proposer_initial_balance.data.reserved.toBigInt(); - - // minimum configured bond > 5% of the proposal - const proposal_value = 1_000_000_000_000_000_000n; - const tx = polkadotJs.tx.treasury.proposeSpend(proposal_value, user_charlie.address); - const signedTx = await tx.signAsync(user_dave); - await context.createBlock([signedTx]); - - const proposer_new_balance = await polkadotJs.query.system.account(user_dave.address); - const proposer_new_reserved_balance = proposer_new_balance.data.reserved.toBigInt(); - - // reserved value should be 5% from the total amount requested in the proposal - expect(proposer_new_reserved_balance).to.be.equal( - proposer_initial_reserved_balance + (proposal_value * 5n) / 100n - ); - }, - }); - - it({ - id: "E04", - title: "Bond goes to treasury upon proposal rejection", - test: async function () { - // Gets the initial pot deposit value - const initial_pot = await polkadotJs.query.system.account(treasury_address); - const initial_free_pot = initial_pot.data.free.toBigInt(); - - // Creates a proposal - const proposal_value = 1_000_000_000_000_000_000n; - const tx = polkadotJs.tx.treasury.proposeSpend(proposal_value, user_dave.address); - const signedTx = await tx.signAsync(user_bob); - await context.createBlock([signedTx]); - - // Proposal is rejected - const tx_rejection = polkadotJs.tx.treasury.rejectProposal(2); - const signedTx_rejection = await polkadotJs.tx.sudo.sudo(tx_rejection).signAsync(sudo_alice); - await context.createBlock([signedTx_rejection]); - - // Gets the after rejection pot deposit value - const new_pot = await polkadotJs.query.system.account(treasury_address); - const new_free_pot = new_pot.data.free.toBigInt(); - - // Pot value should be >= the initial value + reserved proposal bond - expect(new_free_pot).toBeGreaterThan(initial_free_pot + (proposal_value * 5n) / 100n); - }, - }); - - it({ - id: "E05", - title: "Proposal is approved", - test: async function () { - // initial approvals count - const initial_approvals_count = await context.polkadotJs().query.treasury.approvals(); - - // Creates a proposal - const proposal_value = 100n; - const tx = polkadotJs.tx.treasury.proposeSpend(proposal_value, user_dave.address); - const signedTx = await tx.signAsync(user_bob); - await context.createBlock([signedTx]); - - // Proposal is approved - const tx_approval = polkadotJs.tx.treasury.approveProposal(3); - const signedTx_approval = await polkadotJs.tx.sudo.sudo(tx_approval).signAsync(sudo_alice); - await context.createBlock([signedTx_approval]); - - // New approvals count - const new_approvals_count = await context.polkadotJs().query.treasury.approvals(); - - // There should be 1 new approval - expect(new_approvals_count.length).to.be.equal(initial_approvals_count.length + 1); - }, - }); - - it({ - id: "E06", - title: "Non root can not approve proposals", - test: async function () { - // initial approvals count - const initial_approvals_count = await context.polkadotJs().query.treasury.approvals(); - - // Creates a proposal - const proposal_value = 100n; - const tx = polkadotJs.tx.treasury.proposeSpend(proposal_value, user_dave.address); - const signedTx = await tx.signAsync(user_bob); - await context.createBlock([signedTx]); - - // Proposal is approved - const tx_approval = polkadotJs.tx.treasury.approveProposal(4); - const signedTx_approval = await tx_approval.signAsync(user_charlie); - await context.createBlock([signedTx_approval]); - - // New approvals count - const new_approvals_count = await context.polkadotJs().query.treasury.approvals(); - - // There should be no new approvals - expect(new_approvals_count.length).to.be.equal(initial_approvals_count.length); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_registrar_deregister.ts b/test/suites/common-tanssi/registrar/test_registrar_deregister.ts deleted file mode 100644 index 8de6a71..0000000 --- a/test/suites/common-tanssi/registrar/test_registrar_deregister.ts +++ /dev/null @@ -1,137 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0501", - title: "Registrar test suite: de-register", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - beforeAll(() => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E03", - title: "Checking that fetching registered paraIds is possible", - test: async function () { - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - // These are registered in genesis - expect(parasRegistered).to.contain(2000); - expect(parasRegistered).to.contain(2001); - - // Set storage of pallet_author_noting and pallet_services_payment to test that it gets deleted later - const tx1 = polkadotJs.tx.authorNoting.setAuthor(2000, 1, alice.address, 1); - const tx2 = polkadotJs.tx.authorNoting.setAuthor(2001, 1, alice.address, 1); - await polkadotJs.tx.sudo.sudo(polkadotJs.tx.utility.batchAll([tx1, tx2])).signAndSend(alice); - - // Credits already exist - const credits2000 = (await polkadotJs.query.servicesPayment.blockProductionCredits(2000)).toJSON(); - expect(credits2000).toBeGreaterThan(0); - const credits2001 = (await polkadotJs.query.servicesPayment.blockProductionCredits(2001)).toJSON(); - expect(credits2001).toBeGreaterThan(0); - }, - }); - - it({ - id: "E04", - title: "Checking that de-registering paraIds is possible", - test: async function () { - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const tx = polkadotJs.tx.registrar.deregister(2001); - await polkadotJs.tx.sudo.sudo(tx).signAndSend(alice); - - await context.createBlock(); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000]); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000]); - }, - }); - - it({ - id: "E05", - title: "Checking that de-registering all paraIds does not leave extra keys in storage", - test: async function () { - await context.createBlock(); - - // Check the number of keys in storage - const palletKeysWithOnePara = await polkadotJs.rpc.state.getKeys("0x3fba98689ebed1138735e0e7a5a790ab"); - // 5 fixed keys + genesis data - expect(palletKeysWithOnePara.length).to.be.eq(6); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const tx = polkadotJs.tx.registrar.deregister(2000); - await polkadotJs.tx.sudo.sudo(tx).signAndSend(alice); - - await context.createBlock(); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([]); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([]); - - // Check the number of keys in storage - const palletKeys = await polkadotJs.rpc.state.getKeys("0x3fba98689ebed1138735e0e7a5a790ab"); - // 5 keys: Version, RegisteredParas, PendingParas, PendingToRemove, PendingParathreadParams - expect(palletKeys.length).to.be.eq(5); - - // Check that deregistered hook cleared storage of pallet_author_noting and pallet_services_payment - const authorData2000 = (await polkadotJs.query.authorNoting.latestAuthor(2000)).toJSON(); - expect(authorData2000).to.be.null; - const authorData2001 = (await polkadotJs.query.authorNoting.latestAuthor(2001)).toJSON(); - expect(authorData2001).to.be.null; - - const credits2000 = (await polkadotJs.query.servicesPayment.blockProductionCredits(2000)).toJSON(); - expect(credits2000).to.be.null; - const credits2001 = (await polkadotJs.query.servicesPayment.blockProductionCredits(2001)).toJSON(); - expect(credits2001).to.be.null; - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_registrar_pause.ts b/test/suites/common-tanssi/registrar/test_registrar_pause.ts deleted file mode 100644 index 494cd50..0000000 --- a/test/suites/common-tanssi/registrar/test_registrar_pause.ts +++ /dev/null @@ -1,106 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0504", - title: "Registrar test suite: pause", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that fetching registered paraIds is possible", - test: async function () { - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - // These are registered in genesis - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001]); - }, - }); - - it({ - id: "E02", - title: "Checking that pausing paraIds is possible", - test: async function () { - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const tx = polkadotJs.tx.registrar.pauseContainerChain(2001); - await polkadotJs.tx.sudo.sudo(tx).signAndSend(alice); - - await context.createBlock(); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000]); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000]); - }, - }); - - it({ - id: "E03", - title: "Checking that unpausing paraIds is possible", - test: async function () { - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const tx = polkadotJs.tx.registrar.unpauseContainerChain(2001); - await polkadotJs.tx.sudo.sudo(tx).signAndSend(alice); - - await context.createBlock(); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000, 2001]); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001]); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_registrar_proxy.ts b/test/suites/common-tanssi/registrar/test_registrar_proxy.ts deleted file mode 100644 index b9c38b9..0000000 --- a/test/suites/common-tanssi/registrar/test_registrar_proxy.ts +++ /dev/null @@ -1,205 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "util/block"; - -describeSuite({ - id: "DT0605", - title: "Registrar test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Can add registrar proxy and use it", - test: async function () { - // Setup proxy - const delegate = charlie.address; - const registrar_proxy = 6; - const delay = 0; - const tx = polkadotJs.tx.proxy.addProxy(delegate, registrar_proxy, delay); - await context.createBlock([await tx.signAsync(bob)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(bob.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate: charlie.address, - proxyType: "Registrar", - delay: 0, - }, - ]); - - // Use proxy - await context.createBlock(); - - const emptyGenesisData = () => { - const g = polkadotJs.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - - // assert we can inject on chain data with proxy - const tx2 = polkadotJs.tx.proxy.proxy( - bob.address, - null, - polkadotJs.tx.registrar.register(2002, containerChainGenesisData) - ); - await context.createBlock([await tx2.signAsync(charlie)]); - // Check that the on chain genesis data is set correctly - const onChainGenesisData = await polkadotJs.query.registrar.paraGenesisData(2002); - // TODO: fix once we have types - expect(emptyGenesisData().toJSON()).to.deep.equal(onChainGenesisData.toJSON()); - - // assert we can inject bootnodes with proxy - const tx3 = polkadotJs.tx.proxy.proxy( - bob.address, - null, - polkadotJs.tx.dataPreservers.setBootNodes(2002, ["dummy"]) - ); - await context.createBlock([await tx3.signAsync(charlie)]); - - // Check that the on chain genesis data is set correctly - const onChainBootnodes = await polkadotJs.query.dataPreservers.bootNodes(2002); - // TODO: fix once we have types - expect(onChainBootnodes.toHuman()).to.deep.equal(["dummy"]); - }, - }); - - it({ - id: "E02", - title: "SudoRegistrar proxy works", - test: async function () { - // Proxy - const delegate = charlie.address; - const sudo_registrar_proxy = 7; - const delay = 0; - const tx = polkadotJs.tx.proxy.addProxy(delegate, sudo_registrar_proxy, delay); - await context.createBlock(); - await context.createBlock([await tx.signAsync(alice)]); - - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - const proxies = await polkadotJs.query.proxy.proxies(alice.address); - expect(proxies.toJSON()[0]).to.deep.equal([ - { - delegate: charlie.address, - proxyType: "SudoRegistrar", - delay: 0, - }, - ]); - - // Registrar - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const emptyGenesisData = () => { - const g = polkadotJs.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - - const tx2 = polkadotJs.tx.registrar.register(2002, containerChainGenesisData); - const tx3 = polkadotJs.tx.registrar.markValidForCollating(2002); - const nonce = await polkadotJs.rpc.system.accountNextIndex(alice.publicKey); - await context.createBlock([ - await tx2.signAsync(alice, { nonce }), - await polkadotJs.tx.proxy - .proxy(alice.address, null, polkadotJs.tx.sudo.sudo(tx3)) - .signAsync(charlie), - ]); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000, 2001, 2002]); - - // Check that the on chain genesis data is set correctly - const onChainGenesisData = await polkadotJs.query.registrar.paraGenesisData(2002); - // TODO: fix once we have types - expect(emptyGenesisData().toJSON()).to.deep.equal(onChainGenesisData.toJSON()); - - // Check the para id has been given some free credits - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(2002)).toJSON(); - expect(credits, "Container chain 2002 should have been given credits").toBeGreaterThan(0); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001, 2002]); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_registrar_register.ts b/test/suites/common-tanssi/registrar/test_registrar_register.ts deleted file mode 100644 index aeb2f0e..0000000 --- a/test/suites/common-tanssi/registrar/test_registrar_register.ts +++ /dev/null @@ -1,128 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0502", - title: "Registrar test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that fetching registered paraIds is possible", - test: async function () { - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - // These are registered in genesis - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001]); - }, - }); - - it({ - id: "E02", - title: "Checking that registering paraIds is possible", - test: async function () { - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const emptyGenesisData = () => { - const g = polkadotJs.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - const bootNodes = [ - "/ip4/127.0.0.1/tcp/33051/ws/p2p/12D3KooWSDsmAa7iFbHdQW4X8B2KbeRYPDLarK6EbevUSYfGkeQw", - ]; - - const tx = polkadotJs.tx.registrar.register(2002, containerChainGenesisData); - const tx2 = polkadotJs.tx.dataPreservers.setBootNodes(2002, bootNodes); - const tx3 = polkadotJs.tx.registrar.markValidForCollating(2002); - const nonce = await polkadotJs.rpc.system.accountNextIndex(alice.publicKey); - await context.createBlock([ - await tx.signAsync(alice, { nonce }), - await tx2.signAsync(alice, { nonce: nonce.addn(1) }), - await polkadotJs.tx.sudo.sudo(tx3).signAsync(alice, { nonce: nonce.addn(2) }), - ]); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000, 2001, 2002]); - - // Check that the on chain genesis data is set correctly - const onChainGenesisData = await polkadotJs.query.registrar.paraGenesisData(2002); - // TODO: fix once we have types - expect(emptyGenesisData().toJSON()).to.deep.equal(onChainGenesisData.toJSON()); - - // Check the para id has been given some free credits - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(2002)).toJSON(); - expect(credits, "Container chain 2002 should have been given credits").toBeGreaterThan(0); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001, 2002]); - }, - }); - - it({ - id: "E03", - title: "Registered paraId has been given free credits, and flag can be cleared", - test: async function () { - const paraId = 2002; - const givenFreeCredits = await polkadotJs.query.servicesPayment.givenFreeCredits(paraId); - expect(givenFreeCredits.isNone).to.be.false; - // Test that the storage can be cleared as root - const tx = polkadotJs.tx.servicesPayment.setGivenFreeCredits(paraId, false); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - // Flag has been cleared - const givenFreeCredits2 = await polkadotJs.query.servicesPayment.givenFreeCredits(paraId); - expect(givenFreeCredits2.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_registrar_register_parathread.ts b/test/suites/common-tanssi/registrar/test_registrar_register_parathread.ts deleted file mode 100644 index 6f44f18..0000000 --- a/test/suites/common-tanssi/registrar/test_registrar_register_parathread.ts +++ /dev/null @@ -1,155 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "CT0506", - title: "Registrar test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that fetching registered paraIds is possible", - test: async function () { - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - // These are registered in genesis - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001]); - }, - }); - - it({ - id: "E02", - title: "Checking that registering paraIds is possible", - test: async function () { - await context.createBlock(); - - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const slotFrequency = polkadotJs.createType("TpTraitsSlotFrequency", { - min: 1, - max: 1, - }); - const emptyGenesisData = () => { - const g = polkadotJs.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - const bootNodes = [ - "/ip4/127.0.0.1/tcp/33051/ws/p2p/12D3KooWSDsmAa7iFbHdQW4X8B2KbeRYPDLarK6EbevUSYfGkeQw", - ]; - - const tx = polkadotJs.tx.registrar.registerParathread(2002, slotFrequency, containerChainGenesisData); - const tx2 = polkadotJs.tx.dataPreservers.setBootNodes(2002, bootNodes); - const tx3 = polkadotJs.tx.registrar.markValidForCollating(2002); - const nonce = await polkadotJs.rpc.system.accountNextIndex(alice.publicKey); - await context.createBlock([ - await tx.signAsync(alice, { nonce }), - await tx2.signAsync(alice, { nonce: nonce.addn(1) }), - await polkadotJs.tx.sudo.sudo(tx3).signAsync(alice, { nonce: nonce.addn(2) }), - ]); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000, 2001, 2002]); - - // Check that the on chain genesis data is set correctly - const onChainGenesisData = await polkadotJs.query.registrar.paraGenesisData(2002); - // TODO: fix once we have types - expect(emptyGenesisData().toJSON()).to.deep.equal(onChainGenesisData.toJSON()); - - // Check the para id has been given some free credits - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(2002)).toJSON(); - expect(credits, "Container chain 2002 should have been given credits").toBeGreaterThan(0); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001, 2002]); - }, - }); - - it({ - id: "E03", - title: "Registered paraId has been given free credits, and flag can be cleared", - test: async function () { - const paraId = 2002; - const givenFreeCredits = await polkadotJs.query.servicesPayment.givenFreeCredits(paraId); - expect(givenFreeCredits.isNone).to.be.false; - // Test that the storage can be cleared as root - const tx = polkadotJs.tx.servicesPayment.setGivenFreeCredits(paraId, false); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - // Flag has been cleared - const givenFreeCredits2 = await polkadotJs.query.servicesPayment.givenFreeCredits(paraId); - expect(givenFreeCredits2.isNone).to.be.true; - }, - }); - - it({ - id: "E04", - title: "Parathread params can be changed", - test: async function () { - const paraId = 2002; - const slotFrequency = polkadotJs.createType("TpTraitsSlotFrequency", { - min: 2, - max: 2, - }); - const tx = polkadotJs.tx.registrar.setParathreadParams(paraId, slotFrequency); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - // Checking that in session 2 params have changed - await jumpSessions(context, 2); - - const params = await polkadotJs.query.registrar.parathreadParams(paraId); - expect(params.unwrap().slotFrequency.toJSON()).to.deep.equal({ - min: 2, - max: 2, - }); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/registrar/test_utils_rpc.ts b/test/suites/common-tanssi/registrar/test_utils_rpc.ts deleted file mode 100644 index ecaf874..0000000 --- a/test/suites/common-tanssi/registrar/test_utils_rpc.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { chainSpecToContainerChainGenesisData, containerChainGenesisDataToChainSpec } from "../../../util/genesis_data"; -import "@polkadot/api-augment"; - -describeSuite({ - id: "CT0503", - title: "Test ContainerChainGenesisData utils", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - - beforeAll(() => { - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Read a ChainSpec, convert it to ContainerChainGenesisData, and back to the same ChainSpec", - test: async function () { - // Mock raw chain spec file - const chainSpec2000 = { - name: "Local Testnet", - id: "local_testnet", - chainType: "Local", - forkId: null, - bootNodes: [], - telemetryEndpoints: null, - protocolId: "container-chain-2000", - properties: { - isEthereum: false, - ss58Format: 42, - tokenDecimals: 12, - tokenSymbol: "UNIT", - }, - relay_chain: "rococo-local", - para_id: 2000, - codeSubstitutes: {}, - genesis: { - raw: { - top: { - "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - }, - childrenDefault: {}, - }, - }, - }; - const containerChainGenesisData = chainSpecToContainerChainGenesisData(polkadotJs, chainSpec2000); - const chainSpecJsonAgain = containerChainGenesisDataToChainSpec( - containerChainGenesisData, - 2000, - "Local", - "rococo-local" - ); - - expect(chainSpec2000).to.deep.equal(chainSpecJsonAgain); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/relay-storage-roots/test_pallet_storage_roots.ts b/test/suites/common-tanssi/relay-storage-roots/test_pallet_storage_roots.ts deleted file mode 100644 index 5461375..0000000 --- a/test/suites/common-tanssi/relay-storage-roots/test_pallet_storage_roots.ts +++ /dev/null @@ -1,45 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "CT0801", - title: "RelayStorageRoots pallet test suite", - foundationMethods: "dev", - - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Only 10 latest blocks are stored", - test: async function () { - // Relay block list starts empty - const relayBlocksEmpty = (await polkadotJs.query.relayStorageRoots.relayStorageRootKeys()).toJSON(); - expect(relayBlocksEmpty).to.deep.equal([]); - - // Create 30 blocks - for (let i = 0; i < 20; i++) { - await context.createBlock(); - } - - // Only latest 10 will be stored - // relay_block_number = tanssi_block_number * 2 + 1000 - const relayBlocks = (await polkadotJs.query.relayStorageRoots.relayStorageRootKeys()).toJSON(); - expect(relayBlocks).to.deep.equal([1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038]); - - // The mapping only contains the keys that are in `relayStorageRootKeys` - const mappingKeys = (await polkadotJs.query.relayStorageRoots.relayStorageRoot.keys()).map((key) => { - // Convert "1,020" into 1020 - return parseInt(key.toHuman().toString().replace(",", "")); - }); - mappingKeys.sort(); - expect(relayBlocks).to.deep.equal(mappingKeys); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_burns.ts b/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_burns.ts deleted file mode 100644 index 3a609bb..0000000 --- a/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_burns.ts +++ /dev/null @@ -1,58 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { jumpSessions, fetchIssuance } from "util/block"; -import { paraIdTank } from "util/payment"; - -describeSuite({ - id: "CT0604", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const blocksPerSession = 10n; - const paraId2001 = 2001n; - const costPerBlock = 1_000_000n; - let balanceTankBefore; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - const tx2000OneSession = polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2001, 0); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2000OneSession).signAsync(alice)]); - const existentialDeposit = await polkadotJs.consts.balances.existentialDeposit.toBigInt(); - // Now, buy some credits for container chain 2001 - const purchasedCredits = blocksPerSession * costPerBlock + existentialDeposit; - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2001, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - balanceTankBefore = (await polkadotJs.query.system.account(paraIdTank(paraId2001))).data.free.toBigInt(); - expect(balanceTankBefore, `Tank should have been filled`).toBe(purchasedCredits); - }); - it({ - id: "E01", - title: "We deregister 2000, check the issuance drops", - test: async function () { - // We deregister the chain - const deregister2001 = polkadotJs.tx.sudo.sudo(polkadotJs.tx.registrar.deregister(paraId2001)); - await context.createBlock([await deregister2001.signAsync(alice)]); - // Check that after 2 sessions, tank is empty and chain is deregistered - await jumpSessions(context, 2); - const balanceTank = ( - await polkadotJs.query.system.account(paraIdTank(paraId2001)) - ).data.free.toBigInt(); - expect(balanceTank, `Tank should have been removed`).toBe(0n); - - const blockNumber = (await polkadotJs.rpc.chain.getHeader()).number.toNumber(); - const apiAtBlockBefore = await polkadotJs.at(await polkadotJs.rpc.chain.getBlockHash(blockNumber - 1)); - const supplyBefore = (await apiAtBlockBefore.query.balances.totalIssuance()).toBigInt(); - const supplyAfter = (await polkadotJs.query.balances.totalIssuance()).toBigInt(); - const blockIssuance = await fetchIssuance(await polkadotJs.query.system.events()); - const issuanceDiff = supplyAfter - supplyBefore; - expect(issuanceDiff, `Tank should have been removed`).toBe( - blockIssuance.amount.toBigInt() - balanceTankBefore - ); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_refunds.ts b/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_refunds.ts deleted file mode 100644 index e22b27a..0000000 --- a/test/suites/common-tanssi/services-payment/test_service_payment_removes_tank_money_and_refunds.ts +++ /dev/null @@ -1,71 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair, generateKeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; -import { paraIdTank } from "util/payment"; - -describeSuite({ - id: "CT0604", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const blocksPerSession = 10n; - const paraId2001 = 2001n; - const costPerBlock = 1_000_000n; - let refundAddress; - let balanceTankBefore; - let purchasedCredits; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - refundAddress = generateKeyringPair("sr25519"); - const tx2001OneSession = polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2001, 0); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2001OneSession).signAsync(alice)]); - const existentialDeposit = await polkadotJs.consts.balances.existentialDeposit.toBigInt(); - // Now, buy some credits for container chain 2001 - purchasedCredits = blocksPerSession * costPerBlock + existentialDeposit; - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2001, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - balanceTankBefore = (await polkadotJs.query.system.account(paraIdTank(paraId2001))).data.free.toBigInt(); - expect(balanceTankBefore, `Tank should have been filled`).toBe(purchasedCredits); - }); - it({ - id: "E01", - title: "Sudo can set refund address", - test: async function () { - // We deregister the chain - const setRefundAddress = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.servicesPayment.setRefundAddress(paraId2001, refundAddress.address) - ); - await context.createBlock([await setRefundAddress.signAsync(alice)]); - // Check that we can fetch the address - const refundAddressOnChain = await polkadotJs.query.servicesPayment.refundAddress(paraId2001); - expect(refundAddressOnChain.toString(), `Refund address should be set`).toBe(refundAddress.address); - }, - }); - it({ - id: "E02", - title: "On deregistration we refund the address", - test: async function () { - // We deregister the chain - const deregister2001 = polkadotJs.tx.sudo.sudo(polkadotJs.tx.registrar.deregister(paraId2001)); - await context.createBlock([await deregister2001.signAsync(alice)]); - // Check that after 2 sessions, tank is empty and chain is deregistered - await jumpSessions(context, 2); - const balanceTank = ( - await polkadotJs.query.system.account(paraIdTank(paraId2001)) - ).data.free.toBigInt(); - expect(balanceTank, `Tank should have been removed`).toBe(0n); - - const balanceRefundAddress = ( - await polkadotJs.query.system.account(refundAddress.address) - ).data.free.toBigInt(); - - expect(balanceRefundAddress).toBe(purchasedCredits); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_block_credit_buying_free_combined.ts b/test/suites/common-tanssi/services-payment/test_services_payment_block_credit_buying_free_combined.ts deleted file mode 100644 index 0e46d34..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_block_credit_buying_free_combined.ts +++ /dev/null @@ -1,94 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; - -describeSuite({ - id: "CT0603", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const blocksPerSession = 10n; - const paraId2000 = 2000n; - const paraId2001 = 2001n; - const costPerBlock = 1_000_000n; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - - it({ - id: "E01", - title: "Collators are unassigned when a container chain does not have enough block credits", - test: async function () { - // Create blocks until authorNoting.blockNum does not increase anymore. - // Check that collatorAssignment does not have collators and num credits is less than 2 sessions. - - const tx2000free = polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2000, 0n); - const tx2001free = polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2001, 0n); - - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2000free).signAsync(alice)]); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2001free).signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E02", - title: "Collators are not assigned when we buy 1 session + ED -1 of block credits", - test: async function () { - // Set half of the needed block production credits as free credits - const tx2000OneSession = polkadotJs.tx.servicesPayment.setBlockProductionCredits( - paraId2000, - blocksPerSession / 2n - ); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2000OneSession).signAsync(alice)]); - const existentialDeposit = await polkadotJs.consts.balances.existentialDeposit.toBigInt(); - // Now, buy some credits for container chain 2000. we only the second half of the needed credits - 1 - const purchasedCredits = (blocksPerSession / 2n) * costPerBlock + existentialDeposit - 1n; - // Check that after 2 sessions, container chain 2000 has not collators - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has 0 collators and is not producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E03", - title: "Collators are assigned when we buy at least 2 session + ED of block credits", - test: async function () { - // Now, buy the remaining - const purchasedCredits = 1n; - // Purchase the remaining 1 - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000].length, - `Container chain ${paraId2000} has 0 collators` - ).toBeGreaterThan(0); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_block_credits.ts b/test/suites/common-tanssi/services-payment/test_services_payment_block_credits.ts deleted file mode 100644 index a7172e4..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_block_credits.ts +++ /dev/null @@ -1,245 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { generateKeyringPair, KeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; -import { paraIdTank } from "util/payment"; - -describeSuite({ - id: "CT0601", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const blocksPerSession = 10n; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - it({ - id: "E01", - title: "Genesis container chains have credits and collators", - test: async function () { - await context.createBlock(); - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - for (const paraId of parasRegistered.toJSON()) { - // Should have credits - const credits = await polkadotJs.query.servicesPayment.blockProductionCredits(paraId); - expect( - credits.toJSON(), - `Container chain ${paraId} does not have enough credits at genesis` - ).toBeGreaterThanOrEqual(2n * blocksPerSession); - - // Should have assigned collators - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - - // We are evaluating blockCredits for now, so lets put a lot of collatorAssignmentCredits - const tx = polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId, 1000n); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - // Container chain 2001 does not have any collators, this will result in only 1 container chain - // producing blocks at a time. So if both container chains have 1000 credits, container 2000 - // will produce blocks 0-999, and container 2001 will produce blocks 1000-1999. - if (paraId == 2000) { - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - } - } - }, - }); - - it({ - id: "E02", - title: "Creating a container chain block costs credits", - test: async function () { - // Read num credits of para 2000, then create that many blocks. Check that authorNoting.blockNum does not increase anymore - // and collatorAssignment does not have collators - - const paraId = 2000n; - - // Create a block, the block number should increase, and the number of credits should decrease - const credits1 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - const containerBlockNum1 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - await context.createBlock(); - const credits2 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - const containerBlockNum2 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - expect(containerBlockNum1, "container chain 2000 did not create a block").toBeLessThan( - containerBlockNum2 - ); - expect(credits1, "container chain 2000 created a block without burning any credits").toBeGreaterThan( - credits2 - ); - }, - }); - - it({ - id: "E03", - title: "Collators are unassigned when a container chain does not have enough credits", - test: async function () { - // Create blocks until authorNoting.blockNum does not increase anymore. - // Check that collatorAssignment does not have collators and num credits is less than 2 sessions. - - const paraId = 2000n; - - // Create blocks until the block number stops increasing - let containerBlockNum3 = -1; - let containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - - while (containerBlockNum3 != containerBlockNum4) { - await context.createBlock(); - containerBlockNum3 = containerBlockNum4; - containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - } - - // Now the container chain should have less than 2 sessions worth of credits - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - expect( - credits, - "Container chain 2000 has stopped producing blocks, so it should not have enough credits" - ).toBeLessThan(2n * blocksPerSession); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId], - `Container chain ${paraId} should have 0 collators` - ).toBeUndefined(); - }, - }); - - it({ - id: "E04", - title: "Root can remove credits", - test: async function () { - // Remove all the credits of container chain 2001, which should have assigned collators now - // This checks that the node does not panic when we try to subtract credits from 0 (saturating_sub) - - const paraId = 2001n; - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - expect(credits, "Container chain 2001 does not have enough credits").toBeGreaterThanOrEqual( - 2n * blocksPerSession - ); - - // Should have assigned collators - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - - // Create a block, the block number should increase, and the number of credits should decrease - const credits1 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - const containerBlockNum1 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - await context.createBlock(); - const credits2 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON(); - const containerBlockNum2 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - expect(containerBlockNum1, "container chain 2001 did not create a block").toBeLessThan( - containerBlockNum2 - ); - expect(credits1, "container chain 2001 created a block without burning any credits").toBeGreaterThan( - credits2 - ); - - // Set credits to 0 - const tx = polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId, 0n); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const credits3 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON() || 0; - expect(credits3).toBe(0); - // Can still create blocks - const containerBlockNum3 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - await context.createBlock(); - const credits4 = (await polkadotJs.query.servicesPayment.blockProductionCredits(paraId)).toJSON() || 0; - const containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - expect( - containerBlockNum3, - "container chain 2001 did not create a block after root set credits to 0" - ).toBeLessThan(containerBlockNum4); - // But credits cannot be lower than 0 - expect(credits4, "container chain 2001 has negative credits").toBe(0); - }, - }); - - it({ - id: "E05", - title: "Can buy additional credits", - test: async function () { - // As alice, buy credits for para 2000. Check that it is assigned collators again - const paraId = 2000n; - - // Create blocks until no collators are assigned to any container chain - for (;;) { - await context.createBlock(); - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - if (Object.keys(collators.toJSON().containerChains).length == 0) { - break; - } - } - - // Use random account instead of alice because alice is getting block rewards - const randomAccount = generateKeyringPair("sr25519"); - const value = 100_000_000_000n; - await context.createBlock([ - await polkadotJs.tx.balances.transferAllowDeath(randomAccount.address, value).signAsync(alice), - ]); - - // Now, buy some credits for container chain 2000 - const balanceBefore = ( - await polkadotJs.query.system.account(randomAccount.address) - ).data.free.toBigInt(); - const purchasedCredits = 1000n * blocksPerSession; - - const requiredBalance = purchasedCredits * 1_000_000n; - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId, requiredBalance); - await context.createBlock([await tx.signAsync(randomAccount)]); - - const balanceAfter = ( - await polkadotJs.query.system.account(randomAccount.address) - ).data.free.toBigInt(); - expect(balanceAfter).toBeLessThan(balanceBefore); - - const balanceTank = (await polkadotJs.query.system.account(paraIdTank(paraId))).data.free.toBigInt(); - expect(balanceTank).toBe(requiredBalance); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - expect(balanceTank).toBe(requiredBalance); - - // Create a block, the block number should increase, and the number of credits should decrease - const containerBlockNum3 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - await context.createBlock(); - - const containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - expect(containerBlockNum3, "container chain 2000 did not create a block").toBeLessThan( - containerBlockNum4 - ); - const balanceTankAfter = ( - await polkadotJs.query.system.account(paraIdTank(paraId)) - ).data.free.toBigInt(); - expect(balanceTank, "container chain 2000 created a block without burning any credits").toBeGreaterThan( - balanceTankAfter - ); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_collator_credit_buying_free_combined.ts b/test/suites/common-tanssi/services-payment/test_services_payment_collator_credit_buying_free_combined.ts deleted file mode 100644 index 209e312..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_collator_credit_buying_free_combined.ts +++ /dev/null @@ -1,87 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; - -describeSuite({ - id: "CT0604", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const paraId2000 = 2000n; - const paraId2001 = 2001n; - const costPerSession = 100_000_000n; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - - it({ - id: "E01", - title: "Collators are unassigned when a container chain does not have enough collator assignment credits", - test: async function () { - // Create blocks until authorNoting.blockNum does not increase anymore. - // Check that collatorAssignment does not have collators and num credits is less than 2 sessions. - - const tx2000free = polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId2000, 0n); - const tx2001free = polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId2001, 0n); - - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2000free).signAsync(alice)]); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx2001free).signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E02", - title: "Collators are not assigned when we buy a session + ED -1 of collator assignment credits", - test: async function () { - const existentialDeposit = await polkadotJs.consts.balances.existentialDeposit.toBigInt(); - // Now, buy some credits for container chain 2000. we only buy ones session -1 - const purchasedCredits = costPerSession + existentialDeposit - 1n; - // Check that after 2 sessions, container chain 2000 has not collators - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has 0 collators and is not producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E03", - title: "Collators are assigned when we buy at least a session + ED of block credits", - test: async function () { - // Now, buy the remaining - const purchasedCredits = 1n; - // Purchase the remaining 1 - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000].length, - `Container chain ${paraId2000} has 0 collators` - ).toBeGreaterThan(0); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_collator_credits.ts b/test/suites/common-tanssi/services-payment/test_services_payment_collator_credits.ts deleted file mode 100644 index 0fed52a..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_collator_credits.ts +++ /dev/null @@ -1,198 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { generateKeyringPair, KeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; -import { paraIdTank } from "util/payment"; - -describeSuite({ - id: "CT0601", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const startingCredits = 100n; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - it({ - id: "E01", - title: "Genesis container chains have credits and collators and should have one less credit", - test: async function () { - await context.createBlock(); - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - - for (const paraId of parasRegistered) { - // Should have credits - const credits = await polkadotJs.query.servicesPayment.collatorAssignmentCredits(paraId); - - // Should have assigned collators - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - - // Container chain 2001 does not have any collators, this will result in only 1 container chain - // producing blocks at a time. So if both container chains have 1000 credits, container 2000 - // will produce blocks 0-999, and container 2001 will produce blocks 1000-1999. - if (paraId.toBigInt() === 2000n) { - expect( - credits.unwrap().toBigInt(), - `Container chain ${paraId} should have applied session credits` - ).toBe(startingCredits - 1n); - expect( - collators.toJSON().containerChains[paraId.toString()].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - } else { - expect( - credits.unwrap().toBigInt(), - `Container chain ${paraId} should not have substracted credits` - ).toBe(startingCredits); - expect( - collators.toJSON().containerChains[paraId.toString()].length, - `Container chain ${paraId} has 0 collators` - ).toBe(0); - } - } - }, - }); - - it({ - id: "E02", - title: "Getting assignation should consume credits", - test: async function () { - // Moving to the next session should have reduced the credit by one to both parachains - // even if one does not produce blocks - - const paraId = 2000n; - await jumpSessions(context, 1); - const credits = await polkadotJs.query.servicesPayment.collatorAssignmentCredits(paraId); - expect( - credits.unwrap().toBigInt(), - `Container chain ${paraId} does not have enough credits at genesis` - ).toBe(startingCredits - 2n); - }, - }); - - it({ - id: "E03", - title: "Collators are unassigned when a container chain does not have enough credits", - test: async function () { - // Create blocks until authorNoting.blockNum does not increase anymore. - // Check that collatorAssignment does not have collators and num credits is less than 2 sessions. - - const paraId = 2000n; - - // Create blocks until the block number stops increasing - let containerBlockNum3 = -1; - let containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - - while (containerBlockNum3 != containerBlockNum4) { - await context.createBlock(); - containerBlockNum3 = containerBlockNum4; - containerBlockNum4 = await (await polkadotJs.query.authorNoting.latestAuthor(paraId)).toJSON() - .blockNumber; - } - - // Now the container chain should have less than 2 sessions worth of credits - const credits = (await polkadotJs.query.servicesPayment.collatorAssignmentCredits(paraId)).toJSON(); - expect( - credits, - "Container chain 2000 has stopped producing blocks, so it should not have enough credits" - ).toBeLessThan(2n); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId], - `Container chain ${paraId} should have 0 collators` - ).toBeUndefined(); - }, - }); - - it({ - id: "E04", - title: "Root can remove credits", - test: async function () { - // Remove all the credits of container chain 2001, which should have assigned collators now - // This checks that the node does not panic when we try to subtract credits from 0 (saturating_sub) - const paraId = 2001n; - const credits = (await polkadotJs.query.servicesPayment.collatorAssignmentCredits(paraId)).toJSON(); - expect(credits, "Container chain 2001 does not have enough credits").toBeGreaterThanOrEqual(2n); - - // Should have assigned collators - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - - // Set credits to 0 - const tx = polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId, 0n); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - // After 2 sessions, the container-chain should not be assigned - await jumpSessions(context, 2); - const collatorsAfter = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collatorsAfter.toJSON().containerChains[paraId], - `Container chain ${paraId} should have 0 collators` - ).toBeUndefined(); - }, - }); - - it({ - id: "E05", - title: "Can buy additional credits", - test: async function () { - // As alice, buy credits for para 2000. Check that it is assigned collators again - const paraId = 2000n; - - // Create blocks until no collators are assigned to any container chain - for (;;) { - await context.createBlock(); - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - if (Object.keys(collators.toJSON().containerChains).length == 0) { - break; - } - } - - // Use random account instead of alice because alice is getting block rewards - const randomAccount = generateKeyringPair("sr25519"); - const value = 100_000_000_000n; - await context.createBlock([ - await polkadotJs.tx.balances.transferAllowDeath(randomAccount.address, value).signAsync(alice), - ]); - - // Now, buy some credits for container chain 2000 - const balanceBefore = ( - await polkadotJs.query.system.account(randomAccount.address) - ).data.free.toBigInt(); - const purchasedCredits = 100n; - - const requiredBalance = purchasedCredits * 100_000_000n; - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId, requiredBalance); - await context.createBlock([await tx.signAsync(randomAccount)]); - - const balanceAfter = ( - await polkadotJs.query.system.account(randomAccount.address) - ).data.free.toBigInt(); - expect(balanceAfter).toBeLessThan(balanceBefore); - - const balanceTank = (await polkadotJs.query.system.account(paraIdTank(paraId))).data.free.toBigInt(); - expect(balanceTank).toBe(requiredBalance); - - // Check that after 2 sessions, container chain 2000 has collators and is producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} has 0 collators` - ).toBeGreaterThan(0); - expect(balanceTank).toBe(requiredBalance); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_collator_tip.ts b/test/suites/common-tanssi/services-payment/test_services_payment_collator_tip.ts deleted file mode 100644 index ef21178..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_collator_tip.ts +++ /dev/null @@ -1,48 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { fetchCollatorAssignmentTip, jumpSessions } from "util/block"; - -describeSuite({ - id: "CT0608", - title: "Services payment collator assignment tip test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - it({ - id: "E01", - title: "Tip should prioritize collator assignment", - test: async function () { - await context.createBlock(); - - const paraId = 2001n; - - const tip = 123; - - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId, 1_000_000_000_000_000); - await context.createBlock([await tx.signAsync(alice)]); - - const txMaxTip = polkadotJs.tx.servicesPayment.setMaxTip(paraId, tip); - await context.createBlock([await polkadotJs.tx.sudo.sudo(txMaxTip).signAsync(alice)]); - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId].length, - `Container chain ${paraId} should have 2 collators` - ).toBe(2); - - const events = await polkadotJs.query.system.events(); - const tipEvent = fetchCollatorAssignmentTip(events); - expect(tipEvent.tip.toNumber()).to.be.equal(tip); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_no_free_credits.ts b/test/suites/common-tanssi/services-payment/test_services_payment_no_free_credits.ts deleted file mode 100644 index 232d188..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_no_free_credits.ts +++ /dev/null @@ -1,108 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { jumpSessions } from "util/block"; - -describeSuite({ - id: "CT0609", - title: "Services payment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - const paraId2000 = 2000n; - const paraId2001 = 2001n; - const costPerSession = 100_000_000n; - const costPerBlock = 1_000_000n; - const blocksPerSession = 10n; - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - }); - it({ - id: "E01", - title: "Genesis container chains have credits and collators and should have one less credit", - test: async function () { - const removeFreeCredits = polkadotJs.tx.utility.batch([ - polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId2000, 0n), - polkadotJs.tx.servicesPayment.setCollatorAssignmentCredits(paraId2001, 0n), - polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2000, 0n), - polkadotJs.tx.servicesPayment.setBlockProductionCredits(paraId2001, 0n), - ]); - await context.createBlock([await polkadotJs.tx.sudo.sudo(removeFreeCredits).signAsync(alice)]); - // Check that after 2 sessions, chain is deregistered - await jumpSessions(context, 2); - - await context.createBlock(); - // Should not have assigned collators - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - - expect( - collators.toJSON().containerChains[paraId2001], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E02", - title: "Buying credits only for collator-assignment is not enough", - test: async function () { - const existentialDeposit = await polkadotJs.consts.balances.existentialDeposit.toBigInt(); - // Now, buy some credits for container chain 2000. we only buy ones session -1 - const purchasedCredits = costPerSession + existentialDeposit; - // Check that after 2 sessions, container chain 2000 has not collators - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has 0 collators and is not producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - it({ - id: "E03", - title: "Additionally buying credits only for block-credits makes it assigned", - test: async function () { - // Now, buy some credits for container chain 2000. we only buy ones session -1 - const purchasedCredits = blocksPerSession * costPerBlock * 2n; - // Check that after 2 sessions, container chain 2000 has not collators - const tx = polkadotJs.tx.servicesPayment.purchaseCredits(paraId2000, purchasedCredits); - await context.createBlock([await tx.signAsync(alice)]); - - // Check that after 2 sessions, container chain 2000 has 0 collators and is not producing blocks - await jumpSessions(context, 2); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000].length, - `Container chain ${paraId2000} has 0 collators` - ).toBeGreaterThan(0); - }, - }); - it({ - id: "E04", - title: "Just one session later they should be unassinged", - test: async function () { - // Check that after 1 sessions - await jumpSessions(context, 1); - - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect( - collators.toJSON().containerChains[paraId2000], - `Container chain ${paraId2000} should have 0 collators` - ).toBeUndefined(); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/services-payment/test_services_payment_rpc.ts b/test/suites/common-tanssi/services-payment/test_services_payment_rpc.ts deleted file mode 100644 index ad79cdf..0000000 --- a/test/suites/common-tanssi/services-payment/test_services_payment_rpc.ts +++ /dev/null @@ -1,25 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, customDevRpcRequest } from "@moonwall/cli"; - -describeSuite({ - id: "CT0609", - title: "Services payment RPC", - foundationMethods: "dev", - testCases: ({ it }) => { - it({ - id: "E01", - title: "Services payment RPC", - test: async function () { - try { - await customDevRpcRequest("tanssi_servicesPaymentBlockCost", []); - throw { message: "Should have returned an error" }; - } catch (e: any) { - expect(e.message.toString()).to.eq("No more params"); - } - - expect(await customDevRpcRequest("tanssi_servicesPaymentBlockCost", [1000])).eq(1000000); - expect(await customDevRpcRequest("tanssi_servicesPaymentCollatorAssignmentCost", [1000])).eq(100000000); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/stream-payment/test_stream_payment.ts b/test/suites/common-tanssi/stream-payment/test_stream_payment.ts deleted file mode 100644 index 3aec047..0000000 --- a/test/suites/common-tanssi/stream-payment/test_stream_payment.ts +++ /dev/null @@ -1,116 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "DT0501", - title: "Stream payment works", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Stream payment works", - test: async function () { - // 1st block - let aliceNonce = 0; - const txOpenStream = await polkadotJs.tx.streamPayment - .openStream( - bob.address, - { - timeUnit: "BlockNumber", - assetId: "Native", - rate: 2_000_000, - }, - 10_000_000 - ) - .signAsync(alice, { nonce: aliceNonce++ }); - await context.createBlock([txOpenStream]); - - const openStreamEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamOpened"; - }); - expect(openStreamEvents.length).to.be.equal(1); - - // Check opening storage hold - const openingHold = (await polkadotJs.query.balances.holds(alice.address)).find((h) => - h.id.value.eq("StreamOpened") - ); - expect(openingHold.amount.toBigInt()).eq(11_730_000_000_000n); - - // 2nd block - const txPerformPayment = await polkadotJs.tx.streamPayment - .performPayment(0) - .signAsync(alice, { nonce: aliceNonce++ }); - - const txRequestChange = await polkadotJs.tx.streamPayment - .requestChange( - 0, - { - Mandatory: { - deadline: 0, - }, - }, - { - timeUnit: "BlockNumber", - assetId: "Native", - rate: 1_000_000, - }, - { - Increase: 5_000, - } - ) - .signAsync(alice, { nonce: aliceNonce++ }); - - await context.createBlock([txPerformPayment, txRequestChange]); - - const performPaymentEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamPayment"; - }); - expect(performPaymentEvents.length).to.be.equal(1); - - const requestChangeEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamConfigChangeRequested"; - }); - expect(requestChangeEvents.length).to.be.equal(1); - - // 3rd block - const txAcceptChange = await polkadotJs.tx.streamPayment - .acceptRequestedChange(0, 1, null) - .signAsync(bob); - await context.createBlock([txAcceptChange]); - - const acceptChangeEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamConfigChanged"; - }); - expect(acceptChangeEvents.length).to.be.equal(1); - - // 4rd block - const txCloseStream = await polkadotJs.tx.streamPayment - .closeStream(0) - .signAsync(alice, { nonce: aliceNonce++ }); - - await context.createBlock([txCloseStream]); - - const closeStreamEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamClosed"; - }); - expect(closeStreamEvents.length).to.be.equal(1); - - // Check all holds have been released - const holds = await polkadotJs.query.balances.holds(alice.address); - expect(holds.length).toBe(0); - }, - }); - }, -}); diff --git a/test/suites/common-tanssi/stream-payment/test_stream_payment_rpc.ts b/test/suites/common-tanssi/stream-payment/test_stream_payment_rpc.ts deleted file mode 100644 index 1c9a8e6..0000000 --- a/test/suites/common-tanssi/stream-payment/test_stream_payment_rpc.ts +++ /dev/null @@ -1,180 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect, customDevRpcRequest } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; - -async function rpcStreamPaymentStatus(context, block, streamId, now) { - if (block == "latest") { - const blockNumber = (await context.polkadotJs().rpc.chain.getBlock()).block.header.number.toBigInt(); - - const blockHash = await context.polkadotJs().rpc.chain.getBlockHash(blockNumber); - - block = blockHash; - } - - return await customDevRpcRequest("tanssi_streamPaymentStatus", [block, streamId, now]); -} - -describeSuite({ - id: "DT0502", - title: "Stream payment RPC", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Stream payment RPC", - test: async function () { - try { - await rpcStreamPaymentStatus(context, "latest", 0, null); - throw { message: "Should have returned an error" }; - } catch (e: any) { - expect(e.message.toString()).to.eq("Failed to fetch stream payment status: Unknown stream id"); - } - - // 1st block - let aliceNonce = 0; - const txOpenStream = await polkadotJs.tx.streamPayment - .openStream( - bob.address, - { - timeUnit: "BlockNumber", - assetId: "Native", - rate: 100_000, - }, - 10_000_000 - ) - .signAsync(alice, { nonce: aliceNonce++ }); - let newBlock = await context.createBlock([txOpenStream]); - - const openStreamEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamOpened"; - }); - expect(openStreamEvents.length).to.be.equal(1); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 10_000_000, - stalled: false, - payment: 0, - }); - - // 2nd block: create an empty block to check status - newBlock = await context.createBlock(); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 9_900_000, - stalled: false, - payment: 100_000, - }); - - // 3nd block - const txPerformPayment = await polkadotJs.tx.streamPayment - .performPayment(0) - .signAsync(alice, { nonce: aliceNonce++ }); - - const txRequestChange = await polkadotJs.tx.streamPayment - .requestChange( - 0, - { - Mandatory: { - deadline: 2, // deadline in the past, which should make the stream stalled - }, - }, - { - timeUnit: "BlockNumber", - assetId: "Native", - rate: 50_000, - }, - { - Increase: 5_000, - } - ) - .signAsync(alice, { nonce: aliceNonce++ }); - - newBlock = await context.createBlock([txPerformPayment, txRequestChange]); - - const performPaymentEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamPayment"; - }); - expect(performPaymentEvents.length).to.be.equal(1); - - const requestChangeEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamConfigChangeRequested"; - }); - expect(requestChangeEvents.length).to.be.equal(1); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 9_800_000, - stalled: true, - payment: 0, - }); - - // 4th block: create an empty block to check status - newBlock = await context.createBlock(); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 9_800_000, - stalled: true, - payment: 0, - }); - - // produce empty block on session change, which cannot contain extrinsics - await context.createBlock(); - - // 6th block: accept change, resuming stream - const txAcceptChange = await polkadotJs.tx.streamPayment - .acceptRequestedChange(0, 1, null) - .signAsync(bob); - newBlock = await context.createBlock([txAcceptChange]); - - const acceptChangeEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamConfigChanged"; - }); - expect(acceptChangeEvents.length).to.be.equal(1); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 9_805_000, // old deposit + increase - stalled: false, - payment: 0, - }); - - // 7th block: create an empty block to check status - newBlock = await context.createBlock(); - - expect(await rpcStreamPaymentStatus(context, newBlock.block.hash, 0, null)).to.deep.equal({ - deposit_left: 9_755_000, - stalled: false, - payment: 50_000, - }); - - // 8th block: close the stream - const txCloseStream = await polkadotJs.tx.streamPayment - .closeStream(0) - .signAsync(alice, { nonce: aliceNonce++ }); - - await context.createBlock([txCloseStream]); - - const closeStreamEvents = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "StreamClosed"; - }); - expect(closeStreamEvents.length).to.be.equal(1); - - try { - await rpcStreamPaymentStatus(context, "latest", 0, null); - throw { message: "Should have returned an error" }; - } catch (e: any) { - expect(e.message.toString()).to.eq("Failed to fetch stream payment status: Unknown stream id"); - } - }, - }); - }, -}); diff --git a/test/suites/common-xcm/test-maintenance/test-maintenance-dmp-queue.ts b/test/suites/common-xcm/test-maintenance/test-maintenance-dmp-queue.ts deleted file mode 100644 index 90c3ff0..0000000 --- a/test/suites/common-xcm/test-maintenance/test-maintenance-dmp-queue.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { - RawXcmMessage, - XcmFragment, - descendParentOriginForAddress20, - descendParentOriginFromAddress32, - injectDmpMessageAndSeal, -} from "../../../util/xcm.ts"; - -describeSuite({ - id: "CX0101", - title: "Maintenance mode - DMP queue", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance: bigint; - let sendingAddress: `0x${string}`; - let alice: KeyringPair; - let chain: string; - let random: KeyringPair; - let xcmMessage: XcmFragment; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - - // Generate the proper Keyring for the current type of chain - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - const descendFunction = - chain == "frontier-template" ? descendParentOriginForAddress20 : descendParentOriginFromAddress32; - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - - // Generate the parent address constructed by DescendOrigin - const { originAddress, descendOriginAddress } = descendFunction(context); - sendingAddress = originAddress; - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // Send some tokens to the derivative address to cost Transact execution - const txSigned = polkadotJs.tx.balances.transferAllowDeath(descendOriginAddress, transferredBalance); - await context.createBlock(await txSigned.signAsync(alice, { nonce: aliceNonce++ }), { - allowFailures: false, - }); - const balanceSigned = (await polkadotJs.query.system.account(descendOriginAddress)).data.free.toBigInt(); - expect(balanceSigned).to.eq(transferredBalance); - - // Now let's start building the message - // Generate random receiver address - random = chain == "frontier-template" ? generateKeyringPair() : generateKeyringPair("sr25519"); - - // Get Pallet balances index - const metadata = await polkadotJs.rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - // The call will be a simple balance transfer to random address - const transferCall = polkadotJs.tx.balances.transferAllowDeath(random.address, transferredBalance / 10n); - const transferCallEncoded = transferCall?.method.toHex(); - - // Build the XCM message - xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 0, - interior: { - X1: { PalletInstance: balancesPalletIndex }, - }, - }, - fungible: transferredBalance / 4n, - }, - ], - descend_origin: sendingAddress, - }) - .descend_origin() - .withdraw_asset() - .buy_execution() - .push_any({ - Transact: { - originKind: "SovereignAccount", - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 32000, - }, - call: { - encoded: transferCallEncoded, - }, - }, - }) - .as_v3(); - }); - - it({ - id: "T01", - title: "Should queue DMP execution during maintenance mode", - test: async function () { - // Enter maintenance mode with sudo - const maintenanceTx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(maintenanceTx).signAsync(alice)]); - - // Ensure we are in maintenance mode - let maintenanceOn = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(maintenanceOn).to.be.true; - - // This XCM message coming by DMP should not be executed since we are in maintenance mode - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Make sure the random address has zero balance - const balance = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - expect(balance).to.eq(0n); - - // ---- Now let's disable maintenance mode ---- - - // Disable maintenance mode with sudo - const resumeTx = polkadotJs.tx.maintenanceMode.resumeNormalOperation(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(resumeTx).signAsync(alice)]); - - // Ensure we are NOT in maintenance mode - maintenanceOn = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(maintenanceOn).to.be.false; - - // Create a block in which the previous queued XCM message will execute - await context.createBlock(); - - // Make sure the random address has received the tokens - const balanceAfter = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - expect(balanceAfter).to.eq(transferredBalance / 10n); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/test-maintenance/test-maintenance-mode-xcm.ts b/test/suites/common-xcm/test-maintenance/test-maintenance-mode-xcm.ts deleted file mode 100644 index 795f660..0000000 --- a/test/suites/common-xcm/test-maintenance/test-maintenance-mode-xcm.ts +++ /dev/null @@ -1,146 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { initializeCustomCreateBlock } from "../../../util/block"; -import { MultiLocation } from "../../../util/xcm"; - -describeSuite({ - id: "CX0102", - title: "XCM in maintenance mode", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let chain: string; - - beforeAll(() => { - initializeCustomCreateBlock(context); - - polkadotJs = context.pjsApi; - chain = polkadotJs.consts.system.version.specName.toString(); - alice = context.keyring.alice; - }); - - it({ - id: "E01", - title: "polkadotXcm calls disabled in maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { Here: null }, - }; - - const dest = { - V3: destMultilocation, - }; - - const message = { - V3: [{ ClearOrigin: null }], - }; - - const polkadotXcmSend = context.polkadotJs().tx.polkadotXcm.send(dest, message); - - if (chain == "frontier-template") { - expect( - async () => await context.createBlock(polkadotXcmSend.signAsync(alice)) - ).rejects.toThrowError("1010: Invalid Transaction: Transaction call is not expected"); - } else { - const { result } = await context.createBlock([await polkadotXcmSend.signAsync(alice)]); - expect(result[0].successful).to.be.false; - expect(result[0].error.name).to.eq("CallFiltered"); - } - }, - }); - - it({ - id: "E02", - title: "polkadotXcm calls enabled with sudo in maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { Here: null }, - }; - - const dest = { - V3: destMultilocation, - }; - - const message = { - V3: [{ ClearOrigin: null }], - }; - - const polkadotXcmSend = context.polkadotJs().tx.polkadotXcm.send(dest, message); - - const { result } = await context.createBlock([ - await polkadotJs.tx.sudo.sudo(polkadotXcmSend).signAsync(alice), - ]); - - // Search for ExtrinsicSuccess event - const events = (await context.polkadotJs().query.system.events()).filter(({ event }) => - context.polkadotJs().events.system.ExtrinsicSuccess.is(event) - ); - expect(events.length).toBeGreaterThanOrEqual(1); - expect(result[0].successful).to.be.true; - expect(result[0].error).to.be.undefined; - }, - }); - - it({ - id: "E03", - title: "polkadotXcm calls allowed again after disabling maintenance mode", - test: async function () { - await context.createBlock(); - await context.createBlock(); - - const tx = polkadotJs.tx.maintenanceMode.resumeNormalOperation(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(tx).signAsync(alice)]); - - const enabled = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.false; - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { Here: null }, - }; - - const dest = { - V3: destMultilocation, - }; - - const message = { - V3: [{ ClearOrigin: null }], - }; - - const polkadotXcmSend = context.polkadotJs().tx.polkadotXcm.send(dest, message); - const { result } = await context.createBlock([await polkadotXcmSend.signAsync(alice)]); - - // Search for ExtrinsicSuccess event - const events = (await context.polkadotJs().query.system.events()).filter(({ event }) => - context.polkadotJs().events.system.ExtrinsicSuccess.is(event) - ); - expect(events.length).toBeGreaterThanOrEqual(1); - expect(result[0].successful).to.be.true; - expect(result[0].error).to.be.undefined; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/test-maintenance/test-maintenance-xcm-queue.ts b/test/suites/common-xcm/test-maintenance/test-maintenance-xcm-queue.ts deleted file mode 100644 index 3fcf74b..0000000 --- a/test/suites/common-xcm/test-maintenance/test-maintenance-xcm-queue.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { - RawXcmMessage, - XcmFragment, - descendSiblingOriginFromAddress20, - descendSiblingOriginFromAddress32, - injectHrmpMessageAndSeal, - sovereignAccountOfSiblingForAddress20, - sovereignAccountOfSiblingForAddress32, -} from "../../../util/xcm.ts"; - -describeSuite({ - id: "CX0104", - title: "Maintenance mode - XCM queue", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance: bigint; - let sendingAddress: `0x${string}`; - let alice: KeyringPair; - let chain: string; - let random: KeyringPair; - let xcmMessage: XcmFragment; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - - // Generate the proper Keyring for the current type of chain - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - - const descendFunction = - chain == "frontier-template" ? descendSiblingOriginFromAddress20 : descendSiblingOriginFromAddress32; - const sovereignFunction = - chain == "frontier-template" - ? sovereignAccountOfSiblingForAddress20 - : sovereignAccountOfSiblingForAddress32; - - // Generate the sibling sovereign and derivative accounts - const { originAddress, descendOriginAddress } = descendFunction(context); - const sovereign = sovereignFunction(context, 1); - sendingAddress = originAddress; - - // Transfer some tokens to sovereign and derivative accounts for execution costs - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - polkadotJs = context.polkadotJs(); - - const txSigned = polkadotJs.tx.balances.transferAllowDeath(descendOriginAddress, transferredBalance); - const txRoot = polkadotJs.tx.balances.transferAllowDeath(sovereign, transferredBalance); - - await context.createBlock(await txSigned.signAsync(alice, { nonce: aliceNonce++ }), { - allowFailures: false, - }); - await context.createBlock(await txRoot.signAsync(alice, { nonce: aliceNonce++ }), { allowFailures: false }); - const balanceSigned = (await polkadotJs.query.system.account(descendOriginAddress)).data.free.toBigInt(); - expect(balanceSigned).to.eq(transferredBalance); - const balanceRoot = (await polkadotJs.query.system.account(sovereign)).data.free.toBigInt(); - expect(balanceRoot).to.eq(transferredBalance); - - // Now let's start building the message - // Generate random receiver address - random = chain == "frontier-template" ? generateKeyringPair() : generateKeyringPair("sr25519"); - - // Get Pallet balances index - const metadata = await polkadotJs.rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const transferCall = polkadotJs.tx.balances.transferAllowDeath(random.address, transferredBalance / 10n); - const transferCallEncoded = transferCall?.method.toHex(); - - // Build the XCM message - xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 0, - interior: { - X1: { PalletInstance: balancesPalletIndex }, - }, - }, - fungible: transferredBalance / 4n, - }, - ], - descend_origin: sendingAddress, - }) - .descend_origin() - .withdraw_asset() - .buy_execution() - .push_any({ - Transact: { - originKind: "SovereignAccount", - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 32000, - }, - call: { - encoded: transferCallEncoded, - }, - }, - }) - .as_v3(); - }); - - it({ - id: "T01", - title: "Should queue XCM execution during maintenance mode (HRMP)", - test: async function () { - // Enter maintenance mode with sudo - const maintenanceTx = polkadotJs.tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(maintenanceTx).signAsync(alice)]); - - // Ensure we are in maintenance mode - let maintenanceOn = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(maintenanceOn).to.be.true; - - // This XCM message coming by HRMP should not be executed since we are in maintenance mode - await injectHrmpMessageAndSeal(context, 1, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Make sure the random address has zero balance - const balance = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - expect(balance).to.eq(0n); - - // ---- Now let's disable maintenance mode ---- - - // Disable maintenance mode with sudo - const resumeTx = polkadotJs.tx.maintenanceMode.resumeNormalOperation(); - await context.createBlock([await polkadotJs.tx.sudo.sudo(resumeTx).signAsync(alice)]); - - // Create a block in which the XCM message will be executed - // MessageQueue takes two blocks to resume execution - await context.createBlock(); - await context.createBlock(); - - // Ensure we are NOT in maintenance mode - maintenanceOn = (await polkadotJs.query.maintenanceMode.maintenanceMode()).toJSON(); - expect(maintenanceOn).to.be.false; - - // Make sure the random address has received the tokens - const balanceAfter = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - expect(balanceAfter).to.eq(transferredBalance / 10n); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception.ts deleted file mode 100644 index 57d445b..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION, RELAY_SOURCE_LOCATION_2 } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0101", - title: "Mock XCM - Succeeds receiving tokens DMP", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should succeed receiving tokens", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has ALITH's to DOT tokens - const alice_dot_balance = (await context.polkadotJs().query.foreignAssets.account(1, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_dot_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_dot_balance < transferredBalance).to.be.true; - }, - }); - - it({ - id: "T02", - title: "Should not succeed receiving tokens if asset rate is not defined", - test: async function () { - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION_2, - // id 2 - 2, - alice.address, - true, - 1 - ) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - // we change parents to 2 - multilocation: { - parents: 2, - interior: { Here: null }, - }, - fungible: 10000000000000n, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has not ALITH's DOT_2 tokens - const alice_dot_2_balance = await context.polkadotJs().query.foreignAssets.account(2, alice.address); - expect(alice_dot_2_balance.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix.ts deleted file mode 100644 index b806867..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0103", - title: "Mock XCM - downward transfer with always triggered appendix", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should make sure Alice receives 10 dot with appendix and without error", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - // Set an appendix to be executed after the XCM message is executed. No matter if errors - .with(function () { - return this.set_appendix_with([this.deposit_asset_v3]); - }) - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has Alice's DOT tokens - const alice_dot_balance = (await context.polkadotJs().query.foreignAssets.account(1, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_dot_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_dot_balance < transferredBalance).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix_2.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix_2.ts deleted file mode 100644 index f2e8707..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_appendix_2.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0103", - title: "Mock XCM - downward transfer with always triggered appendix", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should make sure Alice receives 10 dot with appendix and without error", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - // Set an appendix to be executed after the XCM message is executed. No matter if errors - .with(function () { - return this.set_appendix_with([this.deposit_asset_v3]); - }) - .trap() - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has Alice's DOT tokens - const alice_dot_balance = (await context.polkadotJs().query.foreignAssets.account(1, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_dot_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_dot_balance < transferredBalance).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler.ts deleted file mode 100644 index 063f385..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0104", - title: "Mock XCM - downward transfer with non-triggered error handler", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should make sure that Alice does not receive 10 dot without error", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .buy_execution() - - /// Buy execution does not error therefore error handler is not triggered - .with(function () { - return this.set_error_handler_with([this.deposit_asset_v3]); - }) - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has not Alice's tokens - const alice_dot_balance = await context.polkadotJs().query.foreignAssets.account(1, alice.address); - expect(alice_dot_balance.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler_2.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler_2.ts deleted file mode 100644 index 848e5ac..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_error_handler_2.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0105", - title: "Mock XCM - downward transfer with triggered error handler", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should make sure that Alith does receive 10 dot because there is error", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .buy_execution() - // Trap makes it error, therefore the handler kicks in - .with(function () { - return this.set_error_handler_with([this.deposit_asset_v3]); - }) - .trap() - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has Alice's DOT tokens - const alice_dot_balance = (await context.polkadotJs().query.foreignAssets.account(1, alice.address)) - .unwrap() - .balance.toBigInt(); - expect(alice_dot_balance > 0n).to.be.true; - // we should expect to have received less than the amount transferred - expect(alice_dot_balance < transferredBalance).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_teleport.ts b/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_teleport.ts deleted file mode 100644 index 1c6f883..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_dmp_token_reception_teleport.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectDmpMessageAndSeal } from "../../../util/xcm.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0107", - title: "Mock XCM - Succeeds receiving tokens DMP", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - RELAY_SOURCE_LOCATION, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should fail receiving tokens", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { Here: null }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .teleported_assets_received() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state does not have ALITH's DOT tokens - const alice_dot_balance = await context.polkadotJs().query.foreignAssets.account(1, alice.address); - expect(alice_dot_balance.isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception.ts b/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception.ts deleted file mode 100644 index da57729..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectHrmpMessageAndSeal } from "../../../util/xcm.ts"; -import { STATEMINT_LOCATION_EXAMPLE } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0102", - title: "Mock XCM - Succeeds receiving tokens through HRMP", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - STATEMINT_LOCATION_EXAMPLE, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this defines how much the asset costs with respect to the - // new asset - // in this case, asset*2=native - // that means that we will charge 0.5 of the native balance - 2000000000000000000n - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should succeed receiving tokens", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { - X3: [{ Parachain: 1000 }, { PalletInstance: 50 }, { GeneralIndex: 0n }], - }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - // Send an XCM and create block to execute it - await injectHrmpMessageAndSeal(context, 1000, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has Alice's tatemint tokens - const alice_statemint_balance = ( - await context.polkadotJs().query.foreignAssets.account(1, alice.address) - ) - .unwrap() - .balance.toBigInt(); - expect(alice_statemint_balance > 0n).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception_2.ts b/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception_2.ts deleted file mode 100644 index 84a25ea..0000000 --- a/test/suites/common-xcm/xcm-token-reception/test_hrmp_token_reception_2.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex, hexToBigInt } from "@polkadot/util"; - -import { RawXcmMessage, XcmFragment, injectHrmpMessageAndSeal } from "../../../util/xcm.ts"; -import { STATEMINT_LOCATION_EXAMPLE } from "../../../util/constants.ts"; - -describeSuite({ - id: "TX0106", - title: "Mock XCM - Succeeds receiving tokens through HRMP", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - // since in the future is likely that we are going to add this to containers, I leave it here - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - // We register the token - const txSigned = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.utility.batch([ - polkadotJs.tx.foreignAssetsCreator.createForeignAsset( - STATEMINT_LOCATION_EXAMPLE, - 1, - alice.address, - true, - 1 - ), - polkadotJs.tx.assetRate.create( - 1, - // this will make sure we charge a minimum a fee - hexToBigInt("0xffffffffffffffffffffffffffffffff") - ), - ]) - ); - - await context.createBlock(await txSigned.signAsync(alice), { - allowFailures: false, - }); - }); - - it({ - id: "T01", - title: "Should succeed receiving tokens with 1 fee if sufficeintly large rate", - test: async function () { - // Send an XCM and create block to execute it - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 1, - interior: { - X3: [{ Parachain: 1000 }, { PalletInstance: 50 }, { GeneralIndex: 0n }], - }, - }, - fungible: transferredBalance, - }, - ], - beneficiary: u8aToHex(alice.addressRaw), - }) - .reserve_asset_deposited() - .clear_origin() - .buy_execution() - .deposit_asset() - .as_v3(); - - // Send an XCM and create block to execute it - await injectHrmpMessageAndSeal(context, 1000, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - // Create a block in which the XCM will be executed - await context.createBlock(); - - // Make sure the state has Alice's tatemint tokens - const alice_statemint_balance = ( - await context.polkadotJs().query.foreignAssets.account(1, alice.address) - ) - .unwrap() - .balance.toBigInt(); - expect(alice_statemint_balance).to.eq(transferredBalance - 1n); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-mock-dmp-transact.ts b/test/suites/common-xcm/xcm/test-mock-dmp-transact.ts deleted file mode 100644 index bce529d..0000000 --- a/test/suites/common-xcm/xcm/test-mock-dmp-transact.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { - RawXcmMessage, - XcmFragment, - descendParentOriginForAddress20, - descendParentOriginFromAddress32, - injectDmpMessageAndSeal, -} from "../../../util/xcm.ts"; - -describeSuite({ - id: "CX0201", - title: "Mock XCM - Succeeds using sovereign accounts", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let sendingAddress; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - const descendFunction = - chain == "frontier-template" ? descendParentOriginForAddress20 : descendParentOriginFromAddress32; - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - const { originAddress, descendOriginAddress } = descendFunction(context); - - sendingAddress = originAddress; - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - const txSigned = polkadotJs.tx.balances.transferAllowDeath(descendOriginAddress, transferredBalance); - - await context.createBlock(await txSigned.signAsync(alice, { nonce: aliceNonce++ }), { - allowFailures: false, - }); - - const balanceSigned = (await polkadotJs.query.system.account(descendOriginAddress)).data.free.toBigInt(); - expect(balanceSigned).to.eq(transferredBalance); - }); - - it({ - id: "T01", - title: "Should succeed using sovereign account from signed origin", - test: async function () { - // Generate random receiver address - const random = chain == "frontier-template" ? generateKeyringPair() : generateKeyringPair("sr25519"); - // Get Pallet balances index - const metadata = await polkadotJs.rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const transferCall = polkadotJs.tx.balances.transferAllowDeath( - random.address, - transferredBalance / 10n - ); - const transferCallEncoded = transferCall?.method.toHex(); - - // We are going to test that we can receive a transact operation from parachain 1 - // using descendOrigin first - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 0, - interior: { - X1: { PalletInstance: balancesPalletIndex }, - }, - }, - fungible: transferredBalance / 4n, - }, - ], - descend_origin: sendingAddress, - }) - .descend_origin() - .withdraw_asset() - .buy_execution() - .push_any({ - Transact: { - originKind: "SovereignAccount", - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 32000, - }, - call: { - encoded: transferCallEncoded, - }, - }, - }) - .as_v3(); - - // Send an XCM and create block to execute it - await injectDmpMessageAndSeal(context, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - await context.createBlock(); - - // Make sure the state has ALITH's foreign parachain tokens - const testAccountBalance = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - - expect(testAccountBalance).to.eq(transferredBalance / 10n); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-mock-hrmp-transact.ts b/test/suites/common-xcm/xcm/test-mock-hrmp-transact.ts deleted file mode 100644 index 6ad2c19..0000000 --- a/test/suites/common-xcm/xcm/test-mock-hrmp-transact.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { - RawXcmMessage, - XcmFragment, - descendSiblingOriginFromAddress20, - descendSiblingOriginFromAddress32, - injectHrmpMessageAndSeal, - sovereignAccountOfSiblingForAddress20, - sovereignAccountOfSiblingForAddress32, -} from "../../../util/xcm.ts"; - -describeSuite({ - id: "CX0202", - title: "Mock XCM - Succeeds using sovereign accounts", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let transferredBalance; - let sendingAddress; - let alice: KeyringPair; - let chain; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - - const descendFunction = - chain == "frontier-template" ? descendSiblingOriginFromAddress20 : descendSiblingOriginFromAddress32; - const sovereignFunction = - chain == "frontier-template" - ? sovereignAccountOfSiblingForAddress20 - : sovereignAccountOfSiblingForAddress32; - - const { originAddress, descendOriginAddress } = descendFunction(context); - const sovereign = sovereignFunction(context, 1); - sendingAddress = originAddress; - - transferredBalance = context.isEthereumChain ? 10_000_000_000_000_000_000n : 10_000_000_000_000n; - - polkadotJs = context.polkadotJs(); - - const txSigned = polkadotJs.tx.balances.transferAllowDeath(descendOriginAddress, transferredBalance); - const txRoot = polkadotJs.tx.balances.transferAllowDeath(sovereign, transferredBalance); - - await context.createBlock(await txSigned.signAsync(alice, { nonce: aliceNonce++ }), { - allowFailures: false, - }); - await context.createBlock(await txRoot.signAsync(alice, { nonce: aliceNonce++ }), { allowFailures: false }); - const balanceSigned = (await polkadotJs.query.system.account(descendOriginAddress)).data.free.toBigInt(); - expect(balanceSigned).to.eq(transferredBalance); - const balanceRoot = (await polkadotJs.query.system.account(sovereign)).data.free.toBigInt(); - expect(balanceRoot).to.eq(transferredBalance); - }); - - it({ - id: "T01", - title: "Should succeed using sovereign account from signed origin", - test: async function () { - // Generate random receiver address - const random = chain == "frontier-template" ? generateKeyringPair() : generateKeyringPair("sr25519"); - - // Get Pallet balances index - const metadata = await polkadotJs.rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const transferCall = polkadotJs.tx.balances.transferAllowDeath( - random.address, - transferredBalance / 10n - ); - const transferCallEncoded = transferCall?.method.toHex(); - - // We are going to test that we can receive a transact operation from parachain 1 - // using descendOrigin first - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 0, - interior: { - X1: { PalletInstance: balancesPalletIndex }, - }, - }, - fungible: transferredBalance / 4n, - }, - ], - descend_origin: sendingAddress, - }) - .descend_origin() - .withdraw_asset() - .buy_execution() - .push_any({ - Transact: { - originKind: "SovereignAccount", - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 32000, - }, - call: { - encoded: transferCallEncoded, - }, - }, - }) - .as_v3(); - - // Send an XCM and create block to execute it - await injectHrmpMessageAndSeal(context, 1, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - await context.createBlock(); - - // Make sure the state has ALITH's foreign parachain tokens - const testAccountBalance = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - - expect(testAccountBalance).to.eq(transferredBalance / 10n); - }, - }); - - it({ - id: "T02", - title: "Should succeed using sovereign account from root origin", - test: async function () { - // Generate random receiver address - const random = chain == "frontier-template" ? generateKeyringPair() : generateKeyringPair("sr25519"); - - // Get Pallet balances index - const metadata = await polkadotJs.rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const transferCall = polkadotJs.tx.balances.transferAllowDeath( - random.address, - transferredBalance / 10n - ); - const transferCallEncoded = transferCall?.method.toHex(); - // We are going to test that we can receive a transact operation from parachain 1 - - // using descendOrigin first - const xcmMessage = new XcmFragment({ - assets: [ - { - multilocation: { - parents: 0, - interior: { - X1: { PalletInstance: balancesPalletIndex }, - }, - }, - fungible: transferredBalance / 4n, - }, - ], - }) - .withdraw_asset() - .buy_execution() - .push_any({ - Transact: { - originKind: "SovereignAccount", - requireWeightAtMost: { - refTime: 1000000000, - proofSize: 32000, - }, - call: { - encoded: transferCallEncoded, - }, - }, - }) - .as_v3(); - - // Send an XCM and create block to execute it - await injectHrmpMessageAndSeal(context, 1, { - type: "XcmVersionedXcm", - payload: xcmMessage, - } as RawXcmMessage); - - await context.createBlock(); - - // Make sure the state has ALITH's foreign parachain tokens - const testAccountBalance = (await polkadotJs.query.system.account(random.address)).data.free.toBigInt(); - - expect(testAccountBalance).to.eq(transferredBalance / 10n); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-reserve-transfer-horizontal.ts b/test/suites/common-xcm/xcm/test-reserve-transfer-horizontal.ts deleted file mode 100644 index d634dd3..0000000 --- a/test/suites/common-xcm/xcm/test-reserve-transfer-horizontal.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { - MultiLocation, - extractPaidDeliveryFees, - getLastSentHrmpMessageFee, - mockHrmpChannelExistanceTx, -} from "../../../util/xcm"; -import { ApiPromise, Keyring } from "@polkadot/api"; - -describeSuite({ - id: "CX0206", - title: "XCM - Succeeds sending XCM reserve transfer horizontal", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let baseDelivery: bigint; - let chain; - const destinationPara = 3000; - const txByteFee = 1n; - const randomReceiver = "0x1111111111111111111111111111111111111111111111111111111111111111"; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - baseDelivery = chain == "frontier-template" ? 100_000_000_000_000n : 100_000_000n; - }); - - it({ - id: "T01", - title: "Should succeed sending a reserve transfer horizontal", - test: async function () { - // We need to first mock the existence of the channel - const mockHrmp3000Tx = polkadotJs.tx.sudo.sudo( - mockHrmpChannelExistanceTx(context, destinationPara, 1000, 102400, 102400) - ); - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - - // Get pallet indices - const metadata = await context.polkadotJs().rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { - X1: { - Parachain: destinationPara, - }, - }, - }; - - const beneficiary: MultiLocation = { - parents: 0, - interior: { - X1: { - AccountId32: { - network: null, - id: randomReceiver, - }, - }, - }, - }; - - const versionedBeneficiary = { - V3: beneficiary, - }; - - const assets = [ - { - id: { - Concrete: { - parents: 0, - interior: { - X1: { PalletInstance: Number(balancesPalletIndex) }, - }, - }, - }, - fun: { - Fungible: 1_000_000_000_000_000n, - }, - }, - ]; - const versionedAssets = { - V3: assets, - }; - const dest = { - V3: destMultilocation, - }; - const tx = polkadotJs.tx.polkadotXcm.transferAssets( - dest, - versionedBeneficiary, - versionedAssets, - 0, - "Unlimited" - ); - - await context.createBlock( - [ - await mockHrmp3000Tx.signAsync(alice, { nonce: aliceNonce++ }), - await tx.signAsync(alice, { nonce: aliceNonce++ }), - ], - { allowFailures: false } - ); - - const fee = await getLastSentHrmpMessageFee(context, destinationPara, baseDelivery, txByteFee); - const paid = await extractPaidDeliveryFees(context); - expect(paid).to.be.equal(fee); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-reserve-transfer-upward.ts b/test/suites/common-xcm/xcm/test-reserve-transfer-upward.ts deleted file mode 100644 index 36c383a..0000000 --- a/test/suites/common-xcm/xcm/test-reserve-transfer-upward.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { MultiLocation, extractPaidDeliveryFees, getLastSentUmpMessageFee } from "../../../util/xcm"; -import { ApiPromise, Keyring } from "@polkadot/api"; - -describeSuite({ - id: "CX0206", - title: "XCM - Succeeds sending XCM reserve transfer", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let baseDelivery: bigint; - let chain; - const txByteFee = 1n; - const randomReceiver = "0x1111111111111111111111111111111111111111111111111111111111111111"; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - baseDelivery = chain == "frontier-template" ? 100_000_000_000_000n : 100_000_000n; - }); - - it({ - id: "T01", - title: "Should succeed sending a reserve transfer upward", - test: async function () { - // Get pallet indices - const metadata = await context.polkadotJs().rpc.state.getMetadata(); - const balancesPalletIndex = metadata.asLatest.pallets - .find(({ name }) => name.toString() == "Balances")! - .index.toNumber(); - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { Here: null }, - }; - - const beneficiary: MultiLocation = { - parents: 0, - interior: { - X1: { - AccountId32: { - network: null, - id: randomReceiver, - }, - }, - }, - }; - - const versionedBeneficiary = { - V3: beneficiary, - }; - - const assets = [ - { - id: { - Concrete: { - parents: 0, - interior: { - X1: { PalletInstance: Number(balancesPalletIndex) }, - }, - }, - }, - fun: { - Fungible: 1_000_000_000_000_000n, - }, - }, - ]; - const versionedAssets = { - V3: assets, - }; - const dest = { - V3: destMultilocation, - }; - const tx = polkadotJs.tx.polkadotXcm.transferAssets( - dest, - versionedBeneficiary, - versionedAssets, - 0, - "Unlimited" - ); - - await context.createBlock(await tx.signAsync(alice), { allowFailures: false }); - - const fee = await getLastSentUmpMessageFee(context, baseDelivery, txByteFee); - const paid = await extractPaidDeliveryFees(context); - expect(paid).to.be.equal(fee); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-xcm-send-horizontal.ts b/test/suites/common-xcm/xcm/test-xcm-send-horizontal.ts deleted file mode 100644 index 2afd6a6..0000000 --- a/test/suites/common-xcm/xcm/test-xcm-send-horizontal.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { - MultiLocation, - extractPaidDeliveryFees, - getLastSentHrmpMessageFee, - XcmFragment, - mockHrmpChannelExistanceTx, -} from "../../../util/xcm"; -import { ApiPromise, Keyring } from "@polkadot/api"; - -describeSuite({ - id: "CX0204", - title: "XCM - Succeeds sending XCM", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let baseDelivery: bigint; - let chain; - const destinationPara = 3000; - const txByteFee = 1n; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - baseDelivery = chain == "frontier-template" ? 100_000_000_000_000n : 100_000_000n; - }); - - it({ - id: "T01", - title: "Should succeed sending a XCM horizontal", - test: async function () { - // We need to first mock the existence of the channel - const mockHrmp3000Tx = polkadotJs.tx.sudo.sudo( - mockHrmpChannelExistanceTx(context, destinationPara, 1000, 102400, 102400) - ); - let aliceNonce = (await polkadotJs.query.system.account(alice.address)).nonce.toNumber(); - - const xcmMessage = new XcmFragment({ - assets: [], - }) - .clear_origin() - .as_v3(); - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { - X1: { - Parachain: destinationPara, - }, - }, - }; - - const dest = { - V3: destMultilocation, - }; - const tx = polkadotJs.tx.polkadotXcm.send(dest, xcmMessage); - - await context.createBlock( - [ - await mockHrmp3000Tx.signAsync(alice, { nonce: aliceNonce++ }), - await tx.signAsync(alice, { nonce: aliceNonce++ }), - ], - { allowFailures: true } - ); - - const fee = await getLastSentHrmpMessageFee(context, destinationPara, baseDelivery, txByteFee); - const paid = await extractPaidDeliveryFees(context); - expect(paid).to.be.equal(fee); - }, - }); - }, -}); diff --git a/test/suites/common-xcm/xcm/test-xcm-send-upward.ts b/test/suites/common-xcm/xcm/test-xcm-send-upward.ts deleted file mode 100644 index 55dd391..0000000 --- a/test/suites/common-xcm/xcm/test-xcm-send-upward.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair, alith } from "@moonwall/util"; -import { MultiLocation, extractPaidDeliveryFees, getLastSentUmpMessageFee, XcmFragment } from "../../../util/xcm"; -import { ApiPromise, Keyring } from "@polkadot/api"; - -describeSuite({ - id: "CX0203", - title: "XCM - Succeeds sending XCM", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let baseDelivery: bigint; - let chain; - const txByteFee = 1n; - - beforeAll(async function () { - polkadotJs = context.polkadotJs(); - chain = polkadotJs.consts.system.version.specName.toString(); - alice = - chain == "frontier-template" - ? alith - : new Keyring({ type: "sr25519" }).addFromUri("//Alice", { - name: "Alice default", - }); - baseDelivery = chain == "frontier-template" ? 100_000_000_000_000n : 100_000_000n; - }); - - it({ - id: "T01", - title: "Should succeed sending a XCM upward", - test: async function () { - const xcmMessage = new XcmFragment({ - assets: [], - }) - .clear_origin() - .as_v3(); - - const destMultilocation: MultiLocation = { - parents: 1, - interior: { Here: null }, - }; - - const dest = { - V3: destMultilocation, - }; - const txRoot = polkadotJs.tx.polkadotXcm.send(dest, xcmMessage); - - await context.createBlock(await txRoot.signAsync(alice), { allowFailures: false }); - - const fee = await getLastSentUmpMessageFee(context, baseDelivery, txByteFee); - const paid = await extractPaidDeliveryFees(context); - expect(paid).to.be.equal(fee); - }, - }); - }, -}); diff --git a/test/suites/dancebox-specs/test-block-creation.ts b/test/suites/dancebox-specs/test-block-creation.ts deleted file mode 100644 index b2245a1..0000000 --- a/test/suites/dancebox-specs/test-block-creation.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; - -describeSuite({ - id: "D01", - title: "Dev test suite", - foundationMethods: "dev", - testCases: ({ it, context, log }) => { - it({ - id: "E01", - title: "Checking that launched node can create blocks", - test: async function () { - const block = (await context.pjsApi.rpc.chain.getBlock()).block.header.number.toNumber(); - await context.createBlock(); - - const block2 = (await context.pjsApi.rpc.chain.getBlock()).block.header.number.toNumber(); - log(`Original block #${block}, new block #${block2}`); - expect(block2).to.be.greaterThan(block); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-balance/test-balance-existential.ts b/test/suites/dev-frontier-template/test-balance/test-balance-existential.ts deleted file mode 100644 index 50a6d71..0000000 --- a/test/suites/dev-frontier-template/test-balance/test-balance-existential.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { TransactionTypes, beforeEach, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, MIN_GAS_PRICE, createRawTransfer } from "@moonwall/util"; -import { PrivateKeyAccount } from "viem"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; - -describeSuite({ - id: "DF0101", - title: "Existential Deposit disabled", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let randomAccount: PrivateKeyAccount; - let privateKey: `0x${string}`; - - beforeEach(async function () { - privateKey = generatePrivateKey(); - randomAccount = privateKeyToAccount(privateKey); - const { result } = await context.createBlock( - context.polkadotJs().tx.balances.transferAllowDeath(randomAccount.address, 10_000_000_000_000_000_000n) - ); - expect(result!.successful, result!.error?.name).to.be.true; - }); - - for (const txnType of TransactionTypes) { - it({ - id: `T0${TransactionTypes.indexOf(txnType) + 1}`, - title: `full ${txnType} transfer should not reap on 0 account balance`, - test: async function () { - const gasPrice = (await context.polkadotJs().rpc.eth.gasPrice()).toBigInt(); - const raw = await createRawTransfer( - context, - ALITH_ADDRESS, - 10_000_000_000_000_000_000n - 21000n * gasPrice, - { - privateKey, - type: txnType, - gasPrice: gasPrice, - gas: 21000n, - maxFeePerGas: gasPrice, - } - ); - const { result } = await context.createBlock(raw); - - expect(result!.successful, result!.error?.name).toBe(true); - - expect(await context.viem("public").getBalance({ address: randomAccount.address })).toBe(0n); - }, - }); - } - - it({ - id: "T04", - title: "should not reap on tiny balance", - test: async function () { - const randomAccountBalance = await context - .viem("public") - .getBalance({ address: randomAccount.address }); - const rawTxn = await context.createTxn!({ - to: BALTATHAR_ADDRESS, - privateKey, - txnType: "legacy", - value: randomAccountBalance - 1n - 21000n * MIN_GAS_PRICE, - gasLimit: 21000n, - gasPrice: MIN_GAS_PRICE, - }); - - await context.createBlock(rawTxn); - expect(await context.viem("public").getBalance({ address: randomAccount.address })).toBe(1n); - expect(await context.viem("public").getTransactionCount({ address: randomAccount.address })).toBe(1); - }, - }); - - it({ - id: "T05", - title: "runtime constant should be set to zero", - test: async function () { - const existentialDeposit = context.polkadotJs().consts.balances.existentialDeposit.toBigInt(); - expect(existentialDeposit).toBe(0n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-asset-address/test-eth-asset-address-creation.ts b/test/suites/dev-frontier-template/test-eth-asset-address/test-eth-asset-address-creation.ts deleted file mode 100644 index 083a814..0000000 --- a/test/suites/dev-frontier-template/test-eth-asset-address/test-eth-asset-address-creation.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { expect, describeSuite } from "@moonwall/cli"; -import { STATEMINT_LOCATION_EXAMPLE } from "../../../util/constants.ts"; -import { alith } from "@moonwall/util"; - -describeSuite({ - id: "DF0201", - title: "Ethereum asset dummy precompile address creation", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "dummy precompile address is created when creating the asset and removed when destroyed", - test: async function () { - const assetId = 5; - const assetIdAddress = new Uint8Array([ - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 5, - ]); - const revertBytecode = "0x60006000fd"; - const addressInHex = "0x" + Buffer.from(assetIdAddress).toString("hex"); - - await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo( - context - .polkadotJs() - .tx.foreignAssetsCreator.createForeignAsset( - STATEMINT_LOCATION_EXAMPLE, - assetId, - alith.address, - true, - 1 - ) - ) - ); - - // After the foreign asset creation, the address should contain revert byte code. - expect(await context.web3().eth.getCode(addressInHex)).to.equal(revertBytecode); - - await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.foreignAssetsCreator.destroyForeignAsset(assetId)) - ); - - // After the foreign asset destruction, the revert bytecode from that address should be removed. - expect(await context.web3().eth.getCode(addressInHex)).to.equal("0x"); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-block/test-eth-block-pending.ts b/test/suites/dev-frontier-template/test-eth-block/test-eth-block-pending.ts deleted file mode 100644 index 6e77182..0000000 --- a/test/suites/dev-frontier-template/test-eth-block/test-eth-block-pending.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { describeSuite, expect, fetchCompiledContract } from "@moonwall/cli"; -import { ALITH_ADDRESS, ALITH_PRIVATE_KEY, customWeb3Request, generateKeyringPair } from "@moonwall/util"; - -describeSuite({ - id: "DF0301", - title: "Ethereum Block - Pending", - foundationMethods: "dev", - testCases: ({ context, it }) => { - const TEST_ACCOUNT = "0x1111111111111111111111111111111111111111"; - - it({ - id: "T01", - title: "should return pending block", - test: async function () { - let nonce = 0; - const sendTransaction = async () => { - const gasPrice = (await context.polkadotJs().rpc.eth.gasPrice()).toBigInt(); - const tx = await context.web3().eth.accounts.signTransaction( - { - from: ALITH_ADDRESS, - to: TEST_ACCOUNT, - value: "0x200", // Must be higher than ExistentialDeposit - gasPrice: gasPrice, - gas: "0x100000", - nonce: nonce, - }, - ALITH_PRIVATE_KEY - ); - nonce = nonce + 1; - return (await customWeb3Request(context.web3(), "eth_sendRawTransaction", [tx.rawTransaction])) - .result; - }; - - // block 1 send 5 transactions - const expectedXtsNumber = 5; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const _ of Array(expectedXtsNumber)) { - await sendTransaction(); - } - - // test still invalid future transactions can be safely applied (they are applied, just not overlayed) - nonce = nonce + 100; - await sendTransaction(); - - // do not seal, get pendign block - let pending_transactions = []; - { - const pending = ( - await customWeb3Request(context.web3(), "eth_getBlockByNumber", ["pending", false]) - ).result; - expect(pending.hash).to.be.null; - expect(pending.miner).to.be.null; - expect(pending.nonce).to.be.null; - expect(pending.totalDifficulty).to.be.null; - pending_transactions = pending.transactions; - expect(pending_transactions.length).to.be.eq(expectedXtsNumber); - } - - // seal and compare latest blocks transactions with the previously pending - await context.createBlock(); - const latest_block = await context.web3().eth.getBlock("latest", false); - expect(pending_transactions).to.be.deep.eq(latest_block.transactions); - }, - }); - - it({ - id: "T02", - title: "should be able to estimate gas with pending block with transfers", - test: async function () { - const randomAccount = generateKeyringPair(); - const randomAddress = randomAccount.address as `0x${string}`; - const estimatedGas = await context.viem().estimateGas({ - account: ALITH_ADDRESS, - value: 10_000_000_000_000_000_000n, - to: randomAddress, - blockTag: "pending", - }); - expect(estimatedGas, "Estimated bal transfer incorrect").toBe(21000n); - }, - }); - - it({ - id: "T03", - title: "should be able to estimate gas with pending block with contract creators", - test: async function () { - const { bytecode } = fetchCompiledContract("MultiplyBy7"); - expect( - await context.viem().estimateGas({ - account: ALITH_ADDRESS, - data: bytecode, - blockTag: "pending", - }) - ).to.toBeGreaterThan(21000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-fee/test-eth-fee-history.ts b/test/suites/dev-frontier-template/test-eth-fee/test-eth-fee-history.ts deleted file mode 100644 index be35973..0000000 --- a/test/suites/dev-frontier-template/test-eth-fee/test-eth-fee-history.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, alith } from "@moonwall/util"; -import { hexToNumber, numberToHex } from "@polkadot/util"; -import { parseGwei } from "viem"; -import { customWeb3Request } from "@moonwall/util"; -import { getCompiled } from "../../../util/ethereum-contracts"; - -// We use ethers library in this test as apparently web3js's types are not fully EIP-1559 -// compliant yet. -describeSuite({ - id: "DF0401", - title: "Fee History", - foundationMethods: "dev", - testCases: ({ context, it }) => { - interface FeeHistory { - oldestBlock: string; - baseFeePerGas: string[]; - gasUsedRatio: number[]; - reward: string[][]; - } - - async function createBlocks( - block_count: number, - reward_percentiles: number[], - priority_fees: number[], - max_fee_per_gas: string - ) { - let nonce = await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }); - const contractData = getCompiled("MultiplyBy7"); - for (let b = 0; b < block_count; b++) { - for (let p = 0; p < priority_fees.length; p++) { - await context.ethers().sendTransaction({ - from: alith.address, - data: contractData.byteCode, - value: "0x00", - maxFeePerGas: max_fee_per_gas, - maxPriorityFeePerGas: numberToHex(priority_fees[p]), - accessList: [], - nonce: nonce, - gasLimit: "0x100000", - chainId: 1281, - }); - nonce++; - } - await context.createBlock(); - } - } - - function get_percentile(percentile: number, array: number[]) { - array.sort(function (a, b) { - return a - b; - }); - const index = (percentile / 100) * array.length - 1; - if (Math.floor(index) == index) { - return array[index]; - } else { - return Math.ceil((array[Math.floor(index)] + array[Math.ceil(index)]) / 2); - } - } - - it({ - id: "T01", - title: "result length should match spec", - timeout: 30000, - test: async function () { - const block_count = 2; - const reward_percentiles = [20, 50, 70]; - const priority_fees = [1, 2, 3]; - const startingBlock = await context.viem("public").getBlockNumber(); - - const feeHistory = new Promise((resolve) => { - const unwatch = context.viem("public").watchBlocks({ - onBlock: async (block) => { - if (Number(block.number! - startingBlock) == block_count) { - const result = (await customWeb3Request(context.web3(), "eth_feeHistory", [ - "0x2", - "latest", - reward_percentiles, - ])) as FeeHistory; - unwatch(); - resolve(result); - } - }, - }); - }); - - await createBlocks(block_count, reward_percentiles, priority_fees, parseGwei("10").toString()); - - const feeResults = (await feeHistory).result; - expect( - feeResults.baseFeePerGas.length, - "baseFeePerGas should always the requested block range + 1 (the next derived base fee)" - ).toBe(block_count + 1); - expect( - feeResults.reward.length, - "should return two-dimensional reward list for the requested block range" - ).to.be.eq(block_count); - - const failures = feeResults.reward.filter((item) => { - item.length !== reward_percentiles.length; - }); - expect( - failures.length, - "each block has a reward list which's size is the requested percentile list" - ).toBe(0); - }, - }); - - it({ - id: "T02", - title: "should calculate percentiles", - timeout: 60000, - test: async function () { - const max_fee_per_gas = parseGwei("10").toString(); - const block_count = 11; - const reward_percentiles = [20, 50, 70, 85, 100]; - const priority_fees = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; - const startingBlock = await context.viem("public").getBlockNumber(); - - const feeHistory = new Promise((resolve) => { - const unwatch = context.viem("public").watchBlocks({ - onBlock: async (block) => { - if (Number(block.number! - startingBlock) == block_count) { - const result = (await customWeb3Request(context.web3(), "eth_feeHistory", [ - "0xA", - "latest", - reward_percentiles, - ])) as FeeHistory; - - unwatch(); - resolve(result); - } - }, - }); - }); - - await createBlocks(block_count, reward_percentiles, priority_fees, max_fee_per_gas); - - const feeResults = (await feeHistory).result; - const localRewards = reward_percentiles - .map((percentile) => get_percentile(percentile, priority_fees)) - .map((reward) => numberToHex(reward)); - // We only test if BaseFee update is enabled. - // - // If BaseFee is a constant 1GWEI, that means that there is no effective reward using - // the specs formula MIN(tx.maxPriorityFeePerGas, tx.maxFeePerGas-block.baseFee). - // - // In other words, for this tip oracle there would be no need to provide a priority fee - // when the block fullness is considered ideal in an EIP-1559 chain. - const failures = feeResults.reward.filter( - (item, index) => - hexToNumber(max_fee_per_gas) - hexToNumber(feeResults.baseFeePerGas[index]) > 0 && - (item.length !== localRewards.length || - !item.every((val, idx) => BigInt(val) === BigInt(localRewards[idx]))) - ); - - expect(failures.length, "each block should have rewards matching the requested percentile list").toBe( - 0 - ); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-fee/test-eth-paysFee.ts b/test/suites/dev-frontier-template/test-eth-fee/test-eth-paysFee.ts deleted file mode 100644 index fa7655b..0000000 --- a/test/suites/dev-frontier-template/test-eth-fee/test-eth-paysFee.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { describeSuite, extractInfo, expect } from "@moonwall/cli"; -import { BALTATHAR_ADDRESS, GLMR, createRawTransfer } from "@moonwall/util"; - -// We use ethers library in this test as apparently web3js's types are not fully EIP-1559 -// compliant yet. -describeSuite({ - id: "DF0302", - title: "Ethereum - PaysFee", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: `T01`, - title: `should be false for successful ethereum transactions`, - test: async function () { - const { result } = await context.createBlock(await createRawTransfer(context, BALTATHAR_ADDRESS, GLMR)); - const info = extractInfo(result!.events)!; - expect(info).to.not.be.empty; - expect(info.paysFee.isYes, "Transaction should be marked as paysFees == no").to.be.false; - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-discard.ts b/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-discard.ts deleted file mode 100644 index 4d8f779..0000000 --- a/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-discard.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; -import { customWeb3Request } from "@moonwall/util"; - -describeSuite({ - id: "DF0501", - title: "Transaction Cost discards", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should take transaction cost into account and not submit it to the pool", - test: async function () { - // This is a contract deployment signed by Alith but that doesn't have a high enough - // gaslimit. Since the standard helpers reject such transactions, we need to use - // the customDevRpcRequest helper to send it directly to the node. - - const tx = await customWeb3Request(context.web3(), "eth_sendRawTransaction", [ - "0xf9011b80843b9aca008252088080b8c960806040526000805534801561001457600080fd5b5060005b60648\ - 1101561003557806000819055508080600101915050610018565b506085806100446000396000f3fe608060405\ - 2348015600f57600080fd5b506004361060285760003560e01c80631572821714602d575b600080fd5b6033604\ - 9565b6040518082815260200191505060405180910390f35b6000548156fea264697066735822122015105f2e5\ - f98d0c6e61fe09f704e2a86dd1cbf55424720229297a0fff65fe04064736f6c63430007000033820a26a08ac98\ - ea04dec8017ebddd1e87cc108d1df1ef1bf69ba35606efad4df2dfdbae2a07ac9edffaa0fd7c91fa5688b5e36a\ - 1944944bca22b8ff367e4094be21f7d85a3", - ]); - const msg = "intrinsic gas too low"; - expect(tx.error).to.include({ - message: msg, - }); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-resubmit.ts b/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-resubmit.ts deleted file mode 100644 index 15f4b84..0000000 --- a/test/suites/dev-frontier-template/test-eth-pool/test-eth-pool-resubmit.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { beforeEach, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, createRawTransfer, sendRawTransaction } from "@moonwall/util"; -import { parseGwei } from "viem"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; - -describeSuite({ - id: "DF0502", - title: "Resubmit transations", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let randomAddress: `0x${string}`; - let currentNonce: number; - - beforeEach(async function () { - randomAddress = privateKeyToAccount(generatePrivateKey()).address; - currentNonce = await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }); - }); - - it({ - id: "T01", - title: "should allow resubmitting with higher gas", - test: async function () { - await context.createBlock([ - await createRawTransfer(context, randomAddress, 1, { - nonce: currentNonce, - maxFeePerGas: parseGwei("10"), - }), - await createRawTransfer(context, randomAddress, 2, { - nonce: currentNonce, - maxFeePerGas: parseGwei("20"), - maxPriorityFeePerGas: parseGwei("10"), - }), - ]); - expect(await context.viem("public").getBalance({ address: randomAddress })).to.equal(2n); - }, - }); - - it({ - id: "T02", - title: "should ignore resubmitting with lower gas", - test: async function () { - await context.createBlock([ - await createRawTransfer(context, randomAddress, 1, { - nonce: currentNonce, - maxFeePerGas: parseGwei("20"), - maxPriorityFeePerGas: parseGwei("10"), - }), - await createRawTransfer(context, randomAddress, 2, { - nonce: currentNonce, - maxFeePerGas: parseGwei("10"), - }), - ]); - expect(await context.viem("public").getBalance({ address: randomAddress })).to.equal(1n); - }, - }); - - it({ - id: "T03", - title: "should allow cancelling transaction", - test: async function () { - // gas price should trump limit - await context.createBlock([ - await createRawTransfer(context, randomAddress, 1, { - nonce: currentNonce, - maxFeePerGas: parseGwei("10"), - gas: 1048575n, - }), - await createRawTransfer(context, randomAddress, 2, { - nonce: currentNonce, - maxFeePerGas: parseGwei("20"), - maxPriorityFeePerGas: parseGwei("10"), - gas: 65536n, - }), - ]); - - expect(await context.viem("public").getBalance({ address: randomAddress })).to.equal(2n); - }, - }); - - it({ - id: "T04", - title: "should pick highest gas price from many transactions", - test: async function () { - await sendRawTransaction( - context, - await createRawTransfer(context, randomAddress, 2, { - nonce: currentNonce, - maxFeePerGas: parseGwei("100"), - maxPriorityFeePerGas: parseGwei("100"), - }) - ); - - const testParameters = [ - parseGwei("2"), - parseGwei("5"), - parseGwei("10"), - parseGwei("11"), - parseGwei("20"), - ]; - const txns: string[] = await Promise.all( - testParameters.map( - async (gasPrice) => - await createRawTransfer(context, randomAddress, 1, { - nonce: currentNonce, - maxFeePerGas: gasPrice, - maxPriorityFeePerGas: gasPrice, - }) - ) - ); - - await context.createBlock(txns); - - expect(await context.viem("public").getBalance({ address: randomAddress })).to.equal(2n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-constants.ts b/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-constants.ts deleted file mode 100644 index 6982388..0000000 --- a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-constants.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; -import { customWeb3Request } from "@moonwall/util"; - -describeSuite({ - id: "DF0601", - title: "RPC Constants", - foundationMethods: "dev", - testCases: ({ it, context }) => { - it({ - id: "T01", - title: "should have 0 hashrate", - test: async function () { - expect(BigInt((await customWeb3Request(context.web3(), "eth_hashrate", [])).result)).toBe(0n); - }, - }); - - it({ - id: "T02", - title: "should have chainId 1281", - test: async function () { - expect(BigInt((await customWeb3Request(context.web3(), "eth_chainId", [])).result)).toBe(1281n); - }, - }); - - it({ - id: "T03", - title: "should have no accounts", - test: async function () { - expect((await customWeb3Request(context.web3(), "eth_accounts", [])).result).toStrictEqual([]); - }, - }); - - it({ - id: "T04", - title: "block author should be 0x0000000000000000000000000000000000000000", - test: async function () { - expect((await customWeb3Request(context.web3(), "eth_coinbase", [])).result).toBe( - "0x0000000000000000000000000000000000000000" - ); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-index.ts b/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-index.ts deleted file mode 100644 index e5d6953..0000000 --- a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-index.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { describeSuite, beforeAll, expect } from "@moonwall/cli"; -import { BALTATHAR_ADDRESS, createRawTransfer } from "@moonwall/util"; - -describeSuite({ - id: "DF0602", - title: "Transaction Index", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async () => { - await context.createBlock(createRawTransfer(context, BALTATHAR_ADDRESS, 0)); - }); - - it({ - id: "T01", - title: "should get transaction by index", - test: async function () { - const block = 1n; - const index = 0; - const result = await context.viem("public").getTransaction({ blockNumber: block, index }); - - expect(result.transactionIndex).to.equal(index); - }, - }); - it({ - id: "T02", - title: "should return out of bounds message", - test: async function () { - const block = 0n; - const index = 0; - - expect( - async () => await context.viem("public").getTransaction({ blockNumber: block, index }) - ).rejects.toThrowError(`${index} is out of bounds`); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-log-filtering.ts b/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-log-filtering.ts deleted file mode 100644 index 01235c6..0000000 --- a/test/suites/dev-frontier-template/test-eth-rpc/test-eth-rpc-log-filtering.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { describeSuite, expect, beforeAll, deployCreateCompiledContract } from "@moonwall/cli"; -import { TransactionReceipt } from "viem"; -import { customWeb3Request } from "@moonwall/util"; - -describeSuite({ - id: "DF0603", - title: "Ethereum RPC - Filtering non-matching logs", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let nonMatchingCases: ReturnType; - - const getNonMatchingCases = (receipt: TransactionReceipt) => { - return [ - // Non-existant address. - { - fromBlock: "0x0", - toBlock: "latest", - address: "0x0000000000000000000000000000000000000000", - }, - // Non-existant topic. - { - fromBlock: "0x0", - toBlock: "latest", - topics: ["0x0000000000000000000000000000000000000000000000000000000000000000"], - }, - // Existant address + non-existant topic. - { - fromBlock: "0x0", - toBlock: "latest", - address: receipt.contractAddress, - topics: ["0x0000000000000000000000000000000000000000000000000000000000000000"], - }, - // Non-existant address + existant topic. - { - fromBlock: "0x0", - toBlock: "latest", - address: "0x0000000000000000000000000000000000000000", - topics: receipt.logs[0].topics, - }, - ]; - }; - - beforeAll(async () => { - const { hash } = await deployCreateCompiledContract(context, "EventEmitter"); - const receipt = await context.viem("public").getTransactionReceipt({ hash }); - nonMatchingCases = getNonMatchingCases(receipt); - }); - - it({ - id: "T01", - title: "EthFilterApi::getFilterLogs - should filter out non-matching cases.", - test: async function () { - let create_filter; - for (const item of nonMatchingCases) { - create_filter = await customWeb3Request(context.web3(), "eth_newFilter", [item]); - const poll = await customWeb3Request(context.web3(), "eth_getFilterLogs", [create_filter.result]); - expect(poll.result.length).to.be.eq(0); - } - }, - }); - it({ - id: "T02", - title: "EthApi::getLogs - should filter out non-matching cases.", - test: async function () { - for (const item of nonMatchingCases) { - const request = await customWeb3Request(context.web3(), "eth_getLogs", [item]); - expect(request.result.length).to.be.eq(0); - } - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-eth-tx/test-eth-tx-nonce.ts b/test/suites/dev-frontier-template/test-eth-tx/test-eth-tx-nonce.ts deleted file mode 100644 index bc3b413..0000000 --- a/test/suites/dev-frontier-template/test-eth-tx/test-eth-tx-nonce.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; -import { - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - CHARLETH_ADDRESS, - createRawTransfer, - customWeb3Request, -} from "@moonwall/util"; - -describeSuite({ - id: "DF0701", - title: "Ethereum Transaction - Nonce", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should be at 0 before using it", - test: async function () { - expect(await context.viem("public").getTransactionCount({ address: BALTATHAR_ADDRESS })).toBe(0); - }, - }); - - it({ - id: "T02", - title: "should be at 0 for genesis account", - test: async function () { - expect(await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS })).toBe(0); - }, - }); - - it({ - id: "T03", - title: "should stay at 0 before block is created", - test: async function () { - await customWeb3Request(context.web3(), "eth_sendRawTransaction", [ - await createRawTransfer(context, ALITH_ADDRESS, 512), - ]); - - expect(await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS })).toBe(0); - await context.createBlock(); - }, - }); - - it({ - id: "T04", - title: "should stay at previous before block is created", - test: async function () { - const blockNumber = await context.viem("public").getBlockNumber(); - const nonce = await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }); - await context.createBlock(await createRawTransfer(context, ALITH_ADDRESS, 512)); - - expect(await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS, blockNumber })).toBe( - nonce - ); - }, - }); - - it({ - id: "T05", - title: "pending transaction nonce", - test: async function () { - const nonce = await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }); - - await customWeb3Request(context.web3(), "eth_sendRawTransaction", [ - await createRawTransfer(context, CHARLETH_ADDRESS, 512), - ]); - - expect( - await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }), - "should not increase transaction count" - ).toBe(nonce); - expect( - await context.viem("public").getTransactionCount({ - address: ALITH_ADDRESS, - blockTag: "latest", - }), - "should not increase transaction count in latest block" - ).toBe(nonce); - expect( - await context.viem("public").getTransactionCount({ - address: ALITH_ADDRESS, - blockTag: "pending", - }), - "should increase transaction count in pending block" - ).toBe(nonce + 1); - await context.createBlock(); - }, - }); - - it({ - id: "T06", - title: "transferring Nonce", - test: async function () { - const nonce = await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }); - - await context.createBlock([await createRawTransfer(context, BALTATHAR_ADDRESS, 512)]); - - expect( - await context.viem("public").getTransactionCount({ address: ALITH_ADDRESS }), - "should increase the sender nonce" - ).toBe(nonce + 1); - expect( - await context.viem("public").getTransactionCount({ address: BALTATHAR_ADDRESS }), - "should not increase the receiver nonce" - ).toBe(0); - await context.createBlock(); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-evm/test-evm-maintenance-mode.ts b/test/suites/dev-frontier-template/test-evm/test-evm-maintenance-mode.ts deleted file mode 100644 index b82b64d..0000000 --- a/test/suites/dev-frontier-template/test-evm/test-evm-maintenance-mode.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ALITH_ADDRESS, DEFAULT_GENESIS_BALANCE, BALTATHAR_ADDRESS, baltathar, alith } from "@moonwall/util"; - -// When in maintenance mode: -// A call from root (sudo) can make a transfer directly in pallet_evm -// A signed call cannot make a transfer directly in pallet_evm -describeSuite({ - id: "DF0801", - title: "Pallet EVM - maintenance mode", - foundationMethods: "dev", - testCases: ({ context, it }) => { - beforeAll(async () => { - const tx = context.polkadotJs().tx.maintenanceMode.enterMaintenanceMode(); - await context.createBlock([await context.polkadotJs().tx.sudo.sudo(tx).signAsync(alith)]); - - const events = await context.polkadotJs().query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "EnteredMaintenanceMode"; - }); - expect(ev1.length).to.be.equal(1); - - const enabled = (await context.polkadotJs().query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - }); - - it({ - id: "T01", - title: "should fail without sudo", - test: async function () { - const enabled = (await context.polkadotJs().query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const tx = context - .polkadotJs() - .tx.evm.call( - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 1_000_000_000n, - "0", - null, - [] - ); - expect(await context.createBlock([await tx.signAsync(alith)]).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - - expect(await context.viem("public").getBalance({ address: baltathar.address })).to.equal( - DEFAULT_GENESIS_BALANCE - ); - }, - }); - - it({ - id: "T02", - title: "should succeed with sudo", - test: async function () { - const enabled = (await context.polkadotJs().query.maintenanceMode.maintenanceMode()).toJSON(); - expect(enabled).to.be.true; - - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo( - context - .polkadotJs() - .tx.evm.call( - ALITH_ADDRESS, - baltathar.address, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 100_000_000_000_000n, - "0", - null, - [] - ) - ) - ); - - expect( - result?.events.find( - ({ event: { section, method } }) => section == "system" && method == "ExtrinsicSuccess" - ) - ).to.exist; - expect(await context.viem("public").getBalance({ address: baltathar.address })).to.equal( - DEFAULT_GENESIS_BALANCE + 100_000_000_000_000_000_000n - ); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-evm/test-evm-rpc-block-author.ts b/test/suites/dev-frontier-template/test-evm/test-evm-rpc-block-author.ts deleted file mode 100644 index c179420..0000000 --- a/test/suites/dev-frontier-template/test-evm/test-evm-rpc-block-author.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { expect, describeSuite } from "@moonwall/cli"; -import { customWeb3Request } from "@moonwall/util"; - -describeSuite({ - id: "DF0802", - title: "Pallet EVM - RPC block author", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should return correct author", - test: async function () { - await context.createBlock(); - - const author = await context.polkadotJs().query.authorInherent.author(); - - const latestBlock = (await customWeb3Request(context.web3(), "eth_getBlockByNumber", ["latest", false])) - .result; - - expect(latestBlock.author).eq(author.toString().substring(0, 42)); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-evm/test-evm-transfer-origints.ts b/test/suites/dev-frontier-template/test-evm/test-evm-transfer-origints.ts deleted file mode 100644 index 71eeed1..0000000 --- a/test/suites/dev-frontier-template/test-evm/test-evm-transfer-origints.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, DEFAULT_GENESIS_BALANCE, BALTATHAR_ADDRESS, baltathar, alith } from "@moonwall/util"; - -// A call from root (sudo) can make a transfer directly in pallet_evm -// A signed call cannot make a transfer directly in pallet_evm -describeSuite({ - id: "DF0803", - title: "Pallet EVM - call", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should fail without sudo", - test: async function () { - const tx = context - .polkadotJs() - .tx.evm.call( - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 1_000_000_000n, - "0", - null, - [] - ); - expect(await context.createBlock([await tx.signAsync(alith)]).catch((e) => e.toString())).to.equal( - "RpcError: 1010: Invalid Transaction: Transaction call is not expected" - ); - - expect(await context.viem("public").getBalance({ address: baltathar.address })).to.equal( - DEFAULT_GENESIS_BALANCE - ); - }, - }); - - it({ - id: "T02", - title: "should succeed with sudo", - test: async function () { - const { result } = await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo( - context - .polkadotJs() - .tx.evm.call( - ALITH_ADDRESS, - baltathar.address, - "0x0", - 100_000_000_000_000_000_000n, - 12_000_000n, - 100_000_000_000_000n, - "0", - null, - [] - ) - ) - ); - - expect( - result?.events.find( - ({ event: { section, method } }) => section == "system" && method == "ExtrinsicSuccess" - ) - ).to.exist; - expect(await context.viem("public").getBalance({ address: baltathar.address })).to.equal( - DEFAULT_GENESIS_BALANCE + 100_000_000_000_000_000_000n - ); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-frnt-rpc/test-frnt-rpc.ts b/test/suites/dev-frontier-template/test-frnt-rpc/test-frnt-rpc.ts deleted file mode 100644 index ee50b28..0000000 --- a/test/suites/dev-frontier-template/test-frnt-rpc/test-frnt-rpc.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { customDevRpcRequest, describeSuite, expect } from "@moonwall/cli"; -import { BALTATHAR_ADDRESS, createViemTransaction } from "@moonwall/util"; - -const DEFAULT_TXN_MAX_BASE_FEE = 10_000_000_000; - -describeSuite({ - id: "DF0901", - title: "Frontier RPC Methods - frnt_isBlockFinalized ", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should return as finalized when true", - test: async function () { - const blockHash = (await context.createBlock([], { finalize: true })).block.hash; - const resp = await customDevRpcRequest("frnt_isBlockFinalized", [blockHash]); - expect(resp, "Block finalization status mismatch").toBe(true); - }, - }); - - it({ - id: "T02", - title: "should return as unfinalized when false", - test: async function () { - const blockHash = (await context.createBlock([], { finalize: false })).block.hash; - const resp = await customDevRpcRequest("frnt_isBlockFinalized", [blockHash]); - expect(resp, "Block finalization status mismatch").toBe(false); - }, - }); - - it({ - id: "T03", - title: "should return as unfinalized when block not found", - test: async function () { - const blockHash = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - const resp = await customDevRpcRequest("frnt_isBlockFinalized", [blockHash]); - expect(resp, "Block finalization status mismatch").toBe(false); - }, - }); - - it({ - id: "T04", - title: "should return as finalized when new block is true", - test: async function () { - const blockHash = (await context.createBlock([], { finalize: false })).block.hash; - await context.createBlock([], { finalize: true }); - const resp = await customDevRpcRequest("frnt_isBlockFinalized", [blockHash]); - expect(resp, "Block finalization status mismatch").toBe(true); - }, - }); - - it({ - id: "T05", - title: "should return as finalized when new block reorg happens", - test: async function () { - const blockHash = (await context.createBlock([], { finalize: false })).block.hash; - await context.createBlock([], { finalize: false }); - await context.createBlock([], { finalize: true, parentHash: blockHash }); - - const resp = await customDevRpcRequest("frnt_isBlockFinalized", [blockHash]); - expect(resp, "Block finalization status mismatch").toBe(true); - }, - }); - - it({ - id: "T06", - title: "should return as finalized when true", - test: async function () { - await context.createBlock( - await createViemTransaction(context, { - to: BALTATHAR_ADDRESS, - gas: 12_000_000n, - gasPrice: BigInt(DEFAULT_TXN_MAX_BASE_FEE), - value: 1_000_000n, - }), - { finalize: true } - ); - - const block = await context.viem().getBlock(); - const resp = await customDevRpcRequest("frnt_isTxFinalized", [block.transactions[0]]); - expect(resp, "Transaction finalization status mismatch").toBe(true); - }, - }); - - it({ - id: "T07", - title: "should return as unfinalized when false", - test: async function () { - await context.createBlock( - await createViemTransaction(context, { - to: BALTATHAR_ADDRESS, - gas: 12_000_000n, - gasPrice: BigInt(DEFAULT_TXN_MAX_BASE_FEE), - value: 1_000_000n, - }), - { finalize: false } - ); - - const block = await context.viem().getBlock(); - const resp = await customDevRpcRequest("frnt_isTxFinalized", [block.transactions[0]]); - expect(resp, "Transaction finalization status mismatch").toBe(false); - }, - }); - - it({ - id: "T08", - title: "should return as unfinalized when txn not found", - test: async function () { - const txnHash = "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - const resp = await customDevRpcRequest("frnt_isTxFinalized", [txnHash]); - expect(resp, "Transaction finalization status mismatch").toBe(false); - }, - }); - - it({ - id: "T09", - title: "should return as finalized when new block is true", - test: async function () { - await context.createBlock( - await createViemTransaction(context, { - to: BALTATHAR_ADDRESS, - gas: 12_000_000n, - gasPrice: BigInt(DEFAULT_TXN_MAX_BASE_FEE), - value: 1_000_000n, - }), - { finalize: false } - ); - const block = await context.viem().getBlock(); - await context.createBlock([], { finalize: true }); - const resp = await customDevRpcRequest("frnt_isTxFinalized", [block.transactions[0]]); - expect(resp, "Transaction finalization status mismatch").toBe(true); - }, - }); - - it({ - id: "T10", - title: "should return as finalized when new block reorg happens", - test: async function () { - const blockHash = ( - await context.createBlock( - await createViemTransaction(context, { - to: BALTATHAR_ADDRESS, - gas: 12_000_000n, - gasPrice: BigInt(DEFAULT_TXN_MAX_BASE_FEE), - value: 1_000_000n, - }), - { finalize: false } - ) - ).block.hash; - - const block = await context.viem().getBlock(); - await context.createBlock([], { finalize: false }); - await context.createBlock([], { finalize: true, parentHash: blockHash }); - const resp = await customDevRpcRequest("frnt_isTxFinalized", [block.transactions[0]]); - expect(resp, "Transaction finalization status mismatch").toBe(true); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-pallet-cc-authorities-noting/test-orchestrator-para-id.ts b/test/suites/dev-frontier-template/test-pallet-cc-authorities-noting/test-orchestrator-para-id.ts deleted file mode 100644 index 6739ceb..0000000 --- a/test/suites/dev-frontier-template/test-pallet-cc-authorities-noting/test-orchestrator-para-id.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { expect, describeSuite } from "@moonwall/cli"; - -describeSuite({ - id: "DF1001", - title: "AuthoritiesNoting - OrchestratorParaId", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should not set storage item if not sudo", - test: async function () { - const orchestratorParaId = await context.polkadotJs().query.authoritiesNoting.orchestratorParaId(); - expect(orchestratorParaId.toString()).toBe("1000"); - - const { result } = await context.createBlock( - context.polkadotJs().tx.authoritiesNoting.setOrchestratorParaId(2000), - { allowFailures: true } - ); - - expect(result.successful).toBe(false); - - const newOrchestratorParaId = await context.polkadotJs().query.authoritiesNoting.orchestratorParaId(); - expect(newOrchestratorParaId.toString()).toBe("1000"); - }, - }); - - it({ - id: "T02", - title: "should set storage item via sudo", - test: async function () { - const orchestratorParaId = await context.polkadotJs().query.authoritiesNoting.orchestratorParaId(); - expect(orchestratorParaId.toString()).toBe("1000"); - - await context.createBlock( - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.authoritiesNoting.setOrchestratorParaId(2000)) - ); - - const newOrchestratorParaId = await context.polkadotJs().query.authoritiesNoting.orchestratorParaId(); - expect(newOrchestratorParaId.toString()).toBe("2000"); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-1.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-1.ts deleted file mode 100644 index 28ee6d5..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-1.ts +++ /dev/null @@ -1,177 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, alith } from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { Abi } from "viem"; -import { mockAssetCreation, relayAssetMetadata } from "../../../helpers/assets.ts"; -import { RELAY_SOURCE_LOCATION } from "../../../util/constants.ts"; - -describeSuite({ - id: "DF1101", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let erc20Abi: Abi; - let assetId: u16; - let contractInstanceAddress: `0x${string}`; - - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f"; - const ASSET_ID = 15n; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 2000000000000000000000n) - ); - - const { abi, contractAddress } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - contractInstanceAddress = contractAddress; - }); - - it({ - id: "T01", - title: "allows to call name", - test: async function () { - const name = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "name", - }); - - expect(name).equals("DOT"); - }, - }); - - it({ - id: "T02", - title: "allows to call name via wrapper", - test: async function () { - const name = await context.viem().readContract({ - address: contractInstanceAddress, - abi: erc20Abi, - functionName: "name", - }); - - expect(name).equals("DOT"); - }, - }); - - it({ - id: "T03", - title: "allows to call symbol", - test: async function () { - const symbol = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "symbol", - }); - expect(symbol).equals("DOT"); - }, - }); - - it({ - id: "T04", - title: "allows to call symbol via wrapper", - test: async function () { - const symbol = await context.viem().readContract({ - address: contractInstanceAddress, - abi: erc20Abi, - functionName: "symbol", - }); - expect(symbol).equals("DOT"); - }, - }); - - it({ - id: "T05", - title: "allows to call decimals", - test: async function () { - const decimals = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "decimals", - }); - expect(decimals).equals(12); - }, - }); - - it({ - id: "T06", - title: "allows to call decimals via wrapper", - test: async function () { - const decimals = await context.viem().readContract({ - address: contractInstanceAddress, - abi: erc20Abi, - functionName: "decimals", - }); - expect(decimals).equals(12); - }, - }); - - it({ - id: "T07", - title: "allows to call getBalance", - test: async function () { - const data = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "balanceOf", - args: [ALITH_ADDRESS], - }); - expect(data).equals(2000000000000000000000n); - }, - }); - - it({ - id: "T08", - title: "allows to call getBalance via wrapper", - test: async function () { - const data = await context.viem().readContract({ - address: contractInstanceAddress, - abi: erc20Abi, - functionName: "balanceOf", - args: [ALITH_ADDRESS], - }); - expect(data).equals(2000000000000000000000n); - }, - }); - - it({ - id: "T09", - title: "allows to call totalSupply", - test: async function () { - const data = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "totalSupply", - }); - expect(data).equals(2000000000000000000000n); - }, - }); - - it({ - id: "T10", - title: "allows to call totalSupply via wrapper", - test: async function () { - const data = await context.viem().readContract({ - address: contractInstanceAddress, - abi: erc20Abi, - functionName: "totalSupply", - }); - expect(data).equals(2000000000000000000000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-2.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-2.ts deleted file mode 100644 index fb9e136..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-2.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createEthersTransaction } from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -import { Abi, encodeFunctionData } from "viem"; - -describeSuite({ - id: "DF1102", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - const ASSET_ID = 15n; - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f" as `0x${string}`; - const SELECTORS = { - balanceOf: "70a08231", - totalSupply: "18160ddd", - approve: "095ea7b3", - allowance: "dd62ed3e", - transfer: "a9059cbb", - transferFrom: "23b872dd", - logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - }; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 100000000000000n) - ); - - const { abi } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - }); - - it({ - id: "T01", - title: "allows to approve transfers, and allowance matches", - test: async function () { - const rawSigned = await createEthersTransaction(context, { - to: ADDRESS_ERC20, - data: encodeFunctionData({ - abi: erc20Abi, - functionName: "approve", - args: [BALTATHAR_ADDRESS, 1000], - }), - }); - - const { result } = await context.createBlock(rawSigned); - const receipt = await context - .viem("public") - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - - expect(receipt.status).to.equal("success"); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address.toLowerCase()).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), ALITH_ADDRESS, BALTATHAR_ADDRESS); - expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); - }, - }); - - it({ - id: "T02", - title: "should gather the allowance", - test: async function () { - const data = await context.viem().readContract({ - address: ADDRESS_ERC20, - abi: erc20Abi, - functionName: "allowance", - args: [ALITH_ADDRESS, BALTATHAR_ADDRESS], - }); - expect(data).toBe(1000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-3.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-3.ts deleted file mode 100644 index ddfc9cf..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-3.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - BALTATHAR_PRIVATE_KEY, - CHARLETH_ADDRESS, - alith, - createEthersTransaction, - createViemTransaction, -} from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -import { Abi, encodeFunctionData } from "viem"; - -describeSuite({ - id: "DF1103", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - const ASSET_ID = 15n; - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f" as `0x${string}`; - const SELECTORS = { - balanceOf: "70a08231", - totalSupply: "18160ddd", - approve: "095ea7b3", - allowance: "dd62ed3e", - transfer: "a9059cbb", - transferFrom: "23b872dd", - logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - }; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 100000000000000n) - ); - - const { abi } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - }); - - it({ - id: "T01", - title: "allows to approve transfer and use transferFrom", - test: async function () { - const rawSigned = await createEthersTransaction(context, { - to: ADDRESS_ERC20, - data: encodeFunctionData({ - abi: erc20Abi, - functionName: "approve", - args: [BALTATHAR_ADDRESS, 1000], - }), - }); - await context.createBlock(rawSigned); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), ALITH_ADDRESS, BALTATHAR_ADDRESS); - - expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); - // We are gonna spend 1000 from alith to send it to charleth - const rawSigned2 = await createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: ADDRESS_ERC20, - data: encodeFunctionData({ - abi: erc20Abi, - functionName: "transferFrom", - args: [ALITH_ADDRESS, CHARLETH_ADDRESS, 1000], - }), - }); - - const { result } = await context.createBlock(rawSigned2); - const receipt = await context.viem().getTransactionReceipt({ - hash: result?.hash as `0x${string}`, - }); - - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address.toLowerCase()).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receipt.status).to.equal("success"); - - await new Promise((resolve) => setTimeout(resolve, 1000)); - // Approve amount is null now - const newApprovals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), ALITH_ADDRESS, BALTATHAR_ADDRESS); - - expect(newApprovals.isNone).to.eq(true); - - // Charleth balance is 1000 - const charletBalance = await context - .polkadotJs() - .query.foreignAssets.account(assetId.toU8a(), CHARLETH_ADDRESS); - expect(charletBalance.unwrap().balance.toBigInt()).to.equal(1000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-4.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-4.ts deleted file mode 100644 index 5339240..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-4.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createViemTransaction } from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { Abi, encodeFunctionData } from "viem"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -describeSuite({ - id: "DF1104", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - const ASSET_ID = 15n; - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f" as `0x${string}`; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 100000000000000n) - ); - - const { abi } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - }); - - it({ - id: "T01", - title: "allows to transfer", - test: async function () { - const { result } = await context.createBlock( - createViemTransaction(context, { - to: ADDRESS_ERC20, - data: encodeFunctionData({ - functionName: "transfer", - args: [BALTATHAR_ADDRESS, 1000], - abi: erc20Abi, - }), - }) - ); - - // const receipt = await context.web3.eth.getTransactionReceipt(result.hash); - const receipt = await context.viem().getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - expect(receipt.status).to.equal("success"); - - // Baltathar balance is 1000 - const baltatharBalance = await context - .polkadotJs() - .query.foreignAssets.account(assetId.toU8a(), BALTATHAR_ADDRESS); - expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-5.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-5.ts deleted file mode 100644 index 6e37fcf..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-5.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - BALTATHAR_PRIVATE_KEY, - CHARLETH_ADDRESS, - alith, - createViemTransaction, -} from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { Abi, encodeFunctionData } from "viem"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -describeSuite({ - id: "DF1105", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - let erc20InstanceAddress: `0x${string}`; - const ASSET_ID = 15n; - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f" as `0x${string}`; - const SELECTORS = { - balanceOf: "70a08231", - totalSupply: "18160ddd", - approve: "095ea7b3", - allowance: "dd62ed3e", - transfer: "a9059cbb", - transferFrom: "23b872dd", - logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - }; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - const { abi, contractAddress } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - erc20InstanceAddress = contractAddress; - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 200000000000000n) - ); - - // We fund the contract address - await context.createBlock( - context - .polkadotJs() - .tx.foreignAssets.forceTransfer( - assetId.toU8a(), - ALITH_ADDRESS, - erc20InstanceAddress, - 100000000000000n - ) - ); - }); - - it({ - id: "T01", - title: "allows to approve transfer and use transferFrom from contract calls", - test: async function () { - // Create approval - const blockAlith = await context.createBlock( - createViemTransaction(context, { - to: erc20InstanceAddress, - data: encodeFunctionData({ - functionName: "approve", - abi: erc20Abi, - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const receiptAlith = await context - .viem("public") - .getTransactionReceipt({ hash: blockAlith.result?.hash as `0x${string}` }); - - expect(receiptAlith.status).to.equal("success"); - expect(receiptAlith.logs.length).to.eq(1); - expect(receiptAlith.logs[0].address.toLowerCase()).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receiptAlith.logs[0].topics.length).to.eq(3); - expect(receiptAlith.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), erc20InstanceAddress, BALTATHAR_ADDRESS); - - expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); - // We are gonna spend 1000 from contractInstanceAddress to send it to charleth - // Since this is a regular call, it will take contractInstanceAddress as msg.sender - // thus from & to will be the same, and approval wont be touched - const blockBaltathar = await context.createBlock( - createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: erc20InstanceAddress, - data: encodeFunctionData({ - abi: erc20Abi, - functionName: "transferFrom", - args: [erc20InstanceAddress, CHARLETH_ADDRESS, 1000], - }), - }) - ); - - const receiptBaltathar = await context - .viem("public") - .getTransactionReceipt({ hash: blockBaltathar.result?.hash as `0x${string}` }); - - expect(receiptBaltathar.logs.length).to.eq(1); - expect(receiptBaltathar.logs[0].address.toLowerCase()).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receiptBaltathar.logs[0].topics.length).to.eq(3); - expect(receiptBaltathar.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receiptBaltathar.status).to.equal("success"); - - // approvals are untouched - const newApprovals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), erc20InstanceAddress, BALTATHAR_ADDRESS); - expect(newApprovals.unwrap().amount.toBigInt()).to.equal(1000n); - - // this time we call directly from Baltathar the ERC20 contract - const directBlock = await context.createBlock( - createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: ADDRESS_ERC20, - data: encodeFunctionData({ - functionName: "transferFrom", - abi: erc20Abi, - args: [erc20InstanceAddress, CHARLETH_ADDRESS, 1000], - }), - }) - ); - - const directReceipt = await context - .viem("public") - .getTransactionReceipt({ hash: directBlock.result?.hash as `0x${string}` }); - - expect(directReceipt.logs.length).to.eq(1); - expect(directReceipt.logs[0].address.toLowerCase()).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(directReceipt.logs[0].topics.length).to.eq(3); - expect(directReceipt.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(directReceipt.status).to.equal("success"); - - // Approve amount is null now - const directApprovals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), erc20InstanceAddress, BALTATHAR_ADDRESS); - expect(directApprovals.isNone).to.eq(true); - - // Charleth balance is 2000 - const charletBalance = await context - .polkadotJs() - .query.foreignAssets.account(assetId.toU8a(), CHARLETH_ADDRESS); - expect(charletBalance.unwrap().balance.toBigInt()).to.equal(2000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-6.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-6.ts deleted file mode 100644 index 25c7dd6..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-6.ts +++ /dev/null @@ -1,118 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_PRIVATE_KEY, CHARLETH_ADDRESS, alith, createViemTransaction } from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { Abi, encodeFunctionData } from "viem"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -describeSuite({ - id: "DF1106", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - let erc20InstanceAddress: `0x${string}`; - const ASSET_ID = 15n; - const ADDRESS_ERC20 = "0xfFfFFFffFffFFFFffFFfFfffFfFFFFFfffFF000f" as `0x${string}`; - const SELECTORS = { - balanceOf: "70a08231", - totalSupply: "18160ddd", - approve: "095ea7b3", - allowance: "dd62ed3e", - transfer: "a9059cbb", - transferFrom: "23b872dd", - logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - }; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - const { contractAddress, abi } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20InstanceAddress = contractAddress; - erc20Abi = abi; - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - // We fund Alith - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 100000000000000n) - ); - }); - - it({ - id: "T01", - title: "Bob approves contract and use transferFrom from contract calls", - test: async function () { - const tx = await createViemTransaction(context, { - to: ADDRESS_ERC20, - data: encodeFunctionData({ - functionName: "approve", - args: [erc20InstanceAddress, 1000], - abi: erc20Abi, - }), - }); - - const { result } = await context.createBlock(tx); - const receipt = await context - .viem("public") - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - - expect(receipt.status).to.equal("success"); - expect(receipt.logs.length).to.eq(1); - expect(receipt.logs[0].address).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receipt.logs[0].topics.length).to.eq(3); - expect(receipt.logs[0].topics[0]).to.eq(SELECTORS.logApprove); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), ALITH_ADDRESS, erc20InstanceAddress); - - expect(approvals.unwrap().amount.toBigInt()).to.equal(1000n); - // We are gonna spend 1000 from ALITH_ADDRESS to send it to charleth from contract address - // even if Bob calls, msg.sender will become the contract with regular calls - const blockBaltathar = await context.createBlock( - createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: erc20InstanceAddress, - data: encodeFunctionData({ - functionName: "transferFrom", - args: [ALITH_ADDRESS, CHARLETH_ADDRESS, 1000], - abi: erc20Abi, - }), - }) - ); - - const receiptBaltathar = await context - .viem("public") - .getTransactionReceipt({ hash: blockBaltathar.result?.hash as `0x${string}` }); - expect(receiptBaltathar.logs.length).to.eq(1); - expect(receiptBaltathar.logs[0].address).to.eq(ADDRESS_ERC20.toLowerCase()); - expect(receiptBaltathar.logs[0].topics.length).to.eq(3); - expect(receiptBaltathar.logs[0].topics[0]).to.eq(SELECTORS.logTransfer); - expect(receiptBaltathar.status).to.equal("success"); - - // Approve amount is null now - const approvalBaltathar = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), ALITH_ADDRESS, erc20InstanceAddress); - expect(approvalBaltathar.isNone).to.eq(true); - - // Charleth balance is 1000 - const charletBalance = await context - .polkadotJs() - .query.foreignAssets.account(assetId.toU8a(), CHARLETH_ADDRESS); - expect(charletBalance.unwrap().balance.toBigInt()).to.equal(1000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-7.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-7.ts deleted file mode 100644 index 87a17e6..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-7.ts +++ /dev/null @@ -1,81 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, alith, createViemTransaction } from "@moonwall/util"; -import { u16 } from "@polkadot/types-codec"; -import { Abi, encodeFunctionData } from "viem"; -import { mockAssetCreation, RELAY_SOURCE_LOCATION, relayAssetMetadata } from "../../../helpers/assets"; - -describeSuite({ - id: "DF1107", - title: "Precompiles - Assets-ERC20", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let erc20Abi: Abi; - let erc20InstanceAddress: `0x${string}`; - const ASSET_ID = 15n; - - beforeAll(async () => { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - const { abi, contractAddress } = await deployCreateCompiledContract(context, "ERC20Instance"); - erc20Abi = abi; - erc20InstanceAddress = contractAddress; - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, 200000000000000n) - ); - - // We fund the contract address - await context.createBlock( - context - .polkadotJs() - .tx.foreignAssets.forceTransfer( - assetId.toU8a(), - ALITH_ADDRESS, - erc20InstanceAddress, - 100000000000000n - ) - ); - }); - - it({ - id: "T01", - title: "allows to transfer through call from SC ", - test: async function () { - // Create approval - const { result } = await context.createBlock( - createViemTransaction(context, { - to: erc20InstanceAddress, - data: encodeFunctionData({ - abi: erc20Abi, - functionName: "transfer", - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const receipt = await context - .viem("public") - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - expect(receipt.status).to.equal("success"); - - // Baltathar balance is 1000 - const baltatharBalance = await context - .polkadotJs() - .query.foreignAssets.account(assetId.toU8a(), BALTATHAR_ADDRESS); - expect(baltatharBalance.unwrap().balance.toBigInt()).to.equal(1000n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-low-level.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-low-level.ts deleted file mode 100644 index 18c8aff..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-assets-erc20-low-level.ts +++ /dev/null @@ -1,183 +0,0 @@ -import { TransactionTypes, beforeAll, deployCreateCompiledContract, describeSuite, expect } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, CHARLETH_ADDRESS, alith, createEthersTransaction } from "@moonwall/util"; -import { u16 } from "@polkadot/types"; -import { nToHex } from "@polkadot/util"; -import { Abi, encodeFunctionData } from "viem"; -import { mockAssetCreation, relayAssetMetadata, RELAY_SOURCE_LOCATION } from "../../../helpers/assets"; - -describeSuite({ - id: "DF1108", - title: "Precompiles - Low Level Transactions", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let assetId: u16; - let contractInstanceAddress: `0x${string}`; - let contractAbi: Abi; - - const ASSET_ID = 15n; - const MAX_SUPPLY = 100000000000000n; - - beforeAll(async function () { - assetId = context.polkadotJs().createType("u16", ASSET_ID); - - const { contractAddress, abi } = await deployCreateCompiledContract(context, "ERC20Instance"); - contractInstanceAddress = contractAddress; - contractAbi = abi; - - await mockAssetCreation( - context, - alith, - assetId, - ALITH_ADDRESS, - RELAY_SOURCE_LOCATION, - relayAssetMetadata, - true - ); - - await context.createBlock( - context.polkadotJs().tx.foreignAssets.mint(assetId.toU8a(), ALITH_ADDRESS, MAX_SUPPLY) - ); - }); - - let testCounter = 2; - - it({ - id: "T01", - title: "can make static calls to view functions", - test: async function () { - const callResult = await context.viem().call({ - account: ALITH_ADDRESS, - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "totalSupply_static", - }), - }); - - expect(callResult.data).equals(nToHex(MAX_SUPPLY, { bitLength: 256 })); - }, - }); - - for (const txnType of TransactionTypes) { - it({ - id: `T${testCounter < 10 ? "0" : ""}${testCounter++}`, - title: `can make static calls to view functions and transact ${txnType}`, - test: async function () { - await context.createBlock( - await createEthersTransaction(context, { - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "approve_max_supply", - args: [CHARLETH_ADDRESS], - }), - txnType: "eip1559", - }) - ); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), contractInstanceAddress, CHARLETH_ADDRESS); - - expect(approvals.unwrap().amount.toBigInt()).to.equal(MAX_SUPPLY); - }, - }); - - it({ - id: `T${testCounter < 10 ? "0" : ""}${testCounter++}`, - title: `has unchanged state when submitting static call ${txnType}`, - test: async function () { - const { result } = await context.createBlock( - await createEthersTransaction(context, { - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "approve_static", - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), contractInstanceAddress, BALTATHAR_ADDRESS); - - expect(result?.successful, "Call unsuccessful").to.be.true; - expect(approvals.isNone).to.be.true; - }, - }); - - it({ - id: `T${testCounter < 10 ? "0" : ""}${testCounter++}`, - title: `visibility preserved for static calls ${txnType}`, - test: async function () { - const { result } = await context.createBlock( - await createEthersTransaction(context, { - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "approve_ext_static", - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), contractInstanceAddress, BALTATHAR_ADDRESS); - - expect(result?.successful, "Call unsuccessful").to.be.true; - expect(approvals.isNone).to.be.true; - }, - }); - - it({ - id: `T${testCounter < 10 ? "0" : ""}${testCounter++}`, - title: `visibility preserved for delegate->static calls ${txnType}`, - test: async function () { - const { result } = await context.createBlock( - await createEthersTransaction(context, { - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "approve_delegate_to_static", - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), contractInstanceAddress, BALTATHAR_ADDRESS); - - expect(result?.successful, "Call unsuccessful").to.be.true; - expect(approvals.isNone).to.be.true; - }, - }); - - it({ - id: `T${testCounter < 10 ? "0" : ""}${testCounter++}`, - title: `visibility preserved for static->delegate calls ${txnType}`, - test: async function () { - const { result } = await context.createBlock( - await createEthersTransaction(context, { - to: contractInstanceAddress, - data: encodeFunctionData({ - abi: contractAbi, - functionName: "approve_static_to_delegate", - args: [BALTATHAR_ADDRESS, 1000], - }), - }) - ); - - const approvals = await context - .polkadotJs() - .query.foreignAssets.approvals(assetId.toU8a(), contractInstanceAddress, BALTATHAR_ADDRESS); - - expect(result?.successful, "Call unsuccessful").to.be.true; - expect(approvals.isNone).to.be.true; - }, - }); - } - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-batch.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-batch.ts deleted file mode 100644 index 9879308..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-batch.ts +++ /dev/null @@ -1,250 +0,0 @@ -import { describeSuite, expect, fetchCompiledContract } from "@moonwall/cli"; -import { - ALITH_ADDRESS, - BALTATHAR_ADDRESS, - BALTATHAR_PRIVATE_KEY, - CHARLETH_ADDRESS, - createViemTransaction, - sendRawTransaction, -} from "@moonwall/util"; -import { expectEVMResult } from "helpers"; -import { getSignatureParameters } from "util/ethereum"; -import { encodeFunctionData, fromHex } from "viem"; - -const PRECOMPILE_BATCH_ADDRESS = "0x0000000000000000000000000000000000000801"; -const PRECOMPILE_CALL_PERMIT_ADDRESS = "0x0000000000000000000000000000000000000802"; - -describeSuite({ - id: "DF1109", - title: "Batch - All functions should consume the same gas", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "should consume the same gas", - test: async function () { - const { abi: batchInterface } = fetchCompiledContract("Batch"); - - let aliceNonce = (await context.polkadotJs().query.system.account(ALITH_ADDRESS)).nonce.toNumber(); - - // each tx have a different gas limit to ensure it doesn't impact gas used - const batchAllTx = await createViemTransaction(context, { - to: PRECOMPILE_BATCH_ADDRESS, - gas: 1114112n, - nonce: aliceNonce++, - data: encodeFunctionData({ - abi: batchInterface, - functionName: "batchAll", - args: [ - [BALTATHAR_ADDRESS, CHARLETH_ADDRESS], - ["1000000000000000000", "2000000000000000000"], - [], - [], - ], - }), - }); - - const batchSomeTx = await createViemTransaction(context, { - to: PRECOMPILE_BATCH_ADDRESS, - gas: 1179648n, - nonce: aliceNonce++, - data: encodeFunctionData({ - abi: batchInterface, - functionName: "batchSome", - args: [ - [BALTATHAR_ADDRESS, CHARLETH_ADDRESS], - ["1000000000000000000", "2000000000000000000"], - [], - [], - ], - }), - }); - - const batchSomeUntilFailureTx = await createViemTransaction(context, { - to: PRECOMPILE_BATCH_ADDRESS, - gas: 1245184n, - nonce: aliceNonce++, - data: encodeFunctionData({ - abi: batchInterface, - functionName: "batchSomeUntilFailure", - args: [ - [BALTATHAR_ADDRESS, CHARLETH_ADDRESS], - ["1000000000000000000", "2000000000000000000"], - [], - [], - ], - }), - }); - - const batchAllResult = await sendRawTransaction(context, batchAllTx); - const batchSomeResult = await sendRawTransaction(context, batchSomeTx); - const batchSomeUntilFailureResult = await sendRawTransaction(context, batchSomeUntilFailureTx); - - await context.createBlock(); - - const batchAllReceipt = await context - .viem("public") - .getTransactionReceipt({ hash: batchAllResult as `0x${string}` }); - const batchSomeReceipt = await context - .viem("public") - .getTransactionReceipt({ hash: batchSomeResult as `0x${string}` }); - const batchSomeUntilFailureReceipt = await context - .viem("public") - .getTransactionReceipt({ hash: batchSomeUntilFailureResult as `0x${string}` }); - - expect(batchAllReceipt["gasUsed"]).to.equal(44_932n); - expect(batchSomeReceipt["gasUsed"]).to.equal(44_932n); - expect(batchSomeUntilFailureReceipt["gasUsed"]).to.equal(44_932n); - }, - }); - - it({ - id: "T02", - title: "should be able to call itself", - test: async function () { - const { abi: batchInterface } = fetchCompiledContract("Batch"); - - const batchAll = await context.writeContract({ - contractAddress: PRECOMPILE_BATCH_ADDRESS, - contractName: "Batch", - functionName: "batchAll", - args: [ - [PRECOMPILE_BATCH_ADDRESS], - [], - [ - encodeFunctionData({ - abi: batchInterface, - functionName: "batchAll", - args: [ - [BALTATHAR_ADDRESS, CHARLETH_ADDRESS], - ["1000000000000000000", "2000000000000000000"], - [], - [], - ], - }), - ], - [], - ], - rawTxOnly: true, - }); - - const { result } = await context.createBlock(batchAll); - expectEVMResult(result!.events, "Succeed"); - }, - }); - - it({ - id: "T03", - title: "should be able to be called from call permit", - test: async function () { - const { abi: batchInterface } = fetchCompiledContract("Batch"); - const { abi: callPermitAbi } = fetchCompiledContract("CallPermit"); - - const alithNonceResult = ( - await context.viem().call({ - to: PRECOMPILE_CALL_PERMIT_ADDRESS, - data: encodeFunctionData({ - abi: callPermitAbi, - functionName: "nonces", - args: [ALITH_ADDRESS], - }), - }) - ).data; - - const batchData = encodeFunctionData({ - abi: batchInterface, - functionName: "batchAll", - args: [ - [BALTATHAR_ADDRESS, CHARLETH_ADDRESS], - ["1000000000000000000", "2000000000000000000"], - [], - [], - ], - }); - - const signature = await context.viem().signTypedData({ - types: { - EIP712Domain: [ - { - name: "name", - type: "string", - }, - { - name: "version", - type: "string", - }, - { - name: "chainId", - type: "uint256", - }, - { - name: "verifyingContract", - type: "address", - }, - ], - CallPermit: [ - { - name: "from", - type: "address", - }, - { - name: "to", - type: "address", - }, - { - name: "value", - type: "uint256", - }, - { - name: "data", - type: "bytes", - }, - { - name: "gaslimit", - type: "uint64", - }, - { - name: "nonce", - type: "uint256", - }, - { - name: "deadline", - type: "uint256", - }, - ], - }, - primaryType: "CallPermit", - domain: { - name: "Call Permit Precompile", - version: "1", - chainId: 1281n, - verifyingContract: PRECOMPILE_CALL_PERMIT_ADDRESS, - }, - message: { - from: ALITH_ADDRESS, - to: PRECOMPILE_BATCH_ADDRESS, - value: 0n, - data: batchData, - gaslimit: 200_000n, - nonce: fromHex(alithNonceResult!, "bigint"), - deadline: 9999999999n, - }, - }); - const { v, r, s } = getSignatureParameters(signature); - - const { result: baltatharForAlithResult } = await context.createBlock( - await createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: PRECOMPILE_CALL_PERMIT_ADDRESS, - data: encodeFunctionData({ - abi: callPermitAbi, - functionName: "dispatch", - args: [ALITH_ADDRESS, PRECOMPILE_BATCH_ADDRESS, 0, batchData, 200_000, 9999999999, v, r, s], - }), - }) - ); - expectEVMResult(baltatharForAlithResult!.events, "Succeed"); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-call-permit.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-call-permit.ts deleted file mode 100644 index dd9b301..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-call-permit.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { expect, beforeAll, describeSuite, fetchCompiledContract, deployCreateCompiledContract } from "@moonwall/cli"; -import { ALITH_ADDRESS, BALTATHAR_ADDRESS, BALTATHAR_PRIVATE_KEY, createViemTransaction } from "@moonwall/util"; -import { Abi, encodeFunctionData, fromHex } from "viem"; -import { expectEVMResult } from "../../../helpers"; -import { getSignatureParameters } from "util/ethereum"; - -const PRECOMPILE_CALL_PERMIT_ADDRESS = "0x0000000000000000000000000000000000000802"; - -describeSuite({ - id: "DF1110", - title: "Precompile - Call Permit - foo", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let callPermitDemoAbi: Abi; - let callPermitDemoAddr: `0x${string}`; - let callPermitAbi: Abi; - - beforeAll(async function () { - const { abi: demoAbi, contractAddress } = await deployCreateCompiledContract(context, "CallPermitDemo", { - gas: 5_000_000n, - }); - - callPermitDemoAbi = demoAbi; - callPermitDemoAddr = contractAddress; - - const { abi: precompileAbi } = fetchCompiledContract("CallPermit"); - callPermitAbi = precompileAbi; - - const bondAmount = ( - await context.viem().call({ - to: callPermitDemoAddr, - data: encodeFunctionData({ - abi: callPermitDemoAbi, - functionName: "BOND_AMOUNT", - }), - }) - ).data; - - const { result: baltatharResult } = await context.createBlock( - createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: callPermitDemoAddr, - data: encodeFunctionData({ abi: callPermitDemoAbi, functionName: "bond" }), - value: fromHex(bondAmount!, "bigint"), - }) - ); - expectEVMResult(baltatharResult!.events, "Succeed"); - - // bond alice via baltathar using call permit - const alithNonceResult = ( - await context.viem().call({ - to: PRECOMPILE_CALL_PERMIT_ADDRESS, - data: encodeFunctionData({ - abi: callPermitAbi, - functionName: "nonces", - args: [ALITH_ADDRESS], - }), - }) - ).data; - - const signature = await context.viem().signTypedData({ - types: { - EIP712Domain: [ - { - name: "name", - type: "string", - }, - { - name: "version", - type: "string", - }, - { - name: "chainId", - type: "uint256", - }, - { - name: "verifyingContract", - type: "address", - }, - ], - CallPermit: [ - { - name: "from", - type: "address", - }, - { - name: "to", - type: "address", - }, - { - name: "value", - type: "uint256", - }, - { - name: "data", - type: "bytes", - }, - { - name: "gaslimit", - type: "uint64", - }, - { - name: "nonce", - type: "uint256", - }, - { - name: "deadline", - type: "uint256", - }, - ], - }, - primaryType: "CallPermit", - domain: { - name: "Call Permit Precompile", - version: "1", - chainId: 1281n, - verifyingContract: PRECOMPILE_CALL_PERMIT_ADDRESS, - }, - message: { - from: ALITH_ADDRESS, - to: callPermitDemoAddr, - value: fromHex(bondAmount!, "bigint"), - data: "0x", - gaslimit: 100_000n, - nonce: fromHex(alithNonceResult!, "bigint"), - deadline: 9999999999n, - }, - }); - const { v, r, s } = getSignatureParameters(signature); - - const { result: baltatharForAlithResult } = await context.createBlock( - createViemTransaction(context, { - privateKey: BALTATHAR_PRIVATE_KEY, - to: callPermitDemoAddr, - data: encodeFunctionData({ - abi: callPermitDemoAbi, - functionName: "bondFor", - args: [ALITH_ADDRESS, 100_000, 9999999999, v, r, s], - }), - }) - ); - expectEVMResult(baltatharForAlithResult!.events, "Succeed"); - }); - - it({ - id: "T01", - title: "should have bonds for baltathar and alith in contract balance", - test: async function () { - const freeBalance = ( - await context.polkadotJs().query.system.account(callPermitDemoAddr) - ).data.free.toNumber(); - expect(freeBalance).to.equal(200); - }, - }); - - it({ - id: "T02", - title: "should have bond for baltathar in contract storage", - test: async function () { - const baltatharBond = ( - await context.viem().call({ - to: callPermitDemoAddr, - data: encodeFunctionData({ - abi: callPermitDemoAbi, - functionName: "getBondAmount", - args: [BALTATHAR_ADDRESS], - }), - }) - ).data; - expect(fromHex(baltatharBond!, "bigint")).to.equal(100n); - }, - }); - - it({ - id: "T03", - title: "should have bond for alith in contract storage", - test: async function () { - const alithBond = ( - await context.viem().call({ - to: callPermitDemoAddr, - data: encodeFunctionData({ - abi: callPermitDemoAbi, - functionName: "getBondAmount", - args: [ALITH_ADDRESS], - }), - }) - ).data; - expect(fromHex(alithBond!, "bigint")).to.equal(100n); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-erc20.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-erc20.ts deleted file mode 100644 index 84d4d1f..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-erc20.ts +++ /dev/null @@ -1,257 +0,0 @@ -import { beforeEach, describeSuite, expect } from "@moonwall/cli"; -import { - ALITH_ADDRESS, - BALTATHAR_PRIVATE_KEY, - CHARLETH_ADDRESS, - baltathar, - ETHAN_ADDRESS, - BALTATHAR_ADDRESS, -} from "@moonwall/util"; -import { expectEVMResult } from "helpers"; -import { PrivateKeyAccount, keccak256, pad, parseEther, toBytes, toHex } from "viem"; -import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; - -const IERC20_ADDRESS = "0x0000000000000000000000000000000000000800"; - -describeSuite({ - id: "DF1111", - title: "Precompiles - ERC20 Native", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let randomAccount: PrivateKeyAccount; - - beforeEach(async () => { - randomAccount = privateKeyToAccount(generatePrivateKey()); - }); - - it({ - id: "T01", - title: "allows to call balanceOf", - test: async function () { - const transferAmount = 1000n; - const signedTx = context - .polkadotJs() - .tx.balances.transferAllowDeath(ETHAN_ADDRESS, transferAmount) - .signAsync(baltathar); - await context.createBlock(signedTx); - - const balance = await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "balanceOf", - args: [ETHAN_ADDRESS], - }); - - expect(balance).equals(transferAmount); - }, - }); - - it({ - id: "T02", - title: "allows to call totalSupply", - test: async function () { - const totalSupply = await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "totalSupply", - }); - - const totalIssuance = (await context.polkadotJs().query.balances.totalIssuance()).toBigInt(); - expect(totalSupply).toBe(totalIssuance); - }, - }); - - it({ - id: "T03", - title: "allows to approve transfers, and allowance matches", - test: async function () { - const allowanceBefore = (await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "allowance", - args: [ALITH_ADDRESS, BALTATHAR_ADDRESS], - })) as bigint; - - const amount = parseEther("10"); - - const rawTx = await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "approve", - args: [BALTATHAR_ADDRESS, amount], - rawTxOnly: true, - }); - const { result } = await context.createBlock(rawTx); - - const allowanceAfter = (await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "allowance", - args: [ALITH_ADDRESS, BALTATHAR_ADDRESS], - })) as bigint; - - expect(allowanceAfter - allowanceBefore).equals(BigInt(amount)); - - const { status, logs } = await context - .viem() - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - - expect(status).to.equal("success"); - expect(logs.length).to.eq(1); - expect(logs[0].topics[0]).toBe(keccak256(toBytes("Approval(address,address,uint256)"))); - expect(logs[0].topics[1]?.toLowerCase()).toBe(pad(ALITH_ADDRESS.toLowerCase() as `0x${string}`)); - expect(logs[0].topics[2]?.toLowerCase()).toBe(pad(BALTATHAR_ADDRESS.toLowerCase() as `0x${string}`)); - }, - }); - - it({ - id: "T04", - title: "allows to call transfer", - test: async function () { - expect( - await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "balanceOf", - args: [randomAccount.address], - }) - ).equals(0n); - - const balanceBefore = await context.viem().getBalance({ address: BALTATHAR_ADDRESS }); - - const rawTx = await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "transfer", - args: [randomAccount.address, parseEther("3")], - privateKey: BALTATHAR_PRIVATE_KEY, - rawTxOnly: true, - }); - const { result } = await context.createBlock(rawTx); - const { status, gasUsed } = await context - .viem() - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - expect(status).to.equal("success"); - - const balanceAfter = await context.viem().getBalance({ address: BALTATHAR_ADDRESS }); - const block = await context.viem().getBlock(); - const fees = ((gasUsed as bigint) * block.baseFeePerGas!) as bigint; - expect(balanceAfter).toBeLessThanOrEqual(balanceBefore - parseEther("3") - fees); - expect(await context.viem().getBalance({ address: randomAccount.address })).to.equal(parseEther("3")); - }, - }); - - it({ - id: "T05", - title: "allows to approve transfer and use transferFrom", - test: async function () { - const allowedAmount = parseEther("10"); - const transferAmount = parseEther("5"); - - await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "approve", - args: [BALTATHAR_ADDRESS, allowedAmount], - }); - await context.createBlock(); - - const fromBalBefore = ( - await context.polkadotJs().query.system.account(ALITH_ADDRESS) - ).data.free.toBigInt(); - const toBalBefore = await context.viem().getBalance({ address: CHARLETH_ADDRESS }); - - const rawTx = await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "transferFrom", - args: [ALITH_ADDRESS, CHARLETH_ADDRESS, transferAmount], - privateKey: BALTATHAR_PRIVATE_KEY, - rawTxOnly: true, - }); - - const { result } = await context.createBlock(rawTx); - const { logs, status } = await context - .viem() - .getTransactionReceipt({ hash: result?.hash as `0x${string}` }); - - const fromBalAfter = ( - await context.polkadotJs().query.system.account(ALITH_ADDRESS) - ).data.free.toBigInt(); - - const toBalAfter = await context.viem().getBalance({ address: CHARLETH_ADDRESS }); - expect(logs.length).to.eq(1); - expect(logs[0].address).to.eq(IERC20_ADDRESS); - expect(logs[0].data).to.eq(pad(toHex(transferAmount))); - expect(logs[0].topics.length).to.eq(3); - expect(logs[0].topics[0]).toBe(keccak256(toBytes("Transfer(address,address,uint256)"))); - expect(logs[0].topics[1]?.toLowerCase()).toBe(pad(ALITH_ADDRESS.toLowerCase() as `0x${string}`)); - expect(logs[0].topics[2]?.toLowerCase()).toBe(pad(CHARLETH_ADDRESS.toLowerCase() as `0x${string}`)); - expect(status).to.equal("success"); - expect(toBalAfter).toBe(toBalBefore + transferAmount); - expect(fromBalAfter).toBe(fromBalBefore - transferAmount); - const newAllowedAmount = allowedAmount - transferAmount; - expect( - await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "allowance", - args: [ALITH_ADDRESS, BALTATHAR_ADDRESS], - }) - ).toBe(newAllowedAmount); - }, - }); - - it({ - id: "T06", - title: "refuses to transferFrom more than allowed", - test: async function () { - const allowedAmount = parseEther("10"); - const transferAmount = parseEther("15"); - - await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "approve", - args: [BALTATHAR_ADDRESS, allowedAmount], - }); - await context.createBlock(); - - const fromBalBefore = ( - await context.polkadotJs().query.system.account(ALITH_ADDRESS) - ).data.free.toBigInt(); - const toBalBefore = await context.viem().getBalance({ address: CHARLETH_ADDRESS }); - - const rawTxn = await context.writeContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "transferFrom", - args: [ALITH_ADDRESS, CHARLETH_ADDRESS, transferAmount], - privateKey: BALTATHAR_PRIVATE_KEY, - rawTxOnly: true, - gas: 200_000n, - web3Library: "ethers", - }); - - const { result } = await context.createBlock(rawTxn); - expectEVMResult(result!.events, "Revert"); - - const fromBalAfter = ( - await context.polkadotJs().query.system.account(ALITH_ADDRESS) - ).data.free.toBigInt(); - - const toBalAfter = await context.viem().getBalance({ address: CHARLETH_ADDRESS }); - expect(toBalAfter).toBe(toBalBefore); - expect(fromBalAfter).toBe(fromBalBefore); - expect( - await context.readContract!({ - contractAddress: IERC20_ADDRESS, - contractName: "IERC20", - functionName: "allowance", - args: [ALITH_ADDRESS, BALTATHAR_ADDRESS], - }) - ).toBe(allowedAmount); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-smart-contract-call.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-smart-contract-call.ts deleted file mode 100644 index a6a8f66..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-smart-contract-call.ts +++ /dev/null @@ -1,87 +0,0 @@ -import "@moonbeam-network/api-augment"; -import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli"; -import { encodeFunctionData } from "viem"; -import { expectEVMResult } from "../../../helpers"; - -describeSuite({ - id: "DF1112", - title: "Smart Contract Precompile Call", - foundationMethods: "dev", - testCases: ({ context, it }) => { - let testContractAddress: `0x${string}`; - let multiplyContractAddress: `0x${string}`; - - beforeAll(async function () { - const { contractAddress: addr1 } = await context.deployContract!("SmartContractPrecompileCallTest"); - testContractAddress = addr1; - - const { contractAddress: addr3 } = await context.deployContract!("MultiplyBy7"); - multiplyContractAddress = addr3; - }); - it({ - id: "T01", - title: "should revert when caller is a smart contract", - test: async function () { - const rawTxn = await context.writeContract!({ - contractAddress: testContractAddress, - contractName: "SmartContractPrecompileCallTest", - functionName: "callBatch", - gas: 5_000_000n, - rawTxOnly: true, - args: [ - multiplyContractAddress, - [ - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [5], - }), - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [6], - }), - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [7], - }), - ], - ], - }); - - const { result } = await context.createBlock(rawTxn); - - expectEVMResult(result!.events, "Revert"); - expect( - async () => - await context.writeContract!({ - contractAddress: testContractAddress, - contractName: "SmartContractPrecompileCallTest", - functionName: "callBatch", - args: [ - multiplyContractAddress, - [ - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [5], - }), - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [6], - }), - encodeFunctionData({ - abi: fetchCompiledContract("MultiplyBy7").abi, - functionName: "multiply", - args: [7], - }), - ], - ], - }) - ).rejects.toThrowError("Function not callable by smart contracts"); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/test-precompiles/test-precompile-xcm-utils.ts b/test/suites/dev-frontier-template/test-precompiles/test-precompile-xcm-utils.ts deleted file mode 100644 index ac67c12..0000000 --- a/test/suites/dev-frontier-template/test-precompiles/test-precompile-xcm-utils.ts +++ /dev/null @@ -1,450 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect } from "@moonwall/cli"; -import { GLMR, extractWeight, generateKeyringPair } from "@moonwall/util"; -import { XcmVersionedXcm } from "@polkadot/types/lookup"; -import { u8aToHex } from "@polkadot/util"; -import { expectEVMResult, descendOriginFromAddress20 } from "../../../helpers"; - -export const CLEAR_ORIGIN_WEIGHT = 2731000n; -const XCM_UTILS_ADDRESS = "0x0000000000000000000000000000000000000803"; - -describeSuite({ - id: "DF1113", - title: "Precompiles - xcm utils", - foundationMethods: "dev", - testCases: ({ context, it }) => { - it({ - id: "T01", - title: "allows to retrieve parent-based ML account", - test: async function () { - const multilocation: [number, any[]] = [1, []]; - const expectedAddress = u8aToHex(new Uint8Array([...new TextEncoder().encode("Parent")])) - .padEnd(42, "0") - .toLowerCase(); - - expect( - ( - (await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "multilocationToAddress", - args: [multilocation], - })) as any - ).toLowerCase() - ).to.equal(expectedAddress); - }, - }); - - it({ - id: "T02", - title: "allows to retrieve parachain-based ML account", - test: async function () { - const x2_parachain_asset_enum_selector = "0x00"; - const x2_parachain_id = "000007D0"; - const paraId = context.polkadotJs().createType("ParaId", 2000); - - const multilocation: [number, any[]] = [ - 1, - // Parachain(2000) - [x2_parachain_asset_enum_selector + x2_parachain_id], - ]; - - const expectedAddress = u8aToHex( - new Uint8Array([...new TextEncoder().encode("sibl"), ...paraId.toU8a()]) - ).padEnd(42, "0"); - - expect( - ( - (await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "multilocationToAddress", - args: [multilocation], - })) as any - ).toLowerCase() - ).to.equal(expectedAddress); - }, - }); - - it({ - id: "T03", - title: "allows to retrieve generic ML-based derivated account", - test: async function () { - const x2_parachain_asset_enum_selector = "0x00"; - const x2_parachain_id = "00000001"; - - // Junction::AccountKey20 - const account20EnumSelector = "0x03"; - // [0x01; 20] - const account20Address = "0101010101010101010101010101010101010101"; - // NetworkId::Any - const account20NetworkId = "00"; - - const multilocation: [number, any[]] = - // Destination as multilocation - [ - // one parent - 1, - // X2(Parachain(2000), AccountId32(account32Address)) - [ - x2_parachain_asset_enum_selector + x2_parachain_id, - account20EnumSelector + account20Address + account20NetworkId, - ], - ]; - - const { descendOriginAddress } = descendOriginFromAddress20(context); - expect( - ( - (await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "multilocationToAddress", - args: [multilocation], - })) as any - ).toLowerCase() - ).toBe(descendOriginAddress); - }, - }); - - it({ - id: "T04", - title: "allows to retrieve weight of message", - test: async function () { - const message = { - V2: [ - { - ClearOrigin: null, - }, - ], - }; - const xcm = context.polkadotJs().createType("VersionedXcm", message); - expect( - (await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "weightMessage", - args: [xcm.toHex()], - })) >= - (CLEAR_ORIGIN_WEIGHT * 90n) / 100n - ).to.be.true; - - expect( - (await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "weightMessage", - args: [xcm.toHex()], - })) <= - (CLEAR_ORIGIN_WEIGHT * 110n) / 100n - ).to.be.true; - }, - }); - - it({ - id: "T05", - title: "allows to retrieve units per second for an asset", - test: async function () { - // Junction::PalletInstance(3) - const x2_pallet_instance_enum_selector = "0x04"; - const x2_instance = "0A"; - - // This represents X1(PalletInstance(3))) - - // This multilocation represents our native token - const asset = [ - // zero parents - 0, - // X1(PalletInstance) - // PalletInstance: Selector (04) + palconst instance 1 byte (03) - [x2_pallet_instance_enum_selector + x2_instance], - ]; - - const baseWeight = extractWeight( - context.polkadotJs().consts.system.blockWeights.perClass.normal.baseExtrinsic - ).toBigInt(); - - const expectedUnitsPerSecond = ((1_000_000_000_000n * 1_000_000_000n) / baseWeight) * 1_000n; - - expect( - await context.readContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "getUnitsPerSecond", - args: [asset], - }) - ).to.equal(expectedUnitsPerSecond); - }, - }); - - it({ - id: "T06", - title: "allows to execute a custom xcm message", - test: async function () { - const random = generateKeyringPair(); - - const transferCall = context.polkadotJs().tx.balances.transferAllowDeath(random.address, 1n * GLMR); - const transferCallEncoded = transferCall?.method.toHex(); - - const xcmMessage = { - V2: [ - { - Transact: { - originType: "SovereignAccount", - requireWeightAtMost: 525_000_000n + 100_000_000n, // 21_000 gas limit - call: { - encoded: transferCallEncoded, - }, - }, - }, - ], - }; - - const receivedMessage: XcmVersionedXcm = context - .polkadotJs() - .createType("XcmVersionedXcm", xcmMessage) as any; - - const rawTxn = await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmExecute", - args: [receivedMessage.toHex(), 2_000_000_000n], - rawTxOnly: true, - }); - - const { result } = await context.createBlock(rawTxn); - expectEVMResult(result!.events, "Succeed"); - - const testAccountBalance = ( - await context.polkadotJs().query.system.account(random.address) - ).data.free.toBigInt(); - - expect(testAccountBalance).to.eq(1n * GLMR); - }, - }); - - // it({ - // id: "T07", - // title: "allows to execute a custom xcm evm to evm, but reentrancy forbids", - // test: async function () { - // const random = generateKeyringPair(); - - // const ethTx = { - // V1: { - // gas_limit: 21000, - // fee_payment: { - // Auto: { - // Low: null, - // }, - // }, - // action: { - // Call: random.address, - // }, - // value: 1n * GLMR, - // input: [], - // access_list: null, - // }, - // }; - // const transferCall = context.polkadotJs().tx.ethereumXcm.transact(ethTx as any); - // const transferCallEncoded = transferCall?.method.toHex(); - - // const xcmMessage = { - // V2: [ - // { - // Transact: { - // originType: "SovereignAccount", - // requireWeightAtMost: 525_000_000n + 25_000_000n, // 21_000 gas limit - // call: { - // encoded: transferCallEncoded, - // }, - // }, - // }, - // ], - // }; - - // const receivedMessage: XcmVersionedXcm = context - // .polkadotJs() - // .createType("XcmVersionedXcm", xcmMessage); - - // const rawTxn = await context.writeContract!({ - // contractAddress: XCM_UTILS_ADDRESS, - // contractName: "XcmUtils", - // functionName: "xcmExecute", - // args: [receivedMessage.toHex(), 4_000_000_000], - // rawTxOnly: true, - // gas: 5_000_000n, - // }); - - // const { result } = await context.createBlock(rawTxn); - // expectEVMResult(result!.events, "Succeed"); - - // // Tokens transferred - // const testAccountBalance = ( - // await context.polkadotJs().query.system.account(random.address) - // ).data.free.toBigInt(); - - // expect(testAccountBalance, "Transfer went through, possible EVM re-entrancy").to.eq(0n); - // }, - // }); - - it({ - id: "T08", - title: "does not allow to self-send a custom xcm message", - test: async function () { - const ownParaId = (await context.polkadotJs().query.parachainInfo.parachainId()) as any; - const x1_parachain_asset_enum_selector = "0x00"; - const x1_parachain_id = ownParaId.toHex().slice(2); - - // Sending it here - // { parents:0, Here} - const destHere: [number, any[]] = [ - // one parents - 0, - // Here - [], - ]; - - // Sending it with the representation of the para as seen by the relay - // { parents:0, parachain(0)} - const destParaRelayView: [number, any[]] = [ - // one parents - 0, - // Parachain(0) - [x1_parachain_asset_enum_selector + x1_parachain_id], - ]; - - // Sending it with the representation of the para as seen by other paras - // { parents:1, parachain(0)} - const destParaOtherParaView: [number, any[]] = [ - // one parents - 1, - // Parachain(0) - [x1_parachain_asset_enum_selector + x1_parachain_id], - ]; - - const xcmMessage = { - V2: [ - { - ClearOrigin: null, - }, - ], - }; - - const sentMessage: XcmVersionedXcm = context - .polkadotJs() - .createType("XcmVersionedXcm", xcmMessage) as any; - - // Try sending it with local view - const localRawTxn = await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destHere, sentMessage.toHex()], - rawTxOnly: true, - gas: 1_000_000n, - }); - - const { result: localResult } = await context.createBlock(localRawTxn); - expectEVMResult(localResult!.events, "Revert"); - expect( - async () => - await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destHere, sentMessage.toHex()], - }) - ).rejects.toThrowError( - "Dispatched call failed with error: Module(ModuleError " + - '{ index: 73, error: [0, 0, 0, 0], message: Some("Unreachable") })' - ); - - const paraRawTxn = await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destParaRelayView, sentMessage.toHex()], - rawTxOnly: true, - gas: 1_000_000n, - }); - - const { result: paraResult } = await context.createBlock(paraRawTxn); - - expectEVMResult(paraResult!.events, "Revert"); - expect( - async () => - await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destParaRelayView, sentMessage.toHex()], - }) - ).rejects.toThrowError( - "Dispatched call failed with error: Module(ModuleError " + - '{ index: 73, error: [0, 0, 0, 0], message: Some("Unreachable") })' - ); - - const paraRawTxn2 = await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destParaOtherParaView, sentMessage.toHex()], - rawTxOnly: true, - gas: 1_000_000n, - }); - - const { result: paraResult2 } = await context.createBlock(paraRawTxn2); - - expectEVMResult(paraResult2!.events, "Revert"); - expect( - async () => - await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [destParaOtherParaView, sentMessage.toHex()], - }) - ).rejects.toThrowError( - "Dispatched call failed with error: Module(ModuleError " + - '{ index: 73, error: [1, 0, 0, 0], message: Some("SendFailure") })' - ); - }, - }); - - it({ - id: "T09", - title: "allows to send a custom xcm message", - test: async function () { - // Sending it to the relay - // { parents:1, Here} - const dest = [ - // one parents - 1, - // Here - [], - ]; - - const xcmMessage = { - V2: [ - { - ClearOrigin: null, - }, - ], - }; - - const sentMessage: XcmVersionedXcm = context.polkadotJs().createType("XcmVersionedXcm", xcmMessage); - - const rawTxn = await context.writeContract!({ - contractAddress: XCM_UTILS_ADDRESS, - contractName: "XcmUtils", - functionName: "xcmSend", - args: [dest, sentMessage.toHex()], - rawTxOnly: true, - gas: 1_000_000n, - }); - - const { result } = await context.createBlock(rawTxn); - expectEVMResult(result!.events, "Succeed"); - }, - }); - }, -}); diff --git a/test/suites/dev-frontier-template/weights/test_set_latest_authorities_data.ts b/test/suites/dev-frontier-template/weights/test_set_latest_authorities_data.ts deleted file mode 100644 index fe1c9b6..0000000 --- a/test/suites/dev-frontier-template/weights/test_set_latest_authorities_data.ts +++ /dev/null @@ -1,52 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect } from "@moonwall/cli"; -import { FrameSupportDispatchDispatchInfo } from "@polkadot/types/lookup"; -import { BN } from "@polkadot/util"; - -describeSuite({ - id: "DF1201", - title: "On set latest authorities data weight check", - foundationMethods: "dev", - testCases: ({ it, context }) => { - it({ - id: "T01", - title: "Weight should be match expected", - test: async function () { - const expectedRefTime = new BN(428_360_000); - const expectedProofSize = new BN(1626); - - await context.createBlock(); - - const block = await context.polkadotJs().rpc.chain.getBlock(); - const allRecords = await context.polkadotJs().query.system.events(); - - // Get index of authoritiesNoting.setLatestAuthoritiesData - const setAuthorIntrinsicIndex = block.block.extrinsics.reduce( - (filtered, extrinsic, idx) => - filtered.concat( - extrinsic.method.section === "authoritiesNoting" && - extrinsic.method.method === "setLatestAuthoritiesData" - ? idx - : [] - ), - [] - ); - - expect(setAuthorIntrinsicIndex.length).toBe(1); - - const events = allRecords.filter( - ({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(setAuthorIntrinsicIndex[0]) - ); - - const usedWeight = (events.at(-1).event.data[0] as unknown as FrameSupportDispatchDispatchInfo).weight; - const refTime = usedWeight.refTime.toBn(); - const proofSize = usedWeight.proofSize.toBn(); - - // Allow 10% variance - expect(refTime.gte(expectedRefTime.divn(1.1)) && refTime.lte(expectedRefTime.muln(1.1))).to.be.true; - expect(proofSize.gte(expectedProofSize.divn(1.1)) && proofSize.lte(expectedProofSize.muln(1.1))).to.be - .true; - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/balances-consumers/test_balances_consumers.ts b/test/suites/dev-tanssi/balances-consumers/test_balances_consumers.ts deleted file mode 100644 index 1110f56..0000000 --- a/test/suites/dev-tanssi/balances-consumers/test_balances_consumers.ts +++ /dev/null @@ -1,101 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll, isExtrinsicSuccessful } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; -import { KeyringPair, generateKeyringPair } from "@moonwall/util"; - -describeSuite({ - id: "DT0101", - title: "Consumers balances holds test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that authority assignment is correct on genesis", - test: async function () { - const randomAccount = generateKeyringPair("sr25519"); - - const tx = polkadotJs.tx.balances.transferAllowDeath(randomAccount.address, 2n * 10000000000000000n); - await context.createBlock([await tx.signAsync(alice)]); - expect(isExtrinsicSuccessful(await polkadotJs.query.system.events())).to.be.true; - - const consumersAfterTx1 = await polkadotJs.query.system.account(randomAccount.address); - expect(consumersAfterTx1.consumers.toNumber()).to.be.equal(0); - - // Register keys in pallet_session - const newKey = await polkadotJs.rpc.author.rotateKeys(); - const tx2 = polkadotJs.tx.session.setKeys(newKey, []); - await context.createBlock([await tx2.signAsync(randomAccount)]); - expect(isExtrinsicSuccessful(await polkadotJs.query.system.events())).to.be.true; - const consumersAfterTx2 = await polkadotJs.query.system.account(randomAccount.address); - expect(consumersAfterTx2.consumers.toNumber()).to.be.equal(1); - - // Self-delegate in pallet_pooled_staking - const tx3 = polkadotJs.tx.pooledStaking.requestDelegate( - randomAccount.address, - "ManualRewards", - 10000000000000000n - ); - - await context.createBlock([await tx3.signAsync(randomAccount)]); - const consumersAfterTx3 = await polkadotJs.query.system.account(randomAccount.address); - // We created a second consumer, which in this case is pooledStaking - expect(consumersAfterTx3.consumers.toNumber()).to.be.equal(2); - - await jumpSessions(context, 2); - - // All pending operations where in session 0 - const tx4 = polkadotJs.tx.pooledStaking.executePendingOperations([ - { - delegator: randomAccount.address, - operation: { - JoiningManualRewards: { - candidate: randomAccount.address, - at: 0, - }, - }, - }, - ]); - await context.createBlock([await tx4.signAsync(randomAccount)]); - - const consumersAfterTx4 = await polkadotJs.query.system.account(randomAccount.address); - expect(consumersAfterTx4.consumers.toNumber()).to.be.equal(2); - - // Self-delegate in pallet_pooled_staking - const tx5 = polkadotJs.tx.pooledStaking.requestUndelegate(randomAccount.address, "ManualRewards", { - Stake: 10000000000000000n, - }); - await context.createBlock([await tx5.signAsync(randomAccount)]); - const consumersAfterTx5 = await polkadotJs.query.system.account(randomAccount.address); - expect(consumersAfterTx5.consumers.toNumber()).to.be.equal(2); - - await jumpSessions(context, 2); - - // Leaving pending operations where in session 2 - const tx6 = polkadotJs.tx.pooledStaking.executePendingOperations([ - { - delegator: randomAccount.address, - operation: { - Leaving: { - candidate: randomAccount.address, - at: 2, - }, - }, - }, - ]); - await context.createBlock([await tx6.signAsync(randomAccount)]); - // It is only after we leave that the consumer is cleaned - const consumersAfterTx6 = await polkadotJs.query.system.account(randomAccount.address); - expect(consumersAfterTx6.consumers.toNumber()).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/proxy/test-session-keys-management.ts b/test/suites/dev-tanssi/proxy/test-session-keys-management.ts deleted file mode 100644 index 8a46506..0000000 --- a/test/suites/dev-tanssi/proxy/test-session-keys-management.ts +++ /dev/null @@ -1,77 +0,0 @@ -import "@polkadot/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "DT0601", - title: "Proxy test suite - ProxyType::SessionKeyManagement", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - const sessionKeysManagementProxy = 8; - const someKeys = "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF"; - - beforeAll(() => { - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Delegate account can manage keys", - test: async function () { - const delegator_alice = context.keyring.alice; - const delegate_charlie = context.keyring.charlie; - - let tx = polkadotJs.tx.proxy.addProxy(delegate_charlie.address, sessionKeysManagementProxy, 0); - await context.createBlock([await tx.signAsync(delegator_alice)]); - - let events = await polkadotJs.query.system.events(); - let ev1 = events.filter((a) => { - return a.event.method == "ProxyAdded"; - }); - expect(ev1.length).to.be.equal(1); - - await context.createBlock(); - - tx = polkadotJs.tx.proxy.proxy( - delegator_alice.address, - null, - polkadotJs.tx.session.setKeys(someKeys, "0x") - ); - await context.createBlock([await tx.signAsync(delegate_charlie)]); - events = await polkadotJs.query.system.events(); - ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(1); - expect(ev1[0].event.data[0].toString()).to.be.eq("Ok"); - }, - }); - - it({ - id: "E02", - title: "Non-Delegate account fails to manage other account's keys", - test: async function () { - const alice = context.keyring.alice; - const non_delegate_dave = context.keyring.dave; - - await context.createBlock(); - - const tx = polkadotJs.tx.proxy.proxy( - alice.address, - null, - polkadotJs.tx.session.setKeys( - "0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF", - "0x" - ) - ); - await context.createBlock([await tx.signAsync(non_delegate_dave)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "ProxyExecuted"; - }); - expect(ev1.length).to.be.equal(0); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/session-keys/test_remove_session_key_invulnerables.ts b/test/suites/dev-tanssi/session-keys/test_remove_session_key_invulnerables.ts deleted file mode 100644 index 43f73e3..0000000 --- a/test/suites/dev-tanssi/session-keys/test_remove_session_key_invulnerables.ts +++ /dev/null @@ -1,59 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "DT0201", - title: "Removing session keys assignment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - bob = context.keyring.bob; - - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that removing a session key makes the key dissappear from eligibility", - test: async function () { - // Bob is an invulnerable, but the keys will be removed and we will see what happens - const bobKey = (await polkadotJs.query.session.nextKeys(bob.address)).toJSON().nimbus; - const aliceKey = (await polkadotJs.query.session.nextKeys(alice.address)).toJSON().nimbus; - // Bob's key should be an authority - const authoritiesGenesis = await polkadotJs.query.authorityAssignment.collatorContainerChain(0); - expect(authoritiesGenesis.toJSON()["containerChains"]["2000"]).toContainEqual(bobKey); - - // now purge keys - await polkadotJs.tx.session.purgeKeys().signAndSend(bob); - - // Let's jump two sessions - await jumpSessions(context, 2); - - // Bob's key should no longer be an authority - const currentSession = await polkadotJs.query.session.currentIndex(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(currentSession); - // Bob is no longer an authority, but alice is - expect(authorities.toJSON().orchestratorChain).not.toContainEqual(bobKey); - expect(authorities.toJSON().orchestratorChain).toContainEqual(aliceKey); - expect(authorities.toJSON()["containerChains"]["2000"]).not.toContainEqual(bobKey); - expect(authorities.toJSON()["containerChains"]["2001"]).not.toContainEqual(bobKey); - - // But not only authority assignment, collator assignment should also not have bob - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - // Bob is no longer an assigned collator, but alice is - expect(collators.toJSON().orchestratorChain).not.toContainEqual(bob.address); - expect(collators.toJSON().orchestratorChain).toContainEqual(alice.address); - expect(collators.toJSON()["containerChains"]["2000"]).not.toContainEqual(bob.address); - expect(collators.toJSON()["containerChains"]["2001"]).not.toContainEqual(bob.address); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/session-keys/test_remove_session_key_staking.ts b/test/suites/dev-tanssi/session-keys/test_remove_session_key_staking.ts deleted file mode 100644 index f32dca2..0000000 --- a/test/suites/dev-tanssi/session-keys/test_remove_session_key_staking.ts +++ /dev/null @@ -1,93 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; -import { DANCE } from "util/constants"; -import { createBlockAndRemoveInvulnerables } from "util/invulnerables"; - -describeSuite({ - id: "DT0202", - title: "Removing session keys assignment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - polkadotJs = context.polkadotJs(); - - // We need to remove all the invulnerables and add to staking - // Remove all invulnerables, otherwise they have priority - await createBlockAndRemoveInvulnerables(context, alice); - - const invulnerables = await polkadotJs.query.invulnerables.invulnerables(); - expect(invulnerables.length).to.be.equal(0); - - // We delegate with manual rewards to make sure the candidate does not update position - // We also need charlie to join staking because the settings for the dev environment are 1 collator for - // tanssi and 2 collators for containers, so we need 3 collators for bob to be assigned. - let aliceNonce = (await polkadotJs.rpc.system.accountNextIndex(alice.address)).toNumber(); - let bobNonce = (await polkadotJs.rpc.system.accountNextIndex(bob.address)).toNumber(); - - await context.createBlock([ - await polkadotJs.tx.pooledStaking - .requestDelegate(alice.address, "ManualRewards", 10000n * DANCE) - .signAsync(context.keyring.alice, { nonce: aliceNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(bob.address, "ManualRewards", 10000n * DANCE) - .signAsync(context.keyring.bob, { nonce: bobNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(charlie.address, "ManualRewards", 10000n * DANCE) - .signAsync(context.keyring.charlie, { nonce: 0 }), - ]); - // At least 2 sessions for the change to have effect - await jumpSessions(context, 2); - }); - - it({ - id: "E01", - title: "Checking that removing a session key makes the key dissappear from eligibility", - test: async function () { - // Bob is a staking candidate, but the keys will be removed and we will see what happens - const bobKey = (await polkadotJs.query.session.nextKeys(bob.address)).toJSON().nimbus; - const aliceKey = (await polkadotJs.query.session.nextKeys(alice.address)).toJSON().nimbus; - const currentSessionBeforePurge = await polkadotJs.query.session.currentIndex(); - - // Bob's key should be an authority - const authoritiesBeforePurge = await polkadotJs.query.authorityAssignment.collatorContainerChain( - currentSessionBeforePurge - ); - expect(authoritiesBeforePurge.toJSON()["containerChains"]["2000"]).toContainEqual(bobKey); - - // now purge keys - await polkadotJs.tx.session.purgeKeys().signAndSend(bob); - - // Let's jump two sessions - await jumpSessions(context, 2); - - // Bob's key should no longer be an authority - const currentSession = await polkadotJs.query.session.currentIndex(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(currentSession); - // Bob is no longer an authority, but alice is - expect(authorities.toJSON().orchestratorChain).not.toContainEqual(bobKey); - expect(authorities.toJSON().orchestratorChain).toContainEqual(aliceKey); - expect(authorities.toJSON()["containerChains"]["2000"]).not.toContainEqual(bobKey); - expect(authorities.toJSON()["containerChains"]["2001"]).not.toContainEqual(bobKey); - - // But not only authority assignment, collator assignment should also not have bob - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - // Bob is no longer an assigned collator, but alice is - expect(collators.toJSON().orchestratorChain).not.toContainEqual(bob.address); - expect(collators.toJSON().orchestratorChain).toContainEqual(alice.address); - expect(collators.toJSON()["containerChains"]["2000"]).not.toContainEqual(bob.address); - expect(collators.toJSON()["containerChains"]["2001"]).not.toContainEqual(bob.address); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/session-keys/test_session_keys.ts b/test/suites/dev-tanssi/session-keys/test_session_keys.ts deleted file mode 100644 index 4b2906d..0000000 --- a/test/suites/dev-tanssi/session-keys/test_session_keys.ts +++ /dev/null @@ -1,84 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; -import { u8aToHex } from "@polkadot/util"; - -describeSuite({ - id: "DT0204", - title: "Session keys test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that session keys are correct on genesis", - test: async function () { - // for session 0 - const keys = await polkadotJs.query.authorityMapping.authorityIdMapping(0); - // TODO: fix once we have types - expect(keys.toJSON()[u8aToHex(alice.publicKey)]).to.be.eq(alice.address); - expect(keys.toJSON()[u8aToHex(bob.publicKey)]).to.be.eq(bob.address); - - // Check authorities are correct - const sessionIndex = (await polkadotJs.query.session.currentIndex()).toNumber(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(sessionIndex); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain).to.deep.equal([u8aToHex(alice.publicKey)]); - }, - }); - - it({ - id: "E02", - title: "Checking that session keys can be changed and are reflected", - test: async function () { - const newKey = await polkadotJs.rpc.author.rotateKeys(); - await polkadotJs.tx.session.setKeys(newKey, []).signAndSend(alice); - - await context.createBlock(); - // Check key is reflected in next key - // But its not yet in queued - const queuedKeys = await polkadotJs.query.session.queuedKeys(); - const result = queuedKeys.filter((keyItem) => keyItem[1].nimbus == newKey); - expect(result).is.empty; - const nextKey = await polkadotJs.query.session.nextKeys(alice.address); - expect(u8aToHex(nextKey.unwrap().nimbus)).to.be.eq(u8aToHex(newKey)); - - // Let's jump one session - await jumpSessions(context, 1); - - // The key should be queued at this point, to be applied on the next session - const queuedKeysSession1 = await polkadotJs.query.session.queuedKeys(); - - const result1 = queuedKeysSession1.filter((keyItem) => u8aToHex(keyItem[1].nimbus) == u8aToHex(newKey)); - expect(result1.length).to.be.eq(1); - - // Let's jump one more session - await jumpSessions(context, 1); - - // The change should have been applied, and now both aura and authorityMapping should reflect - const keys = await polkadotJs.query.authorityMapping.authorityIdMapping(2); - // TODO: fix once we have types - expect(keys.toJSON()[u8aToHex(newKey)]).to.be.eq(alice.address); - - const sessionIndex = (await polkadotJs.query.session.currentIndex()).toNumber(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(sessionIndex); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain).to.deep.equal([u8aToHex(newKey)]); - - // AuthorityMapping should no-longer contain the session 0 keys - expect((await polkadotJs.query.authorityMapping.authorityIdMapping(0)).isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/session-keys/test_session_keys_assignment.ts b/test/suites/dev-tanssi/session-keys/test_session_keys_assignment.ts deleted file mode 100644 index 45c7434..0000000 --- a/test/suites/dev-tanssi/session-keys/test_session_keys_assignment.ts +++ /dev/null @@ -1,127 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; -import { u8aToHex } from "@polkadot/util"; - -describeSuite({ - id: "DT0203", - title: "Session keys assignment test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - let charlie: KeyringPair; - - beforeAll(() => { - alice = context.keyring.alice; - bob = context.keyring.bob; - charlie = context.keyring.charlie; - - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Checking that authority assignment is correct on genesis", - test: async function () { - // for session 0 - // TODO: fix once we have types - const assignment0 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(0)) - .unwrap() - .toJSON(); - const assignment1 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(1)) - .unwrap() - .toJSON(); - - expect(assignment0.orchestratorChain).to.deep.equal([u8aToHex(alice.publicKey)]); - expect(assignment0.containerChains).to.deep.equal({ - 2000: [u8aToHex(bob.publicKey), u8aToHex(charlie.publicKey)], - 2001: [], - }); - - // Session 1 is the same as session 0 - expect(assignment0).to.deep.equal(assignment1); - // Session 2 is empty - expect((await polkadotJs.query.authorityAssignment.collatorContainerChain(2)).isNone).to.be.true; - - // Check authorities are correct - const sessionIndex = (await polkadotJs.query.session.currentIndex()).toNumber(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(sessionIndex); - expect(authorities.toJSON().orchestratorChain).to.deep.equal([u8aToHex(alice.publicKey)]); - }, - }); - - it({ - id: "E02", - title: "Checking that session keys can be changed and are reflected", - test: async function () { - const newKey = await polkadotJs.rpc.author.rotateKeys(); - await polkadotJs.tx.session.setKeys(newKey, []).signAndSend(alice); - - await context.createBlock(); - // Check key is reflected in next key - // But its not yet in queued - const queuedKeys = await polkadotJs.query.session.queuedKeys(); - const result = queuedKeys.filter((keyItem) => keyItem[1].nimbus == newKey); - expect(result).is.empty; - const nextKey = await polkadotJs.query.session.nextKeys(alice.address); - expect(u8aToHex(nextKey.unwrap().nimbus)).to.be.eq(u8aToHex(newKey)); - - // TODO: fix once we have types - const initial_assignment1 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(1)) - .unwrap() - .toJSON(); - - // Let's jump one session - await jumpSessions(context, 1); - - // The key should be queued at this point, to be applied on the next session - const queuedKeysSession1 = await polkadotJs.query.session.queuedKeys(); - - const result1 = queuedKeysSession1.filter((keyItem) => u8aToHex(keyItem[1].nimbus) == u8aToHex(newKey)); - expect(result1.length).to.be.eq(1); - - expect((await polkadotJs.query.authorityAssignment.collatorContainerChain(0)).isNone).to.be.true; - // TODO: fix once we have types - const assignment1 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(1)) - .unwrap() - .toJSON(); - const assignment2 = (await polkadotJs.query.authorityAssignment.collatorContainerChain(2)) - .unwrap() - .toJSON(); - expect((await polkadotJs.query.authorityAssignment.collatorContainerChain(3)).isNone).to.be.true; - - // Assignment for session 1 did not change - expect(assignment1).to.deep.equal(initial_assignment1); - - // Assignment for session 2 uses the new keys - expect(assignment2.orchestratorChain).to.deep.equal([ - // This is alice's new key - u8aToHex(newKey), - ]); - expect(assignment2.containerChains).to.deep.equal({ - 2000: [u8aToHex(bob.publicKey), u8aToHex(charlie.publicKey)], - 2001: [], - }); - - // Let's jump one more session - await jumpSessions(context, 1); - - // The change should have been applied, and now both aura and authorityMapping should reflect - const keys = await polkadotJs.query.authorityMapping.authorityIdMapping(2); - // TODO: fix once we have types - expect(keys.toJSON()[u8aToHex(newKey)]).to.be.eq(alice.address); - - const sessionIndex = (await polkadotJs.query.session.currentIndex()).toNumber(); - const authorities = await polkadotJs.query.authorityAssignment.collatorContainerChain(sessionIndex); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain).to.deep.equal([u8aToHex(newKey)]); - // AuthorityMapping should no-longer contain the session 1 - expect((await polkadotJs.query.authorityAssignment.collatorContainerChain(1)).isNone).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/staking/test_staking_join.ts b/test/suites/dev-tanssi/staking/test_staking_join.ts deleted file mode 100644 index 3d919a3..0000000 --- a/test/suites/dev-tanssi/staking/test_staking_join.ts +++ /dev/null @@ -1,100 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { numberToHex } from "@polkadot/util"; -import { jumpToBlock } from "../../../util/block"; - -describeSuite({ - id: "DT0301", - title: "Fee test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - // TODO: don't hardcode the period here - const sessionPeriod = 10; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Cannot execute stake join before 2 sessions", - test: async function () { - const initialSession = 0; - const tx = polkadotJs.tx.pooledStaking.requestDelegate( - alice.address, - "AutoCompounding", - 10000000000000000n - ); - await context.createBlock([await tx.signAsync(alice)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "IncreasedStake"; - }); - expect(ev1.length).to.be.equal(1); - const ev2 = events.filter((a) => { - return a.event.method == "UpdatedCandidatePosition"; - }); - expect(ev2.length).to.be.equal(1); - const ev3 = events.filter((a) => { - return a.event.method == "RequestedDelegate"; - }); - expect(ev3.length).to.be.equal(1); - - const stakingCandidates = await polkadotJs.query.pooledStaking.sortedEligibleCandidates(); - expect(stakingCandidates.toJSON()).to.deep.equal([ - { - candidate: alice.address, - stake: numberToHex(10000000000000000, 128), - }, - ]); - - // Ensure that executePendingOperations can only be executed after 2 sessions, meaning that if the - // current session number is 0, we must wait until after the NewSession event for session 2. - // Jump to block 9 - await jumpToBlock(context, 2 * sessionPeriod - 1); - const tx2 = polkadotJs.tx.pooledStaking.executePendingOperations([ - { - delegator: alice.address, - operation: { - JoiningAutoCompounding: { - candidate: alice.address, - at: initialSession, - }, - }, - }, - ]); - - await context.createBlock([await tx2.signAsync(bob)]); - // executePendingOperations failed - const events2 = await polkadotJs.query.system.events(); - const ev4 = events2.filter((a) => { - return a.event.method == "ExtrinsicFailed"; - }); - expect(ev4.length).to.be.equal(1); - - // We are now in block 10 but this block cannot include any transactions, so go to 11 - await context.createBlock(); - - // Now the executePendingOperations should succeed - await context.createBlock([await tx2.signAsync(bob)]); - - const events3 = await polkadotJs.query.system.events(); - const ev5 = events3.filter((a) => { - return a.event.method == "StakedAutoCompounding"; - }); - expect(ev5.length).to.be.equal(1); - const ev6 = events3.filter((a) => { - return a.event.method == "ExecutedDelegate"; - }); - expect(ev6.length).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/staking/test_staking_rewards_balanced.ts b/test/suites/dev-tanssi/staking/test_staking_rewards_balanced.ts deleted file mode 100644 index 597b5bd..0000000 --- a/test/suites/dev-tanssi/staking/test_staking_rewards_balanced.ts +++ /dev/null @@ -1,182 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { - fetchIssuance, - fetchRewardAuthorOrchestrator, - filterRewardStakingCollator, - filterRewardStakingDelegators, - jumpSessions, -} from "util/block"; -import { DANCE } from "util/constants"; -import { createBlockAndRemoveInvulnerables } from "util/invulnerables"; - -describeSuite({ - id: "DT0302", - title: "Staking candidate reward test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - bob = context.keyring.bob; - - // We need to remove all the invulnerables and add to staking - // Remove all invulnerables, otherwise they have priority - - await createBlockAndRemoveInvulnerables(context, alice); - - const invulnerables = await polkadotJs.query.invulnerables.invulnerables(); - expect(invulnerables.length).to.be.equal(0); - - // We will make each of them self-delegate the min amount, while - // we will make each of them delegate the other with 50% - // Alice autocompounding, Bob will be manual - let aliceNonce = (await polkadotJs.rpc.system.accountNextIndex(alice.address)).toNumber(); - let bobNonce = (await polkadotJs.rpc.system.accountNextIndex(bob.address)).toNumber(); - - await context.createBlock([ - await polkadotJs.tx.pooledStaking - .requestDelegate(alice.address, "AutoCompounding", 10000n * DANCE) - .signAsync(context.keyring.alice, { nonce: aliceNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(alice.address, "ManualRewards", 10000n * DANCE) - .signAsync(context.keyring.bob, { nonce: bobNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(bob.address, "AutoCompounding", 10000n * DANCE) - .signAsync(context.keyring.alice, { nonce: aliceNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(bob.address, "ManualRewards", 10000n * DANCE) - .signAsync(context.keyring.bob, { nonce: bobNonce++ }), - ]); - // At least 2 sessions for the change to have effect - await jumpSessions(context, 2); - }); - it({ - id: "E01", - title: "Alice should receive rewards through staking now", - test: async function () { - // 70% is distributed across all rewards - // But we have 2 container chains, so it should get 1/3 of this - // Since it is an invulnerable, it receives all payment - const events = await polkadotJs.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - const chainRewards = (issuance * 7n) / 10n; - const rounding = chainRewards % 3n > 0 ? 1n : 0n; - const expectedOrchestratorReward = chainRewards - (chainRewards * 2n) / 3n - rounding; - const reward = await fetchRewardAuthorOrchestrator(events); - const stakingRewardedCollator = await filterRewardStakingCollator(events, reward.accountId.toString()); - const stakingRewardedDelegators = await filterRewardStakingDelegators( - events, - reward.accountId.toString() - ); - - // How much should the author have gotten? - // For now everything as we did not execute the pending operations - expect(reward.balance.toBigInt()).toBeGreaterThanOrEqual(expectedOrchestratorReward - 1n); - expect(reward.balance.toBigInt()).toBeLessThanOrEqual(expectedOrchestratorReward + 1n); - expect(stakingRewardedCollator.manualRewards).to.equal(reward.balance.toBigInt()); - expect(stakingRewardedCollator.autoCompoundingRewards).to.equal(0n); - expect(stakingRewardedDelegators.manualRewards).to.equal(0n); - expect(stakingRewardedDelegators.autoCompoundingRewards).to.equal(0n); - }, - }); - - it({ - id: "E02", - title: "Alice should receive shared rewards with delegators through staking now", - test: async function () { - // All pending operations where in session 0 - await context.createBlock([ - await polkadotJs.tx.pooledStaking - .executePendingOperations([ - { - delegator: alice.address, - operation: { - JoiningAutoCompounding: { - candidate: alice.address, - at: 0, - }, - }, - }, - { - delegator: bob.address, - operation: { - JoiningManualRewards: { - candidate: alice.address, - at: 0, - }, - }, - }, - ]) - .signAsync(context.keyring.alice), - ]); - - const totalBacked = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "CandidateTotalStake") - ).toBigInt(); - const totalManual = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "ManualRewardsSharesTotalStaked") - ).toBigInt(); - const totalManualShareSupply = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "ManualRewardsSharesSupply") - ).toBigInt(); - - // We create one more block - await context.createBlock(); - const events = await polkadotJs.query.system.events(); - const reward = await fetchRewardAuthorOrchestrator(events); - - // 20% collator percentage - const collatorPercentage = (20n * reward.balance.toBigInt()) / 100n; - - // Rounding - const delegatorRewards = reward.balance.toBigInt() - collatorPercentage; - - // First, manual rewards - const delegatorManualRewards = (totalManual * delegatorRewards) / totalBacked; - // Check its - const delegatorManualRewardsPerShare = delegatorManualRewards / totalManualShareSupply; - const realDistributedManualDelegatorRewards = delegatorManualRewardsPerShare * totalManualShareSupply; - - // Second, autocompounding - const delegatorsAutoCompoundRewards = delegatorRewards - realDistributedManualDelegatorRewards; - - const stakingRewardedCollator = await filterRewardStakingCollator(events, reward.accountId.toString()); - const stakingRewardedDelegators = await filterRewardStakingDelegators( - events, - reward.accountId.toString() - ); - - // Test ranges, as we can have rounding errors for Perbill manipulation - expect(stakingRewardedDelegators.manualRewards).toBeGreaterThanOrEqual( - realDistributedManualDelegatorRewards - 1n - ); - expect(stakingRewardedDelegators.manualRewards).toBeLessThanOrEqual( - realDistributedManualDelegatorRewards + 1n - ); - expect(stakingRewardedDelegators.autoCompoundingRewards).toBeGreaterThanOrEqual( - delegatorsAutoCompoundRewards - 1n - ); - expect(stakingRewardedDelegators.autoCompoundingRewards).toBeLessThanOrEqual( - delegatorsAutoCompoundRewards + 1n - ); - - // TODO: test better what goes into auto and what goes into manual for collator - const delegatorDust = - delegatorRewards - realDistributedManualDelegatorRewards - delegatorsAutoCompoundRewards; - expect( - stakingRewardedCollator.manualRewards + stakingRewardedCollator.autoCompoundingRewards - ).toBeGreaterThanOrEqual(collatorPercentage + delegatorDust - 1n); - expect( - stakingRewardedCollator.manualRewards + stakingRewardedCollator.autoCompoundingRewards - ).toBeLessThanOrEqual(collatorPercentage + delegatorDust + 1n); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/staking/test_staking_rewards_non_balanced.ts b/test/suites/dev-tanssi/staking/test_staking_rewards_non_balanced.ts deleted file mode 100644 index 50d9092..0000000 --- a/test/suites/dev-tanssi/staking/test_staking_rewards_non_balanced.ts +++ /dev/null @@ -1,183 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { KeyringPair } from "@moonwall/util"; -import { - fetchIssuance, - fetchRewardAuthorOrchestrator, - filterRewardStakingCollator, - filterRewardStakingDelegators, - jumpSessions, -} from "util/block"; -import { DANCE } from "util/constants"; -import { createBlockAndRemoveInvulnerables } from "util/invulnerables"; - -describeSuite({ - id: "DT0303", - title: "Staking candidate reward test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - - beforeAll(async () => { - polkadotJs = context.polkadotJs(); - alice = context.keyring.alice; - bob = context.keyring.bob; - - // We need to remove all the invulnerables and add to staking - // Remove all invulnerables, otherwise they have priority - await createBlockAndRemoveInvulnerables(context, alice); - - const invulnerables = await polkadotJs.query.invulnerables.invulnerables(); - expect(invulnerables.length).to.be.equal(0); - - // We will make each of them self-delegate the min amount, while - // we will make each of them delegate the other with 50% - // Alice autocompounding, Bob will be manual - let aliceNonce = (await polkadotJs.rpc.system.accountNextIndex(alice.address)).toNumber(); - let bobNonce = (await polkadotJs.rpc.system.accountNextIndex(bob.address)).toNumber(); - - await context.createBlock([ - await polkadotJs.tx.pooledStaking - .requestDelegate(alice.address, "AutoCompounding", 18000n * DANCE) - .signAsync(context.keyring.alice, { nonce: aliceNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(alice.address, "ManualRewards", 2000n * DANCE) - .signAsync(context.keyring.bob, { nonce: bobNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(bob.address, "AutoCompounding", 18000n * DANCE) - .signAsync(context.keyring.alice, { nonce: aliceNonce++ }), - await polkadotJs.tx.pooledStaking - .requestDelegate(bob.address, "ManualRewards", 2000n * DANCE) - .signAsync(context.keyring.bob, { nonce: bobNonce++ }), - ]); - // At least 2 sessions for the change to have effect - await jumpSessions(context, 2); - }); - it({ - id: "E01", - title: "Alice should receive rewards through staking now", - test: async function () { - // 70% is distributed across all rewards - // But we have 2 container chains, so it should get 1/3 of this - // Since it is an invulnerable, it receives all payment - const events = await polkadotJs.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - const chainRewards = (issuance * 7n) / 10n; - const rounding = chainRewards % 3n > 0 ? 1n : 0n; - const expectedOrchestratorReward = chainRewards - (chainRewards * 2n) / 3n - rounding; - const reward = await fetchRewardAuthorOrchestrator(events); - const stakingRewardedCollator = await filterRewardStakingCollator(events, reward.accountId.toString()); - const stakingRewardedDelegators = await filterRewardStakingDelegators( - events, - reward.accountId.toString() - ); - - // How much should the author have gotten? - // For now everything as we did not execute the pending operations - // How much should the author have gotten? - // For now everything as we did not execute the pending operations - expect(reward.balance.toBigInt()).toBeGreaterThanOrEqual(expectedOrchestratorReward - 1n); - expect(reward.balance.toBigInt()).toBeLessThanOrEqual(expectedOrchestratorReward + 1n); - expect(stakingRewardedCollator.manualRewards).to.equal(reward.balance.toBigInt()); - expect(stakingRewardedCollator.autoCompoundingRewards).to.equal(0n); - expect(stakingRewardedDelegators.manualRewards).to.equal(0n); - expect(stakingRewardedDelegators.autoCompoundingRewards).to.equal(0n); - }, - }); - - it({ - id: "E02", - title: "Alice should receive shared rewards with delegators through staking now", - test: async function () { - // All pending operations where in session 0 - await context.createBlock([ - await polkadotJs.tx.pooledStaking - .executePendingOperations([ - { - delegator: alice.address, - operation: { - JoiningAutoCompounding: { - candidate: alice.address, - at: 0, - }, - }, - }, - { - delegator: bob.address, - operation: { - JoiningManualRewards: { - candidate: alice.address, - at: 0, - }, - }, - }, - ]) - .signAsync(context.keyring.alice), - ]); - - const totalBacked = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "CandidateTotalStake") - ).toBigInt(); - const totalManual = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "ManualRewardsSharesTotalStaked") - ).toBigInt(); - const totalManualShareSupply = ( - await polkadotJs.query.pooledStaking.pools(alice.address, "ManualRewardsSharesSupply") - ).toBigInt(); - - // We create one more block - await context.createBlock(); - const events = await polkadotJs.query.system.events(); - const reward = await fetchRewardAuthorOrchestrator(events); - - // 20% collator percentage - const collatorPercentage = reward.balance.toBigInt() - (80n * reward.balance.toBigInt()) / 100n; - - // Rounding - const delegatorRewards = reward.balance.toBigInt() - collatorPercentage; - - // First, manual rewards - const delegatorManualRewards = (totalManual * delegatorRewards) / totalBacked; - // Check its - const delegatorManualRewardsPerShare = delegatorManualRewards / totalManualShareSupply; - const realDistributedManualDelegatorRewards = delegatorManualRewardsPerShare * totalManualShareSupply; - - // Second, autocompounding - const delegatorsAutoCompoundRewards = delegatorRewards - realDistributedManualDelegatorRewards; - - const stakingRewardedCollator = await filterRewardStakingCollator(events, reward.accountId.toString()); - const stakingRewardedDelegators = await filterRewardStakingDelegators( - events, - reward.accountId.toString() - ); - - // Test ranges, as we can have rounding errors for Perbill manipulation - expect(stakingRewardedDelegators.manualRewards).toBeGreaterThanOrEqual( - realDistributedManualDelegatorRewards - 1n - ); - expect(stakingRewardedDelegators.manualRewards).toBeLessThanOrEqual( - realDistributedManualDelegatorRewards + 1n - ); - expect(stakingRewardedDelegators.autoCompoundingRewards).toBeGreaterThanOrEqual( - delegatorsAutoCompoundRewards - 1n - ); - expect(stakingRewardedDelegators.autoCompoundingRewards).toBeLessThanOrEqual( - delegatorsAutoCompoundRewards + 1n - ); - - // TODO: test better what goes into auto and what goes into manual for collator - const delegatorDust = - delegatorRewards - realDistributedManualDelegatorRewards - delegatorsAutoCompoundRewards; - expect( - stakingRewardedCollator.manualRewards + stakingRewardedCollator.autoCompoundingRewards - ).toBeGreaterThanOrEqual(collatorPercentage + delegatorDust - 1n); - expect( - stakingRewardedCollator.manualRewards + stakingRewardedCollator.autoCompoundingRewards - ).toBeLessThanOrEqual(collatorPercentage + delegatorDust + 1n); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/staking/test_staking_session.ts b/test/suites/dev-tanssi/staking/test_staking_session.ts deleted file mode 100644 index b61736d..0000000 --- a/test/suites/dev-tanssi/staking/test_staking_session.ts +++ /dev/null @@ -1,87 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect, isExtrinsicSuccessful } from "@moonwall/cli"; -import { KeyringPair, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { numberToHex } from "@polkadot/util"; -import { jumpToBlock } from "../../../util/block"; - -describeSuite({ - id: "DT0304", - title: "Fee test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - // TODO: don't hardcode the period here - const sessionPeriod = 10; - - beforeAll(async () => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "It takes 2 sessions to update pallet_session collators", - test: async function () { - const initialValidators = await polkadotJs.query.session.validators(); - - const randomAccount = generateKeyringPair("sr25519"); - - const tx = polkadotJs.tx.balances.transferAllowDeath(randomAccount.address, 2n * 10000000000000000n); - await context.createBlock([await tx.signAsync(alice)]); - expect(isExtrinsicSuccessful(await polkadotJs.query.system.events())).to.be.true; - - // Register keys in pallet_session - const newKey = await polkadotJs.rpc.author.rotateKeys(); - const tx2 = polkadotJs.tx.session.setKeys(newKey, []); - await context.createBlock([await tx2.signAsync(randomAccount)]); - expect(isExtrinsicSuccessful(await polkadotJs.query.system.events())).to.be.true; - - // Self-delegate in pallet_pooled_staking - const tx3 = polkadotJs.tx.pooledStaking.requestDelegate( - randomAccount.address, - "AutoCompounding", - 10000000000000000n - ); - await context.createBlock([await tx3.signAsync(randomAccount)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "IncreasedStake"; - }); - expect(ev1.length).to.be.equal(1); - const ev2 = events.filter((a) => { - return a.event.method == "UpdatedCandidatePosition"; - }); - expect(ev2.length).to.be.equal(1); - const ev3 = events.filter((a) => { - return a.event.method == "RequestedDelegate"; - }); - expect(ev3.length).to.be.equal(1); - - const stakingCandidates = await polkadotJs.query.pooledStaking.sortedEligibleCandidates(); - expect(stakingCandidates.toJSON()).to.deep.equal([ - { - candidate: randomAccount.address, - stake: numberToHex(10000000000000000, 128), - }, - ]); - - // Jump to block 9 - await jumpToBlock(context, 2 * sessionPeriod - 1); - - // Now pallet_session validators should not include the new one from staking - const validators9 = await polkadotJs.query.session.validators(); - expect(validators9.toJSON()).to.deep.equal(initialValidators.toJSON()); - - await context.createBlock(); - // We are now in block 10 but this block cannot include any transactions, so go to 11 - await context.createBlock(); - - // Block 11: candidates that joined pallet_pooled_staking in session 0 are now eligible candidates - const validators11 = await polkadotJs.query.session.validators(); - expect(validators11.toJSON()).to.deep.equal([...initialValidators.toJSON(), randomAccount.address]); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/staking/test_staking_swap.ts b/test/suites/dev-tanssi/staking/test_staking_swap.ts deleted file mode 100644 index c0303de..0000000 --- a/test/suites/dev-tanssi/staking/test_staking_swap.ts +++ /dev/null @@ -1,98 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { numberToHex } from "@polkadot/util"; -import { jumpToBlock } from "../../../util/block"; - -describeSuite({ - id: "DT0305", - title: "Staking poolSwap test suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - let bob: KeyringPair; - // TODO: don't hardcode the period here - const sessionPeriod = 10; - - beforeAll(async () => { - alice = context.keyring.alice; - bob = context.keyring.bob; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "poolSwap works", - test: async function () { - const initialSession = 0; - const tx = polkadotJs.tx.pooledStaking.requestDelegate( - alice.address, - "AutoCompounding", - 10000000000000000n - ); - await context.createBlock([await tx.signAsync(alice)]); - const events = await polkadotJs.query.system.events(); - const ev1 = events.filter((a) => { - return a.event.method == "IncreasedStake"; - }); - expect(ev1.length).to.be.equal(1); - const ev2 = events.filter((a) => { - return a.event.method == "UpdatedCandidatePosition"; - }); - expect(ev2.length).to.be.equal(1); - const ev3 = events.filter((a) => { - return a.event.method == "RequestedDelegate"; - }); - expect(ev3.length).to.be.equal(1); - - const stakingCandidates = await polkadotJs.query.pooledStaking.sortedEligibleCandidates(); - expect(stakingCandidates.toJSON()).to.deep.equal([ - { - candidate: alice.address, - stake: numberToHex(10000000000000000, 128), - }, - ]); - - await jumpToBlock(context, 2 * sessionPeriod + 1); - const tx2 = polkadotJs.tx.pooledStaking.executePendingOperations([ - { - delegator: alice.address, - operation: { - JoiningAutoCompounding: { - candidate: alice.address, - at: initialSession, - }, - }, - }, - ]); - - // Now the executePendingOperations should succeed - await context.createBlock([await tx2.signAsync(bob)]); - - const events3 = await polkadotJs.query.system.events(); - const ev5 = events3.filter((a) => { - return a.event.method == "StakedAutoCompounding"; - }); - expect(ev5.length).to.be.equal(1); - const ev6 = events3.filter((a) => { - return a.event.method == "ExecutedDelegate"; - }); - expect(ev6.length).to.be.equal(1); - - // We now try to swap - const tx3 = polkadotJs.tx.pooledStaking.swapPool(alice.address, "AutoCompounding", { - Stake: 10000000000000000n, - }); - await context.createBlock([await tx3.signAsync(alice)]); - - const events4 = await polkadotJs.query.system.events(); - const ev7 = events4.filter((a) => { - return a.event.method == "SwappedPool"; - }); - expect(ev7.length).to.be.equal(1); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/weights/test_on_session_change_weight.ts b/test/suites/dev-tanssi/weights/test_on_session_change_weight.ts deleted file mode 100644 index cef9546..0000000 --- a/test/suites/dev-tanssi/weights/test_on_session_change_weight.ts +++ /dev/null @@ -1,54 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block"; - -describeSuite({ - id: "DT0401", - title: "On session change weights suite", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let maxBlock: number; - - beforeAll(() => { - polkadotJs = context.polkadotJs(); - maxBlock = polkadotJs.consts.system.blockWeights.maxBlock.refTime.toNumber(); - }); - - it({ - id: "E01", - title: "Block weight on session change should be max", - test: async function () { - // Let's jump one session - await jumpSessions(context, 1); - - // TODO: fix once we have types - const blockWeight = (await polkadotJs.query.system.blockWeight()).toJSON(); - expect(blockWeight.normal).to.deep.equal({ refTime: 0, proofSize: 0 }); - expect(blockWeight.operational).to.deep.equal({ - refTime: 0, - proofSize: 0, - }); - expect(blockWeight.mandatory.refTime).to.be.greaterThan(maxBlock); - }, - }); - - it({ - id: "E02", - title: "Block weight not on session change should be small", - test: async function () { - await context.createBlock(); - - // TODO: fix once we have types - const blockWeight = (await polkadotJs.query.system.blockWeight()).toJSON(); - expect(blockWeight.normal).to.deep.equal({ refTime: 0, proofSize: 0 }); - expect(blockWeight.operational).to.deep.equal({ - refTime: 0, - proofSize: 0, - }); - expect(blockWeight.mandatory.refTime).to.be.lessThan(maxBlock); - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/weights/test_set_latest_author_data_weight.ts b/test/suites/dev-tanssi/weights/test_set_latest_author_data_weight.ts deleted file mode 100644 index decf76a..0000000 --- a/test/suites/dev-tanssi/weights/test_set_latest_author_data_weight.ts +++ /dev/null @@ -1,52 +0,0 @@ -import "@polkadot/api-augment"; -import { describeSuite, expect } from "@moonwall/cli"; -import { FrameSupportDispatchDispatchInfo } from "@polkadot/types/lookup"; -import { BN } from "@polkadot/util"; - -describeSuite({ - id: "DT0402", - title: "On set latest author data weight check", - foundationMethods: "dev", - testCases: ({ it, context }) => { - it({ - id: "E01", - title: "Weight should be match expected", - test: async function () { - const expectedRefTime = new BN(1_245_284_212); - const expectedProofSize = new BN(15_236); - - await context.createBlock(); - - const block = await context.polkadotJs().rpc.chain.getBlock(); - const allRecords = await context.polkadotJs().query.system.events(); - - // Get index of authorNoting.setLatestAuthorData - const setAuthorIntrinsicIndex = block.block.extrinsics.reduce( - (filtered, extrinsic, idx) => - filtered.concat( - extrinsic.method.section === "authorNoting" && - extrinsic.method.method === "setLatestAuthorData" - ? idx - : [] - ), - [] - ); - - expect(setAuthorIntrinsicIndex.length).toBe(1); - - const events = allRecords.filter( - ({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(setAuthorIntrinsicIndex[0]) - ); - - const usedWeight = (events.at(-1).event.data[0] as unknown as FrameSupportDispatchDispatchInfo).weight; - const refTime = usedWeight.refTime.toBn(); - const proofSize = usedWeight.proofSize.toBn(); - - // Allow 10% variance - expect(refTime.gte(expectedRefTime.divn(1.1)) && refTime.lte(expectedRefTime.muln(1.1))).to.be.true; - expect(proofSize.gte(expectedProofSize.divn(1.1)) && proofSize.lte(expectedProofSize.muln(1.1))).to.be - .true; - }, - }); - }, -}); diff --git a/test/suites/dev-tanssi/xcm-core-buyer/test_xcm_core_buyer.ts b/test/suites/dev-tanssi/xcm-core-buyer/test_xcm_core_buyer.ts deleted file mode 100644 index ed67ab0..0000000 --- a/test/suites/dev-tanssi/xcm-core-buyer/test_xcm_core_buyer.ts +++ /dev/null @@ -1,148 +0,0 @@ -import "@tanssi/api-augment"; -import { describeSuite, beforeAll, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { jumpSessions } from "../../../util/block.ts"; - -describeSuite({ - id: "DT0601", - title: "Pallet XCM core buyer", - foundationMethods: "dev", - testCases: ({ it, context }) => { - let polkadotJs: ApiPromise; - let alice: KeyringPair; - - beforeAll(async () => { - alice = context.keyring.alice; - polkadotJs = context.polkadotJs(); - }); - - it({ - id: "E01", - title: "Sudo can set XCM weights storage", - test: async function () { - // 1st block - const tx = polkadotJs.tx.sudo.sudo( - polkadotJs.tx.xcmCoreBuyer.setRelayXcmWeightConfig({ - buyExecutionCost: 50_000_000, - weightAtMost: { - refTime: 1_000_000_000, - proofSize: 100_000, - }, - }) - ); - await context.createBlock([await tx.signAsync(alice)]); - - const storageWeights = await polkadotJs.query.xcmCoreBuyer.relayXcmWeightConfig(); - expect(storageWeights.isSome).to.be.eq(true); - }, - }); - - it({ - id: "E02", - title: "Register para id 2002 as a parathread and assign collators to it", - test: async function () { - const currentSesssion = await polkadotJs.query.session.currentIndex(); - const sessionDelay = await polkadotJs.consts.registrar.sessionDelay; - const expectedScheduledOnboarding = - BigInt(currentSesssion.toString()) + BigInt(sessionDelay.toString()); - - const slotFrequency = polkadotJs.createType("TpTraitsSlotFrequency", { - min: 5, - max: 5, - }); - const emptyGenesisData = () => { - const g = polkadotJs.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - const bootNodes = [ - "/ip4/127.0.0.1/tcp/33051/ws/p2p/12D3KooWSDsmAa7iFbHdQW4X8B2KbeRYPDLarK6EbevUSYfGkeQw", - ]; - - const tx = polkadotJs.tx.registrar.registerParathread(2002, slotFrequency, containerChainGenesisData); - const tx2 = polkadotJs.tx.dataPreservers.setBootNodes(2002, bootNodes); - const tx3 = polkadotJs.tx.registrar.markValidForCollating(2002); - const nonce = await polkadotJs.rpc.system.accountNextIndex(alice.publicKey); - await context.createBlock([ - await tx.signAsync(alice, { nonce }), - await tx2.signAsync(alice, { nonce: nonce.addn(1) }), - await polkadotJs.tx.sudo.sudo(tx3).signAsync(alice, { nonce: nonce.addn(2) }), - ]); - - const pendingParas = await polkadotJs.query.registrar.pendingParaIds(); - expect(pendingParas.length).to.be.eq(1); - const sessionScheduling = pendingParas[0][0]; - const parasScheduled = pendingParas[0][1]; - - expect(sessionScheduling.toBigInt()).to.be.eq(expectedScheduledOnboarding); - - // These will be the paras in session 2 - // TODO: fix once we have types - expect(parasScheduled.toJSON()).to.deep.equal([2000, 2001, 2002]); - - // Check that the on chain genesis data is set correctly - const onChainGenesisData = await polkadotJs.query.registrar.paraGenesisData(2002); - // TODO: fix once we have types - expect(emptyGenesisData().toJSON()).to.deep.equal(onChainGenesisData.toJSON()); - - // Check the para id has been given some free credits - const credits = (await polkadotJs.query.servicesPayment.blockProductionCredits(2002)).toJSON(); - expect(credits, "Container chain 2002 should have been given credits").toBeGreaterThan(0); - - // Checking that in session 2 paras are registered - await jumpSessions(context, 2); - - // Expect now paraIds to be registered - const parasRegistered = await polkadotJs.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(parasRegistered.toJSON()).to.deep.equal([2000, 2001, 2002]); - - // Check that collators have been assigned - const collators = await polkadotJs.query.collatorAssignment.collatorContainerChain(); - expect(collators.toJSON().containerChains[2002].length).to.be.greaterThan(0); - }, - }); - - it({ - id: "E03", - title: "Sudo can forceBuyCore", - test: async function () { - const encodedMsgBefore = await polkadotJs.query.parachainSystem.upwardMessages(); - expect(encodedMsgBefore.length).to.be.eq(0); - - const paraId = 2002; - const tx = polkadotJs.tx.sudo.sudo(polkadotJs.tx.xcmCoreBuyer.forceBuyCore(paraId)); - await context.createBlock([await tx.signAsync(alice)]); - - const events = (await polkadotJs.query.system.events()).filter((a) => { - return a.event.method == "BuyCoreXcmSent"; - }); - expect(events.length).to.be.equal(1); - - // Check that the XCM message has been sent. This returns an encoded message - const encodedMsg = await polkadotJs.query.parachainSystem.upwardMessages(); - expect(encodedMsg.length).to.be.eq(1); - }, - }); - }, -}); diff --git a/test/suites/keep-db/test_restart_keep_db.ts b/test/suites/keep-db/test_restart_keep_db.ts deleted file mode 100644 index f3705d1..0000000 --- a/test/suites/keep-db/test_restart_keep_db.ts +++ /dev/null @@ -1,394 +0,0 @@ -import { afterAll, beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { getAuthorFromDigest, getAuthorFromDigestRange } from "../../util/author"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; -import { exec, spawn } from "child_process"; -import fs from "fs/promises"; -import { createWriteStream } from "fs"; - -describeSuite({ - id: "ZK01", - title: "Zombie Tanssi KeepDb Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - let blockNumberOfRestart; - let authoritiesAtRestart; - const restartedHandles = []; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - - expect(header2000.number.toNumber()).to.be.equal(0); - }, 120000); - - afterAll(async () => { - // Kill restared processes - for (const h of restartedHandles) { - h.kill(); - } - }); - - const runZombienetRestart = async (pid: number, collatorLogFile: string): Promise => { - // Wait 10 seconds to have enough time to check if db exists - // Need to use `pnpm tsx` instead of `pnpm run` to ensure that the process gets killed properly - const command = "pnpm"; - const args = [ - "tsx", - "scripts/zombienetRestart.ts", - "restart", - "--wait-ms", - "10000", - "--pid", - pid.toString(), - ]; - - const child = spawn(command, args, { - stdio: ["inherit", "pipe", "pipe"], - }); - - // Pipe both stdout and stderr to the log file - const log = createWriteStream(collatorLogFile, { flags: "a" }); - child.stdout.pipe(log); - child.stderr.pipe(log); - - // Handle errors and exit events if needed - child.on("error", (error) => { - console.error(`spawn error: ${error}`); - }); - - child.on("exit", (code, signal) => { - if (code) { - console.error(`Child process exited with code ${code}`); - } - if (signal) { - console.error(`Child process was killed with signal ${signal}`); - } - }); - - restartedHandles.push(child); - }; - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T03", - title: "Test assignation did not change", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - getKeyringNimbusIdHex("Collator1000-03"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator2000-02")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 60000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - }, - }); - - it({ - id: "T11", - title: "Test restarting both container chain collators", - test: async function () { - // Fetch block number before restarting because the RPC may no longer work after the restart - blockNumberOfRestart = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - // Fetch authorities for a later test - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - authoritiesAtRestart = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - - const pidCollator200001 = await findCollatorProcessPid("Collator2000-01"); - const pidCollator200002 = await findCollatorProcessPid("Collator2000-02"); - expect(isProcessRunning(pidCollator200001)).to.be.true; - expect(isProcessRunning(pidCollator200002)).to.be.true; - await runZombienetRestart(pidCollator200001, getTmpZombiePath() + `/Collator2000-01.log`); - await runZombienetRestart(pidCollator200002, getTmpZombiePath() + `/Collator2000-02.log`); - - await sleep(5000); - // Check that both collators have been stopped - expect(isProcessRunning(pidCollator200001)).to.be.false; - expect(isProcessRunning(pidCollator200002)).to.be.false; - - // Check db has not been deleted - const dbPath01 = - getTmpZombiePath() + - `/Collator2000-01/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const dbPath02 = - getTmpZombiePath() + - `/Collator2000-02/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - - expect(await directoryExists(dbPath01)).to.be.true; - expect(await directoryExists(dbPath02)).to.be.true; - }, - }); - - it({ - id: "T12", - title: "Test container chain deregister: only nodes without keep-db should delete db", - timeout: 300000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - const registered1 = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered1.toJSON().includes(2000)).to.be.true; - - const tx = paraApi.tx.registrar.deregister(2000); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); - await waitSessions(context, paraApi, 2, async () => { - const registered = await paraApi.query.registrar.registeredParaIds(); - // Stop waiting if 2000 is no longer registered - return !registered.toJSON().includes(2000); - }); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - await context.waitBlock(6, "Tanssi"); - - // Check that pending para ids removes 2000 - const registered = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered.toJSON().includes(2000)).to.be.false; - - // Collator2000-01 db path exists because it was started with `--keep-db`, Collator2000-02 has deleted it - const dbPath01 = - getTmpZombiePath() + - `/Collator2000-01/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const dbPath02 = - getTmpZombiePath() + - `/Collator2000-02/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - - expect(await directoryExists(dbPath01)).to.be.true; - expect(await directoryExists(dbPath02)).to.be.false; - }, - }); - - it({ - id: "T13", - title: "Both container chain collators keep producing blocks after restart", - test: async function () { - const currentBlock = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - console.log( - `Checking block authors for container chain 2000 in range ${blockNumberOfRestart} - ${currentBlock}` - ); - expect( - currentBlock, - "container chain 2000 should have produced more than 5 blocks already" - ).toBeGreaterThan(blockNumberOfRestart + 5); - await countUniqueBlockAuthorsExact( - container2000Api, - blockNumberOfRestart, - currentBlock, - 2, - authoritiesAtRestart - ); - }, - }); - }, -}); - -const sleep = (ms: number): Promise => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; - -const findCollatorProcessPid = async (collatorName: string) => { - const pattern = `(tanssi-node.*${collatorName})`; - const cmd = `ps aux | grep -E "${pattern}"`; - const { stdout } = await execPromisify(cmd); - const processes = stdout - .split("\n") - .filter((line) => line && !line.includes("grep -E")) - .map((line) => { - const parts = line.split(/\s+/); - const pid = parts[1]; - const command = parts.slice(10).join(" "); - return { - name: `PID: ${pid}, Command: ${command}`, - value: pid, - }; - }); - - if (processes.length === 1) { - return processes[0].value; // return pid - } else { - const error = { - message: "Multiple processes found.", - processes: processes.map((p) => p.name), - }; - throw error; - } -}; - -function isProcessRunning(pid: number): boolean { - try { - // The `kill` function with signal 0 does not terminate the process - // but will throw an error if the process does not exist. - process.kill(pid, 0); - return true; - } catch (error) { - if (error.code === "EPERM") { - // The error code 'EPERM' means the process exists but we don't have permission to send the signal. - return true; - } - return false; - } -} - -const execPromisify = (command: string) => { - return new Promise<{ stdout: string; stderr: string }>((resolve, reject) => { - exec(command, (error, stdout, stderr) => { - if (error) { - reject(error); - } else { - resolve({ stdout, stderr }); - } - }); - }); -}; - -async function directoryExists(directoryPath) { - try { - await fs.access(directoryPath, fs.constants.F_OK); - return true; - } catch (err) { - return false; - } -} - -/// Returns the /tmp/zombie-52234... path -function getTmpZombiePath() { - return process.env.MOON_ZOMBIE_DIR; -} - -/// Verify that the next `numBlocks` have exactly `numAuthors` different authors -async function countUniqueBlockAuthorsExact(paraApi, blockStart, blockEnd, numAuthors, authorities) { - const actualAuthors = []; - const blockNumbers = []; - - const authors = await getAuthorFromDigestRange(paraApi, blockStart, blockEnd); - for (let i = 0; i < authors.length; i++) { - const [blockNum, author] = authors[i]; - blockNumbers.push(blockNum); - actualAuthors.push(author); - } - - const uniq = [...new Set(actualAuthors)]; - - if (uniq.length != numAuthors) { - console.error( - "Mismatch between authorities and actual block authors: authorities: ", - authorities, - ", actual authors: ", - actualAuthors, - ", block numbers: ", - blockNumbers - ); - expect(false).to.be.true; - } -} diff --git a/test/suites/metrics/test_metrics_stop.ts b/test/suites/metrics/test_metrics_stop.ts deleted file mode 100644 index d081b64..0000000 --- a/test/suites/metrics/test_metrics_stop.ts +++ /dev/null @@ -1,228 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { getAuthorFromDigest } from "../../util/author"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; -import net from "net"; - -describeSuite({ - id: "ZM01", - title: "Zombie Tanssi Metrics Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - - expect(header2000.number.toNumber()).to.be.equal(0); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T03", - title: "Test assignation did not change", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - getKeyringNimbusIdHex("Collator1000-03"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator2000-02")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 60000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - }, - }); - - it({ - id: "T12", - title: "Test metrics: deregister container chain and metrics should stop", - timeout: 300000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - // Begin sending GET /metrics requests in a loop to try to prevent the server from closing - const connectionHandle = sendMetricsRequestLoop("127.0.0.1", 27124, 1000); - expect(isServerAlive(connectionHandle)).to.be.true; - - const registered1 = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered1.toJSON().includes(2000)).to.be.true; - - const tx = paraApi.tx.registrar.deregister(2000); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); - await waitSessions(context, paraApi, 2, async () => { - const registered = await paraApi.query.registrar.registeredParaIds(); - // Stop waiting if 2000 is no longer registered - return !registered.toJSON().includes(2000); - }); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - await context.waitBlock(6, "Tanssi"); - - // Check that pending para ids removes 2000 - const registered = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered.toJSON().includes(2000)).to.be.false; - expect(isServerAlive(connectionHandle)).to.be.false; - }, - }); - }, -}); - -// Send periodic "GET /metrics" requests using the same socket every time. -// This is to reproduce a bug where the metrics server would not close if there are any open connections. -function sendMetricsRequestLoop(hostname: string, port: number, period: number) { - // Use a TCP client instead of an HTTP client because I was unable to configure the HTTP client to use only - // one socket - const client = new net.Socket(); - - // Connect to the server - client.connect(port, hostname, () => { - console.log(`Connected to ${hostname}:${port}`); - - // Define the function to send the metrics request - const sendMetrics = () => { - if (!client.destroyed) { - const request = "GET /metrics HTTP/1.1\r\n\r\n"; - client.write(request); - console.log(`Sent request: ${request}`); - } - }; - - // Initially send the request - sendMetrics(); - - // Set up periodic sending of the request - const intervalId = setInterval(sendMetrics, period); - - // Handle data received from the server - client.on("data", (data) => { - console.log(`Received data: ${data}`); - }); - - // Handle errors - client.on("error", (error) => { - console.error(`Error: ${error}`); - }); - - // Handle connection close - client.on("close", () => { - console.log("Connection closed"); - clearInterval(intervalId); - }); - }); - - return client; -} - -// Check if the connection is still alive -function isServerAlive(socket: net.Socket): boolean { - return !socket.destroyed && !socket.closed; -} diff --git a/test/suites/one-node/test_tanssi_one_node.ts b/test/suites/one-node/test_tanssi_one_node.ts deleted file mode 100644 index a3bd553..0000000 --- a/test/suites/one-node/test_tanssi_one_node.ts +++ /dev/null @@ -1,280 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import fs from "fs/promises"; -import { stat } from "fs/promises"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { getKeyringNimbusIdHex } from "../../util/keys"; - -describeSuite({ - id: "N01", - title: "Zombie Tanssi Rotation Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let allCollators: string[]; - let collatorName: Record; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - // Initialize list of all collators, this should match the names from build-spec.sh script - allCollators = ["Collator-01", "Collator-02"]; - // Initialize reverse map of collator key to collator name - collatorName = createCollatorKeyToNameMap(paraApi, allCollators); - console.log(collatorName); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T02", - title: "Disable full_rotation, set to 1 collator", - timeout: 120000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - const tx1 = paraApi.tx.configuration.setMinOrchestratorCollators(1); - const tx2 = paraApi.tx.configuration.setMaxOrchestratorCollators(1); - const tx3 = paraApi.tx.configuration.setFullRotationPeriod(0); - const tx123 = await paraApi.tx.utility.batchAll([tx1, tx2, tx3]); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx123), alice); - }, - }); - - it({ - id: "T03", - title: "Register empty wasm as parathread 2000", - timeout: 240000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - const txs2000 = await registerEmptyParathread(paraApi, alice.address, 2000); - const txs = paraApi.tx.utility.batchAll([...txs2000]); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(txs), alice); - }, - }); - - it({ - id: "T04", - title: "Wait for parathread 2000 to be assigned collators", - timeout: 600000, - test: async function () { - await waitSessions(context, paraApi, 2, async () => { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains; - // Stop waiting when parathreads have been assigned collators - return containerChainCollators[2000] != undefined && containerChainCollators[2001] != undefined; - }); - }, - }); - - it({ - id: "T05", - title: "Check logs, collator failed to start", - test: async function () { - const assignment = (await paraApi.query.collatorAssignment.collatorContainerChain()).toJSON(); - const oldC2000 = collatorName[assignment.containerChains[2000][0]]; - const logFilePath = getTmpZombiePath() + `/${oldC2000}.log`; - await checkLogs(logFilePath, [ - "[Orchestrator] Detected assignment for container chain 2000", - "[Orchestrator] Loaded chain spec for container chain 2000", - "[Orchestrator] This is a syncing container chain, using random ports", - "[Orchestrator] Container chain sync mode: Full", - "[Orchestrator] Failed to start container chain 2000: Failed to get runtime version: Runtime missing from initial storage, could not read state version.", - ]); - }, - }); - - it({ - id: "T06", - title: "Check logs, collator did not panic", - test: async function () { - const assignment = (await paraApi.query.collatorAssignment.collatorContainerChain()).toJSON(); - const oldC2000 = collatorName[assignment.containerChains[2000][0]]; - const logFilePath = getTmpZombiePath() + `/${oldC2000}.log`; - // Best effort, if anything else panics this test will breaks - await assertLogsDoNotContain(logFilePath, "panic"); - }, - }); - - it({ - id: "T06", - title: "Check logs, collator is still running", - test: async function () { - const assignment = (await paraApi.query.collatorAssignment.collatorContainerChain()).toJSON(); - const oldC2000 = collatorName[assignment.containerChains[2000][0]]; - const logFilePath = getTmpZombiePath() + `/${oldC2000}.log`; - await waitForNewLogs(logFilePath); - }, - }); - }, -}); - -/// Create a map of collator key "5C5p..." to collator name "Collator1000-01". -function createCollatorKeyToNameMap(paraApi, collatorNames: string[]): Record { - const collatorName: Record = {}; - - collatorNames.forEach((name) => { - const hexAddress = getKeyringNimbusIdHex(name); - const k = paraApi.createType("AccountId", hexAddress); - collatorName[k] = name; - }); - - return collatorName; -} - -async function registerEmptyParathread(api, manager, paraId) { - const parathread = true; - paraId = parseInt(paraId); - - const emptyGenesisData = () => { - const g = api.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: [ - { - key: "0x636f6465", - value: "0x010203040506", - }, - ], - name: "0x436f6e7461696e657220436861696e2032303030", - id: "0x636f6e7461696e65722d636861696e2d32303030", - forkId: null, - extensions: "0x", - properties: { - tokenMetadata: { - tokenSymbol: "0x61626364", - ss58Format: 42, - tokenDecimals: 12, - }, - isEthereum: false, - }, - }); - return g; - }; - const containerChainGenesisData = emptyGenesisData(); - - const txs = []; - let tx1; - if (parathread) { - const slotFreq = api.createType("TpTraitsSlotFrequency", { - min: 1, - max: 1, - }); - tx1 = api.tx.registrar.registerParathread(paraId, slotFreq, containerChainGenesisData); - } else { - tx1 = api.tx.registrar.registerParathread(paraId, containerChainGenesisData); - } - txs.push( - api.tx.utility.dispatchAs( - { - system: { Signed: manager }, - } as any, - tx1 - ) - ); - const bootNodes = ["/ip4/127.0.0.1/tcp/33051/ws/p2p/12D3KooWSDsmAa7iFbHdQW4X8B2KbeRYPDLarK6EbevUSYfGkeQw"]; - const tx2 = api.tx.dataPreservers.setBootNodes(paraId, bootNodes); - txs.push(tx2); - const tx3 = api.tx.registrar.markValidForCollating(paraId); - txs.push(tx3); - - return txs; -} - -const sleep = (ms: number): Promise => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; - -/// Returns the /tmp/zombie-52234... path -function getTmpZombiePath() { - return process.env.MOON_ZOMBIE_DIR; -} - -// Read log file path and check that all the logs are found in order. -// Only supports single-line logs. -async function checkLogs(logFilePath: string, logs: string[]): Promise { - const fileContent = await fs.readFile(logFilePath, "utf8"); - const lines = fileContent.split("\n"); - - let logIndex = 0; - let lastFoundLogIndex = 0; - - for (let i = 0; i < lines.length; i++) { - if (logIndex < logs.length && lines[i].includes(logs[logIndex])) { - logIndex++; - lastFoundLogIndex = i; - } - - if (logIndex === logs.length) { - break; - } - } - - if (logIndex !== logs.length) { - // In case of missing logs, show some context around the last found log - const contextSize = 3; - const contextStart = Math.max(0, lastFoundLogIndex - contextSize); - const contextEnd = Math.min(lines.length - 1, lastFoundLogIndex + contextSize); - const contextLines = lines.slice(contextStart, contextEnd + 1); - const contextStr = contextLines.join("\n"); - - expect.fail( - `Not all logs were found in the correct order. Missing log: '${logs[logIndex]}'\nContext around the last found log:\n${contextStr}` - ); - } -} - -// Checks that the specified log does not appear in the log file. -// If the log appears, it provides context around the first occurrence using expect.fail. -async function assertLogsDoNotContain(logFilePath: string, forbiddenLog: string): Promise { - const fileContent = await fs.readFile(logFilePath, "utf8"); - const lines = fileContent.split("\n"); - - for (let i = 0; i < lines.length; i++) { - if (lines[i].includes(forbiddenLog)) { - const contextSize = 3; - const contextStart = Math.max(0, i - contextSize); - const contextEnd = Math.min(lines.length - 1, i + contextSize); - const contextLines = lines.slice(contextStart, contextEnd + 1); - const contextStr = contextLines.join("\n"); - - expect.fail( - `The log file should not contain the log: '${forbiddenLog}'\nContext around the occurrence:\n${contextStr}` - ); - return; // Exit after the first match to provide immediate feedback and efficiency - } - } -} - -// Wait until log file size changes. This indicates that the node is still alive. -async function waitForNewLogs(logFilePath: string): Promise { - const initialSize = (await stat(logFilePath)).size; - - // eslint-disable-next-line no-constant-condition - while (true) { - const currentSize = (await stat(logFilePath)).size; - if (currentSize > initialSize) { - return; - } - - await sleep(200); - } -} diff --git a/test/suites/para/test_tanssi_containers.ts b/test/suites/para/test_tanssi_containers.ts deleted file mode 100644 index 6d79857..0000000 --- a/test/suites/para/test_tanssi_containers.ts +++ /dev/null @@ -1,538 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { MIN_GAS_PRICE, customWeb3Request, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { Signer } from "ethers"; -import fs from "fs/promises"; -import { getAuthorFromDigest, getAuthorFromDigestRange } from "../../util/author"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { createTransfer, waitUntilEthTxIncluded } from "../../util/ethereum"; -import { chainSpecToContainerChainGenesisData } from "../../util/genesis_data"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; - -describeSuite({ - id: "P01", - title: "Zombie Tanssi Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - let container2001Api: ApiPromise; - let container2002Api: ApiPromise; - let blockNumber2002Start; - let blockNumber2002End; - let ethersSigner: Signer; - const sessionPeriod = 10; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - container2001Api = context.polkadotJs("Container2001"); - container2002Api = context.polkadotJs("Container2002"); - ethersSigner = context.ethers(); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - const container2001Network = container2001Api.consts.system.version.specName.toString(); - const paraId2001 = (await container2001Api.query.parachainInfo.parachainId()).toString(); - expect(container2001Network, "Container2001 API incorrect").to.contain("frontier-template"); - expect(paraId2001, "Container2001 API incorrect").to.be.equal("2001"); - - const container2002Network = container2002Api.consts.system.version.specName.toString(); - const paraId2002 = (await container2002Api.query.parachainInfo.parachainId()).toString(); - expect(container2002Network, "Container2002 API incorrect").to.contain("container-chain-template"); - expect(paraId2002, "Container2002 API incorrect").to.be.equal("2002"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - const header2001 = await getHeaderFromRelay(relayApi, 2001); - const header2002 = await getHeaderFromRelay(relayApi, 2002); - - expect(header2000.number.toNumber()).to.be.equal(0); - expect(header2001.number.toNumber()).to.be.equal(0); - expect(header2002.number.toNumber()).to.be.equal(0); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T03", - title: "Test assignation did not change", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - getKeyringNimbusIdHex("Collator2002-01"), - getKeyringNimbusIdHex("Collator2002-02"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator2000-02")], - "2001": [getKeyringNimbusIdHex("Collator2001-01"), getKeyringNimbusIdHex("Collator2001-02")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T05", - title: "Blocks are being produced on container 2001", - test: async function () { - const blockNum = (await container2001Api.rpc.chain.getBlock()).block.header.number.toNumber(); - - expect(blockNum).to.be.greaterThan(0); - expect(await ethersSigner.provider.getBlockNumber(), "Safe tag is not present").to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T07", - title: "Test container chain 2001 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2001Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - const writtenCollators = (await container2001Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 60000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - const paraId2001 = await container2001Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - const containerChainCollators2001 = assignment.containerChains.toJSON()[paraId2001.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - const author2001 = await paraApi.query.authorNoting.latestAuthor(paraId2001); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - expect(containerChainCollators2001.includes(author2001.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - const genesisData2001 = await paraApi.query.registrar.paraGenesisData(2001); - expect(genesisData2001.toJSON().properties.isEthereum).to.be.true; - }, - }); - it({ - id: "T11", - title: "Transactions can be made with ethers", - timeout: 30000, - test: async function () { - const randomAccount = generateKeyringPair(); - const tx = await createTransfer(context, randomAccount.address, 1_000_000_000_000, { - gasPrice: MIN_GAS_PRICE, - }); - const txHash = await customWeb3Request(context.web3(), "eth_sendRawTransaction", [tx]); - await waitUntilEthTxIncluded( - () => context.waitBlock(1, "Container2001"), - context.web3(), - txHash.result - ); - expect(Number(await context.web3().eth.getBalance(randomAccount.address))).to.be.greaterThan(0); - }, - }); - - it({ - id: "T12", - title: "Test live registration of container chain 2002", - timeout: 300000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - // Read raw chain spec file - const spec2002 = await fs.readFile("./specs/template-container-2002.json", "utf8"); - - // Before registering container chain 2002, ensure that it has 0 blocks - // Since the RPC doesn't exist at this point, we need to get that from the relay - const header2002 = await getHeaderFromRelay(relayApi, 2002); - expect(header2002.number.toNumber()).to.be.equal(0); - const registered1 = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered1.toJSON().includes(2002)).to.be.false; - - const chainSpec2002 = JSON.parse(spec2002); - const containerChainGenesisData = chainSpecToContainerChainGenesisData(paraApi, chainSpec2002); - const tx1 = paraApi.tx.registrar.register(2002, containerChainGenesisData); - const purchasedCredits = 100000n; - const requiredBalance = purchasedCredits * 1_000_000n; - const tx2 = paraApi.tx.servicesPayment.purchaseCredits(2002, requiredBalance); - const bootNodes = [ - "/ip4/127.0.0.1/tcp/33051/ws/p2p/12D3KooWSDsmAa7iFbHdQW4X8B2KbeRYPDLarK6EbevUSYfGkeQw", - ]; - const tx3 = paraApi.tx.dataPreservers.setBootNodes(2002, bootNodes); - const tx4 = paraApi.tx.registrar.markValidForCollating(2002); - // Send the batch transaction: [register, purchaseCredits, sudo(setBootNodes), sudo(markValidForCollating)] - const txBatch = paraApi.tx.utility.batchAll([ - tx1, - tx2, - paraApi.tx.sudo.sudo(tx3), - paraApi.tx.sudo.sudo(tx4), - ]); - await signAndSendAndInclude(txBatch, alice); - // Check that pending para ids contains 2002 - const registered2 = await paraApi.query.registrar.pendingParaIds(); - const registered3 = await paraApi.query.registrar.registeredParaIds(); - - // TODO: fix once we have types - expect(registered2.toJSON()[0][1].includes(2002)).to.be.true; - // But registered does not contain 2002 yet - // TODO: fix once we have types - expect(registered3.toJSON().includes(2002)).to.be.false; - // Container chain will be registered after 2 sessions, but because `signAndSendAndInclude` waits - // until the block that includes the extrinsic is finalized, it is possible that we only need to wait - // 1 session. So use a callback to wait 1 or 2 sessions. - await waitSessions(context, paraApi, 2, async () => { - const registered = await paraApi.query.registrar.registeredParaIds(); - // Stop waiting when 2002 is registered - return registered.toJSON().includes(2002); - }); - // Check that registered para ids contains 2002 - const registered5 = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered5.toJSON().includes(2002)).to.be.true; - - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - // Round block number to start of session, sometimes the rpc returns the block number of the next block - blockNumber2002Start = blockNum - (blockNum % sessionPeriod); - }, - }); - - it({ - id: "T13", - title: "Blocks are being produced on container 2002", - timeout: 120000, - test: async function () { - // Wait 3 blocks because the next test needs to get a non empty value from - // container2002Api.query.authoritiesNoting() - await context.waitBlock(3, "Container2002"); - }, - }); - - it({ - id: "T14", - title: "Test container chain 2002 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2002Api.query.parachainInfo.parachainId()).toString(); - // TODO: fix once we have types - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - const writtenCollators = (await container2002Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T15", - title: "Deregister container chain 2002, collators should move to tanssi", - timeout: 300000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - const registered1 = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered1.toJSON().includes(2002)).to.be.true; - - const tx = paraApi.tx.registrar.deregister(2002); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); - // Container chain will be deregistered after 2 sessions, but because `signAndSendAndInclude` waits - // until the block that includes the extrinsic is finalized, it is possible that we only need to wait - // 1 session. So use a callback to wait 1 or 2 sessions. - await waitSessions(context, paraApi, 2, async () => { - const registered = await paraApi.query.registrar.registeredParaIds(); - // Stop waiting if 2002 is no longer registered - return !registered.toJSON().includes(2002); - }); - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - // Round block number to start of session, sometimes the rpc returns the block number of the next block - blockNumber2002End = blockNum - (blockNum % sessionPeriod); - - // Check that pending para ids removes 2002 - const registered = await paraApi.query.registrar.registeredParaIds(); - // TODO: fix once we have types - expect(registered.toJSON().includes(2002)).to.be.false; - }, - }); - - it({ - id: "T16", - title: "Count number of tanssi collators before and during 2002 chain", - test: async function () { - // This test depends on T12 and T15 to set blockNumber2002Start and blockNumber2002End - // The block range must start and end on session boundaries - expect(blockNumber2002Start % sessionPeriod).to.be.equal(0); - expect(blockNumber2002End % sessionPeriod).to.be.equal(0); - expect(sessionPeriod < blockNumber2002Start).to.be.true; - expect(blockNumber2002Start < blockNumber2002End).to.be.true; - const fullRotationBlock = 50; - // Returns true if a full collator rotation happens inside the inclusive range defined by start and end. - // If the rotation happens exactly at start or exactly at end, this returns false. - const fullRotationBetween = (start, end) => { - return fullRotationBlock > start && fullRotationBlock < end; - }; - - // Start from block 1 because block 0 has no author - const blockNumber = 1; - // Consider 3 cases: full rotation can happen before 2002 is registered, while 2002 is registered, or - // after 2002 is registered. - // Locally blockNumber2002Start = 40 but in CI it can be 40 or 50 depending on server specs. - if (fullRotationBetween(blockNumber, blockNumber2002Start - 1)) { - // Before 2002 registration: 4 authors - await countUniqueBlockAuthors(paraApi, sessionPeriod, blockNumber, fullRotationBlock - 1, 4); - await countUniqueBlockAuthors( - paraApi, - sessionPeriod, - fullRotationBlock, - blockNumber2002Start - 1, - 4 - ); - // While 2002 is live: 2 authors (the other 2 went to container chain 2002) - await countUniqueBlockAuthors( - paraApi, - sessionPeriod, - blockNumber2002Start, - blockNumber2002End - 1, - 2 - ); - } else if (fullRotationBetween(blockNumber2002Start, blockNumber2002End - 1)) { - // Rotation happened while 2002 was registered - // Before 2002 registration: 4 authors - await countUniqueBlockAuthors(paraApi, sessionPeriod, blockNumber, blockNumber2002Start - 1, 4); - // While 2002 is live: 2 authors (the other 2 went to container chain 2002) - await countUniqueBlockAuthors( - paraApi, - sessionPeriod, - blockNumber2002Start, - fullRotationBlock - 1, - 2 - ); - await countUniqueBlockAuthors(paraApi, sessionPeriod, fullRotationBlock, blockNumber2002End - 1, 2); - } else { - // Rotation happened at the same time as 2002 was registered, or after 2002 was deregistered - // Before 2002 registration: 4 authors - await countUniqueBlockAuthors(paraApi, sessionPeriod, blockNumber, blockNumber2002Start - 1, 4); - // While 2002 is live: 2 authors (the other 2 went to container chain 2002) - await countUniqueBlockAuthors( - paraApi, - sessionPeriod, - blockNumber2002Start, - blockNumber2002End - 1, - 2 - ); - } - }, - }); - - it({ - id: "T17", - title: "Count number of tanssi collators after 2002 chain", - timeout: 120000, - test: async function () { - // This test depends on T12 and T15 to set blockNumber2002Start and blockNumber2002End - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - if (blockNum < blockNumber2002End + sessionPeriod - 1) { - // Need to wait one session because the following blocks don't exist yet - await waitSessions(context, paraApi, 1); - } - // After 2002 deregistration: 4 authors - await countUniqueBlockAuthors( - paraApi, - sessionPeriod, - blockNumber2002End, - blockNumber2002End + sessionPeriod - 1, - 4 - ); - }, - }); - }, -}); - -/// Verify that the next `numBlocks` have no more than `numAuthors` different authors -/// -/// Concepts: blocks and slots. -/// A slot is a time-based period where one author can propose a block. -/// Block numbers are always consecutive, but some slots may have no block. -/// One session consists of a fixed number of blocks, but a variable number of slots. -/// -/// We want to ensure that all the eligible block authors are trying to propose blocks. -/// -/// If the authority set changes between `blockStart` and `blockEnd`, this test returns an error. -async function countUniqueBlockAuthors( - paraApi: ApiPromise, - sessionPeriod: number, - blockStart: number, - blockEnd: number, - numAuthors: number -) { - expect(blockEnd, "Called countUniqueBlockAuthors with empty block range").toBeGreaterThan(blockStart); - // If the expected numAuthors is greater than the session length, it is possible for some authors to never have a - // chance to produce a block, in that case this test will fail. - // This test can also fail if the values are close, because collators sometimes fail to produce a block. - // For optimal results use a value of `numAuthors` that is much smaller than `sessionPeriod`. - expect(numAuthors).toBeLessThanOrEqual(sessionPeriod); - // If the authority set changes at any point, the assumption that numAuthors == authorities.len is not valid: - // we can always have 1 collator assigned to this chain, but if the authority set changes once in the middle of this - // test, we will see 2 different block authors. We detect that and return an error, the caller is expected to avoid - // this case by passing a different block range. - const authoritiesBySession = await fetchAuthoritySetChanges(paraApi, sessionPeriod, blockStart, blockEnd); - // If there's more than one set of authorities, it means there was a change - expect( - authoritiesBySession.size, - `Authority set did change in the block range passed to countUniqueBlockAuthors, the results will not be consistent. Authority sets: ${formatAuthoritySets( - authoritiesBySession - )}` - ).toBe(1); - const actualAuthors = []; - const blockNumbers = []; - - const authors = await getAuthorFromDigestRange(paraApi, blockStart, blockEnd); - for (let i = 0; i < authors.length; i++) { - const [blockNum, author] = authors[i]; - blockNumbers.push(blockNum); - actualAuthors.push(author); - } - - const uniq = [...new Set(actualAuthors)]; - - if (uniq.length > numAuthors || (uniq.length == 1 && numAuthors > 1)) { - console.error( - "Mismatch between authorities and actual block authors: authorities: ", - formatAuthoritySets(authoritiesBySession), - "", - actualAuthors, - ", block numbers: ", - blockNumbers, - `uniq.length=${uniq.length}, numAuthors=${numAuthors}` - ); - expect(false).to.be.true; - } -} - -// Returns the initial set of authorities at `blockStart`, and any different sets of authorities if they changed before -// `blockEnd`, in a map indexed by session number. -async function fetchAuthoritySetChanges( - paraApi: ApiPromise, - sessionPeriod: number, - blockStart: number, - blockEnd: number -): Promise> { - const authoritiesBySession = new Map(); - let lastAuthorities: any = null; - - for (let blockNum = blockStart; blockNum <= blockEnd; blockNum += sessionPeriod) { - const blockHash = await paraApi.rpc.chain.getBlockHash(blockNum); - const apiAt = await paraApi.at(blockHash); - const session = (await apiAt.query.session.currentIndex()).toNumber(); - const authorities = (await apiAt.query.authorityAssignment.collatorContainerChain(session)).toJSON(); - - // If this is the first iteration or if the authorities have changed - if (!lastAuthorities || JSON.stringify(lastAuthorities) !== JSON.stringify(authorities)) { - authoritiesBySession.set(session, authorities); - } - - lastAuthorities = authorities; - } - - return authoritiesBySession; -} - -function formatAuthoritySets(authoritiesBySession: Map): string { - let logString = ""; - - authoritiesBySession.forEach((authorities, session) => { - logString += `Session ${session} authorities:\n${JSON.stringify(authorities, null, 4)}`; - }); - - return logString; -} diff --git a/test/suites/parathreads/test_tanssi_parathreads.ts b/test/suites/parathreads/test_tanssi_parathreads.ts deleted file mode 100644 index 0a6482f..0000000 --- a/test/suites/parathreads/test_tanssi_parathreads.ts +++ /dev/null @@ -1,375 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { MIN_GAS_PRICE, customWeb3Request, generateKeyringPair, getBlockArray } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { Signer } from "ethers"; -import fs from "fs/promises"; -import { getAuthorFromDigest } from "../../util/author"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { createTransfer, waitUntilEthTxIncluded } from "../../util/ethereum"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; -import { chainSpecToContainerChainGenesisData } from "../../util/genesis_data.ts"; -import jsonBg from "json-bigint"; -import Bottleneck from "bottleneck"; -import { stringToHex } from "@polkadot/util"; -const JSONbig = jsonBg({ useNativeBigInt: true }); - -describeSuite({ - id: "R01", - title: "Zombie Tanssi Rotation Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - let container2001Api: ApiPromise; - let ethersSigner: Signer; - let allCollators: string[]; - let collatorName: Record; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - container2001Api = context.polkadotJs("Container2001"); - ethersSigner = context.ethers(); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - const container2001Network = container2001Api.consts.system.version.specName.toString(); - const paraId2001 = (await container2001Api.query.parachainInfo.parachainId()).toString(); - expect(container2001Network, "Container2001 API incorrect").to.contain("frontier-template"); - expect(paraId2001, "Container2001 API incorrect").to.be.equal("2001"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - const header2001 = await getHeaderFromRelay(relayApi, 2001); - - expect(header2000.number.toNumber()).to.be.equal(0); - expect(header2001.number.toNumber()).to.be.equal(0); - - // Initialize list of all collators, this should match the names from build-spec.sh script - allCollators = ["Collator-01", "Collator-02", "Collator-03", "Collator-04"]; - // Initialize reverse map of collator key to collator name - collatorName = createCollatorKeyToNameMap(paraApi, allCollators); - console.log(collatorName); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T02", - title: "Disable full_rotation", - timeout: 120000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - const tx4 = await paraApi.tx.configuration.setFullRotationPeriod(0); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx4), alice); - }, - }); - - it({ - id: "T03a", - title: "Register parathreads 2000 and 2001", - timeout: 240000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - const txs2000 = await registerParathread(paraApi, alice.address, 2000); - const txs2001 = await registerParathread(paraApi, alice.address, 2001); - - const slotFrequency2000 = paraApi.createType("TpTraitsSlotFrequency", { - min: 5, - max: 5, - }); - const tx1 = await paraApi.tx.registrar.setParathreadParams(2000, slotFrequency2000); - const slotFrequency2001 = paraApi.createType("TpTraitsSlotFrequency", { - min: 2, - max: 2, - }); - const tx2 = await paraApi.tx.registrar.setParathreadParams(2001, slotFrequency2001); - const txs = paraApi.tx.utility.batchAll([...txs2000, ...txs2001, tx1, tx2]); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(txs), alice); - }, - }); - - it({ - id: "T03b", - title: "Wait for parathreads 2000 and 2001 to be assigned collators", - timeout: 600000, - test: async function () { - await waitSessions(context, paraApi, 2, async () => { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains; - // Stop waiting when parathreads have been assigned collators - return containerChainCollators[2000] != undefined && containerChainCollators[2001] != undefined; - }); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - // Produces 1 block every 5 slots, which is every 60 seconds - // Give it a bit more time just in case - await sleep(120000); - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T05", - title: "Blocks are being produced on container 2001", - test: async function () { - // Produces 1 block every 2 slots, which is every 24 seconds - await sleep(24000); - const blockNum = (await container2001Api.rpc.chain.getBlock()).block.header.number.toNumber(); - - expect(blockNum).to.be.greaterThan(0); - expect(await ethersSigner.provider.getBlockNumber(), "Safe tag is not present").to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T07", - title: "Test container chain 2001 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2001Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - const writtenCollators = (await container2001Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 120000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - const paraId2001 = await container2001Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - const containerChainCollators2001 = assignment.containerChains.toJSON()[paraId2001.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - const author2001 = await paraApi.query.authorNoting.latestAuthor(paraId2001); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - expect(containerChainCollators2001.includes(author2001.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - const genesisData2001 = await paraApi.query.registrar.paraGenesisData(2001); - expect(genesisData2001.toJSON().properties.isEthereum).to.be.true; - }, - }); - it({ - id: "T11", - title: "Transactions can be made with ethers", - timeout: 120000, - test: async function () { - const randomAccount = generateKeyringPair(); - const tx = await createTransfer(context, randomAccount.address, 1_000_000_000_000, { - gasPrice: MIN_GAS_PRICE, - }); - const txHash = await customWeb3Request(context.web3(), "eth_sendRawTransaction", [tx]); - await waitUntilEthTxIncluded( - () => context.waitBlock(1, "Container2001"), - context.web3(), - txHash.result - ); - expect(Number(await context.web3().eth.getBalance(randomAccount.address))).to.be.greaterThan(0); - }, - }); - it({ - id: "T12", - title: "Check block frequency of parathreads", - timeout: 240000, - test: async function () { - // Wait 2 sessions so that parathreads have produced at least a few blocks each - await waitSessions(context, paraApi, 2); - - // TODO: calculate block frequency somehow - assertSlotFrequency(await getBlockData(paraApi), 1); - assertSlotFrequency(await getBlockData(container2000Api), 5); - assertSlotFrequency(await getBlockData(container2001Api), 2); - }, - }); - }, -}); - -async function getBlockData(api) { - const timePeriod = 1 * 60 * 60 * 1000; // 1 hour - const blockNumArray = await getBlockArray(api, timePeriod); - - const getBlockData = async (blockNum: number) => { - const blockHash = await api.rpc.chain.getBlockHash(blockNum); - const signedBlock = await api.rpc.chain.getBlock(blockHash); - const apiAt = await api.at(blockHash); - - return { - blockNum: blockNum, - extrinsics: signedBlock.block.extrinsics, - events: await apiAt.query.system.events(), - logs: signedBlock.block.header.digest.logs, - }; - }; - const limiter = new Bottleneck({ maxConcurrent: 5, minTime: 100 }); - const blockData = await Promise.all(blockNumArray.map((num) => limiter.schedule(() => getBlockData(num)))); - return blockData; -} - -async function assertSlotFrequency(blockData, expectedSlotDiff) { - const slotNumbers = blockData - .map(({ logs }) => { - const slotLog = logs.find( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() === stringToHex("aura") - ); - return slotLog ? parseInt(slotLog.asPreRuntime[1].reverse().toString("hex"), 16) : null; - }) - .filter((slot) => slot !== null); // Filter out nulls (blocks without slotLog) - - if (slotNumbers.length < 2) { - throw new Error("Insufficient data for slot time calculation."); - } - - // Calculate differences between consecutive slots - const slotDiffs = []; - for (let i = 1; i < slotNumbers.length; i++) { - slotDiffs.push(slotNumbers[i] - slotNumbers[i - 1]); - } - - // Calculate average slot difference - const avgSlotDiff = slotDiffs.reduce((acc, diff) => acc + diff, 0) / slotDiffs.length; - expect( - Math.abs(avgSlotDiff - expectedSlotDiff), - `Average slot time is different from expected: average ${avgSlotDiff}, expected ${expectedSlotDiff}` - ).to.be.lessThan(0.5); -} - -/// Create a map of collator key "5C5p..." to collator name "Collator1000-01". -function createCollatorKeyToNameMap(paraApi, collatorNames: string[]): Record { - const collatorName: Record = {}; - - collatorNames.forEach((name) => { - const hexAddress = getKeyringNimbusIdHex(name); - const k = paraApi.createType("AccountId", hexAddress); - collatorName[k] = name; - }); - - return collatorName; -} - -async function registerParathread(api, manager, paraId) { - const specPaths = { - 2000: "specs/parathreads-template-container-2000.json", - 2001: "specs/parathreads-template-container-2001.json", - }; - if (!specPaths[paraId]) { - throw new Error(`Unknown chain spec path for paraId ${paraId}`); - } - const chain = specPaths[paraId]; - const parathread = true; - const rawSpec = JSONbig.parse(await fs.readFile(chain, "utf8")); - - const containerChainGenesisData = chainSpecToContainerChainGenesisData(api, rawSpec); - const txs = []; - let tx1; - if (parathread) { - const slotFreq = api.createType("TpTraitsSlotFrequency", { - min: 1, - max: 1, - }); - tx1 = api.tx.registrar.registerParathread(rawSpec.para_id, slotFreq, containerChainGenesisData); - } else { - tx1 = api.tx.registrar.registerParathread(rawSpec.para_id, containerChainGenesisData); - } - txs.push( - api.tx.utility.dispatchAs( - { - system: { Signed: manager }, - } as any, - tx1 - ) - ); - if (rawSpec.bootNodes?.length) { - const tx2 = api.tx.dataPreservers.setBootNodes(rawSpec.para_id, rawSpec.bootNodes); - txs.push(tx2); - } - const tx3 = api.tx.registrar.markValidForCollating(rawSpec.para_id); - txs.push(tx3); - - return txs; -} - -const sleep = (ms: number): Promise => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; diff --git a/test/suites/rotation-para/test_rotation.ts b/test/suites/rotation-para/test_rotation.ts deleted file mode 100644 index 9569f33..0000000 --- a/test/suites/rotation-para/test_rotation.ts +++ /dev/null @@ -1,447 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { MIN_GAS_PRICE, customWeb3Request, generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { Signer } from "ethers"; -import fs from "fs/promises"; -import { getAuthorFromDigest } from "../../util/author"; -import { signAndSendAndInclude, waitToSession } from "../../util/block"; -import { createTransfer, waitUntilEthTxIncluded } from "../../util/ethereum"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; - -describeSuite({ - id: "R01", - title: "Zombie Tanssi Rotation Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - let container2001Api: ApiPromise; - let ethersSigner: Signer; - let assignment3; - let assignment5; - let allCollators: string[]; - let collatorName: Record; - let containerDbPaths: string[]; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - container2001Api = context.polkadotJs("Container2001"); - ethersSigner = context.ethers(); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - const container2001Network = container2001Api.consts.system.version.specName.toString(); - const paraId2001 = (await container2001Api.query.parachainInfo.parachainId()).toString(); - expect(container2001Network, "Container2001 API incorrect").to.contain("frontier-template"); - expect(paraId2001, "Container2001 API incorrect").to.be.equal("2001"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - const header2001 = await getHeaderFromRelay(relayApi, 2001); - - expect(header2000.number.toNumber()).to.be.equal(0); - expect(header2001.number.toNumber()).to.be.equal(0); - - // Initialize list of all collators, this should match the names from build-spec.sh script - allCollators = [ - "Collator1000-01", - "Collator1000-02", - "Collator2000-01", - "Collator2000-02", - "Collator2001-01", - "Collator2001-02", - "Collator2002-01", - "Collator2002-02", - ]; - // Initialize reverse map of collator key to collator name - collatorName = createCollatorKeyToNameMap(paraApi, allCollators); - console.log(collatorName); - - containerDbPaths = [ - "/data/containers/chains/simple_container_2000/paritydb/full-container-2000", - "/data/containers/chains/frontier_container_2001/paritydb/full-container-2001", - ]; - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T02", - title: "Set 1 collator per parachain, and full_rotation every 5 sessions", - timeout: 120000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - const tx1 = await paraApi.tx.configuration.setCollatorsPerContainer(1); - const tx2 = await paraApi.tx.configuration.setMinOrchestratorCollators(1); - const tx3 = await paraApi.tx.configuration.setMaxOrchestratorCollators(1); - const tx4 = await paraApi.tx.configuration.setFullRotationPeriod(5); - const tx1234 = paraApi.tx.utility.batchAll([tx1, tx2, tx3, tx4]); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx1234), alice); - }, - }); - - it({ - id: "T03", - title: "Test assignation did not change", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - getKeyringNimbusIdHex("Collator2002-01"), - getKeyringNimbusIdHex("Collator2002-02"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator2000-02")], - "2001": [getKeyringNimbusIdHex("Collator2001-01"), getKeyringNimbusIdHex("Collator2001-02")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T05", - title: "Blocks are being produced on container 2001", - test: async function () { - const blockNum = (await container2001Api.rpc.chain.getBlock()).block.header.number.toNumber(); - - expect(blockNum).to.be.greaterThan(0); - expect(await ethersSigner.provider.getBlockNumber(), "Safe tag is not present").to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T07", - title: "Test container chain 2001 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2001Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - const writtenCollators = (await container2001Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 120000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - const paraId2001 = await container2001Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - const containerChainCollators2001 = assignment.containerChains.toJSON()[paraId2001.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - const author2001 = await paraApi.query.authorNoting.latestAuthor(paraId2001); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - expect(containerChainCollators2001.includes(author2001.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - const genesisData2001 = await paraApi.query.registrar.paraGenesisData(2001); - expect(genesisData2001.toJSON().properties.isEthereum).to.be.true; - }, - }); - it({ - id: "T11", - title: "Transactions can be made with ethers", - timeout: 120000, - test: async function () { - const randomAccount = generateKeyringPair(); - const tx = await createTransfer(context, randomAccount.address, 1_000_000_000_000, { - gasPrice: MIN_GAS_PRICE, - }); - const txHash = await customWeb3Request(context.web3(), "eth_sendRawTransaction", [tx]); - await waitUntilEthTxIncluded( - () => context.waitBlock(1, "Container2001"), - context.web3(), - txHash.result - ); - expect(Number(await context.web3().eth.getBalance(randomAccount.address))).to.be.greaterThan(0); - }, - }); - it({ - id: "T12", - title: "On session 3 we have 1 collator per chain", - timeout: 240000, - test: async function () { - await waitToSession(context, paraApi, 3); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - await context.waitBlock(6, "Tanssi"); - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - assignment3 = assignment.toJSON(); - console.log("assignment session 3:"); - logAssignment(collatorName, assignment3); - - expect(assignment.orchestratorChain.length).toBe(1); - expect(assignment.containerChains.toJSON()[2000].length).toBe(1); - expect(assignment.containerChains.toJSON()[2001].length).toBe(1); - }, - }); - it({ - id: "T13", - title: "On session 4 collators start syncing the new chains", - timeout: 240000, - test: async function () { - await waitToSession(context, paraApi, 4); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - await context.waitBlock(6, "Tanssi"); - const futureAssignment = await paraApi.query.collatorAssignment.pendingCollatorContainerChain(); - // The assignment is random, so there is a small chance that it will be the same, - // and in that case this test shouldn't fail - if (futureAssignment.isNone) { - assignment5 = assignment3; - } else { - assignment5 = futureAssignment.toJSON(); - } - console.log("assignment session 5:"); - logAssignment(collatorName, assignment5); - - // First, check that nodes are still running in their previously assigned chain - const oldC2000 = collatorName[assignment3.containerChains[2000][0]]; - const oldC2001 = collatorName[assignment3.containerChains[2001][0]]; - const oldContainer2000DbPath = - getTmpZombiePath() + - `/${oldC2000}/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const oldContainer2001DbPath = - getTmpZombiePath() + - `/${oldC2001}/data/containers/chains/frontier_container_2001/paritydb/full-container-2001`; - expect(await directoryExists(oldContainer2000DbPath)).to.be.true; - expect(await directoryExists(oldContainer2001DbPath)).to.be.true; - - // Check that new assigned collators have started syncing - const c2000 = collatorName[assignment5.containerChains[2000][0]]; - const c2001 = collatorName[assignment5.containerChains[2001][0]]; - let unassignedCollators = getUnassignedCollators(allCollators, [c2000, c2001]); - // Remove old collators because they will still have some chains running - unassignedCollators = unassignedCollators.filter((x) => x !== oldC2000); - unassignedCollators = unassignedCollators.filter((x) => x !== oldC2001); - - // Verify that collators have container chain running by looking at db path, - // and unassignedCollators should not have any db path - const container2000DbPath = - getTmpZombiePath() + - `/${c2000}/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const container2001DbPath = - getTmpZombiePath() + - `/${c2001}/data/containers/chains/frontier_container_2001/paritydb/full-container-2001`; - expect(await directoryExists(container2000DbPath)).to.be.true; - expect(await directoryExists(container2001DbPath)).to.be.true; - - await ensureContainerDbPathsDontExist(unassignedCollators, containerDbPaths); - }, - }); - it({ - id: "T14", - title: "On session 5 collators stop the previously assigned chains", - timeout: 240000, - test: async function () { - await waitToSession(context, paraApi, 5); - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - expect(assignment.toJSON()).to.deep.equal(assignment5); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - // This also serves to check that Tanssi is producing blocks after the rotation - await context.waitBlock(6, "Tanssi"); - - // First, check that nodes have stopped in their previously assigned chain - const oldC2000 = collatorName[assignment3.containerChains[2000][0]]; - const oldC2001 = collatorName[assignment3.containerChains[2001][0]]; - const c2000 = collatorName[assignment5.containerChains[2000][0]]; - const c2001 = collatorName[assignment5.containerChains[2001][0]]; - const oldContainer2000DbPath = - getTmpZombiePath() + - `/${oldC2000}/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const oldContainer2001DbPath = - getTmpZombiePath() + - `/${oldC2001}/data/containers/chains/frontier_container_2001/paritydb/full-container-2001`; - // Edge case: collators may be assigned to the same chain, in that case the directory will still exist - if (oldC2000 != c2000) { - expect(await directoryExists(oldContainer2000DbPath)).to.be.false; - } - if (oldC2001 != c2001) { - expect(await directoryExists(oldContainer2001DbPath)).to.be.false; - } - - // Check that new assigned collators are running - const unassignedCollators = getUnassignedCollators(allCollators, [c2000, c2001]); - - // Verify that collators have container chain running by looking at db path, - // and unassignedCollators should not have any db path - const container2000DbPath = - getTmpZombiePath() + - `/${c2000}/data/containers/chains/simple_container_2000/paritydb/full-container-2000`; - const container2001DbPath = - getTmpZombiePath() + - `/${c2001}/data/containers/chains/frontier_container_2001/paritydb/full-container-2001`; - expect(await directoryExists(container2000DbPath)).to.be.true; - expect(await directoryExists(container2001DbPath)).to.be.true; - await ensureContainerDbPathsDontExist(unassignedCollators, containerDbPaths); - }, - }); - - it({ - id: "T15", - title: "Blocks are being produced on container 2000", - test: async function () { - await context.waitBlock(1, "Container2000"); - }, - }); - - it({ - id: "T16", - title: "Blocks are being produced on container 2001", - test: async function () { - await context.waitBlock(1, "Container2001"); - }, - }); - }, -}); - -async function directoryExists(directoryPath) { - try { - await fs.access(directoryPath, fs.constants.F_OK); - return true; - } catch (err) { - return false; - } -} - -/// Returns the /tmp/zombie-52234... path -function getTmpZombiePath() { - return process.env.MOON_ZOMBIE_DIR; -} - -/// Given a list of collators and a list of dbPaths, checks that the path does not exist for all the collators. -/// This can be used to ensure that all the unassigned collators do not have any container chains running. -async function ensureContainerDbPathsDontExist(collators: string[], pathsToVerify: string[]) { - for (const collator of collators) { - for (const path of pathsToVerify) { - const fullPath = getTmpZombiePath() + `/${collator}${path}`; - expect(await directoryExists(fullPath), `Container DB path exists for ${collator}: ${fullPath}`).to.be - .false; - } - } -} - -/// Create a map of collator key "5C5p..." to collator name "Collator1000-01". -function createCollatorKeyToNameMap(paraApi, collatorNames: string[]): Record { - const collatorName: Record = {}; - - collatorNames.forEach((name) => { - const hexAddress = getKeyringNimbusIdHex(name); - const k = paraApi.createType("AccountId", hexAddress); - collatorName[k] = name; - }); - - return collatorName; -} - -/// Given a list of all collators and collators assigned to containers, returns the collators that are not assigned to -/// containers. -function getUnassignedCollators(allCollators: string[], assignedToContainers: string[]): string[] { - return allCollators.filter((collator) => !assignedToContainers.includes(collator)); -} - -function logAssignment(collatorName, assignment) { - const nameAssignment = { - orchestratorChain: assignment.orchestratorChain.map((x) => collatorName[x]), - containerChains: Object.keys(assignment.containerChains).reduce((result, key) => { - result[key] = assignment.containerChains[key].map((x) => collatorName[x]); - return result; - }, {}), - }; - - console.log(nameAssignment); -} diff --git a/test/suites/rt-upgrade-chopsticks-frontier-template/test-upgrade-chain.ts b/test/suites/rt-upgrade-chopsticks-frontier-template/test-upgrade-chain.ts deleted file mode 100644 index f81ebbb..0000000 --- a/test/suites/rt-upgrade-chopsticks-frontier-template/test-upgrade-chain.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { MoonwallContext, beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { generateKeyringPair } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { alith } from "@moonwall/util"; - -const MAX_BALANCE_TRANSFER_TRIES = 5; -describeSuite({ - id: "CAN", - title: "Chopsticks Frontier Template Upgrade Test", - foundationMethods: "chopsticks", - testCases: function ({ it, context, log }) { - let api: ApiPromise; - - beforeAll(async () => { - api = context.polkadotJs(); - - const rtBefore = api.consts.system.version.specVersion.toNumber(); - log(`About to upgrade to runtime at:`); - log((await MoonwallContext.getContext()).rtUpgradePath); - - await context.upgradeRuntime(); - - const rtafter = api.consts.system.version.specVersion.toNumber(); - - if (rtBefore === rtafter) { - throw new Error("Runtime upgrade failed"); - } - - log(`RT upgrade has increased specVersion from ${rtBefore} to ${rtafter}`); - - const specName = api.consts.system.version.specName.toString(); - log(`Currently connected to chain: ${specName}`); - }); - - it({ - id: "T1", - timeout: 60000, - title: "Can create new blocks", - test: async () => { - const currentHeight = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - await context.createBlock({ count: 2 }); - const newHeight = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(newHeight - currentHeight).to.be.equal(2); - }, - }); - it({ - id: "T2", - timeout: 60000, - title: "Can send balance transfers", - test: async () => { - const randomAccount = generateKeyringPair("ethereum"); - - let tries = 0; - const balanceBefore = (await api.query.system.account(randomAccount.address)).data.free.toBigInt(); - - /// It might happen that by accident we hit a session change - /// A block in which a session change occurs cannot hold any tx - /// Chopsticks does not have the notion of tx pool either, so we need to retry - /// Therefore we just retry at most MAX_BALANCE_TRANSFER_TRIES - while (tries < MAX_BALANCE_TRANSFER_TRIES) { - const txHash = await api.tx.balances - .transferAllowDeath(randomAccount.address, 1_000_000_000) - .signAndSend(alith); - const result = await context.createBlock({ count: 1 }); - - const block = await api.rpc.chain.getBlock(result.result); - const includedTxHashes = block.block.extrinsics.map((x) => x.hash.toString()); - if (includedTxHashes.includes(txHash.toString())) { - break; - } - tries++; - } - - const balanceAfter = (await api.query.system.account(randomAccount.address)).data.free.toBigInt(); - expect(balanceBefore < balanceAfter).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/rt-upgrade-chopsticks-orchestrator/test-upgrade-chain.ts b/test/suites/rt-upgrade-chopsticks-orchestrator/test-upgrade-chain.ts deleted file mode 100644 index adae379..0000000 --- a/test/suites/rt-upgrade-chopsticks-orchestrator/test-upgrade-chain.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { MoonwallContext, beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { generateKeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; - -const MAX_BALANCE_TRANSFER_TRIES = 5; -describeSuite({ - id: "CAN", - title: "Chopsticks Dancebox Upgrade Test", - foundationMethods: "chopsticks", - testCases: function ({ it, context, log }) { - let api: ApiPromise; - - beforeAll(async () => { - api = context.polkadotJs(); - - const rtBefore = api.consts.system.version.specVersion.toNumber(); - const sessionBefore = api.query.session.currentIndex(); - log(`About to upgrade to runtime at:`); - log((await MoonwallContext.getContext()).rtUpgradePath); - - await context.upgradeRuntime(); - const sessionAfter = api.query.session.currentIndex(); - - // New sessions can lead to the runtime upgrade not being correctly applied - // Hence we retry once more just in case - if ((await sessionAfter).toNumber() > (await sessionBefore).toNumber()) { - log(`New session encountered, just in case retrying`); - await context.upgradeRuntime(); - } - - const rtafter = api.consts.system.version.specVersion.toNumber(); - - if (rtBefore === rtafter) { - throw new Error("Runtime upgrade failed"); - } - - log(`RT upgrade has increased specVersion from ${rtBefore} to ${rtafter}`); - - const specName = api.consts.system.version.specName.toString(); - log(`Currently connected to chain: ${specName}`); - }); - - it({ - id: "T1", - timeout: 60000, - title: "Can create new blocks", - test: async () => { - const currentHeight = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - await context.createBlock({ count: 2 }); - const newHeight = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(newHeight - currentHeight).to.be.equal(2); - }, - }); - it({ - id: "T2", - timeout: 60000, - title: "Can send balance transfers", - test: async () => { - const randomAccount = generateKeyringPair("sr25519"); - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - let tries = 0; - const balanceBefore = (await api.query.system.account(randomAccount.address)).data.free.toBigInt(); - - /// It might happen that by accident we hit a session change - /// A block in which a session change occurs cannot hold any tx - /// Chopsticks does not have the notion of tx pool either, so we need to retry - /// Therefore we just retry at most MAX_BALANCE_TRANSFER_TRIES - while (tries < MAX_BALANCE_TRANSFER_TRIES) { - const txHash = await api.tx.balances - .transferAllowDeath(randomAccount.address, 1_000_000_000) - .signAndSend(alice); - const result = await context.createBlock({ count: 1 }); - - const block = await api.rpc.chain.getBlock(result.result); - const includedTxHashes = block.block.extrinsics.map((x) => x.hash.toString()); - if (includedTxHashes.includes(txHash.toString())) { - break; - } - tries++; - } - - const balanceAfter = (await api.query.system.account(randomAccount.address)).data.free.toBigInt(); - expect(balanceBefore < balanceAfter).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/rt-upgrade-zombienet/test-upgrade-chain.ts b/test/suites/rt-upgrade-zombienet/test-upgrade-chain.ts deleted file mode 100644 index a9e3ff0..0000000 --- a/test/suites/rt-upgrade-zombienet/test-upgrade-chain.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { MoonwallContext, beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import fs from "node:fs"; - -describeSuite({ - id: "R01", - title: "Zombie Dancebox Upgrade Test", - foundationMethods: "zombie", - testCases: function ({ it, context, log }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let alice: KeyringPair; - - beforeAll(async () => { - const keyring = new Keyring({ type: "sr25519" }); - alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - paraApi = context.polkadotJs("parachain"); - relayApi = context.polkadotJs("relaychain"); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - - const currentBlock = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(currentBlock, "Parachain not producing blocks").to.be.greaterThan(0); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T02", - title: "Chain can be upgraded", - timeout: 600000, - test: async function () { - const blockNumberBefore = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - const currentCode = await paraApi.rpc.state.getStorage(":code"); - const codeString = currentCode.toString(); - - const wasm = fs.readFileSync((await MoonwallContext.getContext()).rtUpgradePath); - const rtHex = `0x${wasm.toString("hex")}`; - - if (rtHex === codeString) { - log("Runtime already upgraded, skipping test"); - return; - } else { - log("Runtime not upgraded, proceeding with test"); - log("Current runtime hash: " + rtHex.slice(0, 10) + "..." + rtHex.slice(-10)); - log("New runtime hash: " + codeString.slice(0, 10) + "..." + codeString.slice(-10)); - } - - await context.upgradeRuntime({ from: alice, logger: log }); - await context.waitBlock(2); - const blockNumberAfter = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - log(`Before: #${blockNumberBefore}, After: #${blockNumberAfter}`); - expect(blockNumberAfter, "Block number did not increase").to.be.greaterThan(blockNumberBefore); - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-authority-consistency-assignation.ts b/test/suites/smoke-test-common/test-authority-consistency-assignation.ts deleted file mode 100644 index d0206ca..0000000 --- a/test/suites/smoke-test-common/test-authority-consistency-assignation.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; - -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S01", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - - beforeAll(() => { - api = context.polkadotJs(); - }); - - it({ - id: "C01", - title: "Collator assignation and authority assignation should match with observed mapping in orchestrator", - test: async function () { - const assignmentCollatorAccount = ( - await api.query.collatorAssignment.collatorContainerChain() - ).toJSON(); - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - - const assignmentCollatorKey = ( - await api.query.authorityAssignment.collatorContainerChain(sessionIndex) - ).toJSON(); - const authorityKeyMapping = ( - await api.query.authorityMapping.authorityIdMapping(sessionIndex) - ).toJSON(); - for (const key of assignmentCollatorKey["orchestratorChain"]) { - const assignedAccount = authorityKeyMapping[key.toString()]; - expect(assignmentCollatorAccount["orchestratorChain"].includes(assignedAccount.toString())).to.be - .true; - } - }, - }); - - it({ - id: "C02", - title: "Collator assignation and authority assignation should match with observed mapping in containers", - test: async function () { - const assignmentCollatorAccount = ( - await api.query.collatorAssignment.collatorContainerChain() - ).toJSON(); - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - const assignmentCollatorKey = ( - await api.query.authorityAssignment.collatorContainerChain(sessionIndex) - ).toJSON(); - const authorityKeyMapping = ( - await api.query.authorityMapping.authorityIdMapping(sessionIndex) - ).toJSON(); - for (const container of Object.keys(assignmentCollatorKey["containerChains"])) { - for (const key of assignmentCollatorKey["containerChains"][container]) { - const assignedAccount = authorityKeyMapping[key.toString()]; - expect( - assignmentCollatorAccount["containerChains"][container].includes(assignedAccount.toString()) - ).to.be.true; - } - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-block-author-logs.ts b/test/suites/smoke-test-common/test-block-author-logs.ts deleted file mode 100644 index 08da9a1..0000000 --- a/test/suites/smoke-test-common/test-block-author-logs.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { getBlockArray } from "@moonwall/util"; -import { ApiPromise } from "@polkadot/api"; -import { GenericExtrinsic } from "@polkadot/types"; -import { FrameSystemEventRecord } from "@polkadot/types/lookup"; -import { AnyTuple } from "@polkadot/types/types"; -import { hexToNumber, stringToHex } from "@polkadot/util"; -import Bottleneck from "bottleneck"; - -const timePeriod = process.env.TIME_PERIOD ? Number(process.env.TIME_PERIOD) : 1 * 60 * 60 * 1000; -const timeout = Math.max(Math.floor(timePeriod / 12), 5000); -const hours = (timePeriod / (1000 * 60 * 60)).toFixed(2); - -type BlockFilteredRecord = { - blockNum: number; - extrinsics: GenericExtrinsic[]; - events: FrameSystemEventRecord[]; - logs; - authorities; -}; - -describeSuite({ - id: "S02", - title: `Authors in the last ${hours} should match the slot number provided`, - foundationMethods: "read_only", - testCases: ({ it, context, log }) => { - let api: ApiPromise; - let blockData: BlockFilteredRecord[]; - - beforeAll(async function () { - api = context.polkadotJs(); - const blockNumArray = await getBlockArray(api, timePeriod); - log(`Collecting ${hours} hours worth of authors`); - - const getBlockData = async (blockNum: number) => { - const blockHash = await api.rpc.chain.getBlockHash(blockNum); - const signedBlock = await api.rpc.chain.getBlock(blockHash); - const apiAt = await api.at(blockHash); - - return { - blockNum: blockNum, - extrinsics: signedBlock.block.extrinsics, - events: await apiAt.query.system.events(), - logs: signedBlock.block.header.digest.logs, - authorities: await apiAt.query.authorityAssignment.collatorContainerChain( - await apiAt.query.session.currentIndex() - ), - }; - }; - const limiter = new Bottleneck({ maxConcurrent: 5, minTime: 100 }); - blockData = await Promise.all(blockNumArray.map((num) => limiter.schedule(() => getBlockData(num)))); - }, timeout); - - it({ - id: "C01", - title: "Author should be correctly set", - test: async function () { - const failures = blockData - .map(({ blockNum, logs, authorities }) => { - const nimbusLog = logs.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("nmbs") - ); - // nimbus log has to exist - const author = nimbusLog[0].asPreRuntime[1].toHex(); - - // aura log has to exist - const slotLog = logs.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("aura") - ); - const slot = slotLog[0].asPreRuntime[1].reverse().toHex(); - - const orchestratorAuthorities = authorities.toJSON()["orchestratorChain"]; - const expectedAuthor = - orchestratorAuthorities[hexToNumber(slot) % orchestratorAuthorities.length]; - - return { blockNum, author, expectedAuthor }; - }) - .filter(({ expectedAuthor, author }) => expectedAuthor.toString() != author.toString()); - - failures.forEach(({ blockNum, author, expectedAuthor }) => { - log( - `Author at block #${blockNum} was #${author.toString()}` + - `but should have been #${expectedAuthor.toString()}` - ); - }); - - expect( - failures.length, - `Please investigate blocks ${failures.map((a) => a.blockNum).join(`, `)}; authors ` - ).to.equal(0); - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-block-finalized.ts b/test/suites/smoke-test-common/test-block-finalized.ts deleted file mode 100644 index 6a0845b..0000000 --- a/test/suites/smoke-test-common/test-block-finalized.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { describeSuite, expect, beforeAll } from "@moonwall/cli"; -import { getBlockTime } from "@moonwall/util"; - -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S03", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context, log }) => { - let api: ApiPromise; - - beforeAll(() => { - api = context.polkadotJs(); - }); - - it({ - id: "C01", - title: "Parachain blocks should be finalized", - test: async function () { - const head = await api.rpc.chain.getFinalizedHead(); - const block = await api.rpc.chain.getBlock(head); - const diff = Date.now() - getBlockTime(block); - log(`Last finalized block was ${diff / 1000} seconds ago`); - expect(diff).to.be.lessThanOrEqual(10 * 60 * 1000); // 10 minutes in milliseconds - expect(api.consts.system.version.specVersion.toNumber()).to.be.greaterThan(0); - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-collator-number-consistency.ts b/test/suites/smoke-test-common/test-collator-number-consistency.ts deleted file mode 100644 index b144332..0000000 --- a/test/suites/smoke-test-common/test-collator-number-consistency.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; - -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S10", - title: "Test collator number consistency for parathreads and parachains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(() => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "Collator assignation length should be different if parachain or parathread", - test: async function () { - if (runtimeVersion < 500) { - return; - } - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - - const assignmentCollatorKey = ( - await api.query.authorityAssignment.collatorContainerChain(sessionIndex) - ).toJSON(); - const configuration = await api.query.configuration.activeConfig(); - - if (assignmentCollatorKey["containerChains"] != undefined) { - for (const container of Object.keys(assignmentCollatorKey["containerChains"])) { - // This is a parathread if this is Some - if ((await api.query.registrar.parathreadParams(container)).isNone) { - expect( - assignmentCollatorKey["containerChains"][container].length, - `Container chain ${container} has ${assignmentCollatorKey["containerChains"][container].length} but it should have ${configuration.collatorsPerContainer}` - ).toBe(configuration.collatorsPerContainer.toNumber()); - } else { - expect( - assignmentCollatorKey["containerChains"][container].length, - `Parathread ${container} has ${assignmentCollatorKey["containerChains"][container].length} but it should have ${configuration.collatorsPerParathread}` - ).toBe(configuration.collatorsPerParathread.toNumber()); - } - } - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-configuration-consistency.ts b/test/suites/smoke-test-common/test-configuration-consistency.ts deleted file mode 100644 index 9e21400..0000000 --- a/test/suites/smoke-test-common/test-configuration-consistency.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; - -import { ApiPromise } from "@polkadot/api"; -import { hasEnoughCredits } from "util/payment"; -import { u32, Vec } from "@polkadot/types-codec"; - -describeSuite({ - id: "S04", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let blocksPerSession; - const costPerSession = 100_000_000n; - const costPerBlock = 1_000_000n; - - beforeAll(() => { - api = context.polkadotJs(); - const chain = api.consts.system.version.specName.toString(); - blocksPerSession = chain == "Dancebox" ? 600n : 50n; - }); - - it({ - id: "C01", - title: "Config orchestrator max collators parameters should be respected", - test: async function () { - const config = await api.query.configuration.activeConfig(); - // get current session - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - // get current authorities - const authorities = await api.query.authorityAssignment.collatorContainerChain(sessionIndex); - - // We cannot exced max collators - expect(authorities.toJSON()["orchestratorChain"].length).to.be.lessThanOrEqual( - config["maxOrchestratorCollators"].toNumber() - ); - }, - }); - - it({ - id: "C02", - title: "Config orchestrator min collators parameters should be respected", - test: async function () { - const config = await api.query.configuration.activeConfig(); - // get current session - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - // get current authorities - const authorities = (await api.query.authorityAssignment.collatorContainerChain(sessionIndex)).toJSON(); - - // If we have container chain collators, is because we at least assigned min to orchestrator - if (Object.keys(authorities["containerChains"]).length != 0) { - expect(authorities["orchestratorChain"].length).to.be.greaterThanOrEqual( - config["minOrchestratorCollators"].toNumber() - ); - } - }, - }); - - it({ - id: "C03", - title: "Config all registered paras should be filled if more than min collators in orchestrator", - test: async function () { - const config = await api.query.configuration.activeConfig(); - // get current session - const sessionIndex = (await api.query.session.currentIndex()).toNumber(); - // get pending authorities - // the reason for getting pending is that the hasEnoughCredits check it's done over the pending ones - const authorities = ( - await api.query.authorityAssignment.collatorContainerChain(sessionIndex + 1) - ).toJSON(); - - // If we have container chain collators, is because we at least assigned min to orchestrator - if ( - Object.keys(authorities["orchestratorChain"]).length > config["minOrchestratorCollators"].toNumber() - ) { - let containersToCompareAgainst: Vec; - // If pending para ids for the session are empty we compare with registered para id, otherwise - // we compare with pending para ids. - const liveContainers = await api.query.registrar.registeredParaIds(); - const pendingContainers = await api.query.registrar.pendingParaIds(); - - if (pendingContainers.length == 0) { - containersToCompareAgainst = liveContainers; - } else { - const foundEntry = pendingContainers.find((entry) => entry[0].toNumber() === sessionIndex + 1); - if (foundEntry) { - containersToCompareAgainst = foundEntry[1]; - } else { - containersToCompareAgainst = liveContainers; - } - } - - let numWithNoCredits = 0; - - // This should be true as long as they have enough credits for getting collators - for (const container of containersToCompareAgainst) { - // we should only check those who have enough credits - if ( - await hasEnoughCredits(api, container, blocksPerSession, 2n, costPerSession, costPerBlock) - ) { - // A different test checks that this number is correct with respect to configuration - // test-collator-number-consistency - // Here we only check that that we have collators - expect(authorities["containerChains"][container.toString()].length).to.be.greaterThan(0); - } else { - numWithNoCredits += 1; - } - } - - expect(Object.keys(authorities["containerChains"]).length).to.be.equal( - containersToCompareAgainst.length - numWithNoCredits - ); - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-consistency-services-payment.ts b/test/suites/smoke-test-common/test-consistency-services-payment.ts deleted file mode 100644 index 1a29224..0000000 --- a/test/suites/smoke-test-common/test-consistency-services-payment.ts +++ /dev/null @@ -1,48 +0,0 @@ -import "@tanssi/api-augment"; -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; -import { hasEnoughCredits } from "util/payment"; - -describeSuite({ - id: "S09", - title: "Check services payment consistency", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - const costPerSession = 100_000_000n; - const costPerBlock = 1_000_000n; - let blocksPerSession; - - beforeAll(async () => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - const chain = api.consts.system.version.specName.toString(); - blocksPerSession = chain == "Dancebox" ? 600n : 50n; - }); - - it({ - id: "C01", - title: "All scheduled parachains should be able to pay for at least 2 sessions", - test: async function () { - if (runtimeVersion < 500) { - return; - } - - // If they have collators scheduled, they should have at least enough money to pay - let pending = await api.query.collatorAssignment.pendingCollatorContainerChain(); - if (pending.isNone) { - pending = await api.query.collatorAssignment.collatorContainerChain(); - } - if (pending["containerChains"] != undefined) { - for (const container of Object.keys(pending.toJSON()["containerChains"])) { - expect( - await hasEnoughCredits(api, container, blocksPerSession, 2n, costPerSession, costPerBlock), - `Container chain ${container} was assigned collators without having a way to pay for it` - ).toBe(true); - } - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-inflation-rewards.ts b/test/suites/smoke-test-common/test-inflation-rewards.ts deleted file mode 100644 index 7d69b94..0000000 --- a/test/suites/smoke-test-common/test-inflation-rewards.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -import { ApiDecoration } from "@polkadot/api/types"; -import { getAuthorFromDigest } from "util/author"; -import { fetchIssuance, filterRewardFromOrchestratorWithFailure, fetchRewardAuthorContainers } from "util/block"; -import { PARACHAIN_BOND } from "util/constants"; - -describeSuite({ - id: "S08", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let apiAt: ApiDecoration<"promise">; - let api: ApiPromise; - - let runtimeVersion; - - beforeAll(async () => { - api = context.polkadotJs(); - const latestBlock = await api.rpc.chain.getBlock(); - const latestBlockHash = latestBlock.block.hash; - - // ApiAt to evaluate rewards, otherwise orchestrator reward might not be correct - apiAt = await api.at(latestBlockHash); - - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "Inflation for orchestrator should match with expected number of containers", - test: async function () { - if (runtimeVersion < 300) { - return; - } - - const author = await getAuthorFromDigest(apiAt); - const events = await apiAt.query.system.events(); - - // Fetch current session - const currentSession = await apiAt.query.session.currentIndex(); - const keys = await apiAt.query.authorityMapping.authorityIdMapping(currentSession); - const account = keys.toJSON()[author]; - // 70% is distributed across all rewards - const issuance = await fetchIssuance(events).amount.toBigInt(); - const chainRewards = (issuance * 7n) / 10n; - const numberOfChains = await apiAt.query.registrar.registeredParaIds(); - const expectedOrchestratorReward = chainRewards / BigInt(numberOfChains.length + 1); - const reward = await filterRewardFromOrchestratorWithFailure(events, account); - // we know there might be rounding errors, so we always check it is in the range +-1 - expect( - reward >= expectedOrchestratorReward - 1n && reward <= expectedOrchestratorReward + 1n, - `orchestrator rewards not in the range, Actual: ${reward}, Expected: ${expectedOrchestratorReward}` - ).to.be.true; - }, - }); - - it({ - id: "C02", - title: "Inflation for containers should match with expected number of containers", - test: async function () { - if (runtimeVersion < 300) { - return; - } - // 70% is distributed across all rewards - const events = await apiAt.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - const chainRewards = (issuance * 7n) / 10n; - const numberOfChains = await apiAt.query.registrar.registeredParaIds(); - const expectedChainReward = chainRewards / BigInt(numberOfChains.length + 1); - const rewardEvents = await fetchRewardAuthorContainers(events); - for (const index in rewardEvents) { - expect( - rewardEvents[index].balance.toBigInt() >= expectedChainReward - 1n && - rewardEvents[index].balance.toBigInt() <= expectedChainReward + 1n, - `rewardEvents not in the range, Index: ${index} Actual: ${rewardEvents[ - index - ].balance.toBigInt()}, Expected: ${expectedChainReward}` - ).to.be.true; - } - }, - }); - - it({ - id: "C03", - title: "Issuance is correct", - test: async function () { - if (runtimeVersion < 300) { - return; - } - const latestBlock = await api.rpc.chain.getBlock(); - - const latestBlockHash = latestBlock.block.hash; - const latestParentBlockHash = latestBlock.block.header.parentHash; - const apiAtIssuanceAfter = await api.at(latestBlockHash); - const apiAtIssuanceBefore = await api.at(latestParentBlockHash); - - const supplyBefore = (await apiAtIssuanceBefore.query.balances.totalIssuance()).toBigInt(); - - const events = await apiAtIssuanceAfter.query.system.events(); - - const issuance = await fetchIssuance(events).amount.toBigInt(); - - // expected issuance block increment in prod - const expectedIssuanceIncrement = - runtimeVersion > 500 ? (supplyBefore * 9n) / 1_000_000_000n : (supplyBefore * 19n) / 1_000_000_000n; - - // we know there might be rounding errors, so we always check it is in the range +-1 - expect( - issuance >= expectedIssuanceIncrement - 1n && issuance <= expectedIssuanceIncrement + 1n, - `Issuance not in the range, Actual: ${issuance}, Expected: ${expectedIssuanceIncrement}` - ).to.be.true; - }, - }); - - it({ - id: "C04", - title: "Parachain bond receives dust plus 30% plus non-distributed rewards", - test: async function () { - if (runtimeVersion < 300) { - return; - } - const latestBlock = await api.rpc.chain.getBlock(); - - const latestBlockHash = latestBlock.block.hash; - const latestParentBlockHash = latestBlock.block.header.parentHash; - const apiAtIssuanceAfter = await api.at(latestBlockHash); - const apiAtIssuanceBefore = await api.at(latestParentBlockHash); - - let expectedAmountParachainBond = 0n; - - // Pending chains to reward should be read with previous api - const pendingChainRewards = await apiAtIssuanceBefore.query.inflationRewards.chainsToReward(); - const numberOfChains = BigInt( - (await apiAtIssuanceBefore.query.registrar.registeredParaIds()).length + 1 - ); - - if (pendingChainRewards.isSome) { - const rewardPerChain = pendingChainRewards.unwrap().rewardsPerChain.toBigInt(); - const pendingChainsToReward = BigInt(pendingChainRewards.unwrap().paraIds.length); - expectedAmountParachainBond += pendingChainsToReward * rewardPerChain; - } - - const parachainBondBalanceBefore = ( - await apiAtIssuanceBefore.query.system.account(PARACHAIN_BOND) - ).data.free.toBigInt(); - - const currentChainRewards = await apiAtIssuanceAfter.query.inflationRewards.chainsToReward(); - const events = await apiAtIssuanceAfter.query.system.events(); - const issuance = await fetchIssuance(events).amount.toBigInt(); - - // Dust from computations also goes to parachainBond - let dust = 0n; - if (currentChainRewards.isSome) { - const currentRewardPerChain = currentChainRewards.unwrap().rewardsPerChain.toBigInt(); - dust = (issuance * 7n) / 10n - numberOfChains * currentRewardPerChain; - } - const parachainBondBalanceAfter = ( - await apiAtIssuanceAfter.query.system.account(PARACHAIN_BOND) - ).data.free.toBigInt(); - expectedAmountParachainBond += (issuance * 3n) / 10n + dust; - - // we know there might be rounding errors, so we always check it is in the range +-1 - expect( - parachainBondBalanceAfter - parachainBondBalanceBefore >= expectedAmountParachainBond - 1n && - parachainBondBalanceAfter - parachainBondBalanceBefore <= expectedAmountParachainBond + 1n, - `Parachain Bond rewards not in the range, Actual: ${ - parachainBondBalanceAfter - parachainBondBalanceBefore - }, Expected: ${expectedAmountParachainBond}` - ).to.be.true; - }, - }); - }, -}); diff --git a/test/suites/smoke-test-common/test-relay-storage-roots-consistency.ts b/test/suites/smoke-test-common/test-relay-storage-roots-consistency.ts deleted file mode 100644 index 04f006b..0000000 --- a/test/suites/smoke-test-common/test-relay-storage-roots-consistency.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; - -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S11", - title: "Test relay storage roots max number", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(() => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "Only MaxRelayStorageRoots should be stored", - test: async function () { - if (runtimeVersion < 500) { - return; - } - const maxStorageRoots = (await api.consts.relayStorageRoots.maxStorageRoots).toNumber(); - const relayStorageRoots = (await api.query.relayStorageRoots.relayStorageRoot.keys()).length; - const relayStorageRootKeys = (await api.query.relayStorageRoots.relayStorageRootKeys()).length; - expect( - maxStorageRoots, - `We should store ${maxStorageRoots} roots at most and we have ${relayStorageRoots}` - ).toBe(relayStorageRoots); - - expect( - maxStorageRoots, - `We should store ${maxStorageRoots} keys at most and we have ${relayStorageRootKeys}` - ).toBe(relayStorageRootKeys); - }, - }); - it({ - id: "C02", - title: "All numbers should have its corresponding root", - test: async function () { - if (runtimeVersion < 500) { - return; - } - const latestBlock = await api.rpc.chain.getBlock(); - const latestBlockHash = latestBlock.block.hash; - const apiAtBlock = await api.at(latestBlockHash); - const relayStorageRootKeys = await apiAtBlock.query.relayStorageRoots.relayStorageRootKeys(); - for (const number of relayStorageRootKeys) { - expect( - (await apiAtBlock.query.relayStorageRoots.relayStorageRoot(number)).isSome, - `Block Number ${number} should have a corresponding root` - ).to.be.true; - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-dancebox/test-invulnerables-priority.ts b/test/suites/smoke-test-dancebox/test-invulnerables-priority.ts deleted file mode 100644 index 47293c5..0000000 --- a/test/suites/smoke-test-dancebox/test-invulnerables-priority.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S06", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(async () => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "Invulnerables have priority over staking candidates", - test: async function () { - if (runtimeVersion < 300) { - return; - } - - const sessionLength = 600; - - const currentBlock = await api.rpc.chain.getBlock(); - const currentBlockNumber = currentBlock.block.header.number.toNumber(); - const currentBlockApi = await context.polkadotJs().at(currentBlock.block.hash); - - const currentSession = Math.trunc(currentBlockNumber / sessionLength); - const blockToCheck = (currentSession - 1) * sessionLength - 1; - - const apiJustBeforeTheSession = await api.at(await api.rpc.chain.getBlockHash(blockToCheck)); - - const invulnerables = await apiJustBeforeTheSession.query.invulnerables.invulnerables(); - const eligibleCandidates = ( - await apiJustBeforeTheSession.query.pooledStaking.sortedEligibleCandidates() - ).map(({ candidate }) => candidate.toString()); - const collators = await currentBlockApi.query.session.validators(); - - if (collators.length <= invulnerables.length) { - // Less collators than invulnerables: all collators must be invulnerables - for (const collator of collators) { - expect( - invulnerables.toJSON().includes(collator.toString()), - `Collator should be in invulnerable list: ${collator.toString()}` - ).to.be.true; - } - } else { - // More collators than invulnerables: all invulnerables must be collators - for (const invulnerable of invulnerables) { - expect( - collators.toJSON().includes(invulnerable.toString()), - `Invulnerable should be in collators list: ${invulnerable.toString()}` - ).to.be.true; - } - - // Remaining collators must be from staking - const collatorsNotInvulnerables = collators - .toJSON() - .filter((collator) => !invulnerables.toJSON().includes(collator.toString())); - for (const collator of collatorsNotInvulnerables) { - expect( - eligibleCandidates.includes(collator.toString()), - `Collator should be a staking candidate: ${collator.toString()}` - ).to.be.true; - } - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-dancebox/test-randomness-consistency.ts b/test/suites/smoke-test-dancebox/test-randomness-consistency.ts deleted file mode 100644 index db70abc..0000000 --- a/test/suites/smoke-test-dancebox/test-randomness-consistency.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; - -import { ApiPromise } from "@polkadot/api"; -import { fetchRandomnessEvent } from "util/block"; -describeSuite({ - id: "S09", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(() => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "Randomness storage is empty because on-finalize cleans it, unless on session change boundaries", - test: async function () { - if (runtimeVersion < 300) { - return; - } - const sessionLength = 600; - const currentBlock = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - const randomness = await api.query.collatorAssignment.randomness(); - - // if the next block is a session change, then this storage will be populated - if (currentBlock + (1 % sessionLength) == 0) { - expect(randomness.isEmpty).to.not.be.true; - } else { - expect(randomness.isEmpty).to.be.true; - } - }, - }); - - it({ - id: "C02", - title: "Rotation happened at previous session boundary", - test: async function () { - if (runtimeVersion < 300) { - return; - } - const sessionLength = runtimeVersion > 500 ? 600 : 300; - - const currentBlock = (await api.rpc.chain.getBlock()).block.header.number.toNumber(); - - const blockToCheck = Math.trunc(currentBlock / sessionLength) * sessionLength; - const apiAtIssuanceNewSession = await api.at(await api.rpc.chain.getBlockHash(blockToCheck)); - const apiAtIssuanceBeforeNewSession = await api.at(await api.rpc.chain.getBlockHash(blockToCheck - 1)); - - // Just before, the randomness was not empty - const randomnessBeforeSession = - await apiAtIssuanceBeforeNewSession.query.collatorAssignment.randomness(); - expect(randomnessBeforeSession.isEmpty).to.not.be.true; - - // After, the randomness gets cleaned - const randomnessAfterSession = await apiAtIssuanceNewSession.query.collatorAssignment.randomness(); - expect(randomnessAfterSession.isEmpty).to.be.true; - - // The rotation event should have kicked in, if enabled - const events = await apiAtIssuanceNewSession.query.system.events(); - const randomnessEvent = fetchRandomnessEvent(events); - const session = await apiAtIssuanceNewSession.query.session.currentIndex(); - - expect(randomnessEvent.randomSeed.toHex()).to.not.be.equal( - "0x0000000000000000000000000000000000000000000000000000000000000000" - ); - expect(randomnessEvent.targetSession.toNumber()).to.be.equal(session.toNumber() + 1); - const configuration = await apiAtIssuanceNewSession.query.configuration.activeConfig(); - if ( - configuration.fullRotationPeriod == 0 || - randomnessEvent.targetSession.toNumber() % configuration.fullRotationPeriod != 0 - ) { - expect(randomnessEvent.fullRotation.toHuman()).to.be.false; - } else { - expect(randomnessEvent.fullRotation.toHuman()).to.be.true; - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-dancebox/test-staking-consistency.ts b/test/suites/smoke-test-dancebox/test-staking-consistency.ts deleted file mode 100644 index 7285033..0000000 --- a/test/suites/smoke-test-dancebox/test-staking-consistency.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S05", - title: "Sample suite that only runs on Dancebox chains", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(async () => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "All eligible candidates have enough self delegation", - timeout: 120000, - test: async function () { - if (runtimeVersion < 200) { - return; - } - - const eligibleCandidates = await api.query.pooledStaking.sortedEligibleCandidates(); - - const minimum = 10_000_000_000_000_000n; - - for (const c of eligibleCandidates) { - const candidate = c.candidate.toHex(); - - // TODO: Currently it is not possible to directly get the - // stake of a delegator in a given pool without having to - // compute it based on the amont of shares, total shares and - // total staked of that pool. - // However as no rewards are distributed yet, the stake - // held in that pool should always correspond to the staked - // amount. - // We should add a runtime API to easily get the staked - // amount and update this test, before rewards or slashing - // is introduced. - - const joining = ( - await api.query.pooledStaking.pools(candidate, { - JoiningSharesHeldStake: { - delegator: candidate, - }, - }) - ).toBigInt(); - - const autoCompoundingSharesTotalStaked = ( - await api.query.pooledStaking.pools(candidate, { - AutoCompoundingSharesTotalStaked: {}, - }) - ).toBigInt(); - - const autoCompoundingSharesSupply = ( - await api.query.pooledStaking.pools(candidate, { - AutoCompoundingSharesSupply: {}, - }) - ).toBigInt(); - - const autoCompoundingSharesOfCandidate = ( - await api.query.pooledStaking.pools(candidate, { - AutoCompoundingShares: { - delegator: candidate, - }, - }) - ).toBigInt(); - - // auto stake is calculated using this method as the AutoCompoundingSharesHeldStake is not updated with rewards received - // by the candidate, rather the value of each share of candidate increases. - const auto = - autoCompoundingSharesSupply == 0n - ? 0n - : (autoCompoundingSharesOfCandidate * autoCompoundingSharesTotalStaked) / - autoCompoundingSharesSupply; - - const manual = ( - await api.query.pooledStaking.pools(candidate, { - ManualRewardsSharesHeldStake: { - delegator: candidate, - }, - }) - ).toBigInt(); - - const selfDelegation = joining + auto + manual; - - expect( - selfDelegation, - `Candidate ${candidate} have self-delegation\n\ - ${selfDelegation} which is below the minimum of\n\ - ${minimum}` - ).toBeGreaterThanOrEqual(minimum); - } - }, - }); - }, -}); diff --git a/test/suites/smoke-test-dancebox/test-staking-session-keys.ts b/test/suites/smoke-test-dancebox/test-staking-session-keys.ts deleted file mode 100644 index 23628a7..0000000 --- a/test/suites/smoke-test-dancebox/test-staking-session-keys.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise } from "@polkadot/api"; - -describeSuite({ - id: "S07", - title: "Check staking eligible candidates have session keys", - foundationMethods: "read_only", - testCases: ({ it, context }) => { - let api: ApiPromise; - let runtimeVersion; - - beforeAll(async () => { - api = context.polkadotJs(); - runtimeVersion = api.runtimeVersion.specVersion.toNumber(); - }); - - it({ - id: "C01", - title: "All eligible candidates have session keys registered", - test: async function () { - if (runtimeVersion < 200) { - return; - } - const allEntries = await api.query.session.keyOwner.entries(); - const accounts = allEntries.map(([, account]) => account.toHuman()); - const keys = allEntries.map(([key]) => key.toHuman()); - - const eligibleCandidates = await api.query.pooledStaking.sortedEligibleCandidates(); - - for (const c of eligibleCandidates) { - const index = accounts.indexOf(c.candidate.toHuman()); - - expect(index, `Candidate ${c.candidate.toHuman()} should have session keys`).not.toBe(-1); - - const allCandidateKeyTypes = keys[index].map(([keyType]) => keyType.toString()); - expect( - allCandidateKeyTypes.indexOf("nmbs"), - `Candidate ${c.candidate.toHuman()} should have nimbus keys` - ).not.toBe(-1); - } - }, - }); - }, -}); diff --git a/test/suites/warp-sync/test_warp_sync.ts b/test/suites/warp-sync/test_warp_sync.ts deleted file mode 100644 index 7d84036..0000000 --- a/test/suites/warp-sync/test_warp_sync.ts +++ /dev/null @@ -1,317 +0,0 @@ -import { beforeAll, describeSuite, expect } from "@moonwall/cli"; -import { ApiPromise, Keyring } from "@polkadot/api"; -import { u8aToHex, stringToHex } from "@polkadot/util"; -import { decodeAddress } from "@polkadot/util-crypto"; -import { getAuthorFromDigest } from "../../util/author"; -import { signAndSendAndInclude, waitSessions } from "../../util/block"; -import { getKeyringNimbusIdHex } from "../../util/keys"; -import { getHeaderFromRelay } from "../../util/relayInterface"; -import fs from "fs/promises"; - -describeSuite({ - id: "W01", - title: "Zombie Tanssi Warp Sync Test", - foundationMethods: "zombie", - testCases: function ({ it, context }) { - let paraApi: ApiPromise; - let relayApi: ApiPromise; - let container2000Api: ApiPromise; - - beforeAll(async () => { - paraApi = context.polkadotJs("Tanssi"); - relayApi = context.polkadotJs("Relay"); - container2000Api = context.polkadotJs("Container2000"); - - const relayNetwork = relayApi.consts.system.version.specName.toString(); - expect(relayNetwork, "Relay API incorrect").to.contain("rococo"); - - const paraNetwork = paraApi.consts.system.version.specName.toString(); - const paraId1000 = (await paraApi.query.parachainInfo.parachainId()).toString(); - expect(paraNetwork, "Para API incorrect").to.contain("dancebox"); - expect(paraId1000, "Para API incorrect").to.be.equal("1000"); - - const container2000Network = container2000Api.consts.system.version.specName.toString(); - const paraId2000 = (await container2000Api.query.parachainInfo.parachainId()).toString(); - expect(container2000Network, "Container2000 API incorrect").to.contain("container-chain-template"); - expect(paraId2000, "Container2000 API incorrect").to.be.equal("2000"); - - // Test block numbers in relay are 0 yet - const header2000 = await getHeaderFromRelay(relayApi, 2000); - - expect(header2000.number.toNumber()).to.be.equal(0); - }, 120000); - - it({ - id: "T01", - title: "Blocks are being produced on parachain", - test: async function () { - const blockNum = (await paraApi.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T03", - title: "Test assignation did not change", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - getKeyringNimbusIdHex("Collator1000-03"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator2000-02")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - }, - }); - - it({ - id: "T04", - title: "Blocks are being produced on container 2000", - test: async function () { - const blockNum = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - expect(blockNum).to.be.greaterThan(0); - }, - }); - - it({ - id: "T06", - title: "Test container chain 2000 assignation is correct", - test: async function () { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const paraId = (await container2000Api.query.parachainInfo.parachainId()).toString(); - const containerChainCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON().containerChains[paraId]; - - // TODO: fix once we have types - const writtenCollators = (await container2000Api.query.authoritiesNoting.authorities()).toJSON(); - - expect(containerChainCollators).to.deep.equal(writtenCollators); - }, - }); - - it({ - id: "T08", - title: "Test author noting is correct for both containers", - timeout: 60000, - test: async function () { - const assignment = await paraApi.query.collatorAssignment.collatorContainerChain(); - const paraId2000 = await container2000Api.query.parachainInfo.parachainId(); - - // TODO: fix once we have types - const containerChainCollators2000 = assignment.containerChains.toJSON()[paraId2000.toString()]; - - await context.waitBlock(3, "Tanssi"); - const author2000 = await paraApi.query.authorNoting.latestAuthor(paraId2000); - - expect(containerChainCollators2000.includes(author2000.toJSON().author)).to.be.true; - }, - }); - - it({ - id: "T09", - title: "Test author is correct in Orchestrator", - test: async function () { - const sessionIndex = (await paraApi.query.session.currentIndex()).toNumber(); - const authorities = await paraApi.query.authorityAssignment.collatorContainerChain(sessionIndex); - const author = await getAuthorFromDigest(paraApi); - // TODO: fix once we have types - expect(authorities.toJSON().orchestratorChain.includes(author.toString())).to.be.true; - }, - }); - - it({ - id: "T10", - title: "Test frontier template isEthereum", - test: async function () { - // TODO: fix once we have types - const genesisData2000 = await paraApi.query.registrar.paraGenesisData(2000); - expect(genesisData2000.toJSON().properties.isEthereum).to.be.false; - }, - }); - - it({ - id: "T12", - title: "Test warp sync: collator rotation from tanssi to container with blocks", - timeout: 300000, - test: async function () { - const keyring = new Keyring({ type: "sr25519" }); - const alice = keyring.addFromUri("//Alice", { name: "Alice default" }); - - // Collator2000-02 should have a container 2000 db, and Collator1000-03 should not - const collator100003DbPath = - getTmpZombiePath() + - "/Collator1000-03/data/containers/chains/simple_container_2000/paritydb/full-container-2000"; - const container200002DbPath = - getTmpZombiePath() + - "/Collator2000-02/data/containers/chains/simple_container_2000/paritydb/full-container-2000"; - expect(await directoryExists(container200002DbPath)).to.be.true; - expect(await directoryExists(collator100003DbPath)).to.be.false; - - // Deregister Collator2000-02, it should delete the db - const invuln = (await paraApi.query.invulnerables.invulnerables()).toJSON(); - - const invulnerable_to_remove = invuln.filter((addr) => { - return u8aToHex(decodeAddress(addr)) == getKeyringNimbusIdHex("Collator2000-02"); - })[0]; - - const tx = paraApi.tx.invulnerables.removeInvulnerable(invulnerable_to_remove); - await signAndSendAndInclude(paraApi.tx.sudo.sudo(tx), alice); - - // New collators will be set after 2 sessions, but because `signAndSendAndInclude` waits - // until the block that includes the extrinsic is finalized, it is possible that we only need to wait - // 1 session. So use a callback to wait 1 or 2 sessions. - await waitSessions(context, paraApi, 2, async () => { - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - // Stop waiting if orchestrator chain has 2 collators instead of 3 - return allCollators.orchestratorChain.length == 2; - }); - - // Collator1000-03 should rotate to container chain 2000 - - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - // TODO: fix once we have types - const allCollators = ( - await paraApi.query.authorityAssignment.collatorContainerChain(currentSession) - ).toJSON(); - const expectedAllCollators = { - orchestratorChain: [ - getKeyringNimbusIdHex("Collator1000-01"), - getKeyringNimbusIdHex("Collator1000-02"), - ], - containerChains: { - "2000": [getKeyringNimbusIdHex("Collator2000-01"), getKeyringNimbusIdHex("Collator1000-03")], - }, - }; - - expect(allCollators).to.deep.equal(expectedAllCollators); - - // The node detects assignment when the block is finalized, but "waitSessions" ignores finality. - // So wait a few blocks more hoping that the current block will be finalized by then. - await context.waitBlock(6, "Tanssi"); - - // Collator2000-02 container chain db should have been deleted - expect(await directoryExists(container200002DbPath)).to.be.false; - - // Collator1000-03 container chain db should be created - expect(await directoryExists(collator100003DbPath)).to.be.true; - }, - }); - - it({ - id: "T13", - title: "Collator1000-03 is producing blocks on Container 2000", - timeout: 300000, - test: async function () { - const blockStart = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber() - 3; - // Wait up to 8 blocks, giving the new collator 4 chances to build a block - const blockEnd = blockStart + 8; - const authors = []; - - for (let blockNumber = blockStart; blockNumber <= blockEnd; blockNumber += 1) { - // Get the latest author from Digest - const blockHash = await container2000Api.rpc.chain.getBlockHash(blockNumber); - const apiAt = await container2000Api.at(blockHash); - const digests = (await apiAt.query.system.digest()).logs; - const filtered = digests.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("nmbs") - ); - const author = filtered[0].asPreRuntime[1].toHex(); - authors.push(author); - if (author == getKeyringNimbusIdHex("Collator1000-03")) { - break; - } - const currentBlock = (await container2000Api.rpc.chain.getBlock()).block.header.number.toNumber(); - if (currentBlock == blockNumber) { - await context.waitBlock(1, "Container2000"); - } - } - - expect(authors).to.contain(getKeyringNimbusIdHex("Collator1000-03")); - }, - }); - - it({ - id: "T14", - title: "Check Collator1000-03.log to ensure it used warp sync", - timeout: 300000, - test: async function () { - // Use collator logs to ensure that it used warp sync to first the first time. - // Not ideal because logs can change, but better than nothing. - const logFilePath = getTmpZombiePath() + "/Collator1000-03.log"; - await checkLogs(logFilePath, [ - "[Orchestrator] Detected assignment for container chain 2000", - "[Orchestrator] Loaded chain spec for container chain 2000", - "[Orchestrator] This is a syncing container chain, using random ports", - "[Orchestrator] Container chain sync mode: Warp", - "[Container-2000] Warp sync is complete", - "[Orchestrator] Detected assignment for container chain 2000", - "[Orchestrator] Loaded chain spec for container chain 2000", - "[Orchestrator] Restarting container chain 2000", - "[Orchestrator] Container chain sync mode: Full", - ]); - }, - }); - }, -}); - -// Read log file path and check that all the logs are found in order. -// Only supports single-line logs. -async function checkLogs(logFilePath: string, logs: string[]): Promise { - const fileContent = await fs.readFile(logFilePath, "utf8"); - const lines = fileContent.split("\n"); - - let logIndex = 0; - let lastFoundLogIndex = 0; - - for (let i = 0; i < lines.length; i++) { - if (logIndex < logs.length && lines[i].includes(logs[logIndex])) { - logIndex++; - lastFoundLogIndex = i; - } - - if (logIndex === logs.length) { - break; - } - } - - if (logIndex !== logs.length) { - // In case of missing logs, show some context around the last found log - const contextSize = 3; - const contextStart = Math.max(0, lastFoundLogIndex - contextSize); - const contextEnd = Math.min(lines.length - 1, lastFoundLogIndex + contextSize); - const contextLines = lines.slice(contextStart, contextEnd + 1); - const contextStr = contextLines.join("\n"); - - expect.fail( - `Not all logs were found in the correct order. Missing log: '${logs[logIndex]}'\nContext around the last found log:\n${contextStr}` - ); - } -} - -async function directoryExists(directoryPath) { - try { - await fs.access(directoryPath, fs.constants.F_OK); - return true; - } catch (err) { - return false; - } -} - -/// Returns the /tmp/zombie-52234... path -function getTmpZombiePath() { - return process.env.MOON_ZOMBIE_DIR; -} diff --git a/test/tsconfig.json b/test/tsconfig.json deleted file mode 100644 index 313f486..0000000 --- a/test/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "module": "ESNext", - "target": "ESNext", - "baseUrl": "./", - "moduleResolution": "Bundler", - "importHelpers": true, - "skipLibCheck": true, - "removeComments": true, - "noEmit": true, - "preserveConstEnums": true, - "sourceMap": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "forceConsistentCasingInFileNames": true, - "allowImportingTsExtensions": true, - }, - "include": [ - "*suites/**/*.ts", - "util/*.ts", - "tools/*.ts", - "helpers/compiled/*.json" - ], - "exclude": ["node_modules/"] -} \ No newline at end of file diff --git a/test/util/author.ts b/test/util/author.ts deleted file mode 100644 index e69a12e..0000000 --- a/test/util/author.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ApiPromise } from "@moonwall/cli"; -import { stringToHex } from "@polkadot/util"; - -export async function getAuthorFromDigest(paraApi: ApiPromise): Promise { - // Get the latest author from Digest - const digests = (await paraApi.query.system.digest()).logs; - const filtered = digests.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("nmbs") - ); - return filtered[0].asPreRuntime[1].toHex(); -} - -/// Range inclusive -export async function getAuthorFromDigestRange( - paraApi: ApiPromise, - blockStart: number, - blockEnd: number -): Promise { - const authors = []; - - for (let blockNumber = blockStart; blockNumber <= blockEnd; blockNumber += 1) { - // Get the latest author from Digest - const blockHash = await paraApi.rpc.chain.getBlockHash(blockNumber); - const apiAt = await paraApi.at(blockHash); - const digests = (await apiAt.query.system.digest()).logs; - const filtered = digests.filter( - (log) => log.isPreRuntime === true && log.asPreRuntime[0].toHex() == stringToHex("nmbs") - ); - const author = filtered[0].asPreRuntime[1].toHex(); - authors.push([blockNumber, author]); - } - - return authors; -} diff --git a/test/util/block.ts b/test/util/block.ts deleted file mode 100644 index 1238275..0000000 --- a/test/util/block.ts +++ /dev/null @@ -1,282 +0,0 @@ -import { DevModeContext, expect } from "@moonwall/cli"; -import { filterAndApply } from "@moonwall/util"; - -import { ApiPromise } from "@polkadot/api"; -import { AccountId32, EventRecord } from "@polkadot/types/interfaces"; -import { Vec, u8, u32, bool } from "@polkadot/types-codec"; -export async function jumpSessions(context: DevModeContext, count: number): Promise { - const session = (await context.polkadotJs().query.session.currentIndex()).addn(count.valueOf()).toNumber(); - - return jumpToSession(context, session); -} - -export async function jumpToSession(context: DevModeContext, session: number): Promise { - let lastBlockHash = null; - for (;;) { - const currentSession = (await context.polkadotJs().query.session.currentIndex()).toNumber(); - if (currentSession === session) { - return lastBlockHash; - } else if (currentSession > session) { - return null; - } - - lastBlockHash = (await context.createBlock()).block.hash.toString(); - } -} - -export async function jumpBlocks(context: DevModeContext, blockCount: number) { - while (blockCount > 0) { - await context.createBlock(); - blockCount--; - } -} - -export async function jumpToBlock(context: DevModeContext, targetBlockNumber: number) { - let blockNumber = (await context.polkadotJs().rpc.chain.getBlock()).block.header.number.toNumber(); - - while (blockNumber + 1 < targetBlockNumber) { - await context.createBlock(); - blockNumber = (await context.polkadotJs().rpc.chain.getBlock()).block.header.number.toNumber(); - } -} - -export async function waitSessions( - context, - paraApi: ApiPromise, - count: number, - earlyExit?: () => Promise | boolean -): Promise { - const session = (await paraApi.query.session.currentIndex()).addn(count.valueOf()).toNumber(); - - return waitToSession(context, paraApi, session, earlyExit); -} - -export async function waitToSession( - context, - paraApi: ApiPromise, - session: number, - earlyExit?: () => Promise | boolean -): Promise { - for (;;) { - if (earlyExit && (await earlyExit())) { - // Exit early if the callback returns true - return null; - } - - const currentSession = (await paraApi.query.session.currentIndex()).toNumber(); - if (currentSession === session) { - const signedBlock = await paraApi.rpc.chain.getBlock(); - return signedBlock.block.header.hash.toString(); - } else if (currentSession > session) { - return null; - } - - await context.waitBlock(1, "Tanssi"); - } -} - -export function extractFeeAuthor(events: EventRecord[] = [], feePayer: string) { - const filtered = filterAndApply( - events, - "balances", - ["Withdraw"], - ({ event }: EventRecord) => event.data as unknown as { who: AccountId32; amount: u128 } - ); - const extractFeeFromAuthor = filtered.filter(({ who }) => who.toString() === feePayer); - return extractFeeFromAuthor[0]; -} - -export function fetchRewardAuthorOrchestrator(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "inflationRewards", - ["RewardedOrchestrator"], - ({ event }: EventRecord) => event.data as unknown as { accountId: AccountId32; balance: u128 } - ); - - return filtered[0]; -} - -export function filterRewardStakingCollator(events: EventRecord[] = [], author: string) { - const stakignRewardEvents = fetchRewardStakingCollators(events); - for (const index in stakignRewardEvents) { - if (stakignRewardEvents[index].collator.toString() === author) { - return { - manualRewards: stakignRewardEvents[index].manualClaimRewards.toBigInt(), - autoCompoundingRewards: stakignRewardEvents[index].autoCompoundingRewards.toBigInt(), - }; - } - } - - return { - manualRewards: 0n, - autoCompoundingRewards: 0n, - }; -} - -export function filterRewardStakingDelegators(events: EventRecord[] = [], author: string) { - const stakignRewardEvents = fetchRewardStakingDelegators(events); - for (const index in stakignRewardEvents) { - if (stakignRewardEvents[index].collator.toString() === author) { - return { - manualRewards: stakignRewardEvents[index].manualClaimRewards.toBigInt(), - autoCompoundingRewards: stakignRewardEvents[index].autoCompoundingRewards.toBigInt(), - }; - } - } - - return { - manualRewards: 0n, - autoCompoundingRewards: 0n, - }; -} - -export function fetchRewardStakingDelegators(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "pooledStaking", - ["RewardedDelegators"], - ({ event }: EventRecord) => - event.data as unknown as { collator: AccountId32; autoCompoundingRewards: u128; manualClaimRewards: u128 } - ); - - return filtered; -} - -export function fetchRewardStakingCollators(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "pooledStaking", - ["RewardedCollator"], - ({ event }: EventRecord) => - event.data as unknown as { collator: AccountId32; autoCompoundingRewards: u128; manualClaimRewards: u128 } - ); - - return filtered; -} - -export function fetchRewardAuthorContainers(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "inflationRewards", - ["RewardedContainer"], - ({ event }: EventRecord) => event.data as unknown as { accountId: AccountId32; paraId: ParaId; balance: u128 } - ); - - return filtered; -} - -export function fetchRandomnessEvent(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "collatorAssignment", - ["NewPendingAssignment"], - ({ event }: EventRecord) => - event.data as unknown as { randomSeed: Vec; fullRotation: bool; targetSession: u32 } - ); - - return filtered[0]; -} - -export function fetchIssuance(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "balances", - ["Issued"], - ({ event }: EventRecord) => event.data as unknown as { amount: u128 } - ); - - return filtered[0]; -} - -export function fetchCollatorAssignmentTip(events: EventRecord[] = []) { - const filtered = filterAndApply( - events, - "servicesPayment", - ["CollatorAssignmentTipCollected"], - ({ event }: EventRecord) => event.data as unknown as { paraId: ParaId; payer: AccountId32; tip: u128 } - ); - - return filtered[0]; -} - -export function filterRewardFromOrchestratorWithFailure(events: EventRecord[] = [], author: string) { - const reward = fetchRewardAuthorOrchestrator(events); - expect(reward, `orchestrator rewards event not found`).not.toBe(undefined); - expect( - reward.accountId.toString() === author, - `orchestrator author ${reward.accountId.toString()} does not match expected author ${author}` - ).to.be.true; - return reward.balance.toBigInt(); -} - -export function filterRewardFromOrchestrator(events: EventRecord[] = [], author: string) { - const reward = fetchRewardAuthorOrchestrator(events); - if (reward === undefined || reward.accountId.toString() !== author) { - return 0n; - } else { - return reward.balance.toBigInt(); - } -} - -export function filterRewardFromContainer(events: EventRecord[] = [], feePayer: string, paraId: ParaId) { - const rewardEvents = fetchRewardAuthorContainers(events); - for (const index in rewardEvents) { - if ( - rewardEvents[index].accountId.toString() === feePayer && - rewardEvents[index].paraId.toString() === paraId.toString() - ) { - return rewardEvents[index].balance.toBigInt(); - } - } - return 0n; -} - -/// Same as tx.signAndSend(account), except that it waits for the transaction to be included in a block: -/// -/// ``` -/// const txHash = await tx.signAndSend(alice); -/// // We don't know if the transaction has been included in a block or not -/// const { txHash, blockHash } = await signAndSendAndInclude(tx, alice); -/// // We know the blockHash of the block that includes this transaction -/// ``` -export function signAndSendAndInclude(tx, account): Promise<{ txHash; blockHash; status }> { - return new Promise((resolve) => { - tx.signAndSend(account, ({ status, txHash }) => { - if (status.isFinalized) { - resolve({ - txHash, - blockHash: status.asFinalized, - status, - }); - } - }); - }); -} - -export function initializeCustomCreateBlock(context): any { - if (!context.hasModifiedCreateBlockThatChecksExtrinsics) { - const originalCreateBlock = context.createBlock; - // Alternative implementation of context.createBlock that checks that the extrinsics have - // actually been included in the created block. - const createBlockAndCheckExtrinsics = async (tx, opt) => { - if (tx === undefined) { - return await originalCreateBlock(tx, opt); - } else { - const res = await originalCreateBlock(tx, opt); - // Ensure that all the extrinsics have been included - const txs = Array.isArray(tx) ? tx : [tx]; - const expectedTxHashes = txs.map((x) => x.hash.toString()); - const block = await context.polkadotJs().rpc.chain.getBlock(res.block.hash); - const includedTxHashes = block.block.extrinsics.map((x) => x.hash.toString()); - // Note, the block may include some additional extrinsics - expectedTxHashes.forEach((a) => { - expect(includedTxHashes).toContain(a); - }); - return res; - } - }; - context.createBlock = createBlockAndCheckExtrinsics; - context.hasModifiedCreateBlockThatChecksExtrinsics = true; - } -} diff --git a/test/util/constants.ts b/test/util/constants.ts deleted file mode 100644 index 44b1fe4..0000000 --- a/test/util/constants.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const PARACHAIN_BOND = "5EYCAe5cJkHcthonN7KrsVp11XYHMqtrFPimDd3Af755ET2D"; -export const DANCE = 1_000_000_000_000n; -export const STAKING_ACCOUNT = "5EYCAe5cHvXp3GAe94dYPGjLqQdn7cnYuENAn66SntQkNTAG"; -export const RELAY_SOURCE_LOCATION = { parents: 1, interior: "Here" }; -export const RELAY_SOURCE_LOCATION_2 = { parents: 2, interior: "Here" }; -export const STATEMINT_LOCATION_EXAMPLE = { - parents: 1, - interior: { - X3: [{ Parachain: 1000 }, { PalletInstance: 50 }, { GeneralIndex: 0n }], - }, -}; diff --git a/test/util/ethereum-contracts.ts b/test/util/ethereum-contracts.ts deleted file mode 100644 index c0a4493..0000000 --- a/test/util/ethereum-contracts.ts +++ /dev/null @@ -1,60 +0,0 @@ -import Web3 from "web3"; -import fs from "fs"; -import path from "path"; -import { TransactionReceipt } from "web3-core"; -import { Contract } from "web3-eth-contract"; -import { AbiItem } from "web3-utils"; -import { ALITH_PRIVATE_KEY, alith } from "@moonwall/util"; -import { customWeb3Request } from "@moonwall/util"; - -export interface Compiled { - byteCode: string; - contract: any; - sourceCode: string; -} - -export function getAllContracts(): string[] { - const contractsPath = path.join(__dirname, `../helpers/compiled/`); - const contracts = fs.readdirSync(contractsPath, { withFileTypes: true }); - // Register all the contract code - return contracts.filter((dirent) => dirent.isFile()).map((contract) => path.basename(contract.name, ".json")); -} - -const contracts: { [name: string]: Compiled } = {}; -export function getCompiled(name: string): Compiled { - if (!fs.existsSync(path.join(__dirname, `../helpers/compiled/${name}.json`))) { - throw new Error(`Contract name (${name}) doesn't exist in test suite`); - } - if (!contracts[name]) { - try { - contracts[name] = require(`../helpers/compiled/${name}.json`); - } catch (e) { - throw new Error(`Contract name ${name} is not compiled. Please run 'npm run pre-build-contracts`); - } - } - - return contracts[name]; -} - -// Deploy and instantiate a contract with manuel seal -export async function deployContractManualSeal( - web3: Web3, - contractByteCode: string, - contractABI: AbiItem[], - account: string = alith.address, - privateKey: string = ALITH_PRIVATE_KEY -): Promise { - const tx = await web3.eth.accounts.signTransaction( - { - from: account, - data: contractByteCode, - value: "0x00", - gasPrice: 10_000_000_000, - gas: "0x100000", - }, - privateKey - ); - await customWeb3Request(web3, "eth_sendRawTransaction", [tx.rawTransaction]); - const rcpt: TransactionReceipt = await web3.eth.getTransactionReceipt(tx.transactionHash); - return new web3.eth.Contract(contractABI, rcpt.contractAddress); -} diff --git a/test/util/ethereum.ts b/test/util/ethereum.ts deleted file mode 100644 index 06f256f..0000000 --- a/test/util/ethereum.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { DevModeContext, EthTransactionType, MoonwallContext } from "@moonwall/cli"; -import { ALITH_PRIVATE_KEY, TransactionOptions, alith, customWeb3Request } from "@moonwall/util"; -import { ethers } from "ethers"; -import { FMT_BYTES, FMT_NUMBER } from "web3"; - -import Debug from "debug"; -import { fromHex } from "viem"; -const debug = Debug("test:transaction"); - -export const createTransaction = async ( - context: DevModeContext, - options: TransactionOptions, - txType?: EthTransactionType -): Promise => { - const defaultTxnStyle = (await MoonwallContext.getContext())!.defaultEthTxnStyle; - - const isLegacy = txType ? txType === "Legacy" : defaultTxnStyle ? defaultTxnStyle === "Legacy" : true; - - const isEip2930 = txType ? txType === "EIP2930" : defaultTxnStyle ? defaultTxnStyle === "EIP2930" : true; - - const isEip1559 = txType ? txType === "EIP1559" : defaultTxnStyle ? defaultTxnStyle === "EIP1559" : true; - - // a transaction shouldn't have both Legacy and EIP1559 fields - if (options.gasPrice && options.maxFeePerGas) { - throw new Error(`txn has both gasPrice and maxFeePerGas!`); - } - if (options.gasPrice && options.maxPriorityFeePerGas) { - throw new Error(`txn has both gasPrice and maxPriorityFeePerGas!`); - } - - // convert any bigints to hex - if (typeof options.gasPrice === "bigint") { - options.gasPrice = "0x" + options.gasPrice.toString(16); - } - if (typeof options.maxFeePerGas === "bigint") { - options.maxFeePerGas = "0x" + options.maxFeePerGas.toString(16); - } - if (typeof options.maxPriorityFeePerGas === "bigint") { - options.maxPriorityFeePerGas = "0x" + options.maxPriorityFeePerGas.toString(16); - } - - let maxFeePerGas; - let maxPriorityFeePerGas; - if (options.gasPrice) { - maxFeePerGas = options.gasPrice; - maxPriorityFeePerGas = options.gasPrice; - } else { - maxFeePerGas = options.maxFeePerGas || (await context.ethers().provider?.getFeeData())!.gasPrice; - maxPriorityFeePerGas = options.maxPriorityFeePerGas || 0; - } - - const gasPrice = - options.gasPrice !== undefined - ? options.gasPrice - : "0x" + (await context.web3().eth.getGasPrice({ number: FMT_NUMBER.HEX, bytes: FMT_BYTES.HEX })); - const value = options.value !== undefined ? options.value : "0x00"; - const from = options.from || alith.address; - const privateKey = options.privateKey !== undefined ? options.privateKey : ALITH_PRIVATE_KEY; - - // Allows to retrieve potential errors - let error = ""; - const estimatedGas = await context - .web3() - .eth.estimateGas({ - from: from, - to: options.to, - data: options.data, - }) - .catch((e) => { - error = e; - return options.gas || 12_500_000; - }); - - let warning = ""; - if (options.gas && options.gas < estimatedGas) { - warning = `Provided gas ${options.gas} is lower than estimated gas ${estimatedGas}`; - } - // Instead of hardcoding the gas limit, we estimate the gas - const gas = options.gas || estimatedGas; - - const accessList = options.accessList || []; - const nonce = options.nonce != null ? options.nonce : await context.web3().eth.getTransactionCount(from, "pending"); - // : await context.ethers().provider!.getTransactionCount(from, "pending"); - - let data, rawTransaction; - const provider = context.ethers().provider!; - // const provider = context.web3().provider - // const newSigner = new ethers.Wallet(privateKey, provider); - if (isLegacy) { - data = { - from, - to: options.to, - value: value && value.toString(), - gasPrice, - gas, - nonce: nonce, - data: options.data, - }; - // rawTransaction = await newSigner.signTransaction(data); - // rawTransaction = await context.web3().eth.signTransaction(data); - const tx = await context.web3().eth.accounts.signTransaction(data as any, privateKey); - rawTransaction = tx.rawTransaction; - } else { - const signer = new ethers.Wallet(privateKey, context.ethers().provider!); - const chainId = (await provider.getNetwork()).chainId; - // const chainId = await context.web3().eth.getChainId() - if (isEip2930) { - data = { - from, - to: options.to, - value: value && value.toString(), - gasPrice, - gasLimit: gas, - nonce: nonce, - data: options.data, - accessList, - chainId, - type: 1, - }; - } else { - if (!isEip1559) { - throw new Error("Unknown transaction type!"); - } - - data = { - from, - to: options.to, - value: value && value.toString(), - maxFeePerGas, - maxPriorityFeePerGas, - gasLimit: gas, - nonce: nonce, - data: options.data, - accessList, - chainId, - type: 2, - }; - } - // rawTransaction = await newSigner.signTransaction(data as TransactionRequest); - rawTransaction = await signer.signTransaction(data as any); - } - - debug( - `TransactionDetails` + - (data.to ? `to: ${data.to.substr(0, 5) + "..." + data.to.substr(data.to.length - 3)}, ` : "") + - (data.value ? `value: ${data.value.toString()}, ` : "") + - (data.gasPrice ? `gasPrice: ${data.gasPrice.toString()}, ` : "") + - (data.maxFeePerGas ? `maxFeePerGas: ${data.maxFeePerGas.toString()}, ` : "") + - (data.maxPriorityFeePerGas ? `maxPriorityFeePerGas: ${data.maxPriorityFeePerGas.toString()}, ` : "") + - (data.accessList ? `accessList: ${data.accessList.toString()}, ` : "") + - (data.gas ? `gas: ${data.gas.toString()}, ` : "") + - (data.nonce ? `nonce: ${data.nonce.toString()}, ` : "") + - (!data.data - ? "" - : `data: ${ - data.data.length < 50 - ? data.data - : data.data.substr(0, 5) + "..." + data.data.substr(data.data.length - 3) - }, `) + - (error ? `ERROR: ${error.toString()}, ` : "") + - (warning ? `WARN: ${warning.toString()}, ` : "") - ); - return rawTransaction; -}; - -export const createTransfer = async ( - context: DevModeContext, - to: string, - value: number | string | bigint, - options: TransactionOptions = ALITH_TRANSACTION_TEMPLATE -): Promise => { - return await createTransaction(context, { - ...options, - value: value.toString(), - to, - }); -}; - -export const TRANSACTION_TEMPLATE: TransactionOptions = { - // nonce: null, - gas: 500_000, - value: "0x00", -}; - -export const ALITH_TRANSACTION_TEMPLATE: TransactionOptions = { - ...TRANSACTION_TEMPLATE, - from: alith.address, - privateKey: ALITH_PRIVATE_KEY, -}; - -/// Await for a promise resolution while we wait for the tx hash to be included -/// This will tipically be waiting for new blocks -export async function waitUntilEthTxIncluded(promise, web3, txHash) { - while ((await customWeb3Request(web3, "eth_getTransactionByHash", [txHash])).result.blockNumber == null) { - await promise(); - } -} - -export function getSignatureParameters(signature: string) { - const r = signature.slice(0, 66); // 32 bytes - const s = `0x${signature.slice(66, 130)}`; // 32 bytes - let v = fromHex(`0x${signature.slice(130, 132)}`, "number"); // 1 byte - - if (![27, 28].includes(v)) v += 27; // not sure why we coerce 27 - - return { - r, - s, - v, - }; -} diff --git a/test/util/genesis_data.ts b/test/util/genesis_data.ts deleted file mode 100644 index 2c8093e..0000000 --- a/test/util/genesis_data.ts +++ /dev/null @@ -1,89 +0,0 @@ -/// Utilities to convert from ChainSpec to ContainerChainGenesisData and back - -import { ApiPromise } from "@polkadot/api"; -import { hexToString, stringToHex } from "@polkadot/util"; - -export function chainSpecToContainerChainGenesisData(paraApi: ApiPromise, chainSpec: any): any { - const storage = chainSpecStorageToOnChainStorage(chainSpec.genesis); - const extensions = "0x"; - const properties = chainSpecPropertiesToOnChainProperties(chainSpec.properties); - const g = paraApi.createType("TpContainerChainGenesisDataContainerChainGenesisData", { - storage: storage, - name: stringToHex(chainSpec.name), - id: stringToHex(chainSpec.id), - forkId: chainSpec.forkId ? stringToHex(chainSpec.forkId) : null, - extensions: extensions, - properties: properties, - }); - return g; -} - -export function containerChainGenesisDataToChainSpec( - containerChainGenesisData: any, - para_id: any, - chainType: any, - relay_chain: any -): any { - const g = { - name: hexToString(containerChainGenesisData.name.toHex()), - id: hexToString(containerChainGenesisData.id.toHex()), - forkId: containerChainGenesisData.forkId.isSome ? hexToString(containerChainGenesisData.forkId.toHex()) : null, - chainType: chainType, - bootNodes: [], - telemetryEndpoints: null, - protocolId: `container-chain-${para_id}`, - properties: onChainPropertiesToChainSpecProperties(containerChainGenesisData.properties), - relay_chain: relay_chain, - para_id: para_id, - codeSubstitutes: {}, - genesis: onChainStorageToChainSpecStorage(containerChainGenesisData.storage), - }; - return g; -} - -export function chainSpecStorageToOnChainStorage(genesis: any): any { - return Object.entries(genesis.raw.top).map((keyValue) => { - const [key, value] = keyValue; - - return { - key: key, - value: value, - }; - }); -} - -export function onChainStorageToChainSpecStorage(storage: any): any { - const top = {}; - - storage.forEach((x) => { - top[x.key.toHex()] = x.value.toHex(); - }); - - const s = { - raw: { - top: top, - childrenDefault: {}, - }, - }; - return s; -} - -export function chainSpecPropertiesToOnChainProperties(properties: any): any { - return { - tokenMetadata: { - tokenSymbol: stringToHex(properties.tokenSymbol), - ss58Format: properties.ss58Format, - tokenDecimals: properties.tokenDecimals, - }, - isEthereum: properties.isEthereum || false, - }; -} - -export function onChainPropertiesToChainSpecProperties(properties: any): any { - return { - tokenSymbol: hexToString(properties.tokenMetadata.tokenSymbol.toHex()), - ss58Format: properties.tokenMetadata.ss58Format.toNumber(), - tokenDecimals: properties.tokenMetadata.tokenDecimals.toNumber(), - isEthereum: properties.isEthereum == true ? true : false, - }; -} diff --git a/test/util/invulnerables.ts b/test/util/invulnerables.ts deleted file mode 100644 index 35ba43e..0000000 --- a/test/util/invulnerables.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DevModeContext } from "@moonwall/cli"; -import { KeyringPair } from "@moonwall/util"; - -export async function createBlockAndRemoveInvulnerables(context: DevModeContext, sudoKey: KeyringPair) { - let nonce = (await context.polkadotJs().rpc.system.accountNextIndex(sudoKey.address)).toNumber(); - const invulnerables = await context.polkadotJs().query.invulnerables.invulnerables(); - - const txs = invulnerables.map((invulnerable) => - context - .polkadotJs() - .tx.sudo.sudo(context.polkadotJs().tx.invulnerables.removeInvulnerable(invulnerable)) - .signAsync(sudoKey, { nonce: nonce++ }) - ); - - await context.createBlock(txs); -} diff --git a/test/util/keys.ts b/test/util/keys.ts deleted file mode 100644 index c942e3c..0000000 --- a/test/util/keys.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Keyring } from "@polkadot/api"; -import { u8aToHex } from "@polkadot/util"; - -export function getKeyringNimbusIdHex(name: string) { - const keyring = new Keyring({ type: "sr25519" }); - const key = keyring.addFromUri("//" + name, { name: name + " default" }); - return u8aToHex(key.publicKey); -} diff --git a/test/util/payment.ts b/test/util/payment.ts deleted file mode 100644 index 26e15a2..0000000 --- a/test/util/payment.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { bnToU8a, stringToU8a } from "@polkadot/util"; -import { blake2AsU8a } from "@polkadot/util-crypto"; -import { ApiPromise } from "@polkadot/api"; - -// Tank account is blake2(b"modlpy/serpayment" + parahain ID) -export function paraIdTank(paraId: any): any { - const seedBytes = stringToU8a("modlpy/serpayment"); - const paraIdBytes = bnToU8a(paraId, { bitLength: 32 }); - const combinedBytes = new Uint8Array(seedBytes.length + paraIdBytes.length); - combinedBytes.set(seedBytes); - combinedBytes.set(paraIdBytes, seedBytes.length); - const para_tank = blake2AsU8a(combinedBytes, 256); - return para_tank; -} - -export async function hasEnoughCredits( - paraApi: ApiPromise, - paraId: ParaId, - blocksPerSession: bigint, - // TODO: minSessionRequirement should be 2 if the chain had collators in the previous session, and 1 otherwise - minSessionRequirement: bigint, - costPerSession: bigint, - costPerBlock: bigint -): Promise { - const existentialDeposit = await paraApi.consts.balances.existentialDeposit.toBigInt(); - - const freeBlockCredits = (await paraApi.query.servicesPayment.blockProductionCredits(paraId)).unwrap().toBigInt(); - - const freeSessionCredits = (await paraApi.query.servicesPayment.collatorAssignmentCredits(paraId)) - .unwrap() - .toBigInt(); - - // We need, combined, at least credits for 2 session coverage + blocks - const neededBlockPaymentAfterCredits = - minSessionRequirement * blocksPerSession - freeBlockCredits < 0n - ? 0n - : minSessionRequirement * blocksPerSession - freeBlockCredits; - const neededCollatorAssignmentPaymentAfterCredits = - minSessionRequirement - freeSessionCredits < 0n ? 0n : minSessionRequirement - freeSessionCredits; - - if (neededBlockPaymentAfterCredits > 0n || neededCollatorAssignmentPaymentAfterCredits > 0n) { - const neededTankMoney = - existentialDeposit + - neededCollatorAssignmentPaymentAfterCredits * costPerSession + - neededBlockPaymentAfterCredits * costPerBlock; - const tankBalance = (await paraApi.query.system.account(paraIdTank(paraId))).data.free.toBigInt(); - if (tankBalance >= neededTankMoney) { - return true; - } else { - return false; - } - } else { - return true; - } -} diff --git a/test/util/relayInterface.ts b/test/util/relayInterface.ts deleted file mode 100644 index 80c92cb..0000000 --- a/test/util/relayInterface.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiPromise } from "@polkadot/api"; -import type { Header, ParaId } from "@polkadot/types/interfaces"; - -export async function getHeaderFromRelay(relayApi: ApiPromise, paraId: ParaId): Promise